hyperframes 0.8.151 → 0.8.153

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 (169) hide show
  1. package/dist/{add-QKZZG7A2.js → add-D7GZM6ZS.js} +14 -14
  2. package/dist/{animatedGifPrep-YQDPYGOD.js → animatedGifPrep-IBLDIJXC.js} +9 -9
  3. package/dist/api.js +15 -15
  4. package/dist/{asset-3Q737Y4H.js → asset-ACZRQU2Z.js} +2 -2
  5. package/dist/{assetCataloger-BTHEBJJB.js → assetCataloger-Y3OELLLW.js} +4 -4
  6. package/dist/{auth-XL7EU3SO.js → auth-LFWML3XJ.js} +1 -1
  7. package/dist/{autoUpdate-PJFLTQ3U.js → autoUpdate-7IUGQXOV.js} +2 -2
  8. package/dist/{backgroundChecks-T5TIR5WK.js → backgroundChecks-XI364BNX.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-NFLVIDB4.js → batchRender-6TD4XSIP.js} +5 -5
  11. package/dist/{beats-JU4GZ26R.js → beats-FZGQ3HLR.js} +14 -14
  12. package/dist/{benchmark-7U2YWLTW.js → benchmark-3YEKSYMP.js} +10 -10
  13. package/dist/{browser-D57UPYDA.js → browser-R5PKLYZD.js} +3 -3
  14. package/dist/{bundleWithLocalizedFonts-26MXQOZG.js → bundleWithLocalizedFonts-QX5HV7LC.js} +2 -2
  15. package/dist/{capture-LT252COQ.js → capture-MTHXUEC2.js} +19 -19
  16. package/dist/{capture-47BV25G3.js → capture-R7QSBEPW.js} +2 -2
  17. package/dist/{catalog-BEZXOV4O.js → catalog-K2TRGCXO.js} +14 -14
  18. package/dist/{catch-up-KVV5X6BF.js → catch-up-WCSN4K4A.js} +4 -4
  19. package/dist/{check-6KQ433E6.js → check-N4EFKWC3.js} +294 -66
  20. package/dist/{checkBrowser-PRDR6XBY.js → checkBrowser-73SOMDG3.js} +75 -45
  21. package/dist/{chunk-IZPN423R.js → chunk-2F6LWCSF.js} +11 -6
  22. package/dist/{chunk-TCWMDCBX.js → chunk-2X3UJ4Q3.js} +2 -2
  23. package/dist/{chunk-YZTVHRJ2.js → chunk-2XEBNYG5.js} +1 -1
  24. package/dist/chunk-3DMR7RF6.js +24 -0
  25. package/dist/{chunk-APDLWWFG.js → chunk-3VGU2SH7.js} +1 -1
  26. package/dist/{chunk-OZ4K46OV.js → chunk-4IRCZWND.js} +2 -2
  27. package/dist/{chunk-4PKQEKAI.js → chunk-4OVLWS2K.js} +2 -2
  28. package/dist/{chunk-DHPFXAUF.js → chunk-57GN6KWT.js} +17 -3
  29. package/dist/{chunk-374QQGBQ.js → chunk-5CS4T6C6.js} +63 -12
  30. package/dist/{chunk-FLVI7FHU.js → chunk-5DD45SJZ.js} +1 -1
  31. package/dist/{chunk-BRF3O35X.js → chunk-5FS4HCHN.js} +109 -31
  32. package/dist/{chunk-DIOBKUBV.js → chunk-5OKZRXLT.js} +2 -2
  33. package/dist/{chunk-POEEDPJI.js → chunk-5ZGSN5YK.js} +1 -1
  34. package/dist/{chunk-FJWEYVEM.js → chunk-7FYFEXD2.js} +658 -198
  35. package/dist/{chunk-L3N7RJHS.js → chunk-7NKLNOHW.js} +3 -3
  36. package/dist/{chunk-O3DUX6P2.js → chunk-AA67UBB2.js} +4 -4
  37. package/dist/{chunk-IZ7L6V76.js → chunk-AUK5QCRH.js} +1 -1
  38. package/dist/{chunk-YEBKEWKB.js → chunk-BD3XH4A7.js} +1 -1
  39. package/dist/{chunk-XXPYZBZ3.js → chunk-C6TPGUWD.js} +2 -2
  40. package/dist/{chunk-ZD3RDNZI.js → chunk-CBMZYOWC.js} +1 -1
  41. package/dist/{chunk-ZGCRVM5M.js → chunk-DAKXCEE3.js} +4 -4
  42. package/dist/{chunk-AIJS74LG.js → chunk-FFDC5OWV.js} +8 -2
  43. package/dist/{chunk-DMKI64EZ.js → chunk-FSZAFCU7.js} +1 -1
  44. package/dist/{chunk-OSAH7S5M.js → chunk-FZC4UM4G.js} +1 -1
  45. package/dist/{chunk-QBYHNRHU.js → chunk-GV7I3ZSQ.js} +2 -2
  46. package/dist/{chunk-N3I6RAOR.js → chunk-GXPD7J53.js} +11 -11
  47. package/dist/{chunk-N4IXP3MY.js → chunk-HGAOO43L.js} +3 -3
  48. package/dist/{chunk-QF7AE3DB.js → chunk-J5LEAKUA.js} +1 -1
  49. package/dist/{chunk-PUIELIFA.js → chunk-JBUIS5DN.js} +1 -1
  50. package/dist/{chunk-KXX6NLOT.js → chunk-JQ57FAYN.js} +1 -1
  51. package/dist/{chunk-RRBKEHST.js → chunk-KFBEMIMD.js} +54 -6
  52. package/dist/{chunk-RYL6ZIJP.js → chunk-OIONMNWN.js} +18 -11
  53. package/dist/{chunk-KQGWP4KH.js → chunk-OSASJLU4.js} +1 -1
  54. package/dist/{chunk-3ZPFRDEJ.js → chunk-PVGDU7SE.js} +4 -4
  55. package/dist/{chunk-XGLNQDLN.js → chunk-PXOFFSO3.js} +1 -1
  56. package/dist/{chunk-IP73NMQT.js → chunk-QBFHVMOI.js} +10 -10
  57. package/dist/{chunk-IPDS2SWI.js → chunk-R6WCSVCE.js} +1 -1
  58. package/dist/{chunk-XYHBVSWD.js → chunk-RCWSM7IQ.js} +2 -2
  59. package/dist/{chunk-4YZYYP7V.js → chunk-SUVIGBHS.js} +3 -3
  60. package/dist/{chunk-L6RIMCMG.js → chunk-T2Y2WC5I.js} +3 -3
  61. package/dist/{chunk-QLGBNGXC.js → chunk-TCJM3KF2.js} +2 -2
  62. package/dist/{chunk-XKKBIFE5.js → chunk-TQUTAWUR.js} +7 -7
  63. package/dist/{chunk-HVXRYMGQ.js → chunk-TXWPPBIW.js} +1 -1
  64. package/dist/{chunk-2PSPARWP.js → chunk-TYXH3EKP.js} +4 -0
  65. package/dist/{chunk-FMNVTKX2.js → chunk-U3BCDVZO.js} +1 -1
  66. package/dist/{chunk-RJRGR5KF.js → chunk-UNOALNYO.js} +9 -9
  67. package/dist/{chunk-3SVC7SW4.js → chunk-V6UUZGP6.js} +7 -3
  68. package/dist/{chunk-LFNQDTSH.js → chunk-VYKPBRCB.js} +63 -12
  69. package/dist/{chunk-S22FKF6G.js → chunk-WNCGJFTZ.js} +2 -2
  70. package/dist/{chunk-XNDXENJQ.js → chunk-WQMTHPTK.js} +3 -3
  71. package/dist/{chunk-4LE27ST4.js → chunk-XQYLUY2F.js} +2 -2
  72. package/dist/chunk-XSEGMQYA.js +30 -0
  73. package/dist/{chunk-35PWWBGZ.js → chunk-YI6OBVWQ.js} +1 -1
  74. package/dist/{chunk-GNTVYF7E.js → chunk-YOEGUBBY.js} +5 -5
  75. package/dist/{chunk-FAIYEIZ4.js → chunk-YYMJEQ4D.js} +1 -1
  76. package/dist/{chunk-LKQS72D5.js → chunk-Z6CSYA7U.js} +1 -1
  77. package/dist/{chunk-XQKVEQNY.js → chunk-ZDEEHQ2Y.js} +2 -2
  78. package/dist/chunk-ZQMYD22O.js +215 -0
  79. package/dist/{clean-RLTHFTQA.js → clean-TLMZ6GVY.js} +52 -31
  80. package/dist/cli.js +53 -53
  81. package/dist/{cloud-Q5TGBTW3.js → cloud-XFIRM6YE.js} +4 -4
  82. package/dist/{cloudrun-4UZF74MV.js → cloudrun-OUGI5NN4.js} +6 -6
  83. package/dist/{compare-Q5UNR2V4.js → compare-OKSXYO3L.js} +30 -30
  84. package/dist/{compiler-ZXT27Z62.js → compiler-WHUQZITN.js} +6 -6
  85. package/dist/{component-H734P32V.js → component-3II4YXAD.js} +3 -3
  86. package/dist/{compositions-YEHDSTDR.js → compositions-RL75WQS6.js} +13 -13
  87. package/dist/{delete-LDBMPWRT.js → delete-4FM24SJ2.js} +2 -2
  88. package/dist/{deterministicFonts-C5JQLCTS.js → deterministicFonts-EOMDR6ZF.js} +3 -3
  89. package/dist/{dist-RGE4QASU.js → dist-2YYJYYPY.js} +3 -3
  90. package/dist/{dist-7JXLFD6U.js → dist-NUSNSGME.js} +4 -4
  91. package/dist/{doctor-XNJFIWJ7.js → doctor-Q5WYRIVP.js} +11 -11
  92. package/dist/{events-G6UFLNXR.js → events-CPZTSXAX.js} +2 -2
  93. package/dist/{events-UKCPUWMH.js → events-J5VJAKGT.js} +3 -3
  94. package/dist/{feedback-CK3KZ7DE.js → feedback-U64DIKAF.js} +8 -8
  95. package/dist/{figma-3D5C737B.js → figma-GUHWRHJO.js} +3 -3
  96. package/dist/fontLocalizeCli.js +12 -12
  97. package/dist/{get-QGTQUWFT.js → get-XDQJPF7G.js} +2 -2
  98. package/dist/{gpuPolicy-G5QAQDYF.js → gpuPolicy-7SIPG5BM.js} +9 -9
  99. package/dist/{grade-compare-XIHOM62P.js → grade-compare-WWW2F3NY.js} +30 -30
  100. package/dist/{gsapParserAcorn-VXZ3ZIF2.js → gsapParserAcorn-7NCK2LVT.js} +2 -2
  101. package/dist/{help-U5UBXT52.js → help-3UJYI7LC.js} +1 -1
  102. package/dist/{history-5J73QZSA.js → history-VQSM5L6N.js} +77 -205
  103. package/dist/hyperframe-runtime.js +4 -0
  104. package/dist/hyperframe.manifest.json +1 -1
  105. package/dist/hyperframe.runtime.iife.js +4 -0
  106. package/dist/hyperframes-player.global.js +1 -1
  107. package/dist/{info-RJHQQQUP.js → info-NMDUH7N5.js} +9 -9
  108. package/dist/{init-M6UQOYYC.js → init-D753VPPZ.js} +24 -24
  109. package/dist/{inspect-PRQWDBTP.js → inspect-KEE27DQN.js} +31 -31
  110. package/dist/{installer-ZL7UKYK5.js → installer-QCHUXV6E.js} +7 -7
  111. package/dist/{keyframes-VMUJYTCQ.js → keyframes-EP44YDZW.js} +227 -82
  112. package/dist/{lambda-ON42DRQD.js → lambda-Q5FTNY4J.js} +7 -7
  113. package/dist/{layout-QKBFVDVY.js → layout-LATG5CZV.js} +31 -31
  114. package/dist/{lint-ZQHHL2SV.js → lint-TQDQFJKW.js} +9 -9
  115. package/dist/{lintProject-3Z6OJCSO.js → lintProject-XQWXJYSC.js} +3 -3
  116. package/dist/{list-YBRKIWGF.js → list-O44ENRGS.js} +2 -2
  117. package/dist/{login-4B2YXGLB.js → login-EKFN5PZP.js} +4 -4
  118. package/dist/{media-treatment-5C5EJAAP.js → media-treatment-LPT4GYAE.js} +12 -12
  119. package/dist/{models-R7ZDWBJ6.js → models-CRYHY4KH.js} +12 -12
  120. package/dist/{motionShot-ZHESZNUL.js → motionShot-BS3DB666.js} +28 -15
  121. package/dist/{normalize-audio-EVWZVTBM.js → normalize-audio-7X445LLJ.js} +6 -6
  122. package/dist/{open-TV6HT4UT.js → open-JA7FN5F5.js} +4 -4
  123. package/dist/{parakeetRunner-YVVF4CG6.js → parakeetRunner-AFUTDANA.js} +12 -12
  124. package/dist/{pipeline-ETR5SEBS.js → pipeline-3TQHAQOJ.js} +9 -9
  125. package/dist/{play-C6WONRZV.js → play-UUJAXFCJ.js} +24 -24
  126. package/dist/{present-RANXTVPA.js → present-EBP6YMCJ.js} +20 -20
  127. package/dist/{preview-KF6UMBT2.js → preview-PVJDLZDU.js} +19 -19
  128. package/dist/{producer-CY2GXBWN.js → producer-HE23BPEU.js} +1 -1
  129. package/dist/{projectConfig-KPXCNMBM.js → projectConfig-EX35BZLA.js} +9 -9
  130. package/dist/{publication-Y36N4A7E.js → publication-OUGS3P7W.js} +4 -4
  131. package/dist/{publish-RCQJO35C.js → publish-UUFZR6QT.js} +12 -12
  132. package/dist/{remove-background-3ZMXVWLB.js → remove-background-P5M42CA5.js} +10 -10
  133. package/dist/{render-WUSTRMUD.js → render-AWFQGD4T.js} +5 -5
  134. package/dist/{render-PTNEFO5U.js → render-BJMONGDL.js} +10 -10
  135. package/dist/{render-FKVRCDT2.js → render-YSD2SRBL.js} +57 -22
  136. package/dist/{render-batch-AQHU2JWZ.js → render-batch-6UN3HT5A.js} +5 -5
  137. package/dist/renderSetupWorker.js +3 -3
  138. package/dist/{resolver-L5BDZJKU.js → resolver-O6ZENVYP.js} +6 -6
  139. package/dist/{sherpa-3S3ISG7G.js → sherpa-RWHRDO53.js} +11 -11
  140. package/dist/skills/hyperframes-cli/SKILL.md +3 -0
  141. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +5 -1
  142. package/dist/{skills-X4WQEKNF.js → skills-KC6IGXDU.js} +5 -5
  143. package/dist/{skillsUpdateCheck-UYCVHDZ6.js → skillsUpdateCheck-7C4TD7EL.js} +3 -3
  144. package/dist/{snapshot-YEYHQEZQ.js → snapshot-SNZL5GPC.js} +118 -41
  145. package/dist/{src-OLBDPEG6.js → src-KKS6QEHB.js} +11 -11
  146. package/dist/{src-2NN2WB6X.js → src-YMUDUVXQ.js} +8 -8
  147. package/dist/{staticProjectServer-7H35NMWB.js → staticProjectServer-XOCIQ3FV.js} +20 -20
  148. package/dist/studio/assets/{hyperframes-player-DJt8E7k4.js → hyperframes-player-Cn6V2ZaK.js} +1 -1
  149. package/dist/studio/assets/{index-DgbLblGR.js → index-CEGNvZnK.js} +1 -1
  150. package/dist/studio/assets/{index-DWIHrAY2.js → index-CaaXbGyk.js} +1 -1
  151. package/dist/studio/assets/{index-BGks9KLI.js → index-Cwpnr4DV.js} +132 -132
  152. package/dist/studio/index.html +1 -1
  153. package/dist/{studio-api-HGM2A5I3.js → studio-api-NUNUZQ5I.js} +30 -16
  154. package/dist/{studioServer-M6XFL7N6.js → studioServer-FBY3YWZH.js} +43 -43
  155. package/dist/{synthesize-22B7L5GX.js → synthesize-W2M7QGDV.js} +6 -5
  156. package/dist/{telemetry-KVCZKVTE.js → telemetry-KNSTX3E2.js} +3 -3
  157. package/dist/{timeline-VYYKZR4V.js → timeline-6I5LGPP6.js} +20 -20
  158. package/dist/{tokens-B5NFFL55.js → tokens-MY4GOQ53.js} +2 -2
  159. package/dist/{transcribe-SBETOIWI.js → transcribe-56WECC4Y.js} +10 -10
  160. package/dist/{transcribe-WNFRYZAC.js → transcribe-ISCPZLQZ.js} +16 -16
  161. package/dist/{tts-QSAQZVEZ.js → tts-RE227GFP.js} +1 -1
  162. package/dist/{updateCheck-5MM2DFUC.js → updateCheck-FAG4T4AV.js} +2 -2
  163. package/dist/{upgrade-LWID54R3.js → upgrade-5QCPW55B.js} +2 -2
  164. package/dist/{urlDownloader-CVLNXFDG.js → urlDownloader-FGSJGUM7.js} +8 -8
  165. package/dist/{validate-V4CGQ6OF.js → validate-WC3FUSUF.js} +25 -25
  166. package/dist/{video-VJB2KRSS.js → video-DOFSWSSR.js} +9 -9
  167. package/package.json +1 -1
  168. package/dist/chunk-WBLXWOYK.js +0 -15
  169. package/dist/{screenshotCapture-TEUIWXWN.js → screenshotCapture-3JXXUZND.js} +3 -3
