framefields 2.14.0 → 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 (334) hide show
  1. package/NOTICE.md +5 -1
  2. package/dist/audio/index.d.mts +3 -3
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-DFwRbID_.mjs → audio-6TfPlfl4.mjs} +3 -3
  5. package/dist/{audio-DFwRbID_.mjs.map → audio-6TfPlfl4.mjs.map} +1 -1
  6. package/dist/{audio-CdCuGK5d.d.mts → audio-7oqTUi4G.d.mts} +2 -2
  7. package/dist/{audio-CdCuGK5d.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 +11 -11
  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-B8Nby2CU.mjs → dist-COOpgG9G.mjs} +4 -3
  19. package/dist/{dist-B8Nby2CU.mjs.map → dist-COOpgG9G.mjs.map} +1 -1
  20. package/dist/{dist--Uu5bQ_6.mjs → dist-XqlFM2a8.mjs} +13733 -5323
  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 +4 -4
  26. package/dist/effects/index.mjs +35 -35
  27. package/dist/{effects-WMgv8ZaD.mjs → effects-DlRMovU5.mjs} +2 -2
  28. package/dist/{effects-WMgv8ZaD.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-OW3yAfO5.mjs → fonts-BWYcXjyK.mjs} +3 -3
  32. package/dist/fonts-BWYcXjyK.mjs.map +1 -0
  33. package/dist/{gpu-R4T2Tndu.mjs → gpu-CH1PdM4T.mjs} +2 -2
  34. package/dist/{gpu-R4T2Tndu.mjs.map → gpu-CH1PdM4T.mjs.map} +1 -1
  35. package/dist/{index-CEKxvGY-.d.mts → index-BHTycml5.d.mts} +2 -2
  36. package/dist/{index-CEKxvGY-.d.mts.map → index-BHTycml5.d.mts.map} +1 -1
  37. package/dist/{index-DoP6EiHj.d.mts → index-BcxxxwhV.d.mts} +4 -4
  38. package/dist/{index-DoP6EiHj.d.mts.map → index-BcxxxwhV.d.mts.map} +1 -1
  39. package/dist/{index-Bv7gxGK1.d.mts → index-BnB_Ou2y.d.mts} +2 -2
  40. package/dist/index-BnB_Ou2y.d.mts.map +1 -0
  41. package/dist/index-C-V6CAhP.d.mts.map +1 -1
  42. package/dist/{index-D1FqV1eu.d.mts → index-CMhkkc56.d.mts} +43 -11
  43. package/dist/index-CMhkkc56.d.mts.map +1 -0
  44. package/dist/{index-B0Vq8Bwf.d.mts → index-CYVpYGM-.d.mts} +2 -2
  45. package/dist/{index-B0Vq8Bwf.d.mts.map → index-CYVpYGM-.d.mts.map} +1 -1
  46. package/dist/{index-C7-p9zwU.d.mts → index-DhL7ckvs.d.mts} +5 -5
  47. package/dist/index-DhL7ckvs.d.mts.map +1 -0
  48. package/dist/{index-9xte4JgL.d.mts → index-DkAjKnhW.d.mts} +1464 -559
  49. package/dist/index-DkAjKnhW.d.mts.map +1 -0
  50. package/dist/{index-GA9_Z8Fn.d.mts → index-RILu3ULT.d.mts} +2 -2
  51. package/dist/{index-GA9_Z8Fn.d.mts.map → index-RILu3ULT.d.mts.map} +1 -1
  52. package/dist/{index-C5sgRLlG.d.mts → index-TCtdSXd7.d.mts} +3 -1
  53. package/dist/index-TCtdSXd7.d.mts.map +1 -0
  54. package/dist/{index-CRaydvLi.d.mts → index-s2qQ8ifZ.d.mts} +886 -51
  55. package/dist/index-s2qQ8ifZ.d.mts.map +1 -0
  56. package/dist/index.d.mts +13 -13
  57. package/dist/index.mjs +52 -52
  58. package/dist/preview/index.d.mts +3 -3
  59. package/dist/preview/index.mjs +10 -10
  60. package/dist/preview-BeGF1Bb1.mjs +1002 -0
  61. package/dist/preview-BeGF1Bb1.mjs.map +1 -0
  62. package/dist/preview-engine/audio.mjs +1 -1
  63. package/dist/preview-engine/{chunk-64L4GUOF.mjs → chunk-4F3DG6YB.mjs} +2 -2
  64. package/dist/preview-engine/chunk-A2OTOW3B.mjs +4694 -0
  65. package/dist/preview-engine/{chunk-GNDE3OXQ.mjs → chunk-BR56TQBP.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-ADLIF544.mjs → chunk-H2XKXXAU.mjs} +1 -1
  67. package/dist/preview-engine/chunk-NDUODAY2.mjs +3 -0
  68. package/dist/preview-engine/{chunk-FZ4RD7HV.mjs → chunk-QAQJSWUT.mjs} +1 -1
  69. package/dist/preview-engine/chunk-SWRGQTVC.mjs +138 -0
  70. package/dist/preview-engine/{chunk-52X7SURQ.mjs → chunk-TEA3GVBJ.mjs} +1 -1
  71. package/dist/preview-engine/chunk-VM2ZBPLM.mjs +644 -0
  72. package/dist/preview-engine/{chunk-UBY2UYEL.mjs → chunk-XSHNQJ7L.mjs} +1 -1
  73. package/dist/preview-engine/components.mjs +1 -1
  74. package/dist/preview-engine/effects.mjs +1 -1
  75. package/dist/preview-engine/fonts.mjs +1 -1
  76. package/dist/preview-engine/framefields.mjs +1 -1
  77. package/dist/preview-engine/player.mjs +2 -2
  78. package/dist/preview-engine/{renderers-DU7KPFVV.mjs → renderers-6C7NWWDX.mjs} +1 -1
  79. package/dist/preview-engine/renderers-HHVGNMSJ.mjs +206 -0
  80. package/dist/preview-engine/{src-YXNX4MLK.mjs → src-RCNEKIRP.mjs} +1 -1
  81. package/dist/preview-page/index.html +19 -0
  82. package/dist/preview-page/main.css +1 -0
  83. package/dist/preview-page/main.js +327 -0
  84. package/dist/{program-tFKCWU2j.mjs → program-CMigyfso.mjs} +829 -52
  85. package/dist/program-CMigyfso.mjs.map +1 -0
  86. package/dist/renderer/index.d.mts +2 -2
  87. package/dist/renderer/index.mjs +2 -2
  88. package/dist/{renderer-DkOuQi84.mjs → renderer-0GMEL_Zi.mjs} +3 -3
  89. package/dist/{renderer-DkOuQi84.mjs.map → renderer-0GMEL_Zi.mjs.map} +1 -1
  90. package/dist/{renderer-BGp0An5A.mjs → renderer-3Wv2ZBJG.mjs} +3 -3
  91. package/dist/{renderer-BGp0An5A.mjs.map → renderer-3Wv2ZBJG.mjs.map} +1 -1
  92. package/dist/{renderer-BVIXKfbC.mjs → renderer-4nXkaAWu.mjs} +1178 -199
  93. package/dist/renderer-4nXkaAWu.mjs.map +1 -0
  94. package/dist/{renderer-Cw6_NL2i.mjs → renderer-6SnfLXeg.mjs} +3 -3
  95. package/dist/{renderer-Cw6_NL2i.mjs.map → renderer-6SnfLXeg.mjs.map} +1 -1
  96. package/dist/{renderer-BVU22lBS.mjs → renderer-8gHw3O0P.mjs} +2 -2
  97. package/dist/{renderer-BVU22lBS.mjs.map → renderer-8gHw3O0P.mjs.map} +1 -1
  98. package/dist/{renderer-BjDddtw9.mjs → renderer-AOBglZHC.mjs} +2 -2
  99. package/dist/{renderer-D-KHHWQD.mjs → renderer-B0bSARK3.mjs} +3 -3
  100. package/dist/{renderer-D-KHHWQD.mjs.map → renderer-B0bSARK3.mjs.map} +1 -1
  101. package/dist/{renderer-CCxk-RJR.mjs → renderer-B2_tuRfl.mjs} +2 -2
  102. package/dist/{renderer-CCxk-RJR.mjs.map → renderer-B2_tuRfl.mjs.map} +1 -1
  103. package/dist/{renderer-k5d7JSbs.mjs → renderer-B82FhkEr.mjs} +3 -3
  104. package/dist/{renderer-k5d7JSbs.mjs.map → renderer-B82FhkEr.mjs.map} +1 -1
  105. package/dist/{renderer-I0Hh9cLK.mjs → renderer-B9lzA0PY.mjs} +3 -3
  106. package/dist/{renderer-I0Hh9cLK.mjs.map → renderer-B9lzA0PY.mjs.map} +1 -1
  107. package/dist/{renderer-Dwwnx7Dk.mjs → renderer-BBSIWSry.mjs} +2 -2
  108. package/dist/{renderer-Dwwnx7Dk.mjs.map → renderer-BBSIWSry.mjs.map} +1 -1
  109. package/dist/{renderer-_pC-jB9O.mjs → renderer-BEKDMxbi.mjs} +2 -2
  110. package/dist/{renderer-_pC-jB9O.mjs.map → renderer-BEKDMxbi.mjs.map} +1 -1
  111. package/dist/renderer-BERGAxqA.mjs +5 -0
  112. package/dist/{renderer-raxwsiGI.mjs → renderer-BF960HY8.mjs} +3 -3
  113. package/dist/{renderer-raxwsiGI.mjs.map → renderer-BF960HY8.mjs.map} +1 -1
  114. package/dist/{renderer-Dr0tXA4k.mjs → renderer-BFwyVxCu.mjs} +3 -3
  115. package/dist/{renderer-Dr0tXA4k.mjs.map → renderer-BFwyVxCu.mjs.map} +1 -1
  116. package/dist/{renderer-DEjo6dw_.mjs → renderer-BNiwcI3-.mjs} +2 -2
  117. package/dist/{renderer-DEjo6dw_.mjs.map → renderer-BNiwcI3-.mjs.map} +1 -1
  118. package/dist/{renderer-DIEeHiQA.mjs → renderer-BPbVb2Q4.mjs} +2 -2
  119. package/dist/{renderer-DIEeHiQA.mjs.map → renderer-BPbVb2Q4.mjs.map} +1 -1
  120. package/dist/renderer-BQ_YkBMt.mjs +6 -0
  121. package/dist/{renderer-BBMtmxks.mjs → renderer-BUWxlA8T.mjs} +3 -3
  122. package/dist/{renderer-BBMtmxks.mjs.map → renderer-BUWxlA8T.mjs.map} +1 -1
  123. package/dist/renderer-BW0Tjsv9.mjs +5 -0
  124. package/dist/{renderer-Dgj46uEU.mjs → renderer-BX8liu-e.mjs} +2 -2
  125. package/dist/{renderer-ZnrEfkYh.mjs → renderer-BXIwDAr_.mjs} +2 -2
  126. package/dist/{renderer-ZnrEfkYh.mjs.map → renderer-BXIwDAr_.mjs.map} +1 -1
  127. package/dist/{renderer-DA8YEo_d.mjs → renderer-B_Hy1W-g.mjs} +3 -3
  128. package/dist/{renderer-DA8YEo_d.mjs.map → renderer-B_Hy1W-g.mjs.map} +1 -1
  129. package/dist/{renderer-iMiYStcW.mjs → renderer-Bb6cvSgh.mjs} +2 -2
  130. package/dist/{renderer-iMiYStcW.mjs.map → renderer-Bb6cvSgh.mjs.map} +1 -1
  131. package/dist/{renderer-BacY4nh8.mjs → renderer-BdppwWC9.mjs} +2 -2
  132. package/dist/{renderer-BacY4nh8.mjs.map → renderer-BdppwWC9.mjs.map} +1 -1
  133. package/dist/{renderer-CrxwW6VQ.mjs → renderer-Bhc24HVe.mjs} +3 -3
  134. package/dist/{renderer-CrxwW6VQ.mjs.map → renderer-Bhc24HVe.mjs.map} +1 -1
  135. package/dist/{renderer-BH7UCMPQ.mjs → renderer-BiNA2wF0.mjs} +2 -2
  136. package/dist/{renderer-BH7UCMPQ.mjs.map → renderer-BiNA2wF0.mjs.map} +1 -1
  137. package/dist/{renderer-DVPgWHZw.mjs → renderer-BmoBgTp5.mjs} +3 -3
  138. package/dist/{renderer-DVPgWHZw.mjs.map → renderer-BmoBgTp5.mjs.map} +1 -1
  139. package/dist/{renderer-C20efMI0.mjs → renderer-BmqFmCWS.mjs} +3 -3
  140. package/dist/{renderer-C20efMI0.mjs.map → renderer-BmqFmCWS.mjs.map} +1 -1
  141. package/dist/{renderer-B0yVUOPP.mjs → renderer-BnVwAObV.mjs} +2 -2
  142. package/dist/{renderer-B0yVUOPP.mjs.map → renderer-BnVwAObV.mjs.map} +1 -1
  143. package/dist/{renderer-CP8wLzTU.mjs → renderer-BxttZHme.mjs} +2 -2
  144. package/dist/{renderer-CP8wLzTU.mjs.map → renderer-BxttZHme.mjs.map} +1 -1
  145. package/dist/renderer-BzyPdUD1.mjs +5 -0
  146. package/dist/renderer-C0hM-mtY.mjs +5 -0
  147. package/dist/renderer-C6cyUTvk.mjs +5 -0
  148. package/dist/{renderer-BOSZAdgF.mjs → renderer-C8E4XsSg.mjs} +2 -2
  149. package/dist/{renderer-BOSZAdgF.mjs.map → renderer-C8E4XsSg.mjs.map} +1 -1
  150. package/dist/renderer-C8zY3pzk.mjs +5 -0
  151. package/dist/{renderer-DWq9gYRw.mjs → renderer-C9U-LY50.mjs} +3 -3
  152. package/dist/{renderer-DWq9gYRw.mjs.map → renderer-C9U-LY50.mjs.map} +1 -1
  153. package/dist/{renderer-Dj2H5JPR.mjs → renderer-CB2JVu5x.mjs} +3 -3
  154. package/dist/{renderer-Dj2H5JPR.mjs.map → renderer-CB2JVu5x.mjs.map} +1 -1
  155. package/dist/{renderer-Bcu3UrI-.mjs → renderer-CC4YBJ8Z.mjs} +3 -3
  156. package/dist/{renderer-Bcu3UrI-.mjs.map → renderer-CC4YBJ8Z.mjs.map} +1 -1
  157. package/dist/renderer-CEkSOyKu.mjs +5 -0
  158. package/dist/{renderer-DzLrvCB2.mjs → renderer-CIycc5O-.mjs} +2 -2
  159. package/dist/{renderer-DzLrvCB2.mjs.map → renderer-CIycc5O-.mjs.map} +1 -1
  160. package/dist/renderer-CJYtfa4x.mjs +5 -0
  161. package/dist/{renderer-BeNl_6EG.mjs → renderer-CJraQlV-.mjs} +2 -2
  162. package/dist/{renderer-BeNl_6EG.mjs.map → renderer-CJraQlV-.mjs.map} +1 -1
  163. package/dist/renderer-CKMtHGZh.mjs +5 -0
  164. package/dist/renderer-CLzicoiy.mjs +5 -0
  165. package/dist/renderer-CM2A4BHd.mjs +5 -0
  166. package/dist/{renderer-DtMVitEF.mjs → renderer-COWGWtob.mjs} +2 -2
  167. package/dist/{renderer-DtMVitEF.mjs.map → renderer-COWGWtob.mjs.map} +1 -1
  168. package/dist/{renderer-CT3zkfbf.mjs → renderer-COxG2XGf.mjs} +2 -2
  169. package/dist/{renderer-CT3zkfbf.mjs.map → renderer-COxG2XGf.mjs.map} +1 -1
  170. package/dist/{renderer-DNxWOz8Q.mjs → renderer-CQDCIsQm.mjs} +2 -2
  171. package/dist/{renderer-DNxWOz8Q.mjs.map → renderer-CQDCIsQm.mjs.map} +1 -1
  172. package/dist/{renderer-C5AoaymD.mjs → renderer-CRUeag8i.mjs} +3 -3
  173. package/dist/{renderer-C5AoaymD.mjs.map → renderer-CRUeag8i.mjs.map} +1 -1
  174. package/dist/{renderer-ngmYIIob.mjs → renderer-CWVput06.mjs} +3 -3
  175. package/dist/{renderer-ngmYIIob.mjs.map → renderer-CWVput06.mjs.map} +1 -1
  176. package/dist/renderer-CZlHjcxr.mjs +5 -0
  177. package/dist/{renderer-0rveCDm-.mjs → renderer-CbbnBLOB.mjs} +3 -3
  178. package/dist/{renderer-0rveCDm-.mjs.map → renderer-CbbnBLOB.mjs.map} +1 -1
  179. package/dist/renderer-CbimvSU8.mjs +5 -0
  180. package/dist/renderer-Ccvc63yd.mjs +5 -0
  181. package/dist/renderer-Cdp-SGfq.mjs +5 -0
  182. package/dist/renderer-CeTcSs3e.mjs +5 -0
  183. package/dist/{renderer-Brmbl12Y.mjs → renderer-CfLZein2.mjs} +3 -3
  184. package/dist/{renderer-Brmbl12Y.mjs.map → renderer-CfLZein2.mjs.map} +1 -1
  185. package/dist/{renderer-BJ8ea92W.mjs → renderer-Ch-q1O-q.mjs} +3 -3
  186. package/dist/{renderer-BJ8ea92W.mjs.map → renderer-Ch-q1O-q.mjs.map} +1 -1
  187. package/dist/{renderer-CP108ABB.mjs → renderer-Ch5JvJWl.mjs} +2 -2
  188. package/dist/{renderer-CP108ABB.mjs.map → renderer-Ch5JvJWl.mjs.map} +1 -1
  189. package/dist/{renderer-47y12Z37.mjs → renderer-ChtEzq-R.mjs} +2 -2
  190. package/dist/{renderer-47y12Z37.mjs.map → renderer-ChtEzq-R.mjs.map} +1 -1
  191. package/dist/{renderer-DhyMfG1v.mjs → renderer-Cj9nTC5l.mjs} +3 -3
  192. package/dist/{renderer-DhyMfG1v.mjs.map → renderer-Cj9nTC5l.mjs.map} +1 -1
  193. package/dist/{renderer-BDzn1AKF.mjs → renderer-CqT8HsSS.mjs} +2 -2
  194. package/dist/{renderer-BDzn1AKF.mjs.map → renderer-CqT8HsSS.mjs.map} +1 -1
  195. package/dist/{renderer-B7G1KohJ.mjs → renderer-CuQjMhdV.mjs} +2 -2
  196. package/dist/renderer-CvNuu52U.mjs +5 -0
  197. package/dist/renderer-CwciC0oI.mjs +5 -0
  198. package/dist/renderer-CysLUbIr.mjs +5 -0
  199. package/dist/{renderer-Cm0tsbQH.mjs → renderer-Cz30EVws.mjs} +2 -2
  200. package/dist/{renderer-Cm0tsbQH.mjs.map → renderer-Cz30EVws.mjs.map} +1 -1
  201. package/dist/renderer-D3A22Vxb.mjs +5 -0
  202. package/dist/renderer-D5SY9EmA.mjs +5 -0
  203. package/dist/renderer-D8h3ZvaE.mjs +5 -0
  204. package/dist/renderer-DE-B6N9n.mjs +5 -0
  205. package/dist/renderer-DETZTI7t.mjs +5 -0
  206. package/dist/{renderer-nHS3Sius.mjs → renderer-DHoX-5U_.mjs} +3 -3
  207. package/dist/{renderer-nHS3Sius.mjs.map → renderer-DHoX-5U_.mjs.map} +1 -1
  208. package/dist/{renderer-BWSRryIA.mjs → renderer-DOkm0Ycd.mjs} +2 -2
  209. package/dist/{renderer-BWSRryIA.mjs.map → renderer-DOkm0Ycd.mjs.map} +1 -1
  210. package/dist/{renderer-BHYJlK6H.d.mts → renderer-DU3f6ZrS.d.mts} +2 -2
  211. package/dist/{renderer-BHYJlK6H.d.mts.map → renderer-DU3f6ZrS.d.mts.map} +1 -1
  212. package/dist/{renderer-BpVOk9ux.mjs → renderer-DUzv-shq.mjs} +2 -2
  213. package/dist/{renderer-BpVOk9ux.mjs.map → renderer-DUzv-shq.mjs.map} +1 -1
  214. package/dist/renderer-DWnDj0IM.mjs +5 -0
  215. package/dist/renderer-DcGUIbQF.mjs +5 -0
  216. package/dist/renderer-Dfq6FoNO.mjs +5 -0
  217. package/dist/renderer-DhasXW6S.mjs +3 -0
  218. package/dist/{renderer-NRMlYkX6.mjs → renderer-DhnOWnEA.mjs} +3 -3
  219. package/dist/{renderer-NRMlYkX6.mjs.map → renderer-DhnOWnEA.mjs.map} +1 -1
  220. package/dist/{renderer-COgwYqev.mjs → renderer-Dhy1XHzz.mjs} +3 -3
  221. package/dist/{renderer-COgwYqev.mjs.map → renderer-Dhy1XHzz.mjs.map} +1 -1
  222. package/dist/renderer-DjCvpsV_.mjs +5 -0
  223. package/dist/{renderer-BfZNIiSv.mjs → renderer-DjJshz9Y.mjs} +2 -2
  224. package/dist/{renderer-BfZNIiSv.mjs.map → renderer-DjJshz9Y.mjs.map} +1 -1
  225. package/dist/{renderer-CKo7VR8x.mjs → renderer-DmTUIdus.mjs} +3 -3
  226. package/dist/{renderer-CKo7VR8x.mjs.map → renderer-DmTUIdus.mjs.map} +1 -1
  227. package/dist/{renderer-Baw6Utxi.mjs → renderer-Dq7AioJa.mjs} +2 -2
  228. package/dist/{renderer-Baw6Utxi.mjs.map → renderer-Dq7AioJa.mjs.map} +1 -1
  229. package/dist/renderer-DrAaM6JD.mjs +5 -0
  230. package/dist/{renderer-D-GWBoVT.mjs → renderer-Dt4sqNEu.mjs} +2 -2
  231. package/dist/{renderer-D-GWBoVT.mjs.map → renderer-Dt4sqNEu.mjs.map} +1 -1
  232. package/dist/{renderer-FYOL5Za6.mjs → renderer-Dtcs4idV.mjs} +3 -3
  233. package/dist/{renderer-FYOL5Za6.mjs.map → renderer-Dtcs4idV.mjs.map} +1 -1
  234. package/dist/renderer-Dxlv8LYm.mjs +5 -0
  235. package/dist/{renderer-D-RhYvVl.mjs → renderer-Gj8SrE2W.mjs} +2 -2
  236. package/dist/{renderer-D-RhYvVl.mjs.map → renderer-Gj8SrE2W.mjs.map} +1 -1
  237. package/dist/{renderer-D_j1WKMD.mjs → renderer-KfnXDJS0.mjs} +3 -3
  238. package/dist/{renderer-D_j1WKMD.mjs.map → renderer-KfnXDJS0.mjs.map} +1 -1
  239. package/dist/{renderer-Bpm145BW.mjs → renderer-MXVlg4p5.mjs} +3 -3
  240. package/dist/{renderer-Bpm145BW.mjs.map → renderer-MXVlg4p5.mjs.map} +1 -1
  241. package/dist/{renderer-Nnmi8Gt6.mjs → renderer-N2b6QZ1E.mjs} +3 -3
  242. package/dist/{renderer-Nnmi8Gt6.mjs.map → renderer-N2b6QZ1E.mjs.map} +1 -1
  243. package/dist/renderer-Pb43OO2t.mjs +5 -0
  244. package/dist/{renderer-Ca1KjNCO.mjs → renderer-Q7gDzm8c.mjs} +2 -2
  245. package/dist/{renderer-Ca1KjNCO.mjs.map → renderer-Q7gDzm8c.mjs.map} +1 -1
  246. package/dist/{renderer-D2wNFNRf.mjs → renderer-RCiANtRV.mjs} +2 -2
  247. package/dist/{renderer-D2wNFNRf.mjs.map → renderer-RCiANtRV.mjs.map} +1 -1
  248. package/dist/{renderer-Cqb7PGrI.mjs → renderer-Sig9nZcI.mjs} +2 -2
  249. package/dist/renderer-VQbm-cGr.mjs +5 -0
  250. package/dist/{renderer-W1bVNVR6.mjs → renderer-fabBgwQX.mjs} +3 -3
  251. package/dist/{renderer-W1bVNVR6.mjs.map → renderer-fabBgwQX.mjs.map} +1 -1
  252. package/dist/{renderer-zRq0j6Xy.mjs → renderer-g-0PCNoo.mjs} +3 -3
  253. package/dist/{renderer-zRq0j6Xy.mjs.map → renderer-g-0PCNoo.mjs.map} +1 -1
  254. package/dist/{renderer-2PjR3w-q.mjs → renderer-gmHKIbKI.mjs} +3 -3
  255. package/dist/{renderer-2PjR3w-q.mjs.map → renderer-gmHKIbKI.mjs.map} +1 -1
  256. package/dist/{renderer-03mYJLgX.mjs → renderer-kVZwiRoK.mjs} +3 -3
  257. package/dist/{renderer-03mYJLgX.mjs.map → renderer-kVZwiRoK.mjs.map} +1 -1
  258. package/dist/renderer-oPMypDM1.mjs +5 -0
  259. package/dist/{renderer-DcAKDAnS.mjs → renderer-p7tgxP-A.mjs} +3 -3
  260. package/dist/{renderer-DcAKDAnS.mjs.map → renderer-p7tgxP-A.mjs.map} +1 -1
  261. package/dist/{renderer-jUKdkmG5.mjs → renderer-tvYj306A.mjs} +81 -78
  262. package/dist/renderer-tvYj306A.mjs.map +1 -0
  263. package/dist/renderer-xvWGpVyp.mjs +5 -0
  264. package/dist/renderer-zafZbD6Q.mjs +5 -0
  265. package/dist/{renderers-CP8CFWDs-CshljORp.mjs → renderers-CP8CFWDs-DLjtjrwx.mjs} +2 -2
  266. package/dist/{renderers-CP8CFWDs-CshljORp.mjs.map → renderers-CP8CFWDs-DLjtjrwx.mjs.map} +1 -1
  267. package/dist/sam/index.d.mts +2 -2
  268. package/dist/sam/index.mjs +1 -1
  269. package/dist/signals/index.d.mts +4 -4
  270. package/dist/signals/index.mjs +4 -4
  271. package/dist/{src-BU6vm9sP-DdTHmCr4.mjs → src-B23p_eh7-Cj6-lvV6.mjs} +293 -6
  272. package/dist/src-B23p_eh7-Cj6-lvV6.mjs.map +1 -0
  273. package/dist/{src-Dy4gnc6w.mjs → src-CoHAjviq.mjs} +1349 -177
  274. package/dist/src-CoHAjviq.mjs.map +1 -0
  275. package/dist/storage/index.mjs +1 -1
  276. package/package.json +63 -60
  277. package/dist/dist--Uu5bQ_6.mjs.map +0 -1
  278. package/dist/dist-CiTgmfUw.mjs.map +0 -1
  279. package/dist/fonts-OW3yAfO5.mjs.map +0 -1
  280. package/dist/index-9xte4JgL.d.mts.map +0 -1
  281. package/dist/index-Bv7gxGK1.d.mts.map +0 -1
  282. package/dist/index-C5sgRLlG.d.mts.map +0 -1
  283. package/dist/index-C7-p9zwU.d.mts.map +0 -1
  284. package/dist/index-CRaydvLi.d.mts.map +0 -1
  285. package/dist/index-D1FqV1eu.d.mts.map +0 -1
  286. package/dist/preview-D7BGmE1E.mjs +0 -2446
  287. package/dist/preview-D7BGmE1E.mjs.map +0 -1
  288. package/dist/preview-engine/chunk-5DZTPUMH.mjs +0 -2568
  289. package/dist/preview-engine/chunk-NCQHOGZK.mjs +0 -3
  290. package/dist/preview-engine/chunk-PH3UUX6A.mjs +0 -138
  291. package/dist/preview-engine/chunk-UPZURPJY.mjs +0 -2227
  292. package/dist/preview-engine/renderers-DLJOA3BM.mjs +0 -228
  293. package/dist/program-tFKCWU2j.mjs.map +0 -1
  294. package/dist/renderer-6_bzbbXt.mjs +0 -5
  295. package/dist/renderer-8M-9G6F_.mjs +0 -5
  296. package/dist/renderer-B5OzKvF8.mjs +0 -5
  297. package/dist/renderer-BBCZ2qbE.mjs +0 -5
  298. package/dist/renderer-BChbxCux.mjs +0 -5
  299. package/dist/renderer-BGeMPr8C.mjs +0 -5
  300. package/dist/renderer-BPQ8Pkjb.mjs +0 -5
  301. package/dist/renderer-BTRpA3HD.mjs +0 -5
  302. package/dist/renderer-BVIXKfbC.mjs.map +0 -1
  303. package/dist/renderer-BVsECSn-.mjs +0 -5
  304. package/dist/renderer-Bgos68gc.mjs +0 -6
  305. package/dist/renderer-BjHOvoqO.mjs +0 -5
  306. package/dist/renderer-BjXMPPlV.mjs +0 -5
  307. package/dist/renderer-Byobxqkv.mjs +0 -5
  308. package/dist/renderer-CKrsg3EG.mjs +0 -5
  309. package/dist/renderer-Cj875NuH.mjs +0 -5
  310. package/dist/renderer-CnmzJoMv.mjs +0 -5
  311. package/dist/renderer-CtklDaMg.mjs +0 -5
  312. package/dist/renderer-D1tK3in_.mjs +0 -5
  313. package/dist/renderer-D2yc9P61.mjs +0 -5
  314. package/dist/renderer-D4v-JvSr.mjs +0 -5
  315. package/dist/renderer-D5yp74NL.mjs +0 -3
  316. package/dist/renderer-D7WRWDwB.mjs +0 -5
  317. package/dist/renderer-DGvA0tdB.mjs +0 -5
  318. package/dist/renderer-DO7v5Sdm.mjs +0 -5
  319. package/dist/renderer-DRVvt7-V.mjs +0 -5
  320. package/dist/renderer-DYMCd3jL.mjs +0 -5
  321. package/dist/renderer-DmHKw-MM.mjs +0 -5
  322. package/dist/renderer-DoDsuZ6G.mjs +0 -5
  323. package/dist/renderer-EpgclS70.mjs +0 -5
  324. package/dist/renderer-GroKiYyK.mjs +0 -5
  325. package/dist/renderer-MQ5K_xIS.mjs +0 -5
  326. package/dist/renderer-U43SflML.mjs +0 -5
  327. package/dist/renderer-UqOmBgCv.mjs +0 -5
  328. package/dist/renderer-XLULgJM0.mjs +0 -5
  329. package/dist/renderer-jUKdkmG5.mjs.map +0 -1
  330. package/dist/renderer-lNjxY1GG.mjs +0 -5
  331. package/dist/renderer-ukufL7pl.mjs +0 -5
  332. package/dist/renderer-wb0NCKdF.mjs +0 -5
  333. package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +0 -1
  334. package/dist/src-Dy4gnc6w.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- import { a as RegisteredFont, i as RegisterFontOptions, n as MeasureTextOptions, o as TextMetrics, r as MeasuredGlyph, t as FontManager } from "../index-C5sgRLlG.mjs";
