framefields 2.10.0-canary.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/dist/audio/index.d.mts +4 -4
  2. package/dist/audio/index.mjs +10 -10
  3. package/dist/{audio-YpBRdI7r.mjs → audio-DHLoNcxD.mjs} +31 -5
  4. package/dist/audio-DHLoNcxD.mjs.map +1 -0
  5. package/dist/audio-afTBdB3U.d.mts +62 -0
  6. package/dist/audio-afTBdB3U.d.mts.map +1 -0
  7. package/dist/cli/check-worker.mjs +43 -43
  8. package/dist/cli.mjs +174 -83
  9. package/dist/cli.mjs.map +1 -1
  10. package/dist/cloud/index.d.mts +14 -3
  11. package/dist/cloud/index.d.mts.map +1 -1
  12. package/dist/cloud/index.mjs +2 -2
  13. package/dist/{cloud-xcfV4J03.mjs → cloud-COid1Ipa.mjs} +169 -16
  14. package/dist/cloud-COid1Ipa.mjs.map +1 -0
  15. package/dist/components/index.d.mts +8 -8
  16. package/dist/components/index.mjs +42 -42
  17. package/dist/{dist-C4Vxgm0Q.mjs → dist-B-OPY7Cs.mjs} +373 -13
  18. package/dist/dist-B-OPY7Cs.mjs.map +1 -0
  19. package/dist/{dist-Cu1fZ9Uy.mjs → dist-BSqeChht.mjs} +2 -2
  20. package/dist/{dist-Cu1fZ9Uy.mjs.map → dist-BSqeChht.mjs.map} +1 -1
  21. package/dist/effects/index.d.mts +4 -4
  22. package/dist/effects/index.mjs +34 -34
  23. package/dist/{effects-DiWYouOK.mjs → effects-C8CL9cOq.mjs} +2 -2
  24. package/dist/{effects-DiWYouOK.mjs.map → effects-C8CL9cOq.mjs.map} +1 -1
  25. package/dist/fonts/index.mjs +2 -2
  26. package/dist/{fonts-BnV-GB1o.mjs → fonts-BQrDjnpV.mjs} +2 -2
  27. package/dist/{fonts-BnV-GB1o.mjs.map → fonts-BQrDjnpV.mjs.map} +1 -1
  28. package/dist/{gpu-Bw35AMwY.mjs → gpu-DHa-3Dou.mjs} +2 -2
  29. package/dist/{gpu-Bw35AMwY.mjs.map → gpu-DHa-3Dou.mjs.map} +1 -1
  30. package/dist/{index-Dyt4yS-x.d.mts → index-BNClElng.d.mts} +467 -465
  31. package/dist/index-BNClElng.d.mts.map +1 -0
  32. package/dist/{index-Bbv0VtxJ.d.mts → index-CAuNuvIg.d.mts} +3 -3
  33. package/dist/{index-Bbv0VtxJ.d.mts.map → index-CAuNuvIg.d.mts.map} +1 -1
  34. package/dist/index-COYNQ_mf.d.mts.map +1 -1
  35. package/dist/{index-CDQrdZ0J.d.mts → index-CTv9ZieD.d.mts} +2 -2
  36. package/dist/{index-CDQrdZ0J.d.mts.map → index-CTv9ZieD.d.mts.map} +1 -1
  37. package/dist/{index-h7m8QgcL.d.mts → index-Drk6HC2k.d.mts} +2 -2
  38. package/dist/{index-h7m8QgcL.d.mts.map → index-Drk6HC2k.d.mts.map} +1 -1
  39. package/dist/{index-B7WqFBZA.d.mts → index-Fliv2Z-w.d.mts} +22 -2
  40. package/dist/index-Fliv2Z-w.d.mts.map +1 -0
  41. package/dist/index.d.mts +9 -9
  42. package/dist/index.mjs +49 -49
  43. package/dist/preview/index.d.mts +1 -1
  44. package/dist/preview/index.mjs +10 -10
  45. package/dist/{preview-BW7ilNWk.mjs → preview-BUtt481A.mjs} +2 -2
  46. package/dist/{preview-BW7ilNWk.mjs.map → preview-BUtt481A.mjs.map} +1 -1
  47. package/dist/preview-engine/audio.mjs +1 -1
  48. package/dist/preview-engine/{chunk-OD4CSXZL.mjs → chunk-35XSD4QM.mjs} +1 -1
  49. package/dist/preview-engine/{chunk-V5HU6NIW.mjs → chunk-3DOIE4DV.mjs} +1 -1
  50. package/dist/preview-engine/{chunk-L2NTIWW5.mjs → chunk-3IT7LHWR.mjs} +1 -1
  51. package/dist/preview-engine/{chunk-6LBFSGCI.mjs → chunk-3MLGWUSK.mjs} +1 -1
  52. package/dist/preview-engine/{chunk-57WXGYEV.mjs → chunk-3QJ5GRBH.mjs} +1 -1
  53. package/dist/preview-engine/{chunk-6O55UROD.mjs → chunk-3QTHW2CD.mjs} +1 -1
  54. package/dist/preview-engine/{chunk-HO7FXISJ.mjs → chunk-4JNIEQS2.mjs} +1 -1
  55. package/dist/preview-engine/{chunk-JFBSNFN6.mjs → chunk-6B3NOY5W.mjs} +1 -1
  56. package/dist/preview-engine/{chunk-HPQDCC4S.mjs → chunk-6O7UDVNL.mjs} +1 -1
  57. package/dist/preview-engine/{chunk-T6L3DO3H.mjs → chunk-74J4DJQA.mjs} +1 -1
  58. package/dist/preview-engine/{chunk-JSKEVYKD.mjs → chunk-AKVRG7UU.mjs} +1 -1
  59. package/dist/preview-engine/{chunk-4BWBX2HM.mjs → chunk-CRBOK3JT.mjs} +1 -1
  60. package/dist/preview-engine/{chunk-JIPMF42Z.mjs → chunk-D6LM7DTJ.mjs} +2 -2
  61. package/dist/preview-engine/{chunk-HGWT3RVQ.mjs → chunk-E7BKWHOT.mjs} +1 -1
  62. package/dist/preview-engine/{chunk-4FACCLLE.mjs → chunk-EWDJMJO5.mjs} +1 -1
  63. package/dist/preview-engine/{chunk-6BE3IL7L.mjs → chunk-EYE3GNL5.mjs} +1 -1
  64. package/dist/preview-engine/{chunk-7A3BNAWY.mjs → chunk-EYKN2VET.mjs} +1 -1
  65. package/dist/preview-engine/chunk-FJTURGJV.mjs +107 -0
  66. package/dist/preview-engine/{chunk-5Y7SO37Q.mjs → chunk-G4ZTSLZU.mjs} +1 -1
  67. package/dist/preview-engine/{chunk-C2GX5L5S.mjs → chunk-GAMAKN5L.mjs} +1 -1
  68. package/dist/preview-engine/{chunk-VVY4PG5E.mjs → chunk-GXFYRMJZ.mjs} +25 -25
  69. package/dist/preview-engine/{chunk-RAW2I27S.mjs → chunk-HTAHYSCW.mjs} +1 -1
  70. package/dist/preview-engine/{chunk-NTTEGJD6.mjs → chunk-ICWD36H6.mjs} +1 -1
  71. package/dist/preview-engine/{chunk-K3TJJXVC.mjs → chunk-JAUMCOOJ.mjs} +1 -1
  72. package/dist/preview-engine/{chunk-4DSOZ5QG.mjs → chunk-KBCZKIIQ.mjs} +1 -1
  73. package/dist/preview-engine/{chunk-WVIDORLK.mjs → chunk-KDCM7S3S.mjs} +1 -1
  74. package/dist/preview-engine/{chunk-ZGEKF34E.mjs → chunk-KIPXBOYG.mjs} +10 -10
  75. package/dist/preview-engine/{chunk-HKYENGC5.mjs → chunk-M4QVCQ3O.mjs} +1 -1
  76. package/dist/preview-engine/{chunk-4N25ZU43.mjs → chunk-NJO2BIJX.mjs} +1 -1
  77. package/dist/preview-engine/{chunk-6SLCECHG.mjs → chunk-NTSALWFF.mjs} +1 -1
  78. package/dist/preview-engine/{chunk-7HW7GA76.mjs → chunk-O75BFM4S.mjs} +1 -1
  79. package/dist/preview-engine/{chunk-YXCTOCQ2.mjs → chunk-ONHY4KNY.mjs} +1 -1
  80. package/dist/preview-engine/{chunk-XCQ7KN4S.mjs → chunk-QPT2Y2GZ.mjs} +1 -1
  81. package/dist/preview-engine/{chunk-ZA5LWHRM.mjs → chunk-QXLFTCLC.mjs} +1 -1
  82. package/dist/preview-engine/{chunk-FW2UDDUT.mjs → chunk-RGKS6YIA.mjs} +1 -1
  83. package/dist/preview-engine/{chunk-VRJBOFFY.mjs → chunk-RN7J5TRU.mjs} +1 -1
  84. package/dist/preview-engine/{chunk-LBP7E7SJ.mjs → chunk-RVCLMO5Q.mjs} +1 -1
  85. package/dist/preview-engine/{chunk-K3C6GUQD.mjs → chunk-SE2C623Z.mjs} +1 -1
  86. package/dist/preview-engine/{chunk-LTR5FXGU.mjs → chunk-SFHWP65D.mjs} +1 -1
  87. package/dist/preview-engine/{chunk-ML7WO27M.mjs → chunk-TKXOSEIJ.mjs} +1 -1
  88. package/dist/preview-engine/{chunk-4TPXZNVR.mjs → chunk-UKZVUYB6.mjs} +1 -1
  89. package/dist/preview-engine/{chunk-IVAA5X5H.mjs → chunk-UVEDFIPN.mjs} +1 -1
  90. package/dist/preview-engine/{chunk-FH72KTSM.mjs → chunk-VUO4K52B.mjs} +1 -1
  91. package/dist/preview-engine/{chunk-OOUDE4XL.mjs → chunk-W4XR6F5G.mjs} +1 -1
  92. package/dist/preview-engine/{chunk-RMHL4XZ3.mjs → chunk-WPYWCWWL.mjs} +1 -1
  93. package/dist/preview-engine/{chunk-CHXR5XZK.mjs → chunk-YAPGJZPI.mjs} +1 -1
  94. package/dist/preview-engine/{chunk-4RLKHFV6.mjs → chunk-YJ4DSRDY.mjs} +1 -1
  95. package/dist/preview-engine/{chunk-Y2SWIWIU.mjs → chunk-YOJKIMU5.mjs} +1 -1
  96. package/dist/preview-engine/{chunk-YS3ROS25.mjs → chunk-ZHNEZZ6A.mjs} +1 -1
  97. package/dist/preview-engine/{chunk-EKEKYGXE.mjs → chunk-ZZMI3WOT.mjs} +1 -1
  98. package/dist/preview-engine/components.mjs +1 -1
  99. package/dist/preview-engine/effects.mjs +1 -1
  100. package/dist/preview-engine/framefields.mjs +1 -1
  101. package/dist/preview-engine/player.mjs +1 -1
  102. package/dist/preview-engine/{renderers-36P2TKPC.mjs → renderers-3FZVDYRQ.mjs} +1 -1
  103. package/dist/preview-engine/renderers-3KEBYOOF.mjs +1 -0
  104. package/dist/preview-engine/{renderers-JZYHX4XI.mjs → renderers-4RPQSUUZ.mjs} +1 -1
  105. package/dist/preview-engine/renderers-5EGFXFPF.mjs +1 -0
  106. package/dist/preview-engine/renderers-5SJHYUTM.mjs +1 -0
  107. package/dist/preview-engine/renderers-66MWDUN6.mjs +1 -0
  108. package/dist/preview-engine/{renderers-CMBI4JOC.mjs → renderers-6FENMFSC.mjs} +1 -1
  109. package/dist/preview-engine/renderers-77OXJ2GY.mjs +1 -0
  110. package/dist/preview-engine/renderers-7LI4QKHO.mjs +1 -0
  111. package/dist/preview-engine/{renderers-6RRWA33X.mjs → renderers-AIZRIW2R.mjs} +1 -1
  112. package/dist/preview-engine/{renderers-UBIFSF37.mjs → renderers-BDI2BDBA.mjs} +1 -1
  113. package/dist/preview-engine/renderers-BDXCO6NR.mjs +1 -0
  114. package/dist/preview-engine/{renderers-OPRXVIGT.mjs → renderers-BUZ67FNZ.mjs} +1 -1
  115. package/dist/preview-engine/renderers-DMTGKURQ.mjs +1 -0
  116. package/dist/preview-engine/{renderers-AUYCQNSS.mjs → renderers-ECXMT5BD.mjs} +1 -1
  117. package/dist/preview-engine/{renderers-4WFRXGMR.mjs → renderers-EVEWFJ7U.mjs} +1 -1
  118. package/dist/preview-engine/renderers-F6PT2LON.mjs +1 -0
  119. package/dist/preview-engine/renderers-F7WPJXKT.mjs +1 -0
  120. package/dist/preview-engine/renderers-FIFF267S.mjs +1 -0
  121. package/dist/preview-engine/{renderers-CQIPHCIW.mjs → renderers-FQISHQEN.mjs} +1 -1
  122. package/dist/preview-engine/{renderers-YJ4PJEPG.mjs → renderers-FXAVFNUN.mjs} +1 -1
  123. package/dist/preview-engine/{renderers-4SNAK77B.mjs → renderers-GITAVRYZ.mjs} +1 -1
  124. package/dist/preview-engine/renderers-GTKRV225.mjs +1 -0
  125. package/dist/preview-engine/{renderers-RQ3JZE3L.mjs → renderers-HG6JZIZO.mjs} +1 -1
  126. package/dist/preview-engine/{renderers-OZKPOUMW.mjs → renderers-HHWMIDN3.mjs} +1 -1
  127. package/dist/preview-engine/renderers-HI3SRJVD.mjs +1 -0
  128. package/dist/preview-engine/renderers-HXEDI4BD.mjs +1 -0
  129. package/dist/preview-engine/{renderers-LF6U4MR5.mjs → renderers-I2ZOUFRU.mjs} +1 -1
  130. package/dist/preview-engine/renderers-JHFD4LHZ.mjs +1 -0
  131. package/dist/preview-engine/renderers-KGVZUFHD.mjs +1 -0
  132. package/dist/preview-engine/{renderers-G2FL3IFD.mjs → renderers-KKULMOV4.mjs} +1 -1
  133. package/dist/preview-engine/{renderers-JALV3B3A.mjs → renderers-KMVMPYY7.mjs} +1 -1
  134. package/dist/preview-engine/renderers-L6GFGHS6.mjs +1 -0
  135. package/dist/preview-engine/renderers-LN7WPG6I.mjs +1 -0
  136. package/dist/preview-engine/{renderers-37Y5LR2S.mjs → renderers-LWW4RF6D.mjs} +1 -1
  137. package/dist/preview-engine/renderers-LY57CZZB.mjs +1 -0
  138. package/dist/preview-engine/renderers-MBMJWZEW.mjs +1 -0
  139. package/dist/preview-engine/{renderers-6RYIPQ7W.mjs → renderers-MPFU74I3.mjs} +1 -1
  140. package/dist/preview-engine/{renderers-TKHQRERE.mjs → renderers-MW53LTMB.mjs} +1 -1
  141. package/dist/preview-engine/{renderers-Q5YCUPYE.mjs → renderers-PC2GOZDT.mjs} +1 -1
  142. package/dist/preview-engine/renderers-PREFONJG.mjs +1 -0
  143. package/dist/preview-engine/{renderers-WG756VF3.mjs → renderers-PSBTV2DO.mjs} +1 -1
  144. package/dist/preview-engine/{renderers-XZ3XDQIN.mjs → renderers-Q77UPEYE.mjs} +1 -1
  145. package/dist/preview-engine/renderers-QHXCFDHI.mjs +1 -0
  146. package/dist/preview-engine/renderers-R22CDFO4.mjs +1 -0
  147. package/dist/preview-engine/renderers-RDYJRNAR.mjs +1 -0
  148. package/dist/preview-engine/renderers-RENLKAA7.mjs +1 -0
  149. package/dist/preview-engine/{renderers-U4S577ON.mjs → renderers-RIPXT4AL.mjs} +1 -1
  150. package/dist/preview-engine/{renderers-ZQVKE5AO.mjs → renderers-SFVFAS3C.mjs} +1 -1
  151. package/dist/preview-engine/{renderers-5K3BSBI6.mjs → renderers-SWQVCJHB.mjs} +1 -1
  152. package/dist/preview-engine/renderers-SZVDZDY7.mjs +1 -0
  153. package/dist/preview-engine/renderers-TEKHQHCL.mjs +1 -0
  154. package/dist/preview-engine/renderers-TS32FDV7.mjs +1 -0
  155. package/dist/preview-engine/renderers-TYSLUZ53.mjs +1 -0
  156. package/dist/preview-engine/renderers-U3RLYFCN.mjs +1 -0
  157. package/dist/preview-engine/{renderers-PGZDFDSC.mjs → renderers-U4IXWMD6.mjs} +1 -1
  158. package/dist/preview-engine/renderers-V5HM6PZ2.mjs +1 -0
  159. package/dist/preview-engine/{renderers-4MW4NW6O.mjs → renderers-VUQAZ56P.mjs} +1 -1
  160. package/dist/preview-engine/renderers-W5YFMLSB.mjs +1 -0
  161. package/dist/preview-engine/renderers-XKDWUK56.mjs +1 -0
  162. package/dist/preview-engine/renderers-XKSBNCLZ.mjs +1 -0
  163. package/dist/preview-engine/renderers-XLQXVD37.mjs +1 -0
  164. package/dist/preview-engine/renderers-ZGX3A3QZ.mjs +1 -0
  165. package/dist/preview-engine/signals.mjs +1 -1
  166. package/dist/{program-BUjUTdxq.mjs → program-Cvv_nb9T.mjs} +2 -2
  167. package/dist/{program-BUjUTdxq.mjs.map → program-Cvv_nb9T.mjs.map} +1 -1
  168. package/dist/renderer/index.d.mts +1 -1
  169. package/dist/renderer/index.mjs +2 -2
  170. package/dist/renderer--RJepuOy.mjs +5 -0
  171. package/dist/{renderer-B84T5I98.mjs → renderer-4uZGSmUD.mjs} +3 -3
  172. package/dist/{renderer-B84T5I98.mjs.map → renderer-4uZGSmUD.mjs.map} +1 -1
  173. package/dist/{renderer-Bo5GwErU.mjs → renderer-5fGj_tqN.mjs} +3 -3
  174. package/dist/{renderer-Bo5GwErU.mjs.map → renderer-5fGj_tqN.mjs.map} +1 -1
  175. package/dist/{renderer-D7DlNOVi.mjs → renderer-6g1ri445.mjs} +3 -3
  176. package/dist/{renderer-D7DlNOVi.mjs.map → renderer-6g1ri445.mjs.map} +1 -1
  177. package/dist/{renderer-H4CZt3Z5.mjs → renderer-B09I95bo.mjs} +2 -2
  178. package/dist/{renderer-tcypOFaB.d.mts → renderer-B1U6YRRV.d.mts} +2 -2
  179. package/dist/{renderer-tcypOFaB.d.mts.map → renderer-B1U6YRRV.d.mts.map} +1 -1
  180. package/dist/renderer-B4NFnaty.mjs +5 -0
  181. package/dist/renderer-B6g4ts0e.mjs +5 -0
  182. package/dist/{renderer-DBfx6QX1.mjs → renderer-BBjkX0Vt.mjs} +2 -2
  183. package/dist/{renderer-BdRwbLLV.mjs → renderer-BC_Nse6h.mjs} +3 -3
  184. package/dist/{renderer-BdRwbLLV.mjs.map → renderer-BC_Nse6h.mjs.map} +1 -1
  185. package/dist/renderer-BGoAr-tl.mjs +5 -0
  186. package/dist/{renderer-CWmlfdLb.mjs → renderer-BJEexai1.mjs} +3 -3
  187. package/dist/{renderer-CWmlfdLb.mjs.map → renderer-BJEexai1.mjs.map} +1 -1
  188. package/dist/renderer-BSOdBgdE.mjs +5 -0
  189. package/dist/{renderer-muB4slsV.mjs → renderer-BSsKlcHk.mjs} +3 -3
  190. package/dist/{renderer-muB4slsV.mjs.map → renderer-BSsKlcHk.mjs.map} +1 -1
  191. package/dist/{renderer-DlbSqOJR.mjs → renderer-BTd6tFcS.mjs} +3 -3
  192. package/dist/{renderer-DlbSqOJR.mjs.map → renderer-BTd6tFcS.mjs.map} +1 -1
  193. package/dist/renderer-BU6O0fpM.mjs +5 -0
  194. package/dist/{renderer-DtCmG-tT.mjs → renderer-BXGuCnCJ.mjs} +3 -3
  195. package/dist/{renderer-DtCmG-tT.mjs.map → renderer-BXGuCnCJ.mjs.map} +1 -1
  196. package/dist/renderer-BZ97iidG.mjs +5 -0
  197. package/dist/renderer-B_Klh1VT.mjs +5 -0
  198. package/dist/renderer-BaWQM1y-.mjs +5 -0
  199. package/dist/renderer-Bc0jvAj0.mjs +5 -0
  200. package/dist/{renderer-jBKpX3Xg.mjs → renderer-Bf7Z7WT5.mjs} +2 -2
  201. package/dist/{renderer-jBKpX3Xg.mjs.map → renderer-Bf7Z7WT5.mjs.map} +1 -1
  202. package/dist/renderer-Bm077kZ6.mjs +5 -0
  203. package/dist/renderer-BtzE_e_Y.mjs +5 -0
  204. package/dist/{renderer-kFx1_MmK.mjs → renderer-BvRM3OZ6.mjs} +2 -2
  205. package/dist/{renderer-kFx1_MmK.mjs.map → renderer-BvRM3OZ6.mjs.map} +1 -1
  206. package/dist/{renderer-DAfCcnCz.mjs → renderer-BwJ0nXXu.mjs} +3 -3
  207. package/dist/{renderer-DAfCcnCz.mjs.map → renderer-BwJ0nXXu.mjs.map} +1 -1
  208. package/dist/{renderer-CO1PwItH.mjs → renderer-BwV-o_1b.mjs} +2 -2
  209. package/dist/{renderer-CO1PwItH.mjs.map → renderer-BwV-o_1b.mjs.map} +1 -1
  210. package/dist/{renderer-Bm91Xv6l.mjs → renderer-Bxiiar50.mjs} +3 -3
  211. package/dist/{renderer-Bm91Xv6l.mjs.map → renderer-Bxiiar50.mjs.map} +1 -1
  212. package/dist/{renderer-CanNjQuL.mjs → renderer-ByFPmHBC.mjs} +2 -2
  213. package/dist/{renderer-CanNjQuL.mjs.map → renderer-ByFPmHBC.mjs.map} +1 -1
  214. package/dist/{renderer-JASAZUyY.mjs → renderer-BzTj_CeK.mjs} +3 -3
  215. package/dist/{renderer-JASAZUyY.mjs.map → renderer-BzTj_CeK.mjs.map} +1 -1
  216. package/dist/renderer-C225eCAo.mjs +5 -0
  217. package/dist/{renderer-7w9PZmWJ.mjs → renderer-C2kFIZ4r.mjs} +2 -2
  218. package/dist/{renderer-7w9PZmWJ.mjs.map → renderer-C2kFIZ4r.mjs.map} +1 -1
  219. package/dist/{renderer-vpsU_4XW.mjs → renderer-C3CGYjrC.mjs} +3 -3
  220. package/dist/{renderer-vpsU_4XW.mjs.map → renderer-C3CGYjrC.mjs.map} +1 -1
  221. package/dist/{renderer-BFmVDdVs.mjs → renderer-CGpi8CDT.mjs} +3 -3
  222. package/dist/{renderer-BFmVDdVs.mjs.map → renderer-CGpi8CDT.mjs.map} +1 -1
  223. package/dist/{renderer-FFLnACY-.mjs → renderer-CInMMs5x.mjs} +3 -3
  224. package/dist/{renderer-FFLnACY-.mjs.map → renderer-CInMMs5x.mjs.map} +1 -1
  225. package/dist/{renderer-CTSvHf6g.mjs → renderer-CLTRTtQ8.mjs} +3 -3
  226. package/dist/{renderer-CTSvHf6g.mjs.map → renderer-CLTRTtQ8.mjs.map} +1 -1
  227. package/dist/renderer-CLXdR4vz.mjs +5 -0
  228. package/dist/{renderer-7c0ecb-L.mjs → renderer-CMCmljb0.mjs} +2 -2
  229. package/dist/{renderer-7c0ecb-L.mjs.map → renderer-CMCmljb0.mjs.map} +1 -1
  230. package/dist/{renderer-BnN3JH9u.mjs → renderer-CN-mCIoI.mjs} +3 -3
  231. package/dist/{renderer-BnN3JH9u.mjs.map → renderer-CN-mCIoI.mjs.map} +1 -1
  232. package/dist/{renderer-Bif8bwCq.mjs → renderer-CNpq7rL-.mjs} +2 -2
  233. package/dist/{renderer-Bif8bwCq.mjs.map → renderer-CNpq7rL-.mjs.map} +1 -1
  234. package/dist/{renderer-Chfo4G9t.mjs → renderer-CZClDMgF.mjs} +3 -3
  235. package/dist/{renderer-Chfo4G9t.mjs.map → renderer-CZClDMgF.mjs.map} +1 -1
  236. package/dist/{renderer-BvRaVByi.mjs → renderer-C_gR2H3R.mjs} +2 -2
  237. package/dist/{renderer-BvRaVByi.mjs.map → renderer-C_gR2H3R.mjs.map} +1 -1
  238. package/dist/{renderer-DJuVX3c5.d.mts → renderer-CcmxR6Fy.d.mts} +2 -2
  239. package/dist/{renderer-DJuVX3c5.d.mts.map → renderer-CcmxR6Fy.d.mts.map} +1 -1
  240. package/dist/{renderer-BT4im6c0.mjs → renderer-CiHVnhUk.mjs} +3 -3
  241. package/dist/{renderer-BT4im6c0.mjs.map → renderer-CiHVnhUk.mjs.map} +1 -1
  242. package/dist/renderer-CszM8B3C.mjs +5 -0
  243. package/dist/renderer-Ctp8ZYfk.mjs +5 -0
  244. package/dist/{renderer-BIToh0CA.mjs → renderer-CtpEzVBn.mjs} +2 -2
  245. package/dist/{renderer-BIToh0CA.mjs.map → renderer-CtpEzVBn.mjs.map} +1 -1
  246. package/dist/renderer-CxQdSp8I.mjs +5 -0
  247. package/dist/{renderer-BG_cnGbF.mjs → renderer-D3QPNBEj.mjs} +3 -3
  248. package/dist/{renderer-BG_cnGbF.mjs.map → renderer-D3QPNBEj.mjs.map} +1 -1
  249. package/dist/{renderer-CybBR8AL.mjs → renderer-D3YbHjRG.mjs} +69 -69
  250. package/dist/{renderer-CybBR8AL.mjs.map → renderer-D3YbHjRG.mjs.map} +1 -1
  251. package/dist/renderer-D4GMRtDd.mjs +6 -0
  252. package/dist/{renderer-w7mlMSC-.mjs → renderer-DEoerd-j.mjs} +3 -3
  253. package/dist/{renderer-w7mlMSC-.mjs.map → renderer-DEoerd-j.mjs.map} +1 -1
  254. package/dist/renderer-DEsGIvTZ.mjs +5 -0
  255. package/dist/{renderer-fWW0bsVl.mjs → renderer-DGXqspB9.mjs} +2 -2
  256. package/dist/renderer-DIaUQ0EP.mjs +5 -0
  257. package/dist/{renderer-Dd2XrdqA.mjs → renderer-DKFaVaRJ.mjs} +2 -2
  258. package/dist/{renderer-Dd2XrdqA.mjs.map → renderer-DKFaVaRJ.mjs.map} +1 -1
  259. package/dist/{renderer-DKptrHeL.mjs → renderer-DL3o_lG1.mjs} +3 -3
  260. package/dist/{renderer-DKptrHeL.mjs.map → renderer-DL3o_lG1.mjs.map} +1 -1
  261. package/dist/{renderer-DxkvDAA6.mjs → renderer-DLaUT6JZ.mjs} +2 -2
  262. package/dist/{renderer-DxkvDAA6.mjs.map → renderer-DLaUT6JZ.mjs.map} +1 -1
  263. package/dist/renderer-DLjqcNzQ.mjs +5 -0
  264. package/dist/renderer-DMuQZa51.mjs +5 -0
  265. package/dist/{renderer-BeJoW-nG.mjs → renderer-DO1SZ5xY.mjs} +3 -3
  266. package/dist/{renderer-BeJoW-nG.mjs.map → renderer-DO1SZ5xY.mjs.map} +1 -1
  267. package/dist/{renderer-B3WHDQeB.mjs → renderer-DO_zXwMJ.mjs} +2 -2
  268. package/dist/{renderer-B3WHDQeB.mjs.map → renderer-DO_zXwMJ.mjs.map} +1 -1
  269. package/dist/renderer-DOgi2aF2.mjs +5 -0
  270. package/dist/{renderer-CtulmkqT.mjs → renderer-DP9ScNM6.mjs} +2 -2
  271. package/dist/{renderer-CtulmkqT.mjs.map → renderer-DP9ScNM6.mjs.map} +1 -1
  272. package/dist/{renderer-CLRrcT_3.mjs → renderer-DQJHjU0L.mjs} +3 -3
  273. package/dist/{renderer-CLRrcT_3.mjs.map → renderer-DQJHjU0L.mjs.map} +1 -1
  274. package/dist/renderer-DSh7cvi4.mjs +5 -0
  275. package/dist/renderer-DV1LVBBP.mjs +5 -0
  276. package/dist/{renderer-D7lApyWZ.mjs → renderer-DX60Kr20.mjs} +2 -2
  277. package/dist/{renderer-D7lApyWZ.mjs.map → renderer-DX60Kr20.mjs.map} +1 -1
  278. package/dist/{renderer-R2kLaNuR.mjs → renderer-DZIxduEt.mjs} +2 -2
  279. package/dist/{renderer-R2kLaNuR.mjs.map → renderer-DZIxduEt.mjs.map} +1 -1
  280. package/dist/{renderer-DMtzPqYo.mjs → renderer-DaLy1dFA.mjs} +5 -5
  281. package/dist/{renderer-DMtzPqYo.mjs.map → renderer-DaLy1dFA.mjs.map} +1 -1
  282. package/dist/{renderer-1KgHl_ls.mjs → renderer-DaY04IyU.mjs} +3 -3
  283. package/dist/{renderer-1KgHl_ls.mjs.map → renderer-DaY04IyU.mjs.map} +1 -1
  284. package/dist/renderer-Dhrj2bJz.mjs +5 -0
  285. package/dist/{renderer-Dih1rtT6.mjs → renderer-Dj54y3h3.mjs} +2 -2
  286. package/dist/{renderer-Dih1rtT6.mjs.map → renderer-Dj54y3h3.mjs.map} +1 -1
  287. package/dist/renderer-DoFUu1R4.mjs +5 -0
  288. package/dist/{renderer-DkAFIpzB.mjs → renderer-Dp9FQKVP.mjs} +3 -3
  289. package/dist/{renderer-DkAFIpzB.mjs.map → renderer-Dp9FQKVP.mjs.map} +1 -1
  290. package/dist/{renderer--f8JHHyT.mjs → renderer-DrK6pyfz.mjs} +3 -3
  291. package/dist/{renderer--f8JHHyT.mjs.map → renderer-DrK6pyfz.mjs.map} +1 -1
  292. package/dist/{renderer-Ch1qZ2PT.mjs → renderer-DrL3J9ci.mjs} +2 -2
  293. package/dist/{renderer-Ch1qZ2PT.mjs.map → renderer-DrL3J9ci.mjs.map} +1 -1
  294. package/dist/renderer-DsydX3cx.mjs +5 -0
  295. package/dist/{renderer-oiDoNzhv.mjs → renderer-DwH5e3hx.mjs} +2 -2
  296. package/dist/renderer-DxVSoeYi.mjs +5 -0
  297. package/dist/{renderer-Br_aJ_b7.mjs → renderer-Dy1xQOTu.mjs} +2 -2
  298. package/dist/{renderer-Br_aJ_b7.mjs.map → renderer-Dy1xQOTu.mjs.map} +1 -1
  299. package/dist/{renderer-CDfCaqV4.mjs → renderer-FvvywNvv.mjs} +2 -2
  300. package/dist/{renderer-CDfCaqV4.mjs.map → renderer-FvvywNvv.mjs.map} +1 -1
  301. package/dist/{renderer-DjiebKHO.mjs → renderer-HXw4cJZx.mjs} +2 -2
  302. package/dist/{renderer-DjiebKHO.mjs.map → renderer-HXw4cJZx.mjs.map} +1 -1
  303. package/dist/{renderer-D_rEtJAH.mjs → renderer-HhJPFidU.mjs} +3 -3
  304. package/dist/{renderer-D_rEtJAH.mjs.map → renderer-HhJPFidU.mjs.map} +1 -1
  305. package/dist/{renderer-Dswrn-yi.mjs → renderer-IAffbHXx.mjs} +2 -2
  306. package/dist/{renderer-Dswrn-yi.mjs.map → renderer-IAffbHXx.mjs.map} +1 -1
  307. package/dist/{renderer-D1tDMuD0.mjs → renderer-LrAldCWN.mjs} +3 -3
  308. package/dist/{renderer-D1tDMuD0.mjs.map → renderer-LrAldCWN.mjs.map} +1 -1
  309. package/dist/renderer-Nc9bHb0n.mjs +5 -0
  310. package/dist/{renderer-DAug14gu.mjs → renderer-O4y02xkD.mjs} +2 -2
  311. package/dist/{renderer-DAug14gu.mjs.map → renderer-O4y02xkD.mjs.map} +1 -1
  312. package/dist/{renderer-Ck-NLzz0.mjs → renderer-PnnkUWm-.mjs} +2 -2
  313. package/dist/{renderer-Ck-NLzz0.mjs.map → renderer-PnnkUWm-.mjs.map} +1 -1
  314. package/dist/renderer-TFaSD2Db.mjs +5 -0
  315. package/dist/{renderer-CKlNHDKI.mjs → renderer-TiaHrU5z.mjs} +3 -3
  316. package/dist/{renderer-CKlNHDKI.mjs.map → renderer-TiaHrU5z.mjs.map} +1 -1
  317. package/dist/renderer-Z61ctppe.mjs +5 -0
  318. package/dist/{renderer-BTLZBD63.mjs → renderer-_KIBvES8.mjs} +3 -3
  319. package/dist/{renderer-BTLZBD63.mjs.map → renderer-_KIBvES8.mjs.map} +1 -1
  320. package/dist/renderer-awXf3sNS.mjs +5 -0
  321. package/dist/{renderer-CsRuEpR2.mjs → renderer-b0H3oDae.mjs} +2 -2
  322. package/dist/{renderer-CsRuEpR2.mjs.map → renderer-b0H3oDae.mjs.map} +1 -1
  323. package/dist/renderer-cHT28oYI.mjs +5 -0
  324. package/dist/renderer-g7Y3bFot.mjs +5 -0
  325. package/dist/{renderer-CxabOSkk.mjs → renderer-oBgCEqaM.mjs} +2 -2
  326. package/dist/{renderer-CxabOSkk.mjs.map → renderer-oBgCEqaM.mjs.map} +1 -1
  327. package/dist/{renderer-BhNZn2DU.mjs → renderer-qVJdxbXB.mjs} +3 -3
  328. package/dist/{renderer-BhNZn2DU.mjs.map → renderer-qVJdxbXB.mjs.map} +1 -1
  329. package/dist/renderer-qVv0OzVc.mjs +5 -0
  330. package/dist/{renderer-B8i4d1Rc.mjs → renderer-rKw5_EjG.mjs} +2 -2
  331. package/dist/{renderer-B8i4d1Rc.mjs.map → renderer-rKw5_EjG.mjs.map} +1 -1
  332. package/dist/{renderer-CeNAgCE2.mjs → renderer-sMFJtt_H.mjs} +2 -2
  333. package/dist/{renderer-CeNAgCE2.mjs.map → renderer-sMFJtt_H.mjs.map} +1 -1
  334. package/dist/{renderer-DrExCXnp.mjs → renderer-smP1F57W.mjs} +2 -2
  335. package/dist/{renderer-DrExCXnp.mjs.map → renderer-smP1F57W.mjs.map} +1 -1
  336. package/dist/{renderer-DxiF4O6X.mjs → renderer-snjhPaP-.mjs} +3 -3
  337. package/dist/{renderer-DxiF4O6X.mjs.map → renderer-snjhPaP-.mjs.map} +1 -1
  338. package/dist/{renderer-CwAuWLWm.mjs → renderer-t1sXDiqm.mjs} +3 -3
  339. package/dist/{renderer-CwAuWLWm.mjs.map → renderer-t1sXDiqm.mjs.map} +1 -1
  340. package/dist/{renderer-Bb_HHUQ0.mjs → renderer-tRi3KNoG.mjs} +3 -3
  341. package/dist/{renderer-Bb_HHUQ0.mjs.map → renderer-tRi3KNoG.mjs.map} +1 -1
  342. package/dist/{renderer-BSW4CGZF.mjs → renderer-uA0UCxjA.mjs} +2 -2
  343. package/dist/{renderer-BSW4CGZF.mjs.map → renderer-uA0UCxjA.mjs.map} +1 -1
  344. package/dist/{renderer-vPxMXiv8.mjs → renderer-xNOKSN3V.mjs} +3 -3
  345. package/dist/{renderer-vPxMXiv8.mjs.map → renderer-xNOKSN3V.mjs.map} +1 -1
  346. package/dist/{renderers-CP8CFWDs-OgyUiyrr.mjs → renderers-CP8CFWDs-DWRjjeUg.mjs} +2 -2
  347. package/dist/{renderers-CP8CFWDs-OgyUiyrr.mjs.map → renderers-CP8CFWDs-DWRjjeUg.mjs.map} +1 -1
  348. package/dist/signals/index.d.mts +6 -6
  349. package/dist/signals/index.mjs +4 -4
  350. package/dist/{src-C3f3zXYg.mjs → src-D7M8VTzv.mjs} +7 -7
  351. package/dist/{src-C3f3zXYg.mjs.map → src-D7M8VTzv.mjs.map} +1 -1
  352. package/package.json +59 -59
  353. package/dist/audio-1X5qNNmk.d.mts +0 -38
  354. package/dist/audio-1X5qNNmk.d.mts.map +0 -1
  355. package/dist/audio-YpBRdI7r.mjs.map +0 -1
  356. package/dist/cloud-xcfV4J03.mjs.map +0 -1
  357. package/dist/dist-C4Vxgm0Q.mjs.map +0 -1
  358. package/dist/index-B7WqFBZA.d.mts.map +0 -1
  359. package/dist/index-Dyt4yS-x.d.mts.map +0 -1
  360. package/dist/preview-engine/chunk-GTMZOMAN.mjs +0 -1
  361. package/dist/preview-engine/renderers-33PIDDZC.mjs +0 -1
  362. package/dist/preview-engine/renderers-3AZ3HY53.mjs +0 -1
  363. package/dist/preview-engine/renderers-3FGKW52B.mjs +0 -1
  364. package/dist/preview-engine/renderers-4A2FBS3Y.mjs +0 -1
  365. package/dist/preview-engine/renderers-65DU2F5W.mjs +0 -1
  366. package/dist/preview-engine/renderers-6CTPYQR6.mjs +0 -1
  367. package/dist/preview-engine/renderers-AWODRI3B.mjs +0 -1
  368. package/dist/preview-engine/renderers-BO6HHGMZ.mjs +0 -1
  369. package/dist/preview-engine/renderers-BSXYDEV7.mjs +0 -1
  370. package/dist/preview-engine/renderers-ECW2CGNU.mjs +0 -1
  371. package/dist/preview-engine/renderers-EEX22FUO.mjs +0 -1
  372. package/dist/preview-engine/renderers-GCQKGJ7W.mjs +0 -1
  373. package/dist/preview-engine/renderers-HZBXLDKG.mjs +0 -1
  374. package/dist/preview-engine/renderers-IOXNQPQK.mjs +0 -1
  375. package/dist/preview-engine/renderers-IR44E4ZZ.mjs +0 -1
  376. package/dist/preview-engine/renderers-JZZ3ODOZ.mjs +0 -1
  377. package/dist/preview-engine/renderers-K37YL3Z7.mjs +0 -1
  378. package/dist/preview-engine/renderers-KUJQV3K6.mjs +0 -1
  379. package/dist/preview-engine/renderers-KXVKLSSX.mjs +0 -1
  380. package/dist/preview-engine/renderers-N4RVFX3G.mjs +0 -1
  381. package/dist/preview-engine/renderers-NZWWEAYA.mjs +0 -1
  382. package/dist/preview-engine/renderers-P4JJEDZB.mjs +0 -1
  383. package/dist/preview-engine/renderers-Q4572F5C.mjs +0 -1
  384. package/dist/preview-engine/renderers-QAX2QWWQ.mjs +0 -1
  385. package/dist/preview-engine/renderers-SRFIEVWL.mjs +0 -1
  386. package/dist/preview-engine/renderers-SYC6WFTM.mjs +0 -1
  387. package/dist/preview-engine/renderers-UH4WN3QN.mjs +0 -1
  388. package/dist/preview-engine/renderers-V4FFCAS7.mjs +0 -1
  389. package/dist/preview-engine/renderers-VGDEOZUU.mjs +0 -1
  390. package/dist/preview-engine/renderers-VJJKBX5K.mjs +0 -1
  391. package/dist/preview-engine/renderers-VJOKVDYW.mjs +0 -1
  392. package/dist/preview-engine/renderers-VUUWZUOH.mjs +0 -1
  393. package/dist/preview-engine/renderers-WOP5GOZP.mjs +0 -1
  394. package/dist/preview-engine/renderers-Y4MGN2FR.mjs +0 -1
  395. package/dist/preview-engine/renderers-YAMYH7IK.mjs +0 -1
  396. package/dist/preview-engine/renderers-ZNLSAWW3.mjs +0 -1
  397. package/dist/renderer-6sNr6ZRJ.mjs +0 -6
  398. package/dist/renderer-BDHGxD6p.mjs +0 -5
  399. package/dist/renderer-BT9dvpk2.mjs +0 -5
  400. package/dist/renderer-BfaRh0qy.mjs +0 -5
  401. package/dist/renderer-BlwXKV7Y.mjs +0 -5
  402. package/dist/renderer-C40yZK3x.mjs +0 -5
  403. package/dist/renderer-C5MjQ7L8.mjs +0 -5
  404. package/dist/renderer-C8LjKYnS.mjs +0 -5
  405. package/dist/renderer-C9q9H_qa.mjs +0 -5
  406. package/dist/renderer-CF9ta9Rm.mjs +0 -5
  407. package/dist/renderer-CO205Gr9.mjs +0 -5
  408. package/dist/renderer-CSm8UXLP.mjs +0 -5
  409. package/dist/renderer-CSy8HRtF.mjs +0 -5
  410. package/dist/renderer-CdNRWDsA.mjs +0 -5
  411. package/dist/renderer-CkAjiGRB.mjs +0 -5
  412. package/dist/renderer-CmryuPBm.mjs +0 -5
  413. package/dist/renderer-CnEwne4L.mjs +0 -5
  414. package/dist/renderer-D4QDoqOG.mjs +0 -5
  415. package/dist/renderer-D7cS2a8z.mjs +0 -5
  416. package/dist/renderer-D85CNC-b.mjs +0 -5
  417. package/dist/renderer-DC9IoJNz.mjs +0 -5
  418. package/dist/renderer-DIDh0gFm.mjs +0 -5
  419. package/dist/renderer-DLmJ9GWE.mjs +0 -5
  420. package/dist/renderer-DM7PUWP9.mjs +0 -5
  421. package/dist/renderer-DPWFDxIO.mjs +0 -5
  422. package/dist/renderer-DUCByhAk.mjs +0 -5
  423. package/dist/renderer-DVOtnCKH.mjs +0 -5
  424. package/dist/renderer-DVrN2bW8.mjs +0 -5
  425. package/dist/renderer-DdOVwfG4.mjs +0 -5
  426. package/dist/renderer-DtCe9ouu.mjs +0 -5
  427. package/dist/renderer-Mg0kr9Fm.mjs +0 -5
  428. package/dist/renderer-T35PsSw5.mjs +0 -5
  429. package/dist/renderer-iSZ5NT-J.mjs +0 -5
  430. package/dist/renderer-nEmMjQ1a.mjs +0 -5
  431. package/dist/renderer-pG1nyfjE.mjs +0 -5
  432. package/dist/renderer-vbb9e3E3.mjs +0 -5
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as renderCloud, t as CloudRenderError } from "./cloud-xcfV4J03.mjs";
2
+ import { c as CONFIG_FILE, d as writeConfig, i as renderCloud, l as findRender, t as CloudRenderError, u as readConfig } from "./cloud-COid1Ipa.mjs";
3
3
  import { t as failedCheck } from "./check-result-Culfu7Nx.mjs";
