hyperframes 0.8.121 → 0.8.122

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 (170) hide show
  1. package/dist/{add-CGDIT7CT.js → add-UDNFUHR7.js} +16 -16
  2. package/dist/{animatedGifPrep-KPT5VB5Q.js → animatedGifPrep-2EXOFDLI.js} +7 -7
  3. package/dist/{asset-6ZAZIWA7.js → asset-YFEFDXZV.js} +2 -2
  4. package/dist/{assetCataloger-FWWCXIEX.js → assetCataloger-NDJSFPJN.js} +3 -3
  5. package/dist/{auth-W4WZ5KT2.js → auth-22YSZLEK.js} +2 -2
  6. package/dist/{autoUpdate-2KRUUCM2.js → autoUpdate-4OUJ7O3D.js} +2 -2
  7. package/dist/{backgroundChecks-M7YRL5G3.js → backgroundChecks-FP5AP654.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-2HXYPO62.js → batchRender-ZXQVHWED.js} +4 -4
  10. package/dist/{beats-KXLHRYXV.js → beats-AML5JHGX.js} +13 -13
  11. package/dist/{benchmark-TZRC6JEE.js → benchmark-6LELU6ZT.js} +13 -13
  12. package/dist/{browser-KFCZEHSG.js → browser-5NUYM6P2.js} +10 -10
  13. package/dist/{bundleWithLocalizedFonts-3RRACCEV.js → bundleWithLocalizedFonts-TSGE3UAO.js} +2 -2
  14. package/dist/{capture-N25LJPGM.js → capture-33BJRABG.js} +2 -2
  15. package/dist/{capture-3L7VTWDG.js → capture-HFYBSASN.js} +10 -10
  16. package/dist/{catalog-OJK3RAMA.js → catalog-KZ2PUXHS.js} +16 -16
  17. package/dist/{check-DUQ2OHRX.js → check-RJQIUSVM.js} +33 -34
  18. package/dist/{checkBrowser-XHNFT3DB.js → checkBrowser-QQZCRUSY.js} +32 -33
  19. package/dist/{chunk-DISNXEWU.js → chunk-26LWC4RP.js} +2 -2
  20. package/dist/{chunk-SJ64QY5Z.js → chunk-2BMZEUGD.js} +2 -2
  21. package/dist/{chunk-JACPHNUK.js → chunk-2CYCP3AY.js} +1 -1
  22. package/dist/{chunk-S6Y2LOTE.js → chunk-3VG4A22C.js} +1 -1
  23. package/dist/{chunk-VU4KRDRL.js → chunk-5KTDZVF3.js} +1 -1
  24. package/dist/{chunk-7VXU7E5S.js → chunk-74G66BSC.js} +1 -1
  25. package/dist/{chunk-YE5UC4XH.js → chunk-7T6RZSKP.js} +7 -7
  26. package/dist/{chunk-4JC7LDBQ.js → chunk-A6DWJRHP.js} +3 -3
  27. package/dist/{chunk-3WXWL7AY.js → chunk-ABMHBIWX.js} +1 -1
  28. package/dist/{chunk-RYSHGEZL.js → chunk-BGYDTAYR.js} +4 -4
  29. package/dist/{chunk-5OS5XIWZ.js → chunk-C477PVA2.js} +23 -1
  30. package/dist/chunk-C6MUZ4T2.js +3541 -0
  31. package/dist/{chunk-WG4IZWEH.js → chunk-DNIJ7MH6.js} +2 -2
  32. package/dist/{chunk-OWPHLEDI.js → chunk-DQKPTQEA.js} +5 -5
  33. package/dist/{chunk-BN5KOC5O.js → chunk-EB5XYJBZ.js} +1 -1
  34. package/dist/{chunk-JWHQKTVG.js → chunk-EBODC6OT.js} +3 -3
  35. package/dist/{chunk-FSLYPQ5Z.js → chunk-F7MXHGU3.js} +6 -5
  36. package/dist/{chunk-WBRDOH4A.js → chunk-FD5UEKRP.js} +1 -1
  37. package/dist/{chunk-NRTZ2JPC.js → chunk-GA46NF76.js} +1 -1
  38. package/dist/{chunk-YJMQLWG4.js → chunk-J22NAGNW.js} +36 -31
  39. package/dist/{chunk-WW7V2GQJ.js → chunk-JD3C44FP.js} +2 -2
  40. package/dist/{chunk-3DCZIHXE.js → chunk-JQPICVXM.js} +4 -4
  41. package/dist/{chunk-E5XIJTMU.js → chunk-KCJGTEJD.js} +1 -1
  42. package/dist/{chunk-ZUVO6Q5Q.js → chunk-KJHOYQ2T.js} +2 -2
  43. package/dist/{chunk-GPGWCFIA.js → chunk-LQBR4IC7.js} +53 -2
  44. package/dist/{chunk-2XV3S6TA.js → chunk-MOPVB4VL.js} +2 -2
  45. package/dist/{chunk-NITBGIHR.js → chunk-N4RVOW43.js} +2 -2
  46. package/dist/{chunk-44EFU366.js → chunk-NA2DKY3M.js} +12 -14
  47. package/dist/{chunk-MNMD6XLG.js → chunk-NKS75GFI.js} +3 -3
  48. package/dist/{chunk-TRLP3CSL.js → chunk-NSVHO5LZ.js} +6 -5
  49. package/dist/{chunk-2GKO3X7F.js → chunk-NSY245QZ.js} +1 -1
  50. package/dist/{chunk-2LWWIDPZ.js → chunk-NUWXK2NW.js} +1 -1
  51. package/dist/{chunk-XLG5C3XA.js → chunk-OHJGKETC.js} +1 -1
  52. package/dist/{chunk-5PTKFXAS.js → chunk-OQ6HLIYU.js} +13 -11
  53. package/dist/{chunk-NPHNGWJH.js → chunk-OZ4V6VQ2.js} +3 -3
  54. package/dist/{chunk-2CGUG4XK.js → chunk-Q4GCD5WE.js} +11 -9
  55. package/dist/{chunk-IVLJE3VX.js → chunk-QR77QVIT.js} +2 -2
  56. package/dist/{chunk-AA4KEZGW.js → chunk-SSOJUJFQ.js} +1 -1
  57. package/dist/{chunk-KYDM3W7A.js → chunk-TV2LRJVK.js} +2 -2
  58. package/dist/{chunk-6WIWCYD5.js → chunk-UQR6DWPM.js} +3 -3
  59. package/dist/{chunk-LZN67SFR.js → chunk-UUI2OMI7.js} +1 -1
  60. package/dist/{chunk-6Z4E4GBX.js → chunk-VFZICECI.js} +1 -1
  61. package/dist/{chunk-RCNDZEBU.js → chunk-VP4IJ3NC.js} +2 -2
  62. package/dist/{chunk-GF4MOYGU.js → chunk-X6SS5FWY.js} +20 -12
  63. package/dist/{chunk-2C6UJPQS.js → chunk-XIZHC6UO.js} +1 -1
  64. package/dist/{chunk-JREV7WVY.js → chunk-Y6WM6GY3.js} +1 -1
  65. package/dist/{chunk-JWGYWJ5F.js → chunk-ZIPAUKTK.js} +1 -1
  66. package/dist/{chunk-ZBMQOBQK.js → chunk-ZTWFHWRR.js} +1 -1
  67. package/dist/{clean-NH5JTTXP.js → clean-QXMDWVYB.js} +17 -17
  68. package/dist/cli.js +50 -50
  69. package/dist/{cloud-QKM43VWA.js → cloud-WTPVHGBP.js} +4 -4
  70. package/dist/{cloudrun-JQCGTNFP.js → cloudrun-JFN7W6XI.js} +5 -5
  71. package/dist/{compare-2ZOO6GRL.js → compare-CCDZEHTS.js} +27 -28
  72. package/dist/{compiler-WNWCQTI6.js → compiler-DNZFJIKO.js} +7 -3
  73. package/dist/{component-Q5AECWP4.js → component-OSVQHEQJ.js} +3 -3
  74. package/dist/{compositions-KEMPAOSU.js → compositions-CCMN5HAA.js} +12 -12
  75. package/dist/{delete-TWGIIVHU.js → delete-ZE7Z7SDY.js} +2 -2
  76. package/dist/{deterministicFonts-ITMUXWD2.js → deterministicFonts-HHGHYN6V.js} +2 -2
  77. package/dist/{dist-JAOG6MYW.js → dist-RUZFIHUD.js} +1 -1
  78. package/dist/{dist-JGUAVYZS.js → dist-Z7QP5AQY.js} +3 -3
  79. package/dist/{doctor-COVUXJ2H.js → doctor-KKRGCPV3.js} +11 -11
  80. package/dist/{events-PNRVEJOH.js → events-WJKCFVF7.js} +9 -9
  81. package/dist/{events-6K4KG2RC.js → events-YN5EY7O7.js} +10 -10
  82. package/dist/{feedback-YACZS7R7.js → feedback-DHLYWTNU.js} +11 -11
  83. package/dist/{figma-LEEL7JF7.js → figma-KCTT7ELR.js} +3 -3
  84. package/dist/fontLocalizeCli.js +10 -10
  85. package/dist/{get-FX23HBPC.js → get-XCGOGN53.js} +2 -2
  86. package/dist/{gpuPolicy-TCSAVM2S.js → gpuPolicy-J5CPE3TK.js} +7 -7
  87. package/dist/{grade-compare-ENNPIMZX.js → grade-compare-FBX5S77X.js} +27 -28
  88. package/dist/{gsapParserAcorn-FLWABPQM.js → gsapParserAcorn-3Z742FXU.js} +1 -1
  89. package/dist/{help-HNY5LMYR.js → help-6TQVEU2Q.js} +1 -1
  90. package/dist/{history-325KQTJM.js → history-PPDOAO2Z.js} +17 -17
  91. package/dist/hyperframe-runtime.js +54 -54
  92. package/dist/hyperframe.manifest.json +1 -1
  93. package/dist/hyperframe.runtime.iife.js +54 -54
  94. package/dist/hyperframes-player.global.js +1 -1
  95. package/dist/{info-GKPHG3QO.js → info-42EBGTUI.js} +12 -12
  96. package/dist/{init-UYF6SWL7.js → init-SERRMFRH.js} +23 -23
  97. package/dist/{inspect-A6DZG7KU.js → inspect-6TEDC7QZ.js} +28 -29
  98. package/dist/{installer-EY3AB44Q.js → installer-C47R4ZSU.js} +5 -5
  99. package/dist/{keyframes-P62TMLKQ.js → keyframes-BNLMFEWU.js} +19 -18
  100. package/dist/{lambda-HWU6V36S.js → lambda-DGWKFO3L.js} +6 -6
  101. package/dist/{layout-GWF2HD5Z.js → layout-PMYXB4ZJ.js} +28 -29
  102. package/dist/{lint-OBGOECOL.js → lint-DDNL3QQ5.js} +13 -13
  103. package/dist/{lintProject-FDJYTOVM.js → lintProject-MXUZEBDH.js} +1 -1
  104. package/dist/{list-ZOUMRWXQ.js → list-VCELX3BO.js} +2 -2
  105. package/dist/{login-4H6ZVI6D.js → login-WC4YD67C.js} +4 -4
  106. package/dist/{media-treatment-GRBN3MG5.js → media-treatment-4QGIOHQR.js} +13 -13
  107. package/dist/{models-YFTLSJEG.js → models-UTVBFNKD.js} +8 -8
  108. package/dist/{motionShot-7VLC2ULG.js → motionShot-3WDJAW4C.js} +17 -16
  109. package/dist/{normalize-audio-SLBARKVY.js → normalize-audio-ZXESA45N.js} +12 -12
  110. package/dist/{pipeline-WRNKPJZH.js → pipeline-DRXU55OB.js} +7 -7
  111. package/dist/{play-PDEXRHV6.js → play-AUEOCKY3.js} +22 -22
  112. package/dist/{preflight-6TUK6Z7A.js → preflight-OJJZVHWE.js} +8 -8
  113. package/dist/{present-UXWOO2YL.js → present-7JZQMSSU.js} +18 -18
  114. package/dist/{preview-CWHCNYYZ.js → preview-3AMXHHVS.js} +18 -18
  115. package/dist/{producer-WDTJSNXK.js → producer-QI55RCFB.js} +1 -1
  116. package/dist/{projectConfig-DBP5POAQ.js → projectConfig-EJNHN452.js} +7 -7
  117. package/dist/{publication-SUAGUL5G.js → publication-SH4OD64P.js} +3 -3
  118. package/dist/{publish-CDKO6FSQ.js → publish-2B5LKGKK.js} +9 -9
  119. package/dist/{remove-background-QFMDODZ4.js → remove-background-EJ4SPMBK.js} +8 -8
  120. package/dist/{render-XTI7E22A.js → render-GWIDYUYW.js} +13 -13
  121. package/dist/{render-BYD7ZASF.js → render-JRYEUEAR.js} +24 -26
  122. package/dist/{render-NRNF56OV.js → render-Y4OQV7BU.js} +4 -4
  123. package/dist/{render-batch-L2AIXYA3.js → render-batch-3F43JEX2.js} +4 -4
  124. package/dist/{renderCancellation-XR3W2AQT.js → renderCancellation-WUM56H5O.js} +7 -7
  125. package/dist/renderSetupWorker.js +1 -1
  126. package/dist/{resolver-RYPIAEGU.js → resolver-WHBQ7QFS.js} +5 -5
  127. package/dist/{sherpa-MXQ34FFS.js → sherpa-5OYOKOOP.js} +8 -8
  128. package/dist/skills/media-use/SKILL.md +2 -0
  129. package/dist/skills/media-use/audio/scripts/lib/heygen.mjs +16 -6
  130. package/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +26 -1
  131. package/dist/skills/media-use/audio/scripts/lib/tts.mjs +2 -4
  132. package/dist/skills/media-use/audio/scripts/lib/tts.test.mjs +31 -1
  133. package/dist/skills/media-use/scripts/lib/manifest.d.mts +19 -0
  134. package/dist/skills/media-use/scripts/lib/manifest.mjs +17 -13
  135. package/dist/skills/media-use/scripts/lib/manifest.test.mjs +3 -2
  136. package/dist/{skills-MZQUKPEY.js → skills-JKBN3CQS.js} +12 -12
  137. package/dist/{skillsUpdateCheck-B5F5UR7U.js → skillsUpdateCheck-KUYRATKA.js} +3 -3
  138. package/dist/{snapshot-HPBNWSSK.js → snapshot-M7FF5DBZ.js} +28 -29
  139. package/dist/{src-RNEWLAP6.js → src-7NUMTCMB.js} +9 -9
  140. package/dist/{src-BS6B2UWS.js → src-S7FSBDSO.js} +6 -6
  141. package/dist/{staticProjectServer-B44OD7QD.js → staticProjectServer-AQFAOUJX.js} +16 -16
  142. package/dist/{status-RYS52BAQ.js → status-55DDWDMV.js} +7 -7
  143. package/dist/studio/assets/{hyperframes-player-GkN9yzzq.js → hyperframes-player-DMzBHhbH.js} +1 -1
  144. package/dist/studio/assets/{index-CyFqMHGS.js → index-B-YDp8hN.js} +174 -174
  145. package/dist/studio/assets/{index-BpKhiuzT.js → index-CBRX2eZX.js} +1 -1
  146. package/dist/studio/assets/{index-ByV72rWx.js → index-lyjhSEzi.js} +1 -1
  147. package/dist/studio/{chunk-J6Q572FA.js → chunk-246VB2G3.js} +3 -1
  148. package/dist/studio/chunk-246VB2G3.js.map +1 -0
  149. package/dist/studio/index.d.ts +10 -2
  150. package/dist/studio/index.html +1 -1
  151. package/dist/studio/index.js +416 -301
  152. package/dist/studio/index.js.map +1 -1
  153. package/dist/studio/player.js +1 -1
  154. package/dist/{studio-api-YCS6DZMR.js → studio-api-7RBB3E3E.js} +10 -10
  155. package/dist/{studioServer-AEXETXZ2.js → studioServer-5FPPFWL6.js} +42 -43
  156. package/dist/{system-TD2HPCOA.js → system-BQ72Y6YD.js} +7 -7
  157. package/dist/{telemetry-7KDXFPTK.js → telemetry-OIX76XCZ.js} +10 -10
  158. package/dist/{timeline-P4IMRDIN.js → timeline-JWDLDSVO.js} +17 -17
  159. package/dist/{tokens-HKYWL774.js → tokens-HZKAUSHK.js} +2 -2
  160. package/dist/{transcribe-2E4QY24M.js → transcribe-AQSGSWXV.js} +8 -8
  161. package/dist/{transcribe-UIQMMHXI.js → transcribe-G2HSKAJN.js} +13 -13
  162. package/dist/{updateCheck-KWLMTR35.js → updateCheck-Y6ICSKXS.js} +2 -2
  163. package/dist/{upgrade-E4TMMCGK.js → upgrade-XU35HZ7O.js} +2 -2
  164. package/dist/{urlDownloader-P2EJDWLH.js → urlDownloader-V7FRXT7U.js} +6 -6
  165. package/dist/{validate-IX47WBNJ.js → validate-J2D2ZRPB.js} +17 -18
  166. package/dist/{video-56EQZA6M.js → video-MZPB3UAC.js} +7 -7
  167. package/package.json +1 -1
  168. package/dist/chunk-262C25DQ.js +0 -31
  169. package/dist/chunk-PATLRNZA.js +0 -3541
  170. package/dist/studio/chunk-J6Q572FA.js.map +0 -1
