hyperframes 0.8.136 → 0.8.138

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 (182) hide show
  1. package/dist/{add-MD4CNRQV.js → add-IZQPSHT5.js} +15 -15
  2. package/dist/{animatedGifPrep-3AKQSXPU.js → animatedGifPrep-MQF3GRFW.js} +6 -6
  3. package/dist/appHistory-TH3TL6N6.js +31 -0
  4. package/dist/{asset-UPNW7262.js → asset-RNZX4ISG.js} +2 -2
  5. package/dist/{assetCataloger-KBN5LNK4.js → assetCataloger-5YRUY3PJ.js} +2 -2
  6. package/dist/{auth-63PKUA76.js → auth-LUELYGJ4.js} +2 -2
  7. package/dist/{autoUpdate-CLB47L2W.js → autoUpdate-ECMQWUU5.js} +2 -2
  8. package/dist/{backgroundChecks-JW7XF7JA.js → backgroundChecks-PBEJMSA3.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-VFXGGGJG.js → batchRender-2GXKBPFQ.js} +3 -3
  11. package/dist/{beats-3CO6EGBG.js → beats-AAAZVDOY.js} +14 -14
  12. package/dist/{benchmark-CYTMATA7.js → benchmark-EI767IB4.js} +12 -12
  13. package/dist/{browser-QMLZJM2K.js → browser-KAA2VXYH.js} +9 -9
  14. package/dist/{bundleWithLocalizedFonts-5ATL25BF.js → bundleWithLocalizedFonts-MWDYAPGB.js} +2 -2
  15. package/dist/{capture-UEJG6BUX.js → capture-IRRHK6BT.js} +2 -2
  16. package/dist/{capture-DYBK5LGE.js → capture-VYT5NQQI.js} +13 -13
  17. package/dist/{catalog-G773J4K4.js → catalog-FYTZ2ET6.js} +22 -22
  18. package/dist/catch-up-XH3OAKQR.js +123 -0
  19. package/dist/{check-NCXITJWK.js → check-MUMIOK5K.js} +38 -38
  20. package/dist/{checkBrowser-IJQ2WCOB.js → checkBrowser-LKSZFOU6.js} +36 -36
  21. package/dist/{chunk-2EAXUCCE.js → chunk-2NCHQUPX.js} +1 -1
  22. package/dist/{chunk-XT5P4QMO.js → chunk-3DKN5WKL.js} +31 -11
  23. package/dist/{chunk-XLO327OK.js → chunk-3F6YLT72.js} +11 -11
  24. package/dist/{chunk-V2J2ZWPR.js → chunk-5K33TNUJ.js} +2 -2
  25. package/dist/{chunk-JBI43NRR.js → chunk-7OLMGFDN.js} +3 -3
  26. package/dist/{chunk-N3KRRPL7.js → chunk-7Y5SMPRV.js} +3 -3
  27. package/dist/{chunk-SXE656MT.js → chunk-APMG37MX.js} +1 -1
  28. package/dist/{chunk-37EDNWLQ.js → chunk-ASPTQ6DT.js} +1 -1
  29. package/dist/chunk-DCAI5DBR.js +218 -0
  30. package/dist/{chunk-KZJPREW7.js → chunk-DJMXTKKK.js} +1 -1
  31. package/dist/{chunk-YDBQRLRI.js → chunk-DXHYACUC.js} +3 -3
  32. package/dist/{chunk-GULOKZLI.js → chunk-EDUBJPGL.js} +14 -9
  33. package/dist/{chunk-527WRFUQ.js → chunk-FSSMOTMS.js} +1 -1
  34. package/dist/{chunk-FTR6KLIG.js → chunk-GJGVYREG.js} +59 -226
  35. package/dist/{chunk-V26IB6L2.js → chunk-GNHJ4ONK.js} +2 -2
  36. package/dist/{chunk-BQIFI4GV.js → chunk-HUZYBV2Z.js} +1 -1
  37. package/dist/{chunk-ECAXTQGU.js → chunk-HXXX6N2G.js} +2 -2
  38. package/dist/{chunk-2BJCQN7K.js → chunk-I3BRUEKD.js} +1 -1
  39. package/dist/{chunk-BSU7EOWJ.js → chunk-IC5L6L7K.js} +1 -1
  40. package/dist/{chunk-P3UNVJXX.js → chunk-IRYC5BRO.js} +4 -4
  41. package/dist/{chunk-V32SGDX7.js → chunk-JCRJBB4E.js} +10 -10
  42. package/dist/{chunk-H4UIYRZZ.js → chunk-JOUVZO7M.js} +1 -1
  43. package/dist/{chunk-XZABUQTX.js → chunk-JYYOAKHS.js} +1 -1
  44. package/dist/{chunk-Z3EFUXL5.js → chunk-KBUUCAIZ.js} +6 -6
  45. package/dist/{chunk-RTURM45Q.js → chunk-KRLYIT22.js} +1 -1
  46. package/dist/{chunk-5K573LFX.js → chunk-L5E5ZN6G.js} +1 -1
  47. package/dist/{chunk-4AXZWUQ6.js → chunk-MIOBYUXT.js} +1 -1
  48. package/dist/{chunk-ZBNFAZQB.js → chunk-MKVKVMUH.js} +7 -7
  49. package/dist/{chunk-XE6S5CE6.js → chunk-OBC75KXL.js} +1 -1
  50. package/dist/{chunk-PGFP4FLW.js → chunk-P5WDMFBB.js} +405 -205
  51. package/dist/{chunk-WFZEW4AC.js → chunk-P75OFLZN.js} +2 -2
  52. package/dist/{chunk-OSSVNAI5.js → chunk-PHRWQQOJ.js} +1 -1
  53. package/dist/{chunk-5ALWCRBU.js → chunk-PHXBLIKK.js} +10 -10
  54. package/dist/{chunk-OAF4XJOW.js → chunk-PXSM4HPB.js} +7 -2
  55. package/dist/{chunk-3E3WVNVP.js → chunk-QPOK6I32.js} +2 -2
  56. package/dist/{chunk-GK5W3SIJ.js → chunk-R6C6URKB.js} +3 -3
  57. package/dist/{chunk-EXNGSOQG.js → chunk-RH5VML6E.js} +12 -12
  58. package/dist/{chunk-BHOKLX4F.js → chunk-RLNB3JCY.js} +1 -1
  59. package/dist/{chunk-IQ3OUQ5Z.js → chunk-S3S2LSZX.js} +22 -2
  60. package/dist/{chunk-LO7L5PJ3.js → chunk-SDRKEYZV.js} +5 -5
  61. package/dist/{chunk-T5LPCY6I.js → chunk-SIMYRD5P.js} +27 -41
  62. package/dist/{chunk-VDQCNWQI.js → chunk-STA43FMY.js} +1 -1
  63. package/dist/{chunk-VNC6YQOC.js → chunk-SZITAGRK.js} +1 -1
  64. package/dist/chunk-UINDCCO7.js +3742 -0
  65. package/dist/{chunk-BWJ27MQP.js → chunk-UUMK6VME.js} +1 -1
  66. package/dist/{chunk-CG6OUDMX.js → chunk-VR5UQWGV.js} +3 -3
  67. package/dist/{chunk-RVG35AL2.js → chunk-W3KQCJVP.js} +217 -6
  68. package/dist/{chunk-X5HWXQPU.js → chunk-WCJGTLPF.js} +22 -10
  69. package/dist/{chunk-M5WGAAML.js → chunk-WH6PRFNX.js} +3 -3
  70. package/dist/{chunk-WTMA6JQD.js → chunk-XQODEVF3.js} +1 -1
  71. package/dist/{chunk-32QEFPDS.js → chunk-YGXLBX3N.js} +1 -1
  72. package/dist/{chunk-CYG3HXBE.js → chunk-YNBXJWSD.js} +1 -1
  73. package/dist/{clean-UCLCH4YA.js → clean-LZPDOAV4.js} +21 -21
  74. package/dist/cli.js +62 -52
  75. package/dist/{cloud-LVP33D4N.js → cloud-RVAH5NNL.js} +4 -4
  76. package/dist/{cloudrun-FA4XHPZS.js → cloudrun-NFGM6TRT.js} +3 -3
  77. package/dist/{compare-TOTN2CVX.js → compare-S3M5OAL2.js} +29 -29
  78. package/dist/{compiler-XZ654ZH2.js → compiler-SZ4GTYFB.js} +3 -3
  79. package/dist/{component-B5QZZJJA.js → component-PR2WZTQ4.js} +3 -3
  80. package/dist/{compositions-REMCVXXP.js → compositions-6RYXH2UA.js} +11 -11
  81. package/dist/{delete-H2P6PYT5.js → delete-EO7C3LQ6.js} +3 -3
  82. package/dist/{deterministicFonts-U2EXY2KQ.js → deterministicFonts-GTITFRSJ.js} +2 -2
  83. package/dist/{dist-QS5WEGBE.js → dist-OJTEVNJR.js} +1 -1
  84. package/dist/{dist-HVJAGLHF.js → dist-RVC3JTID.js} +2 -2
  85. package/dist/{doctor-HCGHEJDN.js → doctor-UTCCMN32.js} +12 -12
  86. package/dist/{events-2LS5WRYL.js → events-RCGWL4LI.js} +9 -9
  87. package/dist/{events-V5QLQAN4.js → events-RE3OR6KY.js} +8 -8
  88. package/dist/{feedback-WBOC7SAW.js → feedback-V7C64JIR.js} +12 -12
  89. package/dist/{figma-HRUWQ5FO.js → figma-26LOX5PV.js} +3 -3
  90. package/dist/fontLocalizeCli.js +10 -10
  91. package/dist/{get-FS5GMKBK.js → get-E2K2JRTV.js} +3 -3
  92. package/dist/{gpuPolicy-ON3RMSWD.js → gpuPolicy-Z3PQN6ZK.js} +6 -6
  93. package/dist/{grade-compare-G7Z5DWKW.js → grade-compare-OTZDU463.js} +26 -26
  94. package/dist/{help-27P7K7JZ.js → help-IRSQLNI5.js} +3 -2
  95. package/dist/{history-5E46VSDM.js → history-G44U6762.js} +18 -18
  96. package/dist/hyperframe-runtime.js +64 -182
  97. package/dist/hyperframe.manifest.json +1 -1
  98. package/dist/hyperframe.runtime.iife.js +64 -182
  99. package/dist/hyperframes-player.global.js +1 -1
  100. package/dist/{info-2ZYYJL3I.js → info-KXQ2TAHX.js} +11 -11
  101. package/dist/{init-ZI75FWLJ.js → init-7SXMLHJE.js} +27 -27
  102. package/dist/{inspect-YLQN7QL6.js → inspect-7JTINR25.js} +27 -27
  103. package/dist/{installer-DDJVY4TO.js → installer-RH4E6WXT.js} +4 -4
  104. package/dist/{keyframes-JONXVQWD.js → keyframes-PIV573S6.js} +12 -12
  105. package/dist/{lambda-LPLYOEYY.js → lambda-GO5HAA4S.js} +4 -4
  106. package/dist/{layout-ZP4WDRSA.js → layout-N2736OO3.js} +27 -27
  107. package/dist/{lint-XGMUBMLE.js → lint-WUXZ5WWZ.js} +14 -14
  108. package/dist/{lintProject-EPVG2EFE.js → lintProject-ANMPLBIT.js} +1 -1
  109. package/dist/{list-NBXJMDON.js → list-QF7AMX5F.js} +3 -3
  110. package/dist/{login-XIH4H4RH.js → login-6RGSXHQJ.js} +4 -4
  111. package/dist/{manager-GFN75DM4.js → manager-524RPYO7.js} +2 -2
  112. package/dist/{manager-67P2XFXQ.js → manager-DXB7JDHU.js} +2 -2
  113. package/dist/{media-treatment-QYKJDWHD.js → media-treatment-T4KDEDYW.js} +14 -14
  114. package/dist/{models-54NL5PRB.js → models-6JMNK3XI.js} +19 -12
  115. package/dist/{motionShot-Y4D7LHU4.js → motionShot-74WM7KF6.js} +12 -12
  116. package/dist/{normalize-audio-6RR6UGAJ.js → normalize-audio-ZZU36ZMD.js} +14 -14
  117. package/dist/{open-TYFT2DQC.js → open-G523K45B.js} +20 -13
  118. package/dist/{pipeline-P7QRGI5H.js → pipeline-AKDGCWRE.js} +10 -10
  119. package/dist/{play-IZXA4GO3.js → play-SHIGXVON.js} +30 -30
  120. package/dist/{preflight-X3XFRJPQ.js → preflight-6ERLORWK.js} +7 -7
  121. package/dist/{present-JS2KNZLT.js → present-QOYYNZCE.js} +19 -19
  122. package/dist/{preview-M6PED6DU.js → preview-KUXTDJL3.js} +26 -24
  123. package/dist/{producer-KQNJKM7F.js → producer-CH33JXHK.js} +1 -1
  124. package/dist/{projectConfig-EAAQYRMP.js → projectConfig-NKIPRWAE.js} +6 -6
  125. package/dist/{publication-H3G346EX.js → publication-4RBVVR5Z.js} +2 -2
  126. package/dist/{publish-NEGKIS35.js → publish-OLHR4Z4U.js} +12 -11
  127. package/dist/{remove-background-HU4S4HH5.js → remove-background-NPKZSIPY.js} +12 -12
  128. package/dist/{render-24OQFSYB.js → render-GYYGWYQC.js} +17 -17
  129. package/dist/{render-IZHBGVPP.js → render-P4NWFUS7.js} +29 -27
  130. package/dist/{render-F3CNO2IE.js → render-UOKPAJNH.js} +3 -3
  131. package/dist/{render-batch-63CBIJYR.js → render-batch-ZDG3EXSD.js} +3 -3
  132. package/dist/{renderCancellation-FT3JJ7GB.js → renderCancellation-QYQLWHZY.js} +6 -6
  133. package/dist/renderSetupWorker.js +1 -1
  134. package/dist/{resolver-YJJKOGQF.js → resolver-CWH3VVB7.js} +4 -4
  135. package/dist/{sherpa-3BQDMJPJ.js → sherpa-WEQE23S5.js} +130 -47
  136. package/dist/sherpaWorker.js +4 -8
  137. package/dist/skills/hyperframes/SKILL.md +2 -0
  138. package/dist/skills/hyperframes-cli/SKILL.md +1 -1
  139. package/dist/{skills-T2O7PD6Q.js → skills-BVONI6TC.js} +14 -14
  140. package/dist/{skillsUpdateCheck-VYEGOAEI.js → skillsUpdateCheck-KKDPTFM7.js} +3 -3
  141. package/dist/{snapshot-NLTL7ZOM.js → snapshot-PWZFJEDR.js} +36 -36
  142. package/dist/{src-ZPAJ44CP.js → src-HH4C5GZV.js} +9 -9
  143. package/dist/{src-CUR36DBE.js → src-YO7MAWGD.js} +5 -5
  144. package/dist/{staticProjectServer-WN4BSLI3.js → staticProjectServer-PR5INXSA.js} +14 -14
  145. package/dist/{status-6CGT2PJT.js → status-AK67DTED.js} +6 -6
  146. package/dist/studio/assets/{hyperframes-player-ukvUFqdg.js → hyperframes-player-B30apksz.js} +1 -1
  147. package/dist/studio/assets/{index-C-pD9_xY.js → index-BdjA0CLD.js} +147 -147
  148. package/dist/studio/assets/{index-syMK0_9C.css → index-CVd4O6eH.css} +1 -1
  149. package/dist/studio/assets/{index-CRRgIxsS.js → index-DIJuIBwI.js} +1 -1
  150. package/dist/studio/assets/{index-BY_myArg.js → index-DXVvWfQG.js} +1 -1
  151. package/dist/studio/{chunk-QRLKWENQ.js → chunk-4S3AYCOG.js} +2 -2
  152. package/dist/studio/{chunk-NM7BXNZ7.js → chunk-LOVBLSMR.js} +10 -4
  153. package/dist/studio/chunk-LOVBLSMR.js.map +1 -0
  154. package/dist/studio/index.html +2 -2
  155. package/dist/studio/index.js +2852 -2852
  156. package/dist/studio/index.js.map +1 -1
  157. package/dist/studio/player.js +2 -2
  158. package/dist/studio/styles.css +1 -1
  159. package/dist/studio/ui.d.ts +2 -1
  160. package/dist/studio/ui.js +1 -1
  161. package/dist/{studio-api-KTRRONOC.js → studio-api-NFJMFAB7.js} +13 -11
  162. package/dist/{studioServer-O6P3TBDJ.js → studioServer-TQZVCIEL.js} +51 -50
  163. package/dist/{synthesize-K62TIZWI.js → synthesize-77PTU6C5.js} +6 -6
  164. package/dist/{system-3BTZGJNK.js → system-ZWIBWWE6.js} +6 -6
  165. package/dist/{telemetry-G4QOG4OF.js → telemetry-63L2ORO3.js} +9 -9
  166. package/dist/templates/_shared/AGENTS.md +2 -0
  167. package/dist/templates/_shared/CLAUDE.md +2 -0
  168. package/dist/{timeline-JS5QNPLA.js → timeline-QKZQL5DJ.js} +18 -18
  169. package/dist/{tokens-JKLDRW7A.js → tokens-ELK62U4A.js} +2 -2
  170. package/dist/{transcribe-HC35FL6W.js → transcribe-OSK7HEOJ.js} +9 -9
  171. package/dist/{transcribe-CP6ZCDVR.js → transcribe-VKSXTM7K.js} +80 -24
  172. package/dist/{tts-P3LIPIL5.js → tts-FU35O6YB.js} +3 -3
  173. package/dist/{updateCheck-L2UJCCL4.js → updateCheck-PM4FEI7P.js} +2 -2
  174. package/dist/{upgrade-NW7YFVUM.js → upgrade-G635QCNO.js} +2 -2
  175. package/dist/{urlDownloader-A5TT3AFE.js → urlDownloader-MVYQTP73.js} +5 -5
  176. package/dist/{validate-D3ZH3JQ7.js → validate-AZTMI3HR.js} +16 -16
  177. package/dist/{video-USXMJDEZ.js → video-H56FK33V.js} +6 -6
  178. package/package.json +1 -1
  179. package/dist/chunk-SRXQEQWZ.js +0 -3742
  180. package/dist/studio/chunk-NM7BXNZ7.js.map +0 -1
  181. package/dist/{chunk-WJFCDDP7.js → chunk-R4QIE6UY.js} +3 -3
  182. /package/dist/studio/{chunk-QRLKWENQ.js.map → chunk-4S3AYCOG.js.map} +0 -0
