hyperframes 0.8.144 → 0.8.146

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 (209) hide show
  1. package/README.md +3 -2
  2. package/dist/{add-CWRTVGDB.js → add-6J4TLUDW.js} +15 -15
  3. package/dist/{animatedGifPrep-JTOHIWI4.js → animatedGifPrep-TPYA45ZZ.js} +10 -10
  4. package/dist/{asset-KU2Z4UFM.js → asset-B4C6ZU4V.js} +2 -2
  5. package/dist/{assetCataloger-3CS2P7PA.js → assetCataloger-GX4B55VB.js} +4 -4
  6. package/dist/{auth-IDSOIQWG.js → auth-T2V3URGO.js} +2 -2
  7. package/dist/{autoUpdate-373B4BA2.js → autoUpdate-O4R7IOYP.js} +2 -2
  8. package/dist/{backgroundChecks-53Q3NAMG.js → backgroundChecks-SQHGZCSH.js} +3 -3
  9. package/dist/backgroundChecksWorker.js +3 -3
  10. package/dist/{batchRender-UKZA6BME.js → batchRender-T7S2CGJE.js} +5 -5
  11. package/dist/{beats-N5JGEOFR.js → beats-RNEXDM7U.js} +16 -16
  12. package/dist/{benchmark-CUN3LN4V.js → benchmark-IVK6FCEU.js} +12 -12
  13. package/dist/{browser-NCZT5AP6.js → browser-WUE6VK2N.js} +5 -5
  14. package/dist/{bundleWithLocalizedFonts-FWC7PE2D.js → bundleWithLocalizedFonts-EEIRL7FT.js} +2 -2
  15. package/dist/{capture-YLS32UHT.js → capture-K3EONGGU.js} +2 -2
  16. package/dist/{capture-QBLG3VJR.js → capture-LEKIGJ4G.js} +13 -13
  17. package/dist/{catalog-HIWNAFHW.js → catalog-IXYQ2KXW.js} +15 -15
  18. package/dist/{catch-up-HGS7KIAC.js → catch-up-IIF7HKR6.js} +6 -6
  19. package/dist/{check-FH6UYYLO.js → check-W7CDOXNP.js} +38 -38
  20. package/dist/{checkBrowser-RNWNOMCZ.js → checkBrowser-5VSXEHBZ.js} +118 -61
  21. package/dist/{chunk-XU5GGV6R.js → chunk-2NAUEDA6.js} +2 -2
  22. package/dist/{chunk-GZM2EFOE.js → chunk-3HSWLZ6S.js} +1 -1
  23. package/dist/{chunk-YUAXFWSQ.js → chunk-4RUILXS6.js} +5 -5
  24. package/dist/{chunk-MXNDKDFT.js → chunk-54UXJKFF.js} +1 -1
  25. package/dist/{chunk-DIRJ322I.js → chunk-66SAATRI.js} +3 -3
  26. package/dist/{chunk-RI53TS2Y.js → chunk-6TTAXMDG.js} +2 -2
  27. package/dist/{chunk-YJXHMIZA.js → chunk-A72OAGNB.js} +6 -6
  28. package/dist/{chunk-G75ENCEZ.js → chunk-AIJS74LG.js} +3 -3
  29. package/dist/{chunk-GEWKFRFI.js → chunk-AJ5R4GM6.js} +1 -1
  30. package/dist/{chunk-3VYNNWVA.js → chunk-BAKPN2D2.js} +101 -94
  31. package/dist/{chunk-3XTEXWNN.js → chunk-CVPWZ5LY.js} +3 -3
  32. package/dist/{chunk-AUBOF2PN.js → chunk-DDNS2674.js} +1 -1
  33. package/dist/{chunk-QFSCCQIR.js → chunk-DMKI64EZ.js} +1 -1
  34. package/dist/{chunk-NOPBBSLA.js → chunk-DUU77E2S.js} +69 -64
  35. package/dist/{chunk-RVFEDAUV.js → chunk-EGO6Z24R.js} +3 -3
  36. package/dist/{chunk-KC5XXX3X.js → chunk-EOOEC32M.js} +1 -1
  37. package/dist/{chunk-2DA2BBNY.js → chunk-ETNQF37F.js} +10 -10
  38. package/dist/{chunk-54QISXOC.js → chunk-FDL4HV44.js} +2 -2
  39. package/dist/{chunk-VYSUZEJG.js → chunk-FJLHVAPO.js} +6 -6
  40. package/dist/{chunk-QZ3AZTXI.js → chunk-FJWEYVEM.js} +42 -16
  41. package/dist/{chunk-EX6C672Y.js → chunk-FKLYMV3U.js} +1 -1
  42. package/dist/{chunk-PUGIRFPX.js → chunk-FMNVTKX2.js} +4 -4
  43. package/dist/{chunk-L5TUCXWR.js → chunk-HBGJYBGE.js} +2 -2
  44. package/dist/{chunk-SLCFKB3Y.js → chunk-HTM4CIFS.js} +11 -8
  45. package/dist/{chunk-T42U2W2R.js → chunk-IXLUTE6N.js} +1 -1
  46. package/dist/{chunk-OUSLVRO4.js → chunk-JBQJKC23.js} +76 -6
  47. package/dist/{chunk-IEIJRMLZ.js → chunk-JDB65PPT.js} +62 -63
  48. package/dist/{chunk-USDEMXXL.js → chunk-JYVGYKXG.js} +1 -1
  49. package/dist/{chunk-P6WH6QTV.js → chunk-K7ES5RSK.js} +1 -1
  50. package/dist/{chunk-LC3RQURJ.js → chunk-KFZUUXUN.js} +3 -3
  51. package/dist/{chunk-OIDN7G42.js → chunk-KG265HQ7.js} +2 -2
  52. package/dist/{chunk-7RAYSCYT.js → chunk-KPJMBC4K.js} +2 -2
  53. package/dist/{chunk-MAYCCGMQ.js → chunk-KVGDFUVO.js} +1 -1
  54. package/dist/{chunk-JEHFZQYT.js → chunk-LE7T4ML7.js} +1 -1
  55. package/dist/{chunk-MQZVBHEY.js → chunk-LFNQDTSH.js} +1 -1
  56. package/dist/{chunk-ZOA2SC4P.js → chunk-MOL32UKR.js} +45 -11
  57. package/dist/{chunk-RG3QWWIE.js → chunk-QSSPIATO.js} +2 -2
  58. package/dist/{chunk-F2SMS24Q.js → chunk-R6R74HNZ.js} +117 -139
  59. package/dist/{chunk-7SDCIWHQ.js → chunk-SYMSKGXI.js} +2 -2
  60. package/dist/{chunk-ZEUONDQG.js → chunk-SYUGVPYH.js} +1 -1
  61. package/dist/{chunk-4OC7MQNB.js → chunk-TBOMPYG6.js} +2 -2
  62. package/dist/{chunk-KFKZ3ISO.js → chunk-TH4OXAWY.js} +1 -1
  63. package/dist/{chunk-4LAR447G.js → chunk-UOBYRLDD.js} +1 -1
  64. package/dist/{chunk-NV4RXIQ7.js → chunk-UZUUVYAO.js} +3 -3
  65. package/dist/{chunk-PJ3HDUCY.js → chunk-VAS6HQX3.js} +39 -9
  66. package/dist/{chunk-LFX2HEYP.js → chunk-VT563F4O.js} +7 -7
  67. package/dist/{chunk-5VMR4WBS.js → chunk-WU2B74TL.js} +363 -103
  68. package/dist/{chunk-5HJ343GH.js → chunk-WUZ6TMAO.js} +1 -1
  69. package/dist/{chunk-GQJZORQP.js → chunk-XBSPQ52S.js} +1 -1
  70. package/dist/{chunk-5WADG7PR.js → chunk-XJUZEB44.js} +1 -1
  71. package/dist/{chunk-I5KY7EZP.js → chunk-XVIYZU3D.js} +1 -1
  72. package/dist/{chunk-XGFHYAYN.js → chunk-Z5C4LEAD.js} +33 -28
  73. package/dist/chunk-Z6FLHIDV.js +3795 -0
  74. package/dist/{chunk-DDIVWXN7.js → chunk-ZFN6GQU4.js} +4 -4
  75. package/dist/{chunk-Y6UPYWJS.js → chunk-ZVZSFDW3.js} +2 -2
  76. package/dist/{chunk-A53CBD24.js → chunk-ZZ7H4IJ6.js} +9 -9
  77. package/dist/{clean-KPX27IKJ.js → clean-2GDD2B4F.js} +23 -23
  78. package/dist/cli.js +52 -52
  79. package/dist/{cloud-P7DAOISN.js → cloud-LUKGDTTE.js} +4 -4
  80. package/dist/{cloudrun-XM56TBOH.js → cloudrun-NQF5KFQI.js} +6 -6
  81. package/dist/{compare-F6YAFZZM.js → compare-4P6O4ONG.js} +32 -32
  82. package/dist/{compiler-JZ4GNFMG.js → compiler-ACCPOZMQ.js} +10 -6
  83. package/dist/{component-3CFOGIQA.js → component-SDDOLNJD.js} +3 -3
  84. package/dist/{compositions-CPCMWF24.js → compositions-P2L6HUVQ.js} +15 -15
  85. package/dist/{delete-GYVKOKB6.js → delete-Q6S4BJ3F.js} +2 -2
  86. package/dist/{deterministicFonts-U2BIMGPG.js → deterministicFonts-C5JQLCTS.js} +2 -2
  87. package/dist/{dist-YPWQDWJ4.js → dist-GPDOV3IQ.js} +4 -4
  88. package/dist/{dist-KDJTFJHA.js → dist-HUMFCJ6T.js} +3 -3
  89. package/dist/{doctor-GWI3B6JT.js → doctor-NL73UKHV.js} +15 -15
  90. package/dist/{events-BRRUDPPT.js → events-AVOPOKO3.js} +5 -5
  91. package/dist/{events-V2QFN4YM.js → events-X7KPU7LG.js} +4 -4
  92. package/dist/{feedback-CXMD7FWL.js → feedback-GJZ5NXSH.js} +10 -10
  93. package/dist/{ffmpeg-T5SH2EFJ.js → ffmpeg-5V4FP3R6.js} +2 -2
  94. package/dist/{figma-YABDWD66.js → figma-V7SVQQI5.js} +3 -3
  95. package/dist/fontLocalizeCli.js +14 -14
  96. package/dist/{get-L2SOQKHX.js → get-FO3YZYEU.js} +2 -2
  97. package/dist/{gpuPolicy-NBJNWHYS.js → gpuPolicy-QGS4TFWP.js} +10 -10
  98. package/dist/{grade-compare-STXQPKYQ.js → grade-compare-7ICSN7KE.js} +33 -33
  99. package/dist/{help-4H6BSFLB.js → help-Y5LYZG7K.js} +2 -2
  100. package/dist/{history-4IQOLTHJ.js → history-RKGBRNLD.js} +49 -22
  101. package/dist/hyperframe-runtime.js +214 -68
  102. package/dist/hyperframe.manifest.json +1 -1
  103. package/dist/hyperframe.runtime.iife.js +214 -68
  104. package/dist/hyperframes-player.global.js +4 -5
  105. package/dist/hyperframes-slideshow.global.js +3 -4
  106. package/dist/{info-2CZOTNBC.js → info-GGUTL2NR.js} +11 -11
  107. package/dist/{init-6BXK42VS.js → init-PG7NA5SQ.js} +31 -31
  108. package/dist/{inspect-VKU47TBH.js → inspect-FCXUB6DE.js} +33 -33
  109. package/dist/{installer-T2BSSUDY.js → installer-LZ4X5TZZ.js} +6 -6
  110. package/dist/{keyframes-IEYVHRPI.js → keyframes-R3K6WJ3N.js} +8 -8
  111. package/dist/{lambda-TIKG25CK.js → lambda-3GAKHMC3.js} +7 -7
  112. package/dist/{layout-XOI4PT7A.js → layout-XNIZIGA2.js} +33 -33
  113. package/dist/{lint-DWCMVIX5.js → lint-4KDS2F4O.js} +11 -11
  114. package/dist/{lintProject-UBZ3TDHU.js → lintProject-SSEXWCH6.js} +3 -3
  115. package/dist/{list-7GXKG5QM.js → list-OVPURFPK.js} +2 -2
  116. package/dist/{login-BQ5L2UHX.js → login-EE2AX2PE.js} +4 -4
  117. package/dist/{manager-YKMHR6LN.js → manager-5ORDVWJB.js} +3 -3
  118. package/dist/{media-treatment-IFB7OSZ3.js → media-treatment-UDUEOP67.js} +86 -55
  119. package/dist/{models-TY4PJ545.js → models-LPK2O4B2.js} +14 -14
  120. package/dist/{motionShot-WXMFHICW.js → motionShot-G76XBOYI.js} +35 -29
  121. package/dist/{normalize-audio-RFD776HQ.js → normalize-audio-TUKWZ3OR.js} +10 -10
  122. package/dist/{open-7IXXGO2E.js → open-7XB2TGVB.js} +6 -6
  123. package/dist/{parakeetRunner-IHLYYMTZ.js → parakeetRunner-DL556HXL.js} +14 -14
  124. package/dist/{pipeline-TXKPLL2U.js → pipeline-34N5DLWU.js} +11 -11
  125. package/dist/{play-J2KP64UK.js → play-DDA2UUQF.js} +26 -26
  126. package/dist/{preflight-B4AFK3RG.js → preflight-ONF5AJNO.js} +5 -5
  127. package/dist/{present-MHHNRVRA.js → present-LLNRKXF5.js} +23 -23
  128. package/dist/{preview-CONUOFFQ.js → preview-H3ZZS46F.js} +57 -26
  129. package/dist/{producer-ZI46K7HH.js → producer-IFQOZK2G.js} +1 -1
  130. package/dist/{projectConfig-FGGVG5MV.js → projectConfig-SBRMQZGG.js} +8 -8
  131. package/dist/{publication-TXFBMW6B.js → publication-5BQICRZO.js} +4 -4
  132. package/dist/{publish-YZSPBFRD.js → publish-XDUZA3E3.js} +27 -26
  133. package/dist/{remove-background-4ATVLHLG.js → remove-background-GNKRMFQS.js} +12 -12
  134. package/dist/{render-MH4IUPWB.js → render-JM6KNRIA.js} +27 -27
  135. package/dist/{render-6FBYLYGJ.js → render-KTTC3EE5.js} +12 -12
  136. package/dist/{render-GFW5BPES.js → render-PCFO45RK.js} +5 -5
  137. package/dist/{render-batch-XUCZ2PUJ.js → render-batch-7R2NRNVJ.js} +5 -5
  138. package/dist/{renderCancellation-XF7M7IUP.js → renderCancellation-GP3XD2FS.js} +10 -10
  139. package/dist/renderSetupWorker.js +3 -3
  140. package/dist/{resolver-W7AYCQGS.js → resolver-C4FPX72I.js} +6 -6
  141. package/dist/{sherpa-LDUB5NLY.js → sherpa-MZP3MV2X.js} +14 -14
  142. package/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +2 -20
  143. package/dist/skills/hyperframes/scripts/lib/main-module.mjs +13 -0
  144. package/dist/skills/hyperframes/scripts/lib/main-module.test.mjs +51 -0
  145. package/dist/skills/hyperframes/scripts/plugin-cli.mjs +4 -3
  146. package/dist/skills/hyperframes/scripts/plugin-cli.test.mjs +5 -1
  147. package/dist/skills/hyperframes-cli/SKILL.md +2 -0
  148. package/dist/skills/media-use/audio/scripts/heygen-voice.mjs +2 -2
  149. package/dist/skills/media-use/audio/scripts/lib/main-module.mjs +13 -0
  150. package/dist/skills/media-use/references/media-treatments.md +5 -1
  151. package/dist/skills/media-use/scripts/lib/cube-validate.mjs +2 -3
  152. package/dist/skills/media-use/scripts/lib/main-module.mjs +13 -0
  153. package/dist/{skills-VENERS5X.js → skills-OET4XSHR.js} +7 -7
  154. package/dist/{skillsUpdateCheck-UXFYTACG.js → skillsUpdateCheck-IPFSKKJD.js} +3 -3
  155. package/dist/{slideshow-4OJEPWNZ.js → slideshow-YTWATJRT.js} +1 -1
  156. package/dist/{snapshot-C6T74HTI.js → snapshot-EC4N75MS.js} +34 -34
  157. package/dist/{src-VUJ2FUFK.js → src-LIERUCFW.js} +13 -9
  158. package/dist/{src-FS5RSVEI.js → src-ZZQJOKO6.js} +13 -13
  159. package/dist/{staticProjectServer-V2RZ4DWD.js → staticProjectServer-YH2RHYKW.js} +20 -20
  160. package/dist/{status-LXPGSSKY.js → status-PTKNQD2E.js} +2 -2
  161. package/dist/studio/assets/{hyperframes-player-Bw_jIaSX.js → hyperframes-player-tkxyWf5H.js} +3 -3
  162. package/dist/studio/assets/{index-Cj7W_c7p.js → index-BrdqOkqP.js} +1 -1
  163. package/dist/studio/assets/{index-BVM9NuWl.js → index-Cg48BxAo.js} +145 -145
  164. package/dist/studio/assets/{index-DyH9dT7b.js → index-Dllxg4aU.js} +1 -1
  165. package/dist/studio/index.html +1 -1
  166. package/dist/{studio-api-TQE7KWKO.js → studio-api-T2TS2CHL.js} +16 -14
  167. package/dist/{studioServer-CYKSQK7L.js → studioServer-GJVVJUEL.js} +54 -52
  168. package/dist/{system-OQLOGGPJ.js → system-OXRG57F2.js} +2 -2
  169. package/dist/{telemetry-A23PPRD6.js → telemetry-ZQ5XVE6Z.js} +5 -5
  170. package/dist/{timeline-T3QSGT3A.js → timeline-I2T5WIPD.js} +34 -25
  171. package/dist/{tokens-RT5HWA6C.js → tokens-ONUWOXEX.js} +2 -2
  172. package/dist/{transcribe-FOLNOC5G.js → transcribe-BCQMA537.js} +12 -12
  173. package/dist/{transcribe-HCF64LQK.js → transcribe-ZLJF7V5Y.js} +13 -13
  174. package/dist/{updateCheck-27PIP3AA.js → updateCheck-ZWHDXF73.js} +2 -2
  175. package/dist/{upgrade-TVGXBUPJ.js → upgrade-32JGFZWS.js} +2 -2
  176. package/dist/{urlDownloader-KBLBJKRL.js → urlDownloader-EVDP43GM.js} +9 -9
  177. package/dist/{validate-ZMYGK4QI.js → validate-G4PUGQCI.js} +27 -27
  178. package/dist/{video-AVE5GIGM.js → video-TILEY3VJ.js} +10 -10
  179. package/package.json +3 -2
  180. package/dist/chunk-WJB7WI4J.js +0 -3753
  181. package/dist/studio/chunk-3GHTHPZD.js +0 -1105
  182. package/dist/studio/chunk-3GHTHPZD.js.map +0 -1
  183. package/dist/studio/chunk-EEXSYY5F.js +0 -190
  184. package/dist/studio/chunk-EEXSYY5F.js.map +0 -1
  185. package/dist/studio/chunk-G3EDKRZH.js +0 -1442
  186. package/dist/studio/chunk-G3EDKRZH.js.map +0 -1
  187. package/dist/studio/chunk-PEAKCOUW.js +0 -942
  188. package/dist/studio/chunk-PEAKCOUW.js.map +0 -1
  189. package/dist/studio/chunk-PZ5AY32C.js +0 -10
  190. package/dist/studio/chunk-PZ5AY32C.js.map +0 -1
  191. package/dist/studio/chunk-Y2OHHNM2.js +0 -970
  192. package/dist/studio/chunk-Y2OHHNM2.js.map +0 -1
  193. package/dist/studio/domEditingLayers-PYST4G45.js +0 -47
  194. package/dist/studio/domEditingLayers-PYST4G45.js.map +0 -1
  195. package/dist/studio/index.css +0 -165
  196. package/dist/studio/index.css.map +0 -1
  197. package/dist/studio/index.d.ts +0 -4315
  198. package/dist/studio/index.js +0 -100971
  199. package/dist/studio/index.js.map +0 -1
  200. package/dist/studio/player.d.ts +0 -30
  201. package/dist/studio/player.js +0 -10
  202. package/dist/studio/player.js.map +0 -1
  203. package/dist/studio/styles/tailwind-preset.d.ts +0 -39
  204. package/dist/studio/styles/tailwind-preset.js +0 -50
  205. package/dist/studio/styles/tailwind-preset.js.map +0 -1
  206. package/dist/studio/styles.css +0 -1
  207. package/dist/studio/ui.d.ts +0 -297
  208. package/dist/studio/ui.js +0 -66
  209. package/dist/studio/ui.js.map +0 -1
