framefields 2.5.5 → 2.6.1

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 (296) hide show
  1. package/README.md +11 -0
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-C9euVW4K.mjs → audio-CYrO9q9P.mjs} +3 -3
  4. package/dist/{audio-C9euVW4K.mjs.map → audio-CYrO9q9P.mjs.map} +1 -1
  5. package/dist/cli.mjs +866 -16
  6. package/dist/cli.mjs.map +1 -1
  7. package/dist/components/index.d.mts +2 -2
  8. package/dist/components/index.mjs +43 -43
  9. package/dist/{dist-DBdxM6xv.mjs → dist-DSKhnhDk.mjs} +3 -3
  10. package/dist/dist-DSKhnhDk.mjs.map +1 -0
  11. package/dist/{dist-BuirkW-f.mjs → dist-cC6nOaMR.mjs} +11 -3
  12. package/dist/dist-cC6nOaMR.mjs.map +1 -0
  13. package/dist/effects/index.mjs +34 -34
  14. package/dist/{effects-B263lgUi.mjs → effects-Dvdwndk0.mjs} +2 -2
  15. package/dist/{effects-B263lgUi.mjs.map → effects-Dvdwndk0.mjs.map} +1 -1
  16. package/dist/fonts/index.d.mts +1 -1
  17. package/dist/fonts/index.mjs +2 -2
  18. package/dist/{fonts-DNx6ps2p.mjs → fonts-B6a4CyoM.mjs} +7 -3
  19. package/dist/fonts-B6a4CyoM.mjs.map +1 -0
  20. package/dist/{gpu-BRBIoxMC.mjs → gpu-CrQADlcf.mjs} +2 -2
  21. package/dist/{gpu-BRBIoxMC.mjs.map → gpu-CrQADlcf.mjs.map} +1 -1
  22. package/dist/index-3Vdef2KE.d.mts.map +1 -1
  23. package/dist/{index-N1tMc5Z9.d.mts → index-CWG19cm-.d.mts} +821 -393
  24. package/dist/index-CWG19cm-.d.mts.map +1 -0
  25. package/dist/index-D-Gnyffj.d.mts.map +1 -1
  26. package/dist/{index-CalU-mpZ.d.mts → index-j5LGVVbm.d.mts} +3 -1
  27. package/dist/index-j5LGVVbm.d.mts.map +1 -0
  28. package/dist/index.d.mts +3 -3
  29. package/dist/index.mjs +50 -50
  30. package/dist/preview/index.mjs +10 -10
  31. package/dist/{preview-ChR8Z8Fm.mjs → preview-OTsGYyOU.mjs} +2 -2
  32. package/dist/{preview-ChR8Z8Fm.mjs.map → preview-OTsGYyOU.mjs.map} +1 -1
  33. package/dist/preview-engine/{chunk-BBHRXV75.mjs → chunk-4C26NVQY.mjs} +1 -1
  34. package/dist/preview-engine/chunk-5NLDETDV.mjs +1974 -0
  35. package/dist/preview-engine/{chunk-VY6ST4QX.mjs → chunk-AGLAJGQJ.mjs} +1 -1
  36. package/dist/preview-engine/{chunk-ZJLNXN7W.mjs → chunk-K3IMPV6T.mjs} +6 -6
  37. package/dist/preview-engine/chunk-LHCEQ77S.mjs +5 -0
  38. package/dist/preview-engine/{chunk-2LQCQ3OT.mjs → chunk-Q6CRERSJ.mjs} +5 -5
  39. package/dist/preview-engine/chunk-ZGMA27IG.mjs +3 -0
  40. package/dist/preview-engine/components.mjs +1 -1
  41. package/dist/preview-engine/fonts.mjs +1 -1
  42. package/dist/preview-engine/framefields.mjs +1 -1
  43. package/dist/preview-engine/player.mjs +1 -1
  44. package/dist/preview-engine/{renderers-WZEV464O.mjs → renderers-IT5ISWSA.mjs} +1 -1
  45. package/dist/{program-O2bWX0cs.mjs → program-W4CWO2bp.mjs} +19 -3
  46. package/dist/program-W4CWO2bp.mjs.map +1 -0
  47. package/dist/registry/annotate.json +1 -1
  48. package/dist/registry/app-frame.json +1 -1
  49. package/dist/registry/backdrop.json +3 -3
  50. package/dist/registry/before-after.json +1 -1
  51. package/dist/registry/callout.json +1 -1
  52. package/dist/registry/captions.json +7 -1
  53. package/dist/registry/card-stack.json +3 -3
  54. package/dist/registry/chat-thread.json +7 -1
  55. package/dist/registry/code-block.json +8 -2
  56. package/dist/registry/confetti.json +1 -1
  57. package/dist/registry/device-frame.json +2 -1
  58. package/dist/registry/focus-zoom.json +1 -1
  59. package/dist/registry/logo-reveal.json +1 -1
  60. package/dist/registry/lower-third.json +1 -1
  61. package/dist/registry/meter.json +1 -1
  62. package/dist/registry/mouse-pointer.json +1 -1
  63. package/dist/registry/selection.json +3 -3
  64. package/dist/registry/spotlight.json +1 -1
  65. package/dist/registry/terminal.json +7 -1
  66. package/dist/registry/text-reveal.json +2 -1
  67. package/dist/registry/title-card.json +1 -1
  68. package/dist/registry/toasts.json +1 -1
  69. package/dist/registry/touch-point.json +4 -4
  70. package/dist/registry/waveform.json +3 -3
  71. package/dist/registry/word-cycle.json +2 -2
  72. package/dist/renderer/index.mjs +2 -2
  73. package/dist/{renderer-DkM6Ikdf.mjs → renderer-0W-Ty55h.mjs} +3 -3
  74. package/dist/{renderer-DkM6Ikdf.mjs.map → renderer-0W-Ty55h.mjs.map} +1 -1
  75. package/dist/{renderer-CrKYlipx.mjs → renderer-0n4A8P2_.mjs} +2 -2
  76. package/dist/{renderer-CrKYlipx.mjs.map → renderer-0n4A8P2_.mjs.map} +1 -1
  77. package/dist/{renderer-D3FJcRA3.mjs → renderer-158rymL0.mjs} +2 -2
  78. package/dist/{renderer-D3FJcRA3.mjs.map → renderer-158rymL0.mjs.map} +1 -1
  79. package/dist/{renderer-Dwh0jaor.mjs → renderer-1KfQICGK.mjs} +3 -3
  80. package/dist/{renderer-Dwh0jaor.mjs.map → renderer-1KfQICGK.mjs.map} +1 -1
  81. package/dist/renderer-8HnHWqYj.mjs +5 -0
  82. package/dist/renderer-8itujues.mjs +5 -0
  83. package/dist/{renderer-DWG6EXGj.mjs → renderer-B3gQT1uq.mjs} +3 -3
  84. package/dist/{renderer-DWG6EXGj.mjs.map → renderer-B3gQT1uq.mjs.map} +1 -1
  85. package/dist/{renderer-Bs6BaMLf.mjs → renderer-BE6K88VR.mjs} +3 -3
  86. package/dist/{renderer-Bs6BaMLf.mjs.map → renderer-BE6K88VR.mjs.map} +1 -1
  87. package/dist/{renderer-CqJou_2L.mjs → renderer-BEpA2g1_.mjs} +2 -2
  88. package/dist/{renderer-CqJou_2L.mjs.map → renderer-BEpA2g1_.mjs.map} +1 -1
  89. package/dist/renderer-BFods-7v.mjs +5 -0
  90. package/dist/{renderer-RbMM6Njv.mjs → renderer-BGDKxfsM.mjs} +3 -3
  91. package/dist/{renderer-RbMM6Njv.mjs.map → renderer-BGDKxfsM.mjs.map} +1 -1
  92. package/dist/{renderer-DGOY-LBR.mjs → renderer-BGnMRdUK.mjs} +2 -2
  93. package/dist/{renderer-DGOY-LBR.mjs.map → renderer-BGnMRdUK.mjs.map} +1 -1
  94. package/dist/{renderer-CpDaUeCN.mjs → renderer-BIMm7lYG.mjs} +3 -3
  95. package/dist/{renderer-CpDaUeCN.mjs.map → renderer-BIMm7lYG.mjs.map} +1 -1
  96. package/dist/{renderer-Dw3K8KT9.mjs → renderer-BKL3UEzN.mjs} +2 -2
  97. package/dist/{renderer-Dw3K8KT9.mjs.map → renderer-BKL3UEzN.mjs.map} +1 -1
  98. package/dist/{renderer-DtqiWq1m.mjs → renderer-BKhdqykZ.mjs} +3 -3
  99. package/dist/{renderer-DtqiWq1m.mjs.map → renderer-BKhdqykZ.mjs.map} +1 -1
  100. package/dist/{renderer-CnclEQdA.mjs → renderer-BO5u8eFS.mjs} +2 -2
  101. package/dist/{renderer-CnclEQdA.mjs.map → renderer-BO5u8eFS.mjs.map} +1 -1
  102. package/dist/{renderer-DTPmvL1i.mjs → renderer-BQ-pHSPI.mjs} +3 -3
  103. package/dist/{renderer-DTPmvL1i.mjs.map → renderer-BQ-pHSPI.mjs.map} +1 -1
  104. package/dist/{renderer-BStETpqC.mjs → renderer-BXGr426R.mjs} +2 -2
  105. package/dist/{renderer-BStETpqC.mjs.map → renderer-BXGr426R.mjs.map} +1 -1
  106. package/dist/{renderer-Dk0okoS3.mjs → renderer-B_Oz9L3g.mjs} +2 -2
  107. package/dist/{renderer-Dk0okoS3.mjs.map → renderer-B_Oz9L3g.mjs.map} +1 -1
  108. package/dist/renderer-BbQygRwc.mjs +5 -0
  109. package/dist/{renderer-PhjHSS97.mjs → renderer-BcaT2j3R.mjs} +2 -2
  110. package/dist/{renderer-PhjHSS97.mjs.map → renderer-BcaT2j3R.mjs.map} +1 -1
  111. package/dist/{renderer-C6n8y6Pw.mjs → renderer-Bh7d3RSt.mjs} +3 -3
  112. package/dist/{renderer-C6n8y6Pw.mjs.map → renderer-Bh7d3RSt.mjs.map} +1 -1
  113. package/dist/{renderer-QQDU1b0Z.mjs → renderer-BiH29MS6.mjs} +3 -3
  114. package/dist/{renderer-QQDU1b0Z.mjs.map → renderer-BiH29MS6.mjs.map} +1 -1
  115. package/dist/{renderer-DdkPY4hO.mjs → renderer-BnpMAub0.mjs} +2 -2
  116. package/dist/{renderer-DdkPY4hO.mjs.map → renderer-BnpMAub0.mjs.map} +1 -1
  117. package/dist/renderer-Bq_sPaCg.mjs +5 -0
  118. package/dist/renderer-BrkDrvqS.mjs +5 -0
  119. package/dist/{renderer-DVGVcDvB.mjs → renderer-Bt3F1tmP.mjs} +3 -3
  120. package/dist/{renderer-DVGVcDvB.mjs.map → renderer-Bt3F1tmP.mjs.map} +1 -1
  121. package/dist/{renderer-DsnV8tpW.mjs → renderer-BwnQRuce.mjs} +3 -3
  122. package/dist/{renderer-DsnV8tpW.mjs.map → renderer-BwnQRuce.mjs.map} +1 -1
  123. package/dist/renderer-C1diVT5Q.mjs +5 -0
  124. package/dist/{renderer-CTy0bSsl.mjs → renderer-C2O4nK9x.mjs} +3 -3
  125. package/dist/{renderer-CTy0bSsl.mjs.map → renderer-C2O4nK9x.mjs.map} +1 -1
  126. package/dist/{renderer-Cg2xS8h8.mjs → renderer-C4Jfgjm5.mjs} +2 -2
  127. package/dist/{renderer-Cg2xS8h8.mjs.map → renderer-C4Jfgjm5.mjs.map} +1 -1
  128. package/dist/renderer-C8E7ajTR.mjs +5 -0
  129. package/dist/renderer-CAz8JW5c.mjs +5 -0
  130. package/dist/{renderer-1NoJLLDa.mjs → renderer-CEvj79Wg.mjs} +3 -3
  131. package/dist/{renderer-1NoJLLDa.mjs.map → renderer-CEvj79Wg.mjs.map} +1 -1
  132. package/dist/{renderer-Bag1LFos.mjs → renderer-CFSh2eG-.mjs} +3 -3
  133. package/dist/{renderer-Bag1LFos.mjs.map → renderer-CFSh2eG-.mjs.map} +1 -1
  134. package/dist/{renderer-Daqvhwjp.mjs → renderer-CHvEgLHy.mjs} +3 -3
  135. package/dist/{renderer-Daqvhwjp.mjs.map → renderer-CHvEgLHy.mjs.map} +1 -1
  136. package/dist/renderer-CKfrUdGw.mjs +5 -0
  137. package/dist/renderer-CL0rqBA4.mjs +5 -0
  138. package/dist/{renderer-R5Lg65F8.mjs → renderer-CLP6Lm7y.mjs} +2 -2
  139. package/dist/{renderer-B0IJirDs.mjs → renderer-COcFh5bK.mjs} +3 -3
  140. package/dist/{renderer-B0IJirDs.mjs.map → renderer-COcFh5bK.mjs.map} +1 -1
  141. package/dist/renderer-COyavIEv.mjs +5 -0
  142. package/dist/{renderer-DcApNxER.mjs → renderer-CPtyQrJI.mjs} +2 -2
  143. package/dist/{renderer-DcApNxER.mjs.map → renderer-CPtyQrJI.mjs.map} +1 -1
  144. package/dist/renderer-CUrShvUZ.mjs +5 -0
  145. package/dist/renderer-CWvJ_GaL.mjs +5 -0
  146. package/dist/{renderer-B2no_9zi.mjs → renderer-CX4rvqm9.mjs} +3 -3
  147. package/dist/{renderer-B2no_9zi.mjs.map → renderer-CX4rvqm9.mjs.map} +1 -1
  148. package/dist/{renderer-C3tdjg8B.mjs → renderer-CZGpETnc.mjs} +3 -3
  149. package/dist/{renderer-C3tdjg8B.mjs.map → renderer-CZGpETnc.mjs.map} +1 -1
  150. package/dist/{renderer-DmTxEeMh.mjs → renderer-C_-hWBF1.mjs} +3 -3
  151. package/dist/{renderer-DmTxEeMh.mjs.map → renderer-C_-hWBF1.mjs.map} +1 -1
  152. package/dist/{renderer-H4-8sBjl.mjs → renderer-Cb74SQHm.mjs} +2 -2
  153. package/dist/{renderer-H4-8sBjl.mjs.map → renderer-Cb74SQHm.mjs.map} +1 -1
  154. package/dist/{renderer-DO1TeUqV.mjs → renderer-Cba208C9.mjs} +3 -3
  155. package/dist/{renderer-DO1TeUqV.mjs.map → renderer-Cba208C9.mjs.map} +1 -1
  156. package/dist/{renderer-CA_CwisV.mjs → renderer-CdJoOfQw.mjs} +2 -2
  157. package/dist/{renderer-CA_CwisV.mjs.map → renderer-CdJoOfQw.mjs.map} +1 -1
  158. package/dist/renderer-Ck0mGIo9.mjs +5 -0
  159. package/dist/{renderer-YBwN9uyj.mjs → renderer-CoaDDIS6.mjs} +5 -5
  160. package/dist/{renderer-YBwN9uyj.mjs.map → renderer-CoaDDIS6.mjs.map} +1 -1
  161. package/dist/renderer-CqIXqdf0.mjs +5 -0
  162. package/dist/renderer-Csod6biL.mjs +5 -0
  163. package/dist/{renderer-BMiZIGkZ.mjs → renderer-CsxO_wBG.mjs} +2 -2
  164. package/dist/renderer-CueO924-.mjs +5 -0
  165. package/dist/{renderer-x1xlZaH_.mjs → renderer-Cv6od7Be.mjs} +3 -3
  166. package/dist/{renderer-x1xlZaH_.mjs.map → renderer-Cv6od7Be.mjs.map} +1 -1
  167. package/dist/{renderer-B5ZdkcMi.mjs → renderer-Cw7R1U43.mjs} +2 -2
  168. package/dist/{renderer-B5ZdkcMi.mjs.map → renderer-Cw7R1U43.mjs.map} +1 -1
  169. package/dist/renderer-D1vM4obC.mjs +5 -0
  170. package/dist/{renderer-CEAmByVW.mjs → renderer-D36Pjp0B.mjs} +2 -2
  171. package/dist/{renderer-CEAmByVW.mjs.map → renderer-D36Pjp0B.mjs.map} +1 -1
  172. package/dist/{renderer-CFCR_7bq.mjs → renderer-D52KWsb8.mjs} +3 -3
  173. package/dist/{renderer-CFCR_7bq.mjs.map → renderer-D52KWsb8.mjs.map} +1 -1
  174. package/dist/renderer-DB7QUt90.mjs +5 -0
  175. package/dist/{renderer-BfQdc3RM.mjs → renderer-DGsWlXjl.mjs} +69 -69
  176. package/dist/{renderer-BfQdc3RM.mjs.map → renderer-DGsWlXjl.mjs.map} +1 -1
  177. package/dist/renderer-DLMDnKlA.mjs +6 -0
  178. package/dist/renderer-DNs7yWMr.mjs +5 -0
  179. package/dist/{renderer-C8pJFxcL.mjs → renderer-DORydJHm.mjs} +2 -2
  180. package/dist/{renderer-C8pJFxcL.mjs.map → renderer-DORydJHm.mjs.map} +1 -1
  181. package/dist/renderer-DOrtuoa9.mjs +5 -0
  182. package/dist/{renderer-Dz4muMyE.mjs → renderer-DTKtkgTO.mjs} +2 -2
  183. package/dist/{renderer-Dz4muMyE.mjs.map → renderer-DTKtkgTO.mjs.map} +1 -1
  184. package/dist/{renderer-YFHESw3v.mjs → renderer-DVdRzDwX.mjs} +3 -3
  185. package/dist/{renderer-YFHESw3v.mjs.map → renderer-DVdRzDwX.mjs.map} +1 -1
  186. package/dist/renderer-D_JgOawb.mjs +5 -0
  187. package/dist/renderer-DdLo1uoa.mjs +5 -0
  188. package/dist/renderer-DeX3JEZV.mjs +5 -0
  189. package/dist/{renderer-C2MaJKfY.mjs → renderer-Df-rf7RC.mjs} +3 -3
  190. package/dist/{renderer-C2MaJKfY.mjs.map → renderer-Df-rf7RC.mjs.map} +1 -1
  191. package/dist/renderer-DfgZVACG.mjs +5 -0
  192. package/dist/{renderer-CFRTJ7cT.mjs → renderer-DmrP4dsn.mjs} +2 -2
  193. package/dist/{renderer-CFRTJ7cT.mjs.map → renderer-DmrP4dsn.mjs.map} +1 -1
  194. package/dist/renderer-DoYG7Pn6.mjs +5 -0
  195. package/dist/{renderer-Bvizxddu.mjs → renderer-DqIrYB0P.mjs} +2 -2
  196. package/dist/{renderer-Bvizxddu.mjs.map → renderer-DqIrYB0P.mjs.map} +1 -1
  197. package/dist/{renderer-BrKgtYq4.mjs → renderer-DrrWvz8l.mjs} +3 -3
  198. package/dist/{renderer-BrKgtYq4.mjs.map → renderer-DrrWvz8l.mjs.map} +1 -1
  199. package/dist/{renderer-Bwxm-kWL.mjs → renderer-DuFwDHHF.mjs} +2 -2
  200. package/dist/{renderer-CVbNiH03.mjs → renderer-DxOJv_G7.mjs} +3 -3
  201. package/dist/{renderer-CVbNiH03.mjs.map → renderer-DxOJv_G7.mjs.map} +1 -1
  202. package/dist/{renderer-CbxfSmYE.mjs → renderer-E54Vv1_W.mjs} +3 -3
  203. package/dist/{renderer-CbxfSmYE.mjs.map → renderer-E54Vv1_W.mjs.map} +1 -1
  204. package/dist/{renderer-B7vXnBUo.mjs → renderer-FPYVmSf6.mjs} +3 -3
  205. package/dist/{renderer-B7vXnBUo.mjs.map → renderer-FPYVmSf6.mjs.map} +1 -1
  206. package/dist/{renderer-BlU3Sh_0.mjs → renderer-FgP_1OgD.mjs} +3 -3
  207. package/dist/{renderer-BlU3Sh_0.mjs.map → renderer-FgP_1OgD.mjs.map} +1 -1
  208. package/dist/{renderer-DW21AyEv.mjs → renderer-H-Adf8Za.mjs} +3 -3
  209. package/dist/{renderer-DW21AyEv.mjs.map → renderer-H-Adf8Za.mjs.map} +1 -1
  210. package/dist/{renderer-CPSg6eEQ.mjs → renderer-HPBahXjt.mjs} +2 -2
  211. package/dist/{renderer-CPSg6eEQ.mjs.map → renderer-HPBahXjt.mjs.map} +1 -1
  212. package/dist/renderer-Jwqa-BUN.mjs +5 -0
  213. package/dist/{renderer-BNs31kME.mjs → renderer-KkDYCAkn.mjs} +3 -3
  214. package/dist/{renderer-BNs31kME.mjs.map → renderer-KkDYCAkn.mjs.map} +1 -1
  215. package/dist/{renderer-BvA4sQz5.mjs → renderer-PDAlUGKG.mjs} +3 -3
  216. package/dist/{renderer-BvA4sQz5.mjs.map → renderer-PDAlUGKG.mjs.map} +1 -1
  217. package/dist/{renderer-C5QYI1Wu.mjs → renderer-PDs21Gsq.mjs} +2 -2
  218. package/dist/{renderer-C5QYI1Wu.mjs.map → renderer-PDs21Gsq.mjs.map} +1 -1
  219. package/dist/{renderer-DADTT3ym.mjs → renderer-Sdsy27LH.mjs} +2 -2
  220. package/dist/{renderer-DHdFVpdH.mjs → renderer-YEDoDnsE.mjs} +2 -2
  221. package/dist/{renderer-DHdFVpdH.mjs.map → renderer-YEDoDnsE.mjs.map} +1 -1
  222. package/dist/renderer-Z2Vs-IqP.mjs +5 -0
  223. package/dist/{renderer-BWNQQZ12.mjs → renderer-ZM2jwJbX.mjs} +3 -3
  224. package/dist/{renderer-BWNQQZ12.mjs.map → renderer-ZM2jwJbX.mjs.map} +1 -1
  225. package/dist/{renderer-BKJ8cywK.mjs → renderer-ZarULMvJ.mjs} +2 -2
  226. package/dist/{renderer-BKJ8cywK.mjs.map → renderer-ZarULMvJ.mjs.map} +1 -1
  227. package/dist/renderer-ZnyCpdWE.mjs +5 -0
  228. package/dist/{renderer-8_d6YNnE.mjs → renderer-aT6MUYPr.mjs} +2 -2
  229. package/dist/{renderer-8_d6YNnE.mjs.map → renderer-aT6MUYPr.mjs.map} +1 -1
  230. package/dist/{renderer-DkOxEQsg.mjs → renderer-dX7Fy1NR.mjs} +3 -3
  231. package/dist/{renderer-DkOxEQsg.mjs.map → renderer-dX7Fy1NR.mjs.map} +1 -1
  232. package/dist/{renderer-tcS585Iy.mjs → renderer-eQP0fvgc.mjs} +2 -2
  233. package/dist/{renderer-tcS585Iy.mjs.map → renderer-eQP0fvgc.mjs.map} +1 -1
  234. package/dist/renderer-emCnsnTH.mjs +5 -0
  235. package/dist/renderer-ioxa4-Dy.mjs +5 -0
  236. package/dist/renderer-iyIwrDWO.mjs +5 -0
  237. package/dist/{renderer-BZ5uOfoX.mjs → renderer-lP23pU1s.mjs} +2 -2
  238. package/dist/{renderer-BZ5uOfoX.mjs.map → renderer-lP23pU1s.mjs.map} +1 -1
  239. package/dist/{renderer-oR1LvHeO.mjs → renderer-tYmQUp4d.mjs} +2 -2
  240. package/dist/{renderer-oR1LvHeO.mjs.map → renderer-tYmQUp4d.mjs.map} +1 -1
  241. package/dist/renderer-tuudA_RZ.mjs +5 -0
  242. package/dist/{renderer-D8m3fuRp.mjs → renderer-wrXFfvpJ.mjs} +2 -2
  243. package/dist/{renderer-D8m3fuRp.mjs.map → renderer-wrXFfvpJ.mjs.map} +1 -1
  244. package/dist/renderer-yyn8S821.mjs +5 -0
  245. package/dist/{renderers-CP8CFWDs-EZZPEbhW.mjs → renderers-CP8CFWDs-CZJ7NRsl.mjs} +2 -2
  246. package/dist/{renderers-CP8CFWDs-EZZPEbhW.mjs.map → renderers-CP8CFWDs-CZJ7NRsl.mjs.map} +1 -1
  247. package/dist/signals/index.mjs +4 -4
  248. package/dist/{src-r7Suenhp.mjs → src-_l81YkMD.mjs} +612 -117
  249. package/dist/src-_l81YkMD.mjs.map +1 -0
  250. package/package.json +59 -58
  251. package/dist/dist-BuirkW-f.mjs.map +0 -1
  252. package/dist/dist-DBdxM6xv.mjs.map +0 -1
  253. package/dist/fonts-DNx6ps2p.mjs.map +0 -1
  254. package/dist/index-CalU-mpZ.d.mts.map +0 -1
  255. package/dist/index-N1tMc5Z9.d.mts.map +0 -1
  256. package/dist/preview-engine/chunk-2TCJSHFA.mjs +0 -1974
  257. package/dist/preview-engine/chunk-Q7XC3FI7.mjs +0 -3
  258. package/dist/preview-engine/chunk-ZZAZF6VC.mjs +0 -5
  259. package/dist/program-O2bWX0cs.mjs.map +0 -1
  260. package/dist/renderer-0441BN0U.mjs +0 -5
  261. package/dist/renderer-3qDgFc-W.mjs +0 -5
  262. package/dist/renderer-6AIqTN5Z.mjs +0 -5
  263. package/dist/renderer-B7MZ5R7u.mjs +0 -5
  264. package/dist/renderer-BE2rIA4B.mjs +0 -5
  265. package/dist/renderer-BIQ81ln4.mjs +0 -5
  266. package/dist/renderer-BKm3_Ob3.mjs +0 -5
  267. package/dist/renderer-BNdT1Wwf.mjs +0 -5
  268. package/dist/renderer-BQycs1q_.mjs +0 -5
  269. package/dist/renderer-Bj7MxXfk.mjs +0 -5
  270. package/dist/renderer-BjRAGYYC.mjs +0 -5
  271. package/dist/renderer-BqE2BQ_X.mjs +0 -5
  272. package/dist/renderer-Bz5BMkOE.mjs +0 -5
  273. package/dist/renderer-CDOSfB9H.mjs +0 -5
  274. package/dist/renderer-CT26yQT-.mjs +0 -5
  275. package/dist/renderer-CZeAbz48.mjs +0 -5
  276. package/dist/renderer-D50b7kip.mjs +0 -5
  277. package/dist/renderer-D5LmrO96.mjs +0 -5
  278. package/dist/renderer-DCvqZ5o_.mjs +0 -5
  279. package/dist/renderer-DJGJeGEn.mjs +0 -5
  280. package/dist/renderer-DONvNNXi.mjs +0 -5
  281. package/dist/renderer-DPaSo--Y.mjs +0 -6
  282. package/dist/renderer-DfYYokhr.mjs +0 -5
  283. package/dist/renderer-DlIJhdEM.mjs +0 -5
  284. package/dist/renderer-DqD3nMtv.mjs +0 -5
  285. package/dist/renderer-DrIl-uGt.mjs +0 -5
  286. package/dist/renderer-DyCB3Q1d.mjs +0 -5
  287. package/dist/renderer-DyJ-iSv6.mjs +0 -5
  288. package/dist/renderer-Dzs0jV0G.mjs +0 -5
  289. package/dist/renderer-HIKXw5-Y.mjs +0 -5
  290. package/dist/renderer-Jgt2g8Wp.mjs +0 -5
  291. package/dist/renderer-KnZWmT-M.mjs +0 -5
  292. package/dist/renderer-OMSXddG9.mjs +0 -5
  293. package/dist/renderer-P78xh6OV.mjs +0 -5
  294. package/dist/renderer-gaFP1Kak.mjs +0 -5
  295. package/dist/renderer-lQ8gH7Zd.mjs +0 -5
  296. package/dist/src-r7Suenhp.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { $i as MediaSourceInput, A as SlugFontCache, Ba as Signal, Ei as FrameContext, Et as KineticMarqueeConfig, Ia as RenderDiagnostic, M as SphereGeometryOptions, Ma as ProgrammaticSignal, No as VisionTask, Oi as FrameSignal, Y as AETextAnimator, Z as AdvancedTextAnimator, ba as NormalRelightingOptions, ci as DeflickerOptions, fi as Effect$1, fo as TextSpan, hi as EffectDomain, ii as DataType, in as TextPathOptions, ko as VirtualMediaData, qi as MediaMetadata, ta as MeshAudioDeformConfig, u as CylinderGeometryOptions, vn as TypewriterAnimator, w as RoundedBoxGeometryOptions } from "./index-ocZc12ZS.mjs";
