hyperframes 0.8.193 → 0.8.195

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 (191) hide show
  1. package/dist/{add-JC6DKZKC.js → add-NL6XABRV.js} +12 -12
  2. package/dist/{animatedGifPrep-S6KXJGEL.js → animatedGifPrep-JD4BBM2L.js} +8 -7
  3. package/dist/api.js +18 -17
  4. package/dist/{asset-XITFIFE6.js → asset-LRRHLG4L.js} +2 -2
  5. package/dist/{assetCataloger-K5FNKG35.js → assetCataloger-D7KGO346.js} +8 -7
  6. package/dist/{audio-364UHTY4.js → audio-34CZM4HF.js} +14 -13
  7. package/dist/{auth-5JEESRE6.js → auth-FL5ZMOXB.js} +1 -1
  8. package/dist/{autoUpdate-RVVYEHAA.js → autoUpdate-FZTJFLIH.js} +2 -2
  9. package/dist/{backgroundChecks-DCBIYWIQ.js → backgroundChecks-6ZKDCQET.js} +3 -3
  10. package/dist/backgroundChecksWorker.js +3 -3
  11. package/dist/{batchRender-ZZ4QMBAA.js → batchRender-KDZ4F4QT.js} +4 -4
  12. package/dist/{beats-YEL65M6G.js → beats-7PK677VR.js} +9 -9
  13. package/dist/{benchmark-RBTRPA76.js → benchmark-LO36QH5D.js} +9 -9
  14. package/dist/{browser-BVAYXT4R.js → browser-3F7NDHU2.js} +5 -5
  15. package/dist/{bundleWithLocalizedFonts-JLB2OYMT.js → bundleWithLocalizedFonts-JL5J52L6.js} +2 -2
  16. package/dist/{capture-GBXTMYLZ.js → capture-DOP3ONNZ.js} +13 -12
  17. package/dist/{capture-NIFX6IRS.js → capture-JOSZZYUW.js} +2 -2
  18. package/dist/{captureCompositionFrame-ATNNKUL5.js → captureCompositionFrame-SWZ4GEJP.js} +13 -12
  19. package/dist/{catalog-AGIF5SM5.js → catalog-EZLHZMLM.js} +12 -12
  20. package/dist/{catch-up-SZ3ULDTI.js → catch-up-6B7VY43I.js} +4 -4
  21. package/dist/{check-YLQS3TF4.js → check-QGELCBBF.js} +38 -37
  22. package/dist/{checkBrowser-QH4FMCBO.js → checkBrowser-A5C2AB4L.js} +33 -32
  23. package/dist/{chunk-L5YLA54L.js → chunk-2G6JZJAV.js} +2 -2
  24. package/dist/{chunk-M3KZBDPB.js → chunk-2HSRLKZR.js} +3 -3
  25. package/dist/{chunk-FBVUAH7N.js → chunk-2OYYNKJ4.js} +1 -1
  26. package/dist/{chunk-2VXY3PEF.js → chunk-2TU4OKIR.js} +280 -114
  27. package/dist/{chunk-4PPWAQYV.js → chunk-3OAFRLD3.js} +7 -7
  28. package/dist/{chunk-ZT45TCY3.js → chunk-3PYIQLPL.js} +1 -1
  29. package/dist/{chunk-DYNHVCBF.js → chunk-4R2NWLQL.js} +2 -2
  30. package/dist/{chunk-SOY2FPOR.js → chunk-636WBDXB.js} +5 -5
  31. package/dist/{chunk-LFUVTS6V.js → chunk-66Q27H72.js} +2 -2
  32. package/dist/{chunk-MFUNDJEV.js → chunk-6ORTRIDW.js} +3 -3
  33. package/dist/{chunk-D625D4TV.js → chunk-7DFIVUOW.js} +6 -6
  34. package/dist/{chunk-ZH7J2ZUL.js → chunk-7G2LQM3J.js} +14 -14
  35. package/dist/{chunk-6LWUPIKD.js → chunk-7PXVXRVX.js} +10 -10
  36. package/dist/{chunk-XQPA4W3M.js → chunk-7Y5RVQQ7.js} +4 -4
  37. package/dist/{chunk-2MCXIY4B.js → chunk-B7RJV74O.js} +28 -11
  38. package/dist/{chunk-BJAS2JLW.js → chunk-B7Y2DGU6.js} +7 -3
  39. package/dist/{chunk-YS4JUGNI.js → chunk-BBXZPDEA.js} +2 -2
  40. package/dist/{chunk-RWGASWT7.js → chunk-BL4U6U52.js} +1 -0
  41. package/dist/{chunk-VW63MHQU.js → chunk-CCZMCX3F.js} +1 -1
  42. package/dist/{chunk-BY6OQ6XP.js → chunk-CZNSLFYD.js} +3 -1
  43. package/dist/{chunk-X5CECNCK.js → chunk-D6XDOYMB.js} +8 -3
  44. package/dist/{chunk-F5LLORBP.js → chunk-E527A6RS.js} +2 -2
  45. package/dist/{chunk-7HTH5PFK.js → chunk-E74JMKSK.js} +58 -8
  46. package/dist/{chunk-TZEKVLPV.js → chunk-ELQ2QQC5.js} +1 -1
  47. package/dist/{chunk-4LXZJIVY.js → chunk-ES7KSCSO.js} +10 -10
  48. package/dist/{chunk-KU3UFQN7.js → chunk-F2ASNL2K.js} +1 -1
  49. package/dist/{chunk-VLLFORE2.js → chunk-F4T7XYMF.js} +1 -1
  50. package/dist/{chunk-E3P3LJG6.js → chunk-FLREUEHW.js} +28 -11
  51. package/dist/{chunk-TY3LDJA3.js → chunk-FWDDLW2H.js} +2 -2
  52. package/dist/{chunk-7YSFE4SZ.js → chunk-GJG4CTXD.js} +2 -2
  53. package/dist/{chunk-2NERNYCJ.js → chunk-GKMRLES4.js} +3 -3
  54. package/dist/{chunk-4TKJWWPL.js → chunk-GOOE33GV.js} +1 -1
  55. package/dist/{chunk-DIKAPMMF.js → chunk-GQVTTWZF.js} +144 -39
  56. package/dist/{chunk-L4JB7LI4.js → chunk-HJINEUHY.js} +84 -61
  57. package/dist/{chunk-7QNIXBQD.js → chunk-HT33OHQL.js} +3 -2
  58. package/dist/{chunk-AR3DQYRR.js → chunk-HTLCE7M2.js} +18 -18
  59. package/dist/{chunk-ZTKFRXJB.js → chunk-IA7HZ4CM.js} +4 -4
  60. package/dist/{chunk-WFS6S65A.js → chunk-IZR7U27Z.js} +12 -12
  61. package/dist/chunk-K4MJX7SR.js +17 -0
  62. package/dist/{chunk-ZZPBXRYQ.js → chunk-KJ6ZQL34.js} +1 -1
  63. package/dist/{chunk-VPC4XIVI.js → chunk-KVLGJJTE.js} +5 -5
  64. package/dist/{chunk-CGTZOY53.js → chunk-L2EBYFU7.js} +1 -1
  65. package/dist/{chunk-UNATIAOT.js → chunk-L4BFXWHC.js} +144 -67
  66. package/dist/{chunk-IW5G323T.js → chunk-LTGTN2TH.js} +8 -9
  67. package/dist/{chunk-EFXMETRK.js → chunk-NKNRVPNV.js} +2 -2
  68. package/dist/{chunk-2SFDWMSW.js → chunk-NOHH25WS.js} +2 -2
  69. package/dist/{chunk-7YKJF5JV.js → chunk-OB4GJZTY.js} +1 -1
  70. package/dist/{chunk-C4Y3ZREE.js → chunk-OJNNKHAZ.js} +75 -22
  71. package/dist/{chunk-OFYW4J7Y.js → chunk-ORZMO6NY.js} +3 -3
  72. package/dist/{chunk-BP4EMEGH.js → chunk-P5X5URNQ.js} +2 -2
  73. package/dist/{chunk-6XUJVEY2.js → chunk-RAACYYWX.js} +1 -1
  74. package/dist/{chunk-QFPBRZJD.js → chunk-ROEW726S.js} +1 -1
  75. package/dist/{chunk-WIVOXGEP.js → chunk-RZUEXJRC.js} +2 -2
  76. package/dist/{chunk-V7ZA2BNW.js → chunk-SC6NILKD.js} +1 -1
  77. package/dist/{chunk-2LSCYS2H.js → chunk-SMROKE63.js} +2 -2
  78. package/dist/{chunk-REUL2KH2.js → chunk-ST35C4K6.js} +1 -1
  79. package/dist/{chunk-OFV3WSOE.js → chunk-TE6VGYHQ.js} +1 -1
  80. package/dist/{chunk-3W4B6G7Y.js → chunk-VNWX5GBF.js} +19 -15
  81. package/dist/{chunk-QKX7ITER.js → chunk-W4SSWOOD.js} +2 -2
  82. package/dist/{chunk-6DLCOQR4.js → chunk-W7GMPEY3.js} +142 -44
  83. package/dist/{chunk-UIC7B5KW.js → chunk-WUL5LPI2.js} +12 -2
  84. package/dist/{chunk-5J6TWLFG.js → chunk-XC7SJ2UR.js} +3 -3
  85. package/dist/{chunk-E77ALFLW.js → chunk-XOUWCZHD.js} +1 -1
  86. package/dist/{chunk-GR5DQKDR.js → chunk-YFTO5YD7.js} +5 -5
  87. package/dist/{chunk-UB7BIDBS.js → chunk-YSXCPSJ4.js} +3 -3
  88. package/dist/{chunk-GKHMSSGY.js → chunk-YUFECVHG.js} +1 -1
  89. package/dist/{chunk-LMNZLZMJ.js → chunk-ZAVUASNT.js} +1 -1
  90. package/dist/{chunk-RTLPWOO6.js → chunk-ZL6ZCLY6.js} +1 -1
  91. package/dist/{chunk-DSQ72G5I.js → chunk-ZOJHEN3C.js} +1 -1
  92. package/dist/chunk-ZQRD62QZ.js +3901 -0
  93. package/dist/{clean-5HGESK5A.js → clean-PI4JLT6O.js} +21 -20
  94. package/dist/cli.js +53 -53
  95. package/dist/{cloud-746PHS32.js → cloud-SQRY723M.js} +4 -4
  96. package/dist/{cloudrun-DO7WFLSM.js → cloudrun-VMPROR43.js} +6 -6
  97. package/dist/commands/layout-audit.browser.js +1 -1
  98. package/dist/{compare-66YPRNG2.js → compare-EHX4APTP.js} +31 -30
  99. package/dist/{compiler-R4UYDWXO.js → compiler-FZCJGGBF.js} +5 -5
  100. package/dist/{component-EQ3H6RFP.js → component-I75ZKJYH.js} +3 -3
  101. package/dist/{compositions-ZZ7P5HT2.js → compositions-YNYYUEQD.js} +12 -11
  102. package/dist/{contactSheet-SZBJDOMT.js → contactSheet-5APX35L3.js} +1 -1
  103. package/dist/{delete-Z5MSLJSR.js → delete-7BVTBKOC.js} +2 -2
  104. package/dist/{deploy-RGSAC2K5.js → deploy-TUEEJP3W.js} +1 -1
  105. package/dist/{deterministicFonts-RO2TCMLZ.js → deterministicFonts-RADD3BSX.js} +2 -2
  106. package/dist/{dist-QQ26RUDV.js → dist-VRGIE57H.js} +1 -1
  107. package/dist/{dist-RKK4YLAD.js → dist-VVROHSP4.js} +3 -3
  108. package/dist/{doctor-W4ZZDRTU.js → doctor-53DSQFW4.js} +14 -13
  109. package/dist/{events-BSSL4A4W.js → events-AD3U6E7I.js} +2 -2
  110. package/dist/{events-UACT7PX3.js → events-M6FIUDNQ.js} +3 -3
  111. package/dist/{feedback-47ILDLQG.js → feedback-7SQ7KKAR.js} +8 -8
  112. package/dist/{ffmpeg-IEHSUNUT.js → ffmpeg-3HSSPXS4.js} +9 -8
  113. package/dist/{figma-PLFIIYRU.js → figma-B5XII2BO.js} +3 -3
  114. package/dist/fontLocalizeCli.js +11 -10
  115. package/dist/{get-PDWGJYNL.js → get-RZKNBIRD.js} +2 -2
  116. package/dist/{gpuPolicy-6UBXO6ME.js → gpuPolicy-77LOK3K6.js} +8 -7
  117. package/dist/{grade-compare-5VWLQGM7.js → grade-compare-K3YB3FQA.js} +37 -35
  118. package/dist/{gsapParser-UP3PNPC2.js → gsapParser-IEUSLYDJ.js} +11 -11
  119. package/dist/{gsapParserAcorn-OOTY2MVN.js → gsapParserAcorn-LZJKCFQI.js} +1 -1
  120. package/dist/{help-DS3KMWYO.js → help-UM6INVL5.js} +1 -1
  121. package/dist/{history-OC326NVZ.js → history-EWKPACWR.js} +7 -7
  122. package/dist/hyperframe.manifest.json +1 -1
  123. package/dist/hyperframe.runtime.iife.js +72 -66
  124. package/dist/hyperframes-player.global.js +3 -3
  125. package/dist/hyperframes-slideshow.global.js +1 -1
  126. package/dist/{info-AUIFV6MX.js → info-KY3MFTCY.js} +8 -8
  127. package/dist/{init-MRTWWDFW.js → init-LURF2PL5.js} +30 -29
  128. package/dist/{inspect-55NOAXI2.js → inspect-46CZJM6P.js} +31 -30
  129. package/dist/{installer-YSFFGBBV.js → installer-NGFX6INI.js} +5 -5
  130. package/dist/{keyframes-OO2BX2IB.js → keyframes-YCSK6POI.js} +59 -33
  131. package/dist/{lambda-CXXY6QT3.js → lambda-5KXULI2S.js} +8 -8
  132. package/dist/{layout-57GJXKDK.js → layout-WOLH24YE.js} +31 -30
  133. package/dist/{lint-J4FK3Z6G.js → lint-P3P2LX6S.js} +7 -7
  134. package/dist/{lintProject-52SLJPRC.js → lintProject-ESAJKFOX.js} +1 -1
  135. package/dist/{list-VDQUJ76B.js → list-RUYQWMF2.js} +2 -2
  136. package/dist/{login-TJSEALWW.js → login-THBBWZAY.js} +4 -4
  137. package/dist/{manager-MZIJY73J.js → manager-COSJVRAE.js} +2 -2
  138. package/dist/{manager-4PLYEEWP.js → manager-V34BMSAG.js} +10 -9
  139. package/dist/{media-treatment-GXP4PMJH.js → media-treatment-IMBLTYGV.js} +15 -14
  140. package/dist/{models-HQQQKEEP.js → models-3NW7HU72.js} +14 -13
  141. package/dist/{motionShot-2BT5D7DC.js → motionShot-VTTYZ6KW.js} +17 -16
  142. package/dist/{normalize-audio-SOLFMHNP.js → normalize-audio-ME3X7HBX.js} +6 -6
  143. package/dist/{open-KHEUODFQ.js → open-GLGSJISM.js} +12 -12
  144. package/dist/{parakeetRunner-BHU5NCAX.js → parakeetRunner-T3UGRZWC.js} +15 -14
  145. package/dist/{pipeline-WFV5HDTD.js → pipeline-IJXVEQCU.js} +10 -9
  146. package/dist/{play-GB34CANJ.js → play-HFFGGAZH.js} +21 -21
  147. package/dist/{preflight-REF3VSJ7.js → preflight-QV6V3UO2.js} +11 -10
  148. package/dist/{present-SIUTA7TD.js → present-TH34CTYY.js} +17 -17
  149. package/dist/{preview-T2GE7Z4A.js → preview-R67EQGQP.js} +100 -65
  150. package/dist/{producer-23KVQZAB.js → producer-HWPFETDU.js} +1 -1
  151. package/dist/{projectConfig-DBSNBPNP.js → projectConfig-AO4V3RHS.js} +7 -7
  152. package/dist/{publication-IXPUKYWJ.js → publication-BDQ3PXYG.js} +3 -3
  153. package/dist/{publish-3BA5VHXJ.js → publish-PXYTWSXN.js} +10 -10
  154. package/dist/{remove-background-RMSCJVVQ.js → remove-background-BVDJPT3Z.js} +11 -10
  155. package/dist/{render-Y6CTQ3YW.js → render-45YHWV6W.js} +6 -6
  156. package/dist/{render-6RNE2MLU.js → render-5MZY4TAB.js} +17 -16
  157. package/dist/{render-XGOZMMWX.js → render-5RQUYPIV.js} +35 -34
  158. package/dist/{render-batch-VUR6N6EY.js → render-batch-ZUTUBTHX.js} +6 -6
  159. package/dist/renderSetupWorker.js +42 -4
  160. package/dist/{resolver-GJCUH57W.js → resolver-FN2M3XVM.js} +5 -5
  161. package/dist/{sherpa-VVAKRCPL.js → sherpa-6KWNPRWB.js} +14 -13
  162. package/dist/skills/media-use/scripts/lib/duck.mjs +18 -2
  163. package/dist/skills/media-use/scripts/lib/duck.test.mjs +79 -0
  164. package/dist/{skills-ZHBURVQG.js → skills-PWQCM2BT.js} +5 -5
  165. package/dist/{skillsUpdateCheck-VMDAL2O2.js → skillsUpdateCheck-EHV2G3JX.js} +3 -3
  166. package/dist/{snapshot-KEOG56SL.js → snapshot-7Q24NFEI.js} +39 -38
  167. package/dist/{src-TZLGFRRX.js → src-J43SXEHJ.js} +10 -9
  168. package/dist/{src-BH5NICGQ.js → src-OS2FRVZV.js} +9 -6
  169. package/dist/{staticProjectServer-BKXL5CXB.js → staticProjectServer-YJWOQJF4.js} +18 -18
  170. package/dist/studio/assets/{hyperframes-player-BMcUdmDb.js → hyperframes-player-DnIPEARk.js} +1 -1
  171. package/dist/studio/assets/{index-Ci6GuloR.js → index-CVppCm_X.js} +1 -1
  172. package/dist/studio/assets/{index-Ca-mgTnS.js → index-Dkt4c1MV.js} +161 -161
  173. package/dist/studio/index.html +1 -1
  174. package/dist/{studio-api-A5U6QAMC.js → studio-api-CZBZ4D65.js} +11 -11
  175. package/dist/{studioServer-5EC5CP4W.js → studioServer-U6EX5DSB.js} +94 -53
  176. package/dist/{telemetry-BCKJXDSW.js → telemetry-VP4UWWO3.js} +3 -3
  177. package/dist/{timeline-AZWAXTAY.js → timeline-LMSUKEG6.js} +20 -19
  178. package/dist/{tokens-X7NC3V7C.js → tokens-FQ5AI5H4.js} +2 -2
  179. package/dist/{transcribe-7NCY7QZ2.js → transcribe-DNQFPZ2S.js} +13 -12
  180. package/dist/{transcribe-SH26H755.js → transcribe-VAMXV7QS.js} +19 -18
  181. package/dist/{updateCheck-Y7FUWQM4.js → updateCheck-TOU7VLZK.js} +2 -2
  182. package/dist/{upgrade-ZHGEVL65.js → upgrade-CJRMRR2S.js} +2 -2
  183. package/dist/{urlDownloader-FPILIT7M.js → urlDownloader-GETNWEIT.js} +7 -6
  184. package/dist/{validate-KQOZR4F6.js → validate-PRI2UTQS.js} +25 -24
  185. package/dist/vendor/npm/gsap@3.15.0/dist/CustomEase.min.js +11 -0
  186. package/dist/vendor/npm/gsap@3.15.0/dist/MotionPathPlugin.min.js +11 -0
  187. package/dist/vendor/npm/gsap@3.15.0/dist/gsap.min.js +11 -0
  188. package/dist/{video-N2QAETFB.js → video-VOCQA6AG.js} +8 -7
  189. package/dist/warmCheck.js +38 -37
  190. package/package.json +1 -1
  191. package/dist/chunk-USWPZXEA.js +0 -3897
