framefields 2.10.0-canary.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/NOTICE.md +0 -4
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-YpBRdI7r.mjs → audio-BuCVk1IQ.mjs} +31 -5
  5. package/dist/audio-BuCVk1IQ.mjs.map +1 -0
  6. package/dist/audio-CYZkDwae.d.mts +62 -0
  7. package/dist/audio-CYZkDwae.d.mts.map +1 -0
  8. package/dist/cli/check-worker.mjs +45 -45
  9. package/dist/cloud/index.d.mts.map +1 -1
  10. package/dist/components/index.d.mts +10 -10
  11. package/dist/components/index.mjs +44 -44
  12. package/dist/{dist-BwtxciN4.mjs → dist-CNGv-JTX.mjs} +1 -1
  13. package/dist/{dist-C4Vxgm0Q.mjs → dist-CWLLnigL.mjs} +447 -284
  14. package/dist/dist-CWLLnigL.mjs.map +1 -0
  15. package/dist/dist-CySGkG54.mjs.map +1 -1
  16. package/dist/{dist-2_lT3Dwc.mjs → dist-Dg9LMWoX.mjs} +2 -2
  17. package/dist/{dist-2_lT3Dwc.mjs.map → dist-Dg9LMWoX.mjs.map} +1 -1
  18. package/dist/{dist-Cu1fZ9Uy.mjs → dist-EQX3TUUl.mjs} +3 -3
  19. package/dist/{dist-Cu1fZ9Uy.mjs.map → dist-EQX3TUUl.mjs.map} +1 -1
  20. package/dist/effects/index.d.mts +5 -5
  21. package/dist/effects/index.mjs +35 -35
  22. package/dist/{effects-DiWYouOK.mjs → effects-DKLbLXF7.mjs} +2 -2
  23. package/dist/{effects-DiWYouOK.mjs.map → effects-DKLbLXF7.mjs.map} +1 -1
  24. package/dist/fonts/index.mjs +2 -2
  25. package/dist/{fonts-BnV-GB1o.mjs → fonts-gPbGbShD.mjs} +2 -2
  26. package/dist/{fonts-BnV-GB1o.mjs.map → fonts-gPbGbShD.mjs.map} +1 -1
  27. package/dist/{gpu-Bw35AMwY.mjs → gpu-CpkJJLQP.mjs} +3 -11
  28. package/dist/gpu-CpkJJLQP.mjs.map +1 -0
  29. package/dist/{index-h7m8QgcL.d.mts → index-Bly-7YM1.d.mts} +2 -2
  30. package/dist/{index-h7m8QgcL.d.mts.map → index-Bly-7YM1.d.mts.map} +1 -1
  31. package/dist/{index-B7WqFBZA.d.mts → index-BuiZzc6i.d.mts} +22 -33
  32. package/dist/index-BuiZzc6i.d.mts.map +1 -0
  33. package/dist/{index-DQa7mhzq.d.mts → index-C8YwZ6k1.d.mts} +2 -2
  34. package/dist/{index-DQa7mhzq.d.mts.map → index-C8YwZ6k1.d.mts.map} +1 -1
  35. package/dist/{index-WwuuX8ZJ.d.mts → index-CEU_Zsb9.d.mts} +22 -24
  36. package/dist/index-CEU_Zsb9.d.mts.map +1 -0
  37. package/dist/index-COYNQ_mf.d.mts.map +1 -1
  38. package/dist/{index-Dyt4yS-x.d.mts → index-Cro-818i.d.mts} +10 -84
  39. package/dist/index-Cro-818i.d.mts.map +1 -0
  40. package/dist/{index-CDQrdZ0J.d.mts → index-D2i9J9Zq.d.mts} +2 -2
  41. package/dist/{index-CDQrdZ0J.d.mts.map → index-D2i9J9Zq.d.mts.map} +1 -1
  42. package/dist/{index-Bbv0VtxJ.d.mts → index-jSDEM-uE.d.mts} +5 -5
  43. package/dist/{index-Bbv0VtxJ.d.mts.map → index-jSDEM-uE.d.mts.map} +1 -1
  44. package/dist/index.d.mts +11 -11
  45. package/dist/index.mjs +52 -52
  46. package/dist/preview/index.d.mts +1 -1
  47. package/dist/preview/index.mjs +10 -10
  48. package/dist/{preview-BW7ilNWk.mjs → preview-BToKUTtZ.mjs} +2 -2
  49. package/dist/{preview-BW7ilNWk.mjs.map → preview-BToKUTtZ.mjs.map} +1 -1
  50. package/dist/preview-engine/audio.mjs +1 -1
  51. package/dist/preview-engine/{chunk-LBP7E7SJ.mjs → chunk-26XWIHW3.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-ZA5LWHRM.mjs → chunk-4AGQN53P.mjs} +1 -1
  53. package/dist/preview-engine/chunk-4FY4TNST.mjs +1 -0
  54. package/dist/preview-engine/{chunk-6O55UROD.mjs → chunk-54Q5CKSV.mjs} +2 -2
  55. package/dist/preview-engine/{chunk-6BE3IL7L.mjs → chunk-5KSBS3AL.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-RAW2I27S.mjs → chunk-65NANVQL.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-HKYENGC5.mjs → chunk-6LTINEA4.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-6SLCECHG.mjs → chunk-7GMHSTRP.mjs} +1 -1
  59. package/dist/preview-engine/chunk-7LDSMOO3.mjs +1 -0
  60. package/dist/preview-engine/{chunk-4DSOZ5QG.mjs → chunk-ACBBBOUM.mjs} +1 -1
  61. package/dist/preview-engine/chunk-AGAZJZWI.mjs +1 -0
  62. package/dist/preview-engine/{chunk-64L4GUOF.mjs → chunk-BJXNKMSY.mjs} +6 -20
  63. package/dist/preview-engine/{chunk-HO7FXISJ.mjs → chunk-BRV7TQDV.mjs} +1 -1
  64. package/dist/preview-engine/chunk-BXPM5SJ3.mjs +1 -0
  65. package/dist/preview-engine/{chunk-5SLBE2FX.mjs → chunk-C4M3B2Q2.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-Y2SWIWIU.mjs → chunk-CCORQLMR.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-4BWBX2HM.mjs → chunk-CIVEZJYF.mjs} +1 -1
  68. package/dist/preview-engine/chunk-CIVJXFWH.mjs +4 -0
  69. package/dist/preview-engine/{chunk-JIPMF42Z.mjs → chunk-D6LM7DTJ.mjs} +2 -2
  70. package/dist/preview-engine/chunk-D73ZKPFN.mjs +138 -0
  71. package/dist/preview-engine/{chunk-6LBFSGCI.mjs → chunk-DNNGWS2C.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-IVAA5X5H.mjs → chunk-EAWJXW4J.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-HGWT3RVQ.mjs → chunk-EPRINA4V.mjs} +10 -10
  74. package/dist/preview-engine/{chunk-ML7WO27M.mjs → chunk-EXEO245X.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-VRJBOFFY.mjs → chunk-FQL4IJZN.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-7A3BNAWY.mjs → chunk-GHTG5XV6.mjs} +25 -84
  77. package/dist/preview-engine/{chunk-NCQHOGZK.mjs → chunk-GN3NDRLI.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-VVY4PG5E.mjs → chunk-GXFYRMJZ.mjs} +25 -25
  79. package/dist/preview-engine/{chunk-OOUDE4XL.mjs → chunk-IBPYV6HF.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-5Y7SO37Q.mjs → chunk-IKVJ4MW5.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-L2NTIWW5.mjs → chunk-JDB7PMRI.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-D7OMXGIZ.mjs → chunk-JSYG6OWZ.mjs} +1 -1
  83. package/dist/preview-engine/chunk-KOVN277Z.mjs +1 -0
  84. package/dist/preview-engine/{chunk-57WXGYEV.mjs → chunk-KVOFO273.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-EKEKYGXE.mjs → chunk-LFNCWMKS.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-4RLKHFV6.mjs → chunk-LMXMBX4J.mjs} +1 -1
  87. package/dist/preview-engine/chunk-M4QANUJI.mjs +480 -0
  88. package/dist/preview-engine/{chunk-4FACCLLE.mjs → chunk-NOKPBMIP.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-FW2UDDUT.mjs → chunk-O63FLYWC.mjs} +1 -1
  90. package/dist/preview-engine/chunk-OELPPLML.mjs +107 -0
  91. package/dist/preview-engine/{chunk-JSKEVYKD.mjs → chunk-OLB4TQLQ.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-7HW7GA76.mjs → chunk-PKNUTHPI.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-OD4CSXZL.mjs → chunk-QF4JWVO3.mjs} +15 -15
  94. package/dist/preview-engine/{chunk-K3TJJXVC.mjs → chunk-RDWLLITE.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-K3C6GUQD.mjs → chunk-SE2C623Z.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-LTR5FXGU.mjs → chunk-TEWRQKX3.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-YS3ROS25.mjs → chunk-UGB6JKVS.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-RMHL4XZ3.mjs → chunk-UI3VH33L.mjs} +1 -1
  99. package/dist/preview-engine/{chunk-JFBSNFN6.mjs → chunk-UMJ3VGKN.mjs} +1 -1
  100. package/dist/preview-engine/{chunk-YXCTOCQ2.mjs → chunk-VFQH5KVS.mjs} +1 -1
  101. package/dist/preview-engine/{chunk-HPQDCC4S.mjs → chunk-VQA4DYZU.mjs} +1 -1
  102. package/dist/preview-engine/{chunk-C2GX5L5S.mjs → chunk-VZLIRYAL.mjs} +1 -1
  103. package/dist/preview-engine/{chunk-CHXR5XZK.mjs → chunk-WFMUDL55.mjs} +1 -1
  104. package/dist/preview-engine/chunk-XF6DYP6B.mjs +1974 -0
  105. package/dist/preview-engine/chunk-XYGDTPO7.mjs +39 -0
  106. package/dist/preview-engine/chunk-YGKO4NIU.mjs +1 -0
  107. package/dist/preview-engine/{chunk-XCQ7KN4S.mjs → chunk-YHMBGJP6.mjs} +1 -1
  108. package/dist/preview-engine/{chunk-4N25ZU43.mjs → chunk-YKM7JDQY.mjs} +1 -1
  109. package/dist/preview-engine/{chunk-WVIDORLK.mjs → chunk-YVZTRH4Y.mjs} +1 -1
  110. package/dist/preview-engine/{chunk-FH72KTSM.mjs → chunk-Z24UEN4P.mjs} +1 -1
  111. package/dist/preview-engine/{chunk-V5HU6NIW.mjs → chunk-ZF2MEFKO.mjs} +1 -1
  112. package/dist/preview-engine/{chunk-NTTEGJD6.mjs → chunk-ZIXPWP2B.mjs} +1 -1
  113. package/dist/preview-engine/components.mjs +1 -1
  114. package/dist/preview-engine/effects.mjs +1 -1
  115. package/dist/preview-engine/fonts.mjs +1 -1
  116. package/dist/preview-engine/framefields.mjs +1 -1
  117. package/dist/preview-engine/player.mjs +1 -1
  118. package/dist/preview-engine/renderers-2NGIILMI.mjs +1 -0
  119. package/dist/preview-engine/{renderers-4MW4NW6O.mjs → renderers-33FCFHDR.mjs} +1 -1
  120. package/dist/preview-engine/renderers-466Z77BH.mjs +1 -0
  121. package/dist/preview-engine/{renderers-Q5YCUPYE.mjs → renderers-4IBFDW2S.mjs} +1 -1
  122. package/dist/preview-engine/renderers-4KRENGZA.mjs +1 -0
  123. package/dist/preview-engine/renderers-4W52BQEU.mjs +1 -0
  124. package/dist/preview-engine/{renderers-36P2TKPC.mjs → renderers-53EI26GL.mjs} +1 -1
  125. package/dist/preview-engine/renderers-55PRAS7G.mjs +1 -0
  126. package/dist/preview-engine/renderers-5LLYINHW.mjs +1 -0
  127. package/dist/preview-engine/{renderers-U4S577ON.mjs → renderers-5XLGCEOA.mjs} +1 -1
  128. package/dist/preview-engine/renderers-63N3Y2XO.mjs +1 -0
  129. package/dist/preview-engine/{renderers-PGZDFDSC.mjs → renderers-6LNDAO4B.mjs} +1 -1
  130. package/dist/preview-engine/renderers-6ROVFDIN.mjs +1 -0
  131. package/dist/preview-engine/{renderers-JZYHX4XI.mjs → renderers-6YVZUQOH.mjs} +1 -1
  132. package/dist/preview-engine/{renderers-HXNSDJBY.mjs → renderers-77PDUMYI.mjs} +1 -1
  133. package/dist/preview-engine/renderers-7CAHX35U.mjs +1 -0
  134. package/dist/preview-engine/renderers-A4RVLPMG.mjs +1 -0
  135. package/dist/preview-engine/renderers-A53P4J6O.mjs +1 -0
  136. package/dist/preview-engine/{renderers-LF6U4MR5.mjs → renderers-ACUJMDEK.mjs} +1 -1
  137. package/dist/preview-engine/renderers-AFJ3373L.mjs +1 -0
  138. package/dist/preview-engine/renderers-ATFWTA3U.mjs +1 -0
  139. package/dist/preview-engine/{renderers-37Y5LR2S.mjs → renderers-BOBVXYAA.mjs} +1 -1
  140. package/dist/preview-engine/renderers-BPYJXHBU.mjs +1 -0
  141. package/dist/preview-engine/{renderers-G2FL3IFD.mjs → renderers-C7SI3NIE.mjs} +1 -1
  142. package/dist/preview-engine/{renderers-CMBI4JOC.mjs → renderers-CCRZNGVK.mjs} +1 -1
  143. package/dist/preview-engine/{renderers-6RRWA33X.mjs → renderers-CYJAVWHT.mjs} +1 -1
  144. package/dist/preview-engine/renderers-D3ZF7FXT.mjs +1 -0
  145. package/dist/preview-engine/renderers-D7YN6B4B.mjs +1 -0
  146. package/dist/preview-engine/renderers-DBLASKF5.mjs +1 -0
  147. package/dist/preview-engine/renderers-DC5ZYYHM.mjs +1 -0
  148. package/dist/preview-engine/{renderers-OPRXVIGT.mjs → renderers-EN7LXJLG.mjs} +1 -1
  149. package/dist/preview-engine/{renderers-ZQVKE5AO.mjs → renderers-FY2HOQCS.mjs} +1 -1
  150. package/dist/preview-engine/{renderers-CQIPHCIW.mjs → renderers-GQM3KMV3.mjs} +1 -1
  151. package/dist/preview-engine/{renderers-TKHQRERE.mjs → renderers-H6PBHEYU.mjs} +1 -1
  152. package/dist/preview-engine/{renderers-YJ4PJEPG.mjs → renderers-HKLCB4U6.mjs} +1 -1
  153. package/dist/preview-engine/{renderers-JALV3B3A.mjs → renderers-HSFQIILN.mjs} +1 -1
  154. package/dist/preview-engine/{renderers-OZKPOUMW.mjs → renderers-I6QKZ7CH.mjs} +1 -1
  155. package/dist/preview-engine/{renderers-JMSAW7VY.mjs → renderers-IHGAWLUF.mjs} +1 -1
  156. package/dist/preview-engine/renderers-J6ZEXW5L.mjs +1 -0
  157. package/dist/preview-engine/renderers-JV4MF46Q.mjs +1 -0
  158. package/dist/preview-engine/{renderers-RQ3JZE3L.mjs → renderers-KCGK33Y2.mjs} +1 -1
  159. package/dist/preview-engine/renderers-KQKH4ZIX.mjs +1 -0
  160. package/dist/preview-engine/renderers-MDHPQY6D.mjs +1 -0
  161. package/dist/preview-engine/renderers-MEITHN4N.mjs +1 -0
  162. package/dist/preview-engine/renderers-MN3HSBTJ.mjs +1 -0
  163. package/dist/preview-engine/{renderers-EILFSWSJ.mjs → renderers-MOEC2XZZ.mjs} +1 -1
  164. package/dist/preview-engine/renderers-NTG3QGNH.mjs +1 -0
  165. package/dist/preview-engine/{renderers-UBIFSF37.mjs → renderers-OGOW3NA4.mjs} +1 -1
  166. package/dist/preview-engine/renderers-OU4SFMB2.mjs +1 -0
  167. package/dist/preview-engine/{renderers-4SNAK77B.mjs → renderers-P2HORBZ6.mjs} +1 -1
  168. package/dist/preview-engine/renderers-P6TIBJIG.mjs +1 -0
  169. package/dist/preview-engine/renderers-POJWQ7L3.mjs +1 -0
  170. package/dist/preview-engine/{renderers-NQC4DPX4.mjs → renderers-PPZK6VEW.mjs} +1 -1
  171. package/dist/preview-engine/renderers-RJ7S6VHD.mjs +1 -0
  172. package/dist/preview-engine/renderers-RJJAJZYN.mjs +1 -0
  173. package/dist/preview-engine/{renderers-KICDB5Y6.mjs → renderers-RN2MHIFK.mjs} +1 -1
  174. package/dist/preview-engine/renderers-UEQ733VK.mjs +1 -0
  175. package/dist/preview-engine/{renderers-XZ3XDQIN.mjs → renderers-UG2C3C7T.mjs} +1 -1
  176. package/dist/preview-engine/renderers-ULO2AW2U.mjs +1 -0
  177. package/dist/preview-engine/renderers-UPVHGHCK.mjs +1 -0
  178. package/dist/preview-engine/renderers-UZHSNNIM.mjs +1 -0
  179. package/dist/preview-engine/renderers-V5KWZL2C.mjs +1 -0
  180. package/dist/preview-engine/{renderers-5K3BSBI6.mjs → renderers-VIGZYJYX.mjs} +1 -1
  181. package/dist/preview-engine/{renderers-6RYIPQ7W.mjs → renderers-VVP5WQOY.mjs} +1 -1
  182. package/dist/preview-engine/renderers-WL372W36.mjs +228 -0
  183. package/dist/preview-engine/{renderers-AUYCQNSS.mjs → renderers-WSABL3QO.mjs} +1 -1
  184. package/dist/preview-engine/{renderers-4WFRXGMR.mjs → renderers-X6CORAES.mjs} +1 -1
  185. package/dist/preview-engine/renderers-YMXKYOHQ.mjs +1 -0
  186. package/dist/preview-engine/renderers-YWDAZ2NZ.mjs +1 -0
  187. package/dist/preview-engine/signals.mjs +1 -1
  188. package/dist/preview-engine/{src-GPF7RIBU.mjs → src-4IUYUKIZ.mjs} +1 -1
  189. package/dist/{program-BUjUTdxq.mjs → program-Bc860ko5.mjs} +15 -42
  190. package/dist/program-Bc860ko5.mjs.map +1 -0
  191. package/dist/renderer/index.d.mts +1 -1
  192. package/dist/renderer/index.mjs +2 -2
  193. package/dist/renderer--Ymc_4XJ.mjs +5 -0
  194. package/dist/{renderer-BvRaVByi.mjs → renderer-1uoKiILq.mjs} +3 -3
  195. package/dist/{renderer-BvRaVByi.mjs.map → renderer-1uoKiILq.mjs.map} +1 -1
  196. package/dist/{renderer-muB4slsV.mjs → renderer-4ZUv3X1I.mjs} +4 -4
  197. package/dist/{renderer-muB4slsV.mjs.map → renderer-4ZUv3X1I.mjs.map} +1 -1
  198. package/dist/{renderer-BT4im6c0.mjs → renderer-50JEMaVo.mjs} +4 -4
  199. package/dist/{renderer-BT4im6c0.mjs.map → renderer-50JEMaVo.mjs.map} +1 -1
  200. package/dist/{renderer-CsRuEpR2.mjs → renderer-7ow5Acsg.mjs} +3 -3
  201. package/dist/{renderer-CsRuEpR2.mjs.map → renderer-7ow5Acsg.mjs.map} +1 -1
  202. package/dist/{renderer-DJuVX3c5.d.mts → renderer-88C3QpKL.d.mts} +2 -2
  203. package/dist/{renderer-DJuVX3c5.d.mts.map → renderer-88C3QpKL.d.mts.map} +1 -1
  204. package/dist/{renderer-jBKpX3Xg.mjs → renderer-B-CMRUag.mjs} +3 -3
  205. package/dist/{renderer-jBKpX3Xg.mjs.map → renderer-B-CMRUag.mjs.map} +1 -1
  206. package/dist/renderer-B-OdV-eq.mjs +5 -0
  207. package/dist/{renderer-CeNAgCE2.mjs → renderer-B1LD29TV.mjs} +3 -3
  208. package/dist/{renderer-CeNAgCE2.mjs.map → renderer-B1LD29TV.mjs.map} +1 -1
  209. package/dist/{renderer-BFmVDdVs.mjs → renderer-B1esRxGy.mjs} +4 -4
  210. package/dist/{renderer-BFmVDdVs.mjs.map → renderer-B1esRxGy.mjs.map} +1 -1
  211. package/dist/{renderer-Chfo4G9t.mjs → renderer-B3Dme2es.mjs} +4 -4
  212. package/dist/{renderer-Chfo4G9t.mjs.map → renderer-B3Dme2es.mjs.map} +1 -1
  213. package/dist/renderer-B65fwoA2.mjs +5 -0
  214. package/dist/{renderer-B3WHDQeB.mjs → renderer-B6Oeahe_.mjs} +3 -3
  215. package/dist/{renderer-B3WHDQeB.mjs.map → renderer-B6Oeahe_.mjs.map} +1 -1
  216. package/dist/renderer-B92Ahkcv.mjs +5 -0
  217. package/dist/renderer-B9z2AK31.mjs +5 -0
  218. package/dist/{renderer-Bm91Xv6l.mjs → renderer-BDZC3o3N.mjs} +4 -4
  219. package/dist/{renderer-Bm91Xv6l.mjs.map → renderer-BDZC3o3N.mjs.map} +1 -1
  220. package/dist/renderer-BIF3Dg3Z.mjs +5 -0
  221. package/dist/{renderer-D7lApyWZ.mjs → renderer-BJ-7WRgO.mjs} +3 -3
  222. package/dist/{renderer-D7lApyWZ.mjs.map → renderer-BJ-7WRgO.mjs.map} +1 -1
  223. package/dist/renderer-BJUVaIAT.mjs +5 -0
  224. package/dist/renderer-BKRDMbI-.mjs +5 -0
  225. package/dist/{renderer-BSW4CGZF.mjs → renderer-BNHcwxw9.mjs} +3 -3
  226. package/dist/{renderer-BSW4CGZF.mjs.map → renderer-BNHcwxw9.mjs.map} +1 -1
  227. package/dist/{renderer-7w9PZmWJ.mjs → renderer-BNJ6Jk7-.mjs} +3 -3
  228. package/dist/{renderer-7w9PZmWJ.mjs.map → renderer-BNJ6Jk7-.mjs.map} +1 -1
  229. package/dist/{renderer-DsPLMzy1.mjs → renderer-BOrMBwQS.mjs} +2 -2
  230. package/dist/{renderer-DsPLMzy1.mjs.map → renderer-BOrMBwQS.mjs.map} +1 -1
  231. package/dist/{renderer-Br_aJ_b7.mjs → renderer-BQetXCcZ.mjs} +3 -3
  232. package/dist/{renderer-Br_aJ_b7.mjs.map → renderer-BQetXCcZ.mjs.map} +1 -1
  233. package/dist/{renderer-CtulmkqT.mjs → renderer-BSELd5vU.mjs} +3 -3
  234. package/dist/{renderer-CtulmkqT.mjs.map → renderer-BSELd5vU.mjs.map} +1 -1
  235. package/dist/renderer-BSwhyVWa.mjs +5 -0
  236. package/dist/{renderer-Ch1qZ2PT.mjs → renderer-BURhYcpA.mjs} +3 -3
  237. package/dist/{renderer-Ch1qZ2PT.mjs.map → renderer-BURhYcpA.mjs.map} +1 -1
  238. package/dist/renderer-BUqSZn2X.mjs +5 -0
  239. package/dist/{renderer-tcypOFaB.d.mts → renderer-BVKOQarx.d.mts} +4 -22
  240. package/dist/renderer-BVKOQarx.d.mts.map +1 -0
  241. package/dist/{renderer-BG_cnGbF.mjs → renderer-BaIJIfJ6.mjs} +4 -4
  242. package/dist/{renderer-BG_cnGbF.mjs.map → renderer-BaIJIfJ6.mjs.map} +1 -1
  243. package/dist/renderer-BbmvjqK9.mjs +3 -0
  244. package/dist/{renderer-CybBR8AL.mjs → renderer-Bbxh4N8Y.mjs} +73 -73
  245. package/dist/{renderer-CybBR8AL.mjs.map → renderer-Bbxh4N8Y.mjs.map} +1 -1
  246. package/dist/{renderer-B84T5I98.mjs → renderer-Bf4-N7k7.mjs} +4 -4
  247. package/dist/{renderer-B84T5I98.mjs.map → renderer-Bf4-N7k7.mjs.map} +1 -1
  248. package/dist/{renderer-7c0ecb-L.mjs → renderer-BhsrlGKp.mjs} +21 -74
  249. package/dist/renderer-BhsrlGKp.mjs.map +1 -0
  250. package/dist/{renderer-BhNZn2DU.mjs → renderer-Bo7shNdU.mjs} +4 -4
  251. package/dist/{renderer-BhNZn2DU.mjs.map → renderer-Bo7shNdU.mjs.map} +1 -1
  252. package/dist/renderer-Bpe4k_x6.mjs +5 -0
  253. package/dist/{renderer-Dswrn-yi.mjs → renderer-BwrfKKqw.mjs} +3 -3
  254. package/dist/{renderer-Dswrn-yi.mjs.map → renderer-BwrfKKqw.mjs.map} +1 -1
  255. package/dist/{renderer-DCMoBppL.mjs → renderer-Bx14Wnxl.mjs} +4 -58
  256. package/dist/renderer-Bx14Wnxl.mjs.map +1 -0
  257. package/dist/{renderer-DxkvDAA6.mjs → renderer-Bxjb0HYU.mjs} +3 -3
  258. package/dist/{renderer-DxkvDAA6.mjs.map → renderer-Bxjb0HYU.mjs.map} +1 -1
  259. package/dist/{renderer-D7DlNOVi.mjs → renderer-ByjaseAo.mjs} +4 -4
  260. package/dist/{renderer-D7DlNOVi.mjs.map → renderer-ByjaseAo.mjs.map} +1 -1
  261. package/dist/renderer-C1NjG0CJ.mjs +5 -0
  262. package/dist/renderer-C7Puyst9.mjs +5 -0
  263. package/dist/{renderer-DrExCXnp.mjs → renderer-C9BSXyrq.mjs} +3 -3
  264. package/dist/{renderer-DrExCXnp.mjs.map → renderer-C9BSXyrq.mjs.map} +1 -1
  265. package/dist/{renderer-Bb_HHUQ0.mjs → renderer-CAWnCsQc.mjs} +4 -4
  266. package/dist/{renderer-Bb_HHUQ0.mjs.map → renderer-CAWnCsQc.mjs.map} +1 -1
  267. package/dist/renderer-CGA_7320.mjs +5 -0
  268. package/dist/{renderer-CO1PwItH.mjs → renderer-CLAvn9c6.mjs} +3 -3
  269. package/dist/{renderer-CO1PwItH.mjs.map → renderer-CLAvn9c6.mjs.map} +1 -1
  270. package/dist/renderer-CLnFkXO7.mjs +5 -0
  271. package/dist/renderer-CMQIT1Kh.mjs +5 -0
  272. package/dist/{renderer-CTSvHf6g.mjs → renderer-COcKhouz.mjs} +4 -4
  273. package/dist/{renderer-CTSvHf6g.mjs.map → renderer-COcKhouz.mjs.map} +1 -1
  274. package/dist/renderer-CQ1rwjIh.mjs +5 -0
  275. package/dist/{renderer-H4CZt3Z5.mjs → renderer-CR0mDPYY.mjs} +2 -2
  276. package/dist/renderer-CT8h0boY.mjs +5 -0
  277. package/dist/{renderer-D_rEtJAH.mjs → renderer-CU8v-LxD.mjs} +4 -4
  278. package/dist/{renderer-D_rEtJAH.mjs.map → renderer-CU8v-LxD.mjs.map} +1 -1
  279. package/dist/renderer-Cb0lszt3.mjs +5 -0
  280. package/dist/renderer-Ci7oLye9.mjs +5 -0
  281. package/dist/renderer-CjqXB3CZ.mjs +5 -0
  282. package/dist/{renderer-BeJoW-nG.mjs → renderer-Co6UFbZB.mjs} +4 -4
  283. package/dist/{renderer-BeJoW-nG.mjs.map → renderer-Co6UFbZB.mjs.map} +1 -1
  284. package/dist/renderer-CqTV04zQ.mjs +5 -0
  285. package/dist/{renderer-DKptrHeL.mjs → renderer-CrR8Mpxq.mjs} +4 -4
  286. package/dist/{renderer-DKptrHeL.mjs.map → renderer-CrR8Mpxq.mjs.map} +1 -1
  287. package/dist/renderer-CtWeRtHK.mjs +5 -0
  288. package/dist/{renderer-CDfCaqV4.mjs → renderer-CxGx1Lhi.mjs} +3 -3
  289. package/dist/{renderer-CDfCaqV4.mjs.map → renderer-CxGx1Lhi.mjs.map} +1 -1
  290. package/dist/{renderer-DlbSqOJR.mjs → renderer-Cz-n883J.mjs} +4 -4
  291. package/dist/{renderer-DlbSqOJR.mjs.map → renderer-Cz-n883J.mjs.map} +1 -1
  292. package/dist/renderer-CzolnwCo.mjs +5 -0
  293. package/dist/{renderer-DtCmG-tT.mjs → renderer-D-QVGphn.mjs} +4 -4
  294. package/dist/{renderer-DtCmG-tT.mjs.map → renderer-D-QVGphn.mjs.map} +1 -1
  295. package/dist/{renderer-oiDoNzhv.mjs → renderer-D06HxSXO.mjs} +2 -2
  296. package/dist/{renderer-B8i4d1Rc.mjs → renderer-D0aAZHC7.mjs} +3 -3
  297. package/dist/{renderer-B8i4d1Rc.mjs.map → renderer-D0aAZHC7.mjs.map} +1 -1
  298. package/dist/{renderer-JASAZUyY.mjs → renderer-D4f8f66C.mjs} +4 -4
  299. package/dist/{renderer-JASAZUyY.mjs.map → renderer-D4f8f66C.mjs.map} +1 -1
  300. package/dist/renderer-D6qhcx_C.mjs +5 -0
  301. package/dist/{renderer-BdRwbLLV.mjs → renderer-DAn9xiQT.mjs} +4 -4
  302. package/dist/{renderer-BdRwbLLV.mjs.map → renderer-DAn9xiQT.mjs.map} +1 -1
  303. package/dist/renderer-DDfEf0jt.mjs +5 -0
  304. package/dist/renderer-DDpa8ztp.mjs +5 -0
  305. package/dist/{renderer-DjiebKHO.mjs → renderer-DE9Jik9K.mjs} +3 -3
  306. package/dist/{renderer-DjiebKHO.mjs.map → renderer-DE9Jik9K.mjs.map} +1 -1
  307. package/dist/{renderer-kFx1_MmK.mjs → renderer-DFJWPqOJ.mjs} +3 -3
  308. package/dist/{renderer-kFx1_MmK.mjs.map → renderer-DFJWPqOJ.mjs.map} +1 -1
  309. package/dist/{renderer-R2kLaNuR.mjs → renderer-DLPhfwbR.mjs} +3 -3
  310. package/dist/{renderer-R2kLaNuR.mjs.map → renderer-DLPhfwbR.mjs.map} +1 -1
  311. package/dist/{renderer-CLRrcT_3.mjs → renderer-DOkbn1ot.mjs} +4 -4
  312. package/dist/{renderer-CLRrcT_3.mjs.map → renderer-DOkbn1ot.mjs.map} +1 -1
  313. package/dist/{renderer-1KgHl_ls.mjs → renderer-DaXQgGg3.mjs} +4 -4
  314. package/dist/{renderer-1KgHl_ls.mjs.map → renderer-DaXQgGg3.mjs.map} +1 -1
  315. package/dist/renderer-DbQBqzmx.mjs +5 -0
  316. package/dist/{renderer-BOg8i8eF.mjs → renderer-DcvjSolU.mjs} +2 -11
  317. package/dist/{renderer-BOg8i8eF.mjs.map → renderer-DcvjSolU.mjs.map} +1 -1
  318. package/dist/renderer-DfUcwMKa.mjs +5 -0
  319. package/dist/renderer-DgIjNANM.mjs +6 -0
  320. package/dist/{renderer-Dd2XrdqA.mjs → renderer-DgPn_SOC.mjs} +3 -3
  321. package/dist/{renderer-Dd2XrdqA.mjs.map → renderer-DgPn_SOC.mjs.map} +1 -1
  322. package/dist/{renderer-BTLZBD63.mjs → renderer-DkqZmfm8.mjs} +4 -4
  323. package/dist/{renderer-BTLZBD63.mjs.map → renderer-DkqZmfm8.mjs.map} +1 -1
  324. package/dist/{renderer-Dak_wVh9.mjs → renderer-Dpl6poqD.mjs} +2 -2
  325. package/dist/{renderer-Dak_wVh9.mjs.map → renderer-Dpl6poqD.mjs.map} +1 -1
  326. package/dist/renderer-Dsh6Tgu0.mjs +3 -0
  327. package/dist/renderer-DuIwR9GT.mjs +5 -0
  328. package/dist/renderer-Dv4u2c14.mjs +5 -0
  329. package/dist/{renderer-DxiF4O6X.mjs → renderer-DwK9jsER.mjs} +4 -4
  330. package/dist/{renderer-DxiF4O6X.mjs.map → renderer-DwK9jsER.mjs.map} +1 -1
  331. package/dist/{renderer-BnN3JH9u.mjs → renderer-HDj9Zb-O.mjs} +6 -19
  332. package/dist/renderer-HDj9Zb-O.mjs.map +1 -0
  333. package/dist/renderer-IE1yu3lZ.mjs +5 -0
  334. package/dist/{renderer-BIToh0CA.mjs → renderer-JHByuUNb.mjs} +3 -3
  335. package/dist/{renderer-BIToh0CA.mjs.map → renderer-JHByuUNb.mjs.map} +1 -1
  336. package/dist/{renderer--f8JHHyT.mjs → renderer-KKk7myX1.mjs} +4 -4
  337. package/dist/{renderer--f8JHHyT.mjs.map → renderer-KKk7myX1.mjs.map} +1 -1
  338. package/dist/renderer-PY_wnEN0.mjs +5 -0
  339. package/dist/{renderer-Bif8bwCq.mjs → renderer-Ros7XQg2.mjs} +3 -3
  340. package/dist/{renderer-Bif8bwCq.mjs.map → renderer-Ros7XQg2.mjs.map} +1 -1
  341. package/dist/{renderer-DkAFIpzB.mjs → renderer-RvI3qRUI.mjs} +4 -4
  342. package/dist/{renderer-DkAFIpzB.mjs.map → renderer-RvI3qRUI.mjs.map} +1 -1
  343. package/dist/{renderer-FFLnACY-.mjs → renderer-Rw87u1Cr.mjs} +4 -4
  344. package/dist/{renderer-FFLnACY-.mjs.map → renderer-Rw87u1Cr.mjs.map} +1 -1
  345. package/dist/{renderer-DMtzPqYo.mjs → renderer-TKZCA0B9.mjs} +69 -208
  346. package/dist/renderer-TKZCA0B9.mjs.map +1 -0
  347. package/dist/{renderer-Bo5GwErU.mjs → renderer-V4dhrf_h.mjs} +4 -4
  348. package/dist/{renderer-Bo5GwErU.mjs.map → renderer-V4dhrf_h.mjs.map} +1 -1
  349. package/dist/{renderer-CWmlfdLb.mjs → renderer-_9gbYS-3.mjs} +4 -4
  350. package/dist/{renderer-CWmlfdLb.mjs.map → renderer-_9gbYS-3.mjs.map} +1 -1
  351. package/dist/{renderer-Dih1rtT6.mjs → renderer-celhuAL7.mjs} +3 -3
  352. package/dist/{renderer-Dih1rtT6.mjs.map → renderer-celhuAL7.mjs.map} +1 -1
  353. package/dist/{renderer-Ck-NLzz0.mjs → renderer-eMCTAa9e.mjs} +3 -3
  354. package/dist/{renderer-Ck-NLzz0.mjs.map → renderer-eMCTAa9e.mjs.map} +1 -1
  355. package/dist/{renderer-D1tDMuD0.mjs → renderer-fs8f1QeE.mjs} +4 -4
  356. package/dist/{renderer-D1tDMuD0.mjs.map → renderer-fs8f1QeE.mjs.map} +1 -1
  357. package/dist/{renderer-DAfCcnCz.mjs → renderer-fwKnV9zs.mjs} +4 -4
  358. package/dist/{renderer-DAfCcnCz.mjs.map → renderer-fwKnV9zs.mjs.map} +1 -1
  359. package/dist/{renderer-DBfx6QX1.mjs → renderer-g_1t2je9.mjs} +2 -2
  360. package/dist/renderer-gv24VyzO.mjs +5 -0
  361. package/dist/{renderer-DAug14gu.mjs → renderer-h62QaJYz.mjs} +3 -3
  362. package/dist/{renderer-DAug14gu.mjs.map → renderer-h62QaJYz.mjs.map} +1 -1
  363. package/dist/{renderer-CKlNHDKI.mjs → renderer-jnAIhWn_.mjs} +4 -4
  364. package/dist/{renderer-CKlNHDKI.mjs.map → renderer-jnAIhWn_.mjs.map} +1 -1
  365. package/dist/{renderer-CwAuWLWm.mjs → renderer-lHNTgiOM.mjs} +3 -3
  366. package/dist/{renderer-CwAuWLWm.mjs.map → renderer-lHNTgiOM.mjs.map} +1 -1
  367. package/dist/renderer-nN6lPZf9.mjs +5 -0
  368. package/dist/{renderer-CanNjQuL.mjs → renderer-o68mVeyk.mjs} +3 -3
  369. package/dist/{renderer-CanNjQuL.mjs.map → renderer-o68mVeyk.mjs.map} +1 -1
  370. package/dist/{renderer-vPxMXiv8.mjs → renderer-pNmI-A9o.mjs} +4 -4
  371. package/dist/{renderer-vPxMXiv8.mjs.map → renderer-pNmI-A9o.mjs.map} +1 -1
  372. package/dist/{renderer-CxabOSkk.mjs → renderer-q7q6k_cD.mjs} +3 -3
  373. package/dist/{renderer-CxabOSkk.mjs.map → renderer-q7q6k_cD.mjs.map} +1 -1
  374. package/dist/{renderer-vpsU_4XW.mjs → renderer-riIFosX6.mjs} +4 -4
  375. package/dist/{renderer-vpsU_4XW.mjs.map → renderer-riIFosX6.mjs.map} +1 -1
  376. package/dist/{renderer-w7mlMSC-.mjs → renderer-sfqZK6L5.mjs} +4 -4
  377. package/dist/{renderer-w7mlMSC-.mjs.map → renderer-sfqZK6L5.mjs.map} +1 -1
  378. package/dist/{renderer-fWW0bsVl.mjs → renderer-ynFRJh7G.mjs} +2 -2
  379. package/dist/{renderers-CP8CFWDs-OgyUiyrr.mjs → renderers-CP8CFWDs-DRoslK4F.mjs} +3 -3
  380. package/dist/{renderers-CP8CFWDs-OgyUiyrr.mjs.map → renderers-CP8CFWDs-DRoslK4F.mjs.map} +1 -1
  381. package/dist/sam/index.d.mts +2 -2
  382. package/dist/sam/index.mjs +1 -1
  383. package/dist/signals/index.d.mts +6 -6
  384. package/dist/signals/index.mjs +5 -5
  385. package/dist/{src-C3f3zXYg.mjs → src-BYp6r-cS.mjs} +28 -248
  386. package/dist/src-BYp6r-cS.mjs.map +1 -0
  387. package/dist/{src-BU6vm9sP-DFJ3phW0.mjs → src-Bnr8DUC--BRDqRF6I.mjs} +9 -74
  388. package/dist/src-Bnr8DUC--BRDqRF6I.mjs.map +1 -0
  389. package/package.json +59 -59
  390. package/dist/audio-1X5qNNmk.d.mts +0 -38
  391. package/dist/audio-1X5qNNmk.d.mts.map +0 -1
  392. package/dist/audio-YpBRdI7r.mjs.map +0 -1
  393. package/dist/dist-C4Vxgm0Q.mjs.map +0 -1
  394. package/dist/gpu-Bw35AMwY.mjs.map +0 -1
  395. package/dist/index-B7WqFBZA.d.mts.map +0 -1
  396. package/dist/index-Dyt4yS-x.d.mts.map +0 -1
  397. package/dist/index-WwuuX8ZJ.d.mts.map +0 -1
  398. package/dist/preview-engine/chunk-44V4V5LD.mjs +0 -1
  399. package/dist/preview-engine/chunk-4TPXZNVR.mjs +0 -483
  400. package/dist/preview-engine/chunk-4YT5YJIF.mjs +0 -1
  401. package/dist/preview-engine/chunk-77MT33VR.mjs +0 -1
  402. package/dist/preview-engine/chunk-A6OAPDIA.mjs +0 -1
  403. package/dist/preview-engine/chunk-ADLIF544.mjs +0 -39
  404. package/dist/preview-engine/chunk-CSLSWUUT.mjs +0 -1
  405. package/dist/preview-engine/chunk-GTMZOMAN.mjs +0 -1
  406. package/dist/preview-engine/chunk-JAAFSVAG.mjs +0 -1
  407. package/dist/preview-engine/chunk-PH3UUX6A.mjs +0 -138
  408. package/dist/preview-engine/chunk-PIHG6HJO.mjs +0 -1
  409. package/dist/preview-engine/chunk-T6L3DO3H.mjs +0 -1
  410. package/dist/preview-engine/chunk-ZGEKF34E.mjs +0 -1974
  411. package/dist/preview-engine/renderers-33PIDDZC.mjs +0 -1
  412. package/dist/preview-engine/renderers-3AZ3HY53.mjs +0 -1
  413. package/dist/preview-engine/renderers-3FGKW52B.mjs +0 -1
  414. package/dist/preview-engine/renderers-4A2FBS3Y.mjs +0 -1
  415. package/dist/preview-engine/renderers-65DU2F5W.mjs +0 -1
  416. package/dist/preview-engine/renderers-6CTPYQR6.mjs +0 -1
  417. package/dist/preview-engine/renderers-AWODRI3B.mjs +0 -1
  418. package/dist/preview-engine/renderers-BO6HHGMZ.mjs +0 -1
  419. package/dist/preview-engine/renderers-BSXYDEV7.mjs +0 -1
  420. package/dist/preview-engine/renderers-DU7KPFVV.mjs +0 -1
  421. package/dist/preview-engine/renderers-ECW2CGNU.mjs +0 -1
  422. package/dist/preview-engine/renderers-EEX22FUO.mjs +0 -1
  423. package/dist/preview-engine/renderers-GCQKGJ7W.mjs +0 -1
  424. package/dist/preview-engine/renderers-HZBXLDKG.mjs +0 -1
  425. package/dist/preview-engine/renderers-IOXNQPQK.mjs +0 -1
  426. package/dist/preview-engine/renderers-IR44E4ZZ.mjs +0 -1
  427. package/dist/preview-engine/renderers-JZZ3ODOZ.mjs +0 -1
  428. package/dist/preview-engine/renderers-K37YL3Z7.mjs +0 -1
  429. package/dist/preview-engine/renderers-KUJQV3K6.mjs +0 -1
  430. package/dist/preview-engine/renderers-KXVKLSSX.mjs +0 -1
  431. package/dist/preview-engine/renderers-N4RVFX3G.mjs +0 -1
  432. package/dist/preview-engine/renderers-NZWWEAYA.mjs +0 -1
  433. package/dist/preview-engine/renderers-P4JJEDZB.mjs +0 -1
  434. package/dist/preview-engine/renderers-Q4572F5C.mjs +0 -1
  435. package/dist/preview-engine/renderers-QAX2QWWQ.mjs +0 -1
  436. package/dist/preview-engine/renderers-SRFIEVWL.mjs +0 -1
  437. package/dist/preview-engine/renderers-SYC6WFTM.mjs +0 -1
  438. package/dist/preview-engine/renderers-UH4WN3QN.mjs +0 -1
  439. package/dist/preview-engine/renderers-V4FFCAS7.mjs +0 -1
  440. package/dist/preview-engine/renderers-VGDEOZUU.mjs +0 -1
  441. package/dist/preview-engine/renderers-VJJKBX5K.mjs +0 -1
  442. package/dist/preview-engine/renderers-VJOKVDYW.mjs +0 -1
  443. package/dist/preview-engine/renderers-VUUWZUOH.mjs +0 -1
  444. package/dist/preview-engine/renderers-WG756VF3.mjs +0 -228
  445. package/dist/preview-engine/renderers-WOP5GOZP.mjs +0 -1
  446. package/dist/preview-engine/renderers-Y4MGN2FR.mjs +0 -1
  447. package/dist/preview-engine/renderers-YAMYH7IK.mjs +0 -1
  448. package/dist/preview-engine/renderers-ZNLSAWW3.mjs +0 -1
  449. package/dist/program-BUjUTdxq.mjs.map +0 -1
  450. package/dist/renderer-6sNr6ZRJ.mjs +0 -6
  451. package/dist/renderer-7c0ecb-L.mjs.map +0 -1
  452. package/dist/renderer-BDHGxD6p.mjs +0 -5
  453. package/dist/renderer-BT9dvpk2.mjs +0 -5
  454. package/dist/renderer-Bd-NuU3M.mjs +0 -3
  455. package/dist/renderer-BfaRh0qy.mjs +0 -5
  456. package/dist/renderer-BlwXKV7Y.mjs +0 -5
  457. package/dist/renderer-BnN3JH9u.mjs.map +0 -1
  458. package/dist/renderer-C40yZK3x.mjs +0 -5
  459. package/dist/renderer-C5MjQ7L8.mjs +0 -5
  460. package/dist/renderer-C8LjKYnS.mjs +0 -5
  461. package/dist/renderer-C9q9H_qa.mjs +0 -5
  462. package/dist/renderer-CC4fhNup.mjs +0 -3
  463. package/dist/renderer-CF9ta9Rm.mjs +0 -5
  464. package/dist/renderer-CO205Gr9.mjs +0 -5
  465. package/dist/renderer-CSm8UXLP.mjs +0 -5
  466. package/dist/renderer-CSy8HRtF.mjs +0 -5
  467. package/dist/renderer-CdNRWDsA.mjs +0 -5
  468. package/dist/renderer-CkAjiGRB.mjs +0 -5
  469. package/dist/renderer-CmryuPBm.mjs +0 -5
  470. package/dist/renderer-CnEwne4L.mjs +0 -5
  471. package/dist/renderer-D4QDoqOG.mjs +0 -5
  472. package/dist/renderer-D7cS2a8z.mjs +0 -5
  473. package/dist/renderer-D85CNC-b.mjs +0 -5
  474. package/dist/renderer-DC9IoJNz.mjs +0 -5
  475. package/dist/renderer-DCMoBppL.mjs.map +0 -1
  476. package/dist/renderer-DIDh0gFm.mjs +0 -5
  477. package/dist/renderer-DLmJ9GWE.mjs +0 -5
  478. package/dist/renderer-DM7PUWP9.mjs +0 -5
  479. package/dist/renderer-DMtzPqYo.mjs.map +0 -1
  480. package/dist/renderer-DPWFDxIO.mjs +0 -5
  481. package/dist/renderer-DUCByhAk.mjs +0 -5
  482. package/dist/renderer-DVOtnCKH.mjs +0 -5
  483. package/dist/renderer-DVrN2bW8.mjs +0 -5
  484. package/dist/renderer-DdOVwfG4.mjs +0 -5
  485. package/dist/renderer-DtCe9ouu.mjs +0 -5
  486. package/dist/renderer-Mg0kr9Fm.mjs +0 -5
  487. package/dist/renderer-T35PsSw5.mjs +0 -5
  488. package/dist/renderer-iSZ5NT-J.mjs +0 -5
  489. package/dist/renderer-nEmMjQ1a.mjs +0 -5
  490. package/dist/renderer-pG1nyfjE.mjs +0 -5
  491. package/dist/renderer-tcypOFaB.d.mts.map +0 -1
  492. package/dist/renderer-vbb9e3E3.mjs +0 -5
  493. package/dist/src-BU6vm9sP-DFJ3phW0.mjs.map +0 -1
  494. package/dist/src-C3f3zXYg.mjs.map +0 -1
