hyperframes 0.8.150 → 0.8.151

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 (174) hide show
  1. package/dist/{add-3ZIFEN2U.js → add-QKZZG7A2.js} +11 -11
  2. package/dist/{animatedGifPrep-77LPFLKJ.js → animatedGifPrep-YQDPYGOD.js} +6 -6
  3. package/dist/api.js +16 -16
  4. package/dist/{asset-EYSZEHM6.js → asset-3Q737Y4H.js} +2 -2
  5. package/dist/{assetCataloger-KX3HD7ZI.js → assetCataloger-BTHEBJJB.js} +2 -2
  6. package/dist/{auth-L6IWNRXY.js → auth-XL7EU3SO.js} +1 -1
  7. package/dist/{autoUpdate-2O3HZB65.js → autoUpdate-PJFLTQ3U.js} +2 -2
  8. package/dist/{backgroundChecks-BH2LMJYE.js → backgroundChecks-T5TIR5WK.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-ZBKAYLWU.js → batchRender-NFLVIDB4.js} +3 -3
  11. package/dist/{beats-IVLF2566.js → beats-JU4GZ26R.js} +12 -12
  12. package/dist/{benchmark-SYZFW2G7.js → benchmark-7U2YWLTW.js} +8 -8
  13. package/dist/{browser-OSW3L25S.js → browser-D57UPYDA.js} +5 -5
  14. package/dist/{bundleWithLocalizedFonts-I4CWOXLK.js → bundleWithLocalizedFonts-26MXQOZG.js} +2 -2
  15. package/dist/{capture-AZOQ57TM.js → capture-47BV25G3.js} +2 -2
  16. package/dist/{capture-V5ICGSVJ.js → capture-LT252COQ.js} +10 -10
  17. package/dist/{catalog-VBJOA2Y5.js → catalog-BEZXOV4O.js} +11 -11
  18. package/dist/{catch-up-TKSEDNJK.js → catch-up-KVV5X6BF.js} +4 -4
  19. package/dist/{check-3HFISKDB.js → check-6KQ433E6.js} +189 -53
  20. package/dist/{checkBrowser-MXBDNZJB.js → checkBrowser-PRDR6XBY.js} +170 -28
  21. package/dist/{chunk-AFRXL75S.js → chunk-35PWWBGZ.js} +1 -1
  22. package/dist/{chunk-WLIUULZQ.js → chunk-3SVC7SW4.js} +28 -14
  23. package/dist/{chunk-EL5QVJEG.js → chunk-3ZPFRDEJ.js} +1 -1
  24. package/dist/{chunk-UQYQ7TBA.js → chunk-4LE27ST4.js} +1 -1
  25. package/dist/{chunk-DUUFDLC4.js → chunk-4MLYMDQ4.js} +1 -1
  26. package/dist/{chunk-Z6WZDGCS.js → chunk-4PKQEKAI.js} +2 -2
  27. package/dist/{chunk-VQ7YIURZ.js → chunk-4YZYYP7V.js} +5 -5
  28. package/dist/{chunk-XPQSL5VS.js → chunk-54DMWFQZ.js} +8 -1
  29. package/dist/{chunk-UVVI2NJQ.js → chunk-BRF3O35X.js} +6 -6
  30. package/dist/chunk-DHPFXAUF.js +165 -0
  31. package/dist/{chunk-6SFPQ2RZ.js → chunk-DIOBKUBV.js} +2 -2
  32. package/dist/{chunk-XQMEGSHG.js → chunk-FAIYEIZ4.js} +1 -1
  33. package/dist/{chunk-LW5VFBSY.js → chunk-FLVI7FHU.js} +1 -1
  34. package/dist/{chunk-JDB65PPT.js → chunk-GNTVYF7E.js} +8 -7
  35. package/dist/{chunk-423DJVX2.js → chunk-HVXRYMGQ.js} +1 -1
  36. package/dist/{chunk-F2RLIE7P.js → chunk-IP73NMQT.js} +11 -11
  37. package/dist/{chunk-2KAL22B5.js → chunk-IPDS2SWI.js} +1 -1
  38. package/dist/{chunk-6KWA3XPS.js → chunk-IZ7L6V76.js} +1 -1
  39. package/dist/{chunk-5NAYNDBT.js → chunk-IZPN423R.js} +6 -2
  40. package/dist/{chunk-4WFNTWKZ.js → chunk-KQGWP4KH.js} +2 -2
  41. package/dist/{chunk-NFQY7EIC.js → chunk-KXX6NLOT.js} +1 -1
  42. package/dist/{chunk-S5F26DUL.js → chunk-L3N7RJHS.js} +3 -3
  43. package/dist/{chunk-73RBX2E7.js → chunk-L6RIMCMG.js} +3 -3
  44. package/dist/{chunk-7IEGPJ4P.js → chunk-LBT4AMSF.js} +1 -1
  45. package/dist/{chunk-6NPFJ255.js → chunk-LKQS72D5.js} +1 -1
  46. package/dist/{chunk-RW7NLGPD.js → chunk-N3I6RAOR.js} +22 -14
  47. package/dist/{chunk-M6UDJ2E7.js → chunk-N4IXP3MY.js} +2 -2
  48. package/dist/{chunk-7E4VHPKJ.js → chunk-O3DUX6P2.js} +5 -5
  49. package/dist/{chunk-O4DC5CHF.js → chunk-OSAH7S5M.js} +1 -1
  50. package/dist/{chunk-UJB7356Y.js → chunk-OZ4K46OV.js} +3 -3
  51. package/dist/{chunk-6QB7F2II.js → chunk-POEEDPJI.js} +1 -1
  52. package/dist/{chunk-DOVJRUFM.js → chunk-PUIELIFA.js} +1 -1
  53. package/dist/chunk-QBYHNRHU.js +3795 -0
  54. package/dist/{chunk-XANZ4R4P.js → chunk-QF7AE3DB.js} +3 -3
  55. package/dist/{chunk-A6ZO4BX7.js → chunk-QLGBNGXC.js} +2 -2
  56. package/dist/{chunk-FPAT5HTI.js → chunk-RJRGR5KF.js} +10 -10
  57. package/dist/{chunk-AXPNVC3N.js → chunk-RRBKEHST.js} +1 -1
  58. package/dist/{chunk-UAIUVPZE.js → chunk-RYL6ZIJP.js} +6 -6
  59. package/dist/{chunk-TZPZE5PS.js → chunk-S22FKF6G.js} +6 -3
  60. package/dist/{chunk-I6DATIHC.js → chunk-TCWMDCBX.js} +2 -2
  61. package/dist/{chunk-M5B42RL5.js → chunk-WUUOFMHU.js} +3 -3
  62. package/dist/{chunk-BLRJKBKP.js → chunk-XGLNQDLN.js} +1 -1
  63. package/dist/{chunk-FN6KAS7A.js → chunk-XKKBIFE5.js} +7 -7
  64. package/dist/{chunk-ZNHAJCEA.js → chunk-XNDXENJQ.js} +27 -12
  65. package/dist/{chunk-PCWOSS7G.js → chunk-XQKVEQNY.js} +2 -2
  66. package/dist/{chunk-R5A7454P.js → chunk-XYHBVSWD.js} +2 -2
  67. package/dist/{chunk-7JTFPUMA.js → chunk-YEBKEWKB.js} +1 -1
  68. package/dist/{chunk-CZQLCBWY.js → chunk-YG2Y55KF.js} +1 -1
  69. package/dist/{chunk-B3XLIBFL.js → chunk-YIJMVFEJ.js} +1 -1
  70. package/dist/{chunk-OQ7XMM3S.js → chunk-YZTVHRJ2.js} +1 -1
  71. package/dist/{chunk-3UAIVF4L.js → chunk-ZD3RDNZI.js} +1 -1
  72. package/dist/{chunk-AKYQGZLU.js → chunk-ZGCRVM5M.js} +2 -2
  73. package/dist/{clean-7HU7S7DT.js → clean-RLTHFTQA.js} +16 -16
  74. package/dist/cli.js +52 -52
  75. package/dist/{cloud-HAXHBO25.js → cloud-Q5TGBTW3.js} +4 -4
  76. package/dist/{cloudrun-A3PIJ6DX.js → cloudrun-4UZF74MV.js} +3 -3
  77. package/dist/{compare-6IPSQMSM.js → compare-Q5UNR2V4.js} +23 -23
  78. package/dist/{compiler-UQP2VXN6.js → compiler-ZXT27Z62.js} +3 -3
  79. package/dist/{component-FF3AU24M.js → component-H734P32V.js} +3 -3
  80. package/dist/{compositions-JSH4MZXB.js → compositions-YEHDSTDR.js} +10 -10
  81. package/dist/{delete-G763SW64.js → delete-LDBMPWRT.js} +2 -2
  82. package/dist/{dist-Z7Q3JS7K.js → dist-7JXLFD6U.js} +2 -2
  83. package/dist/{dist-HUMFCJ6T.js → dist-RGE4QASU.js} +1 -1
  84. package/dist/{doctor-WZB6WMBY.js → doctor-XNJFIWJ7.js} +12 -12
  85. package/dist/{events-MUWJJCC7.js → events-G6UFLNXR.js} +2 -2
  86. package/dist/{events-T4YFQC5G.js → events-UKCPUWMH.js} +3 -3
  87. package/dist/{feedback-AUTHQNN2.js → feedback-CK3KZ7DE.js} +6 -6
  88. package/dist/{ffmpeg-TZB5WAYE.js → ffmpeg-MJFMBBSF.js} +2 -2
  89. package/dist/{figma-NBG6WBI7.js → figma-3D5C737B.js} +3 -3
  90. package/dist/fontLocalizeCli.js +8 -8
  91. package/dist/{get-OXBJLKLV.js → get-QGTQUWFT.js} +2 -2
  92. package/dist/{gpuPolicy-HBCCEQUS.js → gpuPolicy-G5QAQDYF.js} +6 -6
  93. package/dist/{grade-compare-2LX4FDH7.js → grade-compare-XIHOM62P.js} +25 -25
  94. package/dist/{help-LJI46EDO.js → help-U5UBXT52.js} +1 -1
  95. package/dist/{history-MFKAQEHU.js → history-5J73QZSA.js} +5 -5
  96. package/dist/hyperframe-runtime.js +54 -54
  97. package/dist/hyperframe.manifest.json +1 -1
  98. package/dist/hyperframe.runtime.iife.js +54 -54
  99. package/dist/hyperframes-player.global.js +3 -3
  100. package/dist/{info-D6Y5O2QE.js → info-RJHQQQUP.js} +7 -7
  101. package/dist/{init-47NZPEBI.js → init-M6UQOYYC.js} +28 -28
  102. package/dist/{inspect-U5UXJK5D.js → inspect-PRQWDBTP.js} +24 -24
  103. package/dist/{installer-AW7VFVTQ.js → installer-ZL7UKYK5.js} +4 -4
  104. package/dist/{keyframes-5G334NWB.js → keyframes-VMUJYTCQ.js} +6 -6
  105. package/dist/{lambda-GASGXN3A.js → lambda-ON42DRQD.js} +4 -4
  106. package/dist/{layout-OXAQFLJS.js → layout-QKBFVDVY.js} +24 -24
  107. package/dist/{lint-F36QFSNF.js → lint-ZQHHL2SV.js} +7 -7
  108. package/dist/{lintProject-SSEXWCH6.js → lintProject-3Z6OJCSO.js} +1 -1
  109. package/dist/{list-TR6QCI53.js → list-YBRKIWGF.js} +2 -2
  110. package/dist/{login-6LA2RWTC.js → login-4B2YXGLB.js} +4 -4
  111. package/dist/{manager-ES2UFT4X.js → manager-X44GKUEL.js} +3 -3
  112. package/dist/{manager-GWU5J6RJ.js → manager-ZLJD3EAY.js} +2 -2
  113. package/dist/{media-treatment-BOHYDWVY.js → media-treatment-5C5EJAAP.js} +11 -11
  114. package/dist/{models-6GW5Q3IW.js → models-R7ZDWBJ6.js} +12 -12
  115. package/dist/{motionShot-O7AOMPUN.js → motionShot-ZHESZNUL.js} +13 -13
  116. package/dist/{normalize-audio-UO5B4O76.js → normalize-audio-EVWZVTBM.js} +4 -4
  117. package/dist/{open-JV2EHVKM.js → open-TV6HT4UT.js} +4 -4
  118. package/dist/{parakeetRunner-23DZUF6G.js → parakeetRunner-YVVF4CG6.js} +13 -13
  119. package/dist/{pipeline-KTICSIK7.js → pipeline-ETR5SEBS.js} +8 -8
  120. package/dist/{play-CMUYPXBC.js → play-C6WONRZV.js} +17 -17
  121. package/dist/{preflight-JOD4OXGC.js → preflight-JYOX64YP.js} +4 -4
  122. package/dist/{present-ZDT5FM2H.js → present-RANXTVPA.js} +13 -13
  123. package/dist/{preview-ASHLGKDD.js → preview-KF6UMBT2.js} +18 -18
  124. package/dist/{producer-FFH2KUAZ.js → producer-CY2GXBWN.js} +1 -1
  125. package/dist/{projectConfig-FHIAOPKW.js → projectConfig-KPXCNMBM.js} +6 -6
  126. package/dist/{publication-WO5ZXURT.js → publication-Y36N4A7E.js} +2 -2
  127. package/dist/{publish-QWO2W7FB.js → publish-RCQJO35C.js} +8 -8
  128. package/dist/{remove-background-BO5MQR25.js → remove-background-3ZMXVWLB.js} +9 -9
  129. package/dist/{render-SDHFXL3Y.js → render-FKVRCDT2.js} +57 -34
  130. package/dist/{render-XTJKGT3G.js → render-PTNEFO5U.js} +8 -8
  131. package/dist/{render-HS3YOLSD.js → render-WUSTRMUD.js} +3 -3
  132. package/dist/{render-batch-J64AJHQY.js → render-batch-AQHU2JWZ.js} +3 -3
  133. package/dist/renderSetupWorker.js +4 -4
  134. package/dist/{resolver-IHNWMDJA.js → resolver-L5BDZJKU.js} +4 -4
  135. package/dist/{sherpa-FXBBYMDR.js → sherpa-3S3ISG7G.js} +12 -12
  136. package/dist/skills/hyperframes/references/frame-worker-core.md +11 -9
  137. package/dist/skills/hyperframes/references/subagent-dispatch.md +1 -1
  138. package/dist/skills/media-use/audio/scripts/lib/tts.cleanup.test.mjs +175 -0
  139. package/dist/skills/media-use/audio/scripts/lib/tts.mjs +24 -19
  140. package/dist/skills/media-use/references/grading.md +1 -2
  141. package/dist/skills/media-use/references/meta.md +17 -17
  142. package/dist/skills/media-use/references/operations.md +6 -6
  143. package/dist/skills/media-use/references/setup-providers.md +3 -4
  144. package/dist/skills/media-use/scripts/lib/cutlist.mjs +9 -2
  145. package/dist/skills/media-use/scripts/lib/cutlist.test.mjs +12 -0
  146. package/dist/skills/media-use/scripts/lib/telemetry.mjs +4 -1
  147. package/dist/skills/media-use/scripts/lib/telemetry.test.mjs +20 -0
  148. package/dist/skills/media-use/scripts/transcript-cut.mjs +23 -4
  149. package/dist/skills/media-use/scripts/transcript-cut.test.mjs +224 -0
  150. package/dist/{skills-ALLSN7TB.js → skills-X4WQEKNF.js} +5 -5
  151. package/dist/{skillsUpdateCheck-EIT5NWM6.js → skillsUpdateCheck-UYCVHDZ6.js} +3 -3
  152. package/dist/{snapshot-Y3I76OIZ.js → snapshot-YEYHQEZQ.js} +250 -139
  153. package/dist/{src-7V6LBC56.js → src-2NN2WB6X.js} +7 -5
  154. package/dist/{src-S5IZVJUX.js → src-OLBDPEG6.js} +7 -7
  155. package/dist/{staticProjectServer-QLWWGHZE.js → staticProjectServer-7H35NMWB.js} +13 -13
  156. package/dist/studio/assets/{hyperframes-player-kup62bDR.js → hyperframes-player-DJt8E7k4.js} +1 -1
  157. package/dist/studio/assets/{index-CS_m0TkX.js → index-BGks9KLI.js} +73 -73
  158. package/dist/studio/assets/{index-B8BBYY8L.js → index-DWIHrAY2.js} +1 -1
  159. package/dist/studio/assets/{index-DQ5jGodF.js → index-DgbLblGR.js} +1 -1
  160. package/dist/studio/index.html +1 -1
  161. package/dist/{studio-api-UBFLZ3DA.js → studio-api-HGM2A5I3.js} +7 -7
  162. package/dist/{studioServer-REOVCIFP.js → studioServer-M6XFL7N6.js} +43 -43
  163. package/dist/{telemetry-C3GDIXHO.js → telemetry-KVCZKVTE.js} +3 -3
  164. package/dist/{timeline-H42EGLMT.js → timeline-VYYKZR4V.js} +66 -13
  165. package/dist/{tokens-2K7ISTKV.js → tokens-B5NFFL55.js} +2 -2
  166. package/dist/{transcribe-NUPASAUP.js → transcribe-SBETOIWI.js} +11 -11
  167. package/dist/{transcribe-DVM7UFZZ.js → transcribe-WNFRYZAC.js} +17 -17
  168. package/dist/{updateCheck-3RWFSEZD.js → updateCheck-5MM2DFUC.js} +2 -2
  169. package/dist/{upgrade-YKKL36N7.js → upgrade-LWID54R3.js} +2 -2
  170. package/dist/{urlDownloader-6JNJYLPN.js → urlDownloader-CVLNXFDG.js} +5 -5
  171. package/dist/{validate-Z7KQT7GO.js → validate-V4CGQ6OF.js} +18 -18
  172. package/dist/{video-EXL2JDSL.js → video-VJB2KRSS.js} +6 -6
  173. package/package.json +1 -1
  174. package/dist/chunk-CEND6BLF.js +0 -3795
