@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.
- package/LICENSE +190 -0
- package/NOTICE +54 -0
- package/README.md +23 -0
- package/bin/ignix-editor.mjs +8 -0
- package/package.json +53 -0
- package/patches/index.mjs +53 -0
- package/scripts/build-ffmpeg-macos.sh +35 -0
- package/scripts/build-whisper-macos.sh +21 -0
- package/scripts/vendor.mjs +41 -0
- package/skills/ignix-editor/SKILL.md +132 -0
- package/src/audio.mjs +31 -0
- package/src/binaries.json +46 -0
- package/src/binaries.mjs +83 -0
- package/src/cli.mjs +254 -0
- package/src/prepare.mjs +74 -0
- package/src/runtime/ignix-frame.js +92 -0
- package/src/transcribe.mjs +71 -0
- package/src/validate.mjs +71 -0
- package/templates/blank/index.html +41 -0
- package/vendor/hyperframes/README.md +181 -0
- package/vendor/hyperframes/UPSTREAM.json +12 -0
- package/vendor/hyperframes/bin/hyperframes-localize-fonts.mjs +12 -0
- package/vendor/hyperframes/bin/hyperframes.mjs +11 -0
- package/vendor/hyperframes/dist/add-LR3ZR2A5.js +79 -0
- package/vendor/hyperframes/dist/agentPromptGenerator-VIIPZCJ3.js +143 -0
- package/vendor/hyperframes/dist/animatedGifPrep-P2T6YM7Z.js +34 -0
- package/vendor/hyperframes/dist/asset-BE2DOV72.js +26 -0
- package/vendor/hyperframes/dist/assetCataloger-VBLPHX24.js +340 -0
- package/vendor/hyperframes/dist/auth-RCQB2ZT7.js +60 -0
- package/vendor/hyperframes/dist/autoUpdate-RJAX3DAZ.js +268 -0
- package/vendor/hyperframes/dist/backgroundChecks-H2LCUIMJ.js +61 -0
- package/vendor/hyperframes/dist/backgroundChecksWorker.js +26 -0
- package/vendor/hyperframes/dist/batchRender-FT7AP7XH.js +355 -0
- package/vendor/hyperframes/dist/beat-analyzer.global.js +338 -0
- package/vendor/hyperframes/dist/beats-Y2EOP72P.js +309 -0
- package/vendor/hyperframes/dist/benchmark-MZ7GY3JW.js +231 -0
- package/vendor/hyperframes/dist/browser-HUTAMRQE.js +237 -0
- package/vendor/hyperframes/dist/bundleWithLocalizedFonts-5QOPOB5D.js +52 -0
- package/vendor/hyperframes/dist/capture-RLZA6EMR.js +4079 -0
- package/vendor/hyperframes/dist/capture-SZZ4IYJK.js +290 -0
- package/vendor/hyperframes/dist/captureFile-LYOJOUIE.js +15 -0
- package/vendor/hyperframes/dist/captureTimeout-PA4FYWT5.js +27 -0
- package/vendor/hyperframes/dist/catalog-KYU55EWR.js +1001 -0
- package/vendor/hyperframes/dist/check-TCG4PXLR.js +1697 -0
- package/vendor/hyperframes/dist/checkBrowser-RPMO4OW5.js +1032 -0
- package/vendor/hyperframes/dist/chunk-2EAXUCCE.js +88 -0
- package/vendor/hyperframes/dist/chunk-2EGFTPWD.js +1077 -0
- package/vendor/hyperframes/dist/chunk-2PSPARWP.js +6058 -0
- package/vendor/hyperframes/dist/chunk-2YN64IN5.js +5747 -0
- package/vendor/hyperframes/dist/chunk-3GXQPCJC.js +682 -0
- package/vendor/hyperframes/dist/chunk-3ZP5DXE7.js +15 -0
- package/vendor/hyperframes/dist/chunk-4NWOGZZS.js +1990 -0
- package/vendor/hyperframes/dist/chunk-4PFZPP2N.js +587 -0
- package/vendor/hyperframes/dist/chunk-4THIAPBL.js +128 -0
- package/vendor/hyperframes/dist/chunk-4YYJOFKS.js +28 -0
- package/vendor/hyperframes/dist/chunk-54HJ63Q2.js +29 -0
- package/vendor/hyperframes/dist/chunk-5ETJX6WM.js +89 -0
- package/vendor/hyperframes/dist/chunk-5IAKAQA7.js +389 -0
- package/vendor/hyperframes/dist/chunk-5Z63TBTX.js +37 -0
- package/vendor/hyperframes/dist/chunk-6BEFEWFB.js +25 -0
- package/vendor/hyperframes/dist/chunk-6CSYCFQV.js +68 -0
- package/vendor/hyperframes/dist/chunk-6CTIGJY7.js +154 -0
- package/vendor/hyperframes/dist/chunk-7HG4BFIN.js +93 -0
- package/vendor/hyperframes/dist/chunk-7JZ4FXP2.js +118 -0
- package/vendor/hyperframes/dist/chunk-A2Z4Z4VL.js +2961 -0
- package/vendor/hyperframes/dist/chunk-AMKC3AXA.js +25 -0
- package/vendor/hyperframes/dist/chunk-AVUUN2XD.js +4847 -0
- package/vendor/hyperframes/dist/chunk-AWDFDFI3.js +46 -0
- package/vendor/hyperframes/dist/chunk-AWNBM3MZ.js +94 -0
- package/vendor/hyperframes/dist/chunk-BXCMXMJQ.js +73 -0
- package/vendor/hyperframes/dist/chunk-BZ56MTDX.js +6 -0
- package/vendor/hyperframes/dist/chunk-CFKU7HTK.js +171 -0
- package/vendor/hyperframes/dist/chunk-CWPVM2QV.js +308 -0
- package/vendor/hyperframes/dist/chunk-DPVXBVLL.js +31292 -0
- package/vendor/hyperframes/dist/chunk-DQBY7FRR.js +397 -0
- package/vendor/hyperframes/dist/chunk-E6RPWJVC.js +213 -0
- package/vendor/hyperframes/dist/chunk-EISRN4E6.js +294 -0
- package/vendor/hyperframes/dist/chunk-EOVYQ3IG.js +143 -0
- package/vendor/hyperframes/dist/chunk-F3WZGU7C.js +479 -0
- package/vendor/hyperframes/dist/chunk-FCSIGXXP.js +366 -0
- package/vendor/hyperframes/dist/chunk-FI4I7CME.js +56 -0
- package/vendor/hyperframes/dist/chunk-FLWXXDNS.js +15 -0
- package/vendor/hyperframes/dist/chunk-GK4AIFIH.js +11171 -0
- package/vendor/hyperframes/dist/chunk-GMECXFAN.js +57 -0
- package/vendor/hyperframes/dist/chunk-GULOKZLI.js +155 -0
- package/vendor/hyperframes/dist/chunk-H4YZZ2VQ.js +68 -0
- package/vendor/hyperframes/dist/chunk-H6QMKUYA.js +477 -0
- package/vendor/hyperframes/dist/chunk-HBBJFK6I.js +273 -0
- package/vendor/hyperframes/dist/chunk-HRUGC23L.js +212 -0
- package/vendor/hyperframes/dist/chunk-HVW7ABXD.js +19 -0
- package/vendor/hyperframes/dist/chunk-HW6OYASV.js +344 -0
- package/vendor/hyperframes/dist/chunk-HWKCIWQT.js +3578 -0
- package/vendor/hyperframes/dist/chunk-I465DBM6.js +1214 -0
- package/vendor/hyperframes/dist/chunk-IGLEPPTN.js +24 -0
- package/vendor/hyperframes/dist/chunk-IGNAAHS3.js +433 -0
- package/vendor/hyperframes/dist/chunk-IHFUKJOR.js +85 -0
- package/vendor/hyperframes/dist/chunk-IQ3OUQ5Z.js +213 -0
- package/vendor/hyperframes/dist/chunk-ISN5GRYI.js +20 -0
- package/vendor/hyperframes/dist/chunk-IUZFXWSV.js +446 -0
- package/vendor/hyperframes/dist/chunk-JH556Q42.js +647 -0
- package/vendor/hyperframes/dist/chunk-JTHMTOMQ.js +601 -0
- package/vendor/hyperframes/dist/chunk-K2EQN4VU.js +405 -0
- package/vendor/hyperframes/dist/chunk-K2FTXJYH.js +16044 -0
- package/vendor/hyperframes/dist/chunk-K4WIOZFP.js +32 -0
- package/vendor/hyperframes/dist/chunk-K4WKGXRC.js +18 -0
- package/vendor/hyperframes/dist/chunk-KBJUXVOJ.js +172 -0
- package/vendor/hyperframes/dist/chunk-KC5XXX3X.js +590 -0
- package/vendor/hyperframes/dist/chunk-KNU5COPB.js +29 -0
- package/vendor/hyperframes/dist/chunk-KZI44OPA.js +185 -0
- package/vendor/hyperframes/dist/chunk-L3YOGIPG.js +48 -0
- package/vendor/hyperframes/dist/chunk-LAOCA3MQ.js +189 -0
- package/vendor/hyperframes/dist/chunk-LCSMOLGX.js +312 -0
- package/vendor/hyperframes/dist/chunk-LFGJWOVA.js +61 -0
- package/vendor/hyperframes/dist/chunk-LHSR3M4M.js +498 -0
- package/vendor/hyperframes/dist/chunk-LYNI3FOL.js +123 -0
- package/vendor/hyperframes/dist/chunk-M2WBOQ2Q.js +54 -0
- package/vendor/hyperframes/dist/chunk-MRF4AMKD.js +104 -0
- package/vendor/hyperframes/dist/chunk-MWB3ZIFM.js +852 -0
- package/vendor/hyperframes/dist/chunk-NGKM64BP.js +39 -0
- package/vendor/hyperframes/dist/chunk-NXMYHJAL.js +43 -0
- package/vendor/hyperframes/dist/chunk-OAF4XJOW.js +192 -0
- package/vendor/hyperframes/dist/chunk-OFQWTKPW.js +117 -0
- package/vendor/hyperframes/dist/chunk-P6LJ4Y32.js +4662 -0
- package/vendor/hyperframes/dist/chunk-PBN6GBJE.js +108 -0
- package/vendor/hyperframes/dist/chunk-PDAMK4Q5.js +28 -0
- package/vendor/hyperframes/dist/chunk-PFCFR3KZ.js +20 -0
- package/vendor/hyperframes/dist/chunk-PJ3HDUCY.js +108 -0
- package/vendor/hyperframes/dist/chunk-PMRBLBUP.js +152 -0
- package/vendor/hyperframes/dist/chunk-PPQUYWTW.js +240 -0
- package/vendor/hyperframes/dist/chunk-Q5X2B5WT.js +29 -0
- package/vendor/hyperframes/dist/chunk-Q7IU7MOR.js +351 -0
- package/vendor/hyperframes/dist/chunk-QC4FJVLM.js +371 -0
- package/vendor/hyperframes/dist/chunk-QNYYOUU3.js +1318 -0
- package/vendor/hyperframes/dist/chunk-RDNNAKEP.js +161 -0
- package/vendor/hyperframes/dist/chunk-RMHUQGRK.js +657 -0
- package/vendor/hyperframes/dist/chunk-RQVDTPGD.js +6 -0
- package/vendor/hyperframes/dist/chunk-RVCWIIZ7.js +68 -0
- package/vendor/hyperframes/dist/chunk-S3D6GE5W.js +72 -0
- package/vendor/hyperframes/dist/chunk-S3S4TGEH.js +424 -0
- package/vendor/hyperframes/dist/chunk-S7NPLFWV.js +11395 -0
- package/vendor/hyperframes/dist/chunk-SHB5VDMH.js +51 -0
- package/vendor/hyperframes/dist/chunk-TCLGPL65.js +860 -0
- package/vendor/hyperframes/dist/chunk-THXFSPLV.js +40 -0
- package/vendor/hyperframes/dist/chunk-TJSTGSAW.js +354 -0
- package/vendor/hyperframes/dist/chunk-TQFG7HTI.js +1024 -0
- package/vendor/hyperframes/dist/chunk-TVCRUG2S.js +265 -0
- package/vendor/hyperframes/dist/chunk-TWWSYAKJ.js +24 -0
- package/vendor/hyperframes/dist/chunk-U7CZBDMV.js +27 -0
- package/vendor/hyperframes/dist/chunk-UEZXMWG3.js +139 -0
- package/vendor/hyperframes/dist/chunk-UYEZTK4U.js +61 -0
- package/vendor/hyperframes/dist/chunk-VC76R6W2.js +27 -0
- package/vendor/hyperframes/dist/chunk-VFCKXTBB.js +159 -0
- package/vendor/hyperframes/dist/chunk-VWG7OQKU.js +22 -0
- package/vendor/hyperframes/dist/chunk-VXVRPIJA.js +105 -0
- package/vendor/hyperframes/dist/chunk-WBLXWOYK.js +15 -0
- package/vendor/hyperframes/dist/chunk-WERLJGIC.js +20 -0
- package/vendor/hyperframes/dist/chunk-WMQNIQDJ.js +2057 -0
- package/vendor/hyperframes/dist/chunk-WPHMNO44.js +4528 -0
- package/vendor/hyperframes/dist/chunk-X5HWXQPU.js +113 -0
- package/vendor/hyperframes/dist/chunk-X7MTZ4T2.js +6 -0
- package/vendor/hyperframes/dist/chunk-XH4DSOS5.js +59 -0
- package/vendor/hyperframes/dist/chunk-XS4EJSKU.js +23 -0
- package/vendor/hyperframes/dist/chunk-XT5P4QMO.js +181 -0
- package/vendor/hyperframes/dist/chunk-XT7X6QCP.js +6 -0
- package/vendor/hyperframes/dist/chunk-XUHOIDKG.js +6 -0
- package/vendor/hyperframes/dist/chunk-XUXGIA7H.js +485 -0
- package/vendor/hyperframes/dist/chunk-XZABUQTX.js +113 -0
- package/vendor/hyperframes/dist/chunk-Y6W4DVPS.js +356 -0
- package/vendor/hyperframes/dist/chunk-YEIFI443.js +44 -0
- package/vendor/hyperframes/dist/chunk-YQZNILVH.js +375 -0
- package/vendor/hyperframes/dist/chunk-Z27A7NUB.js +65 -0
- package/vendor/hyperframes/dist/chunk-Z6B37SNM.js +3081 -0
- package/vendor/hyperframes/dist/chunk-ZJUKFZ2P.js +10954 -0
- package/vendor/hyperframes/dist/chunk-ZKDMAOFU.js +32 -0
- package/vendor/hyperframes/dist/chunk-ZMXUQLI2.js +17219 -0
- package/vendor/hyperframes/dist/chunk-ZTZ7NCJT.js +58 -0
- package/vendor/hyperframes/dist/chunk-ZTZA4UWZ.js +108 -0
- package/vendor/hyperframes/dist/clean-W57E5YQ3.js +293 -0
- package/vendor/hyperframes/dist/cli.js +495 -0
- package/vendor/hyperframes/dist/cloud-FFTJGZ24.js +70 -0
- package/vendor/hyperframes/dist/cloudrun-AJUTHUEA.js +763 -0
- package/vendor/hyperframes/dist/colors-HKWSZCGK.js +15 -0
- package/vendor/hyperframes/dist/commands/contrast-audit.browser.js +459 -0
- package/vendor/hyperframes/dist/commands/layout-audit.browser.js +2102 -0
- package/vendor/hyperframes/dist/commands/motion-sample.browser.js +74 -0
- package/vendor/hyperframes/dist/commands/motion-signature.browser.js +374 -0
- package/vendor/hyperframes/dist/compare-AYCTT55F.js +421 -0
- package/vendor/hyperframes/dist/compiler-QO36EXLS.js +121 -0
- package/vendor/hyperframes/dist/component-VFFR2O7T.js +176 -0
- package/vendor/hyperframes/dist/compositions-QTVN3U2A.js +228 -0
- package/vendor/hyperframes/dist/contactSheet-27SRU7A4.js +22 -0
- package/vendor/hyperframes/dist/delete-ZAKYCB7I.js +114 -0
- package/vendor/hyperframes/dist/deploy-MX76RZ36.js +101 -0
- package/vendor/hyperframes/dist/destroy-H2TZBYHH.js +42 -0
- package/vendor/hyperframes/dist/deterministicFonts-HAEMV4TM.js +50 -0
- package/vendor/hyperframes/dist/dist-EWXJGN63.js +129 -0
- package/vendor/hyperframes/dist/dist-FNNGCKFS.js +29 -0
- package/vendor/hyperframes/dist/dist-S3PJNPXQ.js +392 -0
- package/vendor/hyperframes/dist/docker/Dockerfile.render +65 -0
- package/vendor/hyperframes/dist/docs/compositions.md +67 -0
- package/vendor/hyperframes/dist/docs/data-attributes.md +27 -0
- package/vendor/hyperframes/dist/docs/examples.md +19 -0
- package/vendor/hyperframes/dist/docs/gsap.md +26 -0
- package/vendor/hyperframes/dist/docs/rendering.md +35 -0
- package/vendor/hyperframes/dist/docs/troubleshooting.md +29 -0
- package/vendor/hyperframes/dist/docs-QAPJEGLS.js +131 -0
- package/vendor/hyperframes/dist/doctor-AI7C3FON.js +67 -0
- package/vendor/hyperframes/dist/dom-IROKGVJI.js +14 -0
- package/vendor/hyperframes/dist/dotEnv-AECLXQSO.js +14 -0
- package/vendor/hyperframes/dist/events-7LALYNKZ.js +92 -0
- package/vendor/hyperframes/dist/events-FQY3HGKZ.js +88 -0
- package/vendor/hyperframes/dist/feedback-WCMDMSTK.js +472 -0
- package/vendor/hyperframes/dist/ffmpeg-QIUFEFTY.js +35 -0
- package/vendor/hyperframes/dist/figma-64WY462P.js +63 -0
- package/vendor/hyperframes/dist/fontData.generated-NXAOI4GH.js +13 -0
- package/vendor/hyperframes/dist/fontLocalizeCli.js +132 -0
- package/vendor/hyperframes/dist/get-FPOMJMZB.js +103 -0
- package/vendor/hyperframes/dist/gpuPolicy-2ZUZE5D6.js +38 -0
- package/vendor/hyperframes/dist/grade-compare-E2CKPST4.js +647 -0
- package/vendor/hyperframes/dist/gsapParser-DIYYX6JT.js +2846 -0
- package/vendor/hyperframes/dist/gsapParserAcorn-E3GEIRZB.js +28 -0
- package/vendor/hyperframes/dist/help-YRQIDDML.js +197 -0
- package/vendor/hyperframes/dist/history-PP5NDRV3.js +571 -0
- package/vendor/hyperframes/dist/hyperframe-runtime.js +1081 -0
- package/vendor/hyperframes/dist/hyperframe.manifest.json +22 -0
- package/vendor/hyperframes/dist/hyperframe.runtime.iife.js +1081 -0
- package/vendor/hyperframes/dist/hyperframes-player.global.js +474 -0
- package/vendor/hyperframes/dist/hyperframes-slideshow.global.js +149 -0
- package/vendor/hyperframes/dist/info-SEX3B7JL.js +153 -0
- package/vendor/hyperframes/dist/init-U3AKHO5B.js +1147 -0
- package/vendor/hyperframes/dist/inspect-Q3K6EDEK.js +97 -0
- package/vendor/hyperframes/dist/installer-K6O5WF44.js +37 -0
- package/vendor/hyperframes/dist/keyframes-DC64JCI3.js +2602 -0
- package/vendor/hyperframes/dist/lambda-D7UMN4DJ.js +451 -0
- package/vendor/hyperframes/dist/layout-XSPPDHOO.js +86 -0
- package/vendor/hyperframes/dist/lib-TPG2ZMAX.js +128 -0
- package/vendor/hyperframes/dist/lint-7DQZE7L3.js +164 -0
- package/vendor/hyperframes/dist/lintProject-OHBBM3DJ.js +27 -0
- package/vendor/hyperframes/dist/list-4K5MVDQX.js +162 -0
- package/vendor/hyperframes/dist/login-NTX4OWXL.js +377 -0
- package/vendor/hyperframes/dist/logout-Q654A3SI.js +100 -0
- package/vendor/hyperframes/dist/manager-67P2XFXQ.js +34 -0
- package/vendor/hyperframes/dist/manager-CT3D67CG.js +38 -0
- package/vendor/hyperframes/dist/manager-GFN75DM4.js +30 -0
- package/vendor/hyperframes/dist/media-treatment-5FYAOPNL.js +972 -0
- package/vendor/hyperframes/dist/media-use-4XXGABIL.js +113 -0
- package/vendor/hyperframes/dist/models-C4E4IWJD.js +137 -0
- package/vendor/hyperframes/dist/motionShot-S4MIGMT5.js +614 -0
- package/vendor/hyperframes/dist/normalize-O76AC4HE.js +333 -0
- package/vendor/hyperframes/dist/normalize-audio-CSFTXLXD.js +276 -0
- package/vendor/hyperframes/dist/open-2ZD6BHZG.js +115 -0
- package/vendor/hyperframes/dist/pipeline-TNGWUZQC.js +54 -0
- package/vendor/hyperframes/dist/play-CTMUXX6E.js +349 -0
- package/vendor/hyperframes/dist/policies-FSDZVS2E.js +292 -0
- package/vendor/hyperframes/dist/preflight-SMNV6RW2.js +45 -0
- package/vendor/hyperframes/dist/present-WQVHV5CR.js +350 -0
- package/vendor/hyperframes/dist/preview-JOJXTH75.js +1820 -0
- package/vendor/hyperframes/dist/producer-ECLEN5RP.js +13 -0
- package/vendor/hyperframes/dist/progress-FBIEEB7Y.js +73 -0
- package/vendor/hyperframes/dist/projectConfig-HYJMJ5BY.js +56 -0
- package/vendor/hyperframes/dist/publication-HQ5Y3KBM.js +29 -0
- package/vendor/hyperframes/dist/publish-VHDYQASC.js +430 -0
- package/vendor/hyperframes/dist/refresh-K24ETHMA.js +53 -0
- package/vendor/hyperframes/dist/remove-background-W2YX2NVH.js +253 -0
- package/vendor/hyperframes/dist/render-AO5VX3YI.js +177 -0
- package/vendor/hyperframes/dist/render-LNO62LEL.js +2367 -0
- package/vendor/hyperframes/dist/render-TTQI7TGN.js +796 -0
- package/vendor/hyperframes/dist/render-batch-YH7CTWNY.js +284 -0
- package/vendor/hyperframes/dist/renderCancellation-JPIHE47X.js +35 -0
- package/vendor/hyperframes/dist/renderSetupWorker.js +79 -0
- package/vendor/hyperframes/dist/resolver-IZ647GBZ.js +38 -0
- package/vendor/hyperframes/dist/runtimeVersion.js +18 -0
- package/vendor/hyperframes/dist/screenshotCapture-ECBTLCU6.js +179 -0
- package/vendor/hyperframes/dist/shaderTransitionWorker.js +44 -0
- package/vendor/hyperframes/dist/sherpa-KKLNW6U2.js +314 -0
- package/vendor/hyperframes/dist/sherpaWorker.js +77 -0
- package/vendor/hyperframes/dist/sites-TNVKZS73.js +52 -0
- package/vendor/hyperframes/dist/skill-ZHVLH7KX.js +15 -0
- package/vendor/hyperframes/dist/skills/hyperframes/SKILL.md +152 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/brief-contract.md +108 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/brief-format.md +72 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/capability-menu.md +47 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/frame-worker-core.md +80 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/intent-interview.md +73 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/pitch-round.md +40 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/plugin-installation.md +43 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/production-loop.md +26 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/review-loop.md +37 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/route-briefs.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/embedded-captions.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/general-video.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/motion-graphics.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/music-to-video.md +12 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/pr-to-video.md +28 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/product-launch-video.md +13 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/slideshow.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/script-format.md +52 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/skill-lifecycle.md +35 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/storyboard-format.md +99 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/subagent-dispatch.md +35 -0
- package/vendor/hyperframes/dist/skills/hyperframes/references/workflow-catalog.md +10 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +194 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.mjs +88 -0
- package/vendor/hyperframes/dist/skills/hyperframes/scripts/plugin-cli.test.mjs +117 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/SKILL.md +189 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/beats.md +19 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloud.md +163 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/cloudrun.md +62 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/compare-and-batch.md +105 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/doctor-browser.md +57 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/init-and-scaffold.md +74 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lambda.md +185 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +132 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/preview-render.md +193 -0
- package/vendor/hyperframes/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +134 -0
- package/vendor/hyperframes/dist/skills/media-use/SKILL.md +100 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/CREDITS.md +35 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/chime.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click-soft.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/click.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/error.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-1.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-2.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/glitch-3.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-1.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/impact-bass-2.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/key-press.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/manifest.json +97 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/notification.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/ping.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/pop.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/riser.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/sparkle.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/typing.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-cinematic.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh-short.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/assets/sfx/whoosh.mp3 +0 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/bgm.md +76 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/authoring.md +163 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/motion.md +87 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/captions/transcript-handling.md +97 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/remove-background.md +143 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/requirements.md +29 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/sfx.md +42 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/transcribe.md +52 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/tts-to-captions.md +35 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/references/tts.md +260 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.mjs +311 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/audio.test.mjs +159 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/gemini-pipeline.test.mjs +131 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.mjs +122 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-tts.test.mjs +38 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.mjs +98 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/heygen-voice.test.mjs +233 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.mjs +39 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/audio-meta.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm-volume.mjs +4 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.mjs +257 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/bgm.test.mjs +74 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.mjs +14 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/concurrency.test.mjs +41 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.mjs +43 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.py +52 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth.test.mjs +86 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-auth_test.py +90 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.mjs +122 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/gemini-tts.test.mjs +243 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.mjs +197 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/heygen.test.mjs +185 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.mjs +114 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/media-record.test.mjs +205 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.mjs +77 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/python.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.mjs +165 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/sfx.test.mjs +121 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.mjs +389 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.spawn.test.mjs +158 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lib/tts.test.mjs +230 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/lyria-recipe.py +136 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.mjs +175 -0
- package/vendor/hyperframes/dist/skills/media-use/audio/scripts/wait-bgm.test.mjs +108 -0
- package/vendor/hyperframes/dist/skills/media-use/luts/README.md +28 -0
- package/vendor/hyperframes/dist/skills/media-use/luts/index.json +57 -0
- package/vendor/hyperframes/dist/skills/media-use/references/audio.md +20 -0
- package/vendor/hyperframes/dist/skills/media-use/references/grading.md +160 -0
- package/vendor/hyperframes/dist/skills/media-use/references/media-treatment-recipes.md +929 -0
- package/vendor/hyperframes/dist/skills/media-use/references/media-treatments.md +202 -0
- package/vendor/hyperframes/dist/skills/media-use/references/memory.md +37 -0
- package/vendor/hyperframes/dist/skills/media-use/references/meta.md +61 -0
- package/vendor/hyperframes/dist/skills/media-use/references/operations.md +327 -0
- package/vendor/hyperframes/dist/skills/media-use/references/resolve.md +150 -0
- package/vendor/hyperframes/dist/skills/media-use/references/setup-providers.md +80 -0
- package/vendor/hyperframes/dist/skills/media-use/references/telemetry-dashboard.md +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/audio-duck.mjs +113 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/compatibility.test.mjs +96 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/dither.mjs +328 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/dither.test.mjs +176 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/eval.mjs +369 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.mjs +128 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/adopt.test.mjs +95 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bgm-provider.mjs +20 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/brand-provider.mjs +59 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.mjs +119 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/bundled-sfx-provider.test.mjs +139 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cache.mjs +148 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.mjs +91 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/candidates.test.mjs +155 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.mjs +161 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/codex-provider.test.mjs +34 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.d.mts +3 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.mjs +45 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/config-lock.test.mjs +79 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/coverage.test.mjs +136 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.mjs +181 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-build.test.mjs +80 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.mjs +198 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cube-validate.test.mjs +125 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.mjs +184 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/cutlist.test.mjs +162 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.mjs +95 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/duck.test.mjs +153 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.mjs +230 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/error-diffusion.test.mjs +102 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ff-binaries.mjs +37 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.mjs +72 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/freeze.test.mjs +138 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.mjs +265 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/grade-analyzer.test.mjs +285 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.mjs +191 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-cli.test.mjs +301 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.mjs +45 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-search.test.mjs +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.mjs +138 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/heygen-video-provider.test.mjs +435 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/image-provider.mjs +44 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/index-gen.mjs +63 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-media-search.mjs +32 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.mjs +318 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-models.test.mjs +220 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.mjs +78 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/local-run.test.mjs +121 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.mjs +244 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/logo-provider.test.mjs +298 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.mjs +94 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/ltx-video-provider.test.mjs +316 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.mjs +271 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/lut-preset-provider.test.mjs +199 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.d.mts +19 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.mjs +279 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/manifest.test.mjs +397 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/match.mjs +47 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.mjs +85 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-fetch.test.mjs +197 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.mjs +20 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-home.test.mjs +61 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.d.mts +9 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/media-search.mjs +107 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.mjs +128 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/mflux-provider.test.mjs +174 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.mjs +49 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/misses.test.mjs +89 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.mjs +31 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/npx-sync.test.mjs +50 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.mjs +27 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/parakeet-words.test.mjs +44 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.mjs +180 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/prefs-store.test.mjs +189 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.mjs +41 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/probe.test.mjs +148 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/providers.mjs +5 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.mjs +367 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/recipe-store.test.mjs +367 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.mjs +212 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/registry.test.mjs +262 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.mjs +24 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/search.test.mjs +32 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/sfx-provider.mjs +23 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.mjs +132 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/specs.test.mjs +157 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.mjs +117 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/stats.test.mjs +165 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/svg-sanitize.mjs +21 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.mjs +210 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/telemetry.test.mjs +437 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/test-home.test.mjs +10 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.mjs +21 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/transcriptCutFade.test.mjs +33 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.mjs +94 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/tts-local-provider.test.mjs +72 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.mjs +57 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/usage.test.mjs +54 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.mjs +57 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/voice-provider.test.mjs +46 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/lib/words.mjs +18 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/prefs.mjs +70 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/recipe.mjs +103 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/resolve-plugin.test.mjs +62 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/resolve.mjs +1369 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.mjs +194 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcribe.test.mjs +112 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.mjs +270 -0
- package/vendor/hyperframes/dist/skills/media-use/scripts/transcript-cut.test.mjs +117 -0
- package/vendor/hyperframes/dist/skills-MJ2J4GEM.js +808 -0
- package/vendor/hyperframes/dist/skillsUpdateCheck-TKTYQN5R.js +26 -0
- package/vendor/hyperframes/dist/slideshow-EJ4IMY6P.js +24 -0
- package/vendor/hyperframes/dist/snapshot-KIVDUUMN.js +875 -0
- package/vendor/hyperframes/dist/src-6YQBJGWR.js +202 -0
- package/vendor/hyperframes/dist/src-PVYUYV3M.js +471 -0
- package/vendor/hyperframes/dist/state-KAXGHF77.js +26 -0
- package/vendor/hyperframes/dist/staticProjectServer-7EU666GS.js +49 -0
- package/vendor/hyperframes/dist/status-YM52BQ6S.js +311 -0
- package/vendor/hyperframes/dist/studio/assets/hyperframes-player-Cp8e_Zst.js +473 -0
- package/vendor/hyperframes/dist/studio/assets/index-BX3KHhGX.js +71 -0
- package/vendor/hyperframes/dist/studio/assets/index-CASEBNy2.js +1 -0
- package/vendor/hyperframes/dist/studio/assets/index-D11atkBt.css +1 -0
- package/vendor/hyperframes/dist/studio/assets/index-DMTt9nTf.js +531 -0
- package/vendor/hyperframes/dist/studio/assets/index-oE1pOdAy.js +399 -0
- package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js +948 -0
- package/vendor/hyperframes/dist/studio/chunk-5VSXRGIX.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js +938 -0
- package/vendor/hyperframes/dist/studio/chunk-7UQWVN52.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js +190 -0
- package/vendor/hyperframes/dist/studio/chunk-EEXSYY5F.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js +1441 -0
- package/vendor/hyperframes/dist/studio/chunk-FOEID72M.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js +10 -0
- package/vendor/hyperframes/dist/studio/chunk-PZ5AY32C.js.map +1 -0
- package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js +1103 -0
- package/vendor/hyperframes/dist/studio/chunk-TDWGXBUT.js.map +1 -0
- package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js +47 -0
- package/vendor/hyperframes/dist/studio/domEditingLayers-IEVLO54Z.js.map +1 -0
- package/vendor/hyperframes/dist/studio/favicon.svg +14 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/audio.svg +7 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/captions.svg +5 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/composition.svg +12 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/image.svg +18 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/music.svg +10 -0
- package/vendor/hyperframes/dist/studio/icons/timeline/text.svg +3 -0
- package/vendor/hyperframes/dist/studio/index.css +165 -0
- package/vendor/hyperframes/dist/studio/index.css.map +1 -0
- package/vendor/hyperframes/dist/studio/index.d.ts +4296 -0
- package/vendor/hyperframes/dist/studio/index.html +23 -0
- package/vendor/hyperframes/dist/studio/index.js +99693 -0
- package/vendor/hyperframes/dist/studio/index.js.map +1 -0
- package/vendor/hyperframes/dist/studio/player.d.ts +30 -0
- package/vendor/hyperframes/dist/studio/player.js +10 -0
- package/vendor/hyperframes/dist/studio/player.js.map +1 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.d.ts +39 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js +50 -0
- package/vendor/hyperframes/dist/studio/styles/tailwind-preset.js.map +1 -0
- package/vendor/hyperframes/dist/studio/styles.css +1 -0
- package/vendor/hyperframes/dist/studio/ui.d.ts +296 -0
- package/vendor/hyperframes/dist/studio/ui.js +66 -0
- package/vendor/hyperframes/dist/studio/ui.js.map +1 -0
- package/vendor/hyperframes/dist/studio-api-PNQZRPX5.js +136 -0
- package/vendor/hyperframes/dist/studioSelectionClient-IUUPKUHZ.js +25 -0
- package/vendor/hyperframes/dist/studioServer-UWRBPIOJ.js +1457 -0
- package/vendor/hyperframes/dist/synthesize-K62TIZWI.js +182 -0
- package/vendor/hyperframes/dist/system-EZYZNUFD.js +44 -0
- package/vendor/hyperframes/dist/telemetry-2YC4SGQU.js +144 -0
- package/vendor/hyperframes/dist/telemetry-QMYM4WME.js +95 -0
- package/vendor/hyperframes/dist/templates/_shared/AGENTS.md +107 -0
- package/vendor/hyperframes/dist/templates/_shared/CLAUDE.md +107 -0
- package/vendor/hyperframes/dist/templates/blank/index.html +55 -0
- package/vendor/hyperframes/dist/templates/from-file/index.html +75 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/captions.html +154 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/graphics.html +162 -0
- package/vendor/hyperframes/dist/templates/warm-grain/compositions/intro.html +87 -0
- package/vendor/hyperframes/dist/templates/warm-grain/index.html +264 -0
- package/vendor/hyperframes/dist/templates/warm-grain/registry-item.json +34 -0
- package/vendor/hyperframes/dist/timeline-77Z3BBQM.js +1377 -0
- package/vendor/hyperframes/dist/tokens-OBGTYE4Z.js +92 -0
- package/vendor/hyperframes/dist/transcribe-7NVFHCGA.js +387 -0
- package/vendor/hyperframes/dist/transcribe-BNSJRR4M.js +62 -0
- package/vendor/hyperframes/dist/tts-P3LIPIL5.js +234 -0
- package/vendor/hyperframes/dist/updateCheck-UDWIJ4ZQ.js +39 -0
- package/vendor/hyperframes/dist/upgrade-CT3CPO3E.js +231 -0
- package/vendor/hyperframes/dist/urlDownloader-H6WRI2UE.js +39 -0
- package/vendor/hyperframes/dist/usage-EC3KFUIJ.js +2139 -0
- package/vendor/hyperframes/dist/validate-65QDZJWZ.js +70 -0
- package/vendor/hyperframes/dist/video-FGSGKRSV.js +261 -0
- package/vendor/hyperframes/dist/workspaceBuildCheck-TOLGAI4T.js +133 -0
- package/vendor/hyperframes/package.json +80 -0
|
@@ -0,0 +1,1103 @@
|
|
|
1
|
+
// src/utils/sourceScopedSelectorIndex.ts
|
|
2
|
+
var activePass = null;
|
|
3
|
+
function withSelectorIndexPass(doc, run) {
|
|
4
|
+
const previous = activePass;
|
|
5
|
+
activePass = { doc, bySelector: /* @__PURE__ */ new Map() };
|
|
6
|
+
try {
|
|
7
|
+
return run();
|
|
8
|
+
} finally {
|
|
9
|
+
activePass = previous;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function buildOccurrences(doc, selector, resolveSourceFile) {
|
|
13
|
+
const occurrences = /* @__PURE__ */ new Map();
|
|
14
|
+
const counts = /* @__PURE__ */ new Map();
|
|
15
|
+
for (const candidate of doc.querySelectorAll(selector)) {
|
|
16
|
+
const scope = resolveSourceFile(candidate) ?? "index.html";
|
|
17
|
+
const index = counts.get(scope) ?? 0;
|
|
18
|
+
counts.set(scope, index + 1);
|
|
19
|
+
occurrences.set(candidate, { scope, index });
|
|
20
|
+
}
|
|
21
|
+
return occurrences;
|
|
22
|
+
}
|
|
23
|
+
function getSourceScopedSelectorIndex(doc, el, selector, sourceFile, resolveSourceFile) {
|
|
24
|
+
if (!selector || selector.startsWith("#") || selector.startsWith("[data-composition-id=")) {
|
|
25
|
+
return void 0;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const pass = activePass?.doc === doc ? activePass : null;
|
|
29
|
+
let occurrences = pass?.bySelector.get(selector);
|
|
30
|
+
if (!occurrences) {
|
|
31
|
+
occurrences = buildOccurrences(doc, selector, resolveSourceFile);
|
|
32
|
+
pass?.bySelector.set(selector, occurrences);
|
|
33
|
+
}
|
|
34
|
+
const hit = occurrences.get(el);
|
|
35
|
+
return hit && hit.scope === (sourceFile ?? "index.html") ? hit.index : void 0;
|
|
36
|
+
} catch {
|
|
37
|
+
return void 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/components/editor/domEditingDom.ts
|
|
42
|
+
import { COLOR_GRADING_SOURCE_HIDDEN_ATTR } from "@hyperframes/core/color-grading";
|
|
43
|
+
|
|
44
|
+
// src/components/editor/domEditingTypes.ts
|
|
45
|
+
var CURATED_STYLE_PROPERTIES = [
|
|
46
|
+
"position",
|
|
47
|
+
"display",
|
|
48
|
+
"top",
|
|
49
|
+
"left",
|
|
50
|
+
"right",
|
|
51
|
+
"bottom",
|
|
52
|
+
"inset",
|
|
53
|
+
"width",
|
|
54
|
+
"height",
|
|
55
|
+
"gap",
|
|
56
|
+
"justify-content",
|
|
57
|
+
"align-items",
|
|
58
|
+
"flex-direction",
|
|
59
|
+
"font-size",
|
|
60
|
+
"font-style",
|
|
61
|
+
"font-weight",
|
|
62
|
+
"font-family",
|
|
63
|
+
"line-height",
|
|
64
|
+
"letter-spacing",
|
|
65
|
+
"text-align",
|
|
66
|
+
"text-transform",
|
|
67
|
+
"color",
|
|
68
|
+
"background-color",
|
|
69
|
+
"background-image",
|
|
70
|
+
"opacity",
|
|
71
|
+
"mix-blend-mode",
|
|
72
|
+
"border-radius",
|
|
73
|
+
"border-width",
|
|
74
|
+
"border-style",
|
|
75
|
+
"border-color",
|
|
76
|
+
"border-top-width",
|
|
77
|
+
"border-top-style",
|
|
78
|
+
"border-top-color",
|
|
79
|
+
"outline-color",
|
|
80
|
+
"overflow",
|
|
81
|
+
"clip-path",
|
|
82
|
+
"box-shadow",
|
|
83
|
+
"filter",
|
|
84
|
+
"backdrop-filter",
|
|
85
|
+
"z-index",
|
|
86
|
+
"transform",
|
|
87
|
+
"object-fit",
|
|
88
|
+
"object-position"
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
// src/components/editor/domEditingDom.ts
|
|
92
|
+
import { parsePx } from "@hyperframes/core/editing";
|
|
93
|
+
function isHtmlElement(value) {
|
|
94
|
+
return typeof value === "object" && value !== null && "nodeType" in value && typeof value.nodeType === "number" && value.nodeType === 1;
|
|
95
|
+
}
|
|
96
|
+
function isTextBearingTag(tagName) {
|
|
97
|
+
return ["div", "span", "p", "strong", "h1", "h2", "h3", "h4", "h5", "h6"].includes(tagName);
|
|
98
|
+
}
|
|
99
|
+
function isEditableTextLeaf(el) {
|
|
100
|
+
return isTextBearingTag(el.tagName.toLowerCase()) && el.children.length === 0;
|
|
101
|
+
}
|
|
102
|
+
function elementRendersItself(win, el) {
|
|
103
|
+
const computed = win.getComputedStyle(el);
|
|
104
|
+
if (computed.display === "none" || computed.visibility === "hidden") return false;
|
|
105
|
+
const opacity = Number.parseFloat(computed.opacity);
|
|
106
|
+
return !(Number.isFinite(opacity) && opacity <= 0.01 && !el.hasAttribute(COLOR_GRADING_SOURCE_HIDDEN_ATTR));
|
|
107
|
+
}
|
|
108
|
+
function isElementVisibleThroughAncestors(el, memo) {
|
|
109
|
+
const win = el.ownerDocument.defaultView;
|
|
110
|
+
if (!win) return true;
|
|
111
|
+
const pending = [];
|
|
112
|
+
let inherited = true;
|
|
113
|
+
for (let node = el; node; node = node.parentElement) {
|
|
114
|
+
const answered = memo?.get(node);
|
|
115
|
+
if (answered !== void 0) {
|
|
116
|
+
inherited = answered;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
pending.push(node);
|
|
120
|
+
}
|
|
121
|
+
for (let i = pending.length - 1; i >= 0; i -= 1) {
|
|
122
|
+
const node = pending[i];
|
|
123
|
+
inherited = inherited && elementRendersItself(win, node);
|
|
124
|
+
memo?.set(node, inherited);
|
|
125
|
+
}
|
|
126
|
+
return inherited;
|
|
127
|
+
}
|
|
128
|
+
function getCuratedComputedStyles(el) {
|
|
129
|
+
const styles = {};
|
|
130
|
+
const computed = el.ownerDocument.defaultView?.getComputedStyle(el);
|
|
131
|
+
if (!computed) return styles;
|
|
132
|
+
for (const prop of CURATED_STYLE_PROPERTIES) {
|
|
133
|
+
const value = computed.getPropertyValue(prop);
|
|
134
|
+
if (value) styles[prop] = value;
|
|
135
|
+
}
|
|
136
|
+
return styles;
|
|
137
|
+
}
|
|
138
|
+
function getInlineStyles(el) {
|
|
139
|
+
const styles = {};
|
|
140
|
+
for (const property of CURATED_STYLE_PROPERTIES) {
|
|
141
|
+
const value = el.style.getPropertyValue(property);
|
|
142
|
+
if (value) styles[property] = value;
|
|
143
|
+
}
|
|
144
|
+
return styles;
|
|
145
|
+
}
|
|
146
|
+
function getDataAttributes(el) {
|
|
147
|
+
const attrs = {};
|
|
148
|
+
for (const attr of el.attributes) {
|
|
149
|
+
if (attr.name.startsWith("data-")) {
|
|
150
|
+
attrs[attr.name.slice(5)] = attr.value;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return attrs;
|
|
154
|
+
}
|
|
155
|
+
function findClosestByAttribute(el, attributeNames) {
|
|
156
|
+
let current = el;
|
|
157
|
+
while (current) {
|
|
158
|
+
const candidate = current;
|
|
159
|
+
if (attributeNames.some((attribute) => candidate.hasAttribute(attribute))) {
|
|
160
|
+
return candidate;
|
|
161
|
+
}
|
|
162
|
+
current = current.parentElement;
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
var compositionSourceMap = /* @__PURE__ */ new Map();
|
|
167
|
+
var compositionSourceMapRevision = 0;
|
|
168
|
+
function setCompositionSourceMap(map) {
|
|
169
|
+
compositionSourceMap = map;
|
|
170
|
+
compositionSourceMapRevision += 1;
|
|
171
|
+
}
|
|
172
|
+
function getCompositionSourceMapRevision() {
|
|
173
|
+
return compositionSourceMapRevision;
|
|
174
|
+
}
|
|
175
|
+
function sourceFromCompositionId(ownerRoot) {
|
|
176
|
+
if (!ownerRoot || compositionSourceMap.size === 0) return void 0;
|
|
177
|
+
const authored = ownerRoot.getAttribute("data-hf-original-composition-id");
|
|
178
|
+
const current = ownerRoot.getAttribute("data-composition-id");
|
|
179
|
+
return (authored ? compositionSourceMap.get(authored) : void 0) ?? (current ? compositionSourceMap.get(current) : void 0);
|
|
180
|
+
}
|
|
181
|
+
function getSourceFileForElement(el, activeCompositionPath) {
|
|
182
|
+
const sourceHost = findClosestByAttribute(el, ["data-composition-file", "data-composition-src"]);
|
|
183
|
+
const ownerRoot = findClosestByAttribute(el, ["data-composition-id"]);
|
|
184
|
+
const sourceFile = sourceHost?.getAttribute("data-composition-file") ?? sourceHost?.getAttribute("data-composition-src") ?? ownerRoot?.getAttribute("data-composition-file") ?? ownerRoot?.getAttribute("data-composition-src") ?? sourceFromCompositionId(ownerRoot) ?? activeCompositionPath ?? "index.html";
|
|
185
|
+
return {
|
|
186
|
+
sourceFile,
|
|
187
|
+
compositionPath: sourceFile
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function normalizeTimelineCompositionSource(value) {
|
|
191
|
+
const trimmed = value?.trim();
|
|
192
|
+
if (!trimmed) return void 0;
|
|
193
|
+
if (!/^([a-z][a-z0-9+.-]*:|\/)/i.test(trimmed)) return trimmed;
|
|
194
|
+
let pathname = trimmed;
|
|
195
|
+
try {
|
|
196
|
+
pathname = new URL(trimmed, "http://studio.local").pathname;
|
|
197
|
+
} catch {
|
|
198
|
+
pathname = trimmed;
|
|
199
|
+
}
|
|
200
|
+
for (const marker of ["/preview/comp/", "/preview/"]) {
|
|
201
|
+
const markerIndex = pathname.indexOf(marker);
|
|
202
|
+
if (markerIndex < 0) continue;
|
|
203
|
+
const sourcePath = pathname.slice(markerIndex + marker.length).replace(/^\/+/, "");
|
|
204
|
+
return sourcePath || trimmed;
|
|
205
|
+
}
|
|
206
|
+
return trimmed;
|
|
207
|
+
}
|
|
208
|
+
function escapeCssIdentifier(value) {
|
|
209
|
+
const css = globalThis.CSS;
|
|
210
|
+
if (typeof css?.escape === "function") return css.escape(value);
|
|
211
|
+
if (value === "-") return "\\-";
|
|
212
|
+
let escaped = "";
|
|
213
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
214
|
+
const char = value[index] ?? "";
|
|
215
|
+
const code = char.charCodeAt(0);
|
|
216
|
+
if (code === 0) {
|
|
217
|
+
escaped += "\uFFFD";
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
const isDigit = code >= 48 && code <= 57;
|
|
221
|
+
const isUpperAlpha = code >= 65 && code <= 90;
|
|
222
|
+
const isLowerAlpha = code >= 97 && code <= 122;
|
|
223
|
+
const isControl = code >= 1 && code <= 31 || code === 127;
|
|
224
|
+
const isLeadingDigit = index === 0 && isDigit;
|
|
225
|
+
const isSecondDigitAfterDash = index === 1 && value.startsWith("-") && isDigit;
|
|
226
|
+
if (isControl || isLeadingDigit || isSecondDigitAfterDash) {
|
|
227
|
+
escaped += `\\${code.toString(16)} `;
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
if (isUpperAlpha || isLowerAlpha || isDigit || char === "-" || char === "_" || code >= 128) {
|
|
231
|
+
escaped += char;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
escaped += `\\${char}`;
|
|
235
|
+
}
|
|
236
|
+
return escaped;
|
|
237
|
+
}
|
|
238
|
+
function escapeCssString(value) {
|
|
239
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\a ").replace(/\r/g, "\\d ").replace(/\f/g, "\\c ");
|
|
240
|
+
}
|
|
241
|
+
function querySelectorAllSafely(doc, selector) {
|
|
242
|
+
try {
|
|
243
|
+
return Array.from(doc.querySelectorAll(selector));
|
|
244
|
+
} catch {
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
function humanizeIdentifier(value) {
|
|
249
|
+
return value.replace(/\.html$/i, "").replace(/^compositions\//i, "").split("/").at(-1)?.replace(/[-_]+/g, " ").replace(/\b\w/g, (char) => char.toUpperCase()) ?? value;
|
|
250
|
+
}
|
|
251
|
+
function buildStableSelector(el) {
|
|
252
|
+
if (el.id) return `#${escapeCssIdentifier(el.id)}`;
|
|
253
|
+
const compositionId = el.getAttribute("data-composition-id");
|
|
254
|
+
if (compositionId) return `[data-composition-id="${escapeCssString(compositionId)}"]`;
|
|
255
|
+
const group = el.getAttribute("data-hf-group");
|
|
256
|
+
if (group) return `[data-hf-group="${escapeCssString(group)}"]`;
|
|
257
|
+
return getPreferredClassSelector(el);
|
|
258
|
+
}
|
|
259
|
+
function getPreferredClassSelector(el) {
|
|
260
|
+
const classes = Array.from(el.classList).map((value) => value.trim()).filter(Boolean);
|
|
261
|
+
if (classes.length === 0) return void 0;
|
|
262
|
+
const preferred = classes.find((value) => value !== "clip" && !value.startsWith("__hf-")) ?? classes[0];
|
|
263
|
+
return preferred ? `.${escapeCssIdentifier(preferred)}` : void 0;
|
|
264
|
+
}
|
|
265
|
+
function buildElementLabel(el) {
|
|
266
|
+
const compositionId = el.getAttribute("data-hf-original-composition-id") ?? el.getAttribute("data-composition-id");
|
|
267
|
+
if (compositionId && compositionId !== "main") {
|
|
268
|
+
return humanizeIdentifier(compositionId);
|
|
269
|
+
}
|
|
270
|
+
const compositionSrc = el.getAttribute("data-composition-src") ?? el.getAttribute("data-composition-file");
|
|
271
|
+
if (compositionSrc) {
|
|
272
|
+
return humanizeIdentifier(compositionSrc);
|
|
273
|
+
}
|
|
274
|
+
const group = el.getAttribute("data-hf-group");
|
|
275
|
+
if (group) return group;
|
|
276
|
+
if (el.id) return humanizeIdentifier(el.id);
|
|
277
|
+
const preferredClass = getPreferredClassSelector(el);
|
|
278
|
+
if (preferredClass) {
|
|
279
|
+
return humanizeIdentifier(preferredClass.replace(/^\./, ""));
|
|
280
|
+
}
|
|
281
|
+
const text = (el.textContent ?? "").trim().replace(/\s+/g, " ");
|
|
282
|
+
if (text) return text.length > 40 ? `${text.slice(0, 39)}\u2026` : text;
|
|
283
|
+
return el.tagName.toLowerCase();
|
|
284
|
+
}
|
|
285
|
+
function getSelectorIndex(doc, el, selector, sourceFile, activeCompositionPath) {
|
|
286
|
+
if (!selector?.startsWith(".")) return void 0;
|
|
287
|
+
return getSourceScopedSelectorIndex(
|
|
288
|
+
doc,
|
|
289
|
+
el,
|
|
290
|
+
selector,
|
|
291
|
+
sourceFile,
|
|
292
|
+
(candidate) => isHtmlElement(candidate) ? getSourceFileForElement(candidate, activeCompositionPath).sourceFile : void 0
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// src/player/lib/timelineText.ts
|
|
297
|
+
import { isHtmlElement as isHtmlElement2 } from "@hyperframes/core/runtime/dom-realm";
|
|
298
|
+
|
|
299
|
+
// src/utils/rounding.ts
|
|
300
|
+
function roundTo3(val) {
|
|
301
|
+
return Math.round(val * 1e3) / 1e3;
|
|
302
|
+
}
|
|
303
|
+
function roundToLayoutPx(val) {
|
|
304
|
+
return Math.round(val);
|
|
305
|
+
}
|
|
306
|
+
function roundToCenti(val) {
|
|
307
|
+
return Math.round(val * 100) / 100;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// src/components/editor/colorValue.ts
|
|
311
|
+
function clampChannel(value) {
|
|
312
|
+
return Math.max(0, Math.min(255, Math.round(value)));
|
|
313
|
+
}
|
|
314
|
+
function clampAlpha(value) {
|
|
315
|
+
return Math.max(0, Math.min(1, value));
|
|
316
|
+
}
|
|
317
|
+
function toHex(value) {
|
|
318
|
+
return clampChannel(value).toString(16).padStart(2, "0");
|
|
319
|
+
}
|
|
320
|
+
function formatAlpha(value) {
|
|
321
|
+
return `${roundToCenti(clampAlpha(value))}`;
|
|
322
|
+
}
|
|
323
|
+
function parseComponent(value, scale) {
|
|
324
|
+
return value.endsWith("%") ? Number(value.slice(0, -1)) * scale / 100 : Number(value);
|
|
325
|
+
}
|
|
326
|
+
var NUMBER = String.raw`(?:\d+(?:\.\d+)?|\.\d+)`;
|
|
327
|
+
var COMMA_RGB = new RegExp(
|
|
328
|
+
String.raw`^rgba?\(\s*(${NUMBER})\s*,\s*(${NUMBER})\s*,\s*(${NUMBER})(?:\s*,\s*(${NUMBER}))?\s*\)$`
|
|
329
|
+
);
|
|
330
|
+
var SPACE_RGB = new RegExp(
|
|
331
|
+
String.raw`^rgba?\(\s*(${NUMBER}%?)\s+(${NUMBER}%?)\s+(${NUMBER}%?)(?:\s*\/\s*(${NUMBER}%?))?\s*\)$`
|
|
332
|
+
);
|
|
333
|
+
function parseSerializedColor(value) {
|
|
334
|
+
const trimmed = value.trim().toLowerCase();
|
|
335
|
+
if (!trimmed) return null;
|
|
336
|
+
if (trimmed === "transparent") {
|
|
337
|
+
return { red: 0, green: 0, blue: 0, alpha: 0 };
|
|
338
|
+
}
|
|
339
|
+
const hex = trimmed.match(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/);
|
|
340
|
+
if (hex) {
|
|
341
|
+
const digits = hex[1].length <= 4 ? [...hex[1]].map((digit) => digit + digit).join("") : hex[1];
|
|
342
|
+
return {
|
|
343
|
+
red: Number.parseInt(digits.slice(0, 2), 16),
|
|
344
|
+
green: Number.parseInt(digits.slice(2, 4), 16),
|
|
345
|
+
blue: Number.parseInt(digits.slice(4, 6), 16),
|
|
346
|
+
alpha: digits.length === 8 ? Number.parseInt(digits.slice(6, 8), 16) / 255 : 1
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
const rgba = trimmed.match(COMMA_RGB) ?? trimmed.match(SPACE_RGB);
|
|
350
|
+
if (rgba) {
|
|
351
|
+
return {
|
|
352
|
+
red: clampChannel(parseComponent(rgba[1], 255)),
|
|
353
|
+
green: clampChannel(parseComponent(rgba[2], 255)),
|
|
354
|
+
blue: clampChannel(parseComponent(rgba[3], 255)),
|
|
355
|
+
alpha: clampAlpha(rgba[4] != null ? parseComponent(rgba[4], 1) : 1)
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
var colorContext = null;
|
|
361
|
+
function canResolveInBrowser(value) {
|
|
362
|
+
return typeof document !== "undefined" && typeof CSS !== "undefined" && CSS.supports("color", value) && !/\bcurrentcolor\b|\bvar\s*\(|\blight-dark\s*\(/i.test(value);
|
|
363
|
+
}
|
|
364
|
+
function parseBrowserColor(value) {
|
|
365
|
+
try {
|
|
366
|
+
if (!canResolveInBrowser(value)) return null;
|
|
367
|
+
colorContext ??= document.createElement("canvas").getContext("2d");
|
|
368
|
+
if (!colorContext) return null;
|
|
369
|
+
return parseCanvasColor(
|
|
370
|
+
colorContext,
|
|
371
|
+
`color(from ${value} srgb r g b / alpha)`,
|
|
372
|
+
parseSrgbSerialization
|
|
373
|
+
) ?? parseCanvasColor(colorContext, value, parseSerializedColor);
|
|
374
|
+
} catch {
|
|
375
|
+
return null;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
function parseCanvasColor(context, value, parse) {
|
|
379
|
+
const serialized = readCanvasColor(context, value);
|
|
380
|
+
return serialized === null ? null : parse(serialized);
|
|
381
|
+
}
|
|
382
|
+
function readCanvasColor(context, value) {
|
|
383
|
+
context.fillStyle = "transparent";
|
|
384
|
+
context.fillStyle = value;
|
|
385
|
+
const first = context.fillStyle;
|
|
386
|
+
context.fillStyle = "white";
|
|
387
|
+
context.fillStyle = value;
|
|
388
|
+
return typeof first === "string" && first === context.fillStyle ? first : null;
|
|
389
|
+
}
|
|
390
|
+
function parseSrgbSerialization(serialized) {
|
|
391
|
+
const match = serialized.match(/^color\(srgb ([^ ]+) ([^ ]+) ([^ /)]+)(?: \/ ([^)]+))?\)$/);
|
|
392
|
+
if (!match) return null;
|
|
393
|
+
const channels = match.slice(1, 4).map(Number);
|
|
394
|
+
const alpha = match[4] === void 0 ? 1 : Number(match[4]);
|
|
395
|
+
if (!channels.every(Number.isFinite) || !Number.isFinite(alpha)) return null;
|
|
396
|
+
return {
|
|
397
|
+
red: clampChannel(channels[0] * 255),
|
|
398
|
+
green: clampChannel(channels[1] * 255),
|
|
399
|
+
blue: clampChannel(channels[2] * 255),
|
|
400
|
+
alpha: clampAlpha(alpha)
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
function parseCssColor(value) {
|
|
404
|
+
return parseSerializedColor(value) ?? parseBrowserColor(value.trim());
|
|
405
|
+
}
|
|
406
|
+
function resolvePickerColor(value, element, fallback) {
|
|
407
|
+
const view = element?.ownerDocument.defaultView;
|
|
408
|
+
const parsed = (value ? parseCssColor(value) : null) ?? (element && view ? parseCssColor(view.getComputedStyle(element).color) : null);
|
|
409
|
+
return parsed ? toHexColor(parsed) : fallback;
|
|
410
|
+
}
|
|
411
|
+
function toHexColor(color) {
|
|
412
|
+
return `#${toHex(color.red)}${toHex(color.green)}${toHex(color.blue)}`;
|
|
413
|
+
}
|
|
414
|
+
function formatCssColor(color) {
|
|
415
|
+
const red = clampChannel(color.red);
|
|
416
|
+
const green = clampChannel(color.green);
|
|
417
|
+
const blue = clampChannel(color.blue);
|
|
418
|
+
const alpha = clampAlpha(color.alpha);
|
|
419
|
+
if (alpha >= 1) {
|
|
420
|
+
return `rgb(${red}, ${green}, ${blue})`;
|
|
421
|
+
}
|
|
422
|
+
return `rgba(${red}, ${green}, ${blue}, ${formatAlpha(alpha)})`;
|
|
423
|
+
}
|
|
424
|
+
function rgbToHsv(color) {
|
|
425
|
+
const red = clampChannel(color.red) / 255;
|
|
426
|
+
const green = clampChannel(color.green) / 255;
|
|
427
|
+
const blue = clampChannel(color.blue) / 255;
|
|
428
|
+
const max = Math.max(red, green, blue);
|
|
429
|
+
const min = Math.min(red, green, blue);
|
|
430
|
+
const delta = max - min;
|
|
431
|
+
let hue = 0;
|
|
432
|
+
if (delta !== 0) {
|
|
433
|
+
if (max === red) {
|
|
434
|
+
hue = 60 * ((green - blue) / delta % 6);
|
|
435
|
+
} else if (max === green) {
|
|
436
|
+
hue = 60 * ((blue - red) / delta + 2);
|
|
437
|
+
} else {
|
|
438
|
+
hue = 60 * ((red - green) / delta + 4);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
if (hue < 0) hue += 360;
|
|
442
|
+
return {
|
|
443
|
+
hue,
|
|
444
|
+
saturation: max === 0 ? 0 : delta / max,
|
|
445
|
+
value: max
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
function hsvToRgb(color) {
|
|
449
|
+
const hue = (color.hue % 360 + 360) % 360 / 60;
|
|
450
|
+
const saturation = Math.max(0, Math.min(1, color.saturation));
|
|
451
|
+
const value = Math.max(0, Math.min(1, color.value));
|
|
452
|
+
const chroma = value * saturation;
|
|
453
|
+
const x = chroma * (1 - Math.abs(hue % 2 - 1));
|
|
454
|
+
const m = value - chroma;
|
|
455
|
+
let red = 0;
|
|
456
|
+
let green = 0;
|
|
457
|
+
let blue = 0;
|
|
458
|
+
if (hue >= 0 && hue < 1) {
|
|
459
|
+
red = chroma;
|
|
460
|
+
green = x;
|
|
461
|
+
} else if (hue >= 1 && hue < 2) {
|
|
462
|
+
red = x;
|
|
463
|
+
green = chroma;
|
|
464
|
+
} else if (hue >= 2 && hue < 3) {
|
|
465
|
+
green = chroma;
|
|
466
|
+
blue = x;
|
|
467
|
+
} else if (hue >= 3 && hue < 4) {
|
|
468
|
+
green = x;
|
|
469
|
+
blue = chroma;
|
|
470
|
+
} else if (hue >= 4 && hue < 5) {
|
|
471
|
+
red = x;
|
|
472
|
+
blue = chroma;
|
|
473
|
+
} else {
|
|
474
|
+
red = chroma;
|
|
475
|
+
blue = x;
|
|
476
|
+
}
|
|
477
|
+
return {
|
|
478
|
+
red: clampChannel((red + m) * 255),
|
|
479
|
+
green: clampChannel((green + m) * 255),
|
|
480
|
+
blue: clampChannel((blue + m) * 255)
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// src/player/lib/timelineText.ts
|
|
485
|
+
function readTimelineText(el) {
|
|
486
|
+
if (!isHtmlElement2(el) || !isTextBearingTag(el.localName)) return void 0;
|
|
487
|
+
const children = Array.from(el.children);
|
|
488
|
+
if (!children.every((child) => isHtmlElement2(child) && isEditableTextLeaf(child)))
|
|
489
|
+
return void 0;
|
|
490
|
+
const value = el.textContent?.replace(/\s+/g, " ").trim();
|
|
491
|
+
if (!value) return void 0;
|
|
492
|
+
const style = getCuratedComputedStyles(el);
|
|
493
|
+
if ((style["background-image"] ?? "none") !== "none") return void 0;
|
|
494
|
+
const background = style["background-color"];
|
|
495
|
+
return {
|
|
496
|
+
value,
|
|
497
|
+
fontFamily: style["font-family"],
|
|
498
|
+
fontWeight: style["font-weight"],
|
|
499
|
+
color: style.color,
|
|
500
|
+
background: background && parseCssColor(background)?.alpha === 1 ? background : void 0
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
function sameTimelineText(a, b) {
|
|
504
|
+
if (!a || !b) return a === b;
|
|
505
|
+
return a.value === b.value && a.fontFamily === b.fontFamily && a.fontWeight === b.fontWeight && a.color === b.color && a.background === b.background;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// src/player/lib/playbackAdapter.ts
|
|
509
|
+
function isFinitePositive(value) {
|
|
510
|
+
return Number.isFinite(value) && value > 0;
|
|
511
|
+
}
|
|
512
|
+
function clampTime(time, duration) {
|
|
513
|
+
const safeDuration = Math.max(0, Number.isFinite(duration) ? duration : 0);
|
|
514
|
+
const safeTime = Math.max(0, Number.isFinite(time) ? time : 0);
|
|
515
|
+
return safeDuration > 0 ? Math.min(safeTime, safeDuration) : safeTime;
|
|
516
|
+
}
|
|
517
|
+
function getAdapterDuration(adapter) {
|
|
518
|
+
if (!adapter) return 0;
|
|
519
|
+
try {
|
|
520
|
+
const duration = Number(adapter.getDuration());
|
|
521
|
+
return isFinitePositive(duration) ? duration : 0;
|
|
522
|
+
} catch {
|
|
523
|
+
return 0;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
function getDefaultStaticSeekPlaybackClock(win) {
|
|
527
|
+
return {
|
|
528
|
+
now: () => win.performance.now(),
|
|
529
|
+
requestAnimationFrame: (callback) => win.requestAnimationFrame(callback),
|
|
530
|
+
cancelAnimationFrame: (handle) => win.cancelAnimationFrame(handle)
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
function createStaticSeekPlaybackAdapter(player, duration, clock, getPlaybackRate = () => 1) {
|
|
534
|
+
const safeDuration = Math.max(0, Number.isFinite(duration) ? duration : 0);
|
|
535
|
+
let currentTime = clampTime(Number(player.getTime?.() ?? 0), safeDuration);
|
|
536
|
+
let playing = false;
|
|
537
|
+
let rafId = 0;
|
|
538
|
+
let playStartTime = currentTime;
|
|
539
|
+
let playStartNow = clock.now();
|
|
540
|
+
const renderSeek = (time) => {
|
|
541
|
+
currentTime = clampTime(time, safeDuration);
|
|
542
|
+
if (typeof player.renderSeek === "function") {
|
|
543
|
+
player.renderSeek(currentTime);
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
player.seek?.(currentTime);
|
|
547
|
+
};
|
|
548
|
+
const stopTicker = () => {
|
|
549
|
+
if (rafId) {
|
|
550
|
+
clock.cancelAnimationFrame(rafId);
|
|
551
|
+
rafId = 0;
|
|
552
|
+
}
|
|
553
|
+
};
|
|
554
|
+
const tick = (now) => {
|
|
555
|
+
if (!playing) return;
|
|
556
|
+
const playbackRate = Math.max(0.1, Number(getPlaybackRate()) || 1);
|
|
557
|
+
const elapsed = (now - playStartNow) / 1e3 * playbackRate;
|
|
558
|
+
renderSeek(playStartTime + elapsed);
|
|
559
|
+
if (currentTime >= safeDuration) {
|
|
560
|
+
playing = false;
|
|
561
|
+
rafId = 0;
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
rafId = clock.requestAnimationFrame(tick);
|
|
565
|
+
};
|
|
566
|
+
return {
|
|
567
|
+
play: () => {
|
|
568
|
+
if (playing || safeDuration <= 0) return;
|
|
569
|
+
if (currentTime >= safeDuration) renderSeek(0);
|
|
570
|
+
playing = true;
|
|
571
|
+
playStartTime = currentTime;
|
|
572
|
+
playStartNow = clock.now();
|
|
573
|
+
stopTicker();
|
|
574
|
+
rafId = clock.requestAnimationFrame(tick);
|
|
575
|
+
},
|
|
576
|
+
pause: () => {
|
|
577
|
+
playing = false;
|
|
578
|
+
stopTicker();
|
|
579
|
+
},
|
|
580
|
+
seek: (time, options) => {
|
|
581
|
+
renderSeek(time);
|
|
582
|
+
if (options?.keepPlaying) {
|
|
583
|
+
if (playing) {
|
|
584
|
+
playStartTime = currentTime;
|
|
585
|
+
playStartNow = clock.now();
|
|
586
|
+
}
|
|
587
|
+
return;
|
|
588
|
+
}
|
|
589
|
+
playing = false;
|
|
590
|
+
stopTicker();
|
|
591
|
+
},
|
|
592
|
+
getTime: () => currentTime,
|
|
593
|
+
getDuration: () => safeDuration,
|
|
594
|
+
isPlaying: () => playing
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
function releaseStaticSeekCache(cache, warned) {
|
|
598
|
+
cache.current?.adapter.pause();
|
|
599
|
+
cache.current = null;
|
|
600
|
+
warned.current = false;
|
|
601
|
+
}
|
|
602
|
+
function resolveStaticSeekFallback(opts) {
|
|
603
|
+
const { cache, warned, bestAdapter, effectiveDuration, docDuration } = opts;
|
|
604
|
+
const cached = cache.current;
|
|
605
|
+
if (cached?.player === bestAdapter && cached.duration === effectiveDuration) {
|
|
606
|
+
return cached.adapter;
|
|
607
|
+
}
|
|
608
|
+
cached?.adapter.pause();
|
|
609
|
+
if (!warned.current) {
|
|
610
|
+
warned.current = true;
|
|
611
|
+
console.warn(
|
|
612
|
+
`[useTimelinePlayer] Selected adapter duration (${getAdapterDuration(bestAdapter)}s) does not cover the document duration (${docDuration}s); falling back to seek-driven playback, which never starts media elements or WebAudio. Audio will not play in preview \u2014 extend the GSAP timeline to cover the declared data-duration.`
|
|
613
|
+
);
|
|
614
|
+
}
|
|
615
|
+
const adapter = createStaticSeekPlaybackAdapter(
|
|
616
|
+
bestAdapter,
|
|
617
|
+
effectiveDuration,
|
|
618
|
+
opts.clock,
|
|
619
|
+
opts.getPlaybackRate
|
|
620
|
+
);
|
|
621
|
+
cache.current = { player: bestAdapter, duration: effectiveDuration, adapter };
|
|
622
|
+
return adapter;
|
|
623
|
+
}
|
|
624
|
+
function wrapTimeline(tl) {
|
|
625
|
+
return {
|
|
626
|
+
play: () => tl.play(),
|
|
627
|
+
pause: () => tl.pause(),
|
|
628
|
+
seek: (t, options) => {
|
|
629
|
+
const shouldPause = !options?.keepPlaying;
|
|
630
|
+
if (shouldPause) tl.pause();
|
|
631
|
+
tl.seek(t);
|
|
632
|
+
if (shouldPause) tl.pause();
|
|
633
|
+
},
|
|
634
|
+
getTime: () => tl.time(),
|
|
635
|
+
getDuration: () => tl.duration(),
|
|
636
|
+
isPlaying: () => tl.isActive()
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// src/player/lib/timelineElementHelpers.ts
|
|
641
|
+
import { HF_AUDIO_GROUP_TAG } from "@hyperframes/core/audio-groups";
|
|
642
|
+
import { readElementFades } from "@hyperframes/core/audio-fade";
|
|
643
|
+
import { isHtmlElement as isHtmlElement3, isImageElement, isMediaElement } from "@hyperframes/core/runtime/dom-realm";
|
|
644
|
+
|
|
645
|
+
// src/player/lib/storedVolume.ts
|
|
646
|
+
function parseStoredVolume(text) {
|
|
647
|
+
const volume = Number.parseFloat(text ?? "");
|
|
648
|
+
return Number.isFinite(volume) ? volume : void 0;
|
|
649
|
+
}
|
|
650
|
+
var elementVolume = (el, media) => parseStoredVolume(el.getAttribute("data-volume") ?? media.getAttribute("data-volume"));
|
|
651
|
+
|
|
652
|
+
// src/player/lib/timelineElementHelpers.ts
|
|
653
|
+
import {
|
|
654
|
+
clampPlaybackRate,
|
|
655
|
+
readMediaOffsetSeconds
|
|
656
|
+
} from "@hyperframes/parsers/media-duration";
|
|
657
|
+
var LAYER_REVEAL_PRIOR_Z_ATTR = "data-hf-reveal-prior-z";
|
|
658
|
+
var LAYER_REVEAL_PRIOR_POSITION_ATTR = "data-hf-reveal-prior-pos";
|
|
659
|
+
function readLayerRevealPriorZ(el) {
|
|
660
|
+
const raw = el.getAttribute(LAYER_REVEAL_PRIOR_Z_ATTR);
|
|
661
|
+
if (raw == null) return null;
|
|
662
|
+
const n = Number.parseInt(raw, 10);
|
|
663
|
+
return Number.isFinite(n) ? n : null;
|
|
664
|
+
}
|
|
665
|
+
function readTimelineElementZIndex(el) {
|
|
666
|
+
const prior = readLayerRevealPriorZ(el);
|
|
667
|
+
if (prior != null) return prior;
|
|
668
|
+
const html = el;
|
|
669
|
+
const parseZ = (value) => {
|
|
670
|
+
if (value == null || value === "" || value === "auto") return null;
|
|
671
|
+
const n = Number.parseInt(value, 10);
|
|
672
|
+
return Number.isFinite(n) ? n : null;
|
|
673
|
+
};
|
|
674
|
+
const fromInline = parseZ(html.style?.zIndex);
|
|
675
|
+
if (fromInline != null) return fromInline;
|
|
676
|
+
const view = el.ownerDocument?.defaultView;
|
|
677
|
+
if (view?.getComputedStyle) {
|
|
678
|
+
const fromComputed = parseZ(view.getComputedStyle(html).zIndex);
|
|
679
|
+
if (fromComputed != null) return fromComputed;
|
|
680
|
+
}
|
|
681
|
+
return 0;
|
|
682
|
+
}
|
|
683
|
+
function readDurationAttribute(el) {
|
|
684
|
+
if (!el) return 0;
|
|
685
|
+
const duration = Number.parseFloat(el.getAttribute("data-duration") ?? "") || Number.parseFloat(el.getAttribute("data-hf-authored-duration") ?? "");
|
|
686
|
+
return isFinitePositive(duration) ? duration : 0;
|
|
687
|
+
}
|
|
688
|
+
function isTimelineIgnoredElement(el) {
|
|
689
|
+
if (el.tagName.toLowerCase() === HF_AUDIO_GROUP_TAG) return true;
|
|
690
|
+
return Boolean(
|
|
691
|
+
el.closest(
|
|
692
|
+
[
|
|
693
|
+
"[data-hyperframes-ignore]",
|
|
694
|
+
"[data-hyperframes-picker-ignore]",
|
|
695
|
+
"[data-hf-ignore]",
|
|
696
|
+
"[data-hf-color-grading-canvas]"
|
|
697
|
+
].join(",")
|
|
698
|
+
)
|
|
699
|
+
);
|
|
700
|
+
}
|
|
701
|
+
function furthestClipEndFromDocument(doc) {
|
|
702
|
+
if (!doc) return 0;
|
|
703
|
+
const root = doc.querySelector("[data-composition-id]");
|
|
704
|
+
let maxEnd = 0;
|
|
705
|
+
for (const node of Array.from(doc.querySelectorAll("[data-start]"))) {
|
|
706
|
+
if (node === root || isTimelineIgnoredElement(node)) continue;
|
|
707
|
+
const start = Number.parseFloat(node.getAttribute("data-start") ?? "");
|
|
708
|
+
const duration = readDurationAttribute(node);
|
|
709
|
+
if (!Number.isFinite(start) || start < 0 || duration <= 0) continue;
|
|
710
|
+
maxEnd = Math.max(maxEnd, start + duration);
|
|
711
|
+
}
|
|
712
|
+
return maxEnd;
|
|
713
|
+
}
|
|
714
|
+
function readTimelineDurationFromDocument(doc) {
|
|
715
|
+
if (!doc) return 0;
|
|
716
|
+
const rootDuration = readDurationAttribute(doc.querySelector("[data-composition-id]"));
|
|
717
|
+
if (rootDuration > 0) return rootDuration;
|
|
718
|
+
return furthestClipEndFromDocument(doc);
|
|
719
|
+
}
|
|
720
|
+
function furthestClipEndFromSource(source) {
|
|
721
|
+
if (!source) return 0;
|
|
722
|
+
return furthestClipEndFromDocument(new DOMParser().parseFromString(source, "text/html"));
|
|
723
|
+
}
|
|
724
|
+
function isCompositionHost(el) {
|
|
725
|
+
return el.hasAttribute("data-composition-id") || el.hasAttribute("data-composition-src") || el.hasAttribute("data-composition-file");
|
|
726
|
+
}
|
|
727
|
+
function resolveMediaElement(el) {
|
|
728
|
+
if (isMediaElement(el) || isImageElement(el)) return el;
|
|
729
|
+
if (isCompositionHost(el)) return null;
|
|
730
|
+
const candidate = el.querySelector("video, audio, img");
|
|
731
|
+
return isMediaElement(candidate) || isImageElement(candidate) ? candidate : null;
|
|
732
|
+
}
|
|
733
|
+
function readPlaybackStartAttributes(getAttr) {
|
|
734
|
+
const playbackStartAttr = getAttr("data-playback-start") != null ? "playback-start" : getAttr("data-media-start") != null ? "media-start" : void 0;
|
|
735
|
+
return playbackStartAttr ? { playbackStart: readMediaOffsetSeconds(getAttr), playbackStartAttr } : {};
|
|
736
|
+
}
|
|
737
|
+
function playbackStartAttributeForElement(element) {
|
|
738
|
+
return element.playbackStartAttr === "playback-start" || element.kind === "composition" ? "data-playback-start" : "data-media-start";
|
|
739
|
+
}
|
|
740
|
+
function applyPlaybackMetadataFromElement(entry, el) {
|
|
741
|
+
Object.assign(
|
|
742
|
+
entry,
|
|
743
|
+
readPlaybackStartAttributes((n) => el.getAttribute(n))
|
|
744
|
+
);
|
|
745
|
+
const authoredPlaybackRate = Number.parseFloat(el.getAttribute("data-playback-rate") ?? "");
|
|
746
|
+
if (Number.isFinite(authoredPlaybackRate) && authoredPlaybackRate > 0) {
|
|
747
|
+
entry.playbackRate = clampPlaybackRate(authoredPlaybackRate);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
function setOptional(entry, key, value) {
|
|
751
|
+
if (value === void 0) delete entry[key];
|
|
752
|
+
else entry[key] = value;
|
|
753
|
+
}
|
|
754
|
+
function isVideoAudible(opts) {
|
|
755
|
+
if (opts.hasAudioAttr === "true") return true;
|
|
756
|
+
if (opts.hasAudioAttr === "false" || opts.hasAudioAttr === "") return false;
|
|
757
|
+
return opts.tag.toLowerCase() === "video" && !opts.muted;
|
|
758
|
+
}
|
|
759
|
+
function isAudibleVideoNode(el) {
|
|
760
|
+
if (el.tagName.toLowerCase() !== "video" || el.hasAttribute("muted")) return false;
|
|
761
|
+
return isVideoAudible({
|
|
762
|
+
tag: "video",
|
|
763
|
+
hasAudioAttr: el.getAttribute("data-has-audio"),
|
|
764
|
+
muted: false
|
|
765
|
+
});
|
|
766
|
+
}
|
|
767
|
+
function applyAudioMetadataFromElement(entry, el) {
|
|
768
|
+
const media = resolveMediaElement(el) ?? el;
|
|
769
|
+
const muted = el.hasAttribute("muted") || media.hasAttribute("muted");
|
|
770
|
+
const sound = isVideoAudible({
|
|
771
|
+
tag: el.tagName,
|
|
772
|
+
hasAudioAttr: el.getAttribute("data-has-audio"),
|
|
773
|
+
muted
|
|
774
|
+
});
|
|
775
|
+
setOptional(entry, "hasAudio", sound ? true : void 0);
|
|
776
|
+
setOptional(entry, "muted", muted ? true : void 0);
|
|
777
|
+
setOptional(entry, "volume", elementVolume(el, media));
|
|
778
|
+
}
|
|
779
|
+
function applyFadeMetadataFromElement(entry, el) {
|
|
780
|
+
const fades = readElementFades(el);
|
|
781
|
+
setOptional(entry, "fadeIn", fades.fadeIn > 0 ? fades.fadeIn : void 0);
|
|
782
|
+
setOptional(entry, "fadeOut", fades.fadeOut > 0 ? fades.fadeOut : void 0);
|
|
783
|
+
}
|
|
784
|
+
function applyMediaMetadataFromElement(entry, el) {
|
|
785
|
+
setOptional(entry, "text", readTimelineText(el));
|
|
786
|
+
applyPlaybackMetadataFromElement(entry, el);
|
|
787
|
+
applyAudioMetadataFromElement(entry, el);
|
|
788
|
+
applyFadeMetadataFromElement(entry, el);
|
|
789
|
+
const mediaEl = resolveMediaElement(el);
|
|
790
|
+
if (!mediaEl) return;
|
|
791
|
+
entry.tag = mediaEl.tagName.toLowerCase();
|
|
792
|
+
const src = mediaEl.getAttribute("src");
|
|
793
|
+
if (src) entry.src = src;
|
|
794
|
+
if (!isMediaElement(mediaEl)) return;
|
|
795
|
+
const sourceDurationAttr = el.getAttribute("data-source-duration") ?? mediaEl.getAttribute("data-source-duration");
|
|
796
|
+
const sourceDuration = sourceDurationAttr ? parseFloat(sourceDurationAttr) : mediaEl.duration;
|
|
797
|
+
if (Number.isFinite(sourceDuration) && sourceDuration > 0) {
|
|
798
|
+
entry.sourceDuration = sourceDuration;
|
|
799
|
+
}
|
|
800
|
+
const playbackRate = mediaEl.defaultPlaybackRate;
|
|
801
|
+
if (entry.playbackRate == null && Number.isFinite(playbackRate) && playbackRate > 0) {
|
|
802
|
+
entry.playbackRate = clampPlaybackRate(playbackRate);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
function getTimelineElementDisplayLabel(input) {
|
|
806
|
+
const label = input.label?.trim();
|
|
807
|
+
if (label) return label;
|
|
808
|
+
const id = input.id?.trim();
|
|
809
|
+
if (id) return id;
|
|
810
|
+
const tag = input.tag?.trim().toLowerCase();
|
|
811
|
+
return tag ? `${tag} clip` : "Timeline clip";
|
|
812
|
+
}
|
|
813
|
+
function getTimelineElementSelector(el) {
|
|
814
|
+
if (isHtmlElement3(el) && el.id) return `#${CSS.escape(el.id)}`;
|
|
815
|
+
const compId = el.getAttribute("data-composition-id");
|
|
816
|
+
if (compId) return `[data-composition-id="${CSS.escape(compId)}"]`;
|
|
817
|
+
if (isHtmlElement3(el)) {
|
|
818
|
+
const classes = el.className.split(/\s+/).filter(Boolean);
|
|
819
|
+
const firstClass = classes.find((className) => className !== "clip") ?? classes[0];
|
|
820
|
+
if (firstClass) return `.${CSS.escape(firstClass)}`;
|
|
821
|
+
}
|
|
822
|
+
return void 0;
|
|
823
|
+
}
|
|
824
|
+
function getTimelineElementSourceFile(el) {
|
|
825
|
+
const ownerRoot = el.parentElement?.closest("[data-composition-id]");
|
|
826
|
+
return ownerRoot?.getAttribute("data-composition-file") ?? ownerRoot?.getAttribute("data-composition-src") ?? void 0;
|
|
827
|
+
}
|
|
828
|
+
function getTimelineElementSelectorIndex(doc, el, selector) {
|
|
829
|
+
return getSourceScopedSelectorIndex(
|
|
830
|
+
doc,
|
|
831
|
+
el,
|
|
832
|
+
selector,
|
|
833
|
+
getTimelineElementSourceFile(el),
|
|
834
|
+
getTimelineElementSourceFile
|
|
835
|
+
);
|
|
836
|
+
}
|
|
837
|
+
function buildTimelineElementKey(params) {
|
|
838
|
+
const scope = params.sourceFile ?? "index.html";
|
|
839
|
+
if (params.domId) return `${scope}#${params.domId}`;
|
|
840
|
+
if (params.selector) return `${scope}:${params.selector}:${params.selectorIndex ?? 0}`;
|
|
841
|
+
return `${scope}:${params.id}:${params.fallbackIndex}`;
|
|
842
|
+
}
|
|
843
|
+
function splitTimelineElementKey(key) {
|
|
844
|
+
const hashIndex = key.lastIndexOf("#");
|
|
845
|
+
if (hashIndex < 0) return { sourceFile: null, domId: key };
|
|
846
|
+
return { sourceFile: key.slice(0, hashIndex), domId: key.slice(hashIndex + 1) };
|
|
847
|
+
}
|
|
848
|
+
function buildTimelineElementIdentity(params) {
|
|
849
|
+
const id = params.preferredId?.trim() || buildTimelineElementKey({
|
|
850
|
+
id: params.label,
|
|
851
|
+
fallbackIndex: params.fallbackIndex,
|
|
852
|
+
domId: params.domId,
|
|
853
|
+
selector: params.selector,
|
|
854
|
+
selectorIndex: params.selectorIndex,
|
|
855
|
+
sourceFile: params.sourceFile
|
|
856
|
+
});
|
|
857
|
+
const key = buildTimelineElementKey({
|
|
858
|
+
id,
|
|
859
|
+
fallbackIndex: params.fallbackIndex,
|
|
860
|
+
domId: params.domId,
|
|
861
|
+
selector: params.selector,
|
|
862
|
+
selectorIndex: params.selectorIndex,
|
|
863
|
+
sourceFile: params.sourceFile
|
|
864
|
+
});
|
|
865
|
+
return { id, key };
|
|
866
|
+
}
|
|
867
|
+
function getTimelineElementIdentity(element) {
|
|
868
|
+
return element.key ?? element.id;
|
|
869
|
+
}
|
|
870
|
+
function runtimeAudioId(element) {
|
|
871
|
+
return element.domId || null;
|
|
872
|
+
}
|
|
873
|
+
function deriveTimelineStoreKey(params) {
|
|
874
|
+
if (!params.domId && !params.selector) return void 0;
|
|
875
|
+
return buildTimelineElementKey({ id: "", fallbackIndex: 0, ...params });
|
|
876
|
+
}
|
|
877
|
+
function deriveTimelineStoreKeyForDomId(domId, sourceFile) {
|
|
878
|
+
return deriveTimelineStoreKey({ domId, sourceFile });
|
|
879
|
+
}
|
|
880
|
+
function getTimelineDomNodes(doc) {
|
|
881
|
+
const rootComp = doc.querySelector("[data-composition-id]");
|
|
882
|
+
return Array.from(doc.querySelectorAll("[data-start]")).filter(
|
|
883
|
+
(node) => node !== rootComp && !isTimelineIgnoredElement(node)
|
|
884
|
+
);
|
|
885
|
+
}
|
|
886
|
+
function numbersNearlyEqual(a, b) {
|
|
887
|
+
return Math.abs(a - b) < 1e-3;
|
|
888
|
+
}
|
|
889
|
+
var MANIFEST_CLIP_ATTRS = [
|
|
890
|
+
["data-start", (clip) => clip.start],
|
|
891
|
+
["data-duration", (clip) => clip.duration],
|
|
892
|
+
["data-track-index", (clip) => clip.track]
|
|
893
|
+
];
|
|
894
|
+
function nodeMatchesClipTag(node, clip) {
|
|
895
|
+
return !clip.tagName || node.tagName.toLowerCase() === clip.tagName.toLowerCase();
|
|
896
|
+
}
|
|
897
|
+
function nodeMatchesManifestClip(node, clip) {
|
|
898
|
+
if (!nodeMatchesClipTag(node, clip)) return false;
|
|
899
|
+
return MANIFEST_CLIP_ATTRS.every(([attr, expected]) => {
|
|
900
|
+
const actual = Number.parseFloat(node.getAttribute(attr) ?? "");
|
|
901
|
+
return !Number.isFinite(actual) || numbersNearlyEqual(actual, expected(clip));
|
|
902
|
+
});
|
|
903
|
+
}
|
|
904
|
+
function nodeInClipScope(node, clip) {
|
|
905
|
+
const scope = clip.compositionAncestors;
|
|
906
|
+
if (!scope) return true;
|
|
907
|
+
const ids = [];
|
|
908
|
+
for (let cursor = node.parentElement; cursor; cursor = cursor.parentElement) {
|
|
909
|
+
const id = cursor.getAttribute("data-composition-id");
|
|
910
|
+
if (id) ids.unshift(id);
|
|
911
|
+
}
|
|
912
|
+
return ids.length === scope.length && ids.every((id, index) => id === scope[index]);
|
|
913
|
+
}
|
|
914
|
+
function findInClipScope(doc, clip, selectors) {
|
|
915
|
+
let lone = null;
|
|
916
|
+
for (const selector of selectors) {
|
|
917
|
+
const nodes = Array.from(doc.querySelectorAll(selector));
|
|
918
|
+
const scoped = nodes.find((node) => nodeInClipScope(node, clip));
|
|
919
|
+
if (scoped) return scoped;
|
|
920
|
+
if (nodes.length === 1) lone ??= nodes[0];
|
|
921
|
+
}
|
|
922
|
+
return lone;
|
|
923
|
+
}
|
|
924
|
+
function previewElementFinder(doc, selector = "[data-hf-id], [id]") {
|
|
925
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
926
|
+
const add = (key, node) => {
|
|
927
|
+
const nodes = byKey.get(key);
|
|
928
|
+
if (nodes) nodes.push(node);
|
|
929
|
+
else byKey.set(key, [node]);
|
|
930
|
+
};
|
|
931
|
+
for (const node of doc.querySelectorAll(selector)) {
|
|
932
|
+
const hfId = node.getAttribute("data-hf-id");
|
|
933
|
+
const id = node.getAttribute("id");
|
|
934
|
+
if (hfId) add(`hf:${hfId}`, node);
|
|
935
|
+
if (id) add(`id:${id}`, node);
|
|
936
|
+
}
|
|
937
|
+
return (target) => {
|
|
938
|
+
const matches = [
|
|
939
|
+
...target.hfId && byKey.get(`hf:${target.hfId}`) || [],
|
|
940
|
+
...byKey.get(`id:${target.domId ?? target.id}`) ?? []
|
|
941
|
+
];
|
|
942
|
+
return matches.find((node) => getTimelineElementSourceFile(node) === target.sourceFile) ?? matches[0] ?? null;
|
|
943
|
+
};
|
|
944
|
+
}
|
|
945
|
+
function findClipElementById(doc, clip) {
|
|
946
|
+
if (!clip.id) return null;
|
|
947
|
+
const first = doc.getElementById(clip.id);
|
|
948
|
+
if (!first || nodeInClipScope(first, clip)) return first;
|
|
949
|
+
return findInClipScope(doc, clip, [`[id="${CSS.escape(clip.id)}"]`]);
|
|
950
|
+
}
|
|
951
|
+
function findTimelineDomNode(doc, clip) {
|
|
952
|
+
if (!clip.id) return null;
|
|
953
|
+
const first = doc.getElementById(clip.id);
|
|
954
|
+
if (first && nodeInClipScope(first, clip)) return first;
|
|
955
|
+
const id = CSS.escape(clip.id);
|
|
956
|
+
const byOtherKeys = [`[data-hf-id="${id}"]`, `[data-composition-id="${id}"]`, `.${id}`];
|
|
957
|
+
return findInClipScope(doc, clip, first ? [`[id="${id}"]`, ...byOtherKeys] : byOtherKeys);
|
|
958
|
+
}
|
|
959
|
+
function findTimelineDomNodeForClip(doc, clip, fallbackIndex, usedNodes = /* @__PURE__ */ new Set(), getCandidates = () => getTimelineDomNodes(doc)) {
|
|
960
|
+
const byIdentity = findTimelineDomNode(doc, clip);
|
|
961
|
+
if (byIdentity && !usedNodes.has(byIdentity) && nodeMatchesClipTag(byIdentity, clip))
|
|
962
|
+
return byIdentity;
|
|
963
|
+
const candidates = getCandidates().filter((node) => !usedNodes.has(node));
|
|
964
|
+
const exact = candidates.find((node) => nodeMatchesManifestClip(node, clip));
|
|
965
|
+
if (exact) return exact;
|
|
966
|
+
const positional = candidates[fallbackIndex];
|
|
967
|
+
return positional && nodeMatchesClipTag(positional, clip) ? positional : null;
|
|
968
|
+
}
|
|
969
|
+
function createTimelineDomNodeResolver(doc) {
|
|
970
|
+
let candidates;
|
|
971
|
+
const usedNodes = /* @__PURE__ */ new Set();
|
|
972
|
+
const getCandidates = () => candidates ??= getTimelineDomNodes(doc);
|
|
973
|
+
return (clip, index) => {
|
|
974
|
+
const node = findTimelineDomNodeForClip(doc, clip, index, usedNodes, getCandidates);
|
|
975
|
+
if (node) usedNodes.add(node);
|
|
976
|
+
return node;
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
// src/utils/projectRouting.ts
|
|
981
|
+
var PROJECT_HASH_PREFIX = "#project/";
|
|
982
|
+
var WINDOWS_DRIVE_PREFIX = /^[a-z]:/i;
|
|
983
|
+
function isValidProjectId(value) {
|
|
984
|
+
return value.length > 0 && value !== "." && value !== ".." && !WINDOWS_DRIVE_PREFIX.test(value) && !value.includes("/") && !value.includes("\\") && !Array.from(value).some((char) => char.charCodeAt(0) < 32);
|
|
985
|
+
}
|
|
986
|
+
function decodeHashProjectId(value) {
|
|
987
|
+
try {
|
|
988
|
+
return decodeURIComponent(value);
|
|
989
|
+
} catch {
|
|
990
|
+
return value;
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
function normalizeHashParams(params) {
|
|
994
|
+
if (!params) return new URLSearchParams();
|
|
995
|
+
if (params instanceof URLSearchParams) return params;
|
|
996
|
+
const next = new URLSearchParams();
|
|
997
|
+
for (const [key, value] of Object.entries(params)) {
|
|
998
|
+
if (!key || value == null || value === "") continue;
|
|
999
|
+
next.set(key, value);
|
|
1000
|
+
}
|
|
1001
|
+
return next;
|
|
1002
|
+
}
|
|
1003
|
+
function encodeProjectId(projectId) {
|
|
1004
|
+
if (!isValidProjectId(projectId)) throw new Error("Invalid project ID");
|
|
1005
|
+
return encodeURIComponent(projectId);
|
|
1006
|
+
}
|
|
1007
|
+
function buildProjectHash(projectId, params) {
|
|
1008
|
+
const search = normalizeHashParams(params).toString();
|
|
1009
|
+
return `${PROJECT_HASH_PREFIX}${encodeProjectId(projectId)}${search ? `?${search}` : ""}`;
|
|
1010
|
+
}
|
|
1011
|
+
function parseProjectHashRoute(hash) {
|
|
1012
|
+
if (!hash.startsWith(PROJECT_HASH_PREFIX)) return null;
|
|
1013
|
+
const route = hash.slice(PROJECT_HASH_PREFIX.length);
|
|
1014
|
+
const queryIndex = route.indexOf("?");
|
|
1015
|
+
const encodedProjectId = queryIndex >= 0 ? route.slice(0, queryIndex) : route;
|
|
1016
|
+
if (!encodedProjectId || encodedProjectId.includes("/")) return null;
|
|
1017
|
+
const projectId = decodeHashProjectId(encodedProjectId);
|
|
1018
|
+
if (!isValidProjectId(projectId)) return null;
|
|
1019
|
+
const rawParams = queryIndex >= 0 ? route.slice(queryIndex + 1) : "";
|
|
1020
|
+
return {
|
|
1021
|
+
projectId,
|
|
1022
|
+
params: new URLSearchParams(rawParams)
|
|
1023
|
+
};
|
|
1024
|
+
}
|
|
1025
|
+
function parseProjectIdFromHash(hash) {
|
|
1026
|
+
return parseProjectHashRoute(hash)?.projectId ?? null;
|
|
1027
|
+
}
|
|
1028
|
+
function buildProjectApiPath(projectId, suffix = "") {
|
|
1029
|
+
const normalizedSuffix = suffix && !suffix.startsWith("/") ? `/${suffix}` : suffix;
|
|
1030
|
+
return `/api/projects/${encodeProjectId(projectId)}${normalizedSuffix}`;
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
export {
|
|
1034
|
+
buildProjectHash,
|
|
1035
|
+
parseProjectHashRoute,
|
|
1036
|
+
parseProjectIdFromHash,
|
|
1037
|
+
buildProjectApiPath,
|
|
1038
|
+
roundTo3,
|
|
1039
|
+
roundToLayoutPx,
|
|
1040
|
+
roundToCenti,
|
|
1041
|
+
parseCssColor,
|
|
1042
|
+
resolvePickerColor,
|
|
1043
|
+
toHexColor,
|
|
1044
|
+
formatCssColor,
|
|
1045
|
+
rgbToHsv,
|
|
1046
|
+
hsvToRgb,
|
|
1047
|
+
withSelectorIndexPass,
|
|
1048
|
+
isHtmlElement,
|
|
1049
|
+
isEditableTextLeaf,
|
|
1050
|
+
isElementVisibleThroughAncestors,
|
|
1051
|
+
getCuratedComputedStyles,
|
|
1052
|
+
getInlineStyles,
|
|
1053
|
+
getDataAttributes,
|
|
1054
|
+
findClosestByAttribute,
|
|
1055
|
+
setCompositionSourceMap,
|
|
1056
|
+
getCompositionSourceMapRevision,
|
|
1057
|
+
getSourceFileForElement,
|
|
1058
|
+
normalizeTimelineCompositionSource,
|
|
1059
|
+
escapeCssString,
|
|
1060
|
+
querySelectorAllSafely,
|
|
1061
|
+
buildStableSelector,
|
|
1062
|
+
buildElementLabel,
|
|
1063
|
+
getSelectorIndex,
|
|
1064
|
+
parsePx,
|
|
1065
|
+
readTimelineText,
|
|
1066
|
+
sameTimelineText,
|
|
1067
|
+
getAdapterDuration,
|
|
1068
|
+
getDefaultStaticSeekPlaybackClock,
|
|
1069
|
+
releaseStaticSeekCache,
|
|
1070
|
+
resolveStaticSeekFallback,
|
|
1071
|
+
wrapTimeline,
|
|
1072
|
+
parseStoredVolume,
|
|
1073
|
+
elementVolume,
|
|
1074
|
+
LAYER_REVEAL_PRIOR_Z_ATTR,
|
|
1075
|
+
LAYER_REVEAL_PRIOR_POSITION_ATTR,
|
|
1076
|
+
readLayerRevealPriorZ,
|
|
1077
|
+
readTimelineElementZIndex,
|
|
1078
|
+
isTimelineIgnoredElement,
|
|
1079
|
+
furthestClipEndFromDocument,
|
|
1080
|
+
readTimelineDurationFromDocument,
|
|
1081
|
+
furthestClipEndFromSource,
|
|
1082
|
+
resolveMediaElement,
|
|
1083
|
+
readPlaybackStartAttributes,
|
|
1084
|
+
playbackStartAttributeForElement,
|
|
1085
|
+
isVideoAudible,
|
|
1086
|
+
isAudibleVideoNode,
|
|
1087
|
+
applyMediaMetadataFromElement,
|
|
1088
|
+
getTimelineElementDisplayLabel,
|
|
1089
|
+
getTimelineElementSelector,
|
|
1090
|
+
getTimelineElementSourceFile,
|
|
1091
|
+
getTimelineElementSelectorIndex,
|
|
1092
|
+
buildTimelineElementKey,
|
|
1093
|
+
splitTimelineElementKey,
|
|
1094
|
+
buildTimelineElementIdentity,
|
|
1095
|
+
getTimelineElementIdentity,
|
|
1096
|
+
runtimeAudioId,
|
|
1097
|
+
deriveTimelineStoreKey,
|
|
1098
|
+
deriveTimelineStoreKeyForDomId,
|
|
1099
|
+
previewElementFinder,
|
|
1100
|
+
findClipElementById,
|
|
1101
|
+
createTimelineDomNodeResolver
|
|
1102
|
+
};
|
|
1103
|
+
//# sourceMappingURL=chunk-TDWGXBUT.js.map
|