@@ -3,7 +3,12 @@ import assert from "node:assert/strict";
3
3
  import { mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
4
4
  import { tmpdir } from "node:os";
5
5
  import { join } from "node:path";
6
- import { heygenAuthHeaders, heygenAuthMethod, loadEnvFromDir } from "./heygen.mjs";
6
+ import {
7
+ heygenAuthHeaders,
8
+ heygenAuthMethod,
9
+ heygenCredential,
10
+ loadEnvFromDir,
11
+ } from "./heygen.mjs";
7
12
 
8
13
  function withCleanHeygenEnv(fn) {
9
14
  const previousApiKey = process.env.HEYGEN_API_KEY;
@@ -141,3 +146,23 @@ test("heygenAuthMethod returns null when the credentials path is a symlink loop"
141
146
  }
142
147
  });
143
148
  });
149
+
150
+ test("heygenAuthHeaders says to fix an unreadable credentials path, and to log in when there is none", () => {
151
+ withCleanHeygenEnv(() => {
152
+ const dir = mkdtempSync(join(tmpdir(), "heygen-cred-"));
153
+ try {
154
+ process.env.HEYGEN_CONFIG_DIR = dir;
155
+ assert.throws(() => heygenAuthHeaders(), /no HeyGen credentials/);
156
+ mkdirSync(join(dir, "credentials"));
157
+ assert.equal(heygenCredential(), null);
158
+ assert.throws(
159
+ () => heygenAuthHeaders(),
160
+ (error) =>
161
+ error.message.includes(join(dir, "credentials")) &&
162
+ /fix or remove that path/.test(error.message),
163
+ );
164
+ } finally {
165
+ rmSync(dir, { recursive: true, force: true });
166
+ }
167
+ });
168
+ });
@@ -45,10 +45,8 @@ export function pickProvider(userProvider) {
45
45
  throw new Error(
46
46
  "provider=gemini needs GEMINI_API_KEY or GOOGLE_API_KEY, or service-account credentials (GOOGLE_APPLICATION_CREDENTIALS or GCS_CREDS)",
47
47
  );
48
- if (userProvider === "heygen" && !heygenAvailable())
49
- throw new Error(
50
- "provider=heygen but no HeyGen credentials (set $HEYGEN_API_KEY or run `npx hyperframes auth login`)",
51
- );
48
+ // heygenAuthHeaders owns the reason and its fix: no credential, or a credentials path that cannot be read.
49
+ if (userProvider === "heygen" && !heygenAvailable()) heygenAuthHeaders();
52
50
  if (userProvider === "elevenlabs" && !process.env.ELEVENLABS_API_KEY)
53
51
  throw new Error("provider=elevenlabs but $ELEVENLABS_API_KEY is not set");
54
52
  return userProvider;
@@ -1,6 +1,14 @@
1
1
  import { test } from "node:test";
2
2
  import assert from "node:assert/strict";
3
- import { mkdtempSync, readFileSync, writeFileSync, chmodSync, rmSync, existsSync } from "node:fs";
3
+ import {
4
+ mkdirSync,
5
+ mkdtempSync,
6
+ readFileSync,
7
+ writeFileSync,
8
+ chmodSync,
9
+ rmSync,
10
+ existsSync,
11
+ } from "node:fs";
4
12
  import { join, dirname } from "node:path";
5
13
  import { tmpdir } from "node:os";
6
14
  import {
@@ -9,6 +17,7 @@ import {
9
17
  synthesizeOne,
10
18
  synthesizeHeygen,
11
19
  synthResult,
20
+ pickProvider,
12
21
  } from "./tts.mjs";
13
22
 
14
23
  test("parseFfmpegDurationBanner reads ffmpeg's stderr Duration line", () => {
@@ -198,3 +207,24 @@ test(
198
207
  assert.ok(!(await kokoroArgv({})).includes("--speed"));
199
208
  },
200
209
  );
210
+
211
+ test("pickProvider heygen with an unreadable credentials path says to fix that path", () => {
212
+ const saved = ["HEYGEN_API_KEY", "HYPERFRAMES_API_KEY", "HEYGEN_CONFIG_DIR"].map((k) => [
213
+ k,
214
+ process.env[k],
215
+ ]);
216
+ const dir = mkdtempSync(join(tmpdir(), "tts-cred-"));
217
+ try {
218
+ delete process.env.HEYGEN_API_KEY;
219
+ delete process.env.HYPERFRAMES_API_KEY;
220
+ process.env.HEYGEN_CONFIG_DIR = dir;
221
+ mkdirSync(join(dir, "credentials"));
222
+ assert.throws(() => pickProvider("heygen"), /fix or remove that path/);
223
+ } finally {
224
+ for (const [k, v] of saved) {
225
+ if (v === undefined) delete process.env[k];
226
+ else process.env[k] = v;
227
+ }
228
+ rmSync(dir, { recursive: true, force: true });
229
+ }
230
+ });
@@ -0,0 +1,19 @@
1
+ export interface Reservation {
2
+ id: string;
3
+ localPath: string;
4
+ markerPath: string;
5
+ fullPath: string;
6
+ }
7
+
8
+ export function typeDirPath(projectDir: string, type: string): string;
9
+ export function allocateId(
10
+ projectDir: string,
11
+ type: string,
12
+ ext: string,
13
+ ): Omit<Reservation, "fullPath">;
14
+ export function withReservedFileSync<T>(
15
+ projectDir: string,
16
+ type: string,
17
+ ext: string,
18
+ populate: (reservation: Reservation) => T,
19
+ ): T;
@@ -10,6 +10,7 @@ import {
10
10
  rmSync,
11
11
  statSync,
12
12
  } from "node:fs";
13
+ import { randomBytes } from "node:crypto";
13
14
  import { basename, join } from "node:path";
14
15
 
15
16
  const MANIFEST_FILE = "manifest.jsonl";
@@ -202,12 +203,12 @@ function withLock(dir, fn) {
202
203
  }
203
204
  }
204
205
 
205
- // Atomically allocate the next free id for `type` AND reserve its file, so a
206
+ // Atomically allocate the next free id for `type` AND reserve it on disk, so a
206
207
  // slow download/copy between allocation and appendRecord can't let a concurrent
207
208
  // caller grab the same id (the MU-23 clobber). Under the lock we take the max id
208
209
  // across BOTH the manifest and any already-reserved files in the type dir, then
209
- // O_EXCL-create an empty placeholder at the target path; freeze/copy overwrites
210
- // it. Returns { id, localPath }.
210
+ // O_EXCL-create an empty marker under core's atomic temp name, which Studio's
211
+ // project history skips. Returns { id, localPath, markerPath }.
211
212
  export function allocateId(projectDir, type, ext) {
212
213
  mkdirSync(mediaDir(projectDir), { recursive: true });
213
214
  const typeDir = typeDirPath(projectDir, type);
@@ -215,8 +216,10 @@ export function allocateId(projectDir, type, ext) {
215
216
  return withLock(mediaDir(projectDir), () => {
216
217
  const id = nextFreeId(projectDir, type);
217
218
  const localPath = `.media/${typeSubdir(type)}/${id}${ext}`;
218
- writeFileSync(join(projectDir, localPath), "", { flag: "wx" }); // durable reservation
219
- return { id, localPath };
219
+ // Same shape as core atomicTempPath: an empty file at the final name would be committed.
220
+ const markerPath = `${join(projectDir, localPath)}.hf${randomBytes(3).toString("hex")}.tmp`;
221
+ writeFileSync(markerPath, "", { flag: "wx" }); // durable reservation
222
+ return { id, localPath, markerPath };
220
223
  });
221
224
  }
222
225
 
@@ -242,22 +245,23 @@ function reservedFile(projectDir, type, ext) {
242
245
  return { ...allocation, fullPath: join(projectDir, allocation.localPath) };
243
246
  }
244
247
 
245
- function rollbackReservation(reservation) {
246
- rmSync(reservation.fullPath, { force: true });
248
+ function releaseReservation(reservation, committed) {
249
+ if (!committed) rmSync(reservation.fullPath, { force: true });
250
+ rmSync(reservation.markerPath, { force: true });
247
251
  }
248
252
 
249
253
  // A reservation is committed only when populate returns a non-null value.
250
254
  // Throwing/rejecting or returning null means no usable asset was produced, so
251
- // the placeholder must be released. Keeping this transaction beside allocateId
252
- // prevents individual provider/cache/LUT paths from forgetting the rollback.
255
+ // the reservation and any partial asset are released. Keeping this transaction
256
+ // beside allocateId prevents provider/cache/LUT paths from forgetting the rollback.
253
257
  export function withReservedFileSync(projectDir, type, ext, populate) {
254
258
  const reservation = reservedFile(projectDir, type, ext);
255
259
  try {
256
260
  const result = populate(reservation);
257
- if (result == null) rollbackReservation(reservation);
261
+ releaseReservation(reservation, result != null);
258
262
  return result;
259
263
  } catch (error) {
260
- rollbackReservation(reservation);
264
+ releaseReservation(reservation, false);
261
265
  throw error;
262
266
  }
263
267
  }
@@ -266,10 +270,10 @@ export async function withReservedFile(projectDir, type, ext, populate) {
266
270
  const reservation = reservedFile(projectDir, type, ext);
267
271
  try {
268
272
  const result = await populate(reservation);
269
- if (result == null) rollbackReservation(reservation);
273
+ releaseReservation(reservation, result != null);
270
274
  return result;
271
275
  } catch (error) {
272
- rollbackReservation(reservation);
276
+ releaseReservation(reservation, false);
273
277
  throw error;
274
278
  }
275
279
  }
@@ -100,7 +100,7 @@ function runTests() {
100
100
  setup();
101
101
  const allocated = allocateId(tmp, "lut", ".cube");
102
102
  assert.equal(allocated.localPath, ".media/luts/lut_001.cube");
103
- assert.ok(existsSync(join(tmp, allocated.localPath)));
103
+ assert.ok(existsSync(allocated.markerPath));
104
104
  cleanup();
105
105
  });
106
106
 
@@ -157,7 +157,8 @@ function runTests() {
157
157
  setup();
158
158
  const a = allocateId(tmp, "bgm", ".wav");
159
159
  assert.equal(a.id, "bgm_001");
160
- assert.ok(existsSync(join(tmp, a.localPath)), "placeholder reserved on disk");
160
+ assert.ok(existsSync(a.markerPath), "id reserved on disk");
161
+ assert.ok(!existsSync(join(tmp, a.localPath)), "no empty asset at the final name");
161
162
  // Second allocation BEFORE any manifest append (the download window) must not
162
163
  // hand back bgm_001 again, even with a different extension.
163
164
  const b = allocateId(tmp, "bgm", ".mp3");
@@ -9,15 +9,15 @@ import {
9
9
  } from "./chunk-WMQNIQDJ.js";
10
10
  import {
11
11
  trackSkillsInstallSkipped
12
- } from "./chunk-NPHNGWJH.js";
13
- import "./chunk-6WIWCYD5.js";
12
+ } from "./chunk-OZ4V6VQ2.js";
13
+ import "./chunk-UQR6DWPM.js";
14
14
  import {
15
15
  diag
16
16
  } from "./chunk-VWG7OQKU.js";
17
17
  import {
18
18
  c
19
19
  } from "./chunk-ZTZA4UWZ.js";
20
- import "./chunk-BN5KOC5O.js";
20
+ import "./chunk-EB5XYJBZ.js";
21
21
  import "./chunk-AMKC3AXA.js";
22
22
  import {
23
23
  defineCommand
@@ -27,16 +27,16 @@ import {
27
27
  CliResultSignal,
28
28
  setCommandExitCode
29
29
  } from "./chunk-PBN6GBJE.js";
30
- import "./chunk-MNMD6XLG.js";
31
- import "./chunk-RCNDZEBU.js";
32
- import "./chunk-FSLYPQ5Z.js";
30
+ import "./chunk-NKS75GFI.js";
31
+ import "./chunk-VP4IJ3NC.js";
32
+ import "./chunk-F7MXHGU3.js";
33
33
  import "./chunk-DPVXBVLL.js";
34
- import "./chunk-GPGWCFIA.js";
35
- import "./chunk-PATLRNZA.js";
34
+ import "./chunk-LQBR4IC7.js";
35
+ import "./chunk-C6MUZ4T2.js";
36
36
  import "./chunk-VC76R6W2.js";
37
37
  import "./chunk-OFQWTKPW.js";
38
38
  import "./chunk-TWWSYAKJ.js";
39
- import "./chunk-NITBGIHR.js";
39
+ import "./chunk-N4RVOW43.js";
40
40
  import "./chunk-HBBJFK6I.js";
41
41
  import "./chunk-PJ3HDUCY.js";
42
42
  import "./chunk-TQFG7HTI.js";
@@ -51,15 +51,15 @@ import {
51
51
  isCoreSkill,
52
52
  presentSkills,
53
53
  pruneOrphanedLockEntries
54
- } from "./chunk-E5XIJTMU.js";
54
+ } from "./chunk-KCJGTEJD.js";
55
55
  import {
56
56
  withMeta
57
- } from "./chunk-7VXU7E5S.js";
57
+ } from "./chunk-74G66BSC.js";
58
58
  import "./chunk-K4WIOZFP.js";
59
59
  import "./chunk-XUXGIA7H.js";
60
60
  import "./chunk-WERLJGIC.js";
61
61
  import "./chunk-ISN5GRYI.js";
62
- import "./chunk-WG4IZWEH.js";
62
+ import "./chunk-DNIJ7MH6.js";
63
63
  import "./chunk-KNU5COPB.js";
64
64
  import {
65
65
  buildNpxCommand
@@ -9,13 +9,13 @@ import {
9
9
  printSkillsUpdateNotice,
10
10
  refreshSkillsCache,
11
11
  skillsCheckDue
12
- } from "./chunk-E5XIJTMU.js";
13
- import "./chunk-7VXU7E5S.js";
12
+ } from "./chunk-KCJGTEJD.js";
13
+ import "./chunk-74G66BSC.js";
14
14
  import "./chunk-K4WIOZFP.js";
15
15
  import "./chunk-XUXGIA7H.js";
16
16
  import "./chunk-WERLJGIC.js";
17
17
  import "./chunk-ISN5GRYI.js";
18
- import "./chunk-WG4IZWEH.js";
18
+ import "./chunk-DNIJ7MH6.js";
19
19
  import "./chunk-KNU5COPB.js";
20
20
  import "./chunk-M2WBOQ2Q.js";
21
21
  export {
@@ -9,16 +9,16 @@ import {
9
9
  } from "./chunk-KZI44OPA.js";
10
10
  import {
11
11
  serveStaticProjectHtml
12
- } from "./chunk-JWHQKTVG.js";
12
+ } from "./chunk-EBODC6OT.js";
13
13
  import {
14
14
  formatLintFindings
15
15
  } from "./chunk-6CSYCFQV.js";
16
16
  import "./chunk-XUHOIDKG.js";
17
17
  import "./chunk-X7MTZ4T2.js";
18
- import "./chunk-ZUVO6Q5Q.js";
18
+ import "./chunk-KJHOYQ2T.js";
19
19
  import {
20
20
  resolveProject
21
- } from "./chunk-WBRDOH4A.js";
21
+ } from "./chunk-FD5UEKRP.js";
22
22
  import {
23
23
  DEFAULT_ZOOM_SCALE,
24
24
  captureRegionCrop,
@@ -27,29 +27,28 @@ import {
27
27
  resolveCropRegion,
28
28
  runFfmpegOnce,
29
29
  seekCompositionTimeline
30
- } from "./chunk-2CGUG4XK.js";
30
+ } from "./chunk-Q4GCD5WE.js";
31
31
  import "./chunk-5Z63TBTX.js";
32
- import "./chunk-S6Y2LOTE.js";
33
- import "./chunk-262C25DQ.js";
34
- import "./chunk-5OS5XIWZ.js";
32
+ import "./chunk-3VG4A22C.js";
33
+ import "./chunk-C477PVA2.js";
35
34
  import "./chunk-YEIFI443.js";
36
35
  import "./chunk-IHFUKJOR.js";
37
- import "./chunk-YJMQLWG4.js";
38
- import "./chunk-3DCZIHXE.js";
36
+ import "./chunk-J22NAGNW.js";
37
+ import "./chunk-JQPICVXM.js";
39
38
  import "./chunk-EOVYQ3IG.js";
40
- import "./chunk-JREV7WVY.js";
41
- import "./chunk-SJ64QY5Z.js";
39
+ import "./chunk-Y6WM6GY3.js";
40
+ import "./chunk-2BMZEUGD.js";
42
41
  import {
43
42
  resolveLocalBrowserGpuMode
44
- } from "./chunk-6Z4E4GBX.js";
43
+ } from "./chunk-VFZICECI.js";
45
44
  import "./chunk-PFCFR3KZ.js";
