hyperframes 0.8.142 → 0.8.143

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 (189) hide show
  1. package/dist/{add-YS2RCWEK.js → add-Q5EYDUAY.js} +18 -17
  2. package/dist/{animatedGifPrep-SAMCDT7T.js → animatedGifPrep-H2DUQEZ3.js} +15 -14
  3. package/dist/{asset-BLWC2NWB.js → asset-C7JBYYX4.js} +4 -4
  4. package/dist/{assetCataloger-FVNBBRP3.js → assetCataloger-FRO4G6OU.js} +8 -7
  5. package/dist/{auth-DRZB7OAC.js → auth-FRWLCO36.js} +1 -1
  6. package/dist/{autoUpdate-I5I3BOJK.js → autoUpdate-E4OZXQK6.js} +2 -2
  7. package/dist/{backgroundChecks-VR2QHGNY.js → backgroundChecks-FSUVHN5L.js} +3 -3
  8. package/dist/backgroundChecksWorker.js +3 -3
  9. package/dist/{batchRender-4YUHQI6X.js → batchRender-4U73BYTU.js} +11 -10
  10. package/dist/{beats-7OT7ALV3.js → beats-U6KJWF35.js} +32 -27
  11. package/dist/{benchmark-Q2XQCRTR.js → benchmark-5ONT7V7B.js} +15 -14
  12. package/dist/{browser-7VAWQQZC.js → browser-R4DU46IE.js} +4 -4
  13. package/dist/{bundleWithLocalizedFonts-DDMLLL2R.js → bundleWithLocalizedFonts-VH55VOAL.js} +2 -2
  14. package/dist/{capture-HEJS6M5A.js → capture-26G2DPSI.js} +18 -17
  15. package/dist/{capture-U7ABPKS5.js → capture-OGQAEYKO.js} +2 -2
  16. package/dist/{catalog-DVJ3XPDN.js → catalog-RKORTIUE.js} +19 -18
  17. package/dist/{catch-up-DF6AVSN2.js → catch-up-4OBERRQO.js} +5 -5
  18. package/dist/{check-KXORRWAE.js → check-P2XDN57S.js} +43 -42
  19. package/dist/{checkBrowser-J7HZJTRH.js → checkBrowser-NTGJGAEA.js} +42 -41
  20. package/dist/{chunk-EFDXGAAD.js → chunk-2LBBHMKT.js} +1 -1
  21. package/dist/{chunk-IDX52YJN.js → chunk-33RZPZ4K.js} +189 -42
  22. package/dist/{chunk-JU6Y5TTZ.js → chunk-3NE7ZYU2.js} +2 -2
  23. package/dist/{chunk-TQFG7HTI.js → chunk-3RM2ETQT.js} +0 -168
  24. package/dist/{chunk-PFCFR3KZ.js → chunk-442JNXRM.js} +1 -1
  25. package/dist/{chunk-YFT3BL7N.js → chunk-4M4EC7JX.js} +19 -12
  26. package/dist/{chunk-AM5L5YIA.js → chunk-4OA4LDTU.js} +1 -1
  27. package/dist/{chunk-LQASVU3I.js → chunk-5FISWJ37.js} +12 -4
  28. package/dist/{chunk-JYYOAKHS.js → chunk-6IIGT7BX.js} +1 -1
  29. package/dist/chunk-6TPZSTCL.js +3681 -0
  30. package/dist/{chunk-QGRFOOLE.js → chunk-6XMFEICO.js} +263 -75
  31. package/dist/{chunk-YHRZQJXH.js → chunk-7UYBQ6NF.js} +260 -67
  32. package/dist/{chunk-U7E736AJ.js → chunk-BFDJ63J5.js} +32 -14
  33. package/dist/{chunk-WCJGTLPF.js → chunk-BHVFTYSI.js} +6 -3
  34. package/dist/{chunk-B6SMSALD.js → chunk-BT27OYYX.js} +9 -9
  35. package/dist/{chunk-IXCTG2WY.js → chunk-BYK73CR7.js} +4 -4
  36. package/dist/{chunk-75JJVANE.js → chunk-CLOH4LIB.js} +3 -3
  37. package/dist/{chunk-H2X52H2N.js → chunk-DF2BHILQ.js} +3 -3
  38. package/dist/{chunk-DPHJKWP5.js → chunk-F26LCYRY.js} +42 -34
  39. package/dist/{chunk-5Z63TBTX.js → chunk-FH7WODJH.js} +1 -1
  40. package/dist/{chunk-LTGGTEMA.js → chunk-FVYXDXEV.js} +2 -2
  41. package/dist/{chunk-KYN364DU.js → chunk-GNBGPUJ7.js} +6 -8
  42. package/dist/{chunk-RVCWIIZ7.js → chunk-GV5R5B7Q.js} +1 -1
  43. package/dist/{chunk-FZK35GT4.js → chunk-HC7EVDEL.js} +1 -1
  44. package/dist/{chunk-MVTUV4TP.js → chunk-HLYOEIWM.js} +14 -6
  45. package/dist/{chunk-WSGY5CDQ.js → chunk-HMT2RPZU.js} +6 -6
  46. package/dist/{chunk-JOTLPC6S.js → chunk-HW4AKJ5F.js} +1 -1
  47. package/dist/{chunk-IMY4QQTQ.js → chunk-I7QGQAZM.js} +8 -8
  48. package/dist/{chunk-JFKL3WAE.js → chunk-IWFLMU2N.js} +104 -19
  49. package/dist/{chunk-IHFUKJOR.js → chunk-K2FLNJVB.js} +8 -2
  50. package/dist/chunk-KJJLA674.js +121 -0
  51. package/dist/{chunk-BPZVDBHY.js → chunk-KO5QBV73.js} +1 -1
  52. package/dist/{chunk-WGVOWWVK.js → chunk-KQLGTGE5.js} +3 -3
  53. package/dist/{chunk-R2JEKLDZ.js → chunk-LVX6NK36.js} +3 -3
  54. package/dist/{chunk-6UYZB4TY.js → chunk-LW6HO6U3.js} +4 -4
  55. package/dist/{chunk-OZUQF4NB.js → chunk-MQZVBHEY.js} +123 -8
  56. package/dist/{chunk-7FCDA4RH.js → chunk-N3DQEVSI.js} +2 -2
  57. package/dist/{chunk-A4KQZXZI.js → chunk-NE55C6S5.js} +4 -2
  58. package/dist/{chunk-6RAD4BCC.js → chunk-OBXQRJWQ.js} +2 -2
  59. package/dist/{chunk-LBKDQKWV.js → chunk-OSSHSIMD.js} +1 -1
  60. package/dist/{chunk-TY6XOHEM.js → chunk-P7THMINS.js} +3 -3
  61. package/dist/{chunk-HMUF7FEO.js → chunk-PAGIICKN.js} +2 -2
  62. package/dist/{chunk-OSUKETIH.js → chunk-PJU63L6W.js} +1 -1
  63. package/dist/{chunk-GYE63V4P.js → chunk-POLR33RB.js} +20 -13
  64. package/dist/{chunk-7M4KAPAA.js → chunk-PUGIRFPX.js} +2 -2
  65. package/dist/{chunk-XGMNQQTJ.js → chunk-QFN7NVWM.js} +1 -1
  66. package/dist/{chunk-D2KNWIQ6.js → chunk-QFSCCQIR.js} +1 -1
  67. package/dist/{chunk-WTMUCJ6Z.js → chunk-QRKLPWEX.js} +1 -1
  68. package/dist/{chunk-XTLBLWOV.js → chunk-QVYVUCWD.js} +1 -1
  69. package/dist/{chunk-GK4AIFIH.js → chunk-SDYDNHEE.js} +34 -3
  70. package/dist/{chunk-2NCHQUPX.js → chunk-SQLK7SJL.js} +1 -1
  71. package/dist/{chunk-PMRBLBUP.js → chunk-T42U2W2R.js} +14 -2
  72. package/dist/{chunk-QXPCARFE.js → chunk-TAMQYQGJ.js} +1 -1
  73. package/dist/{chunk-PXSM4HPB.js → chunk-U3X3TPBW.js} +1 -1
  74. package/dist/{chunk-FWRNQOLT.js → chunk-UICWP23D.js} +1 -1
  75. package/dist/{chunk-OKCR3JTO.js → chunk-UM2GRYM3.js} +13 -10
  76. package/dist/{chunk-LJAU4TPS.js → chunk-VIVBA6E6.js} +2 -2
  77. package/dist/{chunk-DZEVA7DI.js → chunk-W35EKBS6.js} +2 -2
  78. package/dist/{chunk-YEIFI443.js → chunk-WPNE5NEP.js} +1 -1
  79. package/dist/{chunk-IW2CKH6A.js → chunk-XONFUK3M.js} +48 -25
  80. package/dist/{chunk-JLKMWY2T.js → chunk-Y6QL2LGO.js} +8 -5
  81. package/dist/{chunk-THXFSPLV.js → chunk-ZIRIDSDB.js} +1 -1
  82. package/dist/chunk-ZLW2V65P.js +209 -0
  83. package/dist/{chunk-6UM3R7PP.js → chunk-ZQQ3SEIE.js} +33 -32
  84. package/dist/{clean-KTHTV5G5.js → clean-YHGPY33K.js} +23 -22
  85. package/dist/cli.js +57 -159
  86. package/dist/{cloud-ARSZWALC.js → cloud-DOFI5ISR.js} +4 -4
  87. package/dist/{cloudrun-NM7RXOCL.js → cloudrun-KTZ4XDHL.js} +13 -12
  88. package/dist/commands/contrast-audit.browser.js +60 -4
  89. package/dist/commands/layout-audit.browser.js +68 -0
  90. package/dist/{compare-CY4UO3RW.js → compare-SMMIZN2C.js} +37 -36
  91. package/dist/{compiler-VTH2D3ID.js → compiler-TEXQWW6N.js} +14 -10
  92. package/dist/{component-FRUIAXIR.js → component-B3GCNGSS.js} +5 -5
  93. package/dist/{compositions-CUSY6ZYY.js → compositions-OQNZZTKF.js} +38 -33
  94. package/dist/{delete-KT3VHP4L.js → delete-EL5LVSEP.js} +4 -4
  95. package/dist/{deterministicFonts-F6WIVL2W.js → deterministicFonts-U2BIMGPG.js} +3 -3
  96. package/dist/{dist-7SZU7MA7.js → dist-5UVIRMSM.js} +7 -6
  97. package/dist/{dist-2GC6XKRQ.js → dist-XN234YFQ.js} +41 -39
  98. package/dist/{doctor-4ROTBL5U.js → doctor-UOL3OI2A.js} +17 -16
  99. package/dist/{dom-IROKGVJI.js → dom-37K6YOH4.js} +2 -2
  100. package/dist/{events-Q5PXT5UC.js → events-K2DB2PBC.js} +2 -2
  101. package/dist/{events-QJDVMKSR.js → events-NIZBS6S7.js} +3 -3
  102. package/dist/{feedback-PQ7TWESA.js → feedback-QMP4E6L7.js} +13 -12
  103. package/dist/{figma-JN5DDBDS.js → figma-2AUJRNVC.js} +3 -3
  104. package/dist/fontLocalizeCli.js +18 -17
  105. package/dist/{get-KT6OTERO.js → get-P5NC7SRM.js} +4 -4
  106. package/dist/{gpuPolicy-LCBWVGEH.js → gpuPolicy-7N5MCE2G.js} +15 -14
  107. package/dist/{grade-compare-VS3RP73G.js → grade-compare-HV5AFZ6P.js} +37 -36
  108. package/dist/{help-AD6FIZIO.js → help-3TSTXBLN.js} +1 -1
  109. package/dist/{history-ZRWYRY7R.js → history-D65XFJ6D.js} +6 -6
  110. package/dist/hyperframe-runtime.js +25 -25
  111. package/dist/hyperframe.manifest.json +1 -1
  112. package/dist/hyperframe.runtime.iife.js +25 -25
  113. package/dist/hyperframes-player.global.js +3 -3
  114. package/dist/hyperframes-slideshow.global.js +23 -23
  115. package/dist/{info-WBBQA2AX.js → info-TXV7MLFO.js} +17 -16
  116. package/dist/{init-A2XBDFGF.js → init-OSDMJZJV.js} +38 -37
  117. package/dist/{inspect-CLTZHA5O.js → inspect-RQQSAYIJ.js} +38 -37
  118. package/dist/{installer-WQDRVXH4.js → installer-CDOB32HE.js} +11 -10
  119. package/dist/{keyframes-3FYOK6H6.js → keyframes-V75Q6GRM.js} +10 -10
  120. package/dist/{lambda-Y2PA2BGS.js → lambda-RODV4RCX.js} +12 -11
  121. package/dist/{layout-4KP5O7IJ.js → layout-IZAI5SFC.js} +38 -37
  122. package/dist/{lint-V4GRFHOJ.js → lint-PLXOXY5R.js} +14 -13
  123. package/dist/{lintProject-RG2KGAXB.js → lintProject-OQ6H6XBR.js} +7 -6
  124. package/dist/{list-OQ4VED6E.js → list-BQBPNKDZ.js} +5 -5
  125. package/dist/{login-W47NKN5S.js → login-NP6F4FHC.js} +4 -4
  126. package/dist/{manager-DXB7JDHU.js → manager-GXYF4AVO.js} +2 -2
  127. package/dist/{manager-524RPYO7.js → manager-RFZNG5YT.js} +2 -2
  128. package/dist/{media-treatment-HJYL3EME.js → media-treatment-PXGMZ4A4.js} +22 -20
  129. package/dist/{models-DYBAD2GQ.js → models-CEZM6XZ7.js} +17 -16
  130. package/dist/{motionShot-7NE2YBB3.js → motionShot-R4GHYWYM.js} +25 -24
  131. package/dist/{normalize-IGLHCWTF.js → normalize-H6KUHHEI.js} +18 -7
  132. package/dist/{normalize-audio-INKCLMS2.js → normalize-audio-MQ7NFCOV.js} +10 -6
  133. package/dist/{open-TYC5THVY.js → open-AKQTGNXF.js} +5 -5
  134. package/dist/{pipeline-EVKEPQEW.js → pipeline-SYJYP2RM.js} +17 -16
  135. package/dist/{play-QMZEM6X3.js → play-NBH4B7PL.js} +31 -29
  136. package/dist/{present-Y7IK3C4W.js → present-XAX55CFS.js} +26 -25
  137. package/dist/{preview-5OQRYE6A.js → preview-OLANKNFA.js} +26 -25
  138. package/dist/{producer-Q6G6JU7B.js → producer-Q6YNZZUJ.js} +1 -1
  139. package/dist/{projectConfig-RJN3DKDB.js → projectConfig-EM26P45P.js} +13 -12
  140. package/dist/{publication-QCPGGN3U.js → publication-OXWJZKSX.js} +8 -7
  141. package/dist/{publish-VZLFIGYY.js → publish-4VBWP2UB.js} +17 -16
  142. package/dist/{remove-background-TKOEHBA5.js → remove-background-REB7427G.js} +19 -18
  143. package/dist/{render-XTXE5CRU.js → render-3CVZ2SZG.js} +13 -12
  144. package/dist/{render-KIIIF6PS.js → render-K25YOG3M.js} +19 -18
  145. package/dist/{render-X3NFNVEQ.js → render-TSE75QUL.js} +35 -34
  146. package/dist/{render-batch-M55YZLZ5.js → render-batch-GGUOK3DS.js} +13 -12
  147. package/dist/{renderCancellation-X5BEHAZU.js → renderCancellation-PZRWB53I.js} +15 -14
  148. package/dist/renderSetupWorker.js +7 -6
  149. package/dist/{resolver-GAMXRA42.js → resolver-S5VK6UCB.js} +10 -9
  150. package/dist/{sherpa-ZYTNFHD5.js → sherpa-LVIUEAGF.js} +18 -17
  151. package/dist/skills/hyperframes-cli/references/doctor-browser.md +24 -1
  152. package/dist/skills/media-use/scripts/lib/cache.mjs +28 -14
  153. package/dist/skills/media-use/scripts/lib/cache.test.mjs +110 -0
  154. package/dist/skills/media-use/scripts/lib/duck.mjs +2 -1
  155. package/dist/skills/media-use/scripts/lib/duck.test.mjs +87 -0
  156. package/dist/skills/media-use/scripts/lib/probe.mjs +6 -1
  157. package/dist/skills/media-use/scripts/lib/probe.test.mjs +73 -0
  158. package/dist/skills/media-use/scripts/lib/words.mjs +1 -1
  159. package/dist/{skills-CZHVAD3J.js → skills-I65FU5HD.js} +5 -5
  160. package/dist/{skillsUpdateCheck-6WLLX53A.js → skillsUpdateCheck-J57RNNIV.js} +3 -3
  161. package/dist/{slideshow-EJ4IMY6P.js → slideshow-4OJEPWNZ.js} +1 -1
  162. package/dist/{snapshot-K7BTJPYQ.js → snapshot-YROOGY22.js} +42 -38
  163. package/dist/{src-3I3RH3V5.js → src-JO5JOV7Y.js} +16 -13
  164. package/dist/{src-YUW26JU5.js → src-X426BZAG.js} +17 -16
  165. package/dist/{staticProjectServer-IKCSGN2B.js → staticProjectServer-5VMBS262.js} +23 -22
  166. package/dist/studio/assets/{hyperframes-player-sAsRuV73.js → hyperframes-player-BXSuksFh.js} +3 -3
  167. package/dist/studio/assets/{index-D3Vij9t1.js → index-BgOVCqjo.js} +1 -1
  168. package/dist/studio/assets/{index-D5q2_7Gw.js → index-FgyO_5Kv.js} +1 -1
  169. package/dist/studio/assets/{index-B-wffzRH.js → index-J7jpL4pj.js} +150 -150
  170. package/dist/studio/index.html +1 -1
  171. package/dist/studio/index.js +122 -160
  172. package/dist/studio/index.js.map +1 -1
  173. package/dist/{studio-api-SQ3NXFSM.js → studio-api-VRBZUGAE.js} +22 -17
  174. package/dist/{studioServer-VVEO7XCH.js → studioServer-DBNKZ6I6.js} +50 -49
  175. package/dist/{synthesize-77PTU6C5.js → synthesize-C3IWDAXF.js} +2 -2
  176. package/dist/{telemetry-FQDKR5XA.js → telemetry-CXAX3TO3.js} +3 -3
  177. package/dist/{timeline-N6ZASFNE.js → timeline-VQ34WH7J.js} +91 -69
  178. package/dist/{tokens-2OIIBBCW.js → tokens-62R7VFAZ.js} +4 -4
  179. package/dist/{transcribe-4F6MK73N.js → transcribe-7KR7IPJA.js} +18 -17
  180. package/dist/{transcribe-7YTUCXDX.js → transcribe-XOHPPL2O.js} +11 -11
  181. package/dist/{tts-TOHSPWEG.js → tts-MUV42JXT.js} +6 -6
  182. package/dist/{updateCheck-AZ2COZFR.js → updateCheck-POYNH3B5.js} +2 -2
  183. package/dist/{upgrade-QAJEYB4X.js → upgrade-NBNOT7J2.js} +2 -2
  184. package/dist/{urlDownloader-LSMFEO3R.js → urlDownloader-3NS63A7B.js} +14 -13
  185. package/dist/{validate-GW5MDL36.js → validate-Y2QDHAEP.js} +40 -27
  186. package/dist/{video-PRNOKUK3.js → video-SJDMTSTL.js} +15 -14
  187. package/package.json +1 -1
  188. package/dist/chunk-J4UX3RS3.js +0 -3717
  189. /package/dist/{chunk-HBBJFK6I.js → chunk-APDLWWFG.js} +0 -0