@@ -7,19 +7,19 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  ambiguousIssue,
9
9
  loadBrowserScript
10
- } from "./chunk-6LWUPIKD.js";
10
+ } from "./chunk-7PXVXRVX.js";
11
11
  import {
12
12
  auditClipDurations,
13
13
  shouldIgnoreHttpError,
14
14
  shouldIgnoreRequestFailure
15
- } from "./chunk-ZH7J2ZUL.js";
15
+ } from "./chunk-7G2LQM3J.js";
16
16
  import {
17
17
  serveStaticProjectHtml
18
- } from "./chunk-VPC4XIVI.js";
18
+ } from "./chunk-KVLGJJTE.js";
19
19
  import {
20
20
  artifactDirectory,
21
21
  finishSnapshotRun
22
- } from "./chunk-C4Y3ZREE.js";
22
+ } from "./chunk-OJNNKHAZ.js";
23
23
  import {
24
24
  FfmpegUnavailableError,
25
25
  decideMediaProxyEligibility,
@@ -27,7 +27,7 @@ import {
27
27
  proxyVariantFor,
28
28
  resolveProxies,
29
29
  scanProjectMediaCodecMap
30
- } from "./chunk-7YSFE4SZ.js";
30
+ } from "./chunk-GJG4CTXD.js";
31
31
  import {
32
32
  AUDIT_SEEK_OPTIONS,
33
33
  DEFAULT_ZOOM_PADDING_PX,
@@ -41,17 +41,17 @@ import {
41
41
  seekCompositionTimeline,
42
42
  seekInPage,
43
43
  waitForPreferredSeekTarget
44
- } from "./chunk-4LXZJIVY.js";
44
+ } from "./chunk-ES7KSCSO.js";
45
45
  import {
46
46
  BrowserCleanupError,
47
47
  closeManagedBrowser
48
- } from "./chunk-UIC7B5KW.js";
48
+ } from "./chunk-WUL5LPI2.js";
49
49
  import {
50
50
  findStageProxyBox
51
- } from "./chunk-4TKJWWPL.js";
51
+ } from "./chunk-GOOE33GV.js";
52
52
  import {
53
53
  resolveAutoProxy
54
- } from "./chunk-6XUJVEY2.js";
54
+ } from "./chunk-RAACYYWX.js";
55
55
  import {
56
56
  normalizeErrorMessage
57
57
  } from "./chunk-T2EUWCJE.js";