46
- import "./chunk-3WXWL7AY.js";
45
+ import "./chunk-ABMHBIWX.js";
47
46
  import "./chunk-XT7X6QCP.js";
48
47
  import "./chunk-4YYJOFKS.js";
49
48
  import "./chunk-HVW7ABXD.js";
50
- import "./chunk-JACPHNUK.js";
51
- import "./chunk-KYDM3W7A.js";
52
- import "./chunk-ZBMQOBQK.js";
49
+ import "./chunk-2CYCP3AY.js";
50
+ import "./chunk-TV2LRJVK.js";
51
+ import "./chunk-ZTWFHWRR.js";
53
52
  import "./chunk-AWDFDFI3.js";
54
53
  import "./chunk-P6LJ4Y32.js";
55
54
  import "./chunk-GMECXFAN.js";
@@ -58,14 +57,14 @@ import {
58
57
  findFFprobe,
59
58
  getFFmpegInstallHint
60
59
  } from "./chunk-TVCRUG2S.js";
61
- import "./chunk-TRLP3CSL.js";
62
- import "./chunk-NPHNGWJH.js";
63
- import "./chunk-6WIWCYD5.js";
60
+ import "./chunk-NSVHO5LZ.js";
61
+ import "./chunk-OZ4V6VQ2.js";
62
+ import "./chunk-UQR6DWPM.js";
64
63
  import "./chunk-VWG7OQKU.js";