@@ -75,6 +75,63 @@ test("speechSpans returns empty spans for empty input", () => {
75
75
  assert.deepEqual(speechSpans({ voices: [] }, { mergeGap: 0.6 }), []);
76
76
  });
77
77
 
78
+ test("speechSpans offsets retain voice IDs across empty transcripts", () => {
79
+ const meta = {
80
+ voices: [
81
+ { id: "silent", duration_s: 2, words: [] },
82
+ { id: "narration", duration_s: 1, words: [word("w0", "hello", 0.1, 0.9)] },
83
+ ],
84
+ };
85
+ const expected = [{ start: 4.1, end: 4.9 }];
86
+ assert.deepEqual(speechSpans(meta, { offsets: { silent: 0, narration: 4 } }), expected);
87
+ assert.deepEqual(speechSpans(meta, { offsets: { narration: 4 } }), expected);
88
+ assert.throws(() => speechSpans(meta, { offsets: { silent: 0 } }), /missing voice "narration"/);
89
+ });
90
+
91
+ test("speechSpans sequential counts empty line durations and gaps", () => {
92
+ const meta = {
93
+ voices: [
94
+ { id: "intro", duration_s: 2, words: [] },
95
+ { id: "first", duration_s: 1, words: [word("w0", "hello", 0.1, 0.9)] },
96
+ { id: "pause", duration_s: 3, words: [] },
97
+ { id: "last", duration_s: 1, words: [word("w1", "goodbye", 0.1, 0.9)] },
98
+ ],
99
+ };
100
+ assert.deepEqual(speechSpans(meta, { sequential: true, gap: 0.5 }), [
101
+ { start: 2.6, end: 3.4 },
102
+ { start: 7.6, end: 8.4 },
103
+ ]);
104
+ });
105
+
106
+ test("speechSpans offsets without IDs retain original voice indices", () => {
107
+ const meta = {
108
+ voices: [{ duration_s: 2 }, { duration_s: 1, words: [word("w0", "hello", 0.1, 0.9)] }],
109
+ };
110
+ assert.deepEqual(speechSpans(meta, { offsets: { 1: 4 } }), [{ start: 4.1, end: 4.9 }]);
111
+ });
112
+
113
+ test("speechSpans keeps normalized-empty transcripts aligned with their voices", () => {
114
+ const meta = {
115
+ voices: [
116
+ { id: "untimed", duration_s: 2, words: [{ text: "hello" }] },
117
+ { id: "narration", duration_s: 1, words: [word("w0", "hello", 0.1, 0.9)] },
118
+ ],
119
+ };
120
+ assert.deepEqual(speechSpans(meta, { sequential: true }), [{ start: 2.1, end: 2.9 }]);
121
+ });
122
+
123
+ test("speechSpans does not require placement for transcripts without speech", () => {
124
+ const meta = {
125
+ voices: [
126
+ { id: "a", duration_s: 2, words: [] },
127
+ { id: "b", duration_s: 1 },
128
+ ],
129
+ };
130
+ assert.deepEqual(speechSpans(meta), []);
131
+ assert.deepEqual(speechSpans(meta, { offsets: {} }), []);
132
+ assert.deepEqual(speechSpans(meta, { sequential: true }), []);
133
+ });
134
+
78
135
  test("duckKeyframes shapes attack and release from base volume", () => {
79
136
  assert.deepEqual(
80
137
  duckKeyframes([{ start: 3, end: 5 }], {
@@ -148,6 +205,36 @@ test("--json spans match --merge-gap semantics exactly", () => {
148
205
  }
149
206
  });
150
207
 
208
+ for (const [placement, flags, expected] of [
209
+ ["sequential", ["--sequential", "--gap", "0.5"], [{ start: 2.6, end: 3.4 }]],
210
+ ["offsets", ["--offsets", "narration=4"], [{ start: 4.1, end: 4.9 }]],
211
+ ]) {
212
+ test(`audio-duck --json preserves empty voice placement with ${placement}`, (t) => {
213
+ const dir = mkdtempSync(join(tmpdir(), "media-use-duck-empty-"));
214
+ t.after(() => rmSync(dir, { recursive: true, force: true }));
215
+ const metaPath = join(dir, "audio_meta.json");
216
+ writeFileSync(
217
+ metaPath,
218
+ JSON.stringify({
219
+ voices: [
220
+ { id: "silent", duration_s: 2, words: [] },
221
+ { id: "narration", duration_s: 1, words: [word("w0", "hello", 0.1, 0.9)] },
222
+ ],
223
+ }),
224
+ );
225
+ const result = JSON.parse(
226
+ execFileSync(
227
+ process.execPath,
228
+ [SCRIPT, "--meta", metaPath, "--target", "#bgm", ...flags, "--json"],
229
+ { encoding: "utf8" },
230
+ ),
231
+ );
232
+ assert.deepEqual(result.spans, expected);
233
+ assert.equal(result.keyframes[0].time, expected[0].start);
234
+ assert.equal(result.lane.lanes[0].points[1].t, expected[0].start);
235
+ });
236
+ }
237
+
151
238
  function word(id, text, start, end) {
152
239
  return { id, text, start, end };
153
240
  }
@@ -3,6 +3,7 @@ import { extname } from "node:path";
3
3
  import { ffprobeBinary } from "./ff-binaries.mjs";
4
4
 
5
5
  const IMAGE_EXT = new Set([".jpg", ".jpeg", ".png", ".gif", ".webp", ".svg", ".ico"]);
6
+ const AUDIO_EXT = new Set([".mp3", ".wav", ".ogg", ".m4a", ".aac"]);
6
7
 
7
8
  export function probe(filePath) {
8
9
  const ext = extname(filePath).toLowerCase();
@@ -18,7 +19,11 @@ export function probe(filePath) {
18
19
  { encoding: "utf8", timeout: 5000 },
19
20
  );
20
21
  const info = JSON.parse(raw);
21
- const stream = info.streams?.[0];
22
+ const streams = info.streams ?? [];
23
+ const wantedType = AUDIO_EXT.has(ext) ? "audio" : "video";
24
+ const stream =
25
+ streams.find((s) => s.codec_type === wantedType && s.disposition?.attached_pic !== 1) ??
26
+ streams[0];
22
27
  const format = info.format;
23
28
 
24
29
  const isImage = IMAGE_EXT.has(ext);
@@ -4,6 +4,79 @@ import { chmodSync, mkdtempSync, writeFileSync, existsSync, rmSync } from "node:
4
4
  import { join } from "node:path";
5
5
  import { tmpdir } from "node:os";
6
6
  import { probe } from "./probe.mjs";
7
+ import childProcess from "node:child_process";
8
+ import { syncBuiltinESMExports } from "node:module";
9
+
10
+ function mockProbe(t, streams, format = { duration: "2" }) {
11
+ t.mock.method(childProcess, "execFileSync", () => JSON.stringify({ streams, format }));
12
+ syncBuiltinESMExports();
13
+ t.after(() => {
14
+ t.mock.restoreAll();
15
+ syncBuiltinESMExports();
16
+ });
17
+ }
18
+
19
+ const AUDIO_STREAM = { codec_type: "audio", codec_name: "aac", duration: "3" };
20
+ const VIDEO_STREAM = {
21
+ codec_type: "video",
22
+ codec_name: "h264",
23
+ width: 64,
24
+ height: 48,
25
+ duration: "4",
26
+ };
27
+ const COVER_STREAM = {
28
+ codec_type: "video",
29
+ codec_name: "mjpeg",
30
+ width: 100,
31
+ height: 100,
32
+ disposition: { attached_pic: 1 },
33
+ };
34
+
35
+ for (const [name, streams] of [
36
+ ["audio before video", [AUDIO_STREAM, VIDEO_STREAM]],
37
+ ["video before audio", [VIDEO_STREAM, AUDIO_STREAM]],
38
+ ["cover art before video", [COVER_STREAM, AUDIO_STREAM, VIDEO_STREAM]],
39
+ ]) {
40
+ test(`probe selects the video stream with ${name}`, (t) => {
41
+ mockProbe(t, streams);
42
+ assert.deepEqual(probe("clip.mp4"), {
43
+ duration: 2,
44
+ width: 64,
45
+ height: 48,
46
+ codec: "h264",
47
+ });
48
+ });
49
+ }
50
+
51
+ test("probe selects audio metadata for an audio file with cover art", (t) => {
52
+ mockProbe(t, [COVER_STREAM, AUDIO_STREAM]);
53
+ assert.deepEqual(probe("song.m4a"), { duration: 2, width: null, height: null, codec: "aac" });
54
+ });
55
+
56
+ test("probe uses the selected video's duration when the container has none", (t) => {
57
+ mockProbe(t, [AUDIO_STREAM, VIDEO_STREAM], {});
58
+ assert.equal(probe("clip.mp4").duration, 4);
59
+ });
60
+
61
+ test("probe selects image dimensions without reporting an image duration", (t) => {
62
+ mockProbe(t, [AUDIO_STREAM, VIDEO_STREAM]);
63
+ assert.deepEqual(probe("frame.png"), {
64
+ duration: null,
65
+ width: 64,
66
+ height: 48,
67
+ codec: "h264",
68
+ });
69
+ });
70
+
71
+ test("probe retains audio-only metadata and the empty-stream fallback", (t) => {
72
+ mockProbe(t, [AUDIO_STREAM]);
73
+ assert.deepEqual(probe("clip.mp4"), { duration: 2, width: null, height: null, codec: "aac" });
74
+ });
75
+
76
+ test("probe retains the container duration when no streams are reported", (t) => {
77
+ mockProbe(t, []);
78
+ assert.deepEqual(probe("clip.mp4"), { duration: 2, width: null, height: null, codec: null });
79
+ });
7
80
 
8
81
  // Regression for the shell-injection fix: probe() must pass the path as a literal
9
82
  // argv entry, never through a shell. A filename containing shell metacharacters
@@ -14,5 +14,5 @@ export function normalizeWords(input) {
14
14
  export function wordListsFromMediaMeta(input) {
15
15
  if (Array.isArray(input) || Array.isArray(input?.words)) return [normalizeWords(input)];
16
16
  if (!Array.isArray(input?.voices)) return [];
17
- return input.voices.map((voice) => normalizeWords(voice)).filter((words) => words.length > 0);
17
+ return input.voices.map((voice) => normalizeWords(voice));
18
18
  }
@@ -9,8 +9,8 @@ import {
9
9
  } from "./chunk-6BEFEWFB.js";
10
10
  import {
11
11
  trackSkillsInstallSkipped
12
- } from "./chunk-XGMNQQTJ.js";
13
- import "./chunk-LBKDQKWV.js";
12
+ } from "./chunk-QFN7NVWM.js";
13
+ import "./chunk-OSSHSIMD.js";
14
14
  import {
15
15
  diag
16
16
  } from "./chunk-VWG7OQKU.js";
@@ -39,15 +39,15 @@ import {
39
39
  isCoreSkill,
40
40
  presentSkills,
41
41
  pruneOrphanedLockEntries
42
- } from "./chunk-FZK35GT4.js";
42
+ } from "./chunk-HC7EVDEL.js";
43
43
  import {
44
44
  withMeta
45
- } from "./chunk-JLKMWY2T.js";
45
+ } from "./chunk-Y6QL2LGO.js";
46
46
  import "./chunk-K4WIOZFP.js";
47
47
  import "./chunk-XUXGIA7H.js";
48
48
  import "./chunk-WERLJGIC.js";
49
49
  import "./chunk-ISN5GRYI.js";
50
- import "./chunk-DZEVA7DI.js";
50
+ import "./chunk-W35EKBS6.js";
51
51
  import "./chunk-KNU5COPB.js";
52
52
  import {
53
53
  c
@@ -9,13 +9,13 @@ import {
9
9
  printSkillsUpdateNotice,
10
10
  refreshSkillsCache,
11
11
  skillsCheckDue
12
- } from "./chunk-FZK35GT4.js";
13
- import "./chunk-JLKMWY2T.js";
12
+ } from "./chunk-HC7EVDEL.js";
13
+ import "./chunk-Y6QL2LGO.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-DZEVA7DI.js";
18
+ import "./chunk-W35EKBS6.js";
19
19
  import "./chunk-KNU5COPB.js";
20
20
  import "./chunk-M2WBOQ2Q.js";
21
21
  export {
@@ -12,7 +12,7 @@ import {
12
12
  parseSlideshowManifest,
13
13
  resolveSlideshow,
14
14
  slideshowIslandRegex
15
- } from "./chunk-PMRBLBUP.js";
15
+ } from "./chunk-T42U2W2R.js";
16
16
  import "./chunk-M2WBOQ2Q.js";
17
17
  export {
18
18
  SLIDESHOW_ISLAND_TYPE,
@@ -9,16 +9,16 @@ import {
9
9
  } from "./chunk-KZI44OPA.js";
10
10
  import {
11
11
  serveStaticProjectHtml
12
- } from "./chunk-LQASVU3I.js";
12
+ } from "./chunk-5FISWJ37.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-LTGGTEMA.js";
18
+ import "./chunk-FVYXDXEV.js";
19
19
  import {
20
20
  resolveProject
21
- } from "./chunk-LJAU4TPS.js";
21
+ } from "./chunk-VIVBA6E6.js";
22
22
  import {
23
23
  loadOptionalPackage
24
24
  } from "./chunk-3DKN5WKL.js";
@@ -30,31 +30,31 @@ import {
30
30
  resolveCropRegion,
31
31
  runFfmpegOnce,
32
32
  seekCompositionTimeline
33
- } from "./chunk-WSGY5CDQ.js";
34
- import "./chunk-5Z63TBTX.js";
35
- import "./chunk-OSUKETIH.js";
36
- import "./chunk-TY6XOHEM.js";
37
- import "./chunk-YEIFI443.js";
38
- import "./chunk-IHFUKJOR.js";
39
- import "./chunk-YHRZQJXH.js";
40
- import "./chunk-OKCR3JTO.js";
33
+ } from "./chunk-HMT2RPZU.js";
34
+ import "./chunk-FH7WODJH.js";
35
+ import "./chunk-PJU63L6W.js";
36
+ import "./chunk-P7THMINS.js";
37
+ import "./chunk-WPNE5NEP.js";
38
+ import "./chunk-K2FLNJVB.js";
39
+ import "./chunk-7UYBQ6NF.js";
40
+ import "./chunk-UM2GRYM3.js";
41
41
  import "./chunk-QZ3AZTXI.js";
42
- import "./chunk-U7E736AJ.js";
43
- import "./chunk-6UM3R7PP.js";
42
+ import "./chunk-BFDJ63J5.js";
43
+ import "./chunk-ZQQ3SEIE.js";
44
44
  import "./chunk-G75ENCEZ.js";
45
45
  import "./chunk-EOVYQ3IG.js";
46
46
  import {
47
47
  resolveLocalBrowserGpuMode
48
- } from "./chunk-WTMUCJ6Z.js";
49
- import "./chunk-PFCFR3KZ.js";
50
- import "./chunk-EFDXGAAD.js";
48
+ } from "./chunk-QRKLPWEX.js";
49
+ import "./chunk-442JNXRM.js";
50
+ import "./chunk-2LBBHMKT.js";
51
51
  import "./chunk-XT7X6QCP.js";