@@ -389,7 +389,7 @@ function proxyFailedDraft(message) {
389
389
  return { code: "media_proxy_failed", severity: "warning", message, time: 0 };
390
390
  }
391
391
  async function runBrowserCheck(project, options, motion, runGrid, deadline, prelaunched) {
392
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-JLB2OYMT.js");
392
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-JL5J52L6.js");
393
393
  const html = await bundleWithLocalizedFonts(project.dir);
394
394
  deadline?.enter("copies");
395
395
  const { findings: drafts, failedPaths } = await preResolveHostileMediaProxies(
@@ -442,7 +442,7 @@ async function runBrowserCheck(project, options, motion, runGrid, deadline, prel
442
442
  ).map((draft) => runtimeFinding(draft, rootAnchor))
443
443
  }));
444
444
  const launchSettleMs = Date.now() - launchSettleStart;
445
- const { analyzeClipMediaFit } = await import("./src-BH5NICGQ.js");
445
+ const { analyzeClipMediaFit } = await import("./src-OS2FRVZV.js");
446
446
  for (const entry of await auditClipDurations(page, analyzeClipMediaFit, options.timeout)) {
447
447
  drafts.push({ code: "clip_media_fit", severity: entry.level, message: entry.text, time: 0 });
448
448
  }
@@ -559,7 +559,7 @@ function mergeHelperDrafts(primary, helper) {
559
559
  }