65
64
  import {
66
65
  c
67
66
  } from "./chunk-ZTZA4UWZ.js";
68
- import "./chunk-BN5KOC5O.js";
67
+ import "./chunk-EB5XYJBZ.js";
69
68
  import "./chunk-AMKC3AXA.js";
70
69
  import {
71
70
  defineCommand
@@ -76,19 +75,19 @@ import {
76
75
  } from "./chunk-PBN6GBJE.js";
77
76
  import "./chunk-KC5XXX3X.js";
78
77
  import "./chunk-TJSTGSAW.js";
79
- import "./chunk-MNMD6XLG.js";
78
+ import "./chunk-NKS75GFI.js";
80
79
  import {
81
80
  isClipVisibleAt,
82
81
  isInClipWindow
83
- } from "./chunk-RCNDZEBU.js";
84
- import "./chunk-FSLYPQ5Z.js";
82
+ } from "./chunk-VP4IJ3NC.js";
83
+ import "./chunk-F7MXHGU3.js";
85
84
  import "./chunk-DPVXBVLL.js";
86
- import "./chunk-GPGWCFIA.js";
85
+ import "./chunk-LQBR4IC7.js";
87
86
  import {
88
87
  readElementRateSpec,
89
88
  sourceTimeAt,
90
89
  timeAtSourceTime
91
- } from "./chunk-PATLRNZA.js";
90
+ } from "./chunk-C6MUZ4T2.js";
92
91
  import "./chunk-VC76R6W2.js";
