hyperframes 0.8.105 → 0.8.107

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 (168) hide show
  1. package/dist/{add-T5E7MPPC.js → add-DXZ3HNQI.js} +16 -16
  2. package/dist/{animatedGifPrep-RZVYVAXD.js → animatedGifPrep-2IQB4DGE.js} +7 -7
  3. package/dist/{asset-PGS53LQZ.js → asset-KZIG3MZN.js} +2 -2
  4. package/dist/{assetCataloger-BQREHRS2.js → assetCataloger-4GE6PIUA.js} +3 -3
  5. package/dist/{auth-LRMHJJNK.js → auth-5IYF3H67.js} +2 -2
  6. package/dist/{autoUpdate-5BJILZLR.js → autoUpdate-5C3FXM6Y.js} +2 -2
  7. package/dist/{backgroundChecks-NAULCOWW.js → backgroundChecks-75WGW4NB.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-AQN5PRXM.js → batchRender-FKKS3YBX.js} +4 -4
  10. package/dist/{beats-EJXI72VZ.js → beats-ISR36NSK.js} +11 -11
  11. package/dist/{benchmark-OMWVHLP5.js → benchmark-U6TQ6DS2.js} +13 -13
  12. package/dist/{browser-LACY5DMP.js → browser-VDS6QAVA.js} +10 -10
  13. package/dist/{bundleWithLocalizedFonts-JKJKZR2S.js → bundleWithLocalizedFonts-PMWWW5YG.js} +2 -2
  14. package/dist/{capture-5BCJWVC7.js → capture-5KE34KCD.js} +2 -2
  15. package/dist/{capture-QYLHIYKJ.js → capture-BKA3UCZS.js} +8 -8
  16. package/dist/{catalog-EWOHOXCM.js → catalog-ZXOSU27O.js} +16 -16
  17. package/dist/{check-QYNXFJLM.js → check-MZMZCXPN.js} +31 -31
  18. package/dist/{checkBrowser-JLDJXTIE.js → checkBrowser-UIZJXYCQ.js} +30 -30
  19. package/dist/{chunk-G6UGQROF.js → chunk-3CYAZWF2.js} +3 -3
  20. package/dist/{chunk-TMLEIURT.js → chunk-3LBFLW7E.js} +1 -1
  21. package/dist/{chunk-JXXE3SWC.js → chunk-3WG63KFW.js} +11 -11
  22. package/dist/{chunk-7QGIB2E6.js → chunk-4DJXCVQJ.js} +89 -26
  23. package/dist/{chunk-I77CAR4W.js → chunk-4W4UDPCH.js} +2 -2
  24. package/dist/{chunk-PB2OX2JY.js → chunk-6QWHIARJ.js} +1 -1
  25. package/dist/{chunk-4WAMN4IF.js → chunk-73VPF3SS.js} +1 -1
  26. package/dist/{chunk-XPWG62TS.js → chunk-7BI5BYMQ.js} +5 -5
  27. package/dist/{chunk-NQBC63W4.js → chunk-ADP6TMYP.js} +8 -8
  28. package/dist/{chunk-X2Z6QWK4.js → chunk-AO4PBESP.js} +7 -7
  29. package/dist/{chunk-TYA65W4U.js → chunk-BRTGJ73L.js} +2 -2
  30. package/dist/{chunk-PUB5XZYL.js → chunk-C3KEF3UA.js} +1 -1
  31. package/dist/{chunk-VW5OMJNG.js → chunk-D5EJCP26.js} +14 -10
  32. package/dist/{chunk-Y2CZEJPK.js → chunk-FLUBCMNT.js} +2 -2
  33. package/dist/{chunk-E5HKS3CE.js → chunk-GLTHJJIF.js} +2 -2
  34. package/dist/{chunk-7KERLNFV.js → chunk-HGL4WJDI.js} +9 -9
  35. package/dist/{chunk-HFFR7TN7.js → chunk-HJCTKNXF.js} +2 -1
  36. package/dist/{chunk-5PXBK5OR.js → chunk-I73Z6OOE.js} +1 -1
  37. package/dist/{chunk-NY3VE4ZM.js → chunk-J6CSEDK7.js} +4 -4
  38. package/dist/{chunk-USWOTTSP.js → chunk-JNY3VJWB.js} +1 -1
  39. package/dist/{chunk-XE6ZAXKT.js → chunk-KTPQ67TX.js} +1 -1
  40. package/dist/{chunk-ZIS7YLUG.js → chunk-L7XDI3DT.js} +1 -1
  41. package/dist/{chunk-6CN2QLB5.js → chunk-NHTRUAMD.js} +1 -1
  42. package/dist/{chunk-GKAY45RV.js → chunk-NX6G66F4.js} +2 -2
  43. package/dist/{chunk-XNLURYK3.js → chunk-OGTR33KN.js} +2 -2
  44. package/dist/{chunk-HUHJYNST.js → chunk-P7XRDAWU.js} +1 -1
  45. package/dist/{chunk-FOKUJKBN.js → chunk-PMLZPNIB.js} +13 -2
  46. package/dist/{chunk-6F6EEQNB.js → chunk-PSGDNMM6.js} +1 -1
  47. package/dist/{chunk-O5TBFZ7X.js → chunk-PU2IOWX4.js} +2 -2
  48. package/dist/{chunk-AZQLJHAO.js → chunk-PZTEY73C.js} +1 -1
  49. package/dist/{chunk-XZSH5GS7.js → chunk-QH6UFY2O.js} +4 -4
  50. package/dist/{chunk-UVUAU3CH.js → chunk-QM2NUN2B.js} +47 -25
  51. package/dist/{chunk-TH4APNRP.js → chunk-R4IB642V.js} +2 -2
  52. package/dist/{chunk-GOI4GCUB.js → chunk-SGBOZ2HF.js} +1 -1
  53. package/dist/{chunk-JOJZOSHT.js → chunk-SKPL32FI.js} +1 -1
  54. package/dist/{chunk-IQ4UCWV7.js → chunk-T3BOWXPX.js} +1 -1
  55. package/dist/{chunk-ELDDZYIJ.js → chunk-T4Z4UNSX.js} +3 -3
  56. package/dist/{chunk-G5VIPKL3.js → chunk-TI5Z4SWP.js} +3 -3
  57. package/dist/{chunk-OPPUOGKQ.js → chunk-TPPIERG3.js} +3 -3
  58. package/dist/{chunk-TLYU5625.js → chunk-UUDQD62L.js} +6 -6
  59. package/dist/{chunk-TEXPOC5V.js → chunk-VMDEGITC.js} +2 -2
  60. package/dist/{chunk-I6M4GXMC.js → chunk-WBVPQC7J.js} +1 -1
  61. package/dist/{chunk-4Z5O7BTD.js → chunk-WEATBQTR.js} +10 -1
  62. package/dist/{chunk-R5RF3LGS.js → chunk-XMAL2A7Y.js} +1 -1
  63. package/dist/{chunk-WNY6NRJS.js → chunk-YVEZT6WT.js} +1 -1
  64. package/dist/{chunk-M4KS6MJN.js → chunk-YY5J75H5.js} +4 -4
  65. package/dist/{chunk-32Y3HRS3.js → chunk-Z4UAXNWV.js} +2 -2
  66. package/dist/{clean-N7KKGD37.js → clean-46MZVA37.js} +16 -16
  67. package/dist/cli.js +50 -50
  68. package/dist/{cloud-O5DAKL3R.js → cloud-GAZQGPCW.js} +4 -4
  69. package/dist/{cloudrun-ISE6GSUO.js → cloudrun-ZWL7SLDD.js} +5 -5
  70. package/dist/{compare-QF6ODCLD.js → compare-66AAJESM.js} +25 -25
  71. package/dist/{compiler-QMEZK6CU.js → compiler-3N7XQRH6.js} +3 -3
  72. package/dist/{component-KDNOQ32H.js → component-3OCOHK2B.js} +3 -3
  73. package/dist/{compositions-LN575R5Q.js → compositions-H2BP4N6F.js} +12 -12
  74. package/dist/{delete-CN2V2NOZ.js → delete-WNJLVPGO.js} +4 -4
  75. package/dist/{deterministicFonts-XS3PGWH5.js → deterministicFonts-A4CNCSAL.js} +2 -2
  76. package/dist/{dist-E44WU6LH.js → dist-AY2RBEXL.js} +1 -1
  77. package/dist/{dist-R24TLUYO.js → dist-HSEMXPG3.js} +3 -3
  78. package/dist/docs/data-attributes.md +1 -1
  79. package/dist/{doctor-SW5CCD4X.js → doctor-IFOZS45N.js} +11 -11
  80. package/dist/{events-NKZLTCL5.js → events-5EKFJCCZ.js} +9 -9
  81. package/dist/{events-ED7Q2KUG.js → events-6TH3FU3F.js} +10 -10
  82. package/dist/{feedback-ZKTEKQCK.js → feedback-QRQNMORT.js} +11 -11
  83. package/dist/{figma-G4FG4QPG.js → figma-WONEPLUQ.js} +3 -3
  84. package/dist/fontLocalizeCli.js +10 -10
  85. package/dist/{get-VSDEJN4A.js → get-C7FCYNI2.js} +4 -4
  86. package/dist/{gpuPolicy-BQFPO7UA.js → gpuPolicy-BXXQF3VC.js} +7 -7
  87. package/dist/{grade-compare-524UCTFO.js → grade-compare-SCCSZ5P3.js} +25 -25
  88. package/dist/{gsapParser-EZGJSSV5.js → gsapParser-KVMPC2SC.js} +5 -1
  89. package/dist/{help-6VH3LD5L.js → help-FJOUNXVD.js} +1 -1
  90. package/dist/{history-LOACVJ3M.js → history-OZY36NEC.js} +16 -16
  91. package/dist/hyperframe-runtime.js +10 -10
  92. package/dist/hyperframe.manifest.json +1 -1
  93. package/dist/hyperframe.runtime.iife.js +10 -10
  94. package/dist/hyperframes-player.global.js +1 -1
  95. package/dist/{info-HRMOTDNZ.js → info-RG4SZQ2C.js} +12 -12
  96. package/dist/{init-ESQK7YLX.js → init-YGZCDKSS.js} +98 -42
  97. package/dist/{inspect-5B73WWHL.js → inspect-X547EZ4I.js} +26 -26
  98. package/dist/{installer-UZSVMUKT.js → installer-6J24NTIV.js} +5 -5
  99. package/dist/{keyframes-OGR6NHYQ.js → keyframes-EIWEION2.js} +13 -13
  100. package/dist/{lambda-U4WIJQCJ.js → lambda-DSZDMP7P.js} +6 -6
  101. package/dist/{layout-KOOH4XAF.js → layout-B7KCBLBH.js} +26 -26
  102. package/dist/{lint-5UUJRRN6.js → lint-RBDG4ERJ.js} +13 -13
  103. package/dist/{lintProject-4P4C6AN2.js → lintProject-CMPAR7BS.js} +1 -1
  104. package/dist/{list-MWAA4GQZ.js → list-BPHPHLDJ.js} +4 -4
  105. package/dist/{login-XBHMRXYM.js → login-HV7KBW2J.js} +4 -4
  106. package/dist/{media-treatment-VIOH3P6E.js → media-treatment-RS6BZSQC.js} +13 -13
  107. package/dist/{models-LXUIU5DC.js → models-K4U7GRXV.js} +8 -8
  108. package/dist/{motionShot-TGJGSYGV.js → motionShot-5AI2DALY.js} +11 -11
  109. package/dist/{normalize-audio-SJSFIAO6.js → normalize-audio-J2PG6YXH.js} +11 -11
  110. package/dist/{pipeline-OFFKTFXS.js → pipeline-HIUESSET.js} +7 -7
  111. package/dist/{play-RHJNOV3U.js → play-TTLQXBAH.js} +21 -21
  112. package/dist/{preflight-TVCVP5P2.js → preflight-63ODQ625.js} +8 -8
  113. package/dist/{present-2U6JUHHO.js → present-XKGZ26FQ.js} +17 -17
  114. package/dist/{preview-SLNIYMPZ.js → preview-O2YEKMYJ.js} +18 -18
  115. package/dist/{producer-LGG3TOUI.js → producer-ZTQIJO7E.js} +1 -1
  116. package/dist/{projectConfig-V53SEFIS.js → projectConfig-VVFH7XW5.js} +7 -7
  117. package/dist/{publication-7RKKPKLM.js → publication-NALPAHDC.js} +3 -3
  118. package/dist/{publish-TRRFCEMQ.js → publish-G7OL45EL.js} +9 -9
  119. package/dist/{remove-background-HJFT46Z5.js → remove-background-LOLKFKLT.js} +8 -8
  120. package/dist/{render-VLO7CATD.js → render-EXSRG666.js} +22 -22
  121. package/dist/{render-TPZ5FXHS.js → render-I65IU7RM.js} +4 -4
  122. package/dist/{render-T5F5WONV.js → render-ULQLUIWD.js} +15 -15
  123. package/dist/{render-batch-4ZF5C2LN.js → render-batch-RSNCREPB.js} +4 -4
  124. package/dist/{renderCancellation-4PYGAN5D.js → renderCancellation-2WB4SGXR.js} +7 -7
  125. package/dist/renderSetupWorker.js +1 -1
  126. package/dist/{resolver-4JRJPC6S.js → resolver-CVN2IM2R.js} +5 -5
  127. package/dist/{sherpa-MNCWRFD4.js → sherpa-OJUI54HG.js} +10 -10
  128. package/dist/{skills-BRZ2RE6U.js → skills-CPS5E5YP.js} +12 -12
  129. package/dist/{skillsUpdateCheck-W7VIJZ3E.js → skillsUpdateCheck-3IT5CJWU.js} +3 -3
  130. package/dist/{snapshot-7XKYXNTY.js → snapshot-MSGC7HTA.js} +26 -26
  131. package/dist/{src-QF6RYX76.js → src-EZBJT4VH.js} +9 -9
  132. package/dist/{src-QX5PPANW.js → src-SV7CNZXN.js} +6 -6
  133. package/dist/{staticProjectServer-QDLEH37G.js → staticProjectServer-5JAGMYT7.js} +15 -15
  134. package/dist/{status-C3IDZFDG.js → status-4W3EJYEH.js} +7 -7
  135. package/dist/studio/assets/{hyperframes-player-tnfCiVdR.js → hyperframes-player-h4mktSdm.js} +1 -1
  136. package/dist/studio/assets/index-CM1xA_jD.js +394 -0
  137. package/dist/studio/assets/{index-Ca6LZlVb.js → index-D8GKc2D9.js} +1 -1
  138. package/dist/studio/assets/index-lrT-gfHa.css +1 -0
  139. package/dist/studio/assets/{index-zpe332hb.js → index-zoqPmBF6.js} +1 -1
  140. package/dist/studio/{chunk-QADHJFDF.js → chunk-4OZC426H.js} +13 -3
  141. package/dist/studio/chunk-4OZC426H.js.map +1 -0
  142. package/dist/studio/index.d.ts +381 -14
  143. package/dist/studio/index.html +11 -2
  144. package/dist/studio/index.js +9974 -9045
  145. package/dist/studio/index.js.map +1 -1
  146. package/dist/studio/player.js +1 -1
  147. package/dist/studio/styles.css +1 -1
  148. package/dist/{studio-api-RMDM77U2.js → studio-api-L2TJ2JTK.js} +9 -9
  149. package/dist/{studioServer-D6K4QZ4X.js → studioServer-UV7YRYWN.js} +42 -41
  150. package/dist/{system-OAB2LYBV.js → system-OL4MXRPK.js} +7 -7
  151. package/dist/{telemetry-NW4YAF5W.js → telemetry-WRUU725E.js} +10 -10
  152. package/dist/templates/_shared/AGENTS.md +1 -1
  153. package/dist/templates/_shared/CLAUDE.md +1 -1
  154. package/dist/templates/from-file/index.html +3 -2
  155. package/dist/templates/warm-grain/index.html +2 -10
  156. package/dist/{timeline-XHUHQBFU.js → timeline-P43A53BW.js} +16 -16
  157. package/dist/{tokens-HJ2O6BAG.js → tokens-NUHTJM2V.js} +2 -2
  158. package/dist/{transcribe-C2QRBPP2.js → transcribe-FSVNIFGF.js} +13 -13
  159. package/dist/{transcribe-AL3E5MBZ.js → transcribe-TRLZJK73.js} +10 -8
  160. package/dist/{updateCheck-DBLXK73Z.js → updateCheck-33TAG46I.js} +2 -2
  161. package/dist/{upgrade-CUGQ5WJI.js → upgrade-AJ6QBTH2.js} +2 -2
  162. package/dist/{urlDownloader-U3TNOPD5.js → urlDownloader-MP6GJIDV.js} +6 -6
  163. package/dist/{validate-KZQ7DWIR.js → validate-VL3A6VTJ.js} +16 -16
  164. package/dist/{video-KAHL76HG.js → video-KO7VT63P.js} +7 -7
  165. package/package.json +1 -1
  166. package/dist/studio/assets/index-Cre9X4RS.css +0 -1
  167. package/dist/studio/assets/index-DEDhPmPD.js +0 -399
  168. package/dist/studio/chunk-QADHJFDF.js.map +0 -1
@@ -15,11 +15,13 @@ import {
15
15
  splitElementInHtml,
16
16
  unwrapElementsFromHtml,
17
17
  wrapElementsInHtml
18
- } from "./chunk-M4KS6MJN.js";
18
+ } from "./chunk-YY5J75H5.js";
19
19
  import {
20
+ atomicTempPath,
20
21
  createFileAtomically,
22
+ isAtomicTempPath,
21
23
  replaceFileAtomically
22
- } from "./chunk-4Z5O7BTD.js";
24
+ } from "./chunk-WEATBQTR.js";
23
25
  import {
24
26
  PROXY_PARAMS_VERSION,
25
27
  PROXY_PENDING_RETRY_AFTER_SECONDS,
@@ -45,7 +47,7 @@ import {
45
47
  shouldPrewarmProxy,
46
48
  waitForProxy,
47
49
  walkDir
48
- } from "./chunk-O5TBFZ7X.js";
50
+ } from "./chunk-PU2IOWX4.js";
49
51
  import {
50
52
  findTimelineScript,
51
53
  parseGsapScriptAcorn
@@ -64,16 +66,16 @@ import {
64
66
  formatRenderOutputTimestamp,
65
67
  parseFps,
66
68
  sameInstant
67
- } from "./chunk-TEXPOC5V.js";
69
+ } from "./chunk-VMDEGITC.js";
68
70
  import {
69
71
  MagicString,
70
72
  VALID_CANVAS_RESOLUTIONS,
71
73
  unrollComputedTimeline
72
- } from "./chunk-TLYU5625.js";
74
+ } from "./chunk-UUDQD62L.js";
73
75
  import {
74
76
  addScenePartsManifest,
75
77
  ensureHfIds
76
- } from "./chunk-TH4APNRP.js";
78
+ } from "./chunk-R4IB642V.js";
77
79
  import {
78
80
  findStartTags,
79
81
  injectScriptsIntoHtml,
@@ -81,7 +83,7 @@ import {
81
83
  insertBeforeCloseTag,
82
84
  isFullHtmlDocument,
83
85
  stripEmbeddedRuntimeScripts
84
- } from "./chunk-FOKUJKBN.js";
86
+ } from "./chunk-PMLZPNIB.js";
85
87
  import {
86
88
  ProjectRootMissingError,
87
89
  folderGone,
@@ -94,7 +96,7 @@ import {
94
96
  import {
95
97
  isWithinProjectRoot,
96
98
  readProjectFile
97
- } from "./chunk-UVUAU3CH.js";
99
+ } from "./chunk-QM2NUN2B.js";
98
100
  import {
99
101
  FFPROBE_PATH_ENV,
100
102
  findFfBinary
@@ -198,7 +200,7 @@ function stampFileHfIds(filePath) {
198
200
  }
199
201
  }
200
202
 
201
- // ../studio-server/dist/chunk-ZZCG4HGG.js
203
+ // ../studio-server/dist/chunk-KUEG5MYA.js
202
204
  import { randomUUID as randomUUID6 } from "crypto";
203
205
  import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, writeFile } from "fs/promises";
204
206
  import {
@@ -269,7 +271,11 @@ function recordFileWriteReceipt(filePath, { overwrote, ...receipt }) {
269
271
  if (live.length > 0) receipts.set(path, live);
270
272
  else receipts.delete(path);
271
273
  }
272
- receipts.set(absPath, [...receipts.get(absPath) ?? [], { ...receipt, recordedAt: now }]);
274
+ const from = overwrote === void 0 ? void 0 : fileContentVersion(overwrote);
275
+ receipts.set(absPath, [
276
+ ...receipts.get(absPath) ?? [],
277
+ { ...receipt, ...from && { from }, recordedAt: now }
278
+ ]);
273
279
  }
274
280
  function clearFileWriteReceipt(filePath, version, writeToken) {
275
281
  const absPath = realFilePath(filePath);
@@ -282,8 +288,8 @@ function clearFileWriteReceipt(filePath, version, writeToken) {
282
288
  function identifyFileWrite(filePath, expectedVersion) {
283
289
  const receipt = newestReceipt(realFilePath(filePath), expectedVersion);
284
290
  if (!receipt) return null;
285
- const { path, version, writeToken } = receipt;
286
- return { path, version, writeToken };
291
+ const { path, version, writeToken, from } = receipt;
292
+ return { path, version, writeToken, ...from && { from } };
287
293
  }
288
294
  function newestReceipt(absPath, expectedVersion) {
289
295
  const now = Date.now();
@@ -334,7 +340,7 @@ var STUDIO_SIGNATURE_MANIFEST_PATHS = [
334
340
  ];
335
341
  function affectsProjectSignature(projectDir, changedPath) {
336
342
  const relativePath = relative(resolve(projectDir), resolve(changedPath));
337
- if (relativePath === "" || relativePath.startsWith("..") || isAbsolute(relativePath)) {
343
+ if (relativePath === "" || relativePath.startsWith("..") || isAbsolute(relativePath) || isAtomicTempPath(relativePath)) {
338
344
  return false;
339
345
  }
340
346
  const segments = relativePath.split(sep);
@@ -342,6 +348,7 @@ function affectsProjectSignature(projectDir, changedPath) {
342
348
  return !segments.some((segment) => SIGNATURE_EXCLUDED_DIRS.has(segment));
343
349
  }
344
350
  var projectSignatureCache = /* @__PURE__ */ new Map();
351
+ var COARSEST_FILE_TIME_TICK_MS = 2e3;
345
352
  function isPathWithin(parentDir, childPath) {
346
353
  const childRelativePath = relative(parentDir, childPath);
347
354
  return childRelativePath === "" || !childRelativePath.startsWith("..") && !isAbsolute(childRelativePath);
@@ -349,6 +356,7 @@ function isPathWithin(parentDir, childPath) {
349
356
  function isTextContentEligible(file, size) {
350
357
  return SIGNATURE_TEXT_EXTENSIONS.has(extname(file).toLowerCase()) && size <= MAX_SIGNATURE_TEXT_BYTES;
351
358
  }
359
+ var isSkippedEntry = (entry) => SIGNATURE_EXCLUDED_DIRS.has(entry) || isAtomicTempPath(entry);
352
360
  function collectProjectSignatureFiles(projectDir, dir, files) {
353
361
  let entries;
354
362
  try {
@@ -357,7 +365,7 @@ function collectProjectSignatureFiles(projectDir, dir, files) {
357
365
  return;
358
366
  }
359
367
  for (const entry of entries) {
360
- if (SIGNATURE_EXCLUDED_DIRS.has(entry)) continue;
368
+ if (isSkippedEntry(entry)) continue;
361
369
  const file = resolve(dir, entry);
362
370
  if (!isPathWithin(projectDir, file)) continue;
363
371
  let stat22;
@@ -443,6 +451,7 @@ async function resolveProjectAndSignature(adapter, projectId) {
443
451
  }
444
452
  function createProjectSignature(projectDir, excluding = /* @__PURE__ */ new Set()) {
445
453
  const normalizedProjectDir = resolve(projectDir);
454
+ const signedAt = Date.now();
446
455
  const collected = collectProjectFiles(normalizedProjectDir);
447
456
  const files = collected.filter(
448
457
  (entry) => !excluding.has(relative(normalizedProjectDir, entry.file).split(sep).join("/"))
@@ -471,7 +480,10 @@ function createProjectSignature(projectDir, excluding = /* @__PURE__ */ new Set(
471
480
  hash.update("\0");
472
481
  }
473
482
  const signature = hash.digest("hex").slice(0, 24);
474
- projectSignatureCache.set(cacheKey, { fingerprint, signature });
483
+ const settledATickBeforeSigning = files.every(
484
+ (entry) => Math.max(entry.mtimeMs, entry.ctimeMs) < signedAt - COARSEST_FILE_TIME_TICK_MS
485
+ );
486
+ if (settledATickBeforeSigning) projectSignatureCache.set(cacheKey, { fingerprint, signature });
475
487
  return signature;
476
488
  }
477
489
  var BLOB_HASH = /^[0-9a-f]{64}$/;
@@ -482,7 +494,7 @@ async function hashFile(path) {
482
494
  }
483
495
  async function cloneOrCopy(from, to, beforeReplace) {
484
496
  await mkdir(dirname2(to), { recursive: true });
485
- const temp = `${to}.${randomUUID2()}.tmp`;
497
+ const temp = atomicTempPath(to);
486
498
  try {
487
499
  await copyFile(from, temp, constants2.COPYFILE_FICLONE);
488
500
  beforeReplace?.();
@@ -2124,6 +2136,10 @@ var PROP_TO_GROUP2 = /* @__PURE__ */ new Map();
2124
2136
  for (const [group, props] of Object.entries(PROPERTY_GROUPS2)) {
2125
2137
  for (const p of props) PROP_TO_GROUP2.set(p, group);
2126
2138
  }
2139
+ function isXYPositionWrite(a) {
2140
+ const xy = (props) => !!props && ("x" in props || "y" in props);
2141
+ return a.propertyGroup === "position" && (xy(a.properties) || xy(a.fromProperties) || !!a.keyframes?.keyframes.some((k) => xy(k.properties)));
2142
+ }
2127
2143
  function classifyPropertyGroup2(prop) {
2128
2144
  return PROP_TO_GROUP2.get(prop) ?? "other";
2129
2145
  }
@@ -3736,7 +3752,7 @@ function dedupePositionWritesInScript(script, selector, keepId) {
3736
3752
  const parsed = parseGsapScriptAcornForWrite(script);
3737
3753
  if (!parsed) return script;
3738
3754
  const posWrites = parsed.located.filter(
3739
- (l) => l.animation.targetSelector === selector && l.animation.propertyGroup === "position"
3755
+ (l) => l.animation.targetSelector === selector && isXYPositionWrite(l.animation)
3740
3756
  );
3741
3757
  if (posWrites.length <= 1) return script;
3742
3758
  const keeper = posWrites.find((l) => l.id === keepId) ?? posWrites[posWrites.length - 1];
@@ -5496,6 +5512,29 @@ function assertExpectedVersion(mutation, current) {
5496
5512
  const stale = mutation.expectedVersion === void 0 ? current !== mutation.before : fileContentVersion(current) !== mutation.expectedVersion;
5497
5513
  if (stale) throw new FileChangedError(mutation.sourceFile);
5498
5514
  }
5515
+ var FONT_STYLE_RE = /<style\b[^>]*data-hf-studio-fonts=(["'])true\1[^>]*>([\s\S]*?)<\/style>/i;
5516
+ var ONE_FONT_FACE_RULE = /^@font-face \{(?:[^{}<"'\\]|"(?:[^"\\<\n\r\f]|\\[^<\n\r\f])*"|'(?:[^'\\<\n\r\f]|\\[^<\n\r\f])*')*\}$/;
5517
+ function isStudioFontFaceCss(css) {
5518
+ return typeof css === "string" && ONE_FONT_FACE_RULE.test(css);
5519
+ }
5520
+ function ensureStudioFontFaceCss(html, css) {
5521
+ if (html.includes(css)) return html;
5522
+ const block = FONT_STYLE_RE.exec(html);
5523
+ if (block) {
5524
+ const next = `${(block[2] ?? "").trim()}
5525
+ ${css}`.trim();
5526
+ return html.replace(block[0], () => `<style data-hf-studio-fonts="true">
5527
+ ${next}
5528
+ </style>`);
5529
+ }
5530
+ const styleTag = `<style data-hf-studio-fonts="true">
5531
+ ${css}
5532
+ </style>`;
5533
+ if (/<\/head>/i.test(html)) return html.replace(/<\/head>/i, () => ` ${styleTag}
5534
+ </head>`);
5535
+ return `${styleTag}
5536
+ ${html}`;
5537
+ }
5499
5538
  var CompositionInsertionError = class extends Error {
5500
5539
  constructor(message, status) {
5501
5540
  super(message);
@@ -5755,7 +5794,7 @@ function requestSubPath(url, route) {
5755
5794
  return decodeURIComponent(segments.slice(start + routeSegments.length).join("/"));
5756
5795
  }
5757
5796
  async function loadGsapParser() {
5758
- return import("./gsapParser-EZGJSSV5.js");
5797
+ return import("./gsapParser-KVMPC2SC.js");
5759
5798
  }
5760
5799
  function isDanglingSymlinkInProject(projectDir, lexicalPath) {
5761
5800
  if (!isSafePath(projectDir, dirname32(lexicalPath))) return false;
@@ -6004,7 +6043,7 @@ function generateCopyPath(projectDir, originalPath) {
6004
6043
  }
6005
6044
  function walkFiles(dir, filter) {
6006
6045
  const results = [];
6007
- for (const entry of readdirSync22(dir, { withFileTypes: true })) {
6046
+ for (const entry of readableEntries(dir)) {
6008
6047
  const full2 = join52(dir, entry.name);
6009
6048
  if (entry.isDirectory()) {
6010
6049
  if (entry.name === "node_modules" || entry.name === ".thumbnails" || entry.name === "renders" || entry.name === ".transcode-cache")
@@ -6016,6 +6055,26 @@ function walkFiles(dir, filter) {
6016
6055
  }
6017
6056
  return results;
6018
6057
  }
6058
+ var SKIPPED_ENTRY = /* @__PURE__ */ new Set(["EACCES", "EPERM", "ENOENT"]);
6059
+ function skippable(error) {
6060
+ return error instanceof Error && SKIPPED_ENTRY.has(error.code ?? "");
6061
+ }
6062
+ function readableEntries(dir) {
6063
+ try {
6064
+ return readdirSync22(dir, { withFileTypes: true });
6065
+ } catch (error) {
6066
+ if (skippable(error)) return [];
6067
+ throw error;
6068
+ }
6069
+ }
6070
+ function readableText(file) {
6071
+ try {
6072
+ return readFileSync32(file, "utf-8");
6073
+ } catch (error) {
6074
+ if (skippable(error)) return null;
6075
+ throw error;
6076
+ }
6077
+ }
6019
6078
  function updateReferences(projectDir, oldPath, newPath) {
6020
6079
  const textFiles = walkFiles(
6021
6080
  projectDir,
@@ -6024,7 +6083,8 @@ function updateReferences(projectDir, oldPath, newPath) {
6024
6083
  let updatedCount = 0;
6025
6084
  for (const file of textFiles) {
6026
6085
  if (!isSafePath(projectDir, file)) continue;
6027
- const content = readFileSync32(file, "utf-8");
6086
+ const content = readableText(file);
6087
+ if (content === null) continue;
6028
6088
  if (!content.includes(oldPath)) continue;
6029
6089
  const updated = content.split(oldPath).join(newPath);
6030
6090
  if (updated !== content) {
@@ -6300,7 +6360,7 @@ async function prepareGsapMutationScript(c, res, firstMutation) {
6300
6360
  let block = extractGsapScriptBlock(html);
6301
6361
  if (!block && (firstMutation.type === "add" || firstMutation.type === "add-with-keyframes")) {
6302
6362
  const compId = html.match(/data-composition-id="([^"]+)"/)?.[1] ?? "main";
6303
- const { GSAP_CDN } = await import("./dist-R24TLUYO.js");
6363
+ const { GSAP_CDN } = await import("./dist-HSEMXPG3.js");
6304
6364
  const bootstrap = [
6305
6365
  `<script src="${GSAP_CDN}"></script>`,
6306
6366
  "<script>",
@@ -6310,6 +6370,7 @@ async function prepareGsapMutationScript(c, res, firstMutation) {
6310
6370
  "</script>"
6311
6371
  ].join("\n");
6312
6372
  html = insertBeforeCloseTag(html, "body", `${bootstrap}
6373
+ `) ?? insertBeforeCloseTag(html, "template", `${bootstrap}
6313
6374
  `) ?? `${html}
6314
6375
  ${bootstrap}`;
6315
6376
  block = extractGsapScriptBlock(html);
@@ -7638,6 +7699,10 @@ function registerFileRoutes(api, adapter) {
7638
7699
  if (!Array.isArray(parsed.body.operations) || parsed.body.operations.length === 0) {
7639
7700
  return c.json({ error: "target and operations required" }, 400);
7640
7701
  }
7702
+ const { fontFaceCss } = parsed.body;
7703
+ if (fontFaceCss !== void 0 && !isStudioFontFaceCss(fontFaceCss)) {
7704
+ return c.json({ error: "fontFaceCss must be one @font-face rule" }, 400);
7705
+ }
7641
7706
  const unsafeFields = findUnsafeDomPatchValues(parsed.body);
7642
7707
  if (unsafeFields.length > 0) {
7643
7708
  return rejectUnsafeMutationValues(c, unsafeFields);
@@ -7649,11 +7714,9 @@ function registerFileRoutes(api, adapter) {
7649
7714
  } catch {
7650
7715
  return c.json({ error: "not found" }, 404);
7651
7716
  }
7652
- const { html: patched, matched } = patchElementInHtml(
7653
- originalContent,
7654
- parsed.target,
7655
- parsed.body.operations
7656
- );
7717
+ const element = patchElementInHtml(originalContent, parsed.target, parsed.body.operations);
7718
+ const { matched } = element;
7719
+ const patched = matched && isStudioFontFaceCss(fontFaceCss) ? ensureStudioFontFaceCss(element.html, fontFaceCss) : element.html;
7657
7720
  if (patched === originalContent) {
7658
7721
  const version2 = fileContentVersion(originalContent);
7659
7722
  c.header("ETag", version2);
@@ -16,7 +16,7 @@ import {
16
16
  import {
17
17
  DEFAULT_VP9_CPU_USED,
18
18
  renderProvenanceArgs
19
- } from "./chunk-VW5OMJNG.js";
19
+ } from "./chunk-D5EJCP26.js";
20
20
  import {
21
21
  loadOptionalPackage
22
22
  } from "./chunk-XT5P4QMO.js";
@@ -202,7 +202,7 @@ function inferInputKind(inputPath) {
202
202
  }
203
203
  async function probeMedia(inputPath) {
204
204
  const isImage = inferInputKind(inputPath) === "image";
205
- const engine = await import("./src-QX5PPANW.js");
205
+ const engine = await import("./src-SV7CNZXN.js");
206
206
  const meta = await engine.extractMediaMetadata(inputPath);
207
207
  if (isImage) {
208
208
  return { width: meta.width, height: meta.height, fps: 0, frameCount: 1 };
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-TVCRUG2S.js";
14
14
  import {
15
15
  getFreeDiskMb
16
- } from "./chunk-PUB5XZYL.js";
16
+ } from "./chunk-C3KEF3UA.js";
17
17
  import {
18
18
  ensureBrowser,
19
19
  findBrowser
@@ -13,7 +13,7 @@ function resolveLocalBrowserGpuMode(browserGpuArg, envMode = process.env.PRODUCE
13
13
  return "auto";
14
14
  }
15
15
  async function resolveCaptureBrowserGpuMode(requestedMode, chromePath) {
16
- const { resolveBrowserGpuMode } = await import("./src-QX5PPANW.js");
16
+ const { resolveBrowserGpuMode } = await import("./src-SV7CNZXN.js");
17
17
  return resolveBrowserGpuMode(requestedMode, { chromePath });
18
18
  }
19
19
 
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-5ETJX6WM.js";
17
17
  import {
18
18
  runEnvironmentChecks
19
- } from "./chunk-PB2OX2JY.js";
19
+ } from "./chunk-6QWHIARJ.js";
20
20
  import {
21
21
  c
22
22
  } from "./chunk-ZTZA4UWZ.js";
@@ -25,24 +25,24 @@ import {
25
25
  getFreeDiskMb,
26
26
  getShmSizeMb,
27
27
  getSystemMeta
28
- } from "./chunk-PUB5XZYL.js";
28
+ } from "./chunk-C3KEF3UA.js";
29
29
  import {
30
30
  defineCommand
31
31
  } from "./chunk-S3S4TGEH.js";
32
32
  import {
33
33
  resolveExtractCacheDir
34
- } from "./chunk-VW5OMJNG.js";
34
+ } from "./chunk-D5EJCP26.js";
35
35
  import {
36
36
  getUpdateMeta,
37
37
  withMeta
38
- } from "./chunk-WNY6NRJS.js";
38
+ } from "./chunk-YVEZT6WT.js";
39
39
  import {
40
40
  CONFIG_PATH,
41
41
  withFileLock
42
42
  } from "./chunk-XUXGIA7H.js";
43
43
  import {
44
44
  VERSION
45
- } from "./chunk-XNLURYK3.js";
45
+ } from "./chunk-OGTR33KN.js";
46
46
  import {
47
47
  normalizeErrorMessage
48
48
  } from "./chunk-KNU5COPB.js";
@@ -6,19 +6,19 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  serveStaticProjectHtml
9
- } from "./chunk-ELDDZYIJ.js";
9
+ } from "./chunk-T4Z4UNSX.js";
10
10
  import {
11
11
  AUDIT_SEEK_OPTIONS,
12
12
  installPageFunctionGuard,
13
13
  seekCompositionTimeline,
14
14
  waitForCompositionFonts
15
- } from "./chunk-XZSH5GS7.js";
15
+ } from "./chunk-QH6UFY2O.js";
16
16
  import {
17
17
  resolveDiagnosticNavigationTimeoutMs
18
- } from "./chunk-IQ4UCWV7.js";
18
+ } from "./chunk-T3BOWXPX.js";
19
19
  import {
20
20
  resolveProject
21
- } from "./chunk-5PXBK5OR.js";
21
+ } from "./chunk-I73Z6OOE.js";
22
22
  import {
23
23
  c
24
24
  } from "./chunk-ZTZA4UWZ.js";
@@ -32,7 +32,7 @@ import {
32
32
  import {
33
33
  printDeprecationNotice,
34
34
  withMeta
35
- } from "./chunk-WNY6NRJS.js";
35
+ } from "./chunk-YVEZT6WT.js";
36
36
  import {
37
37
  normalizeErrorMessage
38
38
  } from "./chunk-KNU5COPB.js";
@@ -665,7 +665,7 @@ async function collectTweenBoundaries(page) {
665
665
  });
666
666
  }
667
667
  async function bundleProjectHtml(projectDir) {
668
- const { bundleToSingleHtml } = await import("./compiler-QMEZK6CU.js");
668
+ const { bundleToSingleHtml } = await import("./compiler-3N7XQRH6.js");
669
669
  return bundleToSingleHtml(projectDir);
670
670
  }
671
671
  async function alignViewportToComposition(page, url) {
@@ -687,13 +687,13 @@ async function alignViewportToComposition(page, url) {
687
687
  async function runLayoutAudit(projectDir, opts) {
688
688
  const { ensureBrowser } = await import("./manager-NEVLEZK3.js");
689
689
  const puppeteer = await import("puppeteer-core");
690
- const { buildChromeArgs } = await import("./src-QX5PPANW.js");
690
+ const { buildChromeArgs } = await import("./src-SV7CNZXN.js");
691
691
  const {
692
692
  assertWebGpuAdapterAvailable,
693
693
  compositionRequiresWebGpu,
694
694
  resolveCaptureBrowserGpuMode,
695
695
  resolveLocalBrowserGpuMode
696
- } = await import("./gpuPolicy-BQFPO7UA.js");
696
+ } = await import("./gpuPolicy-BXXQF3VC.js");
697
697
  const html = await bundleProjectHtml(projectDir);
698
698
  const server = await serveStaticProjectHtml(
699
699
  projectDir,
@@ -7,29 +7,29 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  RegistryCompatibilityError,
9
9
  gateRegistryItemsCompatibility
10
- } from "./chunk-ZIS7YLUG.js";
10
+ } from "./chunk-L7XDI3DT.js";
11
11
  import {
12
12
  DEFAULT_PROJECT_CONFIG,
13
13
  createProjectConfig,
14
14
  loadProjectConfig,
15
15
  projectConfigPath,
16
16
  recordProjectRegistryItems
17
- } from "./chunk-HUHJYNST.js";
17
+ } from "./chunk-P7XRDAWU.js";
18
18
  import {
19
19
  resolveItemWithDependencies,
20
20
  resolveItemsByTag
21
- } from "./chunk-USWOTTSP.js";
21
+ } from "./chunk-JNY3VJWB.js";
22
22
  import {
23
23
  InvalidVariableValuesError,
24
24
  prepareItem,
25
25
  publishItem
26
- } from "./chunk-TYA65W4U.js";
26
+ } from "./chunk-BRTGJ73L.js";
27
27
  import {
28
28
  DEFAULT_REGISTRY_URL
29
- } from "./chunk-6CN2QLB5.js";
29
+ } from "./chunk-NHTRUAMD.js";
30
30
  import {
31
31
  trackRegistryItemAdded
32
- } from "./chunk-OPPUOGKQ.js";
32
+ } from "./chunk-TPPIERG3.js";
33
33
  import {
34
34
  c
35
35
  } from "./chunk-ZTZA4UWZ.js";
@@ -41,7 +41,7 @@ import {
41
41
  } from "./chunk-PBN6GBJE.js";
42
42
  import {
43
43
  ITEM_TYPE_DIRS
44
- } from "./chunk-TEXPOC5V.js";
44
+ } from "./chunk-VMDEGITC.js";
45
45
  import {
46
46
  isProjectRootMissing,
47
47
  realpath
@@ -8,14 +8,14 @@ import {
8
8
  DEFAULT_REGISTRY_URL,
9
9
  fetchItemFile,
10
10
  validRegistryItem
11
- } from "./chunk-6CN2QLB5.js";
11
+ } from "./chunk-NHTRUAMD.js";
12
12
  import {
13
13
  publishRegistryFile,
14
14
  registryTargetPath
15
15
  } from "./chunk-GMECXFAN.js";
16
16
  import {
17
17
  validateVariables
18
- } from "./chunk-TEXPOC5V.js";
18
+ } from "./chunk-VMDEGITC.js";
19
19
  import {
20
20
  realProjectRoot
21
21
  } from "./chunk-OFQWTKPW.js";
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-AMKC3AXA.js";
10
10
  import {
11
11
  getSystemTotalMb
12
- } from "./chunk-VW5OMJNG.js";
12
+ } from "./chunk-D5EJCP26.js";
13
13
 
14
14
  // src/telemetry/system.ts
15
15
  import { cpus, freemem, platform as platform2, release as release2 } from "os";
@@ -22,7 +22,7 @@ import {
22
22
  renderFrameIdForRenderId,
23
23
  resolveAuthoredTimingWindow,
24
24
  toFps
25
- } from "./chunk-TEXPOC5V.js";
25
+ } from "./chunk-VMDEGITC.js";
26
26
  import {
27
27
  AUDIO_GROUP_RENDER_ID_ATTR,
28
28
  COLOR_GRADING_SOURCE_HIDDEN_ATTR,
@@ -51,7 +51,7 @@ import {
51
51
  shiftRateLane,
52
52
  sourceTimeAt,
53
53
  timeAtSourceTime
54
- } from "./chunk-FOKUJKBN.js";
54
+ } from "./chunk-PMLZPNIB.js";
55
55
  import {
56
56
  chromeMajorCeiling,
57
57
  exceedsChromeCeiling
@@ -59,7 +59,7 @@ import {
59
59
  import {
60
60
  isWithinProjectRoot,
61
61
  resolveProjectRelativeSrc
62
- } from "./chunk-UVUAU3CH.js";
62
+ } from "./chunk-QM2NUN2B.js";
63
63
  import {
64
64
  FFMPEG_PATH_ENV,
65
65
  FFPROBE_PATH_ENV,
@@ -9460,6 +9460,14 @@ FFmpeg stopped after ${streamingTimeout} ms without consuming a frame.` : "";
9460
9460
  return encoder;
9461
9461
  }
9462
9462
 
9463
+ // ../engine/src/services/mediaHidden.ts
9464
+ function isSelfOrAncestorHidden(el) {
9465
+ for (let current = el; current; current = current.parentElement) {
9466
+ if (current.hasAttribute("data-hidden")) return true;
9467
+ }
9468
+ return false;
9469
+ }
9470
+
9463
9471
  // ../engine/src/services/videoFrameExtractor.ts
9464
9472
  import { copyFileSync as copyFileSync2, existsSync as existsSync8, linkSync as linkSync2, mkdirSync as mkdirSync6, rmSync as rmSync3 } from "fs";
9465
9473
  import { join as join9 } from "path";
@@ -11168,7 +11176,8 @@ function parseVideoElements(html) {
11168
11176
  mediaStart: readMediaStart(el),
11169
11177
  playbackRate: readElementRateSpec(el),
11170
11178
  loop: el.hasAttribute("loop"),
11171
- hasAudio: hasAudioAttr === "true"
11179
+ hasAudio: hasAudioAttr === "true",
11180
+ ...isSelfOrAncestorHidden(el) ? { hidden: true } : {}
11172
11181
  });
11173
11182
  }
11174
11183
  return videos;
@@ -13802,12 +13811,7 @@ function parseAudioElements(html) {
13802
13811
  const parseEnd = (raw) => {
13803
13812
  return parseStrictFiniteTimingNumber(raw) ?? 0;
13804
13813
  };
13805
- const isHidden = (el) => {
13806
- for (let current = el; current; current = current.parentElement) {
13807
- if (current.hasAttribute("data-hidden")) return true;
13808
- }
13809
- return false;
13810
- };
13814
+ const isHidden = isSelfOrAncestorHidden;
13811
13815
  const groupsById = new Map(
13812
13816
  resolveAudioGroups(document2).map((group) => [group.id, group])
13813
13817
  );
@@ -19,10 +19,10 @@ import {
19
19
  import {
20
20
  formatVariableValidationIssue,
21
21
  validateVariables
22
- } from "./chunk-TEXPOC5V.js";
22
+ } from "./chunk-VMDEGITC.js";
23
23
  import {
24
24
  extractCompositionMetadata
25
- } from "./chunk-TLYU5625.js";
25
+ } from "./chunk-UUDQD62L.js";
26
26
 
27
27
  // src/utils/variables.ts
28
28
  import { readFileSync } from "fs";
@@ -6,10 +6,10 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  getMimeType
9
- } from "./chunk-7QGIB2E6.js";
9
+ } from "./chunk-4DJXCVQJ.js";
10
10
  import {
11
11
  injectTagsAtHeadStart
12
- } from "./chunk-FOKUJKBN.js";
12
+ } from "./chunk-PMLZPNIB.js";
13
13
 
14
14
  // src/utils/compositionServer.ts
15
15
  import { createHash } from "crypto";
@@ -8,13 +8,13 @@ import {
8
8
  installPageFunctionGuard,
9
9
  resolveCliChromeGpuMode,
10
10
  seekCompositionTimeline
11
- } from "./chunk-XZSH5GS7.js";
11
+ } from "./chunk-QH6UFY2O.js";
12
12
  import {
13
13
  resolveCompositionViewportFromHtml
14
14
  } from "./chunk-5Z63TBTX.js";
15
15
  import {
16
16
  resolveProject
17
- } from "./chunk-5PXBK5OR.js";
17
+ } from "./chunk-I73Z6OOE.js";
18
18
  import {
19
19
  c
20
20
  } from "./chunk-ZTZA4UWZ.js";
@@ -28,7 +28,7 @@ import {
28
28
  import {
29
29
  printDeprecationNotice,
30
30
  withMeta
31
- } from "./chunk-WNY6NRJS.js";
31
+ } from "./chunk-YVEZT6WT.js";
32
32
  import {
33
33
  normalizeErrorMessage
34
34
  } from "./chunk-KNU5COPB.js";
@@ -217,7 +217,7 @@ function extractCompositionErrorsFromLint(lintResult) {
217
217
  async function localizeRemoteAssets(html) {
218
218
  let dir;
219
219
  try {
220
- const { loadProducer } = await import("./producer-LGG3TOUI.js");
220
+ const { loadProducer } = await import("./producer-ZTQIJO7E.js");
221
221
  const { localizeRemoteMediaSources, localizeRemoteImageSources, localizeRemoteFontFaces } = await loadProducer();
222
222
  dir = mkdtempSync(join(tmpdir(), "hf-validate-assets-"));
223
223
  const assetDir = dir;
@@ -238,10 +238,10 @@ async function localizeRemoteAssets(html) {
238
238
  }
239
239
  async function validateInBrowser(project, opts) {
240
240
  const projectDir = project.dir;
241
- const { bundleToSingleHtml } = await import("./compiler-QMEZK6CU.js");
241
+ const { bundleToSingleHtml } = await import("./compiler-3N7XQRH6.js");
242
242
  const { ensureBrowser } = await import("./manager-NEVLEZK3.js");
243
- const { serveStaticProjectHtml } = await import("./staticProjectServer-QDLEH37G.js");
244
- const { lintProject } = await import("./lintProject-4P4C6AN2.js");
243
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-5JAGMYT7.js");
244
+ const { lintProject } = await import("./lintProject-CMPAR7BS.js");
245
245
  const lintResult = await lintProject(projectDir);
246
246
  const compositionErrors = extractCompositionErrorsFromLint(lintResult);
247
247
  const html = await bundleToSingleHtml(projectDir);
@@ -262,13 +262,13 @@ async function validateInBrowser(project, opts) {
262
262
  try {
263
263
  const browser = await ensureBrowser();
264
264
  const puppeteer = await import("puppeteer-core");
265
- const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-QX5PPANW.js");
265
+ const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-SV7CNZXN.js");
266
266
  const requestedGpuMode = resolveCliChromeGpuMode();
267
267
  const {
268
268
  assertWebGpuAdapterAvailable,
269
269
  compositionRequiresWebGpu,
270
270
  resolveCaptureBrowserGpuMode
271
- } = await import("./gpuPolicy-BQFPO7UA.js");
271
+ } = await import("./gpuPolicy-BXXQF3VC.js");
272
272
  const resolvedGpuMode = await resolveCaptureBrowserGpuMode(
273
273
  requestedGpuMode,
274
274
  browser.executablePath