framefields 2.6.1 → 2.7.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 (471) hide show
  1. package/dist/audio/index.d.mts +4 -4
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-CYrO9q9P.mjs → audio-j3ttoRDX.mjs} +4 -4
  4. package/dist/{audio-CYrO9q9P.mjs.map → audio-j3ttoRDX.mjs.map} +1 -1
  5. package/dist/{audio-B5mdR8vv.d.mts → audio-tL8CcPra.d.mts} +3 -3
  6. package/dist/{audio-B5mdR8vv.d.mts.map → audio-tL8CcPra.d.mts.map} +1 -1
  7. package/dist/components/index.d.mts +10 -10
  8. package/dist/components/index.mjs +44 -44
  9. package/dist/{dist-cC6nOaMR.mjs → dist-BHTd-EC1.mjs} +164 -34
  10. package/dist/dist-BHTd-EC1.mjs.map +1 -0
  11. package/dist/{dist-DSKhnhDk.mjs → dist-BM0ilHvQ.mjs} +115 -21
  12. package/dist/dist-BM0ilHvQ.mjs.map +1 -0
  13. package/dist/{dist-D021IFfp.mjs → dist-BRXsfWKQ.mjs} +444 -8
  14. package/dist/dist-BRXsfWKQ.mjs.map +1 -0
  15. package/dist/{dist-BPOi5xb_.mjs → dist-CPtFZxtu.mjs} +2 -2
  16. package/dist/{dist-BPOi5xb_.mjs.map → dist-CPtFZxtu.mjs.map} +1 -1
  17. package/dist/effects/index.d.mts +4 -4
  18. package/dist/effects/index.mjs +35 -35
  19. package/dist/{effects-Dvdwndk0.mjs → effects-Dy661XS_.mjs} +3 -3
  20. package/dist/{effects-Dvdwndk0.mjs.map → effects-Dy661XS_.mjs.map} +1 -1
  21. package/dist/fonts/index.mjs +2 -2
  22. package/dist/{fonts-B6a4CyoM.mjs → fonts-BcFhAqqO.mjs} +2 -2
  23. package/dist/{fonts-B6a4CyoM.mjs.map → fonts-BcFhAqqO.mjs.map} +1 -1
  24. package/dist/{gpu-CrQADlcf.mjs → gpu-zIhSz_0X.mjs} +2 -2
  25. package/dist/{gpu-CrQADlcf.mjs.map → gpu-zIhSz_0X.mjs.map} +1 -1
  26. package/dist/{index-ocZc12ZS.d.mts → index-B1ENegOQ.d.mts} +224 -2
  27. package/dist/index-B1ENegOQ.d.mts.map +1 -0
  28. package/dist/{index-D-Gnyffj.d.mts → index-CJRTBLZ4.d.mts} +4 -4
  29. package/dist/{index-D-Gnyffj.d.mts.map → index-CJRTBLZ4.d.mts.map} +1 -1
  30. package/dist/{index-BhzlG_1Q.d.mts → index-Cg30slle.d.mts} +2 -2
  31. package/dist/{index-BhzlG_1Q.d.mts.map → index-Cg30slle.d.mts.map} +1 -1
  32. package/dist/{index-B4o6F1JC.d.mts → index-DeeMmoEA.d.mts} +2 -2
  33. package/dist/{index-B4o6F1JC.d.mts.map → index-DeeMmoEA.d.mts.map} +1 -1
  34. package/dist/{index-CWG19cm-.d.mts → index-ePGQ_C7f.d.mts} +39 -16
  35. package/dist/index-ePGQ_C7f.d.mts.map +1 -0
  36. package/dist/{index-o8LxWdwz.d.mts → index-l1yRugLc.d.mts} +3 -3
  37. package/dist/{index-o8LxWdwz.d.mts.map → index-l1yRugLc.d.mts.map} +1 -1
  38. package/dist/{index-3Vdef2KE.d.mts → index-uDZ9Yuv-.d.mts} +5 -8
  39. package/dist/index-uDZ9Yuv-.d.mts.map +1 -0
  40. package/dist/index.d.mts +11 -11
  41. package/dist/index.mjs +53 -53
  42. package/dist/preview/index.d.mts +3 -3
  43. package/dist/preview/index.mjs +10 -10
  44. package/dist/{preview-OTsGYyOU.mjs → preview-IpdVFuxv.mjs} +3 -2
  45. package/dist/{preview-OTsGYyOU.mjs.map → preview-IpdVFuxv.mjs.map} +1 -1
  46. package/dist/preview-engine/audio.mjs +1 -1
  47. package/dist/preview-engine/{chunk-RF62TV3G.mjs → chunk-25WRUINA.mjs} +1 -1
  48. package/dist/preview-engine/{chunk-MMVFX42U.mjs → chunk-2AEWPT6Y.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-IIOHF7MH.mjs → chunk-2MDTUA3W.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-KWTTANYN.mjs → chunk-2TLABBER.mjs} +1 -1
  51. package/dist/preview-engine/{chunk-MUOJMF7M.mjs → chunk-3QOJVABU.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-RDEQ4LQU.mjs → chunk-4Q3ZUTQC.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-OXXRKNHW.mjs → chunk-5BXCJ2QX.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-JTT3YX7W.mjs → chunk-5R4UF7YK.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-4C26NVQY.mjs → chunk-6THE6J3A.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-SVE3XWO7.mjs → chunk-6VDYWMP5.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-ULPLHKM2.mjs → chunk-7B7QQDPZ.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-ULVX4VYT.mjs → chunk-7ZA36EZE.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-LYSU6S4O.mjs → chunk-AJ6BVUDB.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-J24VHZS6.mjs → chunk-BDXGUSSF.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-B7J72YSP.mjs → chunk-CC5V7UBF.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-JD4TBC6Z.mjs → chunk-CP42LYD7.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-LN3YAWUD.mjs → chunk-DJWDD3OE.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-V3FODTPI.mjs → chunk-DZEWY4PR.mjs} +22 -22
  65. package/dist/preview-engine/{chunk-RKNV5N7D.mjs → chunk-ENGQ55LR.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-AGLAJGQJ.mjs → chunk-FBXKVLTB.mjs} +14 -14
  67. package/dist/preview-engine/{chunk-MJCK5FLZ.mjs → chunk-FMEXTHL7.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-UEQIO6AH.mjs → chunk-FQ7UCMWR.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-TPFDAOW7.mjs → chunk-FRIBHQTM.mjs} +1 -1
  70. package/dist/preview-engine/chunk-FT7HJ6IE.mjs +3 -0
  71. package/dist/preview-engine/{chunk-YEPYVASB.mjs → chunk-G3UOUGIE.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-4JX5LBE2.mjs → chunk-H4GDIVX4.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-LHCEQ77S.mjs → chunk-HU73APZL.mjs} +1 -1
  74. package/dist/preview-engine/{chunk-DDFWN7DI.mjs → chunk-I7QIQURU.mjs} +1 -1
  75. package/dist/preview-engine/{chunk-3KHD67Q3.mjs → chunk-ID344UBN.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-5NT7WWJR.mjs → chunk-IGCXUGHT.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-QPBTLJ5W.mjs → chunk-IK3YA6MC.mjs} +1 -1
  78. package/dist/preview-engine/chunk-J5SKQFJ6.mjs +1 -0
  79. package/dist/preview-engine/{chunk-Q7JN4EHX.mjs → chunk-JOPZNSZJ.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-SQ52PBF3.mjs → chunk-JOSNIMFT.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-SXNCNG4L.mjs → chunk-JR443L5E.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-FZLKPBKS.mjs → chunk-KCAFMWDM.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-QRYCB6E3.mjs → chunk-LAEPNVOE.mjs} +1 -1
  84. package/dist/preview-engine/chunk-MAALUQK3.mjs +1974 -0
  85. package/dist/preview-engine/chunk-MHCXSWK7.mjs +1 -0
  86. package/dist/preview-engine/{chunk-4INGTMZ5.mjs → chunk-MWBARRK2.mjs} +1 -1
  87. package/dist/preview-engine/chunk-MXK2PP6K.mjs +1 -0
  88. package/dist/preview-engine/{chunk-GQIRV466.mjs → chunk-MXPN2GB7.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-W2EZFV4Q.mjs → chunk-NHYB5YC3.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-K3IMPV6T.mjs → chunk-PXSKIGAP.mjs} +6 -6
  91. package/dist/preview-engine/{chunk-SP22JWN2.mjs → chunk-PYM2FBFA.mjs} +1 -1
  92. package/dist/preview-engine/chunk-QDTJ4MOJ.mjs +1 -0
  93. package/dist/preview-engine/{chunk-6PMATELR.mjs → chunk-RQU2GFGH.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-UQD2UE6I.mjs → chunk-RWDPBES3.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-QVW5METG.mjs → chunk-S5ONWSZF.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-2YGR5YCN.mjs → chunk-SIU6JU2R.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-NQZRPPUU.mjs → chunk-SJ3Q4AQP.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-Q6CRERSJ.mjs → chunk-T36SKUWK.mjs} +9 -9
  99. package/dist/preview-engine/chunk-TEBZRQPG.mjs +1 -0
  100. package/dist/preview-engine/{chunk-WDWHOXSA.mjs → chunk-UUDML2SN.mjs} +1 -1
  101. package/dist/preview-engine/{chunk-RHXZXWJ4.mjs → chunk-VAS4IJZR.mjs} +1 -1
  102. package/dist/preview-engine/{chunk-DOCFOSA6.mjs → chunk-WTDK6H46.mjs} +1 -1
  103. package/dist/preview-engine/chunk-XNMEVVQB.mjs +1 -0
  104. package/dist/preview-engine/{chunk-AKT4YQWL.mjs → chunk-YVGT4NK6.mjs} +2 -2
  105. package/dist/preview-engine/{chunk-ZGMA27IG.mjs → chunk-ZR4QFIJR.mjs} +1 -1
  106. package/dist/preview-engine/chunk-ZYTXBBIX.mjs +1 -0
  107. package/dist/preview-engine/components.mjs +1 -1
  108. package/dist/preview-engine/effects.mjs +1 -1
  109. package/dist/preview-engine/fonts.mjs +1 -1
  110. package/dist/preview-engine/framefields.mjs +1 -1
  111. package/dist/preview-engine/player.mjs +2 -2
  112. package/dist/preview-engine/{renderers-FC7G7KU7.mjs → renderers-2AKYMAIK.mjs} +1 -1
  113. package/dist/preview-engine/renderers-363CKEIG.mjs +1 -0
  114. package/dist/preview-engine/{renderers-EJGF3PYQ.mjs → renderers-36L24ZVS.mjs} +1 -1
  115. package/dist/preview-engine/renderers-3FMMVDMA.mjs +1 -0
  116. package/dist/preview-engine/{renderers-56TGEFDK.mjs → renderers-44AANAXR.mjs} +1 -1
  117. package/dist/preview-engine/renderers-4UUU62VV.mjs +1 -0
  118. package/dist/preview-engine/renderers-4ZTZFSAR.mjs +1 -0
  119. package/dist/preview-engine/{renderers-PYDOSDEY.mjs → renderers-5ZSB75GY.mjs} +1 -1
  120. package/dist/preview-engine/renderers-6KDD75BM.mjs +1 -0
  121. package/dist/preview-engine/renderers-7BJRD4G2.mjs +1 -0
  122. package/dist/preview-engine/{renderers-HBIBRZD7.mjs → renderers-AIIHGDJM.mjs} +1 -1
  123. package/dist/preview-engine/{renderers-P2FTCDZ7.mjs → renderers-AU746ORP.mjs} +1 -1
  124. package/dist/preview-engine/renderers-BIF2BETK.mjs +1 -0
  125. package/dist/preview-engine/{renderers-FD3ZT73R.mjs → renderers-BTQCHVHV.mjs} +1 -1
  126. package/dist/preview-engine/{renderers-HMNCIEU3.mjs → renderers-CFHBOAZG.mjs} +1 -1
  127. package/dist/preview-engine/renderers-CU5RW5UA.mjs +1 -0
  128. package/dist/preview-engine/renderers-DK5OBTKE.mjs +1 -0
  129. package/dist/preview-engine/renderers-EAKCDGTY.mjs +1 -0
  130. package/dist/preview-engine/{renderers-FYI6QNUH.mjs → renderers-EGBGC7MU.mjs} +1 -1
  131. package/dist/preview-engine/renderers-EVXCU7G7.mjs +1 -0
  132. package/dist/preview-engine/renderers-EXEYEH3F.mjs +1 -0
  133. package/dist/preview-engine/{renderers-RDHHVXRE.mjs → renderers-EXJDPS3T.mjs} +1 -1
  134. package/dist/preview-engine/renderers-F3WALPWI.mjs +1 -0
  135. package/dist/preview-engine/{renderers-4RVSLTCX.mjs → renderers-FS3EOB4J.mjs} +1 -1
  136. package/dist/preview-engine/{renderers-C3YXNKNM.mjs → renderers-GUL2MXDD.mjs} +1 -1
  137. package/dist/preview-engine/{renderers-EQDINUMT.mjs → renderers-H4HC44B5.mjs} +1 -1
  138. package/dist/preview-engine/renderers-H6565HO4.mjs +1 -0
  139. package/dist/preview-engine/renderers-HT5V6OZ2.mjs +1 -0
  140. package/dist/preview-engine/renderers-HXMOARWO.mjs +1 -0
  141. package/dist/preview-engine/renderers-HZ2Q7BGK.mjs +1 -0
  142. package/dist/preview-engine/renderers-I4N2K2KW.mjs +1 -0
  143. package/dist/preview-engine/renderers-I5J7U6CB.mjs +1 -0
  144. package/dist/preview-engine/renderers-IZV6QXR5.mjs +1 -0
  145. package/dist/preview-engine/renderers-JWGAPHWX.mjs +1 -0
  146. package/dist/preview-engine/renderers-KNDSVQTY.mjs +1 -0
  147. package/dist/preview-engine/renderers-KNDUOO6M.mjs +1 -0
  148. package/dist/preview-engine/renderers-KQAO3QEI.mjs +1 -0
  149. package/dist/preview-engine/{renderers-7SW2AHM2.mjs → renderers-LCSQLXRD.mjs} +1 -1
  150. package/dist/preview-engine/renderers-M34LOEHC.mjs +1 -0
  151. package/dist/preview-engine/renderers-ML6GNCWB.mjs +1 -0
  152. package/dist/preview-engine/renderers-NARG274F.mjs +1 -0
  153. package/dist/preview-engine/renderers-NCFPOSWR.mjs +1 -0
  154. package/dist/preview-engine/{renderers-ZAMSS7QN.mjs → renderers-PCOTECQB.mjs} +1 -1
  155. package/dist/preview-engine/renderers-PG5JHI2S.mjs +1 -0
  156. package/dist/preview-engine/{renderers-LTV5RFDJ.mjs → renderers-Q7MNLQJF.mjs} +1 -1
  157. package/dist/preview-engine/{renderers-GHP7SL5M.mjs → renderers-QXVSJYZL.mjs} +1 -1
  158. package/dist/preview-engine/{renderers-H2UI7YEO.mjs → renderers-R3ERZ3ZY.mjs} +1 -1
  159. package/dist/preview-engine/renderers-RXQKV65L.mjs +1 -0
  160. package/dist/preview-engine/renderers-SA73GD2B.mjs +1 -0
  161. package/dist/preview-engine/renderers-SLIXUHNX.mjs +1 -0
  162. package/dist/preview-engine/renderers-T462JZNA.mjs +1 -0
  163. package/dist/preview-engine/{renderers-LV6LLULR.mjs → renderers-TH2XZAYW.mjs} +1 -1
  164. package/dist/preview-engine/{renderers-ART3EGSZ.mjs → renderers-UHZIERVH.mjs} +1 -1
  165. package/dist/preview-engine/renderers-V7CFVGYK.mjs +1 -0
  166. package/dist/preview-engine/renderers-VY5E7BPK.mjs +1 -0
  167. package/dist/preview-engine/{renderers-ZDMDDWLN.mjs → renderers-WKXGELRG.mjs} +1 -1
  168. package/dist/preview-engine/{renderers-GY4R467B.mjs → renderers-WLDIIFR5.mjs} +1 -1
  169. package/dist/preview-engine/{renderers-NTKSN32T.mjs → renderers-WM6WBRH6.mjs} +1 -1
  170. package/dist/preview-engine/renderers-WT5FQZM7.mjs +228 -0
  171. package/dist/preview-engine/{renderers-YK74777T.mjs → renderers-WTKRLNNR.mjs} +1 -1
  172. package/dist/preview-engine/{renderers-BWRNCXR6.mjs → renderers-X6GKEVP7.mjs} +1 -1
  173. package/dist/preview-engine/renderers-Y47N5EYR.mjs +1 -0
  174. package/dist/preview-engine/renderers-Y4CUVZYI.mjs +1 -0
  175. package/dist/preview-engine/renderers-Y6YC7ZAK.mjs +1 -0
  176. package/dist/preview-engine/renderers-Y6ZYUAQG.mjs +1 -0
  177. package/dist/preview-engine/{renderers-YBTWN76S.mjs → renderers-YRWXYT5A.mjs} +1 -1
  178. package/dist/preview-engine/{renderers-SY435YU3.mjs → renderers-YWC4MXPG.mjs} +1 -1
  179. package/dist/preview-engine/{renderers-7GMW52G3.mjs → renderers-ZWNPYZN6.mjs} +1 -1
  180. package/dist/preview-engine/signals.mjs +1 -1
  181. package/dist/{program-W4CWO2bp.mjs → program-KPBfq9tw.mjs} +95 -21
  182. package/dist/program-KPBfq9tw.mjs.map +1 -0
  183. package/dist/registry/index.json +1 -1
  184. package/dist/registry/lower-third.json +1 -1
  185. package/dist/registry/terminal.json +1 -1
  186. package/dist/registry/text-reveal.json +2 -2
  187. package/dist/registry/title-card.json +1 -1
  188. package/dist/renderer/index.d.mts +2 -2
  189. package/dist/renderer/index.mjs +2 -2
  190. package/dist/{renderer-CX4rvqm9.mjs → renderer-1-FLx8kd.mjs} +3 -3
  191. package/dist/{renderer-CX4rvqm9.mjs.map → renderer-1-FLx8kd.mjs.map} +1 -1
  192. package/dist/{renderer-BIMm7lYG.mjs → renderer-47d3etrX.mjs} +4 -4
  193. package/dist/{renderer-BIMm7lYG.mjs.map → renderer-47d3etrX.mjs.map} +1 -1
  194. package/dist/{renderer-CPtyQrJI.mjs → renderer-6GCG6JxD.mjs} +3 -3
  195. package/dist/{renderer-CPtyQrJI.mjs.map → renderer-6GCG6JxD.mjs.map} +1 -1
  196. package/dist/{renderer-BE6K88VR.mjs → renderer-8BIDdgjt.mjs} +3 -3
  197. package/dist/{renderer-BE6K88VR.mjs.map → renderer-8BIDdgjt.mjs.map} +1 -1
  198. package/dist/renderer-B-5TlncB.mjs +5 -0
  199. package/dist/{renderer-FgP_1OgD.mjs → renderer-B1yzSbvC.mjs} +4 -4
  200. package/dist/{renderer-FgP_1OgD.mjs.map → renderer-B1yzSbvC.mjs.map} +1 -1
  201. package/dist/{renderer-158rymL0.mjs → renderer-B2YiXpp-.mjs} +2 -2
  202. package/dist/{renderer-158rymL0.mjs.map → renderer-B2YiXpp-.mjs.map} +1 -1
  203. package/dist/{renderer-eQP0fvgc.mjs → renderer-B55ljMI_.mjs} +2 -2
  204. package/dist/{renderer-eQP0fvgc.mjs.map → renderer-B55ljMI_.mjs.map} +1 -1
  205. package/dist/{renderer-Duorbrb8.mjs → renderer-B6Tg4UgH.mjs} +4 -4
  206. package/dist/{renderer-Duorbrb8.mjs.map → renderer-B6Tg4UgH.mjs.map} +1 -1
  207. package/dist/{renderer-DmrP4dsn.mjs → renderer-BFnf-8Yt.mjs} +3 -3
  208. package/dist/{renderer-DmrP4dsn.mjs.map → renderer-BFnf-8Yt.mjs.map} +1 -1
  209. package/dist/{renderer-CLP6Lm7y.mjs → renderer-BGHHoPiD.mjs} +2 -2
  210. package/dist/{renderer-BO5u8eFS.mjs → renderer-BHUjPi24.mjs} +2 -2
  211. package/dist/{renderer-BO5u8eFS.mjs.map → renderer-BHUjPi24.mjs.map} +1 -1
  212. package/dist/renderer-BHXtDg5_.mjs +3 -0
  213. package/dist/{renderer-HPBahXjt.mjs → renderer-BIk67-jU.mjs} +2 -2
  214. package/dist/{renderer-HPBahXjt.mjs.map → renderer-BIk67-jU.mjs.map} +1 -1
  215. package/dist/{renderer-C-dcd14F.d.mts → renderer-BLEmr0Lt.d.mts} +2 -2
  216. package/dist/{renderer-C-dcd14F.d.mts.map → renderer-BLEmr0Lt.d.mts.map} +1 -1
  217. package/dist/{renderer-tYmQUp4d.mjs → renderer-BLs5sDdk.mjs} +3 -3
  218. package/dist/{renderer-tYmQUp4d.mjs.map → renderer-BLs5sDdk.mjs.map} +1 -1
  219. package/dist/renderer-BPd3gvEt.mjs +5 -0
  220. package/dist/{renderer-BiH29MS6.mjs → renderer-BXul0Wy6.mjs} +3 -3
  221. package/dist/{renderer-BiH29MS6.mjs.map → renderer-BXul0Wy6.mjs.map} +1 -1
  222. package/dist/{renderer-DVdRzDwX.mjs → renderer-B_1SLBPa.mjs} +3 -3
  223. package/dist/{renderer-DVdRzDwX.mjs.map → renderer-B_1SLBPa.mjs.map} +1 -1
  224. package/dist/renderer-B_ep98BH.mjs +5 -0
  225. package/dist/renderer-Ba_KUbKW.mjs +5 -0
  226. package/dist/{renderer-dX7Fy1NR.mjs → renderer-BbyNUjE_.mjs} +3 -3
  227. package/dist/{renderer-dX7Fy1NR.mjs.map → renderer-BbyNUjE_.mjs.map} +1 -1
  228. package/dist/{renderer-0n4A8P2_.mjs → renderer-BcVr_cIk.mjs} +2 -2
  229. package/dist/{renderer-0n4A8P2_.mjs.map → renderer-BcVr_cIk.mjs.map} +1 -1
  230. package/dist/renderer-BeL2hstU.mjs +5 -0
  231. package/dist/renderer-Bj81osPQ.mjs +5 -0
  232. package/dist/{renderer-ZM2jwJbX.mjs → renderer-BjL7sKGU.mjs} +3 -3
  233. package/dist/{renderer-ZM2jwJbX.mjs.map → renderer-BjL7sKGU.mjs.map} +1 -1
  234. package/dist/{renderer-Bh7d3RSt.mjs → renderer-BjNcuJ4H.mjs} +3 -3
  235. package/dist/{renderer-Bh7d3RSt.mjs.map → renderer-BjNcuJ4H.mjs.map} +1 -1
  236. package/dist/{renderer-Sdsy27LH.mjs → renderer-Br8aDmf0.mjs} +2 -2
  237. package/dist/renderer-BvZQngSm.mjs +5 -0
  238. package/dist/renderer-BxgN8oXx.mjs +5 -0
  239. package/dist/{renderer-BQ-pHSPI.mjs → renderer-ByOvGGzp.mjs} +3 -3
  240. package/dist/{renderer-BQ-pHSPI.mjs.map → renderer-ByOvGGzp.mjs.map} +1 -1
  241. package/dist/{renderer-KkDYCAkn.mjs → renderer-C11qLlrz.mjs} +3 -3
  242. package/dist/{renderer-KkDYCAkn.mjs.map → renderer-C11qLlrz.mjs.map} +1 -1
  243. package/dist/{renderer-D52KWsb8.mjs → renderer-C5dyPQjG.mjs} +3 -3
  244. package/dist/{renderer-D52KWsb8.mjs.map → renderer-C5dyPQjG.mjs.map} +1 -1
  245. package/dist/renderer-C5jDrTBc.mjs +5 -0
  246. package/dist/{renderer-DTKtkgTO.mjs → renderer-C6TbU8U5.mjs} +3 -3
  247. package/dist/{renderer-DTKtkgTO.mjs.map → renderer-C6TbU8U5.mjs.map} +1 -1
  248. package/dist/{renderer-aT6MUYPr.mjs → renderer-C9bcEaBE.mjs} +3 -3
  249. package/dist/{renderer-aT6MUYPr.mjs.map → renderer-C9bcEaBE.mjs.map} +1 -1
  250. package/dist/{renderer-CsxO_wBG.mjs → renderer-CAH00Lub.mjs} +2 -2
  251. package/dist/{renderer-Cb74SQHm.mjs → renderer-CAhsBEpU.mjs} +2 -2
  252. package/dist/{renderer-Cb74SQHm.mjs.map → renderer-CAhsBEpU.mjs.map} +1 -1
  253. package/dist/renderer-CBK4M82Y.mjs +5 -0
  254. package/dist/{renderer-CFSh2eG-.mjs → renderer-CCH0gSF7.mjs} +3 -3
  255. package/dist/{renderer-CFSh2eG-.mjs.map → renderer-CCH0gSF7.mjs.map} +1 -1
  256. package/dist/{renderer-CHvEgLHy.mjs → renderer-CCbOp0BM.mjs} +3 -3
  257. package/dist/{renderer-CHvEgLHy.mjs.map → renderer-CCbOp0BM.mjs.map} +1 -1
  258. package/dist/{renderer-DrrWvz8l.mjs → renderer-CEb5GjcU.mjs} +3 -3
  259. package/dist/{renderer-DrrWvz8l.mjs.map → renderer-CEb5GjcU.mjs.map} +1 -1
  260. package/dist/{renderer-1KfQICGK.mjs → renderer-CIL9zh-a.mjs} +3 -3
  261. package/dist/{renderer-1KfQICGK.mjs.map → renderer-CIL9zh-a.mjs.map} +1 -1
  262. package/dist/{renderer-CEvj79Wg.mjs → renderer-CIbXIFOb.mjs} +4 -4
  263. package/dist/{renderer-CEvj79Wg.mjs.map → renderer-CIbXIFOb.mjs.map} +1 -1
  264. package/dist/renderer-CLHtCctc.mjs +5 -0
  265. package/dist/{renderer-DxOJv_G7.mjs → renderer-CLX33fIK.mjs} +3 -3
  266. package/dist/{renderer-DxOJv_G7.mjs.map → renderer-CLX33fIK.mjs.map} +1 -1
  267. package/dist/{renderer-BcaT2j3R.mjs → renderer-CLXpWDqx.mjs} +2 -2
  268. package/dist/{renderer-BcaT2j3R.mjs.map → renderer-CLXpWDqx.mjs.map} +1 -1
  269. package/dist/renderer-CLin7MNN.mjs +5 -0
  270. package/dist/{renderer-COcFh5bK.mjs → renderer-CLypsmiH.mjs} +3 -3
  271. package/dist/{renderer-COcFh5bK.mjs.map → renderer-CLypsmiH.mjs.map} +1 -1
  272. package/dist/renderer-CN7TypOB.mjs +5 -0
  273. package/dist/renderer-CV5Jfwq7.mjs +5 -0
  274. package/dist/renderer-Ca5E46WK.mjs +5 -0
  275. package/dist/renderer-CdbOtoOU.mjs +5 -0
  276. package/dist/renderer-CeD_bqWj.mjs +5 -0
  277. package/dist/{renderer-BnpMAub0.mjs → renderer-CfEuoZ7b.mjs} +3 -3
  278. package/dist/{renderer-BnpMAub0.mjs.map → renderer-CfEuoZ7b.mjs.map} +1 -1
  279. package/dist/renderer-CfzNNUOd.mjs +5 -0
  280. package/dist/{renderer-0W-Ty55h.mjs → renderer-Cg3h0Mz9.mjs} +3 -3
  281. package/dist/{renderer-0W-Ty55h.mjs.map → renderer-Cg3h0Mz9.mjs.map} +1 -1
  282. package/dist/renderer-Cl8TmdU8.mjs +5 -0
  283. package/dist/{renderer-CoaDDIS6.mjs → renderer-ClHqvIps.mjs} +10 -10
  284. package/dist/renderer-ClHqvIps.mjs.map +1 -0
  285. package/dist/renderer-CosBP_IM.mjs +5 -0
  286. package/dist/renderer-CpwVs5Fh.mjs +5 -0
  287. package/dist/renderer-Cq7baxNb.mjs +5 -0
  288. package/dist/{renderer-B_Oz9L3g.mjs → renderer-CqMz_iXy.mjs} +2 -2
  289. package/dist/{renderer-B_Oz9L3g.mjs.map → renderer-CqMz_iXy.mjs.map} +1 -1
  290. package/dist/{renderer-DORydJHm.mjs → renderer-CqSmfrE1.mjs} +3 -3
  291. package/dist/{renderer-DORydJHm.mjs.map → renderer-CqSmfrE1.mjs.map} +1 -1
  292. package/dist/{renderer-WTvo3wo9.d.mts → renderer-CrhJJKFY.d.mts} +5 -3
  293. package/dist/renderer-CrhJJKFY.d.mts.map +1 -0
  294. package/dist/{renderer-Bt3F1tmP.mjs → renderer-CxxwhUwy.mjs} +3 -3
  295. package/dist/{renderer-Bt3F1tmP.mjs.map → renderer-CxxwhUwy.mjs.map} +1 -1
  296. package/dist/{renderer-Cba208C9.mjs → renderer-D24aiXmB.mjs} +3 -3
  297. package/dist/{renderer-Cba208C9.mjs.map → renderer-D24aiXmB.mjs.map} +1 -1
  298. package/dist/renderer-D6GkxwAx.mjs +5 -0
  299. package/dist/renderer-D7SfGdzX.mjs +5 -0
  300. package/dist/renderer-D7wt09_l.mjs +5 -0
  301. package/dist/{renderer-CdJoOfQw.mjs → renderer-DBslE7fc.mjs} +2 -2
  302. package/dist/{renderer-CdJoOfQw.mjs.map → renderer-DBslE7fc.mjs.map} +1 -1
  303. package/dist/{renderer-Df-rf7RC.mjs → renderer-DE3Ki96C.mjs} +3 -3
  304. package/dist/{renderer-Df-rf7RC.mjs.map → renderer-DE3Ki96C.mjs.map} +1 -1
  305. package/dist/{renderer-DqIrYB0P.mjs → renderer-DJCqc98W.mjs} +3 -3
  306. package/dist/{renderer-DqIrYB0P.mjs.map → renderer-DJCqc98W.mjs.map} +1 -1
  307. package/dist/{renderer-E54Vv1_W.mjs → renderer-DODOyrty.mjs} +3 -3
  308. package/dist/{renderer-E54Vv1_W.mjs.map → renderer-DODOyrty.mjs.map} +1 -1
  309. package/dist/{renderer-DuFwDHHF.mjs → renderer-DRYxcfgi.mjs} +2 -2
  310. package/dist/renderer-DSuDMYqY.mjs +5 -0
  311. package/dist/{renderer-BGDKxfsM.mjs → renderer-DYreml_A.mjs} +3 -3
  312. package/dist/{renderer-BGDKxfsM.mjs.map → renderer-DYreml_A.mjs.map} +1 -1
  313. package/dist/{renderer-BGnMRdUK.mjs → renderer-DZJnNISO.mjs} +2 -2
  314. package/dist/{renderer-BGnMRdUK.mjs.map → renderer-DZJnNISO.mjs.map} +1 -1
  315. package/dist/renderer-DaIstCIs.mjs +5 -0
  316. package/dist/renderer-DbOD3Nc0.mjs +5 -0
  317. package/dist/{renderer-B3gQT1uq.mjs → renderer-DbenSRjl.mjs} +3 -3
  318. package/dist/{renderer-B3gQT1uq.mjs.map → renderer-DbenSRjl.mjs.map} +1 -1
  319. package/dist/{renderer-DGsWlXjl.mjs → renderer-DcXxkxds.mjs} +75 -72
  320. package/dist/renderer-DcXxkxds.mjs.map +1 -0
  321. package/dist/renderer-DdRCA1bn.mjs +6 -0
  322. package/dist/{renderer-PDs21Gsq.mjs → renderer-DdUtL-qF.mjs} +3 -3
  323. package/dist/{renderer-PDs21Gsq.mjs.map → renderer-DdUtL-qF.mjs.map} +1 -1
  324. package/dist/renderer-DfO37haf.mjs +5 -0
  325. package/dist/renderer-DjZwzxZ7.mjs +5 -0
  326. package/dist/renderer-DnAvySNy.mjs +5 -0
  327. package/dist/{renderer-BwnQRuce.mjs → renderer-DnbY04Qk.mjs} +3 -3
  328. package/dist/{renderer-BwnQRuce.mjs.map → renderer-DnbY04Qk.mjs.map} +1 -1
  329. package/dist/renderer-DnvEPm5E.mjs +5 -0
  330. package/dist/{renderer-C_-hWBF1.mjs → renderer-Do9mW_-B.mjs} +3 -3
  331. package/dist/{renderer-C_-hWBF1.mjs.map → renderer-Do9mW_-B.mjs.map} +1 -1
  332. package/dist/{renderer-PDAlUGKG.mjs → renderer-Dqg8qxjq.mjs} +3 -3
  333. package/dist/{renderer-PDAlUGKG.mjs.map → renderer-Dqg8qxjq.mjs.map} +1 -1
  334. package/dist/{renderer-wrXFfvpJ.mjs → renderer-DvkRbmb2.mjs} +3 -3
  335. package/dist/{renderer-wrXFfvpJ.mjs.map → renderer-DvkRbmb2.mjs.map} +1 -1
  336. package/dist/renderer-DwNpKnWf.mjs +5 -0
  337. package/dist/{renderer-Cv6od7Be.mjs → renderer-Dw_xy3zx.mjs} +3 -3
  338. package/dist/{renderer-Cv6od7Be.mjs.map → renderer-Dw_xy3zx.mjs.map} +1 -1
  339. package/dist/renderer-Dx3Dghus.mjs +5 -0
  340. package/dist/{renderer-lP23pU1s.mjs → renderer-DyrNti45.mjs} +3 -3
  341. package/dist/{renderer-lP23pU1s.mjs.map → renderer-DyrNti45.mjs.map} +1 -1
  342. package/dist/renderer-KvaoEwIk.mjs +5 -0
  343. package/dist/{renderer-Cw7R1U43.mjs → renderer-SwUFJ4aA.mjs} +3 -3
  344. package/dist/{renderer-Cw7R1U43.mjs.map → renderer-SwUFJ4aA.mjs.map} +1 -1
  345. package/dist/{renderer-C4Jfgjm5.mjs → renderer-XEoQnDs5.mjs} +3 -3
  346. package/dist/{renderer-C4Jfgjm5.mjs.map → renderer-XEoQnDs5.mjs.map} +1 -1
  347. package/dist/{renderer-BXGr426R.mjs → renderer-Xw9Zn3pD.mjs} +2 -2
  348. package/dist/{renderer-BXGr426R.mjs.map → renderer-Xw9Zn3pD.mjs.map} +1 -1
  349. package/dist/{renderer-BEpA2g1_.mjs → renderer-ZWIDTOLV.mjs} +2 -2
  350. package/dist/{renderer-BEpA2g1_.mjs.map → renderer-ZWIDTOLV.mjs.map} +1 -1
  351. package/dist/{renderer-D36Pjp0B.mjs → renderer-bGhRdKB7.mjs} +2 -2
  352. package/dist/{renderer-D36Pjp0B.mjs.map → renderer-bGhRdKB7.mjs.map} +1 -1
  353. package/dist/{renderer-ZarULMvJ.mjs → renderer-d4weUlVq.mjs} +2 -2
  354. package/dist/{renderer-ZarULMvJ.mjs.map → renderer-d4weUlVq.mjs.map} +1 -1
  355. package/dist/{renderer-YEDoDnsE.mjs → renderer-g7CMgD1v.mjs} +3 -3
  356. package/dist/{renderer-YEDoDnsE.mjs.map → renderer-g7CMgD1v.mjs.map} +1 -1
  357. package/dist/{renderer-CZGpETnc.mjs → renderer-gjLFqdv-.mjs} +4 -4
  358. package/dist/{renderer-CZGpETnc.mjs.map → renderer-gjLFqdv-.mjs.map} +1 -1
  359. package/dist/{renderer-H-Adf8Za.mjs → renderer-gv0u9XmU.mjs} +3 -3
  360. package/dist/{renderer-H-Adf8Za.mjs.map → renderer-gv0u9XmU.mjs.map} +1 -1
  361. package/dist/{renderer-FPYVmSf6.mjs → renderer-jJWwrha1.mjs} +3 -3
  362. package/dist/{renderer-FPYVmSf6.mjs.map → renderer-jJWwrha1.mjs.map} +1 -1
  363. package/dist/{renderer-BKhdqykZ.mjs → renderer-kl_pAczD.mjs} +3 -3
  364. package/dist/{renderer-BKhdqykZ.mjs.map → renderer-kl_pAczD.mjs.map} +1 -1
  365. package/dist/{renderer-BKL3UEzN.mjs → renderer-lrKwPhZi.mjs} +2 -2
  366. package/dist/{renderer-BKL3UEzN.mjs.map → renderer-lrKwPhZi.mjs.map} +1 -1
  367. package/dist/{renderer-C2O4nK9x.mjs → renderer-pnYj1REL.mjs} +3 -3
  368. package/dist/{renderer-C2O4nK9x.mjs.map → renderer-pnYj1REL.mjs.map} +1 -1
  369. package/dist/{renderers-CP8CFWDs-CZJ7NRsl.mjs → renderers-CP8CFWDs-CDikhBRO.mjs} +3 -3
  370. package/dist/{renderers-CP8CFWDs-CZJ7NRsl.mjs.map → renderers-CP8CFWDs-CDikhBRO.mjs.map} +1 -1
  371. package/dist/signals/index.d.mts +5 -5
  372. package/dist/signals/index.mjs +6 -6
  373. package/dist/{signals-BrNF9l9s.mjs → signals-BeAWA_1Y.mjs} +3 -3
  374. package/dist/{signals-BrNF9l9s.mjs.map → signals-BeAWA_1Y.mjs.map} +1 -1
  375. package/dist/{src-_l81YkMD.mjs → src-LYcH_X8o.mjs} +233 -27
  376. package/dist/src-LYcH_X8o.mjs.map +1 -0
  377. package/package.json +58 -58
  378. package/dist/dist-D021IFfp.mjs.map +0 -1
  379. package/dist/dist-DSKhnhDk.mjs.map +0 -1
  380. package/dist/dist-cC6nOaMR.mjs.map +0 -1
  381. package/dist/index-3Vdef2KE.d.mts.map +0 -1
  382. package/dist/index-CWG19cm-.d.mts.map +0 -1
  383. package/dist/index-ocZc12ZS.d.mts.map +0 -1
  384. package/dist/preview-engine/chunk-3SR6BI4B.mjs +0 -1
  385. package/dist/preview-engine/chunk-5NLDETDV.mjs +0 -1974
  386. package/dist/preview-engine/chunk-ALSOO22Q.mjs +0 -1
  387. package/dist/preview-engine/chunk-NKGXINCU.mjs +0 -1
  388. package/dist/preview-engine/chunk-PJMX2GFY.mjs +0 -1
  389. package/dist/preview-engine/chunk-SIXIF5QZ.mjs +0 -3
  390. package/dist/preview-engine/renderers-4CRXZJ5G.mjs +0 -1
  391. package/dist/preview-engine/renderers-5QF4OLFQ.mjs +0 -1
  392. package/dist/preview-engine/renderers-5SOW6OVE.mjs +0 -1
  393. package/dist/preview-engine/renderers-6M2HPY2J.mjs +0 -1
  394. package/dist/preview-engine/renderers-7HT5NW7W.mjs +0 -1
  395. package/dist/preview-engine/renderers-ATTGUTYY.mjs +0 -1
  396. package/dist/preview-engine/renderers-AYWCRBQC.mjs +0 -1
  397. package/dist/preview-engine/renderers-BA6ZCPI5.mjs +0 -1
  398. package/dist/preview-engine/renderers-BAS7RXTC.mjs +0 -1
  399. package/dist/preview-engine/renderers-CZTCW4FC.mjs +0 -1
  400. package/dist/preview-engine/renderers-D2XEQ2YY.mjs +0 -1
  401. package/dist/preview-engine/renderers-DFIJYBW2.mjs +0 -1
  402. package/dist/preview-engine/renderers-EJN6M6DO.mjs +0 -1
  403. package/dist/preview-engine/renderers-EK3HQUUF.mjs +0 -1
  404. package/dist/preview-engine/renderers-G34C5J27.mjs +0 -1
  405. package/dist/preview-engine/renderers-GKVTNDVH.mjs +0 -1
  406. package/dist/preview-engine/renderers-HZBYQKIQ.mjs +0 -1
  407. package/dist/preview-engine/renderers-IK7ZJJKJ.mjs +0 -1
  408. package/dist/preview-engine/renderers-ISASPH6T.mjs +0 -1
  409. package/dist/preview-engine/renderers-IT5ISWSA.mjs +0 -228
  410. package/dist/preview-engine/renderers-IW5MWDBI.mjs +0 -1
  411. package/dist/preview-engine/renderers-K2PI4WJS.mjs +0 -1
  412. package/dist/preview-engine/renderers-KESHVFL2.mjs +0 -1
  413. package/dist/preview-engine/renderers-KTZZVAB2.mjs +0 -1
  414. package/dist/preview-engine/renderers-KY5CJEOV.mjs +0 -1
  415. package/dist/preview-engine/renderers-M5W6SUQD.mjs +0 -1
  416. package/dist/preview-engine/renderers-MEM3REMI.mjs +0 -1
  417. package/dist/preview-engine/renderers-N36R42RL.mjs +0 -1
  418. package/dist/preview-engine/renderers-O5XMWFPY.mjs +0 -1
  419. package/dist/preview-engine/renderers-QJA35PKC.mjs +0 -1
  420. package/dist/preview-engine/renderers-TJIFTQHV.mjs +0 -1
  421. package/dist/preview-engine/renderers-TN4XN436.mjs +0 -1
  422. package/dist/preview-engine/renderers-UDYLCYCB.mjs +0 -1
  423. package/dist/preview-engine/renderers-WZ7SFIBZ.mjs +0 -1
  424. package/dist/preview-engine/renderers-X6QNDC6R.mjs +0 -1
  425. package/dist/preview-engine/renderers-X6RNTJOV.mjs +0 -1
  426. package/dist/preview-engine/renderers-Y3N7236P.mjs +0 -1
  427. package/dist/preview-engine/renderers-YP3ASXIJ.mjs +0 -1
  428. package/dist/preview-engine/renderers-YVJAG3PD.mjs +0 -1
  429. package/dist/preview-engine/renderers-ZPPZNMKJ.mjs +0 -1
  430. package/dist/program-W4CWO2bp.mjs.map +0 -1
  431. package/dist/renderer-8HnHWqYj.mjs +0 -5
  432. package/dist/renderer-8itujues.mjs +0 -5
  433. package/dist/renderer-BFods-7v.mjs +0 -5
  434. package/dist/renderer-BbQygRwc.mjs +0 -5
  435. package/dist/renderer-Bq_sPaCg.mjs +0 -5
  436. package/dist/renderer-BrkDrvqS.mjs +0 -5
  437. package/dist/renderer-C1diVT5Q.mjs +0 -5
  438. package/dist/renderer-C8E7ajTR.mjs +0 -5
  439. package/dist/renderer-CAz8JW5c.mjs +0 -5
  440. package/dist/renderer-CKfrUdGw.mjs +0 -5
  441. package/dist/renderer-CL0rqBA4.mjs +0 -5
  442. package/dist/renderer-COyavIEv.mjs +0 -5
  443. package/dist/renderer-CUrShvUZ.mjs +0 -5
  444. package/dist/renderer-CWvJ_GaL.mjs +0 -5
  445. package/dist/renderer-Ck0mGIo9.mjs +0 -5
  446. package/dist/renderer-CoaDDIS6.mjs.map +0 -1
  447. package/dist/renderer-CqIXqdf0.mjs +0 -5
  448. package/dist/renderer-Csod6biL.mjs +0 -5
  449. package/dist/renderer-CueO924-.mjs +0 -5
  450. package/dist/renderer-D1vM4obC.mjs +0 -5
  451. package/dist/renderer-DB7QUt90.mjs +0 -5
  452. package/dist/renderer-DGsWlXjl.mjs.map +0 -1
  453. package/dist/renderer-DLMDnKlA.mjs +0 -6
  454. package/dist/renderer-DNs7yWMr.mjs +0 -5
  455. package/dist/renderer-DOrtuoa9.mjs +0 -5
  456. package/dist/renderer-D_JgOawb.mjs +0 -5
  457. package/dist/renderer-DdLo1uoa.mjs +0 -5
  458. package/dist/renderer-DeX3JEZV.mjs +0 -5
  459. package/dist/renderer-DfgZVACG.mjs +0 -5
  460. package/dist/renderer-DoYG7Pn6.mjs +0 -5
  461. package/dist/renderer-Jwqa-BUN.mjs +0 -5
  462. package/dist/renderer-WTvo3wo9.d.mts.map +0 -1
  463. package/dist/renderer-WyaqnVMz.mjs +0 -3
  464. package/dist/renderer-Z2Vs-IqP.mjs +0 -5
  465. package/dist/renderer-ZnyCpdWE.mjs +0 -5
  466. package/dist/renderer-emCnsnTH.mjs +0 -5
  467. package/dist/renderer-ioxa4-Dy.mjs +0 -5
  468. package/dist/renderer-iyIwrDWO.mjs +0 -5
  469. package/dist/renderer-tuudA_RZ.mjs +0 -5
  470. package/dist/renderer-yyn8S821.mjs +0 -5
  471. package/dist/src-_l81YkMD.mjs.map +0 -1