52
52
  import "./chunk-4YYJOFKS.js";
53
53
  import "./chunk-HVW7ABXD.js";
54
54
  import "./chunk-6BEFEWFB.js";
55
- import "./chunk-JOTLPC6S.js";
56
- import "./chunk-75JJVANE.js";
57
- import "./chunk-QXPCARFE.js";
55
+ import "./chunk-HW4AKJ5F.js";
56
+ import "./chunk-CLOH4LIB.js";
57
+ import "./chunk-TAMQYQGJ.js";
58
58
  import "./chunk-AWDFDFI3.js";
59
59
  import "./chunk-P6LJ4Y32.js";
60
60
  import {
@@ -63,8 +63,8 @@ import {
63
63
  getFFmpegInstallHint
64
64
  } from "./chunk-TVCRUG2S.js";
65
65
  import "./chunk-374QQGBQ.js";
66
- import "./chunk-XGMNQQTJ.js";
67
- import "./chunk-LBKDQKWV.js";
66
+ import "./chunk-QFN7NVWM.js";
67
+ import "./chunk-OSSHSIMD.js";
68
68
  import "./chunk-VWG7OQKU.js";
69
69
  import "./chunk-GQJZORQP.js";
70
70
  import "./chunk-AMKC3AXA.js";
@@ -78,24 +78,24 @@ import {
78
78
  } from "./chunk-PBN6GBJE.js";
79
79
  import "./chunk-KC5XXX3X.js";
80
80
  import "./chunk-TJSTGSAW.js";
81
- import "./chunk-IDX52YJN.js";
82
- import "./chunk-DPHJKWP5.js";
83
- import "./chunk-A4KQZXZI.js";
81
+ import "./chunk-33RZPZ4K.js";
82
+ import "./chunk-F26LCYRY.js";
83
+ import "./chunk-NE55C6S5.js";
84
84
  import "./chunk-USDEMXXL.js";
85
85
  import {
86
86
  isClipVisibleAt,
87
87
  isInClipWindow
88
- } from "./chunk-YFT3BL7N.js";
89
- import "./chunk-OZUQF4NB.js";
90
- import "./chunk-DPVXBVLL.js";
88
+ } from "./chunk-4M4EC7JX.js";
91
89
  import {
92
90
  readElementRateSpec,
93
91
  sourceTimeAt,
94
92
  timeAtSourceTime
95
- } from "./chunk-J4UX3RS3.js";
93
+ } from "./chunk-6TPZSTCL.js";
96
94
  import "./chunk-VC76R6W2.js";
