@basementstudio/shader-lab 0.1.0 → 1.0.2

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 (399) hide show
  1. package/dist/src/easings.d.ts +3 -0
  2. package/dist/src/easings.js +3 -0
  3. package/dist/src/index.d.ts +5 -0
  4. package/dist/src/index.js +4 -0
  5. package/dist/src/lib/editor/custom-shader/shared.d.ts +1 -0
  6. package/dist/src/lib/editor/custom-shader/shared.js +1 -0
  7. package/dist/src/renderer/ascii-atlas.d.ts +5 -0
  8. package/dist/src/renderer/ascii-atlas.js +61 -0
  9. package/dist/src/renderer/ascii-pass.d.ts +50 -0
  10. package/dist/src/renderer/ascii-pass.js +271 -0
  11. package/dist/src/renderer/asset-url.d.ts +1 -0
  12. package/dist/src/renderer/asset-url.js +3 -0
  13. package/dist/src/renderer/blend-modes.d.ts +4 -0
  14. package/dist/src/renderer/blend-modes.js +157 -0
  15. package/dist/src/renderer/contracts.d.ts +26 -0
  16. package/dist/src/renderer/contracts.js +13 -0
  17. package/dist/src/renderer/create-webgpu-renderer.d.ts +3 -0
  18. package/dist/src/renderer/create-webgpu-renderer.js +37 -0
  19. package/dist/src/renderer/crt-pass.d.ts +72 -0
  20. package/dist/src/renderer/crt-pass.js +536 -0
  21. package/dist/src/renderer/custom-shader-pass.d.ts +17 -0
  22. package/dist/src/renderer/custom-shader-pass.js +79 -0
  23. package/dist/src/renderer/custom-shader-runtime.d.ts +16 -0
  24. package/dist/src/renderer/custom-shader-runtime.js +169 -0
  25. package/dist/src/renderer/dither-textures.d.ts +8 -0
  26. package/dist/src/renderer/dither-textures.js +66 -0
  27. package/dist/src/renderer/dithering-pass.d.ts +45 -0
  28. package/dist/src/renderer/dithering-pass.js +229 -0
  29. package/dist/src/renderer/gradient-pass.d.ts +39 -0
  30. package/dist/src/renderer/gradient-pass.js +358 -0
  31. package/dist/src/renderer/halftone-pass.d.ts +65 -0
  32. package/dist/src/renderer/halftone-pass.js +530 -0
  33. package/dist/src/renderer/ink-pass.d.ts +84 -0
  34. package/dist/src/renderer/ink-pass.js +526 -0
  35. package/dist/src/renderer/live-pass.d.ts +31 -0
  36. package/dist/src/renderer/live-pass.js +136 -0
  37. package/dist/src/renderer/media-pass.d.ts +32 -0
  38. package/dist/src/renderer/media-pass.js +130 -0
  39. package/dist/src/renderer/media-texture.d.ts +8 -0
  40. package/dist/src/renderer/media-texture.js +41 -0
  41. package/dist/src/renderer/particle-grid-pass.d.ts +48 -0
  42. package/dist/src/renderer/particle-grid-pass.js +269 -0
  43. package/dist/src/renderer/pass-node.d.ts +36 -0
  44. package/dist/src/renderer/pass-node.js +120 -0
  45. package/dist/src/renderer/pattern-atlas.d.ts +8 -0
  46. package/dist/src/renderer/pattern-atlas.js +79 -0
  47. package/dist/src/renderer/pattern-pass.d.ts +58 -0
  48. package/dist/src/renderer/pattern-pass.js +316 -0
  49. package/dist/src/renderer/pipeline-manager.d.ts +39 -0
  50. package/dist/src/renderer/pipeline-manager.js +287 -0
  51. package/dist/src/renderer/pixel-sorting-pass.d.ts +33 -0
  52. package/dist/src/renderer/pixel-sorting-pass.js +179 -0
  53. package/dist/src/renderer/shaders/tsl/color/tonemapping.d.ts +9 -0
  54. package/dist/src/renderer/shaders/tsl/color/tonemapping.js +59 -0
  55. package/dist/src/renderer/shaders/tsl/cosine-palette.d.ts +4 -0
  56. package/{packages/shader-lab-react/src/renderer/shaders/tsl/cosine-palette.ts → dist/src/renderer/shaders/tsl/cosine-palette.js} +3 -4
  57. package/dist/src/renderer/shaders/tsl/noise/common.d.ts +5 -0
  58. package/dist/src/renderer/shaders/tsl/noise/common.js +24 -0
  59. package/dist/src/renderer/shaders/tsl/noise/curl-noise-3d.d.ts +1 -0
  60. package/dist/src/renderer/shaders/tsl/noise/curl-noise-3d.js +27 -0
  61. package/dist/src/renderer/shaders/tsl/noise/curl-noise-4d.d.ts +1 -0
  62. package/dist/src/renderer/shaders/tsl/noise/curl-noise-4d.js +27 -0
  63. package/dist/src/renderer/shaders/tsl/noise/fbm.d.ts +1 -0
  64. package/dist/src/renderer/shaders/tsl/noise/fbm.js +11 -0
  65. package/dist/src/renderer/shaders/tsl/noise/perlin-noise-3d.d.ts +5 -0
  66. package/dist/src/renderer/shaders/tsl/noise/perlin-noise-3d.js +66 -0
  67. package/dist/src/renderer/shaders/tsl/noise/ridge-noise.d.ts +1 -0
  68. package/dist/src/renderer/shaders/tsl/noise/ridge-noise.js +19 -0
  69. package/dist/src/renderer/shaders/tsl/noise/simplex-noise-3d.d.ts +1 -0
  70. package/dist/src/renderer/shaders/tsl/noise/simplex-noise-3d.js +44 -0
  71. package/dist/src/renderer/shaders/tsl/noise/simplex-noise-4d.d.ts +1 -0
  72. package/dist/src/renderer/shaders/tsl/noise/simplex-noise-4d.js +51 -0
  73. package/dist/src/renderer/shaders/tsl/noise/turbulence.d.ts +7 -0
  74. package/dist/src/renderer/shaders/tsl/noise/turbulence.js +34 -0
  75. package/dist/src/renderer/shaders/tsl/noise/value-noise-3d.d.ts +1 -0
  76. package/dist/src/renderer/shaders/tsl/noise/value-noise-3d.js +27 -0
  77. package/dist/src/renderer/shaders/tsl/noise/voronoi-noise-3d.d.ts +1 -0
  78. package/dist/src/renderer/shaders/tsl/noise/voronoi-noise-3d.js +45 -0
  79. package/dist/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.d.ts +4 -0
  80. package/dist/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.js +13 -0
  81. package/dist/src/renderer/shaders/tsl/patterns/bloom.d.ts +4 -0
  82. package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom.ts → dist/src/renderer/shaders/tsl/patterns/bloom.js} +4 -6
  83. package/dist/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.d.ts +4 -0
  84. package/dist/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.js +16 -0
  85. package/dist/src/renderer/shaders/tsl/patterns/grain-texture-pattern.d.ts +4 -0
  86. package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts → dist/src/renderer/shaders/tsl/patterns/grain-texture-pattern.js} +3 -4
  87. package/dist/src/renderer/shaders/tsl/patterns/repeating-pattern.d.ts +4 -0
  88. package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/repeating-pattern.ts → dist/src/renderer/shaders/tsl/patterns/repeating-pattern.js} +4 -6
  89. package/dist/src/renderer/shaders/tsl/utils/atan2.d.ts +1 -0
  90. package/dist/src/renderer/shaders/tsl/utils/atan2.js +7 -0
  91. package/dist/src/renderer/shaders/tsl/utils/complex-conj.d.ts +4 -0
  92. package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-conj.ts → dist/src/renderer/shaders/tsl/utils/complex-conj.js} +3 -4
  93. package/dist/src/renderer/shaders/tsl/utils/complex-cos.d.ts +4 -0
  94. package/dist/src/renderer/shaders/tsl/utils/complex-cos.js +9 -0
  95. package/dist/src/renderer/shaders/tsl/utils/complex-div.d.ts +1 -0
  96. package/dist/src/renderer/shaders/tsl/utils/complex-div.js +6 -0
  97. package/dist/src/renderer/shaders/tsl/utils/complex-log.d.ts +1 -0
  98. package/dist/src/renderer/shaders/tsl/utils/complex-log.js +6 -0
  99. package/dist/src/renderer/shaders/tsl/utils/complex-mobius.d.ts +4 -0
  100. package/dist/src/renderer/shaders/tsl/utils/complex-mobius.js +10 -0
  101. package/dist/src/renderer/shaders/tsl/utils/complex-mul.d.ts +4 -0
  102. package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mul.ts → dist/src/renderer/shaders/tsl/utils/complex-mul.js} +3 -4
  103. package/dist/src/renderer/shaders/tsl/utils/complex-pow.d.ts +5 -0
  104. package/dist/src/renderer/shaders/tsl/utils/complex-pow.js +14 -0
  105. package/dist/src/renderer/shaders/tsl/utils/complex-sin.d.ts +4 -0
  106. package/dist/src/renderer/shaders/tsl/utils/complex-sin.js +9 -0
  107. package/dist/src/renderer/shaders/tsl/utils/complex-sqrt.d.ts +5 -0
  108. package/dist/src/renderer/shaders/tsl/utils/complex-sqrt.js +12 -0
  109. package/dist/src/renderer/shaders/tsl/utils/complex-tan.d.ts +4 -0
  110. package/dist/src/renderer/shaders/tsl/utils/complex-tan.js +11 -0
  111. package/dist/src/renderer/shaders/tsl/utils/complex-to-polar.d.ts +4 -0
  112. package/dist/src/renderer/shaders/tsl/utils/complex-to-polar.js +9 -0
  113. package/dist/src/renderer/shaders/tsl/utils/hyperbolic.d.ts +8 -0
  114. package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/hyperbolic.ts → dist/src/renderer/shaders/tsl/utils/hyperbolic.js} +7 -11
  115. package/dist/src/renderer/shaders/tsl/utils/index.d.ts +38 -0
  116. package/dist/src/renderer/shaders/tsl/utils/index.js +39 -0
  117. package/dist/src/renderer/shaders/tsl/utils/rotate.d.ts +2 -0
  118. package/dist/src/renderer/shaders/tsl/utils/rotate.js +7 -0
  119. package/dist/src/renderer/shaders/tsl/utils/screen-aspect-uv.d.ts +2 -0
  120. package/dist/src/renderer/shaders/tsl/utils/screen-aspect-uv.js +6 -0
  121. package/dist/src/renderer/shaders/tsl/utils/sd-box-2d.d.ts +1 -0
  122. package/dist/src/renderer/shaders/tsl/utils/sd-box-2d.js +5 -0
  123. package/dist/src/renderer/shaders/tsl/utils/sd-diamond.d.ts +1 -0
  124. package/dist/src/renderer/shaders/tsl/utils/sd-diamond.js +5 -0
  125. package/dist/src/renderer/shaders/tsl/utils/sd-rhombus.d.ts +1 -0
  126. package/dist/src/renderer/shaders/tsl/utils/sd-rhombus.js +14 -0
  127. package/dist/src/renderer/shaders/tsl/utils/sd-sphere.d.ts +1 -0
  128. package/dist/src/renderer/shaders/tsl/utils/sd-sphere.js +5 -0
  129. package/dist/src/renderer/shaders/tsl/utils/smax.d.ts +1 -0
  130. package/dist/src/renderer/shaders/tsl/utils/smax.js +6 -0
  131. package/dist/src/renderer/shaders/tsl/utils/smin.d.ts +1 -0
  132. package/dist/src/renderer/shaders/tsl/utils/smin.js +6 -0
  133. package/dist/src/renderer/text-pass.d.ts +23 -0
  134. package/dist/src/renderer/text-pass.js +129 -0
  135. package/dist/src/runtime-clock.d.ts +9 -0
  136. package/dist/src/runtime-clock.js +20 -0
  137. package/dist/src/runtime-frame.d.ts +11 -0
  138. package/dist/src/runtime-frame.js +12 -0
  139. package/dist/src/shader-lab-composition.d.ts +9 -0
  140. package/dist/src/shader-lab-composition.js +96 -0
  141. package/dist/src/timeline.d.ts +8 -0
  142. package/dist/src/timeline.js +179 -0
  143. package/dist/src/types/editor.d.ts +3 -0
  144. package/dist/src/types/editor.js +1 -0
  145. package/dist/src/types.d.ts +81 -0
  146. package/dist/src/types.js +1 -0
  147. package/package.json +28 -65
  148. package/.biome/plugins/README.md +0 -21
  149. package/.biome/plugins/no-anchor-element.grit +0 -12
  150. package/.biome/plugins/no-relative-parent-imports.grit +0 -10
  151. package/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
  152. package/.changeset/README.md +0 -17
  153. package/.changeset/config.json +0 -11
  154. package/.editorconfig +0 -40
  155. package/.env.example +0 -81
  156. package/.gitattributes +0 -19
  157. package/.github/workflows/canary.yml +0 -80
  158. package/.github/workflows/ci.yml +0 -37
  159. package/.github/workflows/release.yml +0 -56
  160. package/.tldrignore +0 -84
  161. package/.vscode/extensions.json +0 -20
  162. package/.vscode/settings.json +0 -105
  163. package/biome.json +0 -249
  164. package/bun.lock +0 -1224
  165. package/next.config.ts +0 -131
  166. package/packages/shader-lab-react/CHANGELOG.md +0 -9
  167. package/packages/shader-lab-react/README.md +0 -119
  168. package/packages/shader-lab-react/package.json +0 -36
  169. package/packages/shader-lab-react/scripts/fix-esm-specifiers.mjs +0 -57
  170. package/packages/shader-lab-react/scripts/prepare-dist.mjs +0 -4
  171. package/packages/shader-lab-react/src/ambient/three-tsl.d.ts +0 -146
  172. package/packages/shader-lab-react/src/ambient/three-webgpu.d.ts +0 -51
  173. package/packages/shader-lab-react/src/easings.ts +0 -4
  174. package/packages/shader-lab-react/src/index.ts +0 -35
  175. package/packages/shader-lab-react/src/lib/editor/custom-shader/shared.ts +0 -2
  176. package/packages/shader-lab-react/src/renderer/ascii-atlas.ts +0 -83
  177. package/packages/shader-lab-react/src/renderer/ascii-pass.ts +0 -416
  178. package/packages/shader-lab-react/src/renderer/asset-url.ts +0 -3
  179. package/packages/shader-lab-react/src/renderer/blend-modes.ts +0 -229
  180. package/packages/shader-lab-react/src/renderer/contracts.ts +0 -54
  181. package/packages/shader-lab-react/src/renderer/create-webgpu-renderer.ts +0 -48
  182. package/packages/shader-lab-react/src/renderer/crt-pass.ts +0 -1040
  183. package/packages/shader-lab-react/src/renderer/custom-shader-pass.ts +0 -108
  184. package/packages/shader-lab-react/src/renderer/custom-shader-runtime.ts +0 -309
  185. package/packages/shader-lab-react/src/renderer/dither-textures.ts +0 -99
  186. package/packages/shader-lab-react/src/renderer/dithering-pass.ts +0 -322
  187. package/packages/shader-lab-react/src/renderer/gradient-pass.ts +0 -521
  188. package/packages/shader-lab-react/src/renderer/halftone-pass.ts +0 -932
  189. package/packages/shader-lab-react/src/renderer/ink-pass.ts +0 -802
  190. package/packages/shader-lab-react/src/renderer/live-pass.ts +0 -194
  191. package/packages/shader-lab-react/src/renderer/media-pass.ts +0 -187
  192. package/packages/shader-lab-react/src/renderer/media-texture.ts +0 -66
  193. package/packages/shader-lab-react/src/renderer/particle-grid-pass.ts +0 -389
  194. package/packages/shader-lab-react/src/renderer/pass-node.ts +0 -209
  195. package/packages/shader-lab-react/src/renderer/pattern-atlas.ts +0 -133
  196. package/packages/shader-lab-react/src/renderer/pattern-pass.ts +0 -552
  197. package/packages/shader-lab-react/src/renderer/pipeline-manager.ts +0 -369
  198. package/packages/shader-lab-react/src/renderer/pixel-sorting-pass.ts +0 -277
  199. package/packages/shader-lab-react/src/renderer/shaders/tsl/color/tonemapping.ts +0 -87
  200. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/common.ts +0 -31
  201. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +0 -36
  202. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +0 -36
  203. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/fbm.ts +0 -13
  204. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +0 -96
  205. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/ridge-noise.ts +0 -24
  206. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +0 -79
  207. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +0 -89
  208. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/turbulence.ts +0 -56
  209. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/value-noise-3d.ts +0 -32
  210. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +0 -60
  211. package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +0 -15
  212. package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +0 -24
  213. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/atan2.ts +0 -9
  214. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-cos.ts +0 -10
  215. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-div.ts +0 -11
  216. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-log.ts +0 -7
  217. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mobius.ts +0 -12
  218. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-pow.ts +0 -16
  219. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sin.ts +0 -10
  220. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sqrt.ts +0 -18
  221. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-tan.ts +0 -12
  222. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-to-polar.ts +0 -10
  223. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/index.ts +0 -48
  224. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/rotate.ts +0 -15
  225. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +0 -15
  226. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-box-2d.ts +0 -6
  227. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-diamond.ts +0 -6
  228. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-rhombus.ts +0 -27
  229. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-sphere.ts +0 -6
  230. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smax.ts +0 -7
  231. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smin.ts +0 -7
  232. package/packages/shader-lab-react/src/renderer/text-pass.ts +0 -176
  233. package/packages/shader-lab-react/src/runtime-clock.ts +0 -42
  234. package/packages/shader-lab-react/src/runtime-frame.ts +0 -29
  235. package/packages/shader-lab-react/src/shader-lab-composition.tsx +0 -163
  236. package/packages/shader-lab-react/src/timeline.ts +0 -283
  237. package/packages/shader-lab-react/src/types/editor.ts +0 -5
  238. package/packages/shader-lab-react/src/types.ts +0 -141
  239. package/packages/shader-lab-react/tsconfig.build.json +0 -8
  240. package/packages/shader-lab-react/tsconfig.json +0 -21
  241. package/postcss.config.mjs +0 -5
  242. package/public/assets/fonts/msdf/geist-mono/GeistMono-Regular-msdf-atlas.png +0 -0
  243. package/public/assets/fonts/msdf/geist-mono/GeistMono-Regular-msdf.json +0 -1412
  244. package/public/assets/patterns/bars/1.svg +0 -3
  245. package/public/assets/patterns/bars/2.svg +0 -3
  246. package/public/assets/patterns/bars/3.svg +0 -3
  247. package/public/assets/patterns/bars/4.svg +0 -3
  248. package/public/assets/patterns/bars/5.svg +0 -3
  249. package/public/assets/patterns/bars/6.svg +0 -3
  250. package/public/assets/patterns/candles/1.svg +0 -3
  251. package/public/assets/patterns/candles/2.svg +0 -3
  252. package/public/assets/patterns/candles/3.svg +0 -3
  253. package/public/assets/patterns/candles/4.svg +0 -3
  254. package/public/assets/patterns/shapes/1.svg +0 -3
  255. package/public/assets/patterns/shapes/2.svg +0 -3
  256. package/public/assets/patterns/shapes/3.svg +0 -3
  257. package/public/assets/patterns/shapes/4.svg +0 -4
  258. package/public/assets/patterns/shapes/5.svg +0 -3
  259. package/public/assets/patterns/shapes/6.svg +0 -4
  260. package/public/fonts/geist/Geist-Mono.woff2 +0 -0
  261. package/public/textures/blue-noise.png +0 -0
  262. package/public/textures/crt-mask.png +0 -0
  263. package/src/app/design/page.tsx +0 -398
  264. package/src/app/favicon.ico +0 -0
  265. package/src/app/globals.css +0 -280
  266. package/src/app/layout.tsx +0 -89
  267. package/src/app/page.tsx +0 -20
  268. package/src/app/robots.ts +0 -13
  269. package/src/app/sitemap.ts +0 -13
  270. package/src/components/editor/editor-canvas-viewport.tsx +0 -116
  271. package/src/components/editor/editor-export-dialog.tsx +0 -1177
  272. package/src/components/editor/editor-timeline-overlay.tsx +0 -983
  273. package/src/components/editor/editor-topbar.tsx +0 -287
  274. package/src/components/editor/layer-sidebar.tsx +0 -738
  275. package/src/components/editor/properties-sidebar-content.tsx +0 -574
  276. package/src/components/editor/properties-sidebar-fields.tsx +0 -389
  277. package/src/components/editor/properties-sidebar-utils.ts +0 -178
  278. package/src/components/editor/properties-sidebar.tsx +0 -421
  279. package/src/components/ui/button/index.tsx +0 -57
  280. package/src/components/ui/color-picker/index.tsx +0 -358
  281. package/src/components/ui/glass-panel/index.tsx +0 -45
  282. package/src/components/ui/icon-button/index.tsx +0 -46
  283. package/src/components/ui/select/index.tsx +0 -136
  284. package/src/components/ui/slider/index.tsx +0 -192
  285. package/src/components/ui/toggle/index.tsx +0 -34
  286. package/src/components/ui/typography/index.tsx +0 -61
  287. package/src/components/ui/xy-pad/index.tsx +0 -160
  288. package/src/features/editor/components/editor-export-dialog.module.css +0 -271
  289. package/src/hooks/use-editor-renderer.ts +0 -182
  290. package/src/lib/app.ts +0 -6
  291. package/src/lib/cn.ts +0 -7
  292. package/src/lib/easings.ts +0 -240
  293. package/src/lib/editor/config/layer-registry.ts +0 -2434
  294. package/src/lib/editor/custom-shader/shared.ts +0 -28
  295. package/src/lib/editor/export.ts +0 -420
  296. package/src/lib/editor/history.ts +0 -71
  297. package/src/lib/editor/layers.ts +0 -76
  298. package/src/lib/editor/parameter-schema.ts +0 -75
  299. package/src/lib/editor/project-file.ts +0 -145
  300. package/src/lib/editor/shader-export-snippet.ts +0 -37
  301. package/src/lib/editor/shader-export.ts +0 -315
  302. package/src/lib/editor/timeline/evaluate.ts +0 -252
  303. package/src/lib/editor/view-transform.ts +0 -58
  304. package/src/lib/fonts.ts +0 -28
  305. package/src/renderer/ascii-atlas.ts +0 -83
  306. package/src/renderer/ascii-pass.ts +0 -416
  307. package/src/renderer/blend-modes.ts +0 -229
  308. package/src/renderer/contracts.ts +0 -161
  309. package/src/renderer/create-webgpu-renderer.ts +0 -48
  310. package/src/renderer/crt-pass.ts +0 -1040
  311. package/src/renderer/custom-shader-pass.ts +0 -117
  312. package/src/renderer/custom-shader-runtime.ts +0 -309
  313. package/src/renderer/dither-textures.ts +0 -99
  314. package/src/renderer/dithering-pass.ts +0 -322
  315. package/src/renderer/gradient-pass.ts +0 -520
  316. package/src/renderer/halftone-pass.ts +0 -932
  317. package/src/renderer/ink-pass.ts +0 -683
  318. package/src/renderer/live-pass.ts +0 -194
  319. package/src/renderer/media-pass.ts +0 -187
  320. package/src/renderer/media-texture.ts +0 -66
  321. package/src/renderer/particle-grid-pass.ts +0 -389
  322. package/src/renderer/pass-node-factory.ts +0 -33
  323. package/src/renderer/pass-node.ts +0 -209
  324. package/src/renderer/pattern-atlas.ts +0 -97
  325. package/src/renderer/pattern-pass.ts +0 -552
  326. package/src/renderer/pipeline-manager.ts +0 -343
  327. package/src/renderer/pixel-sorting-pass.ts +0 -277
  328. package/src/renderer/project-clock.ts +0 -57
  329. package/src/renderer/shaders/tsl/color/tonemapping.ts +0 -86
  330. package/src/renderer/shaders/tsl/cosine-palette.ts +0 -8
  331. package/src/renderer/shaders/tsl/noise/common.ts +0 -30
  332. package/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +0 -35
  333. package/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +0 -35
  334. package/src/renderer/shaders/tsl/noise/fbm.ts +0 -12
  335. package/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +0 -97
  336. package/src/renderer/shaders/tsl/noise/ridge-noise.ts +0 -23
  337. package/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +0 -78
  338. package/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +0 -88
  339. package/src/renderer/shaders/tsl/noise/turbulence.ts +0 -55
  340. package/src/renderer/shaders/tsl/noise/value-noise-3d.ts +0 -31
  341. package/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +0 -59
  342. package/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +0 -14
  343. package/src/renderer/shaders/tsl/patterns/bloom.ts +0 -10
  344. package/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +0 -23
  345. package/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts +0 -8
  346. package/src/renderer/shaders/tsl/patterns/repeating-pattern.ts +0 -10
  347. package/src/renderer/shaders/tsl/utils/atan2.ts +0 -8
  348. package/src/renderer/shaders/tsl/utils/complex-conj.ts +0 -8
  349. package/src/renderer/shaders/tsl/utils/complex-cos.ts +0 -9
  350. package/src/renderer/shaders/tsl/utils/complex-div.ts +0 -10
  351. package/src/renderer/shaders/tsl/utils/complex-log.ts +0 -6
  352. package/src/renderer/shaders/tsl/utils/complex-mobius.ts +0 -11
  353. package/src/renderer/shaders/tsl/utils/complex-mul.ts +0 -8
  354. package/src/renderer/shaders/tsl/utils/complex-pow.ts +0 -15
  355. package/src/renderer/shaders/tsl/utils/complex-sin.ts +0 -9
  356. package/src/renderer/shaders/tsl/utils/complex-sqrt.ts +0 -17
  357. package/src/renderer/shaders/tsl/utils/complex-tan.ts +0 -11
  358. package/src/renderer/shaders/tsl/utils/complex-to-polar.ts +0 -9
  359. package/src/renderer/shaders/tsl/utils/hyperbolic.ts +0 -19
  360. package/src/renderer/shaders/tsl/utils/index.ts +0 -47
  361. package/src/renderer/shaders/tsl/utils/rotate.ts +0 -14
  362. package/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +0 -14
  363. package/src/renderer/shaders/tsl/utils/sd-box-2d.ts +0 -5
  364. package/src/renderer/shaders/tsl/utils/sd-diamond.ts +0 -5
  365. package/src/renderer/shaders/tsl/utils/sd-rhombus.ts +0 -26
  366. package/src/renderer/shaders/tsl/utils/sd-sphere.ts +0 -5
  367. package/src/renderer/shaders/tsl/utils/smax.ts +0 -7
  368. package/src/renderer/shaders/tsl/utils/smin.ts +0 -6
  369. package/src/renderer/text-pass.ts +0 -176
  370. package/src/store/asset-store.ts +0 -193
  371. package/src/store/editor-store.ts +0 -223
  372. package/src/store/history-store.ts +0 -172
  373. package/src/store/index.ts +0 -31
  374. package/src/store/layer-store.ts +0 -675
  375. package/src/store/timeline-store.ts +0 -572
  376. package/src/types/assets.d.ts +0 -6
  377. package/src/types/css.d.ts +0 -21
  378. package/src/types/editor.ts +0 -357
  379. package/src/types/react.d.ts +0 -15
  380. package/src/types/three-tsl.d.ts +0 -146
  381. package/src/types/three-webgpu.d.ts +0 -51
  382. package/tsconfig.json +0 -49
  383. /package/{packages/shader-lab-react/assets → assets}/patterns/bars/1.svg +0 -0
  384. /package/{packages/shader-lab-react/assets → assets}/patterns/bars/2.svg +0 -0
  385. /package/{packages/shader-lab-react/assets → assets}/patterns/bars/3.svg +0 -0
  386. /package/{packages/shader-lab-react/assets → assets}/patterns/bars/4.svg +0 -0
  387. /package/{packages/shader-lab-react/assets → assets}/patterns/bars/5.svg +0 -0
  388. /package/{packages/shader-lab-react/assets → assets}/patterns/bars/6.svg +0 -0
  389. /package/{packages/shader-lab-react/assets → assets}/patterns/candles/1.svg +0 -0
  390. /package/{packages/shader-lab-react/assets → assets}/patterns/candles/2.svg +0 -0
  391. /package/{packages/shader-lab-react/assets → assets}/patterns/candles/3.svg +0 -0
  392. /package/{packages/shader-lab-react/assets → assets}/patterns/candles/4.svg +0 -0
  393. /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/1.svg +0 -0
  394. /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/2.svg +0 -0
  395. /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/3.svg +0 -0
  396. /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/4.svg +0 -0
  397. /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/5.svg +0 -0
  398. /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/6.svg +0 -0
  399. /package/{packages/shader-lab-react/assets → assets}/textures/blue-noise.png +0 -0