@@ -10,6 +10,7 @@ var ProgrammaticSignal = class ProgrammaticSignal$1 {
10
10
  _fps;
11
11
  _durationFrames;
12
12
  _cachedFrame = -1;
13
+ _cachedContext;
13
14
  _cachedValue = 0;
14
15
  _seekedFrame = -1;
15
16
  _subscribers = /* @__PURE__ */ new Set();
@@ -49,20 +50,25 @@ var ProgrammaticSignal = class ProgrammaticSignal$1 {
49
50
  registerSignalDependency(this._subscribers);
50
51
  frameSignal.get();
51
52
  const currentFrame = ctx?.frame ?? (this._seekedFrame >= 0 ? this._seekedFrame : frameSignal.value);
52
- if (this._cachedFrame === currentFrame) return this._cachedValue;
53
53
  const fps$1 = ctx?.fps ?? this._fps;
54
54
  const time = ctx?.time ?? (fps$1 > 0 ? currentFrame / fps$1 : 0);
55
55
  const duration = ctx?.duration ?? this._durationFrames ?? 100;
56
+ const durationMs = ctx?.durationMs ?? duration / fps$1 * 1e3;
57
+ const progress = ctx?.progress ?? (duration > 0 ? currentFrame / duration : 0);
58
+ const deltaTime = ctx?.deltaTime ?? (fps$1 > 0 ? 1 / fps$1 : .0416);
56
59
  const resolvedCtx = {
57
60
  frame: currentFrame,
58
61
  fps: fps$1,
59
62
  time,
60
63
  duration,
61
- durationMs: ctx?.durationMs ?? duration / fps$1 * 1e3,
62
- progress: duration > 0 ? currentFrame / duration : 0,
63
- deltaTime: ctx?.deltaTime ?? (fps$1 > 0 ? 1 / fps$1 : .0416)
64
+ durationMs,
65
+ progress,
66
+ deltaTime
64
67
  };
68
+ const cached = this._cachedContext;
69
+ if (this._cachedFrame === currentFrame && cached && cached.fps === fps$1 && cached.time === time && cached.duration === duration && cached.durationMs === durationMs && cached.progress === progress && cached.deltaTime === deltaTime) return this._cachedValue;
65
70
  this._cachedFrame = currentFrame;
71
+ this._cachedContext = resolvedCtx;
66
72
  this._cachedValue = this._evaluator(resolvedCtx);
67
73
  return this._cachedValue;
68
74
  }
@@ -437,6 +443,7 @@ var FrameArraySignalImpl = class {
437
443
  fps;
438
444
  _samples;
439
445
  _cachedFrame = -1;
446
+ _cachedFps = 0;
440
447
  _cachedValue = 0;
441
448
  _seekedFrame = -1;
442
449
  _subscribers = /* @__PURE__ */ new Set();
@@ -456,13 +463,14 @@ var FrameArraySignalImpl = class {
456
463
  }
457
464
  frameSignal.get();
458
465
  const currentFrame = ctx?.frame ?? (this._seekedFrame >= 0 ? this._seekedFrame : frameSignal.value);
459
- if (this._cachedFrame === currentFrame) return this._cachedValue;
466
+ const compFps = ctx?.fps ?? this.fps;
467
+ if (this._cachedFrame === currentFrame && this._cachedFps === compFps) return this._cachedValue;
460
468
  this._cachedFrame = currentFrame;
469
+ this._cachedFps = compFps;
461
470
  if (!this._samples || this._samples.length === 0) {
462
471
  this._cachedValue = 0;
463
472
  return 0;
464
473
  }
465
- const compFps = ctx?.fps ?? this.fps;
466
474
  const targetFrame = compFps !== this.fps && compFps > 0 ? currentFrame / compFps * this.fps : currentFrame;
467
475
  const idx = Math.max(0, Math.min(this._samples.length - 1, Math.round(targetFrame)));
468
476
  this._cachedValue = Number(this._samples[idx]) || 0;
@@ -474,6 +482,7 @@ var FrameArraySignalImpl = class {
474
482
  seekFrame(frame$1) {
475
483
  this._seekedFrame = frame$1;
476
484
  this._cachedFrame = frame$1;
485
+ this._cachedFps = this.fps;
477
486
  if (!this._samples || this._samples.length === 0) this._cachedValue = 0;
478
487
  else {
479
488
  const idx = Math.max(0, Math.min(this._samples.length - 1, Math.round(frame$1)));
@@ -733,6 +742,413 @@ var ModerationUnrefundableError = class extends Error {
733
742
  const generateId = (size) => {
734
743
  return nanoid(size);
735
744
  };
745
+ /**
746
+ * Sample a signal at every composition-frame boundary in layer order.
747
+ * Values between boundaries are linearly interpolated; speeds are integrated
748
+ * analytically, so picture and audio can query the same fractional frame.
749
+ */
750
+ function sampleMediaSignal(options) {
751
+ const recorder = new MediaSignalRecorder(options);
752
+ for (let i = 0; i <= options.durationFrames; i++) {
753
+ const frame$1 = options.startFrame + i;
754
+ recorder.record(frame$1, options.sample(frame$1));
755
+ }
756
+ return recorder.finish();
757
+ }
758
+ /** Sample an engine signal with its composition clock and full frame context. */
759
+ function sampleFrameMediaSignal(options) {
760
+ const { fps: fps$1, compositionDurationFrames, signal: signal$1 } = options;
761
+ if (!Number.isInteger(compositionDurationFrames) || compositionDurationFrames <= 0) throw new Error("Invalid composition duration");
762
+ return sampleMediaSignal({
763
+ ...options,
764
+ sample: (frame$1) => signal$1.get(compositionFrameContext(frame$1, fps$1, compositionDurationFrames))
765
+ });
766
+ }
767
+ /** The frame context a composition-clock signal sees at a composition frame. */
768
+ function compositionFrameContext(frame$1, fps$1, compositionDurationFrames) {
769
+ return {
770
+ frame: frame$1,
771
+ fps: fps$1,
772
+ time: frame$1 / fps$1,
773
+ duration: compositionDurationFrames / fps$1,
774
+ durationMs: compositionDurationFrames / fps$1 * 1e3,
775
+ progress: Math.min(1, frame$1 / compositionDurationFrames),
776
+ deltaTime: 1 / fps$1
777
+ };
778
+ }
779
+ /** Evaluate at any fractional local frame, independent of query order. */
780
+ function sampledMediaSourceTime(map, frame$1) {
781
+ if (!Number.isFinite(frame$1)) throw new Error("Invalid media signal frame");
782
+ const max = map.values.length - 1;
783
+ const f = Math.max(0, Math.min(max, frame$1));
784
+ const i = Math.min(Math.floor(f), max - 1);
785
+ const t = f - i;
786
+ const a = map.values[i];
787
+ const b = map.values[i + 1];
788
+ if (map.mode === "source-time") return a * (1 - t) + b * t;
789
+ return map.positions[i] + (a * (t - t * t / 2) + b * (t * t / 2)) / map.fps;
790
+ }
791
+ /** Range includes direction changes inside a speed-signal interval. */
792
+ function sampledMediaSourceRange(map, from, to) {
793
+ if (!Number.isFinite(from) || !Number.isFinite(to)) throw new Error("Invalid media signal range");
794
+ const endFrame = map.values.length - 1;
795
+ const start = Math.max(0, Math.min(endFrame, Math.min(from, to)));
796
+ const end = Math.max(0, Math.min(endFrame, Math.max(from, to)));
797
+ let min = sampledMediaSourceTime(map, start);
798
+ let max = min;
799
+ let maxIncluded = start < end;
800
+ const add = (frame$1) => {
801
+ const value = sampledMediaSourceTime(map, frame$1);
802
+ min = Math.min(min, value);
803
+ if (value > max) {
804
+ max = value;
805
+ maxIncluded = frame$1 < end;
806
+ } else if (value === max && frame$1 < end) maxIncluded = true;
807
+ };
808
+ add(end);
809
+ for (let i = Math.floor(start); i < end; i++) {
810
+ if (i > start) add(i);
811
+ if (map.mode === "speed") {
812
+ const a = map.values[i], b = map.values[i + 1];
813
+ if (a < 0 && b > 0 || a > 0 && b < 0) {
814
+ const halfA = Math.abs(a) / 2;
815
+ const turn = i + halfA / (halfA + Math.abs(b) / 2);
816
+ if (turn > start && turn < end) add(turn);
817
+ }
818
+ }
819
+ }
820
+ return {
821
+ min,
822
+ max,
823
+ maxIncluded
824
+ };
825
+ }
826
+ /**
827
+ * Records a live signal at each composition-frame boundary, so its history can
828
+ * be replayed for audio, seeks and vision without evaluating it a second time.
829
+ * With a sampler, boundaries are evaluated on demand, but never past the
830
+ * frame the composition has reached ({@link advance}): no look-ahead.
831
+ */
832
+ var MediaSignalRecorder = class {
833
+ values;
834
+ positions;
835
+ recorded = 0;
836
+ evaluating = false;
837
+ horizon = -1;
838
+ sampler;
839
+ check;
840
+ startFrame;
841
+ durationFrames;
842
+ fps;
843
+ mode;
844
+ constructor(options) {
845
+ if (!Number.isFinite(options.fps) || options.fps <= 0 || !Number.isInteger(options.startFrame) || options.startFrame < 0 || !Number.isInteger(options.durationFrames) || options.durationFrames <= 0) throw new Error("Invalid media signal timing");
846
+ const start = options.sourceStartSec ?? 0;
847
+ if (!Number.isFinite(start) || start < 0) throw new Error("Invalid media signal source start");
848
+ this.mode = options.mode;
849
+ this.fps = options.fps;
850
+ this.startFrame = options.startFrame;
851
+ this.durationFrames = options.durationFrames;
852
+ this.sampler = options.sample;
853
+ this.values = new Float64Array(options.durationFrames + 1);
854
+ if (options.mode === "speed") {
855
+ this.positions = new Float64Array(options.durationFrames + 1);
856
+ this.positions[0] = start;
857
+ }
858
+ }
859
+ /** The first composition frame whose boundary is not yet recorded. */
860
+ get nextFrame() {
861
+ return this.startFrame + this.recorded;
862
+ }
863
+ get complete() {
864
+ return this.recorded === this.values.length;
865
+ }
866
+ /** Allow on-demand sampling through a composition frame the clock has reached. */
867
+ advance(frame$1) {
868
+ if (frame$1 > this.horizon) this.horizon = frame$1;
869
+ }
870
+ /**
871
+ * Validate source bounds as history arrives: the recorded part now, each
872
+ * further interval as it is recorded.
873
+ */
874
+ checkRange(check) {
875
+ this.check = check;
876
+ if (this.recorded > 1) check(this.range(0, this.recorded - 1));
877
+ }
878
+ /** Each boundary is recorded once in composition-frame order. */
879
+ record(frame$1, value) {
880
+ const index = frame$1 - this.startFrame;
881
+ if (!Number.isInteger(frame$1) || index < 0 || index > this.durationFrames) throw new Error(`Media signal frame ${frame$1} is outside the layer`);
882
+ if (!Number.isFinite(value)) throw new Error(`Non-finite media signal at composition frame ${frame$1}`);
883
+ if (index < this.recorded) {
884
+ if (this.values[index] !== value) throw new Error(`Media signal frame ${frame$1} was already recorded with a different value`);
885
+ return;
886
+ }
887
+ if (index !== this.recorded) throw new Error(`Media signal frame ${frame$1} was recorded out of order`);
888
+ this.values[index] = value;
889
+ if (this.positions && index > 0) {
890
+ const position = this.positions[index - 1] + (this.values[index - 1] / 2 + value / 2) / this.fps;
891
+ if (!Number.isFinite(position)) throw new Error(`Media signal integration overflow at composition frame ${frame$1}`);
892
+ this.positions[index] = position;
893
+ }
894
+ if (this.check && index > 0) this.check(this.interval(index - 1));
895
+ this.recorded++;
896
+ }
897
+ /**
898
+ * Evaluate a boundary once, reporting recursive time dependencies. A
899
+ * boundary already recorded is kept, and `sample` is not called again.
900
+ */
901
+ recordFrom(frame$1, sample) {
902
+ if (this.evaluating) throw new Error(`Circular media signal dependency at composition frame ${frame$1}`);
903
+ if (frame$1 - this.startFrame < this.recorded) return;
904
+ this.evaluating = true;
905
+ try {
906
+ this.record(frame$1, sample());
907
+ } finally {
908
+ this.evaluating = false;
909
+ }
910
+ }
911
+ /** Sample every boundary through `frame` that the clock has reached. */
912
+ ensure(frame$1) {
913
+ const sampler = this.sampler;
914
+ if (!sampler) return;
915
+ const last = Math.min(frame$1, this.horizon, this.startFrame + this.durationFrames);
916
+ if (this.evaluating && frame$1 >= this.nextFrame) throw new Error(`Circular media signal dependency at composition frame ${this.nextFrame}`);
917
+ for (let f = this.nextFrame; f <= last; f++) this.recordFrom(f, () => sampler(f));
918
+ }
919
+ /**
920
+ * Close a layer that outlives the clock: the boundaries past the last
921
+ * rendered frame hold the last recorded value.
922
+ */
923
+ close() {
924
+ if (this.recorded === 0) throw new Error("Media signal history has no recorded frames");
925
+ const last = this.values[this.recorded - 1];
926
+ while (!this.complete) this.record(this.nextFrame, last);
927
+ }
928
+ /** The known source position at an already-recorded frame boundary. */
929
+ at(frame$1) {
930
+ this.ensure(frame$1);
931
+ const index = frame$1 - this.startFrame;
932
+ if (!Number.isInteger(frame$1) || index < 0 || index >= this.recorded) throw new Error(`Media signal frame ${frame$1} has not been recorded`);
933
+ return this.positions ? this.positions[index] : this.values[index];
934
+ }
935
+ /** Read a recorded local frame, including fractional audio sample positions. */
936
+ sourceTime(localFrame) {
937
+ if (Number.isFinite(localFrame)) this.ensure(this.startFrame + Math.ceil(localFrame));
938
+ if (!Number.isFinite(localFrame) || localFrame < 0 || localFrame > this.recorded - 1) throw new Error(`Media signal local frame ${localFrame} has not been recorded`);
939
+ if (Number.isInteger(localFrame)) return this.at(this.startFrame + localFrame);
940
+ const i = Math.floor(localFrame);
941
+ const t = localFrame - i;
942
+ const a = this.values[i];
943
+ const b = this.values[i + 1];
944
+ return this.positions ? this.positions[i] + (a * (t - t * t / 2) + b * (t * t / 2)) / this.fps : a * (1 - t) + b * t;
945
+ }
946
+ /** Read the instantaneous speed for an interval whose endpoints are known. */
947
+ rate(localFrame) {
948
+ const i = this.knownInterval(localFrame);
949
+ const a = this.values[i];
950
+ const b = this.values[i + 1];
951
+ const t = localFrame - i;
952
+ return this.positions ? a * (1 - t) + b * t : (b - a) * this.fps;
953
+ }
954
+ isHold(localFrame) {
955
+ const i = this.knownInterval(localFrame);
956
+ return this.positions ? this.values[i] === 0 && this.values[i + 1] === 0 : this.values[i] === this.values[i + 1];
957
+ }
958
+ range(from, to) {
959
+ if (Number.isFinite(from) && Number.isFinite(to)) this.ensure(this.startFrame + Math.ceil(Math.max(from, to)));
960
+ if (!Number.isFinite(from) || !Number.isFinite(to) || from < 0 || to < 0 || Math.max(from, to) > this.recorded - 1) throw new Error("Media signal range has not been recorded");
961
+ if (this.recorded === 1) {
962
+ const value = this.sourceTime(0);
963
+ return {
964
+ min: value,
965
+ max: value,
966
+ maxIncluded: false
967
+ };
968
+ }
969
+ return sampledMediaSourceRange(this.history(0, this.recorded), from, to);
970
+ }
971
+ /** A self-contained snapshot, available only when every boundary was recorded. */
972
+ finish() {
973
+ if (!this.complete) throw new Error("Media signal history is incomplete");
974
+ const values = this.values.slice();
975
+ return this.positions ? {
976
+ mode: "speed",
977
+ fps: this.fps,
978
+ values,
979
+ positions: this.positions.slice()
980
+ } : {
981
+ mode: "source-time",
982
+ fps: this.fps,
983
+ values
984
+ };
985
+ }
986
+ knownInterval(localFrame) {
987
+ const i = Math.floor(localFrame);
988
+ if (Number.isFinite(localFrame)) this.ensure(this.startFrame + i + 1);
989
+ if (!Number.isFinite(localFrame) || i < 0 || i + 1 >= this.recorded) throw new Error(`Media signal interval ${localFrame} has not been recorded`);
990
+ return i;
991
+ }
992
+ /** Bounds of the interval starting at boundary `i`, its end exclusive. */
993
+ interval(i) {
994
+ return sampledMediaSourceRange(this.history(i, i + 2), 0, 1);
995
+ }
996
+ history(from, to) {
997
+ const values = this.values.subarray(from, to);
998
+ return this.positions ? {
999
+ mode: "speed",
1000
+ fps: this.fps,
1001
+ values,
1002
+ positions: this.positions.subarray(from, to)
1003
+ } : {
1004
+ mode: "source-time",
1005
+ fps: this.fps,
1006
+ values
1007
+ };
1008
+ }
1009
+ };
1010
+ /** Maps layer-local frames to absolute source seconds. */
1011
+ const MediaTimeRemapSchema = z.discriminatedUnion("kind", [z.object({
1012
+ kind: z.literal("rate"),
1013
+ sourceStartSec: z.number().finite().nonnegative(),
1014
+ rate: z.number().finite().refine((v) => v !== 0, "rate must not be zero")
1015
+ }).strict(), z.object({
1016
+ kind: z.literal("keyframes"),
1017
+ keyframes: z.array(z.object({
1018
+ frame: z.number().int().nonnegative(),
1019
+ sourceSec: z.number().finite().nonnegative(),
1020
+ interpolation: z.enum([
1021
+ "linear",
1022
+ "ease-in",
1023
+ "ease-out",
1024
+ "smooth"
1025
+ ]).optional()
1026
+ }).strict()).min(2)
1027
+ }).strict()]);
1028
+ const MediaTimeSignalRemapSchema = z.object({
1029
+ kind: z.literal("signal"),
1030
+ mode: z.enum(["speed", "source-time"]),
1031
+ signal: z.union([z.string().min(1), z.custom(isSignal, "signal must be a Signal or the name of a composition signal")]),
1032
+ sourceStartSec: z.number().finite().nonnegative().optional()
1033
+ }).strict();
1034
+ const MediaTimeRemapInputSchema = z.discriminatedUnion("kind", [...MediaTimeRemapSchema.options, MediaTimeSignalRemapSchema]);
1035
+ function assertSampledFps(history, fps$1) {
1036
+ if (history.fps !== fps$1) throw new Error(`Media signal history fps ${history.fps} does not match composition fps ${fps$1}`);
1037
+ }
1038
+ /** Validate the map against its explicit, exclusive layer duration. */
1039
+ function validateMediaTimeRemap(map, durationFrames) {
1040
+ if (!Number.isInteger(durationFrames) || durationFrames <= 0) return "durationFrames must be a positive integer";
1041
+ if (map.kind === "signal") return map.mode === "source-time" && map.sourceStartSec !== void 0 ? "sourceStartSec applies only to speed signals" : void 0;
1042
+ if (map.kind === "rate") return;
1043
+ const keys = map.keyframes;
1044
+ if (keys.length < 2 || keys[0].frame !== 0 || keys[keys.length - 1].frame !== durationFrames) return "time remap keyframes must start at frame 0 and end at durationFrames";
1045
+ for (let i = 1; i < keys.length; i++) if (keys[i].frame <= keys[i - 1].frame) return "time remap keyframes must have strictly increasing frames";
1046
+ }
1047
+ /** Find the segment containing a layer-local frame. */
1048
+ function segmentIndex(map, frame$1) {
1049
+ let lo = 0;
1050
+ let hi = map.keyframes.length - 1;
1051
+ while (hi - lo > 1) {
1052
+ const mid = Math.floor((lo + hi) / 2);
1053
+ if (map.keyframes[mid].frame <= frame$1) lo = mid;
1054
+ else hi = mid;
1055
+ }
1056
+ return lo;
1057
+ }
1058
+ /** Evaluate the monotonic easing assigned to the starting keyframe. */
1059
+ function shapeTime(t, interpolation) {
1060
+ switch (interpolation) {
1061
+ case "ease-in": return t * t;
1062
+ case "ease-out": return 1 - (1 - t) * (1 - t);
1063
+ case "smooth": return t * t * (3 - 2 * t);
1064
+ default: return t;
1065
+ }
1066
+ }
1067
+ /** Absolute source seconds at a fractional layer-local frame. */
1068
+ function mediaSourceTime(map, localFrame, fps$1) {
1069
+ if (!Number.isFinite(localFrame) || !Number.isFinite(fps$1) || fps$1 <= 0) throw new Error("Invalid media time or fps");
1070
+ if (map.kind === "recorded") {
1071
+ if (map.recorder.fps !== fps$1) throw new Error("Media signal recorder fps does not match composition fps");
1072
+ return map.recorder.sourceTime(localFrame);
1073
+ }
1074
+ if (map.kind === "sampled") {
1075
+ assertSampledFps(map.history, fps$1);
1076
+ return sampledMediaSourceTime(map.history, localFrame);
1077
+ }
1078
+ if (map.kind === "rate") return map.sourceStartSec + localFrame / fps$1 * map.rate;
1079
+ const keys = map.keyframes;
1080
+ if (keys.length < 2) throw new Error("Time remap needs at least two keyframes");
1081
+ if (localFrame <= keys[0].frame) return keys[0].sourceSec;
1082
+ if (localFrame >= keys[keys.length - 1].frame) return keys[keys.length - 1].sourceSec;
1083
+ const i = segmentIndex(map, localFrame);
1084
+ const a = keys[i];
1085
+ const b = keys[i + 1];
1086
+ const t = (localFrame - a.frame) / (b.frame - a.frame);
1087
+ return a.sourceSec + (b.sourceSec - a.sourceSec) * shapeTime(t, a.interpolation ?? "linear");
1088
+ }
1089
+ /** True only for a constant source-time interval, not a ramp with zero instantaneous velocity. */
1090
+ function mediaSourceIsHold(map, frame$1) {
1091
+ if (map.kind === "rate") return false;
1092
+ if (map.kind === "recorded") return map.recorder.isHold(frame$1);
1093
+ if (map.kind === "sampled") {
1094
+ const values = map.history.values;
1095
+ const i$1 = Math.max(0, Math.min(values.length - 2, Math.floor(frame$1)));
1096
+ return map.history.mode === "speed" ? values[i$1] === 0 && values[i$1 + 1] === 0 : values[i$1] === values[i$1 + 1];
1097
+ }
1098
+ const i = segmentIndex(map, frame$1);
1099
+ return map.keyframes[i].sourceSec === map.keyframes[i + 1].sourceSec;
1100
+ }
1101
+ /** Source seconds per output second at a layer-local frame. */
1102
+ function mediaSourceRate(map, frame$1, fps$1) {
1103
+ if (map.kind === "rate") return map.rate;
1104
+ if (map.kind === "recorded") {
1105
+ if (map.recorder.fps !== fps$1) throw new Error("Media signal recorder fps does not match composition fps");
1106
+ return map.recorder.rate(frame$1);
1107
+ }
1108
+ if (map.kind === "sampled") {
1109
+ assertSampledFps(map.history, fps$1);
1110
+ const values = map.history.values;
1111
+ const i$1 = Math.max(0, Math.min(values.length - 2, Math.floor(frame$1)));
1112
+ const t$1 = Math.max(0, Math.min(1, frame$1 - i$1));
1113
+ return map.history.mode === "speed" ? values[i$1] * (1 - t$1) + values[i$1 + 1] * t$1 : (values[i$1 + 1] - values[i$1]) * map.history.fps;
1114
+ }
1115
+ const i = segmentIndex(map, frame$1);
1116
+ const a = map.keyframes[i];
1117
+ const b = map.keyframes[i + 1];
1118
+ const t = Math.max(0, Math.min(1, (frame$1 - a.frame) / (b.frame - a.frame)));
1119
+ const derivative = a.interpolation === "ease-in" ? 2 * t : a.interpolation === "ease-out" ? 2 * (1 - t) : a.interpolation === "smooth" ? 6 * t * (1 - t) : 1;
1120
+ return (b.sourceSec - a.sourceSec) / (b.frame - a.frame) * fps$1 * derivative;
1121
+ }
1122
+ /** Bounds over a local-frame interval, including intermediate turns. */
1123
+ function mediaSourceRange(map, fromFrame, toFrame, fps$1) {
1124
+ if (map.kind === "recorded") {
1125
+ if (map.recorder.fps !== fps$1) throw new Error("Media signal recorder fps does not match composition fps");
1126
+ return map.recorder.range(fromFrame, toFrame);
1127
+ }
1128
+ if (map.kind === "sampled") {
1129
+ assertSampledFps(map.history, fps$1);
1130
+ return sampledMediaSourceRange(map.history, fromFrame, toFrame);
1131
+ }
1132
+ const start = Math.min(fromFrame, toFrame), end = Math.max(fromFrame, toFrame);
1133
+ const first = mediaSourceTime(map, start, fps$1);
1134
+ const last = mediaSourceTime(map, end, fps$1);
1135
+ let min = Math.min(first, last);
1136
+ let max = Math.max(first, last);
1137
+ let maxIncluded = start < end && first === max;
1138
+ if (map.kind === "keyframes") for (const key of map.keyframes) {
1139
+ if (key.frame <= start || key.frame >= end) continue;
1140
+ min = Math.min(min, key.sourceSec);
1141
+ if (key.sourceSec > max) {
1142
+ max = key.sourceSec;
1143
+ maxIncluded = true;
1144
+ } else if (key.sourceSec === max) maxIncluded = true;
1145
+ }
1146
+ return {
1147
+ min,
1148
+ max,
1149
+ maxIncluded
1150
+ };
1151
+ }
736
1152
  const HandleDefinitionSchema = z$1.object({
737
1153
  dataTypes: z$1.custom(),
738
1154
  label: z$1.string(),
@@ -2162,6 +2578,26 @@ const Color = {
2162
2578
  }
2163
2579
  };
2164
2580
  /**
2581
+ * How a grapheme presents, after Unicode's emoji presentation rules
2582
+ * (UTS #51): as a color emoji, as text, or as text when the text font has
2583
+ * the glyph. Layout and the emoji preload use it, and so does the
2584
+ * `missing_emoji_font` lint, so they agree on which characters need the
2585
+ * color emoji font.
2586
+ */
2587
+ /** Default emoji presentation (✅ ⚡ 🚀), a skin tone, or a keycap. */
2588
+ const EMOJI_STYLE = /\p{Emoji_Presentation}|\p{Emoji_Modifier}|⃣/u;
2589
+ /** Pictographs that can be emoji (❤ ✈ © ™ ✔): emoji only when asked for. */
2590
+ const PICTOGRAPHIC = /\p{Extended_Pictographic}/u;
2591
+ /** A pictograph followed by VS16 asks for emoji presentation (❤️). */
2592
+ const VS16_AFTER_PICTOGRAPH = /\p{Extended_Pictographic}️/u;
2593
+ const VS15 = "︎";
2594
+ const ZWJ = "‍";
2595
+ function emojiPresentation(grapheme) {
2596
+ if (grapheme.includes(VS15)) return "text";
2597
+ if (EMOJI_STYLE.test(grapheme) || VS16_AFTER_PICTOGRAPH.test(grapheme) || grapheme.includes(ZWJ) && PICTOGRAPHIC.test(grapheme)) return "emoji";
2598
+ return PICTOGRAPHIC.test(grapheme) ? "either" : "text";
2599
+ }
2600
+ /**
2165
2601
  * CSS gradients (`linear-gradient`, `radial-gradient`, `conic-gradient`) as
2166
2602
  * values for any `background` or shape `fill`, plus `Gradient` helpers that
2167
2603
  * write them. Colors blend perceptually (OKLab), not through muddy sRGB.
@@ -2620,5 +3056,5 @@ function extractSvgDimensions(buffer) {
2620
3056
  }
2621
3057
 
2622
3058
  //#endregion
2623
- export { TimelineTransformSchema as $, parseCssGradient as $t, MIME_TYPES as A, getFingerprint as At, OutputItemSchema as B, isFrameIndex as Bt, FileDataSchema as C, fps as Ct, HandleTypeVal as D, generateId as Dt, Gradient as E, frameSignal as Et, ModerationUnrefundableError as F, handleId as Ft, SignalGateDataSchema as G, limitGradientStops as Gt, Signal as H, isSignal as Ht, MultiOutputGenericSchema as I, handleLabel as It, SingleOutputGenericSchema as J, nodeId as Jt, SignalMathDataSchema as K, mixColors as Kt, NodeMetadataSchema as L, hasOnlySingleSource as Lt, MediaOperationSchema as M, getMediaType as Mt, MediaSourceSchema as N, getRenderFingerprint as Nt, JsonValueSchema as O, getActiveMediaMetadata as Ot, ModerationError as P, gradientStopsToOklab as Pt, TimelineSegmentSchema as Q, parseCssColor as Qt, NodeResultSchema as R, isCssGradient as Rt, FileAssetSchema as S, formatHex as St, GlobalCompositeOperation as T, frameArraySignal as Tt, SignalChannelMetaSchema as U, isValueSignal as Ut, ProgrammaticSignal as V, isNormalized as Vt, SignalDataSchema as W, isVirtualMediaData as Wt, TEXT_LAYER_DEFAULTS as X, normalized as Xt, SourceOperationSchema as Y, normalizeColorStops as Yt, TextOperationSchema as Z, oklabToRgb as Zt, DataTypeVal as _, sineSignal as _n, dataTypeColors as _t, BaseVideoLayerPropsSchema as a, reportRenderDiagnostic as an, VideoStylePropsSchema as at, ExportResultSchema as b, timeSignal as bn, extractSvgDimensions as bt, COMPOSITOR_DEFAULTS as c, resolveNumber as cn, VirtualMediaDataSchema as ct, ConfigSchemaRegistry as d, rgbToOklab as dn, checkNodeResultCache as dt, pixels as en, TransitionSchema as et, DATA_TYPE_EXTENSIONS as f, sampleColorStops as fn, computeVideoCropRenderProps as ft, DataType as g, signalBuilder as gn, createVirtualMedia as gt, DEFAULT_MEDIA_DIMENSION as h, signal as hn, createOutputItemSchema as ht, BaseMediaOperationPropsSchema as i, registerSignalDependency as in, VideoSpatialPropsSchema as it, MediaMetadataSchema as j, getLeafMediaType as jt, MAX_GRADIENT_STOPS as k, getFileDataMetadata as kt, Color as l, resolveParam as ln, appendOperation as lt, DEFAULT_FPS as m, serializeSignalData as mn, cosineSignal as mt, AnyOutputUnionSchema as n, progressSignal as nn, VideoAnimationSchema as nt, CAPTION_LAYER_DEFAULTS as o, resolveBoolean as on, VideoTextPropsSchema as ot, DEFAULT_DURATION_MS as p, seconds as pn, computed as pt, SignalStatsSchema as q, ms as qt, AudioExtractorSignalDataSchema as r, radians as rn, VideoLayerTypeSchema as rt, COMPOSITE_OPERATIONS as s, resolveMediaMimeType as sn, VideoTimingPropsSchema as st, AnimationTypeSchema as t, programmaticSignal as tn, TransitionTypeSchema as tt, ConfigHandleSchema as u, resolveString as un, assertNever as ut, DataTypes as v, stampResult as vn, degrees as vt, GeneratorSignalDataSchema as w, frame as wt, ExtendedLayerSchema as x, updateClockSignals as xn, findSourceAsset as xt, Effect as y, takeRenderDiagnostics as yn, deserializeSignalData as yt, NodeVisualConfigSchema as z, isEqual as zt };
2624
- //# sourceMappingURL=dist-D021IFfp.mjs.map
3059
+ export { SourceOperationSchema as $, mediaSourceRange as $t, MIME_TYPES as A, signalBuilder as An, frame as At, MultiOutputGenericSchema as B, gradientStopsToOklab as Bt, FileDataSchema as C, sampleFrameMediaSignal as Cn, degrees as Ct, HandleTypeVal as D, seconds as Dn, findSourceAsset as Dt, Gradient as E, sampledMediaSourceTime as En, extractSvgDimensions as Et, MediaTimeRemapInputSchema as F, updateClockSignals as Fn, getFileDataMetadata as Ft, ProgrammaticSignal as G, isEqual as Gt, NodeResultSchema as H, handleLabel as Ht, MediaTimeRemapSchema as I, validateMediaTimeRemap as In, getFingerprint as It, SignalDataSchema as J, isSignal as Jt, Signal as K, isFrameIndex as Kt, MediaTimeSignalRemapSchema as L, getLeafMediaType as Lt, MediaOperationSchema as M, stampResult as Mn, frameSignal as Mt, MediaSignalRecorder as N, takeRenderDiagnostics as Nn, generateId as Nt, JsonValueSchema as O, serializeSignalData as On, formatHex as Ot, MediaSourceSchema as P, timeSignal as Pn, getActiveMediaMetadata as Pt, SingleOutputGenericSchema as Q, mediaSourceIsHold as Qt, ModerationError as R, getMediaType as Rt, FileAssetSchema as S, sampleColorStops as Sn, dataTypeColors as St, GlobalCompositeOperation as T, sampledMediaSourceRange as Tn, emojiPresentation as Tt, NodeVisualConfigSchema as U, hasOnlySingleSource as Ut, NodeMetadataSchema as V, handleId as Vt, OutputItemSchema as W, isCssGradient as Wt, SignalMathDataSchema as X, isVirtualMediaData as Xt, SignalGateDataSchema as Y, isValueSignal as Yt, SignalStatsSchema as Z, limitGradientStops as Zt, DataTypeVal as _, resolveMediaMimeType as _n, computeVideoCropRenderProps as _t, BaseVideoLayerPropsSchema as a, normalizeColorStops as an, TransitionTypeSchema as at, ExportResultSchema as b, resolveString as bn, createOutputItemSchema as bt, COMPOSITOR_DEFAULTS as c, parseCssColor as cn, VideoSpatialPropsSchema as ct, ConfigSchemaRegistry as d, programmaticSignal as dn, VideoTimingPropsSchema as dt, mediaSourceRate as en, TEXT_LAYER_DEFAULTS as et, DATA_TYPE_EXTENSIONS as f, progressSignal as fn, VirtualMediaDataSchema as ft, DataType as g, resolveBoolean as gn, compositionFrameContext as gt, DEFAULT_MEDIA_DIMENSION as h, reportRenderDiagnostic as hn, checkNodeResultCache as ht, BaseMediaOperationPropsSchema as i, nodeId as in, TransitionSchema as it, MediaMetadataSchema as j, sineSignal as jn, frameArraySignal as jt, MAX_GRADIENT_STOPS as k, signal as kn, fps as kt, Color as l, parseCssGradient as ln, VideoStylePropsSchema as lt, DEFAULT_FPS as m, registerSignalDependency as mn, assertNever as mt, AnyOutputUnionSchema as n, mixColors as nn, TimelineSegmentSchema as nt, CAPTION_LAYER_DEFAULTS as o, normalized as on, VideoAnimationSchema as ot, DEFAULT_DURATION_MS as p, radians as pn, appendOperation as pt, SignalChannelMetaSchema as q, isNormalized as qt, AudioExtractorSignalDataSchema as r, ms as rn, TimelineTransformSchema as rt, COMPOSITE_OPERATIONS as s, oklabToRgb as sn, VideoLayerTypeSchema as st, AnimationTypeSchema as t, mediaSourceTime as tn, TextOperationSchema as tt, ConfigHandleSchema as u, pixels as un, VideoTextPropsSchema as ut, DataTypes as v, resolveNumber as vn, computed as vt, GeneratorSignalDataSchema as w, sampleMediaSignal as wn, deserializeSignalData as wt, ExtendedLayerSchema as x, rgbToOklab as xn, createVirtualMedia as xt, Effect as y, resolveParam as yn, cosineSignal as yt, ModerationUnrefundableError as z, getRenderFingerprint as zt };
3060
+ //# sourceMappingURL=dist-BRXsfWKQ.mjs.map