hyperframes 0.8.114 → 0.8.116

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 (179) hide show
  1. package/dist/{add-KCBOVKEU.js → add-5AOKGJRR.js} +17 -16
  2. package/dist/{animatedGifPrep-U7FMC7DB.js → animatedGifPrep-XKCVQ4ZL.js} +7 -7
  3. package/dist/{asset-AJ4ZZE3K.js → asset-QE74HE7H.js} +2 -2
  4. package/dist/{assetCataloger-5LCGR5XU.js → assetCataloger-3VJRWB3N.js} +3 -3
  5. package/dist/{auth-PSEHAWSA.js → auth-HQE2GKY2.js} +2 -2
  6. package/dist/{autoUpdate-E32YLKFZ.js → autoUpdate-MH57H575.js} +2 -2
  7. package/dist/{backgroundChecks-FNHBA7YI.js → backgroundChecks-JP2GHEP4.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-QVJ7NEUH.js → batchRender-KIFBKKVN.js} +4 -4
  10. package/dist/{beats-F67KZC3V.js → beats-V334Q2GV.js} +16 -12
  11. package/dist/{benchmark-CGD6CPRK.js → benchmark-62QZH5YE.js} +13 -13
  12. package/dist/{browser-FPX3Z2AR.js → browser-EK7OBU6W.js} +10 -10
  13. package/dist/{bundleWithLocalizedFonts-4CVITCYK.js → bundleWithLocalizedFonts-263BUY7C.js} +2 -2
  14. package/dist/{capture-F2Y7TIHU.js → capture-56HMZGJW.js} +18 -13
  15. package/dist/{capture-GLHK4ST7.js → capture-6F3XPKXI.js} +2 -2
  16. package/dist/{catalog-4BZX7MQQ.js → catalog-JO7WHBYC.js} +17 -16
  17. package/dist/{check-IO3HWLLU.js → check-S4RZIS26.js} +34 -32
  18. package/dist/{checkBrowser-JTQ7ABCL.js → checkBrowser-NVWULRE7.js} +33 -31
  19. package/dist/{chunk-GDJ74GHW.js → chunk-23KZNTIV.js} +1 -1
  20. package/dist/{chunk-L5QASNBN.js → chunk-2E4A277E.js} +1 -1
  21. package/dist/{chunk-QPR4N2D4.js → chunk-2HE5ZOXK.js} +1 -1
  22. package/dist/{chunk-XFJXFNJF.js → chunk-34AE4KPB.js} +29 -14
  23. package/dist/{chunk-G2T2X6FZ.js → chunk-63O3AR5U.js} +3 -3
  24. package/dist/{chunk-T3NMEYGM.js → chunk-6FRHKGRY.js} +1 -1
  25. package/dist/{chunk-MST5JBOR.js → chunk-6TSA2KDM.js} +1 -1
  26. package/dist/{chunk-SIN32SJB.js → chunk-7Z2XNQ7F.js} +2 -2
  27. package/dist/{chunk-XMAL2A7Y.js → chunk-AIYKVE4Y.js} +1 -1
  28. package/dist/{chunk-FCEFKWPM.js → chunk-AKZD7VWZ.js} +2 -2
  29. package/dist/{chunk-3SH322X7.js → chunk-C47XJXSK.js} +15 -18
  30. package/dist/{chunk-P3FGUSFK.js → chunk-CCWSLTWA.js} +10 -10
  31. package/dist/{chunk-752X6G7T.js → chunk-CHWO3UN6.js} +2 -2
  32. package/dist/{chunk-LDSWUYZB.js → chunk-CVE7OUZE.js} +3 -3
  33. package/dist/{chunk-MLLBZR2U.js → chunk-DRLB5STV.js} +2 -2
  34. package/dist/{chunk-IPXPSCWV.js → chunk-ENQL7NCM.js} +3 -3
  35. package/dist/{chunk-SYQOD3W7.js → chunk-EWR3SLQV.js} +1 -1
  36. package/dist/{chunk-6U3K3U62.js → chunk-EWUI4PU6.js} +1 -1
  37. package/dist/{chunk-BOUDTDBQ.js → chunk-FERBBWDU.js} +1 -1
  38. package/dist/{chunk-DR7QW6C5.js → chunk-FFF36PQA.js} +2 -2
  39. package/dist/{chunk-UUDQD62L.js → chunk-FSLYPQ5Z.js} +1 -1
  40. package/dist/{chunk-HTQR7SUZ.js → chunk-GNQF4NZW.js} +1 -1
  41. package/dist/{chunk-7ZR25WGW.js → chunk-IGWZCCLO.js} +7 -7
  42. package/dist/{chunk-MR6BQLGM.js → chunk-IX75NQSA.js} +2 -2
  43. package/dist/{chunk-SSM2TJYE.js → chunk-JBZYEZPZ.js} +1 -1
  44. package/dist/{chunk-JH7ZJRDL.js → chunk-JYB7NKO6.js} +3 -3
  45. package/dist/{chunk-LSSIYIXI.js → chunk-KNCLHJB5.js} +3 -3
  46. package/dist/{chunk-OCNCK5FQ.js → chunk-MZPMAU25.js} +2 -2
  47. package/dist/{chunk-3IUSKIZW.js → chunk-NCQV2NMY.js} +1 -1
  48. package/dist/{chunk-YJEGT5L6.js → chunk-NITBGIHR.js} +2 -2
  49. package/dist/{chunk-PZTEY73C.js → chunk-NRTZ2JPC.js} +1 -1
  50. package/dist/{chunk-IP3XINRB.js → chunk-P6LJ4Y32.js} +23 -2944
  51. package/dist/chunk-PAZUQZYV.js +2961 -0
  52. package/dist/{chunk-7543YIMQ.js → chunk-PHBPRHKK.js} +1 -1
  53. package/dist/{chunk-HGMKPPGD.js → chunk-QITH7ALB.js} +4 -4
  54. package/dist/{chunk-WAS5VEA4.js → chunk-RTLYNXAC.js} +1 -1
  55. package/dist/{chunk-RKSRXPKV.js → chunk-S5Q46UEI.js} +5 -5
  56. package/dist/{chunk-LYNBNESS.js → chunk-SXV67HVP.js} +207 -74
  57. package/dist/{chunk-4KGMIOMY.js → chunk-TEYBS6T3.js} +10 -7
  58. package/dist/{chunk-RDMAU7AJ.js → chunk-TRLP3CSL.js} +1 -1
  59. package/dist/{chunk-LMC46FK5.js → chunk-TY76XMMP.js} +2 -2
  60. package/dist/{chunk-XXKBPGPJ.js → chunk-VJ2RAP65.js} +2 -2
  61. package/dist/{chunk-ENHAGQEP.js → chunk-VLB4NGRR.js} +1 -1
  62. package/dist/{chunk-ZMMSMDCA.js → chunk-VU5IDWKX.js} +2 -2
  63. package/dist/chunk-WN62HDA7.js +93 -0
  64. package/dist/{chunk-E52XEEAA.js → chunk-WUUEWXA2.js} +1 -1
  65. package/dist/chunk-WWL6YGYK.js +3541 -0
  66. package/dist/{chunk-VLC7JS4K.js → chunk-XTCMIITZ.js} +1 -1
  67. package/dist/{chunk-BORVRAHJ.js → chunk-YX55Y7UO.js} +14 -18
  68. package/dist/{clean-MCL76KQH.js → clean-DPW2FTMM.js} +17 -17
  69. package/dist/cli.js +53 -52
  70. package/dist/{cloud-444K6HIK.js → cloud-OAYSRXAJ.js} +4 -4
  71. package/dist/{cloudrun-BML6ZG7K.js → cloudrun-NM2ZMAJV.js} +5 -5
  72. package/dist/{compare-CGNTCOR2.js → compare-CZC6ROYF.js} +28 -26
  73. package/dist/{compiler-ZHVIEP26.js → compiler-3MFRD377.js} +3 -3
  74. package/dist/{component-HTXLOIHR.js → component-6D5RBOWZ.js} +3 -3
  75. package/dist/{compositions-KK46F5AC.js → compositions-5KCUVODZ.js} +12 -12
  76. package/dist/{delete-SSRZKKWQ.js → delete-ZGLELTUJ.js} +2 -2
  77. package/dist/{deterministicFonts-A4CNCSAL.js → deterministicFonts-O7BTFDJU.js} +2 -2
  78. package/dist/{dist-HRBNHR4M.js → dist-JAOG6MYW.js} +1 -1
  79. package/dist/{dist-OKRUIHYU.js → dist-XSSXGBRH.js} +3 -3
  80. package/dist/{doctor-IIOX25KM.js → doctor-CICSVC7I.js} +11 -11
  81. package/dist/{events-TYMMAKHX.js → events-V3O6Q5ZH.js} +9 -9
  82. package/dist/{events-DCUZBRW6.js → events-Y4NBIJBP.js} +10 -10
  83. package/dist/{feedback-RIAGW6LG.js → feedback-EA3K6QXT.js} +11 -11
  84. package/dist/{figma-VBOUGJNX.js → figma-WOOHCXDA.js} +3 -3
  85. package/dist/fontLocalizeCli.js +10 -10
  86. package/dist/{get-LT6NUGNR.js → get-64SDPINM.js} +2 -2
  87. package/dist/{gpuPolicy-LRMOZXFU.js → gpuPolicy-TFCLAD64.js} +7 -7
  88. package/dist/{grade-compare-WWYQSQUM.js → grade-compare-NXAFWDBR.js} +28 -26
  89. package/dist/{gsapParserAcorn-SZANFUAQ.js → gsapParserAcorn-FLWABPQM.js} +1 -1
  90. package/dist/{help-55ZV2M5U.js → help-6H4ICA27.js} +1 -1
  91. package/dist/{history-QCY7CO4P.js → history-TPRRROOR.js} +23 -21
  92. package/dist/hyperframe-runtime.js +53 -53
  93. package/dist/hyperframe.manifest.json +1 -1
  94. package/dist/hyperframe.runtime.iife.js +53 -53
  95. package/dist/hyperframes-player.global.js +1 -1
  96. package/dist/{info-ROTXHRAH.js → info-DDXWWAM3.js} +12 -12
  97. package/dist/{init-5XFOWGGN.js → init-KULZFAS7.js} +24 -23
  98. package/dist/{inspect-3UF4VLTM.js → inspect-VEJH72DJ.js} +29 -27
  99. package/dist/{installer-DGYYDGWJ.js → installer-TBL3PE2J.js} +6 -5
  100. package/dist/{keyframes-OFZ6XNMC.js → keyframes-W6KIRZ4O.js} +13 -13
  101. package/dist/{lambda-OQBFCEFA.js → lambda-JJXODPS5.js} +6 -6
  102. package/dist/{layout-B4XF2734.js → layout-KVG7PJ3F.js} +29 -27
  103. package/dist/{lint-3YIJITTC.js → lint-GQ5IVVCN.js} +13 -13
  104. package/dist/{lintProject-TOLC6HDS.js → lintProject-FDJYTOVM.js} +1 -1
  105. package/dist/{list-276FF3QE.js → list-QZ7LV6HF.js} +2 -2
  106. package/dist/{login-SA3MCAIS.js → login-526R3KCB.js} +4 -4
  107. package/dist/{media-treatment-ICA5DWHS.js → media-treatment-H7LGSO3I.js} +13 -13
  108. package/dist/{models-JF5OOZ5A.js → models-WOEP555T.js} +8 -8
  109. package/dist/{motionShot-TQBDZZ4M.js → motionShot-235LNUY7.js} +17 -14
  110. package/dist/{normalize-audio-URNASKUV.js → normalize-audio-GTAESDG6.js} +12 -12
  111. package/dist/{pipeline-IWPF5ZMK.js → pipeline-NBHOEZPA.js} +7 -7
  112. package/dist/{play-JYBAII35.js → play-SBTJLOWX.js} +23 -22
  113. package/dist/{preflight-2GH2Z4GZ.js → preflight-KQCXRC6W.js} +8 -8
  114. package/dist/{present-WIEZRZET.js → present-TXULFA2J.js} +18 -18
  115. package/dist/{preview-YUPU646E.js → preview-E2U4ER7H.js} +19 -18
  116. package/dist/{producer-SL66UNEP.js → producer-DR3TOPSC.js} +1 -1
  117. package/dist/{projectConfig-7AKXZNNR.js → projectConfig-QBYFCJYE.js} +8 -7
  118. package/dist/{publication-B2OERUY7.js → publication-TWGRIP5F.js} +3 -3
  119. package/dist/{publish-ZGKT7KED.js → publish-JOUHOKGX.js} +10 -9
  120. package/dist/{remove-background-4LRTT6YL.js → remove-background-GQZIZBHM.js} +8 -8
  121. package/dist/{render-AX77WC3C.js → render-2LC2DUR3.js} +13 -13
  122. package/dist/{render-TGCDBKMP.js → render-JR3YIYZ4.js} +4 -4
  123. package/dist/{render-F3QVCKKA.js → render-UVGS7PLJ.js} +23 -22
  124. package/dist/{render-batch-WRQFW4UC.js → render-batch-MYH6ZGO3.js} +4 -4
  125. package/dist/{renderCancellation-BFCQYGVV.js → renderCancellation-EIBZHTFW.js} +7 -7
  126. package/dist/renderSetupWorker.js +1 -1
  127. package/dist/{resolver-37UOGAMT.js → resolver-4Z5YISAU.js} +6 -5
  128. package/dist/{sherpa-SDVKYXCX.js → sherpa-UX3MQXO5.js} +8 -8
  129. package/dist/skills/hyperframes/SKILL.md +4 -0
  130. package/dist/skills/hyperframes-cli/SKILL.md +8 -0
  131. package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +8 -0
  132. package/dist/skills/media-use/audio/scripts/audio.mjs +4 -1
  133. package/dist/skills/media-use/audio/scripts/audio.test.mjs +33 -0
  134. package/dist/skills/media-use/audio/scripts/lib/tts.mjs +1 -0
  135. package/dist/skills/media-use/audio/scripts/lib/tts.test.mjs +44 -1
  136. package/dist/{skills-M6ETUUH5.js → skills-GXETMIED.js} +12 -12
  137. package/dist/{skillsUpdateCheck-UTX5LT5C.js → skillsUpdateCheck-XS7OE6FX.js} +3 -3
  138. package/dist/{snapshot-HMDAENTY.js → snapshot-OAHQ3EVJ.js} +29 -27
  139. package/dist/{src-PLWCT745.js → src-AZ5YCYQP.js} +9 -9
  140. package/dist/{src-PJJ6NISA.js → src-X6ACPJHG.js} +6 -6
  141. package/dist/{staticProjectServer-XDH5SQV6.js → staticProjectServer-P4QSLLF6.js} +17 -16
  142. package/dist/{status-LENRPQS5.js → status-KDRWJBPW.js} +7 -7
  143. package/dist/studio/assets/{hyperframes-player-aXNJKiIg.js → hyperframes-player-mGYvPVpw.js} +1 -1
  144. package/dist/studio/assets/{index-Bn2RJNTJ.js → index-BWHt0-ir.js} +1 -1
  145. package/dist/studio/assets/{index-Dz7doz9l.js → index-DYNaXPVf.js} +203 -203
  146. package/dist/studio/assets/{index-C9N-DGjC.js → index-Dr3hNpvS.js} +1 -1
  147. package/dist/studio/assets/{index-BYnsJnJV.css → index-t1LH6H5H.css} +1 -1
  148. package/dist/studio/{chunk-BIUXP3PG.js → chunk-3F47EFCT.js} +142 -277
  149. package/dist/studio/chunk-3F47EFCT.js.map +1 -0
  150. package/dist/studio/{chunk-K47E2ZJA.js → chunk-5EKWJZLM.js} +504 -17
  151. package/dist/studio/chunk-5EKWJZLM.js.map +1 -0
  152. package/dist/studio/{chunk-VWT7STY3.js → chunk-J6Q572FA.js} +2 -2
  153. package/dist/studio/{domEditingLayers-V67MS4WP.js → domEditingLayers-OL7GLSS4.js} +3 -5
  154. package/dist/studio/index.d.ts +146 -40
  155. package/dist/studio/index.html +2 -2
  156. package/dist/studio/index.js +4021 -3591
  157. package/dist/studio/index.js.map +1 -1
  158. package/dist/studio/player.js +2 -2
  159. package/dist/studio/styles.css +1 -1
  160. package/dist/{studio-api-E5WFZ7YK.js → studio-api-SYQOPCMB.js} +12 -10
  161. package/dist/{studioServer-C7GTHTRY.js → studioServer-ANSX6DY2.js} +50 -50
  162. package/dist/{system-4KRSV2B7.js → system-B6UYANYL.js} +7 -7
  163. package/dist/{telemetry-XH6D37RL.js → telemetry-AZEW2DZP.js} +10 -10
  164. package/dist/{timeline-4RR7O6QW.js → timeline-VIKY65W6.js} +17 -17
  165. package/dist/{tokens-MVTK3RPO.js → tokens-SSGCAC7E.js} +2 -2
  166. package/dist/{transcribe-I6WDPH7E.js → transcribe-O33POKJY.js} +13 -13
  167. package/dist/{transcribe-3UXXEDXX.js → transcribe-PF6BUHHQ.js} +8 -8
  168. package/dist/{updateCheck-ELMPFCBF.js → updateCheck-Y4SUY6VE.js} +2 -2
  169. package/dist/{upgrade-6UAOGP4D.js → upgrade-EGIS5OCB.js} +2 -2
  170. package/dist/{urlDownloader-4KNER64L.js → urlDownloader-UBY27GFW.js} +6 -6
  171. package/dist/usage-EC3KFUIJ.js +2139 -0
  172. package/dist/{validate-ZMMGUMBD.js → validate-FE74RMPD.js} +17 -16
  173. package/dist/{video-GINAMW5I.js → video-DODRESEY.js} +7 -7
  174. package/package.json +1 -1
  175. package/dist/chunk-C6AIZOQN.js +0 -3541
  176. package/dist/studio/chunk-BIUXP3PG.js.map +0 -1
  177. package/dist/studio/chunk-K47E2ZJA.js.map +0 -1
  178. /package/dist/studio/{chunk-VWT7STY3.js.map → chunk-J6Q572FA.js.map} +0 -0
  179. /package/dist/studio/{domEditingLayers-V67MS4WP.js.map → domEditingLayers-OL7GLSS4.js.map} +0 -0
