framefields 2.4.3 → 2.5.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 (514) hide show
  1. package/README.md +26 -1
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +13 -13
  4. package/dist/{audio-DJeVoE8b.mjs → audio-BluXgSeG.mjs} +1 -1
  5. package/dist/{audio-DJeVoE8b.mjs.map → audio-BluXgSeG.mjs.map} +1 -1
  6. package/dist/{audio-BymXfAvH.d.mts → audio-C1A4N3Wh.d.mts} +3 -3
  7. package/dist/{audio-BymXfAvH.d.mts.map → audio-C1A4N3Wh.d.mts.map} +1 -1
  8. package/dist/{audio-BzHHpImj.mjs → audio-CZwVENqB.mjs} +4 -4
  9. package/dist/{audio-BzHHpImj.mjs.map → audio-CZwVENqB.mjs.map} +1 -1
  10. package/dist/cli.d.mts +1 -0
  11. package/dist/cli.mjs +221 -0
  12. package/dist/cli.mjs.map +1 -0
  13. package/dist/components/index.d.mts +12 -0
  14. package/dist/components/index.mjs +49 -0
  15. package/dist/{dist-Bo2_zeCn.mjs → dist-CQZ5_60A.mjs} +2 -2
  16. package/dist/{dist-Bo2_zeCn.mjs.map → dist-CQZ5_60A.mjs.map} +1 -1
  17. package/dist/{dist-0QGroRYZ.mjs → dist-C_SMBmHr.mjs} +1 -1
  18. package/dist/{dist-0QGroRYZ.mjs.map → dist-C_SMBmHr.mjs.map} +1 -1
  19. package/dist/{dist-hmWTJPik.mjs → dist-DBWkkSvJ.mjs} +113 -68
  20. package/dist/dist-DBWkkSvJ.mjs.map +1 -0
  21. package/dist/{dist-TrtLGPvc.mjs → dist-DFeF-ygz.mjs} +1 -1
  22. package/dist/{dist-TrtLGPvc.mjs.map → dist-DFeF-ygz.mjs.map} +1 -1
  23. package/dist/{dist-DMa2BbYs.mjs → dist-DHQVWaV2.mjs} +53 -21
  24. package/dist/dist-DHQVWaV2.mjs.map +1 -0
  25. package/dist/effects/index.d.mts +4 -4
  26. package/dist/effects/index.mjs +36 -36
  27. package/dist/{effects-CiZjSwIh.mjs → effects-DZvq-nWT.mjs} +3 -3
  28. package/dist/{effects-CiZjSwIh.mjs.map → effects-DZvq-nWT.mjs.map} +1 -1
  29. package/dist/fonts/index.d.mts +1 -1
  30. package/dist/fonts/index.mjs +3 -3
  31. package/dist/{fonts-Da1JDKpc.mjs → fonts-DcsxFpyU.mjs} +3 -2
  32. package/dist/fonts-DcsxFpyU.mjs.map +1 -0
  33. package/dist/{gpu-CHIgM_YH.mjs → gpu-Dq_uI_00.mjs} +2 -2
  34. package/dist/{gpu-CHIgM_YH.mjs.map → gpu-Dq_uI_00.mjs.map} +1 -1
  35. package/dist/{index-DIvWBm-q.d.mts → index-B-KVpJMb.d.mts} +2 -2
  36. package/dist/{index-DIvWBm-q.d.mts.map → index-B-KVpJMb.d.mts.map} +1 -1
  37. package/dist/{index-WMofVN02.d.mts → index-BpdVOlsV.d.mts} +3 -3
  38. package/dist/{index-WMofVN02.d.mts.map → index-BpdVOlsV.d.mts.map} +1 -1
  39. package/dist/index-C2f4Hm-p.d.mts +89 -0
  40. package/dist/index-C2f4Hm-p.d.mts.map +1 -0
  41. package/dist/{index-B-55dXDu.d.mts → index-CalU-mpZ.d.mts} +1 -1
  42. package/dist/{index-B-55dXDu.d.mts.map → index-CalU-mpZ.d.mts.map} +1 -1
  43. package/dist/{index-CJkihekp.d.mts → index-D6-lH1Mx.d.mts} +189 -189
  44. package/dist/index-D6-lH1Mx.d.mts.map +1 -0
  45. package/dist/index-DKssQ_wn.d.mts +5968 -0
  46. package/dist/index-DKssQ_wn.d.mts.map +1 -0
  47. package/dist/{index-Dwf76Qep.d.mts → index-DNKM3to5.d.mts} +3 -3
  48. package/dist/{index-Dwf76Qep.d.mts.map → index-DNKM3to5.d.mts.map} +1 -1
  49. package/dist/{index-DGe83M-p.d.mts → index-fymoeGNW.d.mts} +6 -1
  50. package/dist/index-fymoeGNW.d.mts.map +1 -0
  51. package/dist/index.d.mts +13 -4659
  52. package/dist/index.mjs +59 -6654
  53. package/dist/preview/index.d.mts +4 -90
  54. package/dist/preview/index.mjs +12 -12
  55. package/dist/{preview-5E4B96RD.mjs → preview-CYI4i4m3.mjs} +5 -4
  56. package/dist/preview-CYI4i4m3.mjs.map +1 -0
  57. package/dist/preview-engine/audio.mjs +1 -1
  58. package/dist/preview-engine/{chunk-TFFG5YFI.mjs → chunk-24H3QVYB.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-7J4OK4VE.mjs → chunk-25T3M6MI.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-O3NOB5IB.mjs → chunk-2QQQTZHS.mjs} +1 -1
  61. package/dist/preview-engine/{chunk-XTPEGKOZ.mjs → chunk-2RZ6S4SW.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-37P2KIFE.mjs → chunk-3AYICEZ5.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-JTUK7ZXK.mjs → chunk-3I6B3YPF.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-LQBDZSQD.mjs → chunk-6GMEF2QB.mjs} +1 -1
  65. package/dist/preview-engine/{chunk-5CWQHYQP.mjs → chunk-7BUKVFWB.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-AWX4YGC5.mjs → chunk-7JYMNGNK.mjs} +1 -1
  67. package/dist/preview-engine/chunk-AB5VITYM.mjs +1974 -0
  68. package/dist/preview-engine/{chunk-LSBCFJZM.mjs → chunk-BNO5JAEZ.mjs} +1 -1
  69. package/dist/preview-engine/{chunk-6WKWYUOM.mjs → chunk-CE6CG5BH.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-LQENNFBA.mjs → chunk-CT2WFPYG.mjs} +11 -11
  71. package/dist/preview-engine/{chunk-5JSSXOBB.mjs → chunk-DUEY7AXY.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-UDDK5QZF.mjs → chunk-DWHQSNSJ.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-AY2ZIXST.mjs → chunk-ENS4KUJV.mjs} +1 -1
  74. package/dist/preview-engine/chunk-EU7CFSB5.mjs +1 -0
  75. package/dist/preview-engine/chunk-I6E3AKLS.mjs +1 -0
  76. package/dist/preview-engine/{chunk-7QE6II7R.mjs → chunk-JMOJKT5W.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-NIRW77QA.mjs → chunk-KJGNTREI.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-ILBZQLUF.mjs → chunk-KKBJ7X3T.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-GQN35VLT.mjs → chunk-LNJYHSYX.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-6TGNQ5FD.mjs → chunk-LQVACZDE.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-YQYLBXOX.mjs → chunk-M6ZKK6ZU.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-EEOUHDUD.mjs → chunk-MA4YVA2E.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-JAJOZG5P.mjs → chunk-MBJXS3D7.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-BIS3W4Z5.mjs → chunk-MCR7XMNQ.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-C45ROXI6.mjs → chunk-NAISBHLR.mjs} +11 -11
  86. package/dist/preview-engine/{chunk-AKYUVDKM.mjs → chunk-NB55FW7D.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-3SOD7OTO.mjs → chunk-NHQR76WL.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-MJN3LOZ7.mjs → chunk-NKGXINCU.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-FDNR4PRC.mjs → chunk-NXKXOSE6.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-N3PRZLZJ.mjs → chunk-NYEDWUFS.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-W3QGP5XF.mjs → chunk-P734GD7D.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-YJ6GWVL4.mjs → chunk-PDM3TJ45.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-KJ2DTA77.mjs → chunk-PXWCGXTF.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-V6LCSK6Q.mjs → chunk-QCUGWPYP.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-JJYNYYPA.mjs → chunk-QJYAIQYU.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-VUFDQJ2B.mjs → chunk-QKQYHPBK.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-NVTPJUNG.mjs → chunk-QVW5METG.mjs} +1 -1
  98. package/dist/preview-engine/{chunk-UMF7NNUA.mjs → chunk-QYIKOOFI.mjs} +1 -1
  99. package/dist/preview-engine/{chunk-FSAELHVT.mjs → chunk-RNFYEZLL.mjs} +1 -1
  100. package/dist/preview-engine/{chunk-CEIOI4HO.mjs → chunk-SIXIF5QZ.mjs} +1 -1
  101. package/dist/preview-engine/chunk-SNASF7OM.mjs +3 -0
  102. package/dist/preview-engine/{chunk-A2775RSO.mjs → chunk-T4VP45AP.mjs} +1 -1
  103. package/dist/preview-engine/{chunk-5EVEGKWT.mjs → chunk-TE2QAKKF.mjs} +1 -1
  104. package/dist/preview-engine/{chunk-6MBYREBG.mjs → chunk-UXCTWFKK.mjs} +1 -1
  105. package/dist/preview-engine/{chunk-V6DAD4S4.mjs → chunk-V3FODTPI.mjs} +2 -2
  106. package/dist/preview-engine/{chunk-JJA4G3OU.mjs → chunk-VH5V54RA.mjs} +1 -1
  107. package/dist/preview-engine/{chunk-GIH5QURF.mjs → chunk-VTE3IISK.mjs} +1 -1
  108. package/dist/preview-engine/chunk-W4HIVUUA.mjs +4 -0
  109. package/dist/preview-engine/{chunk-O5LA63CK.mjs → chunk-WUMVCQYI.mjs} +1 -1
  110. package/dist/preview-engine/{chunk-U4SQUTDV.mjs → chunk-X6BJLPW6.mjs} +1 -1
  111. package/dist/preview-engine/{chunk-54HE34HO.mjs → chunk-XJ4CQIZZ.mjs} +1 -1
  112. package/dist/preview-engine/{chunk-6AEU4DC7.mjs → chunk-XUPZBI3Y.mjs} +6 -6
  113. package/dist/preview-engine/{chunk-LMZHCWXP.mjs → chunk-XYRBFLFF.mjs} +1 -1
  114. package/dist/preview-engine/{chunk-S7NG26UG.mjs → chunk-YJ24W73B.mjs} +1 -1
  115. package/dist/preview-engine/{chunk-5SVJIGPK.mjs → chunk-Z4TKEI3I.mjs} +1 -1
  116. package/dist/preview-engine/{chunk-UVWGZUKZ.mjs → chunk-ZAIVXGSS.mjs} +1 -1
  117. package/dist/preview-engine/{chunk-OZDZQMTB.mjs → chunk-ZVUTFXDR.mjs} +1 -1
  118. package/dist/preview-engine/components.mjs +1 -0
  119. package/dist/preview-engine/effects.mjs +1 -1
  120. package/dist/preview-engine/fonts.mjs +1 -1
  121. package/dist/preview-engine/framefields.mjs +1 -1971
  122. package/dist/preview-engine/player.mjs +5 -5
  123. package/dist/preview-engine/renderers-2S5ZWL2J.mjs +1 -0
  124. package/dist/preview-engine/renderers-37CN7O4S.mjs +1 -0
  125. package/dist/preview-engine/renderers-3UGG2IMP.mjs +1 -0
  126. package/dist/preview-engine/{renderers-2A7YDJMJ.mjs → renderers-4RFB2LG2.mjs} +1 -1
  127. package/dist/preview-engine/renderers-6NFRKHNO.mjs +1 -0
  128. package/dist/preview-engine/{renderers-QJNGN722.mjs → renderers-6PVGRTXV.mjs} +1 -1
  129. package/dist/preview-engine/renderers-7MPBAHYA.mjs +1 -0
  130. package/dist/preview-engine/renderers-AFTYMS3H.mjs +1 -0
  131. package/dist/preview-engine/renderers-AKZAAGR7.mjs +1 -0
  132. package/dist/preview-engine/renderers-AYEWAW7F.mjs +1 -0
  133. package/dist/preview-engine/{renderers-5OGAF66H.mjs → renderers-BNXTSIXJ.mjs} +1 -1
  134. package/dist/preview-engine/{renderers-XPO2WQNF.mjs → renderers-BQLYS4TM.mjs} +1 -1
  135. package/dist/preview-engine/renderers-C7SJ3M6S.mjs +1 -0
  136. package/dist/preview-engine/{renderers-VD5GHHK6.mjs → renderers-CEJP6Q7F.mjs} +1 -1
  137. package/dist/preview-engine/{renderers-KW75FYFG.mjs → renderers-CLLR5MOQ.mjs} +1 -1
  138. package/dist/preview-engine/{renderers-PM4Q5QOW.mjs → renderers-DHKB5LI6.mjs} +1 -1
  139. package/dist/preview-engine/renderers-DUF2CTX6.mjs +1 -0
  140. package/dist/preview-engine/{renderers-XTRFEQO4.mjs → renderers-DZZFIYYA.mjs} +1 -1
  141. package/dist/preview-engine/renderers-EIJFIY6L.mjs +1 -0
  142. package/dist/preview-engine/renderers-EOMMSENQ.mjs +1 -0
  143. package/dist/preview-engine/{renderers-NJAKGI25.mjs → renderers-FOHW7RWH.mjs} +1 -1
  144. package/dist/preview-engine/{renderers-K23EAM2J.mjs → renderers-GF77N2KM.mjs} +1 -1
  145. package/dist/preview-engine/renderers-H3ZM2TOA.mjs +1 -0
  146. package/dist/preview-engine/{renderers-NPKRNXAT.mjs → renderers-HJ6NO5ZD.mjs} +1 -1
  147. package/dist/preview-engine/renderers-JXBZPQKP.mjs +1 -0
  148. package/dist/preview-engine/renderers-KSQM7EM5.mjs +1 -0
  149. package/dist/preview-engine/{renderers-WNMRLGZS.mjs → renderers-KV3TTCO6.mjs} +1 -1
  150. package/dist/preview-engine/{renderers-U2ZWRL25.mjs → renderers-L7EITUCD.mjs} +1 -1
  151. package/dist/preview-engine/renderers-LD3COS4X.mjs +1 -0
  152. package/dist/preview-engine/renderers-MCTBJEL7.mjs +1 -0
  153. package/dist/preview-engine/renderers-MKEXNBCW.mjs +1 -0
  154. package/dist/preview-engine/{renderers-ZRR7BLB7.mjs → renderers-MPCYLXXU.mjs} +1 -1
  155. package/dist/preview-engine/{renderers-DKOWLKDE.mjs → renderers-MS4HG3M4.mjs} +1 -1
  156. package/dist/preview-engine/{renderers-MHDLRY3S.mjs → renderers-N7T34SCI.mjs} +1 -1
  157. package/dist/preview-engine/{renderers-2GE5HE56.mjs → renderers-O56IOD7J.mjs} +1 -1
  158. package/dist/preview-engine/renderers-OZGEXW2X.mjs +1 -0
  159. package/dist/preview-engine/renderers-PSEDMUBV.mjs +1 -0
  160. package/dist/preview-engine/renderers-PVUROEGR.mjs +1 -0
  161. package/dist/preview-engine/renderers-QBVVTQV6.mjs +1 -0
  162. package/dist/preview-engine/{renderers-7M3YOI7E.mjs → renderers-QO2RHF7F.mjs} +1 -1
  163. package/dist/preview-engine/renderers-QPFZBLDI.mjs +1 -0
  164. package/dist/preview-engine/renderers-R4U2TK6P.mjs +1 -0
  165. package/dist/preview-engine/renderers-RBLNDAO4.mjs +1 -0
  166. package/dist/preview-engine/renderers-RM25AXWZ.mjs +1 -0
  167. package/dist/preview-engine/{renderers-DFJDEPCU.mjs → renderers-ROSSJ7Y2.mjs} +1 -1
  168. package/dist/preview-engine/{renderers-4H34AFW2.mjs → renderers-RRJ2DX2W.mjs} +1 -1
  169. package/dist/preview-engine/renderers-RYRFCEYT.mjs +1 -0
  170. package/dist/preview-engine/renderers-SIBP54WK.mjs +1 -0
  171. package/dist/preview-engine/renderers-SRU6QXLN.mjs +1 -0
  172. package/dist/preview-engine/{renderers-TFEDHXPY.mjs → renderers-T62TXGVO.mjs} +1 -1
  173. package/dist/preview-engine/{renderers-6GYRMHGQ.mjs → renderers-TAMDNTEQ.mjs} +1 -1
  174. package/dist/preview-engine/{renderers-LF6W5P2I.mjs → renderers-TASYN62K.mjs} +1 -1
  175. package/dist/preview-engine/renderers-TBP2EKJ4.mjs +1 -0
  176. package/dist/preview-engine/{renderers-FNPXT2EH.mjs → renderers-TWZHTKW7.mjs} +1 -1
  177. package/dist/preview-engine/renderers-UQHKFGDX.mjs +1 -0
  178. package/dist/preview-engine/{renderers-35G4KCQ2.mjs → renderers-UVABXXQF.mjs} +1 -1
  179. package/dist/preview-engine/{renderers-XTCBHTHC.mjs → renderers-VYK2BJID.mjs} +1 -1
  180. package/dist/preview-engine/{renderers-Q6AO5M54.mjs → renderers-W5CTR4B5.mjs} +1 -1
  181. package/dist/preview-engine/renderers-WDV7ENJA.mjs +1 -0
  182. package/dist/preview-engine/renderers-WNBDSSJ3.mjs +1 -0
  183. package/dist/preview-engine/{renderers-ATL5ARUV.mjs → renderers-WPBTAU2E.mjs} +1 -1
  184. package/dist/preview-engine/renderers-WTC2RNGU.mjs +1 -0
  185. package/dist/preview-engine/renderers-XLBHSQZJ.mjs +228 -0
  186. package/dist/preview-engine/{renderers-WOLTH5VI.mjs → renderers-XSPU2BIQ.mjs} +1 -1
  187. package/dist/preview-engine/renderers-XVUOO7B6.mjs +1 -0
  188. package/dist/preview-engine/renderers-YHOQUEHD.mjs +1 -0
  189. package/dist/preview-engine/renderers-YPFM5UJO.mjs +1 -0
  190. package/dist/preview-engine/renderers-YW3LBALW.mjs +1 -0
  191. package/dist/preview-engine/signals.mjs +1 -1
  192. package/dist/{program-KwDdbC0-.mjs → program-BdPDtfVv.mjs} +133 -30
  193. package/dist/program-BdPDtfVv.mjs.map +1 -0
  194. package/dist/registry/annotate.json +30 -0
  195. package/dist/registry/app-frame.json +38 -0
  196. package/dist/registry/backdrop.json +37 -0
  197. package/dist/registry/before-after.json +33 -0
  198. package/dist/registry/callout.json +30 -0
  199. package/dist/registry/captions.json +37 -0
  200. package/dist/registry/card-stack.json +30 -0
  201. package/dist/registry/chat-thread.json +32 -0
  202. package/dist/registry/code-block.json +45 -0
  203. package/dist/registry/confetti.json +29 -0
  204. package/dist/registry/counter.json +36 -0
  205. package/dist/registry/device-frame.json +36 -0
  206. package/dist/registry/focus-zoom.json +32 -0
  207. package/dist/registry/index.json +408 -0
  208. package/dist/registry/logo-reveal.json +37 -0
  209. package/dist/registry/lower-third.json +34 -0
  210. package/dist/registry/meter.json +35 -0
  211. package/dist/registry/mouse-pointer.json +44 -0
  212. package/dist/registry/selection.json +31 -0
  213. package/dist/registry/spotlight.json +28 -0
  214. package/dist/registry/terminal.json +40 -0
  215. package/dist/registry/text-reveal.json +39 -0
  216. package/dist/registry/title-card.json +34 -0
  217. package/dist/registry/toasts.json +28 -0
  218. package/dist/registry/touch-point.json +33 -0
  219. package/dist/registry/waveform.json +29 -0
  220. package/dist/registry/word-cycle.json +32 -0
  221. package/dist/renderer/index.d.mts +2 -2
  222. package/dist/renderer/index.mjs +3 -3
  223. package/dist/{renderer-Bhfl-WFX.mjs → renderer-0cHsK6xR.mjs} +5 -5
  224. package/dist/{renderer-Bhfl-WFX.mjs.map → renderer-0cHsK6xR.mjs.map} +1 -1
  225. package/dist/{renderer-D4No_jA4.mjs → renderer-1VKN5j2C.mjs} +4 -4
  226. package/dist/{renderer-D4No_jA4.mjs.map → renderer-1VKN5j2C.mjs.map} +1 -1
  227. package/dist/{renderer-qYhNf6iB.mjs → renderer-2bipMLqz.mjs} +3 -3
  228. package/dist/{renderer-qYhNf6iB.mjs.map → renderer-2bipMLqz.mjs.map} +1 -1
  229. package/dist/{renderer-DK9etIAz.mjs → renderer-7DyjqxEj.mjs} +5 -5
  230. package/dist/{renderer-DK9etIAz.mjs.map → renderer-7DyjqxEj.mjs.map} +1 -1
  231. package/dist/renderer-B-D_VZg3.mjs +5 -0
  232. package/dist/{renderer-Ci6YMa4u.mjs → renderer-B31zMDE8.mjs} +5 -5
  233. package/dist/{renderer-Ci6YMa4u.mjs.map → renderer-B31zMDE8.mjs.map} +1 -1
  234. package/dist/{renderer-DP_In2uT.mjs → renderer-B4blg067.mjs} +4 -4
  235. package/dist/{renderer-DP_In2uT.mjs.map → renderer-B4blg067.mjs.map} +1 -1
  236. package/dist/{renderer-kNjMhwiZ.mjs → renderer-B5YYBBDq.mjs} +3 -3
  237. package/dist/{renderer-kNjMhwiZ.mjs.map → renderer-B5YYBBDq.mjs.map} +1 -1
  238. package/dist/renderer-B64dhpDX.mjs +5 -0
  239. package/dist/{renderer-mqUBkx-a.mjs → renderer-B8LXXvHi.mjs} +4 -4
  240. package/dist/{renderer-mqUBkx-a.mjs.map → renderer-B8LXXvHi.mjs.map} +1 -1
  241. package/dist/renderer-BA2Ko4H1.mjs +3 -0
  242. package/dist/{renderer-B4ydDdo6.mjs → renderer-BAkPq8qo.mjs} +3 -3
  243. package/dist/{renderer-B4ydDdo6.mjs.map → renderer-BAkPq8qo.mjs.map} +1 -1
  244. package/dist/{renderer-OEpwc9Zk.mjs → renderer-BBTdHKH7.mjs} +5 -5
  245. package/dist/{renderer-OEpwc9Zk.mjs.map → renderer-BBTdHKH7.mjs.map} +1 -1
  246. package/dist/{renderer-DGT141pN.mjs → renderer-BBTkfhL8.mjs} +5 -5
  247. package/dist/{renderer-DGT141pN.mjs.map → renderer-BBTkfhL8.mjs.map} +1 -1
  248. package/dist/renderer-BDL4jyrb.mjs +5 -0
  249. package/dist/{renderer-BtWWpFvl.mjs → renderer-BGNdwdCR.mjs} +4 -4
  250. package/dist/{renderer-BtWWpFvl.mjs.map → renderer-BGNdwdCR.mjs.map} +1 -1
  251. package/dist/{renderer-DXSIstnn.mjs → renderer-BJwOM1Dq.mjs} +4 -4
  252. package/dist/{renderer-DXSIstnn.mjs.map → renderer-BJwOM1Dq.mjs.map} +1 -1
  253. package/dist/renderer-BKCZGKkl.mjs +5 -0
  254. package/dist/renderer-BKs3jI7-.mjs +5 -0
  255. package/dist/{renderer-C5WkQZGR.mjs → renderer-BN_n6O6P.mjs} +5 -5
  256. package/dist/{renderer-C5WkQZGR.mjs.map → renderer-BN_n6O6P.mjs.map} +1 -1
  257. package/dist/renderer-BW74Zf-u.mjs +5 -0
  258. package/dist/{renderer-C1U85w9f.mjs → renderer-BWa3CLK7.mjs} +3 -3
  259. package/dist/{renderer-C1U85w9f.mjs.map → renderer-BWa3CLK7.mjs.map} +1 -1
  260. package/dist/{renderer-plx7_lUQ.mjs → renderer-BWnFh7NO.mjs} +5 -5
  261. package/dist/{renderer-plx7_lUQ.mjs.map → renderer-BWnFh7NO.mjs.map} +1 -1
  262. package/dist/renderer-BXuQN61O.mjs +5 -0
  263. package/dist/renderer-BY1pPvzx.mjs +6 -0
  264. package/dist/{renderer-CwO8T8l8.mjs → renderer-BYJS2lhn.mjs} +4 -4
  265. package/dist/{renderer-CwO8T8l8.mjs.map → renderer-BYJS2lhn.mjs.map} +1 -1
  266. package/dist/renderer-Bahthqvq.mjs +5 -0
  267. package/dist/renderer-BbaiQG8h.mjs +5 -0
  268. package/dist/{renderer-gm0zoV4t.mjs → renderer-BfrzKmRh.mjs} +3 -3
  269. package/dist/{renderer-gm0zoV4t.mjs.map → renderer-BfrzKmRh.mjs.map} +1 -1
  270. package/dist/renderer-BhHF-08y.mjs +5 -0
  271. package/dist/{renderer-DQeUc1yY.mjs → renderer-BhhweLr_.mjs} +4 -4
  272. package/dist/{renderer-DQeUc1yY.mjs.map → renderer-BhhweLr_.mjs.map} +1 -1
  273. package/dist/{renderer-OsA-Lg4d.mjs → renderer-Bmj7AyJP.mjs} +3 -3
  274. package/dist/{renderer-OsA-Lg4d.mjs.map → renderer-Bmj7AyJP.mjs.map} +1 -1
  275. package/dist/{renderer-DZhIe8Gj.mjs → renderer-BmoQJUJO.mjs} +4 -4
  276. package/dist/{renderer-DZhIe8Gj.mjs.map → renderer-BmoQJUJO.mjs.map} +1 -1
  277. package/dist/renderer-BnrMcw6C.mjs +5 -0
  278. package/dist/{renderer-Blm4Dv_h.mjs → renderer-Bo1PY0zW.mjs} +3 -3
  279. package/dist/{renderer-DcOT5c0t.mjs → renderer-Bo_d7h86.mjs} +4 -4
  280. package/dist/{renderer-DcOT5c0t.mjs.map → renderer-Bo_d7h86.mjs.map} +1 -1
  281. package/dist/renderer-BsS61z5l.mjs +5 -0
  282. package/dist/renderer-Btuq2Eq8.mjs +5 -0
  283. package/dist/renderer-BvcqncI2.mjs +3 -0
  284. package/dist/{renderer-C4xvz_Ft.mjs → renderer-Bw5YP2Db.mjs} +4 -4
  285. package/dist/{renderer-C4xvz_Ft.mjs.map → renderer-Bw5YP2Db.mjs.map} +1 -1
  286. package/dist/renderer-BxmsEl2x.mjs +5 -0
  287. package/dist/{renderer-BSitV56h.mjs → renderer-C9r0-KY4.mjs} +10 -1
  288. package/dist/{renderer-BSitV56h.mjs.map → renderer-C9r0-KY4.mjs.map} +1 -1
  289. package/dist/{renderer-B4jxP8vF.mjs → renderer-CDX2f82b.mjs} +5 -5
  290. package/dist/{renderer-B4jxP8vF.mjs.map → renderer-CDX2f82b.mjs.map} +1 -1
  291. package/dist/renderer-CGOyHdKs.mjs +5 -0
  292. package/dist/renderer-CJjmpmpu.mjs +5 -0
  293. package/dist/{renderer-P4OPsD82.mjs → renderer-CJoa4H2G.mjs} +3 -3
  294. package/dist/{renderer-P4OPsD82.mjs.map → renderer-CJoa4H2G.mjs.map} +1 -1
  295. package/dist/{renderer-1P3yS8YM.mjs → renderer-CLO8QHWE.mjs} +4 -4
  296. package/dist/{renderer-1P3yS8YM.mjs.map → renderer-CLO8QHWE.mjs.map} +1 -1
  297. package/dist/{renderer-CjQAYeYz.mjs → renderer-CMEqUhrW.mjs} +5 -5
  298. package/dist/{renderer-CjQAYeYz.mjs.map → renderer-CMEqUhrW.mjs.map} +1 -1
  299. package/dist/{renderer-CzgDJcot.mjs → renderer-CNs1vBUy.mjs} +4 -4
  300. package/dist/{renderer-CzgDJcot.mjs.map → renderer-CNs1vBUy.mjs.map} +1 -1
  301. package/dist/{index-B0BZMhtw.d.mts → renderer-COXKPofU.d.mts} +13 -13
  302. package/dist/renderer-COXKPofU.d.mts.map +1 -0
  303. package/dist/{renderer-CrwYWVsV.mjs → renderer-COtZ315B.mjs} +3 -3
  304. package/dist/renderer-CQvDDAIu.mjs +5 -0
  305. package/dist/{renderer-DOvzHN60.mjs → renderer-CWSM0IGG.mjs} +4 -4
  306. package/dist/{renderer-DOvzHN60.mjs.map → renderer-CWSM0IGG.mjs.map} +1 -1
  307. package/dist/{renderer-DVFFVy9v.mjs → renderer-CXbXF7Dh.mjs} +5 -5
  308. package/dist/{renderer-DVFFVy9v.mjs.map → renderer-CXbXF7Dh.mjs.map} +1 -1
  309. package/dist/renderer-CYxigw7S.mjs +5 -0
  310. package/dist/{renderer-DOxmmN6Q.mjs → renderer-CdUf7ZDJ.mjs} +5 -5
  311. package/dist/{renderer-DOxmmN6Q.mjs.map → renderer-CdUf7ZDJ.mjs.map} +1 -1
  312. package/dist/renderer-CgDofO5z.mjs +5 -0
  313. package/dist/renderer-CgmQchab.mjs +5 -0
  314. package/dist/{renderer-CS8VMTp1.mjs → renderer-Ch7qwjH9.mjs} +5 -5
  315. package/dist/{renderer-CS8VMTp1.mjs.map → renderer-Ch7qwjH9.mjs.map} +1 -1
  316. package/dist/{renderer-PuN2_AL_.mjs → renderer-ChCUad83.mjs} +5 -5
  317. package/dist/{renderer-PuN2_AL_.mjs.map → renderer-ChCUad83.mjs.map} +1 -1
  318. package/dist/{renderer-BaJQx0Bp.mjs → renderer-ChjkppUz.mjs} +5 -5
  319. package/dist/{renderer-BaJQx0Bp.mjs.map → renderer-ChjkppUz.mjs.map} +1 -1
  320. package/dist/{renderer-CTYKUnDq.mjs → renderer-Cj1giMd0.mjs} +3 -3
  321. package/dist/{renderer-CTYKUnDq.mjs.map → renderer-Cj1giMd0.mjs.map} +1 -1
  322. package/dist/{renderer-DWG4Podv.mjs → renderer-Cjs1OeBu.mjs} +6 -6
  323. package/dist/{renderer-DWG4Podv.mjs.map → renderer-Cjs1OeBu.mjs.map} +1 -1
  324. package/dist/renderer-CjzrLwW_.mjs +5 -0
  325. package/dist/renderer-ClnYWADT.mjs +5 -0
  326. package/dist/{renderer-B9ssmkbx.mjs → renderer-CmKdr2nA.mjs} +5 -5
  327. package/dist/{renderer-B9ssmkbx.mjs.map → renderer-CmKdr2nA.mjs.map} +1 -1
  328. package/dist/renderer-CwAd71C6.mjs +5 -0
  329. package/dist/{renderer-BT0x6KPK.mjs → renderer-D0X7Eh-T.mjs} +4 -4
  330. package/dist/{renderer-BT0x6KPK.mjs.map → renderer-D0X7Eh-T.mjs.map} +1 -1
  331. package/dist/{renderer-DYbgd6Ye.mjs → renderer-D2ru2Afi.mjs} +4 -4
  332. package/dist/{renderer-DYbgd6Ye.mjs.map → renderer-D2ru2Afi.mjs.map} +1 -1
  333. package/dist/renderer-D3Z9t-xT.mjs +5 -0
  334. package/dist/{renderer-CLxQ4rU6.mjs → renderer-D5u3GVtD.mjs} +74 -74
  335. package/dist/{renderer-CLxQ4rU6.mjs.map → renderer-D5u3GVtD.mjs.map} +1 -1
  336. package/dist/{renderer-DCsTCvdo.mjs → renderer-D6p8b6ql.mjs} +4 -4
  337. package/dist/{renderer-DCsTCvdo.mjs.map → renderer-D6p8b6ql.mjs.map} +1 -1
  338. package/dist/{renderer-Bkq1PT0g.mjs → renderer-DBjV6C2u.mjs} +3 -3
  339. package/dist/{renderer-BAoKytKL.mjs → renderer-DHqicGgT.mjs} +4 -4
  340. package/dist/{renderer-BAoKytKL.mjs.map → renderer-DHqicGgT.mjs.map} +1 -1
  341. package/dist/{renderer-B_b8-ztW.mjs → renderer-DK34NH92.mjs} +5 -5
  342. package/dist/{renderer-B_b8-ztW.mjs.map → renderer-DK34NH92.mjs.map} +1 -1
  343. package/dist/renderer-DKH1oSlW.mjs +5 -0
  344. package/dist/{renderer-I3Wxk1tL.mjs → renderer-DP41Fokp.mjs} +4 -4
  345. package/dist/{renderer-I3Wxk1tL.mjs.map → renderer-DP41Fokp.mjs.map} +1 -1
  346. package/dist/{renderer-CPLfsRe1.mjs → renderer-DQuKNgIx.mjs} +6 -6
  347. package/dist/{renderer-CPLfsRe1.mjs.map → renderer-DQuKNgIx.mjs.map} +1 -1
  348. package/dist/renderer-DTkf_hwG.mjs +5 -0
  349. package/dist/renderer-DU0bmOS7.mjs +5 -0
  350. package/dist/{renderer-GapR_An3.mjs → renderer-DWaqF7-6.mjs} +4 -4
  351. package/dist/{renderer-GapR_An3.mjs.map → renderer-DWaqF7-6.mjs.map} +1 -1
  352. package/dist/renderer-D_vJHQt5.mjs +5 -0
  353. package/dist/{renderer-GbVNyv-E.mjs → renderer-Db_wphHH.mjs} +192 -27
  354. package/dist/renderer-Db_wphHH.mjs.map +1 -0
  355. package/dist/renderer-Dc5n0M6P.mjs +5 -0
  356. package/dist/renderer-Ddfn0Dha.mjs +5 -0
  357. package/dist/renderer-DeSoNQeG.mjs +5 -0
  358. package/dist/{renderer-C0ds-UfM.mjs → renderer-DkPDYtD3.mjs} +5 -5
  359. package/dist/{renderer-C0ds-UfM.mjs.map → renderer-DkPDYtD3.mjs.map} +1 -1
  360. package/dist/{renderer-BCLmYH4S.mjs → renderer-DqO9gBAi.mjs} +4 -4
  361. package/dist/{renderer-BCLmYH4S.mjs.map → renderer-DqO9gBAi.mjs.map} +1 -1
  362. package/dist/{renderer-BUwHWIf7.mjs → renderer-DuQMzR3v.mjs} +4 -4
  363. package/dist/{renderer-BUwHWIf7.mjs.map → renderer-DuQMzR3v.mjs.map} +1 -1
  364. package/dist/{renderer-DBtt-7wt.d.mts → renderer-Dx28wTi1.d.mts} +2 -2
  365. package/dist/{renderer-DBtt-7wt.d.mts.map → renderer-Dx28wTi1.d.mts.map} +1 -1
  366. package/dist/{renderer-f7A01ArI.mjs → renderer-DyMEAZIm.mjs} +5 -5
  367. package/dist/{renderer-f7A01ArI.mjs.map → renderer-DyMEAZIm.mjs.map} +1 -1
  368. package/dist/renderer-Dzca9Qba.mjs +5 -0
  369. package/dist/{renderer-DBKyuPl1.mjs → renderer-FCqOfN6n.mjs} +5 -5
  370. package/dist/{renderer-DBKyuPl1.mjs.map → renderer-FCqOfN6n.mjs.map} +1 -1
  371. package/dist/{renderer-D96Pu8yX.mjs → renderer-Fsdod0yZ.mjs} +5 -5
  372. package/dist/{renderer-D96Pu8yX.mjs.map → renderer-Fsdod0yZ.mjs.map} +1 -1
  373. package/dist/{renderer-Du8eOWWU.mjs → renderer-G3px5ODP.mjs} +4 -4
  374. package/dist/{renderer-Du8eOWWU.mjs.map → renderer-G3px5ODP.mjs.map} +1 -1
  375. package/dist/renderer-HRVvtc9c.mjs +5 -0
  376. package/dist/{renderer-CUPWHfEY.mjs → renderer-IMg0dK6K.mjs} +5 -5
  377. package/dist/{renderer-CUPWHfEY.mjs.map → renderer-IMg0dK6K.mjs.map} +1 -1
  378. package/dist/renderer-M3Qs4f1K.mjs +5 -0
  379. package/dist/renderer-NDHJt_Ae.mjs +5 -0
  380. package/dist/{renderer-y6k54AM6.mjs → renderer-PLoGrFGz.mjs} +4 -4
  381. package/dist/{renderer-y6k54AM6.mjs.map → renderer-PLoGrFGz.mjs.map} +1 -1
  382. package/dist/{renderer-DO5r7ZV-.mjs → renderer-PNIgmWft.mjs} +2 -2
  383. package/dist/{renderer-DO5r7ZV-.mjs.map → renderer-PNIgmWft.mjs.map} +1 -1
  384. package/dist/{renderer-CDky5Gva.mjs → renderer-VdTs-dqH.mjs} +4 -4
  385. package/dist/{renderer-CDky5Gva.mjs.map → renderer-VdTs-dqH.mjs.map} +1 -1
  386. package/dist/{renderer-QaN-aejD.mjs → renderer-VxVi_0c7.mjs} +3 -3
  387. package/dist/{renderer-QaN-aejD.mjs.map → renderer-VxVi_0c7.mjs.map} +1 -1
  388. package/dist/{renderer-BMLJgnbU.mjs → renderer-WVrUeiLZ.mjs} +3 -3
  389. package/dist/{renderer-BHLYKy8b.mjs → renderer-Z39F9QK5.mjs} +5 -5
  390. package/dist/{renderer-BHLYKy8b.mjs.map → renderer-Z39F9QK5.mjs.map} +1 -1
  391. package/dist/{renderer-DSbRWfgl.mjs → renderer-ZjSP5jw6.mjs} +3 -3
  392. package/dist/{renderer-DSbRWfgl.mjs.map → renderer-ZjSP5jw6.mjs.map} +1 -1
  393. package/dist/{renderer-CE83KHgr.mjs → renderer-fH9SCJC2.mjs} +3 -3
  394. package/dist/{renderer-CE83KHgr.mjs.map → renderer-fH9SCJC2.mjs.map} +1 -1
  395. package/dist/{renderer-Cy4a31rZ.mjs → renderer-gjT5v76-.mjs} +3 -3
  396. package/dist/{renderer-Cy4a31rZ.mjs.map → renderer-gjT5v76-.mjs.map} +1 -1
  397. package/dist/{renderer-C-z6bxj9.mjs → renderer-kP5Y282J.mjs} +5 -5
  398. package/dist/{renderer-C-z6bxj9.mjs.map → renderer-kP5Y282J.mjs.map} +1 -1
  399. package/dist/{renderer-BI8QhEj9.mjs → renderer-kkDfQ56G.mjs} +5 -5
  400. package/dist/{renderer-BI8QhEj9.mjs.map → renderer-kkDfQ56G.mjs.map} +1 -1
  401. package/dist/{renderer-DHUlVqST.mjs → renderer-l_U6kA8K.mjs} +3 -3
  402. package/dist/{renderer-DHUlVqST.mjs.map → renderer-l_U6kA8K.mjs.map} +1 -1
  403. package/dist/{renderer-BajIOuZH.mjs → renderer-nLPfvY3-.mjs} +2 -2
  404. package/dist/{renderer-BajIOuZH.mjs.map → renderer-nLPfvY3-.mjs.map} +1 -1
  405. package/dist/{renderer-C4vHq0X8.mjs → renderer-o_JK4YfO.mjs} +5 -5
  406. package/dist/{renderer-C4vHq0X8.mjs.map → renderer-o_JK4YfO.mjs.map} +1 -1
  407. package/dist/{renderer-CAi-lhR2.mjs → renderer-vwoyR8pW.mjs} +4 -4
  408. package/dist/{renderer-CAi-lhR2.mjs.map → renderer-vwoyR8pW.mjs.map} +1 -1
  409. package/dist/{renderers-CP8CFWDs-D1FHpA7I.mjs → renderers-CP8CFWDs-DiX2Y4Qp.mjs} +4 -4
  410. package/dist/{renderers-CP8CFWDs-D1FHpA7I.mjs.map → renderers-CP8CFWDs-DiX2Y4Qp.mjs.map} +1 -1
  411. package/dist/signals/index.d.mts +6 -6
  412. package/dist/signals/index.mjs +8 -8
  413. package/dist/{signals-BwdVfK3p.mjs → signals-Cf9mfNGE.mjs} +4 -4
  414. package/dist/{signals-BwdVfK3p.mjs.map → signals-Cf9mfNGE.mjs.map} +1 -1
  415. package/dist/src-Ds9IAk5S.mjs +8373 -0
  416. package/dist/src-Ds9IAk5S.mjs.map +1 -0
  417. package/package.json +68 -58
  418. package/dist/dist-DMa2BbYs.mjs.map +0 -1
  419. package/dist/dist-hmWTJPik.mjs.map +0 -1
  420. package/dist/fonts-Da1JDKpc.mjs.map +0 -1
  421. package/dist/index-B0BZMhtw.d.mts.map +0 -1
  422. package/dist/index-CJkihekp.d.mts.map +0 -1
  423. package/dist/index-DGe83M-p.d.mts.map +0 -1
  424. package/dist/index.d.mts.map +0 -1
  425. package/dist/index.mjs.map +0 -1
  426. package/dist/preview/index.d.mts.map +0 -1
  427. package/dist/preview-5E4B96RD.mjs.map +0 -1
  428. package/dist/preview-engine/chunk-3T4LB4ZH.mjs +0 -3
  429. package/dist/preview-engine/chunk-E7DH7EPX.mjs +0 -1
  430. package/dist/preview-engine/chunk-PCWWKYFO.mjs +0 -1
  431. package/dist/preview-engine/chunk-RQLMW6MA.mjs +0 -4
  432. package/dist/preview-engine/chunk-XN56POGE.mjs +0 -1
  433. package/dist/preview-engine/renderers-2AD6AHAO.mjs +0 -1
  434. package/dist/preview-engine/renderers-37UYW266.mjs +0 -1
  435. package/dist/preview-engine/renderers-3YHETAPE.mjs +0 -1
  436. package/dist/preview-engine/renderers-43LBWRY2.mjs +0 -1
  437. package/dist/preview-engine/renderers-4I4UDLDR.mjs +0 -1
  438. package/dist/preview-engine/renderers-5EITT2FW.mjs +0 -1
  439. package/dist/preview-engine/renderers-7UKFQ75V.mjs +0 -1
  440. package/dist/preview-engine/renderers-AIRDDXRB.mjs +0 -1
  441. package/dist/preview-engine/renderers-BUOGMWAA.mjs +0 -1
  442. package/dist/preview-engine/renderers-C4XIAG3F.mjs +0 -1
  443. package/dist/preview-engine/renderers-ELARGDRC.mjs +0 -1
  444. package/dist/preview-engine/renderers-EU5VM2S2.mjs +0 -1
  445. package/dist/preview-engine/renderers-GEPP3YKK.mjs +0 -1
  446. package/dist/preview-engine/renderers-IQNZQWYU.mjs +0 -1
  447. package/dist/preview-engine/renderers-J6DEIWTU.mjs +0 -1
  448. package/dist/preview-engine/renderers-JQ7AI473.mjs +0 -228
  449. package/dist/preview-engine/renderers-JTVCE5PV.mjs +0 -1
  450. package/dist/preview-engine/renderers-KCNUETAD.mjs +0 -1
  451. package/dist/preview-engine/renderers-KKBHXAWS.mjs +0 -1
  452. package/dist/preview-engine/renderers-LER7SUT2.mjs +0 -1
  453. package/dist/preview-engine/renderers-MOERLDWF.mjs +0 -1
  454. package/dist/preview-engine/renderers-O57YIIAO.mjs +0 -1
  455. package/dist/preview-engine/renderers-OPUIAD7I.mjs +0 -1
  456. package/dist/preview-engine/renderers-PENUAXDD.mjs +0 -1
  457. package/dist/preview-engine/renderers-PFCI7ZFW.mjs +0 -1
  458. package/dist/preview-engine/renderers-Q4HDP2IE.mjs +0 -1
  459. package/dist/preview-engine/renderers-QMHUOKMM.mjs +0 -1
  460. package/dist/preview-engine/renderers-R26YPECG.mjs +0 -1
  461. package/dist/preview-engine/renderers-TAFDMFEA.mjs +0 -1
  462. package/dist/preview-engine/renderers-TMZLWQP2.mjs +0 -1
  463. package/dist/preview-engine/renderers-TP6ZMGU4.mjs +0 -1
  464. package/dist/preview-engine/renderers-TY63VTZB.mjs +0 -1
  465. package/dist/preview-engine/renderers-UBO4ZNE6.mjs +0 -1
  466. package/dist/preview-engine/renderers-UCNQ536S.mjs +0 -1
  467. package/dist/preview-engine/renderers-WOZQDE4A.mjs +0 -1
  468. package/dist/preview-engine/renderers-X2XGDF3R.mjs +0 -1
  469. package/dist/preview-engine/renderers-XG3BDROH.mjs +0 -1
  470. package/dist/preview-engine/renderers-XS4CFZWR.mjs +0 -1
  471. package/dist/preview-engine/renderers-ZQDMRWN7.mjs +0 -1
  472. package/dist/program-KwDdbC0-.mjs.map +0 -1
  473. package/dist/renderer-5C41E6gT.mjs +0 -5
  474. package/dist/renderer-6SXF9Ykm.mjs +0 -5
  475. package/dist/renderer-B2C2w3Wr.mjs +0 -5
  476. package/dist/renderer-B2QSfPYZ.mjs +0 -5
  477. package/dist/renderer-B5cQcMl1.mjs +0 -5
  478. package/dist/renderer-BDhD8Yab.mjs +0 -3
  479. package/dist/renderer-BSDdTHDh.mjs +0 -5
  480. package/dist/renderer-BTUjk8uY.mjs +0 -5
  481. package/dist/renderer-Bcey5Gvk.mjs +0 -5
  482. package/dist/renderer-Bd2MuOeJ.mjs +0 -5
  483. package/dist/renderer-Bd5A0zer.mjs +0 -5
  484. package/dist/renderer-CC-WlYa2.mjs +0 -5
  485. package/dist/renderer-Cb0qf1UG.mjs +0 -5
  486. package/dist/renderer-CfX13dgQ.mjs +0 -5
  487. package/dist/renderer-ChFkRLrv.mjs +0 -5
  488. package/dist/renderer-CjkfJj5R.mjs +0 -5
  489. package/dist/renderer-Ck7Lu6c9.mjs +0 -5
  490. package/dist/renderer-CuquqG_c.mjs +0 -5
  491. package/dist/renderer-Cwz2E4QD.mjs +0 -5
  492. package/dist/renderer-Czkt9YYp.mjs +0 -5
  493. package/dist/renderer-DFTIhSdJ.mjs +0 -5
  494. package/dist/renderer-DFaa-Ats.mjs +0 -5
  495. package/dist/renderer-DIHXKvPl.mjs +0 -5
  496. package/dist/renderer-DMzOqVM3.mjs +0 -5
  497. package/dist/renderer-DOId5U8x.mjs +0 -5
  498. package/dist/renderer-DQXFOup8.mjs +0 -5
  499. package/dist/renderer-DRt3BSTj.mjs +0 -5
  500. package/dist/renderer-Di_5vQ81.mjs +0 -6
  501. package/dist/renderer-DkmpsPIa.mjs +0 -5
  502. package/dist/renderer-Ds6wd9Gk.mjs +0 -5
  503. package/dist/renderer-DuuOlYIG.mjs +0 -3
  504. package/dist/renderer-Dv4p0lp9.mjs +0 -5
  505. package/dist/renderer-DzWoOlVc.mjs +0 -5
  506. package/dist/renderer-GbVNyv-E.mjs.map +0 -1
  507. package/dist/renderer-IOz63OWg.mjs +0 -5
  508. package/dist/renderer-JkSrsUa5.mjs +0 -5
  509. package/dist/renderer-Ocs1Djwu.mjs +0 -5
  510. package/dist/renderer-Wdn7m_uN.mjs +0 -5
  511. package/dist/renderer-mKpjaoE3.mjs +0 -5
  512. /package/dist/{chunk-GBe2k3y8.mjs → chunk-D7gtBK74.mjs} +0 -0
  513. /package/dist/preview-engine/{chunk-Q4Z54DQ7.mjs → chunk-LXHECDOB.mjs} +0 -0
  514. /package/dist/{renderer-B-BcgA6d.mjs → renderer-B7fX0C62.mjs} +0 -0