93
92
  import "./chunk-OFQWTKPW.js";
94
93
  import {
@@ -101,7 +100,7 @@ import {
101
100
  import "./chunk-TWWSYAKJ.js";
102
101
  import {
103
102
  lintProject
104
- } from "./chunk-NITBGIHR.js";
103
+ } from "./chunk-N4RVOW43.js";
105
104
  import "./chunk-HBBJFK6I.js";
106
105
  import "./chunk-PJ3HDUCY.js";
107
106
  import "./chunk-TQFG7HTI.js";
@@ -111,7 +110,7 @@ import "./chunk-K4WIOZFP.js";
111
110
  import "./chunk-XUXGIA7H.js";
112
111
  import "./chunk-WERLJGIC.js";
113
112
  import "./chunk-ISN5GRYI.js";
114
- import "./chunk-WG4IZWEH.js";
113
+ import "./chunk-DNIJ7MH6.js";
115
114
  import {
116
115
  normalizeErrorMessage
117
116
  } from "./chunk-KNU5COPB.js";
@@ -364,7 +363,7 @@ function computeSnapshotTimes(duration, opts) {
364
363
  return { times: times.map(round), appendedTail: false };
365
364
  }
366
365
  async function captureSnapshots(projectDir, opts) {
367
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-3RRACCEV.js");
366
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-TSGE3UAO.js");
368
367
  const numFrames = opts.frames ?? 5;
369
368
  const html = await bundleWithLocalizedFonts(projectDir);
370
369
  const server = await serveStaticProjectHtml(projectDir, html, void 0, [], opts.autoProxy);
@@ -437,7 +436,7 @@ async function captureSnapshots(projectDir, opts) {
437
436
  let syncVideoFrameVisibility = null;
438
437
  let extractMediaMetadata = null;
439
438
  try {
440
- const engine = await import("./src-BS6B2UWS.js");
439
+ const engine = await import("./src-S7FSBDSO.js");
441
440
  injectVideoFramesBatch = engine.injectVideoFramesBatch;
442
441
  syncVideoFrameVisibility = engine.syncVideoFrameVisibility;
443
442
  extractMediaMetadata = engine.extractMediaMetadata;
@@ -67,7 +67,7 @@ import {
67
67
  serializeRenderRequest,
68
68
  startServer,
69
69
  validatePlanV2MaterializedTarget
70
- } from "./chunk-GF4MOYGU.js";
70
+ } from "./chunk-X6SS5FWY.js";
71
71
  import {
72
72
  FONT_FETCH_FAILED,
73
73
  FONT_FETCH_UNAVAILABLE,
@@ -76,9 +76,9 @@ import {
76
76
  createConsoleLogger,
77
77
  defaultLogger,
78
78
  injectDeterministicFontFaces
79
- } from "./chunk-2GKO3X7F.js";
79
+ } from "./chunk-NSY245QZ.js";
80
80
  import "./chunk-32MY4AZN.js";
81
- import "./chunk-DISNXEWU.js";
81
+ import "./chunk-26LWC4RP.js";
82
82
  import "./chunk-KC5XXX3X.js";
83
83
  import "./chunk-TJSTGSAW.js";
84
84
  import "./chunk-BZ56MTDX.js";
@@ -96,18 +96,18 @@ import {
96
96
  isTransientBrowserError,
97
97
  prepareCaptureSessionForReuse,
98
98
  resolveConfig
99
- } from "./chunk-MNMD6XLG.js";
99
+ } from "./chunk-NKS75GFI.js";
100
100
  import {
101
101
  quantizeTimeToFrame
102
- } from "./chunk-RCNDZEBU.js";
103
- import "./chunk-FSLYPQ5Z.js";
102
+ } from "./chunk-VP4IJ3NC.js";
103
+ import "./chunk-F7MXHGU3.js";
104
104
  import "./chunk-DPVXBVLL.js";
105
- import "./chunk-GPGWCFIA.js";
106
- import "./chunk-PATLRNZA.js";
105
+ import "./chunk-LQBR4IC7.js";
106
+ import "./chunk-C6MUZ4T2.js";
107
107
  import "./chunk-VC76R6W2.js";
108
108
  import "./chunk-OFQWTKPW.js";
109
109
  import "./chunk-TWWSYAKJ.js";
110
- import "./chunk-NITBGIHR.js";
110
+ import "./chunk-N4RVOW43.js";
111
111
  import "./chunk-HBBJFK6I.js";
112
112
  import "./chunk-PJ3HDUCY.js";
113
113
  import "./chunk-TQFG7HTI.js";
@@ -212,15 +212,15 @@ import {
212
212
  verifyGpuParity,
213
213
  writeCapturedFrame,
214
214
  writeUrlDownloadTelemetry
215
- } from "./chunk-MNMD6XLG.js";
215
+ } from "./chunk-NKS75GFI.js";
216
216
  import {
217
217
  MEDIA_VISUAL_STYLE_PROPERTIES,
218
218
  quantizeTimeToFrame
219
- } from "./chunk-RCNDZEBU.js";
220
- import "./chunk-FSLYPQ5Z.js";
219
+ } from "./chunk-VP4IJ3NC.js";
220
+ import "./chunk-F7MXHGU3.js";
221
221
  import "./chunk-DPVXBVLL.js";