97
95
  import "./chunk-YA62XGXS.js";
96
+ import "./chunk-MQZVBHEY.js";
98
97
  import "./chunk-OFQWTKPW.js";
98
+ import "./chunk-DPVXBVLL.js";
99
99
  import "./chunk-T76PLPD6.js";
100
100
  import "./chunk-FXMKHHPO.js";
101
101
  import "./chunk-RQVDTPGD.js";
@@ -109,19 +109,20 @@ import {
109
109
  import "./chunk-TWWSYAKJ.js";
110
110
  import {
111
111
  lintProject
112
- } from "./chunk-IW2CKH6A.js";
113
- import "./chunk-JFKL3WAE.js";
114
- import "./chunk-HBBJFK6I.js";
112
+ } from "./chunk-XONFUK3M.js";
113
+ import "./chunk-IWFLMU2N.js";
114
+ import "./chunk-APDLWWFG.js";
115
115
  import "./chunk-PJ3HDUCY.js";
116
- import "./chunk-TQFG7HTI.js";
117
- import "./chunk-GK4AIFIH.js";
116
+ import "./chunk-3RM2ETQT.js";
117
+ import "./chunk-ZLW2V65P.js";
118
+ import "./chunk-SDYDNHEE.js";
118
119
  import "./chunk-2PSPARWP.js";
119
- import "./chunk-PMRBLBUP.js";
120
+ import "./chunk-T42U2W2R.js";
120
121
  import "./chunk-K4WIOZFP.js";
121
122
  import "./chunk-XUXGIA7H.js";
122
123
  import "./chunk-WERLJGIC.js";
123
124
  import "./chunk-ISN5GRYI.js";
124
- import "./chunk-DZEVA7DI.js";
125
+ import "./chunk-W35EKBS6.js";
125
126
  import {
126
127
  normalizeErrorMessage
127
128
  } from "./chunk-KNU5COPB.js";
@@ -371,7 +372,7 @@ function computeSnapshotTimes(duration, opts) {
371
372
  return { times: times.map(round), appendedTail: false };
372
373
  }
373
374
  async function captureSnapshots(projectDir, opts) {
374
- const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-DDMLLL2R.js");
375
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-VH55VOAL.js");
375
376
  const numFrames = opts.frames ?? 5;
376
377
  const html = await bundleWithLocalizedFonts(projectDir);
377
378
  const server = await serveStaticProjectHtml(projectDir, html, void 0, [], opts.autoProxy);
@@ -444,7 +445,7 @@ async function captureSnapshots(projectDir, opts) {
444
445
  let syncVideoFrameVisibility = null;
445
446
  let extractMediaMetadata = null;
446
447
  try {
447
- const engine = await import("./src-3I3RH3V5.js");
448
+ const engine = await import("./src-JO5JOV7Y.js");
448
449
  injectVideoFramesBatch = engine.injectVideoFramesBatch;
449
450
  syncVideoFrameVisibility = engine.syncVideoFrameVisibility;
450
451
  extractMediaMetadata = engine.extractMediaMetadata;
@@ -781,7 +782,10 @@ ${c.success("\u25C7")} ${paths.length} snapshots saved to ${args.output ? snaps
781
782
  const label2 = sheets.length === 1 ? "contact-sheet.jpg" : `contact-sheet-1..${sheets.length}.jpg`;
782
783
  console.log(` ${c.dim(label2)} (grid view for AI review)`);
783
784
  }
784
- } catch {
785
+ } catch (err) {
786
+ console.warn(
787
+ ` ${c.warn("\u26A0")} Contact sheet skipped: ${normalizeErrorMessage(err)}. Individual snapshot PNGs are still available.`
788
+ );
785
789
  }
786
790
  if (describeArg !== null) {
787
791
  try {
@@ -33,6 +33,7 @@ import {
33
33
  PROVENANCE_RENDERER_TAG,
34
34
  PROVENANCE_VERSION,
35
35
  PROVENANCE_VERSION_TAG,
36
+ SDR_RGB_TO_BT709_FILTER,
36
37
  SwiftShaderAssertionError,
37
38
  VIDEO_FRAME_FORMATS,
38
39
  VfxFailureError,
@@ -209,9 +210,9 @@ import {
209
210
  verifyGpuParity,
210
211
  writeCapturedFrame,
211
212
  writeUrlDownloadTelemetry
212
- } from "./chunk-IDX52YJN.js";
213
- import "./chunk-DPHJKWP5.js";
214
- import "./chunk-A4KQZXZI.js";
213
+ } from "./chunk-33RZPZ4K.js";
214
+ import "./chunk-F26LCYRY.js";
215
+ import "./chunk-NE55C6S5.js";
215
216
  import {
216
217
  LOW_MEMORY_TOTAL_MB_THRESHOLD,
217
218
  getCgroupMemoryLimitMb,
@@ -221,32 +222,33 @@ import {
221
222
  import {
222
223
  MEDIA_VISUAL_STYLE_PROPERTIES,
223
224
  quantizeTimeToFrame
224
- } from "./chunk-YFT3BL7N.js";
225
- import "./chunk-OZUQF4NB.js";
226
- import "./chunk-DPVXBVLL.js";
227
- import "./chunk-J4UX3RS3.js";
225
+ } from "./chunk-4M4EC7JX.js";
226
+ import "./chunk-6TPZSTCL.js";
228
227
  import "./chunk-VC76R6W2.js";
229
228
  import "./chunk-YA62XGXS.js";
229
+ import "./chunk-MQZVBHEY.js";
230
230
  import "./chunk-OFQWTKPW.js";
231
+ import "./chunk-DPVXBVLL.js";
231
232
  import "./chunk-T76PLPD6.js";
232
233
  import "./chunk-FXMKHHPO.js";
233
234
  import "./chunk-RQVDTPGD.js";
234
235
  import {
235
236
  chromeMajorCeiling
236
237
  } from "./chunk-TWWSYAKJ.js";
237
- import "./chunk-IW2CKH6A.js";
238
+ import "./chunk-XONFUK3M.js";
238
239
  import {
239
240
  resolveProjectRelativeSrc
240
- } from "./chunk-JFKL3WAE.js";
241
- import "./chunk-HBBJFK6I.js";
241
+ } from "./chunk-IWFLMU2N.js";
242
+ import "./chunk-APDLWWFG.js";
242
243
  import {
243
244
  FFMPEG_PATH_ENV,
244
245
  FFPROBE_PATH_ENV
245
246
  } from "./chunk-PJ3HDUCY.js";
246
- import "./chunk-TQFG7HTI.js";
247
- import "./chunk-GK4AIFIH.js";
247
+ import "./chunk-3RM2ETQT.js";
248
+ import "./chunk-ZLW2V65P.js";
249
+ import "./chunk-SDYDNHEE.js";
248
250
  import "./chunk-2PSPARWP.js";
249
- import "./chunk-PMRBLBUP.js";
251
+ import "./chunk-T42U2W2R.js";
250
252
  import {
251
253
  TRANSITIONS,
252
254
  convertTransfer,
@@ -289,6 +291,7 @@ export {
289
291
  PROVENANCE_RENDERER_TAG,
290
292
  PROVENANCE_VERSION,
291
293
  PROVENANCE_VERSION_TAG,
294
+ SDR_RGB_TO_BT709_FILTER,
292
295
  SwiftShaderAssertionError,
293
296
  TRANSITIONS,
294
297
  VIDEO_FRAME_FORMATS,
@@ -69,16 +69,16 @@ import {
69
69
  serializeRenderRequest,
70
70
  startServer,
71
71
  validatePlanV2MaterializedTarget
72
- } from "./chunk-QGRFOOLE.js";
72
+ } from "./chunk-6XMFEICO.js";
73
73
  import {
74
74
  FONT_FETCH_FAILED,
75
75
  FONT_FETCH_UNAVAILABLE,
76
76
  FontFetchError,
77
77
  FontFetchUnavailableError,
78
78
  injectDeterministicFontFaces
79
- } from "./chunk-7M4KAPAA.js";
79
+ } from "./chunk-PUGIRFPX.js";
80
80
  import "./chunk-FI4I7CME.js";
81
- import "./chunk-WGVOWWVK.js";
81
+ import "./chunk-KQLGTGE5.js";
82
82
  import "./chunk-KC5XXX3X.js";
83
83
  import "./chunk-TJSTGSAW.js";
84
84
  import "./chunk-BZ56MTDX.js";
@@ -95,31 +95,32 @@ import {
95
95
  isTransientBrowserError,
96
96
  prepareCaptureSessionForReuse,
97
97
  resolveConfig
98
- } from "./chunk-IDX52YJN.js";
99
- import "./chunk-DPHJKWP5.js";
100
- import "./chunk-A4KQZXZI.js";
98
+ } from "./chunk-33RZPZ4K.js";
99
+ import "./chunk-F26LCYRY.js";
100
+ import "./chunk-NE55C6S5.js";
101
101
  import "./chunk-USDEMXXL.js";
102
102
  import {
103
103
  quantizeTimeToFrame
104
- } from "./chunk-YFT3BL7N.js";
105
- import "./chunk-OZUQF4NB.js";
106
- import "./chunk-DPVXBVLL.js";
107
- import "./chunk-J4UX3RS3.js";
104
+ } from "./chunk-4M4EC7JX.js";
105
+ import "./chunk-6TPZSTCL.js";
108
106
  import "./chunk-VC76R6W2.js";
109
107
  import "./chunk-YA62XGXS.js";
108
+ import "./chunk-MQZVBHEY.js";
110
109
  import "./chunk-OFQWTKPW.js";
110
+ import "./chunk-DPVXBVLL.js";
111
111
  import "./chunk-T76PLPD6.js";
112
112
  import "./chunk-FXMKHHPO.js";
113
113
  import "./chunk-RQVDTPGD.js";
114
114
  import "./chunk-TWWSYAKJ.js";
115
- import "./chunk-IW2CKH6A.js";
116
- import "./chunk-JFKL3WAE.js";
117
- import "./chunk-HBBJFK6I.js";
115
+ import "./chunk-XONFUK3M.js";
116
+ import "./chunk-IWFLMU2N.js";
117
+ import "./chunk-APDLWWFG.js";
118
118
  import "./chunk-PJ3HDUCY.js";
119
- import "./chunk-TQFG7HTI.js";
120
- import "./chunk-GK4AIFIH.js";
119
+ import "./chunk-3RM2ETQT.js";
120
+ import "./chunk-ZLW2V65P.js";
121
+ import "./chunk-SDYDNHEE.js";
121
122
  import "./chunk-2PSPARWP.js";
122
- import "./chunk-PMRBLBUP.js";
123
+ import "./chunk-T42U2W2R.js";
123
124
  import "./chunk-3GXQPCJC.js";
124
125
  import "./chunk-M2WBOQ2Q.js";
125
126
  export {
@@ -6,50 +6,51 @@ var __filename = __hf_fileURLToPath(import.meta.url);
6
6
  var __dirname = __hf_dirname(__filename);
7
7
  import {
8
8
  serveStaticProjectHtml
9
- } from "./chunk-LQASVU3I.js";
9
+ } from "./chunk-5FISWJ37.js";
10
10
  import "./chunk-XUHOIDKG.js";
11
11
  import "./chunk-X7MTZ4T2.js";
12
- import "./chunk-LTGGTEMA.js";
13
- import "./chunk-YHRZQJXH.js";
14
- import "./chunk-OKCR3JTO.js";
12
+ import "./chunk-FVYXDXEV.js";
13
+ import "./chunk-7UYBQ6NF.js";
14
+ import "./chunk-UM2GRYM3.js";
15
15
  import "./chunk-QZ3AZTXI.js";
16
- import "./chunk-U7E736AJ.js";
17
- import "./chunk-6UM3R7PP.js";
16
+ import "./chunk-BFDJ63J5.js";
17
+ import "./chunk-ZQQ3SEIE.js";
18
18
  import "./chunk-G75ENCEZ.js";
19
19
  import "./chunk-EOVYQ3IG.js";
20
- import "./chunk-EFDXGAAD.js";
20
+ import "./chunk-2LBBHMKT.js";
21
21
  import "./chunk-XT7X6QCP.js";
22
22
  import "./chunk-4YYJOFKS.js";
23
23
  import "./chunk-HVW7ABXD.js";
24
- import "./chunk-JOTLPC6S.js";
25
- import "./chunk-75JJVANE.js";
26
- import "./chunk-QXPCARFE.js";
24
+ import "./chunk-HW4AKJ5F.js";
25
+ import "./chunk-CLOH4LIB.js";
26
+ import "./chunk-TAMQYQGJ.js";
27
27
  import "./chunk-AWDFDFI3.js";
28
28
  import "./chunk-P6LJ4Y32.js";
29
29
  import "./chunk-374QQGBQ.js";
30
30
  import "./chunk-GMECXFAN.js";
31
31
  import "./chunk-KC5XXX3X.js";
32
32
  import "./chunk-TJSTGSAW.js";
33
- import "./chunk-DPHJKWP5.js";
34
- import "./chunk-A4KQZXZI.js";
35
- import "./chunk-YFT3BL7N.js";
36
- import "./chunk-OZUQF4NB.js";
37
- import "./chunk-DPVXBVLL.js";
38
- import "./chunk-J4UX3RS3.js";
33
+ import "./chunk-F26LCYRY.js";
34
+ import "./chunk-NE55C6S5.js";
35
+ import "./chunk-4M4EC7JX.js";
36
+ import "./chunk-6TPZSTCL.js";
39
37
  import "./chunk-VC76R6W2.js";
40
38
  import "./chunk-YA62XGXS.js";
39
+ import "./chunk-MQZVBHEY.js";
41
40
  import "./chunk-OFQWTKPW.js";
41
+ import "./chunk-DPVXBVLL.js";
42
42
  import "./chunk-T76PLPD6.js";
43
43
  import "./chunk-FXMKHHPO.js";
44
44
  import "./chunk-RQVDTPGD.js";
45
- import "./chunk-IW2CKH6A.js";
46
- import "./chunk-JFKL3WAE.js";
47
- import "./chunk-HBBJFK6I.js";
45
+ import "./chunk-XONFUK3M.js";
46
+ import "./chunk-IWFLMU2N.js";
47
+ import "./chunk-APDLWWFG.js";
48
48
  import "./chunk-PJ3HDUCY.js";
49
- import "./chunk-TQFG7HTI.js";
50
- import "./chunk-GK4AIFIH.js";
49
+ import "./chunk-3RM2ETQT.js";
50
+ import "./chunk-ZLW2V65P.js";
51
+ import "./chunk-SDYDNHEE.js";
51
52
  import "./chunk-2PSPARWP.js";
52
- import "./chunk-PMRBLBUP.js";
53
+ import "./chunk-T42U2W2R.js";
53
54
  import "./chunk-M2WBOQ2Q.js";
54
55
  export {
55
56
  serveStaticProjectHtml