1
+ import { a as RegisteredFont, i as RegisterFontOptions, n as MeasureTextOptions, o as TextMetrics, r as MeasuredGlyph, t as FontManager } from "../index-TCtdSXd7.mjs";
2
2
  export { FontManager, MeasureTextOptions, MeasuredGlyph, RegisterFontOptions, RegisteredFont, TextMetrics };
@@ -1,5 +1,5 @@
1
1
  import "../chunk-DOL2i2sR.mjs";
2
- import "../dist--Uu5bQ_6.mjs";
3
- import { t as FontManager } from "../fonts-OW3yAfO5.mjs";
2
+ import "../dist-XqlFM2a8.mjs";
3
+ import { t as FontManager } from "../fonts-BWYcXjyK.mjs";
4
4
 
5
5
  export { FontManager };
@@ -1,4 +1,4 @@
1
- import { at as setRegisteredFontSource, m as SlugGeometry, p as SlugFontCache, tt as registerHeadlessFont } from "./dist--Uu5bQ_6.mjs";
1
+ import { _t as setRegisteredFontSource, h as SlugGeometry, lt as registerHeadlessFont, m as SlugFontCache } from "./dist-XqlFM2a8.mjs";
2
2
  import path from "node:path";
3
3
  import * as fontkit from "fontkit";
