framefields 2.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 (408) hide show
  1. package/LICENCE +202 -0
  2. package/README.md +740 -0
  3. package/dist/audio/index.d.mts +5 -0
  4. package/dist/audio/index.mjs +14 -0
  5. package/dist/audio-Dvwwz8xU.d.mts +37 -0
  6. package/dist/audio-Dvwwz8xU.d.mts.map +1 -0
  7. package/dist/audio-TAvPwzLR.mjs +214 -0
  8. package/dist/audio-TAvPwzLR.mjs.map +1 -0
  9. package/dist/audio-x28ZgQBP.mjs +85 -0
  10. package/dist/audio-x28ZgQBP.mjs.map +1 -0
  11. package/dist/chunk-GMkBE123.mjs +47 -0
  12. package/dist/client-C74hb7fy.mjs +66 -0
  13. package/dist/client-C74hb7fy.mjs.map +1 -0
  14. package/dist/dist-1iUYuPct.mjs +1859 -0
  15. package/dist/dist-1iUYuPct.mjs.map +1 -0
  16. package/dist/dist-Bx6J0VcM.mjs +1859 -0
  17. package/dist/dist-Bx6J0VcM.mjs.map +1 -0
  18. package/dist/dist-C_hjvkdN.mjs +2220 -0
  19. package/dist/dist-C_hjvkdN.mjs.map +1 -0
  20. package/dist/dist-DKm2IyEJ.mjs +94 -0
  21. package/dist/dist-DKm2IyEJ.mjs.map +1 -0
  22. package/dist/dist-cjs-B5EVqDFp.mjs +85 -0
  23. package/dist/dist-cjs-B5EVqDFp.mjs.map +1 -0
  24. package/dist/dist-cjs-BGJkdexX.mjs +437 -0
  25. package/dist/dist-cjs-BGJkdexX.mjs.map +1 -0
  26. package/dist/dist-cjs-BKmGCgtm.mjs +9069 -0
  27. package/dist/dist-cjs-BKmGCgtm.mjs.map +1 -0
  28. package/dist/dist-cjs-BUc0_kg-.mjs +1091 -0
  29. package/dist/dist-cjs-BUc0_kg-.mjs.map +1 -0
  30. package/dist/dist-cjs-BUwe2XhR.mjs +153 -0
  31. package/dist/dist-cjs-BUwe2XhR.mjs.map +1 -0
  32. package/dist/dist-cjs-BWgoUCXJ.mjs +137 -0
  33. package/dist/dist-cjs-BWgoUCXJ.mjs.map +1 -0
  34. package/dist/dist-cjs-CmZEMtO6.mjs +6 -0
  35. package/dist/dist-cjs-D7kEM-Mj.mjs +181 -0
  36. package/dist/dist-cjs-D7kEM-Mj.mjs.map +1 -0
  37. package/dist/dist-cjs-DFUmy89O.mjs +48 -0
  38. package/dist/dist-cjs-DFUmy89O.mjs.map +1 -0
  39. package/dist/dist-cjs-Df7144zM.mjs +209 -0
  40. package/dist/dist-cjs-Df7144zM.mjs.map +1 -0
  41. package/dist/dist-cjs-DgxjcvBN.mjs +98 -0
  42. package/dist/dist-cjs-DgxjcvBN.mjs.map +1 -0
  43. package/dist/dist-cjs-DsMdld8l.mjs +5015 -0
  44. package/dist/dist-cjs-DsMdld8l.mjs.map +1 -0
  45. package/dist/dist-cjs-Dzs5P3K0.mjs +51 -0
  46. package/dist/dist-cjs-Dzs5P3K0.mjs.map +1 -0
  47. package/dist/dist-cjs-ECMuIF57.mjs +323 -0
  48. package/dist/dist-cjs-ECMuIF57.mjs.map +1 -0
  49. package/dist/dist-cjs-lYvO8aDo.mjs +64 -0
  50. package/dist/dist-cjs-lYvO8aDo.mjs.map +1 -0
  51. package/dist/dist-cjs-qEJrwjGk.mjs +66 -0
  52. package/dist/dist-cjs-qEJrwjGk.mjs.map +1 -0
  53. package/dist/dist-cjs-x5cwlqA5.mjs +43 -0
  54. package/dist/dist-cjs-x5cwlqA5.mjs.map +1 -0
  55. package/dist/dist-gjHmorxL.mjs +27479 -0
  56. package/dist/dist-gjHmorxL.mjs.map +1 -0
  57. package/dist/effects/index.d.mts +5 -0
  58. package/dist/effects/index.mjs +35 -0
  59. package/dist/effects-CHWORCYd.mjs +811 -0
  60. package/dist/effects-CHWORCYd.mjs.map +1 -0
  61. package/dist/event-streams-D-APZ7Ke.mjs +204 -0
  62. package/dist/event-streams-D-APZ7Ke.mjs.map +1 -0
  63. package/dist/fonts/index.d.mts +2 -0
  64. package/dist/fonts/index.mjs +3 -0
  65. package/dist/fonts-DrGTBJJk.mjs +188 -0
  66. package/dist/fonts-DrGTBJJk.mjs.map +1 -0
  67. package/dist/index-B0BNPEoH.d.mts +2117 -0
  68. package/dist/index-B0BNPEoH.d.mts.map +1 -0
  69. package/dist/index-BMVVmc4G.d.mts +72 -0
  70. package/dist/index-BMVVmc4G.d.mts.map +1 -0
  71. package/dist/index-D1ZsMpke.d.mts +264 -0
  72. package/dist/index-D1ZsMpke.d.mts.map +1 -0
  73. package/dist/index-D2jDC7O5.d.mts +3643 -0
  74. package/dist/index-D2jDC7O5.d.mts.map +1 -0
  75. package/dist/index-D2wJqSl5.d.mts +114 -0
  76. package/dist/index-D2wJqSl5.d.mts.map +1 -0
  77. package/dist/index-DKFGNyMB.d.mts +309 -0
  78. package/dist/index-DKFGNyMB.d.mts.map +1 -0
  79. package/dist/index-DiSKzDGR.d.mts +65 -0
  80. package/dist/index-DiSKzDGR.d.mts.map +1 -0
  81. package/dist/index.d.mts +4425 -0
  82. package/dist/index.d.mts.map +1 -0
  83. package/dist/index.mjs +2623 -0
  84. package/dist/index.mjs.map +1 -0
  85. package/dist/package-C58KmGKw.mjs +6 -0
  86. package/dist/package-C58KmGKw.mjs.map +1 -0
  87. package/dist/preview/index.d.mts +90 -0
  88. package/dist/preview/index.d.mts.map +1 -0
  89. package/dist/preview/index.mjs +15 -0
  90. package/dist/preview-engine/audio.mjs +1 -0
  91. package/dist/preview-engine/child_process-AIL2NBWS.mjs +1 -0
  92. package/dist/preview-engine/chunk-24P6DAB3.mjs +1 -0
  93. package/dist/preview-engine/chunk-37EFVZWT.mjs +1 -0
  94. package/dist/preview-engine/chunk-3O5OKR6D.mjs +223 -0
  95. package/dist/preview-engine/chunk-47VT677S.mjs +8 -0
  96. package/dist/preview-engine/chunk-4BEJJKEU.mjs +315 -0
  97. package/dist/preview-engine/chunk-4GEWSUX5.mjs +1 -0
  98. package/dist/preview-engine/chunk-55CCFPUX.mjs +237 -0
  99. package/dist/preview-engine/chunk-5JD65JSJ.mjs +110 -0
  100. package/dist/preview-engine/chunk-5UP7FSGT.mjs +294 -0
  101. package/dist/preview-engine/chunk-5XDHHOF2.mjs +367 -0
  102. package/dist/preview-engine/chunk-6YJP57MZ.mjs +729 -0
  103. package/dist/preview-engine/chunk-6ZOXGAYA.mjs +112 -0
  104. package/dist/preview-engine/chunk-AOLAHYVV.mjs +529 -0
  105. package/dist/preview-engine/chunk-B6PLCMBM.mjs +1 -0
  106. package/dist/preview-engine/chunk-BJKH76OM.mjs +264 -0
  107. package/dist/preview-engine/chunk-BUIQ5TUH.mjs +104 -0
  108. package/dist/preview-engine/chunk-BVF64D6H.mjs +1 -0
  109. package/dist/preview-engine/chunk-CA5N7JRZ.mjs +138 -0
  110. package/dist/preview-engine/chunk-CNSHAFEA.mjs +1 -0
  111. package/dist/preview-engine/chunk-CURR5X7D.mjs +1 -0
  112. package/dist/preview-engine/chunk-CVGM2U4J.mjs +47 -0
  113. package/dist/preview-engine/chunk-CYY366IE.mjs +1 -0
  114. package/dist/preview-engine/chunk-D5PHI6ET.mjs +109 -0
  115. package/dist/preview-engine/chunk-D7MZHP2Y.mjs +275 -0
  116. package/dist/preview-engine/chunk-DPPH3NK2.mjs +182 -0
  117. package/dist/preview-engine/chunk-DPST2XLC.mjs +418 -0
  118. package/dist/preview-engine/chunk-DRLEOHN5.mjs +1 -0
  119. package/dist/preview-engine/chunk-EDIZNO3P.mjs +1 -0
  120. package/dist/preview-engine/chunk-EHIIT4ZR.mjs +52 -0
  121. package/dist/preview-engine/chunk-FKZ4XXPE.mjs +1 -0
  122. package/dist/preview-engine/chunk-G3HW4VER.mjs +60 -0
  123. package/dist/preview-engine/chunk-G76HSKOS.mjs +184 -0
  124. package/dist/preview-engine/chunk-GYG2IIBR.mjs +1 -0
  125. package/dist/preview-engine/chunk-H2F5NVQ6.mjs +63 -0
  126. package/dist/preview-engine/chunk-H5BPCY7N.mjs +188 -0
  127. package/dist/preview-engine/chunk-HAXK42HG.mjs +997 -0
  128. package/dist/preview-engine/chunk-HXMDPMLB.mjs +1 -0
  129. package/dist/preview-engine/chunk-HYBAPT6I.mjs +1 -0
  130. package/dist/preview-engine/chunk-I4FH6HYU.mjs +73 -0
  131. package/dist/preview-engine/chunk-IYVN2QEL.mjs +1 -0
  132. package/dist/preview-engine/chunk-JPXQPP6J.mjs +1 -0
  133. package/dist/preview-engine/chunk-JWNHTRED.mjs +164 -0
  134. package/dist/preview-engine/chunk-KZOLCZIV.mjs +103 -0
  135. package/dist/preview-engine/chunk-L62MRHGZ.mjs +89 -0
  136. package/dist/preview-engine/chunk-LEEZXHQO.mjs +117 -0
  137. package/dist/preview-engine/chunk-LKYN3BM2.mjs +1 -0
  138. package/dist/preview-engine/chunk-LP3EP33S.mjs +610 -0
  139. package/dist/preview-engine/chunk-M2GRYRLM.mjs +111 -0
  140. package/dist/preview-engine/chunk-MC7TZZLD.mjs +134 -0
  141. package/dist/preview-engine/chunk-MT2DZQHO.mjs +1 -0
  142. package/dist/preview-engine/chunk-MTJHQATU.mjs +1 -0
  143. package/dist/preview-engine/chunk-N4LHIPHZ.mjs +340 -0
  144. package/dist/preview-engine/chunk-N4PWLBZ7.mjs +5 -0
  145. package/dist/preview-engine/chunk-NQZKBFC6.mjs +40 -0
  146. package/dist/preview-engine/chunk-NWRSVVTF.mjs +186 -0
  147. package/dist/preview-engine/chunk-P3HBP725.mjs +1 -0
  148. package/dist/preview-engine/chunk-PIAJWALT.mjs +1 -0
  149. package/dist/preview-engine/chunk-PJ3DVG45.mjs +1 -0
  150. package/dist/preview-engine/chunk-QP2NI4XD.mjs +82 -0
  151. package/dist/preview-engine/chunk-SA3JUR6D.mjs +52 -0
  152. package/dist/preview-engine/chunk-SRT2OCQW.mjs +1 -0
  153. package/dist/preview-engine/chunk-SWD76532.mjs +98 -0
  154. package/dist/preview-engine/chunk-SXX7HX34.mjs +191 -0
  155. package/dist/preview-engine/chunk-SZ7YRPKO.mjs +3 -0
  156. package/dist/preview-engine/chunk-TMRLZV5X.mjs +1 -0
  157. package/dist/preview-engine/chunk-U446SQP3.mjs +292 -0
  158. package/dist/preview-engine/chunk-UDNCEHUI.mjs +141 -0
  159. package/dist/preview-engine/chunk-V3H7WWOT.mjs +271 -0
  160. package/dist/preview-engine/chunk-V7ZVVUQU.mjs +108 -0
  161. package/dist/preview-engine/chunk-VJGK7MLJ.mjs +3 -0
  162. package/dist/preview-engine/chunk-VSSB73UU.mjs +58 -0
  163. package/dist/preview-engine/chunk-VXUJWPIK.mjs +1 -0
  164. package/dist/preview-engine/chunk-XD4GKD6H.mjs +5 -0
  165. package/dist/preview-engine/chunk-XKO4RYKN.mjs +3 -0
  166. package/dist/preview-engine/chunk-XOEEGC4Z.mjs +1 -0
  167. package/dist/preview-engine/chunk-YAQFFQPG.mjs +1 -0
  168. package/dist/preview-engine/chunk-YKMBRUAE.mjs +1 -0
  169. package/dist/preview-engine/chunk-YSTLMWCG.mjs +1 -0
  170. package/dist/preview-engine/chunk-Z4ERCLNF.mjs +1 -0
  171. package/dist/preview-engine/chunk-ZEYUXJIV.mjs +1 -0
  172. package/dist/preview-engine/chunk-ZX6APG6E.mjs +117 -0
  173. package/dist/preview-engine/effects.mjs +1 -0
  174. package/dist/preview-engine/esbuild-GWV7CM7D.mjs +1 -0
  175. package/dist/preview-engine/fonts.mjs +1 -0
  176. package/dist/preview-engine/framefields.mjs +1959 -0
  177. package/dist/preview-engine/onnxruntime-node-56GSZEH3.mjs +1 -0
  178. package/dist/preview-engine/player.mjs +155 -0
  179. package/dist/preview-engine/renderers-2AUSIYZN.mjs +1 -0
  180. package/dist/preview-engine/renderers-2QN6KZJP.mjs +1 -0
  181. package/dist/preview-engine/renderers-32SKW7ML.mjs +1 -0
  182. package/dist/preview-engine/renderers-5QYK6766.mjs +1 -0
  183. package/dist/preview-engine/renderers-6BJA6MSU.mjs +251 -0
  184. package/dist/preview-engine/renderers-6QAF3LQ2.mjs +1 -0
  185. package/dist/preview-engine/renderers-7AO5746S.mjs +296 -0
  186. package/dist/preview-engine/renderers-AFYKNM6N.mjs +1 -0
  187. package/dist/preview-engine/renderers-AGMH5CRH.mjs +1 -0
  188. package/dist/preview-engine/renderers-AHSGP6LY.mjs +126 -0
  189. package/dist/preview-engine/renderers-ASTBICLA.mjs +1 -0
  190. package/dist/preview-engine/renderers-BHVPLYNN.mjs +1 -0
  191. package/dist/preview-engine/renderers-D7PVQFVU.mjs +1 -0
  192. package/dist/preview-engine/renderers-DB4ABTNA.mjs +1 -0
  193. package/dist/preview-engine/renderers-F2NFJI5L.mjs +1 -0
  194. package/dist/preview-engine/renderers-FI7YHNLY.mjs +1 -0
  195. package/dist/preview-engine/renderers-GBHULMPH.mjs +1 -0
  196. package/dist/preview-engine/renderers-GUKQUMGG.mjs +55 -0
  197. package/dist/preview-engine/renderers-HGT7QDY3.mjs +1 -0
  198. package/dist/preview-engine/renderers-HOYLA7ZK.mjs +1 -0
  199. package/dist/preview-engine/renderers-KKI2D3MZ.mjs +1 -0
  200. package/dist/preview-engine/renderers-KRAJNV4E.mjs +1 -0
  201. package/dist/preview-engine/renderers-KUGZKSVE.mjs +1 -0
  202. package/dist/preview-engine/renderers-L2EQQIOC.mjs +1 -0
  203. package/dist/preview-engine/renderers-LK3NRMGR.mjs +1 -0
  204. package/dist/preview-engine/renderers-LX654SZ3.mjs +1 -0
  205. package/dist/preview-engine/renderers-MCFQFYEL.mjs +1 -0
  206. package/dist/preview-engine/renderers-O6HOYIPS.mjs +1 -0
  207. package/dist/preview-engine/renderers-OEVXCGE2.mjs +1 -0
  208. package/dist/preview-engine/renderers-QVD6C4CS.mjs +1 -0
  209. package/dist/preview-engine/renderers-R3XEYD5V.mjs +248 -0
  210. package/dist/preview-engine/renderers-RBFWJWVM.mjs +1 -0
  211. package/dist/preview-engine/renderers-RX3VLVLO.mjs +1 -0
  212. package/dist/preview-engine/renderers-SM6JP64K.mjs +1 -0
  213. package/dist/preview-engine/renderers-TKMAATVS.mjs +1 -0
  214. package/dist/preview-engine/renderers-UGZUPONY.mjs +1 -0
  215. package/dist/preview-engine/renderers-UTFXZE3G.mjs +1 -0
  216. package/dist/preview-engine/renderers-UWPH7HBH.mjs +1 -0
  217. package/dist/preview-engine/renderers-UZGECFVO.mjs +1 -0
  218. package/dist/preview-engine/renderers-VGU3LNLT.mjs +1 -0
  219. package/dist/preview-engine/renderers-W3VVM5HB.mjs +1 -0
  220. package/dist/preview-engine/renderers-WJUTT5BB.mjs +1 -0
  221. package/dist/preview-engine/renderers-XA2M4YXK.mjs +1 -0
  222. package/dist/preview-engine/renderers-XIHRFEFQ.mjs +1 -0
  223. package/dist/preview-engine/renderers-XJTA5MFG.mjs +1 -0
  224. package/dist/preview-engine/renderers-XLTY5APF.mjs +1 -0
  225. package/dist/preview-engine/renderers-XZ3VXFGZ.mjs +1 -0
  226. package/dist/preview-engine/renderers-YKUQUCTO.mjs +124 -0
  227. package/dist/preview-engine/renderers-YVN3EIOP.mjs +1 -0
  228. package/dist/preview-engine/renderers-YWRP23SZ.mjs +125 -0
  229. package/dist/preview-engine/renderers-ZPWOUWZJ.mjs +120 -0
  230. package/dist/preview-engine/resvg-js-VMU4A77S.mjs +1 -0
  231. package/dist/preview-engine/server-utils-2FAIV45N.mjs +1 -0
  232. package/dist/preview-engine/sharp-V6ZTBNDW.mjs +1 -0
  233. package/dist/preview-engine/shims/fs-promises.mjs +1 -0
  234. package/dist/preview-engine/shims/fs.mjs +1 -0
  235. package/dist/preview-engine/shims/module.mjs +1 -0
  236. package/dist/preview-engine/shims/os.mjs +1 -0
  237. package/dist/preview-engine/shims/path.mjs +1 -0
  238. package/dist/preview-engine/shims/url.mjs +1 -0
  239. package/dist/preview-engine/signals.mjs +1 -0
  240. package/dist/preview-engine/webgpu-NSSANM4F.mjs +1 -0
  241. package/dist/preview-uQM210iy.mjs +2149 -0
  242. package/dist/preview-uQM210iy.mjs.map +1 -0
  243. package/dist/program-Dl510wmI.mjs +5183 -0
  244. package/dist/program-Dl510wmI.mjs.map +1 -0
  245. package/dist/renderer/index.d.mts +3 -0
  246. package/dist/renderer/index.mjs +6 -0
  247. package/dist/renderer-3BNskNuJ.mjs +3 -0
  248. package/dist/renderer-7DOcIxFG.mjs +288 -0
  249. package/dist/renderer-7DOcIxFG.mjs.map +1 -0
  250. package/dist/renderer-9dHlMQGX.mjs +3 -0
  251. package/dist/renderer-B1CvhW4p.mjs +677 -0
  252. package/dist/renderer-B1CvhW4p.mjs.map +1 -0
  253. package/dist/renderer-B2XzjK0z.mjs +3 -0
  254. package/dist/renderer-B80s47yo.mjs +166 -0
  255. package/dist/renderer-B80s47yo.mjs.map +1 -0
  256. package/dist/renderer-B9-QSJcG.mjs +479 -0
  257. package/dist/renderer-B9-QSJcG.mjs.map +1 -0
  258. package/dist/renderer-BAQmR0Zo.mjs +3 -0
  259. package/dist/renderer-BDLnExoP.mjs +127 -0
  260. package/dist/renderer-BDLnExoP.mjs.map +1 -0
  261. package/dist/renderer-BGXU6vcW.mjs +270 -0
  262. package/dist/renderer-BGXU6vcW.mjs.map +1 -0
  263. package/dist/renderer-BGvORwkQ.mjs +3 -0
  264. package/dist/renderer-BLikd6BK.mjs +3 -0
  265. package/dist/renderer-BMovYRoR.mjs +3 -0
  266. package/dist/renderer-BQHbp-Sp.mjs +243 -0
  267. package/dist/renderer-BQHbp-Sp.mjs.map +1 -0
  268. package/dist/renderer-BREIjsUU.mjs +252 -0
  269. package/dist/renderer-BREIjsUU.mjs.map +1 -0
  270. package/dist/renderer-BSbTJBWc.mjs +3 -0
  271. package/dist/renderer-BTu2EVhF.mjs +3 -0
  272. package/dist/renderer-BU1rwNRT.mjs +3 -0
  273. package/dist/renderer-BXMmISWG.mjs +499 -0
  274. package/dist/renderer-BXMmISWG.mjs.map +1 -0
  275. package/dist/renderer-BZJm3m4f.mjs +3 -0
  276. package/dist/renderer-B_NuVaIP.mjs +744 -0
  277. package/dist/renderer-B_NuVaIP.mjs.map +1 -0
  278. package/dist/renderer-BfJSUjPN.mjs +3 -0
  279. package/dist/renderer-BqyAgNt3.mjs +3 -0
  280. package/dist/renderer-BryTM2g7.mjs +3 -0
  281. package/dist/renderer-BsgIcBKH.mjs +391 -0
  282. package/dist/renderer-BsgIcBKH.mjs.map +1 -0
  283. package/dist/renderer-ByDhfrPE.mjs +422 -0
  284. package/dist/renderer-ByDhfrPE.mjs.map +1 -0
  285. package/dist/renderer-C-H680_l.mjs +3 -0
  286. package/dist/renderer-C17wL9QX.mjs +181 -0
  287. package/dist/renderer-C17wL9QX.mjs.map +1 -0
  288. package/dist/renderer-C2n-EHxg.mjs +1 -0
  289. package/dist/renderer-CB5aWAaf.mjs +343 -0
  290. package/dist/renderer-CB5aWAaf.mjs.map +1 -0
  291. package/dist/renderer-CB7lH5K8.mjs +3 -0
  292. package/dist/renderer-CDLrNgfo.mjs +3 -0
  293. package/dist/renderer-CDOUAN7X.mjs +454 -0
  294. package/dist/renderer-CDOUAN7X.mjs.map +1 -0
  295. package/dist/renderer-CH8sdfYX.mjs +387 -0
  296. package/dist/renderer-CH8sdfYX.mjs.map +1 -0
  297. package/dist/renderer-CIvaRnP_.mjs +261 -0
  298. package/dist/renderer-CIvaRnP_.mjs.map +1 -0
  299. package/dist/renderer-CMzEjdzi.mjs +369 -0
  300. package/dist/renderer-CMzEjdzi.mjs.map +1 -0
  301. package/dist/renderer-COkcU3db.mjs +3302 -0
  302. package/dist/renderer-COkcU3db.mjs.map +1 -0
  303. package/dist/renderer-CQCoggIa.mjs +3 -0
  304. package/dist/renderer-CQdVj2JS.mjs +3 -0
  305. package/dist/renderer-CQiTodg9.mjs +337 -0
  306. package/dist/renderer-CQiTodg9.mjs.map +1 -0
  307. package/dist/renderer-CV2m6k1V.mjs +3 -0
  308. package/dist/renderer-CYY-poLe.mjs +3 -0
  309. package/dist/renderer-CZgB5st8.mjs +3 -0
  310. package/dist/renderer-C_Ki91kc.mjs +3 -0
  311. package/dist/renderer-CclIvsLO.mjs +3 -0
  312. package/dist/renderer-Cj-whdVr.mjs +655 -0
  313. package/dist/renderer-Cj-whdVr.mjs.map +1 -0
  314. package/dist/renderer-CkykdR_D.mjs +3 -0
  315. package/dist/renderer-Cl1oUXMi.mjs +1143 -0
  316. package/dist/renderer-Cl1oUXMi.mjs.map +1 -0
  317. package/dist/renderer-CmApuKjS.mjs +3 -0
  318. package/dist/renderer-CpkiHRhh.mjs +269 -0
  319. package/dist/renderer-CpkiHRhh.mjs.map +1 -0
  320. package/dist/renderer-CszOjcRW.mjs +3 -0
  321. package/dist/renderer-CtVkU_GA.mjs +44 -0
  322. package/dist/renderer-CtVkU_GA.mjs.map +1 -0
  323. package/dist/renderer-Cu074POw.mjs +3 -0
  324. package/dist/renderer-CwQhzcUn.mjs +644 -0
  325. package/dist/renderer-CwQhzcUn.mjs.map +1 -0
  326. package/dist/renderer-CzPWB0Ss.mjs +273 -0
  327. package/dist/renderer-CzPWB0Ss.mjs.map +1 -0
  328. package/dist/renderer-D4qLmox-.mjs +3 -0
  329. package/dist/renderer-D6bWQtr-.mjs +3 -0
  330. package/dist/renderer-D6cJ6MSq.mjs +3 -0
  331. package/dist/renderer-D7EX8IjU.mjs +240 -0
  332. package/dist/renderer-D7EX8IjU.mjs.map +1 -0
  333. package/dist/renderer-DDp7_TUi.d.mts +10 -0
  334. package/dist/renderer-DDp7_TUi.d.mts.map +1 -0
  335. package/dist/renderer-DFKsLrUs.mjs +256 -0
  336. package/dist/renderer-DFKsLrUs.mjs.map +1 -0
  337. package/dist/renderer-DPSsf8-t.mjs +3 -0
  338. package/dist/renderer-DQLGnEFc.mjs +3 -0
  339. package/dist/renderer-DY2SVYUW.mjs +3 -0
  340. package/dist/renderer-DZGtBUCx.mjs +792 -0
  341. package/dist/renderer-DZGtBUCx.mjs.map +1 -0
  342. package/dist/renderer-DabG62XS.mjs +406 -0
  343. package/dist/renderer-DabG62XS.mjs.map +1 -0
  344. package/dist/renderer-DbaQLI4z.mjs +771 -0
  345. package/dist/renderer-DbaQLI4z.mjs.map +1 -0
  346. package/dist/renderer-DjI45OYC.mjs +71 -0
  347. package/dist/renderer-DjI45OYC.mjs.map +1 -0
  348. package/dist/renderer-Dm08-hAU.mjs +323 -0
  349. package/dist/renderer-Dm08-hAU.mjs.map +1 -0
  350. package/dist/renderer-DoAY5JbB.mjs +4 -0
  351. package/dist/renderer-Dp_FfvF-.mjs +401 -0
  352. package/dist/renderer-Dp_FfvF-.mjs.map +1 -0
  353. package/dist/renderer-Dt6fzgX5.mjs +756 -0
  354. package/dist/renderer-Dt6fzgX5.mjs.map +1 -0
  355. package/dist/renderer-DuplLRbp.mjs +3 -0
  356. package/dist/renderer-DvfUbZ31.mjs +3 -0
  357. package/dist/renderer-DxjVQV6f.mjs +311 -0
  358. package/dist/renderer-DxjVQV6f.mjs.map +1 -0
  359. package/dist/renderer-Fco4EmAu.mjs +23868 -0
  360. package/dist/renderer-Fco4EmAu.mjs.map +1 -0
  361. package/dist/renderer-HFfcJlmR.mjs +981 -0
  362. package/dist/renderer-HFfcJlmR.mjs.map +1 -0
  363. package/dist/renderer-I-Sw3JBB.mjs +145 -0
  364. package/dist/renderer-I-Sw3JBB.mjs.map +1 -0
  365. package/dist/renderer-OWQmmg4Z.mjs +697 -0
  366. package/dist/renderer-OWQmmg4Z.mjs.map +1 -0
  367. package/dist/renderer-Q_uUQipO.mjs +3 -0
  368. package/dist/renderer-Ryo2CEFD.mjs +586 -0
  369. package/dist/renderer-Ryo2CEFD.mjs.map +1 -0
  370. package/dist/renderer-Tp6OXWNZ.mjs +257 -0
  371. package/dist/renderer-Tp6OXWNZ.mjs.map +1 -0
  372. package/dist/renderer-UQFCgeNx.mjs +3 -0
  373. package/dist/renderer-WkVrkCVA.mjs +83 -0
  374. package/dist/renderer-WkVrkCVA.mjs.map +1 -0
  375. package/dist/renderer-XcmYTd6P.mjs +3818 -0
  376. package/dist/renderer-XcmYTd6P.mjs.map +1 -0
  377. package/dist/renderer-_uvdg48N.mjs +333 -0
  378. package/dist/renderer-_uvdg48N.mjs.map +1 -0
  379. package/dist/renderer-bZU_ndxf.mjs +8 -0
  380. package/dist/renderer-bZU_ndxf.mjs.map +1 -0
  381. package/dist/renderer-eMsnzJg9.mjs +3 -0
  382. package/dist/renderer-ho_jXJ0H.mjs +254 -0
  383. package/dist/renderer-ho_jXJ0H.mjs.map +1 -0
  384. package/dist/renderer-k2JL79kM.mjs +306 -0
  385. package/dist/renderer-k2JL79kM.mjs.map +1 -0
  386. package/dist/renderer-pHiz78e0.mjs +3 -0
  387. package/dist/renderer-pxXf9dvk.mjs +394 -0
  388. package/dist/renderer-pxXf9dvk.mjs.map +1 -0
  389. package/dist/renderer-vCFTm0oe.mjs +226 -0
  390. package/dist/renderer-vCFTm0oe.mjs.map +1 -0
  391. package/dist/renderer-vvpdx1vk.mjs +379 -0
  392. package/dist/renderer-vvpdx1vk.mjs.map +1 -0
  393. package/dist/renderer-x2s9LmVL.mjs +1121 -0
  394. package/dist/renderer-x2s9LmVL.mjs.map +1 -0
  395. package/dist/renderers-BWg16W-V-BXG_cjhM.mjs +49 -0
  396. package/dist/renderers-BWg16W-V-BXG_cjhM.mjs.map +1 -0
  397. package/dist/signals/index.d.mts +7 -0
  398. package/dist/signals/index.mjs +10 -0
  399. package/dist/signals-BwbdO3AN.mjs +224 -0
  400. package/dist/signals-BwbdO3AN.mjs.map +1 -0
  401. package/dist/signin-CZj4Oc5s.mjs +865 -0
  402. package/dist/signin-CZj4Oc5s.mjs.map +1 -0
  403. package/dist/sso-oidc-C0_31ThY.mjs +1051 -0
  404. package/dist/sso-oidc-C0_31ThY.mjs.map +1 -0
  405. package/dist/sts-DD4ggEXC.mjs +6 -0
  406. package/dist/sts-nXw8RDJI.mjs +1395 -0
  407. package/dist/sts-nXw8RDJI.mjs.map +1 -0
  408. package/package.json +173 -0