@@ -77,7 +77,7 @@ import {
77
77
  serializeVfxChain,
78
78
  toFps,
79
79
  validateVariables
80
- } from "./chunk-FCEFKWPM.js";
80
+ } from "./chunk-AKZD7VWZ.js";
81
81
  import {
82
82
  CANVAS_DIMENSIONS,
83
83
  COMPOSITION_VARIABLE_TYPES,
@@ -105,7 +105,7 @@ import {
105
105
  updateElementInHtml,
106
106
  validateCompositionGsap,
107
107
  validateCompositionHtml
108
- } from "./chunk-UUDQD62L.js";
108
+ } from "./chunk-FSLYPQ5Z.js";
109
109
  import "./chunk-DPVXBVLL.js";
110
110
  import {
111
111
  AUDIBLE_MEDIA_SELECTOR,
@@ -165,7 +165,7 @@ import {
165
165
  sourceTimeAt,
166
166
  stripEmbeddedRuntimeScripts,
167
167
  timeAtSourceTime
168
- } from "./chunk-C6AIZOQN.js";
168
+ } from "./chunk-WWL6YGYK.js";
169
169
  import "./chunk-VC76R6W2.js";
170
170
  import {
171
171
  ProjectRootMissingError,
@@ -13,40 +13,40 @@ import {
13
13
  doctor_default,
14
14
  examples,
15
15
  redactHome
16
- } from "./chunk-RKSRXPKV.js";
16
+ } from "./chunk-S5Q46UEI.js";
17
17
  import "./chunk-Z27A7NUB.js";