2
- import { i as RegisterFontOptions } from "./index-CalU-mpZ.mjs";
2
+ import { i as RegisterFontOptions } from "./index-j5LGVVbm.mjs";
3
3
  import { $n as ResizerScalerProps, $t as FlipProps, An as Paint, At as CameraParallax3DProps, B as PBRGlass, Bn as Pixelate, Bt as ContourProps, C as GradientMapProps, Cn as MeshWarp, Ct as AudioParametricEq, D as HalftoneScreen, Dn as NoiseGeneratorProps, Dt as CRT, Ei as TensorPipeline, En as NoiseGenerator, Et as AudioReverbProps, F as LevelsProps, Fn as Painterly, Ft as ColorBalance, G as SSAOProps, Gn as ProceduralVFXProps, Gt as DatamoshProps, H as Relight3D, Hn as Posterize, I as Modulate, In as PainterlyProps, It as ColorBalanceProps, J as SelectiveColorProps, Jn as RefineEdge, Jr as ClipSubjectSource, Jt as Dither, K as SelectiveColor, Kn as RGBSplit, Kr as COCO17_KEYPOINT_NAMES, Kt as DisplacementMap, L as ModulateProps, Ln as PatchHeal, Lt as ColorKey, M as HighPassProps, Mt as ChannelMergerProps, Nt as ChannelSplitter, O as HalftoneScreenProps, On as OpArt, Ot as CRTProps, P as Levels, Pt as ChannelSplitterProps, Q as TileOffset, Qn as ResizerScaler, Qt as Flip, R as MotionBlur, Rt as ColorKeyProps, S as GradientMap, Sn as MaskMathProps, St as AudioNoiseGateProps, Tn as MeshWarpProps, Tt as AudioReverb, U as Relight3DProps, Un as PosterizeProps, Ut as CornerPinProps, V as PBRGlassProps, Vn as PixelateProps, Vt as CornerPin, W as SSAO, Wn as ProceduralVFX, Wt as Datamosh, X as ShadowsHighlightsProps, Xn as RefractionCaustics3D, Xr as LandmarkCoordinateSignals, Xt as ExtractLUT, Y as ShadowsHighlights, Yn as RefineEdgeProps, Yr as InstanceMask, Yt as DitherProps, Z as TemporalDeflicker, Zn as RefractionCaustics3DProps, Zr as MaskTrackSignals, Zt as ExtractLUTProps, _t as AudioDelay, a as ApplyLUTProps, ai as PinToLandmarkOptions, an as KaleidoscopeProps, ar as Toon, b as FilmGrain, bn as LiquifyProps, bt as AudioFadeProps, c as Crop, cn as KenBurnsProps, cr as TrailsProps, dr as EffectProp, dt as Blur, en as Gooey, er as Rotate, et as TileOffsetProps, f as CurvesProps, ft as BlurProps, g as DepthOfFieldProps, gi as VisionNode, gn as LayerStyleProps, gt as AudioCompressorProps, h as DepthOfField, hi as VisionBundle, ht as AudioCompressor, i as ApplyLUT, in as Kaleidoscope, it as VisionProps, j as HighPass, jn as PaintProps, jt as ChannelMerger, kn as OpArtProps, kt as CameraParallax3D, l as CropProps, ln as LayerStyle, lr as Vignette, m as DeflickerProps, mi as VisionAnalysisReport, mt as AsciiProps, n as AnyEffect, nn as Iridescence, nr as StereoPanning, nt as UnsharpMaskProps, oi as PinToObjectOptions, on as KenBurns, or as ToonProps, p as CustomEffect, pt as Ascii, qn as RGBSplitProps, qt as DisplacementMapProps, r as AnyVisualEffect, ri as ObjectTrackSignals, rn as IridescenceProps, rr as StereoPanningProps, rt as Vision, sr as Trails, t as AnyAudioEffect, tn as GooeyProps, tr as RotateProps, tt as UnsharpMask, u as Curves, ur as VignetteProps, vn as Liquify, vt as AudioDelayProps, wt as AudioParametricEqProps, x as FilmGrainProps, xn as MaskMath, xt as AudioNoiseGate, yt as AudioFade, z as MotionBlurProps, zn as PatchHealProps, zt as Contour } from "./index-D-Gnyffj.mjs";
