@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,675 +0,0 @@
1
- import { create } from "zustand"
2
- import { getLayerDefinition } from "@/lib/editor/config/layer-registry"
3
- import {
4
- clampLayerAdjustments,
5
- cloneLayer,
6
- createLayer,
7
- resetLayerParameters,
8
- } from "@/lib/editor/layers"
9
- import {
10
- cloneParameterValue,
11
- getParameterDefinition,
12
- } from "@/lib/editor/parameter-schema"
13
- import { useEditorStore } from "@/store/editor-store"
14
- import type {
15
- BlendMode,
16
- EditorLayer,
17
- LayerCompositeMode,
18
- LayerType,
19
- ParameterValue,
20
- } from "@/types/editor"
21
-
22
- export interface LayerStoreState {
23
- hoveredLayerId: string | null
24
- layers: EditorLayer[]
25
- selectedLayerId: string | null
26
- }
27
-
28
- export interface LayerStoreActions {
29
- addLayer: (type: LayerType, insertIndex?: number) => string
30
- duplicateLayer: (id: string) => string | null
31
- getLayerById: (id: string) => EditorLayer | null
32
- getRenderableLayers: () => EditorLayer[]
33
- getSelectedLayer: () => EditorLayer | null
34
- removeLayer: (id: string) => void
35
- renameLayer: (id: string, name: string) => void
36
- replaceState: (
37
- layers: EditorLayer[],
38
- selectedLayerId?: string | null,
39
- hoveredLayerId?: string | null
40
- ) => void
41
- reorderLayers: (fromIndex: number, toIndex: number) => void
42
- resetLayerParams: (id: string) => void
43
- selectLayer: (id: string | null) => void
44
- setHoveredLayer: (id: string | null) => void
45
- setLayerAsset: (id: string, assetId: string | null) => void
46
- setLayerBlendMode: (id: string, blendMode: BlendMode) => void
47
- setLayerCompositeMode: (id: string, compositeMode: LayerCompositeMode) => void
48
- setLayerExpanded: (id: string, expanded: boolean) => void
49
- setLayerHue: (id: string, hue: number) => void
50
- setLayerLocked: (id: string, locked: boolean) => void
51
- setLayerOpacity: (id: string, opacity: number) => void
52
- setLayerRuntimeError: (id: string, error: string | null) => void
53
- setLayerSaturation: (id: string, saturation: number) => void
54
- setLayerVisibility: (id: string, visible: boolean) => void
55
- updateLayerParam: (id: string, key: string, value: ParameterValue) => void
56
- }
57
-
58
- export type LayerStore = LayerStoreState & LayerStoreActions
59
-
60
- function getGradientNoiseDefaults(noiseType: string): {
61
- warpAmount: number
62
- warpScale: number
63
- } | null {
64
- switch (noiseType) {
65
- case "perlin":
66
- return {
67
- warpAmount: 0.64,
68
- warpScale: 5.56,
69
- }
70
- case "value":
71
- return {
72
- warpAmount: 0.06,
73
- warpScale: 0.35,
74
- }
75
- case "voronoi":
76
- return {
77
- warpAmount: 0.3,
78
- warpScale: 3.0,
79
- }
80
- case "ridge":
81
- return {
82
- warpAmount: 0.2,
83
- warpScale: 2.0,
84
- }
85
- case "turbulence":
86
- return {
87
- warpAmount: 0.04,
88
- warpScale: 0.28,
89
- }
90
- case "simplex":
91
- return {
92
- warpAmount: 0.64,
93
- warpScale: 5.56,
94
- }
95
- default:
96
- return null
97
- }
98
- }
99
-
100
- function getGradientPresetDefaults(
101
- preset: string
102
- ): Record<string, ParameterValue> | null {
103
- switch (preset) {
104
- case "aurora":
105
- return {
106
- activePoints: 5,
107
- point1Color: "#ed6a5a",
108
- point1Position: [-0.8, -0.6],
109
- point1Weight: 1.0,
110
- point2Color: "#f4f1bb",
111
- point2Position: [0.2, 0.7],
112
- point2Weight: 1.0,
113
- point3Color: "#9bc1bc",
114
- point3Position: [0.9, -0.3],
115
- point3Weight: 1.0,
116
- point4Color: "#5d576b",
117
- point4Position: [-0.4, 0.5],
118
- point4Weight: 1.0,
119
- point5Color: "#e6ebe0",
120
- point5Position: [0.6, -0.8],
121
- point5Weight: 1.0,
122
- noiseType: "simplex",
123
- warpAmount: 0.8,
124
- warpScale: 4.0,
125
- warpIterations: 3,
126
- warpDecay: 1.0,
127
- warpBias: 0.65,
128
- vortexAmount: 0.3,
129
- falloff: 3.5,
130
- tonemapMode: "totos",
131
- glowStrength: 0.0,
132
- glowThreshold: 0.0,
133
- grainAmount: 0.08,
134
- vignetteStrength: 0.0,
135
- vignetteRadius: 1.5,
136
- vignetteSoftness: 1,
137
- }
138
- case "sunset":
139
- return {
140
- activePoints: 4,
141
- point1Color: "#1a0a2e",
142
- point1Position: [-0.6, -0.8],
143
- point1Weight: 0.8,
144
- point2Color: "#c4420a",
145
- point2Position: [0.3, 0.4],
146
- point2Weight: 1.2,
147
- point3Color: "#e8821a",
148
- point3Position: [0.8, 0.7],
149
- point3Weight: 0.9,
150
- point4Color: "#4a1942",
151
- point4Position: [-0.5, 0.3],
152
- point4Weight: 1.0,
153
- noiseType: "simplex",
154
- warpAmount: 0.6,
155
- warpScale: 3.5,
156
- warpIterations: 2,
157
- warpDecay: 1.2,
158
- warpBias: 0.5,
159
- vortexAmount: 0.0,
160
- falloff: 3.5,
161
- tonemapMode: "totos",
162
- glowStrength: 0.0,
163
- glowThreshold: 0.0,
164
- grainAmount: 0.08,
165
- vignetteStrength: 0.15,
166
- vignetteRadius: 1.4,
167
- vignetteSoftness: 0.8,
168
- }
169
- case "deep-ocean":
170
- return {
171
- activePoints: 4,
172
- point1Color: "#020b1a",
173
- point1Position: [0.0, -0.7],
174
- point1Weight: 0.8,
175
- point2Color: "#0a3d62",
176
- point2Position: [-0.6, 0.4],
177
- point2Weight: 1.2,
178
- point3Color: "#3c8dbc",
179
- point3Position: [0.7, 0.1],
180
- point3Weight: 0.9,
181
- point4Color: "#061224",
182
- point4Position: [0.3, 0.8],
183
- point4Weight: 1.0,
184
- noiseType: "turbulence",
185
- warpAmount: 0.04,
186
- warpScale: 0.28,
187
- warpIterations: 3,
188
- warpDecay: 0.8,
189
- warpBias: 0.4,
190
- vortexAmount: 0.35,
191
- falloff: 3.5,
192
- tonemapMode: "totos",
193
- glowStrength: 0.0,
194
- glowThreshold: 0.0,
195
- grainAmount: 0.06,
196
- vignetteStrength: 0.2,
197
- vignetteRadius: 1.3,
198
- vignetteSoftness: 0.7,
199
- }
200
- case "neon-glow":
201
- return {
202
- activePoints: 5,
203
- point1Color: "#0a0a0a",
204
- point1Position: [0.0, 0.0],
205
- point1Weight: 0.6,
206
- point2Color: "#b80050",
207
- point2Position: [-0.7, -0.5],
208
- point2Weight: 1.3,
209
- point3Color: "#0088aa",
210
- point3Position: [0.8, 0.3],
211
- point3Weight: 1.1,
212
- point4Color: "#220033",
213
- point4Position: [0.2, -0.8],
214
- point4Weight: 0.9,
215
- point5Color: "#1a0a2e",
216
- point5Position: [-0.5, 0.7],
217
- point5Weight: 1.0,
218
- noiseType: "simplex",
219
- warpAmount: 0.7,
220
- warpScale: 4.0,
221
- warpIterations: 3,
222
- warpDecay: 1.0,
223
- warpBias: 0.35,
224
- vortexAmount: -0.25,
225
- falloff: 3.5,
226
- tonemapMode: "totos",
227
- glowStrength: 0.0,
228
- glowThreshold: 0.0,
229
- grainAmount: 0.05,
230
- vignetteStrength: 0.1,
231
- vignetteRadius: 1.5,
232
- vignetteSoftness: 1,
233
- }
234
- default:
235
- return null
236
- }
237
- }
238
-
239
- function getDitheringPresetDefaults(
240
- preset: string
241
- ): Record<string, ParameterValue> | null {
242
- switch (preset) {
243
- case "gameboy":
244
- return {
245
- algorithm: "bayer-2x2",
246
- colorMode: "duo-tone",
247
- highlightColor: "#9bbc0f",
248
- levels: 4,
249
- pixelSize: 3,
250
- shadowColor: "#0f380f",
251
- spread: 0.5,
252
- }
253
- default:
254
- return null
255
- }
256
- }
257
-
258
- function getHalftonePresetDefaults(
259
- preset: string
260
- ): Record<string, ParameterValue> | null {
261
- switch (preset) {
262
- case "process":
263
- return {
264
- inkCyan: "#00AEEF",
265
- inkMagenta: "#EC008C",
266
- inkYellow: "#FFF200",
267
- inkKey: "#1a1a1a",
268
- paperColor: "#F5F5F0",
269
- }
270
- case "risograph":
271
- return {
272
- inkCyan: "#0078BF",
273
- inkMagenta: "#FF48B0",
274
- inkYellow: "#FFE800",
275
- inkKey: "#000000",
276
- paperColor: "#F2F0E6",
277
- }
278
- case "newspaper":
279
- return {
280
- inkCyan: "#1A6B8A",
281
- inkMagenta: "#8C3A5E",
282
- inkYellow: "#C4A832",
283
- inkKey: "#2B2B2B",
284
- paperColor: "#F0E6D0",
285
- }
286
- case "vintage":
287
- return {
288
- inkCyan: "#3A7CA5",
289
- inkMagenta: "#A0506A",
290
- inkYellow: "#D4A843",
291
- inkKey: "#3C3228",
292
- paperColor: "#EDE4D4",
293
- }
294
- default:
295
- return null
296
- }
297
- }
298
-
299
- export function cloneLayerList(layers: EditorLayer[]): EditorLayer[] {
300
- return layers.map((layer) => ({
301
- ...layer,
302
- params: { ...layer.params },
303
- }))
304
- }
305
-
306
- function countLayersOfType(layers: EditorLayer[], type: LayerType): number {
307
- return layers.filter((layer) => layer.type === type).length
308
- }
309
-
310
- function getNeighborSelection(
311
- layers: EditorLayer[],
312
- removedIndex: number
313
- ): string | null {
314
- const nextIndex = Math.min(removedIndex, layers.length - 1)
315
- const nextLayer = layers[nextIndex]
316
-
317
- return nextLayer?.id ?? null
318
- }
319
-
320
- export const useLayerStore = create<LayerStore>((set, get) => ({
321
- hoveredLayerId: null,
322
- layers: [],
323
- selectedLayerId: null,
324
-
325
- addLayer: (type, insertIndex) => {
326
- const existingLayers = get().layers
327
- const nextLayer = createLayer(type, countLayersOfType(existingLayers, type))
328
-
329
- set((state) => {
330
- const layers = [...state.layers]
331
-
332
- if (
333
- insertIndex === undefined ||
334
- insertIndex < 0 ||
335
- insertIndex > layers.length
336
- ) {
337
- layers.unshift(nextLayer)
338
- } else {
339
- layers.splice(insertIndex, 0, nextLayer)
340
- }
341
-
342
- return {
343
- layers,
344
- selectedLayerId: nextLayer.id,
345
- }
346
- })
347
-
348
- useEditorStore.getState().dismissStartupPreview()
349
-
350
- return nextLayer.id
351
- },
352
-
353
- removeLayer: (id) => {
354
- set((state) => {
355
- const removedIndex = state.layers.findIndex((layer) => layer.id === id)
356
-
357
- if (removedIndex === -1) {
358
- return state
359
- }
360
-
361
- const layers = state.layers.filter((layer) => layer.id !== id)
362
-
363
- return {
364
- hoveredLayerId:
365
- state.hoveredLayerId === id ? null : state.hoveredLayerId,
366
- layers,
367
- selectedLayerId:
368
- state.selectedLayerId === id
369
- ? getNeighborSelection(layers, removedIndex)
370
- : state.selectedLayerId,
371
- }
372
- })
373
- },
374
-
375
- duplicateLayer: (id) => {
376
- const sourceLayer = get().layers.find((layer) => layer.id === id)
377
-
378
- if (!sourceLayer) {
379
- return null
380
- }
381
-
382
- const duplicatedLayer = cloneLayer(sourceLayer)
383
-
384
- set((state) => {
385
- const sourceIndex = state.layers.findIndex((layer) => layer.id === id)
386
- const layers = [...state.layers]
387
-
388
- layers.splice(sourceIndex + 1, 0, duplicatedLayer)
389
-
390
- return {
391
- layers,
392
- selectedLayerId: duplicatedLayer.id,
393
- }
394
- })
395
-
396
- return duplicatedLayer.id
397
- },
398
-
399
- reorderLayers: (fromIndex, toIndex) => {
400
- set((state) => {
401
- if (
402
- fromIndex < 0 ||
403
- toIndex < 0 ||
404
- fromIndex >= state.layers.length ||
405
- toIndex >= state.layers.length ||
406
- fromIndex === toIndex
407
- ) {
408
- return state
409
- }
410
-
411
- const layers = [...state.layers]
412
- const [movedLayer] = layers.splice(fromIndex, 1)
413
-
414
- if (!movedLayer) {
415
- return state
416
- }
417
-
418
- layers.splice(toIndex, 0, movedLayer)
419
-
420
- return { layers }
421
- })
422
- },
423
-
424
- selectLayer: (selectedLayerId) => {
425
- set({ selectedLayerId })
426
- },
427
-
428
- setHoveredLayer: (hoveredLayerId) => {
429
- set({ hoveredLayerId })
430
- },
431
-
432
- renameLayer: (id, name) => {
433
- const nextName = name.trim()
434
-
435
- if (!nextName) {
436
- return
437
- }
438
-
439
- set((state) => ({
440
- layers: state.layers.map((layer) =>
441
- layer.id === id ? { ...layer, name: nextName } : layer
442
- ),
443
- }))
444
- },
445
-
446
- setLayerVisibility: (id, visible) => {
447
- set((state) => ({
448
- layers: state.layers.map((layer) =>
449
- layer.id === id ? { ...layer, visible } : layer
450
- ),
451
- }))
452
- },
453
-
454
- setLayerLocked: (id, locked) => {
455
- set((state) => ({
456
- layers: state.layers.map((layer) =>
457
- layer.id === id ? { ...layer, locked } : layer
458
- ),
459
- }))
460
- },
461
-
462
- setLayerExpanded: (id, expanded) => {
463
- set((state) => ({
464
- layers: state.layers.map((layer) =>
465
- layer.id === id ? { ...layer, expanded } : layer
466
- ),
467
- }))
468
- },
469
-
470
- setLayerOpacity: (id, opacity) => {
471
- set((state) => ({
472
- layers: state.layers.map((layer) => {
473
- if (layer.id !== id) {
474
- return layer
475
- }
476
-
477
- return {
478
- ...layer,
479
- ...clampLayerAdjustments({
480
- hue: layer.hue,
481
- opacity,
482
- saturation: layer.saturation,
483
- }),
484
- }
485
- }),
486
- }))
487
- },
488
-
489
- setLayerHue: (id, hue) => {
490
- set((state) => ({
491
- layers: state.layers.map((layer) => {
492
- if (layer.id !== id) {
493
- return layer
494
- }
495
-
496
- return {
497
- ...layer,
498
- ...clampLayerAdjustments({
499
- hue,
500
- opacity: layer.opacity,
501
- saturation: layer.saturation,
502
- }),
503
- }
504
- }),
505
- }))
506
- },
507
-
508
- setLayerSaturation: (id, saturation) => {
509
- set((state) => ({
510
- layers: state.layers.map((layer) => {
511
- if (layer.id !== id) {
512
- return layer
513
- }
514
-
515
- return {
516
- ...layer,
517
- ...clampLayerAdjustments({
518
- hue: layer.hue,
519
- opacity: layer.opacity,
520
- saturation,
521
- }),
522
- }
523
- }),
524
- }))
525
- },
526
-
527
- setLayerBlendMode: (id, blendMode) => {
528
- set((state) => ({
529
- layers: state.layers.map((layer) =>
530
- layer.id === id ? { ...layer, blendMode } : layer
531
- ),
532
- }))
533
- },
534
-
535
- setLayerCompositeMode: (id, compositeMode) => {
536
- set((state) => ({
537
- layers: state.layers.map((layer) =>
538
- layer.id === id ? { ...layer, compositeMode } : layer
539
- ),
540
- }))
541
- },
542
-
543
- setLayerAsset: (id, assetId) => {
544
- set((state) => ({
545
- layers: state.layers.map((layer) =>
546
- layer.id === id ? { ...layer, assetId, runtimeError: null } : layer
547
- ),
548
- }))
549
- },
550
-
551
- updateLayerParam: (id, key, value) => {
552
- set((state) => ({
553
- layers: state.layers.map((layer) => {
554
- if (layer.id !== id) {
555
- return layer
556
- }
557
-
558
- const definition = getParameterDefinition(
559
- getLayerDefinition(layer.type).params,
560
- key
561
- )
562
-
563
- if (!definition) {
564
- return layer
565
- }
566
-
567
- const nextParams = {
568
- ...layer.params,
569
- [key]: cloneParameterValue(value),
570
- }
571
-
572
- if (
573
- layer.type === "gradient" &&
574
- key === "noiseType" &&
575
- typeof value === "string"
576
- ) {
577
- const defaults = getGradientNoiseDefaults(value)
578
-
579
- if (defaults) {
580
- nextParams.warpAmount = defaults.warpAmount
581
- nextParams.warpScale = defaults.warpScale
582
- }
583
- }
584
-
585
- if (
586
- layer.type === "gradient" &&
587
- key === "preset" &&
588
- typeof value === "string"
589
- ) {
590
- const defaults = getGradientPresetDefaults(value)
591
-
592
- if (defaults) {
593
- Object.assign(nextParams, defaults)
594
- }
595
- }
596
-
597
- if (
598
- layer.type === "dithering" &&
599
- key === "preset" &&
600
- typeof value === "string"
601
- ) {
602
- const defaults = getDitheringPresetDefaults(value)
603
-
604
- if (defaults) {
605
- Object.assign(nextParams, defaults)
606
- }
607
- }
608
-
609
- if (
610
- layer.type === "halftone" &&
611
- key === "preset" &&
612
- typeof value === "string"
613
- ) {
614
- const defaults = getHalftonePresetDefaults(value)
615
-
616
- if (defaults) {
617
- Object.assign(nextParams, defaults)
618
- }
619
- }
620
-
621
- return {
622
- ...layer,
623
- params: nextParams,
624
- runtimeError: null,
625
- }
626
- }),
627
- }))
628
- },
629
-
630
- resetLayerParams: (id) => {
631
- set((state) => ({
632
- layers: state.layers.map((layer) =>
633
- layer.id === id
634
- ? {
635
- ...layer,
636
- params: resetLayerParameters(layer.type),
637
- runtimeError: null,
638
- }
639
- : layer
640
- ),
641
- }))
642
- },
643
-
644
- setLayerRuntimeError: (id, runtimeError) => {
645
- set((state) => ({
646
- layers: state.layers.map((layer) =>
647
- layer.id === id ? { ...layer, runtimeError } : layer
648
- ),
649
- }))
650
- },
651
-
652
- replaceState: (layers, selectedLayerId = null, hoveredLayerId = null) => {
653
- set({
654
- hoveredLayerId,
655
- layers: cloneLayerList(layers),
656
- selectedLayerId,
657
- })
658
- },
659
-
660
- getSelectedLayer: () => {
661
- const state = get()
662
-
663
- return (
664
- state.layers.find((layer) => layer.id === state.selectedLayerId) ?? null
665
- )
666
- },
667
-
668
- getLayerById: (id) => {
669
- return get().layers.find((layer) => layer.id === id) ?? null
670
- },
671
-
672
- getRenderableLayers: () => {
673
- return get().layers.filter((layer) => layer.visible)
674
- },
675
- }))