@@ -0,0 +1,179 @@
1
+ import { easings } from "./easings.js";
2
+ function cloneParameterValue(value) {
3
+ if (Array.isArray(value)) {
4
+ return [...value];
5
+ }
6
+ return value;
7
+ }
8
+ function isNumericTuple(value) {
9
+ return (Array.isArray(value) &&
10
+ (value.length === 2 || value.length === 3) &&
11
+ value.every((entry) => typeof entry === "number"));
12
+ }
13
+ function parseHexColor(value) {
14
+ const normalized = value.trim().toLowerCase();
15
+ if (!normalized.startsWith("#")) {
16
+ return null;
17
+ }
18
+ const hex = normalized.slice(1);
19
+ if (hex.length === 6 || hex.length === 8) {
20
+ const r = Number.parseInt(hex.slice(0, 2), 16);
21
+ const g = Number.parseInt(hex.slice(2, 4), 16);
22
+ const b = Number.parseInt(hex.slice(4, 6), 16);
23
+ if ([r, g, b].some(Number.isNaN)) {
24
+ return null;
25
+ }
26
+ return [r, g, b];
27
+ }
28
+ return null;
29
+ }
30
+ function toHex(channel) {
31
+ return Math.round(Math.min(255, Math.max(0, channel)))
32
+ .toString(16)
33
+ .padStart(2, "0");
34
+ }
35
+ function rgbToHex(r, g, b) {
36
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
37
+ }
38
+ function lerp(a, b, progress) {
39
+ return a + (b - a) * progress;
40
+ }
41
+ function resolveProgress(progress, interpolation) {
42
+ if (interpolation === "step") {
43
+ return 0;
44
+ }
45
+ if (interpolation === "smooth") {
46
+ return easings.easeInOutCubic(progress);
47
+ }
48
+ return progress;
49
+ }
50
+ function interpolateValue(from, to, progress, interpolation) {
51
+ if (interpolation === "step") {
52
+ return cloneParameterValue(from);
53
+ }
54
+ const eased = resolveProgress(progress, interpolation);
55
+ if (typeof from === "number" && typeof to === "number") {
56
+ return lerp(from, to, eased);
57
+ }
58
+ if (typeof from === "boolean" && typeof to === "boolean") {
59
+ return eased < 0.5 ? from : to;
60
+ }
61
+ if (typeof from === "string" && typeof to === "string") {
62
+ const leftColor = parseHexColor(from);
63
+ const rightColor = parseHexColor(to);
64
+ if (!(leftColor && rightColor)) {
65
+ return eased < 0.5 ? from : to;
66
+ }
67
+ return rgbToHex(lerp(leftColor[0], rightColor[0], eased), lerp(leftColor[1], rightColor[1], eased), lerp(leftColor[2], rightColor[2], eased));
68
+ }
69
+ if (isNumericTuple(from) && isNumericTuple(to) && from.length === to.length) {
70
+ return from.map((entry, index) => lerp(entry, to[index] ?? entry, eased));
71
+ }
72
+ return eased < 0.5 ? cloneParameterValue(from) : cloneParameterValue(to);
73
+ }
74
+ function evaluateTrackAtTime(track, time) {
75
+ if (!track.enabled || track.keyframes.length === 0) {
76
+ return null;
77
+ }
78
+ if (track.keyframes.length === 1) {
79
+ const onlyKeyframe = track.keyframes[0];
80
+ return onlyKeyframe ? cloneParameterValue(onlyKeyframe.value) : null;
81
+ }
82
+ const firstKeyframe = track.keyframes[0];
83
+ const lastKeyframe = track.keyframes[track.keyframes.length - 1];
84
+ if (!(firstKeyframe && lastKeyframe)) {
85
+ return null;
86
+ }
87
+ if (time <= firstKeyframe.time) {
88
+ return cloneParameterValue(firstKeyframe.value);
89
+ }
90
+ if (time >= lastKeyframe.time) {
91
+ return cloneParameterValue(lastKeyframe.value);
92
+ }
93
+ for (let index = 1; index < track.keyframes.length; index += 1) {
94
+ const nextKeyframe = track.keyframes[index];
95
+ const previousKeyframe = track.keyframes[index - 1];
96
+ if (!(nextKeyframe && previousKeyframe) || time > nextKeyframe.time) {
97
+ continue;
98
+ }
99
+ const span = Math.max(nextKeyframe.time - previousKeyframe.time, 1e-6);
100
+ const progress = Math.max(0, Math.min(1, (time - previousKeyframe.time) / span));
101
+ return interpolateValue(previousKeyframe.value, nextKeyframe.value, progress, track.interpolation);
102
+ }
103
+ return cloneParameterValue(lastKeyframe.value);
104
+ }
105
+ function applyBindingOverride(state, binding, value) {
106
+ if (binding.kind === "param") {
107
+ state.params[binding.key] = cloneParameterValue(value);
108
+ return;
109
+ }
110
+ if (binding.property === "visible" && typeof value === "boolean") {
111
+ state.properties.visible = value;
112
+ return;
113
+ }
114
+ if ((binding.property === "opacity" ||
115
+ binding.property === "hue" ||
116
+ binding.property === "saturation") &&
117
+ typeof value === "number") {
118
+ state.properties[binding.property] = value;
119
+ }
120
+ }
121
+ export function evaluateTimelineForLayers(layers, tracks, time) {
122
+ if (tracks.length === 0) {
123
+ return [];
124
+ }
125
+ const layerStates = new Map();
126
+ const layerIds = new Set(layers.map((layer) => layer.id));
127
+ for (const track of tracks) {
128
+ if (!layerIds.has(track.layerId)) {
129
+ continue;
130
+ }
131
+ const value = evaluateTrackAtTime(track, time);
132
+ if (value === null) {
133
+ continue;
134
+ }
135
+ let state = layerStates.get(track.layerId);
136
+ if (!state) {
137
+ state = {
138
+ layerId: track.layerId,
139
+ params: {},
140
+ properties: {},
141
+ };
142
+ layerStates.set(track.layerId, state);
143
+ }
144
+ applyBindingOverride(state, track.binding, value);
145
+ }
146
+ return [...layerStates.values()];
147
+ }
148
+ export function resolveEvaluatedLayers(layers, tracks, time) {
149
+ const evaluatedStates = evaluateTimelineForLayers(layers, tracks, time);
150
+ const evaluatedById = new Map(evaluatedStates.map((state) => [state.layerId, state]));
151
+ return layers.map((layer) => {
152
+ const evaluated = evaluatedById.get(layer.id);
153
+ if (!evaluated) {
154
+ return {
155
+ ...layer,
156
+ params: { ...layer.params },
157
+ };
158
+ }
159
+ return {
160
+ ...layer,
161
+ hue: typeof evaluated.properties.hue === "number"
162
+ ? evaluated.properties.hue
163
+ : layer.hue,
164
+ opacity: typeof evaluated.properties.opacity === "number"
165
+ ? evaluated.properties.opacity
166
+ : layer.opacity,
167
+ params: {
168
+ ...layer.params,
169
+ ...evaluated.params,
170
+ },
171
+ saturation: typeof evaluated.properties.saturation === "number"
172
+ ? evaluated.properties.saturation
173
+ : layer.saturation,
174
+ visible: typeof evaluated.properties.visible === "boolean"
175
+ ? evaluated.properties.visible
176
+ : layer.visible,
177
+ };
178
+ });
179
+ }
@@ -0,0 +1,3 @@
1
+ import type { ShaderLabParameterValue } from "../types";
2
+ export type LayerParameterValues = Record<string, ShaderLabParameterValue>;
3
+ export type LayerCompositeMode = "filter" | "mask";
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,81 @@
1
+ export type ShaderLabParameterValue = number | string | boolean | [number, number] | [number, number, number];
2
+ export type ShaderLabLayerKind = "effect" | "source";
3
+ export type ShaderLabSourceLayerType = "custom-shader" | "gradient" | "image" | "live" | "text" | "video";
4
+ export type ShaderLabEffectLayerType = "ascii" | "crt" | "dithering" | "halftone" | "ink" | "particle-grid" | "pattern" | "pixel-sorting";
5
+ export type ShaderLabLayerType = ShaderLabEffectLayerType | ShaderLabSourceLayerType;
6
+ export type ShaderLabBlendMode = "normal" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity";
7
+ export type ShaderLabCompositeMode = "filter" | "mask";
8
+ export type ShaderLabAssetSource = {
9
+ fileName?: string;
10
+ kind: "image";
11
+ src: string;
12
+ } | {
13
+ fileName?: string;
14
+ kind: "video";
15
+ src: string;
16
+ };
17
+ export type ShaderLabInlineSketchSource = {
18
+ code: string;
19
+ entryExport: string;
20
+ fileName?: string;
21
+ mode: "inline";
22
+ };
23
+ export type ShaderLabModuleSketchSource = {
24
+ entryExport?: string;
25
+ mode: "module";
26
+ sketch: unknown;
27
+ };
28
+ export type ShaderLabSketchSource = ShaderLabInlineSketchSource | ShaderLabModuleSketchSource;
29
+ export type ShaderLabTimelineInterpolation = "linear" | "smooth" | "step";
30
+ export type ShaderLabAnimatedPropertyBinding = {
31
+ kind: "layer";
32
+ label: string;
33
+ property: "hue" | "opacity" | "saturation" | "visible";
34
+ valueType: "boolean" | "number";
35
+ } | {
36
+ key: string;
37
+ kind: "param";
38
+ label: string;
39
+ valueType: "boolean" | "color" | "number" | "select" | "vec2" | "vec3";
40
+ };
41
+ export interface ShaderLabTimelineKeyframe {
42
+ id: string;
43
+ time: number;
44
+ value: ShaderLabParameterValue;
45
+ }
46
+ export interface ShaderLabTimelineTrack {
47
+ binding: ShaderLabAnimatedPropertyBinding;
48
+ enabled: boolean;
49
+ id: string;
50
+ interpolation: ShaderLabTimelineInterpolation;
51
+ keyframes: ShaderLabTimelineKeyframe[];
52
+ layerId: string;
53
+ }
54
+ export interface ShaderLabTimelineConfig {
55
+ duration: number;
56
+ loop: boolean;
57
+ tracks: ShaderLabTimelineTrack[];
58
+ }
59
+ export interface ShaderLabLayerConfig {
60
+ asset?: ShaderLabAssetSource;
61
+ blendMode: ShaderLabBlendMode;
62
+ compositeMode: ShaderLabCompositeMode;
63
+ hue: number;
64
+ id: string;
65
+ kind: ShaderLabLayerKind;
66
+ name: string;
67
+ opacity: number;
68
+ params: Record<string, ShaderLabParameterValue>;
69
+ saturation: number;
70
+ sketch?: ShaderLabSketchSource;
71
+ type: ShaderLabLayerType;
72
+ visible: boolean;
73
+ }
74
+ export interface ShaderLabConfig {
75
+ composition: {
76
+ height: number;
77
+ width: number;
78
+ };
79
+ layers: ShaderLabLayerConfig[];
80
+ timeline: ShaderLabTimelineConfig;
81
+ }
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,73 +1,36 @@
1
1
  {
2
2
  "name": "@basementstudio/shader-lab",
3
- "description": "Shader Lab starter template",
4
- "version": "0.1.0",
5
- "packageManager": "bun@1.3.5",
6
- "workspaces": [
7
- "packages/*"
3
+ "version": "1.0.2",
4
+ "description": "Portable React runtime for Shader Lab exports.",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "main": "./dist/src/index.js",
8
+ "types": "./dist/src/index.d.ts",
9
+ "files": [
10
+ "dist",
11
+ "assets"
8
12
  ],
9
- "scripts": {
10
- "analyze": "cross-env ANALYZE=true bun run build",
11
- "analyze:experimental": "next experimental-analyze",
12
- "build": "bun run build:runtime && next build",
13
- "build:runtime": "bun run --cwd packages/shader-lab-react build",
14
- "changeset": "changeset",
15
- "check": "bun run build:runtime && bun run lint && bun run typecheck:compare",
16
- "dev": "next dev",
17
- "dev:https": "next dev --experimental-https",
18
- "format": "biome format --write .",
19
- "lighthouse": "bunx @unlighthouse/cli --site http://localhost:3000",
20
- "lint": "biome lint --max-diagnostics=200",
21
- "lint:fix": "biome lint --write --unsafe --max-diagnostics=200",
22
- "release": "changeset publish",
23
- "release-canary": "changeset publish --tag canary --no-git-tag",
24
- "version-canary": "changeset version --snapshot canary",
25
- "version-packages": "changeset version",
26
- "start": "next start",
27
- "test": "bun test",
28
- "typecheck": "tsgo --noEmit",
29
- "typecheck:runtime": "bun run --cwd packages/shader-lab-react typecheck",
30
- "typecheck:compare": "bun run typecheck:tsc && bun run typecheck",
31
- "typecheck:tsc": "tsc --noEmit --incremental false"
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/src/index.d.ts",
16
+ "default": "./dist/src/index.js"
17
+ }
32
18
  },
33
- "dependencies": {
34
- "@basementstudio/shader-lab": "workspace:*",
35
- "@base-ui/react": "^1.3.0",
36
- "@phosphor-icons/react": "^2.1.10",
37
- "class-variance-authority": "^0.7.1",
38
- "motion": "^12.38.0",
39
- "next": "16.1.4",
40
- "react": "19.2.4",
41
- "react-dom": "19.2.4",
42
- "react-use": "^17.6.0",
43
- "tailwind-merge": "^3.4.0",
44
- "three": "^0.183.2",
45
- "zod": "^4.3.6",
46
- "zustand": "^5.0.10"
19
+ "publishConfig": {
20
+ "access": "public"
47
21
  },
48
- "devDependencies": {
49
- "@biomejs/biome": "2.3.11",
50
- "@changesets/changelog-github": "^0.6.0",
51
- "@changesets/cli": "^2.30.0",
52
- "@next/bundle-analyzer": "16.1.1",
53
- "@svgr/webpack": "^8.1.0",
54
- "@tailwindcss/postcss": "^4.1.18",
55
- "@types/bun": "^1.3.6",
56
- "@types/node": "^20.19.30",
57
- "@types/react": "^19.2.9",
58
- "@types/react-dom": "^19.2.3",
59
- "@types/three": "^0.183.1",
60
- "@typescript/native-preview": "^7.0.0-dev.20260122.3",
61
- "babel-plugin-react-compiler": "1.0.0",
62
- "cross-env": "^10.1.0",
63
- "postcss-preset-env": "^10.6.1",
64
- "tailwindcss": "^4.1.18",
22
+ "dependencies": {
65
23
  "typescript": "^5.9.3"
66
24
  },
67
- "trustedDependencies": [
68
- "@biomejs/biome",
69
- "@tailwindcss/oxide",
70
- "esbuild",
71
- "sharp"
72
- ]
25
+ "peerDependencies": {
26
+ "react": "^19.0.0",
27
+ "react-dom": "^19.0.0",
28
+ "three": "^0.183.0"
29
+ },
30
+ "scripts": {
31
+ "build": "node ./scripts/prepare-dist.mjs && bun x tsc -p tsconfig.build.json && node ./scripts/fix-esm-specifiers.mjs",
32
+ "lint": "biome lint src --max-diagnostics=200",
33
+ "prepack": "bun run build",
34
+ "typecheck": "bun x tsc -p tsconfig.json --noEmit"
35
+ }
73
36
  }
@@ -1,21 +0,0 @@
1
- ## Plugins
2
-
3
- ### 1. `no-anchor-element.grit`
4
- Enforces using Next.js `<Link>` component instead of HTML `<a>` elements.
5
-
6
- ### 2. `no-unnecessary-forwardref.grit`
7
- Checks for unnecessary `forwardRef` usage in React 19 with the compiler.
8
-
9
- ### 3. `no-relative-parent-imports.grit`
10
- Forbids relative parent imports (`../`) and encourages alias imports (`@/`).
11
-
12
- ## Plugin Configuration
13
-
14
- The plugins are configured in `biome.json`:
15
- ```json
16
- "plugins": [
17
- "./biome-plugins/no-anchor-element.grit",
18
- "./biome-plugins/no-unnecessary-forwardref.grit",
19
- "./biome-plugins/no-relative-parent-imports.grit"
20
- ]
21
- ```
@@ -1,12 +0,0 @@
1
- language js;
2
-
3
- `<a $attrs>$content</a>` as $anchor where {
4
- !$anchor <: within `if ($condition) { return ($jsx) }` where {
5
- $condition <: contains or { `isExternal`, `isExternalSSR` }
6
- },
7
- register_diagnostic(
8
- span = $anchor,
9
- message = "Use custom Link component instead of <a> element. The Link component handles both internal and external links automatically.",
10
- severity = "error"
11
- )
12
- }
@@ -1,10 +0,0 @@
1
- language js;
2
-
3
- `import $imports from $source` as $import where {
4
- $source <: r"['\"]\.\.\/\.\.\/.*['\"]",
5
- register_diagnostic(
6
- span = $import,
7
- message = "Use alias imports (~/dir/) instead of deep relative imports (../../). Single level imports (../) are allowed for colocated files.",
8
- severity = "error"
9
- )
10
- }
@@ -1,9 +0,0 @@
1
- language js;
2
-
3
- `forwardRef($func)` as $ref where {
4
- register_diagnostic(
5
- span = $ref,
6
- message = "forwardRef is unnecessary in React 19 with the compiler",
7
- severity = "warning"
8
- )
9
- }
@@ -1,17 +0,0 @@
1
- # Changesets
2
-
3
- Run `bun run changeset` in a feature branch when a package change should ship.
4
-
5
- This creates a markdown file in `.changeset` where you choose:
6
-
7
- - `patch` for fixes
8
- - `minor` for backward-compatible features
9
- - `major` for breaking changes
10
-
11
- Release flow:
12
-
13
- 1. Add a changeset in the PR
14
- 2. Merge the PR to `main`
15
- 3. `release.yml` creates or updates the automated version PR
16
- 4. Merge that generated PR
17
- 5. The package is published to npm
@@ -1,11 +0,0 @@
1
- {
2
- "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
3
- "changelog": "@changesets/cli/changelog",
4
- "commit": false,
5
- "fixed": [],
6
- "linked": [],
7
- "access": "public",
8
- "baseBranch": "main",
9
- "updateInternalDependencies": "patch",
10
- "ignore": []
11
- }
package/.editorconfig DELETED
@@ -1,40 +0,0 @@
1
- # EditorConfig helps maintain consistent coding styles across different editors
2
- # https://editorconfig.org
3
-
4
- root = true
5
-
6
- [*]
7
- charset = utf-8
8
- end_of_line = lf
9
- indent_style = space
10
- indent_size = 2
11
- insert_final_newline = true
12
- trim_trailing_whitespace = true
13
-
14
- [*.md]
15
- trim_trailing_whitespace = false
16
-
17
- [*.{yml,yaml}]
18
- indent_size = 2
19
-
20
- [Makefile]
21
- indent_style = tab
22
-
23
- [*.{json,jsonc}]
24
- indent_size = 2
25
-
26
- [*.{css,scss}]
27
- indent_size = 2
28
-
29
- [*.{ts,tsx,js,jsx,mjs}]
30
- indent_size = 2
31
-
32
- [*.svg]
33
- insert_final_newline = false
34
-
35
- [{package.json,package-lock.json,bun.lockb}]
36
- indent_size = 2
37
-
38
- [.env*]
39
- insert_final_newline = true
40
-
package/.env.example DELETED
@@ -1,81 +0,0 @@
1
- # ============================================
2
- # Basement Next Starter - Environment Variables
3
- # ============================================
4
- # Copy this file to .env.local and fill in the values
5
- # Run: cp .env.example .env.local
6
- #
7
- # Only configure the integrations you need.
8
- # Remove unused sections to keep your env file clean.
9
- # ============================================
10
-
11
-
12
- # ============================================
13
- # CORE (Recommended)
14
- # ============================================
15
-
16
- # Base URL for your site (used for SEO, canonical URLs, etc.)
17
- # Development: http://localhost:3000
18
- # Production: https://your-domain.com
19
- NEXT_PUBLIC_BASE_URL="http://localhost:3000"
20
-
21
- # Draft mode secret for preview functionality
22
- # Generate a random string: openssl rand -base64 32
23
- DRAFT_MODE_TOKEN=""
24
-
25
-
26
- # ============================================
27
- # SANITY CMS (Optional)
28
- # Headless CMS with visual editing
29
- # Get credentials: https://sanity.io/manage
30
- # Docs: https://www.sanity.io/docs
31
- # ============================================
32
-
33
- # Required for Sanity
34
- NEXT_PUBLIC_SANITY_PROJECT_ID=""
35
- NEXT_PUBLIC_SANITY_DATASET="production"
36
- NEXT_PUBLIC_SANITY_API_READ_TOKEN=""
37
-
38
- # Optional - for server-side mutations and visual editing
39
- # SANITY_PRIVATE_TOKEN=""
40
-
41
- # Optional - API version (defaults to 2024-03-15)
42
- # NEXT_PUBLIC_SANITY_API_VERSION="2024-03-15"
43
-
44
-
45
- # ============================================
46
- # SHOPIFY (Optional)
47
- # E-commerce platform with cart and checkout
48
- # Get credentials: https://shopify.dev/docs/storefronts/headless
49
- # ============================================
50
-
51
- # Required for Shopify
52
- # SHOPIFY_STORE_DOMAIN="your-store.myshopify.com"
53
- # SHOPIFY_STOREFRONT_ACCESS_TOKEN=""
54
-
55
- # Optional - for revalidation webhooks
56
- # SHOPIFY_REVALIDATION_SECRET=""
57
-
58
- # Optional - for customer accounts
59
- # SHOPIFY_CUSTOMER_ACCOUNT_API_CLIENT_ID=""
60
- # SHOPIFY_CUSTOMER_ACCOUNT_API_URL=""
61
-
62
- # ============================================
63
- # ANALYTICS (Optional)
64
- # ============================================
65
-
66
- # Google Analytics
67
- # NEXT_PUBLIC_GOOGLE_ANALYTICS=""
68
-
69
- # Google Tag Manager
70
- # NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=""
71
-
72
- # Facebook
73
- # NEXT_PUBLIC_FACEBOOK_APP_ID=""
74
-
75
-
76
- # ============================================
77
- # VERCEL (Auto-populated by Vercel CLI)
78
- # ============================================
79
-
80
- # These are automatically set by Vercel
81
- # VERCEL_OIDC_TOKEN=""
package/.gitattributes DELETED
@@ -1,19 +0,0 @@
1
- # Git Attributes Configuration
2
- # This file ensures consistent line endings across all platforms
3
- #
4
- # Configuration:
5
- # * - Applies to all files in the repository
6
- # text=auto - Git automatically detects text vs binary files
7
- # eol=lf - Normalizes line endings to LF (Unix-style) for text files
8
- #
9
- # Why this matters:
10
- # - Windows uses CRLF (\r\n) line endings
11
- # - Unix/Linux/macOS use LF (\n) line endings
12
- # - This prevents line-ending conflicts and ensures consistent diffs
13
- #
14
- # What it does:
15
- # - On commit: Normalizes all text files to LF line endings
16
- # - On checkout: Converts to platform-native format if needed
17
- # - Prevents merge conflicts caused by line ending differences
18
-
19
- * text=auto eol=lf
@@ -1,80 +0,0 @@
1
- name: Canary Release
2
-
3
- on:
4
- workflow_dispatch:
5
-
6
- permissions:
7
- contents: read
8
- id-token: write
9
-
10
- concurrency:
11
- group: canary-main
12
- cancel-in-progress: true
13
-
14
- jobs:
15
- canary:
16
- runs-on: ubuntu-latest
17
-
18
- steps:
19
- - name: Checkout
20
- uses: actions/checkout@v4
21
- with:
22
- fetch-depth: 0
23
-
24
- - name: Setup Bun
25
- uses: oven-sh/setup-bun@v2
26
- with:
27
- bun-version: latest
28
-
29
- - name: Setup Node for npm publishing
30
- uses: actions/setup-node@v4
31
- with:
32
- node-version: 24
33
-
34
- - name: Use npm 11.6.2
35
- run: npm i -g npm@11.6.2
36
-
37
- - name: Install dependencies
38
- run: bun install --frozen-lockfile
39
-
40
- - name: Type check
41
- run: bun run check
42
-
43
- - name: Build
44
- run: bun run build
45
-
46
- - name: Configure npm for publishing
47
- run: |
48
- cat > ~/.npmrc <<'EOF'
49
- registry=https://registry.npmjs.org/
50
- access=public
51
- EOF
52
-
53
- - name: Check pending changesets
54
- id: changesets
55
- run: |
56
- bunx changeset status --output=changeset-status.json
57
- node <<'NODE'
58
- const fs = require('node:fs');
59
- const status = JSON.parse(fs.readFileSync('changeset-status.json', 'utf8'));
60
- const releaseCount = Array.isArray(status.releases) ? status.releases.length : 0;
61
- const hasReleases = releaseCount > 0;
62
-
63
- fs.appendFileSync(process.env.GITHUB_OUTPUT, `has_releases=${hasReleases}\n`);
64
- console.log(`Found ${releaseCount} package(s) eligible for canary release.`);
65
- NODE
66
-
67
- - name: Version canary packages
68
- if: steps.changesets.outputs.has_releases == 'true'
69
- run: bun run version-canary
70
-
71
- - name: Publish canary packages
72
- if: steps.changesets.outputs.has_releases == 'true'
73
- run: bun run release-canary
74
- env:
75
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
76
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
77
-
78
- - name: Skip publish (no pending changesets)
79
- if: steps.changesets.outputs.has_releases != 'true'
80
- run: echo "No pending changesets. Skipping canary publish."