560
560
  async function captureFindingCrops(project, options, requests, deadline) {
561
561
  if (requests.length === 0) return [];
562
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-JLB2OYMT.js");
562
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-JL5J52L6.js");
563
563
  const html = await bundleWithLocalizedFonts(project.dir);
564
564
  const server = await serveStaticProjectHtml(
565
565
  project.dir,
@@ -0,0 +1,17 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+
8
+ // ../core/dist/browserMarker.js
9
+ var HYPERFRAMES_BROWSER_MARKER_ARG = "--hyperframes-owned-browser";
10
+ function withHyperframesBrowserMarker(args = []) {
11
+ return args.includes(HYPERFRAMES_BROWSER_MARKER_ARG) ? [...args] : [...args, HYPERFRAMES_BROWSER_MARKER_ARG];
12
+ }
13
+
14
+ export {
15
+ HYPERFRAMES_BROWSER_MARKER_ARG,
16
+ withHyperframesBrowserMarker
17
+ };
@@ -37,7 +37,7 @@ import {
37
37
  } from "./chunk-6NLPPKBO.js";
38
38
  import {
39
39
  VERSION
40
- } from "./chunk-LFUVTS6V.js";
40
+ } from "./chunk-66Q27H72.js";
41
41
 
42
42
  // src/telemetry/transport.ts
43
43
  import { spawn } from "child_process";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  getMimeType,
9
9
  injectMediaCodecMapIntoHtml
10
- } from "./chunk-UNATIAOT.js";
10
+ } from "./chunk-L4BFXWHC.js";
11
11
  import {
12
12
  PROXY_VARIANT_CONFIG,
13
13
  ProxyCapacityError,
@@ -18,17 +18,17 @@ import {
18
18
  recordProxyRequest,
19
19
  resolveProxy,
20
20
  resolveProxyVariantRequest
21
- } from "./chunk-7YSFE4SZ.js";
21
+ } from "./chunk-GJG4CTXD.js";
22
22
  import {
23
23
  findStageProxyBox
24
- } from "./chunk-4TKJWWPL.js";
24
+ } from "./chunk-GOOE33GV.js";
25
25
  import {
26
26
  resolveAutoProxy
27
- } from "./chunk-6XUJVEY2.js";
27
+ } from "./chunk-RAACYYWX.js";
28
28
  import {
29
29
  PREVIEW_PROXY_BOX_PARAM,
30
30
  parsePreviewProxyBox
31
- } from "./chunk-7HTH5PFK.js";
31
+ } from "./chunk-E74JMKSK.js";
32
32
  import {
33
33
  decodeWellFormedEscapes
34
34
  } from "./chunk-BSQ7XANM.js";
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
 
8
8
  // src/utils/producer.ts
9
9
  async function loadProducer() {
10
- return await import("./src-TZLGFRRX.js");
10
+ return await import("./src-J43SXEHJ.js");
11
11
  }
12
12
 
13
13
  export {
@@ -19,7 +19,7 @@ import {
19
19
  splitElementInHtml,
20
20
  unwrapElementsFromHtml,
21
21
  wrapElementsInHtml
22
- } from "./chunk-XQPA4W3M.js";
22
+ } from "./chunk-7Y5RVQQ7.js";
23
23
  import {
24
24
  MEDIA_LINK_ATTR,
25
25
  relinkSplitHalves
@@ -32,7 +32,7 @@ import {
32
32
  requestedProjectPath,
33
33
  requiredFfmpeg,
34
34
  resolveLocalAudioPath
35
- } from "./chunk-FBVUAH7N.js";
35
+ } from "./chunk-2OYYNKJ4.js";
36
36
  import {
37
37
  HistoryBusyError,
38
38
  MAX_WINDOW_IDLE_MS,
@@ -46,7 +46,7 @@ import {
46
46
  resolveProjectAndSignature,
47
47
  resolveProjectSignature,
48
48
  settledFileTag
49
- } from "./chunk-C4Y3ZREE.js";
49
+ } from "./chunk-OJNNKHAZ.js";
50
50
  import {
51
51
  PROXY_PARAMS_VERSION,
52
52
  PROXY_PENDING_RETRY_AFTER_SECONDS,
@@ -68,7 +68,7 @@ import {
68
68
  scanProjectMediaCodecMap,
69
69
  shouldPrewarmProxy,
70
70
  waitForProxy
71
- } from "./chunk-7YSFE4SZ.js";
71
+ } from "./chunk-GJG4CTXD.js";
72
72
  import {
73
73
  STUDIO_MOTION_PATH,
74
74
  createStudioMotionRenderBodyScript,
@@ -83,7 +83,7 @@ import {
83
83
  import {
84
84
  findTimelineScript,
85
85
  parseGsapScriptAcorn
86
- } from "./chunk-E3P3LJG6.js";
86
+ } from "./chunk-FLREUEHW.js";
87
87
  import {
88
88
  atomicTempPath,
89
89
  createFileAtomically,
@@ -102,19 +102,22 @@ import {
102
102
  locateSystemFont
103
103
  } from "./chunk-7FMUTGOH.js";
104
104
  import {
105
+ GSAP_BASE_URL_META,
105
106
  PREVIEW_PROXY_BOX_PARAM,
106
107
  formatPreviewProxyBox,
107
108
  formatRenderOutputTimestamp,
108
109
  gsapCdnDist,
109
110
  motionPathPluginUrl,
111
+ normalizeGsapBaseUrl,
112
+ normalizeGsapLocalRoot,
110
113
  parseFps,
111
114
  parsePreviewProxyBox
112
- } from "./chunk-7HTH5PFK.js";
115
+ } from "./chunk-E74JMKSK.js";
113
116
  import {
114
117
  addScenePartsManifest,
115
118
  ensureHfIds,
116
119
  stampHfIdsInPlace
117
- } from "./chunk-3W4B6G7Y.js";
120
+ } from "./chunk-VNWX5GBF.js";
118
121
  import {
119
122
  AFTER_FONTS_SCRIPT_TYPE,
120
123
  RUNTIME_BOOTSTRAP_ATTR,
@@ -128,7 +131,7 @@ import {
128
131
  resolveRateSpec,
129
132
  sourceTimeAt,
130
133
  stripEmbeddedRuntimeScripts
131
- } from "./chunk-USWPZXEA.js";
134
+ } from "./chunk-ZQRD62QZ.js";
132
135
  import {
133
136
  HTML_ATTRIBUTE_ENTITIES,
134
137
  MagicString,
@@ -136,7 +139,7 @@ import {
136
139
  decodeAuthoredAttribute,
137
140
  scanHtmlOpeningTags,
138
141
  unrollComputedTimeline
139
- } from "./chunk-2MCXIY4B.js";
142
+ } from "./chunk-B7RJV74O.js";
140
143
  import {
141
144
  ProjectRootMissingError,
142
145
  folderGone,
@@ -559,6 +562,16 @@ function mergePercentageKeyframes(keyframes) {
559
562
  }
560
563
  return [...byPercentage.values()].sort((a, b) => a.percentage - b.percentage);
561
564
  }