@@ -9,7 +9,7 @@ import {
9
9
  parseStrictFiniteTimingNumber,
10
10
  resolveNaturalMediaTimelineDuration,
11
11
  resolveTimedImageDurationSeconds
12
- } from "./chunk-WJB7WI4J.js";
12
+ } from "./chunk-Z6FLHIDV.js";
13
13
  import {
14
14
  CANVAS_DIMENSIONS,
15
15
  isCompositionElement,
@@ -17,11 +17,14 @@ import {
17
17
  isTextElement,
18
18
  keyframesToGsapAnimations,
19
19
  serializeGsapAnimations
20
- } from "./chunk-MQZVBHEY.js";
20
+ } from "./chunk-LFNQDTSH.js";
21
21
  import {
22
22
  COMPOSITION_ATTRIBUTES,
23
23
  parseStartExpression
24
24
  } from "./chunk-3RM2ETQT.js";
25
+ import {
26
+ readMediaOffsetSeconds
27
+ } from "./chunk-BSQ7XANM.js";
25
28
  import {
26
29
  parseHTML
27
30
  } from "./chunk-SDYDNHEE.js";
@@ -1279,6 +1282,9 @@ var MEDIA_VISUAL_STYLE_PROPERTIES = [
1279
1282
  "filter",
1280
1283
  "mix-blend-mode",
1281
1284
  "backdrop-filter",
1285
+ "border-width",
1286
+ "border-style",
1287
+ "border-color",
1282
1288
  "border-radius",
1283
1289
  "overflow",
1284
1290
  "clip-path",
@@ -4392,6 +4398,19 @@ function swallow(label, error) {
4392
4398
  }
4393
4399
  }