18
18
  import "./chunk-5ETJX6WM.js";
19
19
  import {
20
20
  parseToolVersion
21
- } from "./chunk-E52XEEAA.js";
21
+ } from "./chunk-WUUEWXA2.js";
22
22
  import "./chunk-TVCRUG2S.js";
23
23
  import "./chunk-ZTZA4UWZ.js";
24
- import "./chunk-L5QASNBN.js";
24
+ import "./chunk-2E4A277E.js";
25
25
  import "./chunk-AMKC3AXA.js";
26
26
  import "./chunk-S3S4TGEH.js";
27
- import "./chunk-G2T2X6FZ.js";
28
- import "./chunk-FCEFKWPM.js";
29
- import "./chunk-UUDQD62L.js";
27
+ import "./chunk-63O3AR5U.js";
28
+ import "./chunk-AKZD7VWZ.js";
29
+ import "./chunk-FSLYPQ5Z.js";
30
30
  import "./chunk-DPVXBVLL.js";
31
- import "./chunk-OCNCK5FQ.js";
32
- import "./chunk-C6AIZOQN.js";
31
+ import "./chunk-MZPMAU25.js";
32
+ import "./chunk-WWL6YGYK.js";
33
33
  import "./chunk-VC76R6W2.js";
34
34
  import "./chunk-OFQWTKPW.js";