565
+ function distributeArrayKeyframes(channels) {
566
+ return mergePercentageKeyframes(
567
+ [...channels].flatMap(
568
+ ([key, values]) => values.map((value, index) => ({
569
+ percentage: values.length > 1 ? Math.round(index / (values.length - 1) * 100) : 0,
570
+ properties: { [key]: value }
571
+ }))
572
+ )
573
+ );
574
+ }
562
575
  function buildArcPath(coords, curviness, autoRotate, isCubic) {
563
576
  const first = coords[0];
564
577
  if (coords.length < 2 || !first) return void 0;
@@ -1419,19 +1432,9 @@ function parseSimpleArrayKeyframes(node, scope) {
1419
1432
  easeEach = tryResolveStringProp(prop.value, scope) ?? easeEach;
1420
1433
  }
1421
1434
  }
1422
- const maxLen = Math.max(...[...arrayProps.values()].map((a) => a.length), 0);
1423
- const keyframes = [];
1424
- for (let i = 0; i < maxLen; i++) {
1425
- const percentage = maxLen > 1 ? Math.round(i / (maxLen - 1) * 100) : 0;
1426
- const properties = {};
1427
- for (const [key, values] of arrayProps) {
1428
- if (i < values.length) properties[key] = values[i];
1429
- }
1430
- keyframes.push({ percentage, properties });
1431
- }
1432
1435
  return {
1433
1436
  format: "simple-array",
1434
- keyframes,
1437
+ keyframes: distributeArrayKeyframes(arrayProps),
1435
1438
  ...ease ? { ease } : {},
1436
1439
  ...easeEach ? { easeEach } : {}
1437
1440
  };