4394
4400
 
4401
+ // ../core/dist/runtime/timelineDuration.js
4402
+ function readTimelineDurationSeconds(timeline) {
4403
+ try {
4404
+ if (typeof timeline?.duration !== "function")
4405
+ return null;
4406
+ const seconds = Number(timeline.duration());
4407
+ return Number.isFinite(seconds) ? seconds : null;
4408
+ } catch (err) {
4409
+ swallow("runtime.timelineDuration", err);
4410
+ return null;
4411
+ }
4412
+ }
4413
+
4395
4414
  // ../core/dist/mediaTiming.js
4396
4415
  var MEDIA_START_BASIS_ATTR = "data-hf-media-start-basis";
4397
4416
  function readMediaStartBasis(value) {
@@ -4413,7 +4432,19 @@ function isRootGlobalMediaStart(input) {
4413
4432
  return hasLiteralNestedStart(input) && readMediaStartBasis(input.basis) === "global";
4414
4433
  }
4415
4434
  function hasLiteralNestedStart(input) {
4416
- return !input.hasAutoStart && input.authoredStart != null && input.hostStart > 0;
4435
+ return !input.hasAutoStart && input.authoredStart != null && input.hostStart !== 0;
4436
+ }
4437
+ function hostInPointSeconds(host) {
4438
+ return readMediaOffsetSeconds((name) => host.getAttribute(name));
4439
+ }
4440
+ function compositionOriginSeconds(hostStart, host) {
4441
+ return hostStart - hostInPointSeconds(host);
4442
+ }
4443
+ function cutToHostSlots(span, hosts) {
4444
+ return hosts.reduce((kept, host) => {
4445
+ const start = Math.max(kept.start, host.start);
4446
+ return { start, end: Math.max(start, Math.min(kept.end, host.end)) };
4447
+ }, span);
4417
4448
  }
4418
4449
 
4419
4450
  // ../core/dist/runtime/startResolver.js
@@ -4430,69 +4461,59 @@ function createRuntimeStartTimeResolver(params) {
4430
4461
  return byId;
4431
4462
  return doc.querySelector(`[data-composition-id="${CSS.escape(refId)}"]`) ?? null;
4432
4463
  };
4464
+ const authoredAttr = (element, name) => includeAuthoredTimingAttrs ? element.getAttribute(name) : null;
4465
+ const resolveAuthoredDuration = (element) => resolveAuthoredTimingWindow({
4466
+ start: 0,
4467
+ duration: element.getAttribute("data-duration"),
4468
+ authoredDuration: authoredAttr(element, "data-hf-authored-duration")
4469
+ })?.duration ?? resolveAuthoredTimingWindow({
4470
+ start: resolveStartForElementInternal(element, 0),
4471
+ end: element.getAttribute("data-end"),
4472
+ authoredEnd: authoredAttr(element, "data-hf-authored-end")
4473
+ })?.duration ?? null;
4474
+ const positive = (value) => value != null && Number.isFinite(value) && value > 0 ? value : null;
4475
+ const resolveRegisteredTimelineDuration = (element) => {
4476
+ const compositionId = element.getAttribute("data-composition-id");
4477
+ return compositionId ? positive(readTimelineDurationSeconds(timelineRegistry[compositionId])) : null;
4478
+ };
4433
4479
  const resolveDurationForElement = (element) => {
4434
4480
  const cached = durationCache.get(element);
4435
4481
  if (cached !== void 0)
4436
4482
  return cached;
4437
- let resolved = null;
4438
- const durationTiming = resolveAuthoredTimingWindow({
4439
- start: 0,
4440
- duration: element.getAttribute("data-duration"),
4441
- authoredDuration: includeAuthoredTimingAttrs ? element.getAttribute("data-hf-authored-duration") : null
4442
- });
4443
- if (durationTiming?.duration != null && durationTiming.duration > 0) {
4444
- resolved = durationTiming.duration;
4445
- }
4446
- if (resolved == null || resolved <= 0) {
4447
- const start = resolveStartForElementInternal(element, 0);
4448
- const endTiming = resolveAuthoredTimingWindow({
4449
- start,
4450
- end: element.getAttribute("data-end"),
4451
- authoredEnd: includeAuthoredTimingAttrs ? element.getAttribute("data-hf-authored-end") : null
4452
- });
4453
- if (endTiming?.duration != null && endTiming.duration > 0) {
4454
- resolved = endTiming.duration;
4455
- }
4456
- }
4457
- if ((resolved == null || resolved <= 0) && isMediaElement2(element)) {
4458
- resolved = resolveNaturalMediaTimelineDuration(element, element.duration);
4459
- }
4460
- if (resolved == null || resolved <= 0)
4461
- resolved = resolveTimedImageDurationSeconds(element);
4462
- if (resolved == null || resolved <= 0) {
4463
- const compositionId = element.getAttribute("data-composition-id");
4464
- if (compositionId) {
4465
- const timeline = timelineRegistry[compositionId] ?? null;
4466
- if (timeline && typeof timeline.duration === "function") {
4467
- try {
4468
- const timelineDuration = Number(timeline.duration());
4469
- if (Number.isFinite(timelineDuration) && timelineDuration > 0) {
4470
- resolved = timelineDuration;
4471
- }
4472
- } catch (err) {
4473
- swallow("runtime.startResolver.site1", err);
4474
- }
4475
- }
4476
- }
4477
- }
4478
- if (resolved != null && Number.isFinite(resolved) && resolved > 0) {
4479
- durationCache.set(element, resolved);
4480
- return resolved;
4481
- }
4482
- durationCache.set(element, null);
4483
- return null;
4483
+ const resolved = resolveAuthoredDuration(element) ?? positive(isMediaElement2(element) ? resolveNaturalMediaTimelineDuration(element, element.duration) : null) ?? positive(resolveTimedImageDurationSeconds(element)) ?? resolveRegisteredTimelineDuration(element);
4484
+ durationCache.set(element, resolved);
4485
+ return resolved;
4484
4486
  };
4487
+ const isCompositionHost = (element) => element.hasAttribute("data-composition-src") || element.hasAttribute("data-composition-id") || element.hasAttribute("data-composition-file");
4488
+ const inheritedTimingHost = (element) => {
4489
+ const parent = element.parentElement;
4490
+ if (!parent || !element.hasAttribute("data-composition-id"))
4491
+ return null;
4492
+ if (parseStartExpression(element.getAttribute("data-start")))
4493
+ return null;
4494
+ return isCompositionHost(parent) ? parent : null;
4495
+ };
4496
+ const resolveCompositionOrigin = (compositionRoot, fallback) => compositionOriginSeconds(resolveStartForElementInternal(compositionRoot, fallback), inheritedTimingHost(compositionRoot) ?? compositionRoot);
4485
4497
  const resolveHostOffsetForElement = (element, fallback) => {
4486
- if (element.hasAttribute("data-composition-id")) {
4487
- const parentComposition = element.parentElement?.closest("[data-composition-id]");
4488
- if (!parentComposition)
4489
- return 0;
4490
- return resolveStartForElementInternal(parentComposition, fallback);
4498
+ const compositionRoot = element.hasAttribute("data-composition-id") ? element.parentElement?.closest("[data-composition-id]") : element.closest("[data-composition-id]");
4499
+ return compositionRoot ? resolveCompositionOrigin(compositionRoot, fallback) : 0;
4500
+ };
4501
+ const computeStart = (element, fallback) => {
4502
+ const expression = parseStartExpression(element.getAttribute("data-start"));
4503
+ if (!expression) {
4504
+ const host = inheritedTimingHost(element);
4505
+ return host ? resolveStartForElementInternal(host, fallback) : fallback;
4491
4506
  }
4492
- const compositionRoot = element.closest("[data-composition-id]");
4493
- if (!compositionRoot)
4494
- return 0;
4495
- return resolveStartForElementInternal(compositionRoot, fallback);
4507
+ if (expression.kind === "absolute") {
4508
+ return resolveHostOffsetForElement(element, fallback) + Math.max(0, expression.value);
4509
+ }
4510
+ const target = findReferenceTarget(expression.refId);
4511
+ if (!target)
4512
+ return fallback;
4513
+ const targetStart = resolveStartForElementInternal(target, 0);
4514
+ const targetDuration = resolveDurationForElement(target) ?? 0;
4515
+ const floor = Math.min(0, resolveHostOffsetForElement(element, 0));
4516
+ return Math.max(floor, targetStart + targetDuration + expression.offset);
4496
4517
  };
4497
4518
  const resolveStartForElementInternal = (element, fallback) => {
4498
4519
  const cached = startCache.get(element);
@@ -4504,38 +4525,7 @@ function createRuntimeStartTimeResolver(params) {
4504
4525
  }
4505
4526
  visiting.add(element);
4506
4527
  try {
4507
- const expression = parseStartExpression(element.getAttribute("data-start"));
4508
- if (!expression) {
4509
- if (element.hasAttribute("data-composition-id")) {
4510
- const parent = element.parentElement;
4511
- if (parent && (parent.hasAttribute("data-composition-src") || parent.hasAttribute("data-composition-id") || parent.hasAttribute("data-composition-file"))) {
4512
- const parentStart = resolveStartForElementInternal(parent, fallback);
4513
- startCache.set(element, parentStart);
4514
- return parentStart;
4515
- }
4516
- }
4517
- startCache.set(element, fallback);
4518
- return fallback;
4519
- }
4520
- if (expression.kind === "absolute") {
4521
- const absolute = Math.max(0, expression.value);
4522
- const resolved2 = Math.max(0, resolveHostOffsetForElement(element, fallback) + absolute);
4523
- startCache.set(element, resolved2);
4524
- return resolved2;
4525
- }
4526
- const target = findReferenceTarget(expression.refId);
4527
- if (!target) {
4528
- startCache.set(element, fallback);
4529
- return fallback;
4530
- }
4531
- const targetStart = resolveStartForElementInternal(target, 0);
4532
- const targetDuration = resolveDurationForElement(target);
4533
- if (targetDuration == null || targetDuration <= 0) {
4534
- const unresolved = Math.max(0, targetStart + expression.offset);
4535
- startCache.set(element, unresolved);
4536
- return unresolved;
4537
- }
4538
- const resolved = Math.max(0, targetStart + targetDuration + expression.offset);
4528
+ const resolved = computeStart(element, fallback);
4539
4529
  startCache.set(element, resolved);
4540
4530
  return resolved;
4541
4531
  } finally {
@@ -4546,7 +4536,7 @@ function createRuntimeStartTimeResolver(params) {
4546
4536
  const compositionRoot = element.closest("[data-composition-id]");
4547
4537
  return {
4548
4538
  authoredStart: parseStrictFiniteTimingNumber(element.getAttribute("data-start")),
4549
- hostStart: compositionRoot ? resolveStartForElementInternal(compositionRoot, 0) : 0,
4539
+ hostStart: compositionRoot ? resolveCompositionOrigin(compositionRoot, 0) : 0,
4550
4540
  hasAutoStart: element.hasAttribute("data-hf-auto-start"),
4551
4541
  basis: element.getAttribute(MEDIA_START_BASIS_ATTR)
4552
4542
  };
@@ -4558,12 +4548,26 @@ function createRuntimeStartTimeResolver(params) {
4558
4548
  ordinaryStart: () => resolveStartForElementInternal(element, input.hostStart)
4559
4549
  });
4560
4550
  };
4551
+ const resolveHostSlotsForElement = (element) => {
4552
+ const slots = [];
4553
+ for (let node = element.parentElement; node; node = node.parentElement) {
4554
+ if (!isCompositionHost(node) || inheritedTimingHost(node))
4555
+ continue;
4556
+ if (hostInPointSeconds(node) <= 0)
4557
+ continue;
4558
+ const start = resolveStartForElementInternal(node, 0);
4559
+ const duration = resolveAuthoredDuration(node);
4560
+ slots.push({ start, end: duration ? start + duration : Infinity });
4561
+ }
4562
+ return slots;
4563
+ };
4561
4564
  const isRootGlobalMediaStartForElement = (element) => isMediaElement2(element) && isRootGlobalMediaStart(mediaStartInput(element));
4562
4565
  return {
4563
4566
  resolveStartForElement: (element, fallback = 0) => resolveStartForElementInternal(element, Math.max(0, fallback)),
4564
4567
  resolveDurationForElement: (element) => resolveDurationForElement(element),
4565
4568
  resolveMediaStartForElement,
4566
4569
  resolveHostStartForElement: (element) => resolveHostOffsetForElement(element, 0),
4570
+ resolveHostSlotsForElement,
4567
4571
  isRootGlobalMediaStartForElement
4568
4572
  };
4569
4573
  }
@@ -4913,7 +4917,7 @@ uniform sampler2D u_src;
4913
4917
  uniform sampler2D u_src2;
4914
4918
  uniform float u_mode;
4915
4919
 
4916
- // The matte texel is premultiplied, so its rgb is already "over black" \u2014 the
4920
+ // The matte texel is premultiplied, so its rgb is already "over black": the
4917
4921
  // composite After Effects reads a luma matte through.
4918
4922
  float hfCoverage(vec4 matte, float mode) {
4919
4923
  if (mode < 1.5) return matte.a;
@@ -4944,7 +4948,7 @@ var NOISE_FRAG = `#version 300 es
4944
4948
  precision highp float;
4945
4949
  // NOT decoration: a fragment shader's default integer precision is mediump,
4946
4950
  // and a mediump uint is only guaranteed 16 bits (ESSL 3.00 \xA74.5.2). Every step
4947
- // below \u2014 the Jenkins mix, both LCG rounds \u2014 is defined by 32-bit wraparound,
4951
+ // below (the Jenkins mix, both LCG rounds) is defined by 32-bit wraparound,
4948
4952
  // so without this the hash is a different function on any implementation that
4949
4953
  // honours the minimum. ANGLE and SwiftShader both use 32-bit ints, which is
4950
4954
  // exactly why no test on this machine would catch it.
@@ -5594,6 +5598,9 @@ export {
5594
5598
  readMediaStartBasis,
5595
5599
  resolveAbsoluteMediaStartSeconds,
5596
5600
  resolveMediaStartSeconds,
5601
+ hostInPointSeconds,
5602
+ compositionOriginSeconds,
5603
+ cutToHostSlots,
5597
5604
  createRuntimeStartTimeResolver,
5598
5605
  byStart,
5599
5606
  sameInstant,
@@ -9,18 +9,18 @@ import {
9
9
  } from "./chunk-6IHWCZ3W.js";
10
10
  import {
11
11
  stoppedByCancelSignal
12
- } from "./chunk-MXNDKDFT.js";
12
+ } from "./chunk-54UXJKFF.js";
13
13
  import {
14
14
  DEFAULT_MODEL,
15
15
  ensureModel,
16
16
  ensureWhisper,
17
17
  hasFFmpeg
18
- } from "./chunk-MAYCCGMQ.js";
18
+ } from "./chunk-KVGDFUVO.js";
19
19
  import {
20
20
  findFFmpeg,
21
21
  findFFprobe,
22
22
  getFFmpegInstallHint
23
- } from "./chunk-ZEUONDQG.js";
23
+ } from "./chunk-SYUGVPYH.js";
24
24
  import {
25
25
  findWavChunk
26
26
  } from "./chunk-UOFAE5RF.js";
@@ -8,7 +8,7 @@ import {
8
8
  DEFAULT_REGISTRY_URL,
9
9
  fetchItemManifest,
10
10
  fetchRegistryManifest
11
- } from "./chunk-I5KY7EZP.js";
11
+ } from "./chunk-XVIYZU3D.js";
12
12
 
13
13
  // src/registry/resolver.ts
14
14
  function defaultWarn(message) {
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  VALID_CANVAS_RESOLUTIONS,
9
9
  resolveResolutionFlagPair
10
- } from "./chunk-MQZVBHEY.js";
10
+ } from "./chunk-LFNQDTSH.js";
11
11
 
12
12
  // src/utils/parseOutputResolution.ts
13
13
  function parseOutputResolutionFlag(raw, options) {
@@ -6,20 +6,20 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  resolveProject
9
- } from "./chunk-KFKZ3ISO.js";
9
+ } from "./chunk-TH4OXAWY.js";
10
10
  import {
11
11
  installPageFunctionGuard,
12
12
  resolveCliChromeGpuMode,
13
13
  seekCompositionTimeline,
14
14
  waitForRuntimeReady
15
- } from "./chunk-SLCFKB3Y.js";
15
+ } from "./chunk-HTM4CIFS.js";
16
16
  import {
17
17
  resolveCompositionViewportFromHtml
18
18
  } from "./chunk-FH7WODJH.js";
19
19
  import {
20
20
  launchManagedBrowser,
21
21
  resolveManagedGpuMode
22
- } from "./chunk-5WADG7PR.js";
22
+ } from "./chunk-XJUZEB44.js";
23
23
  import {
24
24
  defineCommand
25
25
  } from "./chunk-S3S4TGEH.js";
@@ -33,7 +33,7 @@ import {
33
33
  import {
34
34
  printDeprecationNotice,
35
35
  withMeta
36
- } from "./chunk-P6WH6QTV.js";
36
+ } from "./chunk-K7ES5RSK.js";
37
37
  import {
38
38
  normalizeErrorMessage
39
39
  } from "./chunk-KNU5COPB.js";
@@ -228,7 +228,7 @@ function extractCompositionErrorsFromLint(lintResult) {
228
228
  async function localizeRemoteAssets(html) {
229
229
  let dir;
230
230
  try {
231
- const { loadProducer } = await import("./producer-ZI46K7HH.js");
231
+ const { loadProducer } = await import("./producer-IFQOZK2G.js");
232
232
  const { localizeRemoteMediaSources, localizeRemoteImageSources, localizeRemoteFontFaces } = await loadProducer();
233
233
  dir = mkdtempSync(join(tmpdir(), "hf-validate-assets-"));
234
234
  const assetDir = dir;
@@ -249,10 +249,10 @@ async function localizeRemoteAssets(html) {
249
249
  }
250
250
  async function validateInBrowser(project, opts) {
251
251
  const projectDir = project.dir;
252
- const { bundleToSingleHtml } = await import("./compiler-JZ4GNFMG.js");
252
+ const { bundleToSingleHtml } = await import("./compiler-ACCPOZMQ.js");
253
253
  const { ensureBrowser } = await import("./manager-BPSR6D3V.js");
254
- const { serveStaticProjectHtml } = await import("./staticProjectServer-V2RZ4DWD.js");
255
- const { lintProject } = await import("./lintProject-UBZ3TDHU.js");
254
+ const { serveStaticProjectHtml } = await import("./staticProjectServer-YH2RHYKW.js");
255
+ const { lintProject } = await import("./lintProject-SSEXWCH6.js");
256
256
  const lintResult = await lintProject(projectDir);
257
257
  const compositionErrors = extractCompositionErrorsFromLint(lintResult);
258
258
  const html = await bundleToSingleHtml(projectDir);
@@ -273,9 +273,9 @@ async function validateInBrowser(project, opts) {
273
273
  try {
274
274
  const browser = await ensureBrowser();
275
275
  const puppeteer = await import("puppeteer-core");
276
- const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-VUJ2FUFK.js");
276
+ const { buildChromeArgs, analyzeClipMediaFit } = await import("./src-LIERUCFW.js");
277
277
  const requestedGpuMode = resolveCliChromeGpuMode();
278
- const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-NBJNWHYS.js");
278
+ const { assertWebGpuAdapterAvailable, compositionRequiresWebGpu, resolveLocalWebGpu } = await import("./gpuPolicy-QGS4TFWP.js");
279
279
  const resolvedGpuMode = await resolveManagedGpuMode(requestedGpuMode, browser.executablePath);
280
280
  const requiresWebGpu = compositionRequiresWebGpu(html);
281
281
  const { gpuConfig, softwareWebGpu } = resolveLocalWebGpu(resolvedGpuMode, requiresWebGpu);
@@ -284,64 +284,69 @@ async function validateInBrowser(project, opts) {
284
284
  executablePath: browser.executablePath,
285
285
  args: buildChromeArgs({ ...viewport, captureMode: "screenshot", requiresWebGpu }, gpuConfig)
286
286
  });
287
- const page = await chromeBrowser.newPage();
288
- await installPageFunctionGuard(page);
289
- await page.setViewport(viewport);
290
- page.on("console", (msg) => {
291
- const type = msg.type();
292
- const loc = msg.location();
293
- const text = msg.text();
294
- if (type === "error") {
295
- if (text.startsWith("Failed to load resource")) return;
296
- errors.push({ level: "error", text, url: loc.url, line: loc.lineNumber });
297
- } else if (type === "warn") {
298
- warnings.push({ level: "warning", text, url: loc.url, line: loc.lineNumber });
299
- }
300
- });
301
- page.on("pageerror", (err) => {
302
- const text = normalizeErrorMessage(err);
303
- if (text.includes("Unexpected token '<'") || text.includes("Unexpected token '&lt;'")) return;
304
- errors.push({ level: "error", text });
305
- });
306
- page.on("requestfailed", (req) => {
307
- const url = req.url();
308
- if (url.includes("favicon") || url.startsWith("data:")) return;
309
- const failureText = req.failure()?.errorText;
310
- if (shouldIgnoreRequestFailure(url, failureText, req.resourceType())) return;
311
- const path = projectPathOfUrl(url);
312
- errors.push({
313
- level: "error",
314
- text: `Failed to load ${path}: ${failureText ?? "net::ERR_FAILED"}`,
315
- url
287
+ try {
288
+ const page = await chromeBrowser.newPage();
289
+ await installPageFunctionGuard(page);
290
+ await page.setViewport(viewport);
291
+ page.on("console", (msg) => {
292
+ const type = msg.type();
293
+ const loc = msg.location();
294
+ const text = msg.text();
295
+ if (type === "error") {
296
+ if (text.startsWith("Failed to load resource")) return;
297
+ errors.push({ level: "error", text, url: loc.url, line: loc.lineNumber });
298
+ } else if (type === "warn") {
299
+ warnings.push({ level: "warning", text, url: loc.url, line: loc.lineNumber });
300
+ }
316
301
  });
317
- });
318
- page.on("response", (res) => {
319
- if (res.status() >= 400) {
320
- const url = res.url();
321
- if (url.includes("favicon")) return;
322
- if (shouldIgnoreHttpError(url, res.status())) return;
302
+ page.on("pageerror", (err) => {
303
+ const text = normalizeErrorMessage(err);
304
+ if (text.includes("Unexpected token '<'") || text.includes("Unexpected token '&lt;'"))
305
+ return;
306
+ errors.push({ level: "error", text });
307
+ });
308
+ page.on("requestfailed", (req) => {
309
+ const url = req.url();
310
+ if (url.includes("favicon") || url.startsWith("data:")) return;
311
+ const failureText = req.failure()?.errorText;
312
+ if (shouldIgnoreRequestFailure(url, failureText, req.resourceType())) return;
323
313
  const path = projectPathOfUrl(url);
324
- errors.push({ level: "error", text: `${res.status()} loading ${path}`, url });
314
+ errors.push({
315
+ level: "error",
316
+ text: `Failed to load ${path}: ${failureText ?? "net::ERR_FAILED"}`,
317
+ url
318
+ });
319
+ });
320
+ page.on("response", (res) => {
321
+ if (res.status() >= 400) {
322
+ const url = res.url();
323
+ if (url.includes("favicon")) return;
324
+ if (shouldIgnoreHttpError(url, res.status())) return;
325
+ const path = projectPathOfUrl(url);
326
+ errors.push({ level: "error", text: `${res.status()} loading ${path}`, url });
327
+ }
328
+ });
329
+ const navTimeoutMs = resolveNavigationTimeoutMs(opts.timeout);
330
+ try {
331
+ await page.goto(server.url, { waitUntil: "domcontentloaded", timeout: navTimeoutMs });
332
+ } catch (err) {
333
+ const hinted = navigationTimeoutHint(err, navTimeoutMs);
334
+ if (hinted) throw hinted;
335
+ throw err;
325
336
  }
326
- });
327
- const navTimeoutMs = resolveNavigationTimeoutMs(opts.timeout);
328
- try {
329
- await page.goto(server.url, { waitUntil: "domcontentloaded", timeout: navTimeoutMs });
330
- } catch (err) {
331
- const hinted = navigationTimeoutHint(err, navTimeoutMs);
332
- if (hinted) throw hinted;
333
- throw err;
334
- }
335
- await assertWebGpuAdapterAvailable(page, requiresWebGpu, softwareWebGpu);
336
- await waitForRuntimeReady(page, opts.timeout ?? 3e3);
337
- await new Promise((r) => setTimeout(r, opts.timeout ?? 3e3));
338
- for (const w of await auditClipDurations(page, analyzeClipMediaFit, opts.timeout ?? 3e3)) {
339
- warnings.push(w);
340
- }
341
- if (opts.contrast) {
342
- contrast = await runContrastAudit(page);
337
+ await assertWebGpuAdapterAvailable(page, requiresWebGpu, softwareWebGpu);
338
+ await waitForRuntimeReady(page, opts.timeout ?? 3e3);
339
+ await new Promise((r) => setTimeout(r, opts.timeout ?? 3e3));
340
+ for (const w of await auditClipDurations(page, analyzeClipMediaFit, opts.timeout ?? 3e3)) {
341
+ warnings.push(w);
342
+ }
343
+ if (opts.contrast) {
344
+ contrast = await runContrastAudit(page);
345
+ }
346
+ } finally {
347
+ await chromeBrowser.close().catch(() => {
348
+ });
343
349
  }
344
- await chromeBrowser.close();
345
350
  } finally {
346
351
  await server.close();
347
352
  localized.cleanup();
@@ -7,7 +7,7 @@ var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  getMimeType,
9
9
  injectMediaCodecMapIntoHtml
10
- } from "./chunk-XGFHYAYN.js";
10
+ } from "./chunk-Z5C4LEAD.js";
11
11
  import {
12
12
  PROXY_VARIANT_CONFIG,
13
13
  ProxyCapacityError,
@@ -18,10 +18,10 @@ import {
18
18
  recordProxyRequest,
19
19
  resolveProxy,
20
20
  resolveProxyVariantRequest
21
- } from "./chunk-ZOA2SC4P.js";
21
+ } from "./chunk-MOL32UKR.js";
22
22
  import {
23
23
  resolveAutoProxy
24
- } from "./chunk-JEHFZQYT.js";
24
+ } from "./chunk-LE7T4ML7.js";
25
25
  import {
26
26
  decodeWellFormedEscapes
27
27
  } from "./chunk-BSQ7XANM.js";
@@ -5,7 +5,7 @@ var require = __hf_createRequire(import.meta.url);
5
5
  var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
 
8
- // ../studio-server/dist/chunk-6XMC64FJ.js
8
+ // ../studio-server/dist/chunk-SVQFE44C.js
9
9
  var STUDIO_MANUAL_EDITS_PATH = ".hyperframes/studio-manual-edits.json";
10
10
  function createStudioManualEditsRenderBodyScript(manifestContent, options = {}) {
11
11
  if (!manifestContent.trim()) return null;
@@ -98,12 +98,12 @@ function createFigmaClient(options) {
98
98
  throw new FigmaClientError("NO_TOKEN", [
99
99
  "FIGMA_TOKEN is missing. One-time setup:",
100
100
  " 1. figma.com/settings \u2192 Security \u2192 Personal access tokens \u2192 Generate new token",
101
- " 2. Scopes (read-only is all this integration ever needs \u2014 it never writes to figma):",
101
+ " 2. Scopes (read-only is all this integration ever needs: it never writes to figma):",
102
102
  " File content: Read-only \xB7 File metadata: Read-only",
103
103
  " Library content: Read-only (needed for the `tokens` published-styles fallback)",
104
- " Variables: Read-only (optional \u2014 brand variables, requires figma Enterprise;",
104
+ " Variables: Read-only (optional: brand variables, requires figma Enterprise;",
105
105
  " without it `tokens` falls back to published styles)",
106
- ' 3. export FIGMA_TOKEN="figd_\u2026" \u2014 add it to your shell profile or the project .env',
106
+ ' 3. export FIGMA_TOKEN="figd_\u2026", then add it to your shell profile or the project .env',
107
107
  " so future sessions skip this step",
108
108
  "Then re-run this command."
109
109
  ].join("\n"));
@@ -114,23 +114,23 @@ function createFigmaClient(options) {
114
114
  const maxRetries = options.maxRetries ?? 3;
115
115
  function forbiddenError(body, opts) {
116
116
  if (body && /invalid token/i.test(body))
117
- return new FigmaClientError("BAD_TOKEN", "figma rejected the token (403 Invalid token) \u2014 it is invalid, expired, or revoked. Re-mint at figma.com/settings \u2192 Security, then update FIGMA_TOKEN.", 403, opts.endpoint);
117
+ return new FigmaClientError("BAD_TOKEN", "figma rejected the token (403 Invalid token): it is invalid, expired, or revoked. Re-mint at figma.com/settings \u2192 Security, then update FIGMA_TOKEN.", 403, opts.endpoint);
118
118
  if (opts.enterpriseGated)
119
- return new FigmaClientError("REQUIRES_ENTERPRISE", "figma variables require an Enterprise plan (403) \u2014 fall back to styles", 403, opts.endpoint);
119
+ return new FigmaClientError("REQUIRES_ENTERPRISE", "figma variables require an Enterprise plan (403), so fall back to styles", 403, opts.endpoint);
120
120
  if (body && /scope/i.test(body))
121
- return new FigmaClientError("FORBIDDEN", `figma denied access (403): ${body} \u2014 add the named scope at figma.com/settings \u2192 Security \u2192 Personal access tokens.`, 403, opts.endpoint);
122
- const scopeLine = opts.scopeHint ? `This endpoint needs the "${opts.scopeHint}" scope \u2014 add it at figma.com/settings \u2192 Security \u2192 Personal access tokens.` : "The token is missing a read scope, or your account can't view this file. Check File content: Read-only + File metadata: Read-only at figma.com/settings \u2192 Security.";
121
+ return new FigmaClientError("FORBIDDEN", `figma denied access (403): ${body}. Add the named scope at figma.com/settings \u2192 Security \u2192 Personal access tokens.`, 403, opts.endpoint);
122
+ const scopeLine = opts.scopeHint ? `This endpoint needs the "${opts.scopeHint}" scope. Add it at figma.com/settings \u2192 Security \u2192 Personal access tokens.` : "The token is missing a read scope, or your account can't view this file. Check File content: Read-only + File metadata: Read-only at figma.com/settings \u2192 Security.";
123
123
  return new FigmaClientError("FORBIDDEN", `figma denied access (403). ${scopeLine} Also confirm the file is visible to your account.`, 403, opts.endpoint);
124
124
  }
125
125
  async function throwForStatus(res, path, opts) {
126
126
  if (res.ok)
127
127
  return;
128
128
  if (res.status === 401)
129
- throw new FigmaClientError("BAD_TOKEN", "figma rejected the token (401) \u2014 it is expired or revoked. Re-mint at figma.com/settings \u2192 Security, then update FIGMA_TOKEN.", 401, opts.endpoint);
129
+ throw new FigmaClientError("BAD_TOKEN", "figma rejected the token (401): it is expired or revoked. Re-mint at figma.com/settings \u2192 Security, then update FIGMA_TOKEN.", 401, opts.endpoint);
130
130
  if (res.status === 403)
131
131
  throw forbiddenError(await readFigmaErrorMessage(res), opts);
132
132
  if (res.status === 429)
133
- throw new FigmaClientError("RATE_LIMITED", `figma rate limit hit (429) and still limited after ${maxRetries} retries \u2014 wait a minute and re-run, or import fewer nodes per call.`, 429, opts.endpoint);
133
+ throw new FigmaClientError("RATE_LIMITED", `figma rate limit hit (429) and still limited after ${maxRetries} retries. Wait a minute and re-run, or import fewer nodes per call.`, 429, opts.endpoint);
134
134
  throw new FigmaClientError("HTTP_ERROR", `figma request failed: HTTP ${res.status} ${path}`, res.status, opts.endpoint);
135
135
  }
136
136
  async function get(path, opts) {
@@ -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-BRRUDPPT.js");
1281
+ const { trackCommandFailure } = await import("./events-AVOPOKO3.js");
1282
1282
  trackCommandFailure(
1283
1283
  command,
1284
1284
  err,
@@ -8,14 +8,14 @@ import {
8
8
  DEFAULT_REGISTRY_URL,
9
9
  fetchItemFile,
10
10
  validRegistryItem
11
- } from "./chunk-I5KY7EZP.js";
11
+ } from "./chunk-XVIYZU3D.js";
12
12
  import {
13
13
  publishRegistryFile,
14
14
  registryTargetPath
15
15
  } from "./chunk-GMECXFAN.js";
16
16
  import {
17
17
  validateVariables
18
- } from "./chunk-3VYNNWVA.js";
18
+ } from "./chunk-BAKPN2D2.js";
19
19
  import {
20
20
  realProjectRoot
21
21
  } from "./chunk-OFQWTKPW.js";