@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
@@ -1,574 +0,0 @@
1
- "use client"
2
-
3
- import { TextAlignRightIcon } from "@phosphor-icons/react"
4
- import { AnimatePresence, motion } from "motion/react"
5
- import { useCallback, useEffect, useMemo, useState } from "react"
6
- import { CUSTOM_SHADER_ENTRY_EXPORT } from "@/lib/editor/custom-shader/shared"
7
- import { formatCustomShaderSource } from "@/renderer/custom-shader-runtime"
8
- import type {
9
- AnimatedPropertyBinding,
10
- BlendMode,
11
- LayerCompositeMode,
12
- LayerType,
13
- ParameterDefinition,
14
- ParameterValue,
15
- } from "@/types/editor"
16
- import { cn } from "@/lib/cn"
17
- import { Button } from "@/components/ui/button"
18
- import { IconButton } from "@/components/ui/icon-button"
19
- import { Select } from "@/components/ui/select"
20
- import { Slider } from "@/components/ui/slider"
21
- import { Typography } from "@/components/ui/typography"
22
- import { useTimelineStore } from "@/store/timeline-store"
23
- import {
24
- ParameterField,
25
- renderFieldLabel,
26
- type TimelineKeyframeControl,
27
- } from "./properties-sidebar-fields"
28
- import {
29
- blendModeOptions,
30
- compositeModeOptions,
31
- createParamTimelineBinding,
32
- DEFAULT_PARAM_GROUP,
33
- formatLayerKind,
34
- groupVisibleParams,
35
- hasTrackForBinding,
36
- } from "./properties-sidebar-utils"
37
-
38
- export function EmptyPropertiesContent() {
39
- return (
40
- <div className="flex flex-col gap-1.5 p-4">
41
- <Typography tone="secondary" variant="overline">
42
- Properties
43
- </Typography>
44
- <Typography variant="body">Select a layer to edit it.</Typography>
45
- <Typography tone="muted" variant="caption">
46
- Nothing to edit yet. Create a new layer in the left panel.
47
- </Typography>
48
- </div>
49
- )
50
- }
51
-
52
- function CustomShaderSection({
53
- layerId,
54
- updateLayerParam,
55
- values,
56
- }: {
57
- layerId: string
58
- updateLayerParam: (id: string, key: string, value: ParameterValue) => void
59
- values: Record<string, ParameterValue>
60
- }) {
61
- const persistedSource =
62
- typeof values.sourceCode === "string" ? values.sourceCode : ""
63
- const persistedEntryExport =
64
- typeof values.entryExport === "string" && values.entryExport.trim()
65
- ? values.entryExport
66
- : CUSTOM_SHADER_ENTRY_EXPORT
67
- const persistedRevision =
68
- typeof values.sourceRevision === "number" ? values.sourceRevision : 0
69
- const [draftSource, setDraftSource] = useState(persistedSource)
70
- const [draftEntryExport, setDraftEntryExport] = useState(persistedEntryExport)
71
- const [formatError, setFormatError] = useState<string | null>(null)
72
-
73
- useEffect(() => {
74
- setDraftSource(persistedSource)
75
- }, [persistedSource])
76
-
77
- useEffect(() => {
78
- setDraftEntryExport(persistedEntryExport)
79
- }, [persistedEntryExport])
80
-
81
- const isDirty =
82
- draftSource !== persistedSource || draftEntryExport !== persistedEntryExport
83
-
84
- const commitShader = useCallback(
85
- (next: { entryExport?: string; sourceCode?: string } = {}) => {
86
- const nextEntryExport =
87
- (next.entryExport ?? draftEntryExport).trim() ||
88
- CUSTOM_SHADER_ENTRY_EXPORT
89
- const nextSourceCode = next.sourceCode ?? draftSource
90
-
91
- updateLayerParam(layerId, "sourceMode", "paste")
92
- updateLayerParam(layerId, "entryExport", nextEntryExport)
93
- updateLayerParam(layerId, "sourceFileName", "")
94
- updateLayerParam(layerId, "sourceCode", nextSourceCode)
95
- updateLayerParam(layerId, "sourceRevision", persistedRevision + 1)
96
- },
97
- [
98
- draftEntryExport,
99
- draftSource,
100
- layerId,
101
- persistedRevision,
102
- updateLayerParam,
103
- ]
104
- )
105
-
106
- return (
107
- <section className="flex flex-col gap-3 border-t border-[var(--ds-border-divider)] px-4 pt-[14px] pb-4 first:border-t-0">
108
- <Typography
109
- className="uppercase"
110
- tone="secondary"
111
- variant="overline"
112
- >
113
- Shader
114
- </Typography>
115
-
116
- <div className="flex flex-col gap-[10px]">
117
- <label className="flex flex-col gap-2">
118
- <Typography className="min-w-0" tone="secondary" variant="label">
119
- Entry Export
120
- </Typography>
121
- <input
122
- className="min-h-9 appearance-none rounded-[var(--ds-radius-control)] border border-[var(--ds-border-divider)] bg-[var(--ds-color-surface-control)] px-[10px] py-2 font-[var(--ds-font-mono)] text-[12px] leading-4 text-[var(--ds-color-text-primary)] outline-none transition-[border-color,background-color] duration-120 ease-[ease] focus:border-[var(--ds-color-text-secondary)] placeholder:text-[var(--ds-color-text-muted)]"
123
- onChange={(event) => {
124
- setDraftEntryExport(event.currentTarget.value)
125
- setFormatError(null)
126
- }}
127
- spellCheck={false}
128
- type="text"
129
- value={draftEntryExport}
130
- />
131
- </label>
132
-
133
- <label className="flex flex-col gap-2">
134
- <Typography className="min-w-0" tone="secondary" variant="label">
135
- Sketch Source
136
- </Typography>
137
- <textarea
138
- className="min-h-[280px] w-full resize-y appearance-none rounded-[var(--ds-radius-control)] border border-[var(--ds-border-divider)] bg-[var(--ds-color-surface-control)] px-3 py-[10px] font-[var(--ds-font-mono)] text-[12px] leading-[18px] text-[var(--ds-color-text-primary)] outline-none transition-[border-color,background-color] duration-120 ease-[ease] focus:border-[var(--ds-color-text-secondary)]"
139
- onChange={(event) => {
140
- setDraftSource(event.currentTarget.value)
141
- setFormatError(null)
142
- }}
143
- spellCheck={false}
144
- value={draftSource}
145
- />
146
- </label>
147
-
148
- <div className="flex flex-wrap items-center justify-between gap-2">
149
- <div className="inline-flex items-center gap-2">
150
- <Button
151
- disabled={!isDirty}
152
- onClick={() => commitShader()}
153
- size="compact"
154
- variant="primary"
155
- >
156
- Apply
157
- </Button>
158
- </div>
159
-
160
- <IconButton
161
- aria-label="Format sketch source"
162
- className="shrink-0"
163
- onClick={() => {
164
- void formatCustomShaderSource({
165
- fileName: "custom-shader.ts",
166
- sourceCode: draftSource,
167
- })
168
- .then((formatted) => {
169
- setDraftSource(formatted)
170
- setFormatError(null)
171
- })
172
- .catch((error) => {
173
- setFormatError(
174
- error instanceof Error
175
- ? error.message
176
- : "Could not format sketch source."
177
- )
178
- })
179
- }}
180
- title="Format sketch source"
181
- variant="ghost"
182
- >
183
- <TextAlignRightIcon size={14} weight="regular" />
184
- </IconButton>
185
- </div>
186
-
187
- <Typography tone="muted" variant="caption">
188
- {`⌘V export const sketch = Fn(() => { ...`}
189
- </Typography>
190
- {formatError ? (
191
- <Typography tone="muted" variant="caption">
192
- {formatError}
193
- </Typography>
194
- ) : null}
195
- </div>
196
- </section>
197
- )
198
- }
199
-
200
- export function SelectedLayerPropertiesContent({
201
- blendMode,
202
- compositeMode,
203
- definitionName,
204
- expandedParamGroups,
205
- hue,
206
- layerId,
207
- layerKind,
208
- layerName,
209
- layerRuntimeError,
210
- layerSubtitle,
211
- layerType,
212
- onToggleParamGroup,
213
- onTimelineKeyframe,
214
- opacity,
215
- reduceMotion,
216
- saturation,
217
- setLayerBlendMode,
218
- setLayerCompositeMode,
219
- setLayerHue,
220
- setLayerOpacity,
221
- setLayerSaturation,
222
- timelinePanelOpen,
223
- updateLayerParam,
224
- values,
225
- visibleParams,
226
- }: {
227
- blendMode: BlendMode
228
- compositeMode: LayerCompositeMode
229
- definitionName: string
230
- expandedParamGroups: Record<string, boolean>
231
- hue: number
232
- layerId: string
233
- layerKind: string
234
- layerName: string
235
- layerRuntimeError: string | null
236
- layerSubtitle: string
237
- layerType: LayerType
238
- onToggleParamGroup: (groupId: string) => void
239
- onTimelineKeyframe: (
240
- binding: AnimatedPropertyBinding,
241
- layerId: string,
242
- value: ParameterValue
243
- ) => void
244
- opacity: number
245
- reduceMotion: boolean
246
- saturation: number
247
- setLayerBlendMode: (id: string, value: BlendMode) => void
248
- setLayerCompositeMode: (id: string, value: LayerCompositeMode) => void
249
- setLayerHue: (id: string, value: number) => void
250
- setLayerOpacity: (id: string, value: number) => void
251
- setLayerSaturation: (id: string, value: number) => void
252
- timelinePanelOpen: boolean
253
- updateLayerParam: (id: string, key: string, value: ParameterValue) => void
254
- values: Record<string, ParameterValue>
255
- visibleParams: ParameterDefinition[]
256
- }) {
257
- const groupedParams = useMemo(
258
- () => groupVisibleParams(visibleParams),
259
- [visibleParams]
260
- )
261
- const showGroupedParams =
262
- groupedParams.length > 1 || groupedParams[0]?.label !== DEFAULT_PARAM_GROUP
263
-
264
- const opacityBinding = useMemo(
265
- () => ({
266
- kind: "layer" as const,
267
- label: "Opacity",
268
- property: "opacity" as const,
269
- valueType: "number" as const,
270
- }),
271
- []
272
- )
273
- const hueBinding = useMemo(
274
- () => ({
275
- kind: "layer" as const,
276
- label: "Hue",
277
- property: "hue" as const,
278
- valueType: "number" as const,
279
- }),
280
- []
281
- )
282
- const saturationBinding = useMemo(
283
- () => ({
284
- kind: "layer" as const,
285
- label: "Saturation",
286
- property: "saturation" as const,
287
- valueType: "number" as const,
288
- }),
289
- []
290
- )
291
- const timelineTracks = useTimelineStore((state) => state.tracks)
292
-
293
- const hasTrack = useCallback(
294
- (binding: AnimatedPropertyBinding) =>
295
- hasTrackForBinding(timelineTracks, layerId, binding),
296
- [layerId, timelineTracks]
297
- )
298
-
299
- const buildTimelineControl = useCallback(
300
- (
301
- binding: AnimatedPropertyBinding | null,
302
- value: ParameterValue
303
- ): TimelineKeyframeControl | null => {
304
- if (!binding) {
305
- return null
306
- }
307
-
308
- return {
309
- binding,
310
- hasTrack: hasTrack(binding),
311
- layerId,
312
- onKeyframe: onTimelineKeyframe,
313
- reduceMotion,
314
- timelinePanelOpen,
315
- value,
316
- }
317
- },
318
- [hasTrack, layerId, onTimelineKeyframe, reduceMotion, timelinePanelOpen]
319
- )
320
-
321
- return (
322
- <>
323
- <div className="flex flex-col gap-1.5 border-b border-[var(--ds-border-divider)] px-4 pt-[14px] pb-3">
324
- <div className="flex items-center justify-between gap-2">
325
- <Typography tone="secondary" variant="overline">
326
- Properties
327
- </Typography>
328
- <span className="inline-flex min-h-5 items-center rounded-[var(--ds-radius-icon)] border border-[var(--ds-border-divider)] bg-[var(--ds-color-surface-active)] px-[7px] font-[var(--ds-font-mono)] text-[10px] leading-3 text-[var(--ds-color-text-secondary)] capitalize">
329
- {formatLayerKind(layerKind)}
330
- </span>
331
- </div>
332
- <Typography variant="title">{layerName}</Typography>
333
- {layerSubtitle ? (
334
- <Typography tone="muted" variant="monoXs">
335
- {layerSubtitle}
336
- </Typography>
337
- ) : null}
338
- {layerRuntimeError ? (
339
- <Typography tone="muted" variant="caption">
340
- {layerRuntimeError}
341
- </Typography>
342
- ) : null}
343
- </div>
344
-
345
- <div className="flex min-h-0 max-h-[min(62vh,620px)] flex-col gap-0 overflow-y-auto">
346
- <section className="flex flex-col gap-3 border-t border-[var(--ds-border-divider)] px-4 pt-[14px] pb-4 first:border-t-0">
347
- <Typography
348
- className="uppercase"
349
- tone="secondary"
350
- variant="overline"
351
- >
352
- General
353
- </Typography>
354
-
355
- <div className="flex flex-col gap-[10px]">
356
- <Slider
357
- label={renderFieldLabel(
358
- "Opacity",
359
- buildTimelineControl(opacityBinding, opacity)
360
- )}
361
- max={100}
362
- min={0}
363
- onValueChange={(value) => setLayerOpacity(layerId, value / 100)}
364
- value={opacity * 100}
365
- valueSuffix="%"
366
- />
367
-
368
- <div className="grid items-center gap-[10px] [grid-template-columns:minmax(0,1fr)_132px]">
369
- <Typography
370
- className="min-w-0"
371
- tone="secondary"
372
- variant="label"
373
- >
374
- Blend
375
- </Typography>
376
- <Select
377
- className="w-[132px]"
378
- onValueChange={(value) => {
379
- if (value) {
380
- setLayerBlendMode(layerId, value as BlendMode)
381
- }
382
- }}
383
- options={blendModeOptions}
384
- triggerClassName="w-[132px]"
385
- value={blendMode}
386
- />
387
- </div>
388
-
389
- <div className="grid items-center gap-[10px] [grid-template-columns:minmax(0,1fr)_132px]">
390
- <Typography
391
- className="min-w-0"
392
- tone="secondary"
393
- variant="label"
394
- >
395
- Mode
396
- </Typography>
397
- <Select
398
- className="w-[132px]"
399
- onValueChange={(value) => {
400
- if (value) {
401
- setLayerCompositeMode(layerId, value as LayerCompositeMode)
402
- }
403
- }}
404
- options={compositeModeOptions}
405
- triggerClassName="w-[132px]"
406
- value={compositeMode}
407
- />
408
- </div>
409
-
410
- <Slider
411
- label={renderFieldLabel(
412
- "Hue",
413
- buildTimelineControl(hueBinding, hue)
414
- )}
415
- max={180}
416
- min={-180}
417
- onValueChange={(value) => setLayerHue(layerId, value)}
418
- value={hue}
419
- />
420
-
421
- <Slider
422
- label={renderFieldLabel(
423
- "Saturation",
424
- buildTimelineControl(saturationBinding, saturation)
425
- )}
426
- max={2}
427
- min={0}
428
- onValueChange={(value) => setLayerSaturation(layerId, value)}
429
- step={0.01}
430
- value={saturation}
431
- valueFormatOptions={{
432
- maximumFractionDigits: 2,
433
- minimumFractionDigits: 2,
434
- }}
435
- />
436
- </div>
437
- </section>
438
-
439
- {layerType === "custom-shader" ? (
440
- <CustomShaderSection
441
- layerId={layerId}
442
- updateLayerParam={updateLayerParam}
443
- values={values}
444
- />
445
- ) : null}
446
-
447
- {visibleParams.length > 0 ? (
448
- <section className="flex flex-col gap-3 border-t border-[var(--ds-border-divider)] px-4 pt-[14px] pb-4 first:border-t-0">
449
- {!showGroupedParams && (
450
- <Typography
451
- className="uppercase"
452
- tone="secondary"
453
- variant="overline"
454
- >
455
- {definitionName}
456
- </Typography>
457
- )}
458
-
459
- {showGroupedParams ? (
460
- <div className="flex flex-col gap-3">
461
- {groupedParams.map((group) => {
462
- const groupKey = `${layerId}:${group.id}`
463
- const isExpanded = expandedParamGroups[groupKey] ?? true
464
-
465
- return (
466
- <div className="flex flex-col gap-[10px]" key={group.id}>
467
- {group.collapsible ? (
468
- <button
469
- aria-expanded={isExpanded}
470
- className="inline-flex min-h-0 cursor-pointer items-center bg-transparent p-0 text-left text-inherit transition-[background-color,color,transform] duration-120 ease-[ease] hover:text-[var(--ds-color-text-primary)] active:scale-[0.99]"
471
- onClick={() => onToggleParamGroup(groupKey)}
472
- type="button"
473
- >
474
- <div className="inline-flex min-w-0 items-center gap-2">
475
- <span
476
- aria-hidden="true"
477
- className={cn(
478
- "inline-block h-[7px] w-[7px] shrink-0 border-r-[1.5px] border-b-[1.5px] border-[var(--ds-color-text-secondary)] transition-transform duration-180 ease-[cubic-bezier(0.34,1.56,0.64,1)]",
479
- isExpanded
480
- ? "translate-x-[-1px] translate-y-[-1px] rotate-[-135deg]"
481
- : "translate-y-[-1px] rotate-45"
482
- )}
483
- />
484
- <Typography tone="secondary" variant="overline">
485
- {group.label}
486
- </Typography>
487
- </div>
488
- </button>
489
- ) : (
490
- <div className="inline-flex min-w-0 items-center gap-2 px-[2px]">
491
- <Typography tone="secondary" variant="overline">
492
- {group.label}
493
- </Typography>
494
- </div>
495
- )}
496
-
497
- <AnimatePresence initial={false}>
498
- {isExpanded ? (
499
- <motion.div
500
- animate={
501
- reduceMotion
502
- ? { opacity: 1 }
503
- : { height: "auto", opacity: 1 }
504
- }
505
- exit={
506
- reduceMotion
507
- ? { opacity: 0 }
508
- : { height: 0, opacity: 0 }
509
- }
510
- initial={
511
- reduceMotion
512
- ? { opacity: 0 }
513
- : { height: 0, opacity: 0 }
514
- }
515
- transition={
516
- reduceMotion
517
- ? { duration: 0.12, ease: "easeOut" }
518
- : {
519
- damping: 34,
520
- mass: 0.85,
521
- stiffness: 360,
522
- type: "spring",
523
- }
524
- }
525
- >
526
- <div className="flex flex-col gap-[10px]">
527
- {group.params.map((param) => (
528
- <ParameterField
529
- definition={param}
530
- key={param.key}
531
- layerId={layerId}
532
- onChange={updateLayerParam}
533
- onTimelineKeyframe={onTimelineKeyframe}
534
- reduceMotion={reduceMotion}
535
- timelineBinding={createParamTimelineBinding(
536
- param
537
- )}
538
- timelinePanelOpen={timelinePanelOpen}
539
- value={
540
- values[param.key] ?? param.defaultValue
541
- }
542
- />
543
- ))}
544
- </div>
545
- </motion.div>
546
- ) : null}
547
- </AnimatePresence>
548
- </div>
549
- )
550
- })}
551
- </div>
552
- ) : (
553
- <div className="flex flex-col gap-[10px]">
554
- {visibleParams.map((param) => (
555
- <ParameterField
556
- definition={param}
557
- key={param.key}
558
- layerId={layerId}
559
- onChange={updateLayerParam}
560
- onTimelineKeyframe={onTimelineKeyframe}
561
- reduceMotion={reduceMotion}
562
- timelineBinding={createParamTimelineBinding(param)}
563
- timelinePanelOpen={timelinePanelOpen}
564
- value={values[param.key] ?? param.defaultValue}
565
- />
566
- ))}
567
- </div>
568
- )}
569
- </section>
570
- ) : null}
571
- </div>
572
- </>
573
- )
574
- }