222
- import "./chunk-GPGWCFIA.js";
223
- import "./chunk-PATLRNZA.js";
222
+ import "./chunk-LQBR4IC7.js";
223
+ import "./chunk-C6MUZ4T2.js";
224
224
  import "./chunk-VC76R6W2.js";
225
225
  import "./chunk-OFQWTKPW.js";
226
226
  import {
@@ -228,7 +228,7 @@ import {
228
228
  } from "./chunk-TWWSYAKJ.js";
229
229
  import {
230
230
  resolveProjectRelativeSrc
231
- } from "./chunk-NITBGIHR.js";
231
+ } from "./chunk-N4RVOW43.js";
232
232
  import "./chunk-HBBJFK6I.js";
233
233
  import {
234
234
  FFMPEG_PATH_ENV,
@@ -6,36 +6,36 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  serveStaticProjectHtml
9
- } from "./chunk-JWHQKTVG.js";
9
+ } from "./chunk-EBODC6OT.js";
10
10
  import "./chunk-XUHOIDKG.js";
11
11
  import "./chunk-X7MTZ4T2.js";
12
- import "./chunk-ZUVO6Q5Q.js";
13
- import "./chunk-YJMQLWG4.js";
14
- import "./chunk-3DCZIHXE.js";
12
+ import "./chunk-KJHOYQ2T.js";
13
+ import "./chunk-J22NAGNW.js";
14
+ import "./chunk-JQPICVXM.js";
15
15
  import "./chunk-EOVYQ3IG.js";