@@ -13,7 +13,7 @@ import {
13
13
  } from "./chunk-TVCRUG2S.js";
14
14
  import {
15
15
  getFreeDiskMb
16
- } from "./chunk-4AXZWUQ6.js";
16
+ } from "./chunk-MIOBYUXT.js";
17
17
  import {
18
18
  ensureBrowser,
19
19
  findBrowser
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-ZTZA4UWZ.js";
13
13
  import {
14
14
  getSystemMeta
15
- } from "./chunk-4AXZWUQ6.js";
15
+ } from "./chunk-MIOBYUXT.js";
16
16
  import {
17
17
  getInvocationId
18
18
  } from "./chunk-54HJ63Q2.js";
@@ -23,7 +23,7 @@ import {
23
23
  evaluateCanary,
24
24
  findCanary,
25
25
  parseCanaryOverride
26
- } from "./chunk-BHOKLX4F.js";
26
+ } from "./chunk-RLNB3JCY.js";
27
27
  import {
28
28
  hostAnswers
29
29
  } from "./chunk-K4WIOZFP.js";
@@ -37,7 +37,7 @@ import {
37
37
  } from "./chunk-XUXGIA7H.js";
38
38
  import {
39
39
  VERSION
40
- } from "./chunk-WFZEW4AC.js";
40
+ } from "./chunk-P75OFLZN.js";
41
41
 
