@aura3d/engine 1.0.10 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/animation/AnimationClipRegistry.d.ts +16 -0
- package/dist/animation/AnimationClipRegistry.d.ts.map +1 -1
- package/dist/animation/AnimationClipRegistry.js +42 -0
- package/dist/animation/AnimationClipRegistry.js.map +1 -1
- package/dist/animation/AnimationController.d.ts +14 -0
- package/dist/animation/AnimationController.d.ts.map +1 -1
- package/dist/animation/AnimationController.js +21 -0
- package/dist/animation/AnimationController.js.map +1 -1
- package/dist/animation/AnimationStateGraph.d.ts +11 -1
- package/dist/animation/AnimationStateGraph.d.ts.map +1 -1
- package/dist/animation/AnimationStateGraph.js +50 -1
- package/dist/animation/AnimationStateGraph.js.map +1 -1
- package/dist/animation/HumanoidRetargeting.d.ts +13 -0
- package/dist/animation/HumanoidRetargeting.d.ts.map +1 -1
- package/dist/animation/HumanoidRetargeting.js +43 -0
- package/dist/animation/HumanoidRetargeting.js.map +1 -1
- package/dist/animation/MotionQuality.d.ts +6 -0
- package/dist/animation/MotionQuality.d.ts.map +1 -1
- package/dist/animation/MotionQuality.js +16 -0
- package/dist/animation/MotionQuality.js.map +1 -1
- package/dist/animation/browser-index.d.ts +2 -2
- package/dist/animation/browser-index.d.ts.map +1 -1
- package/dist/animation/browser-index.js +1 -1
- package/dist/animation/browser-index.js.map +1 -1
- package/dist/animation/index.d.ts +2 -2
- package/dist/animation/index.d.ts.map +1 -1
- package/dist/animation/index.js +1 -1
- package/dist/animation/index.js.map +1 -1
- package/dist/audio/AudioBus.d.ts +2 -0
- package/dist/audio/AudioBus.d.ts.map +1 -1
- package/dist/audio/AudioBus.js +6 -0
- package/dist/audio/AudioBus.js.map +1 -1
- package/dist/audio/AudioFileManager.d.ts +23 -0
- package/dist/audio/AudioFileManager.d.ts.map +1 -1
- package/dist/audio/AudioFileManager.js +60 -0
- package/dist/audio/AudioFileManager.js.map +1 -1
- package/dist/audio/AudioMixer.d.ts +43 -0
- package/dist/audio/AudioMixer.d.ts.map +1 -1
- package/dist/audio/AudioMixer.js +43 -0
- package/dist/audio/AudioMixer.js.map +1 -1
- package/dist/audio/AudioTimelineTrack.d.ts +25 -0
- package/dist/audio/AudioTimelineTrack.d.ts.map +1 -1
- package/dist/audio/AudioTimelineTrack.js +59 -0
- package/dist/audio/AudioTimelineTrack.js.map +1 -1
- package/dist/audio/AudioWaveform.d.ts +22 -0
- package/dist/audio/AudioWaveform.d.ts.map +1 -1
- package/dist/audio/AudioWaveform.js +18 -0
- package/dist/audio/AudioWaveform.js.map +1 -1
- package/dist/audio/index.d.ts +8 -7
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +4 -4
- package/dist/audio/index.js.map +1 -1
- package/dist/aura3d-cli/cartoon-asset-profiles.d.ts +1 -0
- package/dist/aura3d-cli/cartoon-asset-profiles.d.ts.map +1 -1
- package/dist/aura3d-cli/cartoon-asset-profiles.js +8 -4
- package/dist/aura3d-cli/cartoon-asset-profiles.js.map +1 -1
- package/dist/aura3d-cli/cli.js +47 -1
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/game-asset-validator.d.ts +2 -2
- package/dist/aura3d-cli/game-asset-validator.d.ts.map +1 -1
- package/dist/aura3d-cli/game-asset-validator.js +1 -1
- package/dist/aura3d-cli/game-asset-validator.js.map +1 -1
- package/dist/aura3d-cli/index.d.ts +48 -0
- package/dist/aura3d-cli/index.d.ts.map +1 -1
- package/dist/aura3d-cli/index.js +211 -0
- package/dist/aura3d-cli/index.js.map +1 -1
- package/dist/editor-runtime/AssetDropZone.d.ts +2 -0
- package/dist/editor-runtime/AssetDropZone.d.ts.map +1 -1
- package/dist/editor-runtime/AssetDropZone.js +14 -0
- package/dist/editor-runtime/AssetDropZone.js.map +1 -1
- package/dist/editor-runtime/CameraPathEditor.d.ts +48 -0
- package/dist/editor-runtime/CameraPathEditor.d.ts.map +1 -0
- package/dist/editor-runtime/CameraPathEditor.js +181 -0
- package/dist/editor-runtime/CameraPathEditor.js.map +1 -0
- package/dist/editor-runtime/CartoonSceneEditor.d.ts +24 -0
- package/dist/editor-runtime/CartoonSceneEditor.d.ts.map +1 -1
- package/dist/editor-runtime/CartoonSceneEditor.js +35 -2
- package/dist/editor-runtime/CartoonSceneEditor.js.map +1 -1
- package/dist/editor-runtime/EpisodeReviewPanel.d.ts +67 -0
- package/dist/editor-runtime/EpisodeReviewPanel.d.ts.map +1 -0
- package/dist/editor-runtime/EpisodeReviewPanel.js +162 -0
- package/dist/editor-runtime/EpisodeReviewPanel.js.map +1 -0
- package/dist/editor-runtime/MultiUserReviewWorkflow.d.ts +77 -0
- package/dist/editor-runtime/MultiUserReviewWorkflow.d.ts.map +1 -0
- package/dist/editor-runtime/MultiUserReviewWorkflow.js +162 -0
- package/dist/editor-runtime/MultiUserReviewWorkflow.js.map +1 -0
- package/dist/editor-runtime/NonlinearAnimationEditor.d.ts +81 -0
- package/dist/editor-runtime/NonlinearAnimationEditor.d.ts.map +1 -0
- package/dist/editor-runtime/NonlinearAnimationEditor.js +180 -0
- package/dist/editor-runtime/NonlinearAnimationEditor.js.map +1 -0
- package/dist/editor-runtime/RenderQueuePanel.d.ts +38 -0
- package/dist/editor-runtime/RenderQueuePanel.d.ts.map +1 -0
- package/dist/editor-runtime/RenderQueuePanel.js +72 -0
- package/dist/editor-runtime/RenderQueuePanel.js.map +1 -0
- package/dist/editor-runtime/TimelineEditorController.d.ts +10 -0
- package/dist/editor-runtime/TimelineEditorController.d.ts.map +1 -1
- package/dist/editor-runtime/TimelineEditorController.js +28 -3
- package/dist/editor-runtime/TimelineEditorController.js.map +1 -1
- package/dist/editor-runtime/TimelineUI.d.ts.map +1 -1
- package/dist/editor-runtime/TimelineUI.js +5 -0
- package/dist/editor-runtime/TimelineUI.js.map +1 -1
- package/dist/editor-runtime/VisualReviewDashboard.d.ts +43 -0
- package/dist/editor-runtime/VisualReviewDashboard.d.ts.map +1 -0
- package/dist/editor-runtime/VisualReviewDashboard.js +47 -0
- package/dist/editor-runtime/VisualReviewDashboard.js.map +1 -0
- package/dist/editor-runtime/index.d.ts +14 -2
- package/dist/editor-runtime/index.d.ts.map +1 -1
- package/dist/editor-runtime/index.js +6 -0
- package/dist/editor-runtime/index.js.map +1 -1
- package/dist/engine/agent-api/AssetLibraryBrowser.d.ts +38 -0
- package/dist/engine/agent-api/AssetLibraryBrowser.d.ts.map +1 -1
- package/dist/engine/agent-api/AssetLibraryBrowser.js +53 -1
- package/dist/engine/agent-api/AssetLibraryBrowser.js.map +1 -1
- package/dist/engine/agent-api/AudioMuxer.d.ts +4 -0
- package/dist/engine/agent-api/AudioMuxer.d.ts.map +1 -1
- package/dist/engine/agent-api/AudioMuxer.js +6 -0
- package/dist/engine/agent-api/AudioMuxer.js.map +1 -1
- package/dist/engine/agent-api/AudioVisemeAnalyzer.d.ts +4 -0
- package/dist/engine/agent-api/AudioVisemeAnalyzer.d.ts.map +1 -1
- package/dist/engine/agent-api/AudioVisemeAnalyzer.js +3 -0
- package/dist/engine/agent-api/AudioVisemeAnalyzer.js.map +1 -1
- package/dist/engine/agent-api/BatchEpisodeRenderer.d.ts +31 -0
- package/dist/engine/agent-api/BatchEpisodeRenderer.d.ts.map +1 -0
- package/dist/engine/agent-api/BatchEpisodeRenderer.js +20 -0
- package/dist/engine/agent-api/BatchEpisodeRenderer.js.map +1 -0
- package/dist/engine/agent-api/BrowserFrameCaptureAdapter.d.ts +65 -0
- package/dist/engine/agent-api/BrowserFrameCaptureAdapter.d.ts.map +1 -0
- package/dist/engine/agent-api/BrowserFrameCaptureAdapter.js +42 -0
- package/dist/engine/agent-api/BrowserFrameCaptureAdapter.js.map +1 -0
- package/dist/engine/agent-api/CameraPresetLibrary.d.ts +1 -1
- package/dist/engine/agent-api/CameraPresetLibrary.d.ts.map +1 -1
- package/dist/engine/agent-api/CameraPresetLibrary.js +18 -0
- package/dist/engine/agent-api/CameraPresetLibrary.js.map +1 -1
- package/dist/engine/agent-api/CaptionExporter.d.ts +5 -1
- package/dist/engine/agent-api/CaptionExporter.d.ts.map +1 -1
- package/dist/engine/agent-api/CaptionExporter.js +18 -3
- package/dist/engine/agent-api/CaptionExporter.js.map +1 -1
- package/dist/engine/agent-api/CartoonAssetManifest.d.ts +19 -1
- package/dist/engine/agent-api/CartoonAssetManifest.d.ts.map +1 -1
- package/dist/engine/agent-api/CartoonAssetManifest.js +62 -1
- package/dist/engine/agent-api/CartoonAssetManifest.js.map +1 -1
- package/dist/engine/agent-api/CartoonDirector.d.ts +26 -1
- package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -1
- package/dist/engine/agent-api/CartoonDirector.js +92 -2
- package/dist/engine/agent-api/CartoonDirector.js.map +1 -1
- package/dist/engine/agent-api/CartoonEpisodePackage.d.ts +51 -0
- package/dist/engine/agent-api/CartoonEpisodePackage.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonEpisodePackage.js +79 -0
- package/dist/engine/agent-api/CartoonEpisodePackage.js.map +1 -0
- package/dist/engine/agent-api/CartoonMotionQuality.d.ts +83 -0
- package/dist/engine/agent-api/CartoonMotionQuality.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonMotionQuality.js +128 -0
- package/dist/engine/agent-api/CartoonMotionQuality.js.map +1 -0
- package/dist/engine/agent-api/CartoonPerformance.d.ts +1 -0
- package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -1
- package/dist/engine/agent-api/CartoonPerformance.js +28 -0
- package/dist/engine/agent-api/CartoonPerformance.js.map +1 -1
- package/dist/engine/agent-api/CartoonRenderQueue.d.ts +11 -0
- package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -1
- package/dist/engine/agent-api/CartoonRenderQueue.js +25 -0
- package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -1
- package/dist/engine/agent-api/CartoonRouteProof.d.ts +112 -0
- package/dist/engine/agent-api/CartoonRouteProof.d.ts.map +1 -0
- package/dist/engine/agent-api/CartoonRouteProof.js +127 -0
- package/dist/engine/agent-api/CartoonRouteProof.js.map +1 -0
- package/dist/engine/agent-api/CloudRenderAdapter.d.ts +55 -0
- package/dist/engine/agent-api/CloudRenderAdapter.d.ts.map +1 -0
- package/dist/engine/agent-api/CloudRenderAdapter.js +75 -0
- package/dist/engine/agent-api/CloudRenderAdapter.js.map +1 -0
- package/dist/engine/agent-api/ExternalPhonemeAnalyzer.d.ts +54 -0
- package/dist/engine/agent-api/ExternalPhonemeAnalyzer.d.ts.map +1 -0
- package/dist/engine/agent-api/ExternalPhonemeAnalyzer.js +107 -0
- package/dist/engine/agent-api/ExternalPhonemeAnalyzer.js.map +1 -0
- package/dist/engine/agent-api/FrameEncoder.d.ts +18 -1
- package/dist/engine/agent-api/FrameEncoder.d.ts.map +1 -1
- package/dist/engine/agent-api/FrameEncoder.js +14 -0
- package/dist/engine/agent-api/FrameEncoder.js.map +1 -1
- package/dist/engine/agent-api/MediaRecorderFrameEncoder.d.ts +19 -0
- package/dist/engine/agent-api/MediaRecorderFrameEncoder.d.ts.map +1 -0
- package/dist/engine/agent-api/MediaRecorderFrameEncoder.js +74 -0
- package/dist/engine/agent-api/MediaRecorderFrameEncoder.js.map +1 -0
- package/dist/engine/agent-api/PerformanceBlender.d.ts +19 -0
- package/dist/engine/agent-api/PerformanceBlender.d.ts.map +1 -1
- package/dist/engine/agent-api/PerformanceBlender.js +33 -0
- package/dist/engine/agent-api/PerformanceBlender.js.map +1 -1
- package/dist/engine/agent-api/PerformanceCaptureSession.d.ts +65 -0
- package/dist/engine/agent-api/PerformanceCaptureSession.d.ts.map +1 -0
- package/dist/engine/agent-api/PerformanceCaptureSession.js +131 -0
- package/dist/engine/agent-api/PerformanceCaptureSession.js.map +1 -0
- package/dist/engine/agent-api/PngSequenceEncoder.d.ts +34 -0
- package/dist/engine/agent-api/PngSequenceEncoder.d.ts.map +1 -0
- package/dist/engine/agent-api/PngSequenceEncoder.js +75 -0
- package/dist/engine/agent-api/PngSequenceEncoder.js.map +1 -0
- package/dist/engine/agent-api/PromptAnimationContract.d.ts +25 -0
- package/dist/engine/agent-api/PromptAnimationContract.d.ts.map +1 -1
- package/dist/engine/agent-api/PromptAnimationContract.js +60 -1
- package/dist/engine/agent-api/PromptAnimationContract.js.map +1 -1
- package/dist/engine/agent-api/PublishingPipeline.d.ts +5 -0
- package/dist/engine/agent-api/PublishingPipeline.d.ts.map +1 -1
- package/dist/engine/agent-api/PublishingPipeline.js +17 -3
- package/dist/engine/agent-api/PublishingPipeline.js.map +1 -1
- package/dist/engine/agent-api/SceneSequencer.d.ts +13 -0
- package/dist/engine/agent-api/SceneSequencer.d.ts.map +1 -1
- package/dist/engine/agent-api/SceneSequencer.js +40 -0
- package/dist/engine/agent-api/SceneSequencer.js.map +1 -1
- package/dist/engine/agent-api/VideoExportPipeline.d.ts +14 -0
- package/dist/engine/agent-api/VideoExportPipeline.d.ts.map +1 -1
- package/dist/engine/agent-api/VideoExportPipeline.js +32 -1
- package/dist/engine/agent-api/VideoExportPipeline.js.map +1 -1
- package/dist/engine/agent-api/WebCodecsFrameEncoder.d.ts +21 -0
- package/dist/engine/agent-api/WebCodecsFrameEncoder.d.ts.map +1 -0
- package/dist/engine/agent-api/WebCodecsFrameEncoder.js +94 -0
- package/dist/engine/agent-api/WebCodecsFrameEncoder.js.map +1 -0
- package/dist/engine/agent-api/YouTubeUploadAdapter.d.ts +48 -0
- package/dist/engine/agent-api/YouTubeUploadAdapter.d.ts.map +1 -0
- package/dist/engine/agent-api/YouTubeUploadAdapter.js +114 -0
- package/dist/engine/agent-api/YouTubeUploadAdapter.js.map +1 -0
- package/dist/engine/agent-api/index.d.ts +29 -0
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +22 -0
- package/dist/engine/agent-api/index.js.map +1 -1
- package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
- package/dist/engine/index.d.ts +2 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/index.js.map +1 -1
- package/dist/rendering/FrameVisualMetrics.d.ts +19 -0
- package/dist/rendering/FrameVisualMetrics.d.ts.map +1 -1
- package/dist/rendering/FrameVisualMetrics.js +57 -0
- package/dist/rendering/FrameVisualMetrics.js.map +1 -1
- package/dist/rendering/cartoon/CartoonMaterialStyle.d.ts +19 -0
- package/dist/rendering/cartoon/CartoonMaterialStyle.d.ts.map +1 -0
- package/dist/rendering/cartoon/CartoonMaterialStyle.js +13 -0
- package/dist/rendering/cartoon/CartoonMaterialStyle.js.map +1 -0
- package/dist/rendering/cartoon/CartoonRenderPreset.d.ts +36 -0
- package/dist/rendering/cartoon/CartoonRenderPreset.d.ts.map +1 -0
- package/dist/rendering/cartoon/CartoonRenderPreset.js +23 -0
- package/dist/rendering/cartoon/CartoonRenderPreset.js.map +1 -0
- package/dist/rendering/cartoon/CartoonVisualQuality.d.ts +28 -0
- package/dist/rendering/cartoon/CartoonVisualQuality.d.ts.map +1 -0
- package/dist/rendering/cartoon/CartoonVisualQuality.js +39 -0
- package/dist/rendering/cartoon/CartoonVisualQuality.js.map +1 -0
- package/dist/rendering/cartoon/index.d.ts +4 -0
- package/dist/rendering/cartoon/index.d.ts.map +1 -0
- package/dist/rendering/cartoon/index.js +4 -0
- package/dist/rendering/cartoon/index.js.map +1 -0
- package/dist/rendering/index.d.ts +3 -2
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +2 -1
- package/dist/rendering/index.js.map +1 -1
- package/package.json +42 -24
- package/templates/product-viewer/tests/screenshot.spec.ts +8 -16
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export type ReviewParticipantRole = "owner" | "reviewer" | "animator" | "audio" | "viewer";
|
|
2
|
+
export type ReviewDecisionStatus = "pending" | "approved" | "changes-requested";
|
|
3
|
+
export type ReviewWorkflowStatus = "draft" | "needs-review" | "changes-requested" | "approved";
|
|
4
|
+
export interface ReviewParticipant {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly role: ReviewParticipantRole;
|
|
8
|
+
readonly active?: boolean | undefined;
|
|
9
|
+
}
|
|
10
|
+
export interface ReviewThread {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
readonly authorId: string;
|
|
13
|
+
readonly text: string;
|
|
14
|
+
readonly time?: number | undefined;
|
|
15
|
+
readonly frame?: number | undefined;
|
|
16
|
+
readonly assignedTo?: string | undefined;
|
|
17
|
+
readonly resolved: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ReviewDecision {
|
|
20
|
+
readonly reviewerId: string;
|
|
21
|
+
readonly status: ReviewDecisionStatus;
|
|
22
|
+
readonly at: string;
|
|
23
|
+
readonly note?: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
export interface MultiUserReviewWorkflowState {
|
|
26
|
+
readonly packageId: string;
|
|
27
|
+
readonly status?: ReviewWorkflowStatus | undefined;
|
|
28
|
+
readonly requiredReviewerCount?: number | undefined;
|
|
29
|
+
readonly participants: readonly ReviewParticipant[];
|
|
30
|
+
readonly threads: readonly ReviewThread[];
|
|
31
|
+
readonly decisions: readonly ReviewDecision[];
|
|
32
|
+
}
|
|
33
|
+
export interface MultiUserReviewWorkflowSnapshot {
|
|
34
|
+
readonly kind: "multi-user-review-workflow";
|
|
35
|
+
readonly packageId: string;
|
|
36
|
+
readonly status: ReviewWorkflowStatus;
|
|
37
|
+
readonly participantCount: number;
|
|
38
|
+
readonly activeParticipantCount: number;
|
|
39
|
+
readonly reviewerCount: number;
|
|
40
|
+
readonly requiredReviewerCount: number;
|
|
41
|
+
readonly approvedReviewerCount: number;
|
|
42
|
+
readonly changeRequestCount: number;
|
|
43
|
+
readonly threadCount: number;
|
|
44
|
+
readonly unresolvedThreadCount: number;
|
|
45
|
+
readonly assignedThreadCount: number;
|
|
46
|
+
readonly canPublish: boolean;
|
|
47
|
+
readonly participants: readonly ReviewParticipant[];
|
|
48
|
+
readonly threads: readonly ReviewThread[];
|
|
49
|
+
readonly decisions: readonly ReviewDecision[];
|
|
50
|
+
readonly evidence: {
|
|
51
|
+
readonly multiUserReview: boolean;
|
|
52
|
+
readonly assignmentWorkflow: boolean;
|
|
53
|
+
readonly reviewerQuorum: boolean;
|
|
54
|
+
readonly publishBlockedByOpenThreads: boolean;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export declare class MultiUserReviewWorkflow {
|
|
58
|
+
private packageId;
|
|
59
|
+
private status;
|
|
60
|
+
private requiredReviewerCount;
|
|
61
|
+
private participants;
|
|
62
|
+
private threads;
|
|
63
|
+
private decisions;
|
|
64
|
+
constructor(state: MultiUserReviewWorkflowState);
|
|
65
|
+
addParticipant(participant: ReviewParticipant): MultiUserReviewWorkflowSnapshot;
|
|
66
|
+
addThread(thread: ReviewThread): MultiUserReviewWorkflowSnapshot;
|
|
67
|
+
assignThread(threadId: string, participantId: string): MultiUserReviewWorkflowSnapshot;
|
|
68
|
+
resolveThread(threadId: string): MultiUserReviewWorkflowSnapshot;
|
|
69
|
+
recordDecision(decision: ReviewDecision): MultiUserReviewWorkflowSnapshot;
|
|
70
|
+
markNeedsReview(): MultiUserReviewWorkflowSnapshot;
|
|
71
|
+
serialize(): MultiUserReviewWorkflowState;
|
|
72
|
+
snapshot(): MultiUserReviewWorkflowSnapshot;
|
|
73
|
+
private requireParticipant;
|
|
74
|
+
private requireThread;
|
|
75
|
+
}
|
|
76
|
+
export declare function createMultiUserReviewWorkflow(state: MultiUserReviewWorkflowState): MultiUserReviewWorkflow;
|
|
77
|
+
//# sourceMappingURL=MultiUserReviewWorkflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiUserReviewWorkflow.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/MultiUserReviewWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
export class MultiUserReviewWorkflow {
|
|
2
|
+
packageId;
|
|
3
|
+
status;
|
|
4
|
+
requiredReviewerCount;
|
|
5
|
+
participants = new Map();
|
|
6
|
+
threads = new Map();
|
|
7
|
+
decisions = new Map();
|
|
8
|
+
constructor(state) {
|
|
9
|
+
this.packageId = nonEmpty(state.packageId, "Review package id");
|
|
10
|
+
this.status = state.status ?? "needs-review";
|
|
11
|
+
this.requiredReviewerCount = Math.max(1, Math.floor(state.requiredReviewerCount ?? 1));
|
|
12
|
+
for (const participant of state.participants)
|
|
13
|
+
this.addParticipant(participant);
|
|
14
|
+
for (const thread of state.threads)
|
|
15
|
+
this.addThread(thread);
|
|
16
|
+
for (const decision of state.decisions)
|
|
17
|
+
this.recordDecision(decision);
|
|
18
|
+
}
|
|
19
|
+
addParticipant(participant) {
|
|
20
|
+
const clean = sanitizeParticipant(participant);
|
|
21
|
+
this.participants.set(clean.id, clean);
|
|
22
|
+
return this.snapshot();
|
|
23
|
+
}
|
|
24
|
+
addThread(thread) {
|
|
25
|
+
const clean = sanitizeThread(thread);
|
|
26
|
+
this.requireParticipant(clean.authorId);
|
|
27
|
+
if (clean.assignedTo)
|
|
28
|
+
this.requireParticipant(clean.assignedTo);
|
|
29
|
+
this.threads.set(clean.id, clean);
|
|
30
|
+
if (!clean.resolved && this.status === "approved")
|
|
31
|
+
this.status = "changes-requested";
|
|
32
|
+
return this.snapshot();
|
|
33
|
+
}
|
|
34
|
+
assignThread(threadId, participantId) {
|
|
35
|
+
this.requireParticipant(participantId);
|
|
36
|
+
const thread = this.requireThread(threadId);
|
|
37
|
+
this.threads.set(threadId, { ...thread, assignedTo: participantId });
|
|
38
|
+
return this.snapshot();
|
|
39
|
+
}
|
|
40
|
+
resolveThread(threadId) {
|
|
41
|
+
const thread = this.requireThread(threadId);
|
|
42
|
+
this.threads.set(threadId, { ...thread, resolved: true });
|
|
43
|
+
return this.snapshot();
|
|
44
|
+
}
|
|
45
|
+
recordDecision(decision) {
|
|
46
|
+
const clean = sanitizeDecision(decision);
|
|
47
|
+
const participant = this.requireParticipant(clean.reviewerId);
|
|
48
|
+
if (participant.role !== "reviewer" && participant.role !== "owner") {
|
|
49
|
+
throw new Error(`Review participant "${clean.reviewerId}" is not allowed to approve or request changes.`);
|
|
50
|
+
}
|
|
51
|
+
this.decisions.set(clean.reviewerId, clean);
|
|
52
|
+
if (clean.status === "changes-requested")
|
|
53
|
+
this.status = "changes-requested";
|
|
54
|
+
else if (this.snapshot().canPublish)
|
|
55
|
+
this.status = "approved";
|
|
56
|
+
return this.snapshot();
|
|
57
|
+
}
|
|
58
|
+
markNeedsReview() {
|
|
59
|
+
this.status = "needs-review";
|
|
60
|
+
return this.snapshot();
|
|
61
|
+
}
|
|
62
|
+
serialize() {
|
|
63
|
+
return {
|
|
64
|
+
packageId: this.packageId,
|
|
65
|
+
status: this.status,
|
|
66
|
+
requiredReviewerCount: this.requiredReviewerCount,
|
|
67
|
+
participants: [...this.participants.values()],
|
|
68
|
+
threads: [...this.threads.values()],
|
|
69
|
+
decisions: [...this.decisions.values()]
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
snapshot() {
|
|
73
|
+
const participants = [...this.participants.values()];
|
|
74
|
+
const threads = [...this.threads.values()];
|
|
75
|
+
const decisions = [...this.decisions.values()];
|
|
76
|
+
const reviewerCount = participants.filter((participant) => participant.role === "owner" || participant.role === "reviewer").length;
|
|
77
|
+
const approvedReviewerCount = decisions.filter((decision) => decision.status === "approved").length;
|
|
78
|
+
const changeRequestCount = decisions.filter((decision) => decision.status === "changes-requested").length;
|
|
79
|
+
const unresolvedThreadCount = threads.filter((thread) => !thread.resolved).length;
|
|
80
|
+
const canPublish = approvedReviewerCount >= this.requiredReviewerCount && changeRequestCount === 0 && unresolvedThreadCount === 0;
|
|
81
|
+
const status = canPublish ? "approved" : changeRequestCount > 0 ? "changes-requested" : this.status === "draft" ? "draft" : "needs-review";
|
|
82
|
+
return {
|
|
83
|
+
kind: "multi-user-review-workflow",
|
|
84
|
+
packageId: this.packageId,
|
|
85
|
+
status,
|
|
86
|
+
participantCount: participants.length,
|
|
87
|
+
activeParticipantCount: participants.filter((participant) => participant.active !== false).length,
|
|
88
|
+
reviewerCount,
|
|
89
|
+
requiredReviewerCount: this.requiredReviewerCount,
|
|
90
|
+
approvedReviewerCount,
|
|
91
|
+
changeRequestCount,
|
|
92
|
+
threadCount: threads.length,
|
|
93
|
+
unresolvedThreadCount,
|
|
94
|
+
assignedThreadCount: threads.filter((thread) => Boolean(thread.assignedTo)).length,
|
|
95
|
+
canPublish,
|
|
96
|
+
participants,
|
|
97
|
+
threads,
|
|
98
|
+
decisions,
|
|
99
|
+
evidence: {
|
|
100
|
+
multiUserReview: participants.length > 1,
|
|
101
|
+
assignmentWorkflow: threads.some((thread) => Boolean(thread.assignedTo)),
|
|
102
|
+
reviewerQuorum: approvedReviewerCount >= this.requiredReviewerCount,
|
|
103
|
+
publishBlockedByOpenThreads: unresolvedThreadCount > 0
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
requireParticipant(id) {
|
|
108
|
+
const participant = this.participants.get(id);
|
|
109
|
+
if (!participant)
|
|
110
|
+
throw new Error(`Unknown review participant: ${id}`);
|
|
111
|
+
return participant;
|
|
112
|
+
}
|
|
113
|
+
requireThread(id) {
|
|
114
|
+
const thread = this.threads.get(id);
|
|
115
|
+
if (!thread)
|
|
116
|
+
throw new Error(`Unknown review thread: ${id}`);
|
|
117
|
+
return thread;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function createMultiUserReviewWorkflow(state) {
|
|
121
|
+
return new MultiUserReviewWorkflow(state);
|
|
122
|
+
}
|
|
123
|
+
function sanitizeParticipant(participant) {
|
|
124
|
+
return {
|
|
125
|
+
id: nonEmpty(participant.id, "Review participant id"),
|
|
126
|
+
name: nonEmpty(participant.name, "Review participant name"),
|
|
127
|
+
role: participant.role,
|
|
128
|
+
active: participant.active
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function sanitizeThread(thread) {
|
|
132
|
+
if (thread.time !== undefined && (!Number.isFinite(thread.time) || thread.time < 0)) {
|
|
133
|
+
throw new Error("Review thread time must be a non-negative finite number.");
|
|
134
|
+
}
|
|
135
|
+
if (thread.frame !== undefined && (!Number.isInteger(thread.frame) || thread.frame < 0)) {
|
|
136
|
+
throw new Error("Review thread frame must be a non-negative integer.");
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
id: nonEmpty(thread.id, "Review thread id"),
|
|
140
|
+
authorId: nonEmpty(thread.authorId, "Review thread author"),
|
|
141
|
+
text: nonEmpty(thread.text, "Review thread text"),
|
|
142
|
+
time: thread.time,
|
|
143
|
+
frame: thread.frame,
|
|
144
|
+
assignedTo: thread.assignedTo,
|
|
145
|
+
resolved: thread.resolved
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function sanitizeDecision(decision) {
|
|
149
|
+
return {
|
|
150
|
+
reviewerId: nonEmpty(decision.reviewerId, "Review decision reviewer"),
|
|
151
|
+
status: decision.status,
|
|
152
|
+
at: nonEmpty(decision.at, "Review decision timestamp"),
|
|
153
|
+
note: decision.note
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function nonEmpty(value, label) {
|
|
157
|
+
const trimmed = value.trim();
|
|
158
|
+
if (!trimmed)
|
|
159
|
+
throw new Error(`${label} must be a non-empty string.`);
|
|
160
|
+
return trimmed;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=MultiUserReviewWorkflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiUserReviewWorkflow.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/MultiUserReviewWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type TimelineEditorSnapshot } from "./TimelineEditorController";
|
|
2
|
+
import { type TimelineClipConfig, type TimelineModelConfig, type TimelineTrackConfig } from "./TimelineModel";
|
|
3
|
+
import { type TimelineEditorTrackKind } from "./TimelineTrackTypes";
|
|
4
|
+
export type NonlinearBinAssetKind = "animation" | "audio" | "camera" | "shot" | "sequence" | "caption" | "viseme";
|
|
5
|
+
export interface NonlinearBinAsset {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly kind: NonlinearBinAssetKind;
|
|
9
|
+
readonly assetId?: string | undefined;
|
|
10
|
+
readonly clipName?: string | undefined;
|
|
11
|
+
readonly duration?: number | undefined;
|
|
12
|
+
readonly metadata?: Readonly<Record<string, string | number | boolean>> | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface NonlinearSequenceConfig {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly name: string;
|
|
17
|
+
readonly timeline?: TimelineModelConfig | undefined;
|
|
18
|
+
}
|
|
19
|
+
export interface NonlinearSequenceSnapshot {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly trackCount: number;
|
|
23
|
+
readonly clipCount: number;
|
|
24
|
+
readonly duration: number;
|
|
25
|
+
}
|
|
26
|
+
export interface NonlinearAnimationEditorSnapshot {
|
|
27
|
+
readonly kind: "nonlinear-animation-editor";
|
|
28
|
+
readonly activeSequenceId: string;
|
|
29
|
+
readonly sequenceCount: number;
|
|
30
|
+
readonly binAssetCount: number;
|
|
31
|
+
readonly nestedSequenceClipCount: number;
|
|
32
|
+
readonly totalTrackCount: number;
|
|
33
|
+
readonly totalClipCount: number;
|
|
34
|
+
readonly sequences: readonly NonlinearSequenceSnapshot[];
|
|
35
|
+
readonly activeTimeline: TimelineEditorSnapshot;
|
|
36
|
+
readonly evidence: {
|
|
37
|
+
readonly nonlinearSequences: boolean;
|
|
38
|
+
readonly trimSplitMoveDuplicate: boolean;
|
|
39
|
+
readonly nestedSequences: boolean;
|
|
40
|
+
readonly multiTrackTimeline: boolean;
|
|
41
|
+
readonly serialization: true;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface NonlinearAnimationEditorState {
|
|
45
|
+
readonly activeSequenceId: string;
|
|
46
|
+
readonly binAssets: readonly NonlinearBinAsset[];
|
|
47
|
+
readonly sequences: readonly NonlinearSequenceConfig[];
|
|
48
|
+
}
|
|
49
|
+
export declare class NonlinearAnimationEditor {
|
|
50
|
+
private readonly binAssets;
|
|
51
|
+
private readonly sequences;
|
|
52
|
+
private activeSequenceId;
|
|
53
|
+
constructor(state: NonlinearAnimationEditorState);
|
|
54
|
+
addBinAsset(asset: NonlinearBinAsset): NonlinearBinAsset;
|
|
55
|
+
createSequence(config: NonlinearSequenceConfig): NonlinearSequenceSnapshot;
|
|
56
|
+
selectSequence(sequenceId: string): NonlinearAnimationEditorSnapshot;
|
|
57
|
+
addTrack(kind: TimelineEditorTrackKind, name?: string, options?: Omit<TimelineTrackConfig, "name" | "type">): Promise<string>;
|
|
58
|
+
insertAssetClip(trackId: string, assetId: string, options: Omit<TimelineClipConfig, "name" | "startTime" | "duration" | "assetId" | "clipName"> & {
|
|
59
|
+
readonly id?: string | undefined;
|
|
60
|
+
readonly name?: string | undefined;
|
|
61
|
+
readonly startTime: number;
|
|
62
|
+
readonly duration?: number | undefined;
|
|
63
|
+
}): Promise<string>;
|
|
64
|
+
insertNestedSequence(trackId: string, sequenceId: string, options: Omit<TimelineClipConfig, "name" | "startTime" | "duration"> & {
|
|
65
|
+
readonly id?: string | undefined;
|
|
66
|
+
readonly startTime: number;
|
|
67
|
+
readonly duration?: number | undefined;
|
|
68
|
+
}): Promise<string>;
|
|
69
|
+
moveClip(clipId: string, startTime: number): Promise<void>;
|
|
70
|
+
trimClip(clipId: string, duration: number, startTime?: number): Promise<void>;
|
|
71
|
+
splitClip(clipId: string, splitTime: number): Promise<readonly string[]>;
|
|
72
|
+
duplicateClip(clipId: string, timeOffset?: number): Promise<string>;
|
|
73
|
+
serialize(): NonlinearAnimationEditorState;
|
|
74
|
+
snapshot(): NonlinearAnimationEditorSnapshot;
|
|
75
|
+
private activeSequence;
|
|
76
|
+
private requireSequence;
|
|
77
|
+
private requireBinAsset;
|
|
78
|
+
private sequenceSnapshot;
|
|
79
|
+
}
|
|
80
|
+
export declare function createNonlinearAnimationEditor(state: NonlinearAnimationEditorState): NonlinearAnimationEditor;
|
|
81
|
+
//# sourceMappingURL=NonlinearAnimationEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NonlinearAnimationEditor.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/NonlinearAnimationEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { TimelineEditorController } from "./TimelineEditorController.js";
|
|
2
|
+
import { TimelineModel } from "./TimelineModel.js";
|
|
3
|
+
import { createTimelineTrackConfig } from "./TimelineTrackTypes.js";
|
|
4
|
+
export class NonlinearAnimationEditor {
|
|
5
|
+
binAssets = new Map();
|
|
6
|
+
sequences = new Map();
|
|
7
|
+
activeSequenceId;
|
|
8
|
+
constructor(state) {
|
|
9
|
+
if (state.sequences.length === 0)
|
|
10
|
+
throw new Error("Nonlinear animation editor requires at least one sequence.");
|
|
11
|
+
for (const asset of state.binAssets)
|
|
12
|
+
this.addBinAsset(asset);
|
|
13
|
+
for (const sequence of state.sequences)
|
|
14
|
+
this.createSequence(sequence);
|
|
15
|
+
this.activeSequenceId = nonEmpty(state.activeSequenceId, "Active sequence id");
|
|
16
|
+
this.requireSequence(this.activeSequenceId);
|
|
17
|
+
}
|
|
18
|
+
addBinAsset(asset) {
|
|
19
|
+
const clean = sanitizeBinAsset(asset);
|
|
20
|
+
this.binAssets.set(clean.id, clean);
|
|
21
|
+
return clean;
|
|
22
|
+
}
|
|
23
|
+
createSequence(config) {
|
|
24
|
+
const id = nonEmpty(config.id, "Sequence id");
|
|
25
|
+
const timeline = new TimelineModel({
|
|
26
|
+
id,
|
|
27
|
+
name: config.name,
|
|
28
|
+
duration: 10,
|
|
29
|
+
frameRate: 24,
|
|
30
|
+
loopMode: "none",
|
|
31
|
+
...config.timeline
|
|
32
|
+
});
|
|
33
|
+
this.sequences.set(id, {
|
|
34
|
+
id,
|
|
35
|
+
name: nonEmpty(config.name, "Sequence name"),
|
|
36
|
+
controller: new TimelineEditorController({ timeline })
|
|
37
|
+
});
|
|
38
|
+
return this.sequenceSnapshot(this.requireSequence(id));
|
|
39
|
+
}
|
|
40
|
+
selectSequence(sequenceId) {
|
|
41
|
+
this.activeSequenceId = this.requireSequence(sequenceId).id;
|
|
42
|
+
return this.snapshot();
|
|
43
|
+
}
|
|
44
|
+
async addTrack(kind, name, options = {}) {
|
|
45
|
+
const track = await this.activeSequence().controller.addTrack(kind, name, options);
|
|
46
|
+
return track.id;
|
|
47
|
+
}
|
|
48
|
+
async insertAssetClip(trackId, assetId, options) {
|
|
49
|
+
const asset = this.requireBinAsset(assetId);
|
|
50
|
+
const clip = await this.activeSequence().controller.addClip(trackId, {
|
|
51
|
+
...options,
|
|
52
|
+
id: options.id ?? `${asset.id}-${Math.round(options.startTime * 1000)}`,
|
|
53
|
+
name: options.name ?? asset.name,
|
|
54
|
+
startTime: options.startTime,
|
|
55
|
+
duration: options.duration ?? asset.duration ?? 1,
|
|
56
|
+
assetId: asset.assetId ?? asset.id,
|
|
57
|
+
clipName: asset.clipName ?? asset.name,
|
|
58
|
+
properties: {
|
|
59
|
+
...(options.properties ?? {}),
|
|
60
|
+
binAssetId: asset.id,
|
|
61
|
+
binAssetKind: asset.kind
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return clip.id;
|
|
65
|
+
}
|
|
66
|
+
async insertNestedSequence(trackId, sequenceId, options) {
|
|
67
|
+
const nested = this.requireSequence(sequenceId);
|
|
68
|
+
const clip = await this.activeSequence().controller.addClip(trackId, {
|
|
69
|
+
...options,
|
|
70
|
+
id: options.id ?? `${sequenceId}-nested-${Math.round(options.startTime * 1000)}`,
|
|
71
|
+
name: nested.name,
|
|
72
|
+
startTime: options.startTime,
|
|
73
|
+
duration: options.duration ?? nested.controller.timeline.duration,
|
|
74
|
+
properties: {
|
|
75
|
+
...(options.properties ?? {}),
|
|
76
|
+
nestedSequenceId: nested.id
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return clip.id;
|
|
80
|
+
}
|
|
81
|
+
async moveClip(clipId, startTime) {
|
|
82
|
+
await this.activeSequence().controller.moveClip(clipId, startTime);
|
|
83
|
+
}
|
|
84
|
+
async trimClip(clipId, duration, startTime) {
|
|
85
|
+
await this.activeSequence().controller.resizeClip(clipId, duration, startTime);
|
|
86
|
+
}
|
|
87
|
+
async splitClip(clipId, splitTime) {
|
|
88
|
+
const clips = await this.activeSequence().controller.splitClip(clipId, splitTime);
|
|
89
|
+
return clips.map((clip) => clip.id);
|
|
90
|
+
}
|
|
91
|
+
async duplicateClip(clipId, timeOffset) {
|
|
92
|
+
const clip = await this.activeSequence().controller.duplicateClip(clipId, timeOffset);
|
|
93
|
+
return clip.id;
|
|
94
|
+
}
|
|
95
|
+
serialize() {
|
|
96
|
+
return {
|
|
97
|
+
activeSequenceId: this.activeSequenceId,
|
|
98
|
+
binAssets: [...this.binAssets.values()],
|
|
99
|
+
sequences: [...this.sequences.values()].map((sequence) => ({
|
|
100
|
+
id: sequence.id,
|
|
101
|
+
name: sequence.name,
|
|
102
|
+
timeline: sequence.controller.serializeTimeline()
|
|
103
|
+
}))
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
snapshot() {
|
|
107
|
+
const sequences = [...this.sequences.values()];
|
|
108
|
+
const active = this.activeSequence();
|
|
109
|
+
const totalTrackCount = sequences.reduce((count, sequence) => count + sequence.controller.timeline.tracks.length, 0);
|
|
110
|
+
const totalClipCount = sequences.reduce((count, sequence) => count + sequence.controller.timeline.tracks.reduce((clipCount, track) => clipCount + track.clips.length, 0), 0);
|
|
111
|
+
const nestedSequenceClipCount = sequences.reduce((count, sequence) => count + sequence.controller.timeline.tracks.reduce((trackCount, track) => trackCount + track.clips.filter((clip) => typeof clip.properties.nestedSequenceId === "string").length, 0), 0);
|
|
112
|
+
return {
|
|
113
|
+
kind: "nonlinear-animation-editor",
|
|
114
|
+
activeSequenceId: active.id,
|
|
115
|
+
sequenceCount: sequences.length,
|
|
116
|
+
binAssetCount: this.binAssets.size,
|
|
117
|
+
nestedSequenceClipCount,
|
|
118
|
+
totalTrackCount,
|
|
119
|
+
totalClipCount,
|
|
120
|
+
sequences: sequences.map((sequence) => this.sequenceSnapshot(sequence)),
|
|
121
|
+
activeTimeline: active.controller.snapshot(),
|
|
122
|
+
evidence: {
|
|
123
|
+
nonlinearSequences: sequences.length > 1,
|
|
124
|
+
trimSplitMoveDuplicate: active.controller.history.canUndo || active.controller.history.canRedo,
|
|
125
|
+
nestedSequences: nestedSequenceClipCount > 0,
|
|
126
|
+
multiTrackTimeline: totalTrackCount > 1,
|
|
127
|
+
serialization: true
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
activeSequence() {
|
|
132
|
+
return this.requireSequence(this.activeSequenceId);
|
|
133
|
+
}
|
|
134
|
+
requireSequence(id) {
|
|
135
|
+
const sequence = this.sequences.get(id);
|
|
136
|
+
if (!sequence)
|
|
137
|
+
throw new Error(`Unknown nonlinear sequence: ${id}`);
|
|
138
|
+
return sequence;
|
|
139
|
+
}
|
|
140
|
+
requireBinAsset(id) {
|
|
141
|
+
const asset = this.binAssets.get(id);
|
|
142
|
+
if (!asset)
|
|
143
|
+
throw new Error(`Unknown nonlinear bin asset: ${id}`);
|
|
144
|
+
return asset;
|
|
145
|
+
}
|
|
146
|
+
sequenceSnapshot(sequence) {
|
|
147
|
+
const timeline = sequence.controller.timeline;
|
|
148
|
+
return {
|
|
149
|
+
id: sequence.id,
|
|
150
|
+
name: sequence.name,
|
|
151
|
+
trackCount: timeline.tracks.length,
|
|
152
|
+
clipCount: timeline.tracks.reduce((count, track) => count + track.clips.length, 0),
|
|
153
|
+
duration: timeline.duration
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export function createNonlinearAnimationEditor(state) {
|
|
158
|
+
return new NonlinearAnimationEditor(state);
|
|
159
|
+
}
|
|
160
|
+
function sanitizeBinAsset(asset) {
|
|
161
|
+
if (asset.duration !== undefined && (!Number.isFinite(asset.duration) || asset.duration <= 0)) {
|
|
162
|
+
throw new Error(`Nonlinear bin asset "${asset.id}" duration must be positive when provided.`);
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
id: nonEmpty(asset.id, "Bin asset id"),
|
|
166
|
+
name: nonEmpty(asset.name, "Bin asset name"),
|
|
167
|
+
kind: asset.kind,
|
|
168
|
+
assetId: asset.assetId,
|
|
169
|
+
clipName: asset.clipName,
|
|
170
|
+
duration: asset.duration,
|
|
171
|
+
metadata: asset.metadata
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function nonEmpty(value, label) {
|
|
175
|
+
const trimmed = value.trim();
|
|
176
|
+
if (!trimmed)
|
|
177
|
+
throw new Error(`${label} must be a non-empty string.`);
|
|
178
|
+
return trimmed;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=NonlinearAnimationEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NonlinearAnimationEditor.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/NonlinearAnimationEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type RenderQueuePanelItemStatus = "queued" | "running" | "done" | "failed";
|
|
2
|
+
export interface RenderQueuePanelItem {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly status: RenderQueuePanelItemStatus;
|
|
6
|
+
readonly progress: number;
|
|
7
|
+
readonly currentFrame?: number;
|
|
8
|
+
readonly totalFrames?: number;
|
|
9
|
+
readonly outputPath?: string;
|
|
10
|
+
readonly error?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RenderQueuePanelSnapshot {
|
|
13
|
+
readonly kind: "render-queue-panel";
|
|
14
|
+
readonly itemCount: number;
|
|
15
|
+
readonly queuedCount: number;
|
|
16
|
+
readonly runningCount: number;
|
|
17
|
+
readonly doneCount: number;
|
|
18
|
+
readonly failedCount: number;
|
|
19
|
+
readonly progress: number;
|
|
20
|
+
readonly items: readonly RenderQueuePanelItem[];
|
|
21
|
+
readonly outputPaths: readonly string[];
|
|
22
|
+
readonly errors: readonly string[];
|
|
23
|
+
}
|
|
24
|
+
export declare class RenderQueuePanel {
|
|
25
|
+
private readonly items;
|
|
26
|
+
constructor(items?: readonly RenderQueuePanelItem[]);
|
|
27
|
+
upsert(item: RenderQueuePanelItem): RenderQueuePanelSnapshot;
|
|
28
|
+
updateProgress(id: string, progress: number, options?: {
|
|
29
|
+
readonly currentFrame?: number;
|
|
30
|
+
readonly totalFrames?: number;
|
|
31
|
+
readonly status?: RenderQueuePanelItemStatus;
|
|
32
|
+
readonly outputPath?: string;
|
|
33
|
+
readonly error?: string;
|
|
34
|
+
}): RenderQueuePanelSnapshot;
|
|
35
|
+
snapshot(): RenderQueuePanelSnapshot;
|
|
36
|
+
}
|
|
37
|
+
export declare function createRenderQueuePanel(items?: readonly RenderQueuePanelItem[]): RenderQueuePanel;
|
|
38
|
+
//# sourceMappingURL=RenderQueuePanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderQueuePanel.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/RenderQueuePanel.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2C;gBAErD,KAAK,GAAE,SAAS,oBAAoB,EAAO;IAIvD,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,wBAAwB;IAK5D,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE;QACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,0BAA0B,CAAC;QAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,wBAAwB;IAcjC,QAAQ,IAAI,wBAAwB;CAgBrC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,GAAE,SAAS,oBAAoB,EAAO,GAAG,gBAAgB,CAEpG"}
|