4
4
  import fs from "node:fs/promises";
@@ -109,7 +109,7 @@ var FontManager = class FontManager {
109
109
  */
110
110
  static measure(text, options) {
111
111
  const fontSize = options.fontSize ?? 48;
112
- const font = SlugFontCache.getFont(options.fontFamily, options.fontWeight, null, void 0, fontSize);
112
+ const font = SlugFontCache.getFont(options.fontFamily, options.fontWeight, null, void 0, fontSize, options.fontVariations);
113
113
  if (!font) throw new Error(`FontManager.measure: font "${options.fontFamily}" is not registered. Call \`await FontManager.register(...)\` first.`);
114
114
  const lineHeight = options.lineHeight !== void 0 && options.lineHeight < 10 ? options.lineHeight * fontSize : options.lineHeight ?? fontSize * 1.2;
115
115
  const letterSpacing = options.letterSpacing ?? 0;
@@ -261,4 +261,4 @@ var FontManager = class FontManager {
261
261
 
262
262
  //#endregion
263
263
  export { FontManager as t };
264
- //# sourceMappingURL=fonts-OW3yAfO5.mjs.map
264
+ //# sourceMappingURL=fonts-BWYcXjyK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fonts-BWYcXjyK.mjs","names":[],"sources":["../src/fonts/manager.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n\tregisterHeadlessFont,\n\tSlugFontCache,\n\tSlugGeometry,\n\tsetRegisteredFontSource,\n} from \"@framefields/webgpu-renderers\";\nimport * as fontkit from \"fontkit\";\n\nexport interface RegisterFontOptions {\n\tfamily?: string;\n\tsource: string | Uint8Array;\n\tweight?: number | string;\n\tstyle?: \"normal\" | \"italic\" | \"oblique\";\n}\n\nexport interface RegisteredFont {\n\tfamily: string;\n\tsource: string | Uint8Array;\n\tfilePath?: string;\n\tformat: \"truetype\" | \"opentype\";\n\tpostscriptName?: string;\n\tunitsPerEm?: number;\n\tweight?: number | string;\n\tstyle?: string;\n}\n\ninterface ResolvedSource {\n\tbuffer: Uint8Array;\n\tfilePath?: string;\n}\n\nconst SFNT_TRUETYPE_1 = 0x00010000;\nconst SFNT_TRUETYPE_TRUE = 0x74727565; // 'true'\nconst SFNT_TRUETYPE_TYP1 = 0x74797031; // 'typ1'\nconst SFNT_OPENTYPE_CFF = 0x4f54544f; // 'OTTO'\nconst SFNT_COLLECTION = 0x74746366; // 'ttcf'\n\nfunction validateFontBinaryHeader(\n\tbytes: Uint8Array,\n\tsourceLabel: string,\n): \"truetype\" | \"opentype\" {\n\tif (bytes.length < 12) {\n\t\tthrow new Error(\n\t\t\t`Invalid font binary for \"${sourceLabel}\": File size (${bytes.length} bytes) is too small to be a valid TrueType or OpenType font.`,\n\t\t);\n\t}\n\n\tconst tag =\n\t\t((bytes[0] ?? 0) << 24) |\n\t\t((bytes[1] ?? 0) << 16) |\n\t\t((bytes[2] ?? 0) << 8) |\n\t\t(bytes[3] ?? 0);\n\n\tif (\n\t\ttag === SFNT_TRUETYPE_1 ||\n\t\ttag === SFNT_TRUETYPE_TRUE ||\n\t\ttag === SFNT_TRUETYPE_TYP1 ||\n\t\ttag === SFNT_COLLECTION\n\t) {\n\t\treturn \"truetype\";\n\t}\n\n\tif (tag === SFNT_OPENTYPE_CFF) {\n\t\treturn \"opentype\";\n\t}\n\n\tconst hexTag = (tag >>> 0).toString(16).padStart(8, \"0\");\n\tthrow new Error(\n\t\t`Invalid font format for \"${sourceLabel}\": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${hexTag}.`,\n\t);\n}\n\nasync function resolveSourceBuffer(\n\tsource: string | Uint8Array,\n): Promise<ResolvedSource> {\n\tif (source instanceof Uint8Array) {\n\t\treturn { buffer: source };\n\t}\n\n\tif (typeof source !== \"string\") {\n\t\tthrow new TypeError(\n\t\t\t`Font source must be a file path string or Uint8Array, received: ${typeof source}`,\n\t\t);\n\t}\n\n\tlet cleanPath = source;\n\tif (cleanPath.startsWith(\"http://\") || cleanPath.startsWith(\"https://\")) {\n\t\tconst res = await fetch(cleanPath);\n\t\tif (!res.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to download font from \"${cleanPath}\": HTTP ${res.status} ${res.statusText}`,\n\t\t\t);\n\t\t}\n\t\tconst arrayBuffer = await res.arrayBuffer();\n\t\treturn {\n\t\t\tbuffer: new Uint8Array(arrayBuffer),\n\t\t\tfilePath: cleanPath,\n\t\t};\n\t}\n\n\tif (cleanPath.startsWith(\"file://\")) {\n\t\ttry {\n\t\t\t// A URL path is percent-encoded (\"My%20Film\"); files aren't. On\n\t\t\t// Windows \"/C:/…\" loses its leading slash.\n\t\t\tcleanPath = decodeURIComponent(new URL(cleanPath).pathname).replace(\n\t\t\t\t/^\\/([A-Za-z]:)/,\n\t\t\t\t\"$1\",\n\t\t\t);\n\t\t} catch {\n\t\t\tcleanPath = cleanPath.replace(/^file:\\/\\//, \"\");\n\t\t}\n\t}\n\n\tconst candidates: string[] = [\n\t\tcleanPath,\n\t\tpath.resolve(process.cwd(), cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", cleanPath),\n\t\tpath.resolve(process.cwd(), \"assets/fonts\", path.basename(cleanPath)),\n\t];\n\n\t// Upward traversal to locate fonts in parent monorepo roots\n\tlet currentDir = process.cwd();\n\tfor (let i = 0; i < 5; i++) {\n\t\tcandidates.push(path.resolve(currentDir, cleanPath));\n\t\tcandidates.push(\n\t\t\tpath.resolve(currentDir, \"assets/fonts\", path.basename(cleanPath)),\n\t\t);\n\t\tconst parent = path.dirname(currentDir);\n\t\tif (parent === currentDir) break;\n\t\tcurrentDir = parent;\n\t}\n\n\tlet resolvedPath: string | null = null;\n\tlet fileBuffer: Buffer | null = null;\n\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst stat = await fs.stat(candidate);\n\t\t\tif (stat.isFile()) {\n\t\t\t\tresolvedPath = candidate;\n\t\t\t\tfileBuffer = await fs.readFile(candidate);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue searching next candidate\n\t\t}\n\t}\n\n\tif (!resolvedPath || !fileBuffer) {\n\t\tthrow new Error(\n\t\t\t`Font file not found: \"${source}\". Checked candidate locations:\\n - ${candidates.join(\"\\n - \")}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tbuffer: new Uint8Array(\n\t\t\tfileBuffer.buffer,\n\t\t\tfileBuffer.byteOffset,\n\t\t\tfileBuffer.byteLength,\n\t\t),\n\t\tfilePath: resolvedPath,\n\t};\n}\n\n/**\n * Central singleton manager for font registration, TTF validation, and compositor typography binding.\n */\nexport interface MeasureTextOptions {\n\tfontFamily: string;\n\tfontSize?: number;\n\tfontWeight?: string | number;\n\t/** Variable font axes, as on `Layer.text` (`{ wdth: 68 }`). */\n\tfontVariations?: Record<string, number>;\n\t/** Extra px between characters, as on `Layer.text`. */\n\tletterSpacing?: number;\n\t/** Multiplier of fontSize when < 10, else px. Default 1.2. */\n\tlineHeight?: number;\n\t/** Wrap width in px; omit for one line per `\\n`. */\n\twidth?: number;\n\talign?: \"left\" | \"center\" | \"right\";\n\t/** Paragraph base direction, as on `Layer.text`. Default \"auto\". */\n\tdirection?: \"ltr\" | \"rtl\" | \"auto\";\n}\n\nexport interface MeasuredGlyph {\n\tchar: string;\n\t/** Index into the string (code units), matching `text.slice`. */\n\tindex: number;\n\t/** Left edge of the glyph, relative to the text box. */\n\tx: number;\n\t/** Baseline-relative top of the line box. */\n\ty: number;\n\t/** Advance width in px. */\n\twidth: number;\n\tline: number;\n\t/** Part of a right-to-left run: reading continues to the left. */\n\trtl?: boolean;\n}\n\nexport interface TextMetrics {\n\twidth: number;\n\theight: number;\n\tlines: number;\n\t/** Line box height in px. */\n\tlineHeight: number;\n\tglyphs: MeasuredGlyph[];\n\t/**\n\t * X of a caret placed after `count` characters (0 = before the first),\n\t * relative to the text box. In right-to-left text the caret sits on the\n\t * left of the last character. Pair with a `.keys(\"text\", …)` reveal to make\n\t * a cursor follow typing exactly.\n\t */\n\tcaretX(count: number): number;\n\t/** Width of the first `count` characters (same as `caretX` on one line). */\n\twidthOf(count: number): number;\n}\n\nexport class FontManager {\n\tprivate static instance: FontManager | null = null;\n\tprivate readonly fonts = new Map<string, RegisteredFont>();\n\n\tprivate constructor() {}\n\n\t/**\n\t * Returns the singleton FontManager instance.\n\t */\n\tpublic static getInstance(): FontManager {\n\t\tif (!FontManager.instance) {\n\t\t\tFontManager.instance = new FontManager();\n\t\t}\n\t\treturn FontManager.instance;\n\t}\n\n\t/**\n\t * Registers a TrueType/OpenType font into the Framefields engine with validation.\n\t */\n\tpublic static async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\treturn FontManager.getInstance().register(optionsOrFamilyOrSource, source);\n\t}\n\n\t/**\n\t * Sets the color emoji font text draws emoji with, for the preview and the\n\t * export alike: a CBDT/CBLC bitmap font such as Noto Color Emoji, as a file\n\t * path, URL or bytes. framefields ships none; without one, exports draw\n\t * nothing for emoji.\n\t */\n\tpublic static async registerEmojiFont(\n\t\tsource: string | Uint8Array,\n\t): Promise<void> {\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(source);\n\t\tconst label =\n\t\t\tfilePath ?? (typeof source === \"string\" ? source : \"Uint8Array\");\n\t\tvalidateFontBinaryHeader(buffer, label);\n\t\tSlugFontCache.setEmojiFont(buffer, filePath);\n\t}\n\n\t/** Whether a color emoji font is registered (or set to load from a path / URL). */\n\tpublic static hasEmojiFont(): boolean {\n\t\treturn SlugFontCache.hasEmojiFont();\n\t}\n\n\t/**\n\t * Measures text with the real font, exactly as `Layer.text` lays it out:\n\t * box size, line count, per-glyph positions and caret offsets. Use it to\n\t * size containers, place cursors, underline a word or center by ink\n\t * instead of guessing advances. The family must be registered first.\n\t *\n\t * ```ts\n\t * const m = FontManager.measure(\"Hello\", { fontFamily: \"Inter\", fontSize: 60 });\n\t * m.width; m.caretX(3); m.glyphs[1].x\n\t * ```\n\t */\n\tpublic static measure(\n\t\ttext: string,\n\t\toptions: MeasureTextOptions,\n\t): TextMetrics {\n\t\tconst fontSize = options.fontSize ?? 48;\n\t\tconst font = SlugFontCache.getFont(\n\t\t\toptions.fontFamily,\n\t\t\toptions.fontWeight,\n\t\t\tnull,\n\t\t\tundefined,\n\t\t\tfontSize,\n\t\t\toptions.fontVariations,\n\t\t);\n\t\tif (!font) {\n\t\t\tthrow new Error(\n\t\t\t\t`FontManager.measure: font \"${options.fontFamily}\" is not registered. ` +\n\t\t\t\t\t\"Call `await FontManager.register(...)` first.\",\n\t\t\t);\n\t\t}\n\t\tconst lineHeight =\n\t\t\toptions.lineHeight !== undefined && options.lineHeight < 10\n\t\t\t\t? options.lineHeight * fontSize\n\t\t\t\t: (options.lineHeight ?? fontSize * 1.2);\n\t\tconst letterSpacing = options.letterSpacing ?? 0;\n\t\tconst { width, height, layout } = SlugGeometry.measure(\n\t\t\ttext,\n\t\t\tfont,\n\t\t\tfontSize,\n\t\t\tletterSpacing,\n\t\t\tlineHeight,\n\t\t\toptions.width,\n\t\t\tundefined,\n\t\t\toptions.direction,\n\t\t);\n\t\tconst scale = fontSize / font.unitsPerEm;\n\t\t// One entry per cluster (a letter with its marks, or a ligature), in\n\t\t// reading order; textIndex maps it back to the string.\n\t\tconst glyphs: MeasuredGlyph[] = [];\n\t\tconst seen = new Set<number>();\n\t\tlet cursor = 0;\n\t\tfor (const g of layout.glyphs) {\n\t\t\tlet index = g.textIndex;\n\t\t\tif (index === undefined) {\n\t\t\t\tconst at = text.indexOf(g.char, cursor);\n\t\t\t\tindex = at >= 0 ? at : cursor;\n\t\t\t}\n\t\t\tif (seen.has(index)) continue;\n\t\t\tseen.add(index);\n\t\t\tcursor = index + g.char.length;\n\t\t\tconst advance =\n\t\t\t\tg.clusterAdvance ?? g.cp.advanceWidth * (g.fontScale ?? scale);\n\t\t\tglyphs.push({\n\t\t\t\tchar: g.char,\n\t\t\t\tindex,\n\t\t\t\tx: g.clusterX ?? g.x,\n\t\t\t\ty: g.y,\n\t\t\t\twidth: advance + letterSpacing,\n\t\t\t\tline: g.lineIndex,\n\t\t\t\t...(g.rtl && { rtl: true }),\n\t\t\t});\n\t\t}\n\t\tconst caretX = (count: number): number => {\n\t\t\tif (count <= 0 || glyphs.length === 0) {\n\t\t\t\tconst first = glyphs[0];\n\t\t\t\tif (!first) return 0;\n\t\t\t\treturn first.rtl ? first.x + first.width - letterSpacing : first.x;\n\t\t\t}\n\t\t\tconst before = glyphs.filter((g) => g.index < count);\n\t\t\tconst last = before[before.length - 1];\n\t\t\tif (!last) return 0;\n\t\t\treturn last.rtl ? last.x : last.x + last.width - letterSpacing;\n\t\t};\n\t\treturn {\n\t\t\twidth,\n\t\t\theight,\n\t\t\tlines: layout.linesCount,\n\t\t\tlineHeight,\n\t\t\tglyphs,\n\t\t\tcaretX,\n\t\t\twidthOf: (count: number) => caretX(count) - (glyphs[0]?.x ?? 0),\n\t\t};\n\t}\n\n\t/**\n\t * Retrieves registered font metadata by family name.\n\t */\n\tpublic static get(family: string): RegisteredFont | undefined {\n\t\treturn FontManager.getInstance().get(family);\n\t}\n\n\t/**\n\t * Checks if a font family has been registered.\n\t */\n\tpublic static has(family: string): boolean {\n\t\treturn FontManager.getInstance().has(family);\n\t}\n\n\t/**\n\t * Returns all currently registered fonts.\n\t */\n\tpublic static getAll(): RegisteredFont[] {\n\t\treturn FontManager.getInstance().getAll();\n\t}\n\n\t/**\n\t * Returns relative or absolute file paths of all registered fonts for composition spec serialization.\n\t */\n\tpublic static getRegisteredFontPaths(): string[] {\n\t\treturn FontManager.getInstance().getRegisteredFontPaths();\n\t}\n\n\t/**\n\t * Clears all registered fonts from the manager.\n\t */\n\tpublic static clear(): void {\n\t\tFontManager.getInstance().clear();\n\t}\n\n\t/**\n\t * Instance registration method with format validation and Slug WebGPU cache population.\n\t */\n\tpublic async register(\n\t\toptionsOrFamilyOrSource: RegisterFontOptions | string,\n\t\tsource?: string | Uint8Array,\n\t): Promise<RegisteredFont> {\n\t\tlet family: string | undefined;\n\t\tlet rawSource: string | Uint8Array;\n\t\tlet weight: number | string | undefined;\n\t\tlet style: \"normal\" | \"italic\" | \"oblique\" | undefined;\n\n\t\tif (\n\t\t\ttypeof optionsOrFamilyOrSource === \"object\" &&\n\t\t\toptionsOrFamilyOrSource !== null\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource.family;\n\t\t\trawSource = optionsOrFamilyOrSource.source;\n\t\t\tweight = optionsOrFamilyOrSource.weight;\n\t\t\tstyle = optionsOrFamilyOrSource.style;\n\t\t} else if (\n\t\t\ttypeof optionsOrFamilyOrSource === \"string\" &&\n\t\t\tsource !== undefined\n\t\t) {\n\t\t\tfamily = optionsOrFamilyOrSource;\n\t\t\trawSource = source;\n\t\t} else if (typeof optionsOrFamilyOrSource === \"string\") {\n\t\t\tfamily = undefined;\n\t\t\trawSource = optionsOrFamilyOrSource;\n\t\t} else {\n\t\t\tthrow new TypeError(\"Invalid arguments passed to FontManager.register\");\n\t\t}\n\n\t\tconst { buffer, filePath } = await resolveSourceBuffer(rawSource);\n\t\tconst sourceLabel =\n\t\t\tfilePath ?? (typeof rawSource === \"string\" ? rawSource : \"Uint8Array\");\n\t\tconst format = validateFontBinaryHeader(buffer, sourceLabel);\n\n\t\tlet parsedFontkit: fontkit.Font;\n\t\ttry {\n\t\t\tconst parsed = fontkit.create(buffer as unknown as Buffer);\n\t\t\tif (\n\t\t\t\tparsed &&\n\t\t\t\t\"fonts\" in parsed &&\n\t\t\t\tArray.isArray(parsed.fonts) &&\n\t\t\t\tparsed.fonts.length > 0\n\t\t\t) {\n\t\t\t\tparsedFontkit = parsed.fonts[0] as fontkit.Font;\n\t\t\t} else {\n\t\t\t\tparsedFontkit = parsed as fontkit.Font;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst msg = err instanceof Error ? err.message : String(err);\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse TrueType/OpenType font binary for \"${sourceLabel}\": ${msg}`,\n\t\t\t);\n\t\t}\n\n\t\tconst detectedFamily =\n\t\t\tparsedFontkit.familyName ||\n\t\t\tparsedFontkit.postscriptName ||\n\t\t\tpath.parse(sourceLabel).name;\n\t\tconst resolvedFamily = family?.trim() || detectedFamily;\n\n\t\tconst registered: RegisteredFont = {\n\t\t\tfamily: resolvedFamily,\n\t\t\tsource: rawSource,\n\t\t\tfilePath,\n\t\t\tformat,\n\t\t\tpostscriptName: parsedFontkit.postscriptName,\n\t\t\tunitsPerEm: parsedFontkit.unitsPerEm,\n\t\t\tweight,\n\t\t\tstyle,\n\t\t};\n\n\t\tthis.fonts.set(resolvedFamily, registered);\n\n\t\tsetRegisteredFontSource(resolvedFamily, filePath ?? rawSource);\n\t\t// Populate headless font registries\n\t\tif (filePath) {\n\t\t\tawait registerHeadlessFont(resolvedFamily, filePath);\n\t\t}\n\t\tSlugFontCache.setParsed(resolvedFamily, parsedFontkit);\n\n\t\treturn registered;\n\t}\n\n\tpublic get(family: string): RegisteredFont | undefined {\n\t\treturn this.fonts.get(family);\n\t}\n\n\tpublic has(family: string): boolean {\n\t\treturn this.fonts.has(family);\n\t}\n\n\tpublic getAll(): RegisteredFont[] {\n\t\treturn Array.from(this.fonts.values());\n\t}\n\n\tpublic getRegisteredFontPaths(): string[] {\n\t\tconst paths: string[] = [];\n\t\tfor (const font of this.fonts.values()) {\n\t\t\tif (font.filePath) {\n\t\t\t\tpaths.push(font.filePath);\n\t\t\t} else if (typeof font.source === \"string\") {\n\t\t\t\tpaths.push(font.source);\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tpublic clear(): void {\n\t\tthis.fonts.clear();\n\t}\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Hn as signalRegistry } from "./dist--Uu5bQ_6.mjs";
1
+ import { Cr as signalRegistry } from "./dist-XqlFM2a8.mjs";
2
2
 
3
3
  //#region ../node-sdk/dist/gpu.mjs
4
4
  const TRANSPARENT = {
@@ -220,4 +220,4 @@ function drawFullscreenPass(encoder, target, pipeline, bindGroups) {
220
220
 
221
221
  //#endregion
222
222
  export { createFullscreenPipeline as a, drawTextureToTarget as c, pixelScale as d, signalTextureView as f, beginTargetPass as i, fragmentBindGroupLayout as l, texturesLayout as m, PREMULTIPLIED_BLEND as n, drawChildToTexture as o, signalTiming as p, STRAIGHT_ALPHA_BLEND as r, drawFullscreenPass as s, FULLSCREEN_QUAD_WGSL as t, perDevice as u };
223
- //# sourceMappingURL=gpu-R4T2Tndu.mjs.map
223
+ //# sourceMappingURL=gpu-CH1PdM4T.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"gpu-R4T2Tndu.mjs","names":[],"sources":["../../node-sdk/dist/gpu.mjs"],"sourcesContent":["import { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region renderer/gpu.ts\nconst TRANSPARENT = {\n\tr: 0,\n\tg: 0,\n\tb: 0,\n\ta: 0\n};\n/**\n* Full-screen quad vertex stage: a 4-vertex triangle strip (draw(4)) that\n* hands `in.uv` (0,0 top-left → 1,1 bottom-right) to an `fs` reading `VSOut`.\n*/\nconst FULLSCREEN_QUAD_WGSL = `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n`;\n/** Premultiplied-alpha \"over\" blending. */\nconst PREMULTIPLIED_BLEND = {\n\tcolor: {\n\t\tsrcFactor: \"one\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t},\n\talpha: {\n\t\tsrcFactor: \"one\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t}\n};\n/** Straight-alpha color over a premultiplied-alpha accumulation. */\nconst STRAIGHT_ALPHA_BLEND = {\n\tcolor: {\n\t\tsrcFactor: \"src-alpha\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t},\n\talpha: {\n\t\tsrcFactor: \"one\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t}\n};\n/** A bind group layout whose entries are bound at 0, 1, 2… in order. */\nfunction fragmentBindGroupLayout(device, bindings, label) {\n\treturn device.createBindGroupLayout({\n\t\t...label && { label },\n\t\tentries: bindings.map((binding, index) => {\n\t\t\tif (binding === \"uniform\") return {\n\t\t\t\tbinding: index,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t};\n\t\t\tif (binding === \"texture\") return {\n\t\t\t\tbinding: index,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t};\n\t\t\tif (binding === \"sampler\") return {\n\t\t\t\tbinding: index,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t...binding,\n\t\t\t\tbinding: index\n\t\t\t};\n\t\t})\n\t});\n}\n/** `count` float textures followed by one filtering sampler. */\nfunction texturesLayout(device, count) {\n\treturn fragmentBindGroupLayout(device, [...Array(count).fill(\"texture\"), \"sampler\"]);\n}\n/** Memoizes `create` per GPUDevice (resources can't cross devices). */\nfunction perDevice(create) {\n\tconst cache = /* @__PURE__ */ new WeakMap();\n\treturn (device) => {\n\t\tlet value = cache.get(device);\n\t\tif (value === void 0) {\n\t\t\tvalue = create(device);\n\t\t\tcache.set(device, value);\n\t\t}\n\t\treturn value;\n\t};\n}\n/** A triangle-strip pipeline drawing one full-screen quad (`draw(4)`). */\nfunction createFullscreenPipeline(device, options) {\n\tconst { module, format, blend } = options;\n\treturn device.createRenderPipeline({\n\t\t...options.label && { label: options.label },\n\t\tlayout: Array.isArray(options.layouts) ? device.createPipelineLayout({ bindGroupLayouts: options.layouts }) : options.layouts,\n\t\tvertex: {\n\t\t\tmodule,\n\t\t\tentryPoint: options.vertexEntryPoint ?? \"vs\"\n\t\t},\n\t\tfragment: {\n\t\t\tmodule,\n\t\t\tentryPoint: options.fragmentEntryPoint ?? \"fs\",\n\t\t\ttargets: [blend ? {\n\t\t\t\tformat,\n\t\t\t\tblend\n\t\t\t} : { format }]\n\t\t},\n\t\tprimitive: { topology: \"triangle-strip\" }\n\t});\n}\n/**\n* Renders `child` into a cleared temporary texture with an identity\n* transform and a full-size scissor, and returns that texture.\n*/\nasync function drawChildToTexture(args, child, options = {}) {\n\tconst { ctx, encoder, props } = args;\n\tconst width = options.width ?? args.targetWidth;\n\tconst height = options.height ?? args.targetHeight;\n\tconst texture = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\targs.targetTexture,\n\t\t...options.exclude ?? []\n\t]);\n\tconst view = texture.createView();\n\tctx.renderer.beginFrame(encoder, view, TRANSPARENT, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait args.drawChild(child, options.props ?? {\n\t\t...props,\n\t\tvirtualMedia: child\n\t}, view, texture, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\treturn {\n\t\ttexture,\n\t\tview\n\t};\n}\n/**\n* Opens a \"load\" pass on the node's target and makes it the node's current\n* pass (the caller hands it back to the compositor).\n*/\nfunction beginTargetPass(args, width = args.targetWidth, height = args.targetHeight) {\n\tconst pass = args.ctx.renderer.beginFrame(args.encoder, args.targetView, TRANSPARENT, width, height, \"load\");\n\targs.pass = pass;\n\treturn pass;\n}\n/**\n* Target pixels per layout pixel (`props.pixelScale`, 1 when unset). A\n* renderer multiplies its pixel-unit parameters by it and declares\n* `maxPixelScale`.\n*/\nfunction pixelScale(args) {\n\treturn args.props.pixelScale ?? 1;\n}\n/** Draws `texture` over the whole target at `opacity` (the node's output). */\nfunction drawTextureToTarget(args, texture, opacity = 1) {\n\tconst { targetWidth: width, targetHeight: height } = args;\n\targs.ctx.renderer.drawTexture(beginTargetPass(args), texture, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t}, { opacity });\n}\n/** Clock a signal texture is evaluated at, in seconds. */\nfunction signalTiming(props, frame, fps, fallbackDurationSeconds = 0) {\n\tconst metadataDurationMs = props.virtualMedia?.metadata?.durationMs;\n\treturn {\n\t\telapsedSeconds: props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps,\n\t\tdurationSeconds: metadataDurationMs ? metadataDurationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : fallbackDurationSeconds\n\t};\n}\n/**\n* The texture a bound parameter samples: its own GPU binding, the signal's\n* texture (cached under `sd.nodeId`, else `fallbackId`), or a 1×1 dummy.\n*/\nfunction signalTextureView(sc, param, fallbackId) {\n\tconst { args } = sc;\n\tif (param.gpuTextureView) return param.gpuTextureView;\n\tif (param.hasStaticSig && param.sd) return signalRegistry.getOrCreate2DTextureView(args.ctx.device, args.encoder, param.sd.nodeId ?? fallbackId, sc.elapsedSeconds, sc.durationSeconds, param.sd, sc.width, sc.height, args.props.renderId, sc.frame, sc.fps);\n\treturn signalRegistry.getDummy1x1TextureView(args.ctx.device);\n}\n/** Clears `target` to transparent and draws one full-screen quad into it. */\nfunction drawFullscreenPass(encoder, target, pipeline, bindGroups) {\n\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: target,\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: TRANSPARENT\n\t}] });\n\tpass.setPipeline(pipeline);\n\tbindGroups.forEach((group, index) => {\n\t\tpass.setBindGroup(index, group);\n\t});\n\tpass.draw(4);\n\tpass.end();\n}\n\n//#endregion\nexport { FULLSCREEN_QUAD_WGSL, PREMULTIPLIED_BLEND, STRAIGHT_ALPHA_BLEND, beginTargetPass, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, pixelScale, signalTextureView, signalTiming, texturesLayout };\n//# sourceMappingURL=gpu.mjs.map"],"mappings":"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"}
1
+ {"version":3,"file":"gpu-CH1PdM4T.mjs","names":[],"sources":["../../node-sdk/dist/gpu.mjs"],"sourcesContent":["import { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region renderer/gpu.ts\nconst TRANSPARENT = {\n\tr: 0,\n\tg: 0,\n\tb: 0,\n\ta: 0\n};\n/**\n* Full-screen quad vertex stage: a 4-vertex triangle strip (draw(4)) that\n* hands `in.uv` (0,0 top-left → 1,1 bottom-right) to an `fs` reading `VSOut`.\n*/\nconst FULLSCREEN_QUAD_WGSL = `\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n`;\n/** Premultiplied-alpha \"over\" blending. */\nconst PREMULTIPLIED_BLEND = {\n\tcolor: {\n\t\tsrcFactor: \"one\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t},\n\talpha: {\n\t\tsrcFactor: \"one\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t}\n};\n/** Straight-alpha color over a premultiplied-alpha accumulation. */\nconst STRAIGHT_ALPHA_BLEND = {\n\tcolor: {\n\t\tsrcFactor: \"src-alpha\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t},\n\talpha: {\n\t\tsrcFactor: \"one\",\n\t\tdstFactor: \"one-minus-src-alpha\",\n\t\toperation: \"add\"\n\t}\n};\n/** A bind group layout whose entries are bound at 0, 1, 2… in order. */\nfunction fragmentBindGroupLayout(device, bindings, label) {\n\treturn device.createBindGroupLayout({\n\t\t...label && { label },\n\t\tentries: bindings.map((binding, index) => {\n\t\t\tif (binding === \"uniform\") return {\n\t\t\t\tbinding: index,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tbuffer: { type: \"uniform\" }\n\t\t\t};\n\t\t\tif (binding === \"texture\") return {\n\t\t\t\tbinding: index,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t};\n\t\t\tif (binding === \"sampler\") return {\n\t\t\t\tbinding: index,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t...binding,\n\t\t\t\tbinding: index\n\t\t\t};\n\t\t})\n\t});\n}\n/** `count` float textures followed by one filtering sampler. */\nfunction texturesLayout(device, count) {\n\treturn fragmentBindGroupLayout(device, [...Array(count).fill(\"texture\"), \"sampler\"]);\n}\n/** Memoizes `create` per GPUDevice (resources can't cross devices). */\nfunction perDevice(create) {\n\tconst cache = /* @__PURE__ */ new WeakMap();\n\treturn (device) => {\n\t\tlet value = cache.get(device);\n\t\tif (value === void 0) {\n\t\t\tvalue = create(device);\n\t\t\tcache.set(device, value);\n\t\t}\n\t\treturn value;\n\t};\n}\n/** A triangle-strip pipeline drawing one full-screen quad (`draw(4)`). */\nfunction createFullscreenPipeline(device, options) {\n\tconst { module, format, blend } = options;\n\treturn device.createRenderPipeline({\n\t\t...options.label && { label: options.label },\n\t\tlayout: Array.isArray(options.layouts) ? device.createPipelineLayout({ bindGroupLayouts: options.layouts }) : options.layouts,\n\t\tvertex: {\n\t\t\tmodule,\n\t\t\tentryPoint: options.vertexEntryPoint ?? \"vs\"\n\t\t},\n\t\tfragment: {\n\t\t\tmodule,\n\t\t\tentryPoint: options.fragmentEntryPoint ?? \"fs\",\n\t\t\ttargets: [blend ? {\n\t\t\t\tformat,\n\t\t\t\tblend\n\t\t\t} : { format }]\n\t\t},\n\t\tprimitive: { topology: \"triangle-strip\" }\n\t});\n}\n/**\n* Renders `child` into a cleared temporary texture with an identity\n* transform and a full-size scissor, and returns that texture.\n*/\nasync function drawChildToTexture(args, child, options = {}) {\n\tconst { ctx, encoder, props } = args;\n\tconst width = options.width ?? args.targetWidth;\n\tconst height = options.height ?? args.targetHeight;\n\tconst texture = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\targs.targetTexture,\n\t\t...options.exclude ?? []\n\t]);\n\tconst view = texture.createView();\n\tctx.renderer.beginFrame(encoder, view, TRANSPARENT, width, height, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait args.drawChild(child, options.props ?? {\n\t\t...props,\n\t\tvirtualMedia: child\n\t}, view, texture, width, height);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\treturn {\n\t\ttexture,\n\t\tview\n\t};\n}\n/**\n* Opens a \"load\" pass on the node's target and makes it the node's current\n* pass (the caller hands it back to the compositor).\n*/\nfunction beginTargetPass(args, width = args.targetWidth, height = args.targetHeight) {\n\tconst pass = args.ctx.renderer.beginFrame(args.encoder, args.targetView, TRANSPARENT, width, height, \"load\");\n\targs.pass = pass;\n\treturn pass;\n}\n/**\n* Target pixels per layout pixel (`props.pixelScale`, 1 when unset). A\n* renderer multiplies its pixel-unit parameters by it and declares\n* `maxPixelScale`.\n*/\nfunction pixelScale(args) {\n\treturn args.props.pixelScale ?? 1;\n}\n/** Draws `texture` over the whole target at `opacity` (the node's output). */\nfunction drawTextureToTarget(args, texture, opacity = 1) {\n\tconst { targetWidth: width, targetHeight: height } = args;\n\targs.ctx.renderer.drawTexture(beginTargetPass(args), texture, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth,\n\t\theight\n\t}, { opacity });\n}\n/** Clock a signal texture is evaluated at, in seconds. */\nfunction signalTiming(props, frame, fps, fallbackDurationSeconds = 0) {\n\tconst metadataDurationMs = props.virtualMedia?.metadata?.durationMs;\n\treturn {\n\t\telapsedSeconds: props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps,\n\t\tdurationSeconds: metadataDurationMs ? metadataDurationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : fallbackDurationSeconds\n\t};\n}\n/**\n* The texture a bound parameter samples: its own GPU binding, the signal's\n* texture (cached under `sd.nodeId`, else `fallbackId`), or a 1×1 dummy.\n*/\nfunction signalTextureView(sc, param, fallbackId) {\n\tconst { args } = sc;\n\tif (param.gpuTextureView) return param.gpuTextureView;\n\tif (param.hasStaticSig && param.sd) return signalRegistry.getOrCreate2DTextureView(args.ctx.device, args.encoder, param.sd.nodeId ?? fallbackId, sc.elapsedSeconds, sc.durationSeconds, param.sd, sc.width, sc.height, args.props.renderId, sc.frame, sc.fps);\n\treturn signalRegistry.getDummy1x1TextureView(args.ctx.device);\n}\n/** Clears `target` to transparent and draws one full-screen quad into it. */\nfunction drawFullscreenPass(encoder, target, pipeline, bindGroups) {\n\tconst pass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: target,\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: TRANSPARENT\n\t}] });\n\tpass.setPipeline(pipeline);\n\tbindGroups.forEach((group, index) => {\n\t\tpass.setBindGroup(index, group);\n\t});\n\tpass.draw(4);\n\tpass.end();\n}\n\n//#endregion\nexport { FULLSCREEN_QUAD_WGSL, PREMULTIPLIED_BLEND, STRAIGHT_ALPHA_BLEND, beginTargetPass, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, pixelScale, signalTextureView, signalTiming, texturesLayout };\n//# sourceMappingURL=gpu.mjs.map"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { A as VisionCompute, L as VisionSession, M as VisionModelDescriptor, N as VisionModelStore, P as VisionModelStoreOptions, R as VisionTensorInput, T as SessionProvider, j as VisionImageInput, z as VisionTensorOutputs } from "./index-D1FqV1eu.mjs";
1
+ import { B as VisionTensorOutputs, E as SessionProvider, F as VisionModelStoreOptions, M as VisionImageInput, N as VisionModelDescriptor, P as VisionModelStore, R as VisionSession, j as VisionCompute, z as VisionTensorInput } from "./index-CMhkkc56.mjs";
2
2
 
3
3
  //#region ../vision-sam/dist/index.d.mts
4
4
  //#region src/license.d.ts
@@ -327,4 +327,4 @@ declare function sam3Mask(logits: Float32Array, width: number, height: number, s
327
327
  //#endregion
328
328
  //#endregion
329
329
  export { assertSamLicenseAccepted as A, sam3Precision as B, Sam3Precision as C, Sam3TrackerOptions as D, Sam3Tracker as E, sam3DenseDecoder as F, validateSam3Prompts as G, sam3Run as H, sam3EncoderFiles as I, sam3Floats as L, ensureSamModelsRegistered as M, sam2Revision as N, SamLicenseOptions as O, sam2Tokens as P, sam3Mask as R, Sam3Options as S, Sam3TextSelector as T, sam3SupportGraphs as U, sam3Revision as V, validateSam2Prompts as W, Sam2TrackerOptions as _, SAM_MODELS as a, Sam3ModelKey as b, Sam2Graph as c, Sam2Model as d, Sam2ModelKey as f, Sam2Tracker as g, Sam2Prompt as h, SAM_LICENSE_TERMS_URL as i, decodeSam2Mask as j, SamModelKey as k, Sam2Memory as l, Sam2Point as m, SAM3_ENCODER as n, Sam2FrameResult as o, Sam2Options as p, SAM_LICENSE as r, Sam2FrameTracker as s, SAM2_EXPORTS as t, Sam2MemoryBank as u, Sam3FrameResult as v, Sam3Prompt as w, Sam3ObjectResult as x, Sam3MemoryBank as y, sam3Position as z };
330
- //# sourceMappingURL=index-CEKxvGY-.d.mts.map
330
+ //# sourceMappingURL=index-BHTycml5.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-CEKxvGY-.d.mts","names":["SessionProvider","VisionCompute","VisionImageInput","VisionModelDescriptor","VisionModelStore","VisionModelStoreOptions","VisionSession","VisionTensorInput","VisionTensorOutputs","SAM_LICENSE_TERMS_URL","SamLicenseOptions","assertSamLicenseAccepted","Sam2Model","Sam2Graph","Sam2ModelKey","SAM2_EXPORTS","Record","Readonly","Sam3Precision","SAM3_ENCODER","Sam3ModelKey","SamModelKey","SAM_LICENSE","sam3EncoderFiles","SAM_MODELS","ensureSamModelsRegistered","Sam2Memory","Float32Array","Sam2MemoryBank","sam2Tokens","Sam2Point","Sam2Prompt","Sam2Options","Sam2FrameResult","Uint8Array","Sam2FrameTracker","Promise","validateSam2Prompts","sam2Revision","Sam2TrackerOptions","Sam2Tracker","decodeSam2Mask","sam3SupportGraphs","sam3DenseDecoder","Sam3MemoryBank","sam3Position","sam3Floats","sam3Run","Sam3TextSelector","Sam3Prompt","Sam3Options","validateSam3Prompts","Sam3ObjectResult","Sam3FrameResult","sam3Revision","sam3Precision","Sam3TrackerOptions","Sam3Tracker","Omit","sam3Mask"],"sources":["../../vision-sam/dist/index.d.mts"],"sourcesContent":["import { SessionProvider, VisionCompute, VisionImageInput, VisionModelDescriptor, VisionModelStore, VisionModelStoreOptions, VisionSession, VisionTensorInput, VisionTensorOutputs } from \"@framefields/vision\";\n\n//#region src/license.d.ts\ndeclare const SAM_LICENSE_TERMS_URL = \"https://github.com/facebookresearch/sam3/blob/main/LICENSE\";\ninterface SamLicenseOptions {\n /** Explicitly agree to Meta's SAM License terms to download or run SAM 3 models. */\n readonly acceptLicense?: boolean;\n}\n/**\n * Ensures that the user has explicitly accepted Meta's SAM License terms before\n * downloading SAM 3 weights or performing inference. SAM 2.1's weights are Apache-2.0 and\n * need no acceptance.\n */\ndeclare function assertSamLicenseAccepted(context?: string, options?: SamLicenseOptions): void;\n//#endregion\n//#region src/models/registry.d.ts\n/**\n * SAM model registry. Every file is pinned to an immutable Hugging Face revision with its\n * exact size and SHA-256; the shared `VisionModelStore` verifies both after download.\n * Nothing here touches the network: the descriptors are registered into the vision\n * registry on first tracker creation so `@framefields/vision` never lists SAM weights.\n */\n/** SAM 2.1 checkpoints with a pinned video export. */\ntype Sam2Model = \"tiny\" | \"small\";\ntype Sam2Graph = \"vision_encoder\" | \"mask_decoder\" | \"memory_encoder\" | \"memory_attention\" | \"pointer_tpos\";\ntype Sam2ModelKey = `sam2.1-${Sam2Model}-${Sam2Graph | \"constants\"}`;\n/**\n * Diffusion Studio's fp16 video exports of Meta SAM 2.1 (Apache-2.0). Tiny is built for\n * speed at 512² (32×32 features); Small runs SAM 2's native 1024² (64×64), resolving small\n * objects, thin structures and identity after cuts better at roughly 4× the encoder and\n * 16× the memory-attention work.\n */\ndeclare const SAM2_EXPORTS: Readonly<Record<Sam2Model, {\n repo: string;\n revision: string;\n size: number;\n name: string;\n}>>;\n/** Weight formats published for the SAM 3 tracker's image encoder. */\ntype Sam3Precision = \"fp16\" | \"q4f16\" | \"q4\";\n/**\n * The encoder precision each backend runs fastest. Measured on an M1 Pro (one 1008² frame):\n * WebGPU fp16 3.65 s, q4f16 4.43 s, q4 6.63 s, int8 140 s (its ops fall back to the CPU);\n * fp16 is also the closest to full precision. On WebGPU, 4-bit weights are dequantized\n * before every matmul, so they only save memory. CUDA runs fp16 on tensor cores. CPUs have\n * no fast fp16 path, so they get fp32-activation q4.\n */\ndeclare const SAM3_ENCODER: Readonly<Record<VisionCompute, Sam3Precision>>;\ntype Sam3ModelKey = `sam3-vision_encoder-${Sam3Precision}` | `sam3-vision_encoder-${Sam3Precision}-data` | \"sam3-mask_decoder\" | \"sam3-memory_encoder\" | \"sam3-memory_attention\" | \"sam3-support\" | \"sam3-support-data\" | \"sam3-text-vision_encoder\" | \"sam3-text-vision_encoder-data\" | \"sam3-text-encoder\" | \"sam3-text-decoder\" | \"sam3-tokenizer\" | \"sam3-tokenizer-config\";\ntype SamModelKey = Sam2ModelKey | Sam3ModelKey;\ndeclare const SAM_LICENSE = \"Meta SAM License\";\n/** File names of the encoder at `precision`; the graph refers to its weights by `data`. */\ndeclare function sam3EncoderFiles(precision: Sam3Precision): {\n graph: string;\n data: string;\n};\ndeclare const SAM_MODELS: readonly VisionModelDescriptor[];\n/** Registers the SAM descriptors into the shared vision registry (idempotent). */\ndeclare function ensureSamModelsRegistered(): void;\n//#endregion\n//#region src/sam2/memory.d.ts\n/** CPU-owned memory bank; neural inference uses the configured vision execution provider. */\ninterface Sam2Memory {\n readonly frame: number;\n readonly tokens: Float32Array;\n readonly positions: Float32Array;\n readonly pointer: Float32Array;\n}\ndeclare class Sam2MemoryBank {\n private readonly temporal;\n private seed?;\n private recent;\n constructor(temporal: readonly (readonly number[])[]);\n remember(memory: Sam2Memory, prompted: boolean): void;\n assemble(frame: number, frameCount?: number): {\n memory: Float32Array;\n positions: Float32Array;\n distances: Float32Array;\n };\n}\n/** NCHW features to the sequence-major layout consumed by memory attention. */\ndeclare function sam2Tokens(data: Float32Array): Float32Array;\n//#endregion\n//#region src/sam2/types.d.ts\n/** Normalized source-image coordinates. Labels 2/3 form a box's opposite corners. */\ninterface Sam2Point {\n readonly x: number;\n readonly y: number;\n readonly label: 0 | 1 | 2 | 3;\n}\n/** Frame is on the source analysis clock, before trim or time remapping. */\ninterface Sam2Prompt {\n readonly frame: number;\n readonly points: readonly Sam2Point[];\n}\ninterface Sam2Options {\n readonly prompts: readonly Sam2Prompt[];\n /** Metadata for object and class signals; SAM does not classify objects. */\n readonly category?: string;\n /**\n * Checkpoint: `\"tiny\"` (default; 512², ~0.3 s/frame on an M1 Pro) or `\"small\"` (SAM 2's\n * native 1024²; finer edges, small objects and thin structures, steadier identity after\n * cuts, at several times the cost).\n */\n readonly model?: Sam2Model;\n}\ninterface Sam2FrameResult {\n readonly mask: Uint8Array;\n readonly width: number;\n readonly height: number;\n readonly score: number;\n readonly iou: number;\n}\ninterface Sam2FrameTracker {\n process(image: VisionImageInput, frame: number, points?: readonly Sam2Point[]): Promise<Sam2FrameResult>;\n release(): void;\n}\ndeclare function validateSam2Prompts(prompts: readonly Sam2Prompt[]): void;\n//#endregion\n//#region src/sam2/tracker.d.ts\n/** The pinned export revision of `model`: part of ClipVision's persistent cache identity. */\ndeclare function sam2Revision(model?: Sam2Model): string;\ninterface Sam2TrackerOptions extends VisionModelStoreOptions {\n readonly provider?: SessionProvider;\n readonly store?: VisionModelStore;\n /** Source sequence length; used to normalize object-pointer time positions for short videos. */\n readonly frameCount?: number;\n /** Checkpoint: `\"tiny\"` (default, 512², fast) or `\"small\"` (1024², finer detail). */\n readonly model?: Sam2Model;\n}\n/** Complete pinned SAM 2.1 video graph pipeline (Tiny or Small), one explicitly selected object. */\ndeclare class Sam2Tracker {\n private readonly constants;\n private readonly frameCount;\n private readonly sessions;\n private readonly bank;\n /** Model input side; image features are `size / 16` square, one memory token per cell. */\n private readonly size;\n private readonly tokens;\n private lastFrame;\n private released;\n private constructor();\n static create(options?: Sam2TrackerOptions): Promise<Sam2Tracker>;\n private run;\n process(image: VisionImageInput, frame: number, points?: readonly Sam2Point[]): Promise<Sam2FrameResult>;\n private condition;\n private remember;\n release(): void;\n}\n/** Bilinear resize of square logits before thresholding, matching SAM's source-image mask contract. */\ndeclare function decodeSam2Mask(logits: Float32Array, width: number, height: number, score: number, iou: number): Sam2FrameResult;\n//#endregion\n//#region src/sam3/graphs.d.ts\ndeclare function sam3SupportGraphs(reference: Uint8Array, external: Uint8Array): {\n densePrompt: Uint8Array;\n pointerPosition: Uint8Array;\n temporal: Float32Array;\n noMemory: Float32Array;\n};\n/** Replace the no-mask embedding by the actual dense prompt head's output. */\ndeclare function sam3DenseDecoder(modelBytes: Uint8Array): Uint8Array;\n//#endregion\n//#region src/sam3/memory.d.ts\n/** Dynamic memory lengths: never duplicate unavailable early-frame memories. */\ndeclare class Sam3MemoryBank {\n private readonly temporal;\n private seed?;\n private recent;\n constructor(temporal: Float32Array);\n remember(memory: Sam2Memory, prompted: boolean): void;\n assemble(frame: number, frameCount: number): {\n spatial: Float32Array;\n positions: Float32Array;\n pointers: Float32Array;\n encoding: Float32Array;\n pointerCount: number;\n };\n}\n/** SAM 3 PositionEmbeddingSine: y then x, normalized pixel centers at grid indices 1..72. */\ndeclare function sam3Position(): Float32Array;\n//#endregion\n//#region src/sam3/text-selector.d.ts\ndeclare function sam3Floats(outputs: VisionTensorOutputs, name: string): Float32Array;\ndeclare function sam3Run(session: VisionSession, inputs: readonly VisionTensorInput[]): Promise<VisionTensorOutputs>;\n/** Semantic model is separate from the visual tracker and loads only for text prompts. */\ndeclare class Sam3TextSelector {\n private readonly tokenizer;\n private readonly sessions;\n private encoded?;\n private constructor();\n static create(store: VisionModelStore, provider: SessionProvider): Promise<Sam3TextSelector>;\n /**\n * Mask logits (288²) of the instances matching `text` with sigmoid score of at least\n * `threshold`, best first and at most `max`. Queries that repeat an accepted instance\n * (mask IoU above 0.5) are skipped. Throws when nothing matches unless `required` is false.\n */\n select(pixels: Float32Array, text: string, threshold: number, max?: number, required?: boolean): Promise<Float32Array[]>;\n /** Text features for a prompt; the last one is kept, since re-detection repeats it every few frames. */\n private encodeText;\n release(): void;\n}\n//#endregion\n//#region src/sam3/types.d.ts\ninterface Sam3Prompt {\n /** Source analysis frame, before trimming or time remapping. */\n readonly frame: number;\n /** Normalized source coordinates; labels 2/3 define a box. */\n readonly points?: readonly Sam2Point[];\n /** Select matching instances (up to `maxObjects`, best first), then propagate their masks. */\n readonly text?: string;\n /**\n * Track ID (1-based) a points prompt seeds or corrects; defaults to 1. The next unused\n * ID adds an object. Text prompts re-select every object, so they take no ID.\n */\n readonly object?: number;\n}\ninterface Sam3Options extends SamLicenseOptions {\n /** Prompt list across frames. Optional if shorthand `text` is supplied. */\n readonly prompts?: readonly Sam3Prompt[];\n /** Convenience shorthand to select by text at frame 0. */\n readonly text?: string;\n /** Signal category metadata; defaults to \"object\". */\n readonly category?: string;\n /** Minimum sigmoid score for a text-selected instance. Default 0.5. */\n readonly textThreshold?: number;\n /** Most instances a text prompt selects, as track IDs 1…N by score. Default 1, or every match with `merge`. */\n readonly maxObjects?: number;\n /**\n * Select every instance matching the text as **one** object: one mask and one memory, so\n * tracking costs the same as a single object however many match (e.g. a whole crowd).\n */\n readonly merge?: boolean;\n /**\n * Every this many frames after a text prompt, run that text again and add the instances no\n * tracked object covers yet (people who walk in, turn up from behind someone, or were lost):\n * into the one object with `merge`, otherwise as new track IDs up to `maxObjects`. Each\n * detection pass costs about one text prompt. Default 0: select once, then only track.\n */\n readonly redetect?: number;\n /** Image-encoder weights; defaults to the fastest for the backend in use (`SAM3_ENCODER`). */\n readonly precision?: Sam3Precision;\n}\ndeclare function validateSam3Prompts(options: Sam3Options): void;\n/** One tracked SAM 3 object at a frame; an empty mask means it is absent there. */\ninterface Sam3ObjectResult {\n /** Track ID, 1-based and stable until a text prompt re-selects every object. */\n readonly id: number;\n /** Source-sized binary mask (0 or 255). */\n readonly mask: Uint8Array;\n /** Object-presence logit; positive means present. */\n readonly score: number;\n readonly iou: number;\n}\ninterface Sam3FrameResult {\n readonly width: number;\n readonly height: number;\n /** Every tracked object, ordered by track ID. */\n readonly objects: readonly Sam3ObjectResult[];\n}\n//#endregion\n//#region src/sam3/tracker.d.ts\n/** Every graph and tokenizer revision, and the encoder precision: ClipVision's cache identity. */\ndeclare function sam3Revision(precision: Sam3Precision): string;\n/** The encoder precision a tracker on `provider` uses: the override, else the backend's best. */\ndeclare function sam3Precision(provider?: SessionProvider, override?: Sam3Precision): Promise<Sam3Precision>;\ninterface Sam3TrackerOptions extends VisionModelStoreOptions {\n readonly provider?: SessionProvider;\n readonly store?: VisionModelStore;\n readonly frameCount?: number;\n readonly textThreshold?: number;\n /** Most instances a text prompt selects. Default 1, or every match with `merge`. */\n readonly maxObjects?: number;\n /** Track every instance a text prompt selects as one object (one mask, one memory). */\n readonly merge?: boolean;\n /** Re-run the last text prompt every this many frames and add what no object covers (see `Sam3Options`). */\n readonly redetect?: number;\n /** Image-encoder weights; defaults to the fastest for the provider's backend (`SAM3_ENCODER`). */\n readonly precision?: Sam3Precision;\n /** Explicitly agree to Meta's SAM License terms to download or run SAM 3's weights. */\n readonly acceptLicense?: boolean;\n}\n/**\n * Explicitly selected SAM 3 instances with full neural memory propagation on the provider.\n * The image encoder runs once per frame; each object keeps its own memory bank.\n */\ndeclare class Sam3Tracker {\n private readonly store;\n private readonly provider;\n private readonly options;\n private readonly sessions;\n private encoder?;\n private readonly position;\n private readonly banks;\n private temporal?;\n private noMemory?;\n private selector?;\n /** The last text prompt and its frame, which re-detection repeats. */\n private text?;\n private lastFrame;\n private released;\n private constructor();\n static create(options?: Sam3TrackerOptions): Promise<Sam3Tracker>;\n private run;\n process(image: VisionImageInput, frame: number, prompt?: Omit<Sam3Prompt, \"frame\">): Promise<Sam3FrameResult>;\n private track;\n /**\n * On a `redetect` frame, runs the last text prompt again and seeds what no tracked object\n * covers: merged into the one object (keeping what it tracks), or as new objects.\n */\n private redetect;\n private textSelector;\n /** A 288² concept mask as a seed that outputs (and remembers) that mask. */\n private textSeed;\n private densePrompt;\n /** Objects a prompt (re)seeds, by index. Text re-selects every object; points address one. */\n private seeds;\n private newBank;\n private decode;\n private initialFeatures;\n private condition;\n private remember;\n release(): void;\n}\n/** Resize logits before thresholding; source pixels are the public mask coordinate system. */\ndeclare function sam3Mask(logits: Float32Array, width: number, height: number, score: number): Uint8Array;\n//#endregion\nexport { SAM2_EXPORTS, SAM3_ENCODER, SAM_LICENSE, SAM_LICENSE_TERMS_URL, SAM_MODELS, Sam2FrameResult, Sam2FrameTracker, Sam2Graph, Sam2Memory, Sam2MemoryBank, Sam2Model, Sam2ModelKey, Sam2Options, Sam2Point, Sam2Prompt, Sam2Tracker, Sam2TrackerOptions, Sam3FrameResult, Sam3MemoryBank, Sam3ModelKey, Sam3ObjectResult, Sam3Options, Sam3Precision, Sam3Prompt, Sam3TextSelector, Sam3Tracker, Sam3TrackerOptions, SamLicenseOptions, SamModelKey, assertSamLicenseAccepted, decodeSam2Mask, ensureSamModelsRegistered, sam2Revision, sam2Tokens, sam3DenseDecoder, sam3EncoderFiles, sam3Floats, sam3Mask, sam3Position, sam3Precision, sam3Revision, sam3Run, sam3SupportGraphs, validateSam2Prompts, validateSam3Prompts };\n//# sourceMappingURL=index.d.mts.map"],"mappings":"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"}
1
+ {"version":3,"file":"index-BHTycml5.d.mts","names":["SessionProvider","VisionCompute","VisionImageInput","VisionModelDescriptor","VisionModelStore","VisionModelStoreOptions","VisionSession","VisionTensorInput","VisionTensorOutputs","SAM_LICENSE_TERMS_URL","SamLicenseOptions","assertSamLicenseAccepted","Sam2Model","Sam2Graph","Sam2ModelKey","SAM2_EXPORTS","Record","Readonly","Sam3Precision","SAM3_ENCODER","Sam3ModelKey","SamModelKey","SAM_LICENSE","sam3EncoderFiles","SAM_MODELS","ensureSamModelsRegistered","Sam2Memory","Float32Array","Sam2MemoryBank","sam2Tokens","Sam2Point","Sam2Prompt","Sam2Options","Sam2FrameResult","Uint8Array","Sam2FrameTracker","Promise","validateSam2Prompts","sam2Revision","Sam2TrackerOptions","Sam2Tracker","decodeSam2Mask","sam3SupportGraphs","sam3DenseDecoder","Sam3MemoryBank","sam3Position","sam3Floats","sam3Run","Sam3TextSelector","Sam3Prompt","Sam3Options","validateSam3Prompts","Sam3ObjectResult","Sam3FrameResult","sam3Revision","sam3Precision","Sam3TrackerOptions","Sam3Tracker","Omit","sam3Mask"],"sources":["../../vision-sam/dist/index.d.mts"],"sourcesContent":["import { SessionProvider, VisionCompute, VisionImageInput, VisionModelDescriptor, VisionModelStore, VisionModelStoreOptions, VisionSession, VisionTensorInput, VisionTensorOutputs } from \"@framefields/vision\";\n\n//#region src/license.d.ts\ndeclare const SAM_LICENSE_TERMS_URL = \"https://github.com/facebookresearch/sam3/blob/main/LICENSE\";\ninterface SamLicenseOptions {\n /** Explicitly agree to Meta's SAM License terms to download or run SAM 3 models. */\n readonly acceptLicense?: boolean;\n}\n/**\n * Ensures that the user has explicitly accepted Meta's SAM License terms before\n * downloading SAM 3 weights or performing inference. SAM 2.1's weights are Apache-2.0 and\n * need no acceptance.\n */\ndeclare function assertSamLicenseAccepted(context?: string, options?: SamLicenseOptions): void;\n//#endregion\n//#region src/models/registry.d.ts\n/**\n * SAM model registry. Every file is pinned to an immutable Hugging Face revision with its\n * exact size and SHA-256; the shared `VisionModelStore` verifies both after download.\n * Nothing here touches the network: the descriptors are registered into the vision\n * registry on first tracker creation so `@framefields/vision` never lists SAM weights.\n */\n/** SAM 2.1 checkpoints with a pinned video export. */\ntype Sam2Model = \"tiny\" | \"small\";\ntype Sam2Graph = \"vision_encoder\" | \"mask_decoder\" | \"memory_encoder\" | \"memory_attention\" | \"pointer_tpos\";\ntype Sam2ModelKey = `sam2.1-${Sam2Model}-${Sam2Graph | \"constants\"}`;\n/**\n * Diffusion Studio's fp16 video exports of Meta SAM 2.1 (Apache-2.0). Tiny is built for\n * speed at 512² (32×32 features); Small runs SAM 2's native 1024² (64×64), resolving small\n * objects, thin structures and identity after cuts better at roughly 4× the encoder and\n * 16× the memory-attention work.\n */\ndeclare const SAM2_EXPORTS: Readonly<Record<Sam2Model, {\n repo: string;\n revision: string;\n size: number;\n name: string;\n}>>;\n/** Weight formats published for the SAM 3 tracker's image encoder. */\ntype Sam3Precision = \"fp16\" | \"q4f16\" | \"q4\";\n/**\n * The encoder precision each backend runs fastest. Measured on an M1 Pro (one 1008² frame):\n * WebGPU fp16 3.65 s, q4f16 4.43 s, q4 6.63 s, int8 140 s (its ops fall back to the CPU);\n * fp16 is also the closest to full precision. On WebGPU, 4-bit weights are dequantized\n * before every matmul, so they only save memory. CUDA runs fp16 on tensor cores. CPUs have\n * no fast fp16 path, so they get fp32-activation q4.\n */\ndeclare const SAM3_ENCODER: Readonly<Record<VisionCompute, Sam3Precision>>;\ntype Sam3ModelKey = `sam3-vision_encoder-${Sam3Precision}` | `sam3-vision_encoder-${Sam3Precision}-data` | \"sam3-mask_decoder\" | \"sam3-memory_encoder\" | \"sam3-memory_attention\" | \"sam3-support\" | \"sam3-support-data\" | \"sam3-text-vision_encoder\" | \"sam3-text-vision_encoder-data\" | \"sam3-text-encoder\" | \"sam3-text-decoder\" | \"sam3-tokenizer\" | \"sam3-tokenizer-config\";\ntype SamModelKey = Sam2ModelKey | Sam3ModelKey;\ndeclare const SAM_LICENSE = \"Meta SAM License\";\n/** File names of the encoder at `precision`; the graph refers to its weights by `data`. */\ndeclare function sam3EncoderFiles(precision: Sam3Precision): {\n graph: string;\n data: string;\n};\ndeclare const SAM_MODELS: readonly VisionModelDescriptor[];\n/** Registers the SAM descriptors into the shared vision registry (idempotent). */\ndeclare function ensureSamModelsRegistered(): void;\n//#endregion\n//#region src/sam2/memory.d.ts\n/** CPU-owned memory bank; neural inference uses the configured vision execution provider. */\ninterface Sam2Memory {\n readonly frame: number;\n readonly tokens: Float32Array;\n readonly positions: Float32Array;\n readonly pointer: Float32Array;\n}\ndeclare class Sam2MemoryBank {\n private readonly temporal;\n private seed?;\n private recent;\n constructor(temporal: readonly (readonly number[])[]);\n remember(memory: Sam2Memory, prompted: boolean): void;\n assemble(frame: number, frameCount?: number): {\n memory: Float32Array;\n positions: Float32Array;\n distances: Float32Array;\n };\n}\n/** NCHW features to the sequence-major layout consumed by memory attention. */\ndeclare function sam2Tokens(data: Float32Array): Float32Array;\n//#endregion\n//#region src/sam2/types.d.ts\n/** Normalized source-image coordinates. Labels 2/3 form a box's opposite corners. */\ninterface Sam2Point {\n readonly x: number;\n readonly y: number;\n readonly label: 0 | 1 | 2 | 3;\n}\n/** Frame is on the source analysis clock, before trim or time remapping. */\ninterface Sam2Prompt {\n readonly frame: number;\n readonly points: readonly Sam2Point[];\n}\ninterface Sam2Options {\n readonly prompts: readonly Sam2Prompt[];\n /** Metadata for object and class signals; SAM does not classify objects. */\n readonly category?: string;\n /**\n * Checkpoint: `\"tiny\"` (default; 512², ~0.3 s/frame on an M1 Pro) or `\"small\"` (SAM 2's\n * native 1024²; finer edges, small objects and thin structures, steadier identity after\n * cuts, at several times the cost).\n */\n readonly model?: Sam2Model;\n}\ninterface Sam2FrameResult {\n readonly mask: Uint8Array;\n readonly width: number;\n readonly height: number;\n readonly score: number;\n readonly iou: number;\n}\ninterface Sam2FrameTracker {\n process(image: VisionImageInput, frame: number, points?: readonly Sam2Point[]): Promise<Sam2FrameResult>;\n release(): void;\n}\ndeclare function validateSam2Prompts(prompts: readonly Sam2Prompt[]): void;\n//#endregion\n//#region src/sam2/tracker.d.ts\n/** The pinned export revision of `model`: part of ClipVision's persistent cache identity. */\ndeclare function sam2Revision(model?: Sam2Model): string;\ninterface Sam2TrackerOptions extends VisionModelStoreOptions {\n readonly provider?: SessionProvider;\n readonly store?: VisionModelStore;\n /** Source sequence length; used to normalize object-pointer time positions for short videos. */\n readonly frameCount?: number;\n /** Checkpoint: `\"tiny\"` (default, 512², fast) or `\"small\"` (1024², finer detail). */\n readonly model?: Sam2Model;\n}\n/** Complete pinned SAM 2.1 video graph pipeline (Tiny or Small), one explicitly selected object. */\ndeclare class Sam2Tracker {\n private readonly constants;\n private readonly frameCount;\n private readonly sessions;\n private readonly bank;\n /** Model input side; image features are `size / 16` square, one memory token per cell. */\n private readonly size;\n private readonly tokens;\n private lastFrame;\n private released;\n private constructor();\n static create(options?: Sam2TrackerOptions): Promise<Sam2Tracker>;\n private run;\n process(image: VisionImageInput, frame: number, points?: readonly Sam2Point[]): Promise<Sam2FrameResult>;\n private condition;\n private remember;\n release(): void;\n}\n/** Bilinear resize of square logits before thresholding, matching SAM's source-image mask contract. */\ndeclare function decodeSam2Mask(logits: Float32Array, width: number, height: number, score: number, iou: number): Sam2FrameResult;\n//#endregion\n//#region src/sam3/graphs.d.ts\ndeclare function sam3SupportGraphs(reference: Uint8Array, external: Uint8Array): {\n densePrompt: Uint8Array;\n pointerPosition: Uint8Array;\n temporal: Float32Array;\n noMemory: Float32Array;\n};\n/** Replace the no-mask embedding by the actual dense prompt head's output. */\ndeclare function sam3DenseDecoder(modelBytes: Uint8Array): Uint8Array;\n//#endregion\n//#region src/sam3/memory.d.ts\n/** Dynamic memory lengths: never duplicate unavailable early-frame memories. */\ndeclare class Sam3MemoryBank {\n private readonly temporal;\n private seed?;\n private recent;\n constructor(temporal: Float32Array);\n remember(memory: Sam2Memory, prompted: boolean): void;\n assemble(frame: number, frameCount: number): {\n spatial: Float32Array;\n positions: Float32Array;\n pointers: Float32Array;\n encoding: Float32Array;\n pointerCount: number;\n };\n}\n/** SAM 3 PositionEmbeddingSine: y then x, normalized pixel centers at grid indices 1..72. */\ndeclare function sam3Position(): Float32Array;\n//#endregion\n//#region src/sam3/text-selector.d.ts\ndeclare function sam3Floats(outputs: VisionTensorOutputs, name: string): Float32Array;\ndeclare function sam3Run(session: VisionSession, inputs: readonly VisionTensorInput[]): Promise<VisionTensorOutputs>;\n/** Semantic model is separate from the visual tracker and loads only for text prompts. */\ndeclare class Sam3TextSelector {\n private readonly tokenizer;\n private readonly sessions;\n private encoded?;\n private constructor();\n static create(store: VisionModelStore, provider: SessionProvider): Promise<Sam3TextSelector>;\n /**\n * Mask logits (288²) of the instances matching `text` with sigmoid score of at least\n * `threshold`, best first and at most `max`. Queries that repeat an accepted instance\n * (mask IoU above 0.5) are skipped. Throws when nothing matches unless `required` is false.\n */\n select(pixels: Float32Array, text: string, threshold: number, max?: number, required?: boolean): Promise<Float32Array[]>;\n /** Text features for a prompt; the last one is kept, since re-detection repeats it every few frames. */\n private encodeText;\n release(): void;\n}\n//#endregion\n//#region src/sam3/types.d.ts\ninterface Sam3Prompt {\n /** Source analysis frame, before trimming or time remapping. */\n readonly frame: number;\n /** Normalized source coordinates; labels 2/3 define a box. */\n readonly points?: readonly Sam2Point[];\n /** Select matching instances (up to `maxObjects`, best first), then propagate their masks. */\n readonly text?: string;\n /**\n * Track ID (1-based) a points prompt seeds or corrects; defaults to 1. The next unused\n * ID adds an object. Text prompts re-select every object, so they take no ID.\n */\n readonly object?: number;\n}\ninterface Sam3Options extends SamLicenseOptions {\n /** Prompt list across frames. Optional if shorthand `text` is supplied. */\n readonly prompts?: readonly Sam3Prompt[];\n /** Convenience shorthand to select by text at frame 0. */\n readonly text?: string;\n /** Signal category metadata; defaults to \"object\". */\n readonly category?: string;\n /** Minimum sigmoid score for a text-selected instance. Default 0.5. */\n readonly textThreshold?: number;\n /** Most instances a text prompt selects, as track IDs 1…N by score. Default 1, or every match with `merge`. */\n readonly maxObjects?: number;\n /**\n * Select every instance matching the text as **one** object: one mask and one memory, so\n * tracking costs the same as a single object however many match (e.g. a whole crowd).\n */\n readonly merge?: boolean;\n /**\n * Every this many frames after a text prompt, run that text again and add the instances no\n * tracked object covers yet (people who walk in, turn up from behind someone, or were lost):\n * into the one object with `merge`, otherwise as new track IDs up to `maxObjects`. Each\n * detection pass costs about one text prompt. Default 0: select once, then only track.\n */\n readonly redetect?: number;\n /** Image-encoder weights; defaults to the fastest for the backend in use (`SAM3_ENCODER`). */\n readonly precision?: Sam3Precision;\n}\ndeclare function validateSam3Prompts(options: Sam3Options): void;\n/** One tracked SAM 3 object at a frame; an empty mask means it is absent there. */\ninterface Sam3ObjectResult {\n /** Track ID, 1-based and stable until a text prompt re-selects every object. */\n readonly id: number;\n /** Source-sized binary mask (0 or 255). */\n readonly mask: Uint8Array;\n /** Object-presence logit; positive means present. */\n readonly score: number;\n readonly iou: number;\n}\ninterface Sam3FrameResult {\n readonly width: number;\n readonly height: number;\n /** Every tracked object, ordered by track ID. */\n readonly objects: readonly Sam3ObjectResult[];\n}\n//#endregion\n//#region src/sam3/tracker.d.ts\n/** Every graph and tokenizer revision, and the encoder precision: ClipVision's cache identity. */\ndeclare function sam3Revision(precision: Sam3Precision): string;\n/** The encoder precision a tracker on `provider` uses: the override, else the backend's best. */\ndeclare function sam3Precision(provider?: SessionProvider, override?: Sam3Precision): Promise<Sam3Precision>;\ninterface Sam3TrackerOptions extends VisionModelStoreOptions {\n readonly provider?: SessionProvider;\n readonly store?: VisionModelStore;\n readonly frameCount?: number;\n readonly textThreshold?: number;\n /** Most instances a text prompt selects. Default 1, or every match with `merge`. */\n readonly maxObjects?: number;\n /** Track every instance a text prompt selects as one object (one mask, one memory). */\n readonly merge?: boolean;\n /** Re-run the last text prompt every this many frames and add what no object covers (see `Sam3Options`). */\n readonly redetect?: number;\n /** Image-encoder weights; defaults to the fastest for the provider's backend (`SAM3_ENCODER`). */\n readonly precision?: Sam3Precision;\n /** Explicitly agree to Meta's SAM License terms to download or run SAM 3's weights. */\n readonly acceptLicense?: boolean;\n}\n/**\n * Explicitly selected SAM 3 instances with full neural memory propagation on the provider.\n * The image encoder runs once per frame; each object keeps its own memory bank.\n */\ndeclare class Sam3Tracker {\n private readonly store;\n private readonly provider;\n private readonly options;\n private readonly sessions;\n private encoder?;\n private readonly position;\n private readonly banks;\n private temporal?;\n private noMemory?;\n private selector?;\n /** The last text prompt and its frame, which re-detection repeats. */\n private text?;\n private lastFrame;\n private released;\n private constructor();\n static create(options?: Sam3TrackerOptions): Promise<Sam3Tracker>;\n private run;\n process(image: VisionImageInput, frame: number, prompt?: Omit<Sam3Prompt, \"frame\">): Promise<Sam3FrameResult>;\n private track;\n /**\n * On a `redetect` frame, runs the last text prompt again and seeds what no tracked object\n * covers: merged into the one object (keeping what it tracks), or as new objects.\n */\n private redetect;\n private textSelector;\n /** A 288² concept mask as a seed that outputs (and remembers) that mask. */\n private textSeed;\n private densePrompt;\n /** Objects a prompt (re)seeds, by index. Text re-selects every object; points address one. */\n private seeds;\n private newBank;\n private decode;\n private initialFeatures;\n private condition;\n private remember;\n release(): void;\n}\n/** Resize logits before thresholding; source pixels are the public mask coordinate system. */\ndeclare function sam3Mask(logits: Float32Array, width: number, height: number, score: number): Uint8Array;\n//#endregion\nexport { SAM2_EXPORTS, SAM3_ENCODER, SAM_LICENSE, SAM_LICENSE_TERMS_URL, SAM_MODELS, Sam2FrameResult, Sam2FrameTracker, Sam2Graph, Sam2Memory, Sam2MemoryBank, Sam2Model, Sam2ModelKey, Sam2Options, Sam2Point, Sam2Prompt, Sam2Tracker, Sam2TrackerOptions, Sam3FrameResult, Sam3MemoryBank, Sam3ModelKey, Sam3ObjectResult, Sam3Options, Sam3Precision, Sam3Prompt, Sam3TextSelector, Sam3Tracker, Sam3TrackerOptions, SamLicenseOptions, SamModelKey, assertSamLicenseAccepted, decodeSam2Mask, ensureSamModelsRegistered, sam2Revision, sam2Tokens, sam3DenseDecoder, sam3EncoderFiles, sam3Floats, sam3Mask, sam3Position, sam3Precision, sam3Revision, sam3Run, sam3SupportGraphs, validateSam2Prompts, validateSam3Prompts };\n//# sourceMappingURL=index.d.mts.map"],"mappings":";;;;AAAgN,cAGlMS,qBAAAA,GAAqB,4DAAA;AAAA,UACzBC,iBAAAA,CAAiB;EAAA;EAS4D,SAUlFE,aAAS,CAAA,EAAA,OAAA;AAAA;AACA;AACsC;;;;iBAZnCD,wBAAAA,CAmBmB,OAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAnBkCD,iBAmBlC,CAAA,EAAA,IAAA;AAAA;AAOlB;;;;;;AAQkB;AAC6D;AACnD,KA1BzCE,SAAAA,GA2BSU,MAAW,GAAA,OAAA;AAAA,KA1BpBT,SAAAA,GA4BYU,gBAAgB,GAAYL,cAAa,GAAA,gBAAA,GAAA,kBAAA,GAAA,cAAA;AAAA,KA3BrDJ,YAAAA,GA+BqD,UA/B5BF,SA+BKT,IA/BQU,SA+Ba,GAAA,WAAA,EAAA;AAAA;AAEd;;;;;AAQV,cAlClBE,YAoCc,EApCAE,QAoCA,CApCSD,MAoCT,CApCgBJ,SAoChB,EAAA;EAKTc,IAAAA,EAAAA,MAAAA;EAEPC,QAAAA,EAAAA,MAAAA;EACGA,IAAAA,EAAAA,MAAAA;EACAA,IAAAA,EAAAA,MAAAA;CAAY,CAAA,CAAA;AAAA;AAIkC,KA1CxDT,aAAAA,GA8Cc,MAAA,GAAA,OAAA,GAAA,IAAA;AAAA;AAQkB;AAWT;AAGD;;;;cA5DbC,YAmEoEiB,EAnEtDnB,QAmEsDmB,CAnE7CpB,MAmE6CoB,CAnEtCnC,aAmEsCmC,EAnEvBlB,aAmEuBkB,CAAAA,CAAAA;KAlE7EhB,YAAAA,GAkEoF,uBAlE9CF,aAkE8C,EAAA,GAAA,uBAlELA,aAkEK,OAAA,GAAA,mBAAA,GAAA,qBAAA,GAAA,uBAAA,GAAA,cAAA,GAAA,mBAAA,GAAA,0BAAA,GAAA,+BAAA,GAAA,mBAAA,GAAA,mBAAA,GAAA,gBAAA,GAAA,uBAAA;AAAA,KAjEpFG,WAAAA,GAAcP,YAoEiB,GApEFM,YAoEqBW;AAAU,cAnEnDT,WAAAA,GAuEe,kBAAkB;AAAA;iBArE9BC,gBAAAA,CAuEKvB,SAAAA,EAvEuBkB,aAuEvBlB,CAAAA,EAAAA;EACHI,KAAAA,EAAAA,MAAAA;EAIAQ,IAAAA,EAAAA,MAAAA;CANkBP;cAlEvBmB,UAkE8C,EAAA,SAlEzBrB,qBAkEyB,EAAA;AAAA;iBAhE3CsB,yBAAAA,CAAAA,CAoFSc,EAAAA,IAAAA;;;;UAhFhBb,UAAAA,CAkF0DI;EAAsBG,SAAAA,KAAAA,EAAAA,MAAAA;EAARG,SAAAA,MAAAA,EAhF/DT,YAgF+DS;EAAO,SAAA,SAAA,EA/EnET,YA+EmE;EAAA,SAMxEc,OAAAA,EApFGd,YAoFW;AAAkG;cAlFnHC,cAAAA,CAqFgCM;EAAsBA,iBAAAA,QAAAA;EACrDA,QAAAA,IAAAA;EACIA,QAAAA,MAAAA;EACPP,WAAAA,CAAAA,QAAAA,EAAAA,SAAAA,CAAAA,SAAAA,MAAAA,EAAAA,CAAAA,EAAAA;EACAA,QAAAA,CAAAA,MAAAA,EApFOD,UAoFPC,EAAAA,QAAAA,EAAAA,OAAAA,CAAAA,EAAAA,IAAAA;EAAY,QAAA,CAAA,KAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,MAAA,CAAA,EAAA;IAGPgB,MAAAA,EArFLhB,YAqFqB;IAInBiB,SAAAA,EAxFCjB,YAwFa;IAIJA,SAAAA,EA3FTA,YA2FSA;EACLD,CAAAA;;;iBAxFFG,UAAAA,CA4FHF,IAAAA,EA5FoBA,YA4FpBA,CAAAA,EA5FmCA,YA4FnCA;;;AACY;AAKmB,UA9FnCG,SAAAA,CAiGiB;EAA0D,SACpEiB,CAAAA,EAAO,MAAA;EAAUzC,SAAAA,CAAAA,EAAAA,MAAAA;EAAgCC,SAAAA,KAAAA,EAAAA,CAAAA,GAAAA,CAAAA,GAAAA,CAAAA,GAAAA,CAAAA;;;UA5FxDwB,UAAAA,CA4FqF;EAAA,SAEjFiB,KAAAA,EAAAA,MAAgB;EAKP5C,SAAAA,MAAAA,EAAAA,SAjGK0B,SAiGL1B,EAAAA;;UA/Fb4B,WAAAA,CA+FmEgB;EAARZ,SAAAA,OAAAA,EAAAA,SA9FxCL,UA8FwCK,EAAAA;EAMpDT;EAA0FA,SAAAA,QAAAA,CAAAA,EAAAA,MAAAA;EAARS;;AAAO;AAWpE;;EAiCflB,SAAAA,KAAAA,CAAAA,EAxIJN,SAwIIM;;UAtIbe,eAAAA,CA8GqC;EAAA,SA0B9BkB,IAAAA,EAvIAjB,UAuImB;EAAqB,SAE/CkB,KAAAA,EAAAA,MAAgB;EAIC,SAKjBC,MAAAA,EAAAA,MAAe;EAIoB,SAK5BC,KAAAA,EAAAA,MAAY;EAAyB,SAErCC,GAAAA,EAAAA,MAAa;;UAvJpBpB,gBAAAA,CAuJ4DjB;EAAwBA,OAAAA,CAAAA,KAAAA,EAtJ7EhB,gBAsJ6EgB,EAAAA,KAAAA,EAAAA,MAAAA,EAAAA,MAAAA,CAAAA,EAAAA,SAtJ1BY,SAsJ0BZ,EAAAA,CAAAA,EAtJZkB,OAsJYlB,CAtJJe,eAsJIf,CAAAA;EAARkB,OAAAA,EAAAA,EAAAA,IAAAA;;AAAO,iBAnJ5EC,mBAAAA,CAoJW,OAAA,EAAA,SApJ2BN,UAoJ3B,EAAA,CAAA,EAAA,IAAA;;;;iBAhJXO,YAAAA,CAgJoBjC,KAAAA,CAAAA,EAhJCO,SAgJDP,CAAAA,EAAAA,MAAAA;UA/I3BkC,kBAAAA,SAA2BlC,uBA+IuB,CAAA;EAAA,SAoB9CoD,QAAW,CAAA,EAlKHzD,eAkKG;EAgBCwD,SAAAA,KAAAA,CAAAA,EAjLPpD,gBAiLOoD;EAA6BC;EAARrB,SAAAA,UAAAA,CAAAA,EAAAA,MAAAA;EAE9BlC;EAA+C+C,SAAAA,KAAAA,CAAAA,EA/K7CrC,SA+K6CqC;;;cA5KlDT,WAAAA,CA4KyEJ;EAAO,iBAAA,SAAA;EAAA,iBAqBrE,UAAST;;;;;;;;;0BAtLRY,qBAAqBH,QAAQI;;iBAEtCtC,mDAAmD4B,cAAcM,QAAQH;;;;;;iBAMzEQ,cAAAA,SAAuBd,0EAA0EM;;;iBAGjGS,iBAAAA,YAA6BR,sBAAsBA;eACrDA;mBACIA;YACPP;YACAA;;;iBAGKgB,gBAAAA,aAA6BT,aAAaA;;;;cAI7CU,cAAAA;;;;wBAIUjB;mBACLD;;aAENC;eACEA;cACDA;cACAA;;;;;iBAKGkB,YAAAA,CAAAA,GAAgBlB;;;iBAGhBmB,UAAAA,UAAoBtC,oCAAoCmB;iBACxDoB,OAAAA,UAAiBzC,gCAAgCC,sBAAsB6B,QAAQ5B;;cAElFwC,gBAAAA;;;;;uBAKS5C,4BAA4BJ,kBAAkBoC,QAAQY;;;;;;iBAM5DrB,kFAAkFS,QAAQT;;;;;;;UAOjGsB,UAAAA;;;;6BAImBnB;;;;;;;;;UASnBoB,WAAAA,SAAoBxC;;8BAEAuC;;;;;;;;;;;;;;;;;;;;;;uBAsBP/B;;iBAENiC,mBAAAA,UAA6BD;;UAEpCE,gBAAAA;;;;iBAIOlB;;;;;UAKPmB,eAAAA;;;;6BAImBD;;;;;iBAKZE,YAAAA,YAAwBpC;;iBAExBqC,aAAAA,YAAyBvD,4BAA4BkB,gBAAgBkB,QAAQlB;UACpFsC,kBAAAA,SAA2BnD;sBACfL;mBACHI;;;;;;;;;;uBAUIc;;;;;;;;cAQTuC,WAAAA;;;;;;;;;;;;;;;;0BAgBYD,qBAAqBpB,QAAQqB;;iBAEtCvD,0CAA0CwD,KAAKT,uBAAuBb,QAAQiB;;;;;;;;;;;;;;;;;;;;;iBAqB9EM,QAAAA,SAAiBhC,6DAA6DO"}
@@ -1,7 +1,7 @@
1
1
  import { I as Effect, R as EffectConfigValue } from "./index-C-V6CAhP.mjs";
2
- import { n as NodeRendererPlugin, r as WebGPUNodeRenderer } from "./index-CRaydvLi.mjs";
3
- import { a as ExtractedAudioSignalsBundle, i as AudioSignalOptions } from "./audio-CdCuGK5d.mjs";
4
- import { g as ObjectTrackSignals } from "./index-D1FqV1eu.mjs";
2
+ import { n as NodeRendererPlugin, r as WebGPUNodeRenderer } from "./index-s2qQ8ifZ.mjs";
3
+ import { a as ExtractedAudioSignalsBundle, i as AudioSignalOptions } from "./audio-7oqTUi4G.mjs";
4
+ import { _ as ObjectTrackSignals } from "./index-CMhkkc56.mjs";
5
5
 
6
6
  //#region ../../nodes/node-blur/dist/renderer.d.mts
7
7
  //#region src/renderers/index.d.ts
@@ -4563,4 +4563,4 @@ interface EffectConfigMap extends GeneratedEffectConfigMap {
4563
4563
  type EffectPropsFor<O extends EffectOp> = O extends keyof EffectConfigMap ? EffectConfigMap[O] : Record<string, unknown>;
4564
4564
  //#endregion
4565
4565
  export { TileOffsetEdgeMode as $, ResizerScalerProps as $n, FlipProps as $t, HandWrittenVisualEffect as A, Paint as An, _default$18 as Ar, CameraParallax3DProps as At, PBRGlass as B, Pixelate as Bn, _default$27 as Br, ContourProps as Bt, GradientMapProps as C, MeshWarp as Cn, _default$11 as Cr, AudioParametricEq as Ct, HalftoneScreen as D, NoiseGeneratorProps as Dn, _default$15 as Dr, CRT as Dt, HalftoneMode as E, NoiseGenerator as En, _default$14 as Er, AudioReverbProps as Et, LevelsProps as F, Painterly as Fn, _default$23 as Fr, ColorBalance as Ft, SSAOProps as G, ProceduralVFXProps as Gn, DatamoshProps as Gt, Relight3D as H, Posterize as Hn, _default$29 as Hr, CornerPinPointsItem as Ht, Modulate as I, PainterlyProps as In, _default$24 as Ir, ColorBalanceProps as It, SelectiveColorProps as J, RefineEdge as Jn, Dither as Jt, SelectiveColor as K, RGBSplit as Kn, DisplacementMap as Kt, ModulateProps as L, PatchHeal as Ln, _default$25 as Lr, ColorKey as Lt, HighPassProps as M, PaintStrokesItemOption1 as Mn, _default$20 as Mr, ChannelMergerProps as Mt, LevelChannel as N, PaintStrokesItemOption2 as Nn, _default$21 as Nr, ChannelSplitter as Nt, HalftoneScreenProps as O, OpArt as On, _default$16 as Or, CRTProps as Ot, Levels as P, PaintStrokesItemOption3 as Pn, _default$22 as Pr, ChannelSplitterProps as Pt, TileOffset as Q, ResizerScaler as Qn, Flip as Qt, MotionBlur as R, PatchHealPatchesItem as Rn, rendererNode as Rr, ColorKeyProps as Rt, GradientMap as S, MaskMathProps as Sn, _default$10 as Sr, AudioNoiseGateProps as St, HalftoneDotShape as T, MeshWarpProps as Tn, _default$13 as Tr, AudioReverb as Tt, Relight3DProps as U, PosterizeProps as Un, _default$30 as Ur, CornerPinProps as Ut, PBRGlassProps as V, PixelateProps as Vn, _default$28 as Vr, CornerPin as Vt, SSAO as W, ProceduralVFX as Wn, Datamosh as Wt, ShadowsHighlightsProps as X, RefractionCaustics3D as Xn, ExtractLUT as Xt, ShadowsHighlights as Y, RefineEdgeProps as Yn, DitherProps as Yt, TemporalDeflicker as Z, RefractionCaustics3DProps as Zn, ExtractLUTProps as Zt, EffectConfigMap as _, LayerStyleStroke as _n, _default$5 as _r, AudioDelay as _t, ApplyLUTProps as a, KaleidoscopeProps as an, Toon as ar, AnyGeneratedAudioEffect as at, FilmGrain as b, LiquifyProps as bn, _default$8 as br, AudioFadeProps as bt, Crop as c, KenBurnsProps as cn, TrailsProps as cr, GeneratedEffectConfigMap as ct, CurvesChannelPoint as d, LayerStyleColorOverlay as dn, EffectProp as dr, Blur as dt, Gooey as en, Rotate as er, TileOffsetProps as et, CurvesProps as f, LayerStyleDropShadow as fn, _default as fr, BlurProps as ft, DepthOfFieldProps as g, LayerStyleProps as gn, _default$4 as gr, AudioCompressorProps as gt, DepthOfField as h, LayerStyleOuterGlow as hn, _default$3 as hr, AudioCompressor as ht, ApplyLUT as i, Kaleidoscope as in, TonalShift as ir, VisionProps as it, HighPass as j, PaintProps as jn, _default$19 as jr, ChannelMerger as jt, HandWrittenAudioEffect as k, OpArtProps as kn, _default$17 as kr, CameraParallax3D as kt, CropProps as l, LayerStyle as ln, Vignette as lr, effectFactories as lt, DeflickerProps as m, LayerStyleInnerShadow as mn, _default$2 as mr, AsciiProps as mt, AnyEffect as n, Iridescence as nn, StereoPanning as nr, UnsharpMaskProps as nt, AudioSignalExtractor as o, KenBurns as on, ToonProps as or, AnyGeneratedEffect as ot, CustomEffect as p, LayerStyleInnerGlow as pn, _default$1 as pr, Ascii as pt, SelectiveColorAdjustment as q, RGBSplitProps as qn, DisplacementMapProps as qt, AnyVisualEffect as r, IridescenceProps as rn, StereoPanningProps as rr, Vision as rt, AudioSignalExtractorProps as s, KenBurnsKeyframesItem as sn, Trails as sr, AnyGeneratedVisualEffect as st, AnyAudioEffect as t, GooeyProps as tn, RotateProps as tr, UnsharpMask as tt, Curves as u, LayerStyleBevelEmboss as un, VignetteProps as ur, effectMeta as ut, EffectOp as v, Liquify as vn, _default$6 as vr, AudioDelayProps as vt, GradientMapStop as w, MeshWarpPointsItem as wn, _default$12 as wr, AudioParametricEqProps as wt, FilmGrainProps as x, MaskMath as xn, _default$9 as xr, AudioNoiseGate as xt, EffectPropsFor as y, LiquifyOperationsItem as yn, _default$7 as yr, AudioFade as yt, MotionBlurProps as z, PatchHealProps as zn, _default$26 as zr, Contour as zt };
4566
- //# sourceMappingURL=index-DoP6EiHj.d.mts.map
4566
+ //# sourceMappingURL=index-BcxxxwhV.d.mts.map