@@ -8,19 +8,20 @@ import {
8
8
  auditClipDurations,
9
9
  shouldIgnoreHttpError,
10
10
  shouldIgnoreRequestFailure
11
- } from "./chunk-IP73NMQT.js";
11
+ } from "./chunk-QBFHVMOI.js";
12
12
  import {
13
+ checkSnapshotDirectory,
13
14
  rectToBbox
14
- } from "./chunk-WBLXWOYK.js";
15
+ } from "./chunk-XSEGMQYA.js";
15
16
  import {
16
17
  ambiguousIssue,
17
18
  loadBrowserScript
18
- } from "./chunk-RJRGR5KF.js";
19
+ } from "./chunk-UNOALNYO.js";
19
20
  import {
20
21
  serveStaticProjectHtml
21
- } from "./chunk-L3N7RJHS.js";
22
+ } from "./chunk-7NKLNOHW.js";
22
23
  import "./chunk-XUHOIDKG.js";
23
- import "./chunk-QLGBNGXC.js";
24
+ import "./chunk-TCJM3KF2.js";
24
25
  import "./chunk-X7MTZ4T2.js";
25
26
  import {
26
27
  AUDIT_SEEK_OPTIONS,
@@ -33,42 +34,45 @@ import {
33
34
  resolveCliChromeGpuMode,
34
35
  seekCompositionTimeline,
35
36
  waitForPreferredSeekTarget
36
- } from "./chunk-RYL6ZIJP.js";
37
+ } from "./chunk-OIONMNWN.js";
37
38
  import "./chunk-FH7WODJH.js";