4
4
  import { c as HeadlessMediaRenderer, f as RenderProgress, m as VideoQaReport, p as VideoQaOptions, t as FrameGridOptions } from "./index-BhzlG_1Q.mjs";
5
5
  import { z, z as z$2 } from "zod";
@@ -1653,9 +1653,17 @@ declare function evaluateAnimationAtFrame(animation: LayerAnimationSpec | undefi
1653
1653
  * any count, but programs this size are slow to send, read and edit.
1654
1654
  */
1655
1655
 
1656
+ interface LintOptions {
1657
+ /**
1658
+ * Whether a color emoji font is registered (framefields'
1659
+ * `FontManager.hasEmojiFont()`). When false, text with emoji is flagged:
1660
+ * the emoji would draw nothing. Unknown (omitted): not checked.
1661
+ */
1662
+ emojiFont?: boolean;
1663
+ }
1656
1664
  declare function lintComposition(config: Pick<CompositorProgramConfig, "width" | "height" | "layout"> & {
1657
1665
  backgroundColor?: string;
1658
- }): RenderDiagnostic[];
1666
+ }, options?: LintOptions): RenderDiagnostic[];
1659
1667
  //#endregion
1660
1668
  //#region src/program/mattes.d.ts
1661
1669
  /** Returns the tree with every `matte` turned into a sibling matte layer. */
