@ignix-social/editor 0.1.0

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 (586) hide show
  1. package/LICENSE +190 -0
  2. package/NOTICE +54 -0
  3. package/README.md +23 -0
  4. package/bin/ignix-editor.mjs +8 -0
  5. package/package.json +53 -0
  6. package/patches/index.mjs +53 -0
  7. package/scripts/build-ffmpeg-macos.sh +35 -0
  8. package/scripts/build-whisper-macos.sh +21 -0
  9. package/scripts/vendor.mjs +41 -0
  10. package/skills/ignix-editor/SKILL.md +132 -0
  11. package/src/audio.mjs +31 -0
  12. package/src/binaries.json +46 -0
  13. package/src/binaries.mjs +83 -0
  14. package/src/cli.mjs +254 -0
  15. package/src/prepare.mjs +74 -0
  16. package/src/runtime/ignix-frame.js +92 -0
  17. package/src/transcribe.mjs +71 -0
  18. package/src/validate.mjs +71 -0
  19. package/templates/blank/index.html +41 -0
  20. package/vendor/hyperframes/README.md +181 -0
  21. package/vendor/hyperframes/UPSTREAM.json +12 -0
  22. package/vendor/hyperframes/bin/hyperframes-localize-fonts.mjs +12 -0
  23. package/vendor/hyperframes/bin/hyperframes.mjs +11 -0
  24. package/vendor/hyperframes/dist/add-LR3ZR2A5.js +79 -0
  25. package/vendor/hyperframes/dist/agentPromptGenerator-VIIPZCJ3.js +143 -0
  26. package/vendor/hyperframes/dist/animatedGifPrep-P2T6YM7Z.js +34 -0
  27. package/vendor/hyperframes/dist/asset-BE2DOV72.js +26 -0
  28. package/vendor/hyperframes/dist/assetCataloger-VBLPHX24.js +340 -0
  29. package/vendor/hyperframes/dist/auth-RCQB2ZT7.js +60 -0
  30. package/vendor/hyperframes/dist/autoUpdate-RJAX3DAZ.js +268 -0
  31. package/vendor/hyperframes/dist/backgroundChecks-H2LCUIMJ.js +61 -0
  32. package/vendor/hyperframes/dist/backgroundChecksWorker.js +26 -0
  33. package/vendor/hyperframes/dist/batchRender-FT7AP7XH.js +355 -0
  34. package/vendor/hyperframes/dist/beat-analyzer.global.js +338 -0
  35. package/vendor/hyperframes/dist/beats-Y2EOP72P.js +309 -0
  36. package/vendor/hyperframes/dist/benchmark-MZ7GY3JW.js +231 -0
  37. package/vendor/hyperframes/dist/browser-HUTAMRQE.js +237 -0
  38. package/vendor/hyperframes/dist/bundleWithLocalizedFonts-5QOPOB5D.js +52 -0
  39. package/vendor/hyperframes/dist/capture-RLZA6EMR.js +4079 -0
  40. package/vendor/hyperframes/dist/capture-SZZ4IYJK.js +290 -0
  41. package/vendor/hyperframes/dist/captureFile-LYOJOUIE.js +15 -0
  42. package/vendor/hyperframes/dist/captureTimeout-PA4FYWT5.js +27 -0
  43. package/vendor/hyperframes/dist/catalog-KYU55EWR.js +1001 -0
  44. package/vendor/hyperframes/dist/check-TCG4PXLR.js +1697 -0
  45. package/vendor/hyperframes/dist/checkBrowser-RPMO4OW5.js +1032 -0
  46. package/vendor/hyperframes/dist/chunk-2EAXUCCE.js +88 -0
  47. package/vendor/hyperframes/dist/chunk-2EGFTPWD.js +1077 -0
  48. package/vendor/hyperframes/dist/chunk-2PSPARWP.js +6058 -0
  49. package/vendor/hyperframes/dist/chunk-2YN64IN5.js +5747 -0
  50. package/vendor/hyperframes/dist/chunk-3GXQPCJC.js +682 -0
  51. package/vendor/hyperframes/dist/chunk-3ZP5DXE7.js +15 -0
  52. package/vendor/hyperframes/dist/chunk-4NWOGZZS.js +1990 -0
  53. package/vendor/hyperframes/dist/chunk-4PFZPP2N.js +587 -0
  54. package/vendor/hyperframes/dist/chunk-4THIAPBL.js +128 -0
  55. package/vendor/hyperframes/dist/chunk-4YYJOFKS.js +28 -0
  56. package/vendor/hyperframes/dist/chunk-54HJ63Q2.js +29 -0
  57. package/vendor/hyperframes/dist/chunk-5ETJX6WM.js +89 -0
  58. package/vendor/hyperframes/dist/chunk-5IAKAQA7.js +389 -0
  59. package/vendor/hyperframes/dist/chunk-5Z63TBTX.js +37 -0
  60. package/vendor/hyperframes/dist/chunk-6BEFEWFB.js +25 -0
  61. package/vendor/hyperframes/dist/chunk-6CSYCFQV.js +68 -0
  62. package/vendor/hyperframes/dist/chunk-6CTIGJY7.js +154 -0
  63. package/vendor/hyperframes/dist/chunk-7HG4BFIN.js +93 -0
  64. package/vendor/hyperframes/dist/chunk-7JZ4FXP2.js +118 -0
  65. package/vendor/hyperframes/dist/chunk-A2Z4Z4VL.js +2961 -0
  66. package/vendor/hyperframes/dist/chunk-AMKC3AXA.js +25 -0
  67. package/vendor/hyperframes/dist/chunk-AVUUN2XD.js +4847 -0
  68. package/vendor/hyperframes/dist/chunk-AWDFDFI3.js +46 -0
  69. package/vendor/hyperframes/dist/chunk-AWNBM3MZ.js +94 -0
  70. package/vendor/hyperframes/dist/chunk-BXCMXMJQ.js +73 -0
  71. package/vendor/hyperframes/dist/chunk-BZ56MTDX.js +6 -0
  72. package/vendor/hyperframes/dist/chunk-CFKU7HTK.js +171 -0
  73. package/vendor/hyperframes/dist/chunk-CWPVM2QV.js +308 -0
  74. package/vendor/hyperframes/dist/chunk-DPVXBVLL.js +31292 -0
  75. package/vendor/hyperframes/dist/chunk-DQBY7FRR.js +397 -0
  76. package/vendor/hyperframes/dist/chunk-E6RPWJVC.js +213 -0
  77. package/vendor/hyperframes/dist/chunk-EISRN4E6.js +294 -0
  78. package/vendor/hyperframes/dist/chunk-EOVYQ3IG.js +143 -0
  79. package/vendor/hyperframes/dist/chunk-F3WZGU7C.js +479 -0
  80. package/vendor/hyperframes/dist/chunk-FCSIGXXP.js +366 -0
  81. package/vendor/hyperframes/dist/chunk-FI4I7CME.js +56 -0
  82. package/vendor/hyperframes/dist/chunk-FLWXXDNS.js +15 -0
  83. package/vendor/hyperframes/dist/chunk-GK4AIFIH.js +11171 -0
  84. package/vendor/hyperframes/dist/chunk-GMECXFAN.js +57 -0
  85. package/vendor/hyperframes/dist/chunk-GULOKZLI.js +155 -0
  86. package/vendor/hyperframes/dist/chunk-H4YZZ2VQ.js +68 -0
  87. package/vendor/hyperframes/dist/chunk-H6QMKUYA.js +477 -0
  88. package/vendor/hyperframes/dist/chunk-HBBJFK6I.js +273 -0
  89. package/vendor/hyperframes/dist/chunk-HRUGC23L.js +212 -0
  90. package/vendor/hyperframes/dist/chunk-HVW7ABXD.js +19 -0
  91. package/vendor/hyperframes/dist/chunk-HW6OYASV.js +344 -0
  92. package/vendor/hyperframes/dist/chunk-HWKCIWQT.js +3578 -0
  93. package/vendor/hyperframes/dist/chunk-I465DBM6.js +1214 -0
  94. package/vendor/hyperframes/dist/chunk-IGLEPPTN.js +24 -0
  95. package/vendor/hyperframes/dist/chunk-IGNAAHS3.js +433 -0
  96. package/vendor/hyperframes/dist/chunk-IHFUKJOR.js +85 -0
  97. package/vendor/hyperframes/dist/chunk-IQ3OUQ5Z.js +213 -0
  98. package/vendor/hyperframes/dist/chunk-ISN5GRYI.js +20 -0
  99. package/vendor/hyperframes/dist/chunk-IUZFXWSV.js +446 -0
  100. package/vendor/hyperframes/dist/chunk-JH556Q42.js +647 -0
  101. package/vendor/hyperframes/dist/chunk-JTHMTOMQ.js +601 -0
  102. package/vendor/hyperframes/dist/chunk-K2EQN4VU.js +405 -0
  103. package/vendor/hyperframes/dist/chunk-K2FTXJYH.js +16044 -0
  104. package/vendor/hyperframes/dist/chunk-K4WIOZFP.js +32 -0
  105. package/vendor/hyperframes/dist/chunk-K4WKGXRC.js +18 -0
  106. package/vendor/hyperframes/dist/chunk-KBJUXVOJ.js +172 -0
  107. package/vendor/hyperframes/dist/chunk-KC5XXX3X.js +590 -0
  108. package/vendor/hyperframes/dist/chunk-KNU5COPB.js +29 -0
  109. package/vendor/hyperframes/dist/chunk-KZI44OPA.js +185 -0
  110. package/vendor/hyperframes/dist/chunk-L3YOGIPG.js +48 -0
  111. package/vendor/hyperframes/dist/chunk-LAOCA3MQ.js +189 -0
  112. package/vendor/hyperframes/dist/chunk-LCSMOLGX.js +312 -0
  113. package/vendor/hyperframes/dist/chunk-LFGJWOVA.js +61 -0
  114. package/vendor/hyperframes/dist/chunk-LHSR3M4M.js +498 -0
  115. package/vendor/hyperframes/dist/chunk-LYNI3FOL.js +123 -0
  116. package/vendor/hyperframes/dist/chunk-M2WBOQ2Q.js +54 -0
  117. package/vendor/hyperframes/dist/chunk-MRF4AMKD.js +104 -0
  118. package/vendor/hyperframes/dist/chunk-MWB3ZIFM.js +852 -0
  119. package/vendor/hyperframes/dist/chunk-NGKM64BP.js +39 -0
  120. package/vendor/hyperframes/dist/chunk-NXMYHJAL.js +43 -0
  121. package/vendor/hyperframes/dist/chunk-OAF4XJOW.js +192 -0
  122. package/vendor/hyperframes/dist/chunk-OFQWTKPW.js +117 -0
  123. package/vendor/hyperframes/dist/chunk-P6LJ4Y32.js +4662 -0
  124. package/vendor/hyperframes/dist/chunk-PBN6GBJE.js +108 -0
  125. package/vendor/hyperframes/dist/chunk-PDAMK4Q5.js +28 -0
  126. package/vendor/hyperframes/dist/chunk-PFCFR3KZ.js +20 -0
  127. package/vendor/hyperframes/dist/chunk-PJ3HDUCY.js +108 -0
  128. package/vendor/hyperframes/dist/chunk-PMRBLBUP.js +152 -0
  129. package/vendor/hyperframes/dist/chunk-PPQUYWTW.js +240 -0
  130. package/vendor/hyperframes/dist/chunk-Q5X2B5WT.js +29 -0
  131. package/vendor/hyperframes/dist/chunk-Q7IU7MOR.js +351 -0
  132. package/vendor/hyperframes/dist/chunk-QC4FJVLM.js +371 -0
  133. package/vendor/hyperframes/dist/chunk-QNYYOUU3.js +1318 -0
  134. package/vendor/hyperframes/dist/chunk-RDNNAKEP.js +161 -0
  135. package/vendor/hyperframes/dist/chunk-RMHUQGRK.js +657 -0
  136. package/vendor/hyperframes/dist/chunk-RQVDTPGD.js +6 -0
  137. package/vendor/hyperframes/dist/chunk-RVCWIIZ7.js +68 -0
  138. package/vendor/hyperframes/dist/chunk-S3D6GE5W.js +72 -0
  139. package/vendor/hyperframes/dist/chunk-S3S4TGEH.js +424 -0
  140. package/vendor/hyperframes/dist/chunk-S7NPLFWV.js +11395 -0
  141. package/vendor/hyperframes/dist/chunk-SHB5VDMH.js +51 -0
  142. package/vendor/hyperframes/dist/chunk-TCLGPL65.js +860 -0
  143. package/vendor/hyperframes/dist/chunk-THXFSPLV.js +40 -0
  144. package/vendor/hyperframes/dist/chunk-TJSTGSAW.js +354 -0
  145. package/vendor/hyperframes/dist/chunk-TQFG7HTI.js +1024 -0
  146. package/vendor/hyperframes/dist/chunk-TVCRUG2S.js +265 -0
  147. package/vendor/hyperframes/dist/chunk-TWWSYAKJ.js +24 -0
  148. package/vendor/hyperframes/dist/chunk-U7CZBDMV.js +27 -0
  149. package/vendor/hyperframes/dist/chunk-UEZXMWG3.js +139 -0
  150. package/vendor/hyperframes/dist/chunk-UYEZTK4U.js +61 -0
  151. package/vendor/hyperframes/dist/chunk-VC76R6W2.js +27 -0
  152. package/vendor/hyperframes/dist/chunk-VFCKXTBB.js +159 -0
  153. package/vendor/hyperframes/dist/chunk-VWG7OQKU.js +22 -0
  154. package/vendor/hyperframes/dist/chunk-VXVRPIJA.js +105 -0
  155. package/vendor/hyperframes/dist/chunk-WBLXWOYK.js +15 -0
  156. package/vendor/hyperframes/dist/chunk-WERLJGIC.js +20 -0
  157. package/vendor/hyperframes/dist/chunk-WMQNIQDJ.js +2057 -0
  158. package/vendor/hyperframes/dist/chunk-WPHMNO44.js +4528 -0
  159. package/vendor/hyperframes/dist/chunk-X5HWXQPU.js +113 -0
  160. package/vendor/hyperframes/dist/chunk-X7MTZ4T2.js +6 -0
  161. package/vendor/hyperframes/dist/chunk-XH4DSOS5.js +59 -0
  162. package/vendor/hyperframes/dist/chunk-XS4EJSKU.js +23 -0
  163. package/vendor/hyperframes/dist/chunk-XT5P4QMO.js +181 -0
  164. package/vendor/hyperframes/dist/chunk-XT7X6QCP.js +6 -0
  165. package/vendor/hyperframes/dist/chunk-XUHOIDKG.js +6 -0
  166. package/vendor/hyperframes/dist/chunk-XUXGIA7H.js +485 -0
  167. package/vendor/hyperframes/dist/chunk-XZABUQTX.js +113 -0
  168. package/vendor/hyperframes/dist/chunk-Y6W4DVPS.js +356 -0
  169. package/vendor/hyperframes/dist/chunk-YEIFI443.js +44 -0
  170. package/vendor/hyperframes/dist/chunk-YQZNILVH.js +375 -0
  171. package/vendor/hyperframes/dist/chunk-Z27A7NUB.js +65 -0
  172. package/vendor/hyperframes/dist/chunk-Z6B37SNM.js +3081 -0
  173. package/vendor/hyperframes/dist/chunk-ZJUKFZ2P.js +10954 -0
  174. package/vendor/hyperframes/dist/chunk-ZKDMAOFU.js +32 -0
  175. package/vendor/hyperframes/dist/chunk-ZMXUQLI2.js +17219 -0
  176. package/vendor/hyperframes/dist/chunk-ZTZ7NCJT.js +58 -0
  177. package/vendor/hyperframes/dist/chunk-ZTZA4UWZ.js +108 -0
  178. package/vendor/hyperframes/dist/clean-W57E5YQ3.js +293 -0
  179. package/vendor/hyperframes/dist/cli.js +495 -0
  180. package/vendor/hyperframes/dist/cloud-FFTJGZ24.js +70 -0
  181. package/vendor/hyperframes/dist/cloudrun-AJUTHUEA.js +763 -0
  182. package/vendor/hyperframes/dist/colors-HKWSZCGK.js +15 -0
  183. package/vendor/hyperframes/dist/commands/contrast-audit.browser.js +459 -0
  184. package/vendor/hyperframes/dist/commands/layout-audit.browser.js +2102 -0
  185. package/vendor/hyperframes/dist/commands/motion-sample.browser.js +74 -0
  186. package/vendor/hyperframes/dist/commands/motion-signature.browser.js +374 -0
  187. package/vendor/hyperframes/dist/compare-AYCTT55F.js +421 -0
  188. package/vendor/hyperframes/dist/compiler-QO36EXLS.js +121 -0
  189. package/vendor/hyperframes/dist/component-VFFR2O7T.js +176 -0
  190. package/vendor/hyperframes/dist/compositions-QTVN3U2A.js +228 -0
  191. package/vendor/hyperframes/dist/contactSheet-27SRU7A4.js +22 -0
  192. package/vendor/hyperframes/dist/delete-ZAKYCB7I.js +114 -0
  193. package/vendor/hyperframes/dist/deploy-MX76RZ36.js +101 -0
  194. package/vendor/hyperframes/dist/destroy-H2TZBYHH.js +42 -0
  195. package/vendor/hyperframes/dist/deterministicFonts-HAEMV4TM.js +50 -0
  196. package/vendor/hyperframes/dist/dist-EWXJGN63.js +129 -0
  197. package/vendor/hyperframes/dist/dist-FNNGCKFS.js +29 -0
  198. package/vendor/hyperframes/dist/dist-S3PJNPXQ.js +392 -0
  199. package/vendor/hyperframes/dist/docker/Dockerfile.render +65 -0
  200. package/vendor/hyperframes/dist/docs/compositions.md +67 -0
  201. package/vendor/hyperframes/dist/docs/data-attributes.md +27 -0
  202. package/vendor/hyperframes/dist/docs/examples.md +19 -0
  203. package/vendor/hyperframes/dist/docs/gsap.md +26 -0
  204. package/vendor/hyperframes/dist/docs/rendering.md +35 -0
  205. package/vendor/hyperframes/dist/docs/troubleshooting.md +29 -0
  206. package/vendor/hyperframes/dist/docs-QAPJEGLS.js +131 -0
  207. package/vendor/hyperframes/dist/doctor-AI7C3FON.js +67 -0
  208. package/vendor/hyperframes/dist/dom-IROKGVJI.js +14 -0
  209. package/vendor/hyperframes/dist/dotEnv-AECLXQSO.js +14 -0
  210. package/vendor/hyperframes/dist/events-7LALYNKZ.js +92 -0
  211. package/vendor/hyperframes/dist/events-FQY3HGKZ.js +88 -0
  212. package/vendor/hyperframes/dist/feedback-WCMDMSTK.js +472 -0
  213. package/vendor/hyperframes/dist/ffmpeg-QIUFEFTY.js +35 -0
  214. package/vendor/hyperframes/dist/figma-64WY462P.js +63 -0
  215. package/vendor/hyperframes/dist/fontData.generated-NXAOI4GH.js +13 -0
  216. package/vendor/hyperframes/dist/fontLocalizeCli.js +132 -0
  217. package/vendor/hyperframes/dist/get-FPOMJMZB.js +103 -0
  218. package/vendor/hyperframes/dist/gpuPolicy-2ZUZE5D6.js +38 -0
  219. package/vendor/hyperframes/dist/grade-compare-E2CKPST4.js +647 -0
  220. package/vendor/hyperframes/dist/gsapParser-DIYYX6JT.js +2846 -0
  221. package/vendor/hyperframes/dist/gsapParserAcorn-E3GEIRZB.js +28 -0
  222. package/vendor/hyperframes/dist/help-YRQIDDML.js +197 -0
  223. package/vendor/hyperframes/dist/history-PP5NDRV3.js +571 -0
  224. package/vendor/hyperframes/dist/hyperframe-runtime.js +1081 -0
  225. package/vendor/hyperframes/dist/hyperframe.manifest.json +22 -0
  226. package/vendor/hyperframes/dist/hyperframe.runtime.iife.js +1081 -0
  227. package/vendor/hyperframes/dist/hyperframes-player.global.js +474 -0
  228. package/vendor/hyperframes/dist/hyperframes-slideshow.global.js +149 -0
  229. package/vendor/hyperframes/dist/info-SEX3B7JL.js +153 -0
  230. package/vendor/hyperframes/dist/init-U3AKHO5B.js +1147 -0
  231. package/vendor/hyperframes/dist/inspect-Q3K6EDEK.js +97 -0
  232. package/vendor/hyperframes/dist/installer-K6O5WF44.js +37 -0
  233. package/vendor/hyperframes/dist/keyframes-DC64JCI3.js +2602 -0
  234. package/vendor/hyperframes/dist/lambda-D7UMN4DJ.js +451 -0
  235. package/vendor/hyperframes/dist/layout-XSPPDHOO.js +86 -0
  236. package/vendor/hyperframes/dist/lib-TPG2ZMAX.js +128 -0
  237. package/vendor/hyperframes/dist/lint-7DQZE7L3.js +164 -0
  238. package/vendor/hyperframes/dist/lintProject-OHBBM3DJ.js +27 -0
  239. package/vendor/hyperframes/dist/list-4K5MVDQX.js +162 -0
  240. package/vendor/hyperframes/dist/login-NTX4OWXL.js +377 -0
  241. package/vendor/hyperframes/dist/logout-Q654A3SI.js +100 -0
  242. package/vendor/hyperframes/dist/manager-67P2XFXQ.js +34 -0
  243. package/vendor/hyperframes/dist/manager-CT3D67CG.js +38 -0
  244. package/vendor/hyperframes/dist/manager-GFN75DM4.js +30 -0
  245. package/vendor/hyperframes/dist/media-treatment-5FYAOPNL.js +972 -0
  246. package/vendor/hyperframes/dist/media-use-4XXGABIL.js +113 -0
  247. package/vendor/hyperframes/dist/models-C4E4IWJD.js +137 -0
  248. package/vendor/hyperframes/dist/motionShot-S4MIGMT5.js +614 -0
  249. package/vendor/hyperframes/dist/normalize-O76AC4HE.js +333 -0
  250. package/vendor/hyperframes/dist/normalize-audio-CSFTXLXD.js +276 -0
  251. package/vendor/hyperframes/dist/open-2ZD6BHZG.js +115 -0
  252. package/vendor/hyperframes/dist/pipeline-TNGWUZQC.js +54 -0
  253. package/vendor/hyperframes/dist/play-CTMUXX6E.js +349 -0
  254. package/vendor/hyperframes/dist/policies-FSDZVS2E.js +292 -0
  255. package/vendor/hyperframes/dist/preflight-SMNV6RW2.js +45 -0
  256. package/vendor/hyperframes/dist/present-WQVHV5CR.js +350 -0
  257. package/vendor/hyperframes/dist/preview-JOJXTH75.js +1820 -0
  258. package/vendor/hyperframes/dist/producer-ECLEN5RP.js +13 -0
  259. package/vendor/hyperframes/dist/progress-FBIEEB7Y.js +73 -0
  260. package/vendor/hyperframes/dist/projectConfig-HYJMJ5BY.js +56 -0
  261. package/vendor/hyperframes/dist/publication-HQ5Y3KBM.js +29 -0
  262. package/vendor/hyperframes/dist/publish-VHDYQASC.js +430 -0
  263. package/vendor/hyperframes/dist/refresh-K24ETHMA.js +53 -0
  264. package/vendor/hyperframes/dist/remove-background-W2YX2NVH.js +253 -0
  265. package/vendor/hyperframes/dist/render-AO5VX3YI.js +177 -0
  266. package/vendor/hyperframes/dist/render-LNO62LEL.js +2367 -0
  267. package/vendor/hyperframes/dist/render-TTQI7TGN.js +796 -0
  268. package/vendor/hyperframes/dist/render-batch-YH7CTWNY.js +284 -0
  269. package/vendor/hyperframes/dist/renderCancellation-JPIHE47X.js +35 -0
  270. package/vendor/hyperframes/dist/renderSetupWorker.js +79 -0
  271. package/vendor/hyperframes/dist/resolver-IZ647GBZ.js +38 -0
  272. package/vendor/hyperframes/dist/runtimeVersion.js +18 -0
  273. package/vendor/hyperframes/dist/screenshotCapture-ECBTLCU6.js +179 -0
  274. package/vendor/hyperframes/dist/shaderTransitionWorker.js +44 -0
  275. package/vendor/hyperframes/dist/sherpa-KKLNW6U2.js +314 -0
  276. package/vendor/hyperframes/dist/sherpaWorker.js +77 -0
  277. package/vendor/hyperframes/dist/sites-TNVKZS73.js +52 -0
  278. package/vendor/hyperframes/dist/skill-ZHVLH7KX.js +15 -0
  279. package/vendor/hyperframes/dist/skills/hyperframes/SKILL.md +152 -0
  280. package/vendor/hyperframes/dist/skills/hyperframes/references/brief-contract.md +108 -0
  281. package/vendor/hyperframes/dist/skills/hyperframes/references/brief-format.md +72 -0
  282. package/vendor/hyperframes/dist/skills/hyperframes/references/capability-menu.md +47 -0
  283. package/vendor/hyperframes/dist/skills/hyperframes/references/frame-worker-core.md +80 -0
  284. package/vendor/hyperframes/dist/skills/hyperframes/references/intent-interview.md +73 -0
  285. package/vendor/hyperframes/dist/skills/hyperframes/references/pitch-round.md +40 -0
  286. package/vendor/hyperframes/dist/skills/hyperframes/references/plugin-installation.md +43 -0
  287. package/vendor/hyperframes/dist/skills/hyperframes/references/production-loop.md +26 -0
  288. package/vendor/hyperframes/dist/skills/hyperframes/references/review-loop.md +37 -0
  289. package/vendor/hyperframes/dist/skills/hyperframes/references/route-briefs.md +11 -0
  290. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/embedded-captions.md +11 -0
  291. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
  292. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/general-video.md +12 -0
  293. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/motion-graphics.md +11 -0
  294. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/music-to-video.md +12 -0
  295. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/pr-to-video.md +28 -0
  296. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/product-launch-video.md +13 -0
  297. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
  298. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/slideshow.md +11 -0
  299. package/vendor/hyperframes/dist/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
  300. package/vendor/hyperframes/dist/skills/hyperframes/references/script-format.md +52 -0
  301. package/vendor/hyperframes/dist/skills/hyperframes/references/skill-lifecycle.md +35 -0
  302. package/vendor/hyperframes/dist/skills/hyperframes/references/storyboard-format.md +99 -0
  303. package/vendor/hyperframes/dist/skills/hyperframes/references/subagent-dispatch.md +35 -0
  304. package/vendor/hyperframes/dist/skills/hyperframes/references/workflow-catalog.md +10 -0
  305. package/vendor/hyperframes/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +194 -0
  306. package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.mjs +88 -0
  307. package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.test.mjs +117 -0
  308. package/vendor/hyperframes/dist/skills/hyperframes-cli/SKILL.md +189 -0
  309. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/beats.md +19 -0
  310. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloud.md +163 -0
  311. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloudrun.md +62 -0
  312. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/compare-and-batch.md +105 -0
  313. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/doctor-browser.md +57 -0
  314. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/init-and-scaffold.md +74 -0
  315. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lambda.md +185 -0
  316. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +132 -0
  317. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/preview-render.md +193 -0
  318. package/vendor/hyperframes/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +134 -0
  319. package/vendor/hyperframes/dist/skills/media-use/SKILL.md +100 -0
  320. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/CREDITS.md +35 -0
  321. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/chime.mp3 +0 -0
  322. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click-soft.mp3 +0 -0
  323. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click.mp3 +0 -0
  324. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/error.mp3 +0 -0
  325. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-1.mp3 +0 -0
  326. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-2.mp3 +0 -0
  327. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-3.mp3 +0 -0
  328. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 +0 -0
  329. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 +0 -0
  330. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/key-press.mp3 +0 -0
  331. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/manifest.json +97 -0
  332. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/notification.mp3 +0 -0
  333. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/ping.mp3 +0 -0
  334. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/pop.mp3 +0 -0
  335. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/riser.mp3 +0 -0
  336. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/sparkle.mp3 +0 -0
  337. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/typing.mp3 +0 -0
  338. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 +0 -0
  339. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-short.mp3 +0 -0
  340. package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh.mp3 +0 -0
  341. package/vendor/hyperframes/dist/skills/media-use/audio/references/bgm.md +76 -0
  342. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/authoring.md +163 -0
  343. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/motion.md +87 -0
  344. package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/transcript-handling.md +97 -0
  345. package/vendor/hyperframes/dist/skills/media-use/audio/references/remove-background.md +143 -0
  346. package/vendor/hyperframes/dist/skills/media-use/audio/references/requirements.md +29 -0
  347. package/vendor/hyperframes/dist/skills/media-use/audio/references/sfx.md +42 -0
  348. package/vendor/hyperframes/dist/skills/media-use/audio/references/transcribe.md +52 -0
  349. package/vendor/hyperframes/dist/skills/media-use/audio/references/tts-to-captions.md +35 -0
  350. package/vendor/hyperframes/dist/skills/media-use/audio/references/tts.md +260 -0
  351. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.mjs +311 -0
  352. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.test.mjs +159 -0
  353. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +131 -0
  354. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.mjs +122 -0
  355. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.test.mjs +38 -0
  356. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.mjs +98 -0
  357. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.test.mjs +233 -0
  358. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.mjs +39 -0
  359. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.test.mjs +136 -0
  360. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm-volume.mjs +4 -0
  361. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.mjs +257 -0
  362. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.test.mjs +74 -0
  363. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.mjs +14 -0
  364. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.test.mjs +41 -0
  365. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.mjs +43 -0
  366. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.py +52 -0
  367. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.test.mjs +86 -0
  368. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth_test.py +90 -0
  369. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.mjs +122 -0
  370. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.test.mjs +243 -0
  371. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.mjs +197 -0
  372. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +185 -0
  373. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.mjs +114 -0
  374. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.test.mjs +205 -0
  375. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.mjs +77 -0
  376. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.test.mjs +136 -0
  377. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.mjs +165 -0
  378. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.test.mjs +121 -0
  379. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.mjs +389 -0
  380. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs +158 -0
  381. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.test.mjs +230 -0
  382. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lyria-recipe.py +136 -0
  383. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.mjs +175 -0
  384. package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.test.mjs +108 -0
  385. package/vendor/hyperframes/dist/skills/media-use/luts/README.md +28 -0
  386. package/vendor/hyperframes/dist/skills/media-use/luts/index.json +57 -0
  387. package/vendor/hyperframes/dist/skills/media-use/references/audio.md +20 -0
  388. package/vendor/hyperframes/dist/skills/media-use/references/grading.md +160 -0
  389. package/vendor/hyperframes/dist/skills/media-use/references/media-treatment-recipes.md +929 -0
  390. package/vendor/hyperframes/dist/skills/media-use/references/media-treatments.md +202 -0
  391. package/vendor/hyperframes/dist/skills/media-use/references/memory.md +37 -0
  392. package/vendor/hyperframes/dist/skills/media-use/references/meta.md +61 -0
  393. package/vendor/hyperframes/dist/skills/media-use/references/operations.md +327 -0
  394. package/vendor/hyperframes/dist/skills/media-use/references/resolve.md +150 -0
  395. package/vendor/hyperframes/dist/skills/media-use/references/setup-providers.md +80 -0
  396. package/vendor/hyperframes/dist/skills/media-use/references/telemetry-dashboard.md +49 -0
  397. package/vendor/hyperframes/dist/skills/media-use/scripts/audio-duck.mjs +113 -0
  398. package/vendor/hyperframes/dist/skills/media-use/scripts/compatibility.test.mjs +96 -0
  399. package/vendor/hyperframes/dist/skills/media-use/scripts/dither.mjs +328 -0
  400. package/vendor/hyperframes/dist/skills/media-use/scripts/dither.test.mjs +176 -0
  401. package/vendor/hyperframes/dist/skills/media-use/scripts/eval.mjs +369 -0
  402. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.mjs +128 -0
  403. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.test.mjs +95 -0
  404. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
  405. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
  406. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +119 -0
  407. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +139 -0
  408. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cache.mjs +148 -0
  409. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.mjs +91 -0
  410. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.test.mjs +155 -0
  411. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.mjs +161 -0
  412. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.test.mjs +34 -0
  413. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.d.mts +3 -0
  414. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.mjs +45 -0
  415. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.test.mjs +79 -0
  416. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/coverage.test.mjs +136 -0
  417. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.mjs +181 -0
  418. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.test.mjs +80 -0
  419. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.mjs +198 -0
  420. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.test.mjs +125 -0
  421. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.mjs +184 -0
  422. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.test.mjs +162 -0
  423. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.mjs +95 -0
  424. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.test.mjs +153 -0
  425. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.mjs +230 -0
  426. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.test.mjs +102 -0
  427. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ff-binaries.mjs +37 -0
  428. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.mjs +72 -0
  429. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.test.mjs +138 -0
  430. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.mjs +265 -0
  431. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.test.mjs +285 -0
  432. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.mjs +191 -0
  433. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +301 -0
  434. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.mjs +45 -0
  435. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.test.mjs +49 -0
  436. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.mjs +138 -0
  437. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +435 -0
  438. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/image-provider.mjs +44 -0
  439. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/index-gen.mjs +63 -0
  440. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-media-search.mjs +32 -0
  441. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.mjs +318 -0
  442. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.test.mjs +220 -0
  443. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.mjs +78 -0
  444. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.test.mjs +121 -0
  445. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.mjs +244 -0
  446. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.test.mjs +298 -0
  447. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.mjs +94 -0
  448. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +316 -0
  449. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.mjs +271 -0
  450. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +199 -0
  451. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.d.mts +19 -0
  452. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.mjs +279 -0
  453. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.test.mjs +397 -0
  454. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/match.mjs +47 -0
  455. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.mjs +85 -0
  456. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.test.mjs +197 -0
  457. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.mjs +20 -0
  458. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.test.mjs +61 -0
  459. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.d.mts +9 -0
  460. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.mjs +107 -0
  461. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.mjs +128 -0
  462. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.test.mjs +174 -0
  463. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.mjs +49 -0
  464. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.test.mjs +89 -0
  465. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.mjs +31 -0
  466. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.test.mjs +50 -0
  467. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.mjs +27 -0
  468. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.test.mjs +44 -0
  469. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.mjs +180 -0
  470. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.test.mjs +189 -0
  471. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.mjs +41 -0
  472. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.test.mjs +148 -0
  473. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/providers.mjs +5 -0
  474. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.mjs +367 -0
  475. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.test.mjs +367 -0
  476. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.mjs +212 -0
  477. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.test.mjs +262 -0
  478. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.mjs +24 -0
  479. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.test.mjs +32 -0
  480. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
  481. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.mjs +132 -0
  482. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.test.mjs +157 -0
  483. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.mjs +117 -0
  484. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.test.mjs +165 -0
  485. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/svg-sanitize.mjs +21 -0
  486. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.mjs +210 -0
  487. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.test.mjs +437 -0
  488. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/test-home.test.mjs +10 -0
  489. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.mjs +21 -0
  490. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.test.mjs +33 -0
  491. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.mjs +94 -0
  492. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.test.mjs +72 -0
  493. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.mjs +57 -0
  494. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.test.mjs +54 -0
  495. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.mjs +57 -0
  496. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.test.mjs +46 -0
  497. package/vendor/hyperframes/dist/skills/media-use/scripts/lib/words.mjs +18 -0
  498. package/vendor/hyperframes/dist/skills/media-use/scripts/prefs.mjs +70 -0
  499. package/vendor/hyperframes/dist/skills/media-use/scripts/recipe.mjs +103 -0
  500. package/vendor/hyperframes/dist/skills/media-use/scripts/resolve-plugin.test.mjs +62 -0
  501. package/vendor/hyperframes/dist/skills/media-use/scripts/resolve.mjs +1369 -0
  502. package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.mjs +194 -0
  503. package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.test.mjs +112 -0
  504. package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.mjs +270 -0
  505. package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.test.mjs +117 -0
  506. package/vendor/hyperframes/dist/skills-MJ2J4GEM.js +808 -0
  507. package/vendor/hyperframes/dist/skillsUpdateCheck-TKTYQN5R.js +26 -0
  508. package/vendor/hyperframes/dist/slideshow-EJ4IMY6P.js +24 -0
  509. package/vendor/hyperframes/dist/snapshot-KIVDUUMN.js +875 -0
  510. package/vendor/hyperframes/dist/src-6YQBJGWR.js +202 -0
  511. package/vendor/hyperframes/dist/src-PVYUYV3M.js +471 -0
  512. package/vendor/hyperframes/dist/state-KAXGHF77.js +26 -0
  513. package/vendor/hyperframes/dist/staticProjectServer-7EU666GS.js +49 -0
  514. package/vendor/hyperframes/dist/status-YM52BQ6S.js +311 -0
  515. package/vendor/hyperframes/dist/studio/assets/hyperframes-player-Cp8e_Zst.js +473 -0
  516. package/vendor/hyperframes/dist/studio/assets/index-BX3KHhGX.js +71 -0
  517. package/vendor/hyperframes/dist/studio/assets/index-CASEBNy2.js +1 -0
  518. package/vendor/hyperframes/dist/studio/assets/index-D11atkBt.css +1 -0
  519. package/vendor/hyperframes/dist/studio/assets/index-DMTt9nTf.js +531 -0
  520. package/vendor/hyperframes/dist/studio/assets/index-oE1pOdAy.js +399 -0
  521. package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js +948 -0
  522. package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js.map +1 -0
  523. package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js +938 -0
  524. package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js.map +1 -0
  525. package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js +190 -0
  526. package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js.map +1 -0
  527. package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js +1441 -0
  528. package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js.map +1 -0
  529. package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js +10 -0
  530. package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js.map +1 -0
  531. package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js +1103 -0
  532. package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js.map +1 -0
  533. package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js +47 -0
  534. package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js.map +1 -0
  535. package/vendor/hyperframes/dist/studio/favicon.svg +14 -0
  536. package/vendor/hyperframes/dist/studio/icons/timeline/audio.svg +7 -0
  537. package/vendor/hyperframes/dist/studio/icons/timeline/captions.svg +5 -0
  538. package/vendor/hyperframes/dist/studio/icons/timeline/composition.svg +12 -0
  539. package/vendor/hyperframes/dist/studio/icons/timeline/image.svg +18 -0
  540. package/vendor/hyperframes/dist/studio/icons/timeline/music.svg +10 -0
  541. package/vendor/hyperframes/dist/studio/icons/timeline/text.svg +3 -0
  542. package/vendor/hyperframes/dist/studio/index.css +165 -0
  543. package/vendor/hyperframes/dist/studio/index.css.map +1 -0
  544. package/vendor/hyperframes/dist/studio/index.d.ts +4296 -0
  545. package/vendor/hyperframes/dist/studio/index.html +23 -0
  546. package/vendor/hyperframes/dist/studio/index.js +99693 -0
  547. package/vendor/hyperframes/dist/studio/index.js.map +1 -0
  548. package/vendor/hyperframes/dist/studio/player.d.ts +30 -0
  549. package/vendor/hyperframes/dist/studio/player.js +10 -0
  550. package/vendor/hyperframes/dist/studio/player.js.map +1 -0
  551. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.d.ts +39 -0
  552. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js +50 -0
  553. package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js.map +1 -0
  554. package/vendor/hyperframes/dist/studio/styles.css +1 -0
  555. package/vendor/hyperframes/dist/studio/ui.d.ts +296 -0
  556. package/vendor/hyperframes/dist/studio/ui.js +66 -0
  557. package/vendor/hyperframes/dist/studio/ui.js.map +1 -0
  558. package/vendor/hyperframes/dist/studio-api-PNQZRPX5.js +136 -0
  559. package/vendor/hyperframes/dist/studioSelectionClient-IUUPKUHZ.js +25 -0
  560. package/vendor/hyperframes/dist/studioServer-UWRBPIOJ.js +1457 -0
  561. package/vendor/hyperframes/dist/synthesize-K62TIZWI.js +182 -0
  562. package/vendor/hyperframes/dist/system-EZYZNUFD.js +44 -0
  563. package/vendor/hyperframes/dist/telemetry-2YC4SGQU.js +144 -0
  564. package/vendor/hyperframes/dist/telemetry-QMYM4WME.js +95 -0
  565. package/vendor/hyperframes/dist/templates/_shared/AGENTS.md +107 -0
  566. package/vendor/hyperframes/dist/templates/_shared/CLAUDE.md +107 -0
  567. package/vendor/hyperframes/dist/templates/blank/index.html +55 -0
  568. package/vendor/hyperframes/dist/templates/from-file/index.html +75 -0
  569. package/vendor/hyperframes/dist/templates/warm-grain/compositions/captions.html +154 -0
  570. package/vendor/hyperframes/dist/templates/warm-grain/compositions/graphics.html +162 -0
  571. package/vendor/hyperframes/dist/templates/warm-grain/compositions/intro.html +87 -0
  572. package/vendor/hyperframes/dist/templates/warm-grain/index.html +264 -0
  573. package/vendor/hyperframes/dist/templates/warm-grain/registry-item.json +34 -0
  574. package/vendor/hyperframes/dist/timeline-77Z3BBQM.js +1377 -0
  575. package/vendor/hyperframes/dist/tokens-OBGTYE4Z.js +92 -0
  576. package/vendor/hyperframes/dist/transcribe-7NVFHCGA.js +387 -0
  577. package/vendor/hyperframes/dist/transcribe-BNSJRR4M.js +62 -0
  578. package/vendor/hyperframes/dist/tts-P3LIPIL5.js +234 -0
  579. package/vendor/hyperframes/dist/updateCheck-UDWIJ4ZQ.js +39 -0
  580. package/vendor/hyperframes/dist/upgrade-CT3CPO3E.js +231 -0
  581. package/vendor/hyperframes/dist/urlDownloader-H6WRI2UE.js +39 -0
  582. package/vendor/hyperframes/dist/usage-EC3KFUIJ.js +2139 -0
  583. package/vendor/hyperframes/dist/validate-65QDZJWZ.js +70 -0
  584. package/vendor/hyperframes/dist/video-FGSGKRSV.js +261 -0
  585. package/vendor/hyperframes/dist/workspaceBuildCheck-TOLGAI4T.js +133 -0
  586. package/vendor/hyperframes/package.json +80 -0
@@ -0,0 +1,1032 @@
1
+ import { createRequire as __hf_createRequire } from "node:module";
2
+ import { fileURLToPath as __hf_fileURLToPath } from "node:url";
3
+ import { dirname as __hf_dirname } from "node:path";
4
+ var require = __hf_createRequire(import.meta.url);
5
+ var __filename = __hf_fileURLToPath(import.meta.url);
6
+ var __dirname = __hf_dirname(__filename);
7
+ import {
8
+ rectToBbox
9
+ } from "./chunk-WBLXWOYK.js";
10
+ import {
11
+ ambiguousIssue,
12
+ loadBrowserScript
13
+ } from "./chunk-2EGFTPWD.js";
14
+ import {
15
+ serveStaticProjectHtml
16
+ } from "./chunk-KBJUXVOJ.js";
17
+ import {
18
+ auditClipDurations,
19
+ shouldIgnoreHttpError,
20
+ shouldIgnoreRequestFailure
21
+ } from "./chunk-H6QMKUYA.js";
22
+ import "./chunk-XUHOIDKG.js";
23
+ import "./chunk-UEZXMWG3.js";
24
+ import "./chunk-X7MTZ4T2.js";
25
+ import {
26
+ AUDIT_SEEK_OPTIONS,
27
+ DEFAULT_ZOOM_PADDING_PX,
28
+ DEFAULT_ZOOM_SCALE,
29
+ DENSE_GEOMETRY_SEEK_OPTIONS,
30
+ captureRegionCrop,
31
+ openSettledCompositionPage,
32
+ padCropRegion,
33
+ resolveCliChromeGpuMode,
34
+ seekCompositionTimeline,
35
+ waitForPreferredSeekTarget
36
+ } from "./chunk-YQZNILVH.js";
37
+ import "./chunk-5Z63TBTX.js";
38
+ import "./chunk-7HG4BFIN.js";
39
+ import "./chunk-HRUGC23L.js";
40
+ import "./chunk-YEIFI443.js";
41
+ import "./chunk-S7NPLFWV.js";
42
+ import "./chunk-RMHUQGRK.js";
43
+ import "./chunk-EOVYQ3IG.js";
44
+ import "./chunk-QC4FJVLM.js";
45
+ import {
46
+ decideMediaProxyEligibility,
47
+ proxyVariantFor,
48
+ resolveProxy,
49
+ scanProjectMediaCodecMap
50
+ } from "./chunk-TCLGPL65.js";
51
+ import "./chunk-S3D6GE5W.js";
52
+ import "./chunk-IHFUKJOR.js";
53
+ import "./chunk-XS4EJSKU.js";
54
+ import "./chunk-PFCFR3KZ.js";
55
+ import {
56
+ resolveAutoProxy
57
+ } from "./chunk-CFKU7HTK.js";
58
+ import "./chunk-XT7X6QCP.js";
59
+ import "./chunk-4YYJOFKS.js";
60
+ import "./chunk-HVW7ABXD.js";
61
+ import "./chunk-LYNI3FOL.js";
62
+ import "./chunk-CWPVM2QV.js";
63
+ import "./chunk-A2Z4Z4VL.js";
64
+ import "./chunk-AWDFDFI3.js";
65
+ import "./chunk-P6LJ4Y32.js";
66
+ import "./chunk-GMECXFAN.js";
67
+ import "./chunk-4NWOGZZS.js";
68
+ import "./chunk-JTHMTOMQ.js";
69
+ import "./chunk-EISRN4E6.js";
70
+ import "./chunk-VWG7OQKU.js";
71
+ import "./chunk-ZTZA4UWZ.js";
72
+ import "./chunk-IUZFXWSV.js";
73
+ import "./chunk-AMKC3AXA.js";
74
+ import "./chunk-S3S4TGEH.js";
75
+ import "./chunk-54HJ63Q2.js";
76
+ import "./chunk-PBN6GBJE.js";
77
+ import "./chunk-KC5XXX3X.js";
78
+ import "./chunk-TJSTGSAW.js";
79
+ import "./chunk-K2FTXJYH.js";
80
+ import "./chunk-2YN64IN5.js";
81
+ import "./chunk-AVUUN2XD.js";
82
+ import "./chunk-DPVXBVLL.js";
83
+ import "./chunk-Z6B37SNM.js";
84
+ import "./chunk-HWKCIWQT.js";
85
+ import "./chunk-VC76R6W2.js";
86
+ import "./chunk-OFQWTKPW.js";
87
+ import "./chunk-TWWSYAKJ.js";
88
+ import "./chunk-ZJUKFZ2P.js";
89
+ import "./chunk-HBBJFK6I.js";
90
+ import "./chunk-PJ3HDUCY.js";
91
+ import "./chunk-TQFG7HTI.js";
92
+ import "./chunk-GK4AIFIH.js";
93
+ import "./chunk-2PSPARWP.js";
94
+ import "./chunk-HW6OYASV.js";
95
+ import "./chunk-K4WIOZFP.js";
96
+ import "./chunk-XUXGIA7H.js";
97
+ import "./chunk-WERLJGIC.js";
98
+ import "./chunk-ISN5GRYI.js";
99
+ import "./chunk-FLWXXDNS.js";
100
+ import {
101
+ normalizeErrorMessage
102
+ } from "./chunk-KNU5COPB.js";
103
+ import "./chunk-3GXQPCJC.js";
104
+ import "./chunk-RQVDTPGD.js";
105
+ import "./chunk-PMRBLBUP.js";
106
+ import "./chunk-M2WBOQ2Q.js";
107
+
108
+ // src/utils/checkBrowser.ts
109
+ import { mkdirSync, writeFileSync } from "fs";
110
+ import { join, resolve } from "path";
111
+ async function preResolveHostileMediaProxies(projectDir, html, autoProxyOverride) {
112
+ if (!resolveAutoProxy(projectDir, autoProxyOverride)) return;
113
+ let codecMap;
114
+ try {
115
+ codecMap = await scanProjectMediaCodecMap(projectDir, [{ html }]);
116
+ } catch (err) {
117
+ console.error(
118
+ `[hyperframes] media proxy pre-resolve: scan failed (${normalizeErrorMessage(err)})`
119
+ );
120
+ return;
121
+ }
122
+ const hostileEntries = Object.entries(codecMap).filter(
123
+ ([, facts]) => decideMediaProxyEligibility(facts).eligible
124
+ );
125
+ if (hostileEntries.length === 0) return;
126
+ const startedAt = Date.now();
127
+ const results = await Promise.allSettled(
128
+ hostileEntries.map(
129
+ ([pathname, facts]) => resolveProxy(
130
+ projectDir,
131
+ resolve(projectDir, pathname.replace(/^\/+/, "")),
132
+ proxyVariantFor(facts)
133
+ )
134
+ )
135
+ );
136
+ const failed = results.filter((result) => result.status === "rejected").length;
137
+ console.error(
138
+ `[hyperframes] media proxy pre-resolve: ${results.length - failed}/${results.length} ready, ${failed} failed (${Date.now() - startedAt}ms)`
139
+ );
140
+ }
141
+ async function runBrowserCheck(project, options, motion, runGrid) {
142
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-5QOPOB5D.js");
143
+ const html = await bundleWithLocalizedFonts(project.dir);
144
+ await preResolveHostileMediaProxies(project.dir, html, options.autoProxy);
145
+ const server = await serveStaticProjectHtml(
146
+ project.dir,
147
+ html,
148
+ "Failed to bind check server",
149
+ [],
150
+ options.autoProxy
151
+ );
152
+ const drafts = [];
153
+ let currentTime = 0;
154
+ let chromeBrowser;
155
+ try {
156
+ const launchSettleStart = Date.now();
157
+ const session = await openSettledCompositionPage(html, server.url, {
158
+ navigationTimeoutMs: options.timeout,
159
+ renderReadyTimeoutMs: options.timeout,
160
+ renderReadyWarningSuffix: "checking the current page state",
161
+ browserGpuMode: options.browserGpuMode ?? resolveCliChromeGpuMode(),
162
+ beforeNavigate: (page2) => wireRuntimeListeners(page2, drafts, () => currentTime)
163
+ });
164
+ chromeBrowser = session.browser;
165
+ const page = session.page;
166
+ await waitForPreferredSeekTarget(page);
167
+ const rootAnchor = await resolveRootAnchor(page);
168
+ const launchSettleMs = Date.now() - launchSettleStart;
169
+ const { analyzeClipMediaFit } = await import("./src-PVYUYV3M.js");
170
+ for (const entry of await auditClipDurations(page, analyzeClipMediaFit, options.timeout)) {
171
+ drafts.push({ code: "clip_media_fit", severity: entry.level, message: entry.text, time: 0 });
172
+ }
173
+ const driver = createPageDriver(page, (time) => {
174
+ currentTime = time;
175
+ });
176
+ const result = await runGrid(driver, options, motion);
177
+ return {
178
+ ...result,
179
+ timings: { ...result.timings, launchSettleMs },
180
+ runtimeFindings: drafts.map((draft) => runtimeFinding(draft, rootAnchor))
181
+ };
182
+ } finally {
183
+ await chromeBrowser?.close().catch(() => void 0);
184
+ await server.close();
185
+ }
186
+ }
187
+ async function captureFindingCrops(project, options, requests) {
188
+ if (requests.length === 0) return [];
189
+ const { bundleWithLocalizedFonts } = await import("./bundleWithLocalizedFonts-5QOPOB5D.js");
190
+ const html = await bundleWithLocalizedFonts(project.dir);
191
+ const server = await serveStaticProjectHtml(
192
+ project.dir,
193
+ html,
194
+ "Failed to bind check server",
195
+ [],
196
+ options.autoProxy
197
+ );
198
+ let chromeBrowser;
199
+ const written = [];
200
+ try {
201
+ const session = await openSettledCompositionPage(html, server.url, {
202
+ navigationTimeoutMs: options.timeout,
203
+ renderReadyTimeoutMs: options.timeout,
204
+ renderReadyWarningSuffix: "capturing finding crops",
205
+ browserGpuMode: options.browserGpuMode ?? resolveCliChromeGpuMode()
206
+ });
207
+ chromeBrowser = session.browser;
208
+ const page = session.page;
209
+ await waitForPreferredSeekTarget(page);
210
+ const snapshotDir = join(project.dir, "snapshots");
211
+ mkdirSync(snapshotDir, { recursive: true });
212
+ for (const request of requests) {
213
+ await seekCompositionTimeline(page, request.time, AUDIT_SEEK_OPTIONS);
214
+ const canvas = await page.evaluate(() => ({
215
+ width: window.innerWidth,
216
+ height: window.innerHeight
217
+ }));
218
+ const region = padCropRegion(request.bbox, canvas, DEFAULT_ZOOM_PADDING_PX);
219
+ const buffer = await captureRegionCrop(page, region, DEFAULT_ZOOM_SCALE);
220
+ writeFileSync(join(snapshotDir, request.filename), buffer);
221
+ written.push(join("snapshots", request.filename));
222
+ }
223
+ return written;
224
+ } finally {
225
+ await chromeBrowser?.close().catch(() => void 0);
226
+ await server.close();
227
+ }
228
+ }
229
+ var MEDIA_PROXY_MARKER_PREFIX = "[hyperframes] runtime_media_proxy_";
230
+ var MEDIA_PROXY_UNAVAILABLE_MARKER = "[hyperframes] runtime_media_proxy_unavailable";
231
+ var WEB_AUDIO_BYPASS_MARKER = "[hyperframes] runtime_web_audio_bypass";
232
+ var WEBGPU_RUNTIME_FAILURE = /\b(?:GPUValidationError|GPUOutOfMemoryError|GPUInternalError)\b|WebGPU uncaptured error|(?:destroyed\b.*\b(?:GPU )?(?:resource|buffer|texture)\b.*\bsubmit)|(?:(?:GPU )?(?:resource|buffer|texture)\b.*\bdestroyed\b.*\bsubmit)/i;
233
+ function isWebGpuRuntimeFailure(text) {
234
+ return WEBGPU_RUNTIME_FAILURE.test(text);
235
+ }
236
+ function pushRuntimeDraft(drafts, draft) {
237
+ if (draft.code !== "webgpu_runtime_error") {
238
+ drafts.push(draft);
239
+ return;
240
+ }
241
+ const duplicate = drafts.find(
242
+ (entry) => entry.code === draft.code && entry.message === draft.message && entry.url === draft.url && entry.line === draft.line
243
+ );
244
+ if (duplicate) {
245
+ duplicate.count = (duplicate.count ?? 1) + 1;
246
+ return;
247
+ }
248
+ drafts.push({ ...draft, count: 1 });
249
+ }
250
+ function runtimeInfoFindingCode(text) {
251
+ if (text.startsWith(WEB_AUDIO_BYPASS_MARKER)) return "web_audio_bypass";
252
+ if (!text.startsWith(MEDIA_PROXY_MARKER_PREFIX)) return null;
253
+ return text.includes(MEDIA_PROXY_UNAVAILABLE_MARKER) ? "media_proxy_unavailable" : "media_proxy_fallback";
254
+ }
255
+ function wireRuntimeListeners(page, drafts, currentTime) {
256
+ page.on("console", (message) => {
257
+ const type = message.type();
258
+ const text = message.text();
259
+ if (type === "error" && !text.startsWith("Failed to load resource")) {
260
+ const location = message.location();
261
+ pushRuntimeDraft(drafts, {
262
+ code: "console_error",
263
+ severity: "error",
264
+ message: text,
265
+ time: currentTime(),
266
+ url: location.url,
267
+ line: location.lineNumber
268
+ });
269
+ } else if (type === "warn") {
270
+ const location = message.location();
271
+ const webGpuFailure = isWebGpuRuntimeFailure(text);
272
+ pushRuntimeDraft(drafts, {
273
+ code: webGpuFailure ? "webgpu_runtime_error" : "console_warning",
274
+ severity: webGpuFailure ? "error" : "warning",
275
+ message: text,
276
+ time: currentTime(),
277
+ url: location.url,
278
+ line: location.lineNumber
279
+ });
280
+ } else if (type === "info") {
281
+ const code = runtimeInfoFindingCode(text);
282
+ if (!code) return;
283
+ const location = message.location();
284
+ pushRuntimeDraft(drafts, {
285
+ code,
286
+ severity: "info",
287
+ message: text,
288
+ time: currentTime(),
289
+ url: location.url,
290
+ line: location.lineNumber
291
+ });
292
+ }
293
+ });
294
+ page.on("pageerror", (error) => {
295
+ const message = normalizeErrorMessage(error);
296
+ if (message.includes("Unexpected token '<'") || message.includes("Unexpected token '&lt;'")) {
297
+ return;
298
+ }
299
+ pushRuntimeDraft(drafts, {
300
+ code: "page_error",
301
+ severity: "error",
302
+ message,
303
+ time: currentTime()
304
+ });
305
+ });
306
+ wireNetworkListeners(page, drafts, currentTime);
307
+ }
308
+ function wireNetworkListeners(page, drafts, currentTime) {
309
+ page.on("requestfailed", (request) => {
310
+ const url = request.url();
311
+ if (url.includes("favicon") || url.startsWith("data:")) return;
312
+ const failure = request.failure()?.errorText;
313
+ if (shouldIgnoreRequestFailure(url, failure, request.resourceType())) return;
314
+ drafts.push({
315
+ code: "request_failed",
316
+ severity: "error",
317
+ message: `Failed to load ${urlPath(url)}: ${failure ?? "net::ERR_FAILED"}`,
318
+ time: currentTime(),
319
+ url
320
+ });
321
+ });
322
+ page.on("response", (response) => {
323
+ if (response.status() < 400) return;
324
+ const url = response.url();
325
+ if (url.includes("favicon")) return;
326
+ if (shouldIgnoreHttpError(url, response.status())) return;
327
+ drafts.push({
328
+ code: "http_error",
329
+ severity: "error",
330
+ message: `${response.status()} loading ${urlPath(url)}`,
331
+ time: currentTime(),
332
+ url
333
+ });
334
+ });
335
+ }
336
+ function createPageDriver(page, setTime) {
337
+ return {
338
+ initialize: (contrast) => injectAuditScripts(page, contrast),
339
+ getDuration: () => getCompositionDuration(page),
340
+ hasNoTimelineDeclaration: () => hasNoTimelineDeclaration(page),
341
+ getTransitionBoundaries: () => collectTweenBoundaries(page),
342
+ getCanvas: () => page.evaluate(() => ({ width: window.innerWidth, height: window.innerHeight })),
343
+ findAmbiguousSelectors: (selectors) => findAmbiguousSelectors(page, selectors),
344
+ seek: async (time) => {
345
+ setTime(time);
346
+ await seekCompositionTimeline(page, time, AUDIT_SEEK_OPTIONS);
347
+ },
348
+ seekGeometry: async (time) => {
349
+ setTime(time);
350
+ await seekCompositionTimeline(page, time, DENSE_GEOMETRY_SEEK_OPTIONS);
351
+ },
352
+ collectLayout: (time, tolerance, layout) => collectLayout(page, time, tolerance, layout),
353
+ collectOverlap: (time) => collectOverlap(page, time),
354
+ collectLayoutGeometry: () => collectLayoutGeometry(page),
355
+ collectRotationSample: (time) => collectRotationSample(page, time),
356
+ collectOffPivotRotationSample: (time) => collectOffPivotRotationSample(page, time),
357
+ collectGeometryCandidates: (time, request) => collectGeometryCandidates(page, time, request),
358
+ collectMotionFrame: (time, selectors, scopes) => collectMotionFrame(page, time, selectors, scopes),
359
+ anchorMotionIssues: (issues) => anchorLayoutIssues(page, issues),
360
+ collectContrast: (time, annotations) => collectContrast(page, time, annotations)
361
+ };
362
+ }
363
+ async function hasNoTimelineDeclaration(page) {
364
+ return page.evaluate(
365
+ () => document.querySelector("[data-composition-id]")?.hasAttribute("data-no-timeline") ?? false
366
+ );
367
+ }
368
+ async function injectAuditScripts(page, contrast) {
369
+ await page.addScriptTag({ content: loadBrowserScript("motion-signature.browser.js") });
370
+ await page.addScriptTag({ content: loadBrowserScript("layout-audit.browser.js") });
371
+ await page.addScriptTag({ content: loadBrowserScript("motion-sample.browser.js") });
372
+ if (contrast) {
373
+ await page.addScriptTag({ content: loadBrowserScript("contrast-audit.browser.js") });
374
+ }
375
+ }
376
+ async function getCompositionDuration(page) {
377
+ return page.evaluate(() => {
378
+ const value = (target, key) => typeof target === "object" && target !== null ? Reflect.get(target, key) : void 0;
379
+ const positive = (candidate) => typeof candidate === "number" && candidate > 0 ? candidate : null;
380
+ const callDuration = (target) => {
381
+ const duration = value(target, "duration");
382
+ if (typeof duration === "function") {
383
+ const result = Reflect.apply(duration, target, []);
384
+ return positive(result);
385
+ }
386
+ return positive(duration);
387
+ };
388
+ const hfDuration = positive(value(Reflect.get(window, "__hf"), "duration"));
389
+ if (hfDuration) return hfDuration;
390
+ const playerDuration = callDuration(Reflect.get(window, "__player"));
391
+ if (playerDuration) return playerDuration;
392
+ const root = document.querySelector("[data-composition-id][data-duration]");
393
+ const authored = root ? parseFloat(root.getAttribute("data-duration") ?? "0") : 0;
394
+ if (authored > 0) return authored;
395
+ const timelines = Reflect.get(window, "__timelines");
396
+ if (typeof timelines !== "object" || timelines === null) return 0;
397
+ for (const key of Object.keys(timelines)) {
398
+ const duration = callDuration(Reflect.get(timelines, key));
399
+ if (duration) return duration;
400
+ }
401
+ return 0;
402
+ });
403
+ }
404
+ async function collectTweenBoundaries(page) {
405
+ return page.evaluate(() => {
406
+ const property = (target, key) => typeof target === "object" && target !== null || typeof target === "function" ? Reflect.get(target, key) : void 0;
407
+ const numberCall = (target, key, fallback) => {
408
+ const method = property(target, key);
409
+ if (typeof method !== "function") return fallback;
410
+ const result = Reflect.apply(method, target, []);
411
+ return typeof result === "number" ? result : fallback;
412
+ };
413
+ const rootTime = (root, animation, local) => {
414
+ let time = local;
415
+ let node = animation;
416
+ while (node && node !== root) {
417
+ time = numberCall(node, "startTime", 0) + time / (numberCall(node, "timeScale", 1) || 1);
418
+ node = property(node, "parent");
419
+ }
420
+ return time;
421
+ };
422
+ const timelines = Reflect.get(window, "__timelines");
423
+ if (typeof timelines !== "object" || timelines === null) return [];
424
+ const boundaries = [];
425
+ for (const key of Object.keys(timelines)) {
426
+ const timeline = Reflect.get(timelines, key);
427
+ const getChildren = property(timeline, "getChildren");
428
+ if (typeof getChildren !== "function") continue;
429
+ try {
430
+ const children = Reflect.apply(getChildren, timeline, [true, true, false]);
431
+ if (!Array.isArray(children)) continue;
432
+ for (const child of children) {
433
+ const duration = numberCall(child, "duration", Number.NaN);
434
+ if (!Number.isFinite(duration)) continue;
435
+ boundaries.push(rootTime(timeline, child, 0), rootTime(timeline, child, duration));
436
+ }
437
+ } catch {
438
+ continue;
439
+ }
440
+ }
441
+ return boundaries.filter(Number.isFinite);
442
+ });
443
+ }
444
+ async function collectLayout(page, time, tolerance, layout) {
445
+ const raw = await page.evaluate(
446
+ (options) => {
447
+ const audit = Reflect.get(window, "__hyperframesLayoutAudit");
448
+ if (typeof audit !== "function") return [];
449
+ const result = Reflect.apply(audit, window, [options]);
450
+ return Array.isArray(result) ? result : [];
451
+ },
452
+ {
453
+ time,
454
+ tolerance,
455
+ ...typeof layout?.proseCoverageFloor === "number" ? { proseCoverageFloor: layout.proseCoverageFloor } : {}
456
+ }
457
+ );
458
+ return anchorLayoutIssues(page, raw.flatMap(parseLayoutIssue));
459
+ }
460
+ async function collectOverlap(page, time) {
461
+ const raw = await page.evaluate(
462
+ (options) => {
463
+ const audit = Reflect.get(window, "__hyperframesOverlapAudit");
464
+ if (typeof audit !== "function") return [];
465
+ const result = Reflect.apply(audit, window, [options]);
466
+ return Array.isArray(result) ? result : [];
467
+ },
468
+ { time }
469
+ );
470
+ return anchorLayoutIssues(page, raw.flatMap(parseLayoutIssue));
471
+ }
472
+ async function collectLayoutGeometry(page) {
473
+ return page.evaluate(() => {
474
+ const geometry = Reflect.get(window, "__hyperframesLayoutGeometry");
475
+ if (typeof geometry !== "function") return "";
476
+ const result = Reflect.apply(geometry, window, []);
477
+ return typeof result === "string" ? result : "";
478
+ });
479
+ }
480
+ async function evaluateSampler(page, globalName) {
481
+ return page.evaluate((name) => {
482
+ const sample = Reflect.get(window, name);
483
+ if (typeof sample !== "function") return [];
484
+ const result = Reflect.apply(sample, window, []);
485
+ return Array.isArray(result) ? result : [];
486
+ }, globalName);
487
+ }
488
+ async function collectRotationSample(page, time) {
489
+ const raw = await evaluateSampler(page, "__hyperframesRotationSample");
490
+ return raw.flatMap((value) => parseRotationSample(value, time));
491
+ }
492
+ function parseRotationSample(value, time) {
493
+ if (!isRecord(value)) return [];
494
+ const selector = stringValue(value, "selector");
495
+ const cx = numberValue(value, "cx");
496
+ const cy = numberValue(value, "cy");
497
+ const w = numberValue(value, "w");
498
+ const h = numberValue(value, "h");
499
+ const angle = numberValue(value, "angle");
500
+ if (!selector || cx === null || cy === null || w === null || h === null || angle === null) {
501
+ return [];
502
+ }
503
+ return [{ time, selector, cx, cy, w, h, angle }];
504
+ }
505
+ async function collectOffPivotRotationSample(page, time) {
506
+ const raw = await evaluateSampler(page, "__hyperframesOffPivotRotationSample");
507
+ return { time, samples: raw.flatMap(parseOffPivotRotationSample) };
508
+ }
509
+ function requiredNumbers(value, keys) {
510
+ const out = {};
511
+ for (const key of keys) {
512
+ const num = numberValue(value, key);
513
+ if (num === null) return null;
514
+ out[key] = num;
515
+ }
516
+ return out;
517
+ }
518
+ var OFF_PIVOT_REQUIRED_NUMBERS = ["ax", "ay", "bx", "by", "len", "angle", "hubCount"];
519
+ function parseOffPivotRotationSample(value) {
520
+ if (!isRecord(value)) return [];
521
+ const selector = stringValue(value, "selector");
522
+ const nums = requiredNumbers(value, OFF_PIVOT_REQUIRED_NUMBERS);
523
+ if (!selector || !nums) return [];
524
+ return [
525
+ {
526
+ selector,
527
+ ax: nums.ax,
528
+ ay: nums.ay,
529
+ bx: nums.bx,
530
+ by: nums.by,
531
+ len: nums.len,
532
+ angle: nums.angle,
533
+ hx: numberValue(value, "hx"),
534
+ hy: numberValue(value, "hy"),
535
+ hr: numberValue(value, "hr"),
536
+ hubCount: nums.hubCount
537
+ }
538
+ ];
539
+ }
540
+ async function collectGeometryCandidates(page, time, request) {
541
+ try {
542
+ const raw = await page.evaluate((options) => {
543
+ const collect = Reflect.get(window, "__hyperframesGeometryCandidates");
544
+ if (typeof collect !== "function") return [];
545
+ const result = Reflect.apply(collect, window, [options]);
546
+ return Array.isArray(result) ? result : [];
547
+ }, request);
548
+ return raw.flatMap((value) => parseGeometryCandidate(value, time));
549
+ } catch {
550
+ return [];
551
+ }
552
+ }
553
+ async function findAmbiguousSelectors(page, selectors) {
554
+ const ambiguous = await page.evaluate(
555
+ (values) => values.filter((selector) => {
556
+ try {
557
+ return document.querySelectorAll(selector).length > 1;
558
+ } catch {
559
+ return false;
560
+ }
561
+ }),
562
+ selectors
563
+ );
564
+ return anchorLayoutIssues(page, ambiguous.map(ambiguousIssue));
565
+ }
566
+ async function collectMotionFrame(page, time, selectors, livenessScopes) {
567
+ const raw = await page.evaluate(
568
+ (options) => {
569
+ const sample = Reflect.get(window, "__hyperframesMotionSample");
570
+ if (typeof sample !== "function") return null;
571
+ return Reflect.apply(sample, window, [options]);
572
+ },
573
+ { selectors, livenessScopes }
574
+ );
575
+ return parseMotionFrame(raw, time, selectors, livenessScopes);
576
+ }
577
+ async function anchorLayoutIssues(page, issues) {
578
+ const requests = issues.map((issue) => ({
579
+ selector: issue.selector,
580
+ time: issue.time,
581
+ bbox: rectToBbox(issue.rect)
582
+ }));
583
+ const anchors = await resolveAnchors(page, requests);
584
+ return issues.map((issue, index) => ({
585
+ ...issue,
586
+ ...anchors[index] ?? fallbackAnchor(requests[index])
587
+ }));
588
+ }
589
+ async function resolveAnchors(page, requests) {
590
+ if (requests.length === 0) return [];
591
+ return page.evaluate((values) => {
592
+ const root = document.querySelector("[data-composition-id]");
593
+ return values.map((request) => {
594
+ let element = null;
595
+ try {
596
+ element = document.querySelector(request.selector);
597
+ } catch {
598
+ element = null;
599
+ }
600
+ element ??= root;
601
+ const dataAttributes = {};
602
+ for (const attribute of Array.from(element?.attributes ?? [])) {
603
+ if (attribute.name.startsWith("data-")) dataAttributes[attribute.name] = attribute.value;
604
+ }
605
+ const source = element?.closest("[data-composition-file]")?.getAttribute("data-composition-file");
606
+ return {
607
+ selector: element ? request.selector : "[data-composition-id]",
608
+ dataAttributes,
609
+ sourceFile: source || "index.html",
610
+ bbox: request.bbox,
611
+ time: request.time
612
+ };
613
+ });
614
+ }, requests);
615
+ }
616
+ async function resolveRootAnchor(page) {
617
+ const anchors = await resolveAnchors(page, [
618
+ { selector: "[data-composition-id]", time: 0, bbox: await compositionBbox(page) }
619
+ ]);
620
+ return anchors[0] ?? fallbackAnchor(void 0);
621
+ }
622
+ async function compositionBbox(page) {
623
+ return page.evaluate(() => {
624
+ const element = document.querySelector("[data-composition-id]");
625
+ const rect = element?.getBoundingClientRect();
626
+ return rect ? { x: rect.x, y: rect.y, width: rect.width, height: rect.height } : { x: 0, y: 0, width: 0, height: 0 };
627
+ });
628
+ }
629
+ async function collectContrast(page, time, layoutAnnotations = []) {
630
+ let prepared = [];
631
+ try {
632
+ prepared = parsePreparedContrast(await prepareContrast(page, time));
633
+ const measurementShot = await page.screenshot({
634
+ encoding: "base64",
635
+ type: "png",
636
+ omitBackground: true
637
+ });
638
+ if (typeof measurementShot !== "string") throw new Error("Contrast screenshot was not base64");
639
+ const raw = await finishContrast(
640
+ page,
641
+ measurementShot,
642
+ time,
643
+ prepared.map((entry) => entry.raw)
644
+ );
645
+ const finished = raw.flatMap(parseFinishedContrast);
646
+ const entries = joinContrastEntries(finished, prepared);
647
+ const overviewShot = await page.screenshot({ encoding: "base64", type: "png" });
648
+ if (typeof overviewShot !== "string") throw new Error("Overview screenshot was not base64");
649
+ const annotations = [
650
+ ...layoutAnnotations,
651
+ ...contrastFailureAnnotations(entries, layoutAnnotations.length)
652
+ ];
653
+ const pngBase64 = await captureOverviewShot(page, annotations, overviewShot);
654
+ return { entries, pngBase64 };
655
+ } finally {
656
+ await page.evaluate(() => {
657
+ const restore = Reflect.get(window, "__contrastAuditRestoreIfPending");
658
+ if (typeof restore === "function") Reflect.apply(restore, window, []);
659
+ }).catch(() => void 0);
660
+ }
661
+ }
662
+ function contrastFailureAnnotations(entries, labelOffset) {
663
+ return entries.filter((entry) => !entry.wcagAA).map((entry, index) => ({
664
+ label: `${labelOffset + index + 1} contrast_aa_failure`,
665
+ bbox: entry.bbox
666
+ }));
667
+ }
668
+ var ANNOTATION_OVERLAY_ID = "__hyperframesCheckAnnotations";
669
+ async function captureOverviewShot(page, annotations, fallbackScreenshot) {
670
+ if (annotations.length === 0) return fallbackScreenshot;
671
+ await injectAnnotationOverlay(page, annotations);
672
+ try {
673
+ const shot = await page.screenshot({ encoding: "base64", type: "png" });
674
+ return typeof shot === "string" ? shot : fallbackScreenshot;
675
+ } finally {
676
+ await removeAnnotationOverlay(page);
677
+ }
678
+ }
679
+ async function injectAnnotationOverlay(page, boxes) {
680
+ await page.evaluate(
681
+ (items, overlayId) => {
682
+ const root = document.createElement("div");
683
+ root.id = overlayId;
684
+ root.style.cssText = "position:fixed;inset:0;z-index:2147483647;pointer-events:none;";
685
+ for (const item of items) {
686
+ const box = document.createElement("div");
687
+ box.style.cssText = `position:fixed;left:${item.bbox.x}px;top:${item.bbox.y}px;width:${item.bbox.width}px;height:${item.bbox.height}px;border:2px solid #ff2d55;box-sizing:border-box;`;
688
+ const label = document.createElement("div");
689
+ label.textContent = item.label;
690
+ label.style.cssText = "position:absolute;top:-18px;left:0;background:#ff2d55;color:#fff;font:11px/16px monospace;padding:0 4px;white-space:nowrap;";
691
+ box.appendChild(label);
692
+ root.appendChild(box);
693
+ }
694
+ document.body.appendChild(root);
695
+ },
696
+ boxes,
697
+ ANNOTATION_OVERLAY_ID
698
+ );
699
+ }
700
+ async function removeAnnotationOverlay(page) {
701
+ await page.evaluate((overlayId) => {
702
+ document.getElementById(overlayId)?.remove();
703
+ }, ANNOTATION_OVERLAY_ID);
704
+ }
705
+ async function prepareContrast(page, time) {
706
+ return page.evaluate((sampleTime) => {
707
+ const prepare = Reflect.get(window, "__contrastAuditPrepare");
708
+ const candidates = typeof prepare === "function" ? Reflect.apply(prepare, window, []) : [];
709
+ if (!Array.isArray(candidates)) return [];
710
+ const restores = Reflect.get(window, "__contrastAuditRestores");
711
+ const restoreList = Array.isArray(restores) ? restores : [];
712
+ const escape = (value) => typeof CSS !== "undefined" && typeof CSS.escape === "function" ? CSS.escape(value) : value.replace(/[^a-zA-Z0-9_-]/g, "\\$&");
713
+ const selectorFor = (element, fallback) => {
714
+ if (!element) return fallback;
715
+ if (element.id) return `#${escape(element.id)}`;
716
+ const parts = [];
717
+ for (let current = element; current && current !== document.body; current = current.parentElement) {
718
+ const tag = current.tagName.toLowerCase();
719
+ const siblings = current.parentElement ? Array.from(current.parentElement.children).filter(
720
+ (item) => item.tagName === current?.tagName
721
+ ) : [];
722
+ parts.push(
723
+ siblings.length > 1 ? `${tag}:nth-of-type(${siblings.indexOf(current) + 1})` : tag
724
+ );
725
+ }
726
+ return parts.reverse().join(" > ") || fallback;
727
+ };
728
+ return candidates.map((candidate, index) => {
729
+ const restore = restoreList[index];
730
+ const candidateObject = typeof candidate === "object" && candidate !== null ? candidate : {};
731
+ const elementValue = typeof restore === "object" && restore !== null ? Reflect.get(restore, "el") : null;
732
+ const element = elementValue instanceof Element ? elementValue : null;
733
+ const fallback = Reflect.get(candidateObject, "selector");
734
+ const selector = selectorFor(
735
+ element,
736
+ typeof fallback === "string" ? fallback : "[data-composition-id]"
737
+ );
738
+ const dataAttributes = {};
739
+ for (const attribute of Array.from(element?.attributes ?? [])) {
740
+ if (attribute.name.startsWith("data-")) dataAttributes[attribute.name] = attribute.value;
741
+ }
742
+ const source = element?.closest("[data-composition-file]")?.getAttribute("data-composition-file");
743
+ return {
744
+ candidate: { ...candidateObject, selector },
745
+ anchor: {
746
+ selector,
747
+ dataAttributes,
748
+ sourceFile: source || "index.html",
749
+ bbox: Reflect.get(candidateObject, "bbox"),
750
+ time: sampleTime
751
+ }
752
+ };
753
+ });
754
+ }, time);
755
+ }
756
+ async function finishContrast(page, screenshot, time, candidates) {
757
+ return page.evaluate(
758
+ async (payload) => {
759
+ const finish = Reflect.get(window, "__contrastAuditFinish");
760
+ if (typeof finish !== "function") return [];
761
+ const result = await Reflect.apply(finish, window, [
762
+ payload.screenshot,
763
+ payload.time,
764
+ payload.candidates
765
+ ]);
766
+ return Array.isArray(result) ? result : [];
767
+ },
768
+ { screenshot, time, candidates }
769
+ );
770
+ }
771
+ function parsePreparedContrast(raw) {
772
+ return raw.flatMap((value) => {
773
+ if (!isRecord(value)) return [];
774
+ const raw2 = Reflect.get(value, "candidate");
775
+ const candidate = parseContrastCandidate(raw2);
776
+ const anchor = parseAnchor(Reflect.get(value, "anchor"));
777
+ return candidate && anchor ? [{ raw: raw2, candidate, anchor }] : [];
778
+ });
779
+ }
780
+ function parseContrastCandidate(value) {
781
+ if (!isRecord(value)) return null;
782
+ const selector = stringValue(value, "selector");
783
+ const text = stringValue(value, "text");
784
+ const fg = rgbaValue(Reflect.get(value, "fg"));
785
+ const large = booleanValue(value, "large");
786
+ const bbox = parseBbox(Reflect.get(value, "bbox"));
787
+ return selector && text !== null && fg && large !== null && bbox ? { selector, text, fg, large, bbox } : null;
788
+ }
789
+ function parseFinishedContrast(value) {
790
+ if (!isRecord(value)) return [];
791
+ const selector = stringValue(value, "selector");
792
+ const text = stringValue(value, "text");
793
+ const ratio = numberValue(value, "ratio");
794
+ const wcagAA = booleanValue(value, "wcagAA");
795
+ const large = booleanValue(value, "large");
796
+ const fg = stringValue(value, "fg");
797
+ const bg = stringValue(value, "bg");
798
+ return selector && text !== null && ratio !== null && wcagAA !== null && large !== null && fg && bg ? [{ selector, text, ratio, wcagAA, large, fg, bg }] : [];
799
+ }
800
+ function joinContrastEntries(finished, prepared) {
801
+ const remaining = [...prepared];
802
+ return finished.flatMap((entry) => {
803
+ const index = remaining.findIndex(
804
+ (candidate) => candidate.candidate.selector === entry.selector && candidate.candidate.text === entry.text
805
+ );
806
+ const match = index >= 0 ? remaining.splice(index, 1)[0] : void 0;
807
+ return match ? [{ ...entry, ...match.anchor }] : [];
808
+ });
809
+ }
810
+ function parseLayoutIssue(value) {
811
+ if (!isRecord(value)) return [];
812
+ const code = layoutCodeValue(Reflect.get(value, "code"));
813
+ const severity = severityValue(Reflect.get(value, "severity"));
814
+ const time = numberValue(value, "time");
815
+ const selector = stringValue(value, "selector");
816
+ const message = stringValue(value, "message");
817
+ const rect = parseRect(Reflect.get(value, "rect"));
818
+ if (!code || !severity || time === null || !selector || !message || !rect) return [];
819
+ const issue = { code, severity, time, selector, message, rect };
820
+ assignOptionalLayoutFields(issue, value);
821
+ return [issue];
822
+ }
823
+ function parseGeometryCandidate(value, time) {
824
+ if (!isRecord(value)) return [];
825
+ const rect = parseRect(Reflect.get(value, "rect"));
826
+ const elementRect = parseRect(Reflect.get(value, "elementRect"));
827
+ if (!rect || !elementRect) return [];
828
+ const identity = parseGeometryIdentity(value);
829
+ if (!identity) return [];
830
+ const anchor = parseGeometryAnchor(value, rect, time);
831
+ if (!anchor) return [];
832
+ const candidate = { ...identity, ...anchor, rect, elementRect };
833
+ const overflow = parseOverflow(Reflect.get(value, "overflow"));
834
+ if (overflow) candidate.overflow = overflow;
835
+ return [candidate];
836
+ }
837
+ function parseGeometryIdentity(value) {
838
+ const kindValue = Reflect.get(value, "kind");
839
+ const kind = kindValue === "text" || kindValue === "media" ? kindValue : null;
840
+ if (!kind) return null;
841
+ const tag = stringValue(value, "tag");
842
+ if (!tag) return null;
843
+ const text = stringValue(value, "text");
844
+ return text === null ? null : { kind, tag, text };
845
+ }
846
+ function parseGeometryAnchor(value, rect, time) {
847
+ const selector = stringValue(value, "selector");
848
+ if (!selector) return null;
849
+ const sourceFile = stringValue(value, "sourceFile");
850
+ if (!sourceFile) return null;
851
+ const dataAttributes = stringRecord(Reflect.get(value, "dataAttributes"));
852
+ return dataAttributes ? {
853
+ selector,
854
+ sourceFile,
855
+ dataAttributes,
856
+ bbox: rectToBbox(rect),
857
+ time
858
+ } : null;
859
+ }
860
+ function assignOptionalLayoutFields(issue, value) {
861
+ assignOptionalString(issue, value, "containerSelector");
862
+ assignOptionalString(issue, value, "text");
863
+ assignOptionalString(issue, value, "fixHint");
864
+ const containerRect = parseRect(Reflect.get(value, "containerRect"));
865
+ if (containerRect) issue.containerRect = containerRect;
866
+ const overflow = parseOverflow(Reflect.get(value, "overflow"));
867
+ if (overflow) issue.overflow = overflow;
868
+ const coveredFraction = numberValue(value, "coveredFraction");
869
+ if (coveredFraction !== null) issue.coveredFraction = coveredFraction;
870
+ }
871
+ function recordField(value, key) {
872
+ if (!isRecord(value)) return null;
873
+ const field = Reflect.get(value, key);
874
+ return isRecord(field) ? field : null;
875
+ }
876
+ function parseMotionFrame(value, time, selectors, scopes) {
877
+ const rawData = recordField(value, "data");
878
+ const rawLiveness = recordField(value, "liveness");
879
+ const data = {};
880
+ for (const selector of selectors) {
881
+ data[selector] = rawData ? parseFrameSample(Reflect.get(rawData, selector)) : null;
882
+ }
883
+ const liveness = {};
884
+ for (const scope of scopes) {
885
+ const signature = rawLiveness ? Reflect.get(rawLiveness, scope) : "";
886
+ liveness[scope] = typeof signature === "string" ? signature : "";
887
+ }
888
+ return { time, data, liveness };
889
+ }
890
+ function parseFrameSample(value) {
891
+ if (!isRecord(value)) return null;
892
+ const rect = parseRect(Reflect.get(value, "rect"));
893
+ const opacity = numberValue(value, "opacity");
894
+ const visible = booleanValue(value, "visible");
895
+ return rect && opacity !== null && visible !== null ? { rect, opacity, visible } : null;
896
+ }
897
+ function parseAnchor(value) {
898
+ if (!isRecord(value)) return null;
899
+ const selector = stringValue(value, "selector");
900
+ const sourceFile = stringValue(value, "sourceFile");
901
+ const time = numberValue(value, "time");
902
+ const bbox = parseBbox(Reflect.get(value, "bbox"));
903
+ const dataAttributes = stringRecord(Reflect.get(value, "dataAttributes"));
904
+ return selector && sourceFile && time !== null && bbox && dataAttributes ? { selector, sourceFile, time, bbox, dataAttributes } : null;
905
+ }
906
+ function runtimeFinding(draft, root) {
907
+ return {
908
+ code: draft.code,
909
+ severity: draft.severity,
910
+ message: (draft.count ?? 1) > 1 ? `${draft.message} (repeated ${draft.count} times)` : draft.message,
911
+ selector: root.selector,
912
+ dataAttributes: root.dataAttributes,
913
+ sourceFile: root.sourceFile,
914
+ bbox: root.bbox,
915
+ time: draft.time,
916
+ url: draft.url,
917
+ line: draft.line
918
+ };
919
+ }
920
+ function fallbackAnchor(request) {
921
+ return {
922
+ selector: request?.selector ?? "[data-composition-id]",
923
+ dataAttributes: {},
924
+ sourceFile: "index.html",
925
+ bbox: request?.bbox ?? { x: 0, y: 0, width: 0, height: 0 },
926
+ time: request?.time ?? 0
927
+ };
928
+ }
929
+ function parseBbox(value) {
930
+ if (!isRecord(value)) return null;
931
+ const x = numberValue(value, "x");
932
+ const y = numberValue(value, "y");
933
+ const width = numberValue(value, "width") ?? numberValue(value, "w");
934
+ const height = numberValue(value, "height") ?? numberValue(value, "h");
935
+ return x !== null && y !== null && width !== null && height !== null ? { x, y, width, height } : null;
936
+ }
937
+ function parseRect(value) {
938
+ if (!isRecord(value)) return null;
939
+ const left = numberValue(value, "left");
940
+ const top = numberValue(value, "top");
941
+ const right = numberValue(value, "right");
942
+ const bottom = numberValue(value, "bottom");
943
+ const width = numberValue(value, "width");
944
+ const height = numberValue(value, "height");
945
+ return left !== null && top !== null && right !== null && bottom !== null && width !== null && height !== null ? { left, top, right, bottom, width, height } : null;
946
+ }
947
+ function parseOverflow(value) {
948
+ if (!isRecord(value)) return null;
949
+ const overflow = {};
950
+ for (const side of ["left", "right", "top", "bottom"]) {
951
+ const amount = numberValue(value, side);
952
+ if (amount !== null) overflow[side] = amount;
953
+ }
954
+ return Object.keys(overflow).length > 0 ? overflow : null;
955
+ }
956
+ var LAYOUT_ISSUE_CODES = [
957
+ "text_box_overflow",
958
+ "clipped_text",
959
+ "canvas_overflow",
960
+ "container_overflow",
961
+ "content_overlap",
962
+ "text_occluded",
963
+ "text_not_painted",
964
+ "caption_zone_collision",
965
+ "frame_out_of_frame",
966
+ "escaped_container",
967
+ "panel_out_of_canvas",
968
+ "canvas_content_at_edge",
969
+ "connector_detached",
970
+ "connector_orphan",
971
+ "rotation_pivot_drift",
972
+ "off_pivot_rotation",
973
+ "motion_appears_late",
974
+ "motion_out_of_order",
975
+ "motion_off_frame",
976
+ "motion_frozen",
977
+ "motion_selector_missing",
978
+ "motion_selector_ambiguous"
979
+ ];
980
+ function layoutCodeValue(value) {
981
+ return LAYOUT_ISSUE_CODES.find((code) => code === value) ?? null;
982
+ }
983
+ function severityValue(value) {
984
+ return value === "error" || value === "warning" || value === "info" ? value : null;
985
+ }
986
+ function rgbaValue(value) {
987
+ if (!Array.isArray(value) || value.length < 4) return null;
988
+ const [red, green, blue, alpha] = value;
989
+ return [red, green, blue, alpha].every((channel) => typeof channel === "number") ? [red, green, blue, alpha] : null;
990
+ }
991
+ function stringRecord(value) {
992
+ if (!isRecord(value)) return null;
993
+ const record = {};
994
+ for (const key of Object.keys(value)) {
995
+ const entry = Reflect.get(value, key);
996
+ if (typeof entry !== "string") return null;
997
+ record[key] = entry;
998
+ }
999
+ return record;
1000
+ }
1001
+ function assignOptionalString(issue, source, key) {
1002
+ const value = stringValue(source, key);
1003
+ if (value !== null) issue[key] = value;
1004
+ }
1005
+ function isRecord(value) {
1006
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1007
+ }
1008
+ function stringValue(value, key) {
1009
+ const entry = Reflect.get(value, key);
1010
+ return typeof entry === "string" ? entry : null;
1011
+ }
1012
+ function numberValue(value, key) {
1013
+ const entry = Reflect.get(value, key);
1014
+ return typeof entry === "number" && Number.isFinite(entry) ? entry : null;
1015
+ }
1016
+ function booleanValue(value, key) {
1017
+ const entry = Reflect.get(value, key);
1018
+ return typeof entry === "boolean" ? entry : null;
1019
+ }
1020
+ function urlPath(url) {
1021
+ try {
1022
+ return decodeURIComponent(new URL(url).pathname).replace(/^\//, "");
1023
+ } catch {
1024
+ return url;
1025
+ }
1026
+ }
1027
+ export {
1028
+ captureFindingCrops,
1029
+ captureOverviewShot,
1030
+ preResolveHostileMediaProxies,
1031
+ runBrowserCheck
1032
+ };