16
- import "./chunk-JREV7WVY.js";
17
- import "./chunk-SJ64QY5Z.js";
18
- import "./chunk-3WXWL7AY.js";
16
+ import "./chunk-Y6WM6GY3.js";
17
+ import "./chunk-2BMZEUGD.js";
18
+ import "./chunk-ABMHBIWX.js";
19
19
  import "./chunk-XT7X6QCP.js";
20
20
  import "./chunk-4YYJOFKS.js";
21
21
  import "./chunk-HVW7ABXD.js";
22
- import "./chunk-JACPHNUK.js";
23
- import "./chunk-KYDM3W7A.js";
24
- import "./chunk-ZBMQOBQK.js";
22
+ import "./chunk-2CYCP3AY.js";
23
+ import "./chunk-TV2LRJVK.js";
24
+ import "./chunk-ZTWFHWRR.js";
25
25
  import "./chunk-AWDFDFI3.js";
26
26
  import "./chunk-P6LJ4Y32.js";
27
27
  import "./chunk-GMECXFAN.js";
28
- import "./chunk-TRLP3CSL.js";
28
+ import "./chunk-NSVHO5LZ.js";
29
29
  import "./chunk-KC5XXX3X.js";
30
30
  import "./chunk-TJSTGSAW.js";
31
- import "./chunk-RCNDZEBU.js";
32
- import "./chunk-FSLYPQ5Z.js";
31
+ import "./chunk-VP4IJ3NC.js";
32
+ import "./chunk-F7MXHGU3.js";
33
33
  import "./chunk-DPVXBVLL.js";
34
- import "./chunk-GPGWCFIA.js";
35
- import "./chunk-PATLRNZA.js";
34
+ import "./chunk-LQBR4IC7.js";
35
+ import "./chunk-C6MUZ4T2.js";
36
36
  import "./chunk-VC76R6W2.js";
37
37
  import "./chunk-OFQWTKPW.js";
38
- import "./chunk-NITBGIHR.js";
38
+ import "./chunk-N4RVOW43.js";
39
39
  import "./chunk-HBBJFK6I.js";
40
40
  import "./chunk-PJ3HDUCY.js";
41
41
  import "./chunk-TQFG7HTI.js";
@@ -24,7 +24,7 @@ import {
24
24
  } from "./chunk-ZTZA4UWZ.js";
25
25
  import {
26
26
  getSystemMeta
27
- } from "./chunk-BN5KOC5O.js";
27
+ } from "./chunk-EB5XYJBZ.js";
28
28
  import "./chunk-AMKC3AXA.js";