@@ -1710,12 +1718,12 @@ type CarrierHandoffConfig = z.infer<typeof CarrierHandoffConfigSchema>;
1710
1718
  declare const SceneDefinitionSchema: z.ZodObject<{
1711
1719
  id: z.ZodString;
1712
1720
  chapter: z.ZodDefault<z.ZodEnum<{
1721
+ custom: "custom";
1713
1722
  hook: "hook";
1714
1723
  tension: "tension";
1715
1724
  solution: "solution";
1716
1725
  feature_spotlight: "feature_spotlight";
1717
1726
  outro: "outro";
1718
- custom: "custom";
1719
1727
  }>>;
1720
1728
  durationMs: z.ZodOptional<z.ZodNumber>;
1721
1729
  durationFrames: z.ZodOptional<z.ZodNumber>;
@@ -1866,92 +1874,7 @@ declare function collectNodeOps(nodes: VirtualMediaData[]): VirtualMediaData[];
1866
1874
  //#endregion
1867
1875
  //#region src/program/validate.d.ts
1868
1876
  //#endregion
1869
- //#region ../components/dist/toolkit-D9dGhP-l.d.mts
1870
- //#region src/core/audio.d.ts
1871
-
1872
- /** A track's spectrum and loudness per frame, every value 0–1. */
1873
- interface AudioLevels {
1874
- fps: number;
1875
- /** Length in frames. */
1876
- frames: number;
1877
- /** `[band][frame]`, low → high frequencies. */
1878
- bands: number[][];
1879
- /** Loudness envelope, `[frame]`. */
1880
- level: number[];
1881
- /** Onset frames (kicks, plosives), from low-band flux. */
1882
- beats: number[];
1883
- }
1884
- interface AnalyzeOptions {
1885
- /** Frame rate of the composition. Default 30. */
1886
- fps?: number;
1887
- /** Log-spaced bands. Default 32. */
1888
- bands?: number;
1889
- /** Lowest band edge, Hz. Default 50. */
1890
- minHz?: number;
1891
- /** Highest band edge, Hz. Default 12 000 (or Nyquist). */
1892
- maxHz?: number;
1893
- }
1894
- /** Band edges in Hz, log-spaced. */
1895
- declare function bandEdges(count: number, minHz: number, maxHz: number): number[];
1896
- /**
1897
- * Analyse decoded audio: a Hann-windowed FFT per frame into log-spaced
1898
- * bands, each normalised to its own 98th percentile (floored 30 dB under the
1899
- * loudest band's, so a quiet band is not stretched into noise), an RMS level
1900
- * envelope, and onsets from low-band spectral flux.
1901
- */
1902
- declare function analyzeChannels(channels: readonly Float32Array[], sampleRate: number, options?: AnalyzeOptions): AudioLevels;
1903
- /** Average adjacent bands down (or repeat them up) to `count` bands. */
1904
- declare function resampleBands(bands: readonly (readonly number[])[], count: number): number[][];
1905
- /** Each value falls no faster than `release` frames from its peak (attack is instant). */
1906
- declare function smoothRelease(values: readonly number[], release: number): number[];
1907
- /** The schema for `AudioLevels` props (Waveform, Captions `pulse`). */
1908
- declare function audioLevelsSchema(): z.ZodType<AudioLevels>;
1909
- //#endregion
1910
- //#region src/core/bake.d.ts
1911
- /**
1912
- * Turn per-frame values into a few linear keyframes. Components solve motion
1913
- * offline (springs, camera follow, arc-length travel) and bake it, so the
1914
- * output stays plain keyframe JSON that seeks exactly.
1915
- */
1916
- /** `[frame, value]`: a linear keyframe, as `LayerAnimation.keys` takes it. */
1917
- type BakedKey = [frame: number, value: number];
1918
- interface BakeOptions {
1919
- /** Max deviation (in the value's units) of the simplified curve. Default 0.25. */
1920
- tolerance?: number;
1921
- }
1922
- /**
1923
- * Simplify `values` (one per frame, starting at `startFrame`) to linear keys
1924
- * whose interpolation stays within `tolerance` of every sample
1925
- * (Ramer–Douglas–Peucker on the frame/value polyline). First and last
1926
- * samples are always kept.
1927
- */
1928
- declare function bakeSamples(values: readonly number[], startFrame?: number, options?: BakeOptions): BakedKey[];
1929
- /** Sample `fn` on every frame in [start, end] and bake it. */
1930
- declare function bakeFunction(fn: (frame: number) => number, start: number, end: number, options?: BakeOptions): BakedKey[];
1931
- /**
1932
- * Damped spring from 0 to 1 in closed form: `stiffness` (k), `damping` (c),
1933
- * `mass` (m), sampled in seconds. Under-damped springs overshoot.
1934
- */
1935
- declare function springAt(seconds: number, {
1936
- stiffness,
1937
- damping,
1938
- mass
1939
- }?: {
1940
- stiffness?: number | undefined;
1941
- damping?: number | undefined;
1942
- mass?: number | undefined;
1943
- }): number;
1944
- /**
1945
- * Frames until a spring stays within `epsilon` of rest, at `fps`; capped at
1946
- * `max` frames.
1947
- */
1948
- declare function springSettleFrames(fps: number, options?: Parameters<typeof springAt>[1], epsilon?: number, max?: number): number;
1949
- /**
1950
- * A spring from `from` to `to` starting at frame `start`, baked to linear
1951
- * keys (within `tolerance`, default 0.2 % of the distance).
1952
- */
1953
- declare function springKeys(start: number, from: number, to: number, fps: number, options?: Parameters<typeof springAt>[1], tolerance?: number): BakedKey[];
1954
- //#endregion
1877
+ //#region ../components/dist/typing-c419Mp0t.d.mts
1955
1878
  //#region src/core/path.d.ts
1956
1879
  /**
1957
1880
  * 2D path math: smooth curves through points, arc-length sampling, and SVG
@@ -2126,181 +2049,241 @@ declare function lineShift(metrics: Metrics$1, line: number, options: MeasureOpt
2126
2049
  */
2127
2050
  declare function rangeRects(metrics: Metrics$1, start: number, end: number, options: MeasureOptions): Rect[];
2128
2051
  //#endregion
2129
- //#region src/core/host.d.ts
2130
- /** Photoshop-style layer styles (framefields' `LayerStyle`). Omitted styles are off. */
2131
- interface LayerStyleConfig {
2132
- dropShadow?: {
2133
- color?: string;
2134
- opacity?: number;
2135
- /** Light angle in degrees (90 = shadow straight down). */
2136
- angle?: number;
2137
- distance?: number;
2138
- spread?: number;
2139
- size?: number;
2140
- blendMode?: string;
2141
- };
2142
- outerGlow?: {
2143
- color?: string;
2144
- opacity?: number;
2145
- size?: number;
2146
- spread?: number;
2147
- blendMode?: string;
2148
- };
2149
- innerShadow?: {
2150
- color?: string;
2151
- opacity?: number;
2152
- angle?: number;
2153
- distance?: number;
2154
- size?: number;
2155
- };
2156
- stroke?: {
2157
- size?: number;
2158
- position?: "inside" | "center" | "outside";
2159
- color?: string;
2160
- opacity?: number;
2161
- };
2162
- }
2163
- interface MediaOptions {
2052
+ //#region src/core/targets.d.ts
2053
+ type Anchor = "center" | "top" | "bottom" | "left" | "right" | "top-left" | "top-right" | "bottom-left" | "bottom-right"
2054
+ /** Where a pointer should land: the centre, or mid-left for text. */ | "tip";
2055
+ /** A node as targets read it: absolute numeric geometry, or text. */
2056
+ interface TargetNode {
2164
2057
  id?: string;
2165
- position?: "absolute" | "relative";
2166
- x?: number;
2167
- y?: number;
2168
- width?: number;
2169
- height?: number;
2170
- fit?: "cover" | "contain" | "fill";
2058
+ kind?: string;
2059
+ x?: unknown;
2060
+ y?: unknown;
2061
+ width?: unknown;
2062
+ height?: unknown;
2063
+ text?: unknown;
2064
+ content?: unknown;
2065
+ [key: string]: unknown;
2171
2066
  }
2172
- /** The part of framefields' `AnimatableNode` components rely on. */
2173
- interface AnimatableMethods {
2174
- animate(...anims: unknown[]): unknown;
2067
+ /** The frame context signals are read with. */
2068
+ interface FrameContextLike {
2069
+ frame: number;
2070
+ fps: number;
2071
+ time: number;
2072
+ duration: number;
2073
+ durationMs: number;
2074
+ progress: number;
2075
+ deltaTime: number;
2175
2076
  }
2176
- type Animatable<T> = T & AnimatableMethods;
2177
- interface Host {
2178
- box(options: Partial<BoxNode>): Animatable<BoxNode>;
2179
- flex(options: Partial<FlexNode>): Animatable<FlexNode>;
2180
- text(content: string, options?: Partial<TextNode>): Animatable<TextNode>;
2181
- shape(type: ShapeType, options?: Partial<ShapeNode>): Animatable<ShapeNode>;
2182
- /** `FontManager.measure`. */
2183
- measure: MeasureFn;
2184
- /** Registered font families. */
2185
- fonts(): readonly string[];
2186
- /** A default id: stable per run (a counter per prefix), like `Layer.*` ids. */
2187
- autoId(prefix: string): string;
2188
- /** A video, image or SVG layer, by file extension. */
2189
- media(source: string, options: MediaOptions): Animatable<LayoutNode>;
2190
- /** Attach layer styles (shadow, glow, stroke) to `node`; returns it. */
2191
- style<T extends Animatable<LayoutNode>>(node: T, config: LayerStyleConfig): T;
2192
- /**
2193
- * Mask `node` by `matte`'s alpha (a box: solid or CSS-gradient
2194
- * background), or by its inverse (`"alpha-inverted"`: show `node`
2195
- * everywhere the matte is not). The matte is laid out like a sibling of
2196
- * `node`; returns `node`.
2197
- */
2198
- matte<T extends Animatable<LayoutNode>>(node: T, matte: LayoutNode, mode?: "alpha" | "alpha-inverted"): T;
2199
- /**
2200
- * A video showing only its person / subject (vision segmentation), the
2201
- * rest transparent: stacked over captions so text passes behind them.
2202
- */
2203
- cutout(source: string, options: CutoutOptions): Animatable<LayoutNode>;
2204
- /** A GPU particle system layer. */
2205
- particles(options: ParticleOptions): Animatable<LayoutNode>;
2206
- /**
2207
- * A per-frame signal from values (framefields' `Signal.fromArray`), for
2208
- * `LayerAnimation.signal`. Signals read the composition's frame: value
2209
- * `k` drives composition frame `k`.
2210
- */
2211
- signal(values: readonly number[], fps: number): object;
2212
- /**
2213
- * An animated film-grain layer to put over other layers: neutral grey
2214
- * carrying framefields' `FilmGrain`, soft-light blended. (Effects only
2215
- * attach to media layers, so grain can't go on a box.)
2216
- */
2217
- grain(options: GrainOptions): Animatable<LayoutNode>;
2218
- /** Solid extruded 3D text (framefields' `Layer3D.extrudedText`), centred on x, y. */
2219
- extrudedText(options: ExtrudedTextOptions): Animatable<LayoutNode>;
2077
+ /** A per-frame value: a signal (what tracked objects expose) or a function. */
2078
+ type FrameValue = {
2079
+ get(ctx?: FrameContextLike): number;
2080
+ } | ((frame: number) => number);
2081
+ interface TrackedObjectLike {
2082
+ x: FrameValue;
2083
+ y: FrameValue;
2084
+ width: FrameValue;
2085
+ height: FrameValue;
2220
2086
  }
2221
- interface GrainOptions {
2222
- id?: string;
2087
+ type Target = Vec2$1 | Rect | {
2088
+ node: TargetNode;
2089
+ anchor?: Anchor;
2090
+ } | {
2091
+ text: TargetNode;
2092
+ match?: string | RegExp;
2093
+ range?: [number, number];
2094
+ nth?: number;
2095
+ anchor?: Anchor;
2096
+ } | {
2097
+ track: TrackedObjectLike;
2098
+ anchor?: Anchor;
2099
+ } | ((frame: number) => Vec2$1 | Rect);
2100
+ interface TargetContext {
2101
+ measure?: MeasureFn;
2102
+ /** Frame rate signals are sampled at (tracked targets). Default 30. */
2103
+ fps?: number;
2104
+ /** Font defaults for text nodes that don't set them. */
2105
+ textDefaults?: Partial<MeasureOptions>;
2106
+ }
2107
+ type ResolvedTarget = {
2108
+ kind: "static";
2109
+ rects: Rect[];
2110
+ anchor: Anchor;
2111
+ } | {
2112
+ kind: "dynamic";
2113
+ at: (frame: number) => Rect;
2114
+ anchor: Anchor;
2115
+ };
2116
+ /** Resolve a target to rects (static) or a per-frame rect (dynamic). */
2117
+ declare function resolveTarget(target: Target, ctx?: TargetContext): ResolvedTarget;
2118
+ /** A text target's string, measured glyphs and range, and where the node sits. */
2119
+ interface TextLayout {
2120
+ content: string;
2121
+ metrics: ReturnType<MeasureFn>;
2122
+ options: MeasureOptions;
2123
+ range: [number, number];
2124
+ /** The node's x / y: add to measured glyph positions. */
2223
2125
  x: number;
2224
2126
  y: number;
2225
- width: number;
2226
- height: number;
2227
- /** 0–100, the engine's scale. */
2228
- strength: number;
2229
- size?: number;
2230
2127
  }
2231
- interface ExtrudedTextOptions {
2232
- id?: string;
2233
- text: string;
2234
- /** Centre of the text. */
2235
- x: number;
2236
- y: number;
2237
- depth: number;
2238
- fontFamily?: string;
2239
- fontSize: number;
2240
- fontWeight?: number;
2241
- fill?: string;
2242
- bevelColor?: string;
2243
- material?: "lit" | "glass";
2244
- metallic?: number;
2245
- roughness?: number;
2246
- shininess?: number;
2247
- opacity?: number;
2128
+ /** Measure a text target the way the renderer lays it out. */
2129
+ declare function textLayout(target: Extract<Target, {
2130
+ text: TargetNode;
2131
+ }>, ctx: TargetContext): TextLayout;
2132
+ /** The union rect of `rects`. */
2133
+ declare function boundsOf(rects: readonly Rect[]): Rect;
2134
+ /** The point of `rect` named by `anchor`. `tip` on text = start of the first line, mid-height. */
2135
+ declare function anchorPoint(rect: Rect, anchor?: Anchor, isText?: boolean): Vec2$1;
2136
+ /** The point a resolved target names at `frame` (static targets ignore frame). */
2137
+ declare function targetPoint(resolved: ResolvedTarget, frame?: number, isText?: boolean): Vec2$1;
2138
+ //#endregion
2139
+ //#region src/core/audio.d.ts
2140
+ /** A track's spectrum and loudness per frame, every value 0–1. */
2141
+ interface AudioLevels {
2142
+ fps: number;
2143
+ /** Length in frames. */
2144
+ frames: number;
2145
+ /** `[band][frame]`, low → high frequencies. */
2146
+ bands: number[][];
2147
+ /** Loudness envelope, `[frame]`. */
2148
+ level: number[];
2149
+ /** Onset frames (kicks, plosives), from low-band flux. */
2150
+ beats: number[];
2248
2151
  }
2249
- /** A GPU particle system (framefields' `Layer.particles`), as plain data. */
2250
- interface ParticleOptions {
2251
- id?: string;
2252
- x: number;
2253
- y: number;
2254
- width: number;
2255
- height: number;
2256
- seed?: number;
2257
- /** Most particles alive at once. */
2258
- max?: number;
2259
- emitter: {
2260
- shape: "point";
2261
- x: number;
2262
- y: number;
2263
- /** Particles a second (0 for bursts only). */
2264
- rate: number;
2265
- bursts: Array<{
2266
- frame: number;
2267
- count: number;
2268
- }>;
2269
- };
2270
- /** Seconds each particle lives. */
2271
- lifetime?: [number, number];
2272
- /** Launch speed, px/s. */
2273
- speed?: [number, number];
2274
- /** Degrees, 0 = right, -90 = up. */
2275
- direction?: number;
2276
- spread?: number;
2277
- /** px/s², down. */
2278
- gravity?: number;
2279
- drag?: number;
2280
- noise?: {
2281
- strength: number;
2282
- scale: number;
2283
- speed: number;
2284
- };
2285
- /** A floor line (layer px) particles bounce on and settle. */
2286
- floor?: number;
2287
- bounce?: number;
2288
- /** px at birth → death. */
2289
- size?: [number, number];
2290
- sizeJitter?: number;
2291
- fade?: [number, number];
2292
- shape?: "circle" | "soft" | "square" | "spark";
2293
- stretch?: number;
2294
- blend?: "normal" | "add" | "screen";
2295
- color?: string | string[];
2296
- opacity?: number;
2152
+ interface AnalyzeOptions {
2153
+ /** Frame rate of the composition. Default 30. */
2154
+ fps?: number;
2155
+ /** Log-spaced bands. Default 32. */
2156
+ bands?: number;
2157
+ /** Lowest band edge, Hz. Default 50. */
2158
+ minHz?: number;
2159
+ /** Highest band edge, Hz. Default 12 000 (or Nyquist). */
2160
+ maxHz?: number;
2297
2161
  }
2298
- interface CutoutOptions extends MediaOptions {
2299
- mode?: "person" | "subject";
2162
+ /** Band edges in Hz, log-spaced. */
2163
+ declare function bandEdges(count: number, minHz: number, maxHz: number): number[];
2164
+ /**
2165
+ * Analyse decoded audio: a Hann-windowed FFT per frame into log-spaced
2166
+ * bands, each normalised to its own 98th percentile (floored 30 dB under the
2167
+ * loudest band's, so a quiet band is not stretched into noise), an RMS level
2168
+ * envelope, and onsets from low-band spectral flux.
2169
+ */
2170
+ declare function analyzeChannels(channels: readonly Float32Array[], sampleRate: number, options?: AnalyzeOptions): AudioLevels;
2171
+ /** Average adjacent bands down (or repeat them up) to `count` bands. */
2172
+ declare function resampleBands(bands: readonly (readonly number[])[], count: number): number[][];
2173
+ /** Each value falls no faster than `release` frames from its peak (attack is instant). */
2174
+ declare function smoothRelease(values: readonly number[], release: number): number[];
2175
+ /** The schema for `AudioLevels` props (Waveform, Captions `pulse`). */
2176
+ declare function audioLevelsSchema(): z.ZodType<AudioLevels>;
2177
+ //#endregion
2178
+ //#region src/core/bake.d.ts
2179
+ /**
2180
+ * Turn per-frame values into a few linear keyframes. Components solve motion
2181
+ * offline (springs, camera follow, arc-length travel) and bake it, so the
2182
+ * output stays plain keyframe JSON that seeks exactly.
2183
+ */
2184
+ /** `[frame, value]`: a linear keyframe, as `LayerAnimation.keys` takes it. */
2185
+ type BakedKey = [frame: number, value: number];
2186
+ interface BakeOptions {
2187
+ /** Max deviation (in the value's units) of the simplified curve. Default 0.25. */
2188
+ tolerance?: number;
2300
2189
  }
2190
+ /**
2191
+ * Simplify `values` (one per frame, starting at `startFrame`) to linear keys
2192
+ * whose interpolation stays within `tolerance` of every sample
2193
+ * (Ramer–Douglas–Peucker on the frame/value polyline). First and last
2194
+ * samples are always kept.
2195
+ */
2196
+ declare function bakeSamples(values: readonly number[], startFrame?: number, options?: BakeOptions): BakedKey[];
2197
+ /** Sample `fn` on every frame in [start, end] and bake it. */
2198
+ declare function bakeFunction(fn: (frame: number) => number, start: number, end: number, options?: BakeOptions): BakedKey[];
2199
+ /**
2200
+ * Damped spring from 0 to 1 in closed form: `stiffness` (k), `damping` (c),
2201
+ * `mass` (m), sampled in seconds. Under-damped springs overshoot.
2202
+ */
2203
+ declare function springAt(seconds: number, {
2204
+ stiffness,
2205
+ damping,
2206
+ mass
2207
+ }?: {
2208
+ stiffness?: number | undefined;
2209
+ damping?: number | undefined;
2210
+ mass?: number | undefined;
2211
+ }): number;
2212
+ /**
2213
+ * Frames until a spring stays within `epsilon` of rest, at `fps`; capped at
2214
+ * `max` frames.
2215
+ */
2216
+ declare function springSettleFrames(fps: number, options?: Parameters<typeof springAt>[1], epsilon?: number, max?: number): number;
2217
+ /**
2218
+ * A spring from `from` to `to` starting at frame `start`, baked to linear
2219
+ * keys (within `tolerance`, default 0.2 % of the distance).
2220
+ */
2221
+ declare function springKeys(start: number, from: number, to: number, fps: number, options?: Parameters<typeof springAt>[1], tolerance?: number): BakedKey[];
2222
+ /**
2223
+ * Per-frame values (frames 0…`length`) that spring to each new target from
2224
+ * wherever they are: a retarget mid-flight starts from the current value
2225
+ * (velocity isn't carried over). Bake with `bakeSamples` or bind as a signal.
2226
+ */
2227
+ declare function springTrack(changes: ReadonlyArray<readonly [frame: number, target: number]>, initial: number, length: number, fps: number, options?: {
2228
+ stiffness: number;
2229
+ damping: number;
2230
+ }): number[];
2231
+ //#endregion
2232
+ //#region src/core/color.d.ts
2233
+ /**
2234
+ * Color math for components: parse, fade, mix and judge lightness. Accepts
2235
+ * `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`, `rgb()` / `rgba()` (comma or
2236
+ * space syntax) and `white` / `black` / `transparent`. Anything else (a
2237
+ * gradient, `oklch()`, a CSS variable) passes through untouched where a
2238
+ * function returns a color, and counts as unknown where it returns a number.
2239
+ */
2240
+ /** Red, green, blue (0–255) and alpha (0–1). */
2241
+ type Rgba = [r: number, g: number, b: number, a: number];
2242
+ /** The color's channels, or null when the format isn't one listed above. */
2243
+ declare function parseColor(color: string): Rgba | null;
2244
+ /** `color` at `alpha` (replacing its own); unknown formats pass through. */
2245
+ declare function withAlpha(color: string, alpha: number): string;
2246
+ /**
2247
+ * `color` fully transparent, keeping its hue, so a gradient fading to it has
2248
+ * no dark fringe. Unknown formats give plain `rgba(0,0,0,0)`.
2249
+ */
2250
+ declare function transparent(color: string): string;
2251
+ /** Mix `a` toward `b` by `t` (0 → a, 1 → b): `#rrggbb` when both are opaque. */
2252
+ declare function mix(a: string, b: string, t: number): string;
2253
+ /** WCAG relative luminance (0 black … 1 white), or null for unknown formats. */
2254
+ declare function luminance(color: string): number | null;
2255
+ /** WCAG contrast ratio of two colors, or null when either is unknown. */
2256
+ declare function contrastRatio(a: string, b: string): number | null;
2257
+ /**
2258
+ * True when black text reads better than white on `color` (luminance above
2259
+ * ~0.18). Unknown formats count as dark.
2260
+ */
2261
+ declare function isLight(color: string): boolean;
2262
+ /** Whichever of `light` / `dark` ink reads better on `background`. */
2263
+ declare function inkOn(background: string, light?: string, dark?: string): string;
2301
2264
  //#endregion
2302
2265
  //#region src/core/theme.d.ts
2266
+ /** A spring, as `springKeys` / `springAt` take it. */
2267
+ interface Spring {
2268
+ stiffness: number;
2269
+ damping: number;
2270
+ }
2271
+ /**
2272
+ * How far a surface sits above what's behind it: a soft drop shadow, plus a
2273
+ * faint highlight along its top edge so it reads as a lit object.
2274
+ */
2275
+ interface Elevation {
2276
+ /** Shadow opacity, 0–1. */
2277
+ opacity: number;
2278
+ /** Shadow offset (straight down) and blur, px at theme scale 1. */
2279
+ distance: number;
2280
+ size: number;
2281
+ /** Opacity of the 1 px top-edge highlight, 0–1 (0: none). */
2282
+ edge: number;
2283
+ }
2303
2284
  interface Theme {
2285
+ /** Whether `bg` is dark or light; components pick shadows and chrome by it. */
2286
+ mode: "dark" | "light";
2304
2287
  color: {
2305
2288
  bg: string;
2306
2289
  surface: string;
@@ -2313,6 +2296,8 @@ interface Theme {
2313
2296
  positive: string;
2314
2297
  negative: string;
2315
2298
  highlight: string;
2299
+ /** Shadow color (elevation). */
2300
+ shadow: string;
2316
2301
  };
2317
2302
  font: {
2318
2303
  display: string;
@@ -2320,6 +2305,14 @@ interface Theme {
2320
2305
  mono: string;
2321
2306
  hand?: string;
2322
2307
  };
2308
+ /** Font weights by role, so one theme can swap a heavier or lighter family. */
2309
+ weight: {
2310
+ regular: number;
2311
+ medium: number;
2312
+ semibold: number;
2313
+ bold: number;
2314
+ heavy: number;
2315
+ };
2323
2316
  radius: {
2324
2317
  sm: number;
2325
2318
  md: number;
@@ -2331,6 +2324,12 @@ interface Theme {
2331
2324
  base: number;
2332
2325
  bold: number;
2333
2326
  };
2327
+ /** Surfaces: `low` (chips, tags), `mid` (cards, toasts), `high` (windows, modals). */
2328
+ elevation: {
2329
+ low: Elevation;
2330
+ mid: Elevation;
2331
+ high: Elevation;
2332
+ };
2334
2333
  motion: {
2335
2334
  ease: {
2336
2335
  enter: string;
@@ -2344,16 +2343,31 @@ interface Theme {
2344
2343
  base: number;
2345
2344
  slow: number;
2346
2345
  };
2346
+ /** `settle` lands without overshoot, `base` overshoots a little, `pop` bounces. */
2347
+ spring: {
2348
+ settle: Spring;
2349
+ base: Spring;
2350
+ pop: Spring;
2351
+ };
2347
2352
  };
2353
+ /** Code token colors (CodeBlock); unset kinds use the built-in palette. */
2354
+ syntax?: Partial<Record<SyntaxKind, string>>;
2348
2355
  /** 1 = designed for 1080p. 2 for 4K, 0.5 for 540p. */
2349
2356
  scale: number;
2350
2357
  }
2358
+ /** Token kinds CodeBlock colors. */
2359
+ type SyntaxKind = "plain" | "keyword" | "string" | "number" | "comment" | "function" | "type" | "property" | "punctuation" | "operator";
2351
2360
  type ThemeInput = DeepPartial<Theme>;
2352
2361
  type DeepPartial<T> = { [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K] };
2353
2362
  /** Built-in themes. Fonts are never bundled: register the families you use. */
2354
2363
  declare const themes: {
2355
2364
  /** Dark neutral: product demos, dev tools. */
2356
2365
  readonly graphite: {
2366
+ readonly elevation: {
2367
+ low: Elevation;
2368
+ mid: Elevation;
2369
+ high: Elevation;
2370
+ };
2357
2371
  readonly motion: {
2358
2372
  ease: {
2359
2373
  enter: string;
@@ -2367,6 +2381,12 @@ declare const themes: {
2367
2381
  base: number;
2368
2382
  slow: number;
2369
2383
  };
2384
+ /** `settle` lands without overshoot, `base` overshoots a little, `pop` bounces. */
2385
+ spring: {
2386
+ settle: Spring;
2387
+ base: Spring;
2388
+ pop: Spring;
2389
+ };
2370
2390
  };
2371
2391
  readonly scale: 1;
2372
2392
  readonly radius: {
@@ -2380,6 +2400,7 @@ declare const themes: {
2380
2400
  base: number;
2381
2401
  bold: number;
2382
2402
  };
2403
+ readonly mode: "dark";
2383
2404
  readonly color: {
2384
2405
  readonly bg: "#0d0e11";
2385
2406
  readonly surface: "#16181d";
@@ -2392,6 +2413,7 @@ declare const themes: {
2392
2413
  readonly positive: "#3ecf8e";
2393
2414
  readonly negative: "#ff5c5c";
2394
2415
  readonly highlight: "#ffd23f";
2416
+ readonly shadow: "#000000";
2395
2417
  };
2396
2418
  readonly font: {
2397
2419
  display: string;
@@ -2399,9 +2421,21 @@ declare const themes: {
2399
2421
  mono: string;
2400
2422
  hand?: string;
2401
2423
  };
2424
+ readonly weight: {
2425
+ regular: number;
2426
+ medium: number;
2427
+ semibold: number;
2428
+ bold: number;
2429
+ heavy: number;
2430
+ };
2402
2431
  };
2403
2432
  /** Light editorial: explainers, documentaries. */
2404
2433
  readonly paper: {
2434
+ readonly elevation: {
2435
+ low: Elevation;
2436
+ mid: Elevation;
2437
+ high: Elevation;
2438
+ };
2405
2439
  readonly motion: {
2406
2440
  ease: {
2407
2441
  enter: string;
@@ -2415,6 +2449,12 @@ declare const themes: {
2415
2449
  base: number;
2416
2450
  slow: number;
2417
2451
  };
2452
+ /** `settle` lands without overshoot, `base` overshoots a little, `pop` bounces. */
2453
+ spring: {
2454
+ settle: Spring;
2455
+ base: Spring;
2456
+ pop: Spring;
2457
+ };
2418
2458
  };
2419
2459
  readonly scale: 1;
2420
2460
  readonly radius: {
@@ -2428,6 +2468,7 @@ declare const themes: {
2428
2468
  base: number;
2429
2469
  bold: number;
2430
2470
  };
2471
+ readonly mode: "light";
2431
2472
  readonly color: {
2432
2473
  readonly bg: "#f4f1ea";
2433
2474
  readonly surface: "#fffdf8";
@@ -2440,6 +2481,82 @@ declare const themes: {
2440
2481
  readonly positive: "#1f8a4c";
2441
2482
  readonly negative: "#c8282d";
2442
2483
  readonly highlight: "#ffe066";
2484
+ readonly shadow: "#3b2f1e";
2485
+ };
2486
+ readonly font: {
2487
+ display: string;
2488
+ body: string;
2489
+ mono: string;
2490
+ hand?: string;
2491
+ };
2492
+ readonly weight: {
2493
+ regular: number;
2494
+ medium: number;
2495
+ semibold: number;
2496
+ bold: number;
2497
+ heavy: number;
2498
+ };
2499
+ };
2500
+ /** High contrast, saturated accent: social clips. */
2501
+ readonly signal: {
2502
+ readonly elevation: {
2503
+ low: Elevation;
2504
+ mid: Elevation;
2505
+ high: Elevation;
2506
+ };
2507
+ readonly motion: {
2508
+ readonly ease: {
2509
+ readonly enter: "back.out(1.8)";
2510
+ readonly exit: string;
2511
+ readonly move: string;
2512
+ readonly snap: string;
2513
+ };
2514
+ readonly speed: {
2515
+ readonly fast: 6;
2516
+ readonly base: 12;
2517
+ readonly slow: 24;
2518
+ };
2519
+ readonly spring: {
2520
+ readonly settle: {
2521
+ readonly stiffness: 300;
2522
+ readonly damping: 26;
2523
+ };
2524
+ readonly base: {
2525
+ readonly stiffness: 340;
2526
+ readonly damping: 22;
2527
+ };
2528
+ readonly pop: {
2529
+ readonly stiffness: 400;
2530
+ readonly damping: 14;
2531
+ };
2532
+ };
2533
+ };
2534
+ readonly scale: 1;
2535
+ readonly radius: {
2536
+ sm: number;
2537
+ md: number;
2538
+ lg: number;
2539
+ pill: number;
2540
+ };
2541
+ readonly stroke: {
2542
+ hair: number;
2543
+ base: number;
2544
+ bold: number;
2545
+ };
2546
+ readonly mode: "dark";
2547
+ readonly color: {
2548
+ readonly bg: "#000000";
2549
+ readonly surface: "#111111";
2550
+ readonly raised: "#1c1c1c";
2551
+ readonly line: "#333333";
2552
+ readonly ink: "#ffffff";
2553
+ readonly muted: "#a3a3a3";
2554
+ readonly accent: "#c6ff00";
2555
+ readonly accent2: "#ff2e88";
2556
+ readonly positive: "#00e676";
2557
+ readonly negative: "#ff1744";
2558
+ readonly highlight: "#c6ff00";
2559
+ readonly shadow: "#000000";
2443
2560
  };
2444
2561
  readonly font: {
2445
2562
  display: string;
@@ -2447,65 +2564,254 @@ declare const themes: {
2447
2564
  mono: string;
2448
2565
  hand?: string;
2449
2566
  };
2567
+ readonly weight: {
2568
+ regular: number;
2569
+ medium: number;
2570
+ semibold: number;
2571
+ bold: number;
2572
+ heavy: number;
2573
+ };
2574
+ };
2575
+ };
2576
+ type ThemeName = keyof typeof themes;
2577
+ /**
2578
+ * Merge a partial theme over a base (default `themes.graphite`). Throws when
2579
+ * `ink` on `surface` falls below WCAG 4.5:1 and both are hex colors.
2580
+ */
2581
+ declare function defineTheme(input?: ThemeInput | Theme, base?: Theme): Theme;
2582
+ /** A theme's duration token in frames at `fps`. */
2583
+ declare function themeFrames(theme: Theme, speed: keyof Theme["motion"]["speed"], fps?: number): number;
2584
+ //#endregion
2585
+ //#region src/core/host.d.ts
2586
+ /** Photoshop-style layer styles (framefields' `LayerStyle`). Omitted styles are off. */
2587
+ interface LayerStyleConfig {
2588
+ dropShadow?: {
2589
+ color?: string;
2590
+ opacity?: number;
2591
+ /** Light angle in degrees (90 = shadow straight down). */
2592
+ angle?: number;
2593
+ distance?: number;
2594
+ spread?: number;
2595
+ size?: number;
2596
+ blendMode?: string;
2597
+ };
2598
+ outerGlow?: {
2599
+ color?: string;
2600
+ opacity?: number;
2601
+ size?: number;
2602
+ spread?: number;
2603
+ blendMode?: string;
2604
+ };
2605
+ innerShadow?: {
2606
+ color?: string;
2607
+ opacity?: number;
2608
+ /** Degrees, as for drop shadows: 90 shades the bottom inside edge, 270 the top. */
2609
+ angle?: number;
2610
+ distance?: number;
2611
+ size?: number;
2612
+ choke?: number;
2613
+ /** Default `"multiply"` (a light color then does nothing: use `"normal"` or `"screen"`). */
2614
+ blendMode?: string;
2615
+ };
2616
+ stroke?: {
2617
+ size?: number;
2618
+ position?: "inside" | "center" | "outside";
2619
+ color?: string;
2620
+ opacity?: number;
2621
+ };
2622
+ }
2623
+ interface MediaOptions {
2624
+ id?: string;
2625
+ position?: "absolute" | "relative";
2626
+ x?: number;
2627
+ y?: number;
2628
+ width?: number;
2629
+ height?: number;
2630
+ fit?: "cover" | "contain" | "fill";
2631
+ }
2632
+ /** The part of framefields' `AnimatableNode` components rely on. */
2633
+ interface AnimatableMethods {
2634
+ animate(...anims: unknown[]): unknown;
2635
+ }
2636
+ type Animatable<T> = T & AnimatableMethods;
2637
+ interface Host {
2638
+ box(options: Partial<BoxNode>): Animatable<BoxNode>;
2639
+ flex(options: Partial<FlexNode>): Animatable<FlexNode>;
2640
+ text(content: string, options?: Partial<TextNode>): Animatable<TextNode>;
2641
+ shape(type: ShapeType, options?: Partial<ShapeNode>): Animatable<ShapeNode>;
2642
+ /** `FontManager.measure`. */
2643
+ measure: MeasureFn;
2644
+ /** Registered font families. */
2645
+ fonts(): readonly string[];
2646
+ /** A default id: stable per run (a counter per prefix), like `Layer.*` ids. */
2647
+ autoId(prefix: string): string;
2648
+ /** A video, image or SVG layer, by file extension. */
2649
+ media(source: string, options: MediaOptions): Animatable<LayoutNode>;
2650
+ /** Attach layer styles (shadow, glow, stroke) to `node`; returns it. */
2651
+ style<T extends Animatable<LayoutNode>>(node: T, config: LayerStyleConfig): T;
2652
+ /**
2653
+ * Mask `node` by `matte`'s alpha (a box: solid or CSS-gradient
2654
+ * background), or by its inverse (`"alpha-inverted"`: show `node`
2655
+ * everywhere the matte is not). The matte is laid out like a sibling of
2656
+ * `node`; returns `node`.
2657
+ */
2658
+ matte<T extends Animatable<LayoutNode>>(node: T, matte: LayoutNode, mode?: "alpha" | "alpha-inverted"): T;
2659
+ /**
2660
+ * A video showing only its person / subject (vision segmentation), the
2661
+ * rest transparent: stacked over captions so text passes behind them.
2662
+ */
2663
+ cutout(source: string, options: CutoutOptions): Animatable<LayoutNode>;
2664
+ /** A GPU particle system layer. */
2665
+ particles(options: ParticleOptions): Animatable<LayoutNode>;
2666
+ /**
2667
+ * A per-frame signal from values (framefields' `Signal.fromArray`), for
2668
+ * `LayerAnimation.signal`. Signals read the composition's frame: value
2669
+ * `k` drives composition frame `k`.
2670
+ */
2671
+ signal(values: readonly number[], fps: number): object;
2672
+ /**
2673
+ * An animated film-grain layer to put over other layers: neutral grey
2674
+ * carrying framefields' `FilmGrain`, soft-light blended. (Effects only
2675
+ * attach to media layers, so grain can't go on a box.)
2676
+ */
2677
+ grain(options: GrainOptions): Animatable<LayoutNode>;
2678
+ /** Solid extruded 3D text (framefields' `Layer3D.extrudedText`), centred on x, y. */
2679
+ extrudedText(options: ExtrudedTextOptions): Animatable<LayoutNode>;
2680
+ }
2681
+ interface GrainOptions {
2682
+ id?: string;
2683
+ x: number;
2684
+ y: number;
2685
+ width: number;
2686
+ height: number;
2687
+ /** 0–100, the engine's scale. */
2688
+ strength: number;
2689
+ size?: number;
2690
+ }
2691
+ interface ExtrudedTextOptions {
2692
+ id?: string;
2693
+ text: string;
2694
+ /** Centre of the text. */
2695
+ x: number;
2696
+ y: number;
2697
+ depth: number;
2698
+ fontFamily?: string;
2699
+ fontSize: number;
2700
+ fontWeight?: number;
2701
+ fill?: string;
2702
+ bevelColor?: string;
2703
+ material?: "lit" | "glass";
2704
+ metallic?: number;
2705
+ roughness?: number;
2706
+ shininess?: number;
2707
+ opacity?: number;
2708
+ }
2709
+ /** A GPU particle system (framefields' `Layer.particles`), as plain data. */
2710
+ interface ParticleOptions {
2711
+ id?: string;
2712
+ x: number;
2713
+ y: number;
2714
+ width: number;
2715
+ height: number;
2716
+ seed?: number;
2717
+ /** Most particles alive at once. */
2718
+ max?: number;
2719
+ emitter: {
2720
+ shape: "point";
2721
+ x: number;
2722
+ y: number;
2723
+ /** Particles a second (0 for bursts only). */
2724
+ rate: number;
2725
+ bursts: Array<{
2726
+ frame: number;
2727
+ count: number;
2728
+ }>;
2450
2729
  };
2451
- /** High contrast, saturated accent: social clips. */
2452
- readonly signal: {
2453
- readonly motion: {
2454
- readonly ease: {
2455
- readonly enter: "back.out(1.8)";
2456
- readonly exit: string;
2457
- readonly move: string;
2458
- readonly snap: string;
2459
- };
2460
- readonly speed: {
2461
- readonly fast: 6;
2462
- readonly base: 12;
2463
- readonly slow: 24;
2464
- };
2465
- };
2466
- readonly scale: 1;
2467
- readonly radius: {
2468
- sm: number;
2469
- md: number;
2470
- lg: number;
2471
- pill: number;
2730
+ /** Seconds each particle lives. */
2731
+ lifetime?: [number, number];
2732
+ /** Launch speed, px/s. */
2733
+ speed?: [number, number];
2734
+ /** Degrees, 0 = right, -90 = up. */
2735
+ direction?: number;
2736
+ spread?: number;
2737
+ /** px/s², down. */
2738
+ gravity?: number;
2739
+ drag?: number;
2740
+ noise?: {
2741
+ strength: number;
2742
+ scale: number;
2743
+ speed: number;
2744
+ };
2745
+ /** A floor line (layer px) particles bounce on and settle. */
2746
+ floor?: number;
2747
+ bounce?: number;
2748
+ /** px at birth → death. */
2749
+ size?: [number, number];
2750
+ sizeJitter?: number;
2751
+ fade?: [number, number];
2752
+ shape?: "circle" | "soft" | "square" | "spark";
2753
+ stretch?: number;
2754
+ blend?: "normal" | "add" | "screen";
2755
+ color?: string | string[];
2756
+ opacity?: number;
2757
+ }
2758
+ interface CutoutOptions extends MediaOptions {
2759
+ mode?: "person" | "subject";
2760
+ }
2761
+ //#endregion
2762
+ //#region src/core/layout.d.ts
2763
+ /** The composition size a full-frame component covers. */
2764
+ interface CanvasSize {
2765
+ width: number;
2766
+ height: number;
2767
+ }
2768
+ /** Margins as shares of the frame: left / right `x`, `top`, `bottom`. */
2769
+ interface SafeInsets {
2770
+ x: number;
2771
+ top: number;
2772
+ bottom: number;
2773
+ }
2774
+ /**
2775
+ * Safe-area margins by use. Portrait leaves room for the captions, buttons
2776
+ * and handles that short-form platforms draw over the bottom and right.
2777
+ */
2778
+ declare const SAFE_INSETS: {
2779
+ /** Titles, plates, lower thirds. */
2780
+ readonly titles: {
2781
+ readonly landscape: {
2782
+ readonly x: 0.06;
2783
+ readonly top: 0.08;
2784
+ readonly bottom: 0.1;
2472
2785
  };
2473
- readonly stroke: {
2474
- hair: number;
2475
- base: number;
2476
- bold: number;
2786
+ readonly portrait: {
2787
+ readonly x: 0.08;
2788
+ readonly top: 0.1;
2789
+ readonly bottom: 0.24;
2477
2790
  };
2478
- readonly color: {
2479
- readonly bg: "#000000";
2480
- readonly surface: "#111111";
2481
- readonly raised: "#1c1c1c";
2482
- readonly line: "#333333";
2483
- readonly ink: "#ffffff";
2484
- readonly muted: "#a3a3a3";
2485
- readonly accent: "#c6ff00";
2486
- readonly accent2: "#ff2e88";
2487
- readonly positive: "#00e676";
2488
- readonly negative: "#ff1744";
2489
- readonly highlight: "#c6ff00";
2791
+ };
2792
+ /** Subtitles: narrower lines, the same bottom clearance. */
2793
+ readonly captions: {
2794
+ readonly landscape: {
2795
+ readonly x: 0.1;
2796
+ readonly top: 0.08;
2797
+ readonly bottom: 0.1;
2490
2798
  };
2491
- readonly font: {
2492
- display: string;
2493
- body: string;
2494
- mono: string;
2495
- hand?: string;
2799
+ readonly portrait: {
2800
+ readonly x: 0.08;
2801
+ readonly top: 0.12;
2802
+ readonly bottom: 0.22;
2496
2803
  };
2497
2804
  };
2498
2805
  };
2499
- type ThemeName = keyof typeof themes;
2500
2806
  /**
2501
- * Merge a partial theme over a base (default `themes.graphite`). Throws when
2502
- * `ink` on `surface` falls below WCAG 4.5:1 and both are hex colors.
2807
+ * The rect inside `canvas` that content keeps to. `area` forces an
2808
+ * orientation or gives the rect itself; by default a frame taller than it is
2809
+ * wide counts as portrait.
2503
2810
  */
2504
- declare function defineTheme(input?: ThemeInput | Theme, base?: Theme): Theme;
2505
- /** A theme's duration token in frames at `fps`. */
2506
- declare function themeFrames(theme: Theme, speed: keyof Theme["motion"]["speed"], fps?: number): number;
2507
- /** WCAG contrast ratio of two hex colors, or null when either isn't hex. */
2508
- declare function contrastRatio(a: string, b: string): number | null;
2811
+ declare function safeArea(canvas: CanvasSize, area?: "portrait" | "landscape" | Rect, insets?: {
2812
+ landscape: SafeInsets;
2813
+ portrait: SafeInsets;
2814
+ }): Rect;
2509
2815
  //#endregion
2510
2816
  //#region src/core/motion.d.ts
2511
2817
  type MotionPresetName = "none" | "fade" | "rise" | "drop" | "scale" | "pop" | "slide-left" | "slide-right" | "slide-up" | "slide-down" | "tilt" | "mask-up" | "mask-down" | "mask-left" | "mask-right";
@@ -2518,6 +2824,11 @@ interface MotionOptions {
2518
2824
  distance?: number;
2519
2825
  /** Frames to wait after the window starts (enter) or before it ends (exit). */
2520
2826
  delay?: number;
2827
+ /**
2828
+ * Motion blur while the stage moves: `true` (90° shutter), a shutter
2829
+ * angle in degrees, or `false`. Default on for `slide-*`, off otherwise.
2830
+ */
2831
+ blur?: boolean | number;
2521
2832
  }
2522
2833
  type MotionPreset = MotionPresetName | ({
2523
2834
  preset: MotionPresetName;
@@ -2528,6 +2839,8 @@ interface ResolvedMotion {
2528
2839
  ease: string;
2529
2840
  distance: number;
2530
2841
  delay: number;
2842
+ /** Shutter angle in degrees; 0 = no motion blur. */
2843
+ blur: number;
2531
2844
  }
2532
2845
  /** Normalise a preset (or `false`) against a theme and fps. */
2533
2846
  declare function resolveMotion(input: MotionPreset | false | undefined, kind: "enter" | "exit", theme: Theme, fps?: number): ResolvedMotion | null;
@@ -2622,6 +2935,7 @@ declare function basePropsSchema(): z.ZodObject<{
2622
2935
  ease: z.ZodOptional<z.ZodString>;
2623
2936
  distance: z.ZodOptional<z.ZodNumber>;
2624
2937
  delay: z.ZodOptional<z.ZodNumber>;
2938
+ blur: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber]>>;
2625
2939
  }, z.core.$strip>]>, z.ZodLiteral<false>]>>;
2626
2940
  exit: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodEnum<{
2627
2941
  [x: string]: string;
@@ -2633,6 +2947,7 @@ declare function basePropsSchema(): z.ZodObject<{
2633
2947
  ease: z.ZodOptional<z.ZodString>;
2634
2948
  distance: z.ZodOptional<z.ZodNumber>;
2635
2949
  delay: z.ZodOptional<z.ZodNumber>;
2950
+ blur: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber]>>;
2636
2951
  }, z.core.$strip>]>, z.ZodLiteral<false>]>>;
2637
2952
  x: z.ZodOptional<z.ZodNumber>;
2638
2953
  y: z.ZodOptional<z.ZodNumber>;
@@ -2643,6 +2958,7 @@ declare function basePropsSchema(): z.ZodObject<{
2643
2958
  relative: "relative";
2644
2959
  }>>;
2645
2960
  theme: z.ZodOptional<z.ZodCustom<{
2961
+ mode?: "dark" | "light" | undefined;
2646
2962
  color?: {
2647
2963
  bg?: string | undefined;
2648
2964
  surface?: string | undefined;
@@ -2655,6 +2971,7 @@ declare function basePropsSchema(): z.ZodObject<{
2655
2971
  positive?: string | undefined;
2656
2972
  negative?: string | undefined;
2657
2973
  highlight?: string | undefined;
2974
+ shadow?: string | undefined;
2658
2975
  } | undefined;
2659
2976
  font?: {
2660
2977
  display?: string | undefined;
@@ -2662,6 +2979,13 @@ declare function basePropsSchema(): z.ZodObject<{
2662
2979
  mono?: string | undefined;
2663
2980
  hand?: string | undefined;
2664
2981
  } | undefined;
2982
+ weight?: {
2983
+ regular?: number | undefined;
2984
+ medium?: number | undefined;
2985
+ semibold?: number | undefined;
2986
+ bold?: number | undefined;
2987
+ heavy?: number | undefined;
2988
+ } | undefined;
2665
2989
  radius?: {
2666
2990
  sm?: number | undefined;
2667
2991
  md?: number | undefined;
@@ -2673,6 +2997,26 @@ declare function basePropsSchema(): z.ZodObject<{
2673
2997
  base?: number | undefined;
2674
2998
  bold?: number | undefined;
2675
2999
  } | undefined;
3000
+ elevation?: {
3001
+ low?: {
3002
+ opacity?: number | undefined;
3003
+ distance?: number | undefined;
3004
+ size?: number | undefined;
3005
+ edge?: number | undefined;
3006
+ } | undefined;
3007
+ mid?: {
3008
+ opacity?: number | undefined;
3009
+ distance?: number | undefined;
3010
+ size?: number | undefined;
3011
+ edge?: number | undefined;
3012
+ } | undefined;
3013
+ high?: {
3014
+ opacity?: number | undefined;
3015
+ distance?: number | undefined;
3016
+ size?: number | undefined;
3017
+ edge?: number | undefined;
3018
+ } | undefined;
3019
+ } | undefined;
2676
3020
  motion?: {
2677
3021
  ease?: {
2678
3022
  enter?: string | undefined;
@@ -2685,9 +3029,25 @@ declare function basePropsSchema(): z.ZodObject<{
2685
3029
  base?: number | undefined;
2686
3030
  slow?: number | undefined;
2687
3031
  } | undefined;
3032
+ spring?: {
3033
+ settle?: {
3034
+ stiffness?: number | undefined;
3035
+ damping?: number | undefined;
3036
+ } | undefined;
3037
+ base?: {
3038
+ stiffness?: number | undefined;
3039
+ damping?: number | undefined;
3040
+ } | undefined;
3041
+ pop?: {
3042
+ stiffness?: number | undefined;
3043
+ damping?: number | undefined;
3044
+ } | undefined;
3045
+ } | undefined;
2688
3046
  } | undefined;
3047
+ syntax?: Partial<Record<SyntaxKind, string>> | undefined;
2689
3048
  scale?: number | undefined;
2690
3049
  }, {
3050
+ mode?: "dark" | "light" | undefined;
2691
3051
  color?: {
2692
3052
  bg?: string | undefined;
2693
3053
  surface?: string | undefined;
@@ -2700,6 +3060,7 @@ declare function basePropsSchema(): z.ZodObject<{
2700
3060
  positive?: string | undefined;
2701
3061
  negative?: string | undefined;
2702
3062
  highlight?: string | undefined;
3063
+ shadow?: string | undefined;
2703
3064
  } | undefined;
2704
3065
  font?: {
2705
3066
  display?: string | undefined;
@@ -2707,6 +3068,13 @@ declare function basePropsSchema(): z.ZodObject<{
2707
3068
  mono?: string | undefined;
2708
3069
  hand?: string | undefined;
2709
3070
  } | undefined;
3071
+ weight?: {
3072
+ regular?: number | undefined;
3073
+ medium?: number | undefined;
3074
+ semibold?: number | undefined;
3075
+ bold?: number | undefined;
3076
+ heavy?: number | undefined;
3077
+ } | undefined;
2710
3078
  radius?: {
2711
3079
  sm?: number | undefined;
2712
3080
  md?: number | undefined;
@@ -2718,6 +3086,26 @@ declare function basePropsSchema(): z.ZodObject<{
2718
3086
  base?: number | undefined;
2719
3087
  bold?: number | undefined;
2720
3088
  } | undefined;
3089
+ elevation?: {
3090
+ low?: {
3091
+ opacity?: number | undefined;
3092
+ distance?: number | undefined;
3093
+ size?: number | undefined;
3094
+ edge?: number | undefined;
3095
+ } | undefined;
3096
+ mid?: {
3097
+ opacity?: number | undefined;
3098
+ distance?: number | undefined;
3099
+ size?: number | undefined;
3100
+ edge?: number | undefined;
3101
+ } | undefined;
3102
+ high?: {
3103
+ opacity?: number | undefined;
3104
+ distance?: number | undefined;
3105
+ size?: number | undefined;
3106
+ edge?: number | undefined;
3107
+ } | undefined;
3108
+ } | undefined;
2721
3109
  motion?: {
2722
3110
  ease?: {
2723
3111
  enter?: string | undefined;
@@ -2730,11 +3118,30 @@ declare function basePropsSchema(): z.ZodObject<{
2730
3118
  base?: number | undefined;
2731
3119
  slow?: number | undefined;
2732
3120
  } | undefined;
3121
+ spring?: {
3122
+ settle?: {
3123
+ stiffness?: number | undefined;
3124
+ damping?: number | undefined;
3125
+ } | undefined;
3126
+ base?: {
3127
+ stiffness?: number | undefined;
3128
+ damping?: number | undefined;
3129
+ } | undefined;
3130
+ pop?: {
3131
+ stiffness?: number | undefined;
3132
+ damping?: number | undefined;
3133
+ } | undefined;
3134
+ } | undefined;
2733
3135
  } | undefined;
3136
+ syntax?: Partial<Record<SyntaxKind, string>> | undefined;
2734
3137
  scale?: number | undefined;
2735
3138
  }>>;
2736
3139
  seed: z.ZodOptional<z.ZodNumber>;
2737
3140
  fps: z.ZodOptional<z.ZodNumber>;
3141
+ canvas: z.ZodOptional<z.ZodObject<{
3142
+ width: z.ZodNumber;
3143
+ height: z.ZodNumber;
3144
+ }, z.core.$strict>>;
2738
3145
  customize: z.ZodOptional<z.ZodCustom<(parts: Record<string, Animatable<LayoutNode>>) => void, (parts: Record<string, Animatable<LayoutNode>>) => void>>;
2739
3146
  }, z.core.$strip>;
2740
3147
  interface BaseProps {
@@ -2761,6 +3168,11 @@ interface BaseProps {
2761
3168
  seed?: number;
2762
3169
  /** Composition frame rate: theme speeds and real-time inputs scale by it. Default 30. */
2763
3170
  fps?: number;
3171
+ /**
3172
+ * Composition size, for components that cover the frame (captions,
3173
+ * backdrops, spotlights …). Default 1920 × 1080 × `theme.scale`.
3174
+ */
3175
+ canvas?: CanvasSize;
2764
3176
  /** Receives every built part before the component returns. */
2765
3177
  customize?: (parts: Record<string, Animatable<LayoutNode>>) => void;
2766
3178
  }
@@ -2784,6 +3196,8 @@ interface BuildContext {
2784
3196
  };
2785
3197
  /** Frames the finished state holds (base `hold`, or the component's default). */
2786
3198
  hold: number;
3199
+ /** The composition size (base `canvas`, or 1920 × 1080 × theme scale). */
3200
+ canvas: CanvasSize;
2787
3201
  }
2788
3202
  /** Where the root ended up: what a component's `api` can rely on. */
2789
3203
  interface Placement {
@@ -2864,8 +3278,34 @@ interface ComponentExtras<C extends Cues> {
2864
3278
  };
2865
3279
  /** A named part (`root`, `stage`, and the component's own). */
2866
3280
  part(name: string): Animatable<LayoutNode> | undefined;
3281
+ /** Every name `part()` and `customize` answer to. */
3282
+ readonly partNames: readonly string[];
2867
3283
  }
2868
3284
  type ComponentNode$1<C extends Cues> = Animatable<BoxNode> & ComponentExtras<C>;
3285
+ /** Base props a project usually sets once: see {@link withDefaults}. */
3286
+ type ProjectDefaults = Pick<BaseProps, "fps" | "canvas" | "seed"> & {
3287
+ theme?: ThemeInput | Theme;
3288
+ };
3289
+ /**
3290
+ * Wrap component factories so every call starts from the project's frame
3291
+ * rate, canvas, theme and seed. Props given at the call win; a call's
3292
+ * partial `theme` merges over the default theme, not over `graphite`.
3293
+ *
3294
+ * ```ts
3295
+ * const ui = withDefaults({ fps: 60, canvas: { width: 1080, height: 1920 }, theme: themes.paper });
3296
+ * const Captions = ui(CaptionsBase);
3297
+ * ```
3298
+ */
3299
+ declare function withDefaults(defaults: ProjectDefaults): <P extends BaseProps, R>(factory: (props: P) => R) => (props: P) => R;
3300
+ /**
3301
+ * The frame `gap` frames after `node` ends: `at: after(title, 6)`. Throws
3302
+ * for open-ended components, which have no end until given a `duration`.
3303
+ */
3304
+ declare function after(node: {
3305
+ readonly span: {
3306
+ end: number;
3307
+ };
3308
+ }, gap?: number): number;
2869
3309
  /**
2870
3310
  * Bind a definition to a host, producing the user-facing factory. framefields
2871
3311
  * calls this once per component behind a PURE annotation, so bundlers drop
@@ -2960,6 +3400,52 @@ declare function evaluateGlyphExpression(expression: string, scope: {
2960
3400
  lineIndex?: number;
2961
3401
  }): number;
2962
3402
  //#endregion
3403
+ //#region src/core/keys.d.ts
3404
+ /** Round to `places` decimals (default 3): keeps baked keys short and stable. */
3405
+ declare const round: (v: number, places?: number) => number;
3406
+ /** The last element, or `undefined`. */
3407
+ declare const last: <T>(list: readonly T[]) => T | undefined;
3408
+ /**
3409
+ * Keys in ascending frame order; of several keys on one frame, the one given
3410
+ * last wins. Input order is otherwise free.
3411
+ */
3412
+ declare function ascending(keys: readonly KeyframeTuple[]): KeyframeTuple[];
3413
+ /**
3414
+ * Keys written as a timeline where each key supersedes what came before at
3415
+ * or after its frame: a key earlier than the previous one drops the later
3416
+ * ones (a retarget cancels the planned rest of a move).
3417
+ */
3418
+ declare function supersede(keys: readonly KeyframeTuple[]): KeyframeTuple[];
3419
+ /**
3420
+ * A numeric track's value at `frame`, the way the renderer evaluates it:
3421
+ * each segment eased by its end key's ease, `hold` stepping on the key.
3422
+ */
3423
+ declare function valueAt(keys: readonly KeyframeTuple[], frame: number): number;
3424
+ /** A value track built from transitions: each eases from wherever the value is to `to`. */
3425
+ declare class Track {
3426
+ private readonly initial;
3427
+ private changes;
3428
+ constructor(initial: number);
3429
+ to(start: number, end: number, value: number, ease?: string): this;
3430
+ /** Jump to `value` on `frame` (a hold key). */
3431
+ set(frame: number, value: number): this;
3432
+ /** Ascending keyframes; a change that starts mid-transition starts from its target. */
3433
+ keys(): KeyframeTuple[];
3434
+ }
3435
+ /**
3436
+ * Keys collected per node and prop from anywhere in a build, merged into one
3437
+ * ascending track each and applied with one `animate()` per node.
3438
+ */
3439
+ declare class KeyBook<N extends {
3440
+ animate(...anims: unknown[]): unknown;
3441
+ }> {
3442
+ private readonly book;
3443
+ /** Append keys for `node`'s `prop` (merged with any already given). */
3444
+ key(node: N, prop: AnimatableProp | (string & {}), keys: KeyframeTuple[]): this;
3445
+ /** Animate every node once with its merged tracks. */
3446
+ apply(): void;
3447
+ }
3448
+ //#endregion
2963
3449
  //#region src/core/meta.d.ts
2964
3450
  /**
2965
3451
  * Component metadata: the discovery surface for docs and coding agents.
@@ -2980,99 +3466,34 @@ interface ComponentMeta {
2980
3466
  example: string;
2981
3467
  /** Spec milestone that introduced it. */
2982
3468
  since: string;
3469
+ /**
3470
+ * Fonts it draws with beyond the theme's families. `framefields add`
3471
+ * installs each one into the project (pinned, hash-checked) and registers
3472
+ * it in the generated `fonts.ts`.
3473
+ */
3474
+ fonts?: readonly FontNeed[];
2983
3475
  }
2984
- declare function defineMeta(meta: ComponentMeta): ComponentMeta;
2985
- //#endregion
2986
- //#region src/core/targets.d.ts
2987
- type Anchor = "center" | "top" | "bottom" | "left" | "right" | "top-left" | "top-right" | "bottom-left" | "bottom-right"
2988
- /** Where a pointer should land: the centre, or mid-left for text. */ | "tip";
2989
- /** A node as targets read it: absolute numeric geometry, or text. */
2990
- interface TargetNode {
2991
- id?: string;
2992
- kind?: string;
2993
- x?: unknown;
2994
- y?: unknown;
2995
- width?: unknown;
2996
- height?: unknown;
2997
- text?: unknown;
2998
- content?: unknown;
2999
- [key: string]: unknown;
3000
- }
3001
- /** The frame context signals are read with. */
3002
- interface FrameContextLike {
3003
- frame: number;
3004
- fps: number;
3005
- time: number;
3006
- duration: number;
3007
- durationMs: number;
3008
- progress: number;
3009
- deltaTime: number;
3010
- }
3011
- /** A per-frame value: a signal (what tracked objects expose) or a function. */
3012
- type FrameValue = {
3013
- get(ctx?: FrameContextLike): number;
3014
- } | ((frame: number) => number);
3015
- interface TrackedObjectLike {
3016
- x: FrameValue;
3017
- y: FrameValue;
3018
- width: FrameValue;
3019
- height: FrameValue;
3020
- }
3021
- type Target = Vec2$1 | Rect | {
3022
- node: TargetNode;
3023
- anchor?: Anchor;
3024
- } | {
3025
- text: TargetNode;
3026
- match?: string | RegExp;
3027
- range?: [number, number];
3028
- nth?: number;
3029
- anchor?: Anchor;
3030
- } | {
3031
- track: TrackedObjectLike;
3032
- anchor?: Anchor;
3033
- } | ((frame: number) => Vec2$1 | Rect);
3034
- interface TargetContext {
3035
- measure?: MeasureFn;
3036
- /** Frame rate signals are sampled at (tracked targets). Default 30. */
3037
- fps?: number;
3038
- /** Font defaults for text nodes that don't set them. */
3039
- textDefaults?: Partial<MeasureOptions>;
3040
- }
3041
- type ResolvedTarget = {
3042
- kind: "static";
3043
- rects: Rect[];
3044
- anchor: Anchor;
3045
- } | {
3046
- kind: "dynamic";
3047
- at: (frame: number) => Rect;
3048
- anchor: Anchor;
3049
- };
3050
- /** Resolve a target to rects (static) or a per-frame rect (dynamic). */
3051
- declare function resolveTarget(target: Target, ctx?: TargetContext): ResolvedTarget;
3052
- /** A text target's string, measured glyphs and range, and where the node sits. */
3053
- interface TextLayout {
3054
- content: string;
3055
- metrics: ReturnType<MeasureFn>;
3056
- options: MeasureOptions;
3057
- range: [number, number];
3058
- /** The node's x / y: add to measured glyph positions. */
3059
- x: number;
3060
- y: number;
3476
+ /** Fonts `framefields add` knows how to install, by role. */
3477
+ type FontRole = "emoji" | "sans" | "mono";
3478
+ interface FontNeed {
3479
+ font: FontRole;
3480
+ /** Why, shown when `add` installs it. */
3481
+ why: string;
3061
3482
  }
3062
- /** Measure a text target the way the renderer lays it out. */
3063
- declare function textLayout(target: Extract<Target, {
3064
- text: TargetNode;
3065
- }>, ctx: TargetContext): TextLayout;
3066
- /** The union rect of `rects`. */
3067
- declare function boundsOf(rects: readonly Rect[]): Rect;
3068
- /** The point of `rect` named by `anchor`. `tip` on text = start of the first line, mid-height. */
3069
- declare function anchorPoint(rect: Rect, anchor?: Anchor, isText?: boolean): Vec2$1;
3070
- /** The point a resolved target names at `frame` (static targets ignore frame). */
3071
- declare function targetPoint(resolved: ResolvedTarget, frame?: number, isText?: boolean): Vec2$1;
3483
+ declare function defineMeta(meta: ComponentMeta): ComponentMeta;
3072
3484
  //#endregion
3073
- //#region src/core/schemas.d.ts
3074
- /** Any `Target`: [x, y], a rect, { node }, { text }, { track }, or (frame) => point. */
3075
- declare function targetSchema(): z.ZodType<Target>;
3485
+ //#region src/core/surface.d.ts
3486
+ type ElevationLevel = keyof Theme["elevation"];
3487
+ /** Layer styles for `level`: a drop shadow and, when the theme asks, a top-edge highlight. */
3488
+ declare function elevationStyle(theme: Theme, level: ElevationLevel): LayerStyleConfig;
3489
+ /** Put `node` at `level` (or leave it flat for `false`); returns it. */
3490
+ declare function elevate<T extends Animatable<LayoutNode>>(host: Host, node: T, theme: Theme, level: ElevationLevel | false): T;
3491
+ /**
3492
+ * A background for a surface of `color`: a vertical sheen a few percent
3493
+ * lighter at the top on dark themes (light themes stay flat, where a
3494
+ * lighter top reads as a glare). Non-hex / non-rgb colors pass through.
3495
+ */
3496
+ declare function surfaceFill(color: string, theme: Theme, sheen?: number): string;
3076
3497
  //#endregion
3077
3498
  //#region src/core/timing.d.ts
3078
3499
  /** Seconds → whole frames. */
@@ -3117,6 +3538,13 @@ declare function chain(durations: readonly number[], start?: number, gap?: numbe
3117
3538
  declare function typingFrames(text: string, cps: number, fps: number, r: Rng, start?: number): number[];
3118
3539
  //#endregion
3119
3540
  //#endregion
3541
+ //#region ../components/dist/toolkit.d.mts
3542
+ //#region src/core/schemas.d.ts
3543
+
3544
+ /** Any `Target`: [x, y], a rect, { node }, { text }, { track }, or (frame) => point. */
3545
+ declare function targetSchema(): z.ZodType<Target>;
3546
+ //#endregion
3547
+ //#endregion
3120
3548
  //#region ../ai/dist/index.d.mts
3121
3549
  //#region src/types.d.ts
3122
3550
  /** Model input or output when its shape isn't declared. Pass a type argument to name it. */
@@ -5962,5 +6390,5 @@ type ComponentNode<C extends Cues = Cues> = AnimatableNode<BoxNode> & ComponentE
5962
6390
  */
5963
6391
  declare function bindComponent<S$1 extends z.ZodRawShape, C extends Cues, E extends object = object>(definition: ComponentDefinition<S$1, C, E>): (props: z.input<z.ZodObject<S$1>> & BaseProps) => ComponentNode<C> & E;
5964
6392
  //#endregion
5965
- export { InterpolateOptions as $, MediaAnimatableProp as $a, themes as $i, Cues as $n, basePropsSchema as $r, PoseKeypointName as $t, Physics as A, CompositorProgramSchema as Aa, offsetCues as Ai, QueueStatus as An, WiggleOptions as Ao, ResolvedTarget as Ar, Plane3DOptions as At, FieldSample2D as B, Keyframe as Ba, scheduleExpression as Bi, ArrowCurve as Bn, evaluateTrackAtFrame as Bo, TrackedObjectLike as Br, BodyCommonOptions as Bt, TrackEditing as C, CarrierHandoffConfig as Ca, glyphAnimator as Ci, span as Cn, TextNode as Co, MotionSize as Cr, Cube3DOptions as Ct, section as D, ColorStop as Da, lerp2 as Di, AiConfig as Dn, ToneMapping as Do, PulseOptions as Dr, ExtrudedText3DOptions as Dt, editTrackedRegion as E, ColorSignalOptions as Ea, holdFirstKeys as Ei, Ai as En, TextSpanSchema as Eo, PropsOf as Er, Cylinder3DOptions as Et, PhysicsRope3DOptions as F, EnvironmentPreset as Fa, resampleBands as Fi, AnalyzeOptions as Fn, computeCarrierContinuity as Fo, TargetNode as Fr, Sphere3DOptions as Ft, PhysicsSpringOptions as G, LightNode as Ga, squigglePath as Gi, BaseProps as Gn, analyzeChannels as Gr, EmitterShape as Gt, PhysicsGroundOptions as H, LayerAnimation as Ha, springAt as Hi, AudioLevels as Hn, lintComposition as Ho, UnitSchedule as Hr, PhysicsCollision as Ht, PhysicsSpring3DOptions as I, EnvironmentPresetSchema as Ia, resolveMotion as Ii, Anchor as In, computeLayout as Io, TextLayout as Ir, Surface3DOptions as It, World2DOptions as J, LightTypeSchema as Ja, stepExpression as Ji, ComponentDefaults as Jn, arrowPaths as Jr, ParticleShape as Jt, PhysicsWallsOptions as K, LightNodeSchema as Ka, staggerOffsets as Ki, BuildContext as Kn, anchorPoint as Kr, ParticleBlend as Kt, PhysicsWorld3D as L, FlexNode as La, resolveTarget as Li, Animatable as Ln, computeLayoutSync as Lo, Theme as Lr, Text3DOptions as Lt, FieldSample3D as M, EaseRef as Ma, quantize as Mi, RunOptions as Mn, calculateSequenceTimeline as Mo, StaggerOrder as Mr, Prism3DOptions as Mt, PhysicsBody3D as N, EnvironmentFog as Na, rangeRects as Ni, ValidationError as Nn, collectNodeOps as No, Target as Nr, RoundedBox3DOptions as Nt, StyleName as O, ColorStopSchema as Oa, linePath as Oi, ApiError as On, ToneMappingSchema as Oo, Rect as Or, Grid3DOptions as Ot, PhysicsBox3D as P, EnvironmentFogSchema as Pa, rendererChars as Pi, ai as Pn, compositorToProgram as Po, TargetContext as Pr, Shape3DContainer as Pt, Easing as Q, MatteModeSchema as Qa, themeFrames as Qi, Cue as Qn, bandEdges as Qr, PersonTrack as Qt, World3DOptions as R, FlexNodeSchema as Ra, rng as Ri, AnimatableMethods as Rn, computeStaggerDelay as Ro, ThemeInput as Rr, Particles as Rt, SubjectSandwichOptions as S, CameraShake as Sa, frameSpan as Si, size as Sn, TextAnimatorSchema as So, MotionPresetName as Sr, Carousel3DOptions as St, blurRegion as T, CarrierState as Ta, hashString as Ti, sup as Tn, TextSpanMarkSchema as To, Placement as Tr, CubeFaceInput as Tt, PhysicsRect as U, LayoutNode as Ua, springKeys as Ui, BakeOptions as Un, mergeAnimationTracks as Uo, Vec2$1 as Ur, PhysicsDriver as Ut, PhysicsBody2D as V, KeyframeTuple as Va, smoothRelease as Vi, ArrowGeometry as Vn, hoistMattes as Vo, UNIT_INDEX as Vr, PhysicsBakeOptions as Vt, PhysicsRopeOptions as W, LayoutNodeSchema as Wa, springSettleFrames as Wi, BakedKey as Wn, WordRange as Wr, PhysicsWorldOptions as Wt, LightingRig as X, MaterialTypeSchema as Xa, targetSchema as Xi, ComponentExtras as Xn, bakeFunction as Xr, ClipVisionOptions as Xt, Lighting as Y, MaterialType as Ya, targetPoint as Yi, ComponentDefinition as Yn, audioLevelsSchema as Yr, ClipVision as Yt, LightingRigOptions as Z, MatteMode as Za, textLayout as Zi, ComponentMeta as Zn, bakeSamples as Zr, PersonPlacement as Zt, RenderVideoResult as _, CameraAnimation as _a, enterAnimation as _i, italic as _n, SignalTrackOptions as _o, MeasureOptions as _r, SequenceEntry as _t, AnimatableNode as a, windowExpression as aa, catmullRom as ai, ChartPadding as an, Scene as ao, FrameValue as ar, computeStrokeRect as at, SmartFramingOptions as b, CameraNode as ba, exitAnimation as bi, parseMarkup as bn, TextAnimatableProp as bo, MotionOptions as br, TransitionDirection as bt, CompositionOptions as c, wordRanges as ca, contrastRatio as ci, ChartType as cn, SceneOptions as co, GlyphBox as cr, measureSpring as ct, EnvironmentOptions as d, AnimationTrack as da, defineMeta as di, MarkOptions as dn, Sequence as do, GrainOptions as dr, preloadCompositionFonts as dt, toFrames as ea, beats as ei, ChartAnimationOptions as en, MediaNode as eo, CuesOf as er, SpringConfig as et, Layer as f, BlockNode as fa, defineTheme as fi, TextSpanItem as fn, SequenceOptions as fo, HandOptions as fr, preloadFont as ft, RenderVideoOptions as g, BoxNodeSchema as ga, ellipsePath as gi, color as gn, ShapeNodeSchema as go, MeasureFn as gr, SceneSequenceOptions as gt, NodeCapability as h, BoxNode as ha, ease$1 as hi, code as hn, ShapeNode as ho, MOTION_PRESETS as hr, springCalculation as ht, analyzeAudio as i, typingFrames as ia, boxPath as ii, ChartOptions as in, Model3DNodeSchema as io, FrameContextLike as ir, bezier as it, Body3DOptions as j, CompositorToProgramOptions as ja, pulseKeys as ji, Result as jn, applyStaggerToChildren as jo, Rng as jr, Primitive3DNodeOptions as jt, Styles as k, CompositorProgramConfig as ka, lineShift as ki, FRAMEFIELDS_AI_PROXY_URL as kn, TrackSource as ko, ResolvedMotion as kr, Layer3D as kt, EditableObjectTrack as l, AnimatableProp as la, cover as li, ChartX as ln, SceneTransitionType as lo, GlyphProps as lr, measureText as lt, Media as m, BloomConfigSchema as ma, drawOnKeys as mi, bold as mn, ShapeAnimatableProp as mo, LayerStyleConfig as mr, spring as mt, bindComponent as n, toSeconds as na, boilKeys as ni, ChartCandle as nn, Model3DAnimatableProp as no, EaseFn as nr, TextMeasureResult as nt, CompatibleEffect as o, within as oa, chain as oi, ChartSeries as on, SceneDefinition as oo, FrameWindow as or, interpolate as ot, Light as p, BloomConfig as pa, dist as pi, accent as pn, SequenceTimelineResult as po, Host as pr, requiresIsolation as pt, PhysicsWorld2D as q, LightType as qa, staggerRanks as qi, BuildResult as qn, arcPath as qr, ParticleBounds as qt, z$2 as r, transformPathData as ra, boundsOf as ri, ChartDatum as rn, Model3DNode as ro, ExtrudedTextOptions as rr, TextMeasureStyle as rt, Composition as s, wobblePoints as sa, constantExpression as si, ChartSlice as sn, SceneDefinitionSchema as so, GlyphAnimator as sr, mapBlendModeToSkia as st, ComponentNode as t, toPathData as ta, bind as ti, ChartAxisOptions as tn, MediaNodeSchema as to, CutoutOptions as tr, StrokeRect as tt, Effect as u, AnimatablePropsFor as ua, defineComponent as ui, DEFAULT_CHART_COLORS as un, SceneTransitionTypeSchema as uo, GlyphUnit as ur, measureTextAsync as ut, SectionNode as v, CameraDoF as va, evaluateEase as vi, mark as vn, SizeSpec as vo, MediaOptions as vr, SequenceNode as vt, TrackedRegionOptions as w, CarrierHandoffConfigSchema as wa, hashRng as wi, sub as wn, TextNodeSchema as wo, ParticleOptions as wr, CubeFaceConfig as wt, SubjectOutlineOptions as x, CameraNodeSchema as xa, findRange as xi, rich as xn, TextAnimator as xo, MotionPreset as xr, TransitionSpec as xt, SectionOptions as y, CameraLens as ya, evaluateGlyphExpression as yi, normalizeTextSpans as yn, SpringOptions as yo, Metrics$1 as yr, Transition as yt, Body2DOptions as z, FromToOptions as za, scaleFrames as zi, ArcPath as zn, evaluateAnimationAtFrame as zo, ThemeName as zr, ParticlesOptions as zt };
5966
- //# sourceMappingURL=index-N1tMc5Z9.d.mts.map
6393
+ export { InterpolateOptions as $, CameraNodeSchema as $a, offsetCues as $i, ComponentMeta as $n, TextAnimator as $o, Track as $r, PoseKeypointName as $t, Physics as A, toSeconds as Aa, drawOnKeys as Ai, QueueStatus as An, MatteModeSchema as Ao, MotionSize as Ar, Plane3DOptions as At, FieldSample2D as B, wordRanges as Ba, frameSpan as Bi, ArcPath as Bn, SceneOptions as Bo, Rng as Br, BodyCommonOptions as Bt, TrackEditing as C, surfaceFill as Ca, constantExpression as Ci, span as Cn, LightNode as Co, MeasureFn as Cr, Cube3DOptions as Ct, section as D, themes as Da, defineMeta as Di, AiConfig as Dn, MaterialType as Do, MotionOptions as Dr, ExtrudedText3DOptions as Dt, editTrackedRegion as E, themeFrames as Ea, defineComponent as Ei, Ai as En, LightTypeSchema as Eo, Metrics$1 as Er, Cylinder3DOptions as Et, PhysicsRope3DOptions as F, windowExpression as Fa, enterAnimation as Fi, targetSchema as Fn, Model3DNode as Fo, PulseOptions as Fr, Sphere3DOptions as Ft, PhysicsSpringOptions as G, BloomConfig as Ga, inkOn as Gi, BakedKey as Gn, SequenceTimelineResult as Go, SyntaxKind as Gr, EmitterShape as Gt, PhysicsGroundOptions as H, AnimatablePropsFor as Ha, hashRng as Hi, ArrowGeometry as Hn, SceneTransitionTypeSchema as Ho, SafeInsets as Hr, PhysicsCollision as Ht, PhysicsSpring3DOptions as I, withAlpha as Ia, evaluateEase as Ii, AnalyzeOptions as In, Model3DNodeSchema as Io, Rect as Ir, Surface3DOptions as It, World2DOptions as J, BoxNodeSchema as Ja, lerp2 as Ji, BuildResult as Jn, ShapeNodeSchema as Jo, TargetNode as Jr, ParticleShape as Jt, PhysicsWallsOptions as K, BloomConfigSchema as Ka, isLight as Ki, BaseProps as Kn, ShapeAnimatableProp as Ko, Target as Kr, ParticleBlend as Kt, PhysicsWorld3D as L, withDefaults as La, evaluateGlyphExpression as Li, Anchor as Ln, Scene as Lo, ResolvedMotion as Lr, Text3DOptions as Lt, FieldSample3D as M, transparent as Ma, elevate as Mi, RunOptions as Mn, MediaNode as Mo, Placement as Mr, Prism3DOptions as Mt, PhysicsBody3D as N, typingFrames as Na, elevationStyle as Ni, ValidationError as Nn, MediaNodeSchema as No, ProjectDefaults as Nr, RoundedBox3DOptions as Nt, StyleName as O, toFrames as Oa, defineTheme as Oi, ApiError as On, MaterialTypeSchema as Oo, MotionPreset as Or, Grid3DOptions as Ot, PhysicsBox3D as P, valueAt as Pa, ellipsePath as Pi, ai as Pn, Model3DAnimatableProp as Po, PropsOf as Pr, Shape3DContainer as Pt, Easing as Q, CameraNode as Qa, mix as Qi, ComponentExtras as Qn, TextAnimatableProp as Qo, ThemeName as Qr, PersonTrack as Qt, World3DOptions as R, within as Ra, exitAnimation as Ri, Animatable as Rn, SceneDefinition as Ro, ResolvedTarget as Rr, Particles as Rt, SubjectSandwichOptions as S, supersede as Sa, chain as Si, size as Sn, LayoutNodeSchema as So, MOTION_PRESETS as Sr, Carousel3DOptions as St, blurRegion as T, textLayout as Ta, cover as Ti, sup as Tn, LightType as To, MediaOptions as Tr, CubeFaceInput as Tt, PhysicsRect as U, AnimationTrack as Ua, hashString as Ui, AudioLevels as Un, Sequence as Uo, Spring as Ur, PhysicsDriver as Ut, PhysicsBody2D as V, AnimatableProp as Va, glyphAnimator as Vi, ArrowCurve as Vn, SceneTransitionType as Vo, SAFE_INSETS as Vr, PhysicsBakeOptions as Vt, PhysicsRopeOptions as W, BlockNode as Wa, holdFirstKeys as Wi, BakeOptions as Wn, SequenceOptions as Wo, StaggerOrder as Wr, PhysicsWorldOptions as Wt, LightingRig as X, CameraDoF as Xa, lineShift as Xi, ComponentDefaults as Xn, SizeSpec as Xo, Theme as Xr, ClipVisionOptions as Xt, Lighting as Y, CameraAnimation as Ya, linePath as Yi, CanvasSize as Yn, SignalTrackOptions as Yo, TextLayout as Yr, ClipVision as Yt, LightingRigOptions as Z, CameraLens as Za, luminance as Zi, ComponentDefinition as Zn, SpringOptions as Zo, ThemeInput as Zr, PersonPlacement as Zt, RenderVideoResult as _, springTrack as _a, bind as _i, italic as _n, FromToOptions as _o, GrainOptions as _r, evaluateAnimationAtFrame as _s, SequenceEntry as _t, AnimatableNode as a, resampleBands as aa, after as ai, ChartPadding as an, ColorStop as ao, Elevation as ar, ToneMapping as as, computeStrokeRect as at, SmartFramingOptions as b, staggerRanks as ba, boxPath as bi, parseMarkup as bn, LayerAnimation as bo, KeyBook as br, lintComposition as bs, TransitionDirection as bt, CompositionOptions as c, rng as ca, arcPath as ci, ChartType as cn, CompositorProgramSchema as co, FontNeed as cr, WiggleOptions as cs, measureSpring as ct, EnvironmentOptions as d, scaleFrames as da, audioLevelsSchema as di, MarkOptions as dn, EnvironmentFog as do, FrameValue as dr, collectNodeOps as ds, preloadCompositionFonts as dt, parseColor as ea, TrackedObjectLike as ei, ChartAnimationOptions as en, CameraShake as eo, Cue as er, TextAnimatorSchema as es, SpringConfig as et, Layer as f, scheduleExpression as fa, bakeFunction as fi, TextSpanItem as fn, EnvironmentFogSchema as fo, FrameWindow as fr, compositorToProgram as fs, preloadFont as ft, RenderVideoOptions as g, springSettleFrames as ga, beats as gi, color as gn, FlexNodeSchema as go, GlyphUnit as gr, computeStaggerDelay as gs, SceneSequenceOptions as gt, NodeCapability as h, springKeys as ha, basePropsSchema as hi, code as hn, FlexNode as ho, GlyphProps as hr, computeLayoutSync as hs, springCalculation as ht, analyzeAudio as i, rendererChars as ia, WordRange as ii, ChartOptions as in, ColorSignalOptions as io, EaseFn as ir, TextSpanSchema as is, bezier as it, Body3DOptions as j, transformPathData as ja, ease$1 as ji, Result as jn, MediaAnimatableProp as jo, ParticleOptions as jr, Primitive3DNodeOptions as jt, Styles as k, toPathData as ka, dist as ki, FRAMEFIELDS_AI_PROXY_URL as kn, MatteMode as ko, MotionPresetName as kr, Layer3D as kt, EditableObjectTrack as l, round as la, arrowPaths as li, ChartX as ln, CompositorToProgramOptions as lo, FontRole as lr, applyStaggerToChildren as ls, measureText as lt, Media as m, springAt as ma, bandEdges as mi, bold as mn, EnvironmentPresetSchema as mo, GlyphBox as mr, computeLayout as ms, spring as mt, bindComponent as n, quantize as na, UnitSchedule as ni, ChartCandle as nn, CarrierHandoffConfigSchema as no, CuesOf as nr, TextNodeSchema as ns, TextMeasureResult as nt, CompatibleEffect as o, resolveMotion as oa, analyzeChannels as oi, ChartSeries as on, ColorStopSchema as oo, ElevationLevel as or, ToneMappingSchema as os, interpolate as ot, Light as p, smoothRelease as pa, bakeSamples as pi, accent as pn, EnvironmentPreset as po, GlyphAnimator as pr, computeCarrierContinuity as ps, requiresIsolation as pt, PhysicsWorld2D as q, BoxNode as qa, last as qi, BuildContext as qn, ShapeNode as qo, TargetContext as qr, ParticleBounds as qt, z$2 as r, rangeRects as ra, Vec2$1 as ri, ChartDatum as rn, CarrierState as ro, CutoutOptions as rr, TextSpanMarkSchema as rs, TextMeasureStyle as rt, Composition as s, resolveTarget as sa, anchorPoint as si, ChartSlice as sn, CompositorProgramConfig as so, ExtrudedTextOptions as sr, TrackSource as ss, mapBlendModeToSkia as st, ComponentNode as t, pulseKeys as ta, UNIT_INDEX as ti, ChartAxisOptions as tn, CarrierHandoffConfig as to, Cues as tr, TextNode as ts, StrokeRect as tt, Effect as u, safeArea as ua, ascending as ui, DEFAULT_CHART_COLORS as un, EaseRef as uo, FrameContextLike as ur, calculateSequenceTimeline as us, measureTextAsync as ut, SectionNode as v, squigglePath as va, boilKeys as vi, mark as vn, Keyframe as vo, HandOptions as vr, evaluateTrackAtFrame as vs, SequenceNode as vt, TrackedRegionOptions as w, targetPoint as wa, contrastRatio as wi, sub as wn, LightNodeSchema as wo, MeasureOptions as wr, CubeFaceConfig as wt, SubjectOutlineOptions as x, stepExpression as xa, catmullRom as xi, rich as xn, LayoutNode as xo, LayerStyleConfig as xr, mergeAnimationTracks as xs, TransitionSpec as xt, SectionOptions as y, staggerOffsets as ya, boundsOf as yi, normalizeTextSpans as yn, KeyframeTuple as yo, Host as yr, hoistMattes as ys, Transition as yt, Body2DOptions as z, wobblePoints as za, findRange as zi, AnimatableMethods as zn, SceneDefinitionSchema as zo, Rgba as zr, ParticlesOptions as zt };
6394
+ //# sourceMappingURL=index-CWG19cm-.d.mts.map