42
42
  // src/telemetry/transport.ts
43
43
  import { spawn } from "child_process";
@@ -4,11 +4,14 @@ import { dirname as __hf_dirname } from "node:path";
4
4
  var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ STUDIO_MANUAL_EDITS_PATH
9
+ } from "./chunk-KC5XXX3X.js";
7
10
  import {
8
11
  firstFrameColourArgs,
9
12
  hdrToSdrToneMapFilter,
10
13
  parseFirstFrameColour
11
- } from "./chunk-BHOKLX4F.js";
14
+ } from "./chunk-RLNB3JCY.js";
12
15
  import {
13
16
  mkdirWithinProject,
14
17
  realProjectRoot,
@@ -21,7 +24,7 @@ import {
21
24
  isUnresolvedAssetPlaceholder,
22
25
  maskNonScannableRanges,
23
26
  resolveLocalAssetCandidates
24
- } from "./chunk-VDQCNWQI.js";
27
+ } from "./chunk-STA43FMY.js";
25
28
  import {
26
29
  findFfBinary
27
30
  } from "./chunk-PJ3HDUCY.js";
@@ -29,9 +32,200 @@ import {
29
32
  rewriteAssetPath
30
33
  } from "./chunk-TQFG7HTI.js";
31
34
 
32
- // ../studio-server/dist/chunk-TTWLTYSQ.js
35
+ // ../studio-server/dist/chunk-4ETS2LXI.js
36
+ var STUDIO_MOTION_PATH = ".hyperframes/studio-motion.json";
37
+ function hasStudioMotionEntries(manifestContent) {
38
+ try {
39
+ const parsed = JSON.parse(manifestContent);
40
+ return Array.isArray(parsed.motions) && parsed.motions.length > 0;
41
+ } catch {
42
+ return false;
43
+ }
44
+ }
45
+ function createStudioMotionRenderBodyScript(manifestContent, options = {}) {
46
+ if (!manifestContent.trim() || !hasStudioMotionEntries(manifestContent)) return null;
47
+ return `(${studioMotionRenderRuntime.toString()})(${JSON.stringify(manifestContent)}, ${JSON.stringify(options.activeCompositionPath ?? null)});`;
48
+ }
49
+ function studioMotionRenderRuntime(manifestContent, activeCompositionPath) {
50
+ const STUDIO_MOTION_TIMELINE_ID = "studio-motion";
51
+ const STUDIO_MOTION_ATTR = "data-hf-studio-motion";
52
+ const ORIGINAL_TRANSFORM_ATTR = "data-hf-studio-motion-original-transform";
53
+ const ORIGINAL_OPACITY_ATTR = "data-hf-studio-motion-original-opacity";
54
+ const ORIGINAL_VISIBILITY_ATTR = "data-hf-studio-motion-original-visibility";
55
+ const objectRecord = (value) => value && typeof value === "object" ? value : null;
56
+ const finiteNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
57
+ const runtimeWindow = window;
58
+ const parseMotionValues = (value) => {
59
+ const record = objectRecord(value);
60
+ if (!record) return null;
61
+ const parsed = {};
62
+ for (const key of ["x", "y", "scale", "rotation", "opacity", "autoAlpha"]) {
63
+ const next = finiteNumber(record[key]);
64
+ if (next != null) parsed[key] = next;
65
+ }
66
+ return Object.keys(parsed).length > 0 ? parsed : null;
67
+ };
68
+ const parseCustomEase = (value) => {
69
+ const record = objectRecord(value);
70
+ if (!record) return null;
71
+ const id = typeof record.id === "string" ? record.id.trim() : "";
72
+ const data = typeof record.data === "string" ? record.data.trim() : "";
73
+ if (!id || !data) return null;
74
+ return { id, data };
75
+ };
76
+ const parsedManifest = (() => {
77
+ try {
78
+ return objectRecord(JSON.parse(manifestContent));
79
+ } catch {
80
+ return null;
81
+ }
82
+ })();
83
+ const manifestMotions = Array.isArray(parsedManifest?.motions) ? parsedManifest.motions : [];
84
+ const sourceFileForElement = (element) => {
85
+ let current = element;
86
+ while (current) {
87
+ const sourceFile = current.getAttribute("data-composition-file") ?? current.getAttribute("data-composition-src");
88
+ if (sourceFile) return sourceFile;
89
+ current = current.parentElement;
90
+ }
91
+ return activeCompositionPath ?? "index.html";
92
+ };
93
+ const elementMatchesSourceFile = (element, sourceFile) => sourceFileForElement(element) === sourceFile;
94
+ const isHTMLElement = (element) => element instanceof HTMLElement;
95
+ const querySelectorCandidates = (selector) => {
96
+ const className = selector.match(/^\.([A-Za-z0-9_-]+)$/)?.[1];
97
+ if (className) {
98
+ return Array.from(document.getElementsByTagName("*")).filter(
99
+ (element) => isHTMLElement(element) && element.classList.contains(className)
100
+ );
101
+ }
102
+ if (/^[A-Za-z][A-Za-z0-9-]*$/.test(selector)) {
103
+ return Array.from(document.getElementsByTagName(selector)).filter(isHTMLElement);
104
+ }
105
+ return Array.from(document.querySelectorAll(selector)).filter(isHTMLElement);
106
+ };
107
+ const resolveTarget = (targetRecord) => {
108
+ const sourceFile = typeof targetRecord.sourceFile === "string" ? targetRecord.sourceFile : "";
109
+ if (!sourceFile) return null;
110
+ const id = typeof targetRecord.id === "string" ? targetRecord.id : "";
111
+ if (id) {
112
+ const byId = document.getElementById(id);
113
+ if (isHTMLElement(byId) && elementMatchesSourceFile(byId, sourceFile)) return byId;
114
+ }
115
+ const selector = typeof targetRecord.selector === "string" ? targetRecord.selector : "";
116
+ if (!selector) return null;
117
+ try {
118
+ const selectorIndex = Math.max(0, Math.floor(finiteNumber(targetRecord.selectorIndex) ?? 0));
119
+ return querySelectorCandidates(selector).filter(
120
+ (element) => elementMatchesSourceFile(element, sourceFile)
121
+ )[selectorIndex] ?? null;
122
+ } catch {
123
+ return null;
124
+ }
125
+ };
126
+ const restoreElement = (element) => {
127
+ runtimeWindow.gsap?.set?.(element, { clearProps: "transform,opacity,visibility" });
128
+ element.style.transform = element.getAttribute(ORIGINAL_TRANSFORM_ATTR) ?? "";
129
+ element.style.opacity = element.getAttribute(ORIGINAL_OPACITY_ATTR) ?? "";
130
+ element.style.visibility = element.getAttribute(ORIGINAL_VISIBILITY_ATTR) ?? "";
131
+ element.removeAttribute(STUDIO_MOTION_ATTR);
132
+ element.removeAttribute(ORIGINAL_TRANSFORM_ATTR);
133
+ element.removeAttribute(ORIGINAL_OPACITY_ATTR);
134
+ element.removeAttribute(ORIGINAL_VISIBILITY_ATTR);
135
+ };
136
+ const restoreStudioMotionElements = () => {
137
+ for (const element of Array.from(document.querySelectorAll(`[${STUDIO_MOTION_ATTR}]`))) {
138
+ if (isHTMLElement(element)) restoreElement(element);
139
+ }
140
+ };
141
+ const readCurrentTime = () => {
142
+ try {
143
+ const playerTime = runtimeWindow.__player?.getTime?.();
144
+ if (typeof playerTime === "number" && Number.isFinite(playerTime)) {
145
+ return Math.max(0, playerTime);
146
+ }
147
+ } catch {
148
+ }
149
+ try {
150
+ const timelineTime = runtimeWindow.__timeline?.time?.();
151
+ if (typeof timelineTime === "number" && Number.isFinite(timelineTime)) {
152
+ return Math.max(0, timelineTime);
153
+ }
154
+ } catch {
155
+ }
156
+ return 0;
157
+ };
158
+ const resolveEase = (motion) => {
159
+ const fallback = typeof motion.ease === "string" && motion.ease.trim() ? motion.ease.trim() : "none";
160
+ const customEase = parseCustomEase(motion.customEase);
161
+ const customEasePlugin = runtimeWindow.CustomEase;
162
+ if (!customEase || typeof customEasePlugin?.create !== "function") return fallback;
163
+ try {
164
+ runtimeWindow.gsap?.registerPlugin?.(customEasePlugin);
165
+ customEasePlugin.create(customEase.id, customEase.data);
166
+ return customEase.id;
167
+ } catch {
168
+ return fallback;
169
+ }
170
+ };
171
+ const applyManifest = () => {
172
+ runtimeWindow.__timelines = runtimeWindow.__timelines ?? {};
173
+ runtimeWindow.__timelines[STUDIO_MOTION_TIMELINE_ID]?.kill?.();
174
+ delete runtimeWindow.__timelines[STUDIO_MOTION_TIMELINE_ID];
175
+ restoreStudioMotionElements();
176
+ const gsap = runtimeWindow.gsap;
177
+ if (!gsap?.timeline || manifestMotions.length === 0) return 0;
178
+ const timeline = gsap.timeline({ paused: true, defaults: { overwrite: "auto" } });
179
+ let applied = 0;
180
+ for (const motionValue of manifestMotions) {
181
+ const motion = objectRecord(motionValue);
182
+ if (!motion || motion.kind !== "gsap-motion") continue;
183
+ const targetRecord = objectRecord(motion.target);
184
+ if (!targetRecord) continue;
185
+ const target = resolveTarget(targetRecord);
186
+ if (!target || typeof timeline.fromTo !== "function") continue;
187
+ const start = finiteNumber(motion.start);
188
+ const duration = finiteNumber(motion.duration);
189
+ if (start == null || duration == null || start < 0 || duration <= 0) continue;
190
+ const from = parseMotionValues(motion.from);
191
+ const to = parseMotionValues(motion.to);
192
+ if (!from || !to) continue;
193
+ if (!target.hasAttribute(STUDIO_MOTION_ATTR)) {
194
+ target.setAttribute(ORIGINAL_TRANSFORM_ATTR, target.style.transform);
195
+ target.setAttribute(ORIGINAL_OPACITY_ATTR, target.style.opacity);
196
+ target.setAttribute(ORIGINAL_VISIBILITY_ATTR, target.style.visibility);
197
+ }
198
+ target.setAttribute(STUDIO_MOTION_ATTR, "true");
199
+ timeline.fromTo(
200
+ target,
201
+ from,
202
+ { ...to, duration, ease: resolveEase(motion), overwrite: "auto", immediateRender: false },
203
+ start
204
+ );
205
+ applied += 1;
206
+ }
207
+ if (applied === 0) {
208
+ timeline.kill?.();
209
+ return 0;
210
+ }
211
+ runtimeWindow.__timelines[STUDIO_MOTION_TIMELINE_ID] = timeline;
212
+ timeline.pause?.();
213
+ const currentTime = readCurrentTime();
214
+ if (typeof timeline.totalTime === "function") timeline.totalTime(currentTime, false);
215
+ else timeline.time?.(currentTime);
216
+ return applied;
217
+ };
218
+ runtimeWindow.__hfStudioMotionApply = applyManifest;
219
+ applyManifest();
220
+ }
221
+
222
+ // ../studio-server/dist/chunk-DTKK7TKL.js
33
223
  import { basename, dirname, isAbsolute, join, relative, sep } from "path";