29
29
  import {
30
30
  defineCommand
@@ -33,16 +33,16 @@ import {
33
33
  failCommand,
34
34
  setCommandExitCode
35
35
  } from "./chunk-PBN6GBJE.js";
36
- import "./chunk-MNMD6XLG.js";
37
- import "./chunk-RCNDZEBU.js";
38
- import "./chunk-FSLYPQ5Z.js";
36
+ import "./chunk-NKS75GFI.js";
37
+ import "./chunk-VP4IJ3NC.js";
38
+ import "./chunk-F7MXHGU3.js";
39
39
  import "./chunk-DPVXBVLL.js";
40
- import "./chunk-GPGWCFIA.js";
41
- import "./chunk-PATLRNZA.js";
40
+ import "./chunk-LQBR4IC7.js";
41
+ import "./chunk-C6MUZ4T2.js";
42
42
  import "./chunk-VC76R6W2.js";
43
43
  import "./chunk-OFQWTKPW.js";
44
44
  import "./chunk-TWWSYAKJ.js";
45
- import "./chunk-NITBGIHR.js";
45
+ import "./chunk-N4RVOW43.js";
46
46
  import "./chunk-HBBJFK6I.js";
47
47
  import "./chunk-PJ3HDUCY.js";
48
48
  import "./chunk-TQFG7HTI.js";
@@ -1,4 +1,4 @@
1
- var xe=Object.defineProperty;var ke=(r,i,e)=>i in r?xe(r,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[i]=e;var h=(r,i,e)=>ke(r,typeof i!="symbol"?i+"":i,e);import{r as fe,i as Ie,a as w,b as _e,p as Oe,c as Ne,d as Fe,s as Ve,e as ge,F as ye}from"./index-CyFqMHGS.js";function He(r){return r.hasRuntime||r.runtimeInjected?!1:!!(r.hasNestedCompositions||r.hasTimelines&&r.attempts>=5)}function z(r){return typeof r=="object"&&r!==null}function Ue(r){return z(r)&&typeof r.getDuration=="function"}function We(r){return z(r)&&typeof r.duration=="function"&&typeof r.time=="function"&&typeof r.seek=="function"&&typeof r.play=="function"&&typeof r.pause=="function"}function ze(r){if(!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(r))throw new Error(`Invalid HyperFrames runtime version: ${r}`);return`https://cdn.jsdelivr.net/npm/@hyperframes/core@${r}/dist/hyperframe.runtime.iife.js`}const U=typeof __HYPERFRAMES_RUNTIME_CDN_URL__=="string"?__HYPERFRAMES_RUNTIME_CDN_URL__:ze("0.0.0-dev");function $(r){if(r===null)return null;const i=Number.parseInt(r,10);return Number.isFinite(i)&&i>0?i:null}function $e(r){const i=(r==null?void 0:r.querySelector("[data-composition-id][data-width][data-height]"))??(r==null?void 0:r.querySelector("[data-width][data-height]"));if(!i)return null;const e=$(i.getAttribute("data-width")),t=$(i.getAttribute("data-height"));return e!==null&&t!==null?{width:e,height:t}:null}class je{constructor(i,e){h(this,"_interval",null);h(this,"_runtimeInjected",!1);this._iframe=i,this._callbacks=e}get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let i=0;this._interval=setInterval(()=>{var e;i++;try{const t=this._iframe.contentWindow;if(!t)return;const s=!!(t.__hf||t.__player),n=!!(t.__timelines&&Object.keys(t.__timelines).length>0),o=!!((e=this._iframe.contentDocument)!=null&&e.querySelector("[data-composition-src]"));if(He({hasRuntime:s,hasTimelines:n,hasNestedCompositions:o,runtimeInjected:this._runtimeInjected,attempts:i})){this._injectRuntime();return}if(this._runtimeInjected&&!s)return;const a=this._resolvePlaybackDurationAdapter(t);if(a&&a.getDuration()>0){this.stop();const c=$e(this._iframe.contentDocument);this._callbacks.onReady({duration:a.getDuration(),adapter:a,compositionSize:c});return}}catch{}i>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{const i=this._iframe.contentWindow;return i?this._resolveDirectTimelineAdapterFromWindow(i):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(i){return this._resolveDirectTimelineAdapterFromWindow(i)}hasRuntimeBridge(i){return Reflect.get(i,"__hf")!==void 0||z(Reflect.get(i,"__player"))}_injectRuntime(){var i,e;this._runtimeInjected=!0;try{const t=this._iframe.contentDocument;if(!t)return;const s=t.createElement("script");s.src=U,(t.head||t.documentElement).appendChild(s),(e=(i=this._callbacks).onRuntimeInjected)==null||e.call(i)}catch{}}_resolveDirectTimelineAdapterFromWindow(i){var a,c;if(this.hasRuntimeBridge(i))return null;const e=Reflect.get(i,"__timelines");if(!z(e))return null;const t=Object.keys(e);if(t.length===0)return null;const s=(c=(a=this._iframe.contentDocument)==null?void 0:a.querySelector("[data-composition-id]"))==null?void 0:c.getAttribute("data-composition-id"),n=s&&s in e?s:t[t.length-1],o=e[n];return We(o)?o:null}_resolvePlaybackDurationAdapter(i){const e=Reflect.get(i,"__player");if(Ue(e))return{kind:"runtime",getDuration:()=>e.getDuration()};const t=this._resolveDirectTimelineAdapterFromWindow(i);return t?{kind:"direct-timeline",timeline:t,getDuration:()=>t.duration()}:null}}const Be=`
1
+ var xe=Object.defineProperty;var ke=(r,i,e)=>i in r?xe(r,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[i]=e;var h=(r,i,e)=>ke(r,typeof i!="symbol"?i+"":i,e);import{r as fe,i as Ie,a as w,b as _e,p as Oe,c as Ne,d as Fe,s as Ve,e as ge,F as ye}from"./index-B-YDp8hN.js";function He(r){return r.hasRuntime||r.runtimeInjected?!1:!!(r.hasNestedCompositions||r.hasTimelines&&r.attempts>=5)}function z(r){return typeof r=="object"&&r!==null}function Ue(r){return z(r)&&typeof r.getDuration=="function"}function We(r){return z(r)&&typeof r.duration=="function"&&typeof r.time=="function"&&typeof r.seek=="function"&&typeof r.play=="function"&&typeof r.pause=="function"}function ze(r){if(!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(r))throw new Error(`Invalid HyperFrames runtime version: ${r}`);return`https://cdn.jsdelivr.net/npm/@hyperframes/core@${r}/dist/hyperframe.runtime.iife.js`}const U=typeof __HYPERFRAMES_RUNTIME_CDN_URL__=="string"?__HYPERFRAMES_RUNTIME_CDN_URL__:ze("0.0.0-dev");function $(r){if(r===null)return null;const i=Number.parseInt(r,10);return Number.isFinite(i)&&i>0?i:null}function $e(r){const i=(r==null?void 0:r.querySelector("[data-composition-id][data-width][data-height]"))??(r==null?void 0:r.querySelector("[data-width][data-height]"));if(!i)return null;const e=$(i.getAttribute("data-width")),t=$(i.getAttribute("data-height"));return e!==null&&t!==null?{width:e,height:t}:null}class je{constructor(i,e){h(this,"_interval",null);h(this,"_runtimeInjected",!1);this._iframe=i,this._callbacks=e}get runtimeInjected(){return this._runtimeInjected}start(){this.stop(),this._runtimeInjected=!1;let i=0;this._interval=setInterval(()=>{var e;i++;try{const t=this._iframe.contentWindow;if(!t)return;const s=!!(t.__hf||t.__player),n=!!(t.__timelines&&Object.keys(t.__timelines).length>0),o=!!((e=this._iframe.contentDocument)!=null&&e.querySelector("[data-composition-src]"));if(He({hasRuntime:s,hasTimelines:n,hasNestedCompositions:o,runtimeInjected:this._runtimeInjected,attempts:i})){this._injectRuntime();return}if(this._runtimeInjected&&!s)return;const a=this._resolvePlaybackDurationAdapter(t);if(a&&a.getDuration()>0){this.stop();const c=$e(this._iframe.contentDocument);this._callbacks.onReady({duration:a.getDuration(),adapter:a,compositionSize:c});return}}catch{}i>=40&&(this.stop(),this._callbacks.onError("Composition timeline not found after 8s"))},200)}stop(){this._interval!==null&&(clearInterval(this._interval),this._interval=null)}resolveDirectTimelineAdapter(){try{const i=this._iframe.contentWindow;return i?this._resolveDirectTimelineAdapterFromWindow(i):null}catch{return null}}resolveDirectTimelineAdapterFromWindow(i){return this._resolveDirectTimelineAdapterFromWindow(i)}hasRuntimeBridge(i){return Reflect.get(i,"__hf")!==void 0||z(Reflect.get(i,"__player"))}_injectRuntime(){var i,e;this._runtimeInjected=!0;try{const t=this._iframe.contentDocument;if(!t)return;const s=t.createElement("script");s.src=U,(t.head||t.documentElement).appendChild(s),(e=(i=this._callbacks).onRuntimeInjected)==null||e.call(i)}catch{}}_resolveDirectTimelineAdapterFromWindow(i){var a,c;if(this.hasRuntimeBridge(i))return null;const e=Reflect.get(i,"__timelines");if(!z(e))return null;const t=Object.keys(e);if(t.length===0)return null;const s=(c=(a=this._iframe.contentDocument)==null?void 0:a.querySelector("[data-composition-id]"))==null?void 0:c.getAttribute("data-composition-id"),n=s&&s in e?s:t[t.length-1],o=e[n];return We(o)?o:null}_resolvePlaybackDurationAdapter(i){const e=Reflect.get(i,"__player");if(Ue(e))return{kind:"runtime",getDuration:()=>e.getDuration()};const t=this._resolveDirectTimelineAdapterFromWindow(i);return t?{kind:"direct-timeline",timeline:t,getDuration:()=>t.duration()}:null}}const Be=`
2
2
  :host {
3
3
  display: block;
4
4
  position: relative;