@@ -8,19 +8,19 @@ import {
8
8
  auditClipDurations,
9
9
  shouldIgnoreHttpError,
10
10
  shouldIgnoreRequestFailure
11
- } from "./chunk-F2RLIE7P.js";
11
+ } from "./chunk-IP73NMQT.js";
12
12
  import {
13
13
  rectToBbox
14
14
  } from "./chunk-WBLXWOYK.js";
15
15
  import {
16
16
  ambiguousIssue,
17
17
  loadBrowserScript
18
- } from "./chunk-FPAT5HTI.js";
18
+ } from "./chunk-RJRGR5KF.js";
19
19
  import {
20
20
  serveStaticProjectHtml
21
- } from "./chunk-S5F26DUL.js";
21
+ } from "./chunk-L3N7RJHS.js";
22
22
  import "./chunk-XUHOIDKG.js";
23
- import "./chunk-A6ZO4BX7.js";
23
+ import "./chunk-QLGBNGXC.js";
24
24
  import "./chunk-X7MTZ4T2.js";
25
25
  import {
26
26
  AUDIT_SEEK_OPTIONS,
@@ -33,13 +33,13 @@ import {
33
33
  resolveCliChromeGpuMode,
34
34
  seekCompositionTimeline,
35
35
  waitForPreferredSeekTarget
36
- } from "./chunk-UAIUVPZE.js";
36
+ } from "./chunk-RYL6ZIJP.js";
37
37
  import "./chunk-FH7WODJH.js";