4
4
  import { createRequire } from "node:module";
5
5
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
@@ -9,34 +9,6 @@ import { fileURLToPath, pathToFileURL } from "node:url";
9
9
  import { spawn } from "node:child_process";
10
10
  import { parseArgs } from "node:util";
11
11
 
12
- //#region src/cli/config.ts
13
- /**
14
- * `framefields.json` at the project root: where installed components live,
15
- * and which fonts `framefields add` / `framefields fonts add` installed.
16
- */
17
- const CONFIG_FILE = "framefields.json";
18
- /** The project's config, or the default it would get: `src/components` when there is a `src`. */
19
- function readConfig(cwd) {
20
- const file = join(cwd, CONFIG_FILE);
21
- if (existsSync(file)) {
22
- const config = JSON.parse(readFileSync(file, "utf8"));
23
- if (typeof config.components !== "string") throw new Error(`${CONFIG_FILE}: "components" must be a directory path`);
24
- if (config.fonts !== void 0 && (typeof config.fonts !== "object" || Object.values(config.fonts).some((v) => typeof v !== "string"))) throw new Error(`${CONFIG_FILE}: "fonts" must map roles to font file paths, e.g. { "emoji": "assets/fonts/NotoColorEmoji.ttf" }`);
25
- return {
26
- config,
27
- saved: true
28
- };
29
- }
30
- return {
31
- config: { components: existsSync(join(cwd, "src")) ? "src/components" : "components" },
32
- saved: false
33
- };
34
- }
35
- function writeConfig(cwd, config) {
36
- writeFileSync(join(cwd, CONFIG_FILE), `${JSON.stringify(config, null, " ")}\n`);
37
- }
38
-
39
- //#endregion
40
12
  //#region src/cli/fonts.ts