35
35
  import "./chunk-4PFZPP2N.js";
36
36
  import "./chunk-LCSMOLGX.js";
37
37
  import "./chunk-TWWSYAKJ.js";
38
- import "./chunk-YJEGT5L6.js";
38
+ import "./chunk-NITBGIHR.js";
39
39
  import "./chunk-HBBJFK6I.js";
40
40
  import "./chunk-PJ3HDUCY.js";
41
41
  import "./chunk-TQFG7HTI.js";
42
42
  import "./chunk-GK4AIFIH.js";
43
43
  import "./chunk-2PSPARWP.js";
44
- import "./chunk-SYQOD3W7.js";
44
+ import "./chunk-EWR3SLQV.js";
45
45
  import "./chunk-K4WIOZFP.js";
46
46
  import "./chunk-XUXGIA7H.js";
47
47
  import "./chunk-WERLJGIC.js";
48
48
  import "./chunk-ISN5GRYI.js";
49
- import "./chunk-MLLBZR2U.js";
49
+ import "./chunk-DRLB5STV.js";
50
50
  import "./chunk-KNU5COPB.js";
51
51
  import "./chunk-XT5P4QMO.js";
52
52
  import "./chunk-6BEFEWFB.js";
@@ -10,25 +10,25 @@ import {
10
10
  import {
11
11
  flushSync,
12
12
  trackEvent
13
- } from "./chunk-IPXPSCWV.js";
13
+ } from "./chunk-ENQL7NCM.js";
14
14
  import "./chunk-VWG7OQKU.js";
15
15
  import "./chunk-ZTZA4UWZ.js";
16
- import "./chunk-L5QASNBN.js";
16
+ import "./chunk-2E4A277E.js";
17
17
  import "./chunk-AMKC3AXA.js";
18
18
  import {
19
19
  defineCommand
20
20
  } from "./chunk-S3S4TGEH.js";
21
21
  import "./chunk-54HJ63Q2.js";
22
- import "./chunk-G2T2X6FZ.js";
23
- import "./chunk-FCEFKWPM.js";
24
- import "./chunk-UUDQD62L.js";
22
+ import "./chunk-63O3AR5U.js";
23
+ import "./chunk-AKZD7VWZ.js";
24
+ import "./chunk-FSLYPQ5Z.js";
25
25
  import "./chunk-DPVXBVLL.js";
26
- import "./chunk-OCNCK5FQ.js";
27
- import "./chunk-C6AIZOQN.js";
26
+ import "./chunk-MZPMAU25.js";
27
+ import "./chunk-WWL6YGYK.js";
28
28
  import "./chunk-VC76R6W2.js";
29
29
  import "./chunk-OFQWTKPW.js";
30
30
  import "./chunk-TWWSYAKJ.js";
31
- import "./chunk-YJEGT5L6.js";
31
+ import "./chunk-NITBGIHR.js";
32
32
  import "./chunk-HBBJFK6I.js";
33
33
  import "./chunk-PJ3HDUCY.js";
34
34
  import "./chunk-TQFG7HTI.js";
@@ -38,7 +38,7 @@ import "./chunk-K4WIOZFP.js";
38
38
  import "./chunk-XUXGIA7H.js";
39
39
  import "./chunk-WERLJGIC.js";
40
40
  import "./chunk-ISN5GRYI.js";
41
- import "./chunk-MLLBZR2U.js";
41
+ import "./chunk-DRLB5STV.js";
42
42
  import "./chunk-KNU5COPB.js";
43
43
  import "./chunk-3GXQPCJC.js";
44
44
  import "./chunk-RQVDTPGD.js";
