@hypit/hypit 0.1.4 → 0.1.6
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 +4 -2
- 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 +77 -15
- 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 +8 -1
- package/examples/semantic-composition/chat.svml +6 -5
- package/examples/semantic-composition/hypit.runtime.json +1 -1
- 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 +28 -17
- 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 +11 -0
- package/packages/build-result/src/decode.ts +2 -0
- package/packages/build-result/src/execution-log.ts +17 -0
- package/packages/build-result/src/index.ts +1 -0
- package/packages/build-result/src/store.ts +14 -1
- package/packages/build-result/src/types.ts +3 -0
- package/packages/build-result-s3/src/repository.ts +4 -0
- 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 +21 -9
- 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 +26 -17
- package/packages/caption-fine/src/recipe.ts +7 -0
- package/packages/caption-fine/src/render.ts +14 -13
- 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 +3 -1
- package/packages/caption-fine-studio/src/activation.ts +3 -3
- package/packages/caption-fine-studio/src/index.ts +54 -42
- package/packages/cli/README.md +57 -4
- package/packages/cli/package.json +1 -0
- package/packages/cli/src/arguments.ts +25 -6
- package/packages/cli/src/build-planning.ts +3 -2
- package/packages/cli/src/command.ts +6 -0
- package/packages/cli/src/commands/environment.ts +28 -18
- 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 +3 -2
- package/packages/cli/src/main.ts +34 -42
- package/packages/cli/src/observation.ts +7 -1
- package/packages/cli/src/output.ts +65 -23
- package/packages/cli/src/view.ts +66 -19
- 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/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/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 +10 -7
- 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/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 +16 -11
- 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/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 +22 -26
- package/packages/ranking/src/schedule.ts +16 -19
- package/packages/ranking/src/surface.ts +12 -13
- package/packages/ranking-studio/README.md +18 -0
- package/packages/ranking-studio/src/index.ts +61 -9
- 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/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 +24 -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 +109 -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 +2 -1
- package/packages/runtime-local/src/result-writer.ts +2 -0
- package/packages/runtime-local/src/runtime.ts +8 -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 +30 -5
- package/packages/script/src/manifest.ts +4 -3
- package/packages/script/src/narrative.ts +1 -0
- package/packages/script/src/parser.ts +45 -6
- package/packages/script/src/surface.ts +4 -3
- package/packages/script/src/types.ts +1 -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 +7 -1
- 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/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 +15 -2
- package/packages/studio/LOCALIZATION.md +98 -0
- package/packages/studio/README.md +101 -14
- package/packages/studio/locales/en.json +197 -0
- package/packages/studio/locales/zh-CN.json +191 -0
- package/packages/studio/package.json +8 -7
- 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/localization-node.ts +46 -0
- package/packages/studio/src/localization.ts +85 -0
- package/packages/studio/src/parameter-values.ts +43 -1
- package/packages/studio/src/parameters.ts +114 -24
- 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 +10 -6
- package/packages/studio/src/shared.ts +4 -2
- package/packages/studio/src/snapshot.ts +21 -132
- package/packages/studio/src/studio-preflight.ts +3 -3
- package/packages/studio/src/studio-registry.ts +50 -6
- package/packages/studio/src/style.css +223 -50
- package/packages/studio/src/ui/artifact-name.ts +8 -6
- package/packages/studio/src/ui/artifact-preview.ts +5 -4
- package/packages/studio/src/ui/code.ts +17 -16
- package/packages/studio/src/ui/comments.ts +234 -0
- package/packages/studio/src/ui/dropdown.ts +68 -0
- package/packages/studio/src/ui/i18n.ts +109 -0
- package/packages/studio/src/ui/icons.ts +6 -0
- package/packages/studio/src/ui/library.ts +76 -65
- package/packages/studio/src/ui/main.ts +223 -211
- package/packages/studio/src/ui/overlay.ts +12 -8
- package/packages/studio/src/ui/scrub-preview.ts +110 -0
- package/packages/studio/src/ui/stage.ts +93 -29
- package/packages/studio/src/ui/timeline.ts +190 -118
- package/packages/studio/start.ts +41 -22
- package/packages/studio-adapter/README.md +130 -11
- package/packages/studio-adapter/src/index.ts +100 -13
- 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 +2 -2
- package/packages/temporal-markup/README.md +27 -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/video-cli/README.md +4 -1
- package/packages/video-cli/package.json +2 -1
- package/packages/video-cli/src/creation.ts +14 -4
- 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 +1 -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
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
--text: #e7e8eb;
|
|
11
11
|
--text-2: #a4a7ae;
|
|
12
12
|
--text-3: #6f737c;
|
|
13
|
+
--subtab-surface: #101114;
|
|
14
|
+
--subtab-active-surface: #24262a;
|
|
15
|
+
--subtab-active-text: #c9cbd0;
|
|
13
16
|
/* Replace this ramp as one unit when Hypit's interaction identity changes. */
|
|
14
17
|
--brand-200: #f8c1ce;
|
|
15
18
|
--brand-400: #ed7898;
|
|
@@ -28,6 +31,8 @@
|
|
|
28
31
|
--tone-orange-muted-rail: #e7834c;
|
|
29
32
|
--tone-green: #38853e;
|
|
30
33
|
--tone-green-rail: #75d079;
|
|
34
|
+
--tone-green-muted: #285c30;
|
|
35
|
+
--tone-green-muted-rail: #73a478;
|
|
31
36
|
--tone-teal: #008889;
|
|
32
37
|
--tone-teal-rail: #00d4d5;
|
|
33
38
|
/* Semantic ruler: brightness separates content from its own band; hue marks state. */
|
|
@@ -35,6 +40,7 @@
|
|
|
35
40
|
--semantic-word: #005551;
|
|
36
41
|
/* Author intent uses a gold annotation hue; brand pink stays in the chrome. */
|
|
37
42
|
--semantic-intent: #a28b2b;
|
|
43
|
+
--semantic-moment: var(--brand-500);
|
|
38
44
|
/* Same perceived active level as a selected/covered semantic cell. */
|
|
39
45
|
--semantic-current: #009f98;
|
|
40
46
|
/* Ordered marker depth: one hue, decreasing lightness. */
|
|
@@ -44,10 +50,14 @@
|
|
|
44
50
|
--intent-depth-3: #846d00;
|
|
45
51
|
--tone-blue: #1777b8;
|
|
46
52
|
--tone-blue-rail: #58c0ff;
|
|
53
|
+
--tone-blue-muted: #175079;
|
|
54
|
+
--tone-blue-muted-rail: #5795bf;
|
|
47
55
|
--tone-violet: #6f63b8;
|
|
48
56
|
--tone-violet-rail: #b3a6ff;
|
|
49
57
|
--tone-magenta: #995398;
|
|
50
58
|
--tone-magenta-rail: #ea93e8;
|
|
59
|
+
--tone-magenta-muted: #683b68;
|
|
60
|
+
--tone-magenta-muted-rail: #b57ab4;
|
|
51
61
|
--tone-neutral: #6a737c;
|
|
52
62
|
--tone-neutral-rail: #aeb9c4;
|
|
53
63
|
--timeline-label-width: 188px;
|
|
@@ -132,6 +142,26 @@ button:focus-visible, textarea:focus-visible {
|
|
|
132
142
|
white-space: nowrap;
|
|
133
143
|
}
|
|
134
144
|
.topbar-right { justify-self: end; display: flex; align-items: center; min-width: 0; }
|
|
145
|
+
.view-tabs { display: flex; flex: 0 0 auto; white-space: nowrap; align-items: center; gap: 2px; margin-left: 16px; padding: 2px; border-radius: 5px; background: var(--subtab-surface); }
|
|
146
|
+
.view-tabs button {
|
|
147
|
+
display: flex; align-items: center; gap: 7px; height: 24px; padding: 0 10px;
|
|
148
|
+
border: 0; border-radius: 4px; color: var(--text-3); background: transparent;
|
|
149
|
+
}
|
|
150
|
+
.view-tabs button[aria-selected="true"] { color: var(--subtab-active-text); background: var(--subtab-active-surface); }
|
|
151
|
+
.view-tabs button:focus-visible { outline: 1px solid #8a8f99; outline-offset: -1px; }
|
|
152
|
+
.view-tabs .icon { width: 14px; height: 14px; }
|
|
153
|
+
.parameter-select.language-select { width: auto; flex: 0 0 auto; margin-left: 10px; }
|
|
154
|
+
.language-select .language-toggle {
|
|
155
|
+
display: grid; place-items: center; grid-template-columns: 1fr;
|
|
156
|
+
width: 28px; height: 28px; padding: 0;
|
|
157
|
+
color: var(--subtab-active-text); background: var(--subtab-surface);
|
|
158
|
+
border-color: var(--line);
|
|
159
|
+
}
|
|
160
|
+
.language-toggle .icon { width: 16px; height: 16px; }
|
|
161
|
+
.language-select .parameter-select-menu { width: max-content; min-width: 150px; max-width: 240px; }
|
|
162
|
+
.language-select .parameter-select-option { font-family: var(--font-ui); text-align: start; }
|
|
163
|
+
.topbar { position: relative; z-index: 40; }
|
|
164
|
+
|
|
135
165
|
.meta {
|
|
136
166
|
color: var(--text-3);
|
|
137
167
|
font: 500 11px/1 var(--font-ui);
|
|
@@ -159,6 +189,67 @@ button:focus-visible, textarea:focus-visible {
|
|
|
159
189
|
grid-template-columns: var(--source-width) 8px minmax(320px, 1fr) 8px var(--workspace-width);
|
|
160
190
|
overflow: hidden;
|
|
161
191
|
}
|
|
192
|
+
.comments-panel, .comments-handle { display: none; }
|
|
193
|
+
.studio-shell[data-view="comments"] { grid-template-rows: minmax(0, 1fr); padding-bottom: 6px; }
|
|
194
|
+
.studio-shell[data-view="comments"] > .handle,
|
|
195
|
+
.studio-shell[data-view="comments"] > .timeline-panel { display: none; }
|
|
196
|
+
.studio-shell[data-view="comments"] .upper-shell { grid-template-columns: minmax(240px, 1fr) 8px var(--comments-width, 360px); }
|
|
197
|
+
.studio-shell[data-view="comments"] .source-panel,
|
|
198
|
+
.studio-shell[data-view="comments"] .source-handle,
|
|
199
|
+
.studio-shell[data-view="comments"] .workspace-panel,
|
|
200
|
+
.studio-shell[data-view="comments"] .workspace-handle { display: none; }
|
|
201
|
+
.studio-shell[data-view="comments"] .comments-handle { display: block; }
|
|
202
|
+
.studio-shell[data-view="comments"] .comments-panel { display: flex; }
|
|
203
|
+
.comments-panel { flex-direction: column; min-width: 0; min-height: 0; background: var(--panel); border: 1px solid #08090a; }
|
|
204
|
+
.comments-heading { justify-content: space-between; flex: none; }
|
|
205
|
+
.comments-heading [data-count] { color: var(--text-3); font-size: 11px; margin-left: 2px; }
|
|
206
|
+
.comments-icon { display: inline-flex; align-items: center; justify-content: center; flex: none; width: 26px; height: 26px; padding: 5px; border: 0; border-radius: 3px; background: transparent; color: var(--text-3); }
|
|
207
|
+
.comments-icon:hover { background: var(--field); color: var(--text); }
|
|
208
|
+
.comments-icon .icon { width: 15px; height: 15px; }
|
|
209
|
+
.comments-icon.is-done { color: var(--ok); }
|
|
210
|
+
.comments-panel button:disabled { opacity: .4; }
|
|
211
|
+
.comments-filters { display: flex; gap: 4px; padding: 10px 12px; border-bottom: 1px solid var(--line); flex: none; }
|
|
212
|
+
.comments-filters button { border: 0; background: transparent; padding: 4px 11px; border-radius: 3px; color: var(--text-3); }
|
|
213
|
+
.comments-filters button[aria-pressed="true"] { color: var(--text); background: #282a30; }
|
|
214
|
+
.comments-list { flex: 1; min-height: 0; overflow: auto; padding: 4px 12px 12px; user-select: text; }
|
|
215
|
+
.comments-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 220px; height: 100%; padding: 24px; text-align: center; color: var(--text-3); }
|
|
216
|
+
.comments-empty > .icon { width: 28px; height: 28px; margin-bottom: 18px; opacity: .7; }
|
|
217
|
+
.comments-empty strong { font-size: 13px; font-weight: 500; color: var(--text-2); }
|
|
218
|
+
.comments-empty p { line-height: 1.7; max-width: 230px; margin: 8px 0; }
|
|
219
|
+
.comment-card { padding: 12px 10px 14px; border-bottom: 1px solid var(--line); border-radius: 2px; }
|
|
220
|
+
.comment-card.selected { background: #1e2025; }
|
|
221
|
+
.comment-card-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
|
|
222
|
+
.comment-location { display: inline-flex; align-items: center; gap: 9px; padding: 0; border: 0; background: transparent; cursor: pointer; }
|
|
223
|
+
.comment-number { margin-right: 5px; color: var(--text-3); font: 500 11px var(--font-mono); }
|
|
224
|
+
.comment-actions { display: flex; align-items: center; gap: 1px; }
|
|
225
|
+
.comment-time { display: inline-flex; align-items: center; gap: 6px; min-height: 23px; padding: 2px 6px; background: var(--brand-soft); border: 0; border-radius: 3px; color: var(--brand-400); font: 500 11px/1.5 var(--font-mono); white-space: nowrap; }
|
|
226
|
+
.comment-time .icon { width: 13px; height: 13px; }
|
|
227
|
+
.comment-text { font-size: 13px; line-height: 1.7; color: var(--text); white-space: pre-wrap; overflow-wrap: anywhere; margin: 10px 0 0; }
|
|
228
|
+
.comment-card.resolved .comment-text { color: var(--text-3); }
|
|
229
|
+
.comment-composer { flex: none; border-top: 1px solid var(--line); padding: 14px 14px 12px; background: #18191d; }
|
|
230
|
+
.comment-anchor { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; margin-bottom: 10px; min-height: 24px; }
|
|
231
|
+
.comment-composer textarea, .comment-edit textarea { width: 100%; resize: none; background: #202227; color: var(--text); border: 1px solid #33363c; border-radius: 3px; padding: 10px 11px; font: 400 13px/1.7 var(--font-ui); display: block; min-height: 82px; user-select: text; }
|
|
232
|
+
.comment-composer textarea::placeholder { color: var(--text-3); }
|
|
233
|
+
.comments-panel textarea:focus { outline: none; box-shadow: none; }
|
|
234
|
+
.comment-edit textarea:focus { background: #292c32; }
|
|
235
|
+
.comments-panel textarea::selection { background: #dce1eb33; color: var(--text); }
|
|
236
|
+
.comment-input { border: 1px solid #33363c; border-radius: 4px; background: #202227; transition: background 120ms ease; }
|
|
237
|
+
.comment-input:focus-within { background: #292c32; }
|
|
238
|
+
.comment-input textarea { border: 0; background: transparent; }
|
|
239
|
+
.comment-input-actions { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 2px 9px 9px; }
|
|
240
|
+
.comment-tools { display: flex; align-items: center; gap: 4px; }
|
|
241
|
+
.comment-tools .comments-icon { width: 28px; height: 28px; padding: 5px; }
|
|
242
|
+
.comment-tools .icon { width: 18px; height: 18px; }
|
|
243
|
+
.comment-submit { display: grid; place-items: center; flex: none; width: 30px; height: 30px; padding: 0; border: 0; border-radius: 50%; background: #e4e6eb; color: #202227; }
|
|
244
|
+
.comment-submit .icon { display: block; width: 18px; height: 18px; }
|
|
245
|
+
.comment-submit:hover:not(:disabled) { background: #fff; }
|
|
246
|
+
.comment-submit:disabled { opacity: 1; background: #35383f; color: #858b95; }
|
|
247
|
+
.comment-submit:focus-visible { outline: 1px solid #aeb3bc; outline-offset: 3px; }
|
|
248
|
+
.comments-error { color: var(--brand-200); font-size: 12px; line-height: 1.6; padding: 10px 14px; border-bottom: 1px solid var(--line); }
|
|
249
|
+
.comment-edit { margin-top: 10px; }
|
|
250
|
+
.comment-edit-actions { display: flex; justify-content: end; gap: 6px; margin-top: 8px; }
|
|
251
|
+
.comment-edit-actions button { padding: 4px 11px; border: 1px solid var(--line-strong); border-radius: 3px; background: var(--field); color: var(--text-2); }
|
|
252
|
+
.comment-edit-actions button[type="submit"] { color: var(--text); }
|
|
162
253
|
.source-panel, .preview-panel, .workspace-panel, .timeline-panel {
|
|
163
254
|
min-width: 0;
|
|
164
255
|
min-height: 0;
|
|
@@ -602,7 +693,7 @@ button:focus-visible, textarea:focus-visible {
|
|
|
602
693
|
margin: 10px 12px 4px;
|
|
603
694
|
padding: 2px;
|
|
604
695
|
border-radius: 5px;
|
|
605
|
-
background:
|
|
696
|
+
background: var(--subtab-surface);
|
|
606
697
|
overflow: hidden;
|
|
607
698
|
}
|
|
608
699
|
.inspector-subtab {
|
|
@@ -626,7 +717,7 @@ button:focus-visible, textarea:focus-visible {
|
|
|
626
717
|
line-height: 1;
|
|
627
718
|
white-space: nowrap;
|
|
628
719
|
}
|
|
629
|
-
.inspector-subtab.active { background:
|
|
720
|
+
.inspector-subtab.active { background: var(--subtab-active-surface); color: var(--subtab-active-text); }
|
|
630
721
|
.inspector-empty { padding: 28px 14px; color: var(--text-3); font-size: 11px; text-align: center; }
|
|
631
722
|
.property-group { min-width: 0; padding: 14px 14px 16px; border-bottom: 1px solid var(--line); }
|
|
632
723
|
.property-group h3 { margin: 0 0 10px; color: #c4c6cc; font-size: 11px; font-weight: 500; }
|
|
@@ -689,6 +780,7 @@ button:focus-visible, textarea:focus-visible {
|
|
|
689
780
|
caret-color: var(--interaction-accent);
|
|
690
781
|
cursor: text !important;
|
|
691
782
|
}
|
|
783
|
+
.parameter-display { width: 100%; padding: 5px 7px; color: var(--text-2); font-size: 11px; line-height: 1.2; text-align: right; overflow-wrap: anywhere; user-select: text; font-variant-numeric: tabular-nums; }
|
|
692
784
|
.parameter-value:focus { border-color: #6a6e77; outline: 0; background: #131417; }
|
|
693
785
|
.control-boolean .parameter-right { justify-content: flex-end; }
|
|
694
786
|
.control-boolean .parameter-value {
|
|
@@ -745,8 +837,8 @@ button:focus-visible, textarea:focus-visible {
|
|
|
745
837
|
.parameter-color-value { width: min(100%, 102px); }
|
|
746
838
|
.control-list,
|
|
747
839
|
.control-record { grid-template-columns: minmax(0, 1fr); align-items: stretch; gap: 6px; }
|
|
748
|
-
.control-list .parameter-right,
|
|
749
|
-
.control-record .parameter-right { grid-column: 1 / -1; width: 100%; }
|
|
840
|
+
.control-list > .parameter-right,
|
|
841
|
+
.control-record > .parameter-right { grid-column: 1 / -1; width: 100%; }
|
|
750
842
|
.parameter-structured { min-width: 0; width: 100%; }
|
|
751
843
|
.parameter-structured-summary {
|
|
752
844
|
min-height: 20px;
|
|
@@ -786,20 +878,6 @@ button:focus-visible, textarea:focus-visible {
|
|
|
786
878
|
.parameter-list-actions button:not(:disabled):focus-visible { outline: 1px solid #62666f; }
|
|
787
879
|
.parameter-list-actions .icon { width: 11px; height: 11px; }
|
|
788
880
|
.parameter-record-fields { min-width: 0; display: flex; flex-direction: column; gap: 5px; }
|
|
789
|
-
.parameter-record-field {
|
|
790
|
-
min-width: 0;
|
|
791
|
-
display: grid;
|
|
792
|
-
grid-template-columns: 58px minmax(0, 1fr);
|
|
793
|
-
align-items: center;
|
|
794
|
-
gap: 7px;
|
|
795
|
-
}
|
|
796
|
-
.parameter-record-field > span:first-child {
|
|
797
|
-
overflow: hidden;
|
|
798
|
-
color: #6f737c;
|
|
799
|
-
font-size: 10px;
|
|
800
|
-
text-overflow: ellipsis;
|
|
801
|
-
white-space: nowrap;
|
|
802
|
-
}
|
|
803
881
|
.parameter-structured-footer {
|
|
804
882
|
min-height: 30px;
|
|
805
883
|
display: flex;
|
|
@@ -818,10 +896,10 @@ button:focus-visible, textarea:focus-visible {
|
|
|
818
896
|
font: 10px/1 var(--font-ui);
|
|
819
897
|
}
|
|
820
898
|
.parameter-structured-footer button:disabled { color: #454850; background: #16171a; }
|
|
821
|
-
.parameter-structured-footer button.primary:not(:disabled) { border-color: #555962; background: #292b30; color: #e0e2e6; }
|
|
822
899
|
.parameter-structured-add { display: inline-flex; align-items: center; gap: 4px; }
|
|
823
900
|
.parameter-structured-add .icon { width: 11px; height: 11px; }
|
|
824
|
-
.parameter-structured-
|
|
901
|
+
.parameter-structured-notice { margin-top: 6px; color: var(--text-3); font: 10px/1.4 var(--font-ui); }
|
|
902
|
+
.parameter-structured-notice[hidden] { display: none; }
|
|
825
903
|
.parameter-select { position: relative; width: 100%; min-width: 0; }
|
|
826
904
|
.parameter-select-trigger {
|
|
827
905
|
width: 100%;
|
|
@@ -1016,10 +1094,13 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1016
1094
|
transform: translateY(-50%);
|
|
1017
1095
|
}
|
|
1018
1096
|
.track-tone-blue { --track: var(--tone-blue); --rail: var(--tone-blue-rail); }
|
|
1097
|
+
.track-tone-blue-muted { --track: var(--tone-blue-muted); --rail: var(--tone-blue-muted-rail); }
|
|
1019
1098
|
.track-tone-green { --track: var(--tone-green); --rail: var(--tone-green-rail); }
|
|
1099
|
+
.track-tone-green-muted { --track: var(--tone-green-muted); --rail: var(--tone-green-muted-rail); }
|
|
1020
1100
|
.track-tone-teal { --track: var(--tone-teal); --rail: var(--tone-teal-rail); }
|
|
1021
1101
|
.track-tone-violet { --track: var(--tone-violet); --rail: var(--tone-violet-rail); }
|
|
1022
1102
|
.track-tone-magenta { --track: var(--tone-magenta); --rail: var(--tone-magenta-rail); }
|
|
1103
|
+
.track-tone-magenta-muted { --track: var(--tone-magenta-muted); --rail: var(--tone-magenta-muted-rail); }
|
|
1023
1104
|
.track-tone-orange { --track: var(--tone-orange); --rail: var(--tone-orange-rail); }
|
|
1024
1105
|
.track-tone-orange-muted { --track: var(--tone-orange-muted); --rail: var(--tone-orange-muted-rail); }
|
|
1025
1106
|
.track-tone-neutral { --track: var(--tone-neutral); --rail: var(--tone-neutral-rail); }
|
|
@@ -1083,8 +1164,10 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1083
1164
|
height: var(--semantic-band-height);
|
|
1084
1165
|
overflow: hidden;
|
|
1085
1166
|
background: var(--lane);
|
|
1167
|
+
box-shadow: inset 0 -1px var(--line);
|
|
1168
|
+
isolation: isolate;
|
|
1086
1169
|
}
|
|
1087
|
-
.semantic-band-
|
|
1170
|
+
.semantic-band:last-child { box-shadow: none; }
|
|
1088
1171
|
.lane-attached {
|
|
1089
1172
|
border-left: 0;
|
|
1090
1173
|
background: var(--lane);
|
|
@@ -1104,12 +1187,12 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1104
1187
|
border: 0;
|
|
1105
1188
|
border-radius: 0;
|
|
1106
1189
|
background: var(--semantic-cell);
|
|
1107
|
-
box-shadow:
|
|
1190
|
+
box-shadow: inset 0 0 0 1px #ffffff12;
|
|
1108
1191
|
color: var(--text);
|
|
1109
1192
|
text-align: left;
|
|
1110
1193
|
cursor: default;
|
|
1111
1194
|
}
|
|
1112
|
-
.semantic-cell:focus-visible { outline: 0; }
|
|
1195
|
+
.semantic-cell:focus-visible { outline: 0; box-shadow: inset 0 0 0 1px #ffffff60; }
|
|
1113
1196
|
.semantic-segment {
|
|
1114
1197
|
--semantic-cell: var(--semantic-segment);
|
|
1115
1198
|
}
|
|
@@ -1120,11 +1203,9 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1120
1203
|
--semantic-cell: var(--semantic-intent);
|
|
1121
1204
|
color: #fff;
|
|
1122
1205
|
}
|
|
1123
|
-
.semantic-cell.
|
|
1124
|
-
.semantic-cell.
|
|
1125
|
-
.semantic-
|
|
1126
|
-
.semantic-segment.live.selected { filter: brightness(1.22); }
|
|
1127
|
-
.semantic-moment.selected { z-index: 4; filter: brightness(1.22); }
|
|
1206
|
+
.semantic-cell.live { filter: brightness(1.12); }
|
|
1207
|
+
.semantic-cell.selected { z-index: 4; filter: brightness(1.16); box-shadow: inset 0 0 0 1px #ffffff60; }
|
|
1208
|
+
.semantic-moment.selected { z-index: 5; filter: brightness(1.16); box-shadow: inset 0 0 0 1px #ffffff60; }
|
|
1128
1209
|
.semantic-segment-label {
|
|
1129
1210
|
flex: 1 1 auto;
|
|
1130
1211
|
min-width: 0;
|
|
@@ -1170,21 +1251,19 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1170
1251
|
.semantic-word .semantic-cell-content { padding: 0 5px; }
|
|
1171
1252
|
.semantic-moment {
|
|
1172
1253
|
position: absolute;
|
|
1173
|
-
top:
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1254
|
+
top: calc((var(--semantic-band-height) - 9px) / 2);
|
|
1255
|
+
z-index: 1;
|
|
1256
|
+
width: 9px;
|
|
1257
|
+
height: 9px;
|
|
1258
|
+
transform: translateX(-50%) scaleX(.6) rotate(45deg);
|
|
1177
1259
|
border-radius: 0;
|
|
1178
1260
|
padding: 0;
|
|
1179
|
-
border:
|
|
1180
|
-
background: var(--semantic-
|
|
1261
|
+
border: 1px solid var(--lane);
|
|
1262
|
+
background: var(--semantic-moment);
|
|
1181
1263
|
}
|
|
1182
1264
|
.semantic-moment:focus-visible { outline: 0; }
|
|
1183
|
-
.track-label-semantic { position: sticky; top:
|
|
1184
|
-
.track-label-semantic::before {
|
|
1185
|
-
border-radius: 0;
|
|
1186
|
-
background: #181a1f;
|
|
1187
|
-
}
|
|
1265
|
+
.track-label-semantic { position: sticky; top: 0; z-index: 8; border-bottom: 1px solid var(--line); background: #111216; }
|
|
1266
|
+
.track-label-semantic::before { display: none; }
|
|
1188
1267
|
.track-label-attached {
|
|
1189
1268
|
/* The branch marker occupies the same 18px prefix as a root icon;
|
|
1190
1269
|
attached and root labels therefore share one exact text column. */
|
|
@@ -1207,7 +1286,6 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1207
1286
|
display: block;
|
|
1208
1287
|
padding: 0;
|
|
1209
1288
|
border: 0;
|
|
1210
|
-
border-bottom: 1px solid color-mix(in srgb, var(--track) 48%, var(--lane));
|
|
1211
1289
|
border-radius: var(--timeline-item-radius);
|
|
1212
1290
|
background: var(--item-body);
|
|
1213
1291
|
box-shadow: none;
|
|
@@ -1215,8 +1293,7 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1215
1293
|
text-align: left;
|
|
1216
1294
|
cursor: default;
|
|
1217
1295
|
}
|
|
1218
|
-
/*
|
|
1219
|
-
writeback remain disabled until their SVML mapping is implemented. */
|
|
1296
|
+
/* Only Companion-declared editable intervals enable edge gestures. */
|
|
1220
1297
|
#app .clip::before,
|
|
1221
1298
|
#app .clip::after {
|
|
1222
1299
|
content: "";
|
|
@@ -1244,10 +1321,19 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1244
1321
|
}
|
|
1245
1322
|
.clip.editing { box-shadow: 0 0 0 1px #fff; }
|
|
1246
1323
|
.clip:focus-visible { outline: 0; }
|
|
1324
|
+
/* Draw above thumbnails and text without changing interval geometry. */
|
|
1325
|
+
.clip-boundary {
|
|
1326
|
+
position: absolute;
|
|
1327
|
+
z-index: 5;
|
|
1328
|
+
inset: 0;
|
|
1329
|
+
border: 1px solid #ffffff20;
|
|
1330
|
+
border-radius: inherit;
|
|
1331
|
+
pointer-events: none;
|
|
1332
|
+
}
|
|
1247
1333
|
.clip-selection {
|
|
1248
1334
|
position: absolute;
|
|
1249
1335
|
z-index: 6;
|
|
1250
|
-
inset:
|
|
1336
|
+
inset: 0;
|
|
1251
1337
|
display: none;
|
|
1252
1338
|
border: var(--timeline-selection-stroke) solid var(--timeline-selection-color);
|
|
1253
1339
|
border-radius: var(--timeline-selection-radius);
|
|
@@ -1256,20 +1342,21 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1256
1342
|
.clip-selection::before, .clip-selection::after {
|
|
1257
1343
|
content: "";
|
|
1258
1344
|
position: absolute;
|
|
1259
|
-
top:
|
|
1260
|
-
bottom:
|
|
1345
|
+
top: 0;
|
|
1346
|
+
bottom: 0;
|
|
1261
1347
|
width: var(--timeline-selection-edge);
|
|
1262
1348
|
background: var(--timeline-selection-color);
|
|
1263
1349
|
}
|
|
1264
1350
|
.clip-selection::before {
|
|
1265
|
-
left:
|
|
1351
|
+
left: 0;
|
|
1266
1352
|
border-radius: var(--timeline-selection-radius) 0 0 var(--timeline-selection-radius);
|
|
1267
1353
|
}
|
|
1268
1354
|
.clip-selection::after {
|
|
1269
|
-
right:
|
|
1355
|
+
right: 0;
|
|
1270
1356
|
border-radius: 0 var(--timeline-selection-radius) var(--timeline-selection-radius) 0;
|
|
1271
1357
|
}
|
|
1272
1358
|
.clip.selected > .clip-selection { display: block; }
|
|
1359
|
+
.clip.selected > .clip-boundary { border-color: var(--timeline-selection-color); }
|
|
1273
1360
|
.clip-head {
|
|
1274
1361
|
position: absolute;
|
|
1275
1362
|
z-index: 3;
|
|
@@ -1288,6 +1375,7 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1288
1375
|
}
|
|
1289
1376
|
.clip-body {
|
|
1290
1377
|
position: absolute;
|
|
1378
|
+
z-index: 1;
|
|
1291
1379
|
top: var(--timeline-item-header-height);
|
|
1292
1380
|
right: 0;
|
|
1293
1381
|
bottom: 0;
|
|
@@ -1346,10 +1434,13 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1346
1434
|
font-variant-numeric: tabular-nums;
|
|
1347
1435
|
}
|
|
1348
1436
|
.clip-tone-blue { --track: var(--tone-blue); }
|
|
1437
|
+
.clip-tone-blue-muted { --track: var(--tone-blue-muted); }
|
|
1349
1438
|
.clip-tone-green { --track: var(--tone-green); }
|
|
1439
|
+
.clip-tone-green-muted { --track: var(--tone-green-muted); }
|
|
1350
1440
|
.clip-tone-teal { --track: var(--tone-teal); }
|
|
1351
1441
|
.clip-tone-violet { --track: var(--tone-violet); }
|
|
1352
1442
|
.clip-tone-magenta { --track: var(--tone-magenta); }
|
|
1443
|
+
.clip-tone-magenta-muted { --track: var(--tone-magenta-muted); }
|
|
1353
1444
|
.clip-tone-orange { --track: var(--tone-orange); }
|
|
1354
1445
|
.clip-tone-orange-muted { --track: var(--tone-orange-muted); }
|
|
1355
1446
|
.clip-tone-neutral { --track: var(--tone-neutral); }
|
|
@@ -1481,8 +1572,8 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1481
1572
|
.failure:empty { display: none; }
|
|
1482
1573
|
|
|
1483
1574
|
@media (max-width: 920px) {
|
|
1484
|
-
.meta, .topbar-right { display: none; }
|
|
1485
|
-
.topbar { grid-template-columns:
|
|
1575
|
+
.meta, .topbar-right .status { display: none; }
|
|
1576
|
+
.topbar { grid-template-columns: auto minmax(0, 1fr) auto; }
|
|
1486
1577
|
.upper-shell { grid-template-columns: minmax(320px, var(--source-width)) 8px minmax(300px, 1fr); }
|
|
1487
1578
|
.workspace-handle, .workspace-panel { display: none; }
|
|
1488
1579
|
}
|
|
@@ -1503,14 +1594,96 @@ button:focus-visible, textarea:focus-visible {
|
|
|
1503
1594
|
.stage-audio-wave { width: 85%; padding: 24px 12px; border-radius: 2px; color: #b5c2bb; background: #202824; text-align: center; }
|
|
1504
1595
|
.stage-audio-wave img { display: block; width: 100%; height: 100px; }
|
|
1505
1596
|
.stage-media-error { position: absolute; bottom: 12px; padding: 8px; background: #24262b; color: #cacdd4; font-size: 11px; }
|
|
1506
|
-
.stage-
|
|
1597
|
+
.stage-progress { position: relative; flex: none; height: 0; z-index: 2; }
|
|
1598
|
+
.stage-progress[hidden], .scrub-preview[hidden] { display: none; }
|
|
1599
|
+
.stage-scrubber { position: absolute; inset: -5px 0 auto; width: 100%; height: 10px; padding: 0; margin: 0; appearance: none; background: transparent; cursor: pointer; }
|
|
1507
1600
|
.stage-scrubber::-webkit-slider-runnable-track { height: 2px; background: #676c75; }
|
|
1508
1601
|
.stage-scrubber::-webkit-slider-thumb { appearance: none; width: 8px; height: 8px; border-radius: 50%; margin-top: -3px; background: #e1e4e9; }
|
|
1509
1602
|
.stage-scrubber::-moz-range-track { height: 2px; background: #676c75; }
|
|
1510
1603
|
.stage-scrubber::-moz-range-thumb { width: 8px; height: 8px; border: 0; background: #e1e4e9; }
|
|
1604
|
+
.stage-review .stage-scaler, .stage-review .stage-viewport { cursor: pointer; }
|
|
1605
|
+
.stage-review .stage-progress { height: 24px; margin: 0 20px; }
|
|
1606
|
+
.stage-review .stage-scrubber { top: 0; height: 24px; }
|
|
1607
|
+
.stage-review .stage-scrubber::-webkit-slider-runnable-track { height: 4px; border-radius: 2px; background: #565b64; }
|
|
1608
|
+
.stage-review .stage-scrubber::-webkit-slider-thumb { width: 12px; height: 12px; margin-top: -4px; }
|
|
1609
|
+
.stage-review .stage-scrubber::-moz-range-track { height: 4px; border-radius: 2px; background: #565b64; }
|
|
1610
|
+
.stage-review .stage-scrubber::-moz-range-thumb { width: 12px; height: 12px; }
|
|
1611
|
+
.scrub-preview { position: absolute; bottom: calc(100% + 8px); padding: 3px; border: 1px solid #4b4f56; border-radius: 4px; background: #1b1d21; box-shadow: 0 4px 16px #0006; pointer-events: none; }
|
|
1612
|
+
.scrub-preview-picture { position: relative; display: grid; place-items: center; overflow: hidden; background: #111215; }
|
|
1613
|
+
.scrub-preview-picture iframe { position: absolute; top: 0; left: 0; border: 0; transform-origin: top left; pointer-events: none; }
|
|
1614
|
+
.scrub-preview-picture span { padding: 8px; color: var(--text-3); font: 10px var(--font-ui); text-align: center; }
|
|
1615
|
+
.scrub-preview-picture span[hidden] { display: none; }
|
|
1616
|
+
.scrub-preview-time { padding: 5px 3px 2px; color: #d5d8df; font: 10px var(--font-mono); text-align: center; }
|
|
1511
1617
|
|
|
1512
1618
|
.preview-unavailable .artifact-type { position: static; width: auto; height: auto; clip-path: none; color: #9298a2; font-size: 10px; }
|
|
1513
1619
|
|
|
1514
1620
|
.artifact-card.selected .artifact-preview { background: var(--artifact-selection); border-radius: 3px; }
|
|
1515
1621
|
.artifact-card.selected .artifact-name-text { color: #f1f2f5; background: var(--artifact-selection); }
|
|
1516
1622
|
.library-continuation { grid-column: 1 / -1; height: 28px; display: grid; place-items: center; color: #777e89; font-size: 10px; }
|
|
1623
|
+
|
|
1624
|
+
.timeline-overlap-menu, .selection-menu {
|
|
1625
|
+
position: fixed;
|
|
1626
|
+
z-index: 100;
|
|
1627
|
+
min-width: 160px;
|
|
1628
|
+
max-width: 280px;
|
|
1629
|
+
max-height: 240px;
|
|
1630
|
+
overflow: auto;
|
|
1631
|
+
padding: 4px;
|
|
1632
|
+
border: 1px solid var(--line-strong);
|
|
1633
|
+
border-radius: 5px;
|
|
1634
|
+
background: var(--panel-raised);
|
|
1635
|
+
box-shadow: 0 6px 20px #0006;
|
|
1636
|
+
}
|
|
1637
|
+
.timeline-overlap-menu button, .selection-menu button {
|
|
1638
|
+
display: block;
|
|
1639
|
+
width: 100%;
|
|
1640
|
+
padding: 6px 9px;
|
|
1641
|
+
border: 0;
|
|
1642
|
+
border-radius: 2px;
|
|
1643
|
+
background: transparent;
|
|
1644
|
+
color: var(--text);
|
|
1645
|
+
font-family: inherit;
|
|
1646
|
+
font-size: 12px;
|
|
1647
|
+
line-height: 1.4;
|
|
1648
|
+
text-align: left;
|
|
1649
|
+
overflow-wrap: anywhere;
|
|
1650
|
+
}
|
|
1651
|
+
.timeline-overlap-menu button:hover,
|
|
1652
|
+
.timeline-overlap-menu button:focus-visible,
|
|
1653
|
+
.selection-menu button:hover,
|
|
1654
|
+
.selection-menu button:focus-visible { background: var(--field); outline: none; }
|
|
1655
|
+
|
|
1656
|
+
/* Compact authored rules keep interval geometry without a thumbnail body. */
|
|
1657
|
+
.clip-chrome-compact > .clip-head {
|
|
1658
|
+
height: 100%;
|
|
1659
|
+
border-bottom: 0;
|
|
1660
|
+
border-radius: var(--timeline-item-radius);
|
|
1661
|
+
background: var(--item-head);
|
|
1662
|
+
}
|
|
1663
|
+
.clip-chrome-compact > .clip-body,
|
|
1664
|
+
.clip-chrome-compact .clip-meta { display: none; }
|
|
1665
|
+
.clip-chrome-compact .clip-name { font-size: 11px; font-weight: 500; }
|
|
1666
|
+
|
|
1667
|
+
/* Track-internal bands share one label and meet without child-track gutters. */
|
|
1668
|
+
.timeline-track-banded { padding: var(--timeline-item-inset-y) 0; }
|
|
1669
|
+
.timeline-track-banded > .track-band { border-bottom: 0; }
|
|
1670
|
+
.timeline-track-banded > .track-band > .clip {
|
|
1671
|
+
height: 100%;
|
|
1672
|
+
margin-top: 0;
|
|
1673
|
+
border-radius: 0;
|
|
1674
|
+
}
|
|
1675
|
+
.timeline-track-banded > .track-band:first-child > .clip {
|
|
1676
|
+
border-top-left-radius: var(--timeline-item-radius);
|
|
1677
|
+
border-top-right-radius: var(--timeline-item-radius);
|
|
1678
|
+
}
|
|
1679
|
+
.timeline-track-banded > .track-band:last-child > .clip {
|
|
1680
|
+
border-bottom-left-radius: var(--timeline-item-radius);
|
|
1681
|
+
border-bottom-right-radius: var(--timeline-item-radius);
|
|
1682
|
+
}
|
|
1683
|
+
.track-band .clip-head, .track-band .clip-body { border-radius: inherit; }
|
|
1684
|
+
.track-band-label .clip-head {
|
|
1685
|
+
height: 100%;
|
|
1686
|
+
border-bottom: 0;
|
|
1687
|
+
background: var(--item-head);
|
|
1688
|
+
}
|
|
1689
|
+
.track-band-label .clip-body, .track-band-label .clip-meta { display: none; }
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { uiAttr, uiText, userText } from "./i18n.js";
|
|
2
|
+
|
|
1
3
|
/** Two-line label with an expanding editor; the caller owns persistence. */
|
|
2
4
|
export function createArtifactName(options: {
|
|
3
5
|
readonly name: string;
|
|
@@ -15,7 +17,7 @@ export function createArtifactName(options: {
|
|
|
15
17
|
text.className = "artifact-name-text";
|
|
16
18
|
text.textContent = name;
|
|
17
19
|
label.append(text);
|
|
18
|
-
label
|
|
20
|
+
uiAttr(label, "title", options.editable ? "library.rename-hint" : "library.name-pending", { name });
|
|
19
21
|
element.append(label);
|
|
20
22
|
label.addEventListener("click", (event) => { event.stopPropagation(); options.select(); });
|
|
21
23
|
let editing = false;
|
|
@@ -30,7 +32,7 @@ export function createArtifactName(options: {
|
|
|
30
32
|
field.className = "artifact-name-editor";
|
|
31
33
|
field.value = name;
|
|
32
34
|
field.rows = 1;
|
|
33
|
-
field
|
|
35
|
+
uiAttr(field, "aria-label", "library.display-name");
|
|
34
36
|
const error = document.createElement("span");
|
|
35
37
|
error.className = "artifact-name-error";
|
|
36
38
|
error.setAttribute("role", "status");
|
|
@@ -53,17 +55,17 @@ export function createArtifactName(options: {
|
|
|
53
55
|
if (!editing || saving) return;
|
|
54
56
|
const value = field.value.trim();
|
|
55
57
|
if (value === name) { close(); return; }
|
|
56
|
-
if (value.length === 0) { error
|
|
58
|
+
if (value.length === 0) { uiText(error, "library.enter-name"); return; }
|
|
57
59
|
saving = true;
|
|
58
60
|
field.readOnly = true;
|
|
59
|
-
error
|
|
61
|
+
uiText(error, "common.saving");
|
|
60
62
|
try {
|
|
61
63
|
name = await options.save(value);
|
|
62
64
|
text.textContent = name;
|
|
63
|
-
label
|
|
65
|
+
uiAttr(label, "title", "library.rename-hint", { name });
|
|
64
66
|
close();
|
|
65
67
|
} catch (cause) {
|
|
66
|
-
error
|
|
68
|
+
userText(error, cause instanceof Error ? cause.message : String(cause));
|
|
67
69
|
} finally {
|
|
68
70
|
saving = false;
|
|
69
71
|
field.readOnly = false;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { uiAttr, uiText, userText } from "./i18n.js";
|
|
1
2
|
import type { StudioArtifactView } from "../shared.js";
|
|
2
3
|
import { audioPreview } from "./material-preview.js";
|
|
3
4
|
|
|
@@ -35,7 +36,7 @@ export function createArtifactPreview(changed: () => void) {
|
|
|
35
36
|
error.setAttribute("role", "status");
|
|
36
37
|
const failed = () => {
|
|
37
38
|
if (generation !== current) return;
|
|
38
|
-
error
|
|
39
|
+
uiText(error, "player.media-failed");
|
|
39
40
|
error.hidden = false;
|
|
40
41
|
changed();
|
|
41
42
|
};
|
|
@@ -61,14 +62,14 @@ export function createArtifactPreview(changed: () => void) {
|
|
|
61
62
|
if (audio) {
|
|
62
63
|
const wave = document.createElement("div");
|
|
63
64
|
wave.className = "stage-audio-wave";
|
|
64
|
-
wave
|
|
65
|
+
uiText(wave, "library.audio");
|
|
65
66
|
element.append(wave);
|
|
66
67
|
void audioPreview(url).then((waveform) => {
|
|
67
68
|
if (generation !== current || waveform === undefined) return;
|
|
68
69
|
const image = document.createElement("img");
|
|
69
70
|
image.src = waveform;
|
|
70
|
-
image
|
|
71
|
-
wave.replaceChildren(image);
|
|
71
|
+
uiAttr(image, "alt", "player.audio-waveform");
|
|
72
|
+
userText(wave, ""); wave.replaceChildren(image);
|
|
72
73
|
});
|
|
73
74
|
}
|
|
74
75
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { t, userText, uiAttribute, uiText, uiAttr } from "./i18n.js";
|
|
1
2
|
import type { Range, StudioSnapshot, StudioSourceView } from "../shared.js";
|
|
2
3
|
import { icon, setIcon } from "./icons.js";
|
|
3
4
|
import { intentTones } from "./markers.js";
|
|
@@ -77,10 +78,10 @@ export function createCodePane(): CodePane {
|
|
|
77
78
|
<strong class="code-location" data-path></strong>
|
|
78
79
|
<div class="code-actions">
|
|
79
80
|
<span class="code-save-state" data-save-state></span>
|
|
80
|
-
<button type="button" class="icon-button code-wrap" data-wrap aria-label
|
|
81
|
+
<button type="button" class="icon-button code-wrap" data-wrap ${uiAttribute("aria-label", "source.wrap-lines")} aria-pressed="false" ${uiAttribute("title", "source.wrap-lines")}>
|
|
81
82
|
${icon("wrap")}
|
|
82
83
|
</button>
|
|
83
|
-
<button type="button" class="icon-button code-mode" data-mode aria-label
|
|
84
|
+
<button type="button" class="icon-button code-mode" data-mode ${uiAttribute("aria-label", "source.edit-source")} ${uiAttribute("title", "source.edit-source")}>
|
|
84
85
|
<span data-mode-icon>${icon("edit")}</span>
|
|
85
86
|
</button>
|
|
86
87
|
</div>`;
|
|
@@ -88,7 +89,7 @@ export function createCodePane(): CodePane {
|
|
|
88
89
|
element.className = "code";
|
|
89
90
|
element.innerHTML = `
|
|
90
91
|
<div class="code-scroll"><svg class="range-canvas" aria-hidden="true"></svg></div>
|
|
91
|
-
<textarea class="code-editor" data-editor spellcheck="false" aria-label
|
|
92
|
+
<textarea class="code-editor" data-editor spellcheck="false" ${uiAttribute("aria-label", "source.svml-source")}></textarea>`;
|
|
92
93
|
const path = toolbar.querySelector<HTMLElement>("[data-path]")!;
|
|
93
94
|
const scroll = element.querySelector<HTMLElement>(".code-scroll")!;
|
|
94
95
|
const canvas = element.querySelector<SVGSVGElement>(".range-canvas")!;
|
|
@@ -116,8 +117,8 @@ export function createCodePane(): CodePane {
|
|
|
116
117
|
wrapped = value;
|
|
117
118
|
element.classList.toggle("is-wrapped", wrapped);
|
|
118
119
|
wrap.setAttribute("aria-pressed", String(wrapped));
|
|
119
|
-
wrap
|
|
120
|
-
wrap
|
|
120
|
+
uiAttr(wrap, "aria-label", wrapped ? "source.keep-lines-unwrapped" : "source.wrap-lines");
|
|
121
|
+
uiAttr(wrap, "title", wrapped ? "source.keep-lines-unwrapped" : "source.wrap-lines");
|
|
121
122
|
window.requestAnimationFrame(draw);
|
|
122
123
|
};
|
|
123
124
|
|
|
@@ -125,8 +126,8 @@ export function createCodePane(): CodePane {
|
|
|
125
126
|
editing = value;
|
|
126
127
|
element.classList.toggle("is-editing", editing);
|
|
127
128
|
setIcon(modeIcon, editing ? "eye" : "edit");
|
|
128
|
-
mode
|
|
129
|
-
mode
|
|
129
|
+
uiAttr(mode, "aria-label", editing ? "source.read-source" : "source.edit-source");
|
|
130
|
+
uiAttr(mode, "title", editing ? "source.read-source" : "source.edit-source");
|
|
130
131
|
if (editing) {
|
|
131
132
|
editor.value = sourceText;
|
|
132
133
|
editingRevision = snapshotRevision;
|
|
@@ -143,7 +144,7 @@ export function createCodePane(): CodePane {
|
|
|
143
144
|
saveInFlight = true;
|
|
144
145
|
let accepted = false;
|
|
145
146
|
let acceptedRevision = savingRevision;
|
|
146
|
-
saveState
|
|
147
|
+
uiText(saveState, "common.saving");
|
|
147
148
|
saveState.className = "code-save-state saving";
|
|
148
149
|
try {
|
|
149
150
|
const response = await fetch("/__studio/source", {
|
|
@@ -153,7 +154,7 @@ export function createCodePane(): CodePane {
|
|
|
153
154
|
});
|
|
154
155
|
if (!response.ok) {
|
|
155
156
|
const reason = await response.text();
|
|
156
|
-
throw new Error(reason ||
|
|
157
|
+
throw new Error(reason || t("source.save-failed-status", { status: response.status }));
|
|
157
158
|
}
|
|
158
159
|
const result = await response.json() as { readonly revision?: unknown };
|
|
159
160
|
if (typeof result.revision === "number") acceptedRevision = result.revision;
|
|
@@ -163,15 +164,15 @@ export function createCodePane(): CodePane {
|
|
|
163
164
|
sourceText = savingText;
|
|
164
165
|
dirty = false;
|
|
165
166
|
}
|
|
166
|
-
saveState
|
|
167
|
+
uiText(saveState, "common.saved");
|
|
167
168
|
saveState.className = "code-save-state saved";
|
|
168
169
|
window.setTimeout(() => {
|
|
169
|
-
if (!dirty) saveState
|
|
170
|
+
if (!dirty) userText(saveState, "");
|
|
170
171
|
}, 1200);
|
|
171
172
|
} catch (error) {
|
|
172
|
-
saveState
|
|
173
|
-
? "
|
|
174
|
-
: "
|
|
173
|
+
uiText(saveState, error instanceof Error && error.message.includes("changed")
|
|
174
|
+
? "source.changed-outside-studio"
|
|
175
|
+
: "common.save-failed");
|
|
175
176
|
saveState.className = "code-save-state error";
|
|
176
177
|
} finally {
|
|
177
178
|
saveInFlight = false;
|
|
@@ -189,7 +190,7 @@ export function createCodePane(): CodePane {
|
|
|
189
190
|
wrap.addEventListener("click", () => setWrapped(!wrapped));
|
|
190
191
|
editor.addEventListener("input", () => {
|
|
191
192
|
dirty = true;
|
|
192
|
-
saveState
|
|
193
|
+
uiText(saveState, "source.unsaved");
|
|
193
194
|
saveState.className = "code-save-state dirty";
|
|
194
195
|
if (saveTimer !== undefined) window.clearTimeout(saveTimer);
|
|
195
196
|
saveTimer = window.setTimeout(() => void save(), 480);
|
|
@@ -308,7 +309,7 @@ export function createCodePane(): CodePane {
|
|
|
308
309
|
imports: [],
|
|
309
310
|
};
|
|
310
311
|
if (activeSource !== undefined && activeSource.path !== sourceFile.path && dirty) {
|
|
311
|
-
saveState
|
|
312
|
+
uiText(saveState, "source.saving-before-switch");
|
|
312
313
|
saveState.className = "code-save-state saving";
|
|
313
314
|
void save();
|
|
314
315
|
return false;
|