41
13
  /**
42
14
  * Fonts the CLI installs into a project: a catalog of pinned files (URL,
@@ -308,7 +280,10 @@ async function add(names, options) {
308
280
  report.written.push(shown);
309
281
  }
310
282
  if (!saved) {
311
- writeConfig(cwd, { components: relative(cwd, dir) || "." });
283
+ writeConfig(cwd, {
284
+ ...config,
285
+ components: relative(cwd, dir) || "."
286
+ });
312
287
  report.configWritten = true;
313
288
  }
314
289
  const needs = /* @__PURE__ */ new Map();
@@ -344,11 +319,6 @@ async function add(names, options) {
344
319
  //#endregion
345
320
  //#region src/cli/templates.ts
346
321
  /**
347
- * The files `framefields init` writes: the project layout the framefields
348
- * setup skill describes. `film.ts` only builds; `render.ts` renders frames,
349
- * a grid, the live preview or the video; `theme.ts` holds the numbers.
350
- */
351
- /**
352
322
  * Packages with install scripts. framefields needs exactly one (skia-canvas
353
323
  * downloads its native binary); the others work without theirs.
354
324
  */
@@ -369,14 +339,24 @@ const DEV_DEPENDENCIES = {
369
339
  };
370
340
  const SCRIPTS = {
371
341
  typecheck: "tsc --noEmit -p .",
372
- check: "tsc --noEmit -p . && framefields check src/film.ts --json",
373
- "check:render": "tsc --noEmit -p . && framefields check src/film.ts --render --json",
342
+ check: "tsc --noEmit -p . && framefields check film --json",
343
+ "check:render": "tsc --noEmit -p . && framefields check film --render --json",
374
344
  frames: "tsx src/render.ts frames",
375
345
  grid: "tsx src/render.ts grid",
376
346
  preview: "tsx src/render.ts preview",
377
347
  render: "tsx src/render.ts",
378
- "render:cloud": "framefields render src/film.ts --cloud --workers auto"
348
+ "render:cloud": "framefields render film --cloud"
379
349
  };
350
+ /** The named render `init` records in framefields.json. */
351
+ function defaultRenders(name) {
352
+ return { film: {
353
+ title: name,
354
+ entry: "src/film.ts",
355
+ export: "buildFilm",
356
+ workers: "auto",
357
+ output: "output/film.mp4"
358
+ } };
359
+ }
380
360
  /**
381
361
  * The `package.json` fields a framefields project needs. npm reads
382
362
  * `allowScripts`, pnpm its `pnpm` block, bun `trustedDependencies`.
@@ -575,6 +555,9 @@ ${run("render")} # output/output.mp4
575
555
  ${run("render:cloud")} # on cloud GPUs, from the pushed commit
576
556
  \`\`\`
577
557
 
558
+ - \`framefields.json\` names the renders: \`film\` is \`buildFilm\` in \`src/film.ts\`. Add an
559
+ entry under \`renders\` for each cut (a teaser, a vertical edit) and render or check it by
560
+ name: \`npx framefields render teaser --cloud\`, \`npx framefields check teaser\`.
578
561
  - \`src/film.ts\` builds the composition, \`src/theme.ts\` holds sizes, colors and fonts,
579
562
  \`src/render.ts\` renders it.
580
563
  - \`npx framefields list\` shows ready-made components; \`npx framefields add <name>\` copies
@@ -687,10 +670,14 @@ async function init(options) {
687
670
  }
688
671
  }
689
672
  for (const [path$1, lines] of [[".gitignore", GITIGNORE], [".gitattributes", GITATTRIBUTES]]) record(report, path$1, appendLines(join(root, path$1), lines));
673
+ const configExisted = existsSync(join(root, CONFIG_FILE));
690
674
  const { config, saved } = readConfig(root);
691
- if (!saved) {
692
- writeConfig(root, config);
693
- report.written.push("framefields.json");
675
+ if (!saved || !config.renders) {
676
+ writeConfig(root, {
677
+ ...config,
678
+ renders: config.renders ?? defaultRenders(basename(root))
679
+ });
680
+ record(report, CONFIG_FILE, configExisted || "written");
694
681
  }
695
682
  const installFonts = options.fonts !== false;
696
683
  const installEmoji = options.emoji ?? installFonts;
@@ -872,14 +859,17 @@ function isCheckReport(value) {
872
859
  //#endregion
873
860
  //#region src/cli/cloud.ts
874
861
  /**
875
- * `framefields render <entry> --cloud`: renders the project on
876
- * api.framefields.dev and downloads the video. Prints one plain line per
877
- * phase, and a progress line at most every 10 seconds while frames render.
862
+ * `framefields render <name|entry> --cloud`: renders the project on
863
+ * api.framefields.dev and downloads the video. `name` is a render in
864
+ * framefields.json; a module path renders without one. Prints one plain
865
+ * line per phase, and a progress line at most every 10 seconds while
866
+ * frames render.
878
867
  */
879
868
  const PROGRESS_EVERY_MS = 1e4;
880
869
  async function runCloudRender(o, log, render = renderCloud) {
870
+ const cwd = o.cwd ?? process.cwd();
881
871
  const workers = parseWorkers(o.workers);
882
- if (workers === void 0) {
872
+ if (workers === null) {
883
873
  log(`--workers must be "auto" or a positive whole number, not "${o.workers}".`);
884
874
  return 2;
885
875
  }
@@ -887,8 +877,15 @@ async function runCloudRender(o, log, render = renderCloud) {
887
877
  log(`--codec must be h264 or vp9, not "${o.codec}".`);
888
878
  return 2;
889
879
  }
890
- const codec = o.codec ?? "h264";
891
- const outputPath = o.output ?? path.join("output", `${path.basename(o.entry).replace(/\.[^.]+$/, "")}.${codec === "vp9" ? "webm" : "mp4"}`);
880
+ const target = pickRender(o.entry, cwd);
881
+ if ("error" in target) {
882
+ log(target.error);
883
+ return 2;
884
+ }
885
+ const spec = target.name ? findRender(cwd, target.name) : void 0;
886
+ const codec = o.codec ?? spec?.codec ?? "h264";
887
+ const outputPath = o.output ?? spec?.output ?? path.join("output", `${target.name ?? path.basename(target.entry ?? "").replace(/\.[^.]+$/, "")}.${codec === "vp9" ? "webm" : "mp4"}`);
888
+ const planWorkers = o.plan && (workers ?? spec?.workers ?? 1) === 1 ? "auto" : workers;
892
889
  const controller = new AbortController();
893
890
  const onSigint = () => {
894
891
  log("Cancelling the cloud render…");
@@ -899,12 +896,14 @@ async function runCloudRender(o, log, render = renderCloud) {
899
896
  const narrate = narrator(o.json ? () => {} : log, Date.now);
900
897
  try {
901
898
  const result = await render({
902
- entry: o.entry,
899
+ cwd,
900
+ render: target.name,
901
+ entry: target.entry,
903
902
  export: o.export,
904
903
  select: o.select,
905
- workers: o.plan && workers === 1 ? "auto" : workers,
904
+ workers: planWorkers,
906
905
  maxWorkers: o.maxWorkers ? Number(o.maxWorkers) : void 0,
907
- codec,
906
+ codec: o.codec,
908
907
  quality: o.quality,
909
908
  dryRun: o.plan,
910
909
  outputPath: o.plan ? void 0 : outputPath,
@@ -917,7 +916,12 @@ async function runCloudRender(o, log, render = renderCloud) {
917
916
  return 0;
918
917
  }
919
918
  if (result.status === "planned") {
920
- log(`Render it: framefields render ${o.entry} --cloud --workers ${o.workers ?? "auto"}`);
919
+ const planned = planWorkers === "auto" && spec?.workers !== "auto";
920
+ log(`Render it: ${renderCommand({
921
+ ...o,
922
+ entry: target.name ?? target.entry,
923
+ workers: o.workers ?? (planned ? "auto" : void 0)
924
+ })}`);
921
925
  return 0;
922
926
  }
923
927
  const bytes = result.output?.bytes;
@@ -935,11 +939,40 @@ async function runCloudRender(o, log, render = renderCloud) {
935
939
  process.removeListener("SIGINT", onSigint);
936
940
  }
937
941
  }
942
+ /** The command that renders what `--plan` just planned: the same options, without `--plan`. */
943
+ function renderCommand(o) {
944
+ const flags = [
945
+ ["--export", o.export],
946
+ ["--select", o.select],
947
+ ["--workers", o.workers],
948
+ ["--max-workers", o.maxWorkers],
949
+ ["--codec", o.codec],
950
+ ["--quality", o.quality],
951
+ ["--output", o.output]
952
+ ];
953
+ return [`framefields render ${o.entry ?? ""} --cloud`.replace(" ", " "), ...flags.filter(([, v]) => v !== void 0).map(([f, v]) => `${f} ${v}`)].join(" ");
954
+ }
955
+ /**
956
+ * What `framefields render [arg]` renders: a render named in framefields.json,
957
+ * or a module path; with no argument, the project's only named render.
958
+ */
959
+ function pickRender(arg, cwd) {
960
+ const renders = readConfig(cwd).config.renders ?? {};
961
+ const names = Object.keys(renders);
962
+ if (arg === void 0) {
963
+ if (names.length === 1) return { name: names[0] };
964
+ return { error: names.length ? `Name the render: ${names.join(", ")}. \`framefields renders\` lists them.` : `Name a module, e.g. \`framefields render src/film.ts --cloud\`, or add "renders" to ${CONFIG_FILE}.` };
965
+ }
966
+ if (renders[arg]) return { name: arg };
967
+ if (existsSync(path.resolve(cwd, arg))) return { entry: arg };
968
+ return { error: names.length ? `"${arg}" is neither a render in ${CONFIG_FILE} (${names.join(", ")}) nor a file.` : `"${arg}" is not a file, and ${CONFIG_FILE} names no renders.` };
969
+ }
970
+ /** --workers: undefined when not given, null when invalid. */
938
971
  function parseWorkers(value) {
939
- if (value === void 0) return 1;
972
+ if (value === void 0) return void 0;
940
973
  if (value === "auto") return "auto";
941
974
  const n = Number(value);
942
- return Number.isInteger(n) && n >= 1 ? n : void 0;
975
+ return Number.isInteger(n) && n >= 1 ? n : null;
943
976
  }
944
977
  /** Turns status polls into log lines: one per phase, throttled frame progress. */
945
978
  function narrator(log, now) {
@@ -1044,14 +1077,18 @@ function openRegistry(source, cwd = process.cwd()) {
1044
1077
  * npx framefields list the components you can add
1045
1078
  * npx framefields fonts add <role...> install fonts (emoji)
1046
1079
  * npx framefields fonts list the fonts you can install
1047
- * npx framefields render <entry> --cloud render on api.framefields.dev
1080
+ * npx framefields renders the renders named in framefields.json
1081
+ * npx framefields render <name> --cloud render on api.framefields.dev
1048
1082
  */
1049
1083
  const HELP = `Usage: framefields <command> [options]
1050
1084
 
1051
1085
  Commands:
1052
1086
  api JSON reference generated from timing, grid and check types.
1053
- check <entry> Build, validate and lint a composition; --render also writes a
1054
- representative frame and grid. --export defaults to buildFilm.
1087
+ check [name|entry]
1088
+ Build, validate and lint a composition; --render also writes a
1089
+ representative frame and grid. A render named in
1090
+ framefields.json, or a module (--export defaults to
1091
+ buildFilm); with neither, every named render.
1055
1092
  init [dir] Start a framefields project in dir (default: here), or add
1056
1093
  framefields to the project there: package.json, tsconfig,
1057
1094
  src/theme.ts, film.ts, render.ts, assets/, .gitignore,
@@ -1064,10 +1101,14 @@ Commands:
1064
1101
  Install fonts (pinned, hash-checked, with their license)
1065
1102
  and register them in the generated <components>/fonts.ts.
1066
1103
  fonts list List the fonts you can install.
1067
- render <entry> --cloud
1104
+ renders List the renders named in framefields.json.
1105
+ render [name|entry] --cloud
1068
1106
  Render on api.framefields.dev from the pushed commit of
1069
1107
  this git repo, and download the video. Needs
1070
- FRAMEFIELDS_API_KEY. --export defaults to buildFilm.
1108
+ FRAMEFIELDS_API_KEY. A render named in framefields.json
1109
+ (its fields are the defaults; flags override them), or a
1110
+ module (--export defaults to buildFilm). Without either,
1111
+ the project's only named render.
1071
1112
 
1072
1113
  Options for check:
1073
1114
  --export <name> Composition or builder export (default buildFilm).
@@ -1084,7 +1125,7 @@ Options for render --cloud:
1084
1125
  --max-workers <n> Upper bound for auto.
1085
1126
  --plan Measure and plan only: prints workers, time and the
1086
1127
  estimated cost, renders nothing.
1087
- --output <file> Where the video goes (default output/<entry>.mp4).
1128
+ --output <file> Where the video goes (default output/<name>.mp4).
1088
1129
  --codec <codec> h264 (default) or vp9.
1089
1130
  --quality <q> very_low, low, high or very_high (default).
1090
1131
  --select <name> When the export returns several compositions.
@@ -1118,7 +1159,7 @@ Examples:
1118
1159
  npx framefields init my-film --install
1119
1160
  npx framefields add mouse-pointer focus-zoom
1120
1161
  npx framefields fonts add emoji
1121
- npx framefields render src/film.ts --cloud --workers auto --plan
1162
+ npx framefields render film --cloud --plan
1122
1163
  `;
1123
1164
  async function main(argv) {
1124
1165
  const { values, positionals } = parseArgs({
@@ -1171,30 +1212,11 @@ async function main(argv) {
1171
1212
  }));
1172
1213
  return 0;
1173
1214
  }
1174
- if (command === "check") {
1175
- if (names.length !== 1) {
1176
- process.stderr.write("Usage: framefields check <entry> [--export buildFilm] [--render] [--json]\n");
1177
- return 2;
1178
- }
1179
- const report$1 = await runCheck({
1180
- entry: names[0],
1181
- exportName: values.export,
1182
- render: values.render,
1183
- outputDir: values.output,
1184
- timeoutMs: values.timeout === void 0 ? void 0 : Number(values.timeout),
1185
- warningsAsErrors: values["warnings-as-errors"]
1186
- });
1187
- if (values.json) log(JSON.stringify(report$1));
1188
- else {
1189
- log(`Check ${report$1.status}: ${report$1.entry} (${report$1.exportName})`);
1190
- for (const d of report$1.diagnostics) log(`${d.severity} ${d.code}${d.path ? ` at ${d.path}` : ""}: ${d.message}`);
1191
- for (const file of report$1.artifacts) log(`Wrote ${file}`);
1192
- }
1193
- return report$1.status === "passed" ? 0 : 1;
1194
- }
1215
+ if (command === "check") return check(names, cwd, values, log);
1216
+ if (command === "renders") return listRenders(cwd, values.json, log);
1195
1217
  if (command === "render") {
1196
- if (names.length !== 1 || !values.cloud) {
1197
- process.stderr.write("Usage: framefields render <entry> --cloud [--workers auto] [--plan]\nLocal renders run your project's render script (`npm run render`).\n");
1218
+ if (names.length > 1 || !values.cloud) {
1219
+ process.stderr.write("Usage: framefields render [name|entry] --cloud [--workers auto] [--plan]\nLocal renders run your project's render script (`npm run render`).\n");
1198
1220
  return 2;
1199
1221
  }
1200
1222
  return runCloudRender({
@@ -1284,6 +1306,75 @@ async function main(argv) {
1284
1306
  }
1285
1307
  const onDownload = (spec) => process.stdout.write(` fetching ${spec.file} (${(spec.font.bytes / 1e6).toFixed(1)} MB, ${spec.license.id})\n`);
1286
1308
  /** What `add` did about fonts, and how to use them. */
1309
+ /** `check [name|entry]`: a named render, a module, or every named render. */
1310
+ async function check(names, cwd, values, log) {
1311
+ const renders = readConfig(cwd).config.renders ?? {};
1312
+ const usage = () => {
1313
+ process.stderr.write("Usage: framefields check [name|entry] [--export buildFilm] [--render] [--json]\n");
1314
+ return 2;
1315
+ };
1316
+ if (names.length > 1) return usage();
1317
+ const targets = names.length === 0 ? Object.entries(renders).map(([name, spec]) => ({
1318
+ name,
1319
+ entry: spec.entry,
1320
+ exportName: spec.export
1321
+ })) : renders[names[0]] ? [{
1322
+ name: names[0],
1323
+ entry: renders[names[0]].entry,
1324
+ exportName: values.export ?? renders[names[0]].export
1325
+ }] : [{
1326
+ entry: names[0],
1327
+ exportName: values.export
1328
+ }];
1329
+ if (targets.length === 0) return usage();
1330
+ const reports = [];
1331
+ for (const t of targets) {
1332
+ const report = await runCheck({
1333
+ entry: t.entry,
1334
+ exportName: t.exportName,
1335
+ render: values.render,
1336
+ outputDir: values.output ?? (targets.length > 1 ? join("output", "check", t.name ?? "") : void 0),
1337
+ timeoutMs: values.timeout === void 0 ? void 0 : Number(values.timeout),
1338
+ warningsAsErrors: values["warnings-as-errors"]
1339
+ });
1340
+ reports.push({
1341
+ ...t.name && { name: t.name },
1342
+ ...report
1343
+ });
1344
+ if (values.json) continue;
1345
+ log(`Check ${report.status}: ${t.name ? `${t.name} (${t.entry}, ${report.exportName})` : `${report.entry} (${report.exportName})`}`);
1346
+ for (const d of report.diagnostics) log(`${d.severity} ${d.code}${d.path ? ` at ${d.path}` : ""}: ${d.message}`);
1347
+ for (const file of report.artifacts) log(`Wrote ${file}`);
1348
+ }
1349
+ const passed = reports.every((r) => r.status === "passed");
1350
+ if (values.json) log(JSON.stringify(names.length === 0 ? {
1351
+ status: passed ? "passed" : "failed",
1352
+ checks: reports
1353
+ } : reports[0]));
1354
+ return passed ? 0 : 1;
1355
+ }
1356
+ /** `renders`: what framefields.json names, as the dashboard shows it. */
1357
+ function listRenders(cwd, json, log) {
1358
+ const renders = readConfig(cwd).config.renders ?? {};
1359
+ if (json) {
1360
+ log(JSON.stringify({
1361
+ schemaVersion: 1,
1362
+ renders
1363
+ }));
1364
+ return 0;
1365
+ }
1366
+ const entries = Object.entries(renders);
1367
+ if (entries.length === 0) {
1368
+ log("framefields.json names no renders. Add one: \"renders\": { \"film\": { \"entry\": \"src/film.ts\", \"export\": \"buildFilm\" } }");
1369
+ return 0;
1370
+ }
1371
+ for (const [name, spec] of entries) {
1372
+ const title = spec.title && spec.title !== name ? ` ${spec.title}` : "";
1373
+ const opts = [spec.workers !== void 0 && `workers ${spec.workers}`, spec.codec].filter(Boolean);
1374
+ log(`${name}${title}\n ${spec.entry} · ${spec.export ?? "buildFilm"}${spec.select ? ` · ${spec.select}` : ""}${opts.length ? ` · ${opts.join(", ")}` : ""}${spec.description ? `\n ${spec.description}` : ""}`);
1375
+ }
1376
+ return 0;
1377
+ }
1287
1378
  function logFonts(report, cwd, log) {
1288
1379
  for (const f of report.fonts) log(` ${f.status === "installed" ? "font " : "font ok "} ${f.path} (${f.role}, for ${f.by}: ${f.why})`);
1289
1380
  for (const f of report.fontsSkipped) log(` no font ${f.role} for ${f.by} (--no-fonts): ${f.why} Install later with \`framefields fonts add ${f.role}\`.`);