@@ -30,24 +30,24 @@ import {
30
30
  trackRenderPreflightRejected,
31
31
  trackSkillsInstallSkipped,
32
32
  trackTranscribeUnavailable
33
- } from "./chunk-JH7ZJRDL.js";
34
- import "./chunk-IPXPSCWV.js";
33
+ } from "./chunk-JYB7NKO6.js";
34
+ import "./chunk-ENQL7NCM.js";
35
35
  import "./chunk-VWG7OQKU.js";
36
36
  import "./chunk-ZTZA4UWZ.js";
37
- import "./chunk-L5QASNBN.js";
37
+ import "./chunk-2E4A277E.js";
38
38
  import "./chunk-AMKC3AXA.js";
39
39
  import "./chunk-54HJ63Q2.js";
40
40
  import "./chunk-PBN6GBJE.js";
41
- import "./chunk-G2T2X6FZ.js";
42
- import "./chunk-FCEFKWPM.js";
43
- import "./chunk-UUDQD62L.js";
41
+ import "./chunk-63O3AR5U.js";
42
+ import "./chunk-AKZD7VWZ.js";
43
+ import "./chunk-FSLYPQ5Z.js";
44
44
  import "./chunk-DPVXBVLL.js";
45
- import "./chunk-OCNCK5FQ.js";
46
- import "./chunk-C6AIZOQN.js";
45
+ import "./chunk-MZPMAU25.js";
46
+ import "./chunk-WWL6YGYK.js";
47
47
  import "./chunk-VC76R6W2.js";
48
48
  import "./chunk-OFQWTKPW.js";
49
49
  import "./chunk-TWWSYAKJ.js";
50
- import "./chunk-YJEGT5L6.js";
50
+ import "./chunk-NITBGIHR.js";
51
51
  import "./chunk-HBBJFK6I.js";
52
52
  import "./chunk-PJ3HDUCY.js";
53
53
  import "./chunk-TQFG7HTI.js";
@@ -57,7 +57,7 @@ import "./chunk-K4WIOZFP.js";
57
57
  import "./chunk-XUXGIA7H.js";
58
58
  import "./chunk-WERLJGIC.js";
59
59
  import "./chunk-ISN5GRYI.js";
60
- import "./chunk-MLLBZR2U.js";
60
+ import "./chunk-DRLB5STV.js";
61
61
  import "./chunk-KNU5COPB.js";
62
62
  import "./chunk-3GXQPCJC.js";
63
63
  import "./chunk-RQVDTPGD.js";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  getDoctorSummary
9
- } from "./chunk-HGMKPPGD.js";
9
+ } from "./chunk-QITH7ALB.js";
10
10
  import {
11
11
  getPublishApiBaseUrl,
12
12
  publishProjectArchive
@@ -23,15 +23,15 @@ import {
23
23
  parseFeedbackRating,
24
24
  trackCatalogSearchMiss,
25
25
  trackRenderFeedback
26
- } from "./chunk-JH7ZJRDL.js";
26
+ } from "./chunk-JYB7NKO6.js";
27
27
  import {
28
28
  shouldTrack
29
- } from "./chunk-IPXPSCWV.js";
29
+ } from "./chunk-ENQL7NCM.js";
30
30
  import "./chunk-VWG7OQKU.js";
31
31
  import {
32
32
  c
33
33
  } from "./chunk-ZTZA4UWZ.js";
34
- import "./chunk-L5QASNBN.js";
34
+ import "./chunk-2E4A277E.js";
35
35
  import "./chunk-AMKC3AXA.js";
36
36
  import {
37
37
  defineCommand
@@ -40,16 +40,16 @@ import "./chunk-54HJ63Q2.js";
40
40
  import {
41
41
  failCommand
42
42
  } from "./chunk-PBN6GBJE.js";
43
- import "./chunk-G2T2X6FZ.js";
44
- import "./chunk-FCEFKWPM.js";
45
- import "./chunk-UUDQD62L.js";
43
+ import "./chunk-63O3AR5U.js";
44
+ import "./chunk-AKZD7VWZ.js";
45
+ import "./chunk-FSLYPQ5Z.js";
46
46
  import "./chunk-DPVXBVLL.js";
47
- import "./chunk-OCNCK5FQ.js";
48
- import "./chunk-C6AIZOQN.js";
47
+ import "./chunk-MZPMAU25.js";
48
+ import "./chunk-WWL6YGYK.js";
49
49
  import "./chunk-VC76R6W2.js";
50
50
  import "./chunk-OFQWTKPW.js";
51
51
  import "./chunk-TWWSYAKJ.js";
52
- import "./chunk-YJEGT5L6.js";
52
+ import "./chunk-NITBGIHR.js";
53
53
  import "./chunk-HBBJFK6I.js";
54
54
  import "./chunk-PJ3HDUCY.js";
55
55
  import "./chunk-TQFG7HTI.js";
@@ -63,7 +63,7 @@ import "./chunk-WERLJGIC.js";
63
63
  import "./chunk-ISN5GRYI.js";
64
64
  import {
65
65
  VERSION
66
- } from "./chunk-MLLBZR2U.js";
66
+ } from "./chunk-DRLB5STV.js";
67
67
  import "./chunk-KNU5COPB.js";
68
68
  import "./chunk-3GXQPCJC.js";
69
69
  import "./chunk-RQVDTPGD.js";