38
- import "./chunk-RRBKEHST.js";
39
- import "./chunk-HVXRYMGQ.js";
39
+ import {
40
+ BrowserCleanupError,
41
+ closeManagedBrowser
42
+ } from "./chunk-KFBEMIMD.js";
43
+ import "./chunk-TXWPPBIW.js";
40
44
  import "./chunk-WPNE5NEP.js";
41
- import "./chunk-BRF3O35X.js";
42
- import "./chunk-XNDXENJQ.js";
43
- import "./chunk-FJWEYVEM.js";
44
- import "./chunk-XXPYZBZ3.js";
45
+ import "./chunk-5FS4HCHN.js";
46
+ import "./chunk-WQMTHPTK.js";
47
+ import "./chunk-C6TPGUWD.js";
48
+ import "./chunk-7FYFEXD2.js";
45
49
  import {
46
50
  FfmpegUnavailableError,
47
51
  decideMediaProxyEligibility,
48
52
  proxyVariantFor,
49
53
  resolveProxies,
50
54
  scanProjectMediaCodecMap
51
- } from "./chunk-3ZPFRDEJ.js";
52
- import "./chunk-AIJS74LG.js";
53
- import "./chunk-KXX6NLOT.js";
55
+ } from "./chunk-PVGDU7SE.js";
56
+ import "./chunk-FFDC5OWV.js";
57
+ import "./chunk-JQ57FAYN.js";
54
58
  import "./chunk-K2FLNJVB.js";