38
- import "./chunk-AXPNVC3N.js";
39
- import "./chunk-423DJVX2.js";
38
+ import "./chunk-RRBKEHST.js";
39
+ import "./chunk-HVXRYMGQ.js";
40
40
  import "./chunk-WPNE5NEP.js";
41
- import "./chunk-UVVI2NJQ.js";
42
- import "./chunk-ZNHAJCEA.js";
41
+ import "./chunk-BRF3O35X.js";
42
+ import "./chunk-XNDXENJQ.js";
43
43
  import "./chunk-FJWEYVEM.js";
44
44
  import "./chunk-XXPYZBZ3.js";
45
45
  import {
@@ -48,27 +48,27 @@ import {
48
48
  proxyVariantFor,
49
49
  resolveProxies,
50
50
  scanProjectMediaCodecMap
51
- } from "./chunk-EL5QVJEG.js";
51
+ } from "./chunk-3ZPFRDEJ.js";
52
52
  import "./chunk-AIJS74LG.js";
53
- import "./chunk-NFQY7EIC.js";
53
+ import "./chunk-KXX6NLOT.js";
54
54
  import "./chunk-K2FLNJVB.js";
55
- import "./chunk-AKYQGZLU.js";
55
+ import "./chunk-ZGCRVM5M.js";
56
56
  import "./chunk-442JNXRM.js";
