hyperframes 0.8.180 → 0.8.183

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 (215) hide show
  1. package/bin/hyperframes.mjs +3 -1
  2. package/dist/{add-HUVEWSVU.js → add-HW3ZGR36.js} +22 -22
  3. package/dist/{animatedGifPrep-V6GJQOEB.js → animatedGifPrep-EPLN37ZN.js} +13 -13
  4. package/dist/api.js +28 -28
  5. package/dist/{asset-ZGQHDMIO.js → asset-TOASKL3Z.js} +3 -3
  6. package/dist/{assetCataloger-MZWCOV6C.js → assetCataloger-PZN5HYG2.js} +15 -13
  7. package/dist/{audio-XDWHLNIW.js → audio-F5OIQVJO.js} +29 -29
  8. package/dist/{auth-VIV3M7S6.js → auth-YVQLRS3T.js} +4 -4
  9. package/dist/{autoUpdate-R32XDL42.js → autoUpdate-EG4ZFW4D.js} +2 -2
  10. package/dist/{backgroundChecks-A2N6EVCP.js → backgroundChecks-WINNQVR2.js} +3 -3
  11. package/dist/backgroundChecksWorker.js +3 -3
  12. package/dist/{batchRender-3AYDQRBI.js → batchRender-PASZTMEE.js} +7 -7
  13. package/dist/{beats-2O423Z6Q.js → beats-KGIOEBLW.js} +12 -12
  14. package/dist/{benchmark-YXP3PTZP.js → benchmark-ZNY2L7HN.js} +24 -24
  15. package/dist/{browser-M47BNOTJ.js → browser-REAO7RU4.js} +20 -20
  16. package/dist/{bundleWithLocalizedFonts-GCIHOMIU.js → bundleWithLocalizedFonts-OAYLYC4W.js} +2 -2
  17. package/dist/{capture-IV3Y2MT4.js → capture-IK6GWQDD.js} +8 -5
  18. package/dist/{capture-BT2ZXN5P.js → capture-WOSF276U.js} +49 -41
  19. package/dist/{captureCompositionFrame-BMZEKPOU.js → captureCompositionFrame-DDZNKYRE.js} +21 -20
  20. package/dist/{captureTimeout-K2JNVVCI.js → captureTimeout-RIMG6IYH.js} +1 -1
  21. package/dist/{catalog-GI6P22KI.js → catalog-AKTXS7OJ.js} +42 -42
  22. package/dist/{catch-up-QS6HUHAO.js → catch-up-O3VZMPVE.js} +15 -15
  23. package/dist/check-6E46NIWI.js +116 -0
  24. package/dist/checkBrowser-UNZHQFNH.js +117 -0
  25. package/dist/{chunk-ST2ARHQ5.js → chunk-3BA2GP4H.js} +5 -5
  26. package/dist/{chunk-7Z6AARJR.js → chunk-3OLIGYWN.js} +3 -3
  27. package/dist/{chunk-OR5WCFWZ.js → chunk-3Q47QC46.js} +2 -2
  28. package/dist/{chunk-Q2ASTBSG.js → chunk-4FQKS7BJ.js} +16 -14
  29. package/dist/{chunk-G2ZMCNRN.js → chunk-4UFJWRHG.js} +527 -283
  30. package/dist/{chunk-537IYAEE.js → chunk-4UMPIPCQ.js} +9 -1
  31. package/dist/{chunk-65CLIHK2.js → chunk-5MBLWFLM.js} +1 -1
  32. package/dist/{chunk-UVEQLDKB.js → chunk-5OGDBU4G.js} +3 -2
  33. package/dist/{chunk-L3YOGIPG.js → chunk-66LREXGS.js} +1 -1
  34. package/dist/{chunk-W4SLIGGM.js → chunk-73LTCCZI.js} +249 -161
  35. package/dist/{chunk-GZVP4TWN.js → chunk-7JAD4MEW.js} +1 -1
  36. package/dist/{chunk-NAMGMP3R.js → chunk-7KVVNF7B.js} +1 -1
  37. package/dist/{chunk-GK2FIKIQ.js → chunk-ADDHW2FS.js} +214 -37
  38. package/dist/{chunk-WUQUR33W.js → chunk-AKFADCMS.js} +1 -1
  39. package/dist/{chunk-2VJNKE7C.js → chunk-ANR6WOC3.js} +1 -1
  40. package/dist/{chunk-L527FLMV.js → chunk-ATMDOUNN.js} +2 -2
  41. package/dist/{chunk-ZJPCQBU7.js → chunk-B2SZZFWW.js} +4 -4
  42. package/dist/{chunk-TO6JNTML.js → chunk-BP4VNTZL.js} +13 -8
  43. package/dist/{chunk-3YXTFXT7.js → chunk-CAHTO62O.js} +8 -8
  44. package/dist/{chunk-MPWLGNM2.js → chunk-CGK4XZ2J.js} +1 -1
  45. package/dist/{chunk-NOXGG4C7.js → chunk-CJYAJ3QM.js} +37 -33
  46. package/dist/{chunk-F5VMPELS.js → chunk-COTLNID2.js} +16 -16
  47. package/dist/{chunk-E24HSMZV.js → chunk-CYBXXSC4.js} +65 -14
  48. package/dist/{chunk-NZZYJOMJ.js → chunk-CZUAX3BV.js} +6 -5
  49. package/dist/{chunk-K7RGIADJ.js → chunk-DEORFAWP.js} +12 -12
  50. package/dist/{chunk-GV5R5B7Q.js → chunk-DGECWPTL.js} +1 -1
  51. package/dist/{chunk-BRHI7EIA.js → chunk-DKPNNYBZ.js} +4 -0
  52. package/dist/{chunk-R46P7TGY.js → chunk-DLC2FICN.js} +7 -7
  53. package/dist/{chunk-D3ZWBHZP.js → chunk-DYAPHNV6.js} +3 -2
  54. package/dist/{chunk-RGHQID2E.js → chunk-EHSBBBR2.js} +5 -3
  55. package/dist/{chunk-IWTRHPTP.js → chunk-EVAQPW6O.js} +8 -8
  56. package/dist/{chunk-S3RYRF3W.js → chunk-F6WHPHLF.js} +1 -1
  57. package/dist/chunk-FG4BBFZI.js +122 -0
  58. package/dist/{chunk-V6MQP32U.js → chunk-GAGMLVCV.js} +2 -2
  59. package/dist/chunk-GMNHAOMJ.js +3805 -0
  60. package/dist/{chunk-KIO3R4QN.js → chunk-GPE3WWTO.js} +16 -6
  61. package/dist/{chunk-ULWZYLCV.js → chunk-GTE5WZAM.js} +72 -140
  62. package/dist/{chunk-2JDLESMS.js → chunk-HLBODNGW.js} +1 -1
  63. package/dist/{chunk-KMAAOHLO.js → chunk-HRPWRZGF.js} +1 -1
  64. package/dist/{chunk-UPFUC4DB.js → chunk-HTIUNMTP.js} +1 -1
  65. package/dist/{chunk-FCUTQM2P.js → chunk-IC2WYONA.js} +5 -5
  66. package/dist/{chunk-VE3OKVSD.js → chunk-ITSLKUQM.js} +2 -2
  67. package/dist/{chunk-YJDB4FLT.js → chunk-JQYJXUJW.js} +1 -1
  68. package/dist/{chunk-PBN6GBJE.js → chunk-JVBRJMOP.js} +14 -1
  69. package/dist/{chunk-XH262OWN.js → chunk-K2Z5DZBS.js} +1 -1
  70. package/dist/{chunk-RHWJKSGH.js → chunk-KANNRHY7.js} +1 -1
  71. package/dist/{chunk-Y5APFFMD.js → chunk-KRFAX5JK.js} +1 -1
  72. package/dist/{chunk-4J7DHVN2.js → chunk-LBWRQ4XA.js} +1 -1
  73. package/dist/{chunk-MQOE5RE4.js → chunk-MIZDJVPZ.js} +9 -9
  74. package/dist/{chunk-32GKETR7.js → chunk-MMQ52NIZ.js} +74 -0
  75. package/dist/chunk-MOEGCMKI.js +180 -0
  76. package/dist/{chunk-E6RPWJVC.js → chunk-NAUKCKCJ.js} +5 -1
  77. package/dist/{chunk-JBCU6NR5.js → chunk-NZ3BE2QE.js} +56 -55
  78. package/dist/{chunk-VKMP3IVR.js → chunk-O7N3A7PE.js} +2 -2
  79. package/dist/{chunk-3QENZQSL.js → chunk-OH56PXFH.js} +5 -5
  80. package/dist/{chunk-H4YZZ2VQ.js → chunk-PFD25NAC.js} +1 -1
  81. package/dist/{check-HE5E4Q7Q.js → chunk-Q6UYKWBG.js} +198 -142
  82. package/dist/{chunk-3DKN5WKL.js → chunk-QH3T4WI2.js} +77 -6
  83. package/dist/{chunk-RGXAN3YU.js → chunk-QX4GGPMY.js} +2 -2
  84. package/dist/{chunk-A3NFBMYX.js → chunk-R6OV4J4K.js} +6 -6
  85. package/dist/{chunk-LL5VQ4WS.js → chunk-RZXUQR42.js} +2 -2
  86. package/dist/{chunk-SEMOZNVE.js → chunk-SAQYJLI6.js} +1 -1
  87. package/dist/{chunk-55P7GDT6.js → chunk-TJB4GAV6.js} +2 -2
  88. package/dist/{checkBrowser-BHLYP3YW.js → chunk-TOHA5NAU.js} +187 -114
  89. package/dist/{chunk-RXQHSGAQ.js → chunk-TXGZZKDF.js} +2 -2
  90. package/dist/{chunk-KZ3VI5K6.js → chunk-U5YVWG5W.js} +3 -3
  91. package/dist/{chunk-ICMXC3MI.js → chunk-U6RXZNZE.js} +31 -18
  92. package/dist/{chunk-XO6CWU7D.js → chunk-UNOSCGBG.js} +2 -2
  93. package/dist/{chunk-NXYBR4QX.js → chunk-VAK7A2N6.js} +16 -16
  94. package/dist/{chunk-OFY6JTZC.js → chunk-VDJO4DJ7.js} +2 -2
  95. package/dist/{chunk-LBQFLUIY.js → chunk-VFBAKPRC.js} +9 -49
  96. package/dist/{chunk-K3KANDZQ.js → chunk-VH5KESLX.js} +1 -1
  97. package/dist/{chunk-22QHO26F.js → chunk-W64L7IFS.js} +1 -1
  98. package/dist/{chunk-4IEH6EAC.js → chunk-WT4PYV2J.js} +4 -6
  99. package/dist/{chunk-XFCLWWL3.js → chunk-X3IA5RYH.js} +2 -2
  100. package/dist/{chunk-UZOZ2W2E.js → chunk-XAQDR5Y5.js} +2 -2
  101. package/dist/{chunk-BI52RNRW.js → chunk-XJHKJXT4.js} +103 -20
  102. package/dist/{chunk-HFZ4UILX.js → chunk-XOVHO3TT.js} +25 -14
  103. package/dist/{chunk-VARUKXOZ.js → chunk-XR5BSEUF.js} +7 -15
  104. package/dist/{chunk-IZM562YJ.js → chunk-Z4R35NJS.js} +4 -4
  105. package/dist/{chunk-AMX53HVX.js → chunk-ZFO3A3QL.js} +2 -2
  106. package/dist/{clean-TQOW24OF.js → clean-WNEIVBF3.js} +40 -40
  107. package/dist/cli.js +68 -64
  108. package/dist/{cloud-7TOVPUMY.js → cloud-6GSSDCJL.js} +4 -4
  109. package/dist/{cloudrun-2BKGY53X.js → cloudrun-4NEJRE4T.js} +8 -8
  110. package/dist/commands/layout-audit.browser.js +15 -4
  111. package/dist/commands/motion-signature.browser.js +52 -0
  112. package/dist/{compare-WDV3Q6WC.js → compare-2JWQ5ABA.js} +50 -47
  113. package/dist/{compiler-U3W6CJW7.js → compiler-27KQD7KW.js} +6 -6
  114. package/dist/{component-U66GBIUO.js → component-HCRET3MH.js} +4 -4
  115. package/dist/{compositions-Y63YGLCE.js → compositions-HTSQ6SUJ.js} +28 -29
  116. package/dist/{contactSheet-27SRU7A4.js → contactSheet-CAGMKI3E.js} +3 -1
  117. package/dist/{delete-TBAIAD7M.js → delete-GHQ5UYM7.js} +9 -9
  118. package/dist/{deploy-BIWOSWS3.js → deploy-I3Z3NAVA.js} +11 -11
  119. package/dist/{destroy-QBLMYDBF.js → destroy-4B5HW5FH.js} +5 -5
  120. package/dist/{deterministicFonts-L7YEEFGI.js → deterministicFonts-JFLSSKRB.js} +2 -2
  121. package/dist/{dist-2FMTAVGL.js → dist-SENYPQGW.js} +4 -4
  122. package/dist/{dist-VO7OXOFK.js → dist-WRDLWRMS.js} +5 -5
  123. package/dist/{docs-MPOM3PHH.js → docs-UEWLIP6D.js} +1 -1
  124. package/dist/{doctor-GC4REGB6.js → doctor-UGFVQZHI.js} +27 -27
  125. package/dist/{events-PUUP24FT.js → events-BLJGWMNP.js} +9 -9
  126. package/dist/{events-4NMQVUZR.js → events-YS4OVX3I.js} +6 -6
  127. package/dist/{feedback-BIDXK7TE.js → feedback-AZ3SJ5HF.js} +35 -35
  128. package/dist/{ffmpeg-2VJDEWQQ.js → ffmpeg-2AECXG7V.js} +15 -15
  129. package/dist/{figma-THMXYLMU.js → figma-DRYIJQHV.js} +3 -3
  130. package/dist/fontLocalizeCli.js +23 -23
  131. package/dist/{get-5T4B7ERH.js → get-DDEAOFPB.js} +9 -9
  132. package/dist/{gpuPolicy-GLUATV5I.js → gpuPolicy-UDJT2MQK.js} +13 -13
  133. package/dist/{grade-compare-2A65YEHZ.js → grade-compare-LJKK5NSY.js} +55 -50
  134. package/dist/{help-JFBDXFRC.js → help-TQBGYOID.js} +1 -1
  135. package/dist/{history-OJEWFWMS.js → history-5TOOCF2Y.js} +15 -15
  136. package/dist/hyperframe.manifest.json +1 -1
  137. package/dist/hyperframe.runtime.iife.js +17 -17
  138. package/dist/hyperframes-player.global.js +8 -3
  139. package/dist/{info-KJZBU3SZ.js → info-ENI5MP4W.js} +20 -20
  140. package/dist/{init-6V4ELU4Z.js → init-JXPXWV3G.js} +68 -68
  141. package/dist/{inspect-WGBZZUZU.js → inspect-WZNYQ5AB.js} +45 -44
  142. package/dist/{installer-EPRSH6QI.js → installer-3SGRBLJW.js} +7 -7
  143. package/dist/{keyframes-57LYKC2M.js → keyframes-HEOC4CT4.js} +16 -16
  144. package/dist/{lambda-5P5X2X5E.js → lambda-2VHQ4AL2.js} +15 -15
  145. package/dist/{layout-PM2VAUT2.js → layout-7WEUNO6T.js} +45 -44
  146. package/dist/{lint-DXS6QRYZ.js → lint-5YMAF3L7.js} +23 -23
  147. package/dist/{lintProject-ARKJXDQF.js → lintProject-C2ONSH2U.js} +4 -4
  148. package/dist/{list-6IBSX7FU.js → list-BIE3X7CO.js} +10 -10
  149. package/dist/{login-RY3PWK44.js → login-YDIGJWCG.js} +7 -7
  150. package/dist/{logout-DKJANASY.js → logout-DDC4QLVK.js} +3 -3
  151. package/dist/{manager-N3COY6BJ.js → manager-D2UV6RDQ.js} +16 -16
  152. package/dist/{manager-V2QCCPOJ.js → manager-UHWEKPXC.js} +8 -3
  153. package/dist/{media-treatment-3HEZR7ZS.js → media-treatment-FSKHPMWA.js} +33 -33
  154. package/dist/{media-use-4XXGABIL.js → media-use-JBN57JE3.js} +1 -1
  155. package/dist/{models-FEULJWSX.js → models-COEK6LXG.js} +24 -24
  156. package/dist/{motionShot-BZTEIZEO.js → motionShot-HYZ2ZGJQ.js} +28 -26
  157. package/dist/{normalize-audio-O4X4LPLK.js → normalize-audio-UXR6WQ7Q.js} +12 -12
  158. package/dist/{open-H3MX4TI2.js → open-OFT2GIDG.js} +24 -24
  159. package/dist/{parakeetRunner-5ABMPCI6.js → parakeetRunner-4NZ3QXS3.js} +25 -25
  160. package/dist/{pipeline-RJ4DOVWX.js → pipeline-ZKE54JMG.js} +18 -18
  161. package/dist/{play-3PBKEZIX.js → play-2VG77FT6.js} +39 -38
  162. package/dist/{policies-5NTZOHJA.js → policies-XXNGXWHV.js} +1 -1
  163. package/dist/{preflight-3RABQJT3.js → preflight-QTWDIM5C.js} +18 -18
  164. package/dist/{present-6SNRG3GI.js → present-OONXQLJG.js} +33 -33
  165. package/dist/{preview-LSDFCJ3H.js → preview-6RZJFU76.js} +49 -49
  166. package/dist/{producer-SUZDRXHJ.js → producer-6YM3UH3B.js} +1 -1
  167. package/dist/{progress-I37JB7R4.js → progress-NHJIHAAG.js} +2 -2
  168. package/dist/{projectConfig-5QCNTGQT.js → projectConfig-YMW4P2X6.js} +9 -9
  169. package/dist/{publication-2QT7VVE2.js → publication-SEINUAPZ.js} +5 -5
  170. package/dist/{publish-53EBL7OO.js → publish-KZBTBWFO.js} +27 -27
  171. package/dist/{refresh-MGCVWX56.js → refresh-RXTOPRBB.js} +3 -3
  172. package/dist/{remove-background-4G4MX5WK.js → remove-background-BIQNMIR7.js} +31 -31
  173. package/dist/{render-RXKUYTYI.js → render-65K3K6SD.js} +31 -31
  174. package/dist/{render-SKY6FKYB.js → render-FIH37HJA.js} +101 -96
  175. package/dist/{render-75CRB3BW.js → render-LW76HOMJ.js} +8 -8
  176. package/dist/{render-batch-CEVWUYBP.js → render-batch-POLEEYD4.js} +8 -8
  177. package/dist/renderSetupWorker.js +12 -9
  178. package/dist/{resolver-4ICE2AT6.js → resolver-O2SED3XB.js} +7 -7
  179. package/dist/{screenshotCapture-HXEZ3TNJ.js → screenshotCapture-UBY6TT75.js} +33 -6
  180. package/dist/{sherpa-TMX3WBTM.js → sherpa-HTFFFTVQ.js} +24 -24
  181. package/dist/{sites-3ZBYB5X4.js → sites-MAVH57MO.js} +2 -2
  182. package/dist/skills/hyperframes/references/review-loop.md +1 -1
  183. package/dist/{skills-MCWFAGIP.js → skills-J6MBGS5O.js} +17 -17
  184. package/dist/{skillsUpdateCheck-NXOI35BW.js → skillsUpdateCheck-ZAXNLBF3.js} +3 -3
  185. package/dist/{snapshot-ESZMKQ6J.js → snapshot-TL7TTFS6.js} +72 -71
  186. package/dist/{src-XRTZOBO5.js → src-EL6HGIS4.js} +35 -26
  187. package/dist/{src-GYYWBQXJ.js → src-Z5H5N5T4.js} +19 -19
  188. package/dist/{state-KAXGHF77.js → state-ORRPOLMQ.js} +2 -2
  189. package/dist/{staticProjectServer-GYPUQGI7.js → staticProjectServer-EO7X7RAY.js} +20 -20
  190. package/dist/{status-BV7QAUQD.js → status-CM7IQTU2.js} +6 -6
  191. package/dist/studio/assets/{hyperframes-player-1wdLVP-x.js → hyperframes-player-hz_VqxBZ.js} +7 -2
  192. package/dist/studio/assets/{index-CaWPPTQ1.js → index-CV_ojgp5.js} +1 -1
  193. package/dist/studio/assets/{index-mdtW0Ug-.js → index-S1ceEagc.js} +71 -71
  194. package/dist/studio/index.html +1 -1
  195. package/dist/{studio-api-IXGX5ZFI.js → studio-api-CUZDC5B3.js} +17 -17
  196. package/dist/{studioServer-XVGYU6O3.js → studioServer-EZPRV43Y.js} +90 -84
  197. package/dist/{telemetry-E355EUDZ.js → telemetry-LFUVHARP.js} +10 -10
  198. package/dist/{telemetry-CQYHCCPL.js → telemetry-QG5AANZ4.js} +1 -1
  199. package/dist/{timeline-VWH6WSD7.js → timeline-GSH743JE.js} +41 -41
  200. package/dist/{tokens-IOAVF4UI.js → tokens-3ZMPSH7B.js} +3 -3
  201. package/dist/{transcribe-EGUXJGD4.js → transcribe-4SHNDPWW.js} +47 -47
  202. package/dist/{transcribe-EJA7OOHH.js → transcribe-TV7JBZQS.js} +19 -19
  203. package/dist/{tts-EDK3QS7M.js → tts-A2WILYGN.js} +6 -6
  204. package/dist/{updateCheck-U2CVTKPF.js → updateCheck-W7FTFOQF.js} +2 -2
  205. package/dist/{upgrade-CWEKQ4JO.js → upgrade-7YYYNAPF.js} +3 -3
  206. package/dist/{urlDownloader-DY5BLAFA.js → urlDownloader-PQSUS2CP.js} +12 -12
  207. package/dist/{validate-XOMNMKD6.js → validate-GCHAEVXM.js} +39 -38
  208. package/dist/{video-22NN6OEH.js → video-KGN7NJS5.js} +16 -14
  209. package/dist/warmCheck.js +227 -0
  210. package/dist/warmCheckClient.js +139 -0
  211. package/package.json +4 -2
  212. package/dist/chunk-BAZ5LCR3.js +0 -3805
  213. package/dist/hyperframe-runtime.js +0 -1125
  214. package/dist/{chunk-B4VT6YU2.js → chunk-QGOYNPQT.js} +3 -3
  215. package/dist/{synthesize-I2C24XJ5.js → synthesize-PKTB5ATG.js} +1 -1
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-K4WKGXRC.js";
10
10
  import {
11
11
  CliUsageError
12
- } from "./chunk-PBN6GBJE.js";
12
+ } from "./chunk-JVBRJMOP.js";
13
13
 
14
14
  // src/utils/reject-extra-positionals.ts
15
15
  var ACCEPTS_EXTRA_POSITIONALS = /* @__PURE__ */ new Set([
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  failCommand
9
- } from "./chunk-PBN6GBJE.js";
9
+ } from "./chunk-JVBRJMOP.js";
10
10
  import {
11
11
  c
12
12
  } from "./chunk-ZTZA4UWZ.js";
@@ -4,6 +4,9 @@ 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 {
8
+ findFfBinary
9
+ } from "./chunk-VAS6HQX3.js";
7
10
  import {
8
11
  cleanAssetUrl,
9
12
  collectSubCompositionSrcs,
@@ -16,9 +19,6 @@ import {
16
19
  resolveLocalAssetCandidates,
17
20
  resolveProjectRelativeSrc
18
21
  } from "./chunk-6BNTGNGD.js";
19
- import {
20
- findFfBinary
21
- } from "./chunk-VAS6HQX3.js";
22
22
  import {
23
23
  COMPOSITION_VARIABLE_TYPES,
24
24
  FONT_ALIAS_KEYS,
@@ -32,12 +32,16 @@ import {
32
32
  import {
33
33
  COLOR_GRADING_SOURCE_TAGS,
34
34
  COMPOSITION_ATTRIBUTES,
35
+ MEDIA_START_BASIS_ATTR,
35
36
  checkSubCompositionUsability,
37
+ compositionOriginSeconds,
38
+ cutToHostSlots,
36
39
  parseNumeric,
37
40
  readClipTiming,
41
+ resolveMediaStartSeconds,
38
42
  spansOverlap,
39
43
  validateColorGradingContract
40
- } from "./chunk-32GKETR7.js";
44
+ } from "./chunk-MMQ52NIZ.js";
41
45
  import {
42
46
  readAuthoredDurationSeconds,
43
47
  readDataDurationSeconds,
@@ -48,16 +52,16 @@ import {
48
52
  Parser,
49
53
  parseHTML
50
54
  } from "./chunk-SDYDNHEE.js";
51
- import {
52
- parse,
53
- parseExpressionAt,
54
- simple
55
- } from "./chunk-TYXH3EKP.js";
56
55
  import {
57
56
  isSceneLikeCompositionId,
58
57
  parseSlideshowManifest,
59
58
  resolveSlideshow
60
59
  } from "./chunk-IXLUTE6N.js";
60
+ import {
61
+ parse,
62
+ parseExpressionAt,
63
+ simple
64
+ } from "./chunk-TYXH3EKP.js";
61
65
  import {
62
66
  __commonJS,
63
67
  __require,
@@ -3767,6 +3771,128 @@ function trackKindOf(node) {
3767
3771
  import { createHash } from "crypto";
3768
3772
  import { existsSync as existsSync2, readFileSync, readdirSync } from "fs";
3769
3773
  import { dirname as dirname2, extname, join as join3, relative as relative2, resolve } from "path";
3774
+
3775
+ // ../parsers/dist/referenceResolver.js
3776
+ var COMPOSITION_ATTRIBUTES2 = Object.freeze({
3777
+ start: "data-start",
3778
+ duration: "data-duration",
3779
+ trackIndex: "data-track-index",
3780
+ derivedEnd: "data-end",
3781
+ legacyTrack: "data-layer"
3782
+ });
3783
+ var CANONICAL_AUTHORED_TIMING_ATTRIBUTES = Object.freeze([
3784
+ COMPOSITION_ATTRIBUTES2.start,
3785
+ COMPOSITION_ATTRIBUTES2.duration,
3786
+ COMPOSITION_ATTRIBUTES2.trackIndex
3787
+ ]);
3788
+ var DERIVED_TIMING_ATTRIBUTES = Object.freeze([
3789
+ COMPOSITION_ATTRIBUTES2.derivedEnd
3790
+ ]);
3791
+ var LEGACY_TIMING_ATTRIBUTES = Object.freeze([
3792
+ COMPOSITION_ATTRIBUTES2.derivedEnd,
3793
+ COMPOSITION_ATTRIBUTES2.legacyTrack
3794
+ ]);
3795
+ function parseNumeric2(value) {
3796
+ if (value == null || value.trim() === "") return null;
3797
+ const parsed = Number(value);
3798
+ return Number.isFinite(parsed) ? parsed : null;
3799
+ }
3800
+ var REFERENCE_ID_PATTERN = /^[A-Za-z0-9_.:-]+$/;
3801
+ function isAsciiDigitAt(value, index) {
3802
+ const code = value.charCodeAt(index);
3803
+ return code >= 48 && code <= 57;
3804
+ }
3805
+ function skipDigitsLeft(value, start) {
3806
+ let cursor = start;
3807
+ while (cursor >= 0 && isAsciiDigitAt(value, cursor)) cursor--;
3808
+ return cursor;
3809
+ }
3810
+ function skipWhitespaceLeft(value, start) {
3811
+ let cursor = start;
3812
+ while (cursor >= 0 && (value[cursor] ?? "").trim() === "") cursor--;
3813
+ return cursor;
3814
+ }
3815
+ function findMagnitudeStart(value) {
3816
+ const last = value.length - 1;
3817
+ if (!isAsciiDigitAt(value, last)) return null;
3818
+ let cursor = skipDigitsLeft(value, last);
3819
+ if (value[cursor] === ".") cursor = skipDigitsLeft(value, cursor - 1);
3820
+ return cursor + 1;
3821
+ }
3822
+ function parseReferenceOffset(value) {
3823
+ const magnitudeStart = findMagnitudeStart(value);
3824
+ if (magnitudeStart == null) return null;
3825
+ const operatorIndex = skipWhitespaceLeft(value, magnitudeStart - 1);
3826
+ const operator = value[operatorIndex];
3827
+ if (operator !== "+" && operator !== "-") return null;
3828
+ const refId = value.slice(0, operatorIndex).trim();
3829
+ if (!REFERENCE_ID_PATTERN.test(refId)) return null;
3830
+ const magnitude = Number(value.slice(magnitudeStart));
3831
+ if (!Number.isFinite(magnitude)) return null;
3832
+ return { refId, operator, magnitude };
3833
+ }
3834
+ function parseStartExpression(raw) {
3835
+ const normalized2 = (raw ?? "").trim();
3836
+ if (!normalized2) return null;
3837
+ const absolute = parseNumeric2(normalized2);
3838
+ if (absolute != null) return { kind: "absolute", value: absolute };
3839
+ if (REFERENCE_ID_PATTERN.test(normalized2)) {
3840
+ return { kind: "reference", refId: normalized2, offset: 0 };
3841
+ }
3842
+ const reference = parseReferenceOffset(normalized2);
3843
+ if (!reference) return null;
3844
+ return {
3845
+ kind: "reference",
3846
+ refId: reference.refId,
3847
+ offset: reference.operator === "-" ? -reference.magnitude : reference.magnitude
3848
+ };
3849
+ }
3850
+ function findReferenceTargetEl(doc, refId) {
3851
+ return doc.getElementById(refId) ?? doc.querySelector(`[data-composition-id="${refId}"]`);
3852
+ }
3853
+ function resolveReferencedStart(doc, el, startCache, visiting) {
3854
+ const cached = startCache.get(el);
3855
+ if (cached !== void 0) return cached;
3856
+ if (visiting.has(el)) return 0;
3857
+ visiting.add(el);
3858
+ try {
3859
+ const expression = parseStartExpression(el.getAttribute("data-start"));
3860
+ if (!expression) {
3861
+ startCache.set(el, 0);
3862
+ return 0;
3863
+ }
3864
+ if (expression.kind === "absolute") {
3865
+ const value = Math.max(0, expression.value);
3866
+ startCache.set(el, value);
3867
+ return value;
3868
+ }
3869
+ const target = findReferenceTargetEl(doc, expression.refId);
3870
+ if (!target) {
3871
+ startCache.set(el, 0);
3872
+ return 0;
3873
+ }
3874
+ const targetStart = resolveReferencedStart(doc, target, startCache, visiting);
3875
+ const targetDuration = resolveReferencedDuration(doc, target, startCache, visiting);
3876
+ const resolved = targetDuration != null && targetDuration > 0 ? Math.max(0, targetStart + targetDuration + expression.offset) : Math.max(0, targetStart + expression.offset);
3877
+ startCache.set(el, resolved);
3878
+ return resolved;
3879
+ } finally {
3880
+ visiting.delete(el);
3881
+ }
3882
+ }
3883
+ function resolveReferencedDuration(doc, el, startCache, visiting) {
3884
+ const durationAttr = parseNumeric2(el.getAttribute("data-duration"));
3885
+ if (durationAttr != null && durationAttr > 0) return durationAttr;
3886
+ const endAttr = parseNumeric2(el.getAttribute("data-end"));
3887
+ if (endAttr != null) {
3888
+ const start = resolveReferencedStart(doc, el, startCache, visiting);
3889
+ const delta = endAttr - start;
3890
+ if (Number.isFinite(delta) && delta > 0) return delta;
3891
+ }
3892
+ return null;
3893
+ }
3894
+
3895
+ // ../lint/dist/index.js
3770
3896
  import { execFile } from "child_process";
3771
3897
  import { existsSync } from "fs";
3772
3898
  import { join } from "path";
@@ -3883,11 +4009,13 @@ function readAttr(tagSource, attr) {
3883
4009
  function hasAttrName(tagSource, attr) {
3884
4010
  return readDecodedAttr(tagSource, attr) !== null;
3885
4011
  }
4012
+ function isAudibleVideo(attr) {
4013
+ if (attr("muted") !== null) return false;
4014
+ const declared = attr("data-has-audio");
4015
+ return declared === null || declared === "true";
4016
+ }
3886
4017
  function isAudibleVideoTag(tagSource) {
3887
- if (hasAttrName(tagSource, "muted")) return false;
3888
- if (!hasAttrName(tagSource, "data-has-audio")) return true;
3889
- const declared = readAttr(tagSource, "data-has-audio");
3890
- return declared === "true";
4018
+ return isAudibleVideo((name) => readDecodedAttr(tagSource, name));
3891
4019
  }
3892
4020
  function mediaTimeWindow(tagSource) {
3893
4021
  const start = Number(readAttr(tagSource, "data-start"));
@@ -10752,7 +10880,7 @@ async function lintProject(projectDir, entryFile, hostOptions = {}) {
10752
10880
  ...lintTextureMaskAssetNotFound(projectDir, allHtmlSources),
10753
10881
  ...!entryFile ? lintMultipleRootCompositions(projectDir) : [],
10754
10882
  ...!entryFile ? lintBlankRootWithStandaloneComposition(rootHtml, allHtmlSources) : [],
10755
- ...lintDuplicateAudioTracks(allHtmlSources),
10883
+ ...lintDuplicateAudioTracks(projectDir, rootHtml),
10756
10884
  ...lintMissingOrEmptySubComposition(projectDir, rootHtml),
10757
10885
  ...await lintVideoMediaStartPastEof(projectDir, allHtmlSources),
10758
10886
  ...await lintHevcPreviewCodec(collectLocalVideoCandidates(projectDir, allHtmlSources))
@@ -10961,30 +11089,77 @@ function lintMultipleRootCompositions(projectDir) {
10961
11089
  }
10962
11090
  return findings;
10963
11091
  }
10964
- function lintDuplicateAudioTracks(htmlSources) {
10965
- const findings = [];
10966
- const tracks = [];
10967
- const seen = /* @__PURE__ */ new Set();
10968
- for (const { html } of htmlSources) {
10969
- const soundTagRe = /<(?:audio|video)\b[^>]*>/gi;
10970
- let match;
10971
- while ((match = soundTagRe.exec(html)) !== null) {
10972
- const tag = match[0];
10973
- if (/^<video/i.test(tag) && !isAudibleVideoTag(tag)) continue;
10974
- const trackStr = readAttr(tag, "data-track-index");
10975
- const startStr = readAttr(tag, "data-start");
10976
- const durStr = readAttr(tag, "data-duration");
10977
- const src = readDecodedAttr(tag, "src") || "unknown";
10978
- if (!trackStr || !startStr) continue;
10979
- const trackIndex = parseInt(trackStr, 10);
10980
- const start = parseFloat(startStr);
10981
- const duration = durStr ? parseFloat(durStr) : Infinity;
10982
- const key = `${src}:${start}:${duration}:${trackIndex}`;
10983
- if (seen.has(key)) continue;
10984
- seen.add(key);
10985
- tracks.push({ trackIndex, start, end: start + duration, src });
11092
+ var timingFile = (doc) => ({ doc, starts: /* @__PURE__ */ new Map() });
11093
+ var localStart = (file, el) => resolveReferencedStart(file.doc, el, file.starts, /* @__PURE__ */ new Set());
11094
+ var localDuration = (file, el) => resolveReferencedDuration(file.doc, el, file.starts, /* @__PURE__ */ new Set());
11095
+ function collectMainTimelineAudio(projectDir, rootHtml) {
11096
+ const spans = [];
11097
+ const mount = (html, at) => {
11098
+ const { document: document2 } = parseHTML(html);
11099
+ const root = querySelectorAllIncludingTemplates(document2, "[data-composition-id]")[0];
11100
+ if (root) visit(root, { ...at, file: timingFile(document2) });
11101
+ };
11102
+ const visit = (parent, at) => {
11103
+ for (const el of parent.children) {
11104
+ if (el.tagName === "TEMPLATE") {
11105
+ visit(el.content, at);
11106
+ continue;
11107
+ }
11108
+ const span = audioSpanOf(el, at.file, at.origin, at.slots);
11109
+ if (span) spans.push(span);
11110
+ const scope = nestedScopeOf(el, at.file, at.origin, at.slots);
11111
+ if (!scope) {
11112
+ visit(el, at);
11113
+ continue;
11114
+ }
11115
+ const inner = { ...at, ...scope };
11116
+ const src = el.getAttribute("data-composition-src")?.trim();
11117
+ const file = src && !isUnresolvedAssetPlaceholder(src) && !isRemoteOrInlineUrl(src);
11118
+ const filePath = file ? resolve(projectDir, src) : null;
11119
+ if (filePath && !at.mounting.includes(filePath)) {
11120
+ const read = readProjectFile(filePath);
11121
+ if (read.kind === "file")
11122
+ mount(read.text, { ...inner, mounting: [...at.mounting, filePath] });
11123
+ }
11124
+ visit(el, inner);
10986
11125
  }
11126
+ };
11127
+ const { document } = parseHTML(rootHtml);
11128
+ visit(document, { file: timingFile(document), origin: 0, slots: [], mounting: [] });
11129
+ return spans;
11130
+ }
11131
+ function nestedScopeOf(el, file, origin, slots) {
11132
+ if (!el.hasAttribute("data-composition-id") && !el.hasAttribute("data-composition-src")) {
11133
+ return null;
10987
11134
  }
11135
+ const start = origin + localStart(file, el);
11136
+ const duration = localDuration(file, el);
11137
+ const window = duration === null ? [] : [{ start, end: start + duration }];
11138
+ return { origin: compositionOriginSeconds(start, el), slots: [...slots, ...window] };
11139
+ }
11140
+ function audioSpanOf(el, file, origin, slots) {
11141
+ const tag = el.tagName.toLowerCase();
11142
+ if (tag !== "audio" && !(tag === "video" && isAudibleVideo((name) => el.getAttribute(name)))) {
11143
+ return null;
11144
+ }
11145
+ const trackStr = el.getAttribute("data-track-index");
11146
+ if (!trackStr || !el.hasAttribute("data-start")) return null;
11147
+ const start = resolveMediaStartSeconds({
11148
+ authoredStart: parseNumeric(el.getAttribute("data-start")),
11149
+ hostStart: origin,
11150
+ hasAutoStart: el.hasAttribute("data-hf-auto-start"),
11151
+ basis: el.getAttribute(MEDIA_START_BASIS_ATTR),
11152
+ ordinaryStart: () => origin + localStart(file, el)
11153
+ });
11154
+ const duration = parseNumeric(el.getAttribute("data-duration")) ?? localDuration(file, el);
11155
+ const kept = cutToHostSlots({ start, end: start + (duration ?? Infinity) }, slots);
11156
+ if (kept.end <= kept.start) return null;
11157
+ return { trackIndex: parseInt(trackStr, 10), ...kept, src: el.getAttribute("src") || "unknown" };
11158
+ }
11159
+ var formatSeconds = (t) => Number.isFinite(t) ? String(Number(t.toFixed(2))) : "end";
11160
+ function lintDuplicateAudioTracks(projectDir, rootHtml) {
11161
+ const findings = [];
11162
+ const tracks = collectMainTimelineAudio(projectDir, rootHtml);
10988
11163
  for (let i = 0; i < tracks.length; i++) {
10989
11164
  for (let j = i + 1; j < tracks.length; j++) {
10990
11165
  const a = tracks[i];
@@ -10994,7 +11169,7 @@ function lintDuplicateAudioTracks(htmlSources) {
10994
11169
  findings.push({
10995
11170
  code: "duplicate_audio_track",
10996
11171
  severity: "warning",
10997
- message: `Multiple audible <audio>/<video> elements on track ${a.trackIndex} overlap (${a.src} at ${a.start}-${Number.isFinite(a.end) ? a.end.toFixed(1) : "end"}s, ${b.src} at ${b.start}-${Number.isFinite(b.end) ? b.end.toFixed(1) : "end"}s). This causes layered audio playback.`,
11172
+ message: `Multiple audible <audio>/<video> elements on track ${a.trackIndex} overlap (${a.src} at ${formatSeconds(a.start)}-${formatSeconds(a.end)}s, ${b.src} at ${formatSeconds(b.start)}-${formatSeconds(b.end)}s). This causes layered audio playback.`,
10998
11173
  fixHint: "Use non-overlapping time windows or different track indices."
10999
11174
  });
11000
11175
  }
@@ -11060,6 +11235,8 @@ function isSnippetFragment(html) {
11060
11235
  }
11061
11236
 
11062
11237
  export {
11238
+ resolveReferencedStart,
11239
+ resolveReferencedDuration,
11063
11240
  require_dist,
11064
11241
  resolveCompositionDuration,
11065
11242
  LINT_RULE_COUNT,
@@ -11,7 +11,7 @@ import {
11
11
  DEFAULT_REGISTRY_URL,
12
12
  fetchItemManifest,
13
13
  fetchRegistryManifest
14
- } from "./chunk-TO6JNTML.js";
14
+ } from "./chunk-BP4VNTZL.js";
15
15
 
16
16
  // src/registry/resolver.ts
17
17
  function defaultWarn(message) {
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ISN5GRYI.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-LL5VQ4WS.js";
20
+ } from "./chunk-RZXUQR42.js";
21
21
 
22
22
  // src/utils/updateCheck.ts
23
23
  import { existsSync, readFileSync } from "fs";
@@ -8,10 +8,10 @@ import {
8
8
  DEFAULT_VP9_CPU_USED,
9
9
  isHttpUrl,
10
10
  runFfmpeg
11
- } from "./chunk-W4SLIGGM.js";
11
+ } from "./chunk-73LTCCZI.js";
12
12
  import {
13
13
  parseAnimatedGifMetadata
14
- } from "./chunk-LBQFLUIY.js";
14
+ } from "./chunk-VFBAKPRC.js";
15
15
  import {
16
16
  parseHTML
17
17
  } from "./chunk-SDYDNHEE.js";
@@ -6,20 +6,20 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  readCompositionFps
9
- } from "./chunk-S3RYRF3W.js";
9
+ } from "./chunk-F6WHPHLF.js";
10
10
  import {
11
11
  errorBox
12
12
  } from "./chunk-K2FLNJVB.js";
13
13
  import {
14
14
  failUsage
15
- } from "./chunk-PBN6GBJE.js";
15
+ } from "./chunk-JVBRJMOP.js";
16
16
  import {
17
17
  DEFAULT_CONFIG,
18
18
  resolvePageNavigationTimeout
19
- } from "./chunk-W4SLIGGM.js";
19
+ } from "./chunk-73LTCCZI.js";
20
20
  import {
21
21
  parseFps
22
- } from "./chunk-LBQFLUIY.js";
22
+ } from "./chunk-VFBAKPRC.js";
23
23
 
24
24
  // src/browser/windowsCrash.ts
25
25
  var STATUS_STACK_BUFFER_OVERRUN_DEC = "3221225595";
@@ -27,7 +27,7 @@ import {
27
27
  } from "./chunk-GMECXFAN.js";
28
28
  import {
29
29
  ITEM_TYPE_DIRS
30
- } from "./chunk-LBQFLUIY.js";
30
+ } from "./chunk-VFBAKPRC.js";
31
31
  import {
32
32
  realProjectRoot
33
33
  } from "./chunk-OFQWTKPW.js";
@@ -2428,8 +2428,8 @@ var require_json_schema_2020_12 = __commonJS({
2428
2428
  with$data(this, validation)
2429
2429
  ].forEach((sch) => this.addMetaSchema(sch, void 0, false));
2430
2430
  return this;
2431
- function with$data(ajv2, sch) {
2432
- return $data ? ajv2.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch;
2431
+ function with$data(ajv, sch) {
2432
+ return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch;
2433
2433
  }
2434
2434
  }
2435
2435
  exports.default = addMetaSchema2020;
@@ -2734,17 +2734,22 @@ var registry_item_default = {
2734
2734
  };
2735
2735
 
2736
2736
  // src/registry/validation.ts
2737
- var ajv = new import__.Ajv2020({ strict: false, validateFormats: false });
2738
- var manifestShape = ajv.compile(registry_default);
2739
- var itemShape = ajv.compile(registry_item_default);
2737
+ function compileShapes() {
2738
+ const ajv = new import__.Ajv2020({ strict: false, validateFormats: false });
2739
+ return {
2740
+ manifest: ajv.compile(registry_default),
2741
+ item: ajv.compile(registry_item_default)
2742
+ };
2743
+ }
2744
+ var shapesCompiledOnFirstUse;
2740
2745
  function validRegistryName(name) {
2741
2746
  return name.length <= 128 && /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(name);
2742
2747
  }
2743
2748
  function validRegistryManifest(value) {
2744
- return manifestShape(value) && value.items.length <= 1e4 && value.items.every((item) => validRegistryName(item.name));
2749
+ return (shapesCompiledOnFirstUse ??= compileShapes()).manifest(value) && value.items.length <= 1e4 && value.items.every((item) => validRegistryName(item.name));
2745
2750
  }
2746
2751
  function validRegistryItem(value, name, type) {
2747
- return itemShape(value) && value.name === name && value.type === type && validRegistryName(value.name) && value.files.length <= 1e3;
2752
+ return (shapesCompiledOnFirstUse ??= compileShapes()).item(value) && value.name === name && value.type === type && validRegistryName(value.name) && value.files.length <= 1e3;
2748
2753
  }
2749
2754
 
2750
2755
  // src/registry/boundedFile.ts
@@ -7,41 +7,41 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  RegistryCompatibilityError,
9
9
  gateRegistryItemsCompatibility
10
- } from "./chunk-4J7DHVN2.js";
10
+ } from "./chunk-LBWRQ4XA.js";
11
11
  import {
12
12
  DEFAULT_PROJECT_CONFIG,
13
13
  createProjectConfig,
14
14
  loadProjectConfig,
15
15
  projectConfigPath,
16
16
  recordProjectRegistryItems
17
- } from "./chunk-XH262OWN.js";
17
+ } from "./chunk-K2Z5DZBS.js";
18
18
  import {
19
19
  resolveItemWithDependencies,
20
20
  resolveItemsByTag
21
- } from "./chunk-WUQUR33W.js";
21
+ } from "./chunk-AKFADCMS.js";
22
22
  import {
23
23
  InvalidVariableValuesError,
24
24
  prepareItem,
25
25
  publishItem
26
- } from "./chunk-OFY6JTZC.js";
26
+ } from "./chunk-VDJO4DJ7.js";
27
27
  import {
28
28
  DEFAULT_REGISTRY_URL
29
- } from "./chunk-TO6JNTML.js";
29
+ } from "./chunk-BP4VNTZL.js";
30
30
  import {
31
31
  trackRegistryItemAdded
32
- } from "./chunk-R46P7TGY.js";
32
+ } from "./chunk-DLC2FICN.js";
33
33
  import {
34
34
  defineCommand
35
35
  } from "./chunk-S3S4TGEH.js";
36
36
  import {
37
37
  failCommand
38
- } from "./chunk-PBN6GBJE.js";
38
+ } from "./chunk-JVBRJMOP.js";
39
39
  import {
40
40
  c
41
41
  } from "./chunk-ZTZA4UWZ.js";
42
42
  import {
43
43
  ITEM_TYPE_DIRS
44
- } from "./chunk-LBQFLUIY.js";
44
+ } from "./chunk-VFBAKPRC.js";
45
45
  import {
46
46
  isProjectRootMissing,
47
47
  realpath
@@ -10,7 +10,7 @@ import {
10
10
  isDevice,
11
11
  isQuality,
12
12
  render
13
- } from "./chunk-VARUKXOZ.js";
13
+ } from "./chunk-XR5BSEUF.js";
14
14
 
15
15
  // src/api/removeBackground.ts
16
16
  import { resolve } from "path";
@@ -6,39 +6,41 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-55P7GDT6.js";
9
+ } from "./chunk-TJB4GAV6.js";
10
10
  import {
11
11
  serveStaticProjectHtml
12
- } from "./chunk-IZM562YJ.js";
12
+ } from "./chunk-Z4R35NJS.js";
13
13
  import {
14
14
  AUDIT_SEEK_OPTIONS,
15
15
  installPageFunctionGuard,
16
16
  seekCompositionTimeline,
17
17
  waitForCompositionFonts,
18
18
  waitForRuntimeReady
19
- } from "./chunk-HFZ4UILX.js";
19
+ } from "./chunk-XOVHO3TT.js";
20
20
  import {
21
- gotoWhenSent,
22
21
  launchManagedBrowser,
23
22
  resolveManagedGpuMode
24
- } from "./chunk-ULWZYLCV.js";
23
+ } from "./chunk-GTE5WZAM.js";
24
+ import {
25
+ gotoWhenSent
26
+ } from "./chunk-MOEGCMKI.js";
25
27
  import {
26
28
  pageNavigationTimeoutMs
27
- } from "./chunk-ZJPCQBU7.js";
29
+ } from "./chunk-B2SZZFWW.js";
28
30
  import {
29
31
  defineCommand
30
32
  } from "./chunk-S3S4TGEH.js";
31
33
  import {
32
34
  failCommand,
33
35
  setCommandExitCode
34
- } from "./chunk-PBN6GBJE.js";
36
+ } from "./chunk-JVBRJMOP.js";
35
37
  import {
36
38
  c
37
39
  } from "./chunk-ZTZA4UWZ.js";
38
40
  import {
39
41
  printDeprecationNotice,
40
42
  withMeta
41
- } from "./chunk-2VJNKE7C.js";
43
+ } from "./chunk-ANR6WOC3.js";
42
44
  import {
43
45
  normalizeErrorMessage
44
46
  } from "./chunk-KNU5COPB.js";
@@ -446,29 +448,14 @@ function staysInFrame(frames, selector, canvas) {
446
448
  }
447
449
  return [];
448
450
  }
449
- function keepsMoving(frames, within, maxStaticSec) {
450
- const scope = within ?? "*";
451
- if (within && frames.every((frame) => !frame.liveness[scope])) {
452
- return [missingIssue(within, 0)];
453
- }
454
- const issues = [];
451
+ function frozenSpans(frames, scope, maxStaticSec) {
452
+ const spans = [];
455
453
  const first = frames[0];
456
- if (!first) return issues;
454
+ if (!first) return spans;
457
455
  let runStart = first.time;
458
456
  let runSig = first.liveness[scope] ?? "";
459
- const flush = (endTime) => {
460
- const span = endTime - runStart;
461
- if (span > maxStaticSec) {
462
- issues.push({
463
- code: "motion_frozen",
464
- severity: "error",
465
- time: runStart,
466
- selector: within ?? "composition",
467
- message: `nothing moves${within ? ` within ${within}` : ""} between ${round(runStart)}s and ${round(endTime)}s (${round(span)}s static) \u2014 should keep moving`,
468
- rect: ZERO_RECT,
469
- fixHint: "Add or extend motion so no shot freezes for this long, or shorten the static hold."
470
- });
471
- }
457
+ const flush = (end) => {
458
+ if (end - runStart > maxStaticSec) spans.push({ start: runStart, end });
472
459
  };
473
460
  let lastTime = runStart;
474
461
  for (const frame of frames.slice(1)) {
@@ -481,7 +468,22 @@ function keepsMoving(frames, within, maxStaticSec) {
481
468
  }
482
469
  }
483
470
  flush(lastTime);
484
- return issues;
471
+ return spans;
472
+ }
473
+ function keepsMoving(frames, within, maxStaticSec) {
474
+ const scope = within ?? "*";
475
+ if (within && frames.every((frame) => !frame.liveness[scope])) {
476
+ return [missingIssue(within, 0)];
477
+ }
478
+ return frozenSpans(frames, scope, maxStaticSec).map(({ start, end }) => ({
479
+ code: "motion_frozen",
480
+ severity: "error",
481
+ time: start,
482
+ selector: within ?? "composition",
483
+ message: `nothing moves${within ? ` within ${within}` : ""} between ${round(start)}s and ${round(end)}s (${round(end - start)}s static) \u2014 should keep moving`,
484
+ rect: ZERO_RECT,
485
+ fixHint: "Add or extend motion so no shot freezes for this long, or shorten the static hold."
486
+ }));
485
487
  }
486
488
  function evaluateMotion(frames, assertions, canvas) {
487
489
  if (frames.length === 0) return [];
@@ -709,7 +711,7 @@ async function collectTweenBoundaries(page) {
709
711
  });
710
712
  }
711
713
  async function bundleProjectHtml(projectDir) {
712
- const { bundleToSingleHtml } = await import("./compiler-U3W6CJW7.js");
714
+ const { bundleToSingleHtml } = await import("./compiler-27KQD7KW.js");
713
715
  return bundleToSingleHtml(projectDir);
714
716
  }
715
717
  async function alignViewportToComposition(page, url) {
@@ -726,15 +728,15 @@ async function alignViewportToComposition(page, url) {
726
728
  await gotoWhenSent(page, url, pageNavigationTimeoutMs());
727
729
  }
728
730
  async function runLayoutAudit(projectDir, opts) {
729
- const { ensureBrowser } = await import("./manager-V2QCCPOJ.js");
731
+ const { ensureBrowser } = await import("./manager-UHWEKPXC.js");
730
732
  const puppeteer = await import("puppeteer-core");
731
- const { buildChromeArgs } = await import("./src-XRTZOBO5.js");
733
+ const { buildChromeArgs } = await import("./src-EL6HGIS4.js");
732
734
  const {
733
735
  assertWebGpuAdapterAvailable,
734
736
  compositionRequiresWebGpu,
735
737
  resolveLocalBrowserGpuMode,
736
738
  resolveLocalWebGpu
737
- } = await import("./gpuPolicy-GLUATV5I.js");
739
+ } = await import("./gpuPolicy-UDJT2MQK.js");
738
740
  const html = await bundleProjectHtml(projectDir);
739
741
  const server = await serveStaticProjectHtml(
740
742
  projectDir,
@@ -1107,7 +1109,9 @@ export {
1107
1109
  limitLayoutIssues,
1108
1110
  buildTransitionSampleTimes,
1109
1111
  mergeSampleTimes,
1112
+ DEFAULT_MAX_STATIC_SEC,
1110
1113
  ambiguousIssue,
1114
+ frozenSpans,
1111
1115
  evaluateMotion,
1112
1116
  assertionTargets,
1113
1117
  collectSamplingTargets,