@@ -10,7 +10,7 @@ import { DotLottie } from "@lottiefiles/dotlottie-web";
10
10
  import earcut from "earcut";
11
11
  import { Path2D } from "skia-canvas";
12
12
 
13
- //#region ../webgpu-renderers/dist/text-animations-CaYMwhsz.mjs
13
+ //#region ../webgpu-renderers/dist/text-animations-COSsiLBc.mjs
14
14
  /**
15
15
  * 1. Biquad IIR Filter Bank Compute Shader
16
16
  * Applies resonant bandpass/lowpass/highpass filtering on PCM audio buffer.
@@ -293,6 +293,12 @@ fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
293
293
  }
294
294
  }
295
295
  `;
296
+ /** Averages every channel into one mono buffer for storage buffer upload. */
297
+ function downmixToMono(channels) {
298
+ const mono = new Float32Array(channels[0]?.length ?? 0);
299
+ for (const ch of channels) for (let i = 0; i < mono.length; i++) mono[i] += ch[i] / channels.length;
300
+ return mono;
301
+ }
296
302
  function calculateBiquadBandpassCoeffs(sampleRate, centerFreq, Q) {
297
303
  const w0 = 2 * Math.PI * centerFreq / sampleRate;
298
304
  const alpha = Math.sin(w0) / (2 * Q);
@@ -363,18 +369,13 @@ var AudioSignalComputePipeline = class AudioSignalComputePipeline$1 {
363
369
  * Processes raw PCM audio channels on the GPU and outputs extracted feature buffers and textures.
364
370
  */
365
371
  static async extractFeatures(device, audioChannels, sampleRate, fps, config$1 = {}, targetWidth = 512) {
366
- const numChannels = audioChannels.length;
367
- if (numChannels === 0 || audioChannels[0].length === 0) throw new Error("Empty audio buffer supplied to AudioSignalComputePipeline.");
372
+ if (audioChannels.length === 0 || audioChannels[0].length === 0) throw new Error("Empty audio buffer supplied to AudioSignalComputePipeline.");
368
373
  const numAudioSamples = audioChannels[0].length;
369
374
  const durationSec = numAudioSamples / sampleRate;
370
375
  const numFrames = Math.max(1, Math.ceil(durationSec * fps));
371
376
  const hopSize = Math.max(1, Math.round(sampleRate / fps));
372
377
  const windowSize = Math.max(32, Math.round(hopSize * 2));
373
- const monoPcm = new Float32Array(numAudioSamples);
374
- for (let c = 0; c < numChannels; c++) {
375
- const ch = audioChannels[c];
376
- for (let i = 0; i < numAudioSamples; i++) monoPcm[i] += ch[i] / numChannels;
377
- }
378
+ const monoPcm = downmixToMono(audioChannels);
378
379
  const rawAudioBuffer = device.createBuffer({
379
380
  size: numAudioSamples * 4,
380
381
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
@@ -16642,10 +16643,6 @@ async function acquireDevice(opts) {
16642
16643
  if (adapter.limits && Number.isInteger(adapter.limits.maxTextureDimension2D)) requiredLimits.maxTextureDimension2D = Math.min(8192, adapter.limits.maxTextureDimension2D);
16643
16644
  if (adapter.limits && Number.isInteger(adapter.limits.maxStorageBuffersPerShaderStage)) requiredLimits.maxStorageBuffersPerShaderStage = Math.min(16, adapter.limits.maxStorageBuffersPerShaderStage);
16644
16645
  if (adapter.limits && Number.isInteger(adapter.limits.maxStorageBuffersPerPipelineLayout)) requiredLimits.maxStorageBuffersPerPipelineLayout = Math.min(16, adapter.limits.maxStorageBuffersPerPipelineLayout);
16645
- for (const limit of ["maxStorageBufferBindingSize", "maxBufferSize"]) {
16646
- const max = adapter.limits?.[limit];
16647
- if (Number.isFinite(max)) requiredLimits[limit] = max;
16648
- }
16649
16646
  return adapter.requestDevice({
16650
16647
  requiredFeatures,
16651
16648
  requiredLimits
@@ -26447,9 +26444,9 @@ async function drawSignalNode(ctx, encoder, pass, props) {
26447
26444
  const elapsedTimeSec = elapsedMs / 1e3;
26448
26445
  await signalRegistry.ensureAudioSourcesExtracted(ctx.device, config$1, fps, props.renderId);
26449
26446
  const signalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, nodeId, elapsedTimeSec, durationSec, config$1, width, height, props.renderId, frame, fps);
26450
- const pipelines = getDevicePipelines(ctx.device);
26447
+ const pipelines$1 = getDevicePipelines(ctx.device);
26451
26448
  const cacheKey = `preview_${ctx.renderer.format}`;
26452
- let pipeline = pipelines.get(cacheKey);
26449
+ let pipeline = pipelines$1.get(cacheKey);
26453
26450
  if (!pipeline) {
26454
26451
  const shaderModule = ctx.device.createShaderModule({
26455
26452
  label: `signal_preview_static.wgsl`,
@@ -26469,7 +26466,7 @@ async function drawSignalNode(ctx, encoder, pass, props) {
26469
26466
  },
26470
26467
  primitive: { topology: "triangle-strip" }
26471
26468
  });
26472
- pipelines.set(cacheKey, pipeline);
26469
+ pipelines$1.set(cacheKey, pipeline);
26473
26470
  }
26474
26471
  let previewModeInt = 0;
26475
26472
  if (!isMathNode && !isGateNode) {
@@ -26514,50 +26511,6 @@ async function drawSignalNode(ctx, encoder, pass, props) {
26514
26511
  pass.setBindGroup(1, bindGroup1);
26515
26512
  pass.draw(4);
26516
26513
  }
26517
- /**
26518
- * Target pixels per local unit along the axis `m` stretches most: what a
26519
- * raster drawn under `m` needs per unit to stay sharp, and what one target
26520
- * pixel is in local units (its inverse).
26521
- */
26522
- function transformScale(m) {
26523
- return Math.max(Math.hypot(m.a, m.b), Math.hypot(m.c, m.d));
26524
- }
26525
- var TransformStack = class {
26526
- stack = [new DOMMatrix()];
26527
- push(matrix) {
26528
- const next = this.stack[this.stack.length - 1].multiply(matrix);
26529
- this.stack.push(next);
26530
- }
26531
- pop() {
26532
- if (this.stack.length > 1) this.stack.pop();
26533
- }
26534
- getCurrent() {
26535
- return this.stack[this.stack.length - 1];
26536
- }
26537
- packIntoBuffer(bufferData, opacity, surfaceWidth, surfaceHeight, localOverride, customParam) {
26538
- let m = this.getCurrent();
26539
- if (localOverride) m = m.multiply(localOverride);
26540
- bufferData[0] = m.a;
26541
- bufferData[1] = m.b;
26542
- bufferData[2] = 0;
26543
- bufferData[3] = 0;
26544
- bufferData[4] = m.c;
26545
- bufferData[5] = m.d;
26546
- bufferData[6] = 0;
26547
- bufferData[7] = 0;
26548
- bufferData[8] = m.e;
26549
- bufferData[9] = m.f;
26550
- bufferData[10] = 1;
26551
- bufferData[11] = 0;
26552
- bufferData[12] = opacity;
26553
- bufferData[13] = surfaceWidth;
26554
- bufferData[14] = surfaceHeight;
26555
- bufferData[15] = customParam ?? 0;
26556
- }
26557
- destroy() {
26558
- this.stack = [new DOMMatrix()];
26559
- }
26560
- };
26561
26514
  var SvgLoader = class {
26562
26515
  cache = /* @__PURE__ */ new Map();
26563
26516
  async load(src, width, height, isHeadless) {
@@ -26630,10 +26583,8 @@ var SvgLoader = class {
26630
26583
  };
26631
26584
  const svgLoader = new SvgLoader();
26632
26585
  async function drawSvgNode(ctx, pass, props) {
26633
- const m = ctx.renderer.getCurrentTransform();
26634
- const k = transformScale(props.matrix ? m.multiply(props.matrix) : m);
26635
- const resolvedWidth = Math.max(1, Math.ceil(props.dstRect.width * k));
26636
- const resolvedHeight = Math.max(1, Math.ceil(props.dstRect.height * k));
26586
+ const resolvedWidth = Math.max(1, Math.ceil(props.dstRect.width));
26587
+ const resolvedHeight = Math.max(1, Math.ceil(props.dstRect.height));
26637
26588
  const cacheKey = `${props.src}-${resolvedWidth}-${resolvedHeight}`;
26638
26589
  let tex = textureCache.acquire(cacheKey);
26639
26590
  if (!tex) try {
@@ -27438,8 +27389,6 @@ fn sampleSlugCoverage(sampleUV: vec2<f32>, g: SlugGlyph, pixelsPerEm: vec2<f32>)
27438
27389
  // pixel footprint in glyph uv, |d/dx| + |d/dy| (fwidth): the caller takes it in
27439
27390
  // uniform control flow. On a turned or foreshortened glyph it is wider than one
27440
27391
  // pixel along an axis, so that axis gets the soft ramp a box filter gives.
27441
- // A blur of blurAmount px averages coverage over a grid reaching 0.3 of it
27442
- // each way, blurTaps taps per side past the centre.
27443
27392
  fn shadeSlugGlyph(
27444
27393
  uv: vec2<f32>,
27445
27394
  fw: vec2<f32>,
@@ -27448,7 +27397,6 @@ fn shadeSlugGlyph(
27448
27397
  color: vec4<f32>,
27449
27398
  opacity: f32,
27450
27399
  blurAmount: f32,
27451
- blurTaps: f32,
27452
27400
  chromaticShift: f32,
27453
27401
  dissolveProgress: f32,
27454
27402
  ) -> vec4<f32> {
@@ -27481,15 +27429,14 @@ fn shadeSlugGlyph(
27481
27429
 
27482
27430
  var slugAlpha = 0.0;
27483
27431
  if (blurAmount > 0.01) {
27484
- let step = fw * blurAmount * 0.3 / blurTaps;
27485
- for (var y_offset = -blurTaps; y_offset <= blurTaps; y_offset = y_offset + 1.0) {
27486
- for (var x_offset = -blurTaps; x_offset <= blurTaps; x_offset = x_offset + 1.0) {
27432
+ let step = fw * blurAmount * 0.3;
27433
+ for (var y_offset = -1.0; y_offset <= 1.0; y_offset = y_offset + 1.0) {
27434
+ for (var x_offset = -1.0; x_offset <= 1.0; x_offset = x_offset + 1.0) {
27487
27435
  let offset = vec2<f32>(x_offset, y_offset) * step;
27488
27436
  slugAlpha = slugAlpha + sampleSlugCoverage(uv + offset, g, pixelsPerEm);
27489
27437
  }
27490
27438
  }
27491
- let side = 2.0 * blurTaps + 1.0;
27492
- slugAlpha = slugAlpha / (side * side);
27439
+ slugAlpha = slugAlpha / 9.0;
27493
27440
  } else {
27494
27441
  slugAlpha = sampleSlugCoverage(uv, g, pixelsPerEm);
27495
27442
  }
@@ -27525,7 +27472,6 @@ struct VSOut {
27525
27472
  @location(7) @interpolate(flat) chromaticShift : f32,
27526
27473
  @location(8) @interpolate(flat) dissolveProgress : f32,
27527
27474
  @location(9) @interpolate(flat) vfxParam : f32,
27528
- @location(10) @interpolate(flat) blurTaps : f32,
27529
27475
  };
27530
27476
 
27531
27477
  var<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
@@ -27559,11 +27505,7 @@ var<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
27559
27505
  let transform2 = mat2x2<f32>(u.transformCol0.xy, u.transformCol1.xy);
27560
27506
  let pixelsPerUnit = sqrt(max(abs(determinant(transform2)), 1e-8));
27561
27507
  let halfSize = max(abs(aScaleBias.xy * scale_mult), vec2<f32>(1e-4));
27562
- // A blurred glyph keeps a unit around it however many pixels a unit
27563
- // spans: its blur spills that far at one pixel per unit.
27564
- let blurred = aExtraParams.x > 0.01;
27565
- let dilation = select(1.0, max(1.0, pixelsPerUnit), blurred) / pixelsPerUnit;
27566
- let grow = vec2<f32>(1.0) + dilation / halfSize;
27508
+ let grow = vec2<f32>(1.0) + (1.0 / pixelsPerUnit) / halfSize;
27567
27509
  let uv = vec2<f32>(
27568
27510
  quad_pos.x * grow.x * 0.5 + 0.5,
27569
27511
  1.0 - (quad_pos.y * grow.y * 0.5 + 0.5),
@@ -27597,11 +27539,7 @@ var<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
27597
27539
  out.bandMax = vec2<u32>(aBandMaxTexCoords.xy);
27598
27540
  out.bandsTexCoords = vec2<u32>(aBandMaxTexCoords.zw);
27599
27541
  out.color = aColor;
27600
- // Blur is in local units, like every other length here; the fragment
27601
- // stage spreads its taps in pixels, as far apart as at one pixel per
27602
- // unit (more of them as a unit spans more pixels, up to 4).
27603
- out.blurAmount = aExtraParams.x * pixelsPerUnit;
27604
- out.blurTaps = clamp(ceil(pixelsPerUnit - 1e-3), 1.0, 4.0);
27542
+ out.blurAmount = aExtraParams.x;
27605
27543
  out.chromaticShift = aExtraParams.y;
27606
27544
  out.dissolveProgress = aExtraParams.z;
27607
27545
  out.vfxParam = aExtraParams.w;
@@ -27620,7 +27558,6 @@ var<private> pos : array<vec2<f32>, 6> = array<vec2<f32>, 6>(
27620
27558
  in.color,
27621
27559
  u.params.x,
27622
27560
  in.blurAmount,
27623
- in.blurTaps,
27624
27561
  in.chromaticShift,
27625
27562
  in.dissolveProgress,
27626
27563
  );
@@ -29673,6 +29610,42 @@ var SolidPipeline = class {
29673
29610
  this.uniformBindGroupCache.destroy();
29674
29611
  }
29675
29612
  };
29613
+ var TransformStack = class {
29614
+ stack = [new DOMMatrix()];
29615
+ push(matrix) {
29616
+ const next = this.stack[this.stack.length - 1].multiply(matrix);
29617
+ this.stack.push(next);
29618
+ }
29619
+ pop() {
29620
+ if (this.stack.length > 1) this.stack.pop();
29621
+ }
29622
+ getCurrent() {
29623
+ return this.stack[this.stack.length - 1];
29624
+ }
29625
+ packIntoBuffer(bufferData, opacity, surfaceWidth, surfaceHeight, localOverride, customParam) {
29626
+ let m = this.getCurrent();
29627
+ if (localOverride) m = m.multiply(localOverride);
29628
+ bufferData[0] = m.a;
29629
+ bufferData[1] = m.b;
29630
+ bufferData[2] = 0;
29631
+ bufferData[3] = 0;
29632
+ bufferData[4] = m.c;
29633
+ bufferData[5] = m.d;
29634
+ bufferData[6] = 0;
29635
+ bufferData[7] = 0;
29636
+ bufferData[8] = m.e;
29637
+ bufferData[9] = m.f;
29638
+ bufferData[10] = 1;
29639
+ bufferData[11] = 0;
29640
+ bufferData[12] = opacity;
29641
+ bufferData[13] = surfaceWidth;
29642
+ bufferData[14] = surfaceHeight;
29643
+ bufferData[15] = customParam ?? 0;
29644
+ }
29645
+ destroy() {
29646
+ this.stack = [new DOMMatrix()];
29647
+ }
29648
+ };
29676
29649
  function premultiplyClearColor(color) {
29677
29650
  if (Array.isArray(color)) {
29678
29651
  const a$1 = color[3] ?? 1;
@@ -29823,14 +29796,10 @@ var Renderer2D = class {
29823
29796
  this.drawShapeFill(pass, tris, fill, bounds, opts);
29824
29797
  if ((!stroke || !stroke.width || stroke.width <= 0) && (fill.type ?? "solid") === "solid" && fill.color) {
29825
29798
  const svgPath = buildShapeSvgPath(config$1);
29826
- if (svgPath) {
29827
- const m = this.transformStack.getCurrent();
29828
- const hairline = 1 / transformScale(opts?.transform ? m.multiply(opts.transform) : m);
29829
- this.drawPath(pass, svgPath, fill.color, hairline, {
29830
- ...opts,
29831
- strokeLineCap: "round"
29832
- });
29833
- }
29799
+ if (svgPath) this.drawPath(pass, svgPath, fill.color, 1, {
29800
+ ...opts,
29801
+ strokeLineCap: "round"
29802
+ });
29834
29803
  }
29835
29804
  }
29836
29805
  }
@@ -32879,9 +32848,6 @@ fn fs_mrt_bloom(in: VertexOutput, @builtin(front_facing) isFront: bool) -> MrtBl
32879
32848
  */
32880
32849
  const quad3dWgsl = `
32881
32850
  ${lighting3dWgsl}
32882
- // Grid cells either side a relief's normals span.
32883
- const RELIEF_NORMAL_CELLS : f32 = 4.0;
32884
-
32885
32851
  struct ModelUniforms {
32886
32852
  modelMatrix : mat4x4<f32>,
32887
32853
  normalMatrix : mat4x4<f32>,
@@ -32892,15 +32858,11 @@ struct ModelUniforms {
32892
32858
  materialParams : vec4<f32>, // x = shininess, y = specularIntensity, z = ambientIntensity, w = materialMode (0=unlit, 1=lit)
32893
32859
  pbr : vec4<f32>, // x = roughness (<0 = default), y = metallic
32894
32860
  emissive : vec4<f32>, // rgb = sRGB emissive color, w = strength
32895
- relief : vec4<f32>, // x = amount (px), y = on, w = grid cells per side
32896
- reliefRect : vec4<f32>, // xy = where the layer's box starts in reliefTex (0..1), zw = its size
32897
- reliefEye : vec4<f32>, // xyz = the eye the surface keeps its look from (the default camera)
32898
32861
  };
32899
32862
 
32900
32863
  @group(0) @binding(0) var<uniform> cam : CameraUniforms;
32901
32864
  @group(1) @binding(0) var<uniform> model : ModelUniforms;
32902
- ${matte3dWgsl(1, 1)}@group(1) @binding(2) var reliefTex : texture_2d<f32>;
32903
- @group(2) @binding(0) var texSampler : sampler;
32865
+ ${matte3dWgsl(1, 1)}@group(2) @binding(0) var texSampler : sampler;
32904
32866
  @group(2) @binding(1) var mainTex : texture_2d<f32>;
32905
32867
  ${lightsBindingsWgsl}
32906
32868
 
@@ -32919,48 +32881,13 @@ struct VertexOutput {
32919
32881
  @location(4) localPos : vec2<f32>,
32920
32882
  };
32921
32883
 
32922
- // Relief: the layer's plane pushed toward the eye by the brightness of a
32923
- // second picture, so a flat quad becomes a surface (see DrawQuad3DOpts.relief).
32924
- fn reliefAt(uv: vec2<f32>) -> f32 {
32925
- let dims = vec2<f32>(textureDimensions(reliefTex));
32926
- let p = (model.reliefRect.xy + clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)) * model.reliefRect.zw) * dims - 0.5;
32927
- let i = floor(p);
32928
- let f = p - i;
32929
- // Texels of the layer's own box only: past its edge the relief was never drawn.
32930
- let lo = max(floor(model.reliefRect.xy * dims), vec2<f32>(0.0));
32931
- let hi = min(ceil((model.reliefRect.xy + model.reliefRect.zw) * dims) - 1.0, dims - 1.0);
32932
- let a = textureLoad(reliefTex, vec2<i32>(clamp(i, lo, hi)), 0).rgb;
32933
- let b = textureLoad(reliefTex, vec2<i32>(clamp(i + vec2<f32>(1.0, 0.0), lo, hi)), 0).rgb;
32934
- let c = textureLoad(reliefTex, vec2<i32>(clamp(i + vec2<f32>(0.0, 1.0), lo, hi)), 0).rgb;
32935
- let d = textureLoad(reliefTex, vec2<i32>(clamp(i + vec2<f32>(1.0, 1.0), lo, hi)), 0).rgb;
32936
- let rgb = mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
32937
- return dot(rgb, vec3<f32>(0.2126, 0.7152, 0.0722));
32938
- }
32939
-
32940
- // The plane's front: the side the default camera sees.
32941
- fn reliefFront() -> vec3<f32> {
32942
- return normalize((model.normalMatrix * vec4<f32>(0.0, 0.0, -1.0, 0.0)).xyz);
32943
- }
32944
-
32945
- // A point of the plane lifted by its relief along the ray to the eye, so from
32946
- // the eye it lands on the same pixel as the flat picture.
32947
- fn reliefPoint(local: vec2<f32>, uv: vec2<f32>) -> vec3<f32> {
32948
- let flat = (model.modelMatrix * vec4<f32>(local, 0.0, 1.0)).xyz;
32949
- let n = reliefFront();
32950
- let h = model.relief.x * reliefAt(uv);
32951
- let toEye = model.reliefEye.xyz - flat;
32952
- let along = dot(toEye, n);
32953
- return select(flat + n * h, flat + toEye * (h / along), along > 1.0);
32954
- }
32955
-
32956
32884
  @vertex
32957
32885
  fn vs_main(in: VertexInput) -> VertexOutput {
32958
32886
  var out: VertexOutput;
32959
32887
 
32960
32888
  let hasDimensions = model.dimensions.x > 0.0 && model.dimensions.y > 0.0;
32961
- let hasRelief = model.relief.y > 0.5;
32962
32889
  var pad = 0.0;
32963
- if (hasDimensions && !hasRelief) {
32890
+ if (hasDimensions) {
32964
32891
  let viewPos = cam.viewMatrix * model.modelMatrix * vec4<f32>(0.0, 0.0, 0.0, 1.0);
32965
32892
  let viewDepth = max(abs(viewPos.z), 0.1);
32966
32893
  let projScale = max(cam.projMatrix[1][1], 0.001);
@@ -32970,28 +32897,12 @@ fn vs_main(in: VertexInput) -> VertexOutput {
32970
32897
  let scalePad = select(vec2<f32>(1.0), 1.0 + vec2<f32>(2.0 * pad) / model.dimensions.xy, hasDimensions);
32971
32898
 
32972
32899
  let paddedPos = vec3<f32>(in.position.xy * scalePad, in.position.z);
32973
- var worldPos4 = model.modelMatrix * vec4<f32>(paddedPos, 1.0);
32900
+ let worldPos4 = model.modelMatrix * vec4<f32>(paddedPos, 1.0);
32901
+ out.worldPos = worldPos4.xyz;
32974
32902
 
32975
32903
  // Normal transformed by 3x3 normal matrix
32976
32904
  let norm4 = model.normalMatrix * vec4<f32>(in.normal, 0.0);
32977
32905
  out.worldNormal = normalize(norm4.xyz);
32978
- if (hasRelief) {
32979
- let p = reliefPoint(in.position.xy, in.uv);
32980
- // Central differences a few cells wide: an 8-bit height map steps every
32981
- // level, and normals from adjacent cells would light those steps as rings.
32982
- let e = RELIEF_NORMAL_CELLS / max(model.relief.w, 1.0);
32983
- let dx = vec2<f32>(e, 0.0);
32984
- let dy = vec2<f32>(0.0, e);
32985
- let tx = reliefPoint(in.position.xy + dx, in.uv + dx) - reliefPoint(in.position.xy - dx, in.uv - dx);
32986
- let ty = reliefPoint(in.position.xy + dy, in.uv + dy) - reliefPoint(in.position.xy - dy, in.uv - dy);
32987
- var nrm = normalize(cross(tx, ty));
32988
- if (dot(nrm, reliefFront()) < 0.0) {
32989
- nrm = -nrm;
32990
- }
32991
- worldPos4 = vec4<f32>(p, 1.0);
32992
- out.worldNormal = nrm;
32993
- }
32994
- out.worldPos = worldPos4.xyz;
32995
32906
 
32996
32907
  out.clipPos = cam.viewProjMatrix * worldPos4;
32997
32908
 
@@ -33227,10 +33138,6 @@ function createLightsLayout(device, label = "Lights3DLayout") {
33227
33138
  ]
33228
33139
  });
33229
33140
  }
33230
- /** Grid cells per side of a relief surface. */
33231
- const RELIEF_GRID = 512;
33232
- /** Floats in the quad's model uniform: transform, colors, params, material, surface, then relief. */
33233
- const MODEL_FLOATS = 52 + SURFACE_PARAMS_FLOATS + 12;
33234
33141
  /** [shininess, specularIntensity, ambientIntensity, materialMode] as the 3D shaders' lighting reads them. */
33235
33142
  function packMaterialParams(data) {
33236
33143
  return [
@@ -33254,12 +33161,10 @@ var Quad3DPipeline = class {
33254
33161
  modelPool;
33255
33162
  vertexBuffer;
33256
33163
  indexBuffer;
33257
- /** The relief grid, built on first use. */
33258
- reliefGrid;
33259
- modelData = new Float32Array(MODEL_FLOATS);
33164
+ modelData = new Float32Array(52 + SURFACE_PARAMS_FLOATS);
33260
33165
  constructor(device, format, depthFormat = "depth24plus", sampleCount = 1) {
33261
33166
  this.device = device;
33262
- this.modelPool = new BufferPool(MODEL_FLOATS * 4, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);
33167
+ this.modelPool = new BufferPool((52 + SURFACE_PARAMS_FLOATS) * 4, GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST);
33263
33168
  const module$1 = device.createShaderModule({
33264
33169
  label: "quad3d.wgsl",
33265
33170
  code: quad3dWgsl
@@ -33274,19 +33179,11 @@ var Quad3DPipeline = class {
33274
33179
  });
33275
33180
  this.modelLayout = device.createBindGroupLayout({
33276
33181
  label: "Quad3DModelLayout",
33277
- entries: [
33278
- {
33279
- binding: 0,
33280
- visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
33281
- buffer: { type: "uniform" }
33282
- },
33283
- matteLayoutEntry(1),
33284
- {
33285
- binding: 2,
33286
- visibility: GPUShaderStage.VERTEX,
33287
- texture: { sampleType: "float" }
33288
- }
33289
- ]
33182
+ entries: [{
33183
+ binding: 0,
33184
+ visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
33185
+ buffer: { type: "uniform" }
33186
+ }, matteLayoutEntry(1)]
33290
33187
  });
33291
33188
  this.textureLayout = device.createBindGroupLayout({
33292
33189
  label: "Quad3DTextureLayout",
@@ -33453,110 +33350,18 @@ var Quad3DPipeline = class {
33453
33350
  this.modelData[47] = data.textureExtent?.[1] ?? 0;
33454
33351
  this.modelData.set(packMaterialParams(data), 48);
33455
33352
  packSurfaceParams(data, this.modelData, 52);
33456
- const relief = data.relief;
33457
- const r = 52 + SURFACE_PARAMS_FLOATS;
33458
- this.modelData.set(relief ? [
33459
- relief.amount,
33460
- 1,
33461
- 0,
33462
- RELIEF_GRID
33463
- ] : [
33464
- 0,
33465
- 0,
33466
- 0,
33467
- 0
33468
- ], r);
33469
- this.modelData.set(relief?.uvRect ?? [
33470
- 0,
33471
- 0,
33472
- 1,
33473
- 1
33474
- ], r + 4);
33475
- this.modelData.set([...relief?.eye ?? [
33476
- 0,
33477
- 0,
33478
- 0
33479
- ], 0], r + 8);
33480
33353
  const modelBuffer = this.modelPool.getBuffer(this.device, this.modelData);
33481
33354
  return this.device.createBindGroup({
33482
33355
  layout: this.modelLayout,
33483
- entries: [
33484
- {
33485
- binding: 0,
33486
- resource: { buffer: modelBuffer }
33487
- },
33488
- {
33489
- binding: 1,
33490
- resource: data.matte?.createView() ?? fullCoverageView(this.device)
33491
- },
33492
- {
33493
- binding: 2,
33494
- resource: data.relief?.texture.createView() ?? fullCoverageView(this.device)
33495
- }
33496
- ]
33356
+ entries: [{
33357
+ binding: 0,
33358
+ resource: { buffer: modelBuffer }
33359
+ }, {
33360
+ binding: 1,
33361
+ resource: data.matte?.createView() ?? fullCoverageView(this.device)
33362
+ }]
33497
33363
  });
33498
33364
  }
33499
- /** Binds the geometry for `data` and draws it: the quad, or the relief grid. */
33500
- drawGeometry(pass, data) {
33501
- if (!data.relief) {
33502
- pass.setVertexBuffer(0, this.vertexBuffer);
33503
- pass.setIndexBuffer(this.indexBuffer, "uint16");
33504
- pass.drawIndexed(6);
33505
- return;
33506
- }
33507
- this.reliefGrid ??= this.createReliefGrid();
33508
- pass.setVertexBuffer(0, this.reliefGrid.vertices);
33509
- pass.setIndexBuffer(this.reliefGrid.indices, "uint32");
33510
- pass.drawIndexed(this.reliefGrid.count);
33511
- }
33512
- /** A RELIEF_GRID² grid over the unit quad, laid out like the quad's vertices. */
33513
- createReliefGrid() {
33514
- const side = RELIEF_GRID + 1;
33515
- const vertices = new Float32Array(side * side * 8);
33516
- for (let j = 0; j < side; j++) for (let i = 0; i < side; i++) {
33517
- const u = i / RELIEF_GRID;
33518
- const v = j / RELIEF_GRID;
33519
- vertices.set([
33520
- u - .5,
33521
- v - .5,
33522
- 0,
33523
- u,
33524
- v,
33525
- 0,
33526
- 0,
33527
- -1
33528
- ], (j * side + i) * 8);
33529
- }
33530
- const indices = new Uint32Array(RELIEF_GRID * RELIEF_GRID * 6);
33531
- let k = 0;
33532
- for (let j = 0; j < RELIEF_GRID; j++) for (let i = 0; i < RELIEF_GRID; i++) {
33533
- const a = j * side + i;
33534
- indices.set([
33535
- a,
33536
- a + 1,
33537
- a + side + 1,
33538
- a,
33539
- a + side + 1,
33540
- a + side
33541
- ], k);
33542
- k += 6;
33543
- }
33544
- const upload = (data, usage) => {
33545
- const buffer = this.device.createBuffer({
33546
- size: data.byteLength,
33547
- usage: usage | GPUBufferUsage.COPY_DST,
33548
- mappedAtCreation: true
33549
- });
33550
- new data.constructor(buffer.getMappedRange()).set(data);
33551
- buffer.unmap();
33552
- return buffer;
33553
- };
33554
- return {
33555
- vertices: upload(vertices, GPUBufferUsage.VERTEX),
33556
- indices: upload(indices, GPUBufferUsage.INDEX),
33557
- count: indices.length
33558
- };
33559
- }
33560
33365
  textureBindGroup(texture, sampler) {
33561
33366
  return this.device.createBindGroup({
33562
33367
  layout: this.textureLayout,
@@ -33577,7 +33382,9 @@ var Quad3DPipeline = class {
33577
33382
  pass.setBindGroup(1, modelBindGroup);
33578
33383
  pass.setBindGroup(2, textureBindGroup);
33579
33384
  pass.setBindGroup(3, lightsBindGroup);
33580
- this.drawGeometry(pass, data);
33385
+ pass.setVertexBuffer(0, this.vertexBuffer);
33386
+ pass.setIndexBuffer(this.indexBuffer, "uint16");
33387
+ pass.drawIndexed(6);
33581
33388
  }
33582
33389
  /** Draws the quad into a shadow map (`lightCameraBindGroup` holds the light's view-projection). */
33583
33390
  drawShadow(pass, lightCameraBindGroup, texture, sampler, data) {
@@ -33585,14 +33392,14 @@ var Quad3DPipeline = class {
33585
33392
  pass.setBindGroup(0, lightCameraBindGroup);
33586
33393
  pass.setBindGroup(1, this.packModel(data));
33587
33394
  pass.setBindGroup(2, this.textureBindGroup(texture, sampler));
33588
- this.drawGeometry(pass, data);
33395
+ pass.setVertexBuffer(0, this.vertexBuffer);
33396
+ pass.setIndexBuffer(this.indexBuffer, "uint16");
33397
+ pass.drawIndexed(6);
33589
33398
  }
33590
33399
  destroy() {
33591
33400
  this.modelPool.destroy();
33592
33401
  this.vertexBuffer.destroy();
33593
33402
  this.indexBuffer.destroy();
33594
- this.reliefGrid?.vertices.destroy();
33595
- this.reliefGrid?.indices.destroy();
33596
33403
  }
33597
33404
  };
33598
33405
  var Mesh3DPipeline = class {
@@ -38240,7 +38047,6 @@ fn shadeText(in : VSOut, fw : vec2<f32>) -> TextFragment {
38240
38047
  in.color,
38241
38048
  model.params.x,
38242
38049
  in.fx.x,
38243
- 1.0,
38244
38050
  in.fx.y,
38245
38051
  in.fx.z,
38246
38052
  );
@@ -39828,8 +39634,7 @@ var Renderer3D = class {
39828
39634
  height: c.opts.height,
39829
39635
  textureExtent: c.opts.textureExtent,
39830
39636
  opacity: c.opts.opacity,
39831
- colorTint: c.opts.colorTint,
39832
- relief: c.opts.relief
39637
+ colorTint: c.opts.colorTint
39833
39638
  });
39834
39639
  }
39835
39640
  pass.end();
@@ -40093,8 +39898,7 @@ var Renderer3D = class {
40093
39898
  metallic,
40094
39899
  emissive: opts.emissive,
40095
39900
  emissiveIntensity: opts.emissiveIntensity,
40096
- matte: opts.matte,
40097
- relief: opts.relief
39901
+ matte: opts.matte
40098
39902
  }, useMrt, this.passWritesHdr);
40099
39903
  }
40100
39904
  /** T(pos) * Rz * Ry * Rx * S, or the draw's precomputed model matrix. */
@@ -41147,6 +40951,365 @@ struct VSOut {
41147
40951
  return vec4<f32>(outRgb, outAlpha);
41148
40952
  }
41149
40953
  `;
40954
+ const MAX_PITCH_LAG = 2048;
40955
+ const PITCH_CANDIDATES = 8;
40956
+ const EMPTY_CANDIDATE = 2;
40957
+ /** Cost of switching between voiced and unvoiced from one frame to the next. */
40958
+ const VOICING_SWITCH_COST = .6;
40959
+ /** Extra cost of a dip that echoes a shorter candidate's period. */
40960
+ const SUBHARMONIC_COST = .5;
40961
+ /** How many times shallower the shorter dip may be and still explain a longer one. */
40962
+ const SUBHARMONIC_DEPTH_RATIO = 1.25;
40963
+ /** Relative lag error allowed when matching a period multiple. */
40964
+ const PERIOD_MULTIPLE_TOLERANCE = .03;
40965
+ /** Relative lag distance under which two local minima are one noisy dip. */
40966
+ const RIPPLE_MERGE = .03;
40967
+ const WORKGROUP_SIZE = 128;
40968
+ const MAX_GRID_X = 65535;
40969
+ const AUDIO_PITCH_CANDIDATES_SHADER = `
40970
+ struct PitchUniforms {
40971
+ sampleRate : f32,
40972
+ numSamples : u32,
40973
+ numFrames : u32,
40974
+ windowSize : u32,
40975
+ lagMin : u32,
40976
+ lagMax : u32,
40977
+ gridX : u32,
40978
+ fps : f32,
40979
+ };
40980
+
40981
+ const K : u32 = ${PITCH_CANDIDATES}u;
40982
+ const WG : u32 = ${WORKGROUP_SIZE}u;
40983
+ const EMPTY : f32 = ${EMPTY_CANDIDATE}.0f;
40984
+ const MERGE : f32 = ${RIPPLE_MERGE}f;
40985
+
40986
+ @group(0) @binding(0) var<uniform> u : PitchUniforms;
40987
+ @group(0) @binding(1) var<storage, read> pcm : array<f32>;
40988
+ @group(0) @binding(2) var<storage, read_write> candidates : array<vec2f>;
40989
+
40990
+ var<workgroup> yin : array<f32, ${MAX_PITCH_LAG + 1}>;
40991
+
40992
+ fn sampleAt(i : u32) -> f32 {
40993
+ if (i >= u.numSamples) { return 0.0f; }
40994
+ return pcm[i];
40995
+ }
40996
+
40997
+ // Keeps the K deepest dips sorted by value, shallowest last. A dip within
40998
+ // MERGE of an existing candidate's lag is the same broad dip: only the
40999
+ // deeper of the two survives.
41000
+ fn insertCandidate(lags : ptr<function, array<f32, K>>, vals : ptr<function, array<f32, K>>, lag : f32, val : f32) {
41001
+ var slot = K - 1u;
41002
+ for (var k = 0u; k < K; k = k + 1u) {
41003
+ if ((*vals)[k] < EMPTY && abs((*lags)[k] - lag) <= MERGE * lag) {
41004
+ if ((*vals)[k] <= val) { return; }
41005
+ slot = k;
41006
+ break;
41007
+ }
41008
+ }
41009
+ if ((*vals)[slot] <= val) { return; }
41010
+ var i = slot;
41011
+ loop {
41012
+ if (i == 0u || (*vals)[i - 1u] <= val) { break; }
41013
+ (*vals)[i] = (*vals)[i - 1u];
41014
+ (*lags)[i] = (*lags)[i - 1u];
41015
+ i = i - 1u;
41016
+ }
41017
+ (*vals)[i] = val;
41018
+ (*lags)[i] = lag;
41019
+ }
41020
+
41021
+ @compute @workgroup_size(${WORKGROUP_SIZE})
41022
+ fn main(@builtin(workgroup_id) wid : vec3<u32>, @builtin(local_invocation_index) lid : u32) {
41023
+ let frame = wid.x + wid.y * u.gridX;
41024
+ if (frame >= u.numFrames) { return; }
41025
+
41026
+ // Center the analysed span (window + longest lag) on the frame time.
41027
+ let span = u.windowSize + u.lagMax;
41028
+ let center = i32(round(f32(frame) * u.sampleRate / u.fps));
41029
+ let maxStart = max(i32(u.numSamples) - i32(span), 0);
41030
+ let start = u32(clamp(center - i32(span / 2u), 0, maxStart));
41031
+
41032
+ // YIN difference function, one lag per invocation per stride.
41033
+ for (var tau = lid; tau <= u.lagMax; tau = tau + WG) {
41034
+ var acc = 0.0f;
41035
+ for (var j = 0u; j < u.windowSize; j = j + 1u) {
41036
+ let d = sampleAt(start + j) - sampleAt(start + j + tau);
41037
+ acc = acc + d * d;
41038
+ }
41039
+ yin[tau] = acc;
41040
+ }
41041
+ workgroupBarrier();
41042
+ if (lid != 0u) { return; }
41043
+
41044
+ // Cumulative mean normalized difference, in place.
41045
+ var running = 0.0f;
41046
+ yin[0] = 1.0f;
41047
+ for (var tau = 1u; tau <= u.lagMax; tau = tau + 1u) {
41048
+ running = running + yin[tau];
41049
+ yin[tau] = select(1.0f, yin[tau] * f32(tau) / running, running > 0.0f);
41050
+ }
41051
+
41052
+ var lags : array<f32, K>;
41053
+ var vals : array<f32, K>;
41054
+ for (var k = 0u; k < K; k = k + 1u) {
41055
+ lags[k] = 0.0f;
41056
+ vals[k] = EMPTY;
41057
+ }
41058
+ for (var tau = max(u.lagMin, 1u); tau < u.lagMax; tau = tau + 1u) {
41059
+ let prev = yin[tau - 1u];
41060
+ let cur = yin[tau];
41061
+ let next = yin[tau + 1u];
41062
+ if (cur < prev && cur <= next) {
41063
+ // Parabolic interpolation of the dip for sub-sample period.
41064
+ let den = prev - 2.0f * cur + next;
41065
+ let offset = select(0.0f, 0.5f * (prev - next) / den, den > 0.0f);
41066
+ insertCandidate(&lags, &vals, f32(tau) + offset, cur);
41067
+ }
41068
+ }
41069
+
41070
+ let base = frame * K;
41071
+ for (var k = 0u; k < K; k = k + 1u) {
41072
+ candidates[base + k] = vec2f(lags[k], vals[k]);
41073
+ }
41074
+ }
41075
+ `;
41076
+ function resolvePitchConfig(sampleRate, config$1) {
41077
+ const minHz = config$1.minHz ?? 50;
41078
+ const maxHz = config$1.maxHz ?? 1e3;
41079
+ if (!(minHz > 0 && maxHz > minHz)) throw new Error(`Pitch range needs 0 < minHz < maxHz (got ${minHz}..${maxHz}).`);
41080
+ const lagMax = Math.ceil(sampleRate / minHz) + 1;
41081
+ if (lagMax > MAX_PITCH_LAG) throw new Error(`minHz ${minHz} needs a ${lagMax}-sample period at ${sampleRate} Hz; the limit is ${MAX_PITCH_LAG} (minHz >= ${Math.ceil(sampleRate / (MAX_PITCH_LAG - 1))}).`);
41082
+ const lagMin = Math.max(2, Math.floor(sampleRate / maxHz));
41083
+ const windowMs = config$1.windowMs ?? 45;
41084
+ return {
41085
+ lagMin,
41086
+ lagMax,
41087
+ windowSize: Math.max(lagMax, Math.round(windowMs / 1e3 * sampleRate)),
41088
+ voicingThreshold: config$1.voicingThreshold ?? .8,
41089
+ octaveJumpCost: config$1.octaveJumpCost ?? 8
41090
+ };
41091
+ }
41092
+ function transitionCost(prevLag, lag, octaveJumpCost) {
41093
+ const prevVoiced = prevLag > 0;
41094
+ const voiced = lag > 0;
41095
+ if (prevVoiced !== voiced) return VOICING_SWITCH_COST;
41096
+ if (!voiced) return 0;
41097
+ return octaveJumpCost * Math.abs(Math.log2(lag / prevLag));
41098
+ }
41099
+ /**
41100
+ * True when `lag` is an integer multiple (2x, 3x, ...) of a shorter candidate
41101
+ * that is about as deep. YIN's normalized difference dips at every multiple
41102
+ * of the true period, often slightly deeper, so such a dip is an echo.
41103
+ */
41104
+ function isPeriodMultiple(data, base, lag, depth) {
41105
+ for (let j = 0; j < PITCH_CANDIDATES; j++) {
41106
+ const shorter = data[(base + j) * 2];
41107
+ const shorterDepth = data[(base + j) * 2 + 1];
41108
+ if (shorterDepth >= EMPTY_CANDIDATE || shorter <= 0 || shorter >= lag) continue;
41109
+ const m = Math.round(lag / shorter);
41110
+ if (m >= 2 && Math.abs(lag - m * shorter) <= PERIOD_MULTIPLE_TOLERANCE * lag && shorterDepth <= depth * SUBHARMONIC_DEPTH_RATIO) return true;
41111
+ }
41112
+ return false;
41113
+ }
41114
+ /**
41115
+ * Writes each state's lag and emission cost for frame `f`. A candidate costs
41116
+ * its YIN dip depth, plus `SUBHARMONIC_COST` when it is a period multiple;
41117
+ * the unvoiced state (index K, lag 0) costs the voicing threshold.
41118
+ */
41119
+ function observeFrame(data, f, voicingThreshold, lags, costs) {
41120
+ const K = PITCH_CANDIDATES;
41121
+ const base = f * K;
41122
+ const row = f * (K + 1);
41123
+ for (let k = 0; k < K; k++) {
41124
+ const lag = data[(base + k) * 2];
41125
+ const depth = data[(base + k) * 2 + 1];
41126
+ const valid = depth < EMPTY_CANDIDATE && lag > 0;
41127
+ lags[row + k] = valid ? lag : 0;
41128
+ costs[row + k] = !valid ? Number.POSITIVE_INFINITY : depth + (isPeriodMultiple(data, base, lag, depth) ? SUBHARMONIC_COST : 0);
41129
+ }
41130
+ lags[row + K] = 0;
41131
+ costs[row + K] = voicingThreshold;
41132
+ }
41133
+ /** Most likely state per frame given per-state lags and -log emission costs. */
41134
+ function viterbi(lags, costs, numFrames, octaveJumpCost) {
41135
+ const S = PITCH_CANDIDATES + 1;
41136
+ const back = new Uint8Array(numFrames * S);
41137
+ let total = costs.slice(0, S);
41138
+ for (let f = 1; f < numFrames; f++) {
41139
+ const next = new Float64Array(S);
41140
+ for (let s = 0; s < S; s++) {
41141
+ let best = Number.POSITIVE_INFINITY;
41142
+ for (let p = 0; p < S; p++) {
41143
+ const c = total[p] + transitionCost(lags[(f - 1) * S + p], lags[f * S + s], octaveJumpCost);
41144
+ if (c < best) {
41145
+ best = c;
41146
+ back[f * S + s] = p;
41147
+ }
41148
+ }
41149
+ next[s] = best + costs[f * S + s];
41150
+ }
41151
+ total = next;
41152
+ }
41153
+ const path$1 = new Uint8Array(numFrames);
41154
+ let state = total.indexOf(Math.min(...total));
41155
+ for (let f = numFrames - 1; f >= 0; f--) {
41156
+ path$1[f] = state;
41157
+ state = back[f * S + state];
41158
+ }
41159
+ return path$1;
41160
+ }
41161
+ /**
41162
+ * Viterbi decode over each frame's period candidates plus one unvoiced state,
41163
+ * emissions from `observeFrame`, transitions costing `octaveJumpCost` per
41164
+ * octave and a fixed voicing switch.
41165
+ */
41166
+ function decodePitchTrack(candidates, config$1) {
41167
+ const { data, numFrames, sampleRate } = candidates;
41168
+ const K = PITCH_CANDIDATES;
41169
+ const S = K + 1;
41170
+ const lags = new Float64Array(numFrames * S);
41171
+ const costs = new Float64Array(numFrames * S);
41172
+ for (let f = 0; f < numFrames; f++) observeFrame(data, f, config$1.voicingThreshold ?? .8, lags, costs);
41173
+ const path$1 = viterbi(lags, costs, numFrames, config$1.octaveJumpCost ?? 8);
41174
+ const hz = new Float32Array(numFrames);
41175
+ const confidence = new Float32Array(numFrames);
41176
+ const voiced = new Float32Array(numFrames);
41177
+ for (let f = 0; f < numFrames; f++) {
41178
+ const s = path$1[f];
41179
+ if (lags[f * S + s] === 0) continue;
41180
+ hz[f] = sampleRate / lags[f * S + s];
41181
+ confidence[f] = Math.min(1, Math.max(0, 1 - data[(f * K + s) * 2 + 1]));
41182
+ voiced[f] = 1;
41183
+ }
41184
+ fillUnvoiced(hz, voiced);
41185
+ return {
41186
+ hz,
41187
+ confidence,
41188
+ voiced,
41189
+ numFrames
41190
+ };
41191
+ }
41192
+ /** Linearly interpolates `hz` across unvoiced runs; holds the nearest voiced value at the ends. */
41193
+ function fillUnvoiced(hz, voiced) {
41194
+ let prev = -1;
41195
+ for (let f = 0; f <= hz.length; f++) {
41196
+ if (f < hz.length && voiced[f] === 0) continue;
41197
+ const from = prev >= 0 ? hz[prev] : f < hz.length ? hz[f] : 0;
41198
+ const to = f < hz.length ? hz[f] : from;
41199
+ for (let g$1 = prev + 1; g$1 < f; g$1++) {
41200
+ const t = prev >= 0 && f < hz.length ? (g$1 - prev) / (f - prev) : 0;
41201
+ hz[g$1] = from + (to - from) * t;
41202
+ }
41203
+ prev = f;
41204
+ }
41205
+ }
41206
+ const pipelines = /* @__PURE__ */ new WeakMap();
41207
+ function getPipeline(device) {
41208
+ let pipeline = pipelines.get(device);
41209
+ if (!pipeline) {
41210
+ pipeline = device.createComputePipeline({
41211
+ label: "AudioPitchCandidatesPipeline",
41212
+ layout: "auto",
41213
+ compute: {
41214
+ module: device.createShaderModule({
41215
+ label: "AudioPitchCandidatesPipeline.wgsl",
41216
+ code: AUDIO_PITCH_CANDIDATES_SHADER
41217
+ }),
41218
+ entryPoint: "main"
41219
+ }
41220
+ });
41221
+ pipelines.set(device, pipeline);
41222
+ }
41223
+ return pipeline;
41224
+ }
41225
+ /** Runs the YIN candidate pass on the GPU: `PITCH_CANDIDATES` periods per frame. */
41226
+ async function extractPitchCandidates(device, audioChannels, sampleRate, fps, config$1 = {}) {
41227
+ if (audioChannels.length === 0 || audioChannels[0].length === 0) throw new Error("Empty audio buffer supplied to the pitch tracker.");
41228
+ const { lagMin, lagMax, windowSize } = resolvePitchConfig(sampleRate, config$1);
41229
+ const mono = downmixToMono(audioChannels);
41230
+ const numFrames = Math.max(1, Math.ceil(mono.length / sampleRate * fps));
41231
+ const gridX = Math.min(numFrames, MAX_GRID_X);
41232
+ const outBytes = numFrames * PITCH_CANDIDATES * 2 * 4;
41233
+ const uniforms = /* @__PURE__ */ new ArrayBuffer(32);
41234
+ const f32 = new Float32Array(uniforms);
41235
+ const u32 = new Uint32Array(uniforms);
41236
+ f32[0] = sampleRate;
41237
+ u32[1] = mono.length;
41238
+ u32[2] = numFrames;
41239
+ u32[3] = windowSize;
41240
+ u32[4] = lagMin;
41241
+ u32[5] = lagMax;
41242
+ u32[6] = gridX;
41243
+ f32[7] = fps;
41244
+ const uniformBuffer = device.createBuffer({
41245
+ size: uniforms.byteLength,
41246
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
41247
+ label: "audio_pitch_uniforms"
41248
+ });
41249
+ device.queue.writeBuffer(uniformBuffer, 0, uniforms);
41250
+ const pcmBuffer = device.createBuffer({
41251
+ size: mono.byteLength,
41252
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
41253
+ label: "audio_pitch_pcm"
41254
+ });
41255
+ device.queue.writeBuffer(pcmBuffer, 0, mono);
41256
+ const candidateBuffer = device.createBuffer({
41257
+ size: outBytes,
41258
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
41259
+ label: "audio_pitch_candidates"
41260
+ });
41261
+ const readback = device.createBuffer({
41262
+ size: outBytes,
41263
+ usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
41264
+ label: "audio_pitch_candidates_readback"
41265
+ });
41266
+ const pipeline = getPipeline(device);
41267
+ const encoder = device.createCommandEncoder({ label: "audio_pitch_encoder" });
41268
+ const pass = encoder.beginComputePass({ label: "audio_pitch_candidates_pass" });
41269
+ pass.setPipeline(pipeline);
41270
+ pass.setBindGroup(0, device.createBindGroup({
41271
+ layout: pipeline.getBindGroupLayout(0),
41272
+ entries: [
41273
+ {
41274
+ binding: 0,
41275
+ resource: { buffer: uniformBuffer }
41276
+ },
41277
+ {
41278
+ binding: 1,
41279
+ resource: { buffer: pcmBuffer }
41280
+ },
41281
+ {
41282
+ binding: 2,
41283
+ resource: { buffer: candidateBuffer }
41284
+ }
41285
+ ]
41286
+ }));
41287
+ pass.dispatchWorkgroups(gridX, Math.ceil(numFrames / gridX));
41288
+ pass.end();
41289
+ encoder.copyBufferToBuffer(candidateBuffer, 0, readback, 0, outBytes);
41290
+ device.queue.submit([encoder.finish()]);
41291
+ await readback.mapAsync(GPUMapMode.READ);
41292
+ const data = new Float32Array(readback.getMappedRange().slice(0));
41293
+ readback.unmap();
41294
+ for (const b of [
41295
+ readback,
41296
+ candidateBuffer,
41297
+ pcmBuffer,
41298
+ uniformBuffer
41299
+ ]) b.destroy();
41300
+ return {
41301
+ data,
41302
+ numFrames,
41303
+ sampleRate
41304
+ };
41305
+ }
41306
+ /** Tracks the fundamental frequency of the downmixed channels at `fps` frames per second. */
41307
+ async function trackAudioPitch(device, audioChannels, sampleRate, fps, config$1 = {}) {
41308
+ return {
41309
+ ...decodePitchTrack(await extractPitchCandidates(device, audioChannels, sampleRate, fps, config$1), config$1),
41310
+ durationSec: audioChannels[0].length / sampleRate
41311
+ };
41312
+ }
41150
41313
  const GLOBAL_WEBGPU_REGISTRY_KEY = Symbol.for("gatewai.webgpuRegistry");
41151
41314
  const GLOBAL_ANALYSIS_STORE_KEY = Symbol.for("gatewai.videoAnalysisStore");
41152
41315
  var NodeSurfaceProvider = class {
@@ -41214,5 +41377,5 @@ var NodeSurfaceProvider = class {
41214
41377
  if (typeof globalThis !== "undefined") globalThis.__GATEWAI_DELAYS__ = globalThis.__GATEWAI_DELAYS__ || /* @__PURE__ */ new Set();
41215
41378
 
41216
41379
  //#endregion
41217
- export { probeVideoSize as $, TextCursorStyleSchema as $t, emojiGraphemes as A, evaluateVolumetricFormation as An, ChromaticGlitchConfigSchema as At, jointMatrices as B, waveToCubicBeziers as Bn, LongShadowConfigSchema as Bt, drawGifNode as C, evaluateCubicBezierDerivative as Cn, AdvancedTextAnimatorBuilder as Ct, drawSignalNode as D, evaluateSkewMatrix as Dn, AnimatableGlyphPropsSchema as Dt, drawParagraphNode as E, evaluateSelectorCombination as En, AnchorPresetSchema as Et, getPrimitiveGeometry as F, parseSvgPathToCubicBeziers as Fn, ExtendedGlyphPropertiesSchema as Ft, measureMaxCaptionHeight as G, SelectorUnitsSchema as Gt, loadModel3D as H, SelectorBasedOnSchema as Ht, getRegisteredFontSource as I, sampleAudioSpectrumScale as In, GlyphAnchorGroupingSchema as It, parseFBX as J, Spatial3DPropertiesSchema as Jt, mediaDecoderCache as K, SignalRegistry as Kt, getRenderer2D as L, sampleCurveGeometry as Ln, GlyphAnchorPointSchema as Lt, fitSpansToText as M, generatePathSegments as Mn, DynamicStrokePropertiesSchema as Mt, generateExtrudedTextGeometry as N, getScramblePool as Nn, EnhancedTextNodeSchema as Nt, drawSvgNode as O, evaluateSpringProgress as On, AudioSignalComputePipeline as Ot, getHeadlessFontPath as P, getShuffledOrder as Pn, ExpressionSelectorSchema as Pt, poseNodes as Q, TextCursorConfigSchema as Qt, initHeadlessWebGPU as R, samplePathChainGeometry as Rn, KineticMarqueeConfigSchema as Rt, drawCaptionNode as S, evaluateCubicBezier as Sn, AETextAnimatorSchema as St, drawLottieNode as T, evaluateMarqueeOffset as Tn, AnchorGroupingSchema as Tt, loadOBJ as U, SelectorModeSchema as Ut, loadFBX as V, ParticleDissolveConfigSchema as Vt, lutStore as W, SelectorShapeSchema as Wt, parseOBJ as X, TextAnchorConfigSchema as Xt, parseMTL as Y, SpringPhysicsSchema as Yt, parseSvgPathToSegments as Z, TextAnimatorBuilder as Zt, buildShapeSvgPath as _, computeLineLeadingDisplacement as _n, Path3D as _t, GlassPipeline as a, TextSelectorSchema as an, spansText as at, colorMatrixWgsl as b, distanceToCurveParameter as bn, parseColorToRgb as bt, Renderer2D as c, TypewriterAnimatorSchema as cn, transformScale as ct, ScreenSpaceRelightPipeline as d, Vec2Schema as dn, Camera3D as dt, TextPathBuilder as en, registerHeadlessFont as et, ShadowPipeline as f, VolumetricFormationConfigSchema as fn, ENVIRONMENT_PRESETS as ft, WebGPUAudioProcessor as g, computeAnchorPivotOffset as gn, Matrix4Math as gt, SlugPipeline as h, buildWGSLSignalFn as hn, MAX_LIGHTS as ht, EffectPipeline as i, TextScrambleConfigSchema as in, shaderStore as it, ensureDevice as j, generateArcLengthLUT as jn, CubicBezierSegmentSchema as jt, drawVideoNode as k, evaluateTypewriterState as kn, AudioSpectrumTypographySchema as kt, Renderer3D as l, TypingCadenceSchema as ln, GetFontAssetUrl as lt, SlugGeometry as m, buildPathLUT as mn, Light3D as mt, AudioLatentTrackCache as n, TextPathSourceSchema as nn, sampleMorphWeights as nt, MotionBlurPipeline as o, TextSignalSelectorSchema as on, srtLoader as ot, SlugFontCache as p, VolumetricFormationModeSchema as pn, LIGHT_UNIFORM_SIZE_BYTES as pt, parseColor as q, SkewPropertiesSchema as qt, AudioMeshDeformPipeline as r, TextRangeSelectorSchema as rn, setRegisteredFontSource as rt, NodeSurfaceProvider as s, TextWigglySelectorSchema as sn, textureCache as st, AudioLatentEngine as t, TextPathOptionsSchema as tn, resolveTextSpans as tt, SSAOPipeline as u, VariableFontAxesSchema as un, resolveMediaSourceUrl as ut, clearAllVideoCache as v, computeRangeSelectorWeight as vn, Vector3Math as vt, drawImageNode as w, evaluateExpressionSelector as wn, AdvancedTextAnimatorSchema as wt, describeGpu as x, ellipseToCubicBeziers as xn, resolveEnvironment as xt, clearHeadlessFonts as y, deterministicWigglyNoise as yn, linearRgb as yt, inputStore as z, signalRegistry as zn, LineSpacingDynamicsSchema as zt };
41218
- //# sourceMappingURL=dist-C4Vxgm0Q.mjs.map
41380
+ export { probeVideoSize as $, TextCursorStyleSchema as $t, emojiGraphemes as A, evaluateVolumetricFormation as An, ChromaticGlitchConfigSchema as At, jointMatrices as B, waveToCubicBeziers as Bn, LongShadowConfigSchema as Bt, drawGifNode as C, evaluateCubicBezierDerivative as Cn, AdvancedTextAnimatorBuilder as Ct, drawSignalNode as D, evaluateSkewMatrix as Dn, AnimatableGlyphPropsSchema as Dt, drawParagraphNode as E, evaluateSelectorCombination as En, AnchorPresetSchema as Et, getPrimitiveGeometry as F, parseSvgPathToCubicBeziers as Fn, ExtendedGlyphPropertiesSchema as Ft, measureMaxCaptionHeight as G, SelectorUnitsSchema as Gt, loadModel3D as H, SelectorBasedOnSchema as Ht, getRegisteredFontSource as I, sampleAudioSpectrumScale as In, GlyphAnchorGroupingSchema as It, parseFBX as J, Spatial3DPropertiesSchema as Jt, mediaDecoderCache as K, SignalRegistry as Kt, getRenderer2D as L, sampleCurveGeometry as Ln, GlyphAnchorPointSchema as Lt, fitSpansToText as M, generatePathSegments as Mn, DynamicStrokePropertiesSchema as Mt, generateExtrudedTextGeometry as N, getScramblePool as Nn, EnhancedTextNodeSchema as Nt, drawSvgNode as O, evaluateSpringProgress as On, AudioSignalComputePipeline as Ot, getHeadlessFontPath as P, getShuffledOrder as Pn, ExpressionSelectorSchema as Pt, poseNodes as Q, TextCursorConfigSchema as Qt, initHeadlessWebGPU as R, samplePathChainGeometry as Rn, KineticMarqueeConfigSchema as Rt, drawCaptionNode as S, evaluateCubicBezier as Sn, AETextAnimatorSchema as St, drawLottieNode as T, evaluateMarqueeOffset as Tn, AnchorGroupingSchema as Tt, loadOBJ as U, SelectorModeSchema as Ut, loadFBX as V, ParticleDissolveConfigSchema as Vt, lutStore as W, SelectorShapeSchema as Wt, parseOBJ as X, TextAnchorConfigSchema as Xt, parseMTL as Y, SpringPhysicsSchema as Yt, parseSvgPathToSegments as Z, TextAnimatorBuilder as Zt, buildShapeSvgPath as _, computeLineLeadingDisplacement as _n, Path3D as _t, GlassPipeline as a, TextSelectorSchema as an, spansText as at, colorMatrixWgsl as b, distanceToCurveParameter as bn, parseColorToRgb as bt, Renderer2D as c, TypewriterAnimatorSchema as cn, trackAudioPitch as ct, ScreenSpaceRelightPipeline as d, Vec2Schema as dn, Camera3D as dt, TextPathBuilder as en, registerHeadlessFont as et, ShadowPipeline as f, VolumetricFormationConfigSchema as fn, ENVIRONMENT_PRESETS as ft, WebGPUAudioProcessor as g, computeAnchorPivotOffset as gn, Matrix4Math as gt, SlugPipeline as h, buildWGSLSignalFn as hn, MAX_LIGHTS as ht, EffectPipeline as i, TextScrambleConfigSchema as in, shaderStore as it, ensureDevice as j, generateArcLengthLUT as jn, CubicBezierSegmentSchema as jt, drawVideoNode as k, evaluateTypewriterState as kn, AudioSpectrumTypographySchema as kt, Renderer3D as l, TypingCadenceSchema as ln, GetFontAssetUrl as lt, SlugGeometry as m, buildPathLUT as mn, Light3D as mt, AudioLatentTrackCache as n, TextPathSourceSchema as nn, sampleMorphWeights as nt, MotionBlurPipeline as o, TextSignalSelectorSchema as on, srtLoader as ot, SlugFontCache as p, VolumetricFormationModeSchema as pn, LIGHT_UNIFORM_SIZE_BYTES as pt, parseColor as q, SkewPropertiesSchema as qt, AudioMeshDeformPipeline as r, TextRangeSelectorSchema as rn, setRegisteredFontSource as rt, NodeSurfaceProvider as s, TextWigglySelectorSchema as sn, textureCache as st, AudioLatentEngine as t, TextPathOptionsSchema as tn, resolveTextSpans as tt, SSAOPipeline as u, VariableFontAxesSchema as un, resolveMediaSourceUrl as ut, clearAllVideoCache as v, computeRangeSelectorWeight as vn, Vector3Math as vt, drawImageNode as w, evaluateExpressionSelector as wn, AdvancedTextAnimatorSchema as wt, describeGpu as x, ellipseToCubicBeziers as xn, resolveEnvironment as xt, clearHeadlessFonts as y, deterministicWigglyNoise as yn, linearRgb as yt, inputStore as z, signalRegistry as zn, LineSpacingDynamicsSchema as zt };
41381
+ //# sourceMappingURL=dist-CWLLnigL.mjs.map