57
57
  import {
58
58
  resolveAutoProxy
59
- } from "./chunk-XQMEGSHG.js";
59
+ } from "./chunk-FAIYEIZ4.js";
60
60
  import "./chunk-XT7X6QCP.js";
61
61
  import "./chunk-4YYJOFKS.js";
62
62
  import "./chunk-HVW7ABXD.js";
63
- import "./chunk-BLRJKBKP.js";
64
- import "./chunk-M6UDJ2E7.js";
65
- import "./chunk-OQ7XMM3S.js";
63
+ import "./chunk-XGLNQDLN.js";
64
+ import "./chunk-N4IXP3MY.js";
65
+ import "./chunk-YZTVHRJ2.js";
66
66
  import "./chunk-AWDFDFI3.js";
67
67
  import "./chunk-P6LJ4Y32.js";
68
68
  import "./chunk-GMECXFAN.js";
69
69
  import "./chunk-374QQGBQ.js";
70
- import "./chunk-3UAIVF4L.js";
71
- import "./chunk-6KWA3XPS.js";
70
+ import "./chunk-ZD3RDNZI.js";
71
+ import "./chunk-IZ7L6V76.js";
72
72
  import "./chunk-VWG7OQKU.js";
73
73
  import "./chunk-XBSPQ52S.js";
74
74
  import "./chunk-S3S4TGEH.js";
@@ -77,20 +77,20 @@ import "./chunk-PBN6GBJE.js";
77
77
  import "./chunk-ZTZA4UWZ.js";
78
78
  import "./chunk-EOOEC32M.js";
79
79
  import "./chunk-TJSTGSAW.js";
80
- import "./chunk-AFRXL75S.js";
80
+ import "./chunk-35PWWBGZ.js";
81
81
  import "./chunk-K4WIOZFP.js";
82
82
  import "./chunk-XUXGIA7H.js";
83
83
  import "./chunk-WERLJGIC.js";
84
84
  import "./chunk-ISN5GRYI.js";
85
- import "./chunk-I6DATIHC.js";
85
+ import "./chunk-TCWMDCBX.js";
86
86
  import "./chunk-EOVYQ3IG.js";
87
87
  import "./chunk-AMKC3AXA.js";
88
- import "./chunk-5NAYNDBT.js";
89
- import "./chunk-WLIUULZQ.js";
88
+ import "./chunk-IZPN423R.js";
89
+ import "./chunk-3SVC7SW4.js";
90
90
  import "./chunk-NE55C6S5.js";
91
91
  import "./chunk-JYVGYKXG.js";
92
- import "./chunk-PCWOSS7G.js";
93
- import "./chunk-CEND6BLF.js";
92
+ import "./chunk-XQKVEQNY.js";
93
+ import "./chunk-QBYHNRHU.js";
94
94
  import "./chunk-VC76R6W2.js";
95
95
  import "./chunk-UJKQWGFF.js";
96
96
  import "./chunk-LFNQDTSH.js";
@@ -100,7 +100,7 @@ import "./chunk-T76PLPD6.js";
100
100
  import "./chunk-FXMKHHPO.js";
101
101
  import "./chunk-RQVDTPGD.js";
102
102
  import "./chunk-TWWSYAKJ.js";
103
- import "./chunk-JDB65PPT.js";
103
+ import "./chunk-GNTVYF7E.js";
104
104
  import "./chunk-IWFLMU2N.js";