@@ -3775,6 +3778,48 @@ function getMimeType(path) {
3775
3778
  function isAudioFile(name) {
3776
3779
  return (getMimeType(name) ?? "").startsWith("audio/");
3777
3780
  }
3781
+ var URL_BASE = "http://localhost/";
3782
+ function urlPath(src) {
3783
+ return URL.canParse(src, URL_BASE) ? new URL(src, URL_BASE).pathname : null;
3784
+ }
3785
+ function isGsapCoreUrl(src) {
3786
+ return /\/gsap(-\d+(\.\d+)*)?(\.min)?\.js$/i.test(urlPath(src) ?? "");
3787
+ }
3788
+ var GSAP_PLUGIN_FILE = /\/(\w+Plugin|CustomBounce|CustomEase|CustomWiggle|Draggable|EasePack|Flip|GSDevTools|MotionPathHelper|Observer|ScrollSmoother|ScrollTrigger|SplitText)(\.min)?\.js$/i;
3789
+ function isGsapPluginUrl(src) {
3790
+ const path = urlPath(src);
3791
+ if (!path || isGsapCoreUrl(src)) return false;
3792
+ return GSAP_PLUGIN_FILE.test(path) || /\/gsap(@[^/]*)?\/(.+\/)?[^/]+\.js$/i.test(path);
3793
+ }
3794
+ var TEMPLATE_ELEMENT = /<template\b[^>]*>[\s\S]*?<\/template>/gi;
3795
+ var SCRIPT_SRC = /<script\b[^>]*?\ssrc\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/gi;
3796
+ var INLINED_MARKER = /\/\*\s*inlined:\s*(\S+)\s*\*\//gi;
3797
+ var CORE_LICENSE_BANNER = /\/\*!\s*\*\s*GSAP\s+\d/;
3798
+ var PLUGIN_LICENSE_BANNER = /\/\*!\s*\*\s*(?!GSAP\s)\w+\s+\d[^*]*\*\s*https:\/\/gsap\.com/;
3799
+ var CORE_BODY = /Missing plugin\? gsap\.registerPlugin\(\)/;
3800
+ function scriptUrls(html) {
3801
+ const srcs = [...html.matchAll(SCRIPT_SRC)].map(
3802
+ (m) => (m[1] ?? m[2] ?? m[3] ?? "").replace(/&amp;/gi, "&")
3803
+ );
3804
+ return [...srcs, ...[...html.matchAll(INLINED_MARKER)].map((m) => m[1] ?? "")];
3805
+ }
3806
+ function htmlHasGsapCore(html) {
3807
+ const live = html.replace(TEMPLATE_ELEMENT, "");
3808
+ return scriptUrls(live).some(isGsapCoreUrl) || CORE_LICENSE_BANNER.test(live) || CORE_BODY.test(live);
3809
+ }
3810
+ function isGsapPluginScript(script) {
3811
+ return scriptUrls(script).some(isGsapPluginUrl) || PLUGIN_LICENSE_BANNER.test(script);
3812
+ }
3813
+ function insertGsapCoreBeforeHeadPlugin(html, coreTag) {
3814
+ const lowered = html.toLowerCase();
3815
+ const at = findStartTags(html, "script").find((start) => {
3816
+ const close = lowered.indexOf("</script", start);
3817
+ return isGsapPluginScript(html.slice(start, close === -1 ? void 0 : close));
3818
+ });
3819
+ if (at === void 0 || insertBeforeCloseTag(html.slice(0, at), "head", "") !== null) return null;
3820
+ return `${html.slice(0, at)}${coreTag}
3821
+ ${html.slice(at)}`;
3822
+ }
3778
3823
  function rewriteRelativePaths(root, compPath, projectDir) {
3779
3824
  const assetExists = (path) => existsSync(join22(projectDir, path));
3780
3825
  rewriteAssetPaths(
@@ -3875,7 +3920,7 @@ function tagRootCompositionFile(bodyHtml, compPath) {
3875
3920
  function rootHeadContent(rootHtml) {
3876
3921
  return rootHtml.match(/<head[^>]*>([\s\S]*?)<\/head>/i)?.[1] ?? "";
3877
3922
  }
3878
- function buildSubCompositionHtml(projectDir, compPath, runtimeUrl, baseHref, rawOverride) {
3923
+ function buildSubCompositionHtml(projectDir, compPath, runtimeUrl, baseHref, rawOverride, gsapBaseUrl) {
3879
3924
  const compFile = join22(projectDir, compPath);
3880
3925
  if (!existsSync(compFile)) return null;
3881
3926
  const rawComp = rawOverride ?? readFileSync3(compFile, "utf-8");
@@ -3925,9 +3970,10 @@ ${compHeadContent}`;
3925
3970
  headContent = stripEmbeddedRuntimeScripts(headContent);
3926
3971
  headContent += `
3927
3972
  <script ${RUNTIME_BOOTSTRAP_ATTR}="1" src="${runtimeUrl}"></script>`;
3928
- if (!headContent.includes("gsap")) {
3929
- headContent += `
3930
- <script src="${gsapCdnDist()}gsap.min.js"></script>`;
3973
+ if (!htmlHasGsapCore(headContent)) {
3974
+ const core = `<script src="${gsapCdnDist(void 0, gsapBaseUrl).replace(/&/g, "&amp;")}gsap.min.js"></script>`;
3975
+ headContent = insertGsapCoreBeforeHeadPlugin(headContent, core) ?? `${headContent}
3976
+ ${core}`;
3931
3977
  }
3932
3978
  const htmlOpen = htmlAttrs ? `<html ${htmlAttrs}>` : "<html>";
3933
3979
  const bodyOpen = bodyAttrs ? `<body ${bodyAttrs}>` : "<body>";
@@ -4641,7 +4687,7 @@ function resolveGsapWriter(env) {
4641
4687
  throw new Error(`Invalid ${GSAP_WRITER_MIGRATION.flag}=${configured}; expected recast or acorn`);
4642
4688
  }
4643
4689
  async function loadGsapParser() {
4644
- return import("./gsapParser-UP3PNPC2.js");
4690
+ return import("./gsapParser-IEUSLYDJ.js");
4645
4691
  }
4646
4692
  function isDanglingSymlinkInProject(projectDir, lexicalPath) {
4647
4693
  if (!isSafePath(projectDir, dirname3(lexicalPath))) return false;
@@ -5500,7 +5546,7 @@ async function prepareGsapMutationScript(c, res, firstMutation) {
5500
5546
  let block = extractGsapScriptBlock(html);
5501
5547
  if (!block && (firstMutation.type === "add" || firstMutation.type === "add-with-keyframes")) {
5502
5548
  const compId = html.match(/data-composition-id="([^"]+)"/)?.[1] ?? "main";
5503
- const { GSAP_CDN } = await import("./dist-RKK4YLAD.js");
5549
+ const { GSAP_CDN } = await import("./dist-VVROHSP4.js");
5504
5550
  const bootstrap = [
5505
5551
  `<script src="${GSAP_CDN}"></script>`,
5506
5552
  "<script>",
@@ -7375,9 +7421,12 @@ function lazyPreviewImages(html) {
7375
7421
  return parts.join("");
7376
7422
  }
7377
7423
  var PROJECT_SIGNATURE_META = "hyperframes-project-signature";
7378
- var GSAP_CDN_SCRIPT = `<script src="${gsapCdnDist()}gsap.min.js"></script>`;
7379
- var GSAP_CUSTOM_EASE_CDN_SCRIPT = `<script src="${gsapCdnDist()}CustomEase.min.js"></script>`;
7380
- var GSAP_MOTION_PATH_CDN_SCRIPT = `<script src="${motionPathPluginUrl()}"></script>`;
7424
+ function escapeGsapUrl(url) {
7425
+ return url.replace(/&/g, "&amp;").replace(/"/g, "&quot;");
7426
+ }
7427
+ function gsapScriptTag(file, baseUrl) {
7428
+ return `<script src="${escapeGsapUrl(gsapCdnDist(void 0, baseUrl) + file)}"></script>`;
7429
+ }
7381
7430
  function injectProjectSignature(html, signature) {
7382
7431
  const tag = `<meta name="${PROJECT_SIGNATURE_META}" content="${signature}">`;
7383
7432
  if (html.includes(`name="${PROJECT_SIGNATURE_META}"`)) {
@@ -7420,10 +7469,6 @@ function injectScriptTagIntoHead(html, scriptTag) {
7420
7469
  `) ?? `${scriptTag}
7421
7470
  ${html}`;
7422
7471
  }
7423
- function htmlHasGsap(html) {
7424
- const outsideTemplates = html.replace(/<template\b[^>]*>[\s\S]*?<\/template>/gi, "");
7425
- return /<script\b[^>]*src=["'][^"']*gsap/i.test(outsideTemplates) || /\/\*\s*inlined:.*gsap/i.test(outsideTemplates) || /\b(GreenSock|_gsScope)\b/.test(outsideTemplates) || /\bgsap\.(config|defaults|registerPlugin|version)\b/.test(outsideTemplates);
7426
- }
7427
7472
  function htmlHasCustomEase(html) {
7428
7473
  return /<script\b[^>]*src=["'][^"']*CustomEase/i.test(html) || /\bwindow\.CustomEase\b/.test(html) || /\bCustomEase\s*=\s*/.test(html);
7429
7474
  }
@@ -7433,20 +7478,16 @@ function htmlUsesMotionPath(html) {
7433
7478
  function htmlHasMotionPathPlugin(html) {
7434
7479
  return /<script\b[^>]*src=["'][^"']*MotionPathPlugin/i.test(html) || /\bwindow\.MotionPathPlugin\b/.test(html) || /\bMotionPathPlugin\s*=\s*/.test(html);
7435
7480
  }
7436
- function injectMotionPathPluginIfNeeded(html) {
7481
+ function injectMotionPathPluginIfNeeded(html, baseUrl) {
7437
7482
  if (!htmlUsesMotionPath(html) || htmlHasMotionPathPlugin(html)) return html;
7438
7483
  const gsap = findGsapCoreScript(html);
7439
7484
  if (gsap) {
7440
7485
  const version = gsap.src.match(/gsap@([\d.]+)/)?.[1];
7441
7486
  const ordering = `${gsap.type ? ` type="${gsap.type}"` : ""}${gsap.defer ? " defer" : ""}`;
7442
- const pluginTag = `<script${ordering} src="${motionPathPluginUrl(version)}"></script>`;
7487
+ const pluginTag = `<script${ordering} src="${escapeGsapUrl(motionPathPluginUrl(version, baseUrl))}"></script>`;
7443
7488
  return html.slice(0, gsap.end) + "\n" + pluginTag + html.slice(gsap.end);
7444
7489
  }
7445
- return injectScriptTagIntoHead(html, GSAP_MOTION_PATH_CDN_SCRIPT);
7446
- }
7447
- function isGsapCoreUrl(src) {
7448
- const base = "http://localhost/";
7449
- return URL.canParse(src, base) && /\/gsap(\.min)?\.js$/i.test(new URL(src, base).pathname);
7490
+ return injectScriptTagIntoHead(html, gsapScriptTag("MotionPathPlugin.min.js", baseUrl));
7450
7491
  }
7451
7492
  function findGsapCoreScript(html) {
7452
7493
  const scripts = [...parseHTML(html).document.querySelectorAll("script")];
@@ -7475,30 +7516,35 @@ function scriptCloseEnd(html, start) {
7475
7516
  const closeAt = close.exec(html)?.index;
7476
7517
  return closeAt === void 0 ? 0 : html.indexOf(">", closeAt) + 1;
7477
7518
  }
7478
- function injectStudioMotionDependencies(html, manifestContent) {
7519
+ function injectStudioMotionDependencies(html, manifestContent, baseUrl) {
7479
7520
  const manifest = parseStudioMotionManifestContent(manifestContent);
7480
7521
  if (!manifest.hasMotion) return html;
7481
7522
  let next = html;
7482
- if (!htmlHasGsap(next)) next = injectScriptTagIntoHead(next, GSAP_CDN_SCRIPT);
7523
+ if (!htmlHasGsapCore(next)) {
7524
+ const core = gsapScriptTag("gsap.min.js", baseUrl);
7525
+ next = insertGsapCoreBeforeHeadPlugin(next, core) ?? injectScriptTagIntoHead(next, core);
7526
+ }
7483
7527
  if (manifest.hasCustomEase && !htmlHasCustomEase(next)) {
7484
- next = injectScriptTagIntoHead(next, GSAP_CUSTOM_EASE_CDN_SCRIPT);
7528
+ next = injectScriptTagIntoHead(next, gsapScriptTag("CustomEase.min.js", baseUrl));
7485
7529
  }
7486
7530
  return next;
7487
7531
  }
7488
- function injectStudioMotionScript(html, projectDir, activeCompositionPath) {
7532
+ function readStudioMotion(projectDir, activeCompositionPath) {
7489
7533
  const manifestContent = readStudioMotionManifestContent(projectDir);
7490
7534
  const script = createStudioMotionRenderBodyScript(manifestContent, {
7491
7535
  activeCompositionPath
7492
7536
  });
7493
- if (!script) return html;
7494
- const withDependencies = injectStudioMotionDependencies(html, manifestContent);
7537
+ return script ? { manifestContent, script } : null;
7538
+ }
7539
+ function injectStudioMotionScript(html, script) {
7495
7540
  const tag = `<script type="${AFTER_FONTS_SCRIPT_TYPE}">${script.replace(/<\/script/gi, "<\\/script")}</script>`;
7496
- return insertBeforeCloseTag(withDependencies, "body", tag) ?? `${withDependencies}${tag}`;
7541
+ return insertBeforeCloseTag(html, "body", tag) ?? `${html}${tag}`;
7497
7542
  }
7498
7543
  var GSAP_FALLBACK_ATTR = "data-hf-gsap-fallback";
7499
- var GSAP_CDN_FALLBACK_SCRIPT = `<script ${GSAP_FALLBACK_ATTR}>
7544
+ function gsapCdnFallbackScript(baseUrl) {
7545
+ return `<script ${GSAP_FALLBACK_ATTR}>
7500
7546
  (function(){
7501
- var cdnBase="${gsapCdnDist()}";
7547
+ var cdnBase=${JSON.stringify(gsapCdnDist(void 0, baseUrl)).replace(/</g, "\\u003c")};
7502
7548
  var loaded={};
7503
7549
  function loadFallback(file){
7504
7550
  if(loaded[file])return loaded[file];
@@ -7518,10 +7564,12 @@ var GSAP_CDN_FALLBACK_SCRIPT = `<script ${GSAP_FALLBACK_ATTR}>
7518
7564
  },true);
7519
7565
  })();
7520
7566
  </script>`;
7521
- function injectGsapCdnFallback(html) {
7567
+ }
7568
+ function injectGsapCdnFallback(html, baseUrl) {
7522
7569
  if (html.includes(GSAP_FALLBACK_ATTR)) return html;
7523
- if (html.includes("<head>")) return html.replace("<head>", "<head>" + GSAP_CDN_FALLBACK_SCRIPT);
7524
- return GSAP_CDN_FALLBACK_SCRIPT + html;
7570
+ if (html.includes("<head>"))
7571
+ return html.replace("<head>", "<head>" + gsapCdnFallbackScript(baseUrl));
7572
+ return gsapCdnFallbackScript(baseUrl) + html;
7525
7573
  }
7526
7574
  function parsePreviewVariablesParam(raw) {
7527
7575
  if (raw === void 0 || raw === "") return { ok: true, values: null };
@@ -7548,23 +7596,32 @@ function previewVariablesFromRequest(rawVariables) {
7548
7596
  var PREVIEW_CAPTURE_PARAM = "hf-capture";
7549
7597
  var EARLY_ERRORS_SCRIPT = `<script>(function(){var seen=window.${STUDIO_PREVIEW_ERRORS}=[];
7550
7598
  addEventListener("error",function(e){seen.push(e.message||String(e))});})();</script>`;
7551
- function injectStudioPreviewAugmentations(html, adapter, projectDir, activeCompositionPath, capture) {
7552
- const marked = capture ? injectTagsAtHeadStart(
7599
+ function injectStudioPreviewAugmentations(html, adapter, projectDir, activeCompositionPath, options) {
7600
+ const marked = options.capture ? injectTagsAtHeadStart(
7553
7601
  html,
7554
7602
  `<meta name="${STUDIO_PREVIEW_MARK_META}" content="${STUDIO_PREVIEW_CAPTURE_MODE}">`
7555
7603
  ) : injectTagsAtHeadStart(
7556
7604
  lazyPreviewImages(html),
7557
7605
  `<meta name="${STUDIO_PREVIEW_MARK_META}">${EARLY_ERRORS_SCRIPT}`
7558
7606
  );
7559
- return injectStudioMotionScript(
7560
- injectMotionPathPluginIfNeeded(
7561
- injectGsapCdnFallback(
7562
- injectProjectSignature(marked, resolveProjectSignature(adapter, projectDir))
7563
- )
7607
+ const withFallback = injectGsapCdnFallback(
7608
+ injectProjectSignature(
7609
+ injectTagsAtHeadStart(
7610
+ marked,
7611
+ `<meta name="${GSAP_BASE_URL_META}" content="${escapeGsapUrl(options.gsapBaseUrl)}">`
7612
+ ),
7613
+ resolveProjectSignature(adapter, projectDir)
7564
7614
  ),
7565
- projectDir,
7566
- activeCompositionPath
7615
+ options.gsapBaseUrl
7567
7616
  );
7617
+ const studioMotion = readStudioMotion(projectDir, activeCompositionPath);
7618
+ const withMotionDependencies = studioMotion ? injectStudioMotionDependencies(
7619
+ withFallback,
7620
+ studioMotion.manifestContent,
7621
+ options.gsapBaseUrl
7622
+ ) : withFallback;
7623
+ const withPlugin = injectMotionPathPluginIfNeeded(withMotionDependencies, options.gsapBaseUrl);
7624
+ return studioMotion ? injectStudioMotionScript(withPlugin, studioMotion.script) : withPlugin;
7568
7625
  }
7569
7626
  async function transformPreviewHtml(html, adapter, project, activeCompositionPath) {
7570
7627
  if (!adapter.transformPreviewHtml) return html;
@@ -7606,7 +7663,23 @@ var PREVIEW_BUNDLE_OPTIONS = {
7606
7663
  };
7607
7664
  var previewBaseHref = (projectId) => `/api/projects/${encodeURIComponent(projectId)}/preview/`;
7608
7665
  var withPreviewBase = (html, projectId) => hasBaseElement(html) ? html : injectTagsAtHeadStart(html, `<base href="${previewBaseHref(projectId)}">`);
7666
+ function resolvePreviewGsapBaseUrl(adapter) {
7667
+ const configured = process.env.HYPERFRAMES_GSAP_BASE_URL;
7668
+ if (configured?.trim() || !adapter.gsapLocalRoot) {
7669
+ try {
7670
+ return normalizeGsapBaseUrl(configured);
7671
+ } catch (cause) {
7672
+ throw new Error(
7673
+ "Invalid HYPERFRAMES_GSAP_BASE_URL: use an absolute HTTPS npm mirror root (plain HTTP only for localhost) without credentials, query, or fragment",
7674
+ { cause }
7675
+ );
7676
+ }
7677
+ }
7678
+ return normalizeGsapLocalRoot(adapter.gsapLocalRoot);
7679
+ }
7609
7680
  function registerPreviewRoutes(api, adapter) {
7681
+ const gsapBaseUrl = resolvePreviewGsapBaseUrl(adapter);
7682
+ const gsapEtagSalt = `:gsap:${createHash22("sha1").update(gsapBaseUrl).digest("hex").slice(0, 12)}`;
7610
7683
  const previewCacheHeaders = (etag) => ({
7611
7684
  "Cache-Control": "private, no-cache",
7612
7685
  ETag: etag
@@ -7641,7 +7714,7 @@ function registerPreviewRoutes(api, adapter) {
7641
7714
  adapter,
7642
7715
  project.dir,
7643
7716
  mainCompositionPath,
7644
- capture
7717
+ { capture, gsapBaseUrl }
7645
7718
  );
7646
7719
  if (previewVariables) bundled = injectPreviewVariables(bundled, previewVariables);
7647
7720
  bundled = await injectMediaCodecMap(
@@ -7669,7 +7742,7 @@ function registerPreviewRoutes(api, adapter) {
7669
7742
  adapter,
7670
7743
  project.dir,
7671
7744
  fallback.compositionPath,
7672
- capture
7745
+ { capture, gsapBaseUrl }
7673
7746
  );
7674
7747
  if (previewVariables) {
7675
7748
  fallbackAugmented = injectPreviewVariables(fallbackAugmented, previewVariables);
@@ -7694,7 +7767,7 @@ function registerPreviewRoutes(api, adapter) {
7694
7767
  if (vars.error !== void 0) return c.json({ error: vars.error }, 400);
7695
7768
  const previewVariables = vars.values;
7696
7769
  const capture = c.req.query(PREVIEW_CAPTURE_PARAM) !== void 0;
7697
- const etag = `"preview:${signature}${variablesEtagSalt(vars.raw)}${capture ? ":capture" : ""}"`;
7770
+ const etag = `"preview:${signature}${gsapEtagSalt}${variablesEtagSalt(vars.raw)}${capture ? ":capture" : ""}"`;
7698
7771
  const ifNoneMatch = c.req.header("If-None-Match");
7699
7772
  if (ifNoneMatch === etag) {
7700
7773
  return new Response(null, {
@@ -7744,7 +7817,7 @@ ${etag}`;
7744
7817
  }
7745
7818
  const compPathHash = createHash22("sha1").update(compPath).digest("hex");
7746
7819
  const capture = c.req.query(PREVIEW_CAPTURE_PARAM) !== void 0;
7747
- const etag = `"comp:v2:${compPathHash}:${signature}${variablesEtagSalt(vars.raw)}${capture ? ":capture" : ""}"`;
7820
+ const etag = `"comp:v2:${compPathHash}:${signature}${gsapEtagSalt}${variablesEtagSalt(vars.raw)}${capture ? ":capture" : ""}"`;
7748
7821
  const ifNoneMatch = c.req.header("If-None-Match");
7749
7822
  if (ifNoneMatch === etag) {
7750
7823
  return new Response(null, {
@@ -7760,12 +7833,16 @@ ${etag}`;
7760
7833
  compPath,
7761
7834
  adapter.runtimeUrl,
7762
7835
  baseHref,
7763
- stamped
7836
+ stamped,
7837
+ gsapBaseUrl
7764
7838
  );
7765
7839
  if (!html) return c.text("not found", 404);
7766
7840
  recordPreviewReferences(project.dir, html);
7767
7841
  html = ensureHfIds(await transformPreviewHtml(html, adapter, project, compPath));
7768
- html = injectStudioPreviewAugmentations(html, adapter, project.dir, compPath, capture);
7842
+ html = injectStudioPreviewAugmentations(html, adapter, project.dir, compPath, {
7843
+ capture,
7844
+ gsapBaseUrl
7845
+ });
7769
7846
  if (previewVariables) html = injectPreviewVariables(html, previewVariables);
7770
7847
  html = await injectMediaCodecMap(html, adapter, project.dir, compPath, mediaCodecProbeCache);
7771
7848
  return c.html(html, 200, previewCacheHeaders(etag));
@@ -6,7 +6,10 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  runRenderSetupWorker
9
- } from "./chunk-RWGASWT7.js";
9
+ } from "./chunk-BL4U6U52.js";
10
+ import {
11
+ HYPERFRAMES_BROWSER_MARKER_ARG
12
+ } from "./chunk-K4MJX7SR.js";
10
13
  import {
11
14
  terminateProcessTree
12
15
  } from "./chunk-KGPLIH7B.js";
@@ -15,12 +18,8 @@ import {
15
18
  import { execFileSync } from "child_process";
16
19
  import { readFileSync } from "fs";
17
20
  function killOrphanedProcesses() {
18
- if (process.platform === "win32") return 0;
19
- return killOrphansMatching([
20
- "chrome-headless-shell",
21
- "chrome_headless_shell",
22
- "puppeteer_dev_chrome_profile"
23
- ]);
21
+ if (process.env.HYPERFRAMES_NO_ORPHAN_CLEANUP === "1" || process.platform === "win32") return 0;
22
+ return killOrphansMatching(HYPERFRAMES_BROWSER_MARKER_ARG);
24
23
  }
25
24
  async function killOrphanedProcessesForRender(signal) {
26
25
  return runRenderSetupWorker("orphan-cleanup", {}, { signal, timeoutMs: 15e3 });
@@ -162,7 +161,7 @@ function isProcessDescendant(childPid, ancestorPid, parentPid = processParentPid
162
161
  }
163
162
  return false;
164
163
  }
165
- function killOrphansMatching(markers) {
164
+ function killOrphansMatching(marker) {
166
165
  const uid = process.getuid?.();
167
166
  const owner = uid === void 0 ? ["-A"] : ["-U", String(uid)];
168
167
  let table;
@@ -178,7 +177,7 @@ function killOrphansMatching(markers) {
178
177
  for (const line of table.split("\n")) {
179
178
  const match = line.match(/^\s*(\d+)\s+(\d+)\s+(.*)$/);
180
179
  if (!match || match[2] !== "1") continue;
181
- if (!markers.some((marker) => match[3].includes(marker))) continue;
180
+ if (!match[3].split(/\s+/).includes(marker)) continue;
182
181
  killProcessTree(Number(match[1]));
183
182
  killed++;
184
183
  }
@@ -19,10 +19,10 @@ import {
19
19
  import {
20
20
  formatVariableValidationIssue,
21
21
  validateVariables
22
- } from "./chunk-7HTH5PFK.js";
22
+ } from "./chunk-E74JMKSK.js";
23
23
  import {
24
24
  extractCompositionMetadata
25
- } from "./chunk-2MCXIY4B.js";
25
+ } from "./chunk-B7RJV74O.js";
26
26
 
27
27
  // src/utils/variables.ts
28
28
  import { readFileSync } from "fs";
@@ -20,7 +20,7 @@ import {
20
20
  typeDirPath,
21
21
  updateRecord,
22
22
  withFigmaErrors
23
- } from "./chunk-GKHMSSGY.js";
23
+ } from "./chunk-YUFECVHG.js";
24
24
  import {
25
25
  defineCommand
26
26
  } from "./chunk-S3S4TGEH.js";
@@ -229,7 +229,7 @@ var asset_default = defineCommand({
229
229
  rendered > 0 ? `(${results.length} nodes, ${rendered} rendered in 1 figma request)` : `(${results.length} nodes, all reused from cache \u2014 no figma request)`
230
230
  );
231
231
  }
232
- const { trackFigmaImport } = await import("./telemetry-BCKJXDSW.js");
232
+ const { trackFigmaImport } = await import("./telemetry-VP4UWWO3.js");
233
233
  trackFigmaImport({
234
234
  phase: "asset",
235
235
  reused: results.every((r) => r.reused),