@hypit/hypit 0.1.3 → 0.1.5
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/README.md +5 -3
- package/dist/public/caption.d.ts +206 -183
- package/dist/public/composition.d.ts +25 -3
- package/dist/public/endpoint-kit.d.ts +24 -2
- package/dist/public/generation.d.ts +5 -1
- package/dist/public/hyperframes.d.ts +19 -1
- package/dist/public/narrative.d.ts +17 -3
- package/dist/public/performance.d.ts +1590 -0
- package/dist/public/program-space.d.ts +179 -32
- package/dist/public/runtime-kit.d.ts +21 -8
- package/dist/public/sound.d.ts +822 -0
- package/dist/public/speech.d.ts +41 -0
- package/dist/public/studio-adapter.d.ts +107 -16
- package/dist/public/temporal-markup.d.ts +9 -44
- package/dist/public/temporal.d.ts +37 -28
- package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
- package/examples/README.md +18 -10
- package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
- package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
- package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
- package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
- package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
- package/examples/provider-package/README.md +78 -0
- package/examples/provider-package/hypit.runtime.json +12 -0
- package/examples/provider-package/packages/provider-images/package.json +11 -0
- package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
- package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
- package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
- package/examples/semantic-composition/README.md +6 -0
- package/examples/semantic-composition/chat.svml +6 -5
- package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
- package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
- package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
- package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
- package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
- package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
- package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
- package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
- package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
- package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
- package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
- package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
- package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
- package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
- package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
- package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
- package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
- package/package.json +35 -15
- package/packages/audio-track/README.md +20 -13
- package/packages/audio-track/package.json +1 -1
- package/packages/audio-track/src/component.ts +4 -4
- package/packages/audio-track/src/fragment.ts +6 -5
- package/packages/audio-track/src/index.ts +1 -1
- package/packages/audio-track/src/manifest.ts +17 -16
- package/packages/audio-track/src/program.ts +21 -25
- package/packages/audio-track/src/surface.ts +19 -18
- package/packages/audio-track-studio/README.md +23 -0
- package/packages/audio-track-studio/src/index.ts +33 -19
- package/packages/author-kit/README.md +1 -1
- package/packages/background-removal/README.md +4 -7
- package/packages/browser-capture/package.json +1 -1
- package/packages/build-result/README.md +69 -0
- package/packages/build-result/package.json +2 -1
- package/packages/build-result/src/decode.ts +12 -8
- package/packages/build-result/src/execution-log.ts +17 -0
- package/packages/build-result/src/file-reference.ts +42 -0
- package/packages/build-result/src/index.ts +4 -0
- package/packages/build-result/src/replace-file-windows.ts +58 -0
- package/packages/build-result/src/replace-file.ts +11 -0
- package/packages/build-result/src/store.ts +58 -14
- package/packages/build-result/src/types.ts +41 -8
- package/packages/build-result/src/writer.ts +12 -1
- package/packages/build-result-fs/README.md +23 -1
- package/packages/build-result-s3/README.md +5 -0
- package/packages/build-result-s3/src/repository.ts +23 -5
- package/packages/caption/README.md +61 -73
- package/packages/caption/package.json +3 -2
- package/packages/caption/src/activation.ts +2 -2
- package/packages/caption/src/component.ts +20 -5
- package/packages/caption/src/display.ts +3 -18
- package/packages/caption/src/fragment.ts +3 -7
- package/packages/caption/src/index.ts +6 -5
- package/packages/caption/src/manifest.ts +29 -46
- package/packages/caption/src/style.ts +24 -135
- package/packages/caption/src/surface.ts +12 -92
- package/packages/caption/src/temporalize.ts +18 -53
- package/packages/caption/src/types.ts +8 -35
- package/packages/caption/src/visibility.ts +23 -0
- package/packages/caption-fine/README.md +31 -11
- package/packages/caption-fine/package.json +4 -2
- package/packages/caption-fine/src/component.ts +3 -3
- package/packages/caption-fine/src/fragment.ts +7 -19
- package/packages/caption-fine/src/index.ts +2 -0
- package/packages/caption-fine/src/manifest.ts +27 -18
- package/packages/caption-fine/src/recipe.ts +7 -0
- package/packages/caption-fine/src/render.ts +62 -49
- package/packages/caption-fine/src/schedule.ts +39 -35
- package/packages/caption-fine/src/style.ts +10 -9
- package/packages/caption-fine/src/surface.ts +62 -35
- package/packages/caption-fine/src/types.ts +2 -0
- package/packages/caption-fine-studio/README.md +24 -2
- package/packages/caption-fine-studio/package.json +10 -3
- package/packages/caption-fine-studio/src/activation.ts +3 -3
- package/packages/caption-fine-studio/src/index.ts +61 -40
- package/packages/cli/README.md +81 -3
- package/packages/cli/package.json +1 -0
- package/packages/cli/src/arguments.ts +39 -15
- package/packages/cli/src/build-planning.ts +9 -3
- package/packages/cli/src/command.ts +7 -1
- package/packages/cli/src/commands/environment.ts +66 -27
- package/packages/cli/src/commands/execution.ts +81 -26
- package/packages/cli/src/commands/results.ts +7 -11
- package/packages/cli/src/index.ts +2 -2
- package/packages/cli/src/machine-view.ts +15 -5
- package/packages/cli/src/main.ts +38 -42
- package/packages/cli/src/observation.ts +7 -1
- package/packages/cli/src/output.ts +92 -34
- package/packages/cli/src/result-export.ts +22 -13
- package/packages/cli/src/run-file.ts +19 -8
- package/packages/cli/src/view.ts +64 -18
- package/packages/comment-sticker/README.md +3 -3
- package/packages/comment-sticker/package.json +1 -1
- package/packages/comment-sticker/src/component.ts +4 -4
- package/packages/comment-sticker/src/fragment.ts +5 -4
- package/packages/comment-sticker/src/manifest.ts +7 -6
- package/packages/comment-sticker/src/program.ts +9 -9
- package/packages/comment-sticker/src/surface.ts +6 -7
- package/packages/comment-sticker-studio/src/index.ts +2 -1
- package/packages/compiler-node/src/compiler.ts +1 -0
- package/packages/composition/README.md +21 -0
- package/packages/composition/src/audio-presentation.ts +44 -0
- package/packages/composition/src/index.ts +3 -0
- package/packages/composition/src/schema.ts +8 -3
- package/packages/composition/src/track.ts +15 -1
- package/packages/credential-store-env/README.md +1 -1
- package/packages/deck-track/README.md +3 -3
- package/packages/deck-track/package.json +1 -1
- package/packages/deck-track/src/component.ts +5 -5
- package/packages/deck-track/src/fragment.ts +6 -5
- package/packages/deck-track/src/lower.ts +12 -12
- package/packages/deck-track/src/manifest.ts +8 -7
- package/packages/deck-track/src/program.ts +13 -16
- package/packages/deck-track/src/surface.ts +9 -10
- package/packages/driver-node/src/driver.ts +41 -3
- package/packages/elevenlabs-speech/README.md +27 -0
- package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
- package/packages/elevenlabs-speech/src/activation.ts +26 -0
- package/packages/elevenlabs-speech/src/fragment.ts +11 -0
- package/packages/elevenlabs-speech/src/index.ts +111 -0
- package/packages/elevenlabs-speech/src/surface.ts +167 -0
- package/packages/endpoint-kit/README.md +24 -0
- package/packages/endpoint-kit/src/index.ts +7 -1
- package/packages/estimate/README.md +56 -3
- package/packages/estimate/src/program.ts +7 -8
- package/packages/film/README.md +12 -7
- package/packages/film/package.json +1 -1
- package/packages/film/src/component.ts +4 -4
- package/packages/film/src/fragment.ts +6 -5
- package/packages/film/src/manifest.ts +11 -10
- package/packages/film/src/program.ts +5 -5
- package/packages/film/src/recipe.ts +2 -1
- package/packages/film/src/surface.ts +6 -6
- package/packages/film-studio/package.json +1 -1
- package/packages/film-studio/src/index.ts +2 -2
- package/packages/fishaudio-speech/README.md +33 -0
- package/packages/fishaudio-speech/package.json +21 -0
- package/packages/fishaudio-speech/src/activation.ts +32 -0
- package/packages/fishaudio-speech/src/fragment.ts +11 -0
- package/packages/fishaudio-speech/src/index.ts +156 -0
- package/packages/fishaudio-speech/src/surface.ts +192 -0
- package/packages/fonts-open/README.md +5 -0
- package/packages/fonts-open/package.json +5 -1
- package/packages/fonts-open/src/studio.ts +21 -0
- package/packages/generation/README.md +11 -1
- package/packages/generation/src/mapping.ts +28 -30
- package/packages/gpt-image/README.md +1 -2
- package/packages/grok-imagine/README.md +1 -2
- package/packages/hyperframes/README.md +7 -3
- package/packages/hyperframes/src/browser-program.ts +11 -2
- package/packages/hyperframes/src/document.ts +15 -2
- package/packages/interview-emoji-reveal/README.md +4 -4
- package/packages/interview-emoji-reveal/package.json +1 -1
- package/packages/interview-emoji-reveal/src/component.ts +4 -4
- package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
- package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
- package/packages/interview-emoji-reveal/src/program.ts +14 -14
- package/packages/interview-emoji-reveal/src/surface.ts +8 -9
- package/packages/media-execution/README.md +7 -3
- package/packages/media-execution/src/audio-presentation.ts +23 -0
- package/packages/media-execution/src/execute.ts +2 -0
- package/packages/media-pipeline/README.md +7 -3
- package/packages/media-pipeline/src/audio-plan.ts +4 -1
- package/packages/media-pipeline/src/component.ts +16 -2
- package/packages/media-pipeline/src/manifest.ts +3 -1
- package/packages/media-pipeline/src/types.ts +2 -1
- package/packages/media-track/README.md +14 -47
- package/packages/media-track/package.json +1 -1
- package/packages/media-track/preview/preview.svml +5 -5
- package/packages/media-track/src/author.ts +12 -6
- package/packages/media-track/src/component.ts +10 -16
- package/packages/media-track/src/fragment.ts +8 -7
- package/packages/media-track/src/index.ts +3 -1
- package/packages/media-track/src/lower.ts +7 -7
- package/packages/media-track/src/manifest.ts +16 -38
- package/packages/media-track/src/program.ts +62 -67
- package/packages/media-track/src/sampling.ts +6 -6
- package/packages/media-track/src/sequence.ts +8 -8
- package/packages/media-track/src/surface.ts +25 -43
- package/packages/media-track-studio/README.md +9 -0
- package/packages/media-track-studio/src/index.ts +23 -13
- package/packages/mimo-speech/README.md +1 -1
- package/packages/minimax-h3/README.md +1 -1
- package/packages/nano-banana/README.md +1 -1
- package/packages/narrative/README.md +23 -1
- package/packages/narrative/src/identity.ts +11 -0
- package/packages/narrative/src/index.ts +3 -0
- package/packages/narrative/src/schema.ts +28 -27
- package/packages/narrative/src/selection.ts +52 -0
- package/packages/narrative/src/types.ts +2 -0
- package/packages/package-loader-node/README.md +30 -0
- package/packages/package-loader-node/package.json +5 -2
- package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
- package/packages/package-loader-node/src/index.ts +1 -0
- package/packages/package-loader-node/src/loader.ts +12 -15
- package/packages/package-loader-node/src/location.ts +27 -1
- package/packages/package-loader-node/src/module-scope.ts +183 -0
- package/packages/package-loader-node/src/types.ts +4 -0
- package/packages/performance/README.md +83 -0
- package/packages/performance/package.json +30 -0
- package/packages/performance/src/activation.ts +11 -0
- package/packages/performance/src/component.ts +46 -0
- package/packages/performance/src/index.ts +6 -0
- package/packages/performance/src/manifest.ts +53 -0
- package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
- package/packages/performance/src/program.ts +51 -0
- package/packages/performance/src/style.ts +35 -0
- package/packages/performance/src/surface.ts +99 -0
- package/packages/performance-studio/README.md +25 -0
- package/packages/performance-studio/package.json +21 -0
- package/packages/performance-studio/src/activation.ts +6 -0
- package/packages/performance-studio/src/index.ts +84 -0
- package/packages/program-space/README.md +9 -18
- package/packages/program-space/src/activation.ts +1 -5
- package/packages/program-space/src/index.ts +2 -11
- package/packages/program-space/src/surface.ts +1 -20
- package/packages/project-context-node/README.md +20 -0
- package/packages/project-context-node/package.json +10 -0
- package/packages/project-context-node/src/index.ts +3 -0
- package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
- package/packages/provider-hyperframes-local/README.md +43 -15
- package/packages/provider-hyperframes-local/src/activation.ts +4 -3
- package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
- package/packages/provider-hyperframes-local/src/capture.ts +96 -26
- package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
- package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
- package/packages/provider-hyperframes-local/src/options.ts +2 -0
- package/packages/provider-hyperframes-local/src/program.ts +6 -3
- package/packages/provider-hyperframes-local/src/progress.ts +53 -0
- package/packages/provider-hyperframes-local/src/provider.ts +18 -5
- package/packages/provider-hyperframes-local/src/render.ts +48 -7
- package/packages/provider-hypihub/README.md +48 -17
- package/packages/provider-hypihub/package.json +2 -0
- package/packages/provider-hypihub/src/mapping.ts +31 -7
- package/packages/provider-hypihub/src/oauth.ts +6 -0
- package/packages/provider-hypihub/src/provider.ts +25 -13
- package/packages/provider-hypihub/src/routes.ts +1 -2
- package/packages/provider-hypihub/src/upload.ts +2 -0
- package/packages/provider-media-local/README.md +3 -4
- package/packages/provider-whisperx-local/README.md +57 -0
- package/packages/provider-whisperx-local/src/program.ts +1 -0
- package/packages/provider-whisperx-local/src/provider.ts +3 -0
- package/packages/ranking/README.md +8 -6
- package/packages/ranking/package.json +1 -1
- package/packages/ranking/src/component.ts +6 -6
- package/packages/ranking/src/fragment.ts +11 -7
- package/packages/ranking/src/manifest.ts +21 -14
- package/packages/ranking/src/render.ts +33 -35
- package/packages/ranking/src/schedule.ts +16 -19
- package/packages/ranking/src/surface.ts +12 -13
- package/packages/ranking-studio/README.md +29 -0
- package/packages/ranking-studio/package.json +8 -3
- package/packages/ranking-studio/src/index.ts +71 -12
- package/packages/render-hyperframes/README.md +7 -7
- package/packages/render-hyperframes/package.json +1 -1
- package/packages/render-hyperframes/src/component.ts +11 -1
- package/packages/render-hyperframes/src/fragment.ts +7 -4
- package/packages/render-hyperframes/src/manifest.ts +4 -4
- package/packages/render-hyperframes/src/surface.ts +6 -6
- package/packages/runtime/README.md +8 -1
- package/packages/runtime/src/catalog.ts +2 -0
- package/packages/runtime/src/execution.ts +15 -4
- package/packages/runtime/src/index.ts +2 -1
- package/packages/runtime/src/log.ts +51 -0
- package/packages/runtime/src/types.ts +5 -8
- package/packages/runtime-host-node/README.md +30 -0
- package/packages/runtime-host-node/package.json +1 -0
- package/packages/runtime-host-node/src/index.ts +25 -9
- package/packages/runtime-host-node/src/packages.ts +47 -50
- package/packages/runtime-kit/README.md +5 -0
- package/packages/runtime-kit/src/index.ts +3 -1
- package/packages/runtime-local/README.md +111 -4
- package/packages/runtime-local/src/config.ts +202 -56
- package/packages/runtime-local/src/control.ts +9 -1
- package/packages/runtime-local/src/executor.ts +66 -0
- package/packages/runtime-local/src/host.ts +37 -17
- package/packages/runtime-local/src/log.ts +48 -0
- package/packages/runtime-local/src/programs.ts +41 -25
- package/packages/runtime-local/src/result-writer.ts +2 -0
- package/packages/runtime-local/src/runtime.ts +10 -6
- package/packages/runtime-local/src/supervisor.ts +142 -0
- package/packages/runtime-local/src/types.ts +9 -2
- package/packages/runtime-local/src/worker-process.ts +7 -24
- package/packages/runtime-local/src/worker.ts +55 -83
- package/packages/screen-overlay/README.md +3 -3
- package/packages/screen-overlay/package.json +1 -1
- package/packages/screen-overlay/src/component.ts +3 -3
- package/packages/screen-overlay/src/fragment.ts +5 -4
- package/packages/screen-overlay/src/manifest.ts +7 -6
- package/packages/screen-overlay/src/program.ts +9 -9
- package/packages/screen-overlay/src/surface.ts +6 -7
- package/packages/script/README.md +37 -2
- package/packages/script/src/edit.ts +123 -73
- package/packages/script/src/lexical.ts +40 -6
- package/packages/script/src/manifest.ts +2 -2
- package/packages/script/src/narrative.ts +1 -0
- package/packages/script/src/parser.ts +36 -8
- package/packages/script/src/surface.ts +4 -3
- package/packages/script/src/types.ts +5 -1
- package/packages/script-studio/package.json +9 -3
- package/packages/script-studio/src/index.ts +2 -0
- package/packages/script-studio/src/projection.ts +105 -0
- package/packages/seedance/README.md +30 -1
- package/packages/seedance/src/index.ts +18 -7
- package/packages/seedance/src/surface.ts +17 -4
- package/packages/seedance-kits/README.md +10 -2
- package/packages/seedance-kits/kits/speaker-v1.svs +5 -5
- package/packages/seedream/README.md +1 -1
- package/packages/sound/README.md +81 -0
- package/packages/sound/package.json +25 -0
- package/packages/sound/src/activation.ts +11 -0
- package/packages/sound/src/component.ts +28 -0
- package/packages/sound/src/index.ts +5 -0
- package/packages/sound/src/manifest.ts +47 -0
- package/packages/sound/src/program.ts +84 -0
- package/packages/sound/src/style.ts +34 -0
- package/packages/sound/src/surface.ts +90 -0
- package/packages/sound-studio/README.md +22 -0
- package/packages/sound-studio/package.json +20 -0
- package/packages/sound-studio/src/activation.ts +6 -0
- package/packages/sound-studio/src/index.ts +74 -0
- package/packages/speech/README.md +2 -2
- package/packages/speech-alignment/src/align.ts +45 -21
- package/packages/speech-alignment/src/local.ts +8 -0
- package/packages/speech-alignment/src/locate.ts +1 -1
- package/packages/store-sqlite/README.md +7 -0
- package/packages/store-sqlite/src/store.ts +84 -83
- package/packages/studio/INSPECTOR.md +117 -0
- package/packages/studio/README.md +149 -14
- package/packages/studio/package.json +8 -7
- package/packages/studio/src/build-library.ts +99 -84
- package/packages/studio/src/companion-assembly.ts +1 -0
- package/packages/studio/src/domain.ts +1 -1
- package/packages/studio/src/fallback-companions.ts +3 -3
- package/packages/studio/src/feedback-server.ts +51 -0
- package/packages/studio/src/feedback-store.ts +66 -0
- package/packages/studio/src/feedback.ts +60 -0
- package/packages/studio/src/library-media.ts +19 -0
- package/packages/studio/src/parameter-values.ts +83 -1
- package/packages/studio/src/parameters.ts +132 -43
- package/packages/studio/src/preview/render.ts +5 -1
- package/packages/studio/src/preview/runtime-shim.ts +49 -3
- package/packages/studio/src/programme.ts +14 -30
- package/packages/studio/src/server.ts +66 -34
- package/packages/studio/src/shared.ts +24 -8
- package/packages/studio/src/snapshot.ts +21 -132
- package/packages/studio/src/studio-preflight.ts +3 -3
- package/packages/studio/src/studio-registry.ts +72 -6
- package/packages/studio/src/style.css +342 -190
- package/packages/studio/src/temporal-edit.ts +131 -0
- package/packages/studio/src/ui/artifact-name.ts +80 -0
- package/packages/studio/src/ui/artifact-preview.ts +99 -0
- package/packages/studio/src/ui/comments.ts +233 -0
- package/packages/studio/src/ui/icons.ts +10 -1
- package/packages/studio/src/ui/library.ts +373 -192
- package/packages/studio/src/ui/main.ts +291 -110
- package/packages/studio/src/ui/material-preview.ts +1 -1
- package/packages/studio/src/ui/overlay.ts +31 -26
- package/packages/studio/src/ui/scrub-preview.ts +108 -0
- package/packages/studio/src/ui/sidebar-panel.ts +31 -0
- package/packages/studio/src/ui/stage.ts +188 -9
- package/packages/studio/src/ui/timeline.ts +187 -281
- package/packages/studio/start.ts +19 -5
- package/packages/studio-adapter/README.md +151 -11
- package/packages/studio-adapter/src/index.ts +126 -14
- package/packages/temporal/README.md +6 -6
- package/packages/temporal/package.json +1 -1
- package/packages/temporal/src/component.ts +5 -6
- package/packages/temporal/src/index.ts +8 -6
- package/packages/temporal/src/location.ts +11 -11
- package/packages/temporal/src/projection.ts +19 -19
- package/packages/temporal/src/rational.ts +4 -4
- package/packages/temporal-markup/EDITING.md +183 -0
- package/packages/temporal-markup/README.md +31 -11
- package/packages/temporal-markup/package.json +1 -1
- package/packages/temporal-markup/src/index.ts +20 -25
- package/packages/temporal-markup/src/space.ts +10 -41
- package/packages/timeline/README.md +31 -0
- package/packages/{semantic-track → timeline}/package.json +1 -1
- package/packages/timeline/src/activation.ts +8 -0
- package/packages/timeline/src/component.ts +24 -0
- package/packages/timeline/src/identity.ts +60 -0
- package/packages/timeline/src/index.ts +6 -0
- package/packages/{semantic-track → timeline}/src/location.ts +20 -20
- package/packages/timeline/src/manifest.ts +39 -0
- package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
- package/packages/timeline/src/types.ts +24 -0
- package/packages/timeline-author/README.md +68 -0
- package/packages/{speech-track → timeline-author}/package.json +6 -4
- package/packages/timeline-author/src/activation.ts +22 -0
- package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
- package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
- package/packages/timeline-author/src/index.ts +7 -0
- package/packages/timeline-author/src/manifest.ts +78 -0
- package/packages/timeline-author/src/program.ts +107 -0
- package/packages/timeline-author/src/surface.ts +46 -0
- package/packages/timeline-author/src/types.ts +6 -0
- package/packages/typography-track/README.md +4 -4
- package/packages/typography-track/package.json +1 -1
- package/packages/typography-track/src/component.ts +4 -4
- package/packages/typography-track/src/fragment.ts +4 -3
- package/packages/typography-track/src/manifest.ts +11 -9
- package/packages/typography-track/src/program.ts +15 -15
- package/packages/typography-track/src/surface.ts +17 -18
- package/packages/typography-track-studio/package.json +8 -3
- package/packages/typography-track-studio/src/index.ts +5 -1
- package/packages/video-cli/README.md +16 -4
- package/packages/video-cli/package.json +2 -1
- package/packages/video-cli/src/creation.ts +25 -9
- package/packages/video-cli/src/index.ts +1 -1
- package/packages/video-cli/src/studio-distribution.ts +2 -1
- package/packages/volcengine-matting/README.md +3 -3
- package/packages/whisperx/README.md +8 -1
- package/packages/workspace/src/index.ts +2 -0
- package/packages/workspace-fs-node/README.md +4 -1
- package/packages/workspace-fs-node/src/workspace.ts +3 -1
- package/services/whisperx/README.md +14 -0
- package/services/whisperx/pyproject.toml +2 -0
- package/services/whisperx/uv.lock +20 -20
- package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
- package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
- package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
- package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
- package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
- package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
- package/packages/provider-kie/README.md +0 -134
- package/packages/provider-kie/package.json +0 -43
- package/packages/provider-kie/src/activation.ts +0 -71
- package/packages/provider-kie/src/index.ts +0 -10
- package/packages/provider-kie/src/mapping.ts +0 -182
- package/packages/provider-kie/src/provider.ts +0 -657
- package/packages/provider-kie/src/routes.ts +0 -150
- package/packages/provider-xiaomi-mimo/README.md +0 -32
- package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
- package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
- package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
- package/packages/runtime/src/environment.ts +0 -6
- package/packages/semantic-track/README.md +0 -21
- package/packages/semantic-track/src/activation.ts +0 -8
- package/packages/semantic-track/src/component.ts +0 -24
- package/packages/semantic-track/src/identity.ts +0 -58
- package/packages/semantic-track/src/index.ts +0 -6
- package/packages/semantic-track/src/manifest.ts +0 -38
- package/packages/semantic-track/src/types.ts +0 -26
- package/packages/speech-track/README.md +0 -51
- package/packages/speech-track/src/activation.ts +0 -19
- package/packages/speech-track/src/index.ts +0 -7
- package/packages/speech-track/src/manifest.ts +0 -73
- package/packages/speech-track/src/program.ts +0 -64
- package/packages/speech-track/src/surface.ts +0 -35
- package/packages/speech-track/src/types.ts +0 -6
- package/packages/speech-track-studio/README.md +0 -3
- package/packages/speech-track-studio/package.json +0 -14
- package/packages/speech-track-studio/src/activation.ts +0 -7
- package/packages/speech-track-studio/src/index.ts +0 -40
- /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
- /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# `@hypit/ranking`
|
|
2
2
|
|
|
3
|
-
The Track Surface accepts `
|
|
4
|
-
|
|
3
|
+
The Track Surface accepts `timeline={program.timeline}`. The same Timeline supports authored
|
|
4
|
+
positions and, where prepared Takes supply evidence, Script Selections and Moments. Shared `at`
|
|
5
5
|
inputs accept a Moment or a time such as `2s`; `at` with `for` produces a Window where required.
|
|
6
6
|
|
|
7
7
|
Ranking boards that follow the argument of a video: introduce an item, give its verdict, and retain
|
|
@@ -20,12 +20,12 @@ where the selected schedule requires succession. Ending a reveal does not remove
|
|
|
20
20
|
|
|
21
21
|
## Bind the ranking to the target Script
|
|
22
22
|
|
|
23
|
-
This excerpt assumes the Script,
|
|
23
|
+
This excerpt assumes the Script, Timeline, Canvas, Frame and Style have been declared:
|
|
24
24
|
|
|
25
25
|
```svml
|
|
26
26
|
<import as="ranking" from="@hypit/ranking@1"/>
|
|
27
27
|
|
|
28
|
-
<ranking:Column id="priorities"
|
|
28
|
+
<ranking:Column id="priorities" timeline={speech.timeline} canvas={vertical}
|
|
29
29
|
frame={layout.ranking} during={story.segment.ranking} style={ranking-style}>
|
|
30
30
|
<ranking:ColumnItem rank="1" label="Winner" during={story.selection.winner}/>
|
|
31
31
|
<ranking:ColumnItem rank="2" preset="true" label="Already placed"/>
|
|
@@ -38,7 +38,9 @@ Window. TopThree instead accepts item `at` projections and a board `terminal` pr
|
|
|
38
38
|
can supply the intended trigger.
|
|
39
39
|
|
|
40
40
|
Each board publishes `.schedule`, `.program` and `.visual`. Optional normalized `appear-sound` or
|
|
41
|
-
`move-sound` inputs add `.audio` where that form supports them.
|
|
41
|
+
`move-sound` inputs add `.events` and `.audio` where that form supports them.
|
|
42
|
+
The event plan drives the audio from the same appearance and movement timing
|
|
43
|
+
as the visual animation. Include the wanted visual and audio
|
|
42
44
|
outputs as peers in Film. Labels can be literal or graph Text; Styles are typed SVS Recipes with
|
|
43
45
|
exact fonts. Use `hypit vocabulary @hypit/ranking --tag Column` (or another declared tag) for its
|
|
44
46
|
attributes, children, outputs and configured example.
|
|
@@ -50,7 +52,7 @@ The following files are included in the Distribution and show how the responsibi
|
|
|
50
52
|
| File | What to learn from it |
|
|
51
53
|
| --- | --- |
|
|
52
54
|
| [surface.ts](src/surface.ts) | `rankingSurface` resolves author inputs, projects the outer and item times through `createTemporalWindowProjection` / `createTemporalInstantProjection`, and retains the returned drafts and references. |
|
|
53
|
-
| [fragment.ts](src/fragment.ts) | `createRankingFragment` receives
|
|
55
|
+
| [fragment.ts](src/fragment.ts) | `createRankingFragment` receives Timeline and wires typed content, time, layout and Style inputs into finite operations. |
|
|
54
56
|
| [schedule.ts](src/schedule.ts) | Compute reveal, activation and settled spans from the projected times. |
|
|
55
57
|
| [component.ts](src/component.ts) and [render.ts](src/render.ts) | Build the ranking program and produce picture and optional sound from that schedule. |
|
|
56
58
|
| [manifest.ts](src/manifest.ts) and [activation.ts](src/activation.ts) | Publish Types, Producers, Surface vocabulary and package contributions. |
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"@hypit/narrative": "workspace:*",
|
|
20
20
|
"@hypit/program-space": "workspace:*",
|
|
21
21
|
"@hypit/protocol": "workspace:*",
|
|
22
|
-
"@hypit/
|
|
22
|
+
"@hypit/timeline": "workspace:*",
|
|
23
23
|
"@hypit/spatial": "workspace:*",
|
|
24
24
|
"@hypit/svs": "workspace:*",
|
|
25
25
|
"@hypit/temporal": "workspace:*",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { Timeline } from "@hypit/timeline";
|
|
1
2
|
import type { ComponentPackage, ProducerHandlerContext } from "@hypit/component-kit";
|
|
2
3
|
import type { SynchronizedMedia } from "@hypit/media";
|
|
3
|
-
import type { ProgramSpace } from "@hypit/program-space";
|
|
4
4
|
import { canonicalize } from "@hypit/protocol";
|
|
5
5
|
import type { BlobRef, StoredValue } from "@hypit/protocol";
|
|
6
6
|
import type { TemporalInstant, TemporalWindow } from "@hypit/temporal";
|
|
@@ -96,7 +96,7 @@ export const rankingComponent = {
|
|
|
96
96
|
producer: rankingProducers.schedule,
|
|
97
97
|
handler: ({ inputs }) => ({ outputs: { schedule: output(buildTriggeredRankingSchedule({
|
|
98
98
|
header: inline(inputs.header?.value, "RankingHeader"), items: inline(inputs.items?.value, "RankingItemSpecSet"),
|
|
99
|
-
|
|
99
|
+
timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
|
|
100
100
|
outer: inline<TemporalWindow>(inputs.outer?.value, "TemporalWindow"),
|
|
101
101
|
candidates: inline(inputs.candidates?.value, "TriggeredRankingCandidateSet"),
|
|
102
102
|
terminal: inline<TemporalInstant>(inputs.terminal?.value, "TemporalInstant"),
|
|
@@ -119,7 +119,7 @@ export const rankingComponent = {
|
|
|
119
119
|
handler: ({ inputs }) => ({ outputs: { schedule: output(buildTierBoardSchedule({
|
|
120
120
|
header: inline<RankingHeader>(inputs.header?.value, "RankingHeader"),
|
|
121
121
|
items: inline<RankingItemSpecSet>(inputs.items?.value, "RankingItemSpecSet"),
|
|
122
|
-
|
|
122
|
+
timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
|
|
123
123
|
outer: inline<TemporalWindow>(inputs.outer?.value, "TemporalWindow"),
|
|
124
124
|
windows: inline<TierBoardWindowSet>(inputs.windows?.value, "TierBoardWindowSet"),
|
|
125
125
|
})) }, needs: {} }),
|
|
@@ -141,7 +141,7 @@ export const rankingComponent = {
|
|
|
141
141
|
handler: ({ inputs }) => ({ outputs: { schedule: output(buildColumnSchedule({
|
|
142
142
|
header: inline<RankingHeader>(inputs.header?.value, "RankingHeader"),
|
|
143
143
|
items: inline<RankingItemSpecSet>(inputs.items?.value, "RankingItemSpecSet"),
|
|
144
|
-
|
|
144
|
+
timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
|
|
145
145
|
outer: inline<TemporalWindow>(inputs.outer?.value, "TemporalWindow"),
|
|
146
146
|
windows: inline<ColumnWindowSet>(inputs.windows?.value, "ColumnWindowSet"),
|
|
147
147
|
})) }, needs: {} }),
|
|
@@ -239,7 +239,7 @@ export const rankingComponent = {
|
|
|
239
239
|
{
|
|
240
240
|
producer: rankingProducers.renderAudio,
|
|
241
241
|
handler: ({ inputs }) => ({ outputs: { track: output(renderRankingAudio(
|
|
242
|
-
inline<
|
|
242
|
+
inline<Timeline>(inputs.timeline?.value, "Timeline"),
|
|
243
243
|
inline<RankingSoundEventPlan>(inputs.events?.value, "RankingSoundEventPlan"),
|
|
244
244
|
inline<RankingSoundStyle>(inputs.style?.value, "RankingSoundStyle"),
|
|
245
245
|
inline<RankingSoundSet>(inputs.sounds?.value, "RankingSoundSet"),
|
|
@@ -252,7 +252,7 @@ export const rankingComponent = {
|
|
|
252
252
|
] as const).map(([producer, render, label]) => ({
|
|
253
253
|
producer,
|
|
254
254
|
handler: ({ inputs }: ProducerHandlerContext) => ({ outputs: { track: output(render(
|
|
255
|
-
inline<
|
|
255
|
+
inline<Timeline>(inputs.timeline?.value, "Timeline"), inline(inputs.program?.value, label) as never,
|
|
256
256
|
)) }, needs: {} }),
|
|
257
257
|
})),
|
|
258
258
|
],
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { timelineTypes } from "@hypit/timeline";
|
|
2
|
+
|
|
2
3
|
import { compositionTypes } from "@hypit/composition";
|
|
3
4
|
import { sealGraphFragment } from "@hypit/elaborator";
|
|
4
5
|
import type { FragmentOperation, GraphFragment } from "@hypit/elaborator";
|
|
@@ -56,7 +57,7 @@ export function createRankingFragment(
|
|
|
56
57
|
const selected = definition(variant);
|
|
57
58
|
const inputs: Array<GraphFragment["inputs"][number]> = [
|
|
58
59
|
{ name: "header", type: rankingTypes.header },
|
|
59
|
-
{ name: "
|
|
60
|
+
{ name: "timeline", type: timelineTypes.track },
|
|
60
61
|
{ name: "outer", type: temporalTypes.window },
|
|
61
62
|
...(variant === "top-three" ? [
|
|
62
63
|
{ name: "terminal", type: temporalTypes.instant },
|
|
@@ -133,7 +134,7 @@ export function createRankingFragment(
|
|
|
133
134
|
operations.push({
|
|
134
135
|
id: "schedule",
|
|
135
136
|
producer: variant === "column" ? rankingProducers.columnSchedule : rankingProducers.tierSchedule,
|
|
136
|
-
inputs: { header: input("header"), items: specs,
|
|
137
|
+
inputs: { header: input("header"), items: specs, timeline: input("timeline"), outer: input("outer"), windows: candidates },
|
|
137
138
|
result: { kind: "output", name: "schedule" },
|
|
138
139
|
});
|
|
139
140
|
} else {
|
|
@@ -141,7 +142,7 @@ export function createRankingFragment(
|
|
|
141
142
|
id: "schedule",
|
|
142
143
|
producer: rankingProducers.schedule,
|
|
143
144
|
inputs: {
|
|
144
|
-
header: input("header"), items: specs,
|
|
145
|
+
header: input("header"), items: specs, timeline: input("timeline"),
|
|
145
146
|
outer: input("outer"), candidates, terminal: input("terminal"),
|
|
146
147
|
},
|
|
147
148
|
result: { kind: "output", name: "schedule" },
|
|
@@ -160,7 +161,7 @@ export function createRankingFragment(
|
|
|
160
161
|
operations.push({
|
|
161
162
|
id: "visual",
|
|
162
163
|
producer: selected.render,
|
|
163
|
-
inputs: {
|
|
164
|
+
inputs: { timeline: input("timeline"), program: operation("program") },
|
|
164
165
|
result: { kind: "output", name: "track" },
|
|
165
166
|
});
|
|
166
167
|
const hasAudio = sound.appearName !== undefined || sound.moveName !== undefined;
|
|
@@ -189,7 +190,7 @@ export function createRankingFragment(
|
|
|
189
190
|
}
|
|
190
191
|
operations.push({
|
|
191
192
|
id: "audio", producer: rankingProducers.renderAudio,
|
|
192
|
-
inputs: {
|
|
193
|
+
inputs: { timeline: input("timeline"), events: operation("events"), style: input("sound-style"), sounds },
|
|
193
194
|
result: { kind: "output", name: "track" },
|
|
194
195
|
});
|
|
195
196
|
}
|
|
@@ -200,7 +201,10 @@ export function createRankingFragment(
|
|
|
200
201
|
{ name: "schedule", type: rankingTypes.schedule, root: operation("schedule") },
|
|
201
202
|
{ name: "program", type: selected.program, root: operation("program") },
|
|
202
203
|
{ name: "visual", type: compositionTypes.visualTrack, root: operation("visual") },
|
|
203
|
-
...(hasAudio ? [
|
|
204
|
+
...(hasAudio ? [
|
|
205
|
+
{ name: "events", type: rankingTypes.soundEvents, root: operation("events") },
|
|
206
|
+
{ name: "audio", type: compositionTypes.audioTrack, root: operation("audio") },
|
|
207
|
+
] : []),
|
|
204
208
|
],
|
|
205
209
|
});
|
|
206
210
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { timelineTypes } from "@hypit/timeline";
|
|
1
2
|
import { temporalContextAttributeVocabulary } from "@hypit/temporal-markup";
|
|
2
3
|
import { readFile } from "node:fs/promises";
|
|
3
4
|
|
|
@@ -5,9 +6,9 @@ import { artifactDependency } from "@hypit/artifact";
|
|
|
5
6
|
import { compositionDependency, compositionTypes } from "@hypit/composition";
|
|
6
7
|
import { mediaDependency, mediaTypes } from "@hypit/media";
|
|
7
8
|
import { narrativeDependency, narrativeTypes } from "@hypit/narrative";
|
|
8
|
-
|
|
9
|
+
|
|
9
10
|
import type { ModuleManifest, ProducerRef, TypeRef, ValueSchema } from "@hypit/protocol";
|
|
10
|
-
import {
|
|
11
|
+
import { timelineDependency } from "@hypit/timeline";
|
|
11
12
|
import { spatialDependency, spatialFrameSchema, spatialTypes } from "@hypit/spatial";
|
|
12
13
|
import { svsRecipeType } from "@hypit/svs";
|
|
13
14
|
import { temporalDependency, temporalInstantSchema, temporalTypes, temporalWindowSchema } from "@hypit/temporal";
|
|
@@ -487,7 +488,7 @@ const allRankingMarkupSurfaces = [
|
|
|
487
488
|
"Every other property is refused by name.",
|
|
488
489
|
],
|
|
489
490
|
} },
|
|
490
|
-
{ name: "tier", tag: "TierBoard", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.tierProgram, compositionTypes.visualTrack, compositionTypes.audioTrack],
|
|
491
|
+
{ name: "tier", tag: "TierBoard", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.tierProgram, compositionTypes.visualTrack, rankingTypes.soundEvents, compositionTypes.audioTrack],
|
|
491
492
|
vocabulary: {
|
|
492
493
|
summary: "Places Items into tier rows from preset state or explicit reveal Selections, and publishes the board and the Tracks it renders to.",
|
|
493
494
|
appearance:
|
|
@@ -537,11 +538,13 @@ const allRankingMarkupSurfaces = [
|
|
|
537
538
|
summary: "The resolved board: its Frame, Style, Schedule and ordered Items." },
|
|
538
539
|
{ name: "visual", type: compositionTypes.visualTrack,
|
|
539
540
|
summary: "The rendered board, an ordinary peer VisualTrack." },
|
|
541
|
+
{ name: "events", type: rankingTypes.soundEvents,
|
|
542
|
+
summary: "Animation-linked sound events, published when a sound is authored." },
|
|
540
543
|
{ name: "audio", type: compositionTypes.audioTrack,
|
|
541
544
|
summary: "The rendered board sound, published only when a sound is authored." },
|
|
542
545
|
],
|
|
543
546
|
example: `<ranking:TierBoardStyle id="tier-style" recipe={recipes.ranking.tier} font={ui-font}/>
|
|
544
|
-
<ranking:TierBoard id="tiers"
|
|
547
|
+
<ranking:TierBoard id="tiers" timeline={speech.timeline} canvas={vertical} frame={board-frame}
|
|
545
548
|
during="program"
|
|
546
549
|
style={tier-style}>
|
|
547
550
|
<ranking:TierItem id="row-regen" tier="s" preset="true" icon={icon-regen}/>
|
|
@@ -555,7 +558,7 @@ const allRankingMarkupSurfaces = [
|
|
|
555
558
|
"Authoring either sound also connects the Style's `.sound` output, so `style` must name a TierBoardStyle written in this Source.",
|
|
556
559
|
],
|
|
557
560
|
} },
|
|
558
|
-
{ name: "column", tag: "Column", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, rankingTypes.textItemShell, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.columnProgram, compositionTypes.visualTrack, compositionTypes.audioTrack],
|
|
561
|
+
{ name: "column", tag: "Column", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, rankingTypes.textItemShell, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.columnProgram, compositionTypes.visualTrack, rankingTypes.soundEvents, compositionTypes.audioTrack],
|
|
559
562
|
vocabulary: {
|
|
560
563
|
summary: "Places rows by explicit rank, reveals each non-preset row in its own Segment or Selection, and publishes the board and the Tracks it renders to.",
|
|
561
564
|
appearance:
|
|
@@ -605,11 +608,13 @@ const allRankingMarkupSurfaces = [
|
|
|
605
608
|
summary: "The resolved board: its Frame, Style, Schedule and ordered Items." },
|
|
606
609
|
{ name: "visual", type: compositionTypes.visualTrack,
|
|
607
610
|
summary: "The rendered board, an ordinary peer VisualTrack." },
|
|
611
|
+
{ name: "events", type: rankingTypes.soundEvents,
|
|
612
|
+
summary: "Animation-linked sound events, published when a sound is authored." },
|
|
608
613
|
{ name: "audio", type: compositionTypes.audioTrack,
|
|
609
614
|
summary: "The rendered board sound, published only when a sound is authored." },
|
|
610
615
|
],
|
|
611
616
|
example: `<ranking:ColumnStyle id="board-style" recipe={recipes.ranking.board} font={ui-font}/>
|
|
612
|
-
<ranking:Column id="board"
|
|
617
|
+
<ranking:Column id="board" timeline={speech.timeline} canvas={vertical} frame={board-frame}
|
|
613
618
|
during={story.segment.ranking}
|
|
614
619
|
style={board-style}>
|
|
615
620
|
<ranking:ColumnItem id="row-regen" rank="1" label="ReGen" icon={icon-regen} during={story.selection.regen}/>
|
|
@@ -624,7 +629,7 @@ const allRankingMarkupSurfaces = [
|
|
|
624
629
|
"Authoring either sound also connects the Style's `.sound` output, so `style` must name a ColumnStyle written in this Source.",
|
|
625
630
|
],
|
|
626
631
|
} },
|
|
627
|
-
{ name: "top-three", tag: "TopThree", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, rankingTypes.textItemShell, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.topThreeProgram, compositionTypes.visualTrack, compositionTypes.audioTrack],
|
|
632
|
+
{ name: "top-three", tag: "TopThree", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, rankingTypes.textItemShell, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.topThreeProgram, compositionTypes.visualTrack, rankingTypes.soundEvents, compositionTypes.audioTrack],
|
|
628
633
|
vocabulary: {
|
|
629
634
|
summary: "Fills a podium one slot at a time at the Moment owned by each Item, and publishes the board and the Tracks it renders to.",
|
|
630
635
|
appearance:
|
|
@@ -667,11 +672,13 @@ const allRankingMarkupSurfaces = [
|
|
|
667
672
|
summary: "The resolved board: its Frame, Style, Schedule and ordered Items." },
|
|
668
673
|
{ name: "visual", type: compositionTypes.visualTrack,
|
|
669
674
|
summary: "The rendered board, an ordinary peer VisualTrack." },
|
|
675
|
+
{ name: "events", type: rankingTypes.soundEvents,
|
|
676
|
+
summary: "Animation-linked sound events, published when a sound is authored." },
|
|
670
677
|
{ name: "audio", type: compositionTypes.audioTrack,
|
|
671
678
|
summary: "The rendered board sound, published only when a sound is authored." },
|
|
672
679
|
],
|
|
673
680
|
example: `<ranking:TopThreeStyle id="podium-style" recipe={recipes.ranking.podium} font={ui-font}/>
|
|
674
|
-
<ranking:TopThree id="podium"
|
|
681
|
+
<ranking:TopThree id="podium" timeline={speech.timeline} frame={board-frame}
|
|
675
682
|
during={story.selection.board} terminal={story.moment.done}
|
|
676
683
|
style={podium-style}>
|
|
677
684
|
<ranking:TopThreeItem id="slot-gold" label="ReGen" icon={icon-regen} at={story.moment.regen}/>
|
|
@@ -692,7 +699,7 @@ export const rankingMarkupSurfaces = allRankingMarkupSurfaces;
|
|
|
692
699
|
|
|
693
700
|
export const rankingManifest: ModuleManifest = {
|
|
694
701
|
format: "hypit.module@1", name: rankingModuleRef.name, version: rankingModuleRef.version,
|
|
695
|
-
dependencies: [artifactDependency, mediaDependency, narrativeDependency,
|
|
702
|
+
dependencies: [artifactDependency, mediaDependency, narrativeDependency, timelineDependency, spatialDependency, temporalDependency, compositionDependency, textDependency],
|
|
696
703
|
types: [
|
|
697
704
|
{ name: rankingTypes.header.name },
|
|
698
705
|
{ name: rankingTypes.itemSpec.name },
|
|
@@ -729,7 +736,7 @@ export const rankingManifest: ModuleManifest = {
|
|
|
729
736
|
], outputs: [{ name: "set", type: rankingTypes.triggeredCandidates }], needs: [] },
|
|
730
737
|
{ name: rankingProducers.schedule.name, inputs: [
|
|
731
738
|
{ name: "header", type: rankingTypes.header }, { name: "items", type: rankingTypes.itemSpecs },
|
|
732
|
-
{ name: "
|
|
739
|
+
{ name: "timeline", type: timelineTypes.track },
|
|
733
740
|
{ name: "outer", type: temporalTypes.window }, { name: "candidates", type: rankingTypes.triggeredCandidates },
|
|
734
741
|
{ name: "terminal", type: temporalTypes.instant },
|
|
735
742
|
], outputs: [{ name: "schedule", type: rankingTypes.schedule }], needs: [] },
|
|
@@ -742,7 +749,7 @@ export const rankingManifest: ModuleManifest = {
|
|
|
742
749
|
], outputs: [{ name: "set", type: rankingTypes.tierWindows }], needs: [] },
|
|
743
750
|
{ name: rankingProducers.tierSchedule.name, inputs: [
|
|
744
751
|
{ name: "header", type: rankingTypes.header }, { name: "items", type: rankingTypes.itemSpecs },
|
|
745
|
-
{ name: "
|
|
752
|
+
{ name: "timeline", type: timelineTypes.track },
|
|
746
753
|
{ name: "outer", type: temporalTypes.window }, { name: "windows", type: rankingTypes.tierWindows },
|
|
747
754
|
], outputs: [{ name: "schedule", type: rankingTypes.schedule }], needs: [] },
|
|
748
755
|
{ name: rankingProducers.createColumnWindows.name, inputs: [], outputs: [
|
|
@@ -754,7 +761,7 @@ export const rankingManifest: ModuleManifest = {
|
|
|
754
761
|
], outputs: [{ name: "set", type: rankingTypes.columnWindows }], needs: [] },
|
|
755
762
|
{ name: rankingProducers.columnSchedule.name, inputs: [
|
|
756
763
|
{ name: "header", type: rankingTypes.header }, { name: "items", type: rankingTypes.itemSpecs },
|
|
757
|
-
{ name: "
|
|
764
|
+
{ name: "timeline", type: timelineTypes.track },
|
|
758
765
|
{ name: "outer", type: temporalTypes.window }, { name: "windows", type: rankingTypes.columnWindows },
|
|
759
766
|
], outputs: [{ name: "schedule", type: rankingTypes.schedule }], needs: [] },
|
|
760
767
|
...([
|
|
@@ -788,7 +795,7 @@ export const rankingManifest: ModuleManifest = {
|
|
|
788
795
|
{ name: eventProducer.name, inputs: [
|
|
789
796
|
{ name: "schedule", type: rankingTypes.schedule }, { name: "style", type: styleType }, { name: "specs", type: rankingTypes.itemSpecs },
|
|
790
797
|
], outputs: [{ name: "events", type: rankingTypes.soundEvents }], needs: [] },
|
|
791
|
-
{ name: renderProducer.name, inputs: [{ name: "
|
|
798
|
+
{ name: renderProducer.name, inputs: [{ name: "timeline", type: timelineTypes.track }, { name: "program", type: programType }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
|
|
792
799
|
]),
|
|
793
800
|
{ name: rankingProducers.createSounds.name, inputs: [], outputs: [{ name: "sounds", type: rankingTypes.sounds }], needs: [] },
|
|
794
801
|
...([
|
|
@@ -798,7 +805,7 @@ export const rankingManifest: ModuleManifest = {
|
|
|
798
805
|
name: producer.name, inputs: [{ name: "sounds", type: rankingTypes.sounds }, { name: "media", type: mediaTypes.synchronized }], outputs: [{ name: "sounds", type: rankingTypes.sounds }], needs: [],
|
|
799
806
|
})),
|
|
800
807
|
{ name: rankingProducers.renderAudio.name, inputs: [
|
|
801
|
-
{ name: "
|
|
808
|
+
{ name: "timeline", type: timelineTypes.track }, { name: "events", type: rankingTypes.soundEvents },
|
|
802
809
|
{ name: "style", type: rankingTypes.soundStyle }, { name: "sounds", type: rankingTypes.sounds },
|
|
803
810
|
], outputs: [{ name: "track", type: compositionTypes.audioTrack }], needs: [] },
|
|
804
811
|
],
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Timeline } from "@hypit/timeline";
|
|
1
2
|
import {
|
|
2
3
|
assertAudioTrackIdentity,
|
|
3
4
|
assertVisualTrackIdentity,
|
|
@@ -14,12 +15,7 @@ import type {
|
|
|
14
15
|
VisualTrack,
|
|
15
16
|
} from "@hypit/composition";
|
|
16
17
|
import { synchronizedMediaSampleFrames, verifySynchronizedMedia } from "@hypit/media";
|
|
17
|
-
import {
|
|
18
|
-
assertProgramSpaceIdentity,
|
|
19
|
-
programFrameSampleBoundary,
|
|
20
|
-
programSpaceSampleFrames,
|
|
21
|
-
} from "@hypit/program-space";
|
|
22
|
-
import type { ProgramSpace } from "@hypit/program-space";
|
|
18
|
+
import { assertProgramSpaceIdentity, programFrameSampleBoundary, programSpaceSampleFrames } from "@hypit/program-space";
|
|
23
19
|
|
|
24
20
|
import {
|
|
25
21
|
assertColumnProgram,
|
|
@@ -183,6 +179,7 @@ function iconElement(input: {
|
|
|
183
179
|
|
|
184
180
|
function present(input: {
|
|
185
181
|
readonly id: string;
|
|
182
|
+
readonly subjectId: string;
|
|
186
183
|
readonly start: number;
|
|
187
184
|
readonly end: number;
|
|
188
185
|
readonly stacking: number;
|
|
@@ -191,6 +188,7 @@ function present(input: {
|
|
|
191
188
|
}): VisualPresent {
|
|
192
189
|
return {
|
|
193
190
|
id: input.id,
|
|
191
|
+
subjectId: input.subjectId,
|
|
194
192
|
span: { startFrame: input.start, endFrameExclusive: input.end },
|
|
195
193
|
stacking: { order: input.stacking, tieBreak: input.tieBreak },
|
|
196
194
|
elements: input.elements,
|
|
@@ -251,14 +249,14 @@ function tierItemAnimation(
|
|
|
251
249
|
})));
|
|
252
250
|
}
|
|
253
251
|
|
|
254
|
-
function sealTrack(
|
|
255
|
-
const value = sealVisualTrack({ programSpaceId:
|
|
256
|
-
assertVisualTrackIdentity(value,
|
|
252
|
+
function sealTrack(timeline: Timeline, id: string, presents: readonly VisualPresent[]): VisualTrack {
|
|
253
|
+
const value = sealVisualTrack({ programSpaceId: timeline.id, visualIr: "hypit.visual-ir@1", id, presents });
|
|
254
|
+
assertVisualTrackIdentity(value, timeline);
|
|
257
255
|
return value;
|
|
258
256
|
}
|
|
259
257
|
|
|
260
|
-
export function renderTierBoard(
|
|
261
|
-
assertProgramSpaceIdentity(
|
|
258
|
+
export function renderTierBoard(timeline: Timeline, program: TierBoardProgram): VisualTrack {
|
|
259
|
+
assertProgramSpaceIdentity(timeline);
|
|
262
260
|
assertTierBoardProgram(program);
|
|
263
261
|
const { canvas, frame, style, schedule } = program;
|
|
264
262
|
const geometry = tierBoardGeometry(frame.widthPx, frame.heightPx, style);
|
|
@@ -307,7 +305,7 @@ export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram):
|
|
|
307
305
|
}));
|
|
308
306
|
}
|
|
309
307
|
presents.push(present({
|
|
310
|
-
id: `${program.id}:board`, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
|
|
308
|
+
id: `${program.id}:board`, subjectId: program.id, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
|
|
311
309
|
stacking: style.boardStackingOrder, tieBreak: `${program.id}:0000:board`, elements: boardElements,
|
|
312
310
|
}));
|
|
313
311
|
const entries = new Map(schedule.entries.map((entry) => [entry.itemId, entry]));
|
|
@@ -351,7 +349,7 @@ export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram):
|
|
|
351
349
|
: (localFrame) => fromHighTierItemPose(
|
|
352
350
|
localFrame, duration, stage, absoluteCell, style.motion.appearFrames, style.motion.moveFrames));
|
|
353
351
|
presents.push(present({
|
|
354
|
-
id: `${program.id}:item:${item.id}:reveal`,
|
|
352
|
+
id: `${program.id}:item:${item.id}:reveal`, subjectId: item.id,
|
|
355
353
|
start: entry.window.startFrame,
|
|
356
354
|
end: entry.window.endFrameExclusive,
|
|
357
355
|
stacking: item.stackingOrder ?? (item.entry === "drop" ? style.stageStackingOrder : style.itemStackingOrder),
|
|
@@ -360,7 +358,7 @@ export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram):
|
|
|
360
358
|
}));
|
|
361
359
|
}
|
|
362
360
|
if (entry.settled.endFrameExclusive > entry.settled.startFrame) presents.push(present({
|
|
363
|
-
id: `${program.id}:item:${item.id}:settled`,
|
|
361
|
+
id: `${program.id}:item:${item.id}:settled`, subjectId: item.id,
|
|
364
362
|
start: entry.settled.startFrame,
|
|
365
363
|
end: entry.settled.endFrameExclusive,
|
|
366
364
|
stacking: item.stackingOrder ?? style.itemStackingOrder,
|
|
@@ -368,7 +366,7 @@ export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram):
|
|
|
368
366
|
elements: itemElements(),
|
|
369
367
|
}));
|
|
370
368
|
}
|
|
371
|
-
return sealTrack(
|
|
369
|
+
return sealTrack(timeline, program.id, presents);
|
|
372
370
|
}
|
|
373
371
|
|
|
374
372
|
function rowY(frameY: number, frameHeight: number, padding: number, count: number, index: number, height: number, gap: number): number {
|
|
@@ -461,8 +459,8 @@ function columnRevealAnimation(input: {
|
|
|
461
459
|
]);
|
|
462
460
|
}
|
|
463
461
|
|
|
464
|
-
export function renderColumn(
|
|
465
|
-
assertProgramSpaceIdentity(
|
|
462
|
+
export function renderColumn(timeline: Timeline, program: ColumnProgram): VisualTrack {
|
|
463
|
+
assertProgramSpaceIdentity(timeline);
|
|
466
464
|
assertColumnProgram(program);
|
|
467
465
|
const { canvas, frame, style, schedule } = program;
|
|
468
466
|
const presents: VisualPresent[] = [];
|
|
@@ -506,7 +504,7 @@ export function renderColumn(space: ProgramSpace, program: ColumnProgram): Visua
|
|
|
506
504
|
],
|
|
507
505
|
}));
|
|
508
506
|
}
|
|
509
|
-
presents.push(present({ id: `${program.id}:board`, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
|
|
507
|
+
presents.push(present({ id: `${program.id}:board`, subjectId: program.id, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
|
|
510
508
|
stacking: style.boardStackingOrder, tieBreak: `${program.id}:0000:board`, elements: boardElements }));
|
|
511
509
|
for (const [index, item] of program.items.entries()) {
|
|
512
510
|
const entry = entries.get(item.id)!;
|
|
@@ -549,18 +547,18 @@ export function renderColumn(space: ProgramSpace, program: ColumnProgram): Visua
|
|
|
549
547
|
stageSize: style.stageSizePx, finalSize: contentSize, easing: style.motion.easing,
|
|
550
548
|
});
|
|
551
549
|
presents.push(present({
|
|
552
|
-
id: `${program.id}:item:${item.id}:stage`, start: entry.window.startFrame, end: entry.window.endFrameExclusive,
|
|
550
|
+
id: `${program.id}:item:${item.id}:stage`, subjectId: item.id, start: entry.window.startFrame, end: entry.window.endFrameExclusive,
|
|
553
551
|
stacking: item.stackingOrder ?? style.stageStackingOrder,
|
|
554
552
|
tieBreak: `${program.id}:item:${String(item.rank).padStart(4, "0")}:${item.id}:stage`, elements: itemElements(rootAnimation),
|
|
555
553
|
}));
|
|
556
554
|
}
|
|
557
555
|
if (entry.settled.endFrameExclusive > entry.settled.startFrame) presents.push(present({
|
|
558
|
-
id: `${program.id}:item:${item.id}:settled`, start: entry.settled.startFrame, end: entry.settled.endFrameExclusive,
|
|
556
|
+
id: `${program.id}:item:${item.id}:settled`, subjectId: item.id, start: entry.settled.startFrame, end: entry.settled.endFrameExclusive,
|
|
559
557
|
stacking: item.stackingOrder ?? style.itemStackingOrder,
|
|
560
558
|
tieBreak: `${program.id}:item:${String(item.rank).padStart(4, "0")}:${item.id}:settled`, elements: itemElements(),
|
|
561
559
|
}));
|
|
562
560
|
}
|
|
563
|
-
return sealTrack(
|
|
561
|
+
return sealTrack(timeline, program.id, presents);
|
|
564
562
|
}
|
|
565
563
|
|
|
566
564
|
function topSlotX(program: TopThreeProgram, index: number): number {
|
|
@@ -578,8 +576,8 @@ function activeAccentAnimation(duration: number, activeFrames: number): VisualAn
|
|
|
578
576
|
]);
|
|
579
577
|
}
|
|
580
578
|
|
|
581
|
-
export function renderTopThree(
|
|
582
|
-
assertProgramSpaceIdentity(
|
|
579
|
+
export function renderTopThree(timeline: Timeline, program: TopThreeProgram): VisualTrack {
|
|
580
|
+
assertProgramSpaceIdentity(timeline);
|
|
583
581
|
assertTopThreeProgram(program);
|
|
584
582
|
const { frame, style, schedule } = program;
|
|
585
583
|
const boardElements: VisualElement[] = [absoluteBox({
|
|
@@ -599,7 +597,7 @@ export function renderTopThree(space: ProgramSpace, program: TopThreeProgram): V
|
|
|
599
597
|
}));
|
|
600
598
|
}
|
|
601
599
|
const presents: VisualPresent[] = [present({
|
|
602
|
-
id: `${program.id}:slots`, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
|
|
600
|
+
id: `${program.id}:slots`, subjectId: program.id, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
|
|
603
601
|
stacking: style.boardStackingOrder, tieBreak: `${program.id}:0000:slots`, elements: boardElements,
|
|
604
602
|
})];
|
|
605
603
|
for (const [index, item] of program.items.entries()) {
|
|
@@ -640,43 +638,43 @@ export function renderTopThree(space: ProgramSpace, program: TopThreeProgram): V
|
|
|
640
638
|
return elements;
|
|
641
639
|
};
|
|
642
640
|
presents.push(present({
|
|
643
|
-
id: `${program.id}:item:${item.id}:stage`, start: entry.stage.startFrame, end: entry.stage.endFrameExclusive,
|
|
641
|
+
id: `${program.id}:item:${item.id}:stage`, subjectId: item.id, start: entry.stage.startFrame, end: entry.stage.endFrameExclusive,
|
|
644
642
|
stacking: item.stackingOrder ?? style.itemStackingOrder,
|
|
645
643
|
tieBreak: `${program.id}:item:${String(index).padStart(4, "0")}:${item.id}:stage`, elements: itemElements(true),
|
|
646
644
|
}));
|
|
647
645
|
if (entry.settled.endFrameExclusive > entry.settled.startFrame) presents.push(present({
|
|
648
|
-
id: `${program.id}:item:${item.id}:settled`, start: entry.settled.startFrame, end: entry.settled.endFrameExclusive,
|
|
646
|
+
id: `${program.id}:item:${item.id}:settled`, subjectId: item.id, start: entry.settled.startFrame, end: entry.settled.endFrameExclusive,
|
|
649
647
|
stacking: item.stackingOrder ?? style.itemStackingOrder,
|
|
650
648
|
tieBreak: `${program.id}:item:${String(index).padStart(4, "0")}:${item.id}:settled`, elements: itemElements(false),
|
|
651
649
|
}));
|
|
652
650
|
}
|
|
653
|
-
return sealTrack(
|
|
651
|
+
return sealTrack(timeline, program.id, presents);
|
|
654
652
|
}
|
|
655
653
|
|
|
656
654
|
export function renderRankingAudio(
|
|
657
|
-
|
|
655
|
+
timeline: Timeline,
|
|
658
656
|
plan: RankingSoundEventPlan,
|
|
659
657
|
style: RankingSoundStyle,
|
|
660
658
|
sounds: RankingSoundSet,
|
|
661
659
|
): AudioTrack {
|
|
662
|
-
assertProgramSpaceIdentity(
|
|
660
|
+
assertProgramSpaceIdentity(timeline);
|
|
663
661
|
assertRankingSoundEventPlan(plan);
|
|
664
662
|
assertRankingSoundStyle(style);
|
|
665
663
|
assert(sounds.appear !== undefined || sounds.move !== undefined, "Ranking audio requires at least one authored sound.");
|
|
666
664
|
if (sounds.appear !== undefined) verifySynchronizedMedia(sounds.appear);
|
|
667
665
|
if (sounds.move !== undefined) verifySynchronizedMedia(sounds.move);
|
|
668
|
-
const totalSamples = programSpaceSampleFrames(
|
|
669
|
-
const fadeSamples = programFrameSampleBoundary(
|
|
666
|
+
const totalSamples = programSpaceSampleFrames(timeline, 48_000);
|
|
667
|
+
const fadeSamples = programFrameSampleBoundary(timeline, style.fadeFrames, 48_000);
|
|
670
668
|
const clips: AudioClip[] = [];
|
|
671
669
|
for (const event of plan.events) {
|
|
672
670
|
const media = sounds[event.kind];
|
|
673
671
|
if (media === undefined) continue;
|
|
674
672
|
const audio = media.audio;
|
|
675
673
|
assert(audio !== undefined, `Ranking ${event.kind} sound has no normalized audio.`);
|
|
676
|
-
const startSample = programFrameSampleBoundary(
|
|
674
|
+
const startSample = programFrameSampleBoundary(timeline, event.frame, 48_000);
|
|
677
675
|
const sourceSampleFrames = synchronizedMediaSampleFrames(media);
|
|
678
676
|
const length = Math.min(sourceSampleFrames, totalSamples - startSample);
|
|
679
|
-
assert(length > 0, `Ranking sound ${event.id} starts after
|
|
677
|
+
assert(length > 0, `Ranking sound ${event.id} starts after Timeline.`);
|
|
680
678
|
assert(fadeSamples <= length, `Ranking sound ${event.id} fade exceeds its audible interval.`);
|
|
681
679
|
clips.push({
|
|
682
680
|
id: event.id,
|
|
@@ -692,7 +690,7 @@ export function renderRankingAudio(
|
|
|
692
690
|
if (sounds[kind] !== undefined) assert(clips.some((clip) => clip.id.endsWith(`:${kind}`)),
|
|
693
691
|
`Ranking ${kind} sound has no matching visual event.`);
|
|
694
692
|
}
|
|
695
|
-
const track = sealAudioTrack({ programSpaceId:
|
|
696
|
-
assertAudioTrackIdentity(track,
|
|
693
|
+
const track = sealAudioTrack({ programSpaceId: timeline.id, id: `${plan.id}.audio`, clips });
|
|
694
|
+
assertAudioTrackIdentity(track, timeline);
|
|
697
695
|
return track;
|
|
698
696
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
+
import type { Timeline } from "@hypit/timeline";
|
|
1
2
|
import {
|
|
2
3
|
assertFontArtifactRef,
|
|
3
4
|
verifySynchronizedMedia,
|
|
4
5
|
} from "@hypit/media";
|
|
5
6
|
import type { SynchronizedMedia } from "@hypit/media";
|
|
6
|
-
import {
|
|
7
|
-
assertProgramSpaceIdentity,
|
|
8
|
-
programSpaceFrameCount,
|
|
9
|
-
} from "@hypit/program-space";
|
|
10
|
-
import type { ProgramSpace } from "@hypit/program-space";
|
|
7
|
+
import { assertProgramSpaceIdentity, programSpaceFrameCount } from "@hypit/program-space";
|
|
11
8
|
import { canonicalize, isResourceId } from "@hypit/protocol";
|
|
12
9
|
import { verifyText } from "@hypit/text";
|
|
13
10
|
import type { Text } from "@hypit/text";
|
|
@@ -334,7 +331,7 @@ export function appendTriggeredRankingCandidate(
|
|
|
334
331
|
export function buildTriggeredRankingSchedule(input: {
|
|
335
332
|
readonly header: RankingHeader;
|
|
336
333
|
readonly items: RankingItemSpecSet;
|
|
337
|
-
readonly
|
|
334
|
+
readonly timeline: Timeline;
|
|
338
335
|
readonly outer: TemporalWindow;
|
|
339
336
|
readonly candidates: TriggeredRankingCandidateSet;
|
|
340
337
|
readonly terminal: TemporalInstant;
|
|
@@ -345,10 +342,10 @@ export function buildTriggeredRankingSchedule(input: {
|
|
|
345
342
|
assert(input.header.variant === "top-three", "Only TopThree uses the triggered Ranking schedule.");
|
|
346
343
|
assert(input.items.items.length > 0, "Ranking requires at least one Item.");
|
|
347
344
|
assertTriggeredRankingCandidateSet(input.candidates);
|
|
348
|
-
assertTemporalWindowFor(input.outer, { subjectId: input.header.id, space: input.
|
|
349
|
-
assertTemporalInstantFor(input.terminal, { subjectId: input.header.id, space: input.
|
|
345
|
+
assertTemporalWindowFor(input.outer, { subjectId: input.header.id, space: input.timeline });
|
|
346
|
+
assertTemporalInstantFor(input.terminal, { subjectId: input.header.id, space: input.timeline });
|
|
350
347
|
for (const candidate of input.candidates.entries) {
|
|
351
|
-
assertTemporalInstantFor(candidate.activation, { subjectId: candidate.itemId, space: input.
|
|
348
|
+
assertTemporalInstantFor(candidate.activation, { subjectId: candidate.itemId, space: input.timeline });
|
|
352
349
|
}
|
|
353
350
|
const expected = new Set(input.items.items.map((item) => item.id));
|
|
354
351
|
const received = new Set(input.candidates.entries.map((entry) => entry.itemId));
|
|
@@ -379,7 +376,7 @@ export function buildTriggeredRankingSchedule(input: {
|
|
|
379
376
|
terminalFrame: resolved.terminalFrame,
|
|
380
377
|
entries,
|
|
381
378
|
};
|
|
382
|
-
assertRankingSchedule(result, input.
|
|
379
|
+
assertRankingSchedule(result, input.timeline);
|
|
383
380
|
return canonicalize(result) as unknown as TriggeredRankingSchedule;
|
|
384
381
|
}
|
|
385
382
|
|
|
@@ -448,7 +445,7 @@ export function appendColumnWindow(
|
|
|
448
445
|
function buildWindowedRankingSchedule(input: {
|
|
449
446
|
readonly header: RankingHeader;
|
|
450
447
|
readonly items: RankingItemSpecSet;
|
|
451
|
-
readonly
|
|
448
|
+
readonly timeline: Timeline;
|
|
452
449
|
readonly outer: TemporalWindow;
|
|
453
450
|
readonly windows: RankingWindowSet;
|
|
454
451
|
readonly variant: "tier-board" | "column";
|
|
@@ -460,7 +457,7 @@ function buildWindowedRankingSchedule(input: {
|
|
|
460
457
|
assert(input.items.variant === input.variant, `${label} Schedule requires ${label} Items.`);
|
|
461
458
|
assert(input.items.items.length > 0, `${label} requires at least one Item.`);
|
|
462
459
|
assertRankingWindowSet(input.windows, `${label}WindowSet`);
|
|
463
|
-
assertTemporalWindowFor(input.outer, { subjectId: input.header.id, space: input.
|
|
460
|
+
assertTemporalWindowFor(input.outer, { subjectId: input.header.id, space: input.timeline });
|
|
464
461
|
frame(input.outer.span.startFrame, `${label} outer window start`);
|
|
465
462
|
frame(input.outer.span.endFrameExclusive, `${label} outer window end`);
|
|
466
463
|
assert(input.outer.span.endFrameExclusive > input.outer.span.startFrame, `${label} outer window is empty.`);
|
|
@@ -474,7 +471,7 @@ function buildWindowedRankingSchedule(input: {
|
|
|
474
471
|
|| left.window.span.endFrameExclusive - right.window.span.endFrameExclusive
|
|
475
472
|
|| left.itemId.localeCompare(right.itemId));
|
|
476
473
|
for (const entry of orderedWindows) {
|
|
477
|
-
assertTemporalWindowFor(entry.window, { subjectId: entry.itemId, space: input.
|
|
474
|
+
assertTemporalWindowFor(entry.window, { subjectId: entry.itemId, space: input.timeline });
|
|
478
475
|
assert(entry.window.span.startFrame >= input.outer.span.startFrame
|
|
479
476
|
&& entry.window.span.endFrameExclusive <= input.outer.span.endFrameExclusive,
|
|
480
477
|
`${label} Item ${entry.itemId} window is outside the outer window.`);
|
|
@@ -524,7 +521,7 @@ function buildWindowedRankingSchedule(input: {
|
|
|
524
521
|
export function buildTierBoardSchedule(input: {
|
|
525
522
|
readonly header: RankingHeader;
|
|
526
523
|
readonly items: RankingItemSpecSet;
|
|
527
|
-
readonly
|
|
524
|
+
readonly timeline: Timeline;
|
|
528
525
|
readonly outer: TemporalWindow;
|
|
529
526
|
readonly windows: TierBoardWindowSet;
|
|
530
527
|
}): TierBoardSchedule {
|
|
@@ -534,7 +531,7 @@ export function buildTierBoardSchedule(input: {
|
|
|
534
531
|
export function buildColumnSchedule(input: {
|
|
535
532
|
readonly header: RankingHeader;
|
|
536
533
|
readonly items: RankingItemSpecSet;
|
|
537
|
-
readonly
|
|
534
|
+
readonly timeline: Timeline;
|
|
538
535
|
readonly outer: TemporalWindow;
|
|
539
536
|
readonly windows: ColumnWindowSet;
|
|
540
537
|
}): ColumnSchedule {
|
|
@@ -626,12 +623,12 @@ function assertWindowedRankingSchedule(value: TierBoardSchedule | ColumnSchedule
|
|
|
626
623
|
}
|
|
627
624
|
}
|
|
628
625
|
|
|
629
|
-
export function assertRankingSchedule(value: RankingSchedule,
|
|
626
|
+
export function assertRankingSchedule(value: RankingSchedule, timeline?: Timeline): void {
|
|
630
627
|
if (value.variant === "top-three") assertTriggeredRankingSchedule(value);
|
|
631
628
|
else assertWindowedRankingSchedule(value);
|
|
632
|
-
if (
|
|
633
|
-
assertProgramSpaceIdentity(
|
|
634
|
-
assert(value.outer.endFrameExclusive <= programSpaceFrameCount(
|
|
629
|
+
if (timeline !== undefined) {
|
|
630
|
+
assertProgramSpaceIdentity(timeline);
|
|
631
|
+
assert(value.outer.endFrameExclusive <= programSpaceFrameCount(timeline), "RankingSchedule exceeds Timeline.");
|
|
635
632
|
}
|
|
636
633
|
}
|
|
637
634
|
|