@@ -49,9 +49,9 @@ ${c.dim("either) \u2014 use the /figma skill in a Claude session for those.")}
49
49
  var figma_default = defineCommand({
50
50
  meta: { name: "figma", description: "Import figma assets, tokens, and components (REST)" },
51
51
  subCommands: {
52
- asset: () => import("./asset-AJ4ZZE3K.js").then((m) => m.default),
53
- tokens: () => import("./tokens-MVTK3RPO.js").then((m) => m.default),
54
- component: () => import("./component-HTXLOIHR.js").then((m) => m.default)
52
+ asset: () => import("./asset-QE74HE7H.js").then((m) => m.default),
53
+ tokens: () => import("./tokens-SSGCAC7E.js").then((m) => m.default),
54
+ component: () => import("./component-6D5RBOWZ.js").then((m) => m.default)
55
55
  },
56
56
  async run({ args }) {
57
57
  if (!args._?.[0]) console.log(HELP);
@@ -4,26 +4,26 @@ import { dirname as __hf_dirname } from "node:path";
4
4
  var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
- import "./chunk-P3FGUSFK.js";
7
+ import "./chunk-CCWSLTWA.js";
8
8
  import {
9
9
  injectDeterministicFontFaces
10
- } from "./chunk-XMAL2A7Y.js";
11
- import "./chunk-XXKBPGPJ.js";
10
+ } from "./chunk-AIYKVE4Y.js";
11
+ import "./chunk-VJ2RAP65.js";
12
12
  import "./chunk-KC5XXX3X.js";
13
13
  import "./chunk-TJSTGSAW.js";
14
14
  import "./chunk-BZ56MTDX.js";
15
15
  import "./chunk-ZLJXATSQ.js";
16
16
  import "./chunk-32MY4AZN.js";
17
- import "./chunk-G2T2X6FZ.js";
18
- import "./chunk-FCEFKWPM.js";
19
- import "./chunk-UUDQD62L.js";
17
+ import "./chunk-63O3AR5U.js";
18
+ import "./chunk-AKZD7VWZ.js";
19
+ import "./chunk-FSLYPQ5Z.js";
20
20
  import "./chunk-DPVXBVLL.js";
21
- import "./chunk-OCNCK5FQ.js";
22
- import "./chunk-C6AIZOQN.js";
21
+ import "./chunk-MZPMAU25.js";
22
+ import "./chunk-WWL6YGYK.js";
23
23
  import "./chunk-VC76R6W2.js";
24
24
  import "./chunk-OFQWTKPW.js";
25
25
  import "./chunk-TWWSYAKJ.js";
26
- import "./chunk-YJEGT5L6.js";
26
+ import "./chunk-NITBGIHR.js";
27
27
  import "./chunk-HBBJFK6I.js";
28
28
  import "./chunk-PJ3HDUCY.js";
29
29
  import "./chunk-TQFG7HTI.js";
@@ -32,7 +32,7 @@ import "./chunk-2PSPARWP.js";
32
32
  import {
33
33
  PRODUCER_VERSION,
34
34
  VERSION
35
- } from "./chunk-MLLBZR2U.js";
35
+ } from "./chunk-DRLB5STV.js";
36
36
  import "./chunk-3GXQPCJC.js";
37
37
  import "./chunk-RQVDTPGD.js";
38
38
  import "./chunk-PMRBLBUP.js";
@@ -25,12 +25,12 @@ import "./chunk-PBN6GBJE.js";
25
25
  import "./chunk-OFQWTKPW.js";
26
26
  import {
27
27
  withMeta
28
- } from "./chunk-SYQOD3W7.js";
28
+ } from "./chunk-EWR3SLQV.js";
29
29
  import "./chunk-K4WIOZFP.js";
30
30
  import "./chunk-XUXGIA7H.js";
31
31
  import "./chunk-WERLJGIC.js";
32
32
  import "./chunk-ISN5GRYI.js";
33
- import "./chunk-MLLBZR2U.js";
33
+ import "./chunk-DRLB5STV.js";
34
34
  import "./chunk-KNU5COPB.js";
35
35
  import "./chunk-M2WBOQ2Q.js";
36
36
 
@@ -7,20 +7,20 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveCaptureBrowserGpuMode,
9
9
  resolveLocalBrowserGpuMode
10
- } from "./chunk-T3NMEYGM.js";
10
+ } from "./chunk-6FRHKGRY.js";
11
11
  import {
12
12
  assertWebGpuAdapterAvailable,
13
13
  compositionRequiresWebGpu
14
- } from "./chunk-G2T2X6FZ.js";
15
- import "./chunk-FCEFKWPM.js";
16
- import "./chunk-UUDQD62L.js";
14
+ } from "./chunk-63O3AR5U.js";
15
+ import "./chunk-AKZD7VWZ.js";
16
+ import "./chunk-FSLYPQ5Z.js";
17
17
  import "./chunk-DPVXBVLL.js";
18
- import "./chunk-OCNCK5FQ.js";
19
- import "./chunk-C6AIZOQN.js";
18
+ import "./chunk-MZPMAU25.js";
19
+ import "./chunk-WWL6YGYK.js";
20
20
  import "./chunk-VC76R6W2.js";
21
21
  import "./chunk-OFQWTKPW.js";
22
22
  import "./chunk-TWWSYAKJ.js";
23
- import "./chunk-YJEGT5L6.js";
23
+ import "./chunk-NITBGIHR.js";
24
24
  import "./chunk-HBBJFK6I.js";
25
25
  import "./chunk-PJ3HDUCY.js";
26
26
  import "./chunk-TQFG7HTI.js";
@@ -11,48 +11,50 @@ import {
11
11
  } from "./chunk-ZKDMAOFU.js";
12
12
  import {
13
13
  serveStaticProjectHtml
14
- } from "./chunk-LDSWUYZB.js";
14
+ } from "./chunk-CVE7OUZE.js";
15
15
  import "./chunk-XUHOIDKG.js";
16
- import "./chunk-752X6G7T.js";
16
+ import "./chunk-CHWO3UN6.js";
17
17
  import "./chunk-X7MTZ4T2.js";
18
18
  import {
19
19
  openSettledCompositionPage,
20
20
  runFfmpegOnce
21
- } from "./chunk-4KGMIOMY.js";
21
+ } from "./chunk-TEYBS6T3.js";
22
22
  import "./chunk-5Z63TBTX.js";
23
+ import "./chunk-WN62HDA7.js";
23
24
  import "./chunk-262C25DQ.js";
24
- import "./chunk-3IUSKIZW.js";
25
+ import "./chunk-NCQV2NMY.js";
25
26
  import "./chunk-YEIFI443.js";
26
- import "./chunk-LYNBNESS.js";
27
- import "./chunk-XFJXFNJF.js";
27
+ import "./chunk-SXV67HVP.js";
28
+ import "./chunk-34AE4KPB.js";
28
29
  import "./chunk-WEATBQTR.js";
29
- import "./chunk-GDJ74GHW.js";
30
- import "./chunk-LMC46FK5.js";
30
+ import "./chunk-23KZNTIV.js";
31
+ import "./chunk-TY76XMMP.js";
31
32
  import "./chunk-IHFUKJOR.js";