55
- import "./chunk-ZGCRVM5M.js";
59
+ import "./chunk-DAKXCEE3.js";
56
60
  import "./chunk-442JNXRM.js";
57
61
  import {
58
62
  resolveAutoProxy
59
- } from "./chunk-FAIYEIZ4.js";
63
+ } from "./chunk-YYMJEQ4D.js";
60
64
  import "./chunk-XT7X6QCP.js";
61
65
  import "./chunk-4YYJOFKS.js";
62
66
  import "./chunk-HVW7ABXD.js";
63
- import "./chunk-XGLNQDLN.js";
64
- import "./chunk-N4IXP3MY.js";
65
- import "./chunk-YZTVHRJ2.js";
67
+ import "./chunk-PXOFFSO3.js";
68
+ import "./chunk-HGAOO43L.js";
69
+ import "./chunk-2XEBNYG5.js";
66
70
  import "./chunk-AWDFDFI3.js";
67
71
  import "./chunk-P6LJ4Y32.js";
68
72
  import "./chunk-GMECXFAN.js";
69
- import "./chunk-374QQGBQ.js";
70
- import "./chunk-ZD3RDNZI.js";
71
- import "./chunk-IZ7L6V76.js";
73
+ import "./chunk-5CS4T6C6.js";
74
+ import "./chunk-CBMZYOWC.js";
75
+ import "./chunk-AUK5QCRH.js";
72
76
  import "./chunk-VWG7OQKU.js";
73
77
  import "./chunk-XBSPQ52S.js";
74
78
  import "./chunk-S3S4TGEH.js";
@@ -77,37 +81,37 @@ import "./chunk-PBN6GBJE.js";
77
81
  import "./chunk-ZTZA4UWZ.js";
78
82
  import "./chunk-EOOEC32M.js";
79
83
  import "./chunk-TJSTGSAW.js";
80
- import "./chunk-35PWWBGZ.js";
84
+ import "./chunk-YI6OBVWQ.js";
81
85
  import "./chunk-K4WIOZFP.js";
82
86
  import "./chunk-XUXGIA7H.js";
83
87
  import "./chunk-WERLJGIC.js";
84
88
  import "./chunk-ISN5GRYI.js";
85
- import "./chunk-TCWMDCBX.js";
89
+ import "./chunk-2X3UJ4Q3.js";
86
90
  import "./chunk-EOVYQ3IG.js";
87
91
  import "./chunk-AMKC3AXA.js";
88
- import "./chunk-IZPN423R.js";
89
- import "./chunk-3SVC7SW4.js";
92
+ import "./chunk-2F6LWCSF.js";
93
+ import "./chunk-V6UUZGP6.js";
90
94
  import "./chunk-NE55C6S5.js";
91
95
  import "./chunk-JYVGYKXG.js";
92
- import "./chunk-XQKVEQNY.js";
93
- import "./chunk-QBYHNRHU.js";
96
+ import "./chunk-ZDEEHQ2Y.js";
97
+ import "./chunk-GV7I3ZSQ.js";
94
98
  import "./chunk-VC76R6W2.js";
95
99
  import "./chunk-UJKQWGFF.js";
96
- import "./chunk-LFNQDTSH.js";
100
+ import "./chunk-VYKPBRCB.js";
97
101
  import "./chunk-OFQWTKPW.js";
98
102
  import "./chunk-DPVXBVLL.js";
99
103
  import "./chunk-T76PLPD6.js";
100
104
  import "./chunk-FXMKHHPO.js";
101
105
  import "./chunk-RQVDTPGD.js";
102
106
  import "./chunk-TWWSYAKJ.js";
103
- import "./chunk-GNTVYF7E.js";
107
+ import "./chunk-YOEGUBBY.js";
104
108
  import "./chunk-IWFLMU2N.js";
105
- import "./chunk-APDLWWFG.js";
109
+ import "./chunk-3VGU2SH7.js";
106
110
  import "./chunk-VAS6HQX3.js";
107
111
  import "./chunk-3RM2ETQT.js";
108
112
  import "./chunk-BSQ7XANM.js";
109
113
  import "./chunk-SDYDNHEE.js";
110
- import "./chunk-2PSPARWP.js";
114
+ import "./chunk-TYXH3EKP.js";
111
115
  import "./chunk-IXLUTE6N.js";
112
116
  import {
113
117
  normalizeErrorMessage
@@ -283,8 +287,8 @@ async function preResolveHostileMediaProxies(projectDir, html, autoProxyOverride
283
287
  function proxyFailedDraft(message) {
284
288
  return { code: "media_proxy_failed", severity: "warning", message, time: 0 };
285
289
  }
286
- async function runBrowserCheck(project, options, motion, runGrid) {
287
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-26MXQOZG.js");
290
+ async function runBrowserCheck(project, options, motion, runGrid, deadline) {
291
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-QX5HV7LC.js");
288
292
  const html = await bundleWithLocalizedFonts(project.dir);
289
293
  const { findings: drafts, failedPaths } = await preResolveHostileMediaProxies(
290
294
  project.dir,
@@ -299,6 +303,7 @@ async function runBrowserCheck(project, options, motion, runGrid) {
299
303
  options.autoProxy
300
304
  );
301
305
  let currentTime = 0;
306
+ let failure = { kind: "none" };
302
307
  let chromeBrowser;
303
308
  try {
304
309
  const launchSettleStart = Date.now();
@@ -307,14 +312,20 @@ async function runBrowserCheck(project, options, motion, runGrid) {
307
312
  renderReadyTimeoutMs: options.timeout,
308
313
  renderReadyWarningSuffix: "checking the current page state",
309
314
  browserGpuMode: options.browserGpuMode ?? resolveCliChromeGpuMode(),
310
- beforeNavigate: (page2) => wireRuntimeListeners(page2, drafts, () => currentTime)
315
+ signal: deadline?.signal,
316
+ onBrowser: deadline?.ownBrowser,
317
+ onBrowserReady: deadline?.start,
318
+ beforeNavigate: async (page2) => {
319
+ wireRuntimeListeners(page2, drafts, () => currentTime);
320
+ await deadline?.preparePage(page2);
321
+ }
311
322
  });
312
323
  chromeBrowser = session.browser;
313
324
  const page = session.page;
314
325
  await waitForPreferredSeekTarget(page);
315
326
  const rootAnchor = await resolveRootAnchor(page);
316
327
  const launchSettleMs = Date.now() - launchSettleStart;
317
- const { analyzeClipMediaFit } = await import("./src-2NN2WB6X.js");
328
+ const { analyzeClipMediaFit } = await import("./src-YMUDUVXQ.js");
318
329
  for (const entry of await auditClipDurations(page, analyzeClipMediaFit, options.timeout)) {
319
330
  drafts.push({ code: "clip_media_fit", severity: entry.level, message: entry.text, time: 0 });
320
331
  }
@@ -335,14 +346,16 @@ async function runBrowserCheck(project, options, motion, runGrid) {
335
346
  failedPaths
336
347
  ).map((draft) => runtimeFinding(draft, rootAnchor))
337
348
  };
349
+ } catch (error) {
350
+ failure = { kind: "failed", error };
351
+ throw error;
338
352
  } finally {
339
- await chromeBrowser?.close().catch(() => void 0);
340
- await server.close();
353
+ await closeCheckResources(chromeBrowser, server, failure);
341
354
  }
342
355
  }
343
- async function captureFindingCrops(project, options, requests) {
356
+ async function captureFindingCrops(project, options, requests, deadline) {
344
357
  if (requests.length === 0) return [];
345
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-26MXQOZG.js");
358
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-QX5HV7LC.js");
346
359
  const html = await bundleWithLocalizedFonts(project.dir);
347
360
  const server = await serveStaticProjectHtml(
348
361
  project.dir,
@@ -353,17 +366,22 @@ async function captureFindingCrops(project, options, requests) {
353
366
  );
354
367
  let chromeBrowser;
355
368
  const written = [];
369
+ let failure = { kind: "none" };
356
370
  try {
357
371
  const session = await openSettledCompositionPage(html, server.url, {
358
372
  navigationTimeoutMs: options.timeout,
359
373
  renderReadyTimeoutMs: options.timeout,
360
374
  renderReadyWarningSuffix: "capturing finding crops",
375
+ signal: deadline?.signal,
376
+ onBrowser: deadline?.ownBrowser,
377
+ onBrowserReady: deadline?.start,
378
+ beforeNavigate: (page2) => deadline?.preparePage(page2),
361
379
  browserGpuMode: options.browserGpuMode ?? resolveCliChromeGpuMode()
362
380
  });
363
381
  chromeBrowser = session.browser;
364
382
  const page = session.page;
365
383
  await waitForPreferredSeekTarget(page);
366
- const snapshotDir = join(project.dir, "snapshots");
384
+ const snapshotDir = checkSnapshotDirectory(project.dir);
367
385
  mkdirSync(snapshotDir, { recursive: true });
368
386
  for (const request of requests) {
369
387
  await seekCompositionTimeline(page, request.time, AUDIT_SEEK_OPTIONS);
@@ -374,14 +392,26 @@ async function captureFindingCrops(project, options, requests) {
374
392
  const region = padCropRegion(request.bbox, canvas, DEFAULT_ZOOM_PADDING_PX);
375
393
  const buffer = await captureRegionCrop(page, region, DEFAULT_ZOOM_SCALE);
376
394
  writeFileSync(join(snapshotDir, request.filename), buffer);
377
- written.push(join("snapshots", request.filename));
395
+ written.push(join(snapshotDir, request.filename));
378
396
  }
379
397
  return written;
398
+ } catch (error) {
399
+ failure = { kind: "failed", error };
400
+ throw error;
380
401
  } finally {
381
- await chromeBrowser?.close().catch(() => void 0);
382
- await server.close();
402
+ await closeCheckResources(chromeBrowser, server, failure);
383
403
  }
384
404
  }
405
+ async function closeCheckResources(browser, server, failure) {
406
+ const cleanup = await Promise.allSettled([
407
+ browser ? closeManagedBrowser(browser) : Promise.resolve(),
408
+ server.close()
409
+ ]);
410
+ const errors = cleanup.filter((entry) => entry.status === "rejected").map((entry) => entry.reason);
411
+ if (errors.length === 0) return;
412
+ if (failure.kind === "failed") errors.unshift(failure.error);
413
+ throw new BrowserCleanupError(errors, errors.map(normalizeErrorMessage).join("; "));
414
+ }
385
415
  var MEDIA_PROXY_MARKER_PREFIX = "[hyperframes] runtime_media_proxy_";
386
416
  var MEDIA_PROXY_UNAVAILABLE_MARKER = "[hyperframes] runtime_media_proxy_unavailable";
387
417
  var WEB_AUDIO_BYPASS_MARKER = "[hyperframes] runtime_web_audio_bypass";
@@ -26,7 +26,7 @@ import {
26
26
  renderFrameIdForRenderId,
27
27
  resolveAuthoredTimingWindow,
28
28
  toFps
29
- } from "./chunk-XQKVEQNY.js";
29
+ } from "./chunk-ZDEEHQ2Y.js";
30
30
  import {
31
31
  AUDIO_GROUP_RENDER_ID_ATTR,
32
32
  COLOR_GRADING_SOURCE_HIDDEN_ATTR,
@@ -55,7 +55,7 @@ import {
55
55
  shiftRateLane,
56
56
  sourceTimeAt,
57
57
  timeAtSourceTime
58
- } from "./chunk-QBYHNRHU.js";
58
+ } from "./chunk-GV7I3ZSQ.js";
59
59
  import {
60
60
  clampAudioGain,
61
61
  isAudibleVideoElement
@@ -893,7 +893,7 @@ var GPU_PROBE_TIMEOUT_MS = 15e3;
893
893
  async function probeHardwareWebGlInfo(ppt, options) {
894
894
  let probeBrowser;
895
895
  try {
896
- probeBrowser = await ppt.launch({
896
+ const launchOptions = {
897
897
  ...sigintLaunchOptions(),
898
898
  headless: true,
899
899
  args: options.args,
@@ -901,14 +901,18 @@ async function probeHardwareWebGlInfo(ppt, options) {
901
901
  executablePath: options.executablePath,
902
902
  timeout: options.browserTimeout,
903
903
  waitForInitialPage: false
904
- });
904
+ };
905
+ probeBrowser = options.probeLifecycle ? await options.probeLifecycle.launch(ppt, launchOptions) : await ppt.launch(launchOptions);
905
906
  return await rejectAfter(
906
907
  readWebGlInfo(probeBrowser),
907
908
  GPU_PROBE_TIMEOUT_MS,
908
909
  `GPU probe page did not answer within ${GPU_PROBE_TIMEOUT_MS}ms`
909
910
  );
910
911
  } finally {
911
- if (probeBrowser) await closeBrowserAfterFailedProbe(probeBrowser);
912
+ if (probeBrowser) {
913
+ if (options.probeLifecycle) await options.probeLifecycle.close(probeBrowser);
914
+ else await closeBrowserAfterFailedProbe(probeBrowser);
915
+ }
912
916
  }
913
917
  }
914
918
  async function readWebGlInfo(browser) {
@@ -1208,7 +1212,8 @@ async function probeAutoBrowserGpuMode(options) {
1208
1212
  const info = await probeHardwareWebGlInfo(ppt, {
1209
1213
  args: getHardwareGpuProbeArgs(platform),
1210
1214
  browserTimeout,
1211
- executablePath
1215
+ executablePath,
1216
+ probeLifecycle: options.probeLifecycle
1212
1217
  });
1213
1218
  const resolved = resolveWebGlProbeMode(info);
1214
1219
  logResolvedBrowserGpuMode(resolved, describeWebGlProbe(info));
@@ -6,8 +6,8 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
 
8
8
  // src/version.ts
9
- var VERSION = true ? "0.8.151" : "0.0.0-dev";
10
- var PRODUCER_VERSION = true ? "0.8.151" : "0.0.0-dev";
9
+ var VERSION = true ? "0.8.153" : "0.0.0-dev";
10
+ var PRODUCER_VERSION = true ? "0.8.153" : "0.0.0-dev";
11
11
 
12
12
  export {
13
13
  VERSION,
@@ -27,7 +27,7 @@ import {
27
27
  } from "./chunk-GMECXFAN.js";
28
28
  import {
29
29
  ITEM_TYPE_DIRS
30
- } from "./chunk-XQKVEQNY.js";
30
+ } from "./chunk-ZDEEHQ2Y.js";
31
31
  import {
32
32
  realProjectRoot
33
33
  } from "./chunk-OFQWTKPW.js";
@@ -0,0 +1,24 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ withOwner
9
+ } from "./chunk-ZQMYD22O.js";
10
+ import {
11
+ beginArtifactCapture
12
+ } from "./chunk-7FYFEXD2.js";
13
+
14
+ // src/utils/artifactCapture.ts
15
+ async function captureArtifactRevision(projectDir) {
16
+ return withOwner(projectDir, async (owner) => {
17
+ await owner.checkpoint();
18
+ return beginArtifactCapture(projectDir);
19
+ });
20
+ }
21
+
22
+ export {
23
+ captureArtifactRevision
24
+ };
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  parse,
9
9
  simple
10
- } from "./chunk-2PSPARWP.js";
10
+ } from "./chunk-TYXH3EKP.js";
11
11
 
12
12
  // ../parsers/dist/composition.js
13
13
  var CANVAS_DIMENSIONS = {
@@ -7,10 +7,10 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  parseFeedbackRating,
9
9
  trackRenderFeedback
10
- } from "./chunk-ZD3RDNZI.js";
10
+ } from "./chunk-CBMZYOWC.js";
11
11
  import {
12
12
  shouldTrack
13
- } from "./chunk-IZ7L6V76.js";
13
+ } from "./chunk-AUK5QCRH.js";
14
14
  import {
15
15
  detectAgentRuntime
16
16
  } from "./chunk-XBSPQ52S.js";
@@ -20,7 +20,7 @@ import {
20
20
  typeDirPath,
21
21
  updateRecord,
22
22
  withFigmaErrors
23
- } from "./chunk-YEBKEWKB.js";
23
+ } from "./chunk-BD3XH4A7.js";
24
24
  import {
25
25
  defineCommand
26
26
  } from "./chunk-S3S4TGEH.js";
@@ -229,7 +229,7 @@ var asset_default = defineCommand({
229
229
  rendered > 0 ? `(${results.length} nodes, ${rendered} rendered in 1 figma request)` : `(${results.length} nodes, all reused from cache \u2014 no figma request)`
230
230
  );
231
231
  }
232
- const { trackFigmaImport } = await import("./telemetry-KVCZKVTE.js");
232
+ const { trackFigmaImport } = await import("./telemetry-KNSTX3E2.js");
233
233
  trackFigmaImport({
234
234
  phase: "asset",
235
235
  reused: results.every((r) => r.reused),
@@ -5,6 +5,18 @@ var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
 
8
+ // src/utils/pngDimensions.ts
9
+ import { readFileSync } from "fs";
10
+ function pngDimensions(path) {
11
+ try {
12
+ const png = readFileSync(path);
13
+ if (png.length < 24) return {};
14
+ return { width: png.readUInt32BE(16), height: png.readUInt32BE(20) };
15
+ } catch {
16
+ return {};
17
+ }
18
+ }
19
+
8
20
  // src/utils/toolContext.ts
9
21
  import { appendFileSync } from "fs";
10
22
  import { extname, isAbsolute, resolve } from "path";
@@ -39,7 +51,8 @@ function readToolContext(raw = process.env.HF_TOOL_CONTEXT) {
39
51
  var MEDIA_TYPES = {
40
52
  ".png": "image/png",
41
53
  ".jpg": "image/jpeg",
42
- ".jpeg": "image/jpeg"
54
+ ".jpeg": "image/jpeg",
55
+ ".json": "application/json"
43
56
  };
44
57
  function reportArtifacts(command, role, paths, context = readToolContext()) {
45
58
  if (!context.events || paths.length === 0) return;
@@ -65,7 +78,7 @@ function reportArtifacts(command, role, paths, context = readToolContext()) {
65
78
  }
66
79
 
67
80
  // src/utils/projectLock.ts
68
- import { linkSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
81
+ import { linkSync, mkdirSync, readFileSync as readFileSync2, unlinkSync, writeFileSync } from "fs";
69
82
  import { dirname, join } from "path";
70
83
  import { setTimeout as sleep } from "timers/promises";
71
84
  var ProjectLockTimeout = class extends Error {
@@ -74,7 +87,7 @@ var POLL_MS = 250;
74
87
  var projectLockPath = (projectDir) => join(projectDir, ".hyperframes", "project.lock");
75
88
  function readHolder(path) {
76
89
  try {
77
- return JSON.parse(readFileSync(path, "utf8"));
90
+ return JSON.parse(readFileSync2(path, "utf8"));
78
91
  } catch {
79
92
  return null;
80
93
  }
@@ -160,6 +173,7 @@ async function withProjectLock(projectDir, command, run, context = readToolConte
160
173
  }
161
174
 
162
175
  export {
176
+ pngDimensions,
163
177
  reportArtifacts,
164
178
  withProjectLock
165
179
  };
@@ -7,8 +7,9 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  ancestor,
9
9
  parse,
10
+ parseExpressionAt,
10
11
  simple
11
- } from "./chunk-2PSPARWP.js";
12
+ } from "./chunk-TYXH3EKP.js";
12
13
 
13
14
  // ../parsers/dist/gsapParserAcorn.js
14
15
  var GSAP_DEFAULT_DURATION = 0.5;
@@ -854,19 +855,19 @@ function collectIdentifierBindingIndex(ast) {
854
855
  }
855
856
  }
856
857
  function addBinding(bindings, scopeNode, name, selector) {
857
- let scoped = bindings.get(scopeNode);
858
+ let scoped = bindings.byScope.get(scopeNode);
858
859
  if (!scoped) {
859
860
  scoped = /* @__PURE__ */ new Map();
860
- bindings.set(scopeNode, scoped);
861
+ bindings.byScope.set(scopeNode, scoped);
861
862
  }
862
863
  if (!scoped.has(name)) scoped.set(name, selector);
863
864
  }
864
865
  function lookupBindingFromAncestors(name, ancestors, bindings) {
865
866
  for (const scopeNode of scopeChainFromAncestors(ancestors)) {
866
- const selector = bindings.get(scopeNode)?.get(name);
867
+ const selector = bindings.byScope.get(scopeNode)?.get(name);
867
868
  if (selector !== void 0) return selector;
868
869
  }
869
- return bindings.get(null)?.get(name) ?? null;
870
+ return bindings.byScope.get(null)?.get(name) ?? null;
870
871
  }
871
872
  function isFunctionNode2(node) {
872
873
  return node?.type === "ArrowFunctionExpression" || node?.type === "FunctionExpression" || node?.type === "FunctionDeclaration";
@@ -905,7 +906,7 @@ function collectScopeBindings(ast) {
905
906
  return bindings;
906
907
  }
907
908
  function collectTargetBindings(ast, scope, identifierBindings) {
908
- const bindings = /* @__PURE__ */ new Map();
909
+ const bindings = { byScope: /* @__PURE__ */ new Map(), identifiers: identifierBindings };
909
910
  ancestor(ast, {
910
911
  VariableDeclarator(node, _, ancestors) {
911
912
  const name = node.id?.name;
@@ -986,7 +987,18 @@ function resolveTargetSelector(node, ancestors, scope, bindings) {
986
987
  return typeof node.value === "string" ? node.value : null;
987
988
  }
988
989
  if (node.type === "Identifier") {
989
- return lookupBindingFromAncestors(node.name, ancestors, bindings);
990
+ const bound = lookupBindingFromAncestors(node.name, ancestors, bindings);
991
+ if (bound) return bound;
992
+ const declaration = findVisibleIdentifierDeclaration(
993
+ node.name,
994
+ ancestors,
995
+ bindings.identifiers,
996
+ node.start
997
+ );
998
+ if (declaration?.kind !== "const" || bindings.identifiers.reassignedDeclarations.has(declaration.node))
999
+ return null;
1000
+ const literal = resolveNode(declaration.node.init, scope);
1001
+ return typeof literal === "string" ? literal : null;
990
1002
  }
991
1003
  if (node.type === "CallExpression") {
992
1004
  return selectorFromQueryCall(node, scope);
@@ -1011,7 +1023,7 @@ function describeProxyTarget(targetNode, varsNode, scope) {
1011
1023
  const onUpdate = findPropertyNode(varsNode, "onUpdate");
1012
1024
  const driven = onUpdate ? drivenDomChannel(onUpdate) : void 0;
1013
1025
  if (driven) return `proxy \u2192 ${driven}`;
1014
- return "dwell/hold";
1026
+ return objNode.properties.length === 0 && !onUpdate ? "dwell/hold" : "proxy (unresolved DOM association)";
1015
1027
  }
1016
1028
  function isStyleAssignmentTarget(left) {
1017
1029
  return left?.type === "MemberExpression" && left.object?.type === "MemberExpression" && left.object.property?.name === "style" && !!left.property?.name;
@@ -1530,6 +1542,8 @@ function tweenCallToAnimation(call, scope, source, identifierBindings) {
1530
1542
  duration,
1531
1543
  ease
1532
1544
  };
1545
+ if (["stagger", "repeat", "repeatDelay", "delay"].some((key) => findPropertyNode(call.varsArg, key)))
1546
+ anim.inspectionTiming = inspectionTiming(call.varsArg, scope);
1533
1547
  if (targetIdentity) anim.targetIdentity = targetIdentity;
1534
1548
  if (!hasPositionArg) anim.implicitPosition = true;
1535
1549
  let group = classifyTweenPropertyGroup(properties);
@@ -1552,14 +1566,51 @@ function tweenCallToAnimation(call, scope, source, identifierBindings) {
1552
1566
  if (provenance) anim.provenance = provenance;
1553
1567
  return anim;
1554
1568
  }
1569
+ function inspectionTiming(varsNode, scope) {
1570
+ const numeric = (key) => {
1571
+ const node2 = findPropertyNode(varsNode, key);
1572
+ if (!node2) return 0;
1573
+ const value = resolveNode(node2, scope);
1574
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
1575
+ };
1576
+ const node = findPropertyNode(varsNode, "stagger");
1577
+ let stagger = { each: 0 };
1578
+ if (node) {
1579
+ const value = resolveNode(node, scope);
1580
+ stagger = typeof value === "number" ? { each: value } : null;
1581
+ if (node.type === "ObjectExpression" && !(node.properties ?? []).some(
1582
+ (p) => !["each", "amount", "from", "ease", "axis", "grid"].includes(propKeyName(p) ?? "")
1583
+ )) {
1584
+ const each = resolveNode(findPropertyNode(node, "each"), scope);
1585
+ const amount = resolveNode(findPropertyNode(node, "amount"), scope);
1586
+ if (!findPropertyNode(node, "grid") && !findPropertyNode(node, "axis")) {
1587
+ if (typeof amount === "number") stagger = { amount };
1588
+ else if (typeof each === "number") stagger = { each };
1589
+ }
1590
+ }
1591
+ }
1592
+ return {
1593
+ repeat: numeric("repeat"),
1594
+ repeatDelay: numeric("repeatDelay"),
1595
+ delay: numeric("delay"),
1596
+ stagger
1597
+ };
1598
+ }
1555
1599
  function staggerAmount(raw) {
1556
1600
  if (typeof raw === "number") return raw;
1557
1601
  if (typeof raw !== "string") return void 0;
1558
1602
  const src = raw.startsWith("__raw:") ? raw.slice(6) : raw;
1559
- const m = /(?:each\s*:\s*)?(-?\d+(?:\.\d+)?)/.exec(src);
1560
- if (!m) return void 0;
1561
- const n = Number.parseFloat(m[1]);
1562
- return Number.isFinite(n) ? n : void 0;
1603
+ try {
1604
+ const node = parseExpressionAt(src, 0, { ecmaVersion: "latest" });
1605
+ if (src.slice(node.end).trim()) return void 0;
1606
+ const value = resolveNode(
1607
+ node.type === "ObjectExpression" ? findPropertyNode(node, "each") : node,
1608
+ /* @__PURE__ */ new Map()
1609
+ );
1610
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
1611
+ } catch {
1612
+ return void 0;
1613
+ }
1563
1614
  }
1564
1615
  function restValue(prop) {
1565
1616
  return prop === "opacity" || prop.startsWith("scale") ? 1 : 0;
@@ -10,7 +10,7 @@ import {
10
10
  isDevice,
11
11
  isQuality,
12
12
  render
13
- } from "./chunk-S22FKF6G.js";
13
+ } from "./chunk-WNCGJFTZ.js";
14
14
 
15
15
  // src/api/removeBackground.ts
16
16
  import { resolve } from "path";