package/README.md CHANGED
@@ -84,7 +84,7 @@ Every frame is rendered by framefields directly from TypeScript in [`examples/`]
84
84
  pnpm add framefields
85
85
  ```
86
86
 
87
- > **Requirements:** Node.js ≥ 22. Native GPU acceleration via WebGPU / Dawn (macOS Metal, Linux Vulkan, Windows D3D12).
87
+ > **Requirements:** Node.js ≥ 22. Native GPU acceleration via WebGPU / Dawn (macOS Metal, Linux Vulkan, Windows D3D12). Machines without a dedicated GPU can render on the CPU via Mesa lavapipe on Linux or WARP on Windows (~10–12× slower than GPU; suitable for headless CI and test frames).
88
88
 
89
89
  ---
90
90
 
@@ -159,6 +159,31 @@ process.exit(0);
159
159
 
160
160
  ---
161
161
 
162
+ ## Components
163
+
164
+ Ready-made motion pieces you own: a mouse pointer with clicks and drags, a camera that zooms to them, window and device frames, word-timed captions, text reveals, counters, terminals, code blocks, title cards, lower thirds, logo reveals, backdrops, audio waveforms and more. Like a shadcn registry, `framefields add` copies a component's source into your project instead of hiding it in the package, so you can change any curve, glyph or layout.
165
+
166
+ ```bash
167
+ npx framefields list # every component, one line each
168
+ npx framefields add mouse-pointer focus-zoom # writes src/components/<name>/
169
+ ```
170
+
171
+ ```typescript
172
+ import { MousePointer } from "./components/mouse-pointer/index.js";
173
+
174
+ const pointer = MousePointer({
175
+ path: [{ to: [400, 300] }, { to: [960, 540], click: true }],
176
+ });
177
+ comp.add(pointer);
178
+
179
+ // Every event is a cue: key a button press or a click sound to it.
180
+ const clickAt = pointer.cues.clicks[0].frame;
181
+ ```
182
+
183
+ Installed components import only `framefields` and the shared toolkit in `framefields/components`, and bring along any component they build on. Files you've edited are never overwritten unless you pass `--overwrite`.
184
+
185
+ ---
186
+
162
187
  ## AI Gateway
163
188
 
164
189
  Framefields provides built-in access to the [**AI Gateway**](https://framefields.dev/models), allowing agents and developers to generate cinematic video, images, music, and voiceovers directly from code using hundreds of hosted models. Explore the full model catalog in the [**AI Gateway**](https://framefields.dev/models) or read the integration guide in the [**documentation**](https://framefields.dev/docs/guides/ai/).
@@ -1,5 +1,5 @@
1
- import { N as WebGPUAudioProcessor } from "../index-DGe83M-p.mjs";
2
- import { a as SfxTrigger, c as softLimit, d as _default$5, f as _default$4, g as mixAudioTracks, h as _default$2, i as SfxRenderContext, l as _default$7, m as _default$3, n as encodeStereoWav, o as mixSfxInto, p as _default, r as RenderedSfx, s as renderSfx, t as EncodeWavOptions, u as _default$6 } from "../index-Dwf76Qep.mjs";
3
- import "../index-B0BZMhtw.mjs";
4
- import { t as _default$1 } from "../renderer-DBtt-7wt.mjs";
1
+ import { N as WebGPUAudioProcessor } from "../index-fymoeGNW.mjs";
2
+ import { a as SfxTrigger, c as softLimit, d as _default$5, f as _default$4, g as mixAudioTracks, h as _default$2, i as SfxRenderContext, l as _default$7, m as _default$3, n as encodeStereoWav, o as mixSfxInto, p as _default, r as RenderedSfx, s as renderSfx, t as EncodeWavOptions, u as _default$6 } from "../index-DNKM3to5.mjs";
3
+ import "../renderer-COXKPofU.mjs";
4
+ import { t as _default$1 } from "../renderer-Dx28wTi1.mjs";
5
5
  export { EncodeWavOptions, RenderedSfx, SfxRenderContext, SfxTrigger, WebGPUAudioProcessor, _default as audioFadeRenderer, _default$1 as audioSignalExtractorRenderer, _default$2 as compressorRenderer, _default$3 as delayRenderer, encodeStereoWav, mixAudioTracks, mixSfxInto, _default$4 as noiseGateRenderer, _default$5 as parametricEqRenderer, renderSfx, _default$6 as reverbRenderer, softLimit, _default$7 as stereoPanningRenderer };
@@ -1,15 +1,15 @@
1
- import "../chunk-GBe2k3y8.mjs";
2
- import { g as WebGPUAudioProcessor } from "../dist-hmWTJPik.mjs";
3
- import { t as renderers_default$1 } from "../renderers-CP8CFWDs-D1FHpA7I.mjs";
4
- import { i as mixAudioTracks } from "../dist-DMa2BbYs.mjs";
5
- import { t as renderers_default$2 } from "../renderer-DcOT5c0t.mjs";
6
- import { t as renderers_default$3 } from "../renderer-D4No_jA4.mjs";
7
- import { t as renderers_default } from "../renderer-CwO8T8l8.mjs";
8
- import { t as renderers_default$4 } from "../renderer-C4xvz_Ft.mjs";
9
- import { t as renderers_default$5 } from "../renderer-DYbgd6Ye.mjs";
10
- import { t as renderers_default$6 } from "../renderer-I3Wxk1tL.mjs";
11
- import "../renderer-B-BcgA6d.mjs";
12
- import { t as renderers_default$7 } from "../renderer-1P3yS8YM.mjs";
13
- import { i as softLimit, n as mixSfxInto, r as renderSfx, t as encodeStereoWav } from "../audio-DJeVoE8b.mjs";
1
+ import "../chunk-D7gtBK74.mjs";
2
+ import { g as WebGPUAudioProcessor } from "../dist-DBWkkSvJ.mjs";
3
+ import { t as renderers_default$1 } from "../renderers-CP8CFWDs-DiX2Y4Qp.mjs";
4
+ import { i as mixAudioTracks } from "../dist-DHQVWaV2.mjs";
5
+ import { t as renderers_default$2 } from "../renderer-Bo_d7h86.mjs";
6
+ import { t as renderers_default$3 } from "../renderer-1VKN5j2C.mjs";
7
+ import { t as renderers_default } from "../renderer-BYJS2lhn.mjs";
8
+ import { t as renderers_default$4 } from "../renderer-Bw5YP2Db.mjs";
9
+ import { t as renderers_default$5 } from "../renderer-D2ru2Afi.mjs";
10
+ import { t as renderers_default$6 } from "../renderer-DP41Fokp.mjs";
11
+ import "../renderer-B7fX0C62.mjs";
12
+ import { t as renderers_default$7 } from "../renderer-CLO8QHWE.mjs";
13
+ import { i as softLimit, n as mixSfxInto, r as renderSfx, t as encodeStereoWav } from "../audio-BluXgSeG.mjs";
14
14
 
15
15
  export { WebGPUAudioProcessor, renderers_default as audioFadeRenderer, renderers_default$1 as audioSignalExtractorRenderer, renderers_default$2 as compressorRenderer, renderers_default$3 as delayRenderer, encodeStereoWav, mixAudioTracks, mixSfxInto, renderers_default$4 as noiseGateRenderer, renderers_default$5 as parametricEqRenderer, renderSfx, renderers_default$6 as reverbRenderer, softLimit, renderers_default$7 as stereoPanningRenderer };
@@ -211,4 +211,4 @@ function encodeStereoWav(channels, options = {}) {
211
211
 
212
212
  //#endregion
213
213
  export { softLimit as i, mixSfxInto as n, renderSfx as r, encodeStereoWav as t };
214
- //# sourceMappingURL=audio-DJeVoE8b.mjs.map
214
+ //# sourceMappingURL=audio-BluXgSeG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-DJeVoE8b.mjs","names":[],"sources":["../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["/**\n * @file packages/framefields/src/audio/synth/sfx.ts\n * Deterministic procedural transition effects (whoosh, riser, impact, downshifter, glitch).\n * Pure CPU DSP: the same trigger always renders the same samples.\n */\n\n/**\n * Procedural sound effect transition event, synthesized deterministically on the CPU.\n * Default durations: whoosh 0.7s, riser 2s, impact 1.8s, downshifter 1.2s, glitch 0.35s.\n */\nexport interface SfxTrigger {\n\ttype: \"whoosh\" | \"riser\" | \"impact\" | \"downshifter\" | \"glitch\";\n\t/** Bar (fractional allowed) where the effect *starts*. A riser landing on a cut starts `durationSec` earlier. */\n\tatBar: number;\n\tdurationSec?: number;\n\tvolume?: number;\n}\n\nexport type StereoBuffer = [Float32Array, Float32Array];\n\nexport interface RenderedSfx {\n\t/** First sample of the effect on the score timeline. */\n\tstartSample: number;\n\tchannels: StereoBuffer;\n}\n\nexport interface SfxRenderContext {\n\tsampleRate: number;\n\tsecondsPerBar: number;\n\t/** Distinguishes otherwise identical triggers so noise differs between them. */\n\tseed: number;\n}\n\nconst DEFAULT_DURATION_SEC: Record<SfxTrigger[\"type\"], number> = {\n\twhoosh: 0.7,\n\triser: 2,\n\timpact: 1.8,\n\tdownshifter: 1.2,\n\tglitch: 0.35,\n};\n\n/** Small, fast, seedable PRNG returning values in [-1, 1). */\nfunction createNoise(seed: number): () => number {\n\tlet state = (seed ^ 0x9e3779b9) >>> 0;\n\treturn () => {\n\t\tstate = (state + 0x6d2b79f5) >>> 0;\n\t\tlet t = state;\n\t\tt = Math.imul(t ^ (t >>> 15), t | 1);\n\t\tt ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n\t\treturn (((t ^ (t >>> 14)) >>> 0) / 4294967296) * 2 - 1;\n\t};\n}\n\n/** Chamberlin state-variable filter; returns the band-pass output of one sample. */\nclass BandPass {\n\tprivate low = 0;\n\tprivate band = 0;\n\n\tpublic process(\n\t\tinput: number,\n\t\tfreq: number,\n\t\tq: number,\n\t\tsampleRate: number,\n\t): number {\n\t\tconst f =\n\t\t\t2 * Math.sin((Math.PI * Math.min(freq, sampleRate * 0.45)) / sampleRate);\n\t\tthis.low += f * this.band;\n\t\tconst high = input - this.low - q * this.band;\n\t\tthis.band += f * high;\n\t\treturn this.band;\n\t}\n}\n\n/** Exponential sweep from `a` to `b` as `x` moves 0 → 1. */\nconst expSweep = (a: number, b: number, x: number): number => a * (b / a) ** x;\n\n/** Fast rise, longer fall: a bell centred at `peak` in 0..1. */\nconst bell = (x: number, peak: number): number =>\n\tx < peak\n\t\t? Math.sin((x / peak) * (Math.PI / 2)) ** 2\n\t\t: Math.cos(((x - peak) / (1 - peak)) * (Math.PI / 2)) ** 2;\n\nfunction whoosh(\n\tn: number,\n\tsr: number,\n\tnoise: () => number,\n\treverse: boolean,\n): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst filter = new BandPass();\n\tfor (let i = 0; i < n; i++) {\n\t\tconst x = i / n;\n\t\tconst sweep = reverse ? 1 - x : x;\n\t\tconst env = bell(x, reverse ? 0.35 : 0.6);\n\t\tconst s =\n\t\t\tfilter.process(noise(), expSweep(250, 7000, sweep), 0.35, sr) * env * 0.9;\n\t\tconst pan = (reverse ? 1 - x : x) * 2 - 1;\n\t\tleft[i] = s * Math.sqrt((1 - pan) / 2) * 1.4;\n\t\tright[i] = s * Math.sqrt((1 + pan) / 2) * 1.4;\n\t}\n\treturn [left, right];\n}\n\nfunction riser(\n\tn: number,\n\tsr: number,\n\tnoise: () => number,\n\treverse: boolean,\n): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst air = new BandPass();\n\tlet phase = 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst x = i / n;\n\t\tconst sweep = reverse ? 1 - x : x;\n\t\tconst env = reverse ? (1 - x) ** 1.5 : x ** 2.2;\n\t\tconst freq = expSweep(110, 880, sweep);\n\t\tphase += (2 * Math.PI * freq) / sr;\n\t\t// Band-limited enough at these pitches: two detuned-free partials of a saw.\n\t\tconst tone =\n\t\t\t(Math.sin(phase) +\n\t\t\t\t0.5 * Math.sin(phase * 2) +\n\t\t\t\t0.25 * Math.sin(phase * 3)) *\n\t\t\t0.3;\n\t\tconst hiss =\n\t\t\tair.process(noise(), expSweep(300, 9000, sweep), 0.5, sr) * 1.2;\n\t\tconst s = (tone + hiss) * env * 0.6;\n\t\tleft[i] = s;\n\t\tright[i] = s;\n\t}\n\treturn [left, right];\n}\n\nfunction impact(n: number, sr: number, noise: () => number): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst burst = new BandPass();\n\tlet phase = 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst t = i / sr;\n\t\tconst freq = 38 + 62 * Math.exp(-t * 14);\n\t\tphase += (2 * Math.PI * freq) / sr;\n\t\tconst sub = Math.sin(phase) * Math.exp(-t * 2.6);\n\t\tconst body =\n\t\t\tburst.process(noise(), 900 * Math.exp(-t * 6) + 120, 0.6, sr) *\n\t\t\tMath.exp(-t * 9) *\n\t\t\t1.6;\n\t\tconst click = i < 96 ? noise() * (1 - i / 96) * 0.5 : 0;\n\t\tconst s = (sub * 1.1 + body + click) * 0.85;\n\t\t// Slight decorrelated tail widens the hit without smearing the transient.\n\t\tconst tail = noise() * Math.exp(-t * 5) * 0.08;\n\t\tleft[i] = s + tail;\n\t\tright[i] = s - tail;\n\t}\n\treturn [left, right];\n}\n\nfunction glitch(n: number, sr: number, noise: () => number): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst slice = Math.max(1, Math.round(sr * 0.022));\n\tlet held = 0;\n\tlet gate = 1;\n\tlet crush = 1;\n\tfor (let i = 0; i < n; i++) {\n\t\tif (i % slice === 0) {\n\t\t\tgate = noise() > -0.2 ? 1 : 0;\n\t\t\tcrush = 2 + Math.floor((noise() + 1) * 6);\n\t\t}\n\t\tif (i % crush === 0) held = noise() > 0 ? 1 : -1;\n\t\tconst env = 1 - i / n;\n\t\tconst s = held * gate * env * 0.45;\n\t\tleft[i] = s;\n\t\tright[i] = gate ? -s * 0.6 : 0;\n\t}\n\treturn [left, right];\n}\n\n/**\n * Renders one trigger to stereo PCM positioned at `atBar` on the score timeline.\n * `atBar` is where the effect *starts*; a riser meant to land on a cut starts\n * `durationSec / secondsPerBar` bars before it.\n */\nexport function renderSfx(\n\ttrigger: SfxTrigger,\n\tctx: SfxRenderContext,\n): RenderedSfx {\n\tconst durationSec = trigger.durationSec ?? DEFAULT_DURATION_SEC[trigger.type];\n\tconst sr = ctx.sampleRate;\n\tconst n = Math.max(1, Math.round(durationSec * sr));\n\tconst noise = createNoise(ctx.seed + n);\n\n\tlet channels: StereoBuffer;\n\tswitch (trigger.type) {\n\t\tcase \"whoosh\":\n\t\t\tchannels = whoosh(n, sr, noise, false);\n\t\t\tbreak;\n\t\tcase \"riser\":\n\t\t\tchannels = riser(n, sr, noise, false);\n\t\t\tbreak;\n\t\tcase \"downshifter\":\n\t\t\tchannels = riser(n, sr, noise, true);\n\t\t\tbreak;\n\t\tcase \"impact\":\n\t\t\tchannels = impact(n, sr, noise);\n\t\t\tbreak;\n\t\tcase \"glitch\":\n\t\t\tchannels = glitch(n, sr, noise);\n\t\t\tbreak;\n\t}\n\n\tconst gain = trigger.volume ?? 0.8;\n\tfor (const channel of channels) {\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tchannel[i] = Math.tanh((channel[i] ?? 0) * gain);\n\t}\n\treturn {\n\t\tstartSample: Math.max(\n\t\t\t0,\n\t\t\tMath.round(trigger.atBar * ctx.secondsPerBar * sr),\n\t\t),\n\t\tchannels,\n\t};\n}\n\n/** Adds rendered effects into `target` in place, clipping to its length. */\nexport function mixSfxInto(\n\ttarget: StereoBuffer,\n\teffects: readonly RenderedSfx[],\n): void {\n\tfor (const fx of effects) {\n\t\tfor (let c = 0; c < 2; c++) {\n\t\t\tconst dst = target[c];\n\t\t\tconst src = fx.channels[c];\n\t\t\tif (!dst || !src) continue;\n\t\t\tconst limit = Math.min(src.length, dst.length - fx.startSample);\n\t\t\tfor (let i = 0; i < limit; i++) {\n\t\t\t\tconst val = dst[fx.startSample + i];\n\t\t\t\tconst s = src[i];\n\t\t\t\tif (val !== undefined && s !== undefined) {\n\t\t\t\t\tdst[fx.startSample + i] = val + s;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Soft-knee limiter for sums that may exceed full scale (impacts stacked on a\n * loud mix): transparent below the knee, asymptotically bounded by 1.0 above it.\n */\nexport function softLimit(\n\ttarget: StereoBuffer,\n\tknee = 0.7,\n\tceiling = 0.97,\n): void {\n\tconst headroom = ceiling - knee;\n\tfor (const channel of target) {\n\t\tfor (let i = 0; i < channel.length; i++) {\n\t\t\tconst x = channel[i] ?? 0;\n\t\t\tconst a = Math.abs(x);\n\t\t\tif (a > knee)\n\t\t\t\tchannel[i] =\n\t\t\t\t\tMath.sign(x) * (knee + headroom * Math.tanh((a - knee) / headroom));\n\t\t}\n\t}\n}\n","/**\n * @file packages/framefields/src/audio/synth/wav-encoder.ts\n * High-performance 16-bit PCM RIFF/WAVE stereo audio encoder.\n */\n\nexport interface EncodeWavOptions {\n\tsampleRate?: number;\n}\n\n/**\n * Encodes stereo Float32Array PCM channels (-1.0 to +1.0) into a standard 16-bit RIFF/WAVE Buffer.\n */\nexport function encodeStereoWav(\n\tchannels: [Float32Array, Float32Array],\n\toptions: EncodeWavOptions = {},\n): Buffer {\n\tconst sampleRate = options.sampleRate ?? 48000;\n\tconst numChannels = 2;\n\tconst left = channels[0];\n\tconst right = channels[1];\n\tconst numSamples = Math.min(left.length, right.length);\n\n\tconst bytesPerSample = 2; // 16-bit\n\tconst blockAlign = numChannels * bytesPerSample;\n\tconst byteRate = sampleRate * blockAlign;\n\tconst dataSize = numSamples * blockAlign;\n\tconst totalSize = 44 + dataSize;\n\n\tconst buffer = Buffer.alloc(totalSize);\n\n\t// RIFF Header\n\tbuffer.write(\"RIFF\", 0, \"ascii\");\n\tbuffer.writeUInt32LE(36 + dataSize, 4);\n\tbuffer.write(\"WAVE\", 8, \"ascii\");\n\n\t// \"fmt \" chunk\n\tbuffer.write(\"fmt \", 12, \"ascii\");\n\tbuffer.writeUInt32LE(16, 16); // PCM header size\n\tbuffer.writeUInt16LE(1, 20); // AudioFormat 1 = PCM\n\tbuffer.writeUInt16LE(numChannels, 22);\n\tbuffer.writeUInt32LE(sampleRate, 24);\n\tbuffer.writeUInt32LE(byteRate, 28);\n\tbuffer.writeUInt16LE(blockAlign, 32);\n\tbuffer.writeUInt16LE(16, 34); // Bits per sample\n\n\t// \"data\" chunk\n\tbuffer.write(\"data\", 36, \"ascii\");\n\tbuffer.writeUInt32LE(dataSize, 40);\n\n\tlet offset = 44;\n\tfor (let i = 0; i < numSamples; i++) {\n\t\t// Left channel\n\t\tconst sl = Math.max(-1, Math.min(1, left[i] ?? 0));\n\t\tconst intL = sl < 0 ? sl * 0x8000 : sl * 0x7fff;\n\t\tbuffer.writeInt16LE(Math.round(intL), offset);\n\t\toffset += 2;\n\n\t\t// Right channel\n\t\tconst sr = Math.max(-1, Math.min(1, right[i] ?? 0));\n\t\tconst intR = sr < 0 ? sr * 0x8000 : sr * 0x7fff;\n\t\tbuffer.writeInt16LE(Math.round(intR), offset);\n\t\toffset += 2;\n\t}\n\n\treturn buffer;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"audio-BluXgSeG.mjs","names":[],"sources":["../src/audio/synth/sfx.ts","../src/audio/synth/wav-encoder.ts"],"sourcesContent":["/**\n * @file packages/framefields/src/audio/synth/sfx.ts\n * Deterministic procedural transition effects (whoosh, riser, impact, downshifter, glitch).\n * Pure CPU DSP: the same trigger always renders the same samples.\n */\n\n/**\n * Procedural sound effect transition event, synthesized deterministically on the CPU.\n * Default durations: whoosh 0.7s, riser 2s, impact 1.8s, downshifter 1.2s, glitch 0.35s.\n */\nexport interface SfxTrigger {\n\ttype: \"whoosh\" | \"riser\" | \"impact\" | \"downshifter\" | \"glitch\";\n\t/** Bar (fractional allowed) where the effect *starts*. A riser landing on a cut starts `durationSec` earlier. */\n\tatBar: number;\n\tdurationSec?: number;\n\tvolume?: number;\n}\n\nexport type StereoBuffer = [Float32Array, Float32Array];\n\nexport interface RenderedSfx {\n\t/** First sample of the effect on the score timeline. */\n\tstartSample: number;\n\tchannels: StereoBuffer;\n}\n\nexport interface SfxRenderContext {\n\tsampleRate: number;\n\tsecondsPerBar: number;\n\t/** Distinguishes otherwise identical triggers so noise differs between them. */\n\tseed: number;\n}\n\nconst DEFAULT_DURATION_SEC: Record<SfxTrigger[\"type\"], number> = {\n\twhoosh: 0.7,\n\triser: 2,\n\timpact: 1.8,\n\tdownshifter: 1.2,\n\tglitch: 0.35,\n};\n\n/** Small, fast, seedable PRNG returning values in [-1, 1). */\nfunction createNoise(seed: number): () => number {\n\tlet state = (seed ^ 0x9e3779b9) >>> 0;\n\treturn () => {\n\t\tstate = (state + 0x6d2b79f5) >>> 0;\n\t\tlet t = state;\n\t\tt = Math.imul(t ^ (t >>> 15), t | 1);\n\t\tt ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n\t\treturn (((t ^ (t >>> 14)) >>> 0) / 4294967296) * 2 - 1;\n\t};\n}\n\n/** Chamberlin state-variable filter; returns the band-pass output of one sample. */\nclass BandPass {\n\tprivate low = 0;\n\tprivate band = 0;\n\n\tpublic process(\n\t\tinput: number,\n\t\tfreq: number,\n\t\tq: number,\n\t\tsampleRate: number,\n\t): number {\n\t\tconst f =\n\t\t\t2 * Math.sin((Math.PI * Math.min(freq, sampleRate * 0.45)) / sampleRate);\n\t\tthis.low += f * this.band;\n\t\tconst high = input - this.low - q * this.band;\n\t\tthis.band += f * high;\n\t\treturn this.band;\n\t}\n}\n\n/** Exponential sweep from `a` to `b` as `x` moves 0 → 1. */\nconst expSweep = (a: number, b: number, x: number): number => a * (b / a) ** x;\n\n/** Fast rise, longer fall: a bell centred at `peak` in 0..1. */\nconst bell = (x: number, peak: number): number =>\n\tx < peak\n\t\t? Math.sin((x / peak) * (Math.PI / 2)) ** 2\n\t\t: Math.cos(((x - peak) / (1 - peak)) * (Math.PI / 2)) ** 2;\n\nfunction whoosh(\n\tn: number,\n\tsr: number,\n\tnoise: () => number,\n\treverse: boolean,\n): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst filter = new BandPass();\n\tfor (let i = 0; i < n; i++) {\n\t\tconst x = i / n;\n\t\tconst sweep = reverse ? 1 - x : x;\n\t\tconst env = bell(x, reverse ? 0.35 : 0.6);\n\t\tconst s =\n\t\t\tfilter.process(noise(), expSweep(250, 7000, sweep), 0.35, sr) * env * 0.9;\n\t\tconst pan = (reverse ? 1 - x : x) * 2 - 1;\n\t\tleft[i] = s * Math.sqrt((1 - pan) / 2) * 1.4;\n\t\tright[i] = s * Math.sqrt((1 + pan) / 2) * 1.4;\n\t}\n\treturn [left, right];\n}\n\nfunction riser(\n\tn: number,\n\tsr: number,\n\tnoise: () => number,\n\treverse: boolean,\n): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst air = new BandPass();\n\tlet phase = 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst x = i / n;\n\t\tconst sweep = reverse ? 1 - x : x;\n\t\tconst env = reverse ? (1 - x) ** 1.5 : x ** 2.2;\n\t\tconst freq = expSweep(110, 880, sweep);\n\t\tphase += (2 * Math.PI * freq) / sr;\n\t\t// Band-limited enough at these pitches: two detuned-free partials of a saw.\n\t\tconst tone =\n\t\t\t(Math.sin(phase) +\n\t\t\t\t0.5 * Math.sin(phase * 2) +\n\t\t\t\t0.25 * Math.sin(phase * 3)) *\n\t\t\t0.3;\n\t\tconst hiss =\n\t\t\tair.process(noise(), expSweep(300, 9000, sweep), 0.5, sr) * 1.2;\n\t\tconst s = (tone + hiss) * env * 0.6;\n\t\tleft[i] = s;\n\t\tright[i] = s;\n\t}\n\treturn [left, right];\n}\n\nfunction impact(n: number, sr: number, noise: () => number): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst burst = new BandPass();\n\tlet phase = 0;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst t = i / sr;\n\t\tconst freq = 38 + 62 * Math.exp(-t * 14);\n\t\tphase += (2 * Math.PI * freq) / sr;\n\t\tconst sub = Math.sin(phase) * Math.exp(-t * 2.6);\n\t\tconst body =\n\t\t\tburst.process(noise(), 900 * Math.exp(-t * 6) + 120, 0.6, sr) *\n\t\t\tMath.exp(-t * 9) *\n\t\t\t1.6;\n\t\tconst click = i < 96 ? noise() * (1 - i / 96) * 0.5 : 0;\n\t\tconst s = (sub * 1.1 + body + click) * 0.85;\n\t\t// Slight decorrelated tail widens the hit without smearing the transient.\n\t\tconst tail = noise() * Math.exp(-t * 5) * 0.08;\n\t\tleft[i] = s + tail;\n\t\tright[i] = s - tail;\n\t}\n\treturn [left, right];\n}\n\nfunction glitch(n: number, sr: number, noise: () => number): StereoBuffer {\n\tconst left = new Float32Array(n);\n\tconst right = new Float32Array(n);\n\tconst slice = Math.max(1, Math.round(sr * 0.022));\n\tlet held = 0;\n\tlet gate = 1;\n\tlet crush = 1;\n\tfor (let i = 0; i < n; i++) {\n\t\tif (i % slice === 0) {\n\t\t\tgate = noise() > -0.2 ? 1 : 0;\n\t\t\tcrush = 2 + Math.floor((noise() + 1) * 6);\n\t\t}\n\t\tif (i % crush === 0) held = noise() > 0 ? 1 : -1;\n\t\tconst env = 1 - i / n;\n\t\tconst s = held * gate * env * 0.45;\n\t\tleft[i] = s;\n\t\tright[i] = gate ? -s * 0.6 : 0;\n\t}\n\treturn [left, right];\n}\n\n/**\n * Renders one trigger to stereo PCM positioned at `atBar` on the score timeline.\n * `atBar` is where the effect *starts*; a riser meant to land on a cut starts\n * `durationSec / secondsPerBar` bars before it.\n */\nexport function renderSfx(\n\ttrigger: SfxTrigger,\n\tctx: SfxRenderContext,\n): RenderedSfx {\n\tconst durationSec = trigger.durationSec ?? DEFAULT_DURATION_SEC[trigger.type];\n\tconst sr = ctx.sampleRate;\n\tconst n = Math.max(1, Math.round(durationSec * sr));\n\tconst noise = createNoise(ctx.seed + n);\n\n\tlet channels: StereoBuffer;\n\tswitch (trigger.type) {\n\t\tcase \"whoosh\":\n\t\t\tchannels = whoosh(n, sr, noise, false);\n\t\t\tbreak;\n\t\tcase \"riser\":\n\t\t\tchannels = riser(n, sr, noise, false);\n\t\t\tbreak;\n\t\tcase \"downshifter\":\n\t\t\tchannels = riser(n, sr, noise, true);\n\t\t\tbreak;\n\t\tcase \"impact\":\n\t\t\tchannels = impact(n, sr, noise);\n\t\t\tbreak;\n\t\tcase \"glitch\":\n\t\t\tchannels = glitch(n, sr, noise);\n\t\t\tbreak;\n\t}\n\n\tconst gain = trigger.volume ?? 0.8;\n\tfor (const channel of channels) {\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tchannel[i] = Math.tanh((channel[i] ?? 0) * gain);\n\t}\n\treturn {\n\t\tstartSample: Math.max(\n\t\t\t0,\n\t\t\tMath.round(trigger.atBar * ctx.secondsPerBar * sr),\n\t\t),\n\t\tchannels,\n\t};\n}\n\n/** Adds rendered effects into `target` in place, clipping to its length. */\nexport function mixSfxInto(\n\ttarget: StereoBuffer,\n\teffects: readonly RenderedSfx[],\n): void {\n\tfor (const fx of effects) {\n\t\tfor (let c = 0; c < 2; c++) {\n\t\t\tconst dst = target[c];\n\t\t\tconst src = fx.channels[c];\n\t\t\tif (!dst || !src) continue;\n\t\t\tconst limit = Math.min(src.length, dst.length - fx.startSample);\n\t\t\tfor (let i = 0; i < limit; i++) {\n\t\t\t\tconst val = dst[fx.startSample + i];\n\t\t\t\tconst s = src[i];\n\t\t\t\tif (val !== undefined && s !== undefined) {\n\t\t\t\t\tdst[fx.startSample + i] = val + s;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Soft-knee limiter for sums that may exceed full scale (impacts stacked on a\n * loud mix): transparent below the knee, asymptotically bounded by 1.0 above it.\n */\nexport function softLimit(\n\ttarget: StereoBuffer,\n\tknee = 0.7,\n\tceiling = 0.97,\n): void {\n\tconst headroom = ceiling - knee;\n\tfor (const channel of target) {\n\t\tfor (let i = 0; i < channel.length; i++) {\n\t\t\tconst x = channel[i] ?? 0;\n\t\t\tconst a = Math.abs(x);\n\t\t\tif (a > knee)\n\t\t\t\tchannel[i] =\n\t\t\t\t\tMath.sign(x) * (knee + headroom * Math.tanh((a - knee) / headroom));\n\t\t}\n\t}\n}\n","/**\n * @file packages/framefields/src/audio/synth/wav-encoder.ts\n * High-performance 16-bit PCM RIFF/WAVE stereo audio encoder.\n */\n\nexport interface EncodeWavOptions {\n\tsampleRate?: number;\n}\n\n/**\n * Encodes stereo Float32Array PCM channels (-1.0 to +1.0) into a standard 16-bit RIFF/WAVE Buffer.\n */\nexport function encodeStereoWav(\n\tchannels: [Float32Array, Float32Array],\n\toptions: EncodeWavOptions = {},\n): Buffer {\n\tconst sampleRate = options.sampleRate ?? 48000;\n\tconst numChannels = 2;\n\tconst left = channels[0];\n\tconst right = channels[1];\n\tconst numSamples = Math.min(left.length, right.length);\n\n\tconst bytesPerSample = 2; // 16-bit\n\tconst blockAlign = numChannels * bytesPerSample;\n\tconst byteRate = sampleRate * blockAlign;\n\tconst dataSize = numSamples * blockAlign;\n\tconst totalSize = 44 + dataSize;\n\n\tconst buffer = Buffer.alloc(totalSize);\n\n\t// RIFF Header\n\tbuffer.write(\"RIFF\", 0, \"ascii\");\n\tbuffer.writeUInt32LE(36 + dataSize, 4);\n\tbuffer.write(\"WAVE\", 8, \"ascii\");\n\n\t// \"fmt \" chunk\n\tbuffer.write(\"fmt \", 12, \"ascii\");\n\tbuffer.writeUInt32LE(16, 16); // PCM header size\n\tbuffer.writeUInt16LE(1, 20); // AudioFormat 1 = PCM\n\tbuffer.writeUInt16LE(numChannels, 22);\n\tbuffer.writeUInt32LE(sampleRate, 24);\n\tbuffer.writeUInt32LE(byteRate, 28);\n\tbuffer.writeUInt16LE(blockAlign, 32);\n\tbuffer.writeUInt16LE(16, 34); // Bits per sample\n\n\t// \"data\" chunk\n\tbuffer.write(\"data\", 36, \"ascii\");\n\tbuffer.writeUInt32LE(dataSize, 40);\n\n\tlet offset = 44;\n\tfor (let i = 0; i < numSamples; i++) {\n\t\t// Left channel\n\t\tconst sl = Math.max(-1, Math.min(1, left[i] ?? 0));\n\t\tconst intL = sl < 0 ? sl * 0x8000 : sl * 0x7fff;\n\t\tbuffer.writeInt16LE(Math.round(intL), offset);\n\t\toffset += 2;\n\n\t\t// Right channel\n\t\tconst sr = Math.max(-1, Math.min(1, right[i] ?? 0));\n\t\tconst intR = sr < 0 ? sr * 0x8000 : sr * 0x7fff;\n\t\tbuffer.writeInt16LE(Math.round(intR), offset);\n\t\toffset += 2;\n\t}\n\n\treturn buffer;\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { Oi as FrameSignal, o as AudioSignalComputeConfig } from "./index-DGe83M-p.mjs";
2
- import { n as NodeRendererPlugin } from "./index-B0BZMhtw.mjs";
1
+ import { Oi as FrameSignal, o as AudioSignalComputeConfig } from "./index-fymoeGNW.mjs";
2
+ import { n as NodeRendererPlugin } from "./renderer-COXKPofU.mjs";
3
3
 
4
4
  //#region ../../nodes/node-modulate/dist/renderer.d.mts
5
5
  //#region src/renderers/index.d.ts
@@ -34,4 +34,4 @@ declare const AudioSignal: {
34
34
  };
35
35
  //#endregion
36
36
  export { _default as i, AudioSignalOptions as n, ExtractedAudioSignalsBundle as r, AudioSignal as t };
37
- //# sourceMappingURL=audio-BymXfAvH.d.mts.map
37
+ //# sourceMappingURL=audio-C1A4N3Wh.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-BymXfAvH.d.mts","names":["_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../../nodes/node-modulate/dist/renderer.d.mts","../src/signals/audio.ts"],"sourcesContent":["import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;cAGcC,UAAUE,SAASH;AAHiD;;;UCYjE,kBAAA,SAA2B;;EDT9BC,WAAsE,CAAA,EAAA,MAAA;;;UCenE,2BAAA;EANA,OAAA,EAOP,WAPO,CAAmB,MAAA,CAAA;EAMnB,IAAA,EAEV,WAFU,CAAA,MAAA,CAAA;EACP,IAAA,EAEH,WAFG,CAAA,MAAA,CAAA;EACH,MAAA,EAEE,WAFF,CAAA,MAAA,CAAA;EACA,WAAA,EAAA,MAAA;EACE,SAAA,EAAA,MAAA;EAAW,UAAA,EAAA,MAAA;EAaP,WAAA,EAAA,OAuGZ;EArGW,OAAA,EAAA,OAAA;EAED,aAAA,EAAA,OAAA;EACC,UAAA,EAAA,OAAA;EAAR,UAAA,EAAA,OAAA;EAoFO,YAAA,EAAA,OAAA;EACC,SAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;AAAD,cA1FE,WA0FF,EAAA;gCAxFC,8CAED,qBACP,QAAQ;oCAoFD,qBACP,QAAQ"}
1
+ {"version":3,"file":"audio-C1A4N3Wh.d.mts","names":["_framefields_node_sdk_renderer0","_default","NodeRendererPlugin","Readonly","default"],"sources":["../../../nodes/node-modulate/dist/renderer.d.mts","../src/signals/audio.ts"],"sourcesContent":["import * as _framefields_node_sdk_renderer0 from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/index.d.ts\ndeclare const _default: Readonly<_framefields_node_sdk_renderer0.NodeRendererPlugin>;\n//#endregion\nexport { _default as default };\n//# sourceMappingURL=renderer.d.mts.map"],"mappings":";;;;;cAGcC,UAAUE,SAASH;AAHiD;;;UCYjE,kBAAA,SAA2B;;EDT9BC,WAAsE,CAAA,EAAA,MAAA;;;UCenE,2BAAA;EANA,OAAA,EAOP,WAPO,CAAmB,MAAA,CAAA;EAMnB,IAAA,EAEV,WAFU,CAAA,MAAA,CAAA;EACP,IAAA,EAEH,WAFG,CAAA,MAAA,CAAA;EACH,MAAA,EAEE,WAFF,CAAA,MAAA,CAAA;EACA,WAAA,EAAA,MAAA;EACE,SAAA,EAAA,MAAA;EAAW,UAAA,EAAA,MAAA;EAaP,WAAA,EAAA,OAuGZ;EArGW,OAAA,EAAA,OAAA;EAED,aAAA,EAAA,OAAA;EACC,UAAA,EAAA,OAAA;EAAR,UAAA,EAAA,OAAA;EAoFO,YAAA,EAAA,OAAA;EACC,SAAA,CAAA,KAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;AAAD,cA1FE,WA0FF,EAAA;gCAxFC,8CAED,qBACP,QAAQ;oCAoFD,qBACP,QAAQ"}
@@ -1,6 +1,6 @@
1
- import { Tt as frameArraySignal } from "./dist-TrtLGPvc.mjs";
2
- import { A as ensureDevice, St as AudioSignalComputePipeline } from "./dist-hmWTJPik.mjs";
3
- import { n as decodeAudioSource } from "./dist-DMa2BbYs.mjs";
1
+ import { Tt as frameArraySignal } from "./dist-DFeF-ygz.mjs";
2
+ import { A as ensureDevice, wt as AudioSignalComputePipeline } from "./dist-DBWkkSvJ.mjs";
3
+ import { n as decodeAudioSource } from "./dist-DHQVWaV2.mjs";
4
4
 
5
5
  //#region src/signals/audio.ts
6
6
  const AudioSignal = {
@@ -82,4 +82,4 @@ const AudioSignal = {
82
82
 
83
83
  //#endregion
84
84
  export { AudioSignal as t };
85
- //# sourceMappingURL=audio-BzHHpImj.mjs.map
85
+ //# sourceMappingURL=audio-CZwVENqB.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio-BzHHpImj.mjs","names":[],"sources":["../src/signals/audio.ts"],"sourcesContent":["import { decodeAudioSource } from \"@framefields/compositions\";\nimport {\n\ttype FrameSignal,\n\tframeArraySignal,\n\ttype GPUTextureBinding,\n} from \"@framefields/core\";\nimport {\n\ttype AudioSignalComputeConfig,\n\tAudioSignalComputePipeline,\n\tensureDevice,\n} from \"@framefields/webgpu-renderers\";\n\nexport interface AudioSignalOptions extends AudioSignalComputeConfig {\n\tfps?: number;\n\ttargetWidth?: number;\n\tpreviewMode?: \"waveform\" | \"envelope\" | \"beat_markers\" | \"spectrum\";\n}\n\nexport interface ExtractedAudioSignalsBundle {\n\tprimary: FrameSignal<number>;\n\tbeat: FrameSignal<number>;\n\tbass: FrameSignal<number>;\n\tenergy: FrameSignal<number>;\n\tdurationSec: number;\n\tnumFrames: number;\n\tsampleRate: number;\n\ttextureView: unknown;\n\ttexture: unknown;\n\tprimaryBuffer: unknown;\n\tbeatBuffer: unknown;\n\tbassBuffer: unknown;\n\tenergyBuffer: unknown;\n\tseekFrame(frame: number): void;\n}\n\nexport const AudioSignal = {\n\tasync extractFromChannels(\n\t\tchannels: Float32Array[],\n\t\tsampleRate: number,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst device = await ensureDevice();\n\t\tconst fps = options.fps ?? 24;\n\t\tconst targetWidth = options.targetWidth ?? 512;\n\n\t\tconst extracted = await AudioSignalComputePipeline.extractFeatures(\n\t\t\tdevice,\n\t\t\tchannels,\n\t\t\tsampleRate,\n\t\t\tfps,\n\t\t\toptions,\n\t\t\ttargetWidth,\n\t\t);\n\n\t\tconst samples = extracted.channelSamples ?? {\n\t\t\tprimary: new Float32Array(extracted.numFrames),\n\t\t\tbeat: new Float32Array(extracted.numFrames),\n\t\t\tbass: new Float32Array(extracted.numFrames),\n\t\t\tenergy: new Float32Array(extracted.numFrames),\n\t\t};\n\n\t\tconst primaryBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_primary\",\n\t\t\tchannel: \"primary\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.primaryBuffer,\n\t\t\tstats: extracted.stats.primary,\n\t\t};\n\t\tconst beatBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_beat\",\n\t\t\tchannel: \"beat\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.beatBuffer,\n\t\t\tstats: extracted.stats.beat,\n\t\t};\n\t\tconst bassBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_bass\",\n\t\t\tchannel: \"bass\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.bassBuffer,\n\t\t\tstats: extracted.stats.bass,\n\t\t};\n\t\tconst energyBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_energy\",\n\t\t\tchannel: \"energy\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.energyBuffer,\n\t\t\tstats: extracted.stats.energy,\n\t\t};\n\n\t\tconst primary = frameArraySignal(samples.primary, fps, primaryBinding);\n\t\tconst beat = frameArraySignal(samples.beat, fps, beatBinding);\n\t\tconst bass = frameArraySignal(samples.bass, fps, bassBinding);\n\t\tconst energy = frameArraySignal(samples.energy, fps, energyBinding);\n\n\t\treturn {\n\t\t\tprimary,\n\t\t\tbeat,\n\t\t\tbass,\n\t\t\tenergy,\n\t\t\tdurationSec: extracted.durationSec,\n\t\t\tnumFrames: extracted.numFrames,\n\t\t\tsampleRate,\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tprimaryBuffer: extracted.primaryBuffer,\n\t\t\tbeatBuffer: extracted.beatBuffer,\n\t\t\tbassBuffer: extracted.bassBuffer,\n\t\t\tenergyBuffer: extracted.energyBuffer,\n\t\t\tseekFrame(frame: number) {\n\t\t\t\tprimary.seekFrame?.(frame);\n\t\t\t\tbeat.seekFrame?.(frame);\n\t\t\t\tbass.seekFrame?.(frame);\n\t\t\t\tenergy.seekFrame?.(frame);\n\t\t\t},\n\t\t};\n\t},\n\n\tasync extract(\n\t\tsource: string,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst decoded = await decodeAudioSource(source);\n\t\tif (!decoded || decoded.channels.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to decode audio source for feature extraction: ${source}`,\n\t\t\t);\n\t\t}\n\t\treturn AudioSignal.extractFromChannels(\n\t\t\tdecoded.channels,\n\t\t\tdecoded.sampleRate,\n\t\t\toptions,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;AAmCA,MAAa,cAAc;CAC1B,MAAM,oBACL,UACA,YACA,UAA8B,EAAE,EACO;EACvC,MAAM,SAAS,MAAM,cAAc;EACnC,MAAM,MAAM,QAAQ,OAAO;EAC3B,MAAM,cAAc,QAAQ,eAAe;EAE3C,MAAM,YAAY,MAAM,2BAA2B,gBAClD,QACA,UACA,YACA,KACA,SACA,YACA;EAED,MAAM,UAAU,UAAU,kBAAkB;GAC3C,SAAS,IAAI,aAAa,UAAU,UAAU;GAC9C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,QAAQ,IAAI,aAAa,UAAU,UAAU;GAC7C;EAED,MAAM,iBAAoC;GACzC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,gBAAmC;GACxC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EAED,MAAM,UAAU,iBAAiB,QAAQ,SAAS,KAAK,eAAe;EACtE,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,SAAS,iBAAiB,QAAQ,QAAQ,KAAK,cAAc;AAEnE,SAAO;GACN;GACA;GACA;GACA;GACA,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB;GACA,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,eAAe,UAAU;GACzB,YAAY,UAAU;GACtB,YAAY,UAAU;GACtB,cAAc,UAAU;GACxB,UAAU,OAAe;AACxB,YAAQ,YAAY,MAAM;AAC1B,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,MAAM;;GAE1B;;CAGF,MAAM,QACL,QACA,UAA8B,EAAE,EACO;EACvC,MAAM,UAAU,MAAM,kBAAkB,OAAO;AAC/C,MAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,EAC3C,OAAM,IAAI,MACT,yDAAyD,SACzD;AAEF,SAAO,YAAY,oBAClB,QAAQ,UACR,QAAQ,YACR,QACA;;CAEF"}
1
+ {"version":3,"file":"audio-CZwVENqB.mjs","names":[],"sources":["../src/signals/audio.ts"],"sourcesContent":["import { decodeAudioSource } from \"@framefields/compositions\";\nimport {\n\ttype FrameSignal,\n\tframeArraySignal,\n\ttype GPUTextureBinding,\n} from \"@framefields/core\";\nimport {\n\ttype AudioSignalComputeConfig,\n\tAudioSignalComputePipeline,\n\tensureDevice,\n} from \"@framefields/webgpu-renderers\";\n\nexport interface AudioSignalOptions extends AudioSignalComputeConfig {\n\tfps?: number;\n\ttargetWidth?: number;\n\tpreviewMode?: \"waveform\" | \"envelope\" | \"beat_markers\" | \"spectrum\";\n}\n\nexport interface ExtractedAudioSignalsBundle {\n\tprimary: FrameSignal<number>;\n\tbeat: FrameSignal<number>;\n\tbass: FrameSignal<number>;\n\tenergy: FrameSignal<number>;\n\tdurationSec: number;\n\tnumFrames: number;\n\tsampleRate: number;\n\ttextureView: unknown;\n\ttexture: unknown;\n\tprimaryBuffer: unknown;\n\tbeatBuffer: unknown;\n\tbassBuffer: unknown;\n\tenergyBuffer: unknown;\n\tseekFrame(frame: number): void;\n}\n\nexport const AudioSignal = {\n\tasync extractFromChannels(\n\t\tchannels: Float32Array[],\n\t\tsampleRate: number,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst device = await ensureDevice();\n\t\tconst fps = options.fps ?? 24;\n\t\tconst targetWidth = options.targetWidth ?? 512;\n\n\t\tconst extracted = await AudioSignalComputePipeline.extractFeatures(\n\t\t\tdevice,\n\t\t\tchannels,\n\t\t\tsampleRate,\n\t\t\tfps,\n\t\t\toptions,\n\t\t\ttargetWidth,\n\t\t);\n\n\t\tconst samples = extracted.channelSamples ?? {\n\t\t\tprimary: new Float32Array(extracted.numFrames),\n\t\t\tbeat: new Float32Array(extracted.numFrames),\n\t\t\tbass: new Float32Array(extracted.numFrames),\n\t\t\tenergy: new Float32Array(extracted.numFrames),\n\t\t};\n\n\t\tconst primaryBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_primary\",\n\t\t\tchannel: \"primary\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.primaryBuffer,\n\t\t\tstats: extracted.stats.primary,\n\t\t};\n\t\tconst beatBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_beat\",\n\t\t\tchannel: \"beat\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.beatBuffer,\n\t\t\tstats: extracted.stats.beat,\n\t\t};\n\t\tconst bassBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_bass\",\n\t\t\tchannel: \"bass\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.bassBuffer,\n\t\t\tstats: extracted.stats.bass,\n\t\t};\n\t\tconst energyBinding: GPUTextureBinding = {\n\t\t\tnodeId: \"audio_energy\",\n\t\t\tchannel: \"energy\",\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tbuffer: extracted.energyBuffer,\n\t\t\tstats: extracted.stats.energy,\n\t\t};\n\n\t\tconst primary = frameArraySignal(samples.primary, fps, primaryBinding);\n\t\tconst beat = frameArraySignal(samples.beat, fps, beatBinding);\n\t\tconst bass = frameArraySignal(samples.bass, fps, bassBinding);\n\t\tconst energy = frameArraySignal(samples.energy, fps, energyBinding);\n\n\t\treturn {\n\t\t\tprimary,\n\t\t\tbeat,\n\t\t\tbass,\n\t\t\tenergy,\n\t\t\tdurationSec: extracted.durationSec,\n\t\t\tnumFrames: extracted.numFrames,\n\t\t\tsampleRate,\n\t\t\ttextureView: extracted.textureView,\n\t\t\ttexture: extracted.texture,\n\t\t\tprimaryBuffer: extracted.primaryBuffer,\n\t\t\tbeatBuffer: extracted.beatBuffer,\n\t\t\tbassBuffer: extracted.bassBuffer,\n\t\t\tenergyBuffer: extracted.energyBuffer,\n\t\t\tseekFrame(frame: number) {\n\t\t\t\tprimary.seekFrame?.(frame);\n\t\t\t\tbeat.seekFrame?.(frame);\n\t\t\t\tbass.seekFrame?.(frame);\n\t\t\t\tenergy.seekFrame?.(frame);\n\t\t\t},\n\t\t};\n\t},\n\n\tasync extract(\n\t\tsource: string,\n\t\toptions: AudioSignalOptions = {},\n\t): Promise<ExtractedAudioSignalsBundle> {\n\t\tconst decoded = await decodeAudioSource(source);\n\t\tif (!decoded || decoded.channels.length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to decode audio source for feature extraction: ${source}`,\n\t\t\t);\n\t\t}\n\t\treturn AudioSignal.extractFromChannels(\n\t\t\tdecoded.channels,\n\t\t\tdecoded.sampleRate,\n\t\t\toptions,\n\t\t);\n\t},\n};\n"],"mappings":";;;;;AAmCA,MAAa,cAAc;CAC1B,MAAM,oBACL,UACA,YACA,UAA8B,EAAE,EACO;EACvC,MAAM,SAAS,MAAM,cAAc;EACnC,MAAM,MAAM,QAAQ,OAAO;EAC3B,MAAM,cAAc,QAAQ,eAAe;EAE3C,MAAM,YAAY,MAAM,2BAA2B,gBAClD,QACA,UACA,YACA,KACA,SACA,YACA;EAED,MAAM,UAAU,UAAU,kBAAkB;GAC3C,SAAS,IAAI,aAAa,UAAU,UAAU;GAC9C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,MAAM,IAAI,aAAa,UAAU,UAAU;GAC3C,QAAQ,IAAI,aAAa,UAAU,UAAU;GAC7C;EAED,MAAM,iBAAoC;GACzC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,cAAiC;GACtC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EACD,MAAM,gBAAmC;GACxC,QAAQ;GACR,SAAS;GACT,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,OAAO,UAAU,MAAM;GACvB;EAED,MAAM,UAAU,iBAAiB,QAAQ,SAAS,KAAK,eAAe;EACtE,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,OAAO,iBAAiB,QAAQ,MAAM,KAAK,YAAY;EAC7D,MAAM,SAAS,iBAAiB,QAAQ,QAAQ,KAAK,cAAc;AAEnE,SAAO;GACN;GACA;GACA;GACA;GACA,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB;GACA,aAAa,UAAU;GACvB,SAAS,UAAU;GACnB,eAAe,UAAU;GACzB,YAAY,UAAU;GACtB,YAAY,UAAU;GACtB,cAAc,UAAU;GACxB,UAAU,OAAe;AACxB,YAAQ,YAAY,MAAM;AAC1B,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,WAAO,YAAY,MAAM;;GAE1B;;CAGF,MAAM,QACL,QACA,UAA8B,EAAE,EACO;EACvC,MAAM,UAAU,MAAM,kBAAkB,OAAO;AAC/C,MAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,EAC3C,OAAM,IAAI,MACT,yDAAyD,SACzD;AAEF,SAAO,YAAY,oBAClB,QAAQ,UACR,QAAQ,YACR,QACA;;CAEF"}
package/dist/cli.d.mts ADDED
@@ -0,0 +1 @@
1
+ export { };
package/dist/cli.mjs ADDED
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { dirname, join, relative, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { parseArgs } from "node:util";
6
+
7
+ //#region src/cli/add.ts
8
+ /**
9
+ * `framefields add`: copy components' source into a project, the way a
10
+ * shadcn-style registry does. The code becomes the project's own; it
11
+ * imports only `framefields` and `framefields/components` (the toolkit),
12
+ * plus any component it builds on, which is installed alongside it.
13
+ *
14
+ * Where they go is remembered in `framefields.json` at the project root.
15
+ */
16
+ const CONFIG_FILE = "framefields.json";
17
+ /** The project's config, or the default it would get: `src/components` when there is a `src`. */
18
+ function readConfig(cwd) {
19
+ const file = join(cwd, CONFIG_FILE);
20
+ if (existsSync(file)) {
21
+ const config = JSON.parse(readFileSync(file, "utf8"));
22
+ if (typeof config.components !== "string") throw new Error(`${CONFIG_FILE}: "components" must be a directory path`);
23
+ return {
24
+ config,
25
+ saved: true
26
+ };
27
+ }
28
+ return {
29
+ config: { components: existsSync(join(cwd, "src")) ? "src/components" : "components" },
30
+ saved: false
31
+ };
32
+ }
33
+ /** Resolve `names` (and what they import) and write their files. */
34
+ async function add(names, options) {
35
+ const { cwd, registry } = options;
36
+ const index = await registry.index();
37
+ const known = new Set(index.map((e) => e.name));
38
+ for (const n of names) if (!known.has(n)) throw new Error(`Unknown component "${n}". Run \`framefields list\` to see them all.`);
39
+ const order = [];
40
+ const seen = /* @__PURE__ */ new Set();
41
+ const visit = async (name) => {
42
+ if (seen.has(name)) return;
43
+ seen.add(name);
44
+ const item = await registry.item(name);
45
+ for (const d of item.registryDependencies) await visit(d);
46
+ order.push(item);
47
+ };
48
+ for (const n of names) await visit(n);
49
+ const { config, saved } = readConfig(cwd);
50
+ const dir = resolve(cwd, options.dir ?? config.components);
51
+ const report = {
52
+ dir,
53
+ components: order,
54
+ written: [],
55
+ unchanged: [],
56
+ skipped: [],
57
+ configWritten: false
58
+ };
59
+ for (const item of order) for (const file of item.files) {
60
+ const target = join(dir, file.path);
61
+ const shown = relative(cwd, target);
62
+ if (existsSync(target)) {
63
+ if (readFileSync(target, "utf8") === file.content) {
64
+ report.unchanged.push(shown);
65
+ continue;
66
+ }
67
+ if (!options.overwrite) {
68
+ report.skipped.push(shown);
69
+ continue;
70
+ }
71
+ }
72
+ mkdirSync(dirname(target), { recursive: true });
73
+ writeFileSync(target, file.content);
74
+ report.written.push(shown);
75
+ }
76
+ if (!saved) {
77
+ writeFileSync(join(cwd, CONFIG_FILE), `${JSON.stringify({ components: relative(cwd, dir) || "." }, null, " ")}\n`);
78
+ report.configWritten = true;
79
+ }
80
+ return report;
81
+ }
82
+
83
+ //#endregion
84
+ //#region src/cli/registry.ts
85
+ /**
86
+ * Reading a component registry: the one shipped in this package's dist, a
87
+ * local folder, or one served over http(s). A registry is `index.json` (the
88
+ * entries) plus `<name>.json` per component (entry, meta and files).
89
+ */
90
+ /** The registry shipped next to this module in dist (`dist/registry`). */
91
+ function bundledRegistryPath() {
92
+ return fileURLToPath(new URL("./registry/", import.meta.url));
93
+ }
94
+ /** `source`: a folder or an http(s) URL. Default: the bundled registry. */
95
+ function openRegistry(source, cwd = process.cwd()) {
96
+ const from = source ?? process.env.FRAMEFIELDS_REGISTRY ?? bundledRegistryPath();
97
+ if (/^https?:\/\//.test(from)) {
98
+ const base = from.endsWith("/") ? from : `${from}/`;
99
+ const get = async (file) => {
100
+ const res = await fetch(new URL(file, base));
101
+ if (!res.ok) throw new Error(`${new URL(file, base)}: ${res.status} ${res.statusText}`);
102
+ return await res.json();
103
+ };
104
+ return {
105
+ source: base,
106
+ index: () => get("index.json"),
107
+ item: (name) => get(`${name}.json`)
108
+ };
109
+ }
110
+ const dir = resolve(cwd, from);
111
+ const read = (file) => {
112
+ const path$1 = join(dir, file);
113
+ if (!existsSync(path$1)) throw new Error(`No ${file} in registry ${dir}`);
114
+ return JSON.parse(readFileSync(path$1, "utf8"));
115
+ };
116
+ return {
117
+ source: dir,
118
+ index: async () => read("index.json"),
119
+ item: async (name) => read(`${name}.json`)
120
+ };
121
+ }
122
+
123
+ //#endregion
124
+ //#region src/cli.ts
125
+ /**
126
+ * The `framefields` command.
127
+ *
128
+ * npx framefields add <name...> copy components into this project
129
+ * npx framefields list the components you can add
130
+ */
131
+ const HELP = `Usage: framefields <command> [options]
132
+
133
+ Commands:
134
+ add <name...> Copy components' source into this project (and the
135
+ components they build on). The code is yours to edit.
136
+ list List the components you can add.
137
+
138
+ Options for add:
139
+ --all Add every component.
140
+ --dir <path> Components directory (default: from framefields.json,
141
+ else src/components or components). Saved the first time.
142
+ --overwrite Replace files you have changed.
143
+
144
+ Options for both:
145
+ --registry <src> A registry folder or http(s) URL instead of the one
146
+ shipped with this version of framefields.
147
+ -h, --help Show this help.
148
+
149
+ Example:
150
+ npx framefields add mouse-pointer focus-zoom
151
+ `;
152
+ async function main(argv) {
153
+ const { values, positionals } = parseArgs({
154
+ args: argv,
155
+ allowPositionals: true,
156
+ options: {
157
+ all: { type: "boolean" },
158
+ dir: { type: "string" },
159
+ overwrite: { type: "boolean" },
160
+ registry: { type: "string" },
161
+ help: {
162
+ type: "boolean",
163
+ short: "h"
164
+ }
165
+ }
166
+ });
167
+ const [command, ...names] = positionals;
168
+ if (values.help || !command) {
169
+ process.stdout.write(HELP);
170
+ return command || values.help ? 0 : 1;
171
+ }
172
+ const cwd = process.cwd();
173
+ const registry = openRegistry(values.registry, cwd);
174
+ if (command === "list") {
175
+ const index = await registry.index();
176
+ const width = Math.max(...index.map((e) => e.name.length));
177
+ for (const e of index) process.stdout.write(`${e.name.padEnd(width)} ${e.summary}\n`);
178
+ return 0;
179
+ }
180
+ if (command !== "add") {
181
+ process.stderr.write(`Unknown command "${command}".\n\n${HELP}`);
182
+ return 1;
183
+ }
184
+ const wanted = values.all ? (await registry.index()).map((e) => e.name) : names;
185
+ if (wanted.length === 0) {
186
+ process.stderr.write("Name the components to add, e.g. `framefields add mouse-pointer`.\nRun `framefields list` to see them all.\n");
187
+ return 1;
188
+ }
189
+ const report = await add(wanted, {
190
+ cwd,
191
+ registry,
192
+ dir: values.dir,
193
+ overwrite: values.overwrite
194
+ });
195
+ const log = (line) => process.stdout.write(`${line}\n`);
196
+ for (const f of report.written) log(` wrote ${f}`);
197
+ for (const f of report.unchanged) log(` unchanged ${f}`);
198
+ for (const f of report.skipped) log(` skipped ${f} (yours differs; --overwrite replaces it)`);
199
+ if (report.configWritten) log(" wrote framefields.json");
200
+ const extra = report.components.filter((c) => !wanted.includes(c.name));
201
+ if (extra.length > 0) log(`\nWith what they build on: ${extra.map((c) => c.name).join(", ")}.`);
202
+ warnIfMissingFramefields(cwd, log);
203
+ const first = report.components.find((c) => wanted.includes(c.name));
204
+ if (first) log(`\nimport { ${first.title} } from "./${first.name}/index.js"; // from ${relative(cwd, report.dir) || "."}`);
205
+ return 0;
206
+ }
207
+ /** Installed components import `framefields`; say so if the project lacks it. */
208
+ function warnIfMissingFramefields(cwd, log) {
209
+ try {
210
+ const pkg = JSON.parse(readFileSync(`${cwd}/package.json`, "utf8"));
211
+ if (!pkg.dependencies?.framefields && !pkg.devDependencies?.framefields) log("\nThese components import `framefields`: add it with `npm i framefields`.");
212
+ } catch {}
213
+ }
214
+ main(process.argv.slice(2)).then((code) => process.exit(code), (error) => {
215
+ process.stderr.write(`framefields: ${error instanceof Error ? error.message : String(error)}\n`);
216
+ process.exit(1);
217
+ });
218
+
219
+ //#endregion
220
+ export { };
221
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.mjs","names":["path"],"sources":["../src/cli/add.ts","../src/cli/registry.ts","../src/cli.ts"],"sourcesContent":["/**\n * `framefields add`: copy components' source into a project, the way a\n * shadcn-style registry does. The code becomes the project's own; it\n * imports only `framefields` and `framefields/components` (the toolkit),\n * plus any component it builds on, which is installed alongside it.\n *\n * Where they go is remembered in `framefields.json` at the project root.\n */\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport type { Registry, RegistryItem } from \"./registry.js\";\n\nexport const CONFIG_FILE = \"framefields.json\";\n\nexport interface ProjectConfig {\n\t/** Components directory, relative to the project root. */\n\tcomponents: string;\n}\n\n/** The project's config, or the default it would get: `src/components` when there is a `src`. */\nexport function readConfig(cwd: string): {\n\tconfig: ProjectConfig;\n\tsaved: boolean;\n} {\n\tconst file = join(cwd, CONFIG_FILE);\n\tif (existsSync(file)) {\n\t\tconst config = JSON.parse(\n\t\t\treadFileSync(file, \"utf8\"),\n\t\t) as Partial<ProjectConfig>;\n\t\tif (typeof config.components !== \"string\")\n\t\t\tthrow new Error(`${CONFIG_FILE}: \"components\" must be a directory path`);\n\t\treturn { config: config as ProjectConfig, saved: true };\n\t}\n\tconst components = existsSync(join(cwd, \"src\"))\n\t\t? \"src/components\"\n\t\t: \"components\";\n\treturn { config: { components }, saved: false };\n}\n\nexport interface AddOptions {\n\tcwd: string;\n\tregistry: Registry;\n\t/** Components directory; saved to `framefields.json` if there is none yet. */\n\tdir?: string;\n\t/** Replace files that differ from the registry's. */\n\toverwrite?: boolean;\n}\n\nexport interface AddReport {\n\tdir: string;\n\t/** Components in install order (dependencies first). */\n\tcomponents: RegistryItem[];\n\twritten: string[];\n\tunchanged: string[];\n\t/** Files left alone because they differ and `overwrite` is off. */\n\tskipped: string[];\n\tconfigWritten: boolean;\n}\n\n/** Resolve `names` (and what they import) and write their files. */\nexport async function add(\n\tnames: string[],\n\toptions: AddOptions,\n): Promise<AddReport> {\n\tconst { cwd, registry } = options;\n\tconst index = await registry.index();\n\tconst known = new Set(index.map((e) => e.name));\n\tfor (const n of names)\n\t\tif (!known.has(n))\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown component \"${n}\". Run \\`framefields list\\` to see them all.`,\n\t\t\t);\n\n\t// Depth-first, dependencies before dependants.\n\tconst order: RegistryItem[] = [];\n\tconst seen = new Set<string>();\n\tconst visit = async (name: string) => {\n\t\tif (seen.has(name)) return;\n\t\tseen.add(name);\n\t\tconst item = await registry.item(name);\n\t\tfor (const d of item.registryDependencies) await visit(d);\n\t\torder.push(item);\n\t};\n\tfor (const n of names) await visit(n);\n\n\tconst { config, saved } = readConfig(cwd);\n\tconst rel = options.dir ?? config.components;\n\tconst dir = resolve(cwd, rel);\n\tconst report: AddReport = {\n\t\tdir,\n\t\tcomponents: order,\n\t\twritten: [],\n\t\tunchanged: [],\n\t\tskipped: [],\n\t\tconfigWritten: false,\n\t};\n\tfor (const item of order) {\n\t\tfor (const file of item.files) {\n\t\t\tconst target = join(dir, file.path);\n\t\t\tconst shown = relative(cwd, target);\n\t\t\tif (existsSync(target)) {\n\t\t\t\tif (readFileSync(target, \"utf8\") === file.content) {\n\t\t\t\t\treport.unchanged.push(shown);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!options.overwrite) {\n\t\t\t\t\treport.skipped.push(shown);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmkdirSync(dirname(target), { recursive: true });\n\t\t\twriteFileSync(target, file.content);\n\t\t\treport.written.push(shown);\n\t\t}\n\t}\n\tif (!saved) {\n\t\twriteFileSync(\n\t\t\tjoin(cwd, CONFIG_FILE),\n\t\t\t`${JSON.stringify({ components: relative(cwd, dir) || \".\" }, null, \"\\t\")}\\n`,\n\t\t);\n\t\treport.configWritten = true;\n\t}\n\treturn report;\n}\n","/**\n * Reading a component registry: the one shipped in this package's dist, a\n * local folder, or one served over http(s). A registry is `index.json` (the\n * entries) plus `<name>.json` per component (entry, meta and files).\n */\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport interface RegistryEntry {\n\t/** What `framefields add` takes: `logo-reveal`. */\n\tname: string;\n\t/** The factory the component exports: `LogoReveal`. */\n\ttitle: string;\n\tsummary: string;\n\ttags: readonly string[];\n\texample: string;\n\t/** Other components it imports, installed with it. */\n\tregistryDependencies: string[];\n}\n\nexport interface RegistryItem extends RegistryEntry {\n\tparts: readonly string[];\n\tcues: readonly string[];\n\t/** Paths relative to the components directory. */\n\tfiles: Array<{ path: string; content: string }>;\n}\n\nexport interface Registry {\n\t/** Where it was read from, for messages. */\n\tsource: string;\n\tindex(): Promise<RegistryEntry[]>;\n\titem(name: string): Promise<RegistryItem>;\n}\n\n/** The registry shipped next to this module in dist (`dist/registry`). */\nexport function bundledRegistryPath(): string {\n\treturn fileURLToPath(new URL(\"./registry/\", import.meta.url));\n}\n\n/** `source`: a folder or an http(s) URL. Default: the bundled registry. */\nexport function openRegistry(source?: string, cwd = process.cwd()): Registry {\n\tconst from =\n\t\tsource ?? process.env.FRAMEFIELDS_REGISTRY ?? bundledRegistryPath();\n\tif (/^https?:\\/\\//.test(from)) {\n\t\tconst base = from.endsWith(\"/\") ? from : `${from}/`;\n\t\tconst get = async <T>(file: string): Promise<T> => {\n\t\t\tconst res = await fetch(new URL(file, base));\n\t\t\tif (!res.ok)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${new URL(file, base)}: ${res.status} ${res.statusText}`,\n\t\t\t\t);\n\t\t\treturn (await res.json()) as T;\n\t\t};\n\t\treturn {\n\t\t\tsource: base,\n\t\t\tindex: () => get(\"index.json\"),\n\t\t\titem: (name) => get(`${name}.json`),\n\t\t};\n\t}\n\tconst dir = resolve(cwd, from);\n\tconst read = <T>(file: string): T => {\n\t\tconst path = join(dir, file);\n\t\tif (!existsSync(path)) throw new Error(`No ${file} in registry ${dir}`);\n\t\treturn JSON.parse(readFileSync(path, \"utf8\")) as T;\n\t};\n\treturn {\n\t\tsource: dir,\n\t\tindex: async () => read(\"index.json\"),\n\t\titem: async (name) => read(`${name}.json`),\n\t};\n}\n","#!/usr/bin/env node\n/**\n * The `framefields` command.\n *\n * npx framefields add <name...> copy components into this project\n * npx framefields list the components you can add\n */\nimport { readFileSync } from \"node:fs\";\nimport { relative } from \"node:path\";\nimport { parseArgs } from \"node:util\";\nimport { add } from \"./cli/add.js\";\nimport { openRegistry } from \"./cli/registry.js\";\n\nconst HELP = `Usage: framefields <command> [options]\n\nCommands:\n add <name...> Copy components' source into this project (and the\n components they build on). The code is yours to edit.\n list List the components you can add.\n\nOptions for add:\n --all Add every component.\n --dir <path> Components directory (default: from framefields.json,\n else src/components or components). Saved the first time.\n --overwrite Replace files you have changed.\n\nOptions for both:\n --registry <src> A registry folder or http(s) URL instead of the one\n shipped with this version of framefields.\n -h, --help Show this help.\n\nExample:\n npx framefields add mouse-pointer focus-zoom\n`;\n\nasync function main(argv: string[]): Promise<number> {\n\tconst { values, positionals } = parseArgs({\n\t\targs: argv,\n\t\tallowPositionals: true,\n\t\toptions: {\n\t\t\tall: { type: \"boolean\" },\n\t\t\tdir: { type: \"string\" },\n\t\t\toverwrite: { type: \"boolean\" },\n\t\t\tregistry: { type: \"string\" },\n\t\t\thelp: { type: \"boolean\", short: \"h\" },\n\t\t},\n\t});\n\tconst [command, ...names] = positionals;\n\tif (values.help || !command) {\n\t\tprocess.stdout.write(HELP);\n\t\treturn command || values.help ? 0 : 1;\n\t}\n\tconst cwd = process.cwd();\n\tconst registry = openRegistry(values.registry, cwd);\n\n\tif (command === \"list\") {\n\t\tconst index = await registry.index();\n\t\tconst width = Math.max(...index.map((e) => e.name.length));\n\t\tfor (const e of index)\n\t\t\tprocess.stdout.write(`${e.name.padEnd(width)} ${e.summary}\\n`);\n\t\treturn 0;\n\t}\n\tif (command !== \"add\") {\n\t\tprocess.stderr.write(`Unknown command \"${command}\".\\n\\n${HELP}`);\n\t\treturn 1;\n\t}\n\n\tconst wanted = values.all\n\t\t? (await registry.index()).map((e) => e.name)\n\t\t: names;\n\tif (wanted.length === 0) {\n\t\tprocess.stderr.write(\n\t\t\t\"Name the components to add, e.g. `framefields add mouse-pointer`.\\nRun `framefields list` to see them all.\\n\",\n\t\t);\n\t\treturn 1;\n\t}\n\tconst report = await add(wanted, {\n\t\tcwd,\n\t\tregistry,\n\t\tdir: values.dir,\n\t\toverwrite: values.overwrite,\n\t});\n\tconst log = (line: string) => process.stdout.write(`${line}\\n`);\n\tfor (const f of report.written) log(` wrote ${f}`);\n\tfor (const f of report.unchanged) log(` unchanged ${f}`);\n\tfor (const f of report.skipped)\n\t\tlog(` skipped ${f} (yours differs; --overwrite replaces it)`);\n\tif (report.configWritten) log(\" wrote framefields.json\");\n\tconst extra = report.components.filter((c) => !wanted.includes(c.name));\n\tif (extra.length > 0)\n\t\tlog(`\\nWith what they build on: ${extra.map((c) => c.name).join(\", \")}.`);\n\twarnIfMissingFramefields(cwd, log);\n\tconst first = report.components.find((c) => wanted.includes(c.name));\n\tif (first)\n\t\tlog(\n\t\t\t`\\nimport { ${first.title} } from \"./${first.name}/index.js\"; // from ${relative(cwd, report.dir) || \".\"}`,\n\t\t);\n\treturn 0;\n}\n\n/** Installed components import `framefields`; say so if the project lacks it. */\nfunction warnIfMissingFramefields(cwd: string, log: (s: string) => void) {\n\ttry {\n\t\tconst pkg = JSON.parse(readFileSync(`${cwd}/package.json`, \"utf8\")) as {\n\t\t\tdependencies?: Record<string, string>;\n\t\t\tdevDependencies?: Record<string, string>;\n\t\t};\n\t\tif (!pkg.dependencies?.framefields && !pkg.devDependencies?.framefields)\n\t\t\tlog(\n\t\t\t\t\"\\nThese components import `framefields`: add it with `npm i framefields`.\",\n\t\t\t);\n\t} catch {\n\t\t// No package.json: nothing to check.\n\t}\n}\n\nmain(process.argv.slice(2)).then(\n\t(code) => process.exit(code),\n\t(error: unknown) => {\n\t\tprocess.stderr.write(\n\t\t\t`framefields: ${error instanceof Error ? error.message : String(error)}\\n`,\n\t\t);\n\t\tprocess.exit(1);\n\t},\n);\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import "../chunk-D7gtBK74.mjs";
2
+ import "../index-fymoeGNW.mjs";
3
+ import "../index-DNKM3to5.mjs";
4
+ import "../renderer-COXKPofU.mjs";
5
+ import "../renderer-Dx28wTi1.mjs";
6
+ import { $i as themes, $n as Cue, $r as bandEdges, Ai as lineShift, Ar as ResolvedMotion, Bi as scaleFrames, Bn as ArcPath, Br as ThemeName, Ci as frameSpan, Cr as MotionPresetName, Di as holdFirstKeys, Dr as PropsOf, Ei as hashString, Er as Placement, Fi as rendererChars, Fn as targetSchema, Fr as TargetContext, Gi as springSettleFrames, Gn as BakedKey, Gr as WordRange, Hi as smoothRelease, Hn as ArrowGeometry, Hr as UNIT_INDEX, Ii as resampleBands, In as AnalyzeOptions, Ir as TargetNode, Ji as staggerRanks, Jn as BuildResult, Jr as arcPath, Ki as squigglePath, Kn as BaseProps, Kr as analyzeChannels, Li as resolveMotion, Ln as Anchor, Lr as TextLayout, Mi as pulseKeys, Mr as Rng, Ni as quantize, Nr as StaggerOrder, Oi as lerp2, Or as PulseOptions, Pi as rangeRects, Pr as Target, Qi as themeFrames, Qn as ComponentMeta, Qr as bakeSamples, Ri as resolveTarget, Rn as Animatable, Rr as Theme, Si as findRange, Sr as MotionPreset, Ti as hashRng, Tr as ParticleOptions, Ui as springAt, Un as AudioLevels, Ur as UnitSchedule, Vi as scheduleExpression, Vn as ArrowCurve, Vr as TrackedObjectLike, Wi as springKeys, Wn as BakeOptions, Wr as Vec2, Xi as targetPoint, Xn as ComponentDefinition, Xr as audioLevelsSchema, Yi as stepExpression, Yn as ComponentDefaults, Yr as arrowPaths, Zi as textLayout, Zn as ComponentExtras, Zr as bakeFunction, _i as ellipsePath, _r as MeasureFn, aa as windowExpression, ai as boxPath, ar as FrameContextLike, bi as evaluateGlyphExpression, br as Metrics, ca as wordRanges, ci as constantExpression, cr as GlyphAnimator, di as defineComponent, dr as GlyphUnit, ea as toFrames, ei as basePropsSchema, er as Cues, fi as defineMeta, fr as GrainOptions, gi as ease$1, gr as MOTION_PRESETS, hi as drawOnKeys, hr as LayerStyleConfig, i as analyzeAudio, ia as typingFrames, ii as boundsOf, ir as ExtrudedTextOptions, ji as offsetCues, jr as ResolvedTarget, ki as linePath, kr as Rect, li as contrastRatio, lr as GlyphBox, mi as dist, mr as Host, n as bindComponent, na as toSeconds, ni as bind, nr as CutoutOptions, oa as within, oi as catmullRom, or as FrameValue, pi as defineTheme, pr as HandOptions, qi as staggerOffsets, qn as BuildContext, qr as anchorPoint, r as z, ra as transformPathData, ri as boilKeys, rr as EaseFn, sa as wobblePoints, si as chain, sr as FrameWindow, t as ComponentNode, ta as toPathData, ti as beats, tr as CuesOf, ui as cover, ur as GlyphProps, vi as enterAnimation, vr as MeasureOptions, wi as glyphAnimator, wr as MotionSize, xi as exitAnimation, xr as MotionOptions, yi as evaluateEase, yr as MediaOptions, zi as rng, zn as AnimatableMethods, zr as ThemeInput } from "../index-DKssQ_wn.mjs";
7
+ import "../index-BpdVOlsV.mjs";
8
+ import "../audio-C1A4N3Wh.mjs";
9
+ import "../index-D6-lH1Mx.mjs";
10
+ import "../index-B-KVpJMb.mjs";
11
+ import "../index-C2f4Hm-p.mjs";
12
+ export { AnalyzeOptions, Anchor, Animatable, AnimatableMethods, ArcPath, ArrowCurve, ArrowGeometry, AudioLevels, BakeOptions, BakedKey, BaseProps, BuildContext, BuildResult, ComponentDefaults, ComponentDefinition, ComponentExtras, ComponentMeta, ComponentNode, Cue, Cues, CuesOf, CutoutOptions, EaseFn, ExtrudedTextOptions, FrameContextLike, FrameValue, FrameWindow, GlyphAnimator, GlyphBox, GlyphProps, GlyphUnit, GrainOptions, HandOptions, Host, LayerStyleConfig, MOTION_PRESETS, MeasureFn, MeasureOptions, MediaOptions, Metrics, MotionOptions, MotionPreset, MotionPresetName, MotionSize, ParticleOptions, Placement, PropsOf, PulseOptions, Rect, ResolvedMotion, ResolvedTarget, Rng, StaggerOrder, Target, TargetContext, TargetNode, TextLayout, Theme, ThemeInput, ThemeName, TrackedObjectLike, UNIT_INDEX, UnitSchedule, Vec2, WordRange, analyzeAudio, analyzeChannels, anchorPoint, arcPath, arrowPaths, audioLevelsSchema, bakeFunction, bakeSamples, bandEdges, basePropsSchema, beats, bind, bindComponent, boilKeys, boundsOf, boxPath, catmullRom, chain, constantExpression, contrastRatio, cover, defineComponent, defineMeta, defineTheme, dist, drawOnKeys, ease$1 as ease, ellipsePath, enterAnimation, evaluateEase, evaluateGlyphExpression, exitAnimation, findRange, frameSpan, glyphAnimator, hashRng, hashString, holdFirstKeys, lerp2, linePath, lineShift, offsetCues, pulseKeys, quantize, rangeRects, rendererChars, resampleBands, resolveMotion, resolveTarget, rng, scaleFrames, scheduleExpression, smoothRelease, springAt, springKeys, springSettleFrames, squigglePath, staggerOffsets, staggerRanks, stepExpression, targetPoint, targetSchema, textLayout, themeFrames, themes, toFrames, toPathData, toSeconds, transformPathData, typingFrames, windowExpression, within, wobblePoints, wordRanges, z };
@@ -0,0 +1,49 @@
1
+ import "../chunk-D7gtBK74.mjs";
2
+ import { $ as offsetCues, A as constantExpression, At as wobblePoints, B as enterAnimation, C as beats, Ct as toFrames, D as boxPath, Dt as typingFrames, E as boundsOf, Et as transformPathData, F as defineTheme, G as frameSpan, H as evaluateGlyphExpression, I as dist, J as hashString, K as glyphAnimator, L as drawOnKeys, M as cover, N as defineComponent, O as catmullRom, Ot as windowExpression, P as defineMeta, Q as lineShift, R as ease, S as basePropsSchema, St as themes, T as boilKeys, Tt as toSeconds, U as exitAnimation, V as evaluateEase, W as findRange, X as lerp2, Y as holdFirstKeys, Z as linePath, _ as arrowPaths, _t as stepExpression, at as resolveMotion, b as bakeSamples, bt as textLayout, ct as scaleFrames, d as analyzeAudio, dt as springAt, et as pulseKeys, f as MOTION_PRESETS, ft as springKeys, g as arcPath, gt as staggerRanks, h as anchorPoint, ht as staggerOffsets, it as resampleBands, j as contrastRatio, jt as wordRanges, k as chain, kt as within, l as bindComponent, lt as scheduleExpression, m as analyzeChannels, mt as squigglePath, nt as rangeRects, ot as resolveTarget, p as UNIT_INDEX, pt as springSettleFrames, q as hashRng, rt as rendererChars, st as rng, tt as quantize, u as z, ut as smoothRelease, v as audioLevelsSchema, vt as targetPoint, w as bind, wt as toPathData, x as bandEdges, xt as themeFrames, y as bakeFunction, yt as targetSchema, z as ellipsePath } from "../src-Ds9IAk5S.mjs";
3
+ import "../dist-DBWkkSvJ.mjs";
4
+ import "../renderers-CP8CFWDs-DiX2Y4Qp.mjs";
5
+ import "../signals-Cf9mfNGE.mjs";
6
+ import "../renderer-PLoGrFGz.mjs";
7
+ import "../renderer-nLPfvY3-.mjs";
8
+ import "../renderer-Bo_d7h86.mjs";
9
+ import "../renderer-1VKN5j2C.mjs";
10
+ import "../renderer-BYJS2lhn.mjs";
11
+ import "../renderer-Bw5YP2Db.mjs";
12
+ import "../renderer-D2ru2Afi.mjs";
13
+ import "../renderer-DP41Fokp.mjs";
14
+ import "../renderer-B7fX0C62.mjs";
15
+ import "../renderer-CLO8QHWE.mjs";
16
+ import "../renderer-CNs1vBUy.mjs";
17
+ import "../renderer-B31zMDE8.mjs";
18
+ import "../renderer-2bipMLqz.mjs";
19
+ import "../renderer-BhhweLr_.mjs";
20
+ import "../renderer-VxVi_0c7.mjs";
21
+ import "../renderer-BfrzKmRh.mjs";
22
+ import "../renderer-gjT5v76-.mjs";
23
+ import "../renderer-vwoyR8pW.mjs";
24
+ import "../renderer-VdTs-dqH.mjs";
25
+ import "../renderer-BmoQJUJO.mjs";
26
+ import "../renderer-l_U6kA8K.mjs";
27
+ import "../renderer-Bmj7AyJP.mjs";
28
+ import "../renderer-DWaqF7-6.mjs";
29
+ import "../renderer-B4blg067.mjs";
30
+ import "../renderer-Cj1giMd0.mjs";
31
+ import "../renderer-DuQMzR3v.mjs";
32
+ import "../renderer-kP5Y282J.mjs";
33
+ import "../renderer-CJoa4H2G.mjs";
34
+ import "../renderer-BJwOM1Dq.mjs";
35
+ import "../renderer-DqO9gBAi.mjs";
36
+ import "../renderer-BAkPq8qo.mjs";
37
+ import "../renderer-BWa3CLK7.mjs";
38
+ import "../renderer-B8LXXvHi.mjs";
39
+ import "../renderer-G3px5ODP.mjs";
40
+ import "../renderer-D0X7Eh-T.mjs";
41
+ import "../renderer-DyMEAZIm.mjs";
42
+ import "../renderer-DHqicGgT.mjs";
43
+ import "../renderer-B5YYBBDq.mjs";
44
+ import "../renderer-D6p8b6ql.mjs";
45
+ import "../renderer-fH9SCJC2.mjs";
46
+ import "../renderer-BGNdwdCR.mjs";
47
+ import "../renderer-ZjSP5jw6.mjs";
48
+
49
+ export { MOTION_PRESETS, UNIT_INDEX, analyzeAudio, analyzeChannels, anchorPoint, arcPath, arrowPaths, audioLevelsSchema, bakeFunction, bakeSamples, bandEdges, basePropsSchema, beats, bind, bindComponent, boilKeys, boundsOf, boxPath, catmullRom, chain, constantExpression, contrastRatio, cover, defineComponent, defineMeta, defineTheme, dist, drawOnKeys, ease, ellipsePath, enterAnimation, evaluateEase, evaluateGlyphExpression, exitAnimation, findRange, frameSpan, glyphAnimator, hashRng, hashString, holdFirstKeys, lerp2, linePath, lineShift, offsetCues, pulseKeys, quantize, rangeRects, rendererChars, resampleBands, resolveMotion, resolveTarget, rng, scaleFrames, scheduleExpression, smoothRelease, springAt, springKeys, springSettleFrames, squigglePath, staggerOffsets, staggerRanks, stepExpression, targetPoint, targetSchema, textLayout, themeFrames, themes, toFrames, toPathData, toSeconds, transformPathData, typingFrames, windowExpression, within, wobblePoints, wordRanges, z };
@@ -1,4 +1,4 @@
1
- import { C as FileDataSchema, J as SingleOutputGenericSchema, ct as VirtualMediaDataSchema, ht as createOutputItemSchema } from "./dist-TrtLGPvc.mjs";
1
+ import { C as FileDataSchema, J as SingleOutputGenericSchema, ct as VirtualMediaDataSchema, ht as createOutputItemSchema } from "./dist-DFeF-ygz.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region ../node-sdk/dist/index.mjs
@@ -99,4 +99,4 @@ const OperationInputsSchema = z.record(z.string(), z.object({
99
99
 
100
100
  //#endregion
101
101
  export { configBuilder as a, VideoResultSchema as i, ImageResultSchema as n, SignalResultSchema as r, ColorSchema as t };
102
- //# sourceMappingURL=dist-Bo2_zeCn.mjs.map
102
+ //# sourceMappingURL=dist-CQZ5_60A.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dist-Bo2_zeCn.mjs","names":["ConfigBuilder"],"sources":["../../node-sdk/dist/index.mjs"],"sourcesContent":["import { WebGPURegistry, audioRegistry, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry } from \"./renderer.mjs\";\nimport { FileDataSchema, MultiOutputGenericSchema, SingleOutputGenericSchema, VirtualMediaDataSchema, createOutputItemSchema } from \"@framefields/core\";\nimport { z } from \"zod\";\n\n//#region shared/config-builder.ts\nvar ConfigBuilder = class ConfigBuilder {\n\tconstructor(shape = {}, options = { strict: true }) {\n\t\tthis.shape = shape;\n\t\tthis.options = options;\n\t}\n\tfield(key, schema, options) {\n\t\tconst withMeta = options ? schema.meta({ ...options }) : schema;\n\t\treturn new ConfigBuilder({\n\t\t\t...this.shape,\n\t\t\t[key]: withMeta\n\t\t}, this.options);\n\t}\n\tbuild() {\n\t\tconst base = z.object(this.shape);\n\t\treturn { schema: this.options.strict !== false ? base.strict() : base };\n\t}\n};\nfunction configBuilder(options = { strict: true }) {\n\treturn new ConfigBuilder({}, options);\n}\n\n//#endregion\n//#region shared/schemas.ts\nconst COMPOSITE_OPERATIONS = [\n\t\"source-over\",\n\t\"source-in\",\n\t\"source-out\",\n\t\"source-atop\",\n\t\"destination-over\",\n\t\"destination-in\",\n\t\"destination-out\",\n\t\"destination-atop\",\n\t\"lighter\",\n\t\"copy\",\n\t\"xor\",\n\t\"multiply\",\n\t\"screen\",\n\t\"overlay\",\n\t\"darken\",\n\t\"lighten\",\n\t\"color-dodge\",\n\t\"color-burn\",\n\t\"hard-light\",\n\t\"soft-light\",\n\t\"difference\",\n\t\"exclusion\",\n\t\"hue\",\n\t\"saturation\",\n\t\"color\",\n\t\"luminosity\"\n];\nconst GlobalCompositeOperation = z.enum(COMPOSITE_OPERATIONS);\nconst ColorSchema = z.string().optional();\nconst PercentageSchema = z.number().min(0).max(100);\nconst DimensionSchema = z.number().min(0).optional();\nconst AnimationSchema = z.object({ animations: z.array(z.object({\n\tid: z.string(),\n\ttype: z.enum([\n\t\t\"fade-in\",\n\t\t\"fade-out\",\n\t\t\"slide-in-left\",\n\t\t\"slide-in-right\",\n\t\t\"slide-in-top\",\n\t\t\"slide-in-bottom\",\n\t\t\"zoom-in\",\n\t\t\"zoom-out\",\n\t\t\"rotate-cw\",\n\t\t\"rotate-ccw\",\n\t\t\"bounce\",\n\t\t\"shake\"\n\t]),\n\tvalue: z.number()\n})).optional() });\nconst StrokeSchema = z.object({\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional().default(\"inside\"),\n\tstrokeRadius: z.number().min(0).optional()\n});\nconst ImageResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Image\"), FileDataSchema));\nconst VideoResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Video\"), VirtualMediaDataSchema));\nconst AudioResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Audio\"), VirtualMediaDataSchema));\nconst TextResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Text\"), z.string()));\nconst NumberResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Number\"), z.number()));\nconst SignalResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Signal\"), z.unknown()));\n/** The `inputs` map an operation carries: one entry per connected handle. */\nconst OperationInputsSchema = z.record(z.string(), z.object({\n\tconnectionValid: z.boolean(),\n\toutputItem: z.object({\n\t\ttype: z.string(),\n\t\tdata: z.unknown()\n\t}).nullable().optional()\n}));\n\n//#endregion\nexport { AnimationSchema, AudioResultSchema, COMPOSITE_OPERATIONS, ColorSchema, ConfigBuilder, DimensionSchema, FileDataSchema, GlobalCompositeOperation, ImageResultSchema, MultiOutputGenericSchema, NumberResultSchema, OperationInputsSchema, PercentageSchema, SignalResultSchema, SingleOutputGenericSchema, StrokeSchema, TextResultSchema, VideoResultSchema, VirtualMediaDataSchema, WebGPURegistry, audioRegistry, configBuilder, createOutputItemSchema, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=index.mjs.map"],"mappings":";;;;AAKA,IAAI,gBAAgB,MAAMA,gBAAc;CACvC,YAAY,QAAQ,EAAE,EAAE,UAAU,EAAE,QAAQ,MAAM,EAAE;AACnD,OAAK,QAAQ;AACb,OAAK,UAAU;;CAEhB,MAAM,KAAK,QAAQ,SAAS;EAC3B,MAAM,WAAW,UAAU,OAAO,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG;AACzD,SAAO,IAAIA,gBAAc;GACxB,GAAG,KAAK;IACP,MAAM;GACP,EAAE,KAAK,QAAQ;;CAEjB,QAAQ;EACP,MAAM,OAAO,EAAE,OAAO,KAAK,MAAM;AACjC,SAAO,EAAE,QAAQ,KAAK,QAAQ,WAAW,QAAQ,KAAK,QAAQ,GAAG,MAAM;;;AAGzE,SAAS,cAAc,UAAU,EAAE,QAAQ,MAAM,EAAE;AAClD,QAAO,IAAI,cAAc,EAAE,EAAE,QAAQ;;AAKtC,MAAM,uBAAuB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,2BAA2B,EAAE,KAAK,qBAAqB;AAC7D,MAAM,cAAc,EAAE,QAAQ,CAAC,UAAU;AACzC,MAAM,mBAAmB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;AACnD,MAAM,kBAAkB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;AACpD,MAAM,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO;CAC/D,IAAI,EAAE,QAAQ;CACd,MAAM,EAAE,KAAK;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;CACF,OAAO,EAAE,QAAQ;CACjB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACjB,MAAM,eAAe,EAAE,OAAO;CAC7B,QAAQ;CACR,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACzC,aAAa,EAAE,KAAK;EACnB;EACA;EACA;EACA,CAAC,CAAC,UAAU,CAAC,QAAQ,SAAS;CAC/B,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CAC1C,CAAC;AACF,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,eAAe,CAAC;AAC/G,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,mBAAmB,0BAA0B,uBAAuB,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzG,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7G,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;;AAE9G,MAAM,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO;CAC3D,iBAAiB,EAAE,SAAS;CAC5B,YAAY,EAAE,OAAO;EACpB,MAAM,EAAE,QAAQ;EAChB,MAAM,EAAE,SAAS;EACjB,CAAC,CAAC,UAAU,CAAC,UAAU;CACxB,CAAC,CAAC"}
1
+ {"version":3,"file":"dist-CQZ5_60A.mjs","names":["ConfigBuilder"],"sources":["../../node-sdk/dist/index.mjs"],"sourcesContent":["import { WebGPURegistry, audioRegistry, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry } from \"./renderer.mjs\";\nimport { FileDataSchema, MultiOutputGenericSchema, SingleOutputGenericSchema, VirtualMediaDataSchema, createOutputItemSchema } from \"@framefields/core\";\nimport { z } from \"zod\";\n\n//#region shared/config-builder.ts\nvar ConfigBuilder = class ConfigBuilder {\n\tconstructor(shape = {}, options = { strict: true }) {\n\t\tthis.shape = shape;\n\t\tthis.options = options;\n\t}\n\tfield(key, schema, options) {\n\t\tconst withMeta = options ? schema.meta({ ...options }) : schema;\n\t\treturn new ConfigBuilder({\n\t\t\t...this.shape,\n\t\t\t[key]: withMeta\n\t\t}, this.options);\n\t}\n\tbuild() {\n\t\tconst base = z.object(this.shape);\n\t\treturn { schema: this.options.strict !== false ? base.strict() : base };\n\t}\n};\nfunction configBuilder(options = { strict: true }) {\n\treturn new ConfigBuilder({}, options);\n}\n\n//#endregion\n//#region shared/schemas.ts\nconst COMPOSITE_OPERATIONS = [\n\t\"source-over\",\n\t\"source-in\",\n\t\"source-out\",\n\t\"source-atop\",\n\t\"destination-over\",\n\t\"destination-in\",\n\t\"destination-out\",\n\t\"destination-atop\",\n\t\"lighter\",\n\t\"copy\",\n\t\"xor\",\n\t\"multiply\",\n\t\"screen\",\n\t\"overlay\",\n\t\"darken\",\n\t\"lighten\",\n\t\"color-dodge\",\n\t\"color-burn\",\n\t\"hard-light\",\n\t\"soft-light\",\n\t\"difference\",\n\t\"exclusion\",\n\t\"hue\",\n\t\"saturation\",\n\t\"color\",\n\t\"luminosity\"\n];\nconst GlobalCompositeOperation = z.enum(COMPOSITE_OPERATIONS);\nconst ColorSchema = z.string().optional();\nconst PercentageSchema = z.number().min(0).max(100);\nconst DimensionSchema = z.number().min(0).optional();\nconst AnimationSchema = z.object({ animations: z.array(z.object({\n\tid: z.string(),\n\ttype: z.enum([\n\t\t\"fade-in\",\n\t\t\"fade-out\",\n\t\t\"slide-in-left\",\n\t\t\"slide-in-right\",\n\t\t\"slide-in-top\",\n\t\t\"slide-in-bottom\",\n\t\t\"zoom-in\",\n\t\t\"zoom-out\",\n\t\t\"rotate-cw\",\n\t\t\"rotate-ccw\",\n\t\t\"bounce\",\n\t\t\"shake\"\n\t]),\n\tvalue: z.number()\n})).optional() });\nconst StrokeSchema = z.object({\n\tstroke: ColorSchema,\n\tstrokeWidth: z.number().min(0).optional(),\n\tstrokeAlign: z.enum([\n\t\t\"inside\",\n\t\t\"center\",\n\t\t\"outside\"\n\t]).optional().default(\"inside\"),\n\tstrokeRadius: z.number().min(0).optional()\n});\nconst ImageResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Image\"), FileDataSchema));\nconst VideoResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Video\"), VirtualMediaDataSchema));\nconst AudioResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Audio\"), VirtualMediaDataSchema));\nconst TextResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Text\"), z.string()));\nconst NumberResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Number\"), z.number()));\nconst SignalResultSchema = SingleOutputGenericSchema(createOutputItemSchema(z.literal(\"Signal\"), z.unknown()));\n/** The `inputs` map an operation carries: one entry per connected handle. */\nconst OperationInputsSchema = z.record(z.string(), z.object({\n\tconnectionValid: z.boolean(),\n\toutputItem: z.object({\n\t\ttype: z.string(),\n\t\tdata: z.unknown()\n\t}).nullable().optional()\n}));\n\n//#endregion\nexport { AnimationSchema, AudioResultSchema, COMPOSITE_OPERATIONS, ColorSchema, ConfigBuilder, DimensionSchema, FileDataSchema, GlobalCompositeOperation, ImageResultSchema, MultiOutputGenericSchema, NumberResultSchema, OperationInputsSchema, PercentageSchema, SignalResultSchema, SingleOutputGenericSchema, StrokeSchema, TextResultSchema, VideoResultSchema, VirtualMediaDataSchema, WebGPURegistry, audioRegistry, configBuilder, createOutputItemSchema, defineRenderer, isHandleConnected, isSignal, registerWebGPURenderer, resolveBoolean, resolveFrameNumber, resolveHandleParam, resolveNumber, resolveParam, resolveSignalField, resolveString, solveHomography, unwrapFrameParam, webgpuRegistry };\n//# sourceMappingURL=index.mjs.map"],"mappings":";;;;AAKA,IAAI,gBAAgB,MAAMA,gBAAc;CACvC,YAAY,QAAQ,EAAE,EAAE,UAAU,EAAE,QAAQ,MAAM,EAAE;AACnD,OAAK,QAAQ;AACb,OAAK,UAAU;;CAEhB,MAAM,KAAK,QAAQ,SAAS;EAC3B,MAAM,WAAW,UAAU,OAAO,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG;AACzD,SAAO,IAAIA,gBAAc;GACxB,GAAG,KAAK;IACP,MAAM;GACP,EAAE,KAAK,QAAQ;;CAEjB,QAAQ;EACP,MAAM,OAAO,EAAE,OAAO,KAAK,MAAM;AACjC,SAAO,EAAE,QAAQ,KAAK,QAAQ,WAAW,QAAQ,KAAK,QAAQ,GAAG,MAAM;;;AAGzE,SAAS,cAAc,UAAU,EAAE,QAAQ,MAAM,EAAE;AAClD,QAAO,IAAI,cAAc,EAAE,EAAE,QAAQ;;AAKtC,MAAM,uBAAuB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,2BAA2B,EAAE,KAAK,qBAAqB;AAC7D,MAAM,cAAc,EAAE,QAAQ,CAAC,UAAU;AACzC,MAAM,mBAAmB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;AACnD,MAAM,kBAAkB,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;AACpD,MAAM,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO;CAC/D,IAAI,EAAE,QAAQ;CACd,MAAM,EAAE,KAAK;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;CACF,OAAO,EAAE,QAAQ;CACjB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AACjB,MAAM,eAAe,EAAE,OAAO;CAC7B,QAAQ;CACR,aAAa,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CACzC,aAAa,EAAE,KAAK;EACnB;EACA;EACA;EACA,CAAC,CAAC,UAAU,CAAC,QAAQ,SAAS;CAC/B,cAAc,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,UAAU;CAC1C,CAAC;AACF,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,eAAe,CAAC;AAC/G,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,oBAAoB,0BAA0B,uBAAuB,EAAE,QAAQ,QAAQ,EAAE,uBAAuB,CAAC;AACvH,MAAM,mBAAmB,0BAA0B,uBAAuB,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACzG,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7G,MAAM,qBAAqB,0BAA0B,uBAAuB,EAAE,QAAQ,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;;AAE9G,MAAM,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO;CAC3D,iBAAiB,EAAE,SAAS;CAC5B,YAAY,EAAE,OAAO;EACpB,MAAM,EAAE,QAAQ;EAChB,MAAM,EAAE,SAAS;EACjB,CAAC,CAAC,UAAU,CAAC,UAAU;CACxB,CAAC,CAAC"}