32
- import "./chunk-T3NMEYGM.js";
33
+ import "./chunk-6FRHKGRY.js";
33
34
  import "./chunk-PFCFR3KZ.js";
34
- import "./chunk-BOUDTDBQ.js";
35
+ import "./chunk-FERBBWDU.js";
35
36
  import "./chunk-XT7X6QCP.js";
36
37
  import "./chunk-4YYJOFKS.js";
37
38
  import "./chunk-HVW7ABXD.js";
38
- import "./chunk-ENHAGQEP.js";
39
- import "./chunk-DR7QW6C5.js";
40
- import "./chunk-IP3XINRB.js";
39
+ import "./chunk-VLB4NGRR.js";
40
+ import "./chunk-FFF36PQA.js";
41
+ import "./chunk-PAZUQZYV.js";
41
42
  import "./chunk-AWDFDFI3.js";
43
+ import "./chunk-P6LJ4Y32.js";
42
44
  import "./chunk-GMECXFAN.js";
43
45
  import {
44
46
  findFFmpeg
45
47
  } from "./chunk-TVCRUG2S.js";
46
- import "./chunk-RDMAU7AJ.js";
48
+ import "./chunk-TRLP3CSL.js";
47
49
  import {
48
50
  trackCompareSheet
49
- } from "./chunk-JH7ZJRDL.js";
50
- import "./chunk-IPXPSCWV.js";
51
+ } from "./chunk-JYB7NKO6.js";
52
+ import "./chunk-ENQL7NCM.js";
51
53
  import "./chunk-VWG7OQKU.js";
52
54
  import {
53
55
  c
54
56
  } from "./chunk-ZTZA4UWZ.js";
55
- import "./chunk-L5QASNBN.js";
57
+ import "./chunk-2E4A277E.js";
56
58
  import "./chunk-AMKC3AXA.js";
57
59
  import {
58
60
  defineCommand
@@ -63,23 +65,23 @@ import {
63
65
  } from "./chunk-PBN6GBJE.js";
64
66
  import "./chunk-KC5XXX3X.js";
65
67
  import "./chunk-TJSTGSAW.js";
66
- import "./chunk-G2T2X6FZ.js";
67
- import "./chunk-FCEFKWPM.js";
68
- import "./chunk-UUDQD62L.js";
68
+ import "./chunk-63O3AR5U.js";
69
+ import "./chunk-AKZD7VWZ.js";
70
+ import "./chunk-FSLYPQ5Z.js";
69
71
  import "./chunk-DPVXBVLL.js";
70
- import "./chunk-OCNCK5FQ.js";
72
+ import "./chunk-MZPMAU25.js";
71
73
  import {
72
74
  HF_COLOR_GRADING_ATTR,
73
75
  isHfColorGradingActive,
74
76
  normalizeHfColorGrading,
75
77
  parseCubeLut,
76
78
  serializeHfColorGrading
77
- } from "./chunk-C6AIZOQN.js";
79
+ } from "./chunk-WWL6YGYK.js";
78
80
  import "./chunk-VC76R6W2.js";
79
81
  import "./chunk-OFQWTKPW.js";
80
82
  import "./chunk-LCSMOLGX.js";
81
83
  import "./chunk-TWWSYAKJ.js";
82
- import "./chunk-YJEGT5L6.js";
84
+ import "./chunk-NITBGIHR.js";
83
85
  import "./chunk-HBBJFK6I.js";
84
86
  import "./chunk-PJ3HDUCY.js";
85
87
  import "./chunk-TQFG7HTI.js";
@@ -87,12 +89,12 @@ import "./chunk-GK4AIFIH.js";
87
89
  import "./chunk-2PSPARWP.js";
88
90
  import {
89
91
  withMeta
90
- } from "./chunk-SYQOD3W7.js";
92
+ } from "./chunk-EWR3SLQV.js";
91
93
  import "./chunk-K4WIOZFP.js";
92
94
  import "./chunk-XUXGIA7H.js";
93
95
  import "./chunk-WERLJGIC.js";
94
96
  import "./chunk-ISN5GRYI.js";
95
- import "./chunk-MLLBZR2U.js";
97
+ import "./chunk-DRLB5STV.js";
96
98
  import {
97
99
  normalizeErrorMessage
98
100
  } from "./chunk-KNU5COPB.js";
@@ -486,7 +488,7 @@ async function loadReferenceFrame(framePath) {
486
488
  };
487
489
  }
488
490
  async function captureGradeCompareSheet(projectDir, timeoutMs) {
489
- const { bundleToSingleHtml } = await import("./compiler-ZHVIEP26.js");
491
+ const { bundleToSingleHtml } = await import("./compiler-3MFRD377.js");
490
492
  const html = await bundleToSingleHtml(projectDir);
491
493
  const server = await serveStaticProjectHtml(projectDir, html);
492
494
  const sheetPath = join(projectDir, "grade-compare.png");
@@ -13,7 +13,7 @@ import {
13
13
  gsapScriptUsesMotionPath,
14
14
  parseGsapScriptAcorn,
15
15
  parseGsapScriptAcornForWrite
16
- } from "./chunk-RDMAU7AJ.js";
16
+ } from "./chunk-TRLP3CSL.js";
17
17
  import "./chunk-2PSPARWP.js";
18
18
  import "./chunk-M2WBOQ2Q.js";
19
19
  export {
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-S3S4TGEH.js";
13
13
  import {
14
14
  VERSION
15
- } from "./chunk-MLLBZR2U.js";
15
+ } from "./chunk-DRLB5STV.js";
16
16
  import "./chunk-M2WBOQ2Q.js";
17
17
 
18
18
  // src/help.ts
@@ -11,28 +11,28 @@ import {
11
11
  MAX_WINDOW_IDLE_MS,
12
12
  START,
13
13
  openProjectHistory
14
- } from "./chunk-LYNBNESS.js";
15
- import "./chunk-XFJXFNJF.js";
14
+ } from "./chunk-SXV67HVP.js";
15
+ import "./chunk-34AE4KPB.js";
16
16
  import "./chunk-WEATBQTR.js";
17
- import "./chunk-GDJ74GHW.js";
18
- import "./chunk-LMC46FK5.js";
17
+ import "./chunk-23KZNTIV.js";
18
+ import "./chunk-TY76XMMP.js";
19
19
  import {
20
20
  resolveProject
21
- } from "./chunk-WAS5VEA4.js";
21
+ } from "./chunk-RTLYNXAC.js";
22
22
  import "./chunk-IHFUKJOR.js";
23
23
  import {
24
24
  AmbiguousPreviewServerError,
25
25
  findPreviewServerForProject,
26
26
  studioApiUrl
27
27
  } from "./chunk-DQBY7FRR.js";
28
- import "./chunk-RDMAU7AJ.js";
28
+ import "./chunk-TRLP3CSL.js";
29
29
  import {
30
30
  trackHistoryAction
31
- } from "./chunk-JH7ZJRDL.js";
32
- import "./chunk-IPXPSCWV.js";
31
+ } from "./chunk-JYB7NKO6.js";
32
+ import "./chunk-ENQL7NCM.js";
33
33
  import "./chunk-VWG7OQKU.js";
34
34
  import "./chunk-ZTZA4UWZ.js";
35
- import "./chunk-L5QASNBN.js";
35
+ import "./chunk-2E4A277E.js";
36
36
  import "./chunk-AMKC3AXA.js";
37
37
  import {
38
38
  defineCommand
@@ -43,16 +43,16 @@ import {
43
43
  } from "./chunk-PBN6GBJE.js";
44
44
  import "./chunk-KC5XXX3X.js";
45
45
  import "./chunk-TJSTGSAW.js";
46
- import "./chunk-G2T2X6FZ.js";
47
- import "./chunk-FCEFKWPM.js";
48
- import "./chunk-UUDQD62L.js";
46
+ import "./chunk-63O3AR5U.js";
47
+ import "./chunk-AKZD7VWZ.js";
48
+ import "./chunk-FSLYPQ5Z.js";
49
49
  import "./chunk-DPVXBVLL.js";
50
- import "./chunk-OCNCK5FQ.js";
51
- import "./chunk-C6AIZOQN.js";
50
+ import "./chunk-MZPMAU25.js";
51
+ import "./chunk-WWL6YGYK.js";
52
52
  import "./chunk-VC76R6W2.js";
53
53
  import "./chunk-OFQWTKPW.js";
54
54
  import "./chunk-TWWSYAKJ.js";
55
- import "./chunk-YJEGT5L6.js";
55
+ import "./chunk-NITBGIHR.js";
56
56
  import "./chunk-HBBJFK6I.js";
57
57
  import "./chunk-PJ3HDUCY.js";
58
58
  import "./chunk-TQFG7HTI.js";
@@ -60,12 +60,12 @@ import "./chunk-GK4AIFIH.js";
60
60
  import "./chunk-2PSPARWP.js";
61
61
  import {
62
62
  withMeta
63
- } from "./chunk-SYQOD3W7.js";
63
+ } from "./chunk-EWR3SLQV.js";
64
64
  import "./chunk-K4WIOZFP.js";
65
65
  import "./chunk-XUXGIA7H.js";
66
66
  import "./chunk-WERLJGIC.js";
67
67
  import "./chunk-ISN5GRYI.js";
68
- import "./chunk-MLLBZR2U.js";
68
+ import "./chunk-DRLB5STV.js";
69
69
  import "./chunk-KNU5COPB.js";
70
70
  import "./chunk-3GXQPCJC.js";
71
71
  import "./chunk-RQVDTPGD.js";
@@ -86,7 +86,8 @@ var historyDeps = {
86
86
  historyRoot: DEFAULT_HISTORY_ROOT,
87
87
  findServer: (projectDir) => findPreviewServerForProject(projectDir),
88
88
  /** A turn with no write for this long has ended, through a preview or not. */
89
- turnIdleMs: MAX_WINDOW_IDLE_MS
89
+ turnIdleMs: MAX_WINDOW_IDLE_MS,
90
+ now: () => Date.now()
90
91
  };
91
92
  var Refusal = class extends Error {
92
93
  };
@@ -153,7 +154,7 @@ function previewOwner(route) {
153
154
  pin: async (id, pinned) => void await json("/pin", { entryId: id, pinned }),
154
155
  begin: async (who, label) => {
155
156
  const opened = await json("/window", { who, label, idleMs: historyDeps.turnIdleMs });
156
- return { id: opened.windowId, startedAt: opened.startedAt ?? Date.now() };
157
+ return { id: opened.windowId, startedAt: opened.startedAt ?? historyDeps.now() };
157
158
  },
158
159
  // A preview restarted since begin committed the window on its way down.
159
160
  end: (id) => json(`/window/${id}/close`, {}).then((closed) => closed.entry).catch(async () => (await list()).find((entry) => entry.id === id) ?? null),
@@ -165,6 +166,7 @@ async function directOwner(projectDir, turn) {
165
166
  const history = await openProjectHistory({
166
167
  projectDir,
167
168
  historyRoot: historyDeps.historyRoot,
169
+ now: () => historyDeps.now(),
168
170
  pruneGoneProjectsBudgetMs: 1e3,
169
171
  // A turn begun through a preview that has since stopped is still the agent's, until its idle limit.
170
172
  ...turn && {
@@ -187,7 +189,7 @@ async function directOwner(projectDir, turn) {
187
189
  restore: (point, who) => history.restore(point, who),
188
190
  pin: async (id, pinned) => history.pin(id, pinned),
189
191
  // Opening filed every earlier write; the turn's own writes are filed to it when the next open passes it.
190
- begin: async () => ({ id: randomUUID(), startedAt: Date.now() }),
192
+ begin: async () => ({ id: randomUUID(), startedAt: historyDeps.now() }),
191
193
  end: async (id) => history.list().find((entry) => entry.id === id) ?? null,
192
194
  close: () => history.close()
193
195
  };
@@ -280,7 +282,7 @@ function since(entries, ref, who) {
280
282
  return entries.slice(entries.indexOf(entryOf(entries, ref)) + 1);
281
283
  }
282
284
  function ago(at) {
283
- const seconds = Math.max(0, Math.round((Date.now() - at) / 1e3));
285
+ const seconds = Math.max(0, Math.round((historyDeps.now() - at) / 1e3));
284
286
  if (seconds < 60) return `${seconds}s ago`;
285
287
  if (seconds < 3600) return `${Math.round(seconds / 60)}m ago`;
286
288
  if (seconds < 86400) return `${Math.round(seconds / 3600)}h ago`;