34
224
  import { readdirSync } from "fs";
225
+ function resolveWithinProject2(base, relativePath) {
226
+ const resolved = resolveWithinProject(base, relativePath);
227
+ return resolved && !isPrivateProjectFile(base, resolved) ? resolved : null;
228
+ }
35
229
  function realFilePath(filePath) {
36
230
  try {
37
231
  return realpath(filePath);
@@ -40,8 +234,20 @@ function realFilePath(filePath) {
40
234
  return dir === filePath ? filePath : join(realFilePath(dir), basename(filePath));
41
235
  }
42
236
  }
237
+ var STUDIO_FILES = /* @__PURE__ */ new Set([STUDIO_MOTION_PATH, STUDIO_MANUAL_EDITS_PATH]);
238
+ var STUDIO_FOLDERS = [".hyperframes/prepared-assets", ".hyperframes/requests"];
239
+ function isPrivateProjectPath(relPath) {
240
+ const path = relPath.toLowerCase();
241
+ return (path === ".hyperframes" || path.startsWith(".hyperframes/")) && !STUDIO_FILES.has(path) && !STUDIO_FOLDERS.some((folder) => path === folder || path.startsWith(`${folder}/`));
242
+ }
243
+ function isPrivateProjectFile(projectDir, filePath) {
244
+ const rel = (from, to) => relative(from, to).split(sep).join("/");
245
+ return [rel(projectDir, filePath), rel(realFilePath(projectDir), realFilePath(filePath))].some(
246
+ isPrivateProjectPath
247
+ );
248
+ }
43
249
  function pinWithinProject(base, relativePath) {
44
- const checked = resolveWithinProject(base, relativePath);
250
+ const checked = resolveWithinProject2(base, relativePath);
45
251
  if (!checked) return null;
46
252
  const inside = relative(realFilePath(base), realFilePath(checked));
47
253
  const escapes = inside === ".." || inside.startsWith(`..${sep}`) || isAbsolute(inside);
@@ -84,7 +290,7 @@ function walkDir(dir, prefix = "") {
84
290
  return files;
85
291
  }
86
292
 
87
- // ../studio-server/dist/chunk-I3DRHG52.js
293
+ // ../studio-server/dist/chunk-74JVVCWL.js
88
294
  import { existsSync, statSync } from "fs";
89
295
  import { relative as relative2, resolve, sep as sep2 } from "path";
90
296
  import { execFile } from "child_process";
@@ -390,7 +596,7 @@ async function scanProjectMediaCodecMap(projectDir, htmlSources, options = {}) {
390
596
  return map;
391
597
  }
392
598
 
393
- // ../studio-server/dist/chunk-YOBWV2CY.js
599
+ // ../studio-server/dist/chunk-6RFZWPPN.js
394
600
  import { spawn } from "child_process";
395
601
  import { createHash, randomUUID } from "crypto";
396
602
  import { existsSync as existsSync2, renameSync, statSync as statSync2, unlinkSync as unlinkSync2, utimesSync } from "fs";
@@ -830,7 +1036,12 @@ async function resolveProxy(projectDir, absoluteSourcePath, variant = "h264") {
830
1036
  }
831
1037
 
832
1038
  export {
1039
+ STUDIO_MOTION_PATH,
1040
+ createStudioMotionRenderBodyScript,
1041
+ resolveWithinProject2 as resolveWithinProject,
833
1042
  realFilePath,
1043
+ isPrivateProjectPath,
1044
+ isPrivateProjectFile,
834
1045
  pinWithinProject,
835
1046
  isInHiddenOrVendorDir,
836
1047
  walkDir,
@@ -23,22 +23,32 @@ function removePartialFile(path) {
23
23
  } catch {
24
24
  }
25
25
  }
26
- function enforceByteLimit(maxBytes) {
27
- let received = 0;
28
- return new Transform({
26
+ function measureDownload(options, contentLength) {
27
+ const length = Number(contentLength);
28
+ const totalBytes = Number.isSafeInteger(length) && length >= 0 ? length : null;
29
+ let receivedBytes = 0;
30
+ let reportedAt = Date.now();
31
+ options.onProgress?.(0, totalBytes);
32
+ const stream = new Transform({
29
33
  transform(chunk, _encoding, callback) {
30
- received += chunk.byteLength;
31
- callback(
32
- received > maxBytes ? new Error(`Download exceeded ${maxBytes} bytes`) : null,
33
- chunk
34
- );
34
+ receivedBytes += chunk.byteLength;
35
+ if (options.maxBytes !== void 0 && receivedBytes > options.maxBytes) {
36
+ callback(new Error(`Download exceeded ${options.maxBytes} bytes`));
37
+ return;
38
+ }
39
+ const now = Date.now();
40
+ if (now - reportedAt >= 100) {
41
+ options.onProgress?.(receivedBytes, totalBytes);
42
+ reportedAt = now;
43
+ }
44
+ callback(null, chunk);
35
45
  }
36
46
  });
47
+ return { stream, complete: () => options.onProgress?.(receivedBytes, totalBytes) };
37
48
  }
38
49
  function downloadFile(url, dest, options = {}) {
39
50
  const tmp = `${dest}.${process.pid}.${randomUUID()}.tmp`;
40
51
  const timeoutMs = options.timeoutMs ?? DEFAULT_DOWNLOAD_TIMEOUT_MS;
41
- const maxBytes = options.maxBytes;
42
52
  return new Promise((resolve, reject) => {
43
53
  const follow = (u, hops = 0) => {
44
54
  let activeResponse;
@@ -75,11 +85,13 @@ function downloadFile(url, dest, options = {}) {
75
85
  reject(new Error(`Download failed: HTTP ${res.statusCode}`));
76
86
  return;
77
87
  }
88
+ const meter = measureDownload(options, res.headers["content-length"]);
78
89
  const file = createWriteStream(tmp);
79
90
  responsePipelineStarted = true;
80
- const transfer = maxBytes === void 0 ? pipeline(res, file) : pipeline(res, enforceByteLimit(maxBytes), file);
91
+ const transfer = pipeline(res, meter.stream, file);
81
92
  transfer.then(() => {
82
93
  renameSync(tmp, dest);
94
+ meter.complete();
83
95
  resolve();
84
96
  }).catch((err) => {
85
97
  removePartialFile(tmp);
@@ -8,16 +8,16 @@ import {
8
8
  flush,
9
9
  shouldTrack,
10
10
  trackEvent
11
- } from "./chunk-CG6OUDMX.js";
11
+ } from "./chunk-VR5UQWGV.js";
12
12
  import {
13
13
  getPowerState
14
- } from "./chunk-4AXZWUQ6.js";
14
+ } from "./chunk-MIOBYUXT.js";
15
15
  import {
16
16
  CliRuntimeError
17
17
  } from "./chunk-PBN6GBJE.js";
18
18
  import {
19
19
  redactTelemetryString
20
- } from "./chunk-BHOKLX4F.js";
20
+ } from "./chunk-RLNB3JCY.js";
21
21
  import {
22
22
  readConfig
23
23
  } from "./chunk-XUXGIA7H.js";
@@ -1278,7 +1278,7 @@ async function withFigmaErrors(command, fn) {
1278
1278
  } catch (err) {
1279
1279
  if (err instanceof Error) {
1280
1280
  try {
1281
- const { trackCommandFailure } = await import("./events-2LS5WRYL.js");
1281
+ const { trackCommandFailure } = await import("./events-RCGWL4LI.js");
1282
1282
  trackCommandFailure(
1283
1283
  command,
1284
1284
  err,
@@ -8,7 +8,7 @@ import {
8
8
  DEFAULT_REGISTRY_URL,
9
9
  fetchItemManifest,
10
10
  fetchRegistryManifest
11
- } from "./chunk-RTURM45Q.js";
11
+ } from "./chunk-KRLYIT22.js";
12
12
 
13
13
  // src/registry/resolver.ts
14
14
  function defaultWarn(message) {
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-ISN5GRYI.js";
18
18
  import {
19
19
  VERSION
20
- } from "./chunk-WFZEW4AC.js";
20
+ } from "./chunk-P75OFLZN.js";
21
21
 
22
22
  // src/utils/updateCheck.ts
23
23
  import { existsSync, readFileSync } from "fs";
@@ -6,34 +6,36 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  redactHome
9
- } from "./chunk-V32SGDX7.js";
9
+ } from "./chunk-JCRJBB4E.js";
10
10
  import "./chunk-Z27A7NUB.js";
11
11
  import "./chunk-5ETJX6WM.js";
12
12
  import {
13
13
  loadProducer
14
- } from "./chunk-527WRFUQ.js";
14
+ } from "./chunk-FSSMOTMS.js";
15
+ import "./chunk-3DKN5WKL.js";
16
+ import {
17
+ formatBytes
18
+ } from "./chunk-IHFUKJOR.js";
15
19
  import {
16
20
  DEFAULT_HISTORY_ROOT,
17
21
  listProjectHistories,
18
22
  pruneGoneProjectHistories
19
- } from "./chunk-FTR6KLIG.js";
20
- import "./chunk-GK5W3SIJ.js";
21
- import "./chunk-EOVYQ3IG.js";
22
- import "./chunk-37EDNWLQ.js";
23
+ } from "./chunk-GJGVYREG.js";
24
+ import "./chunk-R6C6URKB.js";
25
+ import "./chunk-ASPTQ6DT.js";
23
26
  import {
24
27
  CACHE_DIR_NAME,
25
28
  cleanupProxyCache
26
- } from "./chunk-RVG35AL2.js";
27
- import {
28
- formatBytes
29
- } from "./chunk-IHFUKJOR.js";
30
- import "./chunk-BWJ27MQP.js";
29
+ } from "./chunk-W3KQCJVP.js";
30
+ import "./chunk-EOVYQ3IG.js";
31
+ import "./chunk-UUMK6VME.js";
32
+ import "./chunk-6BEFEWFB.js";
31
33
  import "./chunk-TVCRUG2S.js";
32
34
  import "./chunk-374QQGBQ.js";
33
35
  import {
34
36
  c
35
37
  } from "./chunk-ZTZA4UWZ.js";
36
- import "./chunk-4AXZWUQ6.js";
38
+ import "./chunk-MIOBYUXT.js";
37
39
  import "./chunk-AMKC3AXA.js";
38
40
  import {
39
41
  defineCommand
@@ -48,18 +50,18 @@ import {
48
50
  directorySizeBytes,
49
51
  gcExtractionCache,
50
52
  resolveExtractCacheDir
51
- } from "./chunk-N3KRRPL7.js";
52
- import "./chunk-BHOKLX4F.js";
53
+ } from "./chunk-7Y5SMPRV.js";
54
+ import "./chunk-RLNB3JCY.js";
53
55
  import "./chunk-OZUQF4NB.js";
54
56
  import "./chunk-DPVXBVLL.js";
55
- import "./chunk-PGFP4FLW.js";
56
- import "./chunk-SRXQEQWZ.js";
57
+ import "./chunk-P5WDMFBB.js";
58
+ import "./chunk-UINDCCO7.js";
57
59
  import "./chunk-VC76R6W2.js";
58
60
  import "./chunk-OFQWTKPW.js";
59
61
  import "./chunk-4PFZPP2N.js";
60
62
  import "./chunk-LCSMOLGX.js";
61
63
  import "./chunk-TWWSYAKJ.js";
62
- import "./chunk-VDQCNWQI.js";
64
+ import "./chunk-STA43FMY.js";
63
65
  import "./chunk-HBBJFK6I.js";
64
66
  import "./chunk-PJ3HDUCY.js";
65
67
  import "./chunk-TQFG7HTI.js";
@@ -67,15 +69,13 @@ import "./chunk-GK4AIFIH.js";
67
69
  import "./chunk-2PSPARWP.js";
68
70
  import {
69
71
  withMeta
70
- } from "./chunk-CYG3HXBE.js";
72
+ } from "./chunk-YNBXJWSD.js";
71
73
  import "./chunk-K4WIOZFP.js";
72
74
  import "./chunk-XUXGIA7H.js";
73
75
  import "./chunk-WERLJGIC.js";
74
76
  import "./chunk-ISN5GRYI.js";
75
- import "./chunk-WFZEW4AC.js";
77
+ import "./chunk-P75OFLZN.js";
76
78
  import "./chunk-KNU5COPB.js";
77
- import "./chunk-XT5P4QMO.js";
78
- import "./chunk-6BEFEWFB.js";
79
79
  import "./chunk-3GXQPCJC.js";
80
80
  import "./chunk-RQVDTPGD.js";
81
81
  import "./chunk-PMRBLBUP.js";