@@ -0,0 +1,109 @@
1
+ import{a as S}from"./chunk-FKZ4XXPE.mjs";import{a as E}from"./chunk-YSTLMWCG.mjs";import{d as D}from"./chunk-6YJP57MZ.mjs";import{e as G}from"./chunk-BVF64D6H.mjs";G();G();var k=`
2
+ struct LutUniforms {
3
+ intensity : f32,
4
+ lutSize : f32,
5
+ hasSignal : f32,
6
+ pad : f32,
7
+ };
8
+
9
+ @group(0) @binding(0) var<uniform> u : LutUniforms;
10
+ @group(1) @binding(0) var tex : texture_2d<f32>;
11
+ @group(1) @binding(1) var samp : sampler;
12
+ @group(2) @binding(0) var lutTex : texture_3d<f32>;
13
+ @group(2) @binding(1) var lutSamp : sampler;
14
+ @group(3) @binding(0) var signalTex : texture_2d<f32>;
15
+ @group(3) @binding(1) var signalSamp : sampler;
16
+
17
+ struct VSOut {
18
+ @builtin(position) pos : vec4<f32>,
19
+ @location(0) uv : vec2<f32>,
20
+ };
21
+
22
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
23
+ var pos = array<vec2<f32>, 4>(
24
+ vec2<f32>(-1.0, 1.0),
25
+ vec2<f32>(1.0, 1.0),
26
+ vec2<f32>(-1.0, -1.0),
27
+ vec2<f32>(1.0, -1.0)
28
+ );
29
+ var uv = array<vec2<f32>, 4>(
30
+ vec2<f32>(0.0, 0.0),
31
+ vec2<f32>(1.0, 0.0),
32
+ vec2<f32>(0.0, 1.0),
33
+ vec2<f32>(1.0, 1.0)
34
+ );
35
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
36
+ }
37
+
38
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
39
+ let inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);
40
+
41
+ // Coordinate adjustment to sample from texel centers
42
+ let uvw = inputColor.rgb * ((u.lutSize - 1.0) / u.lutSize) + vec3<f32>(0.5 / u.lutSize);
43
+ let mappedColor = textureSampleLevel(lutTex, lutSamp, uvw, 0.0);
44
+
45
+ var activeIntensity = u.intensity;
46
+ if (u.hasSignal > 0.5) {
47
+ activeIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;
48
+ }
49
+
50
+ let finalRgb = inputColor.rgb + activeIntensity * (mappedColor.rgb - inputColor.rgb);
51
+ return vec4<f32>(finalRgb * inputColor.a, inputColor.a);
52
+ }
53
+ `,K=`
54
+ struct LutUniforms {
55
+ intensity : f32,
56
+ lutSize : f32,
57
+ hasSignal : f32,
58
+ pad : f32,
59
+ };
60
+
61
+ @group(0) @binding(0) var<uniform> u : LutUniforms;
62
+ @group(1) @binding(0) var tex : texture_2d<f32>;
63
+ @group(1) @binding(1) var samp : sampler;
64
+ @group(2) @binding(0) var lutTex : texture_1d<f32>;
65
+ @group(2) @binding(1) var lutSamp : sampler;
66
+ @group(3) @binding(0) var signalTex : texture_2d<f32>;
67
+ @group(3) @binding(1) var signalSamp : sampler;
68
+
69
+ struct VSOut {
70
+ @builtin(position) pos : vec4<f32>,
71
+ @location(0) uv : vec2<f32>,
72
+ };
73
+
74
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
75
+ var pos = array<vec2<f32>, 4>(
76
+ vec2<f32>(-1.0, 1.0),
77
+ vec2<f32>(1.0, 1.0),
78
+ vec2<f32>(-1.0, -1.0),
79
+ vec2<f32>(1.0, -1.0)
80
+ );
81
+ var uv = array<vec2<f32>, 4>(
82
+ vec2<f32>(0.0, 0.0),
83
+ vec2<f32>(1.0, 0.0),
84
+ vec2<f32>(0.0, 1.0),
85
+ vec2<f32>(1.0, 1.0)
86
+ );
87
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
88
+ }
89
+
90
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
91
+ let inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);
92
+
93
+ let rCoord = inputColor.r * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);
94
+ let gCoord = inputColor.g * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);
95
+ let bCoord = inputColor.b * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);
96
+
97
+ let mappedR = textureSampleLevel(lutTex, lutSamp, rCoord, 0.0).r;
98
+ let mappedG = textureSampleLevel(lutTex, lutSamp, gCoord, 0.0).g;
99
+ let mappedB = textureSampleLevel(lutTex, lutSamp, bCoord, 0.0).b;
100
+
101
+ var activeIntensity = u.intensity;
102
+ if (u.hasSignal > 0.5) {
103
+ activeIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;
104
+ }
105
+
106
+ let finalRgb = inputColor.rgb + activeIntensity * (vec3<f32>(mappedR, mappedG, mappedB) - inputColor.rgb);
107
+ return vec4<f32>(finalRgb * inputColor.a, inputColor.a);
108
+ }
109
+ `,V=new WeakMap,T=new Float32Array(4);function q(i){let e=V.get(i);if(e)return e;let a=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),n=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),d=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{viewDimension:"3d",sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),u=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{viewDimension:"1d",sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),o=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});return e={lutUniformLayout:a,singleTextureLayout:n,lutTextureLayout3D:d,lutTextureLayout1D:u,signalTextureLayout:o,pipelineCache:new Map},V.set(i,e),e}function J(i,e,a){let n=q(i),d=`lut_${a}_${e}`,u=n.pipelineCache.get(d);if(!u){let o=a==="3D"?k:K,s=i.createShaderModule({label:`lut_${a.toLowerCase()}_${e}.wgsl`,code:o}),r=a==="3D"?n.lutTextureLayout3D:n.lutTextureLayout1D;u=i.createRenderPipeline({label:`LutPipeline_${a}_${e}`,layout:i.createPipelineLayout({bindGroupLayouts:[n.lutUniformLayout,n.singleTextureLayout,r,n.signalTextureLayout]}),vertex:{module:s,entryPoint:"vs"},fragment:{module:s,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}}),n.pipelineCache.set(d,u)}return{lutPipeline:u,lutUniformLayout:n.lutUniformLayout,singleTextureLayout:n.singleTextureLayout,lutTextureLayout:a==="3D"?n.lutTextureLayout3D:n.lutTextureLayout1D,signalTextureLayout:n.signalTextureLayout}}var I=async i=>{let{ctx:e,encoder:a,pass:n,targetView:d,targetTexture:u,targetWidth:o,targetHeight:s,props:r,drawChild:F}=i,R=r.frame??0,M=r.fps||30,l=r.virtualMedia?.operation;if(l?.op!=="ApplyLUT"||!l)return;let h=r.virtualMedia.children?.[0];if(!h)return;let c=l.lutUrl;if(!c)return;n.end();let f=o,y=s,v=l.intensityHandleId?l.inputs?.[l.intensityHandleId]:null,w=!!(v?.connectionValid&&v.outputItem?.type==="Signal"),x=w?v?.outputItem?.data:null,m=1,U=!1;w?x&&typeof x=="object"&&(m=Number(x.offset??1),U=!0):v?.connectionValid&&v.outputItem?.type==="Number"?m=Number(v.outputItem.data??1):m=Number(l.intensity??1),m=Math.max(0,Math.min(10,m));let p=S.get(c,e.device);if(!p){if((r.isHeadless??(typeof window>"u"||globalThis.__IS_HEADLESS_RENDERER__))||r.forceWait)try{p=await S.getOrLoad(c,e.device)}catch(t){!(t instanceof DOMException&&t.name==="AbortError")&&!(t&&typeof t=="object"&&"name"in t&&t.name==="AbortError")&&console.error("[ApplyLUT] Failed to load LUT synchronously:",t)}else S.getOrLoad(c,e.device).catch(t=>{t instanceof DOMException&&t.name==="AbortError"||t&&typeof t=="object"&&"name"in t&&t.name==="AbortError"||console.error("[ApplyLUT] Failed to load LUT in background:",t)});if(!p&&c.startsWith("runtime://lut/")){let t=c.substring(0,c.lastIndexOf("-")+1);t&&(p=S.getAnyMatching(t,e.device))}}let b=e.renderer.getTemporaryTexture(f,y,[...r.excludeTextures||[],u]),_=b.createView();if(e.renderer.beginFrame(a,_,{r:0,g:0,b:0,a:0},f,y,"clear").end(),e.renderer.pushScissor({x:0,y:0,width:f,height:y}),e.renderer.pushIdentity(),await F(h,{...r,virtualMedia:h},_,b,f,y),e.renderer.popTransform(),e.renderer.popScissor(),!p){let L=e.renderer.beginFrame(a,d,{r:0,g:0,b:0,a:0},o,s,"load");e.renderer.drawTexture(L,b,{x:0,y:0,width:o,height:s},{opacity:l.opacity??1}),i.pass=L;return}let{lutPipeline:N,lutUniformLayout:O,singleTextureLayout:z,lutTextureLayout:H,signalTextureLayout:W}=J(e.device,e.renderer.format,p.type),P=e.renderer.samplerCache.getSampler(e.device),A=e.renderer.getTemporaryTexture(f,y,[b,u,...r.excludeTextures||[]]),C;if(U){let L=r.elapsedMs!==void 0?r.elapsedMs/1e3:R/M,t=r.virtualMedia?.metadata?.durationMs?r.virtualMedia.metadata.durationMs/1e3:r.durationMs!==void 0?r.durationMs/1e3:0;C=D.getOrCreate2DTextureView(e.device,a,x.nodeId??"lut_intensity_sig",L,t,x,f,y,r.renderId,R,M)}else C=D.getDummy1x1TextureView(e.device);T[0]=m,T[1]=p.size,T[2]=U?1:0,T[3]=0;let $=e.renderer.getTemporaryBuffer(T),g=a.beginRenderPass({colorAttachments:[{view:A.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});g.setPipeline(N),g.setBindGroup(0,e.device.createBindGroup({layout:O,entries:[{binding:0,resource:{buffer:$}}]})),g.setBindGroup(1,e.renderer.bindGroupCache.getBindGroup(e.device,z,b,P)),g.setBindGroup(2,e.device.createBindGroup({layout:H,entries:[{binding:0,resource:p.texture.createView()},{binding:1,resource:P}]})),g.setBindGroup(3,e.device.createBindGroup({layout:W,entries:[{binding:0,resource:C},{binding:1,resource:P}]})),g.draw(4),g.end();let B=e.renderer.beginFrame(a,d,{r:0,g:0,b:0,a:0},o,s,"load");e.renderer.drawTexture(B,A,{x:0,y:0,width:o,height:s},{opacity:l.opacity??1}),i.pass=B};var re=E({WebGPURenderer:I});export{re as a};
@@ -0,0 +1,275 @@
1
+ import{a as I}from"./chunk-CNSHAFEA.mjs";import{a as $}from"./chunk-YSTLMWCG.mjs";import{d as H}from"./chunk-6YJP57MZ.mjs";import{e as C}from"./chunk-BVF64D6H.mjs";C();C();var ye=`
2
+ struct HalftoneUniforms {
3
+ mode : f32, // 0 = Monochrome, 1 = CMYK
4
+ dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square
5
+ frequency : f32,
6
+ angle : f32,
7
+
8
+ contrast : f32,
9
+ invert : f32,
10
+ isSmooth : f32,
11
+ opacity : f32,
12
+
13
+ dotColor : vec4<f32>,
14
+ paperColor : vec4<f32>,
15
+
16
+ cyanAngle : f32,
17
+ magentaAngle : f32,
18
+ yellowAngle : f32,
19
+ blackAngle : f32,
20
+
21
+ hasFreqSig : f32,
22
+ hasAngleSig : f32,
23
+ hasContrastSig : f32,
24
+ hasCyanSig : f32,
25
+
26
+ hasMagSig : f32,
27
+ hasYelSig : f32,
28
+ hasBlkSig : f32,
29
+ hasOpacitySig : f32,
30
+ };
31
+
32
+ @group(0) @binding(0) var<uniform> u : HalftoneUniforms;
33
+ @group(1) @binding(0) var tex : texture_2d<f32>;
34
+ @group(1) @binding(1) var samp : sampler;
35
+
36
+ @group(2) @binding(0) var freqSigTex : texture_2d<f32>;
37
+ @group(2) @binding(1) var angleSigTex : texture_2d<f32>;
38
+ @group(2) @binding(2) var contrastSigTex : texture_2d<f32>;
39
+ @group(2) @binding(3) var cyanSigTex : texture_2d<f32>;
40
+ @group(2) @binding(4) var magSigTex : texture_2d<f32>;
41
+ @group(2) @binding(5) var yelSigTex : texture_2d<f32>;
42
+ @group(2) @binding(6) var blkSigTex : texture_2d<f32>;
43
+ @group(2) @binding(7) var opacitySigTex : texture_2d<f32>;
44
+ @group(2) @binding(8) var signalSamp : sampler;
45
+
46
+ struct VSOut {
47
+ @builtin(position) pos : vec4<f32>,
48
+ @location(0) uv : vec2<f32>,
49
+ };
50
+
51
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
52
+ var pos = array<vec2<f32>, 4>(
53
+ vec2<f32>(-1.0, 1.0),
54
+ vec2<f32>(1.0, 1.0),
55
+ vec2<f32>(-1.0, -1.0),
56
+ vec2<f32>(1.0, -1.0)
57
+ );
58
+ var uv = array<vec2<f32>, 4>(
59
+ vec2<f32>(0.0, 0.0),
60
+ vec2<f32>(1.0, 0.0),
61
+ vec2<f32>(0.0, 1.0),
62
+ vec2<f32>(1.0, 1.0)
63
+ );
64
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
65
+ }
66
+
67
+ const PI: f32 = 3.141592653589793;
68
+
69
+ fn getCellCenterUV(
70
+ uv: vec2<f32>,
71
+ dimensions: vec2<f32>,
72
+ screenAngleDeg: f32,
73
+ freq: f32
74
+ ) -> vec2<f32> {
75
+ let rad = screenAngleDeg * PI / 180.0;
76
+ let cosA = cos(rad);
77
+ let sinA = sin(rad);
78
+ let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);
79
+ let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);
80
+
81
+ let minDim = min(dimensions.x, dimensions.y);
82
+ let cellSize = max(minDim / max(freq, 1.0), 1.0);
83
+
84
+ let center = dimensions * 0.5;
85
+ let pixelPos = (uv * dimensions) - center;
86
+ let rotPos = rot * pixelPos;
87
+
88
+ let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);
89
+ let cellCenterRot = cellIndex * cellSize;
90
+ let cellCenterPixelPos = invRot * cellCenterRot;
91
+ let cellCenterUV = (cellCenterPixelPos + center) / dimensions;
92
+ return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));
93
+ }
94
+
95
+ fn evalDotCoverage(
96
+ uv: vec2<f32>,
97
+ dimensions: vec2<f32>,
98
+ screenAngleDeg: f32,
99
+ freq: f32,
100
+ shape: f32,
101
+ density: f32,
102
+ contrastMultiplier: f32,
103
+ isSmooth: f32
104
+ ) -> f32 {
105
+ var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);
106
+ if (d <= 0.0001) { return 0.0; }
107
+ if (d >= 0.9999) { return 1.0; }
108
+
109
+ let rad = screenAngleDeg * PI / 180.0;
110
+ let cosA = cos(rad);
111
+ let sinA = sin(rad);
112
+ let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);
113
+
114
+ let minDim = min(dimensions.x, dimensions.y);
115
+ let cellSize = max(minDim / max(freq, 1.0), 1.0);
116
+
117
+ let center = dimensions * 0.5;
118
+ let pixelPos = (uv * dimensions) - center;
119
+ let rotPos = rot * pixelPos;
120
+
121
+ let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);
122
+
123
+ var spot: f32 = 0.0;
124
+
125
+ if (shape < 0.5) {
126
+ // 0: Euclidean Round Dot
127
+ spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);
128
+ } else if (shape < 1.5) {
129
+ // 1: Diamond
130
+ spot = abs(cellUV.x) + abs(cellUV.y);
131
+ } else if (shape < 2.5) {
132
+ // 2: Line
133
+ spot = abs(cellUV.y) * 2.0;
134
+ } else {
135
+ // 3: Square
136
+ spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;
137
+ }
138
+
139
+ let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);
140
+
141
+ return select(
142
+ step(spot, d),
143
+ smoothstep(d + edgeWidth, d - edgeWidth, spot),
144
+ isSmooth > 0.5
145
+ );
146
+ }
147
+
148
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
149
+ let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);
150
+ if (sourceCol.a < 1e-5) {
151
+ return sourceCol;
152
+ }
153
+
154
+ // Resolve parameter overrides or dynamic signals
155
+ var frequency = u.frequency;
156
+ if (u.hasFreqSig > 0.5) {
157
+ frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
158
+ }
159
+
160
+ var baseAngle = u.angle;
161
+ if (u.hasAngleSig > 0.5) {
162
+ baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
163
+ }
164
+
165
+ var contrast = u.contrast;
166
+ if (u.hasContrastSig > 0.5) {
167
+ contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
168
+ }
169
+
170
+ var cyanAngle = u.cyanAngle;
171
+ if (u.hasCyanSig > 0.5) {
172
+ cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
173
+ }
174
+
175
+ var magentaAngle = u.magentaAngle;
176
+ if (u.hasMagSig > 0.5) {
177
+ magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
178
+ }
179
+
180
+ var yellowAngle = u.yellowAngle;
181
+ if (u.hasYelSig > 0.5) {
182
+ yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
183
+ }
184
+
185
+ var blackAngle = u.blackAngle;
186
+ if (u.hasBlkSig > 0.5) {
187
+ blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
188
+ }
189
+
190
+ var effectOpacity = u.opacity;
191
+ if (u.hasOpacitySig > 0.5) {
192
+ effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
193
+ }
194
+
195
+ let dimensions = vec2<f32>(textureDimensions(tex));
196
+ let unpremult = sourceCol.rgb / sourceCol.a;
197
+
198
+ var screenedRgb: vec3<f32>;
199
+
200
+ if (u.mode < 0.5) {
201
+ // --- Monochrome Mode ---
202
+ let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);
203
+ let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);
204
+ let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);
205
+ let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));
206
+ var inkDensity = 1.0 - luminance;
207
+ if (u.invert > 0.5) {
208
+ inkDensity = luminance;
209
+ }
210
+
211
+ let coverage = evalDotCoverage(
212
+ in.uv,
213
+ dimensions,
214
+ baseAngle,
215
+ frequency,
216
+ u.dotShape,
217
+ inkDensity,
218
+ contrast,
219
+ u.isSmooth
220
+ );
221
+
222
+ screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);
223
+ } else {
224
+ // --- CMYK Mode ---
225
+ let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);
226
+ let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);
227
+ let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);
228
+ let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);
229
+ let invKC = 1.0 - kC;
230
+ var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);
231
+
232
+ let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);
233
+ let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);
234
+ let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);
235
+ let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);
236
+ let invKM = 1.0 - kM;
237
+ var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);
238
+
239
+ let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);
240
+ let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);
241
+ let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);
242
+ let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);
243
+ let invKY = 1.0 - kY;
244
+ var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);
245
+
246
+ let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);
247
+ let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);
248
+ let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);
249
+ var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);
250
+
251
+ if (u.invert > 0.5) {
252
+ densC = 1.0 - densC;
253
+ densM = 1.0 - densM;
254
+ densY = 1.0 - densY;
255
+ densK = 1.0 - densK;
256
+ }
257
+
258
+ let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);
259
+ let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);
260
+ let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);
261
+ let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);
262
+
263
+ // Subtractive synthesis onto paper substrate
264
+ let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);
265
+ let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);
266
+ let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);
267
+
268
+ screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));
269
+ }
270
+
271
+ // Apply effect opacity blend
272
+ let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));
273
+ return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);
274
+ }
275
+ `,j=new WeakMap;function be(i){let e=j.get(i);if(e)return e;let n=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),u=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),l=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:4,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:5,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:6,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:7,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:8,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});return e={uniformLayout:n,singleTextureLayout:u,signalTextureLayout:l,pipelineCache:new Map},j.set(i,e),e}function Se(i,e){let n=be(i),u=`halftone_${e}`,l=n.pipelineCache.get(u);if(!l){let m=i.createShaderModule({label:`halftone_${e}.wgsl`,code:ye});l=i.createRenderPipeline({label:`HalftonePipeline_${e}`,layout:i.createPipelineLayout({bindGroupLayouts:[n.uniformLayout,n.singleTextureLayout,n.signalTextureLayout]}),vertex:{module:m,entryPoint:"vs"},fragment:{module:m,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}}),n.pipelineCache.set(u,l)}return{halftonePipeline:l,uniformLayout:n.uniformLayout,singleTextureLayout:n.singleTextureLayout,signalTextureLayout:n.signalTextureLayout}}var J=async i=>{let{ctx:e,encoder:n,pass:u,targetView:l,targetTexture:m,targetWidth:A,targetHeight:M,props:r,drawChild:Q}=i,Y=r.frame??0,_=r.fps||30,a=r.virtualMedia?.operation;if(a?.op!=="HalftoneScreen"||!a)return;let T=r.virtualMedia.children?.[0];if(!T)return;u.end();let d=A,f=M,X=a.inputs?Object.keys(a.inputs)[0]:"halftone_node",o=(c,v,k,K)=>{let me=`${c}HandleId`,E=a[me],g=E?a.inputs?.[E]:null,W=!!(g?.connectionValid&&g.outputItem?.type==="Signal"),q=W&&g?.outputItem?.data?g.outputItem.data:null,h=v,z=!1;return W?q&&(h=Math.max(k,Math.min(K,Number(q.offset??0))),z=!0):g?.connectionValid&&g.outputItem?.type==="Number"?h=Math.max(k,Math.min(K,Number(g.outputItem.data??v))):h=Math.max(k,Math.min(K,Number(a[c]??v))),{val:h,hasStaticSig:z,sd:q}},P=o("frequency",30,1,200),G=o("angle",45,0,360),U=o("contrast",1,.1,5),R=o("cyanAngle",15,0,360),L=o("magentaAngle",75,0,360),V=o("yellowAngle",0,0,360),D=o("blackAngle",45,0,360),w=o("opacity",1,0,1),y=e.renderer.getTemporaryTexture(d,f,[...r.excludeTextures||[],m]),B=y.createView();e.renderer.beginFrame(n,B,{r:0,g:0,b:0,a:0},d,f,"clear").end(),e.renderer.pushScissor({x:0,y:0,width:d,height:f}),e.renderer.pushIdentity(),await Q(T,{...r,virtualMedia:T},B,y,d,f),e.renderer.popTransform(),e.renderer.popScissor();let{halftonePipeline:Z,uniformLayout:ee,singleTextureLayout:te,signalTextureLayout:ne}=Se(e.device,e.renderer.format),F=e.renderer.samplerCache.getSampler(e.device),ae=r.elapsedMs!==void 0?r.elapsedMs/1e3:Y/_,re=r.virtualMedia?.metadata?.durationMs?r.virtualMedia.metadata.durationMs/1e3:r.durationMs!==void 0?r.durationMs/1e3:0,s=(c,v)=>c.hasStaticSig&&c.sd?H.getOrCreate2DTextureView(e.device,n,c.sd.nodeId??`${X}_${v}`,ae,re,c.sd,d,f,r.renderId,Y,_):H.getDummy1x1TextureView(e.device),ie=s(P,"freq_sig"),le=s(G,"angle_sig"),oe=s(U,"contrast_sig"),se=s(R,"cyan_sig"),ce=s(L,"mag_sig"),ge=s(V,"yel_sig"),ue=s(D,"blk_sig"),de=s(w,"opacity_sig"),fe=a.mode==="CMYK"?1:0,b=0;a.dotShape==="Diamond"?b=1:a.dotShape==="Line"?b=2:a.dotShape==="Square"&&(b=3);let S=I(a.dotColor??"#000000"),x=I(a.paperColor??"#ffffff"),t=new Float32Array(28);t[0]=fe,t[1]=b,t[2]=P.val,t[3]=G.val,t[4]=U.val,t[5]=a.invert?1:0,t[6]=a.smooth!==!1?1:0,t[7]=w.val,t[8]=S.r,t[9]=S.g,t[10]=S.b,t[11]=S.a,t[12]=x.r,t[13]=x.g,t[14]=x.b,t[15]=x.a,t[16]=R.val,t[17]=L.val,t[18]=V.val,t[19]=D.val,t[20]=P.hasStaticSig?1:0,t[21]=G.hasStaticSig?1:0,t[22]=U.hasStaticSig?1:0,t[23]=R.hasStaticSig?1:0,t[24]=L.hasStaticSig?1:0,t[25]=V.hasStaticSig?1:0,t[26]=D.hasStaticSig?1:0,t[27]=w.hasStaticSig?1:0;let pe=e.renderer.getTemporaryBuffer(t),N=e.renderer.getTemporaryTexture(d,f,[y,m,...r.excludeTextures||[]]),p=n.beginRenderPass({colorAttachments:[{view:N.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});p.setPipeline(Z),p.setBindGroup(0,e.device.createBindGroup({layout:ee,entries:[{binding:0,resource:{buffer:pe}}]})),p.setBindGroup(1,e.renderer.bindGroupCache.getBindGroup(e.device,te,y,F)),p.setBindGroup(2,e.device.createBindGroup({layout:ne,entries:[{binding:0,resource:ie},{binding:1,resource:le},{binding:2,resource:oe},{binding:3,resource:se},{binding:4,resource:ce},{binding:5,resource:ge},{binding:6,resource:ue},{binding:7,resource:de},{binding:8,resource:F}]})),p.draw(4),p.end();let O=e.renderer.beginFrame(n,l,{r:0,g:0,b:0,a:0},A,M,"load");e.renderer.drawTexture(O,N,{x:0,y:0,width:A,height:M},{opacity:1}),i.pass=O};var Pe=$({WebGPURenderer:J});export{Pe as a};
@@ -0,0 +1,182 @@
1
+ import{a as L}from"./chunk-YSTLMWCG.mjs";import{e as P}from"./chunk-BVF64D6H.mjs";P();P();P();function R(i){let r=[...i].sort((e,d)=>e.x-d.x),n=[];for(let e of r)(n.length===0||Math.abs(e.x-n[n.length-1].x)>1e-6)&&n.push(e);let t=n.length;if(t===0)return e=>e;if(t===1)return()=>n[0].y;let c=new Float32Array(t-1),o=new Float32Array(t-1),u=new Float32Array(t-1);for(let e=0;e<t-1;e++)c[e]=n[e+1].x-n[e].x,o[e]=n[e+1].y-n[e].y,u[e]=o[e]/c[e];let s=new Float32Array(t);s[0]=u[0];for(let e=1;e<t-1;e++)s[e]=(u[e-1]+u[e])/2;s[t-1]=u[t-2];for(let e=0;e<t-1;e++){let d=u[e];if(Math.abs(d)<1e-9)s[e]=0,s[e+1]=0;else{let a=s[e]/d,l=s[e+1]/d,f=a*a,g=l*l;if(f+g>9){let b=3/Math.sqrt(f+g);s[e]=b*a*d,s[e+1]=b*l*d}}}return e=>{if(e<=n[0].x)return n[0].y;if(e>=n[t-1].x)return n[t-1].y;let d=0,a=t-2,l=0;for(;d<=a;){let h=d+a>>1;if(e>=n[h].x&&e<=n[h+1].x){l=h;break}e<n[h].x?a=h-1:d=h+1}let f=c[l],g=(e-n[l].x)/f,b=g*g,p=b*g,m=2*p-3*b+1,y=p-2*b+g,x=-2*p+3*b,_=p-b,G=n[l].y*m+f*s[l]*y+n[l+1].y*x+f*s[l+1]*_;return Math.max(0,Math.min(1,G))}}P();var Y=`
2
+ @group(0) @binding(0) var t_src: texture_2d<f32>;
3
+ @group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;
4
+ @group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;
5
+ @group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;
6
+ @group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;
7
+
8
+ @compute @workgroup_size(8, 8)
9
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
10
+ let dims = textureDimensions(t_src, 0);
11
+ if (gid.x >= dims.x || gid.y >= dims.y) { return; }
12
+
13
+ let color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);
14
+ let a = color.a;
15
+ if (a < 1e-5) { return; }
16
+
17
+ let rgb = color.rgb / a;
18
+
19
+ let ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));
20
+ let gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));
21
+ let bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));
22
+ let luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;
23
+ let lumai = u32(clamp(luma * 255.0, 0.0, 255.0));
24
+
25
+ atomicAdd(&bins_r[ri], 1u);
26
+ atomicAdd(&bins_g[gi], 1u);
27
+ atomicAdd(&bins_b[bi], 1u);
28
+ atomicAdd(&bins_luma[lumai], 1u);
29
+ }
30
+ `,H=new WeakMap;function J(i){let r=H.get(i);if(!r){let n=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]}),t=i.createShaderModule({label:"histogram.wgsl",code:Y});r={pipeline:i.createComputePipeline({label:"HistogramPipeline",layout:i.createPipelineLayout({bindGroupLayouts:[n]}),compute:{module:t,entryPoint:"main"}}),bindGroupLayout:n},H.set(i,r)}return r}var D=new Map,B=new Set;function N(i,r,n,t){if(!D.get(t)||B.has(t))return;B.add(t);let{pipeline:o,bindGroupLayout:u}=J(i),s=()=>i.createBuffer({size:1024,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),e=s(),d=s(),a=s(),l=s();r.clearBuffer(e),r.clearBuffer(d),r.clearBuffer(a),r.clearBuffer(l);let f=i.createBindGroup({layout:u,entries:[{binding:0,resource:n.createView()},{binding:1,resource:{buffer:e}},{binding:2,resource:{buffer:d}},{binding:3,resource:{buffer:a}},{binding:4,resource:{buffer:l}}]}),g=r.beginComputePass({label:"histogram-pass"});g.setPipeline(o),g.setBindGroup(0,f),g.dispatchWorkgroups(Math.ceil(n.width/8),Math.ceil(n.height/8)),g.end();let b=()=>i.createBuffer({size:1024,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),p=b(),m=b(),y=b(),x=b();r.copyBufferToBuffer(e,0,p,0,1024),r.copyBufferToBuffer(d,0,m,0,1024),r.copyBufferToBuffer(a,0,y,0,1024),r.copyBufferToBuffer(l,0,x,0,1024),i.queue.onSubmittedWorkDone().then(()=>Promise.all([p.mapAsync(GPUMapMode.READ),m.mapAsync(GPUMapMode.READ),y.mapAsync(GPUMapMode.READ),x.mapAsync(GPUMapMode.READ)])).then(()=>{let _=new Uint32Array(p.getMappedRange().slice(0)),G=new Uint32Array(m.getMappedRange().slice(0)),h=new Uint32Array(y.getMappedRange().slice(0)),T=new Uint32Array(x.getMappedRange().slice(0));p.unmap(),m.unmap(),y.unmap(),x.unmap(),p.destroy(),m.destroy(),y.destroy(),x.destroy(),e.destroy(),d.destroy(),a.destroy(),l.destroy(),B.delete(t);let U=D.get(t);U&&U({r:_,g:G,b:h,luma:T})}).catch(()=>{p.destroy(),m.destroy(),y.destroy(),x.destroy(),e.destroy(),d.destroy(),a.destroy(),l.destroy(),B.delete(t)})}var v=1024,I="rgba8unorm",W=v*4,K=`
31
+ struct VSOut {
32
+ @builtin(position) pos : vec4<f32>,
33
+ @location(0) uv : vec2<f32>,
34
+ };
35
+
36
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
37
+ var pos = array<vec2<f32>, 4>(
38
+ vec2<f32>(-1.0, 1.0),
39
+ vec2<f32>(1.0, 1.0),
40
+ vec2<f32>(-1.0, -1.0),
41
+ vec2<f32>(1.0, -1.0)
42
+ );
43
+ var uv = array<vec2<f32>, 4>(
44
+ vec2<f32>(0.0, 0.0),
45
+ vec2<f32>(1.0, 0.0),
46
+ vec2<f32>(0.0, 1.0),
47
+ vec2<f32>(1.0, 1.0)
48
+ );
49
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
50
+ }
51
+
52
+ @group(0) @binding(0) var t_lut : texture_2d<f32>;
53
+ @group(0) @binding(1) var s_lut : sampler;
54
+
55
+ @group(1) @binding(0) var t_src : texture_2d<f32>;
56
+ @group(1) @binding(1) var s_src : sampler;
57
+
58
+ @fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
59
+ let src = textureSampleLevel(t_src, s_src, in.uv, 0.0);
60
+ if (src.a < 1e-5) { return src; }
61
+
62
+ let rgb = src.rgb / src.a;
63
+
64
+ let N = f32(${v});
65
+ let uv_r = (rgb.r * (N - 1.0) + 0.5) / N;
66
+ let uv_g = (rgb.g * (N - 1.0) + 0.5) / N;
67
+ let uv_b = (rgb.b * (N - 1.0) + 0.5) / N;
68
+
69
+ let r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;
70
+ let g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;
71
+ let b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;
72
+
73
+ let graded = vec3<f32>(r_graded, g_graded, b_graded);
74
+ return vec4<f32>(graded * src.a, src.a);
75
+ }
76
+ `,X=`
77
+ struct Uniforms {
78
+ mode: u32,
79
+ pad0: u32,
80
+ pad1: u32,
81
+ pad2: u32,
82
+ };
83
+
84
+ struct VSOut {
85
+ @builtin(position) pos : vec4<f32>,
86
+ @location(0) uv : vec2<f32>,
87
+ };
88
+
89
+ @group(0) @binding(0) var<uniform> u : Uniforms;
90
+ @group(0) @binding(1) var t_lut : texture_2d<f32>;
91
+ @group(0) @binding(2) var s_lut : sampler;
92
+
93
+ @group(1) @binding(0) var t_src : texture_2d<f32>;
94
+ @group(1) @binding(1) var s_src : sampler;
95
+
96
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
97
+ var pos = array<vec2<f32>, 4>(
98
+ vec2<f32>(-1.0, 1.0), vec2<f32>(1.0, 1.0),
99
+ vec2<f32>(-1.0, -1.0), vec2<f32>(1.0, -1.0)
100
+ );
101
+ var uv = array<vec2<f32>, 4>(
102
+ vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 0.0),
103
+ vec2<f32>(0.0, 1.0), vec2<f32>(1.0, 1.0)
104
+ );
105
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
106
+ }
107
+
108
+ fn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {
109
+ let r = rgb.r; let g = rgb.g; let b = rgb.b;
110
+ let cmax = max(r, max(g, b));
111
+ let cmin = min(r, min(g, b));
112
+ let delta = cmax - cmin;
113
+
114
+ var h = 0.0;
115
+ var s = 0.0;
116
+ let l = (cmax + cmin) * 0.5;
117
+
118
+ if (delta > 1e-5) {
119
+ s = delta / (1.0 - abs(2.0 * l - 1.0));
120
+ if (cmax == r) {
121
+ h = ((g - b) / delta) % 6.0;
122
+ } else if (cmax == g) {
123
+ h = (b - r) / delta + 2.0;
124
+ } else {
125
+ h = (r - g) / delta + 4.0;
126
+ }
127
+ h = h / 6.0;
128
+ if (h < 0.0) { h = h + 1.0; }
129
+ }
130
+ return vec3<f32>(h, s, l);
131
+ }
132
+
133
+ fn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {
134
+ let h = hsl.x; let s = hsl.y; let l = hsl.z;
135
+ let c = (1.0 - abs(2.0 * l - 1.0)) * s;
136
+ let x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));
137
+ let m = l - c * 0.5;
138
+
139
+ var rgb = vec3<f32>(0.0);
140
+ let hi = u32(h * 6.0) % 6u;
141
+ if (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }
142
+ else if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }
143
+ else if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }
144
+ else if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }
145
+ else if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }
146
+ else { rgb = vec3<f32>(c, 0.0, x); }
147
+ return rgb + vec3<f32>(m);
148
+ }
149
+
150
+ fn lut_sample(x: f32) -> f32 {
151
+ let N = f32(${v});
152
+ let uv_x = (x * (N - 1.0) + 0.5) / N;
153
+ return textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;
154
+ }
155
+
156
+ @fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
157
+ let src = textureSampleLevel(t_src, s_src, in.uv, 0.0);
158
+ if (src.a < 1e-5) { return src; }
159
+
160
+ let rgb = src.rgb / src.a;
161
+ let hsl = rgb_to_hsl(rgb);
162
+
163
+ var out_hsl = hsl;
164
+
165
+ if (u.mode == 0u) {
166
+ let adj = lut_sample(hsl.x);
167
+ out_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);
168
+ } else if (u.mode == 1u) {
169
+ let adj = lut_sample(hsl.x);
170
+ out_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);
171
+ } else if (u.mode == 2u) {
172
+ let adj = lut_sample(hsl.z);
173
+ out_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);
174
+ } else {
175
+ let adj = lut_sample(hsl.y);
176
+ out_hsl.y = clamp(adj, 0.0, 1.0);
177
+ }
178
+
179
+ let out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));
180
+ return vec4<f32>(out_rgb * src.a, src.a);
181
+ }
182
+ `,O=new WeakMap,V=new WeakMap;function $(i,r){let n=O.get(i);if(!n){let t=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),c=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),o=i.createShaderModule({label:"curves-rgb.wgsl",code:K});n={pipeline:i.createRenderPipeline({label:"CurvesRgbPipeline",layout:i.createPipelineLayout({bindGroupLayouts:[t,c]}),vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}}),lutBindGroupLayout:t,srcBindGroupLayout:c},O.set(i,n)}return n}function Q(i,r){let n=V.get(i);if(!n){let t=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),c=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),o=i.createShaderModule({label:"curves-hsl.wgsl",code:X});n={pipeline:i.createRenderPipeline({label:"CurvesHslPipeline",layout:i.createPipelineLayout({bindGroupLayouts:[t,c]}),vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}}),uniformLayout:t,srcBindGroupLayout:c},V.set(i,n)}return n}var ee=32,k=new WeakMap;function F(i,r,n){let t=k.get(i);t||(t=new Map,k.set(i,t));let c=t.get(r);if(c)return t.delete(r),t.set(r,c),c;let o=n();if(t.set(r,o),t.size>ee){let[u,s]=t.entries().next().value;t.delete(u),s.destroy()}return o}function re(i,r){let n=R(r.master||[{x:0,y:0},{x:1,y:1}]),t=R(r.red||[{x:0,y:0},{x:1,y:1}]),c=R(r.green||[{x:0,y:0},{x:1,y:1}]),o=R(r.blue||[{x:0,y:0},{x:1,y:1}]),u=new Uint8Array(v*4);for(let e=0;e<v;e++){let d=e/(v-1),a=n(d),l=Math.max(0,Math.min(1,t(a))),f=Math.max(0,Math.min(1,c(a))),g=Math.max(0,Math.min(1,o(a)));u[e*4+0]=Math.round(l*255),u[e*4+1]=Math.round(f*255),u[e*4+2]=Math.round(g*255),u[e*4+3]=255}let s=i.createTexture({size:[v,1,1],dimension:"2d",format:I,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});return i.queue.writeTexture({texture:s},u,{bytesPerRow:W},[v,1,1]),s}function te(i,r){let n=R(r),t=new Uint8Array(v*4);for(let o=0;o<v;o++){let u=o/(v-1),s=Math.round(Math.max(0,Math.min(1,n(u)))*255);t[o*4+0]=s,t[o*4+1]=s,t[o*4+2]=s,t[o*4+3]=255}let c=i.createTexture({size:[v,1,1],dimension:"2d",format:I,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});return i.queue.writeTexture({texture:c},t,{bytesPerRow:W},[v,1,1]),c}var ne={"hue-vs-hue":0,"hue-vs-sat":1,"lum-vs-sat":2,"sat-vs-sat":3},ie={"hue-vs-hue":"hueVsHue","hue-vs-sat":"hueVsSat","lum-vs-sat":"lumVsSat","sat-vs-sat":"satVsSat"},j=async i=>{let{ctx:r,encoder:n,pass:t,targetView:c,targetTexture:o,targetWidth:u,targetHeight:s,props:e,drawChild:d}=i,a=e.virtualMedia?.operation;if(a?.op!=="Curves"||!e.virtualMedia?.children?.[0])return;t.end();let l=e.virtualMedia.children[0],f=u,g=s,b=a.nodeId||"curves_fallback",p=a.curveType||"rgb",m=r.renderer.getTemporaryTexture(f,g,[...e.excludeTextures||[],o]),y=m.createView();r.renderer.beginFrame(n,y,{r:0,g:0,b:0,a:0},f,g,"clear").end(),r.renderer.pushScissor({x:0,y:0,width:f,height:g}),r.renderer.pushIdentity(),await d(l,{...e,virtualMedia:l},y,m,f,g),r.renderer.popTransform(),r.renderer.popScissor();let _=r.renderer.samplerCache.getSampler(r.device),G=r.renderer.getTemporaryTexture(f,g,[m,o,...e.excludeTextures||[]]);if(p==="rgb"){let T=JSON.stringify({curveType:p,master:a.master,red:a.red,green:a.green,blue:a.blue}),U=F(r.device,T,()=>re(r.device,a)),{pipeline:A,lutBindGroupLayout:C,srcBindGroupLayout:w}=$(r.device,r.renderer.format),S=n.beginRenderPass({colorAttachments:[{view:G.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});S.setPipeline(A),S.setBindGroup(0,r.device.createBindGroup({layout:C,entries:[{binding:0,resource:U.createView()},{binding:1,resource:_}]})),S.setBindGroup(1,r.renderer.bindGroupCache.getBindGroup(r.device,w,m,_)),S.draw(4),S.end()}else{let T=ie[p],U=a[T]||[{x:0,y:.5},{x:1,y:.5}],A=JSON.stringify({curveType:p,points:U}),C=F(r.device,A,()=>te(r.device,U)),w=new Uint32Array([ne[p]??0,0,0,0]),S=r.renderer.getTemporaryBuffer(w),{pipeline:z,uniformLayout:Z,srcBindGroupLayout:q}=Q(r.device,r.renderer.format),M=n.beginRenderPass({colorAttachments:[{view:G.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});M.setPipeline(z),M.setBindGroup(0,r.device.createBindGroup({layout:Z,entries:[{binding:0,resource:{buffer:S}},{binding:1,resource:C.createView()},{binding:2,resource:_}]})),M.setBindGroup(1,r.renderer.bindGroupCache.getBindGroup(r.device,q,m,_)),M.draw(4),M.end()}N(r.device,n,G,b);let h=r.renderer.beginFrame(n,c,{r:0,g:0,b:0,a:0},u,s,"load");r.renderer.drawTexture(h,G,{x:0,y:0,width:u,height:s},{opacity:e.opacity??1}),i.pass=h};var se=L({WebGPURenderer:j}),me=se;export{se as a,me as b};