allyhub 0.3.0 → 0.4.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/dist/commands/add.js +2 -2
- package/dist/commands/auth.js +4 -4
- package/dist/commands/cloud-tools.js +9 -10
- package/dist/commands/dev.js +1 -1
- package/dist/commands/doctor.js +4 -4
- package/dist/commands/frames/piece.js +1 -1
- package/dist/commands/frames.js +6 -6
- package/dist/commands/index.js +1 -1
- package/dist/commands/inspect/contrast.js +1 -1
- package/dist/commands/inspect/layout.js +1 -1
- package/dist/commands/orgs.js +2 -2
- package/dist/commands/render.js +2 -2
- package/dist/commands/sheet.js +2 -2
- package/dist/commands/slides.js +3 -0
- package/dist/main.js +3 -3
- package/dist/text/facts-text.js +5 -5
- package/dist/text/format.js +2 -2
- package/dist/works.js +1 -1
- package/editor-web/assets/browser-B31cR_c2.js +105 -0
- package/editor-web/assets/dist-6TNEuNMX.js +4 -0
- package/editor-web/assets/dist-Cm2TIjW5.js +2 -0
- package/editor-web/assets/dist-Cpt0p8bX.js +6 -0
- package/editor-web/assets/dist-D2GccKEJ.js +1 -0
- package/editor-web/assets/dist-Z0zvYXmu.js +233 -0
- package/editor-web/assets/dist-fs4ONrUV.js +32 -0
- package/editor-web/assets/index-CAcsAZ9u.js +70 -0
- package/editor-web/assets/index-DlcJckhO.css +2 -0
- package/editor-web/assets/list-D2v7U8K8.js +1 -0
- package/editor-web/assets/react-D0RmGe2w.js +101 -0
- package/editor-web/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/editor-web/assets/text-align-start-B3k2cx5f.js +1 -0
- package/editor-web/assets/undo-2-Ecr7-Obc.js +1 -0
- package/editor-web/index.html +4 -4
- package/node_modules/@allyhub-next/audio/package.json +1 -1
- package/node_modules/@allyhub-next/browser/package.json +1 -1
- package/node_modules/@allyhub-next/build/dist/data.js +1 -1
- package/node_modules/@allyhub-next/build/dist/meta-worker.d.ts +10 -0
- package/node_modules/@allyhub-next/build/dist/meta-worker.js +2 -2
- package/node_modules/@allyhub-next/build/dist/model-info.js +2 -1
- package/node_modules/@allyhub-next/build/dist/plugin.d.ts +2 -0
- package/node_modules/@allyhub-next/build/dist/plugin.js +9 -8
- package/node_modules/@allyhub-next/build/dist/prepare.d.ts +13 -1
- package/node_modules/@allyhub-next/build/dist/prepare.js +2 -2
- package/node_modules/@allyhub-next/build/dist/scan.d.ts +1 -1
- package/node_modules/@allyhub-next/build/dist/scan.js +1 -1
- package/node_modules/@allyhub-next/build/dist/types.js +3 -3
- package/node_modules/@allyhub-next/build/package.json +1 -1
- package/node_modules/@allyhub-next/check/dist/check.js +3 -3
- package/node_modules/@allyhub-next/check/dist/generated.d.ts +1 -1
- package/node_modules/@allyhub-next/check/package.json +1 -1
- package/node_modules/@allyhub-next/cloud/dist/index.js +1 -1
- package/node_modules/@allyhub-next/cloud/dist/signin.js +2 -2
- package/node_modules/@allyhub-next/cloud/dist/token.js +1 -1
- package/node_modules/@allyhub-next/cloud/package.json +1 -1
- package/node_modules/@allyhub-next/components/package.json +1 -1
- package/node_modules/@allyhub-next/dev-server/dist/card.d.ts +2 -11
- package/node_modules/@allyhub-next/dev-server/dist/card.js +1 -1
- package/node_modules/@allyhub-next/dev-server/dist/exports.d.ts +2 -2
- package/node_modules/@allyhub-next/dev-server/dist/exports.js +1 -1
- package/node_modules/@allyhub-next/dev-server/dist/index.d.ts +1 -1
- package/node_modules/@allyhub-next/dev-server/dist/index.js +1 -1
- package/node_modules/@allyhub-next/dev-server/dist/live.d.ts +3 -0
- package/node_modules/@allyhub-next/dev-server/dist/live.js +1 -1
- package/node_modules/@allyhub-next/dev-server/dist/project.d.ts +3 -0
- package/node_modules/@allyhub-next/dev-server/dist/project.js +1 -1
- package/node_modules/@allyhub-next/dev-server/dist/reveal.d.ts +6 -0
- package/node_modules/@allyhub-next/dev-server/dist/reveal.js +2 -0
- package/node_modules/@allyhub-next/dev-server/dist/server.js +1 -1
- package/node_modules/@allyhub-next/dev-server/dist/stage.d.ts +2 -0
- package/node_modules/@allyhub-next/dev-server/dist/stage.js +22 -2
- package/node_modules/@allyhub-next/dev-server/dist/tools.d.ts +2 -0
- package/node_modules/@allyhub-next/dev-server/dist/tools.js +1 -1
- package/node_modules/@allyhub-next/dev-server/package.json +1 -1
- package/node_modules/@allyhub-next/doc/dist/docx.d.ts +28 -0
- package/node_modules/@allyhub-next/doc/dist/docx.js +4 -0
- package/node_modules/@allyhub-next/doc/dist/html.d.ts +3 -0
- package/node_modules/@allyhub-next/doc/dist/html.js +1 -1
- package/node_modules/@allyhub-next/doc/package.json +5 -1
- package/node_modules/@allyhub-next/export/dist/deck-fonts.d.ts +24 -0
- package/node_modules/@allyhub-next/export/dist/deck-fonts.js +2 -0
- package/node_modules/@allyhub-next/export/dist/deck-pptx.d.ts +12 -0
- package/node_modules/@allyhub-next/export/dist/deck-pptx.js +2 -0
- package/node_modules/@allyhub-next/export/dist/export.d.ts +12 -3
- package/node_modules/@allyhub-next/export/dist/export.js +2 -2
- package/node_modules/@allyhub-next/export/dist/index.d.ts +1 -0
- package/node_modules/@allyhub-next/export/dist/index.js +1 -1
- package/node_modules/@allyhub-next/export/dist/names.d.ts +11 -6
- package/node_modules/@allyhub-next/export/dist/names.js +1 -1
- package/node_modules/@allyhub-next/export/package.json +1 -1
- package/node_modules/@allyhub-next/formats/dist/data/script.d.ts +22 -0
- package/node_modules/@allyhub-next/formats/dist/data/script.js +1 -1
- package/node_modules/@allyhub-next/formats/dist/data/slides.d.ts +1494 -0
- package/node_modules/@allyhub-next/formats/dist/data/slides.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/index.d.ts +2 -0
- package/node_modules/@allyhub-next/formats/dist/index.js +1 -1
- package/node_modules/@allyhub-next/formats/dist/items.d.ts +21 -0
- package/node_modules/@allyhub-next/formats/dist/items.js +1 -1
- package/node_modules/@allyhub-next/formats/dist/note-shape.d.ts +39 -0
- package/node_modules/@allyhub-next/formats/dist/note-shape.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/schemas.d.ts +418 -0
- package/node_modules/@allyhub-next/formats/dist/schemas.js +1 -1
- package/node_modules/@allyhub-next/formats/package.json +1 -1
- package/node_modules/@allyhub-next/measure/dist/index.d.ts +1 -1
- package/node_modules/@allyhub-next/measure/dist/index.js +1 -1
- package/node_modules/@allyhub-next/measure/dist/overlay.d.ts +14 -1
- package/node_modules/@allyhub-next/measure/dist/overlay.js +1 -1
- package/node_modules/@allyhub-next/measure/package.json +1 -1
- package/node_modules/@allyhub-next/media/dist/asr/parakeet.d.ts +1 -4
- package/node_modules/@allyhub-next/media/dist/asr/parakeet.js +4 -4
- package/node_modules/@allyhub-next/media/dist/asr/transcribe.d.ts +1 -1
- package/node_modules/@allyhub-next/media/dist/asr/transcribe.js +1 -1
- package/node_modules/@allyhub-next/media/dist/grid.d.ts +3 -3
- package/node_modules/@allyhub-next/media/dist/grid.js +5 -5
- package/node_modules/@allyhub-next/media/dist/local.d.ts +3 -0
- package/node_modules/@allyhub-next/media/dist/local.js +1 -1
- package/node_modules/@allyhub-next/media/dist/ocr/tesseract.d.ts +8 -2
- package/node_modules/@allyhub-next/media/dist/ocr/tesseract.js +1 -1
- package/node_modules/@allyhub-next/media/dist/ocr/text.js +3 -3
- package/node_modules/@allyhub-next/media/dist/ocr/worker.js +1 -1
- package/node_modules/@allyhub-next/media/dist/sheet.js +3 -3
- package/node_modules/@allyhub-next/media/dist/tools.d.ts +11 -1
- package/node_modules/@allyhub-next/media/dist/tools.js +1 -1
- package/node_modules/@allyhub-next/media/dist/vision/faces.js +1 -1
- package/node_modules/@allyhub-next/media/dist/vision/matte.js +1 -1
- package/node_modules/@allyhub-next/media/dist/vision/runtime.d.ts +1 -1
- package/node_modules/@allyhub-next/media/dist/vision/runtime.js +2 -2
- package/node_modules/@allyhub-next/media/dist/worker-process.d.ts +1 -1
- package/node_modules/@allyhub-next/media/dist/worker-process.js +1 -1
- package/node_modules/@allyhub-next/media/package.json +1 -1
- package/node_modules/@allyhub-next/model/dist/build-job.d.ts +2 -0
- package/node_modules/@allyhub-next/model/dist/build-worker.js +1 -1
- package/node_modules/@allyhub-next/model/dist/build.d.ts +10 -0
- package/node_modules/@allyhub-next/model/dist/build.js +2 -1
- package/node_modules/@allyhub-next/model/package.json +1 -1
- package/node_modules/@allyhub-next/project/dist/digest.d.ts +1 -3
- package/node_modules/@allyhub-next/project/dist/digest.js +1 -1
- package/node_modules/@allyhub-next/project/dist/page.d.ts +0 -5
- package/node_modules/@allyhub-next/project/dist/page.js +2 -2
- package/node_modules/@allyhub-next/project/dist/session.js +1 -1
- package/node_modules/@allyhub-next/project/package.json +1 -1
- package/node_modules/@allyhub-next/protocol/dist/app.d.ts +0 -64
- package/node_modules/@allyhub-next/protocol/dist/app.js +1 -1
- package/node_modules/@allyhub-next/protocol/dist/auth.d.ts +0 -17
- package/node_modules/@allyhub-next/protocol/dist/auth.js +1 -1
- package/node_modules/@allyhub-next/protocol/dist/cli.d.ts +0 -4
- package/node_modules/@allyhub-next/protocol/dist/cli.js +1 -1
- package/node_modules/@allyhub-next/protocol/dist/editor.d.ts +9 -26
- package/node_modules/@allyhub-next/protocol/dist/editor.js +1 -1
- package/node_modules/@allyhub-next/protocol/dist/index.d.ts +1 -0
- package/node_modules/@allyhub-next/protocol/dist/index.js +1 -1
- package/node_modules/@allyhub-next/protocol/dist/notes.d.ts +163 -0
- package/node_modules/@allyhub-next/protocol/dist/notes.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/registry.d.ts +1 -1
- package/node_modules/@allyhub-next/protocol/dist/runtimes.d.ts +3 -0
- package/node_modules/@allyhub-next/protocol/dist/runtimes.js +1 -1
- package/node_modules/@allyhub-next/protocol/dist/tools.d.ts +37 -0
- package/node_modules/@allyhub-next/protocol/dist/tools.js +1 -1
- package/node_modules/@allyhub-next/protocol/package.json +1 -1
- package/node_modules/@allyhub-next/registry/dist/registry.js +1 -1
- package/node_modules/@allyhub-next/registry/package.json +1 -1
- package/node_modules/@allyhub-next/render/dist/doc/index.d.ts +1 -1
- package/node_modules/@allyhub-next/render/dist/doc/index.js +1 -1
- package/node_modules/@allyhub-next/render/dist/doc/print.d.ts +11 -0
- package/node_modules/@allyhub-next/render/dist/doc/print.js +17 -1
- package/node_modules/@allyhub-next/render/dist/exports.d.ts +29 -4
- package/node_modules/@allyhub-next/render/dist/exports.js +2 -2
- package/node_modules/@allyhub-next/render/dist/page.d.ts +11 -1
- package/node_modules/@allyhub-next/render/dist/render.d.ts +2 -0
- package/node_modules/@allyhub-next/render/dist/render.js +2 -2
- package/node_modules/@allyhub-next/render/package.json +1 -1
- package/node_modules/@allyhub-next/runtime/LICENSE +241 -0
- package/node_modules/@allyhub-next/runtime/dist/bridge.d.ts +13 -3
- package/node_modules/@allyhub-next/runtime/dist/clock.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/env.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/facade.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/footage.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/frame.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/index.d.ts +2 -0
- package/node_modules/@allyhub-next/runtime/dist/index.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/locate.d.ts +11 -0
- package/node_modules/@allyhub-next/runtime/dist/locate.js +2 -0
- package/node_modules/@allyhub-next/runtime/dist/measure.d.ts +2 -1
- package/node_modules/@allyhub-next/runtime/dist/measure.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/music.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/output.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/piece.d.ts +5 -9
- package/node_modules/@allyhub-next/runtime/dist/piece.js +2 -2
- package/node_modules/@allyhub-next/runtime/dist/player/player.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/reads.d.ts +2 -0
- package/node_modules/@allyhub-next/runtime/dist/reads.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/sound.js +1 -1
- package/node_modules/@allyhub-next/runtime/dist/stage-kit.d.ts +12 -0
- package/node_modules/@allyhub-next/runtime/dist/stage-kit.js +2 -0
- package/node_modules/@allyhub-next/runtime/package.json +5 -6
- package/node_modules/@allyhub-next/runtimes/dist/errors.d.ts +5 -1
- package/node_modules/@allyhub-next/runtimes/dist/index.d.ts +1 -0
- package/node_modules/@allyhub-next/runtimes/dist/index.js +1 -1
- package/node_modules/@allyhub-next/runtimes/dist/node-program.d.ts +3 -0
- package/node_modules/@allyhub-next/runtimes/dist/node-program.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/packages.d.ts +65 -0
- package/node_modules/@allyhub-next/runtimes/dist/packages.js +4 -0
- package/node_modules/@allyhub-next/runtimes/dist/runtimes.js +2 -2
- package/node_modules/@allyhub-next/runtimes/dist/unpack.d.ts +7 -0
- package/node_modules/@allyhub-next/runtimes/dist/unpack.js +1 -1
- package/node_modules/@allyhub-next/runtimes/package.json +5 -1
- package/node_modules/@allyhub-next/runtimes/pins/docx/package-lock.json +67 -0
- package/node_modules/@allyhub-next/runtimes/pins/docx/package.json +9 -0
- package/node_modules/@allyhub-next/runtimes/pins/exceljs/package-lock.json +2533 -0
- package/node_modules/@allyhub-next/runtimes/pins/exceljs/package.json +8 -0
- package/node_modules/@allyhub-next/runtimes/pins/gltf-tools/package-lock.json +753 -0
- package/node_modules/@allyhub-next/runtimes/pins/gltf-tools/package.json +14 -0
- package/node_modules/@allyhub-next/runtimes/pins/manifold-3d/package-lock.json +950 -0
- package/node_modules/@allyhub-next/runtimes/pins/manifold-3d/package.json +8 -0
- package/node_modules/@allyhub-next/runtimes/pins/onnxruntime-node/package-lock.json +227 -0
- package/node_modules/@allyhub-next/runtimes/pins/onnxruntime-node/package.json +8 -0
- package/node_modules/@allyhub-next/runtimes/pins/sherpa-onnx-node/package-lock.json +105 -0
- package/node_modules/@allyhub-next/runtimes/pins/sherpa-onnx-node/package.json +8 -0
- package/node_modules/@allyhub-next/runtimes/pins/tesseract.js/package-lock.json +128 -0
- package/node_modules/@allyhub-next/runtimes/pins/tesseract.js/package.json +9 -0
- package/node_modules/@allyhub-next/runtimes/schemas/runtimes.schema.json +5 -24
- package/node_modules/@allyhub-next/scaffold/dist/index.js +3 -3
- package/node_modules/@allyhub-next/scaffold/package.json +1 -1
- package/node_modules/@allyhub-next/scenery/package.json +1 -1
- package/node_modules/@allyhub-next/scenery-host/dist/bundle.d.ts +2 -2
- package/node_modules/@allyhub-next/scenery-host/dist/bundle.js +3 -3
- package/node_modules/@allyhub-next/scenery-host/dist/viewer.d.ts +11 -0
- package/node_modules/@allyhub-next/scenery-host/dist/viewer.js +1 -1
- package/node_modules/@allyhub-next/scenery-host/package.json +1 -1
- package/node_modules/@allyhub-next/sheet/package.json +1 -1
- package/node_modules/@allyhub-next/site/dist/media.js +2 -2
- package/node_modules/@allyhub-next/site/package.json +1 -1
- package/node_modules/@allyhub-next/slides-core/LICENSE +241 -0
- package/node_modules/@allyhub-next/slides-core/dist/animation.d.ts +129 -0
- package/node_modules/@allyhub-next/slides-core/dist/animation.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/api.d.ts +649 -0
- package/node_modules/@allyhub-next/slides-core/dist/api.js +4 -0
- package/node_modules/@allyhub-next/slides-core/dist/capabilities.d.ts +18 -0
- package/node_modules/@allyhub-next/slides-core/dist/capabilities.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/chart-api.d.ts +165 -0
- package/node_modules/@allyhub-next/slides-core/dist/chart-api.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/chart-file.d.ts +11 -0
- package/node_modules/@allyhub-next/slides-core/dist/chart-file.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/chart.d.ts +184 -0
- package/node_modules/@allyhub-next/slides-core/dist/chart.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/check.d.ts +7 -0
- package/node_modules/@allyhub-next/slides-core/dist/check.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/enums.d.ts +146 -0
- package/node_modules/@allyhub-next/slides-core/dist/enums.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/file.d.ts +109 -0
- package/node_modules/@allyhub-next/slides-core/dist/file.js +4 -0
- package/node_modules/@allyhub-next/slides-core/dist/index.d.ts +21 -0
- package/node_modules/@allyhub-next/slides-core/dist/index.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/measure.d.ts +34 -0
- package/node_modules/@allyhub-next/slides-core/dist/measure.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/model.d.ts +278 -0
- package/node_modules/@allyhub-next/slides-core/dist/model.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/office.d.ts +58 -0
- package/node_modules/@allyhub-next/slides-core/dist/office.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/path.d.ts +6 -0
- package/node_modules/@allyhub-next/slides-core/dist/path.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/placeholders.d.ts +7 -0
- package/node_modules/@allyhub-next/slides-core/dist/placeholders.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/resolve.d.ts +181 -0
- package/node_modules/@allyhub-next/slides-core/dist/resolve.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/script.d.ts +43 -0
- package/node_modules/@allyhub-next/slides-core/dist/script.js +3 -0
- package/node_modules/@allyhub-next/slides-core/dist/stage.d.ts +63 -0
- package/node_modules/@allyhub-next/slides-core/dist/stage.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/strict.d.ts +23 -0
- package/node_modules/@allyhub-next/slides-core/dist/strict.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/theme.d.ts +72 -0
- package/node_modules/@allyhub-next/slides-core/dist/theme.js +2 -0
- package/node_modules/@allyhub-next/slides-core/dist/units.d.ts +35 -0
- package/node_modules/@allyhub-next/slides-core/dist/units.js +2 -0
- package/node_modules/@allyhub-next/slides-core/package.json +14 -0
- package/node_modules/@allyhub-next/slides-pptx/LICENSE +241 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/charts.d.ts +6 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/charts.js +2 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/fonts.d.ts +45 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/fonts.js +2 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/import.d.ts +18 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/import.js +3 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/index.d.ts +5 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/index.js +2 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/read.d.ts +55 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/read.js +4 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/shapes.d.ts +67 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/shapes.js +2 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/text.d.ts +21 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/text.js +2 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/theme.d.ts +4 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/theme.js +2 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/timing.d.ts +32 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/timing.js +2 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/write.d.ts +32 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/write.js +3 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/xml.d.ts +26 -0
- package/node_modules/@allyhub-next/slides-pptx/dist/xml.js +3 -0
- package/node_modules/@allyhub-next/slides-pptx/package.json +14 -0
- package/node_modules/@allyhub-next/slides-runtime/LICENSE +241 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/draw.d.ts +40 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/draw.js +3 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/edit.d.ts +4 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/edit.js +2 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/index.d.ts +4 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/index.js +2 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/ink.d.ts +10 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/ink.js +2 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/load.d.ts +6 -0
- package/node_modules/@allyhub-next/slides-runtime/dist/load.js +6 -0
- package/node_modules/@allyhub-next/slides-runtime/package.json +14 -0
- package/node_modules/@allyhub-next/stage/dist/graphics.js +1 -1
- package/node_modules/@allyhub-next/stage/dist/identity.js +1 -1
- package/node_modules/@allyhub-next/stage/dist/page.d.ts +9 -0
- package/node_modules/@allyhub-next/stage/dist/page.js +12 -2
- package/node_modules/@allyhub-next/stage/dist/server.js +1 -1
- package/node_modules/@allyhub-next/stage/package.json +1 -1
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/400-italic.css +79 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/400.css +79 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/700-italic.css +79 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/700.css +79 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/LICENSE +93 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/arial.css +316 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-ext-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-ext-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-ext-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-cyrillic-ext-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-ext-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-ext-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-ext-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-greek-ext-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-hebrew-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-hebrew-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-hebrew-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-hebrew-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-ext-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-ext-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-ext-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-latin-ext-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-vietnamese-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-vietnamese-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-vietnamese-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/arimo/files/arimo-vietnamese-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/400-italic.css +69 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/400.css +69 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/700-italic.css +69 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/700.css +69 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/LICENSE +93 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/calibri.css +276 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-ext-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-ext-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-ext-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-cyrillic-ext-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-ext-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-ext-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-ext-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-greek-ext-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-ext-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-ext-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-ext-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-latin-ext-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-vietnamese-400-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-vietnamese-400-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-vietnamese-700-italic.woff2 +0 -0
- package/node_modules/@allyhub-next/stage-page/dist/fonts/carlito/files/carlito-vietnamese-700-normal.woff2 +0 -0
- package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/400.css +1 -1
- package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/700.css +1 -1
- package/node_modules/@allyhub-next/stage-page/dist/fonts/noto-sans-sc/microsoft-yahei.css +2018 -0
- package/node_modules/@allyhub-next/stage-page/dist/host.js +21 -0
- package/node_modules/@allyhub-next/stage-page/dist/page.js +79 -0
- package/node_modules/@allyhub-next/stage-page/package.json +14 -0
- package/node_modules/@allyhub-next/video-core/dist/export.d.ts +6 -5
- package/node_modules/@allyhub-next/video-core/dist/export.js +1 -1
- package/node_modules/@allyhub-next/video-core/dist/fact.d.ts +173 -4
- package/node_modules/@allyhub-next/video-core/dist/fact.js +1 -1
- package/node_modules/@allyhub-next/video-core/dist/formats.d.ts +6 -13
- package/node_modules/@allyhub-next/video-core/dist/formats.js +1 -1
- package/node_modules/@allyhub-next/video-core/dist/index.d.ts +0 -1
- package/node_modules/@allyhub-next/video-core/dist/index.js +1 -1
- package/node_modules/@allyhub-next/video-core/dist/measure.d.ts +83 -0
- package/node_modules/@allyhub-next/video-core/dist/piece.d.ts +8 -9
- package/node_modules/@allyhub-next/video-core/dist/piece.js +1 -1
- package/node_modules/@allyhub-next/video-core/dist/problem.d.ts +5 -1
- package/node_modules/@allyhub-next/video-core/dist/problem.js +1 -1
- package/node_modules/@allyhub-next/video-core/dist/schema.d.ts +0 -2
- package/node_modules/@allyhub-next/video-core/dist/script-edit.d.ts +4 -0
- package/node_modules/@allyhub-next/video-core/dist/script.d.ts +8 -0
- package/node_modules/@allyhub-next/video-core/dist/script.js +1 -1
- package/node_modules/@allyhub-next/video-core/dist/timeline.d.ts +34 -1
- package/node_modules/@allyhub-next/video-core/package.json +1 -1
- package/package.json +48 -41
- package/dist/commands/mcp-app.js +0 -3
- package/dist/commands/mcp-docs.js +0 -2
- package/dist/commands/mcp.js +0 -2
- package/editor-app/view.html +0 -128
- package/editor-web/assets/chevron-left-W6sP7nB1.js +0 -1
- package/editor-web/assets/chevron-up-566GQpAm.js +0 -1
- package/editor-web/assets/dist-BKDr73BR.js +0 -136
- package/editor-web/assets/dist-CPCNTYVu.js +0 -8
- package/editor-web/assets/dist-C_NajYp0.js +0 -1
- package/editor-web/assets/dist-mA6NrAKh.js +0 -232
- package/editor-web/assets/floating-ui.react-dom-BUxFRF6t.js +0 -1
- package/editor-web/assets/index-CFZhjTQW.js +0 -56
- package/editor-web/assets/index-DgU-lyX6.css +0 -2
- package/editor-web/assets/react-Ff_buMj8.js +0 -61
- package/editor-web/assets/undo-2-BKFItM3X.js +0 -1
- package/node_modules/@allyhub-next/runtime/dist/host.js +0 -21
- package/node_modules/@allyhub-next/runtime/dist/page.js +0 -72
- package/node_modules/@allyhub-next/runtime/dist/paged.d.ts +0 -16
- package/node_modules/@allyhub-next/runtime/dist/paged.js +0 -2
- package/node_modules/@allyhub-next/video-core/dist/slides.d.ts +0 -37
- package/node_modules/@allyhub-next/video-core/dist/slides.js +0 -2
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-color-emoji/LICENSE +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-color-emoji/emoji.css +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-color-emoji/files/noto-color-emoji-emoji-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/LICENSE +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-100-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-100-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-101-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-101-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-102-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-102-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-103-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-103-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-104-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-104-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-105-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-105-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-106-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-106-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-107-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-107-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-108-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-108-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-109-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-109-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-110-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-110-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-111-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-111-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-112-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-112-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-113-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-113-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-114-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-114-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-115-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-115-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-116-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-116-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-117-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-117-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-118-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-118-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-119-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-119-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-21-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-21-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-22-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-22-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-23-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-23-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-24-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-24-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-25-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-25-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-26-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-26-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-27-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-27-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-28-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-28-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-29-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-29-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-30-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-30-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-31-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-31-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-32-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-32-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-33-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-33-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-34-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-34-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-35-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-35-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-36-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-36-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-37-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-37-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-38-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-38-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-39-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-39-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-4-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-4-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-40-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-40-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-41-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-41-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-42-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-42-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-43-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-43-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-44-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-44-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-45-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-45-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-46-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-46-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-47-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-47-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-48-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-48-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-49-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-49-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-5-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-5-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-50-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-50-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-51-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-51-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-52-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-52-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-53-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-53-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-54-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-54-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-55-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-55-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-56-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-56-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-57-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-57-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-58-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-58-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-59-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-59-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-6-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-6-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-60-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-60-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-61-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-61-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-62-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-62-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-63-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-63-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-64-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-64-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-65-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-65-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-66-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-66-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-67-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-67-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-68-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-68-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-69-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-69-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-70-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-70-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-71-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-71-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-72-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-72-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-73-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-73-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-74-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-74-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-75-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-75-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-76-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-76-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-77-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-77-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-78-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-78-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-79-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-79-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-80-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-80-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-81-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-81-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-82-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-82-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-83-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-83-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-84-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-84-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-85-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-85-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-86-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-86-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-87-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-87-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-88-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-88-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-89-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-89-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-90-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-90-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-91-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-91-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-97-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-97-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-98-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-98-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-99-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-99-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-cyrillic-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-cyrillic-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-latin-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-latin-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-latin-ext-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-latin-ext-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-vietnamese-400-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/fonts/noto-sans-sc/files/noto-sans-sc-vietnamese-700-normal.woff2 +0 -0
- /package/node_modules/@allyhub-next/{runtime → stage-page}/dist/host.d.ts +0 -0
|
@@ -67,11 +67,15 @@ export declare const CheckStateSchema: z.ZodObject<{
|
|
|
67
67
|
export type CheckState = z.infer<typeof CheckStateSchema>;
|
|
68
68
|
export declare const EXPORT_STATES: readonly ["queued", "running", "done", "failed", "cancelled"];
|
|
69
69
|
/** An export the person asked for, one at a time. */
|
|
70
|
+
/** The choices an export is made with (`EXPORT_OFFER`). */
|
|
71
|
+
export declare const ExportOptionsSchema: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>;
|
|
72
|
+
export type ExportOptions = z.infer<typeof ExportOptionsSchema>;
|
|
70
73
|
export declare const ExportJobSchema: z.ZodObject<{
|
|
71
74
|
id: z.ZodString;
|
|
72
75
|
item: z.ZodString;
|
|
73
76
|
versions: z.ZodArray<z.ZodString>;
|
|
74
77
|
types: z.ZodArray<z.ZodString>;
|
|
78
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
|
|
75
79
|
state: z.ZodEnum<{
|
|
76
80
|
running: "running";
|
|
77
81
|
done: "done";
|
|
@@ -132,6 +136,17 @@ export declare const PROJECT_TOOLS: {
|
|
|
132
136
|
lang: z.ZodOptional<z.ZodString>;
|
|
133
137
|
}, z.core.$strict>>;
|
|
134
138
|
}, z.core.$strict>>;
|
|
139
|
+
readonly "slides/deck": MethodSpec<z.ZodObject<{
|
|
140
|
+
item: z.ZodString;
|
|
141
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
142
|
+
piece: z.ZodString;
|
|
143
|
+
file: z.ZodString;
|
|
144
|
+
prefix: z.ZodString;
|
|
145
|
+
layouts: z.ZodArray<z.ZodString>;
|
|
146
|
+
components: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
147
|
+
generators: z.ZodArray<z.ZodString>;
|
|
148
|
+
scripts: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
149
|
+
}, z.core.$strict>>;
|
|
135
150
|
readonly "video/stage": MethodSpec<z.ZodObject<{
|
|
136
151
|
start: z.ZodOptional<z.ZodObject<{
|
|
137
152
|
t: z.ZodOptional<z.ZodNumber>;
|
|
@@ -141,6 +156,7 @@ export declare const PROJECT_TOOLS: {
|
|
|
141
156
|
}, z.core.$strict>>;
|
|
142
157
|
play: z.ZodOptional<z.ZodBoolean>;
|
|
143
158
|
chrome: z.ZodOptional<z.ZodBoolean>;
|
|
159
|
+
edit: z.ZodOptional<z.ZodBoolean>;
|
|
144
160
|
item: z.ZodString;
|
|
145
161
|
version: z.ZodOptional<z.ZodString>;
|
|
146
162
|
}, z.core.$strict>, z.ZodObject<{
|
|
@@ -174,6 +190,19 @@ export declare const PROJECT_TOOLS: {
|
|
|
174
190
|
height: z.ZodInt;
|
|
175
191
|
duration: z.ZodNumber;
|
|
176
192
|
}, z.core.$strict>>;
|
|
193
|
+
readonly "video/stills": MethodSpec<z.ZodObject<{
|
|
194
|
+
moments: z.ZodArray<z.ZodNumber>;
|
|
195
|
+
item: z.ZodString;
|
|
196
|
+
version: z.ZodOptional<z.ZodString>;
|
|
197
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
198
|
+
stills: z.ZodArray<z.ZodObject<{
|
|
199
|
+
t: z.ZodNumber;
|
|
200
|
+
image: z.ZodObject<{
|
|
201
|
+
mime: z.ZodString;
|
|
202
|
+
data: z.ZodBase64;
|
|
203
|
+
}, z.core.$strict>;
|
|
204
|
+
}, z.core.$strict>>;
|
|
205
|
+
}, z.core.$strict>>;
|
|
177
206
|
readonly "check/results": MethodSpec<z.ZodObject<{}, z.core.$strict>, z.ZodObject<{
|
|
178
207
|
status: z.ZodEnum<{
|
|
179
208
|
off: "off";
|
|
@@ -210,12 +239,14 @@ export declare const PROJECT_TOOLS: {
|
|
|
210
239
|
item: z.ZodString;
|
|
211
240
|
versions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
212
241
|
types: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
242
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
|
|
213
243
|
}, z.core.$strict>, z.ZodObject<{
|
|
214
244
|
job: z.ZodObject<{
|
|
215
245
|
id: z.ZodString;
|
|
216
246
|
item: z.ZodString;
|
|
217
247
|
versions: z.ZodArray<z.ZodString>;
|
|
218
248
|
types: z.ZodArray<z.ZodString>;
|
|
249
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
|
|
219
250
|
state: z.ZodEnum<{
|
|
220
251
|
running: "running";
|
|
221
252
|
done: "done";
|
|
@@ -237,6 +268,7 @@ export declare const PROJECT_TOOLS: {
|
|
|
237
268
|
item: z.ZodString;
|
|
238
269
|
versions: z.ZodArray<z.ZodString>;
|
|
239
270
|
types: z.ZodArray<z.ZodString>;
|
|
271
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
|
|
240
272
|
state: z.ZodEnum<{
|
|
241
273
|
running: "running";
|
|
242
274
|
done: "done";
|
|
@@ -248,7 +280,11 @@ export declare const PROJECT_TOOLS: {
|
|
|
248
280
|
files: z.ZodArray<z.ZodString>;
|
|
249
281
|
error: z.ZodOptional<z.ZodString>;
|
|
250
282
|
}, z.core.$strict>>;
|
|
283
|
+
reveal: z.ZodBoolean;
|
|
251
284
|
}, z.core.$strict>>;
|
|
285
|
+
readonly "export/reveal": MethodSpec<z.ZodObject<{
|
|
286
|
+
path: z.ZodString;
|
|
287
|
+
}, z.core.$strict>, z.ZodObject<{}, z.core.$strict>>;
|
|
252
288
|
readonly "scenery/viewer": MethodSpec<z.ZodObject<{
|
|
253
289
|
item: z.ZodString;
|
|
254
290
|
camera: z.ZodOptional<z.ZodObject<{
|
|
@@ -318,6 +354,7 @@ export declare const TOOL_NOTIFICATIONS: {
|
|
|
318
354
|
item: z.ZodString;
|
|
319
355
|
versions: z.ZodArray<z.ZodString>;
|
|
320
356
|
types: z.ZodArray<z.ZodString>;
|
|
357
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodBoolean]>>>;
|
|
321
358
|
state: z.ZodEnum<{
|
|
322
359
|
running: "running";
|
|
323
360
|
done: "done";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
-
import{z as e}from"zod";import{KINDS as c}from"@allyhub-next/formats";import{PathSchema as
|
|
2
|
+
import{z as e}from"zod";import{KINDS as c}from"@allyhub-next/formats";import{PathSchema as r}from"./files.js";import{method as t,notification as i}from"./jsonrpc.js";const n={item:r,version:e.string().optional()};export const ImageSchema=e.strictObject({mime:e.string().regex(/^image\//u),data:e.base64()}),ProblemSchema=e.looseObject({code:e.string(),level:e.enum(["error","warn"]),message:e.string(),piece:e.string().optional(),part:e.string().optional(),t:e.number().optional()}),FactSchema=e.looseObject({kind:e.string(),data:e.unknown()}),TimelineSchema=e.looseObject({fps:e.number(),width:e.number(),height:e.number(),duration:e.number(),parts:e.array(e.unknown())}),CHECK_STATES=["off","waiting","running","done","failed"],CheckStateSchema=e.strictObject({status:e.enum(CHECK_STATES),revision:e.int().nonnegative(),problems:e.array(ProblemSchema),facts:e.array(FactSchema),versions:e.strictObject({total:e.int(),loaded:e.int(),reused:e.int()}).optional(),error:e.string().optional()}),EXPORT_STATES=["queued","running","done","failed","cancelled"],ExportOptionsSchema=e.record(e.string(),e.union([e.string(),e.boolean()])),ExportJobSchema=e.strictObject({id:e.string(),item:r,versions:e.array(e.string()),types:e.array(e.string()),options:ExportOptionsSchema.optional(),state:e.enum(EXPORT_STATES),progress:e.number().min(0).max(1),files:e.array(r),error:e.string().optional()}),IndexJobSchema=e.strictObject({file:r,status:e.enum(["running","done","failed"]),message:e.string(),share:e.number().min(0).max(1).optional()});const o=e.tuple([e.number(),e.number(),e.number()]),a=e.strictObject({url:e.string(),probe:e.string()});export const PROJECT_TOOLS={"project/items":t(e.strictObject({}),e.strictObject({items:e.array(e.strictObject({kind:e.enum(c),dir:r,entry:r,title:e.string().optional()})),folder:e.string(),name:e.string(),revision:e.int().nonnegative()}),"The project's items, as the build finds them."),"video/versions":t(e.strictObject({item:r}),e.strictObject({piece:e.string(),kind:e.enum(["video","slides"]),title:e.string().optional(),width:e.number(),height:e.number(),versions:e.array(e.strictObject({key:e.string(),lang:e.string().optional()}))}),"A video's or a deck's versions, one per language: what its stage, its timeline and its exports are asked for."),"slides/deck":t(e.strictObject({item:r}),e.strictObject({piece:e.string(),file:r,prefix:e.string(),layouts:e.array(e.string()),components:e.record(e.string(),e.unknown()),generators:e.array(e.string()),scripts:e.record(e.string(),r)}),"A deck's layouts, components and generators, and its files: slides.yaml (its slides) and its script in each language (their words and notes), which the deck's editor edits."),"video/stage":t(e.strictObject({...n,start:e.strictObject({t:e.number().nonnegative().optional(),part:e.string().optional(),offset:e.number().nonnegative().optional(),dur:e.number().positive().optional()}).optional(),play:e.boolean().optional(),chrome:e.boolean().optional(),edit:e.boolean().optional()}),a,"The address of a version's stage page, for a sandboxed frame: it plays the piece and talks to its parent by postMessage."),"video/timeline":t(e.strictObject(n),e.strictObject({timeline:TimelineSchema,text:e.array(e.unknown())}),"A version's timeline, drawn nowhere."),"video/still":t(e.strictObject({...n,t:e.number().nonnegative().optional()}),e.strictObject({t:e.number(),image:ImageSchema,width:e.int().positive(),height:e.int().positive(),duration:e.number().nonnegative()}),"A moment of a version as the render draws it, as a picture."),"video/stills":t(e.strictObject({...n,moments:e.array(e.number().nonnegative()).min(1).max(32)}),e.strictObject({stills:e.array(e.strictObject({t:e.number(),image:ImageSchema}))}),"Several moments of a version as the render draws them: what `video/still` gives, on one page."),"check/results":t(e.strictObject({}),CheckStateSchema,"The check run after edits, as it stands."),"check/run":t(e.strictObject({}),e.strictObject({}),"Runs the check again now."),"export/start":t(e.strictObject({item:r,versions:e.array(e.string()).optional(),types:e.array(e.string().min(1)).max(10).optional(),options:ExportOptionsSchema.optional()}),e.strictObject({job:ExportJobSchema}),"Exports an item (its versions, as file types) into .allyhub/out/; `export/changed` says how it goes."),"export/cancel":t(e.strictObject({job:e.string()}),e.strictObject({}),"Stops an export."),"export/list":t(e.strictObject({}),e.strictObject({jobs:e.array(ExportJobSchema),reveal:e.boolean()}),"The exports asked for since the server started."),"export/reveal":t(e.strictObject({path:r}),e.strictObject({}),"Shows an exported file in the person's file manager, where the server runs on their computer (`export/list`'s `reveal`)."),"scenery/viewer":t(e.strictObject({item:r,camera:e.strictObject({position:o,target:o}).optional()}),a,"The address of a scenery's viewer page, for a sandboxed frame: it tells what the person does by postMessage.")},AGENT_DOES={"project/items":{files:"the project's folder"},"video/versions":{command:"inspect combos"},"slides/deck":{files:"slides.ts, slides.yaml and the item's script.<locale>.yaml"},"video/stage":{command:"frames"},"video/timeline":{command:"inspect timeline"},"video/still":{command:"frames"},"video/stills":{command:"frames"},"check/results":{command:"inspect"},"check/run":{command:"check"},"export/start":{command:"render"},"export/cancel":{command:"render"},"export/list":{files:".allyhub/out/"},"export/reveal":{files:".allyhub/out/"},"scenery/viewer":{command:"scenery view"}};export function toolSpec(s){return Object.hasOwn(PROJECT_TOOLS,s)?PROJECT_TOOLS[s]:void 0}export const TOOL_NOTIFICATIONS={"project/changed":i(e.strictObject({revision:e.int().nonnegative()}),"The build saw a change: a stage or a timeline asked for now is the new one's."),"check/changed":i(CheckStateSchema,"The check started, ended or failed."),"export/changed":i(e.strictObject({job:ExportJobSchema}),"An export moved on."),"index/changed":i(e.strictObject({jobs:e.array(IndexJobSchema)}),"Making what the media index lacks moved on.")};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
-
import{createHash as O}from"node:crypto";import{lstat as T,mkdir as b,readFile as p,rename as v,symlink as B,writeFile as A}from"node:fs/promises";import{dirname as g,isAbsolute as W,join as w,relative as $,resolve as x,sep as S}from"node:path";import{BAKE_DIR as C,PACKAGE_FILE as D}from"@allyhub-next/formats";import{RegistryIndexSchema as E,RegistryItemSchema as I}from"@allyhub-next/protocol";import{z as R}from"zod";export class RegistryError extends Error{code;hint;constructor(o,i,s={}){super(i,s.cause===void 0?void 0:{cause:s.cause}),this.name="RegistryError",this.code=o,this.hint=s.hint}}export const itemFile=e=>`r/${e}.json`;async function M(e,o,i){let s;try{s=await p(e,"utf8")}catch(n){throw new RegistryError("no-registry",`There is no ${i} at ${e}.`,{cause:n})}let t;try{t=JSON.parse(s)}catch(n){throw new RegistryError("bad-registry",`${e} is not JSON.`,{cause:n})}const c=o.safeParse(t);if(!c.success)throw new RegistryError("bad-registry",`${e} is not a ${i}: ${R.prettifyError(c.error)}`);return c.data}export function folderRegistry(e){let o;const i=s=>{const t=x(e,s);if($(e,t).startsWith("..")||W($(e,t)))throw new RegistryError("bad-registry",`The registry names a file outside it: ${s}.`);return t};return{name:e,index:()=>o??=M(w(e,"registry.json"),E,"registry index"),async item(s){if((await this.index()).items.some(c=>c.name===s))return M(w(e,itemFile(s)),I,"registry item")},async file(s){return new Uint8Array(await p(i(s)))}}}export function urlRegistry(e,o=fetch){const i=e.endsWith("/")?e:`${e}/`;let s;const t=async n=>{let d;try{d=await o(new URL(n,i))}catch(f){throw new RegistryError("no-registry",`${i}${n} could not be read.`,{cause:f,hint:"Check the connection and run the same command again."})}if(!d.ok)throw new RegistryError("no-registry",`${i}${n} answered ${String(d.status)}.`);return d},c=async(n,d,f)=>{const u=d.safeParse(await(await t(n)).json());if(!u.success)throw new RegistryError("bad-registry",`${i}${n} is not a ${f}: ${R.prettifyError(u.error)}`);return u.data};return{name:i,index:()=>s??=c("registry.json",E,"registry index"),async item(n){if((await this.index()).items.some(f=>f.name===n))return c(itemFile(n),I,"registry item")},async file(n){return new Uint8Array(await(await t(n)).arrayBuffer())}}}export const registryAt=e=>/^https?:\/\//u.test(e)?urlRegistry(e):folderRegistry(e),sha256=e=>O("sha256").update(e).digest("hex");const F=e=>{const o=e.indexOf("@",e.startsWith("@")?1:0);return o<0?e:e.slice(0,o)};export async function planAdd(e,o,i){const s=[],t=new Set,c=async(r,a)=>{if(t.has(r))return;t.add(r);const l=await e.item(r);if(!l)throw new RegistryError("no-item",a===void 0?`The registry has no ${r}.`:`${a} needs ${r}, which the registry does not have.`,{hint:`It has ${(await e.index()).items.map(h=>h.name).join(", ")}.`});for(const h of l.registryDependencies)await c(h,r);s.push(l)};for(const r of o)await c(r);const n=x(i.root),d=[];for(const r of s)for(const a of r.files){const l=a.target.replaceAll("{dir}",i.dir).replaceAll("\\","/"),h=x(n,l);if(!h.startsWith(n+S))throw new RegistryError("outside",`${r.name}'s file ${a.path} would go outside the project (${l}).`);const m=a.content===void 0?await e.file(a.path):new TextEncoder().encode(a.content);if(sha256(m)!==a.sha256)throw new RegistryError("bad-file",`${r.name}'s file ${a.path} is not the one the registry lists (its sha256 differs).`);const j=await p(h).catch(()=>{}),N=j===void 0?"added":sha256(j)===a.sha256?"up to date":i.force?"replaced":"differs";d.push({item:r.name,path:$(n,h).split(S).join("/"),bytes:m,status:N})}let f=new Set;try{const r=JSON.parse(await p(w(n,D),"utf8"));f=new Set(["dependencies","devDependencies","peerDependencies"].flatMap(a=>Object.keys(r[a]??{})))}catch{}const u=[...new Set(s.flatMap(r=>r.dependencies.map(F)))].filter(r=>!f.has(r)),y=new Map;for(const r of s.flatMap(a=>a.assets)){const a=y.get(r.id);if(!a){y.set(r.id,r);continue}const l=[a.resolution,r.resolution].filter(h=>h!==void 0).sort((h,m)=>Number.parseInt(m,10)-Number.parseInt(h,10))[0];y.set(r.id,{source:a.source,id:a.id,...l===void 0?{}:{resolution:l},...a.maps&&r.maps?{maps:[...new Set([...a.maps,...r.maps])]}:{}})}const k=new Map;for(const r of s.flatMap(a=>a.bakes))k.set(`${r.digest}.${r.renderer}`,r);return{items:s,files:d,missing:u,assets:[...y.values()],bakes:[...k.values()]}}export const bakePath=e=>`${C}/${e.digest}.${e.renderer}.bin`;export async function fetchBakes(e,o,i=fetch){const s=[];for(const t of o){const c=bakePath(t),n=w(e,c),d=await p(n).catch(()=>{});if(d&&sha256(d)===t.sha256){s.push({bake:t,path:c,status:"up to date"});continue}let f;try{const u=await i(t.url);if(!u.ok)throw new Error(`${t.url} answered ${String(u.status)}`);f=new Uint8Array(await u.arrayBuffer())}catch(u){throw new RegistryError("no-registry",`The baked light for ${t.scenery} could not be downloaded.`,{cause:u,hint:"Check the connection and run the same command again; without it the scenery is drawn unbaked until allyhub scenery bake makes one."})}if(sha256(f)!==t.sha256)throw new RegistryError("bad-file",`The baked light for ${t.scenery} is not the one the registry lists (its sha256 differs).`);await b(g(n),{recursive:!0}),await A(`${n}.part`,f),await v(`${n}.part`,n),s.push({bake:t,path:c,status:"added"})}return s}export async function applyAdd(e,o){const i=o.files.filter(s=>s.status==="differs");if(i.length>0)throw new RegistryError("conflict",`${i.map(s=>s.path).join(", ")} ${i.length===1?"differs":"differ"} from the registry's: the project's copy has changes.`,{hint:"Keep the project's copy, or replace it with the registry's with --force (its changes are lost)."});for(const s of o.files){if(s.status==="up to date")continue;const t=w(e,s.path);await b(g(t),{recursive:!0}),await A(`${t}.part`,s.bytes),await v(`${t}.part`,t)}for(const s of o.items.filter(t=>t.type==="allyhub:skill")){const t=w(e,".claude","skills",s.name);await T(t).catch(()=>{})||(await b(g(t),{recursive:!0}),await B($(g(t),w(e,".agents","skills",s.name)),t))}}export function searchIndex(e,o){const i=t=>t.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter(Boolean),s=i(o);return e.items.filter(t=>{const c=i([t.name,t.title,t.description,...t.categories].join(" "));return s.every(n=>c.some(d=>d.startsWith(n)))})}
|
|
2
|
+
import{createHash as O}from"node:crypto";import{lstat as T,mkdir as b,readFile as p,rename as v,symlink as B,writeFile as A}from"node:fs/promises";import{dirname as g,isAbsolute as W,join as w,relative as $,resolve as x,sep as S}from"node:path";import{BAKE_DIR as C,PACKAGE_FILE as D}from"@allyhub-next/formats";import{RegistryIndexSchema as E,RegistryItemSchema as I}from"@allyhub-next/protocol";import{z as R}from"zod";export class RegistryError extends Error{code;hint;constructor(o,i,s={}){super(i,s.cause===void 0?void 0:{cause:s.cause}),this.name="RegistryError",this.code=o,this.hint=s.hint}}export const itemFile=e=>`r/${e}.json`;async function M(e,o,i){let s;try{s=await p(e,"utf8")}catch(n){throw new RegistryError("no-registry",`There is no ${i} at ${e}.`,{cause:n})}let t;try{t=JSON.parse(s)}catch(n){throw new RegistryError("bad-registry",`${e} is not JSON.`,{cause:n})}const c=o.safeParse(t);if(!c.success)throw new RegistryError("bad-registry",`${e} is not a ${i}: ${R.prettifyError(c.error)}`);return c.data}export function folderRegistry(e){let o;const i=s=>{const t=x(e,s);if($(e,t).startsWith("..")||W($(e,t)))throw new RegistryError("bad-registry",`The registry names a file outside it: ${s}.`);return t};return{name:e,index:()=>o??=M(w(e,"registry.json"),E,"registry index"),async item(s){if((await this.index()).items.some(c=>c.name===s))return M(w(e,itemFile(s)),I,"registry item")},async file(s){return new Uint8Array(await p(i(s)))}}}export function urlRegistry(e,o=fetch){const i=e.endsWith("/")?e:`${e}/`;let s;const t=async n=>{let d;try{d=await o(new URL(n,i))}catch(f){throw new RegistryError("no-registry",`${i}${n} could not be read.`,{cause:f,hint:"Check the connection and run the same command again."})}if(!d.ok)throw new RegistryError("no-registry",`${i}${n} answered ${String(d.status)}.`);return d},c=async(n,d,f)=>{const u=d.safeParse(await(await t(n)).json());if(!u.success)throw new RegistryError("bad-registry",`${i}${n} is not a ${f}: ${R.prettifyError(u.error)}`);return u.data};return{name:i,index:()=>s??=c("registry.json",E,"registry index"),async item(n){if((await this.index()).items.some(f=>f.name===n))return c(itemFile(n),I,"registry item")},async file(n){return new Uint8Array(await(await t(n)).arrayBuffer())}}}export const registryAt=e=>/^https?:\/\//u.test(e)?urlRegistry(e):folderRegistry(e),sha256=e=>O("sha256").update(e).digest("hex");const F=e=>{const o=e.indexOf("@",e.startsWith("@")?1:0);return o<0?e:e.slice(0,o)};export async function planAdd(e,o,i){const s=[],t=new Set,c=async(r,a)=>{if(t.has(r))return;t.add(r);const l=await e.item(r);if(!l)throw new RegistryError("no-item",a===void 0?`The registry has no ${r}.`:`${a} needs ${r}, which the registry does not have.`,{hint:`It has ${(await e.index()).items.map(h=>h.name).join(", ")}.`});for(const h of l.registryDependencies)await c(h,r);s.push(l)};for(const r of o)await c(r);const n=x(i.root),d=[];for(const r of s)for(const a of r.files){const l=a.target.replaceAll("{dir}",i.dir).replaceAll("\\","/"),h=x(n,l);if(!h.startsWith(n+S))throw new RegistryError("outside",`${r.name}'s file ${a.path} would go outside the project (${l}).`);const m=a.content===void 0?await e.file(a.path):new TextEncoder().encode(a.content);if(sha256(m)!==a.sha256)throw new RegistryError("bad-file",`${r.name}'s file ${a.path} is not the one the registry lists (its sha256 differs).`);const j=await p(h).catch(()=>{}),N=j===void 0?"added":sha256(j)===a.sha256?"up to date":i.force?"replaced":"differs";d.push({item:r.name,path:$(n,h).split(S).join("/"),bytes:m,status:N})}let f=new Set;try{const r=JSON.parse(await p(w(n,D),"utf8"));f=new Set(["dependencies","devDependencies","peerDependencies"].flatMap(a=>Object.keys(r[a]??{})))}catch{}const u=[...new Set(s.flatMap(r=>r.dependencies.map(F)))].filter(r=>!f.has(r)&&r!=="@allyhub/sdk"),y=new Map;for(const r of s.flatMap(a=>a.assets)){const a=y.get(r.id);if(!a){y.set(r.id,r);continue}const l=[a.resolution,r.resolution].filter(h=>h!==void 0).sort((h,m)=>Number.parseInt(m,10)-Number.parseInt(h,10))[0];y.set(r.id,{source:a.source,id:a.id,...l===void 0?{}:{resolution:l},...a.maps&&r.maps?{maps:[...new Set([...a.maps,...r.maps])]}:{}})}const k=new Map;for(const r of s.flatMap(a=>a.bakes))k.set(`${r.digest}.${r.renderer}`,r);return{items:s,files:d,missing:u,assets:[...y.values()],bakes:[...k.values()]}}export const bakePath=e=>`${C}/${e.digest}.${e.renderer}.bin`;export async function fetchBakes(e,o,i=fetch){const s=[];for(const t of o){const c=bakePath(t),n=w(e,c),d=await p(n).catch(()=>{});if(d&&sha256(d)===t.sha256){s.push({bake:t,path:c,status:"up to date"});continue}let f;try{const u=await i(t.url);if(!u.ok)throw new Error(`${t.url} answered ${String(u.status)}`);f=new Uint8Array(await u.arrayBuffer())}catch(u){throw new RegistryError("no-registry",`The baked light for ${t.scenery} could not be downloaded.`,{cause:u,hint:"Check the connection and run the same command again; without it the scenery is drawn unbaked until allyhub scenery bake makes one."})}if(sha256(f)!==t.sha256)throw new RegistryError("bad-file",`The baked light for ${t.scenery} is not the one the registry lists (its sha256 differs).`);await b(g(n),{recursive:!0}),await A(`${n}.part`,f),await v(`${n}.part`,n),s.push({bake:t,path:c,status:"added"})}return s}export async function applyAdd(e,o){const i=o.files.filter(s=>s.status==="differs");if(i.length>0)throw new RegistryError("conflict",`${i.map(s=>s.path).join(", ")} ${i.length===1?"differs":"differ"} from the registry's: the project's copy has changes.`,{hint:"Keep the project's copy, or replace it with the registry's with --force (its changes are lost)."});for(const s of o.files){if(s.status==="up to date")continue;const t=w(e,s.path);await b(g(t),{recursive:!0}),await A(`${t}.part`,s.bytes),await v(`${t}.part`,t)}for(const s of o.items.filter(t=>t.type==="allyhub:skill")){const t=w(e,".claude","skills",s.name);await T(t).catch(()=>{})||(await b(g(t),{recursive:!0}),await B($(g(t),w(e,".agents","skills",s.name)),t))}}export function searchIndex(e,o){const i=t=>t.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter(Boolean),s=i(o);return e.items.filter(t=>{const c=i([t.name,t.title,t.description,...t.categories].join(" "));return s.every(n=>c.some(d=>d.startsWith(n)))})}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { docPage, renderDoc, type DocFile, type DocFileType, type RenderDocOptions, } from "./print.js";
|
|
1
|
+
export { docPage, renderDoc, renderWord, type DocFile, type DocFileType, type RenderDocOptions, type RenderWordOptions, } from "./print.js";
|
|
2
2
|
export { docFontsCss } from "./fonts.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
-
export{docPage,renderDoc}from"./print.js";export{docFontsCss}from"./fonts.js";
|
|
2
|
+
export{docPage,renderDoc,renderWord}from"./print.js";export{docFontsCss}from"./fonts.js";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type DocxModule, type DocxZip } from "@allyhub-next/doc/docx";
|
|
1
2
|
export type DocFileType = "pdf" | "png";
|
|
2
3
|
/** Which doc: its file and folder (project paths), and its title. */
|
|
3
4
|
export interface DocFile {
|
|
@@ -11,6 +12,16 @@ export interface DocFile {
|
|
|
11
12
|
}
|
|
12
13
|
/** A doc's page as HTML, with the project's pictures it shows inside it. */
|
|
13
14
|
export declare function docPage(root: string, doc: DocFile): Promise<string>;
|
|
15
|
+
export interface RenderWordOptions {
|
|
16
|
+
root: string;
|
|
17
|
+
doc: DocFile;
|
|
18
|
+
/** The file written. */
|
|
19
|
+
out: string;
|
|
20
|
+
docx: DocxModule;
|
|
21
|
+
zip: DocxZip;
|
|
22
|
+
}
|
|
23
|
+
/** Writes a doc as a Word document, its text editable. */
|
|
24
|
+
export declare function renderWord(opts: RenderWordOptions): Promise<void>;
|
|
14
25
|
export interface RenderDocOptions {
|
|
15
26
|
root: string;
|
|
16
27
|
doc: DocFile;
|
|
@@ -1,2 +1,18 @@
|
|
|
1
1
|
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
-
import{mkdir as
|
|
2
|
+
import{mkdir as m,readFile as g,writeFile as l}from"node:fs/promises";import{dirname as w,extname as C,join as d,posix as h}from"node:path";import{openPage as p,startBrowser as y}from"@allyhub-next/browser";import{docHtml as S,parseDoc as v}from"@allyhub-next/doc";import{docxOf as j}from"@allyhub-next/doc/docx";import{docFontsCss as E}from"./fonts.js";const $={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".avif":"image/avif",".svg":"image/svg+xml"},I=/^([a-z][a-z0-9+.-]*:|\/\/)/i;async function b(e,t,a){const i=new Map,s=async o=>{for(const n of o){if("children"in n&&await s(n.children??[]),n.type!=="image"||I.test(n.src))continue;const c=h.normalize(h.join(t.dir,decodeURIComponent(n.src))),r=$[C(c).toLowerCase()];if(r===void 0||c.startsWith(".."))continue;const f=await g(d(e,c)).catch(()=>{});f&&i.set(n.src,{type:r,bytes:f})}};return await s(a),i}const x=({type:e,bytes:t})=>`data:${e};base64,${t.toString("base64")}`;export async function docPage(e,t){const a=v(await g(d(e,t.file),"utf8")),i=await b(e,t,a.blocks);return S(a.blocks,{title:t.title??t.path,image:s=>{const o=i.get(s);return o&&x(o)},fonts:await E()})}const k={"image/png":"png","image/jpeg":"jpg","image/gif":"gif"},z=2,M=.92;async function O(e,t){const a=k[t.type],i=await e.evaluate(`(async () => {
|
|
3
|
+
const image = new Image();
|
|
4
|
+
image.src = ${JSON.stringify(x(t))};
|
|
5
|
+
try { await image.decode(); } catch { return null; }
|
|
6
|
+
const width = image.naturalWidth || 1024;
|
|
7
|
+
const height = image.naturalHeight || 768;
|
|
8
|
+
if (${JSON.stringify(a!==void 0)}) return { width, height };
|
|
9
|
+
const scale = ${JSON.stringify(t.type==="image/svg+xml"?z:1)};
|
|
10
|
+
const canvas = document.createElement("canvas");
|
|
11
|
+
canvas.width = width * scale;
|
|
12
|
+
canvas.height = height * scale;
|
|
13
|
+
const context = canvas.getContext("2d");
|
|
14
|
+
context.fillStyle = "#fff";
|
|
15
|
+
context.fillRect(0, 0, canvas.width, canvas.height);
|
|
16
|
+
context.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
17
|
+
return { width, height, jpeg: canvas.toDataURL("image/jpeg", ${String(M)}) };
|
|
18
|
+
})()`);if(!i)return;const{width:s,height:o,jpeg:n}=i;if(a!==void 0)return{data:t.bytes,type:a,width:s,height:o};if(n!==void 0)return{data:Buffer.from(n.slice(n.indexOf(",")+1),"base64"),type:"jpg",width:s,height:o}}export async function renderWord(e){const{root:t,doc:a}=e,{blocks:i}=v(await g(d(t,a.file),"utf8")),s=await b(t,a,i),o=new Map;if(s.size>0){const c=await y({gpu:!1,htmlInCanvas:!1});try{const r=await p(c,{width:900,height:1200,allow:()=>!1});for(const[f,P]of s){const u=await O(r,P);u&&o.set(f,u)}}finally{await c.close()}}const n=await j(e.docx,e.zip,i,{title:a.title??a.path,picture:c=>o.get(c)});await m(w(e.out),{recursive:!0}),await l(e.out,n)}async function R(e,t){const{frameTree:a}=await e.session.send("Page.getFrameTree");await e.session.send("Page.setDocumentContent",{frameId:a.frame.id,html:t}),await e.evaluate("new Promise((r) => (document.readyState === 'complete' ? r() : addEventListener('load', () => r(), { once: true }))).then(() => document.fonts.ready).then(() => true)")}async function T(e){const{cssContentSize:t}=await e.session.send("Page.getLayoutMetrics"),a=await e.session.send("Page.captureScreenshot",{format:"png",clip:{x:0,y:0,width:Math.ceil(t.width),height:Math.ceil(t.height),scale:1},captureBeyondViewport:!0});return Buffer.from(a.data,"base64")}export async function renderDoc(e){const t=e.types?.length?e.types:["pdf"],a=await docPage(e.root,e.doc),i=e.name??"doc",s=[],o=await y({gpu:!1,htmlInCanvas:!1});try{const n=await p(o,{width:900,height:1200,scale:2,allow:()=>!1});await R(n,a);for(const c of t){const r=d(e.out,`${i}.${c}`);if(await m(w(r),{recursive:!0}),c==="pdf"){const{data:f}=await n.session.send("Page.printToPDF",{preferCSSPageSize:!0,printBackground:!0});await l(r,Buffer.from(f,"base64"))}else await n.evaluate("(() => { const s = document.createElement('style'); s.textContent = 'body{padding:48px 0;background:#fff}'; document.head.append(s); return true; })()"),await l(r,await T(n));s.push(`${i}.${c}`)}}finally{await o.close()}return s}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CaptionCueOptions } from "@allyhub-next/video-core";
|
|
1
|
+
import { type CaptionCueOptions, type Part, type Timeline } from "@allyhub-next/video-core";
|
|
2
2
|
import type { ExportPage, ProjectMedia, RenderTarget, VideoLook } from "./page.js";
|
|
3
3
|
import type { Tools } from "./tools.js";
|
|
4
4
|
export interface ExportOptions extends Tools {
|
|
@@ -8,7 +8,29 @@ export interface ExportOptions extends Tools {
|
|
|
8
8
|
look: VideoLook;
|
|
9
9
|
media: ProjectMedia;
|
|
10
10
|
out: string;
|
|
11
|
+
/** A deck's pages: a PDF page, a PNG or a slide per step, not only each page's last; default false. */
|
|
12
|
+
steps?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* A PPTX's slides: "picture", each a full-bleed picture (the default),
|
|
15
|
+
* or "editable", each the picture with its text hidden under a text box
|
|
16
|
+
* per block of text, as measured on the page (its box, size, weight,
|
|
17
|
+
* colour and font), so the words can be edited in PowerPoint, Keynote or
|
|
18
|
+
* Google Slides.
|
|
19
|
+
*/
|
|
20
|
+
pptx?: "picture" | "editable";
|
|
21
|
+
}
|
|
22
|
+
/** A moment an export draws: a part's (or a step's) still. */
|
|
23
|
+
interface Still {
|
|
24
|
+
part: Part;
|
|
25
|
+
at: number;
|
|
26
|
+
/** Its title: the part's, numbered by step when it has several. */
|
|
27
|
+
title: string;
|
|
11
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* The stills a deck's (or a video's handout's) pages are: every part's
|
|
31
|
+
* still in order, a deck's hidden pages left out; with `steps`, each step's.
|
|
32
|
+
*/
|
|
33
|
+
export declare function stillsOf(timeline: Timeline, steps?: boolean): Still[];
|
|
12
34
|
export interface ExportResult {
|
|
13
35
|
out: string;
|
|
14
36
|
/** Pages for pdf / pptx / png, cues for subtitles, 1 for a cover. */
|
|
@@ -29,7 +51,7 @@ export declare function renderCaptions(opts: ExportOptions & {
|
|
|
29
51
|
/** The cover as JPEG: the output's first cover, else the first part's still. */
|
|
30
52
|
export declare function renderCover(opts: ExportOptions): Promise<ExportResult>;
|
|
31
53
|
/**
|
|
32
|
-
* One PDF page per part (a video's handout) or
|
|
54
|
+
* One PDF page per part (a video's handout) or slide (a deck), each
|
|
33
55
|
* at its still; the text stays text. The page is the output's paper: the
|
|
34
56
|
* frame's pixels, or A4 and Letter at their real size with the frame
|
|
35
57
|
* scaled onto it. A page without headings of its own starts with an
|
|
@@ -44,8 +66,11 @@ export declare function renderPdf(opts: ExportOptions): Promise<ExportResult>;
|
|
|
44
66
|
*/
|
|
45
67
|
export declare function renderPng(opts: ExportOptions): Promise<ExportResult>;
|
|
46
68
|
/**
|
|
47
|
-
* One
|
|
48
|
-
*
|
|
69
|
+
* One slide per part or page (per step with `steps`), each the still as a
|
|
70
|
+
* full-bleed picture, or, `editable`, the still without its text under a
|
|
71
|
+
* text box per block of text; the speaker notes are a page's notes, else
|
|
72
|
+
* what a part says, else the text it shows.
|
|
49
73
|
*/
|
|
50
74
|
export declare function renderPptx(opts: ExportOptions): Promise<ExportResult>;
|
|
75
|
+
export {};
|
|
51
76
|
//# sourceMappingURL=exports.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
-
import{writeFile as
|
|
3
|
-
`)??"";
|
|
2
|
+
import{writeFile as S}from"node:fs/promises";import{createRequire as $}from"node:module";import{captionCues as M,paperOf as j,subtitleCues as v,toSrt as L,toVtt as T}from"@allyhub-next/video-core";import{RenderError as O}from"./errors.js";import{backgroundStill as z,finalStill as w,footageStill as C}from"./stills.js";export function stillsOf(t,e=!1){const a=[];for(const[o,i]of t.parts.entries()){if(i.hidden===!0)continue;const n=i.title??String(o+1),r=e&&i.steps!==void 0?i.steps:[i.still];r.forEach((c,s)=>{a.push({part:i,at:c,title:r.length>1?`${n} (${String(s+1)})`:n})})}return a}async function h(t,e,a){return await S(t,e),{out:t,units:a,bytes:e.byteLength}}const b=t=>({target:t.target,look:t.look,media:t.media,...t.ffmpeg===void 0?{}:{ffmpeg:t.ffmpeg},...t.ffprobe===void 0?{}:{ffprobe:t.ffprobe}});export async function renderCaptions(t){const{timeline:e}=t.page,a=await t.page.lines();if(a.length===0)throw new O("no-speech",`${t.target.output} of ${t.target.piece} (${t.target.combo.lang??"this combo"}) says nothing with word times, so there are no subtitles to export.`,{hint:'Give parts speech: speech: take("./take.mp4") with its .words.json beside it, or say(s("…")) and allyhub voice.'});const o={lines:a,fps:e.fps},i=t.captions?M(o,t.captions):v(o,await t.page.captionOptions()),n=t.type==="srt"?L(i):T(i);return h(t.out,new TextEncoder().encode(n),i.length)}export async function renderCover(t){const{page:e}=t,a=await e.covers()>0?await z(e.timeline,await e.cover(0),"jpeg",t):await w(e,e.timeline.parts[0]?.still??0,{...b(t),format:"jpeg"});return h(t.out,a,1)}export async function renderPdf(t){const{timeline:e}=t.page,a=e.background,o=[];for(const n of stillsOf(e,t.steps)){const r=await C(t.media,e,n.at,"jpeg",t);o.push({still:n.at,title:n.title,background:r?`url(data:image/jpeg;base64,${r.toString("base64")}) 0 0 / 100% 100% no-repeat`:a})}const i=await t.page.print(o,e.paper??j(t.target.format));return h(t.out,i,o.length)}export async function renderPng(t){const e=stillsOf(t.page.timeline,t.steps),a=Math.max(2,String(e.length).length),o=t.out.replace(/\.png$/i,""),i=[];let n=0;for(const[r,c]of e.entries()){const s=e.length===1?t.out:`${o}.${String(r+1).padStart(a,"0")}.png`,l=await w(t.page,c.at,b(t));await S(s,l),i.push(s),n+=l.byteLength}return{out:i[0]??t.out,units:i.length,bytes:n,files:i}}const P=$(import.meta.url)("pptxgenjs"),E=t=>({color:t.slice(0,3).map(e=>Math.round(e).toString(16).padStart(2,"0")).join(""),transparency:Math.round((1-t[3])*100)}),N=t=>t?.[0]?.replace(/^["']|["']$/gu,"").replace(/ Variable$/u,"");async function A(t,e,a,o){const i=await t.inks?.(a)??[];for(const n of i){if(n.text.text.trim()==="")continue;const[r,c,s,l]=n.text.box,g=n.lines.find(p=>p.fill!==void 0)?.fill,f=g?E(g):void 0,u=Math.max(1,n.lines.length),d=N(n.text.fonts);e.addText(n.text.text,{x:r*o,y:c*o,w:Math.max(s,1)*o,h:Math.max(l,1)*o,fontSize:Math.max(1,Math.round(n.size*o*72*10)/10),...d===void 0?{}:{fontFace:d},...f===void 0?{}:{color:f.color,...f.transparency>0?{transparency:f.transparency}:{}},bold:n.weight>=600,margin:0,valign:"top",fit:"none",...u===1?{wrap:!1}:{},...u>1&&n.size>0?{lineSpacingMultiple:l/u/n.size/1.2}:{}})}}export async function renderPptx(t){const{timeline:e}=t.page,{width:a,height:o}=e,i=/^([\d.]+)in ([\d.]+)in$/u.exec(e.paper??""),n=13.333/Math.max(a,o),r=i?Number(i[1]):a*n,c=i?Number(i[2]):o*n,s=new P;s.defineLayout({name:"ALLYHUB",width:r,height:c}),s.layout="ALLYHUB";const l=await t.page.text(),g=t.pptx==="editable"&&t.page.inks!==void 0&&t.page.hideText!==void 0,f=stillsOf(e,t.steps);for(const d of f){g&&await t.page.hideText?.(!0);let p;try{p=await w(t.page,d.at,b(t))}finally{g&&await t.page.hideText?.(!1)}const m=s.addSlide();m.addImage({data:`image/png;base64,${p.toString("base64")}`,x:0,y:0,w:r,h:c}),g&&await A(t.page,m,d.at,r/a);const x=l.find(k=>k.key===d.part.key),y=x?.notes??x?.spoken??x?.onScreen.join(`
|
|
3
|
+
`)??"";y&&m.addNotes(y)}const u=await s.write({outputType:"nodebuffer"});return h(t.out,u,f.length)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CaptionLine, CaptionOptions, CaptureOptions, Combo, MediaInfo, Problem, Timeline } from "@allyhub-next/video-core";
|
|
1
|
+
import type { TextInk, CaptionLine, CaptionOptions, CaptureOptions, Combo, MediaInfo, Problem, Timeline } from "@allyhub-next/video-core";
|
|
2
2
|
/** Which output a render is of: a piece's output in one combo and format. */
|
|
3
3
|
export interface RenderTarget {
|
|
4
4
|
piece: string;
|
|
@@ -129,6 +129,16 @@ export interface ExportPage extends GraphicsPage {
|
|
|
129
129
|
captionOptions(): Promise<CaptionOptions | undefined>;
|
|
130
130
|
/** Each part's notes and text, for a deck's speaker notes. */
|
|
131
131
|
text(): Promise<readonly PartText[]>;
|
|
132
|
+
/**
|
|
133
|
+
* Each text block drawn at film time t, with its lines' glyph boxes and
|
|
134
|
+
* fills, its size and weight (LoadedOutput.inks): an editable PPTX's
|
|
135
|
+
* text boxes. Absent where the page cannot measure.
|
|
136
|
+
*/
|
|
137
|
+
inks?(t: number): Promise<TextInk[]>;
|
|
138
|
+
/** A deck as it was drawn (slides-core's DrawnDeck): its PowerPoint file's model. Absent on a video. */
|
|
139
|
+
deck?(): Promise<unknown>;
|
|
140
|
+
/** Hides every text's fill while on (HIDE_TEXT_CSS): the picture behind an editable PPTX's text boxes. */
|
|
141
|
+
hideText?(on: boolean): Promise<void>;
|
|
132
142
|
/** How many covers the output has (video(…, { covers })). */
|
|
133
143
|
covers(): Promise<number>;
|
|
134
144
|
/**
|
|
@@ -44,6 +44,8 @@ export interface RenderOptions extends Tools {
|
|
|
44
44
|
* renders every part again and keeps nothing.
|
|
45
45
|
*/
|
|
46
46
|
partCache?: PartCache | false;
|
|
47
|
+
/** Aborting it stops the render: its pages and ffmpeg runs, and no part of its file stays. */
|
|
48
|
+
signal?: AbortSignal;
|
|
47
49
|
}
|
|
48
50
|
/** Where one part's time went (RenderTimings.part), in seconds. */
|
|
49
51
|
export interface PartTimings {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
|
|
2
|
-
import{copyFile as Xe,mkdir as ht,mkdtemp as gt,readdir as yt,readFile as kt,rename as bt,rm as ce,stat as vt,writeFile as Pt}from"node:fs/promises";import{createHash as xt}from"node:crypto";import{tmpdir as Mt}from"node:os";import{join as S}from"node:path";import{EXIT as $t}from"@allyhub-next/protocol";import{ALPHA_TYPES as jt,comboKey as St,fpsRational as At,heldTime as _t,planeAt as Ft}from"@allyhub-next/video-core";import{CAP_START as Ot,capOf as Tt,capRun as Ye,overCap as Bt,packetSizes as Ne}from"./cap.js";import{capturesAnything as Et}from"./capture.js";import{compositeArgs as Ct,planSources as Dt,transparentPng as Rt}from"./composite.js";import{MAX_WORKERS as Ht,autoWorkers as Kt,encodeFor as zt,encoderOf as qe,gopArgs as It,HELD_OUT as Wt,twoOutputs as Lt}from"./encode.js";import{RenderError as Vt}from"./errors.js";import{ffmpegVersion as Jt}from"./ffmpeg.js";import{junctionArgs as Ut}from"./junction.js";import{lutFile as Xt,pagePlane as Yt}from"./look.js";import{PartCache as Nt,closedPart as qt,drawnKey as Gt,junctionDigest as Qt,partDigest as Zt,place as en}from"./parts.js";import{PipeFormat as Ge}from"./png.js";import{PagePool as tn,drawInOrder as nn,encoderSlots as rn,renderSerial as on}from"./pool.js";import{postReadsTime as Qe}from"./post.js";import{segmentsOf as an}from"./segments.js";import{mixSound as sn}from"./sound.js";import{runFfmpegWith as Ze,toolsOf as cn,write as fn}from"./tools.js";const A=s=>Math.round(performance.now()-s)/1e3,fe=async(s,y,w)=>{await Ze(s,y,w)};function un(s){const y=new Set;return s.filter(w=>{const I=[w.code,w.message,w.piece,w.output,w.combo?St(w.combo):"",w.format,w.part,w.where?.file,w.where?.line].join("|");return y.has(I)?!1:(y.add(I),!0)})}const et=s=>xt("sha256").update(s).digest("hex");export async function renderVideo(s){const{ffmpeg:y,ffprobe:w}=await cn(s),I={ffmpeg:y,ffprobe:w},{target:$e,media:J}=s,[O]=s.pages;if(!O)throw new Error("renderVideo draws with at least one page.");const d=s.type??"mp4",D=zt(d,$e.format,s.encode??{},O.timeline),M=s.look,U=M.transparent===!0&&jt.includes(d),je=qe(d,D,U),te=await Xt(J.root,M.post?.lut),R=await gt(S(Mt(),"allyhub-render-")),W=[...s.pages],Se=[],tt=()=>Promise.all(Se.splice(0).map(le=>le.close?.()??Promise.resolve())),ue=[];let X;const de=performance.now(),h={pages:0,workers:1,concurrency:1,plan:0,parts:0,mix:0,mux:0,total:0,part:[]};try{const le=performance.now(),b=O.timeline,l=b.fps,me=At(l),Ae=Math.round(b.duration*l),pe=M.motionBlur,_=pe?pe.samples:1,we=pe?.shutter??.5,_e=await Dt(J,b,w),P=d==="gif"||d==="png"?"png":d,he=d==="webm"?["-fflags","+bitexact"]:[],nt=P!=="png"&&!(d==="mp4"&&D.codec==="h265"),T=an(b,nt),ne=[];je.rgb?ne.push(`format=${je.pixFmt}`):ne.push("scale=out_color_matrix=bt709:out_range=tv:flags=neighbor");const Y=(e,t=!1,n)=>["-r",me.text,...qe(d,D,U,e,t,n).args,...It(d,D.codec,e),...d==="mp4"||d==="mov"?["-video_track_timescale","90000"]:[],...he],B=d==="mp4"&&D.maxBitrate!==void 0&&D.maxBitrate>0?Tt(D.maxBitrate):void 0,rt=e=>[...Y(e),...B?["over the cap",...Y(e,!0)]:[],...ne],N=s.code,H=P!=="png"&&N!==void 0&&s.partCache!==!1&&process.env.ALLYHUB_PART_CACHE!=="off"?s.partCache??Nt.of(J.root):void 0,q=[],Fe=new Map;if(H&&N){const e=await Jt(y),t=te?et(await kt(te)):null,n=O.reads,o={alpha:U,samples:_,shutter:we,capture:Et(M.capture)?M.capture??null:null,post:M.post?.filter??null,lut:t},i=r=>{const u=r.post?.filter,g=o.capture!==null||o.post!==null&&Qe(o.post)||u!==void 0&&Qe(u);return{...o,...u===void 0?{}:{partPost:u},...g?{at:Math.round(r.start*l)}:{}}},a=Math.round(b.duration*l),k=b.parts.at(-1)?.key,m=new Map,F=r=>{const u=O.signs[r.key];if(u===void 0||qt(N,u))return Promise.resolve(void 0);let g=m.get(r.key);if(!g){const j=Math.round(r.start*l),c=r.key===k?a:Math.min(a,Math.round(r.end*l)),f=[];for(let K=j;K<c;K++)for(let C=0;C<_;C++)f.push(K/l+(C>0?C*we/(l*_):0));const Pe=performance.now();g=O.partSign(r.key,f).then(K=>(h.signs=Math.round(((h.signs??0)+A(Pe))*1e3)/1e3,K)),m.set(r.key,g)}return g},x=async(r,u,g,j)=>{const c=O.signs[r.key];if(c===void 0)return;const f=await F(r);return f&&Fe.set(r.key,Gt(N,f)?"frames":`bundle: ${f.unknown??`a canvas drawn by ${f.owners.join(", ")}, in the piece's own file`}`),Zt({root:J.root,code:N,combo:$e.combo,timeline:b,part:r,sign:c,...f?{drawn:f}:{},media:J.media,reads:n,frames:u,encode:g,look:i(r),ffmpeg:e,...j?{trim:j}:{},...O.gpu===!0?{gpu:!0}:{}})},p=new Map,v=r=>{let u=p.get(r.key);return u||(u=x(r,Math.round(r.end*l)-Math.round(r.start*l),[]),p.set(r.key,u)),u};for(const r of T){const u=rt(r.frames);if(!r.junction){q.push(await x(r.part,r.frames,u,r.trim));continue}const[g,j]=[await v(r.junction.from),await v(r.part)];q.push(g===void 0||j===void 0?void 0:await Qt({out:g,in:j,transition:r.junction.transition,fps:l,frames:r.frames,encode:u,ffmpeg:e}))}}const Oe=await Promise.all(T.map((e,t)=>{const n=q[t];return H&&n?H.get(n,P):Promise.resolve(void 0)})),Te=e=>e>0?e*we/(l*_):0,ot=(e,t,n)=>e.junction?_t(t,n/l,l):n/l,Be=(e,t,n,o)=>Ft(t.part,t.plane,ot(e,t.part,n)+Te(o)),ge=T.map(e=>{const t=(e.junction?[e.junction.from,e.part]:[e.part]).map(i=>{const a=[];let k=0;return i.planes.forEach((m,F)=>{const x={part:i,plane:F,images:m.overlay===!0?1:_};let p=0;for(let v=e.first;v<e.first+e.frames;v++)for(let r=0;r<x.images;r++)Be(e,x,v,r)&&p++;p!==0&&(a.push(x),k+=p)}),{part:i,planes:a.map(m=>m.plane),overlays:a.flatMap(m=>i.planes[m.plane]?.overlay===!0?[m.plane]:[]),groups:a,drawn:k,graphics:k>0}}),n=t.flatMap(i=>i.groups),o=n.length===0?_:n.reduce((i,a)=>i+a.images,0);return{pictures:t,groups:n,per:o,graphics:t.some(i=>i.graphics),drawn:t.reduce((i,a)=>i+a.drawn,0),images:e.frames*o}}),Ee=(e,t,n)=>{let o=n%e.per,i={part:t.part,plane:0,images:_};for(const a of e.groups){if(o<a.images){i=a;break}o-=a.images}return{f:t.first+Math.floor(n/e.per),k:o,group:i}},at=(e,t,n)=>{const o=Ee(e,t,n);return Be(t,o.group,o.f,o.k)};let ye=0;ge.forEach((e,t)=>{Oe[t]===void 0&&(ye+=e.drawn)}),h.plan=A(le);const Ce=s.openPage===void 0?W.length:Math.max(W.length,ye===0?1:Math.min(s.workers??Kt(ye),Ht));h.workers=Ce;const re=new tn;for(const e of W)re.add(e);const st=async e=>{const t=[];for(const n of W)for(const o of await n.problems())o.level!=="error"||o.code==="AK-P002"||o.part!==void 0&&!e.has(o.part)||t.push(o);return un(t)},it=performance.now(),De=s.openPage;for(let e=W.length;De&&e<Ce;e++){const t=De().then(n=>{Se.push(n),W.push(n),re.add(n),h.pages=A(it)});t.catch(()=>{}),ue.push(t)}const ct=on(),ke=s.sound,E=d==="gif"||ke===void 0?void 0:S(R,"audio.wav"),Re=async()=>{if(E===void 0||ke===void 0)return;const e=performance.now(),t=await sn({timeline:b,sound:ke,out:E,ffmpeg:y});return h.mix=A(e),t};ct||(X=Re(),X.catch(()=>{}));const ft=Rt(b.width,b.height),He=ge.reduce((e,t)=>e+t.images,0);let L=0,Ke=-1;const be=()=>{const e=Math.floor(90*L/He);e<=Ke||(Ke=e,s.onProgress?.(.9*L/He))},G=S(R,"frames");P==="png"&&await ht(G,{recursive:!0});const oe=T.map((e,t)=>S(R,`segment.${String(t).padStart(4,"0")}.${P}`));let ze=0,Ie=0;const Q=new AbortController,We=rn();h.concurrency=Math.max(1,Math.min(We.limit,Oe.filter(e=>e===void 0).length));const ut=performance.now(),Le=(e,t,n)=>fe(y,["-v","error","-y","-i",e,"-map","0:v","-c","copy","-frames:v",String(n),...he,t]),dt=async(e,t)=>{const n=ge[e];if(!n)return;const o=n.graphics,i=n.images,a={key:t.junction?`${t.junction.from.key}>${t.part.key}`:t.part.key,...t.junction?{junction:!0}:{},frames:t.frames,cached:!1,images:o?i:0,captured:0,reused:0,clear:0,capture:0,ffmpeg:0,waitFrames:0,waitPipe:0,start:0,end:0},k=t.junction?void 0:Fe.get(t.part.key);k!==void 0&&(a.keyed=k),h.part[e]=a;const m={captured:0,reused:0},F=new Map,x=c=>{let f=F.get(c);return f||(f=new Map,F.set(c,f)),f},p=P==="png"?S(G,"frame.%05d.png"):oe[e]??"",v={...M.capture?{capture:M.capture}:{},...M.post?.filter?{post:M.post.filter}:{},...te?{lut:te}:{},tail:ne},r=c=>({planes:n.pictures[c]?.planes??[],overlays:n.pictures[c]?.overlays??[]}),u=c=>We.run(async()=>{Q.signal.throwIfAborted(),a.start=A(de);const f=B?`${c}.held.${P}`:void 0,Pe=()=>["-v","error","-y",...Lt(t.junction?Ut({timeline:b,transition:t.junction.transition,first:t.first,frames:t.frames,sources:_e,alpha:U,out:r(0),in:r(1),samples:_,...v}):Ct({timeline:b,first:t.first,frames:t.frames,sources:_e,alpha:U,planes:n.pictures[0]?.planes??[],overlays:n.pictures[0]?.overlays??[],samples:_,part:t.part,...v}),f!==void 0),...Y(t.frames),...P==="png"?["-start_number",String(t.first+1)]:[],c,...f===void 0?[]:["-map",`[${Wt}]`,"-frames:v",String(t.frames),...Y(t.frames,!0),f]],K=performance.now();let C=n.drawn<i||n.groups.length>1;for(;;){const xe=new Ge(C);let Z=0,z=0;try{await Ze(y,Pe(),o?async ae=>{await nn({count:i,ahead:Math.max(8,re.size*4),draw:ee=>{if(!at(n,t,ee))return a.clear++,z++,Promise.resolve(ft);const{f:Me,k:se,group:ie}=Ee(n,t,ee);return re.use([e,ee],async mt=>{Q.signal.throwIfAborted();const pt=performance.now(),wt=await mt.frame(Me/l,{format:"png",alpha:!0,...Yt(ie.part,ie.plane),...t.junction?{part:ie.part.key}:{},reuse:x(ie.part.key),stats:m,...se>0?{offset:Te(se)}:{}});return a.capture+=(performance.now()-pt)/1e3,wt})},emit:async ee=>{const Me=xe.next(ee),se=performance.now();await fn(ae,Me),a.waitPipe+=(performance.now()-se)/1e3,L++,Z++,be()},waits:a,signal:Q.signal})}:void 0,!1,Q.signal);break}catch(ae){if(!(ae instanceof Ge.Mixed)||C)throw f!==void 0&&await ce(f,{force:!0}),ae;C=!0}L-=Z,a.clear-=z}if(B&&f!==void 0&&(await Bt(c,B,l,I)?(await bt(f,c),a.held=!0):await ce(f,{force:!0})),a.ffmpeg=A(K),o||(L+=i,be()),o){const xe=new Set(t.junction?[t.junction.from.key,t.part.key]:[t.part.key]),Z=await st(xe);if(Z.length>0)throw new Vt("draw-failed",`Drawing ${a.key} failed, so it is not rendered: ${Z.map(z=>`${z.code} ${z.message}${z.t===void 0?"":` (at ${z.t.toFixed(2)} s)`}`).join("; ")}`,{exit:$t.failed,hint:"allyhub frames --at and allyhub inspect layout --at draw that moment; fix what failed and render again."})}}),g=t.keep<t.frames,j=q[e];if(H&&j){const c=await H.segment(j,P,u);g?await Le(c.file,p,t.keep):await en(c.file,p),c.cached&&(t.junction?Ie++:ze++,a.cached=!0,L+=i,be())}else if(g){const c=S(R,`whole.${String(e).padStart(4,"0")}.${P}`);await u(c),await Le(c,p,t.keep),await ce(c,{force:!0})}else await u(p);a.captured=m.captured,a.reused=m.reused,a.end=A(de)},Ve=(await Promise.allSettled(T.map((e,t)=>dt(t,e).catch(n=>{throw Q.abort(n),n})))).find(e=>e.status==="rejected");if(Ve)throw Ve.reason;await Promise.all(ue),h.parts=A(ut);const $=await(X??Re()),ve=$?.loudness;s.onProgress?.(.95);const lt=performance.now();let V;if(d==="png"){const e=s.out.replace(/\.png$/,"");V=[];const t=(await yt(G)).filter(n=>/^frame\.\d+\.png$/.test(n)).sort();for(const n of t){const o=`${e}.${n.slice(6)}`;await Xe(S(G,n),o),V.push(o)}E&&ve&&(await Xe(E,`${e}.wav`),V.push(`${e}.wav`))}else if(d==="gif")await fe(y,["-v","error","-y","-framerate",me.text,"-start_number","1","-i",S(G,"frame.%05d.png"),"-filter_complex","split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=sierra2_4a","-r",me.text,"-loop","0",s.out]);else{if(B){const n=B.bufferKbps*1e3;let o=Ot*n;for(const[i,a]of oe.entries()){const k=await Ne(a,I);if(!k)continue;const m=Ye(k,B,l,o);if(!m.breaks){o=m.end;continue}const F=Y(k.length,!0,o/n),x=r=>fe(y,["-v","error","-y","-i",a,"-an",...F,r]);let p=S(R,`held.${String(i)}.mp4`);const v=q[i];H&&v?p=(await H.segment(et(Buffer.from(JSON.stringify(["held across the join",v,F]))),P,x)).file:await x(p),oe[i]=p,h.capped=(h.capped??0)+1,o=Ye(await Ne(p,I)??k,B,l,o).end}}const e=S(R,"segments.txt");await Pt(e,oe.map(n=>`file '${n.replace(/'/g,"'\\''")}'
|
|
3
|
-
`).join(""));const t=d==="mov"?["-c:a","pcm_s24le"]:d==="webm"?["-c:a","libopus","-b:a",`${String(
|
|
2
|
+
import{copyFile as Ne,mkdir as yt,mkdtemp as kt,readdir as bt,readFile as vt,rename as Pt,rm as re,stat as xt,writeFile as Mt}from"node:fs/promises";import{createHash as $t}from"node:crypto";import{tmpdir as jt}from"node:os";import{join as S}from"node:path";import{EXIT as St}from"@allyhub-next/protocol";import{ALPHA_TYPES as At,comboKey as _t,fpsRational as Ft,heldTime as Ot,planeAt as Tt}from"@allyhub-next/video-core";import{CAP_START as Bt,capOf as Et,capRun as qe,overCap as Ct,packetSizes as Ge}from"./cap.js";import{capturesAnything as Dt}from"./capture.js";import{compositeArgs as Rt,planSources as It,transparentPng as Ht}from"./composite.js";import{MAX_WORKERS as Kt,autoWorkers as zt,encodeFor as Wt,encoderOf as Qe,gopArgs as Lt,HELD_OUT as Vt,twoOutputs as Jt}from"./encode.js";import{RenderError as Ut}from"./errors.js";import{ffmpegVersion as Xt}from"./ffmpeg.js";import{junctionArgs as Yt}from"./junction.js";import{lutFile as Nt,pagePlane as qt}from"./look.js";import{PartCache as Gt,closedPart as Qt,drawnKey as Zt,junctionDigest as en,partDigest as tn,place as nn}from"./parts.js";import{PipeFormat as Ze}from"./png.js";import{PagePool as rn,drawInOrder as on,encoderSlots as an,renderSerial as sn}from"./pool.js";import{postReadsTime as et}from"./post.js";import{segmentsOf as cn}from"./segments.js";import{mixSound as fn}from"./sound.js";import{runFfmpegWith as tt,toolsOf as un,write as dn}from"./tools.js";const A=a=>Math.round(performance.now()-a)/1e3,de=async(a,y,w,T)=>{await tt(a,y,w,!1,T)};function ln(a){const y=new Set;return a.filter(w=>{const T=[w.code,w.message,w.piece,w.output,w.combo?_t(w.combo):"",w.format,w.part,w.where?.file,w.where?.line].join("|");return y.has(T)?!1:(y.add(T),!0)})}const nt=a=>$t("sha256").update(a).digest("hex");export async function renderVideo(a){const{ffmpeg:y,ffprobe:w}=await un(a),T={ffmpeg:y,ffprobe:w},{target:Se,media:X}=a,[B]=a.pages;if(!B)throw new Error("renderVideo draws with at least one page.");const d=a.type??"mp4",I=Wt(d,Se.format,a.encode??{},B.timeline),M=a.look,Y=M.transparent===!0&&At.includes(d),Ae=Qe(d,I,Y),oe=await Nt(X.root,M.post?.lut),H=await kt(S(jt(),"allyhub-render-")),L=[...a.pages],_e=[],rt=()=>Promise.all(_e.splice(0).map(q=>q.close?.()??Promise.resolve())),le=[];let N;const V=[],me=performance.now(),h={pages:0,workers:1,concurrency:1,plan:0,parts:0,mix:0,mux:0,total:0,part:[]};try{const q=performance.now(),b=B.timeline,l=b.fps,pe=Ft(l),Fe=Math.round(b.duration*l),we=M.motionBlur,_=we?we.samples:1,he=we?.shutter??.5,Oe=await It(X,b,w),P=d==="gif"||d==="png"?"png":d,ge=d==="webm"?["-fflags","+bitexact"]:[],ot=P!=="png"&&!(d==="mp4"&&I.codec==="h265"),E=cn(b,ot),ae=[];Ae.rgb?ae.push(`format=${Ae.pixFmt}`):ae.push("scale=out_color_matrix=bt709:out_range=tv:flags=neighbor");const G=(e,t=!1,n)=>["-r",pe.text,...Qe(d,I,Y,e,t,n).args,...Lt(d,I.codec,e),...d==="mp4"||d==="mov"?["-video_track_timescale","90000"]:[],...ge],C=d==="mp4"&&I.maxBitrate!==void 0&&I.maxBitrate>0?Et(I.maxBitrate):void 0,at=e=>[...G(e),...C?["over the cap",...G(e,!0)]:[],...ae],Q=a.code,K=P!=="png"&&Q!==void 0&&a.partCache!==!1&&process.env.ALLYHUB_PART_CACHE!=="off"?a.partCache??Gt.of(X.root):void 0,Z=[],Te=new Map;if(K&&Q){const e=await Xt(y),t=oe?nt(await vt(oe)):null,n=B.reads,o={alpha:Y,samples:_,shutter:he,capture:Dt(M.capture)?M.capture??null:null,post:M.post?.filter??null,lut:t},i=r=>{const u=r.post?.filter,g=o.capture!==null||o.post!==null&&et(o.post)||u!==void 0&&et(u);return{...o,...u===void 0?{}:{partPost:u},...g?{at:Math.round(r.start*l)}:{}}},s=Math.round(b.duration*l),k=b.parts.at(-1)?.key,m=new Map,O=r=>{const u=B.signs[r.key];if(u===void 0||Qt(Q,u))return Promise.resolve(void 0);let g=m.get(r.key);if(!g){const j=Math.round(r.start*l),c=r.key===k?s:Math.min(s,Math.round(r.end*l)),f=[];for(let z=j;z<c;z++)for(let R=0;R<_;R++)f.push(z/l+(R>0?R*he/(l*_):0));const Me=performance.now();g=B.partSign(r.key,f).then(z=>(h.signs=Math.round(((h.signs??0)+A(Me))*1e3)/1e3,z)),m.set(r.key,g)}return g},x=async(r,u,g,j)=>{const c=B.signs[r.key];if(c===void 0)return;const f=await O(r);return f&&Te.set(r.key,Zt(Q,f)?"frames":`bundle: ${f.unknown??`a canvas drawn by ${f.owners.join(", ")}, in the piece's own file`}`),tn({root:X.root,code:Q,combo:Se.combo,timeline:b,part:r,sign:c,...f?{drawn:f}:{},media:X.media,reads:n,frames:u,encode:g,look:i(r),ffmpeg:e,...j?{trim:j}:{},...B.gpu===!0?{gpu:!0}:{}})},p=new Map,v=r=>{let u=p.get(r.key);return u||(u=x(r,Math.round(r.end*l)-Math.round(r.start*l),[]),p.set(r.key,u)),u};for(const r of E){const u=at(r.frames);if(!r.junction){Z.push(await x(r.part,r.frames,u,r.trim));continue}const[g,j]=[await v(r.junction.from),await v(r.part)];Z.push(g===void 0||j===void 0?void 0:await en({out:g,in:j,transition:r.junction.transition,fps:l,frames:r.frames,encode:u,ffmpeg:e}))}}const Be=await Promise.all(E.map((e,t)=>{const n=Z[t];return K&&n?K.get(n,P):Promise.resolve(void 0)})),Ee=e=>e>0?e*he/(l*_):0,st=(e,t,n)=>e.junction?Ot(t,n/l,l):n/l,Ce=(e,t,n,o)=>Tt(t.part,t.plane,st(e,t.part,n)+Ee(o)),ye=E.map(e=>{const t=(e.junction?[e.junction.from,e.part]:[e.part]).map(i=>{const s=[];let k=0;return i.planes.forEach((m,O)=>{const x={part:i,plane:O,images:m.overlay===!0?1:_};let p=0;for(let v=e.first;v<e.first+e.frames;v++)for(let r=0;r<x.images;r++)Ce(e,x,v,r)&&p++;p!==0&&(s.push(x),k+=p)}),{part:i,planes:s.map(m=>m.plane),overlays:s.flatMap(m=>i.planes[m.plane]?.overlay===!0?[m.plane]:[]),groups:s,drawn:k,graphics:k>0}}),n=t.flatMap(i=>i.groups),o=n.length===0?_:n.reduce((i,s)=>i+s.images,0);return{pictures:t,groups:n,per:o,graphics:t.some(i=>i.graphics),drawn:t.reduce((i,s)=>i+s.drawn,0),images:e.frames*o}}),De=(e,t,n)=>{let o=n%e.per,i={part:t.part,plane:0,images:_};for(const s of e.groups){if(o<s.images){i=s;break}o-=s.images}return{f:t.first+Math.floor(n/e.per),k:o,group:i}},it=(e,t,n)=>{const o=De(e,t,n);return Ce(t,o.group,o.f,o.k)};let ke=0;ye.forEach((e,t)=>{Be[t]===void 0&&(ke+=e.drawn)}),h.plan=A(q);const Re=a.openPage===void 0?L.length:Math.max(L.length,ke===0?1:Math.min(a.workers??zt(ke),Kt));h.workers=Re;const se=new rn;for(const e of L)se.add(e);const ct=async e=>{const t=[];for(const n of L)for(const o of await n.problems())o.level!=="error"||o.code==="AK-P002"||o.part!==void 0&&!e.has(o.part)||t.push(o);return ln(t)},ft=performance.now(),Ie=a.openPage;for(let e=L.length;Ie&&e<Re;e++){const t=Ie().then(n=>{_e.push(n),L.push(n),se.add(n),h.pages=A(ft)});t.catch(()=>{}),le.push(t)}const ut=sn(),be=a.sound,D=d==="gif"||be===void 0?void 0:S(H,"audio.wav"),He=async()=>{if(D===void 0||be===void 0)return;const e=performance.now(),t=await fn({timeline:b,sound:be,out:D,ffmpeg:y});return h.mix=A(e),t};ut||(N=He(),N.catch(()=>{}));const dt=Ht(b.width,b.height),Ke=ye.reduce((e,t)=>e+t.images,0);let J=0,ze=-1;const ve=()=>{const e=Math.floor(90*J/Ke);e<=ze||(ze=e,a.onProgress?.(.9*J/Ke))},ee=S(H,"frames");P==="png"&&await yt(ee,{recursive:!0});const ie=E.map((e,t)=>S(H,`segment.${String(t).padStart(4,"0")}.${P}`));let We=0,Le=0;const Pe=new AbortController,F=a.signal?AbortSignal.any([Pe.signal,a.signal]):Pe.signal,Ve=an();h.concurrency=Math.max(1,Math.min(Ve.limit,Be.filter(e=>e===void 0).length));const lt=performance.now(),Je=(e,t,n)=>de(y,["-v","error","-y","-i",e,"-map","0:v","-c","copy","-frames:v",String(n),...ge,t]),mt=async(e,t)=>{const n=ye[e];if(!n)return;const o=n.graphics,i=n.images,s={key:t.junction?`${t.junction.from.key}>${t.part.key}`:t.part.key,...t.junction?{junction:!0}:{},frames:t.frames,cached:!1,images:o?i:0,captured:0,reused:0,clear:0,capture:0,ffmpeg:0,waitFrames:0,waitPipe:0,start:0,end:0},k=t.junction?void 0:Te.get(t.part.key);k!==void 0&&(s.keyed=k),h.part[e]=s;const m={captured:0,reused:0},O=new Map,x=c=>{let f=O.get(c);return f||(f=new Map,O.set(c,f)),f},p=P==="png"?S(ee,"frame.%05d.png"):ie[e]??"",v={...M.capture?{capture:M.capture}:{},...M.post?.filter?{post:M.post.filter}:{},...oe?{lut:oe}:{},tail:ae},r=c=>({planes:n.pictures[c]?.planes??[],overlays:n.pictures[c]?.overlays??[]}),u=c=>Ve.run(async()=>{F.throwIfAborted(),s.start=A(me);const f=C?`${c}.held.${P}`:void 0,Me=()=>["-v","error","-y",...Jt(t.junction?Yt({timeline:b,transition:t.junction.transition,first:t.first,frames:t.frames,sources:Oe,alpha:Y,out:r(0),in:r(1),samples:_,...v}):Rt({timeline:b,first:t.first,frames:t.frames,sources:Oe,alpha:Y,planes:n.pictures[0]?.planes??[],overlays:n.pictures[0]?.overlays??[],samples:_,part:t.part,...v}),f!==void 0),...G(t.frames),...P==="png"?["-start_number",String(t.first+1)]:[],c,...f===void 0?[]:["-map",`[${Vt}]`,"-frames:v",String(t.frames),...G(t.frames,!0),f]],z=performance.now();let R=n.drawn<i||n.groups.length>1;for(;;){const $e=new Ze(R);let te=0,W=0;try{await tt(y,Me(),o?async ce=>{await on({count:i,ahead:Math.max(8,se.size*4),draw:ne=>{if(!it(n,t,ne))return s.clear++,W++,Promise.resolve(dt);const{f:je,k:fe,group:ue}=De(n,t,ne);return se.use([e,ne],async wt=>{F.throwIfAborted();const ht=performance.now(),gt=await wt.frame(je/l,{format:"png",alpha:!0,...qt(ue.part,ue.plane),...t.junction?{part:ue.part.key}:{},reuse:x(ue.part.key),stats:m,...fe>0?{offset:Ee(fe)}:{}});return s.capture+=(performance.now()-ht)/1e3,gt})},emit:async ne=>{const je=$e.next(ne),fe=performance.now();await dn(ce,je),s.waitPipe+=(performance.now()-fe)/1e3,J++,te++,ve()},waits:s,signal:F})}:void 0,!1,F);break}catch(ce){if(!(ce instanceof Ze.Mixed)||R)throw f!==void 0&&await re(f,{force:!0}),ce;R=!0}J-=te,s.clear-=W}if(C&&f!==void 0&&(await Ct(c,C,l,T)?(await Pt(f,c),s.held=!0):await re(f,{force:!0})),s.ffmpeg=A(z),o||(J+=i,ve()),o){const $e=new Set(t.junction?[t.junction.from.key,t.part.key]:[t.part.key]),te=await ct($e);if(te.length>0)throw new Ut("draw-failed",`Drawing ${s.key} failed, so it is not rendered: ${te.map(W=>`${W.code} ${W.message}${W.t===void 0?"":` (at ${W.t.toFixed(2)} s)`}`).join("; ")}`,{exit:St.failed,hint:"allyhub frames --at and allyhub inspect layout --at draw that moment; fix what failed and render again."})}}),g=t.keep<t.frames,j=Z[e];if(K&&j){const c=await K.segment(j,P,u);g?await Je(c.file,p,t.keep):await nn(c.file,p),c.cached&&(t.junction?Le++:We++,s.cached=!0,J+=i,ve())}else if(g){const c=S(H,`whole.${String(e).padStart(4,"0")}.${P}`);await u(c),await Je(c,p,t.keep),await re(c,{force:!0})}else await u(p);s.captured=m.captured,s.reused=m.reused,s.end=A(me)},Ue=(await Promise.allSettled(E.map((e,t)=>mt(t,e).catch(n=>{throw Pe.abort(n),n})))).find(e=>e.status==="rejected");if(Ue)throw Ue.reason;await Promise.all(le),h.parts=A(lt);const $=await(N??He()),xe=$?.loudness;a.onProgress?.(.95),F.throwIfAborted();const pt=performance.now();let U;if(d==="png"){const e=a.out.replace(/\.png$/,"");U=[];const t=(await bt(ee)).filter(n=>/^frame\.\d+\.png$/.test(n)).sort();for(const n of t){F.throwIfAborted();const o=`${e}.${n.slice(6)}`;V.push(o),await Ne(S(ee,n),o),U.push(o)}D&&xe&&(V.push(`${e}.wav`),await Ne(D,`${e}.wav`),U.push(`${e}.wav`))}else if(d==="gif")V.push(a.out),await de(y,["-v","error","-y","-framerate",pe.text,"-start_number","1","-i",S(ee,"frame.%05d.png"),"-filter_complex","split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=sierra2_4a","-r",pe.text,"-loop","0",a.out],void 0,F);else{if(C){const n=C.bufferKbps*1e3;let o=Bt*n;for(const[i,s]of ie.entries()){const k=await Ge(s,T);if(!k)continue;const m=qe(k,C,l,o);if(!m.breaks){o=m.end;continue}const O=G(k.length,!0,o/n),x=r=>de(y,["-v","error","-y","-i",s,"-an",...O,r],void 0,F);let p=S(H,`held.${String(i)}.mp4`);const v=Z[i];K&&v?p=(await K.segment(nt(Buffer.from(JSON.stringify(["held across the join",v,O]))),P,x)).file:await x(p),ie[i]=p,h.capped=(h.capped??0)+1,o=qe(await Ge(p,T)??k,C,l,o).end}}const e=S(H,"segments.txt");await Mt(e,ie.map(n=>`file '${n.replace(/'/g,"'\\''")}'
|
|
3
|
+
`).join(""));const t=d==="mov"?["-c:a","pcm_s24le"]:d==="webm"?["-c:a","libopus","-b:a",`${String(a.encode?.audioBitrate??160)}k`]:["-c:a","aac","-b:a",`${String(a.encode?.audioBitrate??192)}k`];V.push(a.out),await de(y,["-v","error","-y","-f","concat","-safe","0","-i",e,...D===void 0?[]:["-i",D],"-map","0:v",...D===void 0?[]:["-map","1:a"],"-c:v","copy",...D===void 0?[]:t,...d==="mp4"||d==="mov"?["-movflags","+faststart"]:[],...ge,a.out],void 0,F)}V.length=0,h.mux=A(pt),a.onProgress?.(1);const Xe=U??[a.out];let Ye=0;for(const e of Xe)Ye+=(await xt(e)).size;return{out:Xe[0]??a.out,frames:Fe,duration:Fe/l,bytes:Ye,...xe?{loudness:xe}:{},...$?.gainDb!==void 0?{master:{...$.before?{before:$.before}:{},gainDb:$.gainDb,...$.limited===void 0?{}:{limited:$.limited},target:$.target,...$.rounds===void 0?{}:{rounds:$.rounds}}}:{},...U?{files:U}:{},parts:{total:E.filter(e=>!e.junction).length,cached:We},...E.some(e=>e.junction)?{junctions:{total:E.filter(e=>e.junction).length,cached:Le}}:{},timings:{...h,total:A(me),part:h.part.map(e=>({...e,capture:Math.round(e.capture*1e3)/1e3,waitFrames:Math.round(e.waitFrames*1e3)/1e3,waitPipe:Math.round(e.waitPipe*1e3)/1e3}))}}}finally{await Promise.allSettled([...le,...N?[N]:[]]),await rt(),await Promise.all(V.map(q=>re(q,{force:!0}))),await re(H,{recursive:!0,force:!0})}}
|