105
105
  import "./chunk-APDLWWFG.js";
106
106
  import "./chunk-VAS6HQX3.js";
@@ -118,6 +118,118 @@ import "./chunk-M2WBOQ2Q.js";
118
118
  // src/utils/checkBrowser.ts
119
119
  import { mkdirSync, writeFileSync } from "fs";
120
120
  import { join, resolve } from "path";
121
+
122
+ // src/utils/gsapTweenTails.ts
123
+ var TWEEN_TAIL_WINDOW = 0.25;
124
+ function findTweenTails(records) {
125
+ return records.flatMap(
126
+ (earlier) => records.flatMap((later) => {
127
+ const tail = tailBetween(earlier, later);
128
+ return tail ? [tail] : [];
129
+ })
130
+ );
131
+ }
132
+ function tailBetween(earlier, later) {
133
+ if (later.target !== earlier.target || later.timeline !== earlier.timeline) return null;
134
+ const overlaps = earlier.start < later.start && later.start < earlier.end;
135
+ const tail = earlier.end - later.end;
136
+ if (!overlaps || tail <= 0 || tail > TWEEN_TAIL_WINDOW) return null;
137
+ const properties = earlier.properties.filter((name) => later.properties.includes(name));
138
+ if (properties.length === 0) return null;
139
+ return {
140
+ timeline: earlier.timeline,
141
+ label: earlier.label,
142
+ properties,
143
+ earlier: { start: earlier.start, end: earlier.end },
144
+ later: { start: later.start, end: later.end }
145
+ };
146
+ }
147
+ function tweenTailMessage(tail) {
148
+ const props = tail.properties.join(", ");
149
+ const seconds = (value) => `${value.toFixed(3)} s`;
150
+ return `In timeline "${tail.timeline}", a tween on ${props} of ${tail.label} ends at ${seconds(tail.earlier.end)}, ${(tail.earlier.end - tail.later.end).toFixed(3)} s after a later tween on ${props} ends at ${seconds(tail.later.end)}. For that tail the earlier tween takes ${props} back and leaves its own end value on screen, so the later tween's end never shows. End the earlier tween by ${seconds(tail.later.start)}, or add overwrite: "auto" to the later tween.`;
151
+ }
152
+ function collectTweenRecords() {
153
+ const NOT_PROPERTIES = /* @__PURE__ */ new Set([
154
+ "duration",
155
+ "delay",
156
+ "ease",
157
+ "repeat",
158
+ "repeatDelay",
159
+ "repeatRefresh",
160
+ "yoyo",
161
+ "yoyoEase",
162
+ "stagger",
163
+ "overwrite",
164
+ "immediateRender",
165
+ "lazy",
166
+ "paused",
167
+ "reversed",
168
+ "runBackwards",
169
+ "startAt",
170
+ "keyframes",
171
+ "inherit",
172
+ "data",
173
+ "id",
174
+ "callbackScope",
175
+ "onStart",
176
+ "onStartParams",
177
+ "onUpdate",
178
+ "onUpdateParams",
179
+ "onComplete",
180
+ "onCompleteParams",
181
+ "onRepeat",
182
+ "onRepeatParams",
183
+ "onReverseComplete",
184
+ "onReverseCompleteParams",
185
+ "parent",
186
+ "onInterrupt",
187
+ "autoRevert",
188
+ "smoothChildTiming"
189
+ ]);
190
+ const registered = window.__timelines ?? {};
191
+ const names = /* @__PURE__ */ new Map();
192
+ for (const [name, timeline] of Object.entries(registered)) {
193
+ if (typeof timeline?.getChildren === "function") names.set(timeline, name);
194
+ }
195
+ const ids = /* @__PURE__ */ new Map();
196
+ function nestedInAnother(timeline) {
197
+ for (let parent = timeline.parent; parent; parent = parent.parent) {
198
+ if (names.has(parent)) return true;
199
+ }
200
+ return false;
201
+ }
202
+ function plainProperties(tween) {
203
+ const vars = tween.vars ?? {};
204
+ const plain = !vars.repeat && !vars.yoyo && !vars.keyframes && !vars.overwrite;
205
+ return plain ? Object.keys(vars).filter((key) => !NOT_PROPERTIES.has(key)) : [];
206
+ }
207
+ function labelOf(target) {
208
+ if (!(target instanceof Element)) return "an object";
209
+ if (target.id) return `#${target.id}`;
210
+ return [target.tagName.toLowerCase(), ...target.classList].join(".");
211
+ }
212
+ function recordsOf(timeline, name) {
213
+ const origin = timeline.globalTime(0);
214
+ return (timeline.getChildren?.(true, true, false) ?? []).flatMap((tween) => {
215
+ const duration = tween.totalDuration();
216
+ const properties = plainProperties(tween);
217
+ if (!(duration > 0) || properties.length === 0) return [];
218
+ const start = tween.globalTime(0) - origin;
219
+ const end = tween.globalTime(duration) - origin;
220
+ return tween.targets().map((target) => {
221
+ if (!ids.has(target)) ids.set(target, ids.size);
222
+ const id = ids.get(target) ?? -1;
223
+ return { timeline: name, target: id, label: labelOf(target), properties, start, end };
224
+ });
225
+ });
226
+ }
227
+ return [...names].flatMap(
228
+ ([timeline, name]) => nestedInAnother(timeline) ? [] : recordsOf(timeline, name)
229
+ );
230
+ }
231
+
232
+ // src/utils/checkBrowser.ts
121
233
  async function preResolveHostileMediaProxies(projectDir, html, autoProxyOverride) {
122
234
  const none = { findings: [], failedPaths: /* @__PURE__ */ new Set() };
123
235
  if (!resolveAutoProxy(projectDir, autoProxyOverride)) return none;
@@ -172,7 +284,7 @@ function proxyFailedDraft(message) {
172
284
  return { code: "media_proxy_failed", severity: "warning", message, time: 0 };
173
285
  }
174
286
  async function runBrowserCheck(project, options, motion, runGrid) {
175
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-I4CWOXLK.js");
287
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-26MXQOZG.js");
176
288
  const html = await bundleWithLocalizedFonts(project.dir);
177
289
  const { findings: drafts, failedPaths } = await preResolveHostileMediaProxies(
178
290
  project.dir,
@@ -202,10 +314,14 @@ async function runBrowserCheck(project, options, motion, runGrid) {
202
314
  await waitForPreferredSeekTarget(page);
203
315
  const rootAnchor = await resolveRootAnchor(page);
204
316
  const launchSettleMs = Date.now() - launchSettleStart;
205
- const { analyzeClipMediaFit } = await import("./src-7V6LBC56.js");
317
+ const { analyzeClipMediaFit } = await import("./src-2NN2WB6X.js");
206
318
  for (const entry of await auditClipDurations(page, analyzeClipMediaFit, options.timeout)) {
207
319
  drafts.push({ code: "clip_media_fit", severity: entry.level, message: entry.text, time: 0 });
208
320
  }
321
+ for (const tail of findTweenTails(await page.evaluate(collectTweenRecords) ?? [])) {
322
+ const message = tweenTailMessage(tail);
323
+ drafts.push({ code: "gsap_tween_tail", severity: "warning", message, time: tail.later.end });
324
+ }
209
325
  const driver = createPageDriver(page, (time) => {
210
326
  currentTime = time;
211
327
  });
@@ -226,7 +342,7 @@ async function runBrowserCheck(project, options, motion, runGrid) {
226
342
  }
227
343
  async function captureFindingCrops(project, options, requests) {
228
344
  if (requests.length === 0) return [];
229
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-I4CWOXLK.js");
345
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-26MXQOZG.js");
230
346
  const html = await bundleWithLocalizedFonts(project.dir);
231
347
  const server = await serveStaticProjectHtml(
232
348
  project.dir,
@@ -438,6 +554,7 @@ function wireNetworkListeners(page, drafts, currentTime) {
438
554
  function createPageDriver(page, setTime) {
439
555
  return {
440
556
  initialize: (contrast) => injectAuditScripts(page, contrast),
557
+ matchComponents: (components, findings) => page.evaluate(matchComponentFindings, { components, findings }),
441
558
  getDuration: () => getCompositionDuration(page),
442
559
  hasNoTimelineDeclaration: () => hasNoTimelineDeclaration(page),
443
560
  getTransitionBoundaries: () => collectTweenBoundaries(page),
@@ -1174,12 +1291,37 @@ function urlPath(url) {
1174
1291
  return url;
1175
1292
  }
1176
1293
  }
1294
+ function matchComponentFindings({
1295
+ components,
1296
+ findings
1297
+ }) {
1298
+ const roots = components.flatMap((selector) => {
1299
+ const matches = [...document.querySelectorAll(selector)];
1300
+ if (!matches.length) throw new Error(`Component selector matched nothing: ${selector}`);
1301
+ return matches;
1302
+ });
1303
+ function matchesSelector(selector) {
1304
+ try {
1305
+ const elements = [...document.querySelectorAll(selector)];
1306
+ if (!elements.length) return null;
1307
+ return elements.some((el) => roots.some((root) => root.contains(el)));
1308
+ } catch {
1309
+ return null;
1310
+ }
1311
+ }
1312
+ return findings.map((finding) => {
1313
+ if (!finding.selector || finding.selector === "[data-composition-id]") return true;
1314
+ const container = Reflect.get(finding, "containerSelector");
1315
+ return matchesSelector(finding.selector) !== false || typeof container === "string" && matchesSelector(container) !== false;
1316
+ });
1317
+ }
1177
1318
  export {
1178
1319
  captureFindingCrops,
1179
1320
  captureOverviewShot,
1180
1321
  collectSeekClock,
1181
1322
  dropFailedProxyEchoes,
1182
1323
  keepBrokenImageAborts,
1324
+ matchComponentFindings,
1183
1325
  preResolveHostileMediaProxies,
1184
1326
  runBrowserCheck
1185
1327
  };
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ISN5GRYI.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-I6DATIHC.js";
20
+ } from "./chunk-TCWMDCBX.js";
21
21
 
22
22
  // src/utils/updateCheck.ts
23
23
  import { existsSync, readFileSync } from "fs";
@@ -39,7 +39,7 @@ import {
39
39
  stripEmbeddedRuntimeScripts,
40
40
  styleElementsFor,
41
41
  warnUnknownEnumValues
42
- } from "./chunk-CEND6BLF.js";
42
+ } from "./chunk-QBYHNRHU.js";
43
43
  import {
44
44
  cssVariableName
45
45
  } from "./chunk-VC76R6W2.js";
@@ -49,7 +49,7 @@ import {
49
49
  } from "./chunk-OFQWTKPW.js";
50
50
  import {
51
51
  lintHyperframeHtml
52
- } from "./chunk-JDB65PPT.js";
52
+ } from "./chunk-GNTVYF7E.js";
53
53
  import {
54
54
  checkSubCompositionUsability,
55
55
  resolveSubCompositionContent
@@ -127,6 +127,9 @@ async function clampProbedMedia(html, projectDir, probeMediaDuration) {
127
127
  return html;
128
128
  }
129
129
 
130
+ // ../core/dist/compiler/htmlBundler.js
131
+ import { createHash } from "crypto";
132
+
130
133
  // ../core/dist/sceneParts.js
131
134
  var SCENE_PART_ATTR = "data-hf-scene";
132
135
  var SCENE_PARTS_META = "hf-scene-parts";
@@ -2408,7 +2411,7 @@ function pushRun(runs, scene, chunk) {
2408
2411
  else
2409
2412
  runs.push({ scene, chunks: [chunk] });
2410
2413
  }
2411
- function coalesceHeadStylesAndBodyScripts(document) {
2414
+ function coalesceHeadStylesAndBodyScripts(document, provenance) {
2412
2415
  const allHeadStyles = [...document.querySelectorAll("head style")];
2413
2416
  const isScenePart = (el) => el.hasAttribute(SCENE_PART_ATTR);
2414
2417
  for (const run of allHeadStyles.length > 1 ? headStyleRuns(allHeadStyles, isScenePart) : []) {
@@ -2426,7 +2429,7 @@ function coalesceHeadStylesAndBodyScripts(document) {
2426
2429
  const mergedJs = joinJsChunks(members.map((el) => el.textContent || ""));
2427
2430
  if (mergedJs && !parsesAsScript(mergedJs)) {
2428
2431
  for (const el of members)
2429
- el.textContent = inlineScriptSource(el.textContent || "");
2432
+ el.textContent = inlineScriptSource(el.textContent || "", provenance);
2430
2433
  continue;
2431
2434
  }
2432
2435
  for (const el of members)
@@ -2434,7 +2437,7 @@ function coalesceHeadStylesAndBodyScripts(document) {
2434
2437
  if (!mergedJs)
2435
2438
  continue;
2436
2439
  const inlineScript = document.createElement("script");
2437
- inlineScript.textContent = inlineScriptSource(mergedJs);
2440
+ inlineScript.textContent = inlineScriptSource(mergedJs, provenance);
2438
2441
  if (anchor)
2439
2442
  anchor.before(inlineScript);
2440
2443
  else
@@ -2463,18 +2466,29 @@ function parsesAsScript(source) {
2463
2466
  return false;
2464
2467
  }
2465
2468
  }
2466
- function stripJsCommentsParserSafe(source) {
2469
+ function stripJsCommentsParserSafe(source, provenance) {
2467
2470
  if (!source)
2468
2471
  return source;
2469
2472
  try {
2470
- const result = transformSync(source, { loader: "js", minify: false, legalComments: "none" });
2473
+ const result = transformSync(source, {
2474
+ loader: "js",
2475
+ minify: false,
2476
+ legalComments: "none",
2477
+ ...provenance ? { sourcemap: "external", sourcefile: "hf-authored-bundle.js" } : {}
2478
+ });
2479
+ if (provenance) {
2480
+ const sourceURL = `hf-inspect-${createHash("sha256").update(source).digest("hex")}.js`;
2481
+ provenance({ input: source, output: result.code.trim(), sourceMap: result.map, sourceURL });
2482
+ return `${result.code.trim()}
2483
+ //# sourceURL=${sourceURL}`;
2484
+ }
2471
2485
  return result.code.trim();
2472
2486
  } catch {
2473
2487
  return source;
2474
2488
  }
2475
2489
  }
2476
- function inlineScriptSource(js) {
2477
- return escapeInlineScriptSource(stripJsCommentsParserSafe(js));
2490
+ function inlineScriptSource(js, provenance) {
2491
+ return escapeInlineScriptSource(stripJsCommentsParserSafe(js, provenance));
2478
2492
  }
2479
2493
  function preserveLocalScriptIntegrity(doc, src, resolvePath) {
2480
2494
  const path = resolvePath(src);
@@ -2804,7 +2818,7 @@ async function bundleProject(projectDir, options) {
2804
2818
  const script = document.createElement("script");
2805
2819
  if (scene)
2806
2820
  script.setAttribute(SCENE_PART_ATTR, scene);
2807
- script.textContent = skipsRunMerge ? inlineScriptSource(text) : text;
2821
+ script.textContent = skipsRunMerge ? inlineScriptSource(text, options?.scriptProvenance) : text;
2808
2822
  document.body.appendChild(script);
2809
2823
  }
2810
2824
  }
@@ -2812,10 +2826,10 @@ async function bundleProject(projectDir, options) {
2812
2826
  emitRootCompositionVariableStyles(document, compVariablesByComp);
2813
2827
  enforceCompositionPixelSizing(document);
2814
2828
  autoHealMissingCompositionIds(document);
2815
- coalesceHeadStylesAndBodyScripts(document);
2829
+ coalesceHeadStylesAndBodyScripts(document, options?.scriptProvenance);
2816
2830
  for (const el of document.querySelectorAll(`script[${INLINED_FILE_ATTR}]`)) {
2817
2831
  const js = el.textContent ?? "";
2818
- el.textContent = escapeInlineScriptSource(isJavaScriptType(el) ? stripJsCommentsParserSafe(js) : js);
2832
+ el.textContent = escapeInlineScriptSource(isJavaScriptType(el) ? stripJsCommentsParserSafe(js, options?.scriptProvenance) : js);
2819
2833
  }
2820
2834
  deferScriptsUntilFonts(document, (el) => el.hasAttribute(RUNTIME_BOOTSTRAP_ATTR));
2821
2835
  injectTextRenderingRule(document);
@@ -3068,8 +3082,8 @@ function extractCompiledHtmlParityContract(html) {
3068
3082
  }
3069
3083
 
3070
3084
  // ../core/dist/compiler/scenePartsManifest.js
3071
- import { createHash } from "crypto";
3072
- var hash = (text) => createHash("sha1").update(text).digest("hex").slice(0, 16);
3085
+ import { createHash as createHash2 } from "crypto";
3086
+ var hash = (text) => createHash2("sha1").update(text).digest("hex").slice(0, 16);
3073
3087
  function addScenePartsManifest(html, ignore = []) {
3074
3088
  const doc = parseHTMLContent(html);
3075
3089
  const parts = [...doc.querySelectorAll(`[${SCENE_PART_ATTR}]`)];
@@ -9,7 +9,7 @@ import {
9
9
  formatPreviewProxyBox,
10
10
  hdrToSdrToneMapFilter,
11
11
  parseFirstFrameColour
12
- } from "./chunk-PCWOSS7G.js";
12
+ } from "./chunk-XQKVEQNY.js";
13
13
  import {
14
14
  decodeAuthoredAttribute,
15
15
  scanHtmlOpeningTags
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  formatVariableValidationIssue,
21
21
  validateVariables
22
- } from "./chunk-PCWOSS7G.js";
22
+ } from "./chunk-XQKVEQNY.js";
23
23
  import {
24
24
  extractCompositionMetadata
25
25
  } from "./chunk-LFNQDTSH.js";
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-AMKC3AXA.js";
10
10
  import {
11
11
  runCancellableProcess
12
- } from "./chunk-XPQSL5VS.js";
12
+ } from "./chunk-54DMWFQZ.js";
13
13
  import {
14
14
  findFfBinary
15
15
  } from "./chunk-VAS6HQX3.js";
@@ -20,7 +20,7 @@ import {
20
20
  typeDirPath,
21
21
  updateRecord,
22
22
  withFigmaErrors
23
- } from "./chunk-7JTFPUMA.js";
23
+ } from "./chunk-YEBKEWKB.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-C3GDIXHO.js");
232
+ const { trackFigmaImport } = await import("./telemetry-KVCZKVTE.js");
233
233
  trackFigmaImport({
234
234
  phase: "asset",
235
235
  reused: results.every((r) => r.reused),
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-5ETJX6WM.js";
17
17
  import {
18
18
  runEnvironmentChecks
19
- } from "./chunk-M5B42RL5.js";
19
+ } from "./chunk-WUUOFMHU.js";
20
20
  import {
21
21
  getAvailableMemoryMb,
22
22
  getFreeDiskMb,
@@ -32,21 +32,21 @@ import {
32
32
  import {
33
33
  getUpdateMeta,
34
34
  withMeta
35
- } from "./chunk-AFRXL75S.js";
35
+ } from "./chunk-35PWWBGZ.js";
36
36
  import {
37
37
  CONFIG_PATH,
38
38
  withFileLock
39
39
  } from "./chunk-XUXGIA7H.js";
40
40
  import {
41
41
  VERSION
42
- } from "./chunk-I6DATIHC.js";
42
+ } from "./chunk-TCWMDCBX.js";
43
43
  import {
44
44
  OPTIONAL_PACKAGES,
45
45
  installedOptionalPackageVersion
46
46
  } from "./chunk-3DKN5WKL.js";
47
47
  import {
48
48
  resolveExtractCacheDir
49
- } from "./chunk-5NAYNDBT.js";
49
+ } from "./chunk-IZPN423R.js";
50
50
  import {
51
51
  normalizeErrorMessage
52
52
  } from "./chunk-KNU5COPB.js";
@@ -232,7 +232,7 @@ function checkEnvironment() {
232
232
  return { ok: true, detail: parts.join(" \xB7 ") };
233
233
  }
234
234
  async function checkWhisper() {
235
- const { findWhisper, getInstallInstructions } = await import("./manager-ES2UFT4X.js");
235
+ const { findWhisper, getInstallInstructions } = await import("./manager-X44GKUEL.js");
236
236
  const result = findWhisper();
237
237
  if (result) {
238
238
  return { ok: true, detail: result.executablePath };
@@ -218,13 +218,20 @@ function renderSetupError(error) {
218
218
  const reason = failure?.reason ?? error.stderr.trim();
219
219
  return reason ? new Error(reason, { cause: error }) : error;
220
220
  }
221
+ function tsxLoaderFromCliInstall() {
222
+ try {
223
+ return import.meta.resolve("tsx");
224
+ } catch {
225
+ return "tsx";
226
+ }
227
+ }
221
228
  async function runRenderSetupWorker(mode, input, options) {
222
229
  const sourceMode = import.meta.url.endsWith(".ts");
223
230
  const workerUrl = new URL(
224
231
  sourceMode ? "../renderSetupWorker.ts" : "./renderSetupWorker.js",
225
232
  import.meta.url
226
233
  );
227
- const execArgv = sourceMode ? ["--import", "tsx"] : [];
234
+ const execArgv = sourceMode && !process.versions.bun ? ["--import", tsxLoaderFromCliInstall()] : [];
228
235
  let result;
229
236
  try {
230
237
  result = await runCancellableProcess(
@@ -21,7 +21,7 @@ import {
21
21
  splitElementInHtml,
22
22
  unwrapElementsFromHtml,
23
23
  wrapElementsInHtml
24
- } from "./chunk-ZNHAJCEA.js";
24
+ } from "./chunk-XNDXENJQ.js";
25
25
  import {
26
26
  MAX_WINDOW_IDLE_MS,
27
27
  STUDIO_SIGNATURE_MANIFEST_PATHS,
@@ -65,7 +65,7 @@ import {
65
65
  scanProjectMediaCodecMap,
66
66
  shouldPrewarmProxy,
67
67
  waitForProxy
68
- } from "./chunk-EL5QVJEG.js";
68
+ } from "./chunk-3ZPFRDEJ.js";
69
69
  import {
70
70
  STUDIO_MOTION_PATH,
71
71
  createStudioMotionRenderBodyScript,
@@ -98,7 +98,7 @@ import {
98
98
  } from "./chunk-EOVYQ3IG.js";
99
99
  import {
100
100
  addScenePartsManifest
101
- } from "./chunk-WLIUULZQ.js";
101
+ } from "./chunk-3SVC7SW4.js";
102
102
  import {
103
103
  ensureHfIds
104
104
  } from "./chunk-NE55C6S5.js";
@@ -111,7 +111,7 @@ import {
111
111
  parseFps,
112
112
  parsePreviewProxyBox,
113
113
  sameInstant
114
- } from "./chunk-PCWOSS7G.js";
114
+ } from "./chunk-XQKVEQNY.js";
115
115
  import {
116
116
  AFTER_FONTS_SCRIPT_TYPE,
117
117
  RUNTIME_BOOTSTRAP_ATTR,
@@ -125,7 +125,7 @@ import {
125
125
  resolveRateSpec,
126
126
  sourceTimeAt,
127
127
  stripEmbeddedRuntimeScripts
128
- } from "./chunk-CEND6BLF.js";
128
+ } from "./chunk-QBYHNRHU.js";
129
129
  import {
130
130
  HTML_ATTRIBUTE_ENTITIES,
131
131
  MagicString,
@@ -5446,7 +5446,7 @@ async function prepareGsapMutationScript(c, res, firstMutation) {
5446
5446
  let block = extractGsapScriptBlock(html);
5447
5447
  if (!block && (firstMutation.type === "add" || firstMutation.type === "add-with-keyframes")) {
5448
5448
  const compId = html.match(/data-composition-id="([^"]+)"/)?.[1] ?? "main";
5449
- const { GSAP_CDN } = await import("./dist-Z7Q3JS7K.js");
5449
+ const { GSAP_CDN } = await import("./dist-7JXLFD6U.js");
5450
5450
  const bootstrap = [
5451
5451
  `<script src="${GSAP_CDN}"></script>`,
5452
5452
  "<script>",