framefields 2.13.0 → 2.14.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 (302) hide show
  1. package/README.md +9 -4
  2. package/dist/audio/index.d.mts +5 -5
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-CHV33Od9.d.mts → audio-CdCuGK5d.d.mts} +3 -3
  5. package/dist/{audio-CHV33Od9.d.mts.map → audio-CdCuGK5d.d.mts.map} +1 -1
  6. package/dist/{audio-DHzLQ_RG.mjs → audio-DFwRbID_.mjs} +3 -3
  7. package/dist/{audio-DHzLQ_RG.mjs.map → audio-DFwRbID_.mjs.map} +1 -1
  8. package/dist/cli/check-worker.mjs +43 -43
  9. package/dist/cloud/index.d.mts.map +1 -1
  10. package/dist/components/index.d.mts +13 -13
  11. package/dist/components/index.mjs +42 -42
  12. package/dist/{dist-D3BeAZ7X.mjs → dist--Uu5bQ_6.mjs} +870 -348
  13. package/dist/dist--Uu5bQ_6.mjs.map +1 -0
  14. package/dist/{dist-CUNvNDS3.mjs → dist-B8Nby2CU.mjs} +18 -4
  15. package/dist/dist-B8Nby2CU.mjs.map +1 -0
  16. package/dist/effects/index.d.mts +5 -5
  17. package/dist/effects/index.mjs +34 -34
  18. package/dist/{effects-BiDgCK1L.mjs → effects-WMgv8ZaD.mjs} +2 -2
  19. package/dist/{effects-BiDgCK1L.mjs.map → effects-WMgv8ZaD.mjs.map} +1 -1
  20. package/dist/fonts/index.mjs +2 -2
  21. package/dist/{fonts-DeDPWdvJ.mjs → fonts-OW3yAfO5.mjs} +2 -2
  22. package/dist/{fonts-DeDPWdvJ.mjs.map → fonts-OW3yAfO5.mjs.map} +1 -1
  23. package/dist/{gpu-CWjgql4C.mjs → gpu-R4T2Tndu.mjs} +2 -2
  24. package/dist/{gpu-CWjgql4C.mjs.map → gpu-R4T2Tndu.mjs.map} +1 -1
  25. package/dist/{index-E2IXX0Cz.d.mts → index-9xte4JgL.d.mts} +110 -61
  26. package/dist/index-9xte4JgL.d.mts.map +1 -0
  27. package/dist/{index-YB9j9KUx.d.mts → index-B0Vq8Bwf.d.mts} +3 -3
  28. package/dist/{index-YB9j9KUx.d.mts.map → index-B0Vq8Bwf.d.mts.map} +1 -1
  29. package/dist/{index-BFTtXosj.d.mts → index-BVd6nXd5.d.mts} +2 -2
  30. package/dist/index-BVd6nXd5.d.mts.map +1 -0
  31. package/dist/{index-CnZhBlob.d.mts → index-Bv7gxGK1.d.mts} +2 -2
  32. package/dist/{index-CnZhBlob.d.mts.map → index-Bv7gxGK1.d.mts.map} +1 -1
  33. package/dist/{index-a6JrbAK0.d.mts → index-C-V6CAhP.d.mts} +32 -2
  34. package/dist/index-C-V6CAhP.d.mts.map +1 -0
  35. package/dist/{index-DQ1U3HC3.d.mts → index-C7-p9zwU.d.mts} +3 -3
  36. package/dist/{index-DQ1U3HC3.d.mts.map → index-C7-p9zwU.d.mts.map} +1 -1
  37. package/dist/{index-rtCXNxGO.d.mts → index-CEKxvGY-.d.mts} +2 -2
  38. package/dist/{index-rtCXNxGO.d.mts.map → index-CEKxvGY-.d.mts.map} +1 -1
  39. package/dist/{index-X2u96TEo.d.mts → index-CRaydvLi.d.mts} +29 -11
  40. package/dist/index-CRaydvLi.d.mts.map +1 -0
  41. package/dist/{index-DBh3WphX.d.mts → index-D1FqV1eu.d.mts} +2 -2
  42. package/dist/{index-DBh3WphX.d.mts.map → index-D1FqV1eu.d.mts.map} +1 -1
  43. package/dist/{index-Dibc_xpC.d.mts → index-DoP6EiHj.d.mts} +5 -5
  44. package/dist/{index-Dibc_xpC.d.mts.map → index-DoP6EiHj.d.mts.map} +1 -1
  45. package/dist/{index-D68eGFNE.d.mts → index-GA9_Z8Fn.d.mts} +2 -2
  46. package/dist/{index-D68eGFNE.d.mts.map → index-GA9_Z8Fn.d.mts.map} +1 -1
  47. package/dist/index.d.mts +14 -14
  48. package/dist/index.mjs +50 -50
  49. package/dist/preview/index.d.mts +5 -5
  50. package/dist/preview/index.mjs +10 -10
  51. package/dist/{preview-PDz7o2xg.mjs → preview-D7BGmE1E.mjs} +3 -3
  52. package/dist/{preview-PDz7o2xg.mjs.map → preview-D7BGmE1E.mjs.map} +1 -1
  53. package/dist/preview-engine/audio.mjs +1 -1
  54. package/dist/preview-engine/{chunk-IEEV5RB3.mjs → chunk-3C2XT64C.mjs} +1 -1
  55. package/dist/preview-engine/chunk-52X7SURQ.mjs +494 -0
  56. package/dist/preview-engine/{chunk-XYCR3STG.mjs → chunk-5DZTPUMH.mjs} +198 -92
  57. package/dist/preview-engine/{chunk-4P3MMJWD.mjs → chunk-FZ4RD7HV.mjs} +1 -1
  58. package/dist/preview-engine/chunk-GNDE3OXQ.mjs +5 -0
  59. package/dist/preview-engine/chunk-OBIJIQCZ.mjs +1 -0
  60. package/dist/preview-engine/{chunk-SMHEMYCV.mjs → chunk-UBY2UYEL.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-UFPA36D2.mjs → chunk-UPZURPJY.mjs} +31 -31
  62. package/dist/preview-engine/components.mjs +1 -1
  63. package/dist/preview-engine/effects.mjs +1 -1
  64. package/dist/preview-engine/framefields.mjs +1 -1
  65. package/dist/preview-engine/player.mjs +1 -1
  66. package/dist/preview-engine/renderers-DLJOA3BM.mjs +228 -0
  67. package/dist/preview-engine/signals.mjs +1 -1
  68. package/dist/{program-Bn6ko_I4.mjs → program-tFKCWU2j.mjs} +109 -12
  69. package/dist/program-tFKCWU2j.mjs.map +1 -0
  70. package/dist/renderer/index.d.mts +4 -4
  71. package/dist/renderer/index.mjs +2 -2
  72. package/dist/{renderer-BCTUqJG7.mjs → renderer-03mYJLgX.mjs} +3 -3
  73. package/dist/{renderer-BCTUqJG7.mjs.map → renderer-03mYJLgX.mjs.map} +1 -1
  74. package/dist/{renderer-CyUiXLRa.mjs → renderer-0rveCDm-.mjs} +3 -3
  75. package/dist/{renderer-CyUiXLRa.mjs.map → renderer-0rveCDm-.mjs.map} +1 -1
  76. package/dist/{renderer-BUj7jE6t.mjs → renderer-2PjR3w-q.mjs} +3 -3
  77. package/dist/{renderer-BUj7jE6t.mjs.map → renderer-2PjR3w-q.mjs.map} +1 -1
  78. package/dist/{renderer-BqUAyzCZ.mjs → renderer-47y12Z37.mjs} +2 -2
  79. package/dist/{renderer-BqUAyzCZ.mjs.map → renderer-47y12Z37.mjs.map} +1 -1
  80. package/dist/renderer-6_bzbbXt.mjs +5 -0
  81. package/dist/renderer-8M-9G6F_.mjs +5 -0
  82. package/dist/{renderer-CwlY8Tb-.mjs → renderer-B0yVUOPP.mjs} +2 -2
  83. package/dist/{renderer-CwlY8Tb-.mjs.map → renderer-B0yVUOPP.mjs.map} +1 -1
  84. package/dist/renderer-B5OzKvF8.mjs +5 -0
  85. package/dist/{renderer-CgK7Q1G8.mjs → renderer-B7G1KohJ.mjs} +2 -2
  86. package/dist/renderer-BBCZ2qbE.mjs +5 -0
  87. package/dist/{renderer-CuPAQjDK.mjs → renderer-BBMtmxks.mjs} +3 -3
  88. package/dist/{renderer-CuPAQjDK.mjs.map → renderer-BBMtmxks.mjs.map} +1 -1
  89. package/dist/renderer-BChbxCux.mjs +5 -0
  90. package/dist/{renderer-C-GTxnfv.mjs → renderer-BDzn1AKF.mjs} +2 -2
  91. package/dist/{renderer-C-GTxnfv.mjs.map → renderer-BDzn1AKF.mjs.map} +1 -1
  92. package/dist/renderer-BGeMPr8C.mjs +5 -0
  93. package/dist/{renderer-RzkU_O1i.mjs → renderer-BGp0An5A.mjs} +3 -3
  94. package/dist/{renderer-RzkU_O1i.mjs.map → renderer-BGp0An5A.mjs.map} +1 -1
  95. package/dist/{renderer-BZgJj8Cl.mjs → renderer-BH7UCMPQ.mjs} +2 -2
  96. package/dist/{renderer-BZgJj8Cl.mjs.map → renderer-BH7UCMPQ.mjs.map} +1 -1
  97. package/dist/{renderer-aRk849b3.d.mts → renderer-BHYJlK6H.d.mts} +2 -2
  98. package/dist/{renderer-aRk849b3.d.mts.map → renderer-BHYJlK6H.d.mts.map} +1 -1
  99. package/dist/{renderer-Cu3iKMSJ.mjs → renderer-BJ8ea92W.mjs} +3 -3
  100. package/dist/{renderer-Cu3iKMSJ.mjs.map → renderer-BJ8ea92W.mjs.map} +1 -1
  101. package/dist/{renderer-Dp5ChuOs.mjs → renderer-BOSZAdgF.mjs} +2 -2
  102. package/dist/{renderer-Dp5ChuOs.mjs.map → renderer-BOSZAdgF.mjs.map} +1 -1
  103. package/dist/renderer-BPQ8Pkjb.mjs +5 -0
  104. package/dist/renderer-BTRpA3HD.mjs +5 -0
  105. package/dist/{renderer-vll8LX0I.mjs → renderer-BVIXKfbC.mjs} +132 -116
  106. package/dist/renderer-BVIXKfbC.mjs.map +1 -0
  107. package/dist/{renderer-DpZballM.mjs → renderer-BVU22lBS.mjs} +2 -2
  108. package/dist/{renderer-DpZballM.mjs.map → renderer-BVU22lBS.mjs.map} +1 -1
  109. package/dist/renderer-BVsECSn-.mjs +5 -0
  110. package/dist/{renderer-DwGlDNOV.mjs → renderer-BWSRryIA.mjs} +2 -2
  111. package/dist/{renderer-DwGlDNOV.mjs.map → renderer-BWSRryIA.mjs.map} +1 -1
  112. package/dist/{renderer-BMpmmYOq.mjs → renderer-BacY4nh8.mjs} +2 -2
  113. package/dist/{renderer-BMpmmYOq.mjs.map → renderer-BacY4nh8.mjs.map} +1 -1
  114. package/dist/{renderer-CZ5mwBW1.mjs → renderer-Baw6Utxi.mjs} +2 -2
  115. package/dist/{renderer-CZ5mwBW1.mjs.map → renderer-Baw6Utxi.mjs.map} +1 -1
  116. package/dist/{renderer-NBMmvqWl.mjs → renderer-Bcu3UrI-.mjs} +3 -3
  117. package/dist/{renderer-NBMmvqWl.mjs.map → renderer-Bcu3UrI-.mjs.map} +1 -1
  118. package/dist/{renderer-DxB_OfLs.mjs → renderer-BeNl_6EG.mjs} +2 -2
  119. package/dist/{renderer-DxB_OfLs.mjs.map → renderer-BeNl_6EG.mjs.map} +1 -1
  120. package/dist/{renderer-BHPgkoEL.mjs → renderer-BfZNIiSv.mjs} +2 -2
  121. package/dist/{renderer-BHPgkoEL.mjs.map → renderer-BfZNIiSv.mjs.map} +1 -1
  122. package/dist/renderer-Bgos68gc.mjs +6 -0
  123. package/dist/{renderer-CnL8Cmmr.mjs → renderer-BjDddtw9.mjs} +2 -2
  124. package/dist/renderer-BjHOvoqO.mjs +5 -0
  125. package/dist/renderer-BjXMPPlV.mjs +5 -0
  126. package/dist/{renderer-FPiLBwj5.mjs → renderer-BpVOk9ux.mjs} +2 -2
  127. package/dist/{renderer-FPiLBwj5.mjs.map → renderer-BpVOk9ux.mjs.map} +1 -1
  128. package/dist/{renderer-DJPZs_zV.mjs → renderer-Bpm145BW.mjs} +3 -3
  129. package/dist/{renderer-DJPZs_zV.mjs.map → renderer-Bpm145BW.mjs.map} +1 -1
  130. package/dist/{renderer-45ifiDkn.mjs → renderer-Brmbl12Y.mjs} +3 -3
  131. package/dist/{renderer-45ifiDkn.mjs.map → renderer-Brmbl12Y.mjs.map} +1 -1
  132. package/dist/renderer-Byobxqkv.mjs +5 -0
  133. package/dist/{renderer-DOZPZTxe.mjs → renderer-C20efMI0.mjs} +3 -3
  134. package/dist/{renderer-DOZPZTxe.mjs.map → renderer-C20efMI0.mjs.map} +1 -1
  135. package/dist/{renderer-puQhVfDS.mjs → renderer-C5AoaymD.mjs} +3 -3
  136. package/dist/{renderer-puQhVfDS.mjs.map → renderer-C5AoaymD.mjs.map} +1 -1
  137. package/dist/{renderer-B-LUGB9h.mjs → renderer-CCxk-RJR.mjs} +2 -2
  138. package/dist/{renderer-B-LUGB9h.mjs.map → renderer-CCxk-RJR.mjs.map} +1 -1
  139. package/dist/{renderer-BKi6jDi_.mjs → renderer-CKo7VR8x.mjs} +3 -3
  140. package/dist/{renderer-BKi6jDi_.mjs.map → renderer-CKo7VR8x.mjs.map} +1 -1
  141. package/dist/renderer-CKrsg3EG.mjs +5 -0
  142. package/dist/{renderer--Q0pM9Vh.mjs → renderer-COgwYqev.mjs} +3 -3
  143. package/dist/{renderer--Q0pM9Vh.mjs.map → renderer-COgwYqev.mjs.map} +1 -1
  144. package/dist/{renderer-B5b-ehRb.mjs → renderer-CP108ABB.mjs} +2 -2
  145. package/dist/{renderer-B5b-ehRb.mjs.map → renderer-CP108ABB.mjs.map} +1 -1
  146. package/dist/{renderer-BPOh9x5X.mjs → renderer-CP8wLzTU.mjs} +2 -2
  147. package/dist/{renderer-BPOh9x5X.mjs.map → renderer-CP8wLzTU.mjs.map} +1 -1
  148. package/dist/{renderer-BPiWsrC2.mjs → renderer-CT3zkfbf.mjs} +2 -2
  149. package/dist/{renderer-BPiWsrC2.mjs.map → renderer-CT3zkfbf.mjs.map} +1 -1
  150. package/dist/{renderer-CQFMyC_c.mjs → renderer-Ca1KjNCO.mjs} +2 -2
  151. package/dist/{renderer-CQFMyC_c.mjs.map → renderer-Ca1KjNCO.mjs.map} +1 -1
  152. package/dist/renderer-Cj875NuH.mjs +5 -0
  153. package/dist/{renderer-CMnlgAGs.mjs → renderer-Cm0tsbQH.mjs} +2 -2
  154. package/dist/{renderer-CMnlgAGs.mjs.map → renderer-Cm0tsbQH.mjs.map} +1 -1
  155. package/dist/renderer-CnmzJoMv.mjs +5 -0
  156. package/dist/{renderer-BtgqTg2K.mjs → renderer-Cqb7PGrI.mjs} +2 -2
  157. package/dist/{renderer-C9dqx3U7.mjs → renderer-CrxwW6VQ.mjs} +3 -3
  158. package/dist/{renderer-C9dqx3U7.mjs.map → renderer-CrxwW6VQ.mjs.map} +1 -1
  159. package/dist/renderer-CtklDaMg.mjs +5 -0
  160. package/dist/{renderer-dRXP2dJU.mjs → renderer-Cw6_NL2i.mjs} +3 -3
  161. package/dist/{renderer-dRXP2dJU.mjs.map → renderer-Cw6_NL2i.mjs.map} +1 -1
  162. package/dist/{renderer-C_1eqfI0.mjs → renderer-D-KHHWQD.mjs} +3 -3
  163. package/dist/{renderer-C_1eqfI0.mjs.map → renderer-D-KHHWQD.mjs.map} +1 -1
  164. package/dist/{renderer-CxSFvKd1.mjs → renderer-D-RhYvVl.mjs} +2 -2
  165. package/dist/{renderer-CxSFvKd1.mjs.map → renderer-D-RhYvVl.mjs.map} +1 -1
  166. package/dist/renderer-D1tK3in_.mjs +5 -0
  167. package/dist/{renderer-Nnu32rqg.mjs → renderer-D2wNFNRf.mjs} +2 -2
  168. package/dist/{renderer-Nnu32rqg.mjs.map → renderer-D2wNFNRf.mjs.map} +1 -1
  169. package/dist/renderer-D2yc9P61.mjs +5 -0
  170. package/dist/renderer-D4v-JvSr.mjs +5 -0
  171. package/dist/renderer-D7WRWDwB.mjs +5 -0
  172. package/dist/{renderer-DXFJv_e6.mjs → renderer-DA8YEo_d.mjs} +3 -3
  173. package/dist/{renderer-DXFJv_e6.mjs.map → renderer-DA8YEo_d.mjs.map} +1 -1
  174. package/dist/{renderer-CYwVNbUh.mjs → renderer-DEjo6dw_.mjs} +2 -2
  175. package/dist/{renderer-CYwVNbUh.mjs.map → renderer-DEjo6dw_.mjs.map} +1 -1
  176. package/dist/renderer-DGvA0tdB.mjs +5 -0
  177. package/dist/{renderer-Br8km655.mjs → renderer-DIEeHiQA.mjs} +2 -2
  178. package/dist/{renderer-Br8km655.mjs.map → renderer-DIEeHiQA.mjs.map} +1 -1
  179. package/dist/{renderer-SJyp9-62.mjs → renderer-DNxWOz8Q.mjs} +2 -2
  180. package/dist/{renderer-SJyp9-62.mjs.map → renderer-DNxWOz8Q.mjs.map} +1 -1
  181. package/dist/renderer-DO7v5Sdm.mjs +5 -0
  182. package/dist/renderer-DRVvt7-V.mjs +5 -0
  183. package/dist/{renderer-DGb_wgTW.mjs → renderer-DVPgWHZw.mjs} +3 -3
  184. package/dist/{renderer-DGb_wgTW.mjs.map → renderer-DVPgWHZw.mjs.map} +1 -1
  185. package/dist/{renderer-BjgFpwVK.mjs → renderer-DWq9gYRw.mjs} +3 -3
  186. package/dist/{renderer-BjgFpwVK.mjs.map → renderer-DWq9gYRw.mjs.map} +1 -1
  187. package/dist/renderer-DYMCd3jL.mjs +5 -0
  188. package/dist/{renderer-C1ctHdXl.mjs → renderer-D_j1WKMD.mjs} +3 -3
  189. package/dist/{renderer-C1ctHdXl.mjs.map → renderer-D_j1WKMD.mjs.map} +1 -1
  190. package/dist/{renderer-BsMZ5Iaq.mjs → renderer-DcAKDAnS.mjs} +3 -3
  191. package/dist/{renderer-BsMZ5Iaq.mjs.map → renderer-DcAKDAnS.mjs.map} +1 -1
  192. package/dist/{renderer-g9SstkTz.mjs → renderer-Dgj46uEU.mjs} +2 -2
  193. package/dist/{renderer-DRal7Goa.mjs → renderer-DhyMfG1v.mjs} +3 -3
  194. package/dist/{renderer-DRal7Goa.mjs.map → renderer-DhyMfG1v.mjs.map} +1 -1
  195. package/dist/{renderer-BO_wuUKA.mjs → renderer-Dj2H5JPR.mjs} +3 -3
  196. package/dist/{renderer-BO_wuUKA.mjs.map → renderer-Dj2H5JPR.mjs.map} +1 -1
  197. package/dist/{renderer-BlZgyBSo.mjs → renderer-DkOuQi84.mjs} +3 -3
  198. package/dist/{renderer-BlZgyBSo.mjs.map → renderer-DkOuQi84.mjs.map} +1 -1
  199. package/dist/renderer-DmHKw-MM.mjs +5 -0
  200. package/dist/renderer-DoDsuZ6G.mjs +5 -0
  201. package/dist/{renderer-BgjPbgbn.mjs → renderer-Dr0tXA4k.mjs} +3 -3
  202. package/dist/{renderer-BgjPbgbn.mjs.map → renderer-Dr0tXA4k.mjs.map} +1 -1
  203. package/dist/{renderer-opVuiAQR.mjs → renderer-DtMVitEF.mjs} +2 -2
  204. package/dist/{renderer-opVuiAQR.mjs.map → renderer-DtMVitEF.mjs.map} +1 -1
  205. package/dist/{renderer-D-fzEZfX.mjs → renderer-Dwwnx7Dk.mjs} +2 -2
  206. package/dist/{renderer-D-fzEZfX.mjs.map → renderer-Dwwnx7Dk.mjs.map} +1 -1
  207. package/dist/{renderer-dGEMVaZ3.mjs → renderer-DzLrvCB2.mjs} +2 -2
  208. package/dist/{renderer-dGEMVaZ3.mjs.map → renderer-DzLrvCB2.mjs.map} +1 -1
  209. package/dist/renderer-EpgclS70.mjs +5 -0
  210. package/dist/{renderer-549d94qG.mjs → renderer-FYOL5Za6.mjs} +3 -3
  211. package/dist/{renderer-549d94qG.mjs.map → renderer-FYOL5Za6.mjs.map} +1 -1
  212. package/dist/renderer-GroKiYyK.mjs +5 -0
  213. package/dist/{renderer-CciiDHuU.mjs → renderer-I0Hh9cLK.mjs} +3 -3
  214. package/dist/{renderer-CciiDHuU.mjs.map → renderer-I0Hh9cLK.mjs.map} +1 -1
  215. package/dist/renderer-MQ5K_xIS.mjs +5 -0
  216. package/dist/{renderer-C7m7Yxgc.mjs → renderer-NRMlYkX6.mjs} +3 -3
  217. package/dist/{renderer-C7m7Yxgc.mjs.map → renderer-NRMlYkX6.mjs.map} +1 -1
  218. package/dist/{renderer-BIieU9pY.mjs → renderer-Nnmi8Gt6.mjs} +3 -3
  219. package/dist/{renderer-BIieU9pY.mjs.map → renderer-Nnmi8Gt6.mjs.map} +1 -1
  220. package/dist/renderer-U43SflML.mjs +5 -0
  221. package/dist/renderer-UqOmBgCv.mjs +5 -0
  222. package/dist/{renderer-KgsVk9c6.mjs → renderer-W1bVNVR6.mjs} +3 -3
  223. package/dist/{renderer-KgsVk9c6.mjs.map → renderer-W1bVNVR6.mjs.map} +1 -1
  224. package/dist/renderer-XLULgJM0.mjs +5 -0
  225. package/dist/{renderer-CE4535aW.mjs → renderer-ZnrEfkYh.mjs} +2 -2
  226. package/dist/{renderer-CE4535aW.mjs.map → renderer-ZnrEfkYh.mjs.map} +1 -1
  227. package/dist/{renderer-RAq3LnNy.mjs → renderer-_pC-jB9O.mjs} +2 -2
  228. package/dist/{renderer-RAq3LnNy.mjs.map → renderer-_pC-jB9O.mjs.map} +1 -1
  229. package/dist/{renderer-Dz6P-rPI.mjs → renderer-iMiYStcW.mjs} +2 -2
  230. package/dist/{renderer-Dz6P-rPI.mjs.map → renderer-iMiYStcW.mjs.map} +1 -1
  231. package/dist/{renderer-S9tVGneU.mjs → renderer-jUKdkmG5.mjs} +69 -69
  232. package/dist/{renderer-S9tVGneU.mjs.map → renderer-jUKdkmG5.mjs.map} +1 -1
  233. package/dist/{renderer-_54hiCq0.mjs → renderer-k5d7JSbs.mjs} +3 -3
  234. package/dist/{renderer-_54hiCq0.mjs.map → renderer-k5d7JSbs.mjs.map} +1 -1
  235. package/dist/renderer-lNjxY1GG.mjs +5 -0
  236. package/dist/{renderer-CL-vyXgX.mjs → renderer-nHS3Sius.mjs} +3 -3
  237. package/dist/{renderer-CL-vyXgX.mjs.map → renderer-nHS3Sius.mjs.map} +1 -1
  238. package/dist/{renderer-Cp_HOmp7.mjs → renderer-ngmYIIob.mjs} +3 -3
  239. package/dist/{renderer-Cp_HOmp7.mjs.map → renderer-ngmYIIob.mjs.map} +1 -1
  240. package/dist/{renderer-LXhEPCmy.mjs → renderer-raxwsiGI.mjs} +3 -3
  241. package/dist/{renderer-LXhEPCmy.mjs.map → renderer-raxwsiGI.mjs.map} +1 -1
  242. package/dist/renderer-ukufL7pl.mjs +5 -0
  243. package/dist/renderer-wb0NCKdF.mjs +5 -0
  244. package/dist/{renderer-D8gN7aqk.mjs → renderer-zRq0j6Xy.mjs} +3 -3
  245. package/dist/{renderer-D8gN7aqk.mjs.map → renderer-zRq0j6Xy.mjs.map} +1 -1
  246. package/dist/{renderers-CP8CFWDs-BRQyvcut.mjs → renderers-CP8CFWDs-CshljORp.mjs} +2 -2
  247. package/dist/{renderers-CP8CFWDs-BRQyvcut.mjs.map → renderers-CP8CFWDs-CshljORp.mjs.map} +1 -1
  248. package/dist/sam/index.d.mts +3 -3
  249. package/dist/signals/index.d.mts +5 -5
  250. package/dist/signals/index.mjs +4 -4
  251. package/dist/{src-BzFGotRc.mjs → src-Dy4gnc6w.mjs} +43 -13
  252. package/dist/src-Dy4gnc6w.mjs.map +1 -0
  253. package/package.json +60 -60
  254. package/dist/dist-CUNvNDS3.mjs.map +0 -1
  255. package/dist/dist-D3BeAZ7X.mjs.map +0 -1
  256. package/dist/index-BFTtXosj.d.mts.map +0 -1
  257. package/dist/index-E2IXX0Cz.d.mts.map +0 -1
  258. package/dist/index-X2u96TEo.d.mts.map +0 -1
  259. package/dist/index-a6JrbAK0.d.mts.map +0 -1
  260. package/dist/preview-engine/chunk-77WWW75O.mjs +0 -5
  261. package/dist/preview-engine/chunk-7M5LE6EM.mjs +0 -483
  262. package/dist/preview-engine/chunk-FRJPXWAG.mjs +0 -1
  263. package/dist/preview-engine/renderers-TTXTV4PC.mjs +0 -228
  264. package/dist/program-Bn6ko_I4.mjs.map +0 -1
  265. package/dist/renderer-1aSF5BmY.mjs +0 -5
  266. package/dist/renderer-B2e4Gr9u.mjs +0 -5
  267. package/dist/renderer-B6fz4j50.mjs +0 -5
  268. package/dist/renderer-BEftIYw-.mjs +0 -5
  269. package/dist/renderer-BHTnO-7e.mjs +0 -5
  270. package/dist/renderer-BMlnQqTO.mjs +0 -5
  271. package/dist/renderer-BOzcFezY.mjs +0 -5
  272. package/dist/renderer-BVbjJIKJ.mjs +0 -5
  273. package/dist/renderer-BXsHKf4k.mjs +0 -5
  274. package/dist/renderer-Bks49NVl.mjs +0 -5
  275. package/dist/renderer-C-t7qFKr.mjs +0 -5
  276. package/dist/renderer-C24n-6CX.mjs +0 -6
  277. package/dist/renderer-CCReX-7M.mjs +0 -5
  278. package/dist/renderer-CIxFQrAm.mjs +0 -5
  279. package/dist/renderer-CLHBMIqJ.mjs +0 -5
  280. package/dist/renderer-CMJKi-Ye.mjs +0 -5
  281. package/dist/renderer-C_H3mHZa.mjs +0 -5
  282. package/dist/renderer-CfkTdR5B.mjs +0 -5
  283. package/dist/renderer-CnhkXJ0R.mjs +0 -5
  284. package/dist/renderer-CqpyVsq_.mjs +0 -5
  285. package/dist/renderer-CtWgIpTE.mjs +0 -5
  286. package/dist/renderer-CyuKr5ca.mjs +0 -5
  287. package/dist/renderer-D9ON_1Hf.mjs +0 -5
  288. package/dist/renderer-DAnTgh4o.mjs +0 -5
  289. package/dist/renderer-DWgpivA3.mjs +0 -5
  290. package/dist/renderer-Dh_qNNwR.mjs +0 -5
  291. package/dist/renderer-DkCpXPMP.mjs +0 -5
  292. package/dist/renderer-Dre-6cDR.mjs +0 -5
  293. package/dist/renderer-Ds5z4_HX.mjs +0 -5
  294. package/dist/renderer-HGSCOMyP.mjs +0 -5
  295. package/dist/renderer-KMY8W-cJ.mjs +0 -5
  296. package/dist/renderer-R21YvXz3.mjs +0 -5
  297. package/dist/renderer-RtzCz37W.mjs +0 -5
  298. package/dist/renderer-iMrqAjix.mjs +0 -5
  299. package/dist/renderer-sMed1u1O.mjs +0 -5
  300. package/dist/renderer-tsAuo46l.mjs +0 -5
  301. package/dist/renderer-vll8LX0I.mjs.map +0 -1
  302. package/dist/src-BzFGotRc.mjs.map +0 -1
@@ -1,14 +1,14 @@
1
1
  import "./chunk-DOL2i2sR.mjs";
2
2
  import { It as getActiveMediaMetadata, _n as reportRenderDiagnostic, p as DEFAULT_DURATION_MS, rn as mediaSourceTime, vn as resolveBoolean, xn as resolveNumber } from "./dist-C8XSqfTx.mjs";
3
3
  import { i as effectReach, n as defineRenderer, r as effectMaxPixelScale, s as resolveFrameNumber, t as audioRegistry, u as solveHomography } from "./renderer-BuvKGwk3.mjs";
4
- import { B as jointMatrices, F as getPrimitiveGeometry, G as measureMaxCaptionHeight, M as fitSpansToText, N as generateExtrudedTextGeometry, Q as poseNodes, bt as Vector3Math, d as ScreenSpaceRelightPipeline, ft as resolveMediaSourceUrl, gt as Light3D, l as Renderer3D, n as AudioLatentTrackCache, nt as resolveTextSpans, ot as spansText, p as SlugFontCache, pt as Camera3D, q as parseColor, rt as sampleMorphWeights, st as srtLoader, ut as transformScale, vt as Matrix4Math } from "./dist-D3BeAZ7X.mjs";
5
- import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, n as PREMULTIPLIED_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CWjgql4C.mjs";
6
- import { n as decodeAudioSource, o as resolveLayerDuration, p as measureText } from "./dist-CUNvNDS3.mjs";
4
+ import { $ as poseNodes, B as jointMatrices, F as getPrimitiveGeometry, G as measureMaxCaptionHeight, J as parseDashArray, M as fitSpansToText, N as generateExtrudedTextGeometry, _t as Light3D, ct as srtLoader, d as ScreenSpaceRelightPipeline, dt as transformScale, it as sampleMorphWeights, l as Renderer3D, mt as Camera3D, n as AudioLatentTrackCache, p as SlugFontCache, pt as resolveMediaSourceUrl, q as parseColor, rt as resolveTextSpans, st as spansText, xt as Vector3Math, yt as Matrix4Math } from "./dist--Uu5bQ_6.mjs";
5
+ import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, n as PREMULTIPLIED_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-R4T2Tndu.mjs";
6
+ import { i as keyedGain, m as measureText, n as decodeAudioSource, s as resolveLayerDuration } from "./dist-B8Nby2CU.mjs";
7
7
  import { o as TemporalDeflickerPipeline } from "./dist-DgZpN6IK.mjs";
8
- import { B as evaluateKeyframes, I as computeLayout, N as collectNodeOps, U as initLayout, V as evaluateTrackAtFrame } from "./program-Bn6ko_I4.mjs";
8
+ import { F as collectNodeOps, G as initLayout, H as evaluateKeyframes, R as computeLayout, U as evaluateTrackAtFrame } from "./program-tFKCWU2j.mjs";
9
9
  import gsapModule from "gsap";
10
10
 
11
- //#region ../../nodes/node-compositor/dist/renderers-Cvrf0vGs.mjs
11
+ //#region ../../nodes/node-compositor/dist/renderers-IzbDoLXh.mjs
12
12
  /**
13
13
  * Solves a cubic bezier curve defined by control points (x1, y1) and (x2, y2)
14
14
  * for a given progress parameter t in [0, 1].
@@ -217,6 +217,8 @@ function mappedEase(ease, durationFrames, fps = 24) {
217
217
  else if (name === "elastic") suffix = "(1, 0.3)";
218
218
  return `${easeName}.${dir}${suffix}`;
219
219
  }
220
+ /** Props that switch rather than tween: each key is a set from its frame on. */
221
+ const DISCRETE_PROPS = new Set(["hidden", "muted"]);
220
222
  function compileTrackToTimeline(tl, stub, track, startFrame, fps, durationFrames, signals, live, step) {
221
223
  const prop = track.prop;
222
224
  const source = track.source ?? { type: "keyframe" };
@@ -283,7 +285,7 @@ function compileTrackToTimeline(tl, stub, track, startFrame, fps, durationFrames
283
285
  dropped,
284
286
  maxAuthoredFrame
285
287
  };
286
- if (prop === "hidden" || prop === "muted") for (const kf of validKeyframes) {
288
+ if (DISCRETE_PROPS.has(prop)) for (const kf of validKeyframes) {
287
289
  const absoluteSec = (startFrame + kf.frame) / fps;
288
290
  tl.set(stub, {
289
291
  [prop]: kf.value,
@@ -584,10 +586,10 @@ function compileTimeline(renderId, virtualMedia, options) {
584
586
  signals
585
587
  });
586
588
  else if (track.keyframes && track.keyframes.length > 0) {
587
- const kf0 = track.keyframes[0];
589
+ const first = track.keyframes.reduce((a, b) => b.frame < a.frame ? b : a);
588
590
  const seeded = stub;
589
- if (kf0.frame === 0) seeded[track.prop] = kf0.value;
590
- else if (seeded[track.prop] === void 0) seeded[track.prop] = lop[track.prop] ?? kf0.value;
591
+ if (!DISCRETE_PROPS.has(track.prop) || first.frame === 0) seeded[track.prop] = first.value;
592
+ else if (seeded[track.prop] === void 0) seeded[track.prop] = lop[track.prop] ?? first.value;
591
593
  }
592
594
  targetsById[layerId] = stub;
593
595
  });
@@ -1082,6 +1084,21 @@ function has3DTransform(target, lop) {
1082
1084
  return false;
1083
1085
  }
1084
1086
  const meshHasAlpha = /* @__PURE__ */ new WeakMap();
1087
+ /**
1088
+ * How far a text node's ink can reach past its layout box, in px: an outside
1089
+ * stroke reaches its full width past the outline (any other alignment, half),
1090
+ * a shadow its offset plus blur. One px of slack covers antialiasing.
1091
+ */
1092
+ function textInkOutset(target, lop) {
1093
+ const num = (v) => typeof v === "number" && v > 0 ? v : 0;
1094
+ const width = num(target?.strokeWidth ?? lop.strokeWidth);
1095
+ const stroke = Boolean(target?.stroke ?? target?.strokeColor ?? lop.stroke) ? lop.strokeAlign === "outside" ? width : width / 2 : 0;
1096
+ let shadow = 0;
1097
+ const shadows = lop.shadows;
1098
+ if (Array.isArray(shadows)) for (const s of shadows) shadow = Math.max(shadow, Math.max(Math.abs(s.offset?.x ?? 0), Math.abs(s.offset?.y ?? 0)) + 2 * num(s.blurRadius));
1099
+ const reach = stroke + shadow;
1100
+ return reach > 0 ? Math.ceil(reach) + 1 : 0;
1101
+ }
1085
1102
  function hasVertexAlpha(mesh) {
1086
1103
  const cached = meshHasAlpha.get(mesh);
1087
1104
  if (cached !== void 0) return cached;
@@ -1175,6 +1192,8 @@ const audioTrackLatentCache = /* @__PURE__ */ new Map();
1175
1192
  const swarmStateMap = /* @__PURE__ */ new WeakMap();
1176
1193
  const deviceRenderer3DCache = /* @__PURE__ */ new WeakMap();
1177
1194
  /** One Renderer3D per device, target format and MSAA sample count. */
1195
+ /** The command encoder the 3D pools were last recycled for, per device. */
1196
+ const poolEncoder = /* @__PURE__ */ new WeakMap();
1178
1197
  function getRenderer3D(device, format, sampleCount) {
1179
1198
  let byConfig = deviceRenderer3DCache.get(device);
1180
1199
  if (!byConfig) {
@@ -1327,6 +1346,8 @@ function surfaceProps(target, lop, mat) {
1327
1346
  out.emissiveIntensity = target?.emissiveIntensity ?? lop.emissiveIntensity ?? mat?.emissiveStrength ?? 1;
1328
1347
  }
1329
1348
  if (lop.castShadow !== void 0) out.castShadow = lop.castShadow;
1349
+ out.toon = target?.toon ?? lop.toon;
1350
+ out.outline = target?.outline ?? lop.outline;
1330
1351
  return out;
1331
1352
  }
1332
1353
  function computeContainerScissor(matrix, width, height) {
@@ -1650,8 +1671,13 @@ const CompositorWebGPURenderer = async (args) => {
1650
1671
  });
1651
1672
  const { targetsById } = compiled;
1652
1673
  seekTimeline(compiled, shiftedFrame, fps ?? 24);
1653
- getRenderer3D(ctx.device, ctx.renderer.format ?? "rgba8unorm", sampleCount3d).resetPools();
1654
- getScreenSpaceRelightPipeline(ctx.device, ctx.renderer.format ?? "rgba8unorm").resetPools();
1674
+ const r3d = getRenderer3D(ctx.device, ctx.renderer.format ?? "rgba8unorm", sampleCount3d);
1675
+ const relightPipe = getScreenSpaceRelightPipeline(ctx.device, ctx.renderer.format ?? "rgba8unorm");
1676
+ if (poolEncoder.get(ctx.device) !== encoder) {
1677
+ poolEncoder.set(ctx.device, encoder);
1678
+ r3d.resetPools();
1679
+ relightPipe.resetPools();
1680
+ }
1655
1681
  const clearColor = parseColor(vop.backgroundColor);
1656
1682
  ctx.renderer.beginFrame(encoder, compView, clearColor, nativeWidth, nativeHeight, "clear").end();
1657
1683
  let currentCompTex = compTex;
@@ -1872,6 +1898,7 @@ const CompositorWebGPURenderer = async (args) => {
1872
1898
  toneMapping: lop.toneMapping,
1873
1899
  fog: lop.fog,
1874
1900
  floor: lop.floor,
1901
+ outlines: lop.outlines,
1875
1902
  ...intensity$1 !== void 0 && { intensity: intensity$1 }
1876
1903
  };
1877
1904
  sceneBloom = lop.bloom === true ? {} : lop.bloom && typeof lop.bloom === "object" ? { ...lop.bloom } : null;
@@ -1945,11 +1972,11 @@ const CompositorWebGPURenderer = async (args) => {
1945
1972
  finalTex: curTex,
1946
1973
  finalView: curView
1947
1974
  };
1948
- const r3d = getRenderer3D(ctx.device, ctx.renderer.format ?? "rgba8unorm", sampleCount3d);
1975
+ const r3d$1 = getRenderer3D(ctx.device, ctx.renderer.format ?? "rgba8unorm", sampleCount3d);
1949
1976
  for (const item of pending3DItems) {
1950
1977
  if (item.kind !== "mesh") continue;
1951
- if (item.opts.morphWeights?.length) item.meshBuffers = r3d.morphMesh(encoder, item.mesh, item.opts.morphWeights, item.opts.wireframe);
1952
- if (item.opts.audioDeform) item.meshBuffers = r3d.deformMesh(encoder, item.mesh, item.opts.audioDeform, item.opts.wireframe, item.meshBuffers);
1978
+ if (item.opts.morphWeights?.length) item.meshBuffers = r3d$1.morphMesh(encoder, item.mesh, item.opts.morphWeights, item.opts.wireframe);
1979
+ if (item.opts.audioDeform) item.meshBuffers = r3d$1.deformMesh(encoder, item.mesh, item.opts.audioDeform, item.opts.wireframe, item.meshBuffers);
1953
1980
  }
1954
1981
  const itemTextures = pendingTextures();
1955
1982
  const scene3dTex = ctx.renderer.getTemporaryTexture(nativeWidth, nativeHeight, [
@@ -1959,10 +1986,13 @@ const CompositorWebGPURenderer = async (args) => {
1959
1986
  ...itemTextures
1960
1987
  ]);
1961
1988
  const scene3dView = scene3dTex.createView();
1989
+ const outlineSetting = sceneEnvironment?.outlines;
1990
+ const outlines = outlineSetting === true ? {} : outlineSetting || null;
1991
+ const geometryEnabled = dofEnabled || Boolean(outlines);
1962
1992
  let linearDepthTex;
1963
1993
  let linearDepthView;
1964
- if (dofEnabled) {
1965
- linearDepthTex = r3d.getOrCreateLinearDepthTexture(nativeWidth, nativeHeight);
1994
+ if (geometryEnabled) {
1995
+ linearDepthTex = r3d$1.getOrCreateLinearDepthTexture(nativeWidth, nativeHeight);
1966
1996
  linearDepthView = linearDepthTex.createView();
1967
1997
  }
1968
1998
  const shadow = [];
@@ -1980,7 +2010,7 @@ const CompositorWebGPURenderer = async (args) => {
1980
2010
  buffers: item.meshBuffers,
1981
2011
  opts: item.opts
1982
2012
  };
1983
- receivers.push(r3d.worldBounds(caster));
2013
+ receivers.push(r3d$1.worldBounds(caster));
1984
2014
  if (item.opts.castShadow !== false && item.opts.material !== "unlit") casters.push(caster);
1985
2015
  } else if (item.kind === "quad") {
1986
2016
  const caster = {
@@ -1988,11 +2018,11 @@ const CompositorWebGPURenderer = async (args) => {
1988
2018
  texture: item.texture,
1989
2019
  opts: item.opts
1990
2020
  };
1991
- receivers.push(r3d.worldBounds(caster));
2021
+ receivers.push(r3d$1.worldBounds(caster));
1992
2022
  if (item.opts.castShadow === true) casters.push(caster);
1993
2023
  }
1994
2024
  if (casters.length > 0) for (const { light, index } of shadowLights) {
1995
- const result = r3d.renderShadowMap(encoder, light, index, casters, receivers, {
2025
+ const result = r3d$1.renderShadowMap(encoder, light, index, casters, receivers, {
1996
2026
  mapSize: shadowMapSize,
1997
2027
  layer: shadow.length,
1998
2028
  layerCount: shadowLights.length
@@ -2007,7 +2037,7 @@ const CompositorWebGPURenderer = async (args) => {
2007
2037
  const forward = Vector3Math.subtract(camera.target, camera.eye);
2008
2038
  for (const item of pending3DItems) if (isGlass(item)) glass.push(item);
2009
2039
  else if (item.kind === "mesh" && item.opts.transparent) {
2010
- const bounds = r3d.worldBounds({
2040
+ const bounds = r3d$1.worldBounds({
2011
2041
  kind: "mesh",
2012
2042
  mesh: item.mesh,
2013
2043
  opts: item.opts
@@ -2041,7 +2071,7 @@ const CompositorWebGPURenderer = async (args) => {
2041
2071
  for (let j = i; j < end; j++) {
2042
2072
  const item = opaque[j];
2043
2073
  if (item.kind !== "mesh") throw new Error("Invalid mesh batch");
2044
- const matrix = r3d.meshModelMatrix(item.opts);
2074
+ const matrix = r3d$1.meshModelMatrix(item.opts);
2045
2075
  data.set(matrix, (j - i) * 32);
2046
2076
  data.set(item.opts.normalMatrix ?? Light3D.computeNormalMatrix(matrix), (j - i) * 32 + 16);
2047
2077
  }
@@ -2051,7 +2081,7 @@ const CompositorWebGPURenderer = async (args) => {
2051
2081
  ...first.opts,
2052
2082
  modelMatrix: Matrix4Math.identity(),
2053
2083
  normalMatrix: Matrix4Math.identity(),
2054
- instanceBuffer: r3d.uploadInstanceData(data),
2084
+ instanceBuffer: r3d$1.uploadInstanceData(data),
2055
2085
  instanceCount: end - i,
2056
2086
  matrixInstances: true
2057
2087
  }
@@ -2085,17 +2115,17 @@ const CompositorWebGPURenderer = async (args) => {
2085
2115
  camera.up[2]
2086
2116
  ]
2087
2117
  };
2088
- const { pass: reflPass, cameraBindGroup: reflCamBind, lightsBindGroup: reflLightsBind, reflectionTexture: reflTex } = r3d.beginReflectionPass(encoder, nativeWidth, nativeHeight, reflectedCamera, sceneLights, {
2118
+ const { pass: reflPass, cameraBindGroup: reflCamBind, lightsBindGroup: reflLightsBind, reflectionTexture: reflTex } = r3d$1.beginReflectionPass(encoder, nativeWidth, nativeHeight, reflectedCamera, sceneLights, {
2089
2119
  environment: sceneEnvironment,
2090
2120
  shadow: null
2091
2121
  });
2092
- for (const item of ordered) if (item.kind === "quad") r3d.drawTextureQuad(reflPass, reflCamBind, reflLightsBind, item.texture, item.opts, false);
2093
- else if (item.kind === "slug") r3d.drawSlugText(reflPass, reflCamBind, reflLightsBind, item.batches, item.opts, item.stackBase, false);
2094
- else if (item.kind === "mesh") r3d.drawMesh3D(reflPass, reflCamBind, reflLightsBind, item.meshBuffers ?? item.mesh, item.texture, item.opts, false);
2122
+ for (const item of ordered) if (item.kind === "quad") r3d$1.drawTextureQuad(reflPass, reflCamBind, reflLightsBind, item.texture, item.opts, false);
2123
+ else if (item.kind === "slug") r3d$1.drawSlugText(reflPass, reflCamBind, reflLightsBind, item.batches, item.opts, item.stackBase, false);
2124
+ else if (item.kind === "mesh") r3d$1.drawMesh3D(reflPass, reflCamBind, reflLightsBind, item.meshBuffers ?? item.mesh, item.texture, item.opts, false);
2095
2125
  reflPass.end();
2096
- blurredReflectionTex = r3d.blurReflection(encoder, reflTex, floorSpec.roughness ?? .35);
2126
+ blurredReflectionTex = r3d$1.blurReflection(encoder, reflTex, floorSpec.roughness ?? .35);
2097
2127
  }
2098
- const { pass: pass3d, cameraBindGroup, cameraBuffer, lightsBindGroup } = r3d.beginPass(encoder, scene3dView, nativeWidth, nativeHeight, camera, "clear", {
2128
+ const { pass: pass3d, cameraBindGroup, cameraBuffer, lightsBindGroup } = r3d$1.beginPass(encoder, scene3dView, nativeWidth, nativeHeight, camera, "clear", {
2099
2129
  r: 0,
2100
2130
  g: 0,
2101
2131
  b: 0,
@@ -2104,23 +2134,36 @@ const CompositorWebGPURenderer = async (args) => {
2104
2134
  environment: sceneEnvironment,
2105
2135
  shadow: shadow.length ? shadow : null
2106
2136
  }, Boolean(sceneBloom));
2107
- if (floorSpec && blurredReflectionTex) r3d.drawFloor(pass3d, cameraBindGroup, lightsBindGroup, blurredReflectionTex, floorSpec, dofEnabled, Boolean(sceneBloom));
2108
- for (const item of ordered) if (item.kind === "quad") r3d.drawTextureQuad(pass3d, cameraBindGroup, lightsBindGroup, item.texture, item.opts, dofEnabled);
2109
- else if (item.kind === "slug") r3d.drawSlugText(pass3d, cameraBindGroup, lightsBindGroup, item.batches, item.opts, item.stackBase, dofEnabled);
2110
- else if (item.kind === "mesh") r3d.drawMesh3D(pass3d, cameraBindGroup, lightsBindGroup, item.meshBuffers ?? item.mesh, item.texture, isGlass(item) ? {
2137
+ if (floorSpec && blurredReflectionTex) r3d$1.drawFloor(pass3d, cameraBindGroup, lightsBindGroup, blurredReflectionTex, floorSpec, geometryEnabled, Boolean(sceneBloom));
2138
+ for (const item of ordered) if (item.kind === "quad") r3d$1.drawTextureQuad(pass3d, cameraBindGroup, lightsBindGroup, item.texture, item.opts, geometryEnabled);
2139
+ else if (item.kind === "slug") r3d$1.drawSlugText(pass3d, cameraBindGroup, lightsBindGroup, item.batches, item.opts, item.stackBase, geometryEnabled);
2140
+ else if (item.kind === "mesh") r3d$1.drawMesh3D(pass3d, cameraBindGroup, lightsBindGroup, item.meshBuffers ?? item.mesh, item.texture, isGlass(item) ? {
2111
2141
  ...item.opts,
2112
2142
  backdrop: curTex
2113
- } : item.opts, dofEnabled);
2143
+ } : item.opts, geometryEnabled);
2114
2144
  pass3d.end();
2115
2145
  let final3dTex = scene3dTex;
2146
+ if (outlines && linearDepthTex) {
2147
+ if (dofEnabled) r3d$1.resolveGeometry(encoder, linearDepthTex);
2148
+ const outlinedTex = ctx.renderer.getTemporaryTexture(nativeWidth, nativeHeight, [
2149
+ curTex,
2150
+ targetTexture,
2151
+ scene3dTex,
2152
+ linearDepthTex,
2153
+ ...curExcludes
2154
+ ]);
2155
+ r3d$1.applyOutlines(encoder, scene3dTex, linearDepthTex, outlinedTex.createView(), camera, outlines, sceneEnvironment?.fog);
2156
+ final3dTex = outlinedTex;
2157
+ }
2116
2158
  if (dofEnabled && linearDepthTex) {
2117
2159
  const dofResultTex = ctx.renderer.getTemporaryTexture(nativeWidth, nativeHeight, [
2118
2160
  curTex,
2119
2161
  targetTexture,
2120
2162
  scene3dTex,
2163
+ final3dTex,
2121
2164
  ...curExcludes
2122
2165
  ]);
2123
- r3d.applyDepthOfField(encoder, scene3dTex, linearDepthTex, dofResultTex.createView(), cameraBuffer);
2166
+ r3d$1.applyDepthOfField(encoder, final3dTex, linearDepthTex, dofResultTex.createView(), cameraBuffer);
2124
2167
  final3dTex = dofResultTex;
2125
2168
  }
2126
2169
  if (sceneBloom) {
@@ -2131,7 +2174,7 @@ const CompositorWebGPURenderer = async (args) => {
2131
2174
  scene3dTex,
2132
2175
  ...curExcludes
2133
2176
  ]);
2134
- r3d.applyBloom(encoder, final3dTex, bloomTex, sceneBloom, r3d.hdrSource());
2177
+ r3d$1.applyBloom(encoder, final3dTex, bloomTex, sceneBloom, r3d$1.hdrSource());
2135
2178
  final3dTex = bloomTex;
2136
2179
  }
2137
2180
  const nextTex = ctx.renderer.composite(encoder, curTex, final3dTex, "normal", [targetTexture, ...curExcludes]);
@@ -2344,7 +2387,7 @@ const CompositorWebGPURenderer = async (args) => {
2344
2387
  if (durationFrames !== void 0 && shiftedFrame >= startFrame + durationFrames) return;
2345
2388
  }
2346
2389
  if (kind === "model3d") {
2347
- const r3d = getRenderer3D(ctx.device, ctx.renderer.format ?? "rgba8unorm", sampleCount3d);
2390
+ const r3d$1 = getRenderer3D(ctx.device, ctx.renderer.format ?? "rgba8unorm", sampleCount3d);
2348
2391
  let modelSrc = lop.modelData ?? lop.src;
2349
2392
  if (!modelSrc && lop.text3dOptions) {
2350
2393
  const tOpts = lop.text3dOptions;
@@ -2364,7 +2407,7 @@ const CompositorWebGPURenderer = async (args) => {
2364
2407
  if (!modelSrc) return;
2365
2408
  let model;
2366
2409
  try {
2367
- model = typeof modelSrc === "object" && modelSrc !== null && "meshes" in modelSrc ? modelSrc : await r3d.loadModelAsync(modelSrc, lop.modelFormat ?? "auto", {
2410
+ model = typeof modelSrc === "object" && modelSrc !== null && "meshes" in modelSrc ? modelSrc : await r3d$1.loadModelAsync(modelSrc, lop.modelFormat ?? "auto", {
2368
2411
  center: lop.center,
2369
2412
  normalizeSize: lop.normalizeSize
2370
2413
  });
@@ -2433,7 +2476,7 @@ const CompositorWebGPURenderer = async (args) => {
2433
2476
  else if (m.modelData && "meshes" in m.modelData) vModel = m.modelData;
2434
2477
  else if (m.primitive3d) vModel = getPrimitiveGeometry(m.primitive3d);
2435
2478
  else if (m.src) try {
2436
- vModel = r3d.loadModel(m.src, m.modelFormat ?? "auto", {
2479
+ vModel = r3d$1.loadModel(m.src, m.modelFormat ?? "auto", {
2437
2480
  center: m.center,
2438
2481
  normalizeSize: m.normalizeSize
2439
2482
  });
@@ -2658,7 +2701,7 @@ const CompositorWebGPURenderer = async (args) => {
2658
2701
  if (bCount === 0) continue;
2659
2702
  const v = variants[k];
2660
2703
  const activeSlice = bCount === bucketCounts[k] ? bucketItems[k] : bucketItems[k].subarray(0, bCount * 16);
2661
- const instanceBuffer = r3d.uploadInstanceData(activeSlice);
2704
+ const instanceBuffer = r3d$1.uploadInstanceData(activeSlice);
2662
2705
  const bounds = Number.isFinite(bucketBounds[k].min[0]) ? bucketBounds[k] : void 0;
2663
2706
  for (const mesh of v.meshes) {
2664
2707
  const mat = mesh.materialName ? v.materials[mesh.materialName] : void 0;
@@ -2682,7 +2725,7 @@ const CompositorWebGPURenderer = async (args) => {
2682
2725
  pending3DItems.push({
2683
2726
  kind: "mesh",
2684
2727
  mesh,
2685
- texture: mat ? await r3d.materialTexture(mat) : void 0,
2728
+ texture: mat ? await r3d$1.materialTexture(mat) : void 0,
2686
2729
  opts: meshOpts
2687
2730
  });
2688
2731
  }
@@ -2798,7 +2841,7 @@ const CompositorWebGPURenderer = async (args) => {
2798
2841
  else if (m.modelData && "meshes" in m.modelData) vModel = m.modelData;
2799
2842
  else if (m.primitive3d) vModel = getPrimitiveGeometry(m.primitive3d);
2800
2843
  else if (m.src) try {
2801
- vModel = r3d.loadModel(m.src, m.modelFormat ?? "auto", {
2844
+ vModel = r3d$1.loadModel(m.src, m.modelFormat ?? "auto", {
2802
2845
  center: m.center,
2803
2846
  normalizeSize: m.normalizeSize
2804
2847
  });
@@ -2903,7 +2946,7 @@ const CompositorWebGPURenderer = async (args) => {
2903
2946
  };
2904
2947
  let swarmState = swarmStateMap.get(lop);
2905
2948
  if (!swarmState || swarmState.device !== ctx.device) {
2906
- swarmState = r3d.swarm3dPipeline.createState(staticConfig);
2949
+ swarmState = r3d$1.swarm3dPipeline.createState(staticConfig);
2907
2950
  swarmStateMap.set(lop, swarmState);
2908
2951
  }
2909
2952
  const targetF = shiftedFrame ?? 0;
@@ -2993,7 +3036,7 @@ const CompositorWebGPURenderer = async (args) => {
2993
3036
  emitterPos
2994
3037
  };
2995
3038
  };
2996
- r3d.swarm3dPipeline.advance(swarmState, staticConfig, targetF, fps || 30, frameSampler);
3039
+ r3d$1.swarm3dPipeline.advance(swarmState, staticConfig, targetF, fps || 30, frameSampler);
2997
3040
  if (variants.length > 0) {
2998
3041
  const sliceCount = swarmState.sliceCount;
2999
3042
  for (let vIdx = 0; vIdx < variants.length; vIdx++) {
@@ -3021,7 +3064,7 @@ const CompositorWebGPURenderer = async (args) => {
3021
3064
  pending3DItems.push({
3022
3065
  kind: "mesh",
3023
3066
  mesh,
3024
- texture: mat ? await r3d.materialTexture(mat) : void 0,
3067
+ texture: mat ? await r3d$1.materialTexture(mat) : void 0,
3025
3068
  opts: meshOpts
3026
3069
  });
3027
3070
  }
@@ -3051,7 +3094,7 @@ const CompositorWebGPURenderer = async (args) => {
3051
3094
  pending3DItems.push({
3052
3095
  kind: "mesh",
3053
3096
  mesh,
3054
- texture: mat ? await r3d.materialTexture(mat) : void 0,
3097
+ texture: mat ? await r3d$1.materialTexture(mat) : void 0,
3055
3098
  opts: sparkOpts
3056
3099
  });
3057
3100
  }
@@ -3260,11 +3303,11 @@ const CompositorWebGPURenderer = async (args) => {
3260
3303
  thickness: target?.thickness ?? lop.thickness,
3261
3304
  audioDeform: meshAudioDeform
3262
3305
  };
3263
- if (mat) meshOpts.maps = await r3d.materialMaps(mat);
3306
+ if (mat) meshOpts.maps = await r3d$1.materialMaps(mat);
3264
3307
  pending3DItems.push({
3265
3308
  kind: "mesh",
3266
3309
  mesh,
3267
- texture: mat ? await r3d.materialTexture(mat) : void 0,
3310
+ texture: mat ? await r3d$1.materialTexture(mat) : void 0,
3268
3311
  opts: meshOpts
3269
3312
  });
3270
3313
  }
@@ -3324,14 +3367,17 @@ const CompositorWebGPURenderer = async (args) => {
3324
3367
  padX = Math.max(80, Math.ceil(rect.width * .2));
3325
3368
  padY = Math.max(50, Math.ceil(rect.height * .5));
3326
3369
  }
3370
+ if (kind === "text" && !isPathText) {
3371
+ const ink = textInkOutset(target, lop);
3372
+ padX = Math.max(padX, ink);
3373
+ padY = Math.max(padY, ink);
3374
+ }
3327
3375
  const layerW = isPathText ? targetW : rect.width + padX * 2;
3328
3376
  const layerH = isPathText ? targetH : rect.height + padY * 2;
3329
- if (!isPathText && hasKineticAnimators) {
3330
- localX -= padX;
3331
- localY -= padY;
3332
- }
3333
- const anchorX = lop.anchorX ?? .5;
3334
- const anchorY = lop.anchorY ?? .5;
3377
+ localX -= padX;
3378
+ localY -= padY;
3379
+ const anchorX = isPathText ? (lop.anchorX ?? .5) * rect.width / layerW : (padX + (lop.anchorX ?? .5) * rect.width) / layerW;
3380
+ const anchorY = isPathText ? (lop.anchorY ?? .5) * rect.height / layerH : (padY + (lop.anchorY ?? .5) * rect.height) / layerH;
3335
3381
  const localMatrix = toDOMMatrix(buildLayerMatrix({
3336
3382
  x: localX,
3337
3383
  y: localY,
@@ -3341,8 +3387,8 @@ const CompositorWebGPURenderer = async (args) => {
3341
3387
  scale: scale$1,
3342
3388
  scaleX,
3343
3389
  scaleY,
3344
- anchorX: isPathText ? anchorX * rect.width / layerW : anchorX,
3345
- anchorY: isPathText ? anchorY * rect.height / layerH : anchorY
3390
+ anchorX,
3391
+ anchorY
3346
3392
  }));
3347
3393
  const layerMatrix = parentMatrix.multiply(localMatrix);
3348
3394
  const blendMode = lop.blendMode || "normal";
@@ -3354,8 +3400,8 @@ const CompositorWebGPURenderer = async (args) => {
3354
3400
  const rotateZ = target?.rotateZ ?? lop.rotateZ ?? 0;
3355
3401
  const translateZ = target?.translateZ ?? lop.translateZ ?? 0;
3356
3402
  const perspective = target?.perspective ?? lop.perspective ?? 0;
3357
- const perspectiveOriginX = target?.perspectiveOriginX ?? lop.perspectiveOriginX ?? lop.anchorX ?? .5;
3358
- const perspectiveOriginY = target?.perspectiveOriginY ?? lop.perspectiveOriginY ?? lop.anchorY ?? .5;
3403
+ const perspectiveOriginX = target?.perspectiveOriginX ?? lop.perspectiveOriginX ?? anchorX;
3404
+ const perspectiveOriginY = target?.perspectiveOriginY ?? lop.perspectiveOriginY ?? anchorY;
3359
3405
  const backfaceVisibility = target?.backfaceVisibility ?? lop.backfaceVisibility ?? "visible";
3360
3406
  let quad3D = null;
3361
3407
  if (is3D) {
@@ -3469,30 +3515,6 @@ const CompositorWebGPURenderer = async (args) => {
3469
3515
  }, { opacity: 1 });
3470
3516
  borderPass.end();
3471
3517
  }
3472
- let modelMatrix;
3473
- if (parent3DMatrix) {
3474
- let localM = Matrix4Math.identity();
3475
- const childX = target?.x ?? lop.x ?? 0;
3476
- const childY = target?.y ?? lop.y ?? 0;
3477
- const childZ = target?.z ?? lop.z ?? 0;
3478
- localM = Matrix4Math.multiply(localM, Matrix4Math.translate(childX, childY, childZ));
3479
- const rxRad = (target?.rotateX ?? lop.rotateX ?? 0) * Math.PI / 180;
3480
- const ryRad = (target?.rotateY ?? lop.rotateY ?? 0) * Math.PI / 180;
3481
- const rzRad = ((target?.rotateZ ?? lop.rotateZ ?? 0) !== 0 ? target?.rotateZ ?? lop.rotateZ ?? 0 : rotation) * (Math.PI / 180);
3482
- if (rzRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateZ(rzRad));
3483
- if (ryRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateY(ryRad));
3484
- if (rxRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateX(rxRad));
3485
- const sx = layerW * scale$1 * scaleX;
3486
- const sy = layerH * scale$1 * scaleY;
3487
- const sz = target?.scaleZ ?? lop.scaleZ ?? 1;
3488
- localM = Matrix4Math.multiply(localM, Matrix4Math.scale(sx, sy, sz));
3489
- const ax = lop.anchorX ?? .5;
3490
- const ay = lop.anchorY ?? .5;
3491
- const pivotX = .5 - ax;
3492
- const pivotY = .5 - ay;
3493
- if (pivotX !== 0 || pivotY !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.translate(pivotX, pivotY, 0));
3494
- modelMatrix = Matrix4Math.multiply(parent3DMatrix, localM);
3495
- }
3496
3518
  const quadOpts = {
3497
3519
  position: [
3498
3520
  localX + layerW * .5,
@@ -3525,9 +3547,19 @@ const CompositorWebGPURenderer = async (args) => {
3525
3547
  ambientIntensity: target?.ambientIntensity ?? lop.ambientIntensity,
3526
3548
  metallic: target?.metallic ?? lop.metallic,
3527
3549
  ...surfaceProps(target, lop),
3528
- ...modelMatrix && { modelMatrix },
3529
3550
  ...reliefOpts(lop.id, localX, localY, layerW, layerH)
3530
3551
  };
3552
+ if (parent3DMatrix) {
3553
+ const r3d$1 = getRenderer3D(ctx.device, ctx.renderer.format ?? "rgba8unorm", sampleCount3d);
3554
+ quadOpts.modelMatrix = Matrix4Math.multiply(parent3DMatrix, r3d$1.quadModelMatrix({
3555
+ ...quadOpts,
3556
+ position: [
3557
+ target?.x ?? lop.x ?? 0,
3558
+ target?.y ?? lop.y ?? 0,
3559
+ target?.z ?? lop.z ?? 0
3560
+ ]
3561
+ }));
3562
+ }
3531
3563
  pending3DItems.push({
3532
3564
  kind: "quad",
3533
3565
  texture: activeGroupTex$1,
@@ -3637,7 +3669,7 @@ const CompositorWebGPURenderer = async (args) => {
3637
3669
  finalView: activeView
3638
3670
  };
3639
3671
  }
3640
- const shouldClip = lop.overflow !== "visible";
3672
+ const shouldClip = (target?.overflow ?? lop.overflow) === "hidden";
3641
3673
  const scissorRect = shouldClip ? computeContainerScissor(layerMatrix, layerW, layerH) : null;
3642
3674
  const clipRadius = shouldClip ? Math.min(target?.borderRadius ?? lop.borderRadius ?? 0, layerW / 2, layerH / 2) : 0;
3643
3675
  if ((kind === "flex" || kind === "block") && (!Array.isArray(lop.effects) || lop.effects.length === 0) && clipRadius <= 0 && !shouldPaintContainerBackground(kind, lop.background) && layerOpacity === 1 && blendMode === "normal" && !lop.borderWidth && !lop.borderColor && (typeof lop.relighting !== "object" || !lop.relighting) && (typeof lop.relight !== "object" || !lop.relight) && (typeof target?.relighting !== "object" || !target?.relighting) && (typeof target?.relight !== "object" || !target?.relight) && (typeof lop.deflicker !== "object" || !lop.deflicker) && (typeof target?.deflicker !== "object" || !target?.deflicker)) {
@@ -4158,7 +4190,7 @@ const CompositorWebGPURenderer = async (args) => {
4158
4190
  const strokeWidth = target?.strokeWidth ?? lop.strokeWidth ?? 0;
4159
4191
  const strokeColor = target?.strokeColor ?? lop.strokeColor ?? lop.stroke ?? "#ffffff";
4160
4192
  const strokeLineCap = lop.strokeLineCap ?? "round";
4161
- const strokeDashArray = lop.strokeDashArray;
4193
+ const strokeDashArray = parseDashArray(lop.strokeDashArray);
4162
4194
  const strokeDashOffset = target?.strokeDashOffset ?? lop.strokeDashOffset ?? 0;
4163
4195
  const trimStart = target?.trimStart ?? lop.trimStart ?? 0;
4164
4196
  const trimEnd = target?.trimEnd ?? lop.trimEnd ?? 1;
@@ -4348,30 +4380,6 @@ const CompositorWebGPURenderer = async (args) => {
4348
4380
  }, { opacity: 1 });
4349
4381
  borderPass.end();
4350
4382
  }
4351
- let modelMatrix;
4352
- if (parent3DMatrix) {
4353
- let localM = Matrix4Math.identity();
4354
- const childX = target?.x ?? lop.x ?? 0;
4355
- const childY = target?.y ?? lop.y ?? 0;
4356
- const childZ = target?.z ?? lop.z ?? 0;
4357
- localM = Matrix4Math.multiply(localM, Matrix4Math.translate(childX, childY, childZ));
4358
- const rxRad = (target?.rotateX ?? lop.rotateX ?? 0) * Math.PI / 180;
4359
- const ryRad = (target?.rotateY ?? lop.rotateY ?? 0) * Math.PI / 180;
4360
- const rzRad = ((target?.rotateZ ?? lop.rotateZ ?? 0) !== 0 ? target?.rotateZ ?? lop.rotateZ ?? 0 : rotation) * (Math.PI / 180);
4361
- if (rzRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateZ(rzRad));
4362
- if (ryRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateY(ryRad));
4363
- if (rxRad !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.rotateX(rxRad));
4364
- const sx = layerW * scale$1 * scaleX;
4365
- const sy = layerH * scale$1 * scaleY;
4366
- const sz = target?.scaleZ ?? lop.scaleZ ?? 1;
4367
- localM = Matrix4Math.multiply(localM, Matrix4Math.scale(sx, sy, sz));
4368
- const ax = lop.anchorX ?? .5;
4369
- const ay = lop.anchorY ?? .5;
4370
- const pivotX = .5 - ax;
4371
- const pivotY = .5 - ay;
4372
- if (pivotX !== 0 || pivotY !== 0) localM = Matrix4Math.multiply(localM, Matrix4Math.translate(pivotX, pivotY, 0));
4373
- modelMatrix = Matrix4Math.multiply(parent3DMatrix, localM);
4374
- }
4375
4383
  const quadOpts = {
4376
4384
  position: [
4377
4385
  localX + layerW * .5,
@@ -4404,9 +4412,19 @@ const CompositorWebGPURenderer = async (args) => {
4404
4412
  ambientIntensity: target?.ambientIntensity ?? lop.ambientIntensity,
4405
4413
  metallic: target?.metallic ?? lop.metallic,
4406
4414
  ...surfaceProps(target, lop),
4407
- ...modelMatrix && { modelMatrix },
4408
4415
  ...reliefOpts(lop.id, localX, localY, layerW, layerH)
4409
4416
  };
4417
+ if (parent3DMatrix) {
4418
+ const r3d$1 = getRenderer3D(ctx.device, ctx.renderer.format ?? "rgba8unorm", sampleCount3d);
4419
+ quadOpts.modelMatrix = Matrix4Math.multiply(parent3DMatrix, r3d$1.quadModelMatrix({
4420
+ ...quadOpts,
4421
+ position: [
4422
+ target?.x ?? lop.x ?? 0,
4423
+ target?.y ?? lop.y ?? 0,
4424
+ target?.z ?? lop.z ?? 0
4425
+ ]
4426
+ }));
4427
+ }
4410
4428
  const quadHasContent = layerHasRaster || Boolean(quadOpts.borderWidth && quadOpts.borderWidth > 0 && quadOpts.borderColor);
4411
4429
  if (!glyphBatches || quadHasContent) pending3DItems.push({
4412
4430
  kind: "quad",
@@ -4699,17 +4717,15 @@ const compositorLayerAudioProcessor = async (channels, sampleRate, virtualMedia,
4699
4717
  const muted = resolveBoolean(op.muted, false);
4700
4718
  const animation = op.animation;
4701
4719
  const fps = ctx?.fps ?? 24;
4702
- const tracks = animation?.tracks || [];
4703
- const hasVolumeKeys = tracks.some((t) => t.prop === "volume" && t.keyframes && t.keyframes.length > 0);
4704
- const hasMutedKeys = tracks.some((t) => t.prop === "muted" && t.keyframes && t.keyframes.length > 0);
4705
- if (!hasVolumeKeys && !hasMutedKeys) return;
4720
+ const keyed = keyedGain(op);
4721
+ if (!keyed.volume && !keyed.muted) return;
4706
4722
  const { tl, stub } = compileLayerTimeline(op.id || op.inputHandleId || "layer", animation, volume, muted, fps);
4707
4723
  const startTimeSec = (ctx?.elapsedMs ?? 0) / 1e3;
4708
4724
  const subChunkSize = 128;
4709
4725
  tl.seek(startTimeSec);
4710
4726
  let lastVol = stub.volume;
4711
4727
  let lastMuted = stub.muted;
4712
- const baseGain = muted ? 0 : volume;
4728
+ const applied = (keyed.volume ? 1 : volume) * (!keyed.muted && muted ? 0 : 1);
4713
4729
  for (let i = 0; i < numSamples; i += subChunkSize) {
4714
4730
  const nextI = Math.min(numSamples, i + subChunkSize);
4715
4731
  const tNext = startTimeSec + nextI / sampleRate;
@@ -4720,7 +4736,7 @@ const compositorLayerAudioProcessor = async (channels, sampleRate, virtualMedia,
4720
4736
  const p = (j - i) / (nextI - i);
4721
4737
  const currentVol = Math.min(1, Math.max(0, lastVol + (nextVol - lastVol) * p));
4722
4738
  const finalGain = (j - i < (nextI - i) / 2 ? lastMuted : nextMuted) ? 0 : currentVol;
4723
- const relativeGain = baseGain === 0 ? 0 : finalGain / baseGain;
4739
+ const relativeGain = applied === 0 ? 0 : finalGain / applied;
4724
4740
  if (relativeGain !== 1) for (let c = 0; c < numChannels; c++) channels[c][j] *= relativeGain;
4725
4741
  }
4726
4742
  lastVol = nextVol;
@@ -4732,4 +4748,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CompositorWebGPURendere
4732
4748
 
4733
4749
  //#endregion
4734
4750
  export { Transform3DMath, renderers_default as default, has3DTransform };
4735
- //# sourceMappingURL=renderer-vll8LX0I.mjs.map
4751
+ //# sourceMappingURL=renderer-BVIXKfbC.mjs.map