framefields 2.13.1 → 2.15.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 (339) hide show
  1. package/NOTICE.md +5 -1
  2. package/dist/audio/index.d.mts +5 -5
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-DIvi6hTD.mjs → audio-6TfPlfl4.mjs} +3 -3
  5. package/dist/{audio-DIvi6hTD.mjs.map → audio-6TfPlfl4.mjs.map} +1 -1
  6. package/dist/{audio-C4B9p_yq.d.mts → audio-7oqTUi4G.d.mts} +3 -3
  7. package/dist/{audio-C4B9p_yq.d.mts.map → audio-7oqTUi4G.d.mts.map} +1 -1
  8. package/dist/cli/check-worker.mjs +44 -44
  9. package/dist/cli.mjs +1 -1
  10. package/dist/cloud/index.d.mts.map +1 -1
  11. package/dist/cloud/index.mjs +1 -1
  12. package/dist/{cloud-Cj1TIme8.mjs → cloud-jnk1hPYf.mjs} +2 -2
  13. package/dist/{cloud-Cj1TIme8.mjs.map → cloud-jnk1hPYf.mjs.map} +1 -1
  14. package/dist/components/index.d.mts +13 -13
  15. package/dist/components/index.mjs +43 -43
  16. package/dist/{dist-Kbf-JTry.mjs → dist-BtI6ukB5.mjs} +2 -2
  17. package/dist/{dist-Kbf-JTry.mjs.map → dist-BtI6ukB5.mjs.map} +1 -1
  18. package/dist/{dist-CCrYOkcc.mjs → dist-COOpgG9G.mjs} +4 -3
  19. package/dist/{dist-CCrYOkcc.mjs.map → dist-COOpgG9G.mjs.map} +1 -1
  20. package/dist/{dist-DtPPPsZV.mjs → dist-XqlFM2a8.mjs} +14063 -5308
  21. package/dist/dist-XqlFM2a8.mjs.map +1 -0
  22. package/dist/{dist-CiTgmfUw.mjs → dist-f1zkl69f.mjs} +4 -4
  23. package/dist/dist-f1zkl69f.mjs.map +1 -0
  24. package/dist/{dist-B_rSWeOz.mjs → dist-umQOWz0a.mjs} +1 -1
  25. package/dist/effects/index.d.mts +5 -5
  26. package/dist/effects/index.mjs +35 -35
  27. package/dist/{effects-B-L3rLs6.mjs → effects-DlRMovU5.mjs} +2 -2
  28. package/dist/{effects-B-L3rLs6.mjs.map → effects-DlRMovU5.mjs.map} +1 -1
  29. package/dist/fonts/index.d.mts +1 -1
  30. package/dist/fonts/index.mjs +2 -2
  31. package/dist/{fonts-k5ll8NTE.mjs → fonts-BWYcXjyK.mjs} +3 -3
  32. package/dist/fonts-BWYcXjyK.mjs.map +1 -0
  33. package/dist/{gpu-D2HT3KcE.mjs → gpu-CH1PdM4T.mjs} +2 -2
  34. package/dist/{gpu-D2HT3KcE.mjs.map → gpu-CH1PdM4T.mjs.map} +1 -1
  35. package/dist/{index-rtCXNxGO.d.mts → index-BHTycml5.d.mts} +2 -2
  36. package/dist/{index-rtCXNxGO.d.mts.map → index-BHTycml5.d.mts.map} +1 -1
  37. package/dist/{index-BFTtXosj.d.mts → index-BVd6nXd5.d.mts} +2 -2
  38. package/dist/{index-BFTtXosj.d.mts.map → index-BVd6nXd5.d.mts.map} +1 -1
  39. package/dist/{index-ByhlTwxh.d.mts → index-BcxxxwhV.d.mts} +5 -5
  40. package/dist/{index-ByhlTwxh.d.mts.map → index-BcxxxwhV.d.mts.map} +1 -1
  41. package/dist/{index-CnZhBlob.d.mts → index-BnB_Ou2y.d.mts} +2 -2
  42. package/dist/index-BnB_Ou2y.d.mts.map +1 -0
  43. package/dist/{index-a6JrbAK0.d.mts → index-C-V6CAhP.d.mts} +32 -2
  44. package/dist/index-C-V6CAhP.d.mts.map +1 -0
  45. package/dist/{index-DBh3WphX.d.mts → index-CMhkkc56.d.mts} +44 -12
  46. package/dist/index-CMhkkc56.d.mts.map +1 -0
  47. package/dist/{index-BGlaws7-.d.mts → index-CYVpYGM-.d.mts} +3 -3
  48. package/dist/{index-BGlaws7-.d.mts.map → index-CYVpYGM-.d.mts.map} +1 -1
  49. package/dist/{index-DQ1U3HC3.d.mts → index-DhL7ckvs.d.mts} +7 -7
  50. package/dist/index-DhL7ckvs.d.mts.map +1 -0
  51. package/dist/{index-CtKUQ2VG.d.mts → index-DkAjKnhW.d.mts} +1487 -533
  52. package/dist/index-DkAjKnhW.d.mts.map +1 -0
  53. package/dist/{index-B08eSpaI.d.mts → index-RILu3ULT.d.mts} +2 -2
  54. package/dist/{index-B08eSpaI.d.mts.map → index-RILu3ULT.d.mts.map} +1 -1
  55. package/dist/{index-C5sgRLlG.d.mts → index-TCtdSXd7.d.mts} +3 -1
  56. package/dist/index-TCtdSXd7.d.mts.map +1 -0
  57. package/dist/{index-C2yaponf.d.mts → index-s2qQ8ifZ.d.mts} +911 -57
  58. package/dist/index-s2qQ8ifZ.d.mts.map +1 -0
  59. package/dist/index.d.mts +15 -15
  60. package/dist/index.mjs +52 -52
  61. package/dist/preview/index.d.mts +5 -5
  62. package/dist/preview/index.mjs +10 -10
  63. package/dist/preview-BeGF1Bb1.mjs +1002 -0
  64. package/dist/preview-BeGF1Bb1.mjs.map +1 -0
  65. package/dist/preview-engine/audio.mjs +1 -1
  66. package/dist/preview-engine/{chunk-64L4GUOF.mjs → chunk-4F3DG6YB.mjs} +2 -2
  67. package/dist/preview-engine/chunk-A2OTOW3B.mjs +4694 -0
  68. package/dist/preview-engine/chunk-BR56TQBP.mjs +5 -0
  69. package/dist/preview-engine/{chunk-ADLIF544.mjs → chunk-H2XKXXAU.mjs} +1 -1
  70. package/dist/preview-engine/chunk-NDUODAY2.mjs +3 -0
  71. package/dist/preview-engine/{chunk-FZ4RD7HV.mjs → chunk-QAQJSWUT.mjs} +1 -1
  72. package/dist/preview-engine/chunk-SWRGQTVC.mjs +138 -0
  73. package/dist/preview-engine/{chunk-52X7SURQ.mjs → chunk-TEA3GVBJ.mjs} +1 -1
  74. package/dist/preview-engine/chunk-VM2ZBPLM.mjs +644 -0
  75. package/dist/preview-engine/{chunk-UBY2UYEL.mjs → chunk-XSHNQJ7L.mjs} +1 -1
  76. package/dist/preview-engine/components.mjs +1 -1
  77. package/dist/preview-engine/effects.mjs +1 -1
  78. package/dist/preview-engine/fonts.mjs +1 -1
  79. package/dist/preview-engine/framefields.mjs +1 -1
  80. package/dist/preview-engine/player.mjs +2 -2
  81. package/dist/preview-engine/{renderers-DU7KPFVV.mjs → renderers-6C7NWWDX.mjs} +1 -1
  82. package/dist/preview-engine/renderers-HHVGNMSJ.mjs +206 -0
  83. package/dist/preview-engine/{src-YXNX4MLK.mjs → src-RCNEKIRP.mjs} +1 -1
  84. package/dist/preview-page/index.html +19 -0
  85. package/dist/preview-page/main.css +1 -0
  86. package/dist/preview-page/main.js +327 -0
  87. package/dist/{program-BfiB9ttP.mjs → program-CMigyfso.mjs} +919 -58
  88. package/dist/program-CMigyfso.mjs.map +1 -0
  89. package/dist/renderer/index.d.mts +4 -4
  90. package/dist/renderer/index.mjs +2 -2
  91. package/dist/{renderer-CoC64eam.mjs → renderer-0GMEL_Zi.mjs} +3 -3
  92. package/dist/{renderer-CoC64eam.mjs.map → renderer-0GMEL_Zi.mjs.map} +1 -1
  93. package/dist/{renderer-CSu_vYPn.mjs → renderer-3Wv2ZBJG.mjs} +3 -3
  94. package/dist/{renderer-CSu_vYPn.mjs.map → renderer-3Wv2ZBJG.mjs.map} +1 -1
  95. package/dist/{renderer-Dv_iRIyx.mjs → renderer-4nXkaAWu.mjs} +1280 -285
  96. package/dist/renderer-4nXkaAWu.mjs.map +1 -0
  97. package/dist/{renderer-TfeohPxt.mjs → renderer-6SnfLXeg.mjs} +3 -3
  98. package/dist/{renderer-TfeohPxt.mjs.map → renderer-6SnfLXeg.mjs.map} +1 -1
  99. package/dist/{renderer-D0xM67cK.mjs → renderer-8gHw3O0P.mjs} +2 -2
  100. package/dist/{renderer-D0xM67cK.mjs.map → renderer-8gHw3O0P.mjs.map} +1 -1
  101. package/dist/{renderer-C64_B8It.mjs → renderer-AOBglZHC.mjs} +2 -2
  102. package/dist/{renderer-B10HDC13.mjs → renderer-B0bSARK3.mjs} +3 -3
  103. package/dist/{renderer-B10HDC13.mjs.map → renderer-B0bSARK3.mjs.map} +1 -1
  104. package/dist/{renderer-DWYmJSrl.mjs → renderer-B2_tuRfl.mjs} +2 -2
  105. package/dist/{renderer-DWYmJSrl.mjs.map → renderer-B2_tuRfl.mjs.map} +1 -1
  106. package/dist/{renderer-mDBoz0zT.mjs → renderer-B82FhkEr.mjs} +3 -3
  107. package/dist/{renderer-mDBoz0zT.mjs.map → renderer-B82FhkEr.mjs.map} +1 -1
  108. package/dist/{renderer-DYeNNc_G.mjs → renderer-B9lzA0PY.mjs} +3 -3
  109. package/dist/{renderer-DYeNNc_G.mjs.map → renderer-B9lzA0PY.mjs.map} +1 -1
  110. package/dist/{renderer-BGchUBW_.mjs → renderer-BBSIWSry.mjs} +2 -2
  111. package/dist/{renderer-BGchUBW_.mjs.map → renderer-BBSIWSry.mjs.map} +1 -1
  112. package/dist/{renderer-GIlQ9lZq.mjs → renderer-BEKDMxbi.mjs} +2 -2
  113. package/dist/{renderer-GIlQ9lZq.mjs.map → renderer-BEKDMxbi.mjs.map} +1 -1
  114. package/dist/renderer-BERGAxqA.mjs +5 -0
  115. package/dist/{renderer-Bw0O--gW.mjs → renderer-BF960HY8.mjs} +3 -3
  116. package/dist/{renderer-Bw0O--gW.mjs.map → renderer-BF960HY8.mjs.map} +1 -1
  117. package/dist/{renderer-BhcTYhaP.mjs → renderer-BFwyVxCu.mjs} +3 -3
  118. package/dist/{renderer-BhcTYhaP.mjs.map → renderer-BFwyVxCu.mjs.map} +1 -1
  119. package/dist/{renderer-DYlx7VHo.mjs → renderer-BNiwcI3-.mjs} +2 -2
  120. package/dist/{renderer-DYlx7VHo.mjs.map → renderer-BNiwcI3-.mjs.map} +1 -1
  121. package/dist/{renderer-B3_GddgJ.mjs → renderer-BPbVb2Q4.mjs} +2 -2
  122. package/dist/{renderer-B3_GddgJ.mjs.map → renderer-BPbVb2Q4.mjs.map} +1 -1
  123. package/dist/renderer-BQ_YkBMt.mjs +6 -0
  124. package/dist/{renderer-Y1kjtOto.mjs → renderer-BUWxlA8T.mjs} +3 -3
  125. package/dist/{renderer-Y1kjtOto.mjs.map → renderer-BUWxlA8T.mjs.map} +1 -1
  126. package/dist/renderer-BW0Tjsv9.mjs +5 -0
  127. package/dist/{renderer-DtFZbE1j.mjs → renderer-BX8liu-e.mjs} +2 -2
  128. package/dist/{renderer-BOlHW3Mi.mjs → renderer-BXIwDAr_.mjs} +2 -2
  129. package/dist/{renderer-BOlHW3Mi.mjs.map → renderer-BXIwDAr_.mjs.map} +1 -1
  130. package/dist/{renderer-DzON3wDZ.mjs → renderer-B_Hy1W-g.mjs} +3 -3
  131. package/dist/{renderer-DzON3wDZ.mjs.map → renderer-B_Hy1W-g.mjs.map} +1 -1
  132. package/dist/{renderer-BM19iK8v.mjs → renderer-Bb6cvSgh.mjs} +2 -2
  133. package/dist/{renderer-BM19iK8v.mjs.map → renderer-Bb6cvSgh.mjs.map} +1 -1
  134. package/dist/{renderer-D0h1hTOo.mjs → renderer-BdppwWC9.mjs} +2 -2
  135. package/dist/{renderer-D0h1hTOo.mjs.map → renderer-BdppwWC9.mjs.map} +1 -1
  136. package/dist/{renderer-BTwuM9u-.mjs → renderer-Bhc24HVe.mjs} +3 -3
  137. package/dist/{renderer-BTwuM9u-.mjs.map → renderer-Bhc24HVe.mjs.map} +1 -1
  138. package/dist/{renderer-BZX932Lj.mjs → renderer-BiNA2wF0.mjs} +2 -2
  139. package/dist/{renderer-BZX932Lj.mjs.map → renderer-BiNA2wF0.mjs.map} +1 -1
  140. package/dist/{renderer-CkTehyRX.mjs → renderer-BmoBgTp5.mjs} +3 -3
  141. package/dist/{renderer-CkTehyRX.mjs.map → renderer-BmoBgTp5.mjs.map} +1 -1
  142. package/dist/{renderer-B3un4Pdi.mjs → renderer-BmqFmCWS.mjs} +3 -3
  143. package/dist/{renderer-B3un4Pdi.mjs.map → renderer-BmqFmCWS.mjs.map} +1 -1
  144. package/dist/{renderer-CHCRcCKw.mjs → renderer-BnVwAObV.mjs} +2 -2
  145. package/dist/{renderer-CHCRcCKw.mjs.map → renderer-BnVwAObV.mjs.map} +1 -1
  146. package/dist/{renderer-Cv9CKKWG.mjs → renderer-BxttZHme.mjs} +2 -2
  147. package/dist/{renderer-Cv9CKKWG.mjs.map → renderer-BxttZHme.mjs.map} +1 -1
  148. package/dist/renderer-BzyPdUD1.mjs +5 -0
  149. package/dist/renderer-C0hM-mtY.mjs +5 -0
  150. package/dist/renderer-C6cyUTvk.mjs +5 -0
  151. package/dist/{renderer-B6bK9rXm.mjs → renderer-C8E4XsSg.mjs} +2 -2
  152. package/dist/{renderer-B6bK9rXm.mjs.map → renderer-C8E4XsSg.mjs.map} +1 -1
  153. package/dist/renderer-C8zY3pzk.mjs +5 -0
  154. package/dist/{renderer-4nsuReW2.mjs → renderer-C9U-LY50.mjs} +3 -3
  155. package/dist/{renderer-4nsuReW2.mjs.map → renderer-C9U-LY50.mjs.map} +1 -1
  156. package/dist/{renderer-BvBqTAtk.mjs → renderer-CB2JVu5x.mjs} +3 -3
  157. package/dist/{renderer-BvBqTAtk.mjs.map → renderer-CB2JVu5x.mjs.map} +1 -1
  158. package/dist/{renderer-CQ4h8n7p.mjs → renderer-CC4YBJ8Z.mjs} +3 -3
  159. package/dist/{renderer-CQ4h8n7p.mjs.map → renderer-CC4YBJ8Z.mjs.map} +1 -1
  160. package/dist/renderer-CEkSOyKu.mjs +5 -0
  161. package/dist/{renderer-zLi2qFGT.mjs → renderer-CIycc5O-.mjs} +2 -2
  162. package/dist/{renderer-zLi2qFGT.mjs.map → renderer-CIycc5O-.mjs.map} +1 -1
  163. package/dist/renderer-CJYtfa4x.mjs +5 -0
  164. package/dist/{renderer-yNWYqvvq.mjs → renderer-CJraQlV-.mjs} +2 -2
  165. package/dist/{renderer-yNWYqvvq.mjs.map → renderer-CJraQlV-.mjs.map} +1 -1
  166. package/dist/renderer-CKMtHGZh.mjs +5 -0
  167. package/dist/renderer-CLzicoiy.mjs +5 -0
  168. package/dist/renderer-CM2A4BHd.mjs +5 -0
  169. package/dist/{renderer-BrEeUw7T.mjs → renderer-COWGWtob.mjs} +2 -2
  170. package/dist/{renderer-BrEeUw7T.mjs.map → renderer-COWGWtob.mjs.map} +1 -1
  171. package/dist/{renderer-uER8kn7f.mjs → renderer-COxG2XGf.mjs} +2 -2
  172. package/dist/{renderer-uER8kn7f.mjs.map → renderer-COxG2XGf.mjs.map} +1 -1
  173. package/dist/{renderer-C4hd6Cqi.mjs → renderer-CQDCIsQm.mjs} +2 -2
  174. package/dist/{renderer-C4hd6Cqi.mjs.map → renderer-CQDCIsQm.mjs.map} +1 -1
  175. package/dist/{renderer-Cfx_FCSf.mjs → renderer-CRUeag8i.mjs} +3 -3
  176. package/dist/{renderer-Cfx_FCSf.mjs.map → renderer-CRUeag8i.mjs.map} +1 -1
  177. package/dist/{renderer-CXrnzihz.mjs → renderer-CWVput06.mjs} +3 -3
  178. package/dist/{renderer-CXrnzihz.mjs.map → renderer-CWVput06.mjs.map} +1 -1
  179. package/dist/renderer-CZlHjcxr.mjs +5 -0
  180. package/dist/{renderer-BmyFfvVA.mjs → renderer-CbbnBLOB.mjs} +3 -3
  181. package/dist/{renderer-BmyFfvVA.mjs.map → renderer-CbbnBLOB.mjs.map} +1 -1
  182. package/dist/renderer-CbimvSU8.mjs +5 -0
  183. package/dist/renderer-Ccvc63yd.mjs +5 -0
  184. package/dist/renderer-Cdp-SGfq.mjs +5 -0
  185. package/dist/renderer-CeTcSs3e.mjs +5 -0
  186. package/dist/{renderer-_J9JcCMR.mjs → renderer-CfLZein2.mjs} +3 -3
  187. package/dist/{renderer-_J9JcCMR.mjs.map → renderer-CfLZein2.mjs.map} +1 -1
  188. package/dist/{renderer-D-mX1EVA.mjs → renderer-Ch-q1O-q.mjs} +3 -3
  189. package/dist/{renderer-D-mX1EVA.mjs.map → renderer-Ch-q1O-q.mjs.map} +1 -1
  190. package/dist/{renderer-uzU6dsdR.mjs → renderer-Ch5JvJWl.mjs} +2 -2
  191. package/dist/{renderer-uzU6dsdR.mjs.map → renderer-Ch5JvJWl.mjs.map} +1 -1
  192. package/dist/{renderer-BZMh2io2.mjs → renderer-ChtEzq-R.mjs} +2 -2
  193. package/dist/{renderer-BZMh2io2.mjs.map → renderer-ChtEzq-R.mjs.map} +1 -1
  194. package/dist/{renderer-B2IUPjhw.mjs → renderer-Cj9nTC5l.mjs} +3 -3
  195. package/dist/{renderer-B2IUPjhw.mjs.map → renderer-Cj9nTC5l.mjs.map} +1 -1
  196. package/dist/{renderer-CdXBRdFf.mjs → renderer-CqT8HsSS.mjs} +2 -2
  197. package/dist/{renderer-CdXBRdFf.mjs.map → renderer-CqT8HsSS.mjs.map} +1 -1
  198. package/dist/{renderer-CldjJmRR.mjs → renderer-CuQjMhdV.mjs} +2 -2
  199. package/dist/renderer-CvNuu52U.mjs +5 -0
  200. package/dist/renderer-CwciC0oI.mjs +5 -0
  201. package/dist/renderer-CysLUbIr.mjs +5 -0
  202. package/dist/{renderer-BsrKj6Td.mjs → renderer-Cz30EVws.mjs} +2 -2
  203. package/dist/{renderer-BsrKj6Td.mjs.map → renderer-Cz30EVws.mjs.map} +1 -1
  204. package/dist/renderer-D3A22Vxb.mjs +5 -0
  205. package/dist/renderer-D5SY9EmA.mjs +5 -0
  206. package/dist/renderer-D8h3ZvaE.mjs +5 -0
  207. package/dist/renderer-DE-B6N9n.mjs +5 -0
  208. package/dist/renderer-DETZTI7t.mjs +5 -0
  209. package/dist/{renderer-CC22Djgi.mjs → renderer-DHoX-5U_.mjs} +3 -3
  210. package/dist/{renderer-CC22Djgi.mjs.map → renderer-DHoX-5U_.mjs.map} +1 -1
  211. package/dist/{renderer-HKv5cBdp.mjs → renderer-DOkm0Ycd.mjs} +2 -2
  212. package/dist/{renderer-HKv5cBdp.mjs.map → renderer-DOkm0Ycd.mjs.map} +1 -1
  213. package/dist/{renderer-fG8Jy8Rx.d.mts → renderer-DU3f6ZrS.d.mts} +2 -2
  214. package/dist/{renderer-fG8Jy8Rx.d.mts.map → renderer-DU3f6ZrS.d.mts.map} +1 -1
  215. package/dist/{renderer-C98XwEIr.mjs → renderer-DUzv-shq.mjs} +2 -2
  216. package/dist/{renderer-C98XwEIr.mjs.map → renderer-DUzv-shq.mjs.map} +1 -1
  217. package/dist/renderer-DWnDj0IM.mjs +5 -0
  218. package/dist/renderer-DcGUIbQF.mjs +5 -0
  219. package/dist/renderer-Dfq6FoNO.mjs +5 -0
  220. package/dist/renderer-DhasXW6S.mjs +3 -0
  221. package/dist/{renderer-BEuXJY-C.mjs → renderer-DhnOWnEA.mjs} +3 -3
  222. package/dist/{renderer-BEuXJY-C.mjs.map → renderer-DhnOWnEA.mjs.map} +1 -1
  223. package/dist/{renderer-BIKkxw_Z.mjs → renderer-Dhy1XHzz.mjs} +3 -3
  224. package/dist/{renderer-BIKkxw_Z.mjs.map → renderer-Dhy1XHzz.mjs.map} +1 -1
  225. package/dist/renderer-DjCvpsV_.mjs +5 -0
  226. package/dist/{renderer-pn52dzZz.mjs → renderer-DjJshz9Y.mjs} +2 -2
  227. package/dist/{renderer-pn52dzZz.mjs.map → renderer-DjJshz9Y.mjs.map} +1 -1
  228. package/dist/{renderer-DhGZ41hQ.mjs → renderer-DmTUIdus.mjs} +3 -3
  229. package/dist/{renderer-DhGZ41hQ.mjs.map → renderer-DmTUIdus.mjs.map} +1 -1
  230. package/dist/{renderer-D_m6Qbsi.mjs → renderer-Dq7AioJa.mjs} +2 -2
  231. package/dist/{renderer-D_m6Qbsi.mjs.map → renderer-Dq7AioJa.mjs.map} +1 -1
  232. package/dist/renderer-DrAaM6JD.mjs +5 -0
  233. package/dist/{renderer-D-GWBoVT.mjs → renderer-Dt4sqNEu.mjs} +2 -2
  234. package/dist/{renderer-D-GWBoVT.mjs.map → renderer-Dt4sqNEu.mjs.map} +1 -1
  235. package/dist/{renderer-DCrKEVjb.mjs → renderer-Dtcs4idV.mjs} +3 -3
  236. package/dist/{renderer-DCrKEVjb.mjs.map → renderer-Dtcs4idV.mjs.map} +1 -1
  237. package/dist/renderer-Dxlv8LYm.mjs +5 -0
  238. package/dist/{renderer-CO9vE3sd.mjs → renderer-Gj8SrE2W.mjs} +2 -2
  239. package/dist/{renderer-CO9vE3sd.mjs.map → renderer-Gj8SrE2W.mjs.map} +1 -1
  240. package/dist/{renderer-DvHi_wXE.mjs → renderer-KfnXDJS0.mjs} +3 -3
  241. package/dist/{renderer-DvHi_wXE.mjs.map → renderer-KfnXDJS0.mjs.map} +1 -1
  242. package/dist/{renderer-7xQmXXMH.mjs → renderer-MXVlg4p5.mjs} +3 -3
  243. package/dist/{renderer-7xQmXXMH.mjs.map → renderer-MXVlg4p5.mjs.map} +1 -1
  244. package/dist/{renderer-YONlI6W-.mjs → renderer-N2b6QZ1E.mjs} +3 -3
  245. package/dist/{renderer-YONlI6W-.mjs.map → renderer-N2b6QZ1E.mjs.map} +1 -1
  246. package/dist/renderer-Pb43OO2t.mjs +5 -0
  247. package/dist/{renderer-DNynPM6X.mjs → renderer-Q7gDzm8c.mjs} +2 -2
  248. package/dist/{renderer-DNynPM6X.mjs.map → renderer-Q7gDzm8c.mjs.map} +1 -1
  249. package/dist/{renderer-BEhZiOT4.mjs → renderer-RCiANtRV.mjs} +2 -2
  250. package/dist/{renderer-BEhZiOT4.mjs.map → renderer-RCiANtRV.mjs.map} +1 -1
  251. package/dist/{renderer-Dm57W73p.mjs → renderer-Sig9nZcI.mjs} +2 -2
  252. package/dist/renderer-VQbm-cGr.mjs +5 -0
  253. package/dist/{renderer-DiZkZ0Pr.mjs → renderer-fabBgwQX.mjs} +3 -3
  254. package/dist/{renderer-DiZkZ0Pr.mjs.map → renderer-fabBgwQX.mjs.map} +1 -1
  255. package/dist/{renderer-Bw-_GZVw.mjs → renderer-g-0PCNoo.mjs} +3 -3
  256. package/dist/{renderer-Bw-_GZVw.mjs.map → renderer-g-0PCNoo.mjs.map} +1 -1
  257. package/dist/{renderer-QbSrnPZU.mjs → renderer-gmHKIbKI.mjs} +3 -3
  258. package/dist/{renderer-QbSrnPZU.mjs.map → renderer-gmHKIbKI.mjs.map} +1 -1
  259. package/dist/{renderer-CU6WT5jW.mjs → renderer-kVZwiRoK.mjs} +3 -3
  260. package/dist/{renderer-CU6WT5jW.mjs.map → renderer-kVZwiRoK.mjs.map} +1 -1
  261. package/dist/renderer-oPMypDM1.mjs +5 -0
  262. package/dist/{renderer-CRhEGqW4.mjs → renderer-p7tgxP-A.mjs} +3 -3
  263. package/dist/{renderer-CRhEGqW4.mjs.map → renderer-p7tgxP-A.mjs.map} +1 -1
  264. package/dist/{renderer-CO4NGvAh.mjs → renderer-tvYj306A.mjs} +81 -78
  265. package/dist/renderer-tvYj306A.mjs.map +1 -0
  266. package/dist/renderer-xvWGpVyp.mjs +5 -0
  267. package/dist/renderer-zafZbD6Q.mjs +5 -0
  268. package/dist/{renderers-CP8CFWDs-BufiCyn7.mjs → renderers-CP8CFWDs-DLjtjrwx.mjs} +2 -2
  269. package/dist/{renderers-CP8CFWDs-BufiCyn7.mjs.map → renderers-CP8CFWDs-DLjtjrwx.mjs.map} +1 -1
  270. package/dist/sam/index.d.mts +3 -3
  271. package/dist/sam/index.mjs +1 -1
  272. package/dist/signals/index.d.mts +5 -5
  273. package/dist/signals/index.mjs +4 -4
  274. package/dist/{src-BU6vm9sP-DdTHmCr4.mjs → src-B23p_eh7-Cj6-lvV6.mjs} +293 -6
  275. package/dist/src-B23p_eh7-Cj6-lvV6.mjs.map +1 -0
  276. package/dist/{src-DrP7fGJX.mjs → src-CoHAjviq.mjs} +1355 -178
  277. package/dist/src-CoHAjviq.mjs.map +1 -0
  278. package/dist/storage/index.mjs +1 -1
  279. package/package.json +63 -60
  280. package/dist/dist-CiTgmfUw.mjs.map +0 -1
  281. package/dist/dist-DtPPPsZV.mjs.map +0 -1
  282. package/dist/fonts-k5ll8NTE.mjs.map +0 -1
  283. package/dist/index-C2yaponf.d.mts.map +0 -1
  284. package/dist/index-C5sgRLlG.d.mts.map +0 -1
  285. package/dist/index-CnZhBlob.d.mts.map +0 -1
  286. package/dist/index-CtKUQ2VG.d.mts.map +0 -1
  287. package/dist/index-DBh3WphX.d.mts.map +0 -1
  288. package/dist/index-DQ1U3HC3.d.mts.map +0 -1
  289. package/dist/index-a6JrbAK0.d.mts.map +0 -1
  290. package/dist/preview-engine/chunk-5ZS46EFB.mjs +0 -5
  291. package/dist/preview-engine/chunk-N3XTDAL6.mjs +0 -2227
  292. package/dist/preview-engine/chunk-NCQHOGZK.mjs +0 -3
  293. package/dist/preview-engine/chunk-PH3UUX6A.mjs +0 -138
  294. package/dist/preview-engine/chunk-XCPRRMMW.mjs +0 -2462
  295. package/dist/preview-engine/renderers-ZMMQ7S2A.mjs +0 -228
  296. package/dist/preview-lHH8Tv4j.mjs +0 -2446
  297. package/dist/preview-lHH8Tv4j.mjs.map +0 -1
  298. package/dist/program-BfiB9ttP.mjs.map +0 -1
  299. package/dist/renderer-0rLmztAv.mjs +0 -5
  300. package/dist/renderer-B0pjOXFY.mjs +0 -5
  301. package/dist/renderer-B7J13reL.mjs +0 -5
  302. package/dist/renderer-BPGIKGgl.mjs +0 -5
  303. package/dist/renderer-Bv-Artj1.mjs +0 -5
  304. package/dist/renderer-BvLjbhcL.mjs +0 -5
  305. package/dist/renderer-By6awWaf.mjs +0 -5
  306. package/dist/renderer-C0rvsz7m.mjs +0 -5
  307. package/dist/renderer-CDgud_HB.mjs +0 -5
  308. package/dist/renderer-CDiRF3bG.mjs +0 -6
  309. package/dist/renderer-CIIEQd4B.mjs +0 -5
  310. package/dist/renderer-CJblwOA9.mjs +0 -5
  311. package/dist/renderer-CNMOXtXE.mjs +0 -5
  312. package/dist/renderer-CO4NGvAh.mjs.map +0 -1
  313. package/dist/renderer-COeSeNGg.mjs +0 -5
  314. package/dist/renderer-CUfElmtZ.mjs +0 -5
  315. package/dist/renderer-CYh2lFoJ.mjs +0 -5
  316. package/dist/renderer-CYtVZYMH.mjs +0 -5
  317. package/dist/renderer-CjxZlkjb.mjs +0 -5
  318. package/dist/renderer-Cpd6TvTC.mjs +0 -5
  319. package/dist/renderer-D3ziOPhX.mjs +0 -5
  320. package/dist/renderer-D5yp74NL.mjs +0 -3
  321. package/dist/renderer-DL-phtL5.mjs +0 -5
  322. package/dist/renderer-DSnmYnHg.mjs +0 -5
  323. package/dist/renderer-DUGfsT-E.mjs +0 -5
  324. package/dist/renderer-DW5af9x1.mjs +0 -5
  325. package/dist/renderer-DYMrol1t.mjs +0 -5
  326. package/dist/renderer-DekeUHaz.mjs +0 -5
  327. package/dist/renderer-Dt5uyJdZ.mjs +0 -5
  328. package/dist/renderer-Dv_iRIyx.mjs.map +0 -1
  329. package/dist/renderer-DwLQAnaK.mjs +0 -5
  330. package/dist/renderer-IXQP2CWM.mjs +0 -5
  331. package/dist/renderer-K-Pkw63O.mjs +0 -5
  332. package/dist/renderer-MPw2KH9P.mjs +0 -5
  333. package/dist/renderer-RPu8RMav.mjs +0 -5
  334. package/dist/renderer-dCqxd5N2.mjs +0 -5
  335. package/dist/renderer-lhjmE-Fp.mjs +0 -5
  336. package/dist/renderer-u9cmBuvM.mjs +0 -5
  337. package/dist/renderer-vH12jcpz.mjs +0 -5
  338. package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +0 -1
  339. package/dist/src-DrP7fGJX.mjs.map +0 -1
@@ -0,0 +1,206 @@
1
+ import{a as _o,b as jo,c as Qo,e as Wo,f as $o}from"./chunk-BR56TQBP.mjs";import{Fa as zn,Ga as nr,Ha as $r,I as Uo,Ia as Hr,J as Ln,K as Yo,Ka as Qt,L as Qr,La as qr,M as Xo,N as Eo,O as er,P as gr,Y as ei,Z as ti,_ as ni,b as jr,c as Gn,ca as Pn,d as _,e as Kn,ea as ri,g as Fo,ga as oi,ha as ii,i as Oo,ia as ai,j as Go,k as Lo,pa as yr,ra as mi,ta as fi,v as zo,w as No,wa as br}from"./chunk-A2OTOW3B.mjs";import{s as Jo,u as Ko}from"./chunk-TEA3GVBJ.mjs";import{b as Ho}from"./chunk-JAAFSVAG.mjs";import{a as Ro}from"./chunk-CJ4CSVU3.mjs";import{a as pi}from"./chunk-OGSZZ4JO.mjs";import"./chunk-LGQSJCKE.mjs";import"./chunk-BREZX5L5.mjs";import"./chunk-CSLSWUUT.mjs";import{a as si,b as ci,d as Wr,g as li}from"./chunk-3QTHW2CD.mjs";import{a as Zo,d as ui,e as di}from"./chunk-OBIJIQCZ.mjs";import{k as Po}from"./chunk-HOV6DDBZ.mjs";import{b as qn,l as Jn}from"./chunk-RECQ74RP.mjs";import"./chunk-UE7Y65C3.mjs";import"./chunk-6FULVULN.mjs";import"./chunk-XOF6UTZX.mjs";import"./chunk-LZNHGH56.mjs";import"./chunk-UZTA2EUU.mjs";import"./chunk-GXFYRMJZ.mjs";import{a as Co,b as Rt,g as Ao,j as Bo,k as Io,l as Vo}from"./chunk-77MT33VR.mjs";import{c as _r,e as Do}from"./chunk-ULOFDFHJ.mjs";import{j as tr,y as qo}from"./chunk-4F3DG6YB.mjs";import"./chunk-QEWDIPJ7.mjs";import"./chunk-OGPJTUAL.mjs";import{a as nt}from"./chunk-354GX6IB.mjs";import"./chunk-5RRKGN2U.mjs";import"./chunk-BDZ3TSOT.mjs";import{g as ke}from"./chunk-Y4NIR77Z.mjs";ke();ke();ke();function Jr(t,e){let n=[];for(let o of e){let i=typeof o=="number"?t.animations[o]:t.animations.find(s=>s.name===o);i&&n.push(i)}return n}function hi(t,e,n){if(e.skin!==void 0)return gr(t,e.skin,n);let o=e.node!==void 0&&n[e.node]?n[e.node]:_.identity();return new Float32Array(o)}function gi(t,e,n=30){let o=[],i=[],s=[];for(let d of e){let m=Math.max(1,Math.round(d.duration*n));o.push({name:d.name,base:i.length,count:m,duration:d.duration});for(let b=0;b<=m;b++)i.push(b/m*d.duration),s.push(d)}let c=new Map,a=i.map((d,m)=>er(t,s[m],d));for(let d of t.meshes){let m=hi(t,d,a[0]??er(t,void 0,0)),b=m.length/16,h=new Float32Array(Math.max(1,a.length)*m.length);a.forEach((C,V)=>{h.set(hi(t,d,C),V*m.length)}),c.set(d,{palette:h,jointCount:b})}return{fps:n,clips:o,meshes:c}}ke();var Xt=(t,e)=>[t[3]*e[0]+t[0]*e[3]+t[1]*e[2]-t[2]*e[1],t[3]*e[1]-t[0]*e[2]+t[1]*e[3]+t[2]*e[0],t[3]*e[2]+t[0]*e[1]-t[1]*e[0]+t[2]*e[3],t[3]*e[3]-t[0]*e[0]-t[1]*e[1]-t[2]*e[2]],bi=t=>[-t[0],-t[1],-t[2],t[3]],Fe=(t,e)=>[t[0]-e[0],t[1]-e[1],t[2]-e[2]],en=(t,e)=>[t[0]+e[0],t[1]+e[1],t[2]+e[2]],tn=(t,e)=>[t[0]*e,t[1]*e,t[2]*e],Nn=(t,e)=>t[0]*e[0]+t[1]*e[1]+t[2]*e[2],hn=(t,e)=>[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]],Gt=t=>Math.hypot(t[0],t[1],t[2]),Ht=t=>tn(t,1/(Gt(t)||1)),nn=(t,e,n)=>Math.min(n,Math.max(e,t));function xi(t,e){let n=tn(hn([t[0],t[1],t[2]],e),2);return en(en(e,tn(n,t[3])),hn([t[0],t[1],t[2]],n))}function rr(t,e){let n=Ht(t),o=Math.sin(e/2);return[n[0]*o,n[1]*o,n[2]*o,Math.cos(e/2)]}function wr(t,e){let n=Ht(t),o=Ht(e),i=Nn(n,o);if(i<-.999999){let d=Math.abs(n[0])<.9?hn(n,[1,0,0]):hn(n,[0,1,0]);return rr(d,Math.PI)}let s=hn(n,o),c=[s[0],s[1],s[2],1+i],a=Math.hypot(...c);return[c[0]/a,c[1]/a,c[2]/a,c[3]/a]}var Ga=t=>[t[12],t[13],t[14]],yi=t=>t.slice(t.lastIndexOf(":")+1).toLowerCase(),Kr=class{nodes;local;worldCache=null;byName;constructor(e,n){this.nodes=e,this.local=n,this.byName=new Map(e.map((o,i)=>[o.name,i]))}index(e){let n=this.byName.get(e);if(n!==void 0)return n;let o=yi(e);return this.byBare??=new Map(this.nodes.map((i,s)=>[yi(i.name),s]).reverse()),this.byBare.get(o)}byBare;boneAxis(e){for(let n=0;n<this.nodes.length;n++){if(this.nodes[n].parent!==e)continue;let o=this.local.t[n];if(Gt(o)>1e-9)return Ht(o)}}world(){return this.worldCache??=Eo(this.nodes,Xo(this.nodes,this.local)),this.worldCache}position(e){return Ga(this.world()[e])}globalRotation(e){let n=this.local.r[e];for(let o=this.nodes[e].parent;o>=0;o=this.nodes[o].parent)n=Xt(this.local.r[o],n);return n}parentRotation(e){let n=this.nodes[e].parent;return n>=0?this.globalRotation(n):[0,0,0,1]}touch(){this.worldCache=null}setGlobalRotation(e,n,o=1){let i=Xt(bi(this.parentRotation(e)),n);this.local.r[e]=o>=1?i:Ln(this.local.r[e],i,o),this.worldCache=null}maskSet(e){let n=new Set(e.map(i=>this.index(i)).filter(i=>i!==void 0)),o=new Set;for(let i=0;i<this.nodes.length;i++)for(let s=i;s>=0;s=this.nodes[s].parent)if(n.has(s)){o.add(i);break}return o}};function wi(t,e){let n=t.nodes??[],o=Qr(n,void 0,0),i=new Kr(n,o);for(let s of e){let c=nn(s.weight,0,1);if(c<=0)continue;let a=Qr(n,s.clip,s.time),d=s.mask?.length?i.maskSet(s.mask):void 0;for(let m=0;m<n.length;m++){if(d&&!d.has(m))continue;let b=o.t[m],h=o.s[m];o.t[m]=en(b,tn(Fe(a.t[m],b),c)),o.s[m]=en(h,tn(Fe(a.s[m],h),c)),o.r[m]=Ln(o.r[m],a.r[m],c)}}return i}function La(t,e){let n=e.chain.map(Te=>t.index(Te));if(n.some(Te=>Te===void 0))return;let[o,i,s]=n,c=nn(e.weight,0,1);if(c<=0)return;let a=[t.local.r[o],t.local.r[i]],d=t.position(o),m=t.position(i),b=t.position(s),h=1e-4,C=Gt(Fe(m,d)),V=Gt(Fe(b,m)),X=nn(Gt(Fe(e.target,d)),h,C+V-h),ee=Te=>Math.acos(nn(Te,-1,1)),W=ee(Nn(Ht(Fe(b,d)),Ht(Fe(m,d)))),B=ee(Nn(Ht(Fe(d,m)),Ht(Fe(b,m)))),O=ee((V*V-C*C-X*X)/(-2*C*X)),P=ee((X*X-C*C-V*V)/(-2*C*V)),G=hn(Fe(b,d),Fe(m,d));Gt(G)<1e-6&&e.pole&&(G=hn(Fe(b,d),Fe(e.pole,d))),Gt(G)<1e-6&&(G=hn(Fe(b,d),[0,0,1]));let L=t.globalRotation(o),u=t.globalRotation(i),M=rr(G,O-W),te=rr(G,P-B);t.setGlobalRotation(o,Xt(M,L)),t.setGlobalRotation(i,Xt(M,Xt(te,u)));let ne=Fe(t.position(s),d);if(t.setGlobalRotation(o,Xt(wr(ne,Fe(e.target,d)),t.globalRotation(o))),e.pole&&za(t,o,i,d,e.target,e.pole),c<1){let Te=[t.local.r[o],t.local.r[i]];t.local.r[o]=Ln(a[0],Te[0],c),t.local.r[i]=Ln(a[1],Te[1],c),t.touch()}}function za(t,e,n,o,i,s){let c=Ht(Fe(i,o)),a=V=>Fe(V,tn(c,Nn(V,c))),d=a(Fe(t.position(n),o)),m=a(Fe(s,o));if(Gt(d)<1e-6||Gt(m)<1e-6)return;let b=Ht(d),h=Ht(m),C=Math.atan2(Nn(hn(b,h),c),Nn(b,h));t.setGlobalRotation(e,Xt(rr(c,C),t.globalRotation(e)))}function Na(t,e){let n=t.index(e.joint),o=nn(e.weight,0,1);if(n===void 0||o<=0)return;let i=t.globalRotation(n),s=xi(i,e.axis),c=Fe(e.target,t.position(n));if(Gt(c)<1e-6)return;let a=wr(s,c),d=2*Math.acos(nn(a[3],-1,1)),m=nn(e.maxAngleDeg,0,180)*Math.PI/180;if(d>m){let b=[a[0],a[1],a[2]];a=Gt(b)>1e-9?rr(b,m):[0,0,0,1]}t.setGlobalRotation(n,Xt(a,i),o)}function Mi(t,e){for(let n of e.pose??[])Ea(t,n);for(let n of e.aim??[])Za(t,n);for(let n of e.lookAt??[])Na(t,n);for(let n of e.drive??[])Xa(t,n);for(let n of e.ik??[])La(t,n)}function Ua(t){let[e,n,o,i]=t,s=1-2*(n*n+o*o),c=2*(e*n+i*o),a=2*(e*o-i*n),d=2*(n*o+i*e),m=1-2*(e*e+n*n),b=180/Math.PI;return[Math.atan2(d,m)*b,Math.asin(nn(-a,-1,1))*b,Math.atan2(c,s)*b]}function Ya(t){let e=Math.PI/360,n=[Math.sin(t[0]*e),0,0,Math.cos(t[0]*e)],o=[0,Math.sin(t[1]*e),0,Math.cos(t[1]*e)],i=[0,0,Math.sin(t[2]*e),Math.cos(t[2]*e)];return Xt(i,Xt(o,n))}function Xa(t,e){let n=t.index(e.joint),o=t.index(e.from);if(n===void 0||o===void 0)return;let i=t.nodes[o].rotation,s=Ua(Xt(bi(i),t.local.r[o])),c=[s[0]*(e.rotate.x??0),s[1]*(e.rotate.y??0),s[2]*(e.rotate.z??0)];t.local.r[n]=Xt(t.local.r[n],Ya(c)),t.touch()}function Ea(t,e){let n=t.index(e.joint),o=nn(e.weight,0,1);if(n===void 0||o<=0)return;let i=t.nodes[n],s=e.mode==="rest"?i.rotation:t.local.r[n],c=e.mode==="rest"?i.translation:t.local.t[n],a=Xt(s,e.rotation),d=en(c,e.offset);t.local.r[n]=o>=1?a:Ln(t.local.r[n],a,o),t.local.t[n]=en(t.local.t[n],tn(Fe(d,t.local.t[n]),o)),t.touch()}function Za(t,e){let n=t.index(e.joint),o=nn(e.weight,0,1);if(n===void 0||o<=0||Gt(e.direction)<1e-9)return;let i=e.axis??t.boneAxis(n);if(!i)return;let s=t.globalRotation(n),c=wr(xi(s,i),e.direction);t.setGlobalRotation(n,Xt(c,s),o)}function _a(t,e){let n=[e];for(;;){let o=n[n.length-1],i=t.nodes.findIndex(s=>s.parent===o);if(i<0)return n;n.push(i)}}var xr=class{constructor(e,n,o=4){this.substeps=o;for(let i of n)for(let s of i.joints){let c=e.index(s);if(c===void 0)continue;let a=_a(e,c);a.length<2||this.chains.push({ids:a,stiffness:i.stiffness??6,damping:nn(i.damping??.6,0,1),gravity:i.gravity??[0,0,0],cur:[],prev:[]})}}substeps;chains=[];started=!1;step(e,n){for(let o of this.chains){let i=o.ids.map(c=>e.position(c));if(!this.started){o.cur=i.map(c=>[...c]),o.prev=i.map(c=>[...c]);continue}let s=n/this.substeps;for(let c=0;c<this.substeps;c++)this.substep(o,i,s)}this.started=!0}substep(e,n,o){e.cur[0]=n[0],e.prev[0]=n[0];let i=(1-e.damping)**o,s=Math.min(1,e.stiffness*o);for(let c=1;c<e.ids.length;c++){let a=e.cur[c-1],d=Gt(Fe(n[c],n[c-1])),m=en(a,Fe(n[c],n[c-1])),b=e.cur[c],h=en(b,tn(Fe(b,e.prev[c]),i));h=en(h,tn(Fe(m,h),s)),h=en(h,tn(e.gravity,o*o));let C=Fe(h,a);h=Gt(C)>1e-9?en(a,tn(Ht(C),d)):m,e.prev[c]=b,e.cur[c]=h}}apply(e){for(let n of this.chains)for(let o=0;o+1<n.ids.length;o++){let i=n.ids[o],s=Fe(e.position(n.ids[o+1]),e.position(i)),c=Fe(n.cur[o+1],e.position(i));Gt(s)<1e-9||Gt(c)<1e-9||e.setGlobalRotation(i,Xt(wr(s,c),e.globalRotation(i)))}}};ke();ke();var vi=`
2
+ struct RelightMaterialUniforms {
3
+ // vec4 0
4
+ roughness : f32,
5
+ specularStrength : f32,
6
+ metallic : f32,
7
+ ambientIntensity : f32,
8
+
9
+ // vec4 1
10
+ depthScale : f32,
11
+ depthInvert : f32,
12
+ hasNormalMap : f32,
13
+ volumetricDensity: f32,
14
+
15
+ // vec4 2
16
+ viewportWidth : f32,
17
+ viewportHeight : f32,
18
+ shininess : f32,
19
+ opacity : f32,
20
+
21
+ // vec4 3
22
+ layerX : f32,
23
+ layerY : f32,
24
+ _pad0 : f32,
25
+ _pad1 : f32,
26
+ };
27
+
28
+ struct GPULight {
29
+ posType : vec4<f32>, // xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot)
30
+ dirRadius : vec4<f32>, // xyz = normalized direction, w = radius
31
+ colorIntensity : vec4<f32>, // rgb = linear color, w = intensity
32
+ spotParams : vec4<f32>, // x = cos(outer), y = cos(inner), z = decay, w = 0
33
+ };
34
+
35
+ struct LightsUniforms {
36
+ ambientColor : vec4<f32>,
37
+ params : vec4<f32>, // x = lightCount, y = hasLights (1=lit, 0=unlit)
38
+ lights : array<GPULight, 8>,
39
+ };
40
+
41
+ @group(0) @binding(0) var<uniform> mat : RelightMaterialUniforms;
42
+ @group(1) @binding(0) var<uniform> lights : LightsUniforms;
43
+
44
+ @group(2) @binding(0) var albedoTex : texture_2d<f32>;
45
+ @group(2) @binding(1) var albedoSamp : sampler;
46
+ @group(2) @binding(2) var normalTex : texture_2d<f32>;
47
+ @group(2) @binding(3) var normalSamp : sampler;
48
+
49
+ struct VSOut {
50
+ @builtin(position) pos : vec4<f32>,
51
+ @location(0) uv : vec2<f32>,
52
+ };
53
+
54
+ @vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
55
+ var pos = array<vec2<f32>, 4>(
56
+ vec2<f32>(-1.0, 1.0),
57
+ vec2<f32>( 1.0, 1.0),
58
+ vec2<f32>(-1.0, -1.0),
59
+ vec2<f32>( 1.0, -1.0)
60
+ );
61
+ var uv = array<vec2<f32>, 4>(
62
+ vec2<f32>(0.0, 0.0),
63
+ vec2<f32>(1.0, 0.0),
64
+ vec2<f32>(0.0, 1.0),
65
+ vec2<f32>(1.0, 1.0)
66
+ );
67
+ return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
68
+ }
69
+
70
+ @fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
71
+ let albedo = textureSampleLevel(albedoTex, albedoSamp, in.uv, 0.0);
72
+ if (albedo.a <= 0.001) {
73
+ return vec4<f32>(0.0);
74
+ }
75
+
76
+ // Normal unpacking: [0, 1] -> [-1, 1]
77
+ var N = vec3<f32>(0.0, 0.0, 1.0);
78
+ if (mat.hasNormalMap > 0.5) {
79
+ let rawNormal = textureSampleLevel(normalTex, normalSamp, in.uv, 0.0).xyz;
80
+ let unpacked = rawNormal * 2.0 - 1.0;
81
+ N = normalize(vec3<f32>(unpacked.x, unpacked.y, max(unpacked.z, 0.05)));
82
+ }
83
+
84
+ let V = vec3<f32>(0.0, 0.0, 1.0);
85
+ let pSurface = vec3<f32>(
86
+ mat.layerX + in.uv.x * mat.viewportWidth,
87
+ mat.layerY + in.uv.y * mat.viewportHeight,
88
+ 0.0
89
+ );
90
+
91
+ // If scene lights are not declared, output base albedo unmodified
92
+ if (lights.params.y < 0.5) {
93
+ return vec4<f32>(albedo.rgb * mat.opacity, albedo.a * mat.opacity);
94
+ }
95
+
96
+ let numLights = u32(min(lights.params.x, 8.0));
97
+ var ambientAccum = lights.ambientColor.rgb * mat.ambientIntensity;
98
+ var directDiffuseAccum = vec3<f32>(0.0);
99
+ var directSpecularAccum = vec3<f32>(0.0);
100
+
101
+ let roughness = clamp(mat.roughness, 0.02, 1.0);
102
+ let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);
103
+
104
+ for (var i = 0u; i < 8u; i = i + 1u) {
105
+ if (i >= numLights) {
106
+ break;
107
+ }
108
+
109
+ let light = lights.lights[i];
110
+ let lightType = light.posType.w;
111
+ let lightColor = light.colorIntensity.rgb;
112
+ let intensity = light.colorIntensity.w;
113
+
114
+ var L = vec3<f32>(0.0, 0.0, 1.0);
115
+ var attenuation: f32 = 1.0;
116
+
117
+ if (lightType > 0.5 && lightType < 1.5) {
118
+ // Directional Light
119
+ L = normalize(-light.dirRadius.xyz);
120
+ } else if (lightType >= 1.5) {
121
+ // Point or Spot Light
122
+ let lightPosCanvas = light.posType.xyz;
123
+ let toLight = lightPosCanvas - pSurface;
124
+ let dist = length(toLight);
125
+ let radius = max(10.0, light.dirRadius.w);
126
+
127
+ if (dist > radius * 2.0) {
128
+ continue;
129
+ }
130
+
131
+ L = normalize(toLight);
132
+ let dNorm = clamp(dist / radius, 0.0, 1.0);
133
+ let decay = max(0.5, light.spotParams.z);
134
+ attenuation = pow(clamp(1.0 - dNorm, 0.0, 1.0), decay) / (1.0 + dNorm * dNorm);
135
+
136
+ if (lightType > 2.5) {
137
+ // Spot Light
138
+ let spotDir = normalize(light.dirRadius.xyz);
139
+ let cosAngle = dot(-L, spotDir);
140
+ let cosOuter = light.spotParams.x;
141
+ let cosInner = light.spotParams.y;
142
+
143
+ if (cosAngle < cosOuter) {
144
+ continue;
145
+ }
146
+ let spotFalloff = smoothstep(cosOuter, cosInner, cosAngle);
147
+ attenuation *= spotFalloff;
148
+ }
149
+ } else {
150
+ // Ambient light in array
151
+ ambientAccum += lightColor * (intensity * mat.ambientIntensity);
152
+ continue;
153
+ }
154
+
155
+ let NdotL = max(dot(N, L), 0.0);
156
+ let diffuse = lightColor * (NdotL * intensity * attenuation);
157
+ directDiffuseAccum += diffuse;
158
+
159
+ let H = normalize(L + V);
160
+ let NdotH = max(dot(N, H), 0.0);
161
+ let specularFactor = pow(NdotH, specPower) * mat.specularStrength * intensity * attenuation;
162
+ let specColor = mix(lightColor, lightColor * albedo.rgb, mat.metallic);
163
+ directSpecularAccum += specColor * specularFactor;
164
+ }
165
+
166
+ let finalColor = albedo.rgb * (ambientAccum + directDiffuseAccum) + directSpecularAccum;
167
+ let outOpacity = albedo.a * mat.opacity;
168
+
169
+ // Premultiplied alpha return
170
+ return vec4<f32>(finalColor * outOpacity, outOpacity);
171
+ }
172
+ `;var Mr=class{device;format;materialLayout;lightsLayout;texturesLayout;pipeline;materialPool;linearSampler;defaultFlatNormalTex;constructor(e,n="rgba8unorm"){this.device=e,this.format=n,this.materialPool=new qo(64,GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST),this.linearSampler=e.createSampler({label:"relight_linear_sampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),this.materialLayout=e.createBindGroupLayout({label:"relight_material_layout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.lightsLayout=e.createBindGroupLayout({label:"relight_lights_layout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),this.texturesLayout=e.createBindGroupLayout({label:"relight_textures_layout",entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});let o=e.createShaderModule({label:"screen_space_relight.wgsl",code:vi}),i=e.createPipelineLayout({label:"screen_space_relight_pipeline_layout",bindGroupLayouts:[this.materialLayout,this.lightsLayout,this.texturesLayout]});this.pipeline=e.createRenderPipeline({label:"ScreenSpaceRelightPipeline",layout:i,vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:n,blend:Ko}]},primitive:{topology:"triangle-strip"}})}getOrCreateDefaultFlatNormalTexture(){if(!this.defaultFlatNormalTex){this.defaultFlatNormalTex=this.device.createTexture({label:"default_flat_normal",size:[2,2],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});let e=new Uint8Array([128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255]);this.device.queue.writeTexture({texture:this.defaultFlatNormalTex},e,{bytesPerRow:8,rowsPerImage:2},[2,2])}return this.defaultFlatNormalTex}resetPools(){this.materialPool.reset()}execute(e,n,o,i,s,c,a="clear"){let d=new Float32Array(16);d[0]=c.roughness??.35,d[1]=c.specularStrength??.7,d[2]=c.metallic??0,d[3]=c.ambientIntensity??.5,d[4]=c.depthScale??1,d[5]=0,d[6]=i?1:0,d[7]=0,d[8]=c.viewportWidth,d[9]=c.viewportHeight,d[10]=32,d[11]=c.opacity??1,d[12]=c.layerX??0,d[13]=c.layerY??0,d[14]=0,d[15]=0;let m=this.materialPool.getBuffer(this.device,d),b=this.device.createBindGroup({layout:this.materialLayout,entries:[{binding:0,resource:{buffer:m}}]}),h=this.device.createBindGroup({layout:this.lightsLayout,entries:[{binding:0,resource:{buffer:s}}]}),C=i??this.getOrCreateDefaultFlatNormalTexture(),V=this.device.createBindGroup({layout:this.texturesLayout,entries:[{binding:0,resource:o.createView()},{binding:1,resource:this.linearSampler},{binding:2,resource:C.createView()},{binding:3,resource:this.linearSampler}]}),X=e.beginRenderPass({label:"screen_space_relight_render_pass",colorAttachments:[{view:n,loadOp:a,storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});X.setPipeline(this.pipeline),X.setBindGroup(0,b),X.setBindGroup(1,h),X.setBindGroup(2,V),X.draw(4,1,0,0),X.end()}destroy(){this.materialPool.destroy(),this.defaultFlatNormalTex?.destroy()}};ke();var ja=t=>t==="Image"||t==="SVG"||t==="Text",ki=(t,e,n=3e3,o)=>{if(o==="Caption")return e&&e>0?e:t||n;let i=ja(o);return t&&e&&!i?Math.min(t,e):t||e||n};ke();var Pi=nr.timeline?nr:nr.default||nr;function Tn(t,e,n){t.tl.seek(e/n);for(let o of t.live){let i=Math.max(o.startFrame,Math.min(o.endFrame,e));o.step&&o.step>1&&(i=o.startFrame+Math.floor((i-o.startFrame)/o.step)*o.step),o.stub[o.track.prop]=Hr(o.track,i,n,{startFrame:o.startFrame,base:o.stub,signals:t.signals})}}var Un=new Map,Ti=new WeakMap,eo=1e4,Qa=50,Wa=50;function to(t){let e=2166136261;for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);return(e>>>0).toString(16)}var Si=new WeakMap,$a=0;function Ha(t){return!t||typeof t!="object"?Yn(t):Object.keys(t).sort().map(e=>{let n=t[e];if(n&&typeof n=="object"&&typeof n.get=="function"){let o=Si.get(n);return o===void 0&&(o=$a++,Si.set(n,o)),`${JSON.stringify(e)}:#${o}`}return`${JSON.stringify(e)}:${Yn(n)}`}).join(",")}function Tr(t){t.tl.kill()}function Ri(t,e){let n=Date.now();for(let[o,i]of t.entries())n-i.cacheTime>eo&&(t.delete(o),Tr(i.value));if(t.size>=e){let o=t.keys().next().value;if(o!==void 0){let i=t.get(o);t.delete(o),i&&Tr(i.value)}}}function Yn(t){return t===null?"null":t===void 0?"undefined":typeof t!="object"?JSON.stringify(t):ArrayBuffer.isView(t)?`[TypedArray:${t.byteLength}]`:Array.isArray(t)?"["+t.map(Yn).join(",")+"]":"{"+Object.keys(t).sort().map(o=>`${JSON.stringify(o)}:${Yn(t[o])}`).join(",")+"}"}function qa(t){let e=Un.get(t);if(e){if(Date.now()-e.cacheTime>eo){Un.delete(t),Tr(e.value);return}return e.cacheTime=Date.now(),Un.delete(t),Un.set(t,e),e.value}}function Ja(t,e){Ri(Un,Qa),Un.set(t,{cacheTime:Date.now(),value:e})}var Ci=new Set(["hidden","muted"]);function Ai(t,e,n,o,i,s,c,a,d){let m=n.prop,b=n.source??{type:"keyframe"},h=d!==void 0&&d>1;if((b.type==="signal"||h||m==="d")&&a&&!n.repeat){let B=Number.isFinite(s)?s:Math.round(i*5),O={stub:e,track:n,startFrame:o,endFrame:o+B,...h&&{step:d}};return e[m]=Hr(n,o,i,{startFrame:o,base:e,signals:c}),a.push(O),{dropped:0,maxAuthoredFrame:0}}if(b.type!=="keyframe"){let B=Number.isFinite(s)?s:Math.round(i*5),O=1/i,P=[],G=br(n,o,i,{startFrame:o,baseValues:e,signals:c});e[m]=G,P.push({[m]:G,duration:0});for(let L=1;L<=B;L++){let u=br(n,o+L,i,{startFrame:o,baseValues:e,signals:c});P.push({[m]:u,duration:O,ease:"none"})}return t.to(e,{keyframes:P,repeat:n.repeat??0,yoyo:!!n.yoyo,lazy:!1,overwrite:!1,immediateRender:!1},o/i),{dropped:0,maxAuthoredFrame:0}}let C=[...n.keyframes].sort((B,O)=>B.frame-O.frame),V=C.filter(B=>B.frame>=0&&B.frame<=s),X=C.length-V.length,ee=X>0?C[C.length-1].frame:0;if(V.length===0)return{dropped:X,maxAuthoredFrame:ee};if(Ci.has(m))for(let B of V){let O=(o+B.frame)/i;t.set(e,{[m]:B.value,immediateRender:!1},O)}else{let B=n.repeat??0,O=!!n.yoyo;if(V.length===1){let P=V[0],G=(o+P.frame)/i;t.set(e,{[m]:P.value,immediateRender:!1},G)}else if(V.length===2){let P=V[0],G=V[1],L=P.value,u=G.value,M=(o+P.frame)/i,te=(G.frame-P.frame)/i,ne=n.durationFrames??G.frame-P.frame,Te=G.ease??P.ease,mt=$r(Te,ne,i);L===e[m]?t.to(e,{[m]:u,duration:te,ease:mt,repeat:B,yoyo:O,lazy:!1,overwrite:!1,immediateRender:!1},M):t.fromTo(e,{[m]:L},{[m]:u,duration:te,ease:mt,repeat:B,yoyo:O,lazy:!1,overwrite:!1,immediateRender:!1},M)}else{let P=V[0],G=(o+P.frame)/i,L=[];L.push({[m]:P.value,duration:0});for(let u=1;u<V.length;u++){let M=V[u-1],te=V[u],ne=te.frame-M.frame,Te=ne/i,mt=$r(te.ease,ne,i);L.push({[m]:te.value,duration:Te,ease:mt})}t.to(e,{keyframes:L,repeat:B,yoyo:O,lazy:!1,overwrite:!1,immediateRender:!1},G)}}return{dropped:X,maxAuthoredFrame:ee}}var Ka={x:"cameraX",y:"cameraY",z:"cameraZ"};function Di(t){let e=t.animation?.tracks??[];return t.kind!=="camera"?e:e.map(n=>{let o=Ka[n.prop];return o?{...n,prop:o}:n})}var vr=new Set,es=100;function ts(t,e){if(vr.has(t))return;vr.size>=es&&vr.clear(),vr.add(t);let n=e.map(o=>`'${o.prop}' (track '${o.trackId}') on '${o.layerId}': ${o.dropped} keyframe(s) past the clip window (last authored frame ${o.maxAuthoredFrame})`).join("; ");console.warn(`[compositor] ${e.length} track(s) truncated \u2014 animation tails will not play: ${n}. Extend durationFrames or move those keyframes.`)}function ns(t,e,n,o,i){let s=Yn({nodes:t.map(c=>{let a=c?.operation||{};return{id:a.id,animation:a.animation,startFrame:a.startFrame,durationFrames:a.durationFrames,x:a.x,y:a.y,scale:a.scale,rotation:a.rotation,opacity:a.opacity,volume:a.volume,width:a.width,height:a.height,hidden:a.hidden,muted:a.muted,backgroundColor:a.backgroundColor,fill:a.fill,borderColor:a.borderColor,textBackgroundColor:a.textBackgroundColor,rotateX:a.rotateX,rotateY:a.rotateY,rotateZ:a.rotateZ,perspective:a.perspective,perspectiveOriginX:a.perspectiveOriginX,perspectiveOriginY:a.perspectiveOriginY,translateZ:a.translateZ,backfaceVisibility:a.backfaceVisibility,transformStyle:a.transformStyle,is3D:a.is3D,z:a.z,scaleZ:a.scaleZ,twoSided:a.twoSided,cameraX:a.cameraX,cameraY:a.cameraY,cameraZ:a.cameraZ,targetX:a.targetX,targetY:a.targetY,targetZ:a.targetZ,cameraPitch:a.cameraPitch,cameraYaw:a.cameraYaw,cameraRoll:a.cameraRoll,cameraFov:a.cameraFov,cameraZoom:a.cameraZoom,focalLength:a.focalLength,focusDistance:a.focusDistance,fStop:a.fStop,maxBlurRadius:a.maxBlurRadius,shakeTranslation:a.shakeTranslation,shakeRotation:a.shakeRotation,relativitySpeed:a.relativitySpeed,orbitRadius:a.orbitRadius,orbitAzimuth:a.orbitAzimuth,orbitElevation:a.orbitElevation,material:a.material,shininess:a.shininess,roughness:a.roughness,specularIntensity:a.specularIntensity,ambientIntensity:a.ambientIntensity,metallic:a.metallic,emissive:a.emissive,emissiveIntensity:a.emissiveIntensity,clearcoat:a.clearcoat,clearcoatRoughness:a.clearcoatRoughness,anisotropy:a.anisotropy,anisotropyRotation:a.anisotropyRotation,subsurface:a.subsurface,subsurfaceColor:a.subsurfaceColor,sheen:a.sheen,sheenColor:a.sheenColor,sheenRoughness:a.sheenRoughness,iridescence:a.iridescence,iridescenceThickness:a.iridescenceThickness,iridescenceIor:a.iridescenceIor,triplanar:a.triplanar,triplanarScale:a.triplanarScale,triplanarSharpness:a.triplanarSharpness,lightType:a.lightType,color:a.color,intensity:a.intensity,radius:a.radius,angle:a.angle,penumbra:a.penumbra,exposure:a.exposure,hdri:typeof a.hdri=="string"?a.hdri:!!a.hdri,volumetricFog:a.volumetricFog,volumetricFogDensity:a.volumetricFogDensity,volumetricFogAnisotropy:a.volumetricFogAnisotropy,volumetricFogNoiseStrength:a.volumetricFogNoiseStrength,animationProgress:a.animationProgress,animationTime:a.animationTime,animationSpeed:a.animationSpeed,wireframe:a.wireframe,scaleX:a.scaleX,scaleY:a.scaleY,fontSize:a.fontSize,text:a.text}}),width:e,height:n,fps:o,durationSec:i});return to(s)}function Bi(t,e,n){let o=n.fps,i=n.durationSec,s=e?.metadata?.width??1920,c=e?.metadata?.height??1080,a=zn(e?.children??[]),d=e?.children,m=d?Ti.get(d):void 0,b;m&&m.width===s&&m.height===c&&m.fps===o&&m.durationSec===i?b=m.hash:(b=ns(a,s,c,o,i),d&&Ti.set(d,{width:s,height:c,fps:o,durationSec:i,hash:b}));let h=to(`${b}|${Ha(e?.operation?.signals??e?.signals)}`),C=`${t}_${h}`,V=qa(C);if(V)return V;let X=Pi.timeline({paused:!0,smoothChildTiming:!1}),ee={},W=e?.operation?.signals??e?.signals??{};a.forEach((G,L)=>{let u=G?.operation||{},M=u.id||u.inputHandleId||`layer_${L}`,te={id:M,inputHandleId:u.inputHandleId||`layer_${L}`,trackId:M,x:u.kind==="camera"||u.kind==="light"?u.x??u.cameraX:u.x??0,y:u.kind==="camera"||u.kind==="light"?u.y??u.cameraY:u.y??0,scale:u.scale??1,rotation:u.rotation??0,opacity:u.opacity??1,volume:u.volume??1,width:u.width,height:u.height,hidden:!!u.hidden,muted:!!u.muted,rotateX:u.rotateX??0,rotateY:u.rotateY??0,rotateZ:u.rotateZ??0,perspective:u.perspective??0,perspectiveOriginX:u.perspectiveOriginX??.5,perspectiveOriginY:u.perspectiveOriginY??.5,translateZ:u.translateZ??0,backfaceVisibility:u.backfaceVisibility??"visible",transformStyle:u.transformStyle??"flat",fontSize:u.fontSize,text:1,fill:u.fill,fillColor:u.fillColor??u.fill,strokeColor:u.strokeColor??u.stroke,strokeWidth:u.strokeWidth,letterSpacing:u.letterSpacing,firstMargin:u.firstMargin??u.pathOptions?.firstMargin,lastMargin:u.lastMargin??u.pathOptions?.lastMargin,baselineShift:u.baselineShift??u.pathOptions?.baselineShift,offset:u.offset,rangeStart:u.rangeStart,rangeEnd:u.rangeEnd,animators:u.animators,pathOptions:u.pathOptions,typewriter:u.typewriter,marquee:u.marquee,is3D:u.is3D??(u.kind==="camera"||u.kind==="light"||u.kind==="model3d"),z:u.z??(u.kind==="camera"?u.z??-1500:0),scaleZ:u.scaleZ??1,twoSided:u.twoSided??u.kind!=="light",material:u.material,shininess:u.shininess,roughness:u.roughness,specularIntensity:u.specularIntensity,ambientIntensity:u.ambientIntensity,metallic:u.metallic,emissive:u.emissive,emissiveIntensity:u.emissiveIntensity,clearcoat:u.clearcoat,clearcoatRoughness:u.clearcoatRoughness,anisotropy:u.anisotropy,anisotropyRotation:u.anisotropyRotation,subsurface:u.subsurface,subsurfaceColor:u.subsurfaceColor,sheen:u.sheen,sheenColor:u.sheenColor,sheenRoughness:u.sheenRoughness,iridescence:u.iridescence,iridescenceThickness:u.iridescenceThickness,iridescenceIor:u.iridescenceIor,triplanar:u.triplanar,triplanarScale:u.triplanarScale,triplanarSharpness:u.triplanarSharpness,animationProgress:u.animationProgress??0,animationTime:u.animationTime??0,animationSpeed:u.animationSpeed??1,wireframe:u.wireframe??!1,scaleX:u.scaleX??1,scaleY:u.scaleY??1,cameraX:u.cameraX??(u.kind==="camera"?u.x:void 0),cameraY:u.cameraY??(u.kind==="camera"?u.y:void 0),cameraZ:u.cameraZ??(u.kind==="camera"?u.z:void 0),targetX:u.targetX,targetY:u.targetY,targetZ:u.targetZ,cameraPitch:u.cameraPitch??u.pitch??0,cameraYaw:u.cameraYaw??u.yaw??0,cameraRoll:u.cameraRoll??u.roll??0,cameraFov:u.cameraFov??u.lens?.fov??50,cameraZoom:u.cameraZoom??u.lens?.zoom??1,focalLength:u.focalLength??u.lens?.focalLength??50,focusDistance:u.focusDistance??u.dof?.focusDistance,fStop:u.fStop??u.dof?.fStop??2.8,maxBlurRadius:u.maxBlurRadius??u.dof?.maxBlurRadius??24,shakeTranslation:u.shakeTranslation??(u.shake?.enabled?u.shake?.translationAmplitude??0:0),shakeRotation:u.shakeRotation??(u.shake?.enabled?u.shake?.rotationAmplitude??0:0),relativitySpeed:u.relativitySpeed??u.relativity?.speed??0,orbitRadius:u.orbitRadius,orbitAzimuth:u.orbitAzimuth,orbitElevation:u.orbitElevation,lightType:u.lightType,color:u.color,intensity:u.intensity??(u.kind==="light"?1:void 0),radius:u.radius,angle:u.angle,penumbra:u.penumbra,decay:u.decay,exposure:u.exposure,volumetricFogDensity:u.volumetricFogDensity,volumetricFogAnisotropy:u.volumetricFogAnisotropy,volumetricFogNoiseStrength:u.volumetricFogNoiseStrength};for(let ne of Di(u))if((ne.source??{type:"keyframe"}).type!=="keyframe")te[ne.prop]=br(ne,u.startFrame??0,o,{startFrame:u.startFrame??0,baseValues:te,signals:W});else if(ne.keyframes&&ne.keyframes.length>0){let At=ne.keyframes.reduce((rt,ot)=>ot.frame<rt.frame?ot:rt),Wt=te;!Ci.has(ne.prop)||At.frame===0?Wt[ne.prop]=At.value:Wt[ne.prop]===void 0&&(Wt[ne.prop]=u[ne.prop]??At.value)}ee[M]=te});let B=[],O=[];if(a.forEach(G=>{let L=G?.operation||{},u=L.id||L.inputHandleId,M=u?ee[u]:void 0;if(!M)return;let te=L.startFrame??0,ne=L.durationFrames;if(ne===void 0){let Te=G.children?.[0],mt=Te?Jn(Te):null,At=e?.metadata?.durationMs??3e3,Wt=L.type??(L.kind==="text"?"Text":L.kind==="media"&&Te?Te.operation?.dataType:void 0),rt=ki(void 0,mt?.durationMs??void 0,At,Wt);ne=Math.max(1,Math.round(rt/1e3*o))}for(let Te of Di(L)){let{dropped:mt,maxAuthoredFrame:At}=Ai(X,M,Te,te,o,ne,W,O,L.animation?.frameStep);mt>0&&B.push({layerId:u,trackId:Te.id,prop:Te.prop,dropped:mt,maxAuthoredFrame:At})}}),B.length>0){ts(t.startsWith("img-")?`frame_${h}`:C,B);for(let G of B)Ro(t,{severity:"warning",code:"animation_truncated",layerId:G.layerId,message:`'${G.prop}' on '${G.layerId}': ${G.dropped} keyframe(s) past the clip window (last authored frame ${G.maxAuthoredFrame}) never play`})}X.seek(1e-6),X.seek(0);let P={key:C,tl:X,targetsById:ee,nodes:a,live:O,signals:W};return Ja(C,P),P}var kr=new Map;function Ii(t,e,n,o,i){let s=Yn({animation:e,baseVolume:n,baseMuted:o,fps:i}),c=to(s),a=`layer_${t}_${c}`,d=kr.get(a);if(d){if(Date.now()-d.cacheTime<=eo)return d.cacheTime=Date.now(),d.value;kr.delete(a),Tr(d.value)}let m=Pi.timeline({paused:!0,smoothChildTiming:!1}),b={volume:n,muted:o},h=e?.tracks??[];for(let V of h){let X=V.prop;X!=="volume"&&X!=="muted"||Ai(m,b,V,0,i,1/0)}m.seek(1e-6),m.seek(0);let C={tl:m,stub:b};return Ri(kr,Wa),kr.set(a,{cacheTime:Date.now(),value:C}),C}ke();var rs=(t,e)=>[t[0]*e[0]+t[4]*e[1]+t[8]*e[2]+t[12],t[1]*e[0]+t[5]*e[1]+t[9]*e[2]+t[13],t[2]*e[0]+t[6]*e[1]+t[10]*e[2]+t[14]],Oi=(t,e)=>[t[0]*e[0]+t[4]*e[1]+t[8]*e[2],t[1]*e[0]+t[5]*e[1]+t[9]*e[2],t[2]*e[0]+t[6]*e[1]+t[10]*e[2]];function Gi(t,e,n,o){if(!n||!t?.length)return e;let i=[...e],s=new Map(t.map((c,a)=>[c.toLowerCase(),a]));for(let[c,a]of Object.entries(n)){let d=s.get(c.toLowerCase());d!==void 0&&(i[d]=Qt(a,o,i[d]??0))}return i}function os(t){return!!(t.animationLayers?.length||t.ik?.length||t.lookAt?.length||t.springBones?.length||t.pose&&Object.keys(t.pose).length||t.aim?.length||t.drive?.length)}function is(t,e,n){let o=b=>b*Math.PI/360,[i,s]=[Math.sin(o(t)),Math.cos(o(t))],[c,a]=[Math.sin(o(e)),Math.cos(o(e))],[d,m]=[Math.sin(o(n)),Math.cos(o(n))];return[m*a*i-d*c*s,m*c*s+d*a*i,d*a*s-m*c*i,m*a*s+d*c*i]}function as(t,e){return Object.entries(t.node.pose??{}).map(([n,o])=>({joint:n,rotation:is(Qt(o.rotateX,e,0),Qt(o.rotateY,e,0),Qt(o.rotateZ,e,0)),offset:[Qt(o.x,e,0),Qt(o.y,e,0),Qt(o.z,e,0)],weight:Qt(o.weight,e,1),mode:o.mode??"additive"}))}function ss(t,e){let n=t.node.animationLayers;if(!n?.length)return t.clip?[{clip:t.clip,time:t.clipSec,weight:1}]:[];let o=[];for(let i of n){let[s]=Jr(t.model,[i.clip]);if(!s)continue;let c=(i.timeOffset??0)+e/t.fps*(i.speed??1);s.duration>0&&(c=i.loop??!0?(c%s.duration+s.duration)%s.duration:Math.min(Math.max(c,0),s.duration)),o.push({clip:s,time:c,weight:Qt(i.weight,{frame:e,fps:t.fps},1),mask:i.mask})}return o}function cs(t,e,n){let o={frame:e,fps:t.fps},i=c=>rs(n,qr(c,o)),s=c=>Oi(n,qr(c,o));return{pose:as(t,o),aim:(t.node.aim??[]).map(c=>({joint:c.joint,direction:s(c.direction),weight:Qt(c.weight,o,1),...c.axis&&{axis:c.axis}})),ik:(t.node.ik??[]).map(c=>({chain:c.chain,target:i(c.target),pole:c.poleTarget?i(c.poleTarget):void 0,weight:Qt(c.weight,o,1)})),drive:[...t.model.drivers??[],...t.node.drive??[]],lookAt:(t.node.lookAt??[]).map(c=>({joint:c.joint,target:i(c.target),weight:Qt(c.weight,o,1),maxAngleDeg:c.maxAngleDeg??70,axis:c.axis??[0,0,1]}))}}function Li(t,e,n){let o=wi(t.model,ss(t,e));return Mi(o,cs(t,e,n)),o}var Sr=new Map;function ls(t,e,n){let o=t.node.springBones;if(!o?.length)return;let i=JSON.stringify([o,t.node.animationLayers,t.node.pose,t.node.aim,t.fps]),s=Sr.get(t.key),c=Math.max(0,Math.floor(t.frame));if(!s||s.model!==t.model||s.config!==i||s.frame>c){let a=d=>Oi(e,d??[0,0,0]);s={model:t.model,config:i,springs:new xr(n,o.map(d=>({...d,gravity:a(d.gravity)}))),frame:-1},Sr.size>256&&Sr.clear(),Sr.set(t.key,s)}for(let a=s.frame+1;a<=c;a++)s.springs.step(Li(t,a,e),1/t.fps),s.frame=a;return s.springs}function zi(t){if(!os(t.node)&&!t.model.drivers?.length)return er(t.model,t.clip,t.clipSec);let e=_.invert(t.sceneRoot)??_.identity(),n=Li(t,t.frame,e);return ls(t,e,n)?.apply(n),n.world()}var Vi=new WeakMap,Fi=new WeakMap;function Ni(t,e){let n=Fi.get(e);return n||(n=t.createBuffer({label:"CrowdPalette",size:Math.max(64,e.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(n,0,e),Fi.set(e,n)),n}function Ui(t,e){let n=JSON.stringify([e.clips,e.fps??30]),o=Vi.get(t);o||(o=new Map,Vi.set(t,o));let i=o.get(n);if(!i){let s=Jr(t,e.clips);if(!s.length)return;i=gi(t,s,e.fps??30),o.set(n,i)}return i}function Yi(t,e,n,o){let i=No((e.seed??1)*7919+n*104729),s=i(),c=i(),a=(o.clip??n)%t.clips.length,d=t.clips[Math.max(0,a)],[m,b]=e.speedRange??[1,1],h=o.animOffset??((e.phase??"random")==="random"?s*d.duration:0),C=d.duration>0?d.count/d.duration:t.fps;return[d.base,d.count,h*C,(o.animSpeed??m+(b-m)*c)*C]}ke();function Rn(t,e){return e?t==="flex"||t==="block"||t==="box":!1}ke();var us=4096;function Xi(t,e,n,o,i,s){let c=t?.lens?.projection??"perspective",a=t?.relativity;if(c==="perspective"&&!a)return null;let d={projection:c,fov:e.fov,zoom:e.zoom},m=t?.lens?.cubeSize,b=Math.min(s,m??Lo(d,o,i,Math.min(us,s))),h=Oo(e),C=a?{speed:n,direction:a.direction?Gn.normalize(a.direction):h.forward,doppler:a.doppler??!0,beaming:a.beaming??!0,exposure:a.exposure??"auto"}:null;return{faceSize:b,remap:{...d,basis:h,observer:C},centerDensity:Go(d,o,i)}}ke();function Zi(t,e,n){let o=e.track,i=(t.nodes?.length??0)*7;if(!o?.length||!i)return!0;let s=Math.floor(o.length/i),c=Math.min(Math.max(Math.ceil(n),0),s-1)*i;for(let a=0;a<i;a++)if(o[c+a]!==o[a])return!1;return!0}function _i(t,e){return ni(t,e).model}function Ei(t,e){return{p:[t[e],t[e+1],t[e+2]],q:[t[e+3],t[e+4],t[e+5],t[e+6]]}}function ds(t,e,n){if(n<=0)return t;let o=t.q.reduce((c,a,d)=>c+a*e.q[d],0)<0?-1:1,i=t.q.map((c,a)=>c+(e.q[a]*o-c)*n),s=Math.hypot(...i)||1;return{p:t.p.map((c,a)=>c+(e.p[a]-c)*n),q:i.map(c=>c/s)}}function ji(t,e,n,o,i){let s=e.track,c=t.nodes?.length??0,a=c*7;if(!s?.length||!a||s.length%a!==0)return;let d=s.length/a,m=Math.min(Math.max(n,0),d-1),b=Math.floor(m),h=Math.min(d-1,b+1),C=_.invert(o)??_.identity(),V=[];for(let X=0;X<c;X++){let{p:ee,q:W}=ds(Ei(s,b*a+X*7),Ei(s,h*a+X*7),m-b);V.push(_.multiply(C,Uo(ee,W,i)))}return V}ke();var ms=new Set(["position","rotation","scale","modelMatrix","normalMatrix","bounds"]);function no(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e))return t.length===e.length&&t.every((s,c)=>no(s,e[c]));if(!t||!e||typeof t!="object"||typeof e!="object"||Object.getPrototypeOf(t)!==Object.prototype||Object.getPrototypeOf(e)!==Object.prototype)return!1;let n=t,o=e,i=Object.keys(n);return i.length===Object.keys(o).length&&i.every(s=>Object.hasOwn(o,s)&&no(n[s],o[s]))}function Qi(t){let e=t.opts;return!t.meshBuffers&&!e.transparent&&!e.instanceBuffer&&(e.instanceCount??1)===1&&!e.firstInstance&&!e.matrixInstances&&!e.isSkinned&&!e.skinningMatrices&&!e.audioDeform&&!e.morphWeights?.length&&e.material!=="glass"&&e.material!=="acrylic"&&e.material!=="frosted"&&(e.opacity??1)>=1&&(e.colorTint?.[3]??1)>=1}function Wi(t,e){if(!Qi(t)||!Qi(e)||t.mesh!==e.mesh||t.texture!==e.texture)return!1;let n=t.opts,o=e.opts,i=new Set([...Object.keys(n),...Object.keys(o)]);for(let s of i)if(!ms.has(s)&&!no(n[s],o[s]))return!1;return!0}ke();var or=class{frame=Number.NaN;value;prevFrame=Number.NaN;prevValue;write(e,n){e!==this.frame&&(this.prevFrame=this.frame,this.prevValue=this.value),this.frame=e,this.value=n}at(e){if(e===this.frame)return this.value;if(e===this.prevFrame)return this.prevValue}},ro=class{states=new Map;instances;vertices;camera=new or;frames=new or;constructor(e){this.instances=new Pr(e,"Instances"),this.vertices=new Pr(e,"Vertices")}needsPrevious(e){return e>0&&this.frames.at(e-1)===void 0}previousCamera(e){return this.camera.at(e-1)}previousMesh(e,n,o){let i=this.states.get(e)?.at(n-1);if(i?.kind!=="mesh")return;let s={modelMatrix:i.modelMatrix};o.skinning&&i.skinning?.length===o.skinning.length&&(s.skinningMatrices=i.skinning);let c=this.instances.at(e,n-1);o.instanceBuffer&&c&&i.instanceBytes===o.instanceBuffer.size&&(s.instanceBuffer=c);let a=this.vertices.at(e,n-1);return o.vertexBytes&&a&&i.vertexBytes===o.vertexBytes&&(s.vertexBuffer=a),o.wind&&i.windTime!==void 0&&(s.wind={...o.wind,time:i.windTime}),o.crowd&&i.crowdTime!==void 0&&(s.crowd={...o.crowd,time:i.crowdTime}),s}previousQuad(e,n){let o=this.states.get(e)?.at(n-1);return o?.kind==="quad"?o.modelMatrix:void 0}recordMesh(e,n,o,i,s){let{instanceBuffer:c,vertices:a}=s;c&&this.instances.copy(e,n,o,c,c.size,GPUBufferUsage.STORAGE),a&&this.vertices.copy(e,n,o,a.buffer,a.bytes,GPUBufferUsage.VERTEX),this.slots(n).write(o,{kind:"mesh",...i,...i.skinning&&{skinning:i.skinning.slice()},instanceBytes:c?.size,vertexBytes:a?.bytes})}previousSlug(e,n){let o=this.states.get(e)?.at(n-1);return o?.kind==="slug"?o:void 0}recordSlug(e,n,o,i){this.slots(e).write(n,{kind:"slug",modelMatrix:o,batches:i.map(s=>({...s,instances:s.instances.slice(0,s.instanceCount*24)}))})}recordQuad(e,n,o){this.slots(e).write(n,{kind:"quad",modelMatrix:o})}recordFrame(e,n){this.camera.write(e,n),this.frames.write(e,!0)}slots(e){let n=this.states.get(e);return n||(n=new or,this.states.set(e,n)),n}},Pr=class{constructor(e,n){this.device=e;this.label=n}device;label;pairs=new Map;at(e,n){return this.pairs.get(e)?.[n&1]}copy(e,n,o,i,s,c){let a=this.pairs.get(n)??[],d=o&1,m=a[d];(!m||m.size!==s)&&(m?.destroy(),m=this.device.createBuffer({label:`MotionHistory${this.label}:${n}`,size:s,usage:c|GPUBufferUsage.COPY_DST}),a[d]=m,this.pairs.set(n,a)),e.copyBufferToBuffer(i,0,m,0,s)}},Dr=new Map;function oo(t,e){let n=Dr.get(e);return n||(Dr.size>64&&Dr.clear(),n=new ro(t),Dr.set(e,n)),n}ke();function fs(t){let e=Math.PI/180,n=t.scale??1,o=_.translate(t.x??0,t.y??0,t.z??0);return t.rotateZ&&(o=_.multiply(o,_.rotateZ(t.rotateZ*e))),t.rotateY&&(o=_.multiply(o,_.rotateY(t.rotateY*e))),t.rotateX&&(o=_.multiply(o,_.rotateX(t.rotateX*e))),_.multiply(o,_.scale(n*(t.scaleX??1),n*(t.scaleY??1),n*(t.scaleZ??1)))}var ps=t=>typeof t=="object"&&t!==null&&"meshes"in t;async function Hi(t,e){if(ps(t.modelData))return t.modelData;if(t.primitive3d)return Pn(t.primitive3d);if(t.src)return e(t.src,t)}var Rr={q:[0,0,0,1],s:1};function qi(t,e){return[t[3]*e[0]+t[0]*e[3]+t[1]*e[2]-t[2]*e[1],t[3]*e[1]-t[0]*e[2]+t[1]*e[3]+t[2]*e[0],t[3]*e[2]+t[0]*e[1]-t[1]*e[0]+t[2]*e[3],t[3]*e[3]-t[0]*e[0]-t[1]*e[1]-t[2]*e[2]]}function Ji(t,e){let n=t.bounds;if(!n)return 0;let o=Number.NEGATIVE_INFINITY;for(let i=0;i<8;i++){let s=[i&1?n.max[0]:n.min[0],i&2?n.max[1]:n.min[1],i&4?n.max[2]:n.min[2]];o=Math.max(o,oi(e.q,s)[1]*e.s)}return o}var $i=new WeakMap;function Ki(t,e,n){let o=t.surface,i=JSON.stringify([n,e.bounds?.size]),s=$i.get(t);if(s&&s.key===i)return s.out;let{points:c}=ii({model:e,matrix:fs(o)},t),a=Math.max(1,n.length),d=c.map((m,b)=>{let[h,C,V]=ai(m,n[b%a]??0,t.sink??0);return{x:h,y:C,z:V,rotation:m.rotation,scale:m.scale}});return $i.set(t,{key:i,out:d}),d}function io(t,e,n){if(!t)return;let o=e.bounds,i=o?o.size[1]:0;if(!(!o||i<=0))return{amplitudeDeg:t.amplitudeDeg??8,frequency:t.frequency??.4,direction:t.direction??[1,0],waveScale:t.waveScale??600,time:n,baseY:o.max[1],height:i}}ke();function ao(t,e){return{a:1,b:0,c:0,d:1,e:t,f:e}}function hs(t){let e=t*Math.PI/180,n=Math.cos(e),o=Math.sin(e);return{a:n,b:o,c:-o,d:n,e:0,f:0}}function gs(t,e=t){return{a:t,b:0,c:0,d:e,e:0,f:0}}function Cr(t,e){return{a:t.a*e.a+t.c*e.b,b:t.b*e.a+t.d*e.b,c:t.a*e.c+t.c*e.d,d:t.b*e.c+t.d*e.d,e:t.a*e.e+t.c*e.f+t.e,f:t.b*e.e+t.d*e.f+t.f}}function ys(t,e,n){return{x:t.a*e+t.c*n+t.e,y:t.b*e+t.d*n+t.f}}function ea(t){return new DOMMatrix([t.a,t.b,t.c,t.d,t.e,t.f])}function ta(t){let e=t.anchorX??.5,n=t.anchorY??.5,o=e*t.width,i=n*t.height,s=t.scale??1,c=(t.scaleX??1)*s,a=(t.scaleY??1)*s;return Cr(ao(t.x,t.y),Cr(ao(o,i),Cr(hs(t.rotation),Cr(gs(c,a),ao(-o,-i)))))}function na(t){let e=t.baseX??0,n=t.baseY??0,o=t.sampledX??e,i=t.sampledY??n,s=0,c=0;t.rect&&t.parentRect?(s=t.rect.x-t.parentRect.x+(o-e),c=t.rect.y-t.parentRect.y+(i-n)):t.rect?(s=t.rect.x+(o-e),c=t.rect.y+(i-n)):(s=o,c=i);let a=t.parentMatrix;return a?"isIdentity"in a&&a.isIdentity?{x:s,y:c}:ys(a,s,c):{x:s,y:c}}var bs=4;function ra(t,e,n){let o=Math.max(1,e.width),i=Math.max(1,e.height),s=Math.min(bs,n.maxDimension/Math.max(o,i),Math.sqrt(n.maxPixels/(o*i)),n.effects),c=n.maxDimension/Math.max(o,i);if(c<1)return Math.floor(c*1024)/1024;let a=Math.ceil(t*4-1e-6)/4;return Math.max(1,Math.min(a,Math.floor(s*4+1e-6)/4))}ke();var ze={identity(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},multiply(t,e){let n=new Array(16);for(let o=0;o<4;o++)for(let i=0;i<4;i++)n[i*4+o]=t[0+o]*e[i*4+0]+t[4+o]*e[i*4+1]+t[8+o]*e[i*4+2]+t[12+o]*e[i*4+3];return n},translate(t,e,n=0){return[1,0,0,0,0,1,0,0,0,0,1,0,t,e,n,1]},scale(t,e,n=1){return[t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1]},rotateX(t){let e=Math.cos(t),n=Math.sin(t);return[1,0,0,0,0,e,n,0,0,-n,e,0,0,0,0,1]},rotateY(t){let e=Math.cos(t),n=Math.sin(t);return[e,0,-n,0,0,1,0,0,n,0,e,0,0,0,0,1]},rotateZ(t){let e=Math.cos(t),n=Math.sin(t);return[e,n,0,0,-n,e,0,0,0,0,1,0,0,0,0,1]},perspective(t){if(t<=0)return ze.identity();let e=ze.identity();return e[11]=-1/t,e},buildLayer3DMatrix(t){let{x:e,y:n,width:o,height:i,rotateXDeg:s=0,rotateYDeg:c=0,rotateZDeg:a=0,scaleX:d=1,scaleY:m=1,perspectivePx:b=0,originXRatio:h=.5,originYRatio:C=.5,translateZPx:V=0}=t,X=e+o*h,ee=n+i*C,W=s*Math.PI/180,B=c*Math.PI/180,O=a*Math.PI/180,P=ze.identity();return P=ze.multiply(P,ze.translate(X,ee,0)),b>0&&(P=ze.multiply(P,ze.perspective(b))),V!==0&&(P=ze.multiply(P,ze.translate(0,0,V))),O!==0&&(P=ze.multiply(P,ze.rotateZ(O))),B!==0&&(P=ze.multiply(P,ze.rotateY(B))),W!==0&&(P=ze.multiply(P,ze.rotateX(W))),P=ze.multiply(P,ze.translate(-o*h,-i*C,0)),(d!==1||m!==1)&&(P=ze.multiply(P,ze.scale(d,m,1))),P},projectPoint(t,e){let n=e.x,o=e.y,i=e.z,s=t[0]*n+t[4]*o+t[8]*i+t[12],c=t[1]*n+t[5]*o+t[9]*i+t[13],a=t[3]*n+t[7]*o+t[11]*i+t[15],d=Math.abs(a)>1e-6?1/a:1;return{x:s*d,y:c*d}},projectRectangleCorners(t,e,n){return{topLeft:ze.projectPoint(t,{x:0,y:0,z:0}),topRight:ze.projectPoint(t,{x:e,y:0,z:0}),bottomLeft:ze.projectPoint(t,{x:0,y:n,z:0}),bottomRight:ze.projectPoint(t,{x:e,y:n,z:0})}},computeSignedArea(t){let{topLeft:e,topRight:n,bottomRight:o,bottomLeft:i}=t;return .5*(e.x*n.y-n.x*e.y+(n.x*o.y-o.x*n.y)+(o.x*i.y-i.x*o.y)+(i.x*e.y-e.x*i.y))}};function so(t,e){let n=t?.rotateX??e?.rotateX??0,o=t?.rotateY??e?.rotateY??0,i=t?.rotateZ??e?.rotateZ??0,s=t?.translateZ??e?.translateZ??0,c=t?.perspective??e?.perspective??0;if(n!==0||o!==0||s!==0||c>0&&(n!==0||o!==0||s!==0||i!==0)||t?.rotateZ!==void 0&&t.rotateZ!==0||e?.rotateZ!==void 0&&e.rotateZ!==0)return!0;let a=e?.animation?.tracks;if(a&&a.length>0){for(let d of a)if(d.prop==="rotateX"||d.prop==="rotateY"||d.prop==="rotateZ"||d.prop==="translateZ"||d.prop==="perspective")return!0}return!1}var oa=new WeakMap;function xs(t,e){let n=m=>typeof m=="number"&&m>0?m:0,o=n(t?.strokeWidth??e.strokeWidth),s=!!(t?.stroke??t?.strokeColor??e.stroke)?e.strokeAlign==="outside"?o:o/2:0,c=0,a=e.shadows;if(Array.isArray(a))for(let m of a)c=Math.max(c,Math.max(Math.abs(m.offset?.x??0),Math.abs(m.offset?.y??0))+2*n(m.blurRadius));let d=s+c;return d>0?Math.ceil(d)+1:0}function ia(t){return t.positions.length/3*64}function ws(t){let e=oa.get(t);if(e!==void 0)return e;let n=t.colors,o=!1;if(n){for(let i=3;i<n.length;i+=4)if(n[i]<1){o=!0;break}}return oa.set(t,o),o}var Ms=["width","height","gap","padding","fontSize","letterSpacing"],aa=new WeakMap;function vs(t,e,n,o){let i=[t,e];for(let s in n){let c=n[s];for(let a of Ms)c[a]!==void 0&&i.push(s,a,c[a])}for(let[s,c]of o)i.push(s,c.width,c.height);return JSON.stringify(i)}var ks=`
173
+ struct HomographyUniforms {
174
+ matrix_row0 : vec4<f32>,
175
+ matrix_row1 : vec4<f32>,
176
+ matrix_row2 : vec4<f32>,
177
+ params : vec4<f32>, // params.x = opacity
178
+ };
179
+
180
+ @group(0) @binding(0) var<uniform> u : HomographyUniforms;
181
+ @group(1) @binding(0) var tex : texture_2d<f32>;
182
+ @group(1) @binding(1) var samp : sampler;
183
+ ${si}
184
+
185
+ @fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
186
+ let x = in.uv.x;
187
+ let y = in.uv.y;
188
+
189
+ let d = u.matrix_row2.x * x + u.matrix_row2.y * y + u.matrix_row2.z;
190
+ if (d <= 1e-6) {
191
+ return vec4<f32>(0.0);
192
+ }
193
+
194
+ let src_u = (u.matrix_row0.x * x + u.matrix_row0.y * y + u.matrix_row0.z) / d;
195
+ let src_v = (u.matrix_row1.x * x + u.matrix_row1.y * y + u.matrix_row1.z) / d;
196
+
197
+ if (src_u < 0.0 || src_u > 1.0 || src_v < 0.0 || src_v > 1.0) {
198
+ return vec4<f32>(0.0);
199
+ }
200
+
201
+ let color = textureSampleLevel(tex, samp, vec2<f32>(src_u, src_v), 0.0);
202
+ return color * u.params.x;
203
+ }
204
+ `,sa=new WeakMap;function Ts(t,e){let n=sa.get(t);if(!n){let o=Wr(t,["uniform"]),i=Wr(t,["texture","sampler"]),s=t.createShaderModule({label:"compositor_homography.wgsl",code:ks});n={pipeline:li(t,{label:"CompositorHomographyPipeline",module:s,layouts:[o,i],format:e,blend:ci}),uniformLayout:o,textureLayout:i},sa.set(t,n)}return n}var Ar=new Map,ca=new WeakMap,la=new WeakMap,ua=new WeakMap;function gn(t,e,n){let o=la.get(t);o||(o=new Map,la.set(t,o));let i=`${e}|${n}`,s=o.get(i);return s||(s=new ri(t,e,n),o.set(i,s)),s}var da=new WeakMap;function co(t,e){let n=da.get(t);return(!n||n.format!==e)&&(n=new Mr(t,e),da.set(t,n)),n}var ma=new WeakMap;function fa(t,e){let n=ma.get(t);n||(n=new Map,ma.set(t,n));let o=n.get(e);return o||(o=new pi(t),n.set(e,o)),o}function pa(t,e,n,o,i){if(e.length>0||t.lightType===void 0&&t.intensity===void 0&&t.lightPosX===void 0)return e;let s=String(t.lightType??"point").toLowerCase(),c=s==="directional"?"directional":s==="spot"?"spot":"point",a=t.intensity??1,d=Rt(a,1,o,i),m=Rt(t.lightPosX,.5,o,i),b=Rt(t.lightPosY,.5,o,i),h=Rt(t.lightPosZ,.25,o,i),C=Rt(t.lightRadius,.75,o,i),V=n.x+m*n.width,X=n.y+b*n.height,ee=h*Math.max(n.width,n.height),W=C*Math.max(n.width,n.height),B={lightType:c,color:t.lightColor??"#ffffff",intensity:d,x:V,y:X,z:ee,radius:W,decay:1},O=Rt(t.ambientIntensity,.15,o,i);return[{lightType:"ambient",color:t.ambientColor??"#ffffff",intensity:O},B]}function Br(t,e,n,o,i,s,c,a){if(Math.abs(ze.computeSignedArea(i))<1e-4)return;let m=Math.max(0,Math.min(s,Math.floor(Math.min(i.topLeft.x,i.topRight.x,i.bottomLeft.x,i.bottomRight.x)))),b=Math.max(0,Math.min(c,Math.floor(Math.min(i.topLeft.y,i.topRight.y,i.bottomLeft.y,i.bottomRight.y)))),h=Math.max(0,Math.min(s,Math.ceil(Math.max(i.topLeft.x,i.topRight.x,i.bottomLeft.x,i.bottomRight.x)))),C=Math.max(0,Math.min(c,Math.ceil(Math.max(i.topLeft.y,i.topRight.y,i.bottomLeft.y,i.bottomRight.y)))),V=h-m,X=C-b;if(V<=0||X<=0)return;let ee=[{x:i.topLeft.x/s,y:i.topLeft.y/c},{x:i.topRight.x/s,y:i.topRight.y/c},{x:i.bottomLeft.x/s,y:i.bottomLeft.y/c},{x:i.bottomRight.x/s,y:i.bottomRight.y/c}],W=Co(ee);for(let Te of W)if(!Number.isFinite(Te))return;let B=new Float32Array(16);B[0]=W[0],B[1]=W[1],B[2]=W[2],B[3]=0,B[4]=W[3],B[5]=W[4],B[6]=W[5],B[7]=0,B[8]=W[6],B[9]=W[7],B[10]=W[8],B[11]=0,B[12]=a,B[13]=0,B[14]=0,B[15]=0;let{pipeline:O,uniformLayout:P,textureLayout:G}=Ts(t.device,t.renderer.format),L=t.renderer.samplerCache.getSampler(t.device),u=t.renderer.getTemporaryBuffer(B),M=t.device.createBindGroup({layout:P,entries:[{binding:0,resource:{buffer:u}}]}),te=t.renderer.bindGroupCache.getBindGroup(t.device,G,o,L),ne=e.beginRenderPass({colorAttachments:[{view:n,loadOp:"load",storeOp:"store"}]});ne.setPipeline(O),ne.setScissorRect(m,b,V,X),ne.setBindGroup(0,M),ne.setBindGroup(1,te),ne.draw(4),ne.end()}function Xn(t,e,n){let o=h=>h<=.0031308?12.92*h:1.055*h**.4166666666666667-.055,i=t?.emissive??e.emissive??(n?.emissive?[o(n.emissive[0]),o(n.emissive[1]),o(n.emissive[2])]:void 0),s={};i!==void 0&&(s.emissive=i,s.emissiveIntensity=t?.emissiveIntensity??e.emissiveIntensity??n?.emissiveStrength??1),e.castShadow!==void 0&&(s.castShadow=e.castShadow),s.toon=t?.toon??e.toon,s.outline=t?.outline??e.outline;let c=n?.surface,a={clearcoat:t?.clearcoat??e.clearcoat??c?.clearcoat,clearcoatRoughness:t?.clearcoatRoughness??e.clearcoatRoughness??c?.clearcoatRoughness,anisotropy:t?.anisotropy??e.anisotropy??c?.anisotropy,anisotropyRotation:t?.anisotropyRotation??e.anisotropyRotation??c?.anisotropyRotation,subsurface:t?.subsurface??e.subsurface??c?.subsurface,subsurfaceColor:t?.subsurfaceColor??e.subsurfaceColor??c?.subsurfaceColor,sheen:t?.sheen??e.sheen??c?.sheen,sheenColor:t?.sheenColor??e.sheenColor??c?.sheenColor,sheenRoughness:t?.sheenRoughness??e.sheenRoughness??c?.sheenRoughness,iridescence:t?.iridescence??e.iridescence??c?.iridescence,iridescenceThickness:t?.iridescenceThickness??e.iridescenceThickness??c?.iridescenceThickness,iridescenceIor:t?.iridescenceIor??e.iridescenceIor??c?.iridescenceIor};for(let[h,C]of Object.entries(a))C!==void 0&&(s[h]=C);let d=t?.triplanar??e.triplanar;d!==void 0&&(s.triplanar=d);let m=t?.triplanarScale??e.triplanarScale;m!==void 0&&(s.triplanarScale=m);let b=t?.triplanarSharpness??e.triplanarSharpness;return b!==void 0&&(s.triplanarSharpness=b),s}function Ss(t){let e=n=>Math.hypot(t[n],t[n+1],t[n+2]);return(e(0)+e(4)+e(8))/3}function ha(t,e,n){let o=[t.transformPoint(new DOMPoint(0,0)),t.transformPoint(new DOMPoint(e,0)),t.transformPoint(new DOMPoint(0,n)),t.transformPoint(new DOMPoint(e,n))],i=o.map(b=>b.x),s=o.map(b=>b.y),c=Math.min(...i),a=Math.min(...s),d=Math.max(...i),m=Math.max(...s);return{x:Math.round(c),y:Math.round(a),width:Math.max(0,Math.round(d-c)),height:Math.max(0,Math.round(m-a))}}function Ds(t){let e=0;for(let n of t){let o=n&&typeof n.toOperation=="function"?n.toOperation():n,i=o?Bo(o):null;if(i===null)return null;e+=i}return e}function Ps(t){let e=Number.POSITIVE_INFINITY;for(let n of t){let o=n&&typeof n.toOperation=="function"?n.toOperation():n;!o||typeof o!="object"||o.op==="Relight3D"||(e=Math.min(e,Io(o)))}return e}function Rs(t){let e=t?.operation?.op;return e==="source"||e==="Compositor"}function Ir(t,e,n){let o=Math.PI/180,i=t*o/2,s=e*o/2,c=n*o/2,a=Math.cos(i),d=Math.sin(i),m=Math.cos(s),b=Math.sin(s),h=Math.cos(c),C=Math.sin(c);return[h*m*d-C*b*a,h*b*a+C*m*d,C*m*a-h*b*d,h*m*a+C*b*d]}function Cs(t,e){if(!Array.isArray(t)||t.length===0){let a=nt(t||"#ffffff")??{r:1,g:1,b:1};return[a.r,a.g,a.b]}if(t.length===1){let a=nt(t[0])??{r:1,g:1,b:1};return[a.r,a.g,a.b]}let n=Math.max(0,Math.min(1,e))*(t.length-1),o=Math.min(Math.floor(n),t.length-2),i=n-o,s=nt(t[o])??{r:1,g:1,b:1},c=nt(t[o+1])??{r:1,g:1,b:1};return[s.r+(c.r-s.r)*i,s.g+(c.g-s.g)*i,s.b+(c.b-s.b)*i]}function As(t,e){return{x:t.x-e,y:t.y-e,width:t.width+e*2,height:t.height+e*2}}function Bs(t,e,n){let o=Math.max(0,Math.floor(t.x)),i=Math.max(0,Math.floor(t.y)),s=Math.min(e,Math.ceil(t.x+t.width)),c=Math.min(n,Math.ceil(t.y+t.height));return s>o&&c>i?{x:o,y:i,width:s-o,height:c-i}:null}async function Is(t,e,n,o,i,s,c,a,d,m,b,h,C,V,X){let ee=(G,L,u,M)=>ga(e,G,L,u,s,c,a,d,M,b,h,C,V,X);if(!t||t.width*t.height>o*i*.6)return ee(n,o,i,m);let W=(G,L,u,M,te)=>{let ne=s.renderer.beginFrame(c,G.createView(),{r:0,g:0,b:0,a:0},L,u,"clear");s.renderer.pushScissor({x:0,y:0,width:L,height:u}),s.renderer.pushIdentity(),s.renderer.drawTexture(ne,M,te,{opacity:1}),s.renderer.popTransform(),s.renderer.popScissor(),ne.end()},B=s.renderer.getTemporaryTexture(t.width,t.height,[n,...m]);W(B,t.width,t.height,n,{x:-t.x,y:-t.y,width:o,height:i});let O=await ee(B,t.width,t.height,[n,B,...m]),P=s.renderer.getTemporaryTexture(o,i,[O.texture,n,B,...m]);return W(P,o,i,O.texture,t),{texture:P,view:P.createView()}}async function ga(t,e,n,o,i,s,c,a,d,m,b,h,C,V,X=1){let ee=t.filter(G=>{if(!G||typeof G!="object")return!1;let L=G?.op,u=G?.constructor?.name;return!(L==="TemporalDeflicker"||L==="Deflicker"||L==="Relight3D"||u==="TemporalDeflicker"||u==="Relight3D")});if(ee.length===0)return{texture:e,view:e.createView()};let W={metadata:{width:n,height:o},operation:{op:"TextureSource",sourceTexture:e,dataType:"Image"},children:[]};for(let G=0;G<ee.length;G++){let L=ee[G],u=L&&typeof L.toOperation=="function"?L.toOperation():L,M=String(u.op??"effect");W={metadata:{width:n,height:o},operation:{op:M,id:`${V}-${M}_${G}`,effect:L,...u,dataType:"Image"},children:[W]}}let B=i.renderer.getTemporaryTexture(n,o,[e,...d]),O=B.createView();i.renderer.beginFrame(s,O,{r:0,g:0,b:0,a:0},n,o,"clear").end(),i.renderer.pushScissor({x:0,y:0,width:n,height:o}),i.renderer.pushIdentity();try{await a(W,{...c,containerWidth:n,containerHeight:o,pixelScale:X,renderId:`${c.renderId}-${V}-fx`,frame:m,compositionFrame:b,fps:h,isVideoMode:C,signals:c.signals,excludeTextures:[e,B,...d]},O,B,n,o)}finally{i.renderer.popTransform(),i.renderer.popScissor()}return{texture:B,view:O}}var lo=async t=>{let{ctx:e,pass:n,targetView:o,targetTexture:i,targetWidth:s,targetHeight:c,encoder:a,props:d,drawChild:m}=t,{virtualMedia:b,fps:h,frame:C}=d,V=b.operation;if(V){if(n.end(),V.op==="CompositorLayer"){console.warn("CompositorWebGPURenderer called directly with legacy CompositorLayer operation. This is a bug."),t.pass=e.renderer.beginFrame(a,o,{r:0,g:0,b:0,a:0},s,c,"load");return}if(V.op==="Compositor"){let X=V,ee=X.antialias3d===!1?1:4,W=d.containerWidth??e.surface.width,B=d.containerHeight??e.surface.height,O=X.width??W,P=X.height??B,G=typeof X.opacity=="number"?X.opacity:1,L=d.isVideoMode??(X.mode==="Video"||X.dataType==="Video"||b?.metadata?.durationMs!=null),u=d.inheritedSeekOffset??0,M=Math.max(0,C!=null&&h!=null?C+Math.round(u*h):C??0),te=d.compositionFrame??M,ne=d.motionHistoryOnly===!0,Te=e.renderer.getTemporaryTexture(O,P,[...d.excludeTextures||[],i]),mt=Te.createView(),At=b?.metadata?.durationMs??3e3,Wt=At/1e3,rt=Bi(d.renderId,b,{fps:h??24,durationSec:Wt}),{targetsById:ot}=rt;!ne&&C!=null&&Vs(b)&&oo(e.device,rt.key).needsPrevious(M)&&await Fs(t,C-1),Tn(rt,M,h??24);let ya=gn(e.device,e.renderer.format??"rgba8unorm",ee),ba=co(e.device,e.renderer.format??"rgba8unorm");ua.get(e.device)!==a&&(ua.set(e.device,a),ya.resetPools(),ba.resetPools());let xa=nt(X.backgroundColor);e.renderer.beginFrame(a,mt,xa,O,P,"clear").end();let uo=Te;e.renderer.pushScissor({x:0,y:0,width:O,height:P}),e.renderer.pushIdentity(),await mi();let ir=new Map;for(let f of zn(b.children)){let x=f.operation;if(x.kind==="media"){let Q=Jn(f.children?.[0]);if(Q?.width&&Q?.height)ir.set(x.id,{width:Q.width,height:Q.height});else if(x.dataType==="Caption"||f.children?.[0]?.operation?.dataType==="Caption"||f.children?.[0]?.operation?.srtText!==void 0){let v=ot[x.id]?.width??x.width,xe=typeof v=="number"?v:Math.round(O*.8),E=ot[x.id]?.height??x.height,pe=typeof E=="number"?E:160,$=f.children?.[0],S=Zo($)??$?.operation?.url??$?.operation?.src??$?.operation?.srtText??x.src??x.url;if(typeof E!="number"&&S)try{let z=await $o.load(S);z&&z.length>0&&(pe=Wo(z,x,xe))}catch{}ir.set(x.id,{width:xe,height:pe})}}}let mo=f=>{let x=f?.operation??{},Q=ot[x.id],v=E=>Q&&Q[E]!==void 0?Q[E]:x[E],xe={...x,width:v("width"),height:v("height"),gap:v("gap"),padding:v("padding"),fontSize:v("fontSize"),letterSpacing:v("letterSpacing")};return xe.children=(f?.children??[]).map(mo),xe.children.length||(xe.children=void 0),xe},wa=()=>(b.children??[]).map(mo).filter(f=>f?.kind!=="camera"&&f?.kind!=="light"),ar=b.children,Vr=vs(O,P,ot,ir),Fr=ar?aa.get(ar):void 0,{rects:sr}=Fr?.key===Vr?Fr:await fi({layout:wa(),viewport:{width:O,height:P},measure:(f,x)=>{if(f.kind==="text"){let Q={fontSize:f.fontSize??48,fontWeight:f.fontWeight,fontVariations:f.fontVariations,fontFamily:f.fontFamily,letterSpacing:f.letterSpacing,lineHeight:f.lineHeight,padding:f.padding,direction:f.direction};if(x!==void 0){let E=typeof f.width!="number",pe=yr(f.text??"",{...Q,width:E?void 0:x,keepNaturalWidth:!0});return{width:E?Math.ceil(pe.width):Math.min(x,Math.ceil(pe.width)),height:Math.ceil(pe.height)}}let v=yr(f.text??"",Q);if(typeof f.width!="number")return{width:Math.ceil(v.width),height:Math.ceil(v.height)};let xe=yr(f.text??"",{...Q,width:f.width});return{width:Math.ceil(xe.width),height:Math.ceil(xe.height)}}return f.kind==="media"?ir.get(f.id)??null:null}});ar&&Fr?.key!==Vr&&aa.set(ar,{key:Vr,rects:sr});let Or=zn(b.children??[]),fo=Or.filter(f=>f.operation?.kind==="camera"),po=L?fo.filter(f=>{let x=f.operation,Q=x.startFrame??0,v=x.durationFrames;return M>=Q&&(v===void 0||M<Q+v)}).sort((f,x)=>(x.operation.startFrame??0)-(f.operation.startFrame??0))[0]:fo[0],ho=Or.filter(f=>f.operation?.kind==="light"),Ma=Or.some(f=>{let x=f.operation,Q=x.id?ot[x.id]:void 0;return x.kind!=="camera"&&x.kind!=="light"&&(!!(Q?.is3D??x.is3D)||(Q?.z??x.z??0)!==0)}),va=!!(po||Ma||ho.length>0),me=null,go=[0,0,0],Cn=!1,cr=null,sn=null,yn=null,An=[],Bt=null,Bn=null,yo;if(va){let f=po?.operation,x=f?.id?ot[f.id]:void 0,Q=x?.cameraFov??f?.lens?.fov??50;me=Kn.createDefaultCamera(O,P,Q),go=[...me.eye],me.near=f?.lens?.near??1,me.far=f?.lens?.far??5e4,me.zoom=x?.cameraZoom??f?.lens?.zoom??1;let v=me.eye,xe=me.target,E=x?.cameraX??x?.x??f?.x??v[0],pe=x?.cameraY??x?.y??f?.y??v[1],$=x?.cameraZ??x?.z??f?.z??v[2];me.eye=[E,pe,$],x?.targetX!==void 0||x?.targetY!==void 0||x?.targetZ!==void 0||f?.targetX!==void 0||f?.targetY!==void 0||f?.targetZ!==void 0?me.target=[x?.targetX??f?.targetX??xe[0],x?.targetY??f?.targetY??xe[1],x?.targetZ??f?.targetZ??xe[2]]:me.target=[E,pe,0];let z=x?.cameraPitch??f?.pitch??0,Ce=x?.cameraYaw??f?.yaw??0,ft=x?.cameraRoll??f?.roll??0;(z!==0||Ce!==0||ft!==0)&&(me=Kn.applyOrientation(me,z,Ce,ft));let F=x?.orbitAzimuth,r=x?.orbitElevation,H=x?.orbitRadius;if(F!==void 0||r!==void 0||H!==void 0){let ge=H??Gn.distance(me.eye,me.target);me.eye=Kn.orbit(me.target,ge,F??0,r??0)}let l=x?.shakeTranslation??(f?.shake?.enabled?f?.shake?.translationAmplitude:0)??0,be=x?.shakeRotation??(f?.shake?.enabled?f?.shake?.rotationAmplitude:0)??0;if(l>0||be>0){let ge=M/(h??24);me=Kn.applyCameraShake(me,ge,{translationAmplitude:l,rotationAmplitude:be,frequency:f?.shake?.frequency??1.5,octaves:f?.shake?.octaves??3,seed:f?.shake?.seed??42})}Cn=!!(f?.dof?.enabled||x?.focusDistance!==void 0),Cn&&(me.focusDistance=x?.focusDistance??f?.dof?.focusDistance??Gn.distance(me.eye,me.target),me.fStop=x?.fStop??f?.dof?.fStop??2.8,me.maxBlurRadius=x?.maxBlurRadius??f?.dof?.maxBlurRadius??24);let kt=f?.motionBlur;if(kt&&h&&(cr=kt===!0?{}:kt,sn=oo(e.device,rt.key)),yn=Xi(f,me,x?.relativitySpeed??f?.relativity?.speed??0,O,P,e.device.limits.maxTextureDimension2D),yn&&Cn)throw new Error(`Camera '${f?.id}' is a cube camera (${f?.relativity?"relativity":f?.lens?.projection}) with depth of field: depth of field needs a single perspective view.`);for(let ge of ho){let y=ge.operation,pt=y.id||y.inputHandleId,q=pt?ot[pt]:void 0;if(q?.hidden||y.hidden)continue;if(L){let qe=y.startFrame??0,re=y.durationFrames;if(M<qe||re!==void 0&&M>=qe+re)continue}let It=q?.lightType??y.lightType??"point";if(It==="environment"){let qe=q?.intensity??y.intensity,re=q?.volumetricFogDensity??y.volumetricFogDensity,Oe=q?.volumetricFogAnisotropy??y.volumetricFogAnisotropy,lt=q?.volumetricFogNoiseStrength??y.volumetricFogNoiseStrength,N=y.volumetricFog,Pe=N===!0?{}:N&&typeof N=="object"?{...N}:void 0,rn=Pe?{...Pe,...re!==void 0&&{density:re},...Oe!==void 0&&{anisotropy:Oe},...lt!==void 0&&{noise:{...typeof Pe.noise=="object"?Pe.noise:{},strength:lt}}}:void 0;Bt={preset:y.preset,hdri:y.hdri,top:y.top,horizon:y.horizon,bottom:y.bottom,softboxes:q?.softboxes??y.softboxes,rotation:q?.rotation??y.rotation,exposure:q?.exposure??y.exposure,toneMapping:y.toneMapping,fog:y.fog,floor:y.floor,outlines:y.outlines,ssr:y.ssr,gi:y.gi,...rn&&{volumetricFog:rn},...qe!==void 0&&{intensity:qe}},Bn=y.bloom===!0?{}:y.bloom&&typeof y.bloom=="object"?{...y.bloom}:null;continue}let ht=q?.color??y.color??"#ffffff",Ue=nt(ht),Tt=q?.intensity??y.intensity??1,ct=q?.x??y.x??0,Vt=q?.y??y.y??0,Lt=q?.z??y.z??0,fe=q?.targetX??y.targetX??0,we=q?.targetY??y.targetY??0,Ne=q?.targetZ??y.targetZ??0,Ee=q?.radius??y.radius??1e3,g=q?.angle??y.angle??45,ie=q?.penumbra??y.penumbra??.2,Z=q?.decay??y.decay??1,ae=typeof(q?.width??y.width)=="number"?q?.width??y.width:void 0,T=typeof(q?.height??y.height)=="number"?q?.height??y.height:void 0,w=!!(q?.twoSided??y.twoSided),De=q?.rotation??y.rotation??0;An.push({type:It,color:Ue,intensity:Tt,position:[ct,Vt,Lt],target:[fe,we,Ne],...Array.isArray(y.direction)&&{direction:y.direction},radius:Ee,angle:g,penumbra:ie,decay:Z,...ae!==void 0&&{width:ae},...T!==void 0&&{height:T},twoSided:w,rotation:De,castShadow:!!y.castShadow,shadowSoftness:q?.shadowSoftness??y.shadowSoftness,shadowDarkness:q?.shadowDarkness??y.shadowDarkness}),y.castShadow&&y.shadowMapSize&&(yo=y.shadowMapSize)}}let We=[],Zn=()=>We.flatMap(f=>[f.texture,f.opts.matte,f.kind==="quad"?f.opts.relief?.texture:void 0]).filter(f=>!!f),bo=new Map,xo=(f,x,Q,v,xe)=>{let E=f===void 0?void 0:bo.get(f);if(!E)return{};let{width:pe,height:$}=E.texture;return{relief:{texture:E.texture,uvRect:[x/pe,Q/$,v/pe,xe/$],amount:E.amount,eye:go}}},wo=()=>{let f=new Map;return We.map(x=>{if(x.owner===void 0)return[x,void 0];let Q=f.get(x.owner)??0;return f.set(x.owner,Q+1),[x,`${x.owner}#${Q}`]})},Mo=(f,x)=>{let Q=gn(e.device,e.renderer.format??"rgba8unorm",ee);for(let[v,xe]of wo())xe&&(v.kind==="mesh"?f.recordMesh(a,xe,M,{modelMatrix:Q.meshModelMatrix(v.opts),skinning:v.opts.skinningMatrices,windTime:v.opts.wind?.time,crowdTime:v.opts.crowd?.time},{instanceBuffer:v.opts.instanceBuffer,vertices:v.meshBuffers&&{buffer:v.meshBuffers.vertexBuffer,bytes:ia(v.mesh)}}):v.kind==="quad"?f.recordQuad(xe,M,Q.quadModelMatrix(v.opts)):f.recordSlug(xe,M,Q.quadModelMatrix(v.opts),v.batches));f.recordFrame(M,x)},ka=(f,x,Q,v,xe,E)=>{let pe=gn(e.device,e.renderer.format??"rgba8unorm",ee),$=pe.beginVelocityPass(a,O,P,x,f.previousCamera(M)??x);E&&pe.drawFloorVelocity($.pass,$.cameraBindGroup,E);for(let[S,z]of wo())if(S.kind==="mesh"){let Ce=z?f.previousMesh(z,M,{skinning:S.opts.skinningMatrices,instanceBuffer:S.opts.instanceBuffer,vertexBytes:S.meshBuffers&&ia(S.mesh),wind:S.opts.wind,crowd:S.opts.crowd}):void 0;pe.drawMeshVelocity($.pass,$.cameraBindGroup,S.meshBuffers??S.mesh,S.texture,S.opts,Ce)}else S.kind==="quad"?pe.drawQuadVelocity($.pass,$.cameraBindGroup,S.texture,S.opts,z?f.previousQuad(z,M):void 0):pe.drawSlugVelocity($.pass,$.cameraBindGroup,S.batches,S.opts,S.stackBase,z?f.previousSlug(z,M):void 0);$.pass.end(),pe.applyMotionBlur(a,Q,$.velocity,v.createView(),{shutterAngle:xe.shutter,sampleCount:xe.samples,maxBlur:xe.maxBlur})},Gr=(f,x,Q)=>{if(We.length===0||!me)return{finalTex:f,finalView:x};let v=gn(e.device,e.renderer.format??"rgba8unorm",ee);for(let g of We)g.kind==="mesh"&&(g.opts.morphWeights?.length&&(g.meshBuffers=v.morphMesh(a,g.mesh,g.opts.morphWeights,g.opts.wireframe)),g.opts.audioDeform&&(g.meshBuffers=v.deformMesh(a,g.mesh,g.opts.audioDeform,g.opts.wireframe,g.meshBuffers)));if(ne)return sn&&Mo(sn,me),We.length=0,{finalTex:f,finalView:x};let xe=Zn(),E=e.renderer.getTemporaryTexture(O,P,[f,i,...Q,...xe]),pe=E.createView(),$=Bt?.outlines,S=$===!0?{}:$||null,z=!!Bt?.volumetricFog,Ce=!!(Bt?.ssr||Bt?.gi),ft=Cn||!!S||z||Ce,F,r;ft&&(F=v.getOrCreateLinearDepthTexture(O,P),r=F.createView());let H=[],l=An.filter(g=>(g.lightType??g.type)!=="ambient").map((g,ie)=>({light:g,index:ie})).filter(({light:g})=>{let ie=g.lightType??g.type;return g.castShadow&&(ie==="directional"||ie==="spot"||ie==="rect"||ie==="point")});if(l.length>0){let g=[],ie=[];for(let Z of We)if(Z.kind==="mesh"){let ae={kind:"mesh",mesh:Z.mesh,buffers:Z.meshBuffers,opts:Z.opts};ie.push(v.worldBounds(ae)),Z.opts.castShadow!==!1&&Z.opts.material!=="unlit"&&g.push(ae)}else if(Z.kind==="quad"){let ae={kind:"quad",texture:Z.texture,opts:Z.opts};ie.push(v.worldBounds(ae)),Z.opts.castShadow===!0&&g.push(ae)}if(g.length>0){let Z=l.reduce((De,{light:qe})=>De+((qe.lightType??qe.type)==="point"?6:1),0),ae=l.every(({light:De})=>(De.lightType??De.type)==="point"),T=yo??(ae?1024:2048),w=0;for(let{light:De,index:qe}of l){let re=(De.lightType??De.type)==="point"?6:1,Oe=v.renderShadowMap(a,De,qe,g,ie,{mapSize:T,layer:w,layerCount:Z});Oe&&(H.push(Oe),w+=Oe.layerCount??re)}}}let be=g=>g.kind==="mesh"&&(g.opts.material==="glass"||g.opts.material==="acrylic"||g.opts.material==="frosted"),kt=[],ge=[],y=[],pt=Gn.subtract(me.target,me.eye);for(let g of We)if(be(g))ge.push(g);else if(g.kind==="mesh"&&g.opts.transparent){let ie=v.worldBounds({kind:"mesh",mesh:g.mesh,opts:g.opts}),Z=ie.min.map((T,w)=>(T+ie.max[w])/2),ae=Z[0]*pt[0]+Z[1]*pt[1]+Z[2]*pt[2];y.push({item:g,depth:ae})}else kt.push(g);y.sort((g,ie)=>ie.depth-g.depth);let q=[],It=Math.max(1,Math.floor(e.device.limits.maxStorageBufferBindingSize/128));for(let g=0;g<kt.length;){let ie=kt[g];if(ie.kind!=="mesh"){q.push(ie),g++;continue}let Z=g+1;for(;Z<kt.length&&Z-g<It;){let ae=kt[Z];if(ae.kind!=="mesh"||!Wi(ie,ae))break;Z++}if(Z-g===1)q.push(ie);else{let ae=new Float32Array((Z-g)*32);for(let T=g;T<Z;T++){let w=kt[T];if(w.kind!=="mesh")throw new Error("Invalid mesh batch");let De=v.meshModelMatrix(w.opts);ae.set(De,(T-g)*32),ae.set(w.opts.normalMatrix??zo.computeNormalMatrix(De),(T-g)*32+16)}q.push({...ie,opts:{...ie.opts,modelMatrix:_.identity(),normalMatrix:_.identity(),instanceBuffer:v.uploadInstanceData(ae),instanceCount:Z-g,matrixInstances:!0}})}g=Z}let ht=[...q,...y.map(({item:g})=>g),...ge];if(yn){let g=[Ce&&"screen-space reflections and GI (ssr, gi)",cr&&"motion blur"].filter(Boolean);if(g.length)throw new Error(`A cube camera (${yn.remap.projection??"lens"}) cannot draw ${g.join(" or ")}: they need a single perspective view.`)}let Ue=Bt?.floor,Tt=H.length?H:null,ct=(g,ie,Z)=>{if(!Ue||typeof Ue.y!="number"||g.eye[1]>=Ue.y)return null;let ae={...g,eye:[g.eye[0],2*Ue.y-g.eye[1],g.eye[2]],target:[g.target[0],2*Ue.y-g.target[1],g.target[2]],up:[g.up[0],g.up[1],g.up[2]]},{pass:T,cameraBindGroup:w,lightsBindGroup:De,reflectionTexture:qe}=v.beginReflectionPass(a,ie,Z,ae,An,{environment:Bt,shadow:null});for(let re of ht)re.kind==="quad"?v.drawTextureQuad(T,w,De,re.texture,re.opts,!1):re.kind==="slug"?v.drawSlugText(T,w,De,re.batches,re.opts,re.stackBase,!1):re.kind==="mesh"&&v.drawMesh3D(T,w,De,re.meshBuffers??re.mesh,re.texture,re.opts,!1);return T.end(),v.blurReflection(a,qe,Ue.roughness??.35)},Vt=(g,ie,Z,ae)=>{let T=v.beginPass(a,g.color,g.width,g.height,g.view,"clear",{r:0,g:0,b:0,a:0},g.geometry,An,{environment:Bt,shadow:Tt,screenIndirect:ie},Z,g.hdr),{pass:w,cameraBindGroup:De,lightsBindGroup:qe}=T;Ue&&g.reflection&&v.drawFloor(w,De,qe,g.reflection,Ue,ft,Z);for(let re of ht)ae===null&&be(re)||(re.kind==="quad"?v.drawTextureQuad(w,De,qe,re.texture,re.opts,ft):re.kind==="slug"?v.drawSlugText(w,De,qe,re.batches,re.opts,re.stackBase,ft):re.kind==="mesh"&&v.drawMesh3D(w,De,qe,re.meshBuffers??re.mesh,re.texture,be(re)?{...re.opts,backdrop:ae??void 0}:re.opts,ft));return w.end(),T},Lt=M/Math.max(1,h??24),fe=E,we=null,Ne=null;if(yn){let g=yn.faceSize,ie=v.getOrCreateCubeTexture(g,!1),Z=Bn?v.getOrCreateCubeTexture(g,!0):null,ae=S&&{...S,referenceHeight:(S.referenceHeight??1080)*2*yn.centerDensity/P},T=!!ae||z,w=[f,i,E,...Q,...xe],De=T?e.renderer.getTemporaryTexture(g,g,w):null,qe=ae&&z?e.renderer.getTemporaryTexture(g,g,[...w,...De?[De]:[]]):null,re=ft?v.getOrCreateLinearDepthTexture(g,g):null;Fo(me.eye,me.near,me.far).forEach((Oe,lt)=>{let N=v.cubeFaceView(ie,lt),{cameraBindGroup:Pe,lightsBindGroup:rn}=Vt({view:Oe,width:g,height:g,color:De?De.createView():N,geometry:re?.createView(),hdr:Z?v.cubeFaceView(Z,lt):void 0,reflection:ct(Oe,g,g)},void 0,!!Bn,void 0);if(!De||!re)return;z&&v.resolveGeometry(a,re);let ur=De;if(ae){let In=qe??null;if(v.applyOutlines(a,De,re,In?In.createView():N,Oe,ae,Bt?.fog),!In)return;ur=In}z&&Bt&&v.applyVolumetricFog(a,ur,re,N,Pe,rn,Bt,Lt,M)}),v.remapLens(a,ie,Z,pe,O,P,yn.remap)}else{we=ct(me,O,P);let g={view:me,width:O,height:P,color:pe,geometry:r,reflection:we};if(Ce&&Bt){let{cameraBuffer:Z}=Vt(g,"radiance",!0,f);v.traceScreenIndirect(a,Z,Bt)}let ie=f;ge.length&&(Vt(g,Ce?"apply":void 0,!1,null),ie=e.renderer.composite(a,f,E,"normal",[i,E,...Q])),Ne=Vt(g,Ce?"apply":void 0,!!Bn,ie)}if(Ne&&S&&F){(Cn||z)&&v.resolveGeometry(a,F);let g=e.renderer.getTemporaryTexture(O,P,[f,i,E,F,...Q]);v.applyOutlines(a,E,F,g.createView(),me,S,Bt?.fog),fe=g}if(Ne&&z&&Bt&&F){let g=e.renderer.getTemporaryTexture(O,P,[f,i,E,fe,F,...Q]);v.applyVolumetricFog(a,fe,F,g.createView(),Ne.cameraBindGroup,Ne.lightsBindGroup,Bt,Lt,M),fe=g}if(Ne&&Cn&&F){let g=e.renderer.getTemporaryTexture(O,P,[f,i,E,fe,...Q]);v.applyDepthOfField(a,fe,F,g.createView(),Ne.cameraBuffer),fe=g}if(cr&&sn){let g=e.renderer.getTemporaryTexture(O,P,[f,i,E,fe,...Q]);ka(sn,me,fe,g,cr,Ue&&we?Ue:void 0),fe=g}if(sn&&Mo(sn,me),Bn){let g=e.renderer.getTemporaryTexture(O,P,[f,i,fe,E,...Q]);v.applyBloom(a,fe,g,Bn,v.hdrSource()),fe=g}let Ee=e.renderer.composite(a,f,fe,"normal",[i,...Q]);return We.length=0,{finalTex:Ee,finalView:Ee.createView()}},_t=0,Ta=(f,x,Q)=>{let v=Q*(1-Math.SQRT1_2);for(let xe of f){let E=xe.operation;if(!E)return!1;let pe=ot[E.id||E.inputHandleId];if(pe?.hidden||E.hidden)continue;let $=sr[E.id];if(!$)return!1;let S=(ft,F)=>pe?.[ft]??E[ft]??F;if(S("scale",1)!==1||S("scaleX",1)!==1||S("scaleY",1)!==1||S("rotation",0)!==0||S("rotateX",0)!==0||S("rotateY",0)!==0||Array.isArray(E.effects)&&E.effects.length>0||(pe?.animators??E.animators)?.length)return!1;let z=$.x-x.x+(S("x",0)-(E.x??0)),Ce=$.y-x.y+(S("y",0)-(E.y??0));if(z<v||Ce<v||z+$.width>x.width-v||Ce+$.height>x.height-v)return!1}return!0},lr=(f,x,Q,v=Number.POSITIVE_INFINITY)=>ra(Ho(f),{width:x,height:Q},{maxDimension:e.device.limits.maxTextureDimension2D,maxPixels:4*O*P,effects:v}),bn=async(f,x,Q,v,xe=1,E=new DOMMatrix,pe=null,$=O,S=P,z=null,Ce=!1)=>{let ft=[...f].sort((ge,y)=>{let pt=ge.operation?.zIndex??0,q=y.operation?.zIndex??0;return pt-q}),F=x,r=Q,H=v,l=new Map,be=new Map,kt=new Map;for(let ge of f){let y=ge.operation;y?.matteOf&&l.set(y.matteOf,ge),y?.reliefOf&&be.set(y.reliefOf,ge),y?.textureOf&&kt.set(y.textureOf,ge)}for(let ge of ft){let y=ge.operation;if(y.kind==="camera"||y.kind==="light"||y.matteOf||y.reliefOf||y.textureOf)continue;let pt=y.id||y.inputHandleId,q=pt?ot[pt]:void 0,It=!!(q?.is3D??y.is3D)||!!(me&&((q?.z??y.z??0)!==0||y.is3D))||!!z;if(Ce&&!It&&We.length>0){let fe=Gr(F,r,H);fe.finalTex!==F&&(H=[...H,fe.finalTex]),F=fe.finalTex,r=fe.finalView}if(y.op!=="CompositorLayer"){await m(ge,{containerWidth:$,containerHeight:S,renderId:`${d.renderId}-c${_t}-${y.op}`,fps:h,isVideoMode:L,frame:M,compositionFrame:te,excludeTextures:[i,...H]},r,F,$,S);continue}_t+=1;let ht=async(fe,we)=>{let Ne=We.splice(0),Ee=[i,F,...H,...Ne.flatMap(w=>[w.texture,w.opts.matte,w.kind==="quad"?w.opts.relief?.texture:void 0])].filter(w=>!!w),g=e.renderer.getTemporaryTexture($,S,Ee),ie=g.createView();e.renderer.beginFrame(a,ie,{r:0,g:0,b:0,a:0},$,S,"clear").end();let ae=(await Lr(fe,we,g,ie,Ee.filter(w=>w!==i),xe,E,pe,$,S,z,!1))?.finalTex??g,T=Gr(ae,ae.createView(),Ee).finalTex;return We.push(...Ne),T},Ue=y.reliefId?be.get(y.id):void 0;if(Ue&&It){let fe=await ht(Ue,_t);H=[...H,fe],_t+=1,bo.set(y.id,{texture:fe,amount:y.reliefAmount??0})}let Tt=y.textureLayerId?kt.get(y.id):void 0,ct;if(Tt){let fe=await ht(Tt,_t);H=[...H,fe],_t+=1;let we=sr[y.textureLayerId],Ne=we?[we.x/$,we.y/S,we.width/$,we.height/S]:[0,0,1,1],Ee=We.length;ct=()=>{for(let g of We.slice(Ee))g.kind==="mesh"&&(g.texture=fe,g.opts.uvRect=Ne)}}let Vt=y.matteId?l.get(y.id):void 0;if(Vt){let fe=Vt.operation.matteMode??"alpha",we=fe==="luma"?"luma-in":fe==="luma-inverted"?"luma-out":fe==="alpha-inverted"?"destination-out":"destination-in";if(It){let Z=await ht(Vt,_t);if(H=[...H,Z],_t+=1,fe!=="alpha"){let w=e.renderer.getTemporaryTexture($,S,[i,F,...H,...Zn()]);e.renderer.beginFrame(a,w.createView(),{r:1,g:1,b:1,a:1},$,S,"clear").end(),Z=e.renderer.composite(a,w,Z,we,[i,F,...H,...Zn(),w]),H=[...H,Z]}let ae=We.length,T=await Lr(ge,_t,F,r,H,xe,E,pe,$,S,z,Ce);for(let w of We.slice(ae))w.opts.matte=Z;ct?.(),T&&(T.finalTex!==F&&(H=[...H,T.finalTex]),F=T.finalTex,r=T.finalView);continue}let Ne=await ht(ge,_t);H=[...H,Ne],_t+=1;let Ee=await ht(Vt,_t),g=e.renderer.composite(a,Ne,Ee,we,[i,F,...H,Ee]),ie=e.renderer.composite(a,F,g,"normal",[i,...H,Ee]);H=[...H,ie],F=ie,r=ie.createView();continue}let Lt=await Lr(ge,_t,F,r,H,xe,E,pe,$,S,z,Ce);ct?.(),Lt&&(Lt.finalTex!==F&&(H=[...H,Lt.finalTex]),F=Lt.finalTex,r=Lt.finalView)}if(Ce&&We.length>0){let ge=Gr(F,r,H);ge.finalTex!==F&&(H=[...H,ge.finalTex]),F=ge.finalTex,r=ge.finalView}return{finalTex:F,finalView:r}},Lr=async(f,x,Q,v,xe,E,pe,$,S=O,z=P,Ce=null,ft=!1)=>{let F=[...xe,...Zn()],r=f.operation;if(r.kind==="camera"||r.kind==="light")return;let H=r.id||r.inputHandleId,l=H?ot[H]:void 0;if(l?.hidden||r.hidden)return;let be=r.kind,kt=be==="flex"||be==="block"||be==="box";if(L){let R=r.startFrame??0,D=r.durationFrames;if(M<R||D!==void 0&&M>=R+D)return}let ge=!!(l?.is3D??r.is3D)||!!(me&&((l?.z??r.z??0)!==0||r.is3D));if(ne&&!kt&&be!=="model3d"&&!ge&&!so(l,r))return;if(be==="model3d"){let R=gn(e.device,e.renderer.format??"rgba8unorm",ee),D=r.modelData??r.src;if(!D&&r.text3dOptions){let p=r.text3dOptions,ce=(p.fontFamily?tr.getParsed(p.fontFamily):null)??tr.getParsed("Inter")??tr.getParsed("Unbounded")??tr.getFirstParsed();ce&&(D=ei({...p,font:ce}).modelData,r.modelData=D)}if(!D&&r.primitive3d&&(D=Pn(r.primitive3d),r.modelData=D),!D)return;let Y;try{Y=typeof D=="object"&&D!==null&&"meshes"in D?D:await R.loadModelAsync(D,r.modelFormat??"auto",{center:r.center,normalizeSize:r.normalizeSize})}catch(p){throw new Error(`Failed to load 3D model ${r.id??"(unnamed)"}: ${p instanceof Error?p.message:String(p)}`,{cause:p})}if(Y&&r.fracture3d&&(Y=_i(Y,r.fracture3d)),!Y||Y.meshes.length===0)return;let J=r.x??0,he=r.y??0,Je=l?.x??J,Dt=l?.y??he,zt=l?.z??r.z??0,Re=Je,Ve=Dt;if(!Ce){let p=na({rect:null,parentRect:null,baseX:J,baseY:he,sampledX:Je,sampledY:Dt,parentMatrix:pe});Re=p.x,Ve=p.y}let it=l?.rotateX??r.rotateX??0,Ze=l?.rotateY??r.rotateY??0,Ke=(l?.rotateZ??r.rotateZ??0)!==0?l?.rotateZ??r.rotateZ??0:l?.rotation??r.rotation??0,bt=l?.scale??r.scale??1,$e=(l?.scaleX??r.scaleX??1)*bt,xt=(l?.scaleY??r.scaleY??1)*bt,Jt=(l?.scaleZ??r.scaleZ??1)*bt,Be=_.identity();Be=_.multiply(Be,_.translate(Re,Ve,zt));let un=it*Math.PI/180,on=Ze*Math.PI/180,I=Ke*Math.PI/180;I!==0&&(Be=_.multiply(Be,_.rotateZ(I))),on!==0&&(Be=_.multiply(Be,_.rotateY(on))),un!==0&&(Be=_.multiply(Be,_.rotateX(un))),Be=_.multiply(Be,_.scale($e,xt,Jt));let Me=Ce?_.multiply(Ce,Be):Be,se=l?.colorTint||l?.color||r.colorTint||r.color?nt(l?.colorTint??l?.color??r.colorTint??r.color):void 0,ye=se?[se.r,se.g,se.b,se.a]:[1,1,1,1],_e=(l?.opacity??r.opacity??1)*E;if(r.instances3d){let p=r.instances3d,ce=Array.isArray(p.mesh)?p.mesh:p.mesh?[p.mesh]:r.modelData?[r.modelData]:r.primitive3d?[Pn(r.primitive3d)]:[],Se=[],Et=[];for(let le of ce){let j;if(typeof le=="object"&&le!==null){if("meshes"in le&&Array.isArray(le.meshes))j=le;else if(le.modelData&&"meshes"in le.modelData)j=le.modelData;else if(le.primitive3d)j=Pn(le.primitive3d);else if(le.src)try{j=R.loadModel(le.src,le.modelFormat??"auto",{center:le.center,normalizeSize:le.normalizeSize})}catch{}}if(j&&j.meshes&&j.meshes.length>0){Se.push(j);let at=!("meshes"in le);Et.push(at?{q:Ir(le.rotateX??0,le.rotateY??0,le.rotateZ??0),s:le.scale??1}:Rr)}}if(Se.length===0&&Y&&(Se.push(Y),Et.push(Rr)),r.scatter3d&&Se.length>0){let le=r.scatter3d,j=await Hi(le.surface,(at,st)=>R.loadModelAsync(at,st.modelFormat??"auto",{center:st.center,normalizeSize:st.normalizeSize}));p.transforms=j?Ki(le,j,Se.map((at,st)=>Ji(at,Et[st]))):[],p.count=p.transforms.length}if(Se.length>0){let le=p.bodies&&Array.isArray(p.bodies)&&p.bodies.length>0?p.bodies.length:p.count??(Array.isArray(p.transforms)?p.transforms.length:0);if(le>0){let j=Se.length,at=new Uint32Array(j);for(let U=0;U<le;U++)at[U%j]++;let st=r.crowd,$t=Se.map(U=>st?Ui(U,st):void 0),wt=$t.map(U=>U?32:16),Ft=(U,de)=>{let Mt=U?.meshes.get(de);if(!(!U||!Mt))return{palette:Ni(e.device,Mt.palette),jointCount:Mt.jointCount,time:(M??0)/(h||30)}},ve=[],et=[];for(let U=0;U<j;U++)ve.push(new Float32Array(at[U]*wt[U])),et.push({min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]});let Yt=new Uint32Array(j),Ye={frame:M??0,fps:h||30,time:(M??0)/(h||30),duration:0,durationMs:0,progress:0,deltaTime:1/(h||30)};for(let U=0;U<le;U++){let de=U%j,Mt=Yt[de],Xe=ve[de],Ie=et[de],je=Mt*wt[de],Ot={},tt=0,Zt=0,Pt=0,dn=1,an=0,A=0,ue=0,oe=1,He=1,vt=1,Qe=1,Mn=1,vn=0,kn=0,mn=0,fn=0;if(p.bodies&&p.bodies[U]){let k=p.bodies[U];tt=typeof k.x?.get=="function"?Number(k.x.get(Ye)):Number(k.x??0),Zt=typeof k.y?.get=="function"?Number(k.y.get(Ye)):Number(k.y??0),Pt=typeof k.z?.get=="function"?Number(k.z.get(Ye)):Number(k.z??0);let K=typeof k.rotateX?.get=="function"?Number(k.rotateX.get(Ye)):Number(k.rotateX??0),Xr=typeof k.rotateY?.get=="function"?Number(k.rotateY.get(Ye)):Number(k.rotateY??0),Oa=typeof k.rotateZ?.get=="function"?Number(k.rotateZ.get(Ye)):Number(k.rotateZ??0),pr=Ir(K,Xr,Oa);if(an=pr[0],A=pr[1],ue=pr[2],oe=pr[3],p.emissiveBySpeed){let hr=typeof k.speed?.get=="function"?Number(k.speed.get(Ye)):Number(k.speed??0),Hn=p.emissiveBySpeed.maxSpeed||1e3,Er=Math.min(1,Math.max(0,hr/Hn));if(Er>.001){let Zr=Cs(p.emissiveBySpeed.color,Er);vn=Zr[0],kn=Zr[1],mn=Zr[2],fn=Er*(p.emissiveBySpeed.intensity??3)}}if(p.emissiveByImpact){let hr=typeof k.impact?.get=="function"?Number(k.impact.get(Ye)):Number(k.impact??0);if(hr>.01){let Hn=nt(p.emissiveByImpact.color??"#ffffff")??{r:1,g:1,b:1,a:1};vn=Math.max(vn,Hn.r),kn=Math.max(kn,Hn.g),mn=Math.max(mn,Hn.b),fn=Math.max(fn,hr*(p.emissiveByImpact.intensity??4))}}}else if(typeof p.instanceAt=="function"){let k=p.instanceAt(U,M??0,h||30);if(!k||(Ot=k,tt=k.x??0,Zt=k.y??0,Pt=k.z??0,typeof k.scale=="number"&&(dn=k.scale),dn<=0))continue;if(k.rotation)if(k.rotation.length===4)an=k.rotation[0],A=k.rotation[1],ue=k.rotation[2],oe=k.rotation[3];else{let K=Ir(k.rotation[0],k.rotation[1],k.rotation[2]);an=K[0],A=K[1],ue=K[2],oe=K[3]}if(k.color){let K=typeof k.color=="string"?nt(k.color):{r:k.color[0],g:k.color[1],b:k.color[2],a:k.color[3]??1};K&&(He=K.r,vt=K.g,Qe=K.b,Mn=K.a)}if(k.emissive){let K=typeof k.emissive=="string"?nt(k.emissive):{r:k.emissive[0],g:k.emissive[1],b:k.emissive[2]};K&&(vn=K.r,kn=K.g,mn=K.b),fn=k.emissiveIntensity??1}}else if(Array.isArray(p.transforms)&&p.transforms[U]){let k=p.transforms[U];if(Ot=k,tt=k.x??0,Zt=k.y??0,Pt=k.z??0,typeof k.scale=="number"&&(dn=k.scale),dn<=0)continue;if(k.rotation)if(k.rotation.length===4)an=k.rotation[0],A=k.rotation[1],ue=k.rotation[2],oe=k.rotation[3];else{let K=Ir(k.rotation[0],k.rotation[1],k.rotation[2]);an=K[0],A=K[1],ue=K[2],oe=K[3]}if(k.color){let K=typeof k.color=="string"?nt(k.color):{r:k.color[0],g:k.color[1],b:k.color[2],a:k.color[3]??1};K&&(He=K.r,vt=K.g,Qe=K.b,Mn=K.a)}if(k.emissive){let K=typeof k.emissive=="string"?nt(k.emissive):{r:k.emissive[0],g:k.emissive[1],b:k.emissive[2]};K&&(vn=K.r,kn=K.g,mn=K.b),fn=k.emissiveIntensity??1}}else continue;Yt[de]++;let Fn=Et[de];Fn!==Rr&&([an,A,ue,oe]=qi([an,A,ue,oe],Fn.q),dn*=Fn.s),Xe[je+0]=tt,Xe[je+1]=Zt,Xe[je+2]=Pt,Xe[je+3]=dn,Xe[je+4]=an,Xe[je+5]=A,Xe[je+6]=ue,Xe[je+7]=oe,Xe[je+8]=He,Xe[je+9]=vt,Xe[je+10]=Qe,Xe[je+11]=Mn,Xe[je+12]=vn,Xe[je+13]=kn,Xe[je+14]=mn,Xe[je+15]=fn;let $n=$t[de];$n&&st&&Xe.set(Yi($n,st,U,Ot),je+16);let On=Se[de].bounds,pn=(On?On.boundingSphereRadius+Math.hypot(...On.center):50)*dn;Ie.min[0]=Math.min(Ie.min[0],tt-pn),Ie.min[1]=Math.min(Ie.min[1],Zt-pn),Ie.min[2]=Math.min(Ie.min[2],Pt-pn),Ie.max[0]=Math.max(Ie.max[0],tt+pn),Ie.max[1]=Math.max(Ie.max[1],Zt+pn),Ie.max[2]=Math.max(Ie.max[2],Pt+pn)}for(let U=0;U<j;U++){let de=Yt[U];if(de===0)continue;let Mt=Se[U],Xe=de===at[U]?ve[U]:ve[U].subarray(0,de*wt[U]),Ie=R.uploadInstanceData(Xe),je=Number.isFinite(et[U].min[0])?et[U]:void 0;for(let Ot of Mt.meshes){let tt=Ot.materialName?Mt.materials[Ot.materialName]:void 0,Zt=tt?.diffuseColor??[1,1,1,1],Pt={modelMatrix:Me,opacity:_e*(tt?.opacity??1),colorTint:[ye[0]*Zt[0],ye[1]*Zt[1],ye[2]*Zt[2],ye[3]*(Zt[3]??1)],transparent:!1,twoSided:l?.twoSided??r.twoSided??!0,wireframe:!!(l?.wireframe??r.wireframe),material:l?.material??r.material??p.material??tt?.shading??"lit",roughness:l?.roughness??r.roughness??p.roughness??tt?.roughness,specularIntensity:l?.specularIntensity??r.specularIntensity??p.specularIntensity??.5,ambientIntensity:l?.ambientIntensity??r.ambientIntensity??p.ambientIntensity??1,metallic:l?.metallic??r.metallic??p.metallic??tt?.metallic,...Xn(l,r,tt),instanceBuffer:Ie,instanceCount:de,bounds:je,wind:io(r.wind,Mt,(M??0)/(h||30)),crowd:Ft($t[U],Ot)};We.push({owner:r.id,kind:"mesh",mesh:Ot,texture:tt?await R.materialTexture(tt):void 0,opts:Pt})}}return{finalTex:Q,finalView:v}}}}if(r.swarm3d){let p=r.swarm3d,ce=p.max??2e3,Se=p.seed??42,Et=p.substeps??2,le=p.prewarm??0,j=p.emitter??{},at=Array.isArray(p.speed)?p.speed:[p.speed??100,p.speed??300],st=p.direction??[0,-1,0],$t=(p.spread??45)*Math.PI/180,wt=Array.isArray(p.angularSpeed)?p.angularSpeed:[p.angularSpeed??1,p.angularSpeed??6],Ft=p.angularDrag??.1,ve=Array.isArray(p.lifetime)?p.lifetime:[p.lifetime??2,p.lifetime??4],et=Array.isArray(p.size)?p.size:[p.size??18,p.size??12],Yt=p.sizeJitter??.25,Ye=p.fade??[.15,.2],U=[];if(Array.isArray(p.color))for(let A of p.color){let ue=nt(A);ue&&U.push([ue.r,ue.g,ue.b,ue.a])}else if(typeof p.color=="string"){let A=nt(p.color);A&&U.push([A.r,A.g,A.b,A.a])}U.length===0&&U.push([.15,.14,.18,1]);let de=p.heat??{},Mt=[[.1,.05,.15],[1,0,.6],[1,.9,1]];if(Array.isArray(de.color)&&de.color.length>=2){let A=nt(de.color[0])??{r:.1,g:.05,b:.15},ue=nt(de.color[Math.floor(de.color.length/2)])??{r:1,g:0,b:.6},oe=nt(de.color[de.color.length-1])??{r:1,g:.9,b:1};Mt[0]=[A.r,A.g,A.b],Mt[1]=[ue.r,ue.g,ue.b],Mt[2]=[oe.r,oe.g,oe.b]}let Xe=Array.isArray(p.meshVariants)?p.meshVariants:p.mesh?[p.mesh]:[],Ie=[];for(let A of Xe){let ue;if(A&&typeof A=="object"){if("meshes"in A&&Array.isArray(A.meshes))ue=A;else if(A.modelData&&"meshes"in A.modelData)ue=A.modelData;else if(A.primitive3d)ue=Pn(A.primitive3d);else if(A.src)try{ue=R.loadModel(A.src,A.modelFormat??"auto",{center:A.center,normalizeSize:A.normalizeSize})}catch{}}ue&&ue.meshes&&ue.meshes.length>0&&Ie.push(ue)}Ie.length===0&&Y&&Ie.push(Y);let je=20,Ot=Ie[0]?.bounds;if(Ot){let A=Ot.max[0]-Ot.min[0],ue=Ot.max[1]-Ot.min[1],oe=Ot.max[2]-Ot.min[2],He=Math.max(A,ue,oe)*.5;Number.isFinite(He)&&He>.1&&(je=He)}let tt;if(p.sparks&&typeof p.sparks=="object"){let A=p.sparks,ue=Array.isArray(A.size)?[A.size[0]??3.2,A.size[1]??1.2]:[A.size??3.2,(A.size??3.2)*.35],oe=Array.isArray(A.lifetime)?[A.lifetime[0]??.35,A.lifetime[1]??.9]:[A.lifetime??.35,(A.lifetime??.6)*1.4],He=Array.isArray(A.speed)?[A.speed[0]??60,A.speed[1]??260]:[60,A.speed??260],vt=[1,.9,1];if(Array.isArray(A.color)&&A.color.length>=1){let Qe=nt(A.color[Math.floor(A.color.length/2)])??nt(A.color[0])??{r:1,g:.9,b:1};vt=[Qe.r,Qe.g,Qe.b]}else if(typeof A.color=="string"){let Qe=nt(A.color)??{r:1,g:.9,b:1};vt=[Qe.r,Qe.g,Qe.b]}tt={max:A.max??2e3,rate:A.rate??600,threshold:A.threshold??.25,size:[ue[0],ue[1]],lifetime:[oe[0],oe[1]],speed:[He[0],He[1]],intensity:A.intensity??9,color:vt}}let Zt={max:ce,seed:Se,substeps:Et,prewarm:le,emitter:{shape:j.shape??"point",x:j.x??0,y:j.y??0,z:j.z??0,width:j.width??100,height:j.height??100,depth:j.depth??100,radius:j.radius??50},speed:[at[0],at[1]],direction:[st[0],st[1],st[2]],spread:$t,angularSpeed:[wt[0],wt[1]],angularDrag:Ft,lifetime:[ve[0],ve[1]],size:[et[0],et[1]],sizeJitter:Yt,fade:[Ye[0],Ye[1]],colors:U,heat:{source:de.source??"both",maxSpeed:de.maxSpeed??900,curve:de.curve??1.6,intensity:de.intensity??5,colors:Mt},variants:Math.max(1,Ie.length),meshRadius:je,sparks:tt},Pt=ca.get(r);(!Pt||Pt.device!==e.device)&&(Pt=R.swarm3dPipeline.createState(Zt),ca.set(r,Pt));let dn=M??0,an=A=>{let ue={frame:A,fps:h||30,time:A/(h||30),duration:0,durationMs:0,progress:0,deltaTime:1/(h||30)},oe=(K,Xr)=>typeof K=="number"?K:typeof K?.get=="function"?Number(K.get(ue)):typeof K=="function"?Number(K(A)):Xr,He=p.gravity,vt=0,Qe=1200,Mn=0;Array.isArray(He)?(vt=oe(He[0],0),Qe=oe(He[1],1200),Mn=oe(He[2],0)):He!==void 0&&(Qe=oe(He,1200));let vn=oe(j.rate,150),kn=oe(p.drag,.05),mn=0,fn=200,Fn=1;p.noise&&(mn=oe(p.noise.strength,0),fn=p.noise.scale??200,Fn=p.noise.speed??1);let $n=[];if(Array.isArray(p.attractors))for(let K of p.attractors)$n.push({x:oe(K.x,0),y:oe(K.y,0),z:oe(K.z,0),strength:oe(K.strength,0),radius:K.radius});let On;p.vortex&&(On={x:oe(p.vortex.x,0),y:oe(p.vortex.y,0),z:oe(p.vortex.z,0),axis:p.vortex.axis??[0,-1,0],swirl:oe(p.vortex.swirl,0),pull:oe(p.vortex.pull,0),axial:oe(p.vortex.axial,0),radius:p.vortex.radius??800});let pn;p.floor&&(pn={y:p.floor.y??500,bounce:p.floor.bounce??.3,friction:oe(p.floor.friction,1.5),heatGain:p.floor.heatGain??1,heatDecay:p.floor.heatDecay??.45});let k;return(j.x!==void 0||j.y!==void 0||j.z!==void 0)&&(k=[oe(j.x,0),oe(j.y,0),oe(j.z,0)]),{rate:vn,gravity:[vt,Qe,Mn],drag:kn,noise:{strength:mn,scale:fn,speed:Fn},attractors:$n,vortex:On,floor:pn,emitterPos:k}};if(R.swarm3dPipeline.advance(Pt,Zt,dn,h||30,an),Ie.length>0){let A=Pt.sliceCount;for(let ue=0;ue<Ie.length;ue++){let oe=Ie[ue],He=ue*A;for(let vt of oe.meshes){let Qe=vt.materialName?oe.materials[vt.materialName]:void 0,Mn={modelMatrix:Me,opacity:_e,colorTint:ye,transparent:!1,twoSided:l?.twoSided??r.twoSided??!0,wireframe:!!(l?.wireframe??r.wireframe),material:l?.material??r.material??p.material??Qe?.shading??"lit",roughness:l?.roughness??r.roughness??p.roughness??Qe?.roughness??.35,specularIntensity:l?.specularIntensity??r.specularIntensity??p.specularIntensity??.5,ambientIntensity:l?.ambientIntensity??r.ambientIntensity??p.ambientIntensity??1,metallic:l?.metallic??r.metallic??p.metallic??Qe?.metallic??.7,...Xn(l,r,Qe),instanceBuffer:Pt.instances,instanceCount:A,firstInstance:He};We.push({owner:r.id,kind:"mesh",mesh:vt,texture:Qe?await R.materialTexture(Qe):void 0,opts:Mn})}}if(tt&&tt.max>0){let ue=Ie[0],oe=Ie.length*A;for(let He of ue.meshes){let vt=He.materialName?ue.materials[He.materialName]:void 0,Qe={modelMatrix:Me,opacity:_e,colorTint:ye,transparent:!1,twoSided:!0,wireframe:!1,material:"lit",roughness:.2,specularIntensity:.8,ambientIntensity:1,metallic:.9,...Xn(l,r,vt),instanceBuffer:Pt.instances,instanceCount:tt.max,firstInstance:oe};We.push({owner:r.id,kind:"mesh",mesh:He,texture:vt?await R.materialTexture(vt):void 0,opts:Qe})}}}return{finalTex:Q,finalView:v}}let Nt,jt=l?.animationProgress??r.animationProgress??0,dt=l?.animationTime??r.animationTime??0,Kt=l?.animationSpeed??r.animationSpeed??1,Le=(r.animationName?Y.animations.find(p=>p.name===r.animationName):void 0)??Y.animations[0],Ut=0;Le&&Le.duration>0&&(Ut=jt>0?jt*Le.duration:dt+(M??0)/(h||30)*Kt,(r.loop??!0)&&(Ut%=Le.duration));let Ae=_.multiply(Me,Y.rootTransform??_.identity()),Vn=_.multiply(_.translate(Je-Re,Dt-Ve,0),Be),Dn=!!(r.fracture3d&&Zi(Y,r.fracture3d,M??0)),wn=r.fracture3d&&!Dn&&ji(Y,r.fracture3d,M??0,Vn,[$e,xt,Jt])||(Y.nodes?zi({model:Y,node:r,frame:M??0,fps:h||30,clip:Le,clipSec:Ut,sceneRoot:Ae,key:`${rt.key}:${r.id}`}):void 0),Wn=new Map,Fa=p=>{if(!wn)return{matrix:Ae};if(p.skin!==void 0){let ce=Wn.get(p.skin);return ce||(ce=gr(Y,p.skin,wn),Wn.set(p.skin,ce)),{matrix:Ae,joints:ce}}return p.node!==void 0?{matrix:_.multiply(Ae,wn[p.node])}:{matrix:Ae}};if(!wn&&Le&&Le.duration>0){let p=Ut;if(Y.skeleton&&Y.skeleton.bones.length>0){let ce=Y.skeleton.bones.length;Nt=new Float32Array(ce*16);for(let Se=0;Se<ce;Se++)Nt[Se*16]=1,Nt[Se*16+5]=1,Nt[Se*16+10]=1,Nt[Se*16+15]=1;for(let Se of Le.tracks){let Et=Y.skeleton.boneIndicesByName[Se.nodeName];if(Et!==void 0&&Et<ce){let le=Se.times,j=0;for(let wt=0;wt<le.length-1;wt++)if(p>=le[wt]&&p<=le[wt+1]){j=wt;break}let at=le[j]??0,st=le[j+1]??at,$t=st>at?(p-at)/(st-at):0;if(Se.translations){let wt=Se.translations[j*3]??0,Ft=Se.translations[j*3+1]??0,ve=Se.translations[j*3+2]??0,et=Se.translations[(j+1)*3]??wt,Yt=Se.translations[(j+1)*3+1]??Ft,Ye=Se.translations[(j+1)*3+2]??ve,U=wt+(et-wt)*$t,de=Ft+(Yt-Ft)*$t,Mt=ve+(Ye-ve)*$t,Xe=_.translate(U,de,Mt),Ie=Y.skeleton.bones[Et],je=Ie?_.multiply(Xe,Ie.inverseBindMatrix):Xe;Nt.set(je,Et*16)}}}}}for(let p of Y.meshes){if(Dn&&p.materialName===ti)continue;let ce=p.materialName?Y.materials[p.materialName]:void 0,Se=Fa(p),Et=Se.joints??Nt,le;se?ce?.diffuseColor?le=[ce.diffuseColor[0]*ye[0],ce.diffuseColor[1]*ye[1],ce.diffuseColor[2]*ye[2],(ce.diffuseColor[3]??1)*ye[3]]:le=ye:ce?.diffuseColor?le=ce.diffuseColor:le=[.8,.8,.85,1];let j=l?.audioDeform??r.audioDeform,at;if(j){let $t=(M??0)/(h||30),wt=$t*1e3,Ft=j.latentBuffer;if(!Ft&&j.audioBuffer&&(Ft=j.audioBuffer),!Ft){let ve=j.audioData;if(ve){let et=(r.id??"audio-mesh")+"-direct-audio",Yt=Ar.get(et);if(!Yt){let Ye=Array.isArray(ve)?ve:ve.channels,U=Array.isArray(ve)?48e3:ve.sampleRate,de=Math.max(10,Math.ceil((Ye[0]?.length??0)/U*(h||30))+10);Yt=new jr(Ye,U,h||30,de),Ar.set(et,Yt)}Ft=Yt.getGpuBuffer(e.device,M??0)}}if(!Ft&&j.audioTrackId){let ve=j.audioTrackId,et,Yt=Ye=>{for(let U of Ye){let de=U.operation;if(de){if(de.id===ve||de.inputHandleId===ve){et=de.inputHandleId||de.src||de.url;return}U.children&&Yt(U.children)}}};if(b.children&&Yt(b.children),!et&&(ve.endsWith(".mp3")||ve.endsWith(".wav")||ve.endsWith(".ogg"))&&(et=ve),et)try{let Ye=Ar.get(et);if(!Ye){let U=await ui(et);if(U&&U.channels.length>0){let de=U.sampleRate||48e3,Mt=U.channels[0]?.length??0,Xe=U.durationSec??Mt/de,Ie=Math.max(10,Math.ceil(Xe*(h||30))+10);Ye=new jr(U.channels,de,h||30,Ie),Ar.set(et,Ye)}}Ye&&(Ft=Ye.getGpuBuffer(e.device,M??0))}catch(Ye){console.warn("[webgpu-renderer] Failed to decode audio for deformWithAudio:",Ye)}}if(Ft){let ve=j.amplitudeMultiplier??1;if(typeof ve!="number"&&typeof ve?.get=="function"){let et={frame:M??0,fps:h||30,time:$t,duration:0,durationMs:0,progress:0,deltaTime:1/(h||30)};ve=Number(ve.get(et))}else typeof ve!="number"&&typeof ve?.value=="number"&&(ve=ve.value);at={config:{...j,amplitudeMultiplier:Number.isFinite(ve)?ve:1},latentBuffer:Ft,timeMs:wt,sampleRate:48e3}}}let st={modelMatrix:Se.matrix,morphWeights:Gi(p.morphTargetNames,Yo(p,Le,Ut),l?.morphs??r.morphs,{frame:M??0,fps:h||30}),opacity:_e*(ce?.opacity??1),colorTint:le,transparent:ce?.alphaMode==="blend"||_e*(ce?.opacity??1)<1||le[3]<1||ws(p),twoSided:l?.twoSided??r.twoSided??ce?.twoSided??!0,wireframe:!!(l?.wireframe??r.wireframe),isSkinned:!!(Et||p.jointIndices&&p.jointWeights),skinningMatrices:Et,material:l?.material??r.material??ce?.shading??"lit",shadeColor:ce?.shadeColor,alphaCutoff:ce?.alphaCutoff,textureWrap:ce?.textureWrap,textureFilter:ce?.textureFilter,shininess:l?.shininess??r.shininess??ce?.shininess??32,roughness:l?.roughness??r.roughness??ce?.roughness,specularIntensity:l?.specularIntensity??r.specularIntensity??.5,ambientIntensity:l?.ambientIntensity??r.ambientIntensity??1,metallic:l?.metallic??r.metallic??ce?.metallic,...Xn(l,r,ce),ior:l?.ior??r.ior??ce?.ior,dispersion:l?.dispersion??r.dispersion,thickness:l?.thickness??r.thickness,...ce?.thickness!==void 0?{worldThickness:ce.thickness*Ss(Se.matrix)}:{},audioDeform:at,wind:io(r.wind,Y,(M??0)/(h||30))};ce&&(st.maps=await R.materialMaps(ce)),We.push({owner:r.id,kind:"mesh",mesh:p,texture:ce?await R.materialTexture(ce):void 0,opts:st})}return{finalTex:Q,finalView:v}}let y=sr[r.id];if(!y)return kt?await bn(f.children??[],Q,v,F,E,pe,$,S,z,Ce,ft):void 0;let pt=r.x??0,q=r.y??0,It=l?.x??pt,ht=l?.y??q,Ue=0,Tt=0;if($){let R=y.x-$.x,D=y.y-$.y;Ue=R+(It-pt),Tt=D+(ht-q)}else Ue=y.x+(It-pt),Tt=y.y+(ht-q);let ct=l?.scale??r.scale??1,Vt=l?.scaleX??r.scaleX??1,Lt=l?.scaleY??r.scaleY??1,fe=l?.rotation??r.rotation??0,we=(l?.opacity??r.opacity??1)*E,Ne=l?.animators??r.animators,Ee=be==="text"&&!!(r.pathOptions||l?.pathOptions),g=be==="text"&&Array.isArray(Ne)&&Ne.length>0,ie=be==="text"&&Array.isArray(Ne)&&Ne.some(R=>{let D=R;return D?.props?.formation!==void 0||D?.formation!==void 0}),Z=0,ae=0;if(ie){let R=0,D=0;for(let Y of Ne){let J=Y,he=J?.props?.formation??J?.formation;he&&(typeof he.radius=="number"&&(R=Math.max(R,he.radius)),typeof he.pitch=="number"&&(D=Math.max(D,he.pitch)))}Z=Math.max(160,Math.ceil(R+100)),ae=Math.max(100,Math.ceil(R+D*15+100))}else!Ee&&g&&(Z=Math.max(80,Math.ceil(y.width*.2)),ae=Math.max(50,Math.ceil(y.height*.5)));if(be==="text"&&!Ee){let R=xs(l,r);Z=Math.max(Z,R),ae=Math.max(ae,R)}let T=Ee?S:y.width+Z*2,w=Ee?z:y.height+ae*2;Ue-=Z,Tt-=ae;let De=Ee?(r.anchorX??.5)*y.width/T:(Z+(r.anchorX??.5)*y.width)/T,qe=Ee?(r.anchorY??.5)*y.height/w:(ae+(r.anchorY??.5)*y.height)/w,re=ea(ta({x:Ue,y:Tt,width:T,height:w,rotation:fe,scale:ct,scaleX:Vt,scaleY:Lt,anchorX:De,anchorY:qe})),Oe=pe.multiply(re),lt=r.blendMode||"normal",N=Q,Pe=v,rn=so(l,r),ur=l?.rotateX??r.rotateX??0,In=l?.rotateY??r.rotateY??0,ko=l?.rotateZ??r.rotateZ??0,Da=l?.translateZ??r.translateZ??0,Pa=l?.perspective??r.perspective??0,Ra=l?.perspectiveOriginX??r.perspectiveOriginX??De,Ca=l?.perspectiveOriginY??r.perspectiveOriginY??qe,Aa=l?.backfaceVisibility??r.backfaceVisibility??"visible",xn=null;if(rn){let R=ze.buildLayer3DMatrix({x:Ue,y:Tt,width:T,height:w,rotateXDeg:ur,rotateYDeg:In,rotateZDeg:ko!==0?ko:fe,scaleX:Vt*ct,scaleY:Lt*ct,perspectivePx:Pa,originXRatio:Ra,originYRatio:Ca,translateZPx:Da}),D=ze.projectRectangleCorners(R,T,w);if(pe.isIdentity||(D={topLeft:pe.transformPoint(new DOMPoint(D.topLeft.x,D.topLeft.y)),topRight:pe.transformPoint(new DOMPoint(D.topRight.x,D.topRight.y)),bottomLeft:pe.transformPoint(new DOMPoint(D.bottomLeft.x,D.bottomLeft.y)),bottomRight:pe.transformPoint(new DOMPoint(D.bottomRight.x,D.bottomRight.y))}),Aa==="hidden"&&ze.computeSignedArea(D)<0)return;xn=D}if(kt){if(r.transformStyle==="preserve-3d"&&ge){let I=_.identity(),Me=Ce!==null?l?.x??r.x??0:l?.x??r.x??Ue+T*.5,se=Ce!==null?l?.y??r.y??0:l?.y??r.y??Tt+w*.5,ye=l?.z??r.z??0;I=_.multiply(I,_.translate(Me,se,ye));let _e=(l?.rotateX??r.rotateX??0)*Math.PI/180,Nt=(l?.rotateY??r.rotateY??0)*Math.PI/180,jt=((l?.rotateZ??r.rotateZ??0)!==0?l?.rotateZ??r.rotateZ??0:fe)*(Math.PI/180);jt!==0&&(I=_.multiply(I,_.rotateZ(jt))),Nt!==0&&(I=_.multiply(I,_.rotateY(Nt))),_e!==0&&(I=_.multiply(I,_.rotateX(_e)));let dt=(l?.scaleX??r.scaleX??1)*ct,Kt=(l?.scaleY??r.scaleY??1)*ct,Le=(l?.scaleZ??r.scaleZ??1)*ct;if((dt!==1||Kt!==1||Le!==1)&&(I=_.multiply(I,_.scale(dt,Kt,Le))),Ce&&(I=_.multiply(Ce,I)),f.children&&f.children.length>0){let Ut=await bn(f.children,N,Pe,F,we,new DOMMatrix,null,T,w,I,!1);N=Ut.finalTex,Pe=Ut.finalView}return{finalTex:N,finalView:Pe}}if(ge){let I=Math.max(1,Math.ceil(T)),Me=Math.max(1,Math.ceil(w)),se=[N,i,...F,...Zn()],ye=e.renderer.getTemporaryTexture(I,Me,se),_e=ye.createView();e.renderer.beginFrame(a,_e,{r:0,g:0,b:0,a:0},I,Me,"clear").end();let jt=Math.min(r.borderRadius??r.strokeRadius??0,T/2,w/2);if(Rn(be,r.background)){let Ae=e.renderer.beginFrame(a,_e,{r:0,g:0,b:0,a:0},I,Me,"load");e.renderer.drawRect(Ae,{x:0,y:0,width:T,height:w},r.background,0,{opacity:1}),Ae.end()}let dt=ye,Kt=_e;if(f.children&&f.children.length>0){let Ae=await bn(f.children,ye,_e,[ye,...se],1,new DOMMatrix,y,I,Me,null,!1);dt=Ae.finalTex,Kt=Ae.finalView}let Le=!ge&&r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,jt,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[dt,...se]):null;if(Le){let Ae=e.renderer.beginFrame(a,Kt,{r:0,g:0,b:0,a:0},I,Me,"load");e.renderer.drawTexture(Ae,Le.borderTex,{x:Le.ox,y:Le.oy,width:Le.ow,height:Le.oh},{opacity:1}),Ae.end()}let Ut={position:[Ue+T*.5,Tt+w*.5,l?.z??r.z??0],width:T,height:w,textureExtent:[T/dt.width,w/dt.height],rotation:[l?.rotateX??r.rotateX??0,l?.rotateY??r.rotateY??0,(l?.rotateZ??r.rotateZ??0)!==0?l?.rotateZ??r.rotateZ??0:fe],scale:[ct*Vt,ct*Lt,l?.scaleZ??r.scaleZ??1],anchor:[r.anchorX??.5,r.anchorY??.5],borderRadius:jt,borderWidth:r.borderWidth,borderColor:r.borderColor,opacity:we,twoSided:l?.twoSided??r.twoSided??!0,material:l?.material??r.material,shininess:l?.shininess??r.shininess,roughness:l?.roughness??r.roughness,specularIntensity:l?.specularIntensity??r.specularIntensity,ambientIntensity:l?.ambientIntensity??r.ambientIntensity,metallic:l?.metallic??r.metallic,...Xn(l,r),...xo(r.id,Ue,Tt,T,w)};if(Ce){let Ae=gn(e.device,e.renderer.format??"rgba8unorm",ee);Ut.modelMatrix=_.multiply(Ce,Ae.quadModelMatrix({...Ut,position:[l?.x??r.x??0,l?.y??r.y??0,l?.z??r.z??0]}))}return We.push({owner:r.id,kind:"quad",texture:dt,opts:Ut}),{finalTex:N,finalView:Pe}}if(rn&&xn){let I=Math.max(1,Math.ceil(T)),Me=Math.max(1,Math.ceil(w)),se=[N,i,...F],ye=e.renderer.getTemporaryTexture(I,Me,se),_e=ye.createView();e.renderer.beginFrame(a,_e,{r:0,g:0,b:0,a:0},I,Me,"clear").end();let jt=Math.min(r.borderRadius??r.strokeRadius??0,T/2,w/2);if(Rn(be,r.background)){let Ae=e.renderer.beginFrame(a,_e,{r:0,g:0,b:0,a:0},I,Me,"load");e.renderer.drawRect(Ae,{x:0,y:0,width:T,height:w},r.background,jt,{opacity:1}),Ae.end()}let dt=ye,Kt=_e;if(f.children&&f.children.length>0){let Ae=await bn(f.children,ye,_e,[ye,...se],1,new DOMMatrix,y,I,Me,null,!1);dt=Ae.finalTex,Kt=Ae.finalView}let Le=r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,jt,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[dt,...se]):null;if(Le){let Ae=e.renderer.beginFrame(a,Kt,{r:0,g:0,b:0,a:0},I,Me,"load");e.renderer.drawTexture(Ae,Le.borderTex,{x:Le.ox,y:Le.oy,width:Le.ow,height:Le.oh},{opacity:1}),Ae.end()}let Ut=l?.motionBlurShutter??r.motionBlurShutter??0;if(Ut>0&&h&&M!==void 0){Tn(rt,M-1,h);let Ae=H?ot[H]:void 0,Vn=Ae?.x??pt,Dn=Ae?.y??q;Tn(rt,M,h);let wn=It-Vn,Wn=ht-Dn;Math.hypot(wn,Wn)>.5&&(dt=e.renderer.applyMotionBlur(a,dt,wn,Wn,Ut,16,[N,i,...F]),Kt=dt.createView())}if(lt==="normal"||lt==="source-over")Br(e,a,Pe,dt,xn,S,z,we);else{let Ae=[N,i,dt,...F];Le&&Ae.push(Le.borderTex);let Vn=e.renderer.getTemporaryTexture(S,z,Ae),Dn=Vn.createView();e.renderer.beginFrame(a,Dn,{r:0,g:0,b:0,a:0},S,z,"clear").end(),Br(e,a,Dn,dt,xn,S,z,we),N=e.renderer.composite(a,N,Vn,lt,[i,...F]),Pe=N.createView()}return{finalTex:N,finalView:Pe}}let R=(l?.overflow??r.overflow)==="hidden",D=R?ha(Oe,T,w):null,Y=R?Math.min(l?.borderRadius??r.borderRadius??0,T/2,w/2):0;if((be==="flex"||be==="block")&&(!Array.isArray(r.effects)||r.effects.length===0)&&Y<=0&&!Rn(be,r.background)&&we===1&&lt==="normal"&&!r.borderWidth&&!r.borderColor&&(typeof r.relighting!="object"||!r.relighting)&&(typeof r.relight!="object"||!r.relight)&&(typeof l?.relighting!="object"||!l?.relighting)&&(typeof l?.relight!="object"||!l?.relight)&&(typeof r.deflicker!="object"||!r.deflicker)&&(typeof l?.deflicker!="object"||!l?.deflicker)){D&&e.renderer.pushScissorIntersect(D);let I=await bn(f.children??[],N,Pe,F,E,Oe,y,S,z,null,ft);return D&&e.renderer.popScissor(),I}if((!f.children||f.children.length===0)&&(!Array.isArray(r.effects)||r.effects.length===0)&&lt==="normal"&&!(l?.motionBlurShutter??r.motionBlurShutter)&&(typeof r.relighting!="object"||!r.relighting)&&(typeof r.relight!="object"||!r.relight)&&(typeof l?.relighting!="object"||!l?.relighting)&&(typeof l?.relight!="object"||!l?.relight)&&(typeof r.deflicker!="object"||!r.deflicker)&&(typeof l?.deflicker!="object"||!l?.deflicker)){if(we<=0)return{finalTex:N,finalView:Pe};let I=Math.min(l?.borderRadius??r.borderRadius??r.strokeRadius??0,T/2,w/2),Me=Rn(be,r.background),se=r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,I,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[N,i,...F],lr(Oe,T,w)):null;if(Me||se){let ye=e.renderer.beginFrame(a,Pe,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),Me&&e.renderer.drawRect(ye,{x:0,y:0,width:T,height:w},r.background,I,{opacity:we}),se&&e.renderer.drawTexture(ye,se.borderTex,{x:se.ox,y:se.oy,width:se.ow,height:se.oh},{opacity:we}),e.renderer.popTransform(),ye.end()}return{finalTex:N,finalView:Pe}}if(f.children&&f.children.length>0&&(!Array.isArray(r.effects)||r.effects.length===0)&&we===1&&lt==="normal"&&!(l?.motionBlurShutter??r.motionBlurShutter)&&(typeof r.relighting!="object"||!r.relighting)&&(typeof r.relight!="object"||!r.relight)&&(typeof l?.relighting!="object"||!l?.relighting)&&(typeof l?.relight!="object"||!l?.relight)&&(typeof r.deflicker!="object"||!r.deflicker)&&(typeof l?.deflicker!="object"||!l?.deflicker)&&(Y<=0||Ta(f.children,y,Y))){let I=Math.min(l?.borderRadius??r.borderRadius??r.strokeRadius??0,T/2,w/2);if(Rn(be,r.background)){let ye=e.renderer.beginFrame(a,Pe,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawRect(ye,{x:0,y:0,width:T,height:w},r.background,I,{opacity:1}),e.renderer.popTransform(),ye.end()}D&&e.renderer.pushScissorIntersect(D);let Me=await bn(f.children,N,Pe,F,E,Oe,y,S,z,null,ft);D&&e.renderer.popScissor(),N=Me.finalTex,Pe=Me.finalView;let se=r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,I,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[N,i,...F],lr(Oe,T,w)):null;if(se){let ye=e.renderer.beginFrame(a,Pe,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawTexture(ye,se.borderTex,{x:se.ox,y:se.oy,width:se.ow,height:se.oh},{opacity:1}),e.renderer.popTransform(),ye.end()}return{finalTex:N,finalView:Pe}}let J=[N,i,...F],he=e.renderer.getTemporaryTexture(S,z,J),Je=he.createView();e.renderer.beginFrame(a,Je,{r:0,g:0,b:0,a:0},S,z,"clear").end();let zt=Math.min(l?.borderRadius??r.borderRadius??r.strokeRadius??0,T/2,w/2);if(Rn(be,r.background)){let I=e.renderer.beginFrame(a,Je,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawRect(I,{x:0,y:0,width:T,height:w},r.background,zt,{opacity:we}),e.renderer.popTransform(),I.end()}let Re=he,Ve=Je;if(f.children&&f.children.length>0){D&&e.renderer.pushScissorIntersect(D);let I=await bn(f.children,he,Je,[he,...J],we,Oe,y,S,z,null,!1);D&&e.renderer.popScissor(),Re=I.finalTex,Ve=I.finalView}if(Y>0){let I=e.renderer.getTemporaryTexture(S,z,[Re,...J]),Me=e.renderer.beginFrame(a,I.createView(),{r:0,g:0,b:0,a:0},S,z,"clear");e.renderer.pushTransform(Oe),e.renderer.drawRect(Me,{x:0,y:0,width:T,height:w},"#ffffff",Y),e.renderer.popTransform(),Me.end(),Re=e.renderer.composite(a,Re,I,"mask-in",[Re,I,...J]),Ve=Re.createView()}let it=r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,zt,r.borderWidth,r.borderColor,r.strokeAlign??"inside",[Re,...J],lr(Oe,T,w)):null;if(it){let I=e.renderer.beginFrame(a,Ve,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawTexture(I,it.borderTex,{x:it.ox,y:it.oy,width:it.ow,height:it.oh},{opacity:we}),e.renderer.popTransform(),I.end()}let Ze=l?.motionBlurShutter??r.motionBlurShutter??0;if(Ze>0&&h&&M!==void 0){Tn(rt,M-1,h);let I=H?ot[H]:void 0,Me=I?.x??pt,se=I?.y??q;Tn(rt,M,h);let ye=It-Me,_e=ht-se;Math.hypot(ye,_e)>.5&&(Re=e.renderer.applyMotionBlur(a,Re,ye,_e,Ze,16,[N,i,...F]),Ve=Re.createView())}let Ke=Array.isArray(r.effects)?r.effects.find(I=>I?.op==="TemporalDeflicker"||I?.op==="Deflicker"||I?.constructor?.name==="TemporalDeflicker"):void 0,bt=l?.deflicker??r.deflicker??Ke,$e=typeof bt=="object"&&bt!==null?bt:void 0;if($e){let I=fa(e.device,r.id||`layer_${x}`);M===0&&I.reset(),Re=I.execute(Re,$e,a),Ve=Re.createView()}let xt=Array.isArray(r.effects)?r.effects.find(I=>I?.op==="Relight3D"||I?.constructor?.name==="Relight3D"):void 0,Jt=l?.relighting??r.relighting??(typeof r.relight=="object"?r.relight:void 0)??xt,Be=typeof Jt=="object"&&Jt!==null?Jt:void 0;if(Be){let I=co(e.device,e.renderer.format??"rgba8unorm"),Me=gn(e.device,e.renderer.format??"rgba8unorm",ee),se=pa(Be,An,y,te,h??24),ye=Me.getOrCreateLightsBuffer(se),_e=e.renderer.getTemporaryTexture(S,z,[Re,N,i,...F]),Nt=_e.createView(),jt=Be.normalTexture??Be.normalMap;I.execute(a,Nt,Re,jt,ye,{viewportWidth:S,viewportHeight:z,layerX:0,layerY:0,roughness:Rt(l?.roughness??l?.relightRoughness??Be.specularRoughness??Be.roughness,.35,te,h??24),specularStrength:Rt(l?.specularStrength??l?.relightSpecularStrength??Be.specularStrength,.7,te,h??24),metallic:Rt(l?.metallic??l?.relightMetallic??Be.metallic,0,te,h??24),ambientIntensity:Rt(l?.ambientIntensity??l?.relightAmbientIntensity??Be.ambientIntensity,.15,te,h??24),depthScale:Rt(l?.depthScale??l?.relightDepthScale??Be.depthScale,1,te,h??24),opacity:1},"clear"),Re=_e,Ve=Nt}if(Array.isArray(r.effects)&&r.effects.length>0){let I=R?Ds(r.effects):null,Me=I===null?null:Bs(As(ha(Oe,T,w),I),S,z),se=await Is(Me,r.effects,Re,S,z,e,a,d,m,[N,i,...F],M,te,h??24,L,r.id??`container_${x}`);Re=se.texture,Ve=se.view}let un=[N,i,...F];return it&&un.push(it.borderTex),N=e.renderer.composite(a,N,Re,lt,un),Pe=N.createView(),{finalTex:N,finalView:Pe}}if(!(T>0&&w>0))return{finalTex:N,finalView:Pe};let dr=Math.min(r.borderRadius??r.strokeRadius??0,T/2,w/2),Ba=Array.isArray(r.effects)?r.effects.find(R=>R?.op==="TemporalDeflicker"||R?.constructor?.name==="TemporalDeflicker"):void 0,mr=l?.deflicker??r.deflicker??Ba,Ia=Array.isArray(r.effects)?r.effects.find(R=>R?.op==="Relight3D"||R?.constructor?.name==="Relight3D"):void 0,zr=l?.relighting??r.relighting??(typeof r.relight=="object"?r.relight:void 0)??Ia,qt=typeof zr=="object"&&zr!==null?zr:void 0,_n=l?.motionBlurShutter??r.motionBlurShutter??0,To=be!=="media"&&Array.isArray(r.effects)&&r.effects.length>0,St=ge||rn||mr||be==="media"&&!Rs(f.children?.[0])?1:lr(Oe,T,w,To?Ps(r.effects):void 0),Nr=new DOMMatrix([St,0,0,St,0,0]),gt=Math.ceil(T*St),yt=Math.ceil(w*St),So=e.renderer.suspendScissors?.()??[],Sn=e.renderer.getTemporaryTexture(gt,yt,[N,i,...F]),fr=Sn.createView();e.renderer.beginFrame(a,fr,{r:0,g:0,b:0,a:0},gt,yt,"clear").end();let cn,Ur=!1;if(be==="media")cn=f.children?.[0],Ur=cn?.operation?.dataType==="Caption"||r.dataType==="Caption"||cn?.operation?.srtText!==void 0;else if(be==="text"){let R=l?.spans??r.spans,D=h??24,Y=R?.length?_o(R,{frame:te,fps:D,time:te/D,duration:At/1e3,durationMs:At,progress:At>0?Math.min(1,te/D*1e3/At):0,deltaTime:1/D}):void 0,J=Y?jo(Y):r.text??"",he=J,Je=Ne;Array.isArray(Ne)&&Ne.length>0&&(Je=Ne.map((Ve,it)=>{let Ze={...Ve,transform:{...Ve.transform??{}}};if(it===0){let Ke=typeof l?.offset=="number"?l.offset:typeof l?.animatorOffset=="number"?l.animatorOffset:void 0,bt=typeof l?.rangeStart=="number"?l.rangeStart:typeof l?.animatorRangeStart=="number"?l.animatorRangeStart:void 0,$e=typeof l?.rangeEnd=="number"?l.rangeEnd:typeof l?.animatorRangeEnd=="number"?l.animatorRangeEnd:void 0;Ke!==void 0&&(Ze.offset=Ke),bt!==void 0&&(Ze.rangeStart=bt),$e!==void 0&&(Ze.rangeEnd=$e),Array.isArray(Ze.selectors)&&(Ze.selectors=Ze.selectors.map(xt=>xt.type==="range"?{...xt,...Ke!==void 0?{offset:Ke}:{},...bt!==void 0?{start:bt}:{},...$e!==void 0?{end:$e}:{}}:xt))}return Ze}));let Dt=!!(r.typewriter||l?.typewriter),zt=r.animation?.tracks?.find(Ve=>Ve.prop==="text");if(!Dt&&(zt!==void 0||typeof l?.text=="number")&&J.length>0){let Ve=typeof l?.text=="number"?Math.max(0,Math.min(1,l.text)):1,it=typeof l?.text=="number"&&l.text>1.0001;if(Ve>=1&&!it)he=J;else if(Ve<=0)he="";else{let Ze=zt?.keyframes?.find($e=>$e.presetType)?.presetType??"typewriter",Ke=typeof l?.text=="number"?l.text:null,bt=Ke!==null&&Ke>1.0001;if(Ze==="word-reveal"||Ze==="karaoke"){let $e=J.split(/(\s+)/),xt=[];$e.forEach((Be,un)=>{Be.trim().length>0&&xt.push(un)});let Jt=bt&&Ke!==null?Math.min(xt.length,Math.round(Ke)):Math.round(xt.length*Ve);if(Jt===0)he="";else{let Be=xt[Math.min(xt.length-1,Jt-1)];he=$e.slice(0,Be+1).join("")}}else if(Ze==="line-reveal"){let $e=J.split(`
205
+ `),xt=bt&&Ke!==null?Math.min($e.length,Math.round(Ke)):Math.round($e.length*Ve);he=$e.slice(0,Math.max(0,xt)).join(`
206
+ `)}else{let $e=bt&&Ke!==null?Math.min(J.length,Math.round(Ke)):Math.round(J.length*Ve);he=J.slice(0,$e)}}}cn={metadata:{},operation:{op:"text",text:he,spans:Y&&he!==J?Qo(Y,he):Y,animators:Je,pathOptions:l?.pathOptions??r.pathOptions,typewriter:l?.typewriter??r.typewriter,marquee:l?.marquee??r.marquee,textProgress:typeof l?.text=="number"?l.text:void 0,firstMargin:l?.firstMargin??r.firstMargin,lastMargin:l?.lastMargin??r.lastMargin,baselineShift:l?.baselineShift??r.baselineShift,signals:b?.operation?.signals??b?.signals,fontSize:l?.fontSize??r.fontSize,fontFamily:r.fontFamily,fontStyle:r.fontStyle,fontWeight:r.fontWeight,fontVariations:r.fontVariations,fill:l?.fill??l?.color??r.fill,align:r.align,direction:r.direction,verticalAlign:r.verticalAlign,letterSpacing:l?.letterSpacing??r.letterSpacing,lineHeight:r.lineHeight,padding:r.padding,textBackgroundColor:l?.textBackgroundColor??l?.background??r.background,borderRadius:r.borderRadius,stroke:l?.stroke??l?.strokeColor??r.stroke,strokeWidth:l?.strokeWidth??r.strokeWidth,strokeAlign:r.strokeAlign,textShadow:r.textShadow,shadows:r.shadows,x:Ee?0:Z,y:Ee?0:ae,width:Ee?S:r.width!==void 0?y.width:void 0,height:Ee?z:r.height!==void 0?y.height:void 0},children:[]}}let ln=null,Yr=!0;if(cn){let D=Jn(cn)?.durationMs??At,J=Math.max(1,Math.round(D/1e3*(h??24)))/(h??24)*1e3,he=cn.operation?.op==="Compositor"&&cn.operation?.dataType==="Image",Je=ge&&be==="text",Dt=e.renderer.rasterDrawCount;Je&&e.renderer.slugPipeline.beginCapture(),e.renderer.pushTransform(Nr);try{await m(cn,{containerWidth:T,containerHeight:w,renderId:`${d.renderId}-l${x}`,durationMs:J,opacity:1,fps:h,...typeof r.dpr=="number"&&{dpr:r.dpr},excludeTextures:[N,i,...F],isVideoMode:L&&!he,...L&&r.timeRemap&&be==="media"&&r.dataType==="Video"&&{sourceTimeSec:Po(r.timeRemap,Math.max(0,M-(r.startFrame??0)),h??24)},...L&&{frame:r.timeRemap&&be==="media"&&r.dataType==="Video"?Math.max(0,M-(r.startFrame??0)):Math.max(0,M-(r.startFrame??0))+(r.mediaStartFrame??r.trimStartFrames??(r.trimStartSec!=null?Math.round(r.trimStartSec*(h??24)):0))},compositionFrame:te,...Ur&&{fontFamily:r.fontFamily,fontSize:l?.fontSize??r.fontSize,fontWeight:r.fontWeight,fontStyle:r.fontStyle,fill:r.fill,color:r.fill,align:r.align??"center",direction:r.direction,verticalAlign:r.verticalAlign??r.textAlignVertical,lineHeight:r.lineHeight,letterSpacing:r.letterSpacing,textBackgroundColor:r.background??r.textBackgroundColor,borderRadius:r.borderRadius??r.strokeRadius,strokeRadius:r.strokeRadius??r.borderRadius,stroke:r.stroke,strokeWidth:r.strokeWidth,shadows:r.shadows,padding:r.padding,maxWidth:r.maxWidth??T}},fr,Sn,gt,yt)}finally{e.renderer.popTransform(),Je&&(ln=e.renderer.slugPipeline.endCapture())}Yr=e.renderer.rasterDrawCount!==Dt}else if(be==="shape"){let R=e.renderer.beginFrame(a,fr,{r:0,g:0,b:0,a:0},gt,yt,"load"),Y={shapeType:r.shapeType??r.shape??"rect",width:T,height:w,path:l?.d??r.d??r.path,cornerRadius:l?.cornerRadius??r.cornerRadius??r.borderRadius??r.radius??0,starPoints:r.starPoints??5,starInnerRadiusRatio:l?.starInnerRadiusRatio??r.starInnerRadiusRatio??.5,polygonSides:r.polygonSides??5},J=r.fillType??"solid",he=l?.fillColor??l?.fill??r.fillColor??r.fill??"#38bdf8",Je=l?.gradientEndColor??r.gradientEndColor??r.fillColor2??"#9333ea",Dt=r.fillStartX,zt=r.fillStartY,Re=r.fillEndX,Ve=r.fillEndY;if(J==="linear"&&Dt===void 0&&r.gradientAngle!==void 0){let on=r.gradientAngle*Math.PI/180,I=T/2,Me=w/2,se=(Math.abs(T*Math.cos(on))+Math.abs(w*Math.sin(on)))/2;Dt=I-Math.cos(on)*se,zt=Me-Math.sin(on)*se,Re=I+Math.cos(on)*se,Ve=Me+Math.sin(on)*se}let it={type:J,color:he,color2:Je,startX:Dt,startY:zt,endX:Re,endY:Ve,cx:r.fillCx,cy:r.fillCy,radius:r.fillRadius},Ze=l?.strokeWidth??r.strokeWidth??0,Ke=l?.strokeColor??r.strokeColor??r.stroke??"#ffffff",bt=r.strokeLineCap??"round",$e=Jo(r.strokeDashArray),xt=l?.strokeDashOffset??r.strokeDashOffset??0,Jt=l?.trimStart??r.trimStart??0,Be=l?.trimEnd??r.trimEnd??1,un=l?.trimOffset??r.trimOffset??0;e.renderer.pushTransform(Nr),e.renderer.drawShape(R,Y,it,Ze>0?{color:Ke,width:Ze,cap:bt,trimStart:Jt,trimEnd:Be,trimOffset:un,dashArray:$e,dashOffset:xt}:void 0),e.renderer.popTransform(),R.end()}if(ln&&ln.length>0&&(mr||qt||_n>0||To)){let R=e.renderer.beginFrame(a,fr,{r:0,g:0,b:0,a:0},gt,yt,"load");e.renderer.slugPipeline.drawBatches(R,ln,gt,yt),R.end(),ln=null,Yr=!0}let ut=Sn;if(!ge&&dr>0&&!Ur&&be!=="shape"){let R=e.renderer.getTemporaryTexture(gt,yt,[Sn,N,i,...F]),D=R.createView();e.renderer.beginFrame(a,D,{r:0,g:0,b:0,a:0},gt,yt,"clear").end();let J=e.renderer.beginFrame(a,D,{r:0,g:0,b:0,a:0},gt,yt,"load");e.renderer.pushTransform(Nr),e.renderer.drawRect(J,{x:0,y:0,width:T,height:w},{r:1,g:1,b:1,a:1},dr),e.renderer.popTransform(),J.end(),ut=e.renderer.composite(a,Sn,R,"mask-in",[N,i,...F])}if(mr){let R=fa(e.device,r.id||`layer_${x}`);M===0&&R.reset(),ut=R.execute(ut,mr,a)}if(qt){let R=co(e.device,e.renderer.format??"rgba8unorm"),D=gn(e.device,e.renderer.format??"rgba8unorm",ee),Y=gt/St,J=yt/St,he=pa(qt,An,{x:It,y:ht,width:Y,height:J},te,h??24),Je=D.getOrCreateLightsBuffer(he),Dt=e.renderer.getTemporaryTexture(gt,yt,[ut,N,i,...F]),zt=Dt.createView(),Re=qt.normalTexture??qt.normalMap;R.execute(a,zt,ut,Re,Je,{viewportWidth:Y,viewportHeight:J,layerX:It,layerY:ht,roughness:Rt(l?.roughness??l?.relightRoughness??qt.specularRoughness??qt.roughness,.35,te,h??24),specularStrength:Rt(l?.specularStrength??l?.relightSpecularStrength??qt.specularStrength,.7,te,h??24),metallic:Rt(l?.metallic??l?.relightMetallic??qt.metallic,0,te,h??24),ambientIntensity:Rt(l?.ambientIntensity??l?.relightAmbientIntensity??qt.ambientIntensity,.15,te,h??24),depthScale:Rt(l?.depthScale??l?.relightDepthScale??qt.depthScale,1,te,h??24),opacity:1},"clear"),ut=Dt}let jn=0,Qn=0;if(_n>0&&h&&M!==void 0){Tn(rt,M-1,h);let R=H?ot[H]:void 0,D=R?.x??pt,Y=R?.y??q;Tn(rt,M,h);let J=It-D,he=ht-Y;if(Math.hypot(J,he)>.5){if(!ge&&!(rn&&xn)){let zt=_n/360,Re=e.device.limits.maxTextureDimension2D,Ve=Math.min(Math.ceil(Math.abs(J)*St*zt),Math.max(0,Math.floor((Re-gt)/2))),it=Math.min(Math.ceil(Math.abs(he)*St*zt),Math.max(0,Math.floor((Re-yt)/2)));jn=Ve/St,Qn=it/St;let Ze=e.renderer.getTemporaryTexture(gt+Ve*2,yt+it*2,[ut,N,i,...F]),Ke=e.renderer.beginFrame(a,Ze.createView(),{r:0,g:0,b:0,a:0},Ze.width,Ze.height,"clear");e.renderer.drawTexture(Ke,ut,{x:Ve,y:it,width:gt,height:yt},{opacity:1}),Ke.end(),ut=Ze}let Je=Math.hypot(J,he)*St*(_n/360)*2,Dt=Math.min(128,Math.max(16,Math.ceil(Je/2)));ut=e.renderer.applyMotionBlur(a,ut,J*St,he*St,_n,Dt,[N,i,...F])}}be!=="media"&&Array.isArray(r.effects)&&r.effects.length>0&&(ut=(await ga(r.effects,ut,gt,yt,e,a,d,m,[Sn,N,i,...F],M,te,h??24,L,r.id??`leaf_${x}`,St)).texture);let Va=[Sn,ut,N,i,...F],Ge=!ge&&r.borderWidth!==void 0&&r.borderColor?En(e,a,T,w,dr,r.borderWidth,r.borderColor,r.strokeAlign??"inside",Va,St):null;if(So.length>0&&e.renderer.resumeScissors?.(So),ge){let R=ut;if(Ge){let J=e.renderer.beginFrame(a,R.createView(),{r:0,g:0,b:0,a:0},gt,yt,"load");e.renderer.drawTexture(J,Ge.borderTex,{x:Ge.ox,y:Ge.oy,width:Ge.ow,height:Ge.oh},{opacity:1}),J.end()}let D={position:[Ue+T*.5,Tt+w*.5,l?.z??r.z??0],width:T,height:w,textureExtent:[T*St/gt,w*St/yt],rotation:[l?.rotateX??r.rotateX??0,l?.rotateY??r.rotateY??0,(l?.rotateZ??r.rotateZ??0)!==0?l?.rotateZ??r.rotateZ??0:fe],scale:[ct*Vt,ct*Lt,l?.scaleZ??r.scaleZ??1],anchor:[r.anchorX??.5,r.anchorY??.5],borderRadius:dr,borderWidth:r.borderWidth,borderColor:r.borderColor,opacity:we,twoSided:l?.twoSided??r.twoSided??!0,material:l?.material??r.material,shininess:l?.shininess??r.shininess,roughness:l?.roughness??r.roughness,specularIntensity:l?.specularIntensity??r.specularIntensity,ambientIntensity:l?.ambientIntensity??r.ambientIntensity,metallic:l?.metallic??r.metallic,...Xn(l,r),...xo(r.id,Ue,Tt,T,w)};if(Ce){let J=gn(e.device,e.renderer.format??"rgba8unorm",ee);D.modelMatrix=_.multiply(Ce,J.quadModelMatrix({...D,position:[l?.x??r.x??0,l?.y??r.y??0,l?.z??r.z??0]}))}let Y=Yr||!!(D.borderWidth&&D.borderWidth>0&&D.borderColor);return(!ln||Y)&&We.push({owner:r.id,kind:"quad",texture:R,opts:D}),ln&&ln.length>0&&We.push({owner:r.id,kind:"slug",batches:ln,opts:D,stackBase:Y?1:0}),{finalTex:N,finalView:Pe}}if(rn&&xn){let R=ut;if(Ge){let D=e.renderer.beginFrame(a,R.createView(),{r:0,g:0,b:0,a:0},gt,yt,"load");e.renderer.drawTexture(D,Ge.borderTex,{x:Ge.ox,y:Ge.oy,width:Ge.ow,height:Ge.oh},{opacity:1}),D.end()}if(lt==="normal"||lt==="source-over")Br(e,a,Pe,R,xn,S,z,we);else{let D=[N,i,R,...F];Ge&&D.push(Ge.borderTex);let Y=e.renderer.getTemporaryTexture(S,z,D),J=Y.createView();e.renderer.beginFrame(a,J,{r:0,g:0,b:0,a:0},S,z,"clear").end(),Br(e,a,J,R,xn,S,z,we),N=e.renderer.composite(a,N,Y,lt,[i,...F]),Pe=N.createView()}return{finalTex:N,finalView:Pe}}if(lt==="normal"||lt==="source-over"){let R=e.renderer.beginFrame(a,Pe,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawTexture(R,ut,{x:-jn,y:-Qn,width:T+jn*2,height:w+Qn*2},{opacity:we}),Ge&&e.renderer.drawTexture(R,Ge.borderTex,{x:Ge.ox,y:Ge.oy,width:Ge.ow,height:Ge.oh},{opacity:we}),e.renderer.popTransform(),R.end()}else{let R=[ut,N,i,...F];Ge&&R.push(Ge.borderTex);let D=e.renderer.getTemporaryTexture(S,z,R),Y=D.createView();e.renderer.beginFrame(a,Y,{r:0,g:0,b:0,a:0},S,z,"clear").end();let he=e.renderer.beginFrame(a,Y,{r:0,g:0,b:0,a:0},S,z,"load");e.renderer.pushTransform(Oe),e.renderer.drawTexture(he,ut,{x:-jn,y:-Qn,width:T+jn*2,height:w+Qn*2},{opacity:we}),Ge&&e.renderer.drawTexture(he,Ge.borderTex,{x:Ge.ox,y:Ge.oy,width:Ge.ow,height:Ge.oh},{opacity:we}),e.renderer.popTransform(),he.end(),N=e.renderer.composite(a,N,D,lt,[i,...F]),Pe=N.createView()}return{finalTex:N,finalView:Pe}},Sa=[Te,i,...d.excludeTextures||[]];uo=(await bn(b.children??[],Te,mt,Sa,1,new DOMMatrix,null,O,P,null,!0)).finalTex,sn&&me&&sn.recordFrame(M,me),e.renderer.popTransform(),e.renderer.popScissor();let vo=e.renderer.beginFrame(a,o,{r:0,g:0,b:0,a:0},s,c,"load");e.renderer.drawTexture(vo,uo,{x:0,y:0,width:d.containerWidth??s,height:d.containerHeight??c},{opacity:G}),t.pass=vo}}};function Vs(t){return zn(t.children).some(e=>{let n=e.operation;return n?.kind==="camera"&&!!n.motionBlur})}async function Fs(t,e){let{ctx:n,encoder:o,props:i,targetTexture:s,targetWidth:c,targetHeight:a}=t,d=[...i.excludeTextures??[],s],m=n.renderer.getTemporaryTexture(c,a,d),b=m.createView(),h={...t,targetView:b,targetTexture:m,pass:n.renderer.beginFrame(o,b,{r:0,g:0,b:0,a:0},c,a,"clear"),props:{...i,frame:e,...i.compositionFrame!==void 0&&{compositionFrame:i.compositionFrame-1},motionHistoryOnly:!0,excludeTextures:d}};await lo(h),h.pass.end()}var Os=2;function En(t,e,n,o,i,s,c,a,d,m=1){if(n<=0||o<=0||!c||!s||s<=0)return null;let b=0,h=0,C=n,V=o,X=i,ee=i;if(a==="inside"?(b=0,h=0,C=n,V=o,X=i,ee=Math.max(0,i-s)):a==="outside"?(b=-s,h=-s,C=n+2*s,V=o+2*s,X=i+s,ee=i):(b=-s/2,h=-s/2,C=n+s,V=o+s,X=i+s/2,ee=Math.max(0,i-s/2)),i<=0&&(X=0,ee=0),C<=0||V<=0)return null;let W=Os,B=Math.ceil((C+2*W)*m),O=Math.ceil((V+2*W)*m),P=new DOMMatrix([m,0,0,m,0,0]),G=t.renderer.getTemporaryTexture(B,O,d),L=G.createView();t.renderer.beginFrame(e,L,{r:0,g:0,b:0,a:0},B,O,"clear").end();let M=t.renderer.beginFrame(e,L,{r:0,g:0,b:0,a:0},B,O,"load");t.renderer.pushTransform(P),t.renderer.drawRect(M,{x:W,y:W,width:C,height:V},c,X),t.renderer.popTransform(),M.end();let te=C-2*s,ne=V-2*s;if(te>0&&ne>0){let Te=t.renderer.getTemporaryTexture(B,O,[G,...d]),mt=Te.createView();t.renderer.beginFrame(e,mt,{r:0,g:0,b:0,a:0},B,O,"clear").end();let Wt=t.renderer.beginFrame(e,mt,{r:0,g:0,b:0,a:0},B,O,"load");return t.renderer.pushTransform(P),t.renderer.drawRect(Wt,{x:W+s,y:W+s,width:te,height:ne},{r:1,g:1,b:1,a:1},ee),t.renderer.popTransform(),Wt.end(),{borderTex:t.renderer.composite(e,G,Te,"mask-out",d),ox:b-W,oy:h-W,ow:B/m,oh:O/m}}return{borderTex:G,ox:b-W,oy:h-W,ow:B/m,oh:O/m}}ke();var Gs=async(t,e,n,o)=>{let i=n.operation;if(!i)return;let s=t.length;if(s===0)return;let c=t[0].length;if(c===0)return;if(i.op==="Compositor"){let G=_r(i.volume,1);if(G===1)return;for(let L=0;L<s;L++){let u=t[L];for(let M=0;M<u.length;M++)u[M]*=G}return}let a=_r(i.volume,1),d=Do(i.muted,!1),m=i.animation,b=o?.fps??24,h=di(i);if(!h.volume&&!h.muted)return;let{tl:C,stub:V}=Ii(i.id||i.inputHandleId||"layer",m,a,d,b),ee=(o?.elapsedMs??0)/1e3,W=128;C.seek(ee);let B=V.volume,O=V.muted,P=(h.volume?1:a)*(!h.muted&&d?0:1);for(let G=0;G<c;G+=W){let L=Math.min(c,G+W),u=ee+L/e;C.seek(u);let M=V.volume,te=V.muted;for(let ne=G;ne<L;ne++){let Te=(ne-G)/(L-G),mt=Math.min(1,Math.max(0,B+(M-B)*Te)),Wt=(ne-G<(L-G)/2?O:te)?0:mt,rt=P===0?0:Wt/P;if(rt!==1)for(let ot=0;ot<s;ot++)t[ot][ne]*=rt}B=M,O=te}};Vo.register("CompositorLayer",Gs);var al=Ao({WebGPURenderer:lo});export{ze as Transform3DMath,al as default,so as has3DTransform};
@@ -1,4 +1,4 @@
1
- import{T as Ee,U as Fe,Y as Q,da as ee}from"./chunk-PH3UUX6A.mjs";import"./chunk-BREZX5L5.mjs";import"./chunk-EAHJZDOJ.mjs";import"./chunk-CJ4CSVU3.mjs";import"./chunk-6ISHV73H.mjs";import{a as ze,b as L,c as Te,d as $e,e as G,f as te,g,h as M,j as Ce,m as K}from"./chunk-PIHG6HJO.mjs";import"./chunk-CSLSWUUT.mjs";import"./chunk-GH77FX2Y.mjs";import"./chunk-HOV6DDBZ.mjs";import"./chunk-RECQ74RP.mjs";import{a as A}from"./chunk-6FULVULN.mjs";import"./chunk-ULOFDFHJ.mjs";import"./chunk-VEDMJBJV.mjs";import"./chunk-QEWDIPJ7.mjs";import"./chunk-OGPJTUAL.mjs";import"./chunk-5RRKGN2U.mjs";import"./chunk-BDZ3TSOT.mjs";import{f as S,g as y}from"./chunk-Y4NIR77Z.mjs";y();y();var $t="https://github.com/facebookresearch/sam3/blob/main/LICENSE";function Ne(e="SAM 3",t){if(!t?.acceptLicense&&!(typeof S<"u"&&S.env?.FRAMEFIELDS_ACCEPT_SAM_LICENSE==="1"))throw new Error(`Meta SAM License agreement required for ${e}:
1
+ import{T as Ee,U as Fe,Y as Q,ea as ee}from"./chunk-SWRGQTVC.mjs";import"./chunk-EAHJZDOJ.mjs";import"./chunk-CJ4CSVU3.mjs";import"./chunk-BREZX5L5.mjs";import"./chunk-6ISHV73H.mjs";import{a as ze,b as L,c as Te,d as $e,e as G,f as te,g,h as M,j as Ce,m as K}from"./chunk-PIHG6HJO.mjs";import"./chunk-CSLSWUUT.mjs";import"./chunk-GH77FX2Y.mjs";import"./chunk-HOV6DDBZ.mjs";import"./chunk-RECQ74RP.mjs";import{a as A}from"./chunk-6FULVULN.mjs";import"./chunk-ULOFDFHJ.mjs";import"./chunk-VEDMJBJV.mjs";import"./chunk-QEWDIPJ7.mjs";import"./chunk-OGPJTUAL.mjs";import"./chunk-5RRKGN2U.mjs";import"./chunk-BDZ3TSOT.mjs";import{f as S,g as y}from"./chunk-Y4NIR77Z.mjs";y();y();var $t="https://github.com/facebookresearch/sam3/blob/main/LICENSE";function Ne(e="SAM 3",t){if(!t?.acceptLicense&&!(typeof S<"u"&&S.env?.FRAMEFIELDS_ACCEPT_SAM_LICENSE==="1"))throw new Error(`Meta SAM License agreement required for ${e}:
2
2
  SAM 3's model weights are subject to Meta's SAM License.
3
3
  Review terms at: ${$t}
4
4
  To download and run SAM 3 in Framefields, you must explicitly accept the terms by:
@@ -0,0 +1,19 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>framefields preview</title>
7
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 512 512%22%3E%3Cg fill=%22none%22 stroke=%22%233B82F6%22 stroke-linecap=%22round%22%3E%3Cpath d=%22M184 56H86q-30 0-30 30v98M328 56h98q30 0 30 30v98M184 456H86q-30 0-30-30v-98M328 456h98q30 0 30-30v-98%22 stroke-width=%2234%22/%3E%3Cpath d=%22M176 182v148m0-148c0 74 60 74 100 74%22 stroke-width=%2228%22/%3E%3C/g%3E%3Cg fill=%22%233B82F6%22%3E%3Ccircle cx=%22176%22 cy=%22172%22 r=%2232%22/%3E%3Ccircle cx=%22176%22 cy=%22340%22 r=%2232%22/%3E%3Cpath d=%22M284 200l78 56-78 56z%22 stroke=%22%233B82F6%22 stroke-width=%2234%22 stroke-linejoin=%22round%22/%3E%3C/g%3E%3C/svg%3E">
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
11
+ <link rel="stylesheet" href="/@framefields/ui/main.css">
12
+ </head>
13
+ <body>
14
+ <ff-preview></ff-preview>
15
+ <!-- The page first, so it hears the player announce itself. -->
16
+ <script type="module" src="/@framefields/ui/main.js"></script>
17
+ <script type="module" src="/@framefields/player.js"></script>
18
+ </body>
19
+ </html>
@@ -0,0 +1 @@
1
+ :root{--bg: #0e0f11;--surface: #16171a;--surface-2: #1d1e22;--surface-3: #26282d;--line: #2a2c31;--line-2: #3a3c43;--ink: #ededf0;--ink-2: #a6a8b0;--ink-3: #74777f;--stage: #060607;--primary-bg: #ededf0;--primary-ink: #0e0f11;--brand: #3b82f6;--focus: #5eaefc;--ok: #4fbf7a;--bad: #f27d8d;--wave: #4b4e57;--radius: 10px;--font: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;color-scheme:dark}@media(prefers-color-scheme:light){:root{--bg: #f5f5f6;--surface: #ffffff;--surface-2: #f0f0f2;--surface-3: #e6e6e9;--line: #e2e2e6;--line-2: #cfcfd5;--ink: #15161a;--ink-2: #53555d;--ink-3: #85878f;--stage: #0b0b0c;--primary-bg: #15161a;--primary-ink: #ffffff;--brand: #2563eb;--focus: #1c74cc;--ok: #23874a;--bad: #cf4057;--wave: #c2c3ca;color-scheme:light}}*{box-sizing:border-box}html,body{height:100%;margin:0;overflow:hidden;background:var(--bg);color:var(--ink)}body{display:flex;flex-direction:column;height:100dvh;font:13.5px / 1.45 var(--font);-webkit-font-smoothing:antialiased;font-feature-settings:"cv11","ss03"}button,input{font:inherit;color:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.tnum{font-variant-numeric:tabular-nums}.grow{flex:1}.spinner{width:12px;height:12px;border-radius:50%;flex:none;border:1.5px solid var(--line-2);border-top-color:var(--ink);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}@keyframes yt-rotate{to{transform:rotate(360deg)}}@keyframes yt-dash{0%{stroke-dasharray:1 150;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-35}to{stroke-dasharray:90 150;stroke-dashoffset:-124}}@media(prefers-reduced-motion:reduce){.buffering circle,.play-btn .spin circle{animation:none;stroke-dasharray:70 150}}.badge{min-width:18px;height:18px;padding:0 5px;border-radius:9px;display:inline-grid;place-items:center;flex:none;background:var(--brand);color:#fff;font-size:10.5px;font-weight:600}.badge.done{background:var(--ink-3)}.btn{height:26px;padding:0 10px;border-radius:7px;border:0;font-size:12px;font-weight:500;display:inline-flex;align-items:center;gap:6px;background:transparent;color:var(--ink-2);white-space:nowrap}.btn:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.btn.primary{background:var(--primary-bg);color:var(--primary-ink)}.btn.primary:hover:not(:disabled){background:var(--primary-bg);filter:brightness(.9)}.btn.danger:hover:not(:disabled){color:var(--bad)}.btn:disabled{opacity:.4;cursor:default}.btn svg{width:13px;height:13px}.x-btn{width:22px;height:22px;padding:0;justify-content:center;margin-right:-4px}ff-preview,ff-header,ff-stage,ff-transport,ff-timeline,ff-notes-panel,ff-note-editor{display:contents}.top{flex:none;display:flex;align-items:center;gap:10px;padding:0 20px;height:50px;border-bottom:1px solid var(--line);min-width:0}.logo{width:22px;height:22px;flex:none;color:var(--brand)}.sep{width:1px;height:18px;background:var(--line-2);flex:none;margin:0 2px}.top h1{font-size:14px;font-weight:600;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.spec{color:var(--ink-3);font-size:12px;white-space:nowrap}@media(max-width:640px){.spec{display:none}}.chip{display:inline-flex;align-items:center;gap:8px;height:26px;padding:0 10px;white-space:nowrap;border:1px solid var(--line);border-radius:999px;color:var(--ink-2);font-size:12px;background:var(--surface)}.chip[data-state=ready] .dot{color:var(--ok)}.chip[data-state=none] .dot,.chip[data-state=offline] .dot{color:var(--ink-3)}.chip[data-state=error]{color:var(--bad)}.player{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;width:100%;max-width:1600px;margin:0 auto;padding:16px 20px 20px}@media(max-width:640px){.player{padding:12px}}.stage-wrap{flex:1 1 0;min-height:96px;container-type:size;display:grid;place-items:center}.stage{position:relative;background:var(--stage);border-radius:var(--radius);overflow:hidden;box-shadow:0 0 0 1px var(--line);user-select:none;-webkit-user-select:none;aspect-ratio:var(--ar, 16 / 9);width:min(100cqw,calc(100cqh * var(--ar-n, 1.7778)))}.stage canvas{display:block;width:100%;height:100%}.stage-msg{position:absolute;inset:0;display:none;place-items:center;padding:24px;text-align:center;color:#fff;background:#000000b8;font-size:13px;line-height:1.5;white-space:pre-wrap;overflow:auto}.stage-msg.on{display:grid}.buffering{position:absolute;left:50%;top:50%;width:clamp(36px,9cqmin,64px);aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none;opacity:0;visibility:hidden;transition:opacity .15s,visibility 0s .15s;filter:drop-shadow(0 0 3px rgb(0 0 0 / .45))}.buffering.on{opacity:1;visibility:visible;transition:opacity .2s .25s,visibility 0s .25s}.buffering svg{width:100%;height:100%;animation:yt-rotate 1.4s linear infinite}.buffering circle{fill:none;stroke:#fff;stroke-width:3.6;stroke-linecap:round;stroke-dasharray:1 150;stroke-dashoffset:0;animation:yt-dash 1.4s ease-in-out infinite}.stage.can-note{cursor:crosshair}.overlay{position:absolute;inset:0;pointer-events:none}.pin{position:absolute;width:22px;height:22px;margin:-11px 0 0 -11px;padding:0;border-radius:50%;display:grid;place-items:center;pointer-events:auto;cursor:pointer;background:var(--brand);color:#fff;font-size:11px;font-weight:600;line-height:1;border:2px solid #fff;box-shadow:0 1px 5px #0000008c;transition:transform .12s}.pin:hover,.pin.active{transform:scale(1.18)}.pin.done{background:#6b6e76}.pin.draft{animation:pin-pulse 1.5s ease-out infinite}.pin svg{width:11px;height:11px}@keyframes pin-pulse{0%{box-shadow:0 0 #3b82f699,0 1px 5px #0000008c}to{box-shadow:0 0 0 14px #3b82f600,0 1px 5px #0000008c}}.area{position:absolute;border:1.5px solid var(--brand);border-radius:3px;background:#3b82f61f;box-shadow:0 0 0 1px #00000059}.area.done{border-color:#9a9da5;background:#ffffff0d}.marquee{position:absolute;display:none;border:1.5px dashed #fff;background:#3b82f629;border-radius:3px;pointer-events:none}.stage-hint,.toast{position:absolute;left:50%;transform:translate(-50%);pointer-events:none;white-space:nowrap;padding:6px 11px;border-radius:999px;font-size:12px;color:#fff;background:#0000009e;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;transition:opacity .15s}.stage-hint{top:12px}.stage.can-note.hint:hover .stage-hint{opacity:1}.toast{bottom:14px}.toast.on{opacity:1}.transport{flex:none;display:flex;align-items:center;gap:4px;flex-wrap:wrap;row-gap:6px}.icon-btn{width:32px;height:32px;display:inline-grid;place-items:center;border-radius:8px;border:0;background:transparent;color:var(--ink-2);flex:none}.icon-btn:hover:not(:disabled){background:var(--surface-2);color:var(--ink)}.icon-btn:disabled{opacity:.35;cursor:default}.icon-btn svg{width:16px;height:16px}.play-btn{width:36px;height:36px;border-radius:50%;border:0;display:inline-grid;place-items:center;flex:none;background:var(--primary-bg);color:var(--primary-ink);margin:0 2px}.play-btn:hover:not(:disabled){filter:brightness(.9)}.play-btn:disabled{opacity:.4;cursor:default}.play-btn svg{width:14px;height:14px}.play-btn .spin{display:none;width:20px;height:20px;animation:yt-rotate 1.4s linear infinite}.play-btn .spin circle{fill:none;stroke:currentColor;stroke-width:5;stroke-linecap:round;stroke-dasharray:1 150;animation:yt-dash 1.4s ease-in-out infinite}.play-btn.loading .spin{display:block}.play-btn.loading svg:not(.spin){display:none}.timecode{display:flex;align-items:baseline;gap:5px;margin-left:8px;font-size:13px;white-space:nowrap}.timecode .dim{color:var(--ink-3)}.timecode .frame{color:var(--ink-3);font-size:11.5px;margin-left:6px}.fps{margin-left:10px;color:var(--ink-3);font-size:11.5px;white-space:nowrap}input[type=range].slider{-webkit-appearance:none;appearance:none;width:72px;height:4px;border-radius:2px;background:var(--line-2);margin:0 8px 0 0}input[type=range].slider::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:var(--ink);border:0}input[type=range].slider::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--ink);border:0}input[type=range].slider:disabled{opacity:.35}.transport{position:relative}.notes-btn{height:32px;padding:0 9px 0 8px;margin-right:6px;font-size:12.5px}.notes-btn svg{width:15px;height:15px}.notes-btn .badge{background:var(--surface-3);color:var(--ink-2)}.notes-btn .badge.open{background:var(--brand);color:#fff}.notes-panel{position:absolute;right:0;bottom:calc(100% + 8px);z-index:15;width:min(360px,calc(100vw - 24px));max-height:min(440px,62vh);display:none;flex-direction:column;overflow:hidden;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;box-shadow:0 12px 32px #00000059}.notes-panel.on{display:flex}.np-head{flex:none;display:flex;align-items:center;gap:8px;padding:8px 8px 8px 14px;border-bottom:1px solid var(--line)}.np-head h2{margin:0;font-size:13px;font-weight:600}.np-list{overflow:auto;padding:4px}.np-empty{padding:22px 18px;text-align:center;color:var(--ink-3);font-size:12.5px}.np-foot{flex:none;padding:8px 14px;border-top:1px solid var(--line);color:var(--ink-3);font-size:11.5px;overflow-wrap:anywhere}.note-row{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:start;padding:8px 8px 8px 10px;border-radius:8px;cursor:pointer}.note-row:hover{background:var(--surface-2)}.note-row .badge{margin-top:1px}.note-row .when{font-size:11.5px;color:var(--ink-3)}.note-row .text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}.note-row.done .text{color:var(--ink-3);text-decoration:line-through}.check{width:20px;height:20px;border-radius:50%;padding:0;display:grid;place-items:center;margin-top:1px;border:1.5px solid var(--line-2);background:transparent;color:transparent}.check:hover{border-color:var(--ok);color:var(--ok)}.check.on{background:var(--ok);border-color:var(--ok);color:#fff}.check svg{width:11px;height:11px}.timeline{flex:none;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:0 14px;user-select:none;-webkit-user-select:none;touch-action:none;cursor:pointer}.tl-inner{position:relative}.ruler{position:relative;height:22px;border-bottom:1px solid var(--line)}.tick{position:absolute;bottom:0;width:1px;height:4px;background:var(--line-2)}.tick.major{height:8px;background:var(--ink-3)}.tick span{position:absolute;bottom:9px;left:4px;font-size:10.5px;line-height:1;color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums}.wave-lane{position:relative;height:48px}@media(max-height:600px){.wave-lane{height:30px}}.wave-lane canvas{position:absolute;inset:0;width:100%;height:100%}.wave-state{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--ink-3);font-size:12px}.wave-state.shimmer{background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--ink) 6%,transparent) 50%,transparent 100%);background-size:200% 100%;animation:shimmer 1.4s linear infinite}@keyframes shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}.playhead{position:absolute;top:0;bottom:0;width:0;pointer-events:none;z-index:3}.playhead:before{content:"";position:absolute;top:0;bottom:0;left:-.5px;width:1px;background:var(--ink)}.playhead:after{content:"";position:absolute;top:0;left:-5px;width:10px;height:11px;background:var(--ink);clip-path:polygon(0 0,100% 0,100% 55%,50% 100%,0 55%)}.hover-line{position:absolute;top:0;bottom:0;width:1px;background:var(--line-2);display:none;pointer-events:none}.hover-time{position:absolute;top:-28px;transform:translate(-50%);display:none;pointer-events:none;font-size:11px;line-height:1;background:var(--surface-3);color:var(--ink);padding:5px 7px;border-radius:5px;white-space:nowrap;z-index:4;font-variant-numeric:tabular-nums}.note-marks{position:absolute;inset:22px 0 0;pointer-events:none;z-index:2}.note-mark{position:absolute;top:5px;width:14px;height:14px;margin-left:-7px;padding:0;border:0;border-radius:50%;display:grid;place-items:center;pointer-events:auto;cursor:pointer;background:var(--brand);color:#fff;font-size:8.5px;font-weight:700;box-shadow:0 0 0 2px var(--surface)}.note-mark:after{content:"";position:absolute;top:14px;left:6.5px;width:1px;height:30px;background:var(--brand);opacity:.45}.note-mark.done{background:var(--ink-3)}.note-mark.stacked:after{display:none}.note-mark.done:after{background:var(--ink-3)}.note-mark:hover{transform:scale(1.2)}.pop{position:fixed;z-index:20;width:280px;display:none;padding:10px 10px 8px;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;box-shadow:0 12px 32px #00000059}.pop.on{display:block}.pop-head{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--ink-3);margin-bottom:6px}.pop textarea{display:block;width:100%;min-height:54px;max-height:180px;resize:none;padding:2px 2px 0;border:0;outline:none;background:transparent;color:var(--ink);font:inherit;line-height:1.45}.pop textarea::placeholder{color:var(--ink-3)}.pop-text{white-space:pre-wrap;overflow-wrap:anywhere;padding:0 2px;max-height:200px;overflow:auto}.pop-foot{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:11.5px;color:var(--ink-3)}.pop-foot .err{color:var(--bad)}