hyperframes 0.8.108 → 0.8.109

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 (136) hide show
  1. package/dist/{add-OH75E7FX.js → add-7NAK3TQ6.js} +9 -9
  2. package/dist/{animatedGifPrep-ZDAWSJYL.js → animatedGifPrep-NMGFOSIL.js} +4 -4
  3. package/dist/{asset-BVDO4DEW.js → asset-X7GUEAHC.js} +2 -2
  4. package/dist/{auth-K5GUKO5S.js → auth-EBWBTIGU.js} +2 -2
  5. package/dist/{autoUpdate-77ROWK5G.js → autoUpdate-DJBTMGAR.js} +2 -2
  6. package/dist/{backgroundChecks-3Q3D5WBJ.js → backgroundChecks-QUMUVLYU.js} +3 -3
  7. package/dist/backgroundChecksWorker.js +3 -3
  8. package/dist/{beats-HQZPR6KE.js → beats-XUYNHYGB.js} +8 -8
  9. package/dist/{benchmark-BQOWARGU.js → benchmark-L45UHXEE.js} +10 -10
  10. package/dist/{browser-45CK7HXI.js → browser-EM76PRMN.js} +7 -7
  11. package/dist/{bundleWithLocalizedFonts-3M2LKRHK.js → bundleWithLocalizedFonts-4Q3ETTHW.js} +2 -2
  12. package/dist/{capture-VGEUOP7N.js → capture-4OPH4PMK.js} +4 -4
  13. package/dist/{capture-6IVZXM7G.js → capture-OG6532RA.js} +2 -2
  14. package/dist/{catalog-VHD7B6FD.js → catalog-V42BPLQ4.js} +9 -9
  15. package/dist/{check-UPNZZJXV.js → check-3XQLHR2I.js} +22 -22
  16. package/dist/{checkBrowser-KWTHKOOP.js → checkBrowser-56BV4TW3.js} +21 -21
  17. package/dist/{chunk-KZJ6V7RT.js → chunk-2IN77NP6.js} +3 -3
  18. package/dist/{chunk-QBHT234I.js → chunk-2JXJ5SGK.js} +1 -1
  19. package/dist/{chunk-RSL3XFMO.js → chunk-32P7FTFC.js} +3 -3
  20. package/dist/{chunk-ZFL6FVQZ.js → chunk-3CPYTXZH.js} +5 -5
  21. package/dist/{chunk-NROJESOK.js → chunk-3T4RQK6C.js} +2 -2
  22. package/dist/{chunk-5R5UHSXN.js → chunk-44UOKZIC.js} +9 -9
  23. package/dist/{chunk-LZPAZZZP.js → chunk-4PY6UPHN.js} +1 -1
  24. package/dist/{chunk-THVNQFYG.js → chunk-5ER3PYYP.js} +1 -1
  25. package/dist/{chunk-ONY5CJXS.js → chunk-BAVM2XBR.js} +85 -1
  26. package/dist/{chunk-KVOWTRD5.js → chunk-C4TZBEHY.js} +2 -2
  27. package/dist/{chunk-J7XPPADY.js → chunk-CPO5INJ5.js} +2 -2
  28. package/dist/{chunk-SIVCJJHE.js → chunk-CQRF7VU3.js} +1 -1
  29. package/dist/{chunk-D7SCIX4D.js → chunk-E4AYSXMS.js} +1 -1
  30. package/dist/{chunk-LPXM5L6S.js → chunk-I5WWEBDG.js} +1 -1
  31. package/dist/{chunk-MGTECHI3.js → chunk-ITBEN3QD.js} +1 -1
  32. package/dist/{chunk-QRXICW5Q.js → chunk-JTTAS7N6.js} +1 -1
  33. package/dist/{chunk-FZGUZIK5.js → chunk-JWPSBANO.js} +2 -2
  34. package/dist/{chunk-GYYFNAVA.js → chunk-M224DAMG.js} +1 -1
  35. package/dist/{chunk-OVRFBUXU.js → chunk-MGFVNTIB.js} +1 -1
  36. package/dist/{chunk-VLHN34SB.js → chunk-MP25ID6H.js} +2 -2
  37. package/dist/{chunk-SQ42NHXP.js → chunk-MR2LOG32.js} +25 -27
  38. package/dist/{chunk-C6XQER6H.js → chunk-N32ITJ7L.js} +6 -6
  39. package/dist/{chunk-QB6OM2BP.js → chunk-OF3RKOPU.js} +1 -1
  40. package/dist/{chunk-LTYI4E42.js → chunk-OORTZAJ7.js} +4 -4
  41. package/dist/{chunk-5N4KKGSZ.js → chunk-RB7AHUOR.js} +1 -1
  42. package/dist/{chunk-RPMXMOFU.js → chunk-TBYUUOJG.js} +1 -1
  43. package/dist/{chunk-X763EUBO.js → chunk-U4TDAJZE.js} +1 -1
  44. package/dist/{chunk-VBXJSCHR.js → chunk-WMN4NBJQ.js} +2 -2
  45. package/dist/{chunk-AFGDOKRI.js → chunk-X2QJUTZL.js} +2 -2
  46. package/dist/{chunk-KZ5OSG4G.js → chunk-XKNYXDJN.js} +1 -1
  47. package/dist/{chunk-XIGK4LNU.js → chunk-YIXEH4TF.js} +1 -1
  48. package/dist/{chunk-NGVH2QYT.js → chunk-YRTKK45P.js} +7 -7
  49. package/dist/{chunk-US7SWKGC.js → chunk-ZKBSOLPY.js} +1 -1
  50. package/dist/{chunk-NJLFRKHX.js → chunk-ZU54D6MI.js} +134 -4
  51. package/dist/{clean-LCRWNIWO.js → clean-45QMNXLN.js} +12 -12
  52. package/dist/cli.js +48 -48
  53. package/dist/{cloud-ITRFE5UN.js → cloud-YRYTNHMQ.js} +4 -4
  54. package/dist/{compare-NPVMUILH.js → compare-GODD3JD2.js} +16 -16
  55. package/dist/{compiler-YYOV2BJ7.js → compiler-C32VXLE2.js} +2 -2
  56. package/dist/{component-HJFMHPNW.js → component-UMNTDLG3.js} +3 -3
  57. package/dist/{compositions-I34RN5WD.js → compositions-EIRLTOYW.js} +9 -9
  58. package/dist/{delete-WN3J74BD.js → delete-7P55EZOW.js} +2 -2
  59. package/dist/{dist-WCMFH74H.js → dist-FMHQMEMX.js} +1 -1
  60. package/dist/{doctor-MYC2S3J3.js → doctor-UYSIF4PX.js} +8 -8
  61. package/dist/{events-7JVV4746.js → events-A2MYVK2Z.js} +7 -7
  62. package/dist/{events-AEUV2JPA.js → events-LXYVOH3X.js} +6 -6
  63. package/dist/{feedback-X7DDSZPU.js → feedback-46DWSEAZ.js} +8 -8
  64. package/dist/{figma-ISI4PPTF.js → figma-C5DHRI6P.js} +3 -3
  65. package/dist/fontLocalizeCli.js +6 -6
  66. package/dist/{get-IYALAE4I.js → get-IRSUDICU.js} +2 -2
  67. package/dist/{gpuPolicy-KSWTVU5C.js → gpuPolicy-CA6KRFQQ.js} +4 -4
  68. package/dist/{grade-compare-YWPIWQLK.js → grade-compare-BLHXB3UR.js} +16 -16
  69. package/dist/{help-S2KJRMAJ.js → help-HMYF4Y3E.js} +1 -1
  70. package/dist/{history-CQDDCY4J.js → history-K5BD64QP.js} +12 -12
  71. package/dist/hyperframes-player.global.js +1 -1
  72. package/dist/{info-4KFNUWYN.js → info-QR2FYDJ7.js} +9 -9
  73. package/dist/{init-I7GMRHFW.js → init-L6BY7IV4.js} +16 -16
  74. package/dist/{inspect-DUCLCHSD.js → inspect-D3MC4VH3.js} +17 -17
  75. package/dist/{keyframes-F3VDEN66.js → keyframes-TPMFVG6O.js} +10 -10
  76. package/dist/{layout-RNCXJI6C.js → layout-AOYCSBIL.js} +17 -17
  77. package/dist/{lint-3NKKYCMH.js → lint-L4MN7QPF.js} +10 -10
  78. package/dist/{lintProject-F2OTN2IR.js → lintProject-X7L7EZWZ.js} +1 -1
  79. package/dist/{list-Q7SOE3NF.js → list-LKXCKBRX.js} +2 -2
  80. package/dist/{login-TGRGWS5E.js → login-4WEDFAIY.js} +4 -4
  81. package/dist/{media-treatment-5TUXWHWE.js → media-treatment-H6YAFA3H.js} +10 -10
  82. package/dist/{models-YJUTM6TH.js → models-RILNQV3Z.js} +5 -5
  83. package/dist/{motionShot-5QUMZ7J3.js → motionShot-5F4DCMWC.js} +7 -7
  84. package/dist/{normalize-audio-63BI5BPL.js → normalize-audio-DFK5FTE5.js} +8 -8
  85. package/dist/{pipeline-4NN5T7Q3.js → pipeline-5UY45ELH.js} +4 -4
  86. package/dist/{play-SRDESSZI.js → play-HFD4CPWF.js} +13 -13
  87. package/dist/{preflight-SVN4PSFO.js → preflight-3V5IHGWQ.js} +5 -5
  88. package/dist/{present-TDYR5LRW.js → present-JGDYENOT.js} +13 -13
  89. package/dist/{preview-Z5MFRZUM.js → preview-GLI7KBCA.js} +11 -11
  90. package/dist/{producer-RS7CB3XJ.js → producer-7JGAPEAF.js} +1 -1
  91. package/dist/{publish-2R22XX77.js → publish-257VZMWI.js} +2 -2
  92. package/dist/{remove-background-KT2SWYCC.js → remove-background-EV6XVADN.js} +5 -5
  93. package/dist/{render-7GDLEGXT.js → render-K6YASB4G.js} +9 -9
  94. package/dist/{render-Y2Y7N5WD.js → render-Y6LOQDCD.js} +12 -12
  95. package/dist/{renderCancellation-RQ3UVNVJ.js → renderCancellation-VIZELWDD.js} +4 -4
  96. package/dist/renderSetupWorker.js +1 -1
  97. package/dist/{sherpa-PR3I4KGM.js → sherpa-BAADWCHB.js} +5 -5
  98. package/dist/{skills-BEYZZWY6.js → skills-TEVVW6TR.js} +9 -9
  99. package/dist/{skillsUpdateCheck-3USXDPWV.js → skillsUpdateCheck-4Y3NJPB5.js} +3 -3
  100. package/dist/{snapshot-S77MQOV2.js → snapshot-63X5B7GR.js} +17 -17
  101. package/dist/{src-6R4DC2YI.js → src-GD7RGV5U.js} +3 -3
  102. package/dist/{src-IOJXK4VC.js → src-GRC63B6L.js} +5 -5
  103. package/dist/{staticProjectServer-RXAFGDK7.js → staticProjectServer-SFINO3DE.js} +7 -7
  104. package/dist/{status-CRS7H6FA.js → status-LXQL3L3H.js} +4 -4
  105. package/dist/studio/assets/{hyperframes-player-BakGew45.js → hyperframes-player-CJYtikAy.js} +1 -1
  106. package/dist/studio/assets/{index-ncVJ5IVu.css → index-BQZBDqMs.css} +1 -1
  107. package/dist/studio/assets/{index-CPe7d_wO.js → index-CMSgrT2F.js} +1 -1
  108. package/dist/studio/assets/{index-C842tcVa.js → index-CYP6dMd7.js} +208 -206
  109. package/dist/studio/assets/{index-C5dyUHwk.js → index-HTFVHUJ4.js} +1 -1
  110. package/dist/studio/{chunk-NCUBAVGK.js → chunk-5VSXRGIX.js} +4 -4
  111. package/dist/studio/chunk-5VSXRGIX.js.map +1 -0
  112. package/dist/studio/{chunk-AOWVEVEU.js → chunk-QUXZVHOJ.js} +8 -2
  113. package/dist/studio/chunk-QUXZVHOJ.js.map +1 -0
  114. package/dist/studio/index.d.ts +44 -4
  115. package/dist/studio/index.html +2 -2
  116. package/dist/studio/index.js +7021 -5669
  117. package/dist/studio/index.js.map +1 -1
  118. package/dist/studio/player.js +2 -2
  119. package/dist/studio/styles.css +1 -1
  120. package/dist/studio/ui.js +1 -1
  121. package/dist/{studio-api-3FH7OSSS.js → studio-api-WRSCXPWS.js} +5 -5
  122. package/dist/{studioServer-4E5RRPU7.js → studioServer-HPG3FVTJ.js} +24 -24
  123. package/dist/{system-YMANAUAM.js → system-EEWYEHYX.js} +4 -4
  124. package/dist/{telemetry-46XSB2VN.js → telemetry-UIZ5O7NL.js} +7 -7
  125. package/dist/{timeline-XKLKHGD2.js → timeline-L56HML42.js} +38 -19
  126. package/dist/{tokens-JCZKPUPT.js → tokens-DLPYLGLW.js} +2 -2
  127. package/dist/{transcribe-FIFJ3BBB.js → transcribe-FBPTYMVZ.js} +10 -10
  128. package/dist/{transcribe-FQ4YC2AS.js → transcribe-GCKJF5A6.js} +5 -5
  129. package/dist/{updateCheck-PDIH4GZW.js → updateCheck-GQBMZGU3.js} +2 -2
  130. package/dist/{upgrade-TTGO6JCF.js → upgrade-6LR7ZK3Q.js} +2 -2
  131. package/dist/{urlDownloader-32JRHOPN.js → urlDownloader-NYXPEBUN.js} +3 -3
  132. package/dist/{validate-G5F56ONL.js → validate-VY6RJRHE.js} +12 -12
  133. package/dist/{video-SGBEMEKA.js → video-KWQ5TSVD.js} +4 -4
  134. package/package.json +1 -1
  135. package/dist/studio/chunk-AOWVEVEU.js.map +0 -1
  136. package/dist/studio/chunk-NCUBAVGK.js.map +0 -1
@@ -5,17 +5,20 @@ var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
+ MEDIA_LINK_ATTR,
8
9
  dedupeClonedCompositionId,
9
10
  findTargetElement,
10
11
  isHTMLElement,
11
12
  parseSourceDocument,
12
13
  patchElementInHtml,
13
14
  probeElementInSource,
15
+ relinkSplitHalves,
16
+ relinkSplitHalvesInHtml,
14
17
  removeElementFromHtml,
15
18
  splitElementInHtml,
16
19
  unwrapElementsFromHtml,
17
20
  wrapElementsInHtml
18
- } from "./chunk-NJLFRKHX.js";
21
+ } from "./chunk-ZU54D6MI.js";
19
22
  import {
20
23
  atomicTempPath,
21
24
  createFileAtomically,
@@ -54,7 +57,7 @@ import {
54
57
  shouldPrewarmProxy,
55
58
  waitForProxy,
56
59
  walkDir
57
- } from "./chunk-OVRFBUXU.js";
60
+ } from "./chunk-MGFVNTIB.js";
58
61
  import {
59
62
  findTimelineScript,
60
63
  parseGsapScriptAcorn
@@ -82,7 +85,7 @@ import {
82
85
  import {
83
86
  addScenePartsManifest,
84
87
  ensureHfIds
85
- } from "./chunk-X763EUBO.js";
88
+ } from "./chunk-U4TDAJZE.js";
86
89
  import {
87
90
  findStartTags,
88
91
  injectScriptsIntoHtml,
@@ -105,7 +108,7 @@ import {
105
108
  import {
106
109
  isWithinProjectRoot,
107
110
  readProjectFile
108
- } from "./chunk-ONY5CJXS.js";
111
+ } from "./chunk-BAVM2XBR.js";
109
112
  import {
110
113
  FFPROBE_PATH_ENV,
111
114
  findFfBinary
@@ -210,7 +213,7 @@ function stampFileHfIds(filePath) {
210
213
  }
211
214
  }
212
215
 
213
- // ../studio-server/dist/chunk-KUEG5MYA.js
216
+ // ../studio-server/dist/chunk-EPL4YKGI.js
214
217
  import { randomUUID as randomUUID6 } from "crypto";
215
218
  import { mkdir as mkdir2, readdir as readdir3, rm as rm3, rmdir, writeFile } from "fs/promises";
216
219
  import {
@@ -271,15 +274,21 @@ function onFileOverwritten(listener) {
271
274
  overwriteListeners.add(listener);
272
275
  return () => overwriteListeners.delete(listener);
273
276
  }
274
- function recordFileWriteReceipt(filePath, { overwrote, ...receipt }) {
277
+ function recordFileWriteReceipt(filePath, {
278
+ overwrote,
279
+ path,
280
+ version,
281
+ writeToken
282
+ }) {
283
+ const receipt = { path, version, writeToken };
275
284
  const absPath = realFilePath(filePath);
276
285
  if (overwrote !== void 0)
277
286
  for (const listener of overwriteListeners) listener(absPath, receipt.version, overwrote);
278
287
  const now = Date.now();
279
- for (const [path, list] of receipts) {
288
+ for (const [path2, list] of receipts) {
280
289
  const live = list.filter((entry) => now - entry.recordedAt < RECEIPT_TTL_MS);
281
- if (live.length > 0) receipts.set(path, live);
282
- else receipts.delete(path);
290
+ if (live.length > 0) receipts.set(path2, live);
291
+ else receipts.delete(path2);
283
292
  }
284
293
  const from = overwrote === void 0 ? void 0 : fileContentVersion(overwrote);
285
294
  receipts.set(absPath, [
@@ -7117,6 +7126,7 @@ async function foldAtomicCutFile(c, file, absPath, before, writer) {
7117
7126
  let after = before;
7118
7127
  let splitCount = 0;
7119
7128
  const skippedSelectors = /* @__PURE__ */ new Set();
7129
+ const rightHalfIds = [];
7120
7130
  const respond = (data, status) => status ? c.json(data, status) : c.json(data);
7121
7131
  const orderedTargets = file.targets.map((cut, index) => ({ cut, index })).sort((left, right) => {
7122
7132
  const locatorKey = (entry) => !entry.target.id && !entry.target.hfId && entry.target.selector ? entry.target.selector : null;
@@ -7147,6 +7157,7 @@ async function foldAtomicCutFile(c, file, absPath, before, writer) {
7147
7157
  }
7148
7158
  after = split.html;
7149
7159
  splitCount++;
7160
+ rightHalfIds.push(split.newId);
7150
7161
  if (!cut.originalId) continue;
7151
7162
  const block = extractGsapScriptBlock(after);
7152
7163
  if (!block) continue;
@@ -7173,6 +7184,7 @@ async function foldAtomicCutFile(c, file, absPath, before, writer) {
7173
7184
  after = block.replaceScript(script);
7174
7185
  }
7175
7186
  }
7187
+ after = relinkSplitHalvesInHtml(after, rightHalfIds);
7176
7188
  return {
7177
7189
  path: file.path,
7178
7190
  absPath,
@@ -9598,7 +9610,6 @@ function registerWaveformRoutes(api, adapter) {
9598
9610
  });
9599
9611
  }
9600
9612
  var FREEZE_HOLD_SECONDS = 2;
9601
- var LINK_ATTR = "data-link";
9602
9613
  var EPSILON = 1e-3;
9603
9614
  var round3 = (value) => Math.round(value * 1e3) / 1e3;
9604
9615
  function numberAttr(el, name) {
@@ -9697,10 +9708,10 @@ function buildStill(document2, video, input) {
9697
9708
  return img;
9698
9709
  }
9699
9710
  function linkedPartners(document2, video) {
9700
- const link = video.getAttribute(LINK_ATTR);
9711
+ const link = video.getAttribute(MEDIA_LINK_ATTR);
9701
9712
  if (!link) return [];
9702
- return Array.from(document2.querySelectorAll(`[${LINK_ATTR}]`)).filter(
9703
- (el) => el !== video && el.getAttribute(LINK_ATTR) === link
9713
+ return Array.from(document2.querySelectorAll(`[${MEDIA_LINK_ATTR}]`)).filter(
9714
+ (el) => el !== video && el.getAttribute(MEDIA_LINK_ATTR) === link
9704
9715
  );
9705
9716
  }
9706
9717
  function splitAll(html, elements, time) {
@@ -9724,11 +9735,6 @@ function splitAll(html, elements, time) {
9724
9735
  }
9725
9736
  return { html: next, rightHalfIds };
9726
9737
  }
9727
- function relinkRightHalves(document2, link, ids) {
9728
- if (!link) return;
9729
- const rightLink = uniqueLink(document2, link);
9730
- for (const id of ids) document2.getElementById(id)?.setAttribute(LINK_ATTR, rightLink);
9731
- }
9732
9738
  function applyFreezeFrameToHtml(html, input) {
9733
9739
  const hold = input.holdSeconds ?? FREEZE_HOLD_SECONDS;
9734
9740
  const { document: before } = parseSourceDocument(html);
@@ -9743,7 +9749,7 @@ function applyFreezeFrameToHtml(html, input) {
9743
9749
  );
9744
9750
  if (!cut) return null;
9745
9751
  const { document: document2, wrappedFragment } = parseSourceDocument(cut.html);
9746
- relinkRightHalves(document2, video.getAttribute(LINK_ATTR), cut.rightHalfIds);
9752
+ relinkSplitHalves(document2, cut.rightHalfIds);
9747
9753
  shiftTracks(document2, tracks, input.playhead, hold);
9748
9754
  const leftHalf = findTargetElement(document2, input.target);
9749
9755
  if (!leftHalf?.parentElement) return null;
@@ -9761,14 +9767,6 @@ function applyFreezeFrameToHtml(html, input) {
9761
9767
  freezeId
9762
9768
  };
9763
9769
  }
9764
- function uniqueLink(document2, base) {
9765
- const taken = new Set(
9766
- Array.from(document2.querySelectorAll(`[${LINK_ATTR}]`)).map((el) => el.getAttribute(LINK_ATTR))
9767
- );
9768
- let candidate = `${base}-2`;
9769
- for (let n = 3; taken.has(candidate); n++) candidate = `${base}-${n}`;
9770
- return candidate;
9771
- }
9772
9770
  var EXTRACT_TIMEOUT_MS = 3e4;
9773
9771
  var ffmpegExtractor = (args) => {
9774
9772
  const ffmpeg = findFfBinary("ffmpeg", { configuredMustExist: true });
@@ -17,7 +17,7 @@ import {
17
17
  EncoderInterruptedError,
18
18
  encoderFailureError,
19
19
  prepareAnimatedGifInputs
20
- } from "./chunk-XIGK4LNU.js";
20
+ } from "./chunk-YIXEH4TF.js";
21
21
  import {
22
22
  createStudioPositionSeekReapplyScript
23
23
  } from "./chunk-KC5XXX3X.js";
@@ -145,7 +145,7 @@ import {
145
145
  validateEngineConfigSnapshot,
146
146
  verifyDiskDrawElementSamples,
147
147
  writeCapturedFrame
148
- } from "./chunk-QB6OM2BP.js";
148
+ } from "./chunk-OF3RKOPU.js";
149
149
  import {
150
150
  HF_VFX_ATTR,
151
151
  MEDIA_START_BASIS_ATTR,
@@ -186,7 +186,7 @@ import {
186
186
  inlineSubCompositions,
187
187
  prepareFlattenedInnerRoot,
188
188
  styleElementsFor
189
- } from "./chunk-X763EUBO.js";
189
+ } from "./chunk-U4TDAJZE.js";
190
190
  import {
191
191
  HF_COLOR_GRADING_ATTR,
192
192
  MAX_AUDIO_GAIN,
@@ -216,7 +216,7 @@ import {
216
216
  lintHyperframeHtml,
217
217
  readProjectFile,
218
218
  resolveProjectRelativeSrc
219
- } from "./chunk-ONY5CJXS.js";
219
+ } from "./chunk-BAVM2XBR.js";
220
220
  import {
221
221
  CSS_URL_RE,
222
222
  checkSubCompositionUsability,
@@ -14144,7 +14144,7 @@ function startServer(options = {}) {
14144
14144
  });
14145
14145
  async function shutdown(signal) {
14146
14146
  log.info(`Received ${signal}, shutting down`);
14147
- const { drainBrowserPool } = await import("./src-6R4DC2YI.js");
14147
+ const { drainBrowserPool } = await import("./src-GD7RGV5U.js");
14148
14148
  await drainBrowserPool().catch(() => {
14149
14149
  });
14150
14150
  const handle = await Promise.race([
@@ -15267,7 +15267,7 @@ async function buildLocalExecutionPlan(projectDir, config, executionPlanDir, opt
15267
15267
  if (probeResult.fileServer) closeFileServerSafely(probeResult.fileServer, "plan", log);
15268
15268
  if (probeResult.probeSession) {
15269
15269
  try {
15270
- const { closeCaptureSession: closeCaptureSession2 } = await import("./src-6R4DC2YI.js");
15270
+ const { closeCaptureSession: closeCaptureSession2 } = await import("./src-GD7RGV5U.js");
15271
15271
  await closeCaptureSession2(probeResult.probeSession);
15272
15272
  } catch (err) {
15273
15273
  log.warn("[plan] probe session close failed", {
@@ -60,7 +60,7 @@ import {
60
60
  import {
61
61
  isWithinProjectRoot,
62
62
  resolveProjectRelativeSrc
63
- } from "./chunk-ONY5CJXS.js";
63
+ } from "./chunk-BAVM2XBR.js";
64
64
  import {
65
65
  FFMPEG_PATH_ENV,
66
66
  FFPROBE_PATH_ENV,
@@ -7,16 +7,16 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  parseFeedbackRating,
9
9
  trackRenderFeedback
10
- } from "./chunk-VBXJSCHR.js";
10
+ } from "./chunk-WMN4NBJQ.js";
11
11
  import {
12
12
  shouldTrack
13
- } from "./chunk-J7XPPADY.js";
13
+ } from "./chunk-CPO5INJ5.js";
14
14
  import {
15
15
  c
16
16
  } from "./chunk-ZTZA4UWZ.js";
17
17
  import {
18
18
  detectAgentRuntime
19
- } from "./chunk-SIVCJJHE.js";
19
+ } from "./chunk-CQRF7VU3.js";
20
20
  import {
21
21
  readConfig,
22
22
  writeConfig
@@ -83,7 +83,7 @@ async function maybePromptRenderFeedback(opts) {
83
83
  async function getDoctorSummary() {
84
84
  try {
85
85
  const [{ getSystemMeta }, { findFFmpeg }] = await Promise.all([
86
- import("./system-YMANAUAM.js"),
86
+ import("./system-EEWYEHYX.js"),
87
87
  import("./ffmpeg-QIUFEFTY.js")
88
88
  ]);
89
89
  const sys = getSystemMeta();
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  VERSION
9
- } from "./chunk-NROJESOK.js";
9
+ } from "./chunk-3T4RQK6C.js";
10
10
 
11
11
  // src/registry/compatibility.ts
12
12
  import { compareVersions } from "compare-versions";
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ISN5GRYI.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-NROJESOK.js";
20
+ } from "./chunk-3T4RQK6C.js";
21
21
 
22
22
  // src/utils/updateCheck.ts
23
23
  import { existsSync, readFileSync } from "fs";
@@ -31,7 +31,7 @@ import {
31
31
  } from "./chunk-OFQWTKPW.js";
32
32
  import {
33
33
  lintHyperframeHtml
34
- } from "./chunk-ONY5CJXS.js";
34
+ } from "./chunk-BAVM2XBR.js";
35
35
  import {
36
36
  CSS_URL_RE,
37
37
  checkSubCompositionUsability,
@@ -8,10 +8,10 @@ import {
8
8
  flush,
9
9
  shouldTrack,
10
10
  trackEvent
11
- } from "./chunk-J7XPPADY.js";
11
+ } from "./chunk-CPO5INJ5.js";
12
12
  import {
13
13
  getPowerState
14
- } from "./chunk-SIVCJJHE.js";
14
+ } from "./chunk-CQRF7VU3.js";
15
15
  import {
16
16
  CliRuntimeError
17
17
  } from "./chunk-PBN6GBJE.js";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  RegistryCompatibilityError,
9
9
  gateRegistryItemsCompatibility
10
- } from "./chunk-5N4KKGSZ.js";
10
+ } from "./chunk-RB7AHUOR.js";
11
11
  import {
12
12
  DEFAULT_PROJECT_CONFIG,
13
13
  createProjectConfig,
@@ -29,7 +29,7 @@ import {
29
29
  } from "./chunk-AWUZ3AUD.js";
30
30
  import {
31
31
  trackRegistryItemAdded
32
- } from "./chunk-VBXJSCHR.js";
32
+ } from "./chunk-WMN4NBJQ.js";
33
33
  import {
34
34
  c
35
35
  } from "./chunk-ZTZA4UWZ.js";
@@ -6,7 +6,7 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  updateNoticesSuppressed
9
- } from "./chunk-RPMXMOFU.js";
9
+ } from "./chunk-TBYUUOJG.js";
10
10
  import {
11
11
  hostAnswers
12
12
  } from "./chunk-K4WIOZFP.js";
@@ -8,7 +8,7 @@ import {
8
8
  DEFAULT_VP9_CPU_USED,
9
9
  isHttpUrl,
10
10
  runFfmpeg
11
- } from "./chunk-QB6OM2BP.js";
11
+ } from "./chunk-OF3RKOPU.js";
12
12
  import {
13
13
  parseAnimatedGifMetadata
14
14
  } from "./chunk-B25H4M4V.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-FZGUZIK5.js";
9
+ } from "./chunk-JWPSBANO.js";
10
10
  import {
11
11
  AUDIT_SEEK_OPTIONS,
12
12
  installPageFunctionGuard,
13
13
  seekCompositionTimeline,
14
14
  waitForCompositionFonts
15
- } from "./chunk-RSL3XFMO.js";
15
+ } from "./chunk-32P7FTFC.js";
16
16
  import {
17
17
  resolveDiagnosticNavigationTimeoutMs
18
18
  } from "./chunk-TIZQC44K.js";
19
19
  import {
20
20
  resolveProject
21
- } from "./chunk-US7SWKGC.js";
21
+ } from "./chunk-ZKBSOLPY.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-RPMXMOFU.js";
35
+ } from "./chunk-TBYUUOJG.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-YYOV2BJ7.js");
668
+ const { bundleToSingleHtml } = await import("./compiler-C32VXLE2.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-6R4DC2YI.js");
690
+ const { buildChromeArgs } = await import("./src-GD7RGV5U.js");
691
691
  const {
692
692
  assertWebGpuAdapterAvailable,
693
693
  compositionRequiresWebGpu,
694
694
  resolveCaptureBrowserGpuMode,
695
695
  resolveLocalBrowserGpuMode
696
- } = await import("./gpuPolicy-KSWTVU5C.js");
696
+ } = await import("./gpuPolicy-CA6KRFQQ.js");
697
697
  const html = await bundleProjectHtml(projectDir);
698
698
  const server = await serveStaticProjectHtml(
699
699
  projectDir,
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-IHFUKJOR.js";
10
10
  import {
11
11
  trackCommandFailure
12
- } from "./chunk-VBXJSCHR.js";
12
+ } from "./chunk-WMN4NBJQ.js";
13
13
  import {
14
14
  failCommand
15
15
  } from "./chunk-PBN6GBJE.js";
@@ -17,10 +17,10 @@ import {
17
17
  ensureHfIds,
18
18
  mintHfId,
19
19
  walkCompositionDescendants
20
- } from "./chunk-X763EUBO.js";
20
+ } from "./chunk-U4TDAJZE.js";
21
21
  import {
22
22
  require_dist
23
- } from "./chunk-ONY5CJXS.js";
23
+ } from "./chunk-BAVM2XBR.js";
24
24
  import {
25
25
  readClipTiming,
26
26
  readMediaOffsetSeconds,
@@ -34,9 +34,121 @@ import {
34
34
  __toESM
35
35
  } from "./chunk-M2WBOQ2Q.js";
36
36
 
37
- // ../studio-server/dist/chunk-W6TFBTP2.js
37
+ // ../studio-server/dist/chunk-Z4DIWF3Z.js
38
38
  var import_postcss_selector_parser = __toESM(require_dist(), 1);
39
39
  import postcss from "postcss";
40
+
41
+ // ../core/dist/mediaLink.js
42
+ var MEDIA_LINK_ATTR = "data-link";
43
+ function readNumber(el, names, fallback) {
44
+ for (const name of names) {
45
+ const raw = el.getAttribute(name);
46
+ if (raw === null || raw.trim() === "")
47
+ continue;
48
+ const value = Number(raw);
49
+ if (Number.isFinite(value))
50
+ return value;
51
+ }
52
+ return fallback;
53
+ }
54
+ function readLinkTiming(el) {
55
+ return {
56
+ start: readNumber(el, ["data-start"], 0),
57
+ duration: readNumber(el, ["data-duration"], 0),
58
+ mediaStart: readMediaOffsetSeconds((name) => el.getAttribute(name)),
59
+ playbackRate: readNumber(el, ["data-playback-rate"], 1)
60
+ };
61
+ }
62
+ var LINK_SCOPE_SELECTOR = "[data-composition-id], [data-composition-file]";
63
+ function mintLinkId(taken) {
64
+ const used = new Set(taken);
65
+ let n = 1;
66
+ while (used.has(`lk-${n}`))
67
+ n += 1;
68
+ return `lk-${n}`;
69
+ }
70
+ function takenLinkIds(doc) {
71
+ return Array.from(doc.querySelectorAll(`[id], [${MEDIA_LINK_ATTR}], [${SYNC_ORIGIN_ATTR}]`)).flatMap((el) => [
72
+ el.id,
73
+ el.getAttribute(MEDIA_LINK_ATTR) ?? "",
74
+ el.getAttribute(SYNC_ORIGIN_ATTR) ?? ""
75
+ ]);
76
+ }
77
+ function renameShared(doc, ids, attr, taken) {
78
+ const renamed = /* @__PURE__ */ new Map();
79
+ for (const id of ids) {
80
+ const el = doc.getElementById(id);
81
+ const old = el?.getAttribute(attr);
82
+ if (!el || !old)
83
+ continue;
84
+ let fresh = renamed.get(old);
85
+ if (!fresh) {
86
+ fresh = mintLinkId(taken);
87
+ taken.add(fresh);
88
+ renamed.set(old, fresh);
89
+ }
90
+ el.setAttribute(attr, fresh);
91
+ }
92
+ }
93
+ function relinkSplitHalves(doc, rightHalfIds) {
94
+ const taken = new Set(takenLinkIds(doc));
95
+ renameShared(doc, rightHalfIds, MEDIA_LINK_ATTR, taken);
96
+ renameShared(doc, idsWithBothSidesCut(doc, rightHalfIds), SYNC_ORIGIN_ATTR, taken);
97
+ }
98
+ function idsWithBothSidesCut(doc, rightHalfIds) {
99
+ const tagsByOrigin = /* @__PURE__ */ new Map();
100
+ const originOf = (id) => doc.getElementById(id)?.getAttribute(SYNC_ORIGIN_ATTR) ?? null;
101
+ for (const id of rightHalfIds) {
102
+ const origin = originOf(id);
103
+ const tag = doc.getElementById(id)?.tagName.toLowerCase();
104
+ if (!origin || !tag)
105
+ continue;
106
+ tagsByOrigin.set(origin, (tagsByOrigin.get(origin) ?? /* @__PURE__ */ new Set()).add(tag));
107
+ }
108
+ return rightHalfIds.filter((id) => {
109
+ const tags = tagsByOrigin.get(originOf(id) ?? "");
110
+ return tags?.has("video") === true && tags.has("audio");
111
+ });
112
+ }
113
+ var SYNC_ORIGIN_ATTR = "data-sync-origin";
114
+ var rateOf = (timing) => timing.playbackRate > 0 ? timing.playbackRate : 1;
115
+ function sourceZeroTime(timing) {
116
+ return timing.start - timing.mediaStart / rateOf(timing);
117
+ }
118
+ function syncOffsetFrames(clip, partner, fps) {
119
+ if (Math.abs(rateOf(clip) - rateOf(partner)) > 1e-6)
120
+ return null;
121
+ const frames = Math.round((sourceZeroTime(clip) - sourceZeroTime(partner)) * fps);
122
+ return Object.is(frames, -0) ? 0 : frames;
123
+ }
124
+ function sharedSeconds(a, b) {
125
+ return Math.min(a.start + a.duration, b.start + b.duration) - Math.max(a.start, b.start);
126
+ }
127
+ function sameOriginInScope(el, tag, origin) {
128
+ const scopeOf = (node) => node.closest(LINK_SCOPE_SELECTOR) ?? el.ownerDocument;
129
+ const scope = scopeOf(el);
130
+ return Array.from(scope.querySelectorAll(tag)).filter((candidate) => candidate.getAttribute(SYNC_ORIGIN_ATTR) === origin && scopeOf(candidate) === scope);
131
+ }
132
+ function findSyncPartner(el) {
133
+ const origin = el.getAttribute(SYNC_ORIGIN_ATTR);
134
+ const tag = el.tagName.toLowerCase();
135
+ if (!origin || tag !== "video" && tag !== "audio")
136
+ return null;
137
+ const partnerTag = tag === "video" ? "audio" : "video";
138
+ const own = readLinkTiming(el);
139
+ let best = null;
140
+ for (const candidate of sameOriginInScope(el, partnerTag, origin)) {
141
+ const timing = readLinkTiming(candidate);
142
+ const shared = sharedSeconds(own, timing);
143
+ const distance = Math.abs(timing.start - own.start);
144
+ if (!best || shared > best.shared || shared === best.shared && distance < best.distance) {
145
+ best = { el: candidate, shared, distance };
146
+ }
147
+ }
148
+ return best?.el ?? null;
149
+ }
150
+
151
+ // ../studio-server/dist/chunk-Z4DIWF3Z.js
40
152
  function parseStyleDecls(style) {
41
153
  const props = /* @__PURE__ */ new Map();
42
154
  const order = [];
@@ -497,8 +609,25 @@ function unwrapElementsFromHtml(source, groupTarget, childTracks = []) {
497
609
  groupCenter
498
610
  };
499
611
  }
612
+ function relinkSplitHalvesInHtml(source, rightHalfIds) {
613
+ const { document, wrappedFragment } = parseSourceDocument(source);
614
+ const carriesPairing = (id) => {
615
+ const el = document.getElementById(id);
616
+ return Boolean(el?.hasAttribute("data-link") || el?.hasAttribute("data-sync-origin"));
617
+ };
618
+ if (!rightHalfIds.some(carriesPairing)) {
619
+ return source;
620
+ }
621
+ relinkSplitHalves(document, rightHalfIds);
622
+ return wrappedFragment ? document.body.innerHTML || "" : document.toString();
623
+ }
500
624
 
501
625
  export {
626
+ MEDIA_LINK_ATTR,
627
+ readLinkTiming,
628
+ relinkSplitHalves,
629
+ syncOffsetFrames,
630
+ findSyncPartner,
502
631
  parseSourceDocument,
503
632
  findTargetElement,
504
633
  removeElementFromHtml,
@@ -508,5 +637,6 @@ export {
508
637
  probeElementInSource,
509
638
  splitElementInHtml,
510
639
  wrapElementsInHtml,
511
- unwrapElementsFromHtml
640
+ unwrapElementsFromHtml,
641
+ relinkSplitHalvesInHtml
512
642
  };
@@ -6,34 +6,34 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  redactHome
9
- } from "./chunk-ZFL6FVQZ.js";
9
+ } from "./chunk-3CPYTXZH.js";
10
10
  import "./chunk-Z27A7NUB.js";
11
11
  import "./chunk-5ETJX6WM.js";
12
12
  import {
13
13
  loadProducer
14
- } from "./chunk-THVNQFYG.js";
14
+ } from "./chunk-5ER3PYYP.js";
15
15
  import {
16
16
  DEFAULT_HISTORY_ROOT,
17
17
  listProjectHistories,
18
18
  pruneGoneProjectHistories
19
- } from "./chunk-SQ42NHXP.js";
20
- import "./chunk-NJLFRKHX.js";
19
+ } from "./chunk-MR2LOG32.js";
20
+ import "./chunk-ZU54D6MI.js";
21
21
  import "./chunk-WEATBQTR.js";
22
22
  import "./chunk-5ON5GH3X.js";
23
23
  import {
24
24
  CACHE_DIR_NAME,
25
25
  cleanupProxyCache
26
- } from "./chunk-OVRFBUXU.js";
26
+ } from "./chunk-MGFVNTIB.js";
27
27
  import {
28
28
  formatBytes
29
29
  } from "./chunk-IHFUKJOR.js";
30
- import "./chunk-D7SCIX4D.js";
30
+ import "./chunk-E4AYSXMS.js";
31
31
  import "./chunk-TVCRUG2S.js";
32
32
  import "./chunk-RDMAU7AJ.js";
33
33
  import {
34
34
  c
35
35
  } from "./chunk-ZTZA4UWZ.js";
36
- import "./chunk-SIVCJJHE.js";
36
+ import "./chunk-CQRF7VU3.js";
37
37
  import "./chunk-AMKC3AXA.js";
38
38
  import {
39
39
  defineCommand
@@ -48,18 +48,18 @@ import {
48
48
  directorySizeBytes,
49
49
  gcExtractionCache,
50
50
  resolveExtractCacheDir
51
- } from "./chunk-QB6OM2BP.js";
51
+ } from "./chunk-OF3RKOPU.js";
52
52
  import "./chunk-B25H4M4V.js";
53
53
  import "./chunk-UUDQD62L.js";
54
54
  import "./chunk-DPVXBVLL.js";
55
- import "./chunk-X763EUBO.js";
55
+ import "./chunk-U4TDAJZE.js";
56
56
  import "./chunk-YLVI7VL5.js";
57
57
  import "./chunk-VC76R6W2.js";
58
58
  import "./chunk-OFQWTKPW.js";
59
59
  import "./chunk-N34BYX3E.js";
60
60
  import "./chunk-LCSMOLGX.js";
61
61
  import "./chunk-TWWSYAKJ.js";
62
- import "./chunk-ONY5CJXS.js";
62
+ import "./chunk-BAVM2XBR.js";
63
63
  import "./chunk-HBBJFK6I.js";
64
64
  import "./chunk-PJ3HDUCY.js";
65
65
  import "./chunk-TQFG7HTI.js";
@@ -67,12 +67,12 @@ import "./chunk-GK4AIFIH.js";
67
67
  import "./chunk-2PSPARWP.js";
68
68
  import {
69
69
  withMeta
70
- } from "./chunk-RPMXMOFU.js";
70
+ } from "./chunk-TBYUUOJG.js";
71
71
  import "./chunk-K4WIOZFP.js";
72
72
  import "./chunk-XUXGIA7H.js";
73
73
  import "./chunk-WERLJGIC.js";
74
74
  import "./chunk-ISN5GRYI.js";
75
- import "./chunk-NROJESOK.js";
75
+ import "./chunk-3T4RQK6C.js";
76
76
  import "./chunk-KNU5COPB.js";
77
77
  import "./chunk-XT5P4QMO.js";
78
78
  import "./chunk-6BEFEWFB.js";