@dailies-studio/shot-editor 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +382 -0
- package/dist/assets/AgentPanel-CQejLbiX.js +2 -0
- package/dist/assets/AgentPanel-DJEphah0.css +1 -0
- package/dist/assets/AgentQuestionDialog-BqkD0kXF.js +1 -0
- package/dist/assets/CodeStudio-Dv4ihHpz.js +23 -0
- package/dist/assets/CommentsPanel-B4yhhT1T.js +1 -0
- package/dist/assets/ComponentLibraryRail-Ch_dsAru.js +1 -0
- package/dist/assets/ComponentStage-BRhRotyH.js +1 -0
- package/dist/assets/CurvePane-BjFVabKX.css +1 -0
- package/dist/assets/CurvePane-R22WzllJ.js +1 -0
- package/dist/assets/ExportDialog-CWLQWTmG.js +2 -0
- package/dist/assets/FontPicker-DWKaYL7F.js +1 -0
- package/dist/assets/FontPicker-v0IOIArM.css +1 -0
- package/dist/assets/GenerateDrawer-Bh3SqDKt.js +2 -0
- package/dist/assets/InsertDrawer-Ce1fod1L.js +1 -0
- package/dist/assets/LibraryBrowser-D9sEGz5w.js +2 -0
- package/dist/assets/MakeItYoursSection-CMO4319_.js +2 -0
- package/dist/assets/MaterialGraphCanvas-BFzl4wWR.js +23 -0
- package/dist/assets/MaterialGraphCanvas-BIUD59ik.css +1 -0
- package/dist/assets/MaterialWorkspace-CqTWqaRA.js +14 -0
- package/dist/assets/PreferencesDialog-CBf9_OoD.js +1 -0
- package/dist/assets/PresetsSection-CUEaoCVU.js +1 -0
- package/dist/assets/SoundHistory-BeS8EW1h.js +1 -0
- package/dist/assets/SoundMode-BmcZru3i.js +3 -0
- package/dist/assets/StockSounds-DdAUGRYK.js +1 -0
- package/dist/assets/TemplateFieldSection-CaeXpLFo.js +1 -0
- package/dist/assets/VersionHistoryPanel-CxG6XhNP.js +1 -0
- package/dist/assets/board-B88EPuLO.css +1 -0
- package/dist/assets/board-CL-he7SL.js +3 -0
- package/dist/assets/components-0oOSPN0l.js +1 -0
- package/dist/assets/googleFontRanges-gp32wJMo.js +1 -0
- package/dist/assets/googleFonts-BNon6M7X.js +1 -0
- package/dist/assets/iconsAndAliases-DL7gXP5j.js +1863 -0
- package/dist/assets/index-4F5NQmI8.css +1 -0
- package/dist/assets/index-BGHQGV5z.js +117 -0
- package/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/dist/assets/libraryModel-CpIwfFha.js +1 -0
- package/dist/assets/lucide-6iK64tTB.js +9319 -0
- package/dist/assets/motionStamp-CH-Hew4E.js +1 -0
- package/dist/assets/takeMeasure-Tdg0TxEi.js +1 -0
- package/dist/assets/webmcp-BsB9gxWC.js +2 -0
- package/dist/index.html +34 -3
- package/package.json +12 -9
- package/src/addFamilies.ts +66 -0
- package/src/api.ts +1631 -55
- package/src/app/App.tsx +977 -198
- package/src/app/lazyPanel.tsx +137 -0
- package/src/app/lazySurfaces.tsx +203 -0
- package/src/audio/index.tsx +41 -10
- package/src/audio/meter.ts +485 -0
- package/src/audio/meterMath.ts +273 -0
- package/src/audio/meterStore.ts +155 -0
- package/src/audio/offlineMix.ts +289 -0
- package/src/audio/preview.ts +928 -118
- package/src/bridge.ts +15 -5
- package/src/bridgeTypes.ts +1611 -36
- package/src/channels.ts +17 -32
- package/src/fonts/googleFonts.ts +4 -0
- package/src/hostApi.ts +174 -0
- package/src/icons.tsx +770 -0
- package/src/layerWords.ts +61 -0
- package/src/main.tsx +56 -4
- package/src/panels/ResizeHandle.tsx +33 -43
- package/src/panels/agent/AgentDots.tsx +36 -0
- package/src/panels/agent/AgentPanel.tsx +119 -43
- package/src/panels/agent/AgentQuestionDialog.tsx +202 -0
- package/src/panels/agent/agent.css +113 -97
- package/src/panels/agent/agentGate.ts +35 -0
- package/src/panels/code/CodeDefaultsPanel.tsx +345 -0
- package/src/panels/code/CodeStudio.tsx +373 -0
- package/src/panels/code/FileTree.tsx +265 -0
- package/src/panels/code/codeBufferGuard.ts +52 -0
- package/src/panels/code/codeParts.tsx +321 -0
- package/src/panels/comments/CommentComposer.tsx +239 -0
- package/src/panels/comments/CommentThread.tsx +346 -0
- package/src/panels/comments/CommentsPanel.tsx +336 -0
- package/src/panels/comments/InboxButton.tsx +131 -0
- package/src/panels/comments/MentionMenu.tsx +98 -0
- package/src/panels/comments/parts.tsx +171 -0
- package/src/panels/export/ExportDialog.tsx +919 -96
- package/src/panels/export/ExportScrim.tsx +57 -0
- package/src/panels/files/AssetsTab.tsx +656 -0
- package/src/panels/files/FilePanel.tsx +1466 -216
- package/src/panels/files/LayerMarks.tsx +40 -0
- package/src/panels/files/LeftColumn.tsx +37 -0
- package/src/panels/files/McpSection.tsx +690 -47
- package/src/panels/files/MissingAssetsNotice.tsx +60 -0
- package/src/panels/files/assetDrag.ts +79 -0
- package/src/panels/files/resourceParts.tsx +255 -0
- package/src/panels/fonts/FontPicker.tsx +762 -0
- package/src/panels/fonts/faceCache.ts +207 -0
- package/src/panels/fonts/fontPicker.css +271 -0
- package/src/panels/fonts/pickerModel.ts +265 -0
- package/src/panels/fonts/pickerRequest.ts +46 -0
- package/src/panels/header/AccountAvatar.tsx +76 -0
- package/src/panels/header/AgentChip.tsx +77 -0
- package/src/panels/header/AppMenu.tsx +213 -0
- package/src/panels/header/Header.tsx +564 -84
- package/src/panels/header/HistoryControls.tsx +31 -5
- package/src/panels/header/PresenceStack.tsx +329 -0
- package/src/panels/header/ProjectTitle.tsx +232 -0
- package/src/panels/header/ShareButton.tsx +59 -0
- package/src/panels/header/StatusBadges.tsx +358 -27
- package/src/panels/header/SyncDeletedDialog.tsx +88 -0
- package/src/panels/header/ZoomControls.tsx +46 -15
- package/src/panels/header/agentHandoff.ts +52 -0
- package/src/panels/header/leave.ts +26 -0
- package/src/panels/help/HelpSection.tsx +189 -163
- package/src/panels/insert/InsertDrawer.tsx +723 -0
- package/src/panels/insert/iconSet.ts +109 -0
- package/src/panels/inspector/ExposeDot.tsx +117 -0
- package/src/panels/inspector/FramingRows.tsx +314 -44
- package/src/panels/inspector/InspectorFooter.tsx +91 -0
- package/src/panels/inspector/InspectorHead.tsx +425 -0
- package/src/panels/inspector/InspectorPanel.tsx +408 -124
- package/src/panels/inspector/KeyframeDot.tsx +373 -0
- package/src/panels/inspector/KeyframeSection.tsx +257 -0
- package/src/panels/inspector/MarkerSection.tsx +55 -11
- package/src/panels/inspector/ParamRow.tsx +84 -53
- package/src/panels/inspector/RightColumn.tsx +152 -0
- package/src/panels/inspector/TimeSection.tsx +866 -0
- package/src/panels/inspector/animate/EaseControl.tsx +244 -0
- package/src/panels/inspector/animate/PresetsSection.tsx +135 -0
- package/src/panels/inspector/animate/ShotSection.tsx +562 -48
- package/src/panels/inspector/design/AlignRow.tsx +95 -31
- package/src/panels/inspector/design/AppearanceSection.tsx +118 -9
- package/src/panels/inspector/design/ClonerSection.tsx +323 -62
- package/src/panels/inspector/design/ComponentSection.tsx +50 -43
- package/src/panels/inspector/design/CornerSection.tsx +45 -14
- package/src/panels/inspector/design/DefinitionProps.tsx +315 -0
- package/src/panels/inspector/design/DefinitionSection.tsx +136 -0
- package/src/panels/inspector/design/DeviceSection.tsx +210 -0
- package/src/panels/inspector/design/FillSection.tsx +83 -51
- package/src/panels/inspector/design/FontField.tsx +196 -0
- package/src/panels/inspector/design/HtmlSection.tsx +23 -12
- package/src/panels/inspector/design/InstanceSection.tsx +373 -154
- package/src/panels/inspector/design/MaskSection.tsx +84 -0
- package/src/panels/inspector/design/MaterialSection.tsx +177 -0
- package/src/panels/inspector/design/MediaSection.tsx +273 -120
- package/src/panels/inspector/design/MeshSection.tsx +910 -82
- package/src/panels/inspector/design/PaintRows.tsx +550 -0
- package/src/panels/inspector/design/PlateStyleSection.tsx +177 -0
- package/src/panels/inspector/design/ShadowSection.tsx +221 -48
- package/src/panels/inspector/design/SplineFollowSection.tsx +235 -0
- package/src/panels/inspector/design/StrokeSection.tsx +228 -43
- package/src/panels/inspector/design/TemplateFieldSection.tsx +57 -0
- package/src/panels/inspector/design/TransformSection.tsx +244 -50
- package/src/panels/inspector/design/TypographySection.tsx +679 -110
- package/src/panels/inspector/layout.ts +295 -0
- package/src/panels/inspector/propValue.ts +199 -0
- package/src/panels/inspector/scene/CameraSection.tsx +232 -22
- package/src/panels/inspector/scene/EffectsSection.tsx +722 -71
- package/src/panels/inspector/scene/MakeItYoursSection.tsx +180 -0
- package/src/panels/inspector/scene/SceneDocSection.tsx +191 -0
- package/src/panels/inspector/scene/SceneSection.tsx +219 -44
- package/src/panels/inspector/scene/TransitionSection.tsx +523 -72
- package/src/panels/inspector/storyboard/StoryboardReferenceSection.tsx +593 -0
- package/src/panels/inspector/storyboard/VideoStill.tsx +120 -0
- package/src/panels/inspector/timeModel.ts +190 -0
- package/src/panels/inspector/useDocWrite.ts +438 -146
- package/src/panels/library/LibraryBrowser.tsx +435 -0
- package/src/panels/library/LibraryGrid.tsx +190 -0
- package/src/panels/library/LibraryPreviewPanel.tsx +349 -0
- package/src/panels/library/LibraryRail.tsx +84 -0
- package/src/panels/library/LibrarySoundPanel.tsx +293 -0
- package/src/panels/library/SoundHistory.tsx +245 -0
- package/src/panels/library/StockSounds.tsx +390 -0
- package/src/panels/library/libraryModel.ts +147 -0
- package/src/panels/library/stockSearch.ts +77 -0
- package/src/panels/maskMarks.tsx +117 -0
- package/src/panels/material/MaterialCommentNode.tsx +54 -0
- package/src/panels/material/MaterialGraphCanvas.tsx +861 -0
- package/src/panels/material/MaterialGraphMenu.tsx +45 -0
- package/src/panels/material/MaterialGroupNode.tsx +56 -0
- package/src/panels/material/MaterialLibrary.tsx +253 -0
- package/src/panels/material/MaterialNode.tsx +453 -0
- package/src/panels/material/MaterialNodePalette.tsx +349 -0
- package/src/panels/material/MaterialParameterControls.tsx +525 -0
- package/src/panels/material/MaterialRerouteNode.tsx +42 -0
- package/src/panels/material/MaterialWorkspace.tsx +501 -0
- package/src/panels/material/NodePreview.tsx +70 -0
- package/src/panels/material/flowModel.ts +441 -0
- package/src/panels/material/parameterValues.ts +231 -0
- package/src/panels/material/previewScheduler.ts +235 -0
- package/src/panels/material/reactFlow.css +6 -0
- package/src/panels/material/socketGlyph.ts +85 -0
- package/src/panels/material/viewportMemory.ts +58 -0
- package/src/panels/preferences/PreferencesDialog.tsx +215 -0
- package/src/panels/share/ShareComponentDialog.tsx +247 -0
- package/src/panels/stage/StageMenu.tsx +35 -5
- package/src/panels/stage/StagePanel.tsx +338 -23
- package/src/panels/stage/cellSlots.tsx +70 -0
- package/src/panels/storyboard/BoardCanvas.tsx +739 -0
- package/src/panels/storyboard/BoardCursors.tsx +158 -0
- package/src/panels/storyboard/BoardDropDialog.tsx +161 -0
- package/src/panels/storyboard/BoardPlan.tsx +42 -0
- package/src/panels/storyboard/ComponentSheet.tsx +187 -0
- package/src/panels/storyboard/ComponentStage.tsx +235 -0
- package/src/panels/storyboard/MiniSketch.tsx +173 -0
- package/src/panels/storyboard/PartPicker.tsx +64 -0
- package/src/panels/storyboard/PlanPanel.tsx +617 -0
- package/src/panels/storyboard/ReferencePreview.tsx +217 -0
- package/src/panels/storyboard/ShotBrief.tsx +360 -0
- package/src/panels/storyboard/ShotCard.tsx +251 -0
- package/src/panels/storyboard/StagePreview.tsx +348 -0
- package/src/panels/storyboard/StillThumbs.tsx +162 -0
- package/src/panels/storyboard/StoryboardView.tsx +79 -0
- package/src/panels/storyboard/board.css +1065 -0
- package/src/panels/storyboard/board.ts +12 -0
- package/src/panels/storyboard/boardClipboard.ts +111 -0
- package/src/panels/storyboard/boardOrder.ts +68 -0
- package/src/panels/storyboard/boardRows.tsx +425 -0
- package/src/panels/storyboard/liveCap.ts +90 -0
- package/src/panels/storyboard/plan.css +295 -0
- package/src/panels/storyboard/posterCache.ts +133 -0
- package/src/panels/storyboard/shotboard/ComponentPicker.tsx +373 -0
- package/src/panels/storyboard/shotboard/ImagePicker.tsx +145 -0
- package/src/panels/storyboard/shotboard/ShotBoard.tsx +292 -0
- package/src/panels/storyboard/shotboard/SketchCanvas.tsx +443 -0
- package/src/panels/storyboard/shotboard/SketchInspector.tsx +471 -0
- package/src/panels/storyboard/shotboard/SketchItem.tsx +240 -0
- package/src/panels/storyboard/shotboard/SketchLayers.tsx +130 -0
- package/src/panels/storyboard/shotboard/SketchPlay.tsx +108 -0
- package/src/panels/storyboard/shotboard/SketchStrip.tsx +178 -0
- package/src/panels/storyboard/shotboard/SketchToolFooter.tsx +99 -0
- package/src/panels/storyboard/shotboard/sketch.css +1392 -0
- package/src/panels/storyboard/shotboard/sketchModel.ts +219 -0
- package/src/panels/storyboard/storyboardDrop.ts +164 -0
- package/src/panels/studio/ComponentLibraryRail.tsx +346 -0
- package/src/panels/studio/ComponentSidePanel.tsx +355 -0
- package/src/panels/studio/ComponentStudio.tsx +243 -0
- package/src/panels/studio/ComponentsHome.tsx +318 -0
- package/src/panels/studio/ComponentsPreview.tsx +179 -0
- package/src/panels/studio/EveryUse.tsx +244 -0
- package/src/panels/studio/ThisUsePanel.tsx +679 -0
- package/src/panels/studio/componentParts.tsx +341 -0
- package/src/panels/studio/components.ts +6 -0
- package/src/panels/studio/newCodeComponent.ts +66 -0
- package/src/panels/timeline/AudioFxButton.tsx +290 -0
- package/src/panels/timeline/AudioLane.tsx +674 -85
- package/src/panels/timeline/BlockRow.tsx +154 -85
- package/src/panels/timeline/ChannelRow.tsx +378 -129
- package/src/panels/timeline/CurvePane.tsx +508 -0
- package/src/panels/timeline/Filmstrip.tsx +361 -0
- package/src/panels/timeline/GenerateDrawer.tsx +407 -0
- package/src/panels/timeline/KeyStretch.tsx +115 -0
- package/src/panels/timeline/LifespanRow.tsx +730 -47
- package/src/panels/timeline/MarkerLane.tsx +46 -8
- package/src/panels/timeline/PlayButton.tsx +91 -0
- package/src/panels/timeline/PropertyPicker.tsx +254 -0
- package/src/panels/timeline/ShotRow.tsx +400 -0
- package/src/panels/timeline/SoundMode.tsx +1406 -0
- package/src/panels/timeline/TimelineDock.tsx +2338 -272
- package/src/panels/timeline/TransportVolume.tsx +163 -0
- package/src/panels/timeline/beatRuler.ts +74 -0
- package/src/panels/timeline/curveModel.ts +500 -0
- package/src/panels/timeline/duckUnderVoice.ts +68 -0
- package/src/panels/timeline/keyframeMenu.ts +138 -0
- package/src/panels/timeline/labelWidth.ts +49 -0
- package/src/panels/timeline/marquee.ts +155 -0
- package/src/panels/timeline/model.ts +1860 -199
- package/src/panels/timeline/snap.ts +125 -43
- package/src/panels/timeline/staggerPreview.tsx +92 -0
- package/src/panels/timeline/takeMeasure.ts +72 -0
- package/src/panels/timeline/useLive.ts +48 -0
- package/src/panels/timeline/viewport.ts +234 -0
- package/src/panels/toolbar/BackChip.tsx +116 -0
- package/src/panels/toolbar/CameraViewBar.tsx +118 -49
- package/src/panels/toolbar/CanvasBar.tsx +117 -0
- package/src/panels/toolbar/InsertButton.tsx +38 -0
- package/src/panels/toolbar/IsolationTrail.tsx +156 -0
- package/src/panels/toolbar/PanelToggles.tsx +86 -0
- package/src/panels/toolbar/ShadingBar.tsx +119 -26
- package/src/panels/toolbar/ToolDockBar.tsx +329 -80
- package/src/panels/toolbar/ToolFooter.tsx +102 -0
- package/src/panels/toolbar/ViewModeBar.tsx +247 -38
- package/src/panels/toolbar/WorkPlaneBar.tsx +94 -0
- package/src/panels/toolbar/useAddRows.tsx +326 -0
- package/src/panels/toolbar/useDismiss.ts +122 -0
- package/src/panels/versions/VersionHistoryPanel.tsx +274 -0
- package/src/panels/versions/versionModel.ts +103 -0
- package/src/panels/virtualWindow.ts +271 -0
- package/src/shotTokens.css +151 -60
- package/src/stage/FrustumGizmo.tsx +504 -84
- package/src/stage/GridPlane.tsx +225 -16
- package/src/stage/NodePreviews.tsx +628 -0
- package/src/stage/PerfHud.tsx +437 -47
- package/src/stage/SplitRenderer.tsx +816 -169
- package/src/stage/StageApp.tsx +4274 -486
- package/src/stage/StageRootBoundary.tsx +114 -0
- package/src/stage/StageTools.tsx +651 -151
- package/src/stage/TransformGizmo.tsx +696 -0
- package/src/stage/adaptivePresentation.ts +145 -0
- package/src/stage/bridgeClient.ts +2522 -41
- package/src/stage/exportWorker.ts +9 -0
- package/src/stage/feed.ts +305 -14
- package/src/stage/fontPreview.ts +176 -0
- package/src/stage/frustumGeometry.ts +319 -1
- package/src/stage/furnitureTokens.ts +33 -0
- package/src/stage/gizmoMath.ts +508 -16
- package/src/stage/gpuTimer.ts +276 -0
- package/src/stage/instanceModules.ts +194 -33
- package/src/stage/interactions/move.ts +24 -5
- package/src/stage/isolation.ts +291 -33
- package/src/stage/jsSelfProfiler.ts +325 -0
- package/src/stage/main.tsx +116 -16
- package/src/stage/modalState.ts +222 -23
- package/src/stage/moduleEpoch.ts +60 -0
- package/src/stage/motionPathStage.ts +279 -0
- package/src/stage/motionPreview.ts +74 -0
- package/src/stage/overlays/Overlays.tsx +1112 -159
- package/src/stage/overlays/Rulers.tsx +495 -0
- package/src/stage/panes.ts +159 -10
- package/src/stage/project.ts +68 -3
- package/src/stage/renderScaleController.ts +730 -0
- package/src/stage/rulers.ts +129 -0
- package/src/stage/sceneExtent.ts +75 -0
- package/src/stage/shading.ts +20 -0
- package/src/stage/splineStage.ts +632 -0
- package/src/stage/stagePerformanceTelemetry.ts +717 -0
- package/src/stage/stageTheme.ts +36 -0
- package/src/stage/stageWarmup.ts +11 -0
- package/src/stage/textAutoSize.ts +124 -0
- package/src/stage/tier1Export.ts +641 -0
- package/src/stage/tokenColor.ts +14 -9
- package/src/stage/view.ts +56 -9
- package/src/stage/workingView.ts +277 -33
- package/src/state/accountPrefs.ts +261 -0
- package/src/state/agentActions.ts +173 -15
- package/src/state/agentActivity.ts +198 -0
- package/src/state/agentQuestion.ts +239 -0
- package/src/state/bootOpen.ts +42 -0
- package/src/state/cameraVerbs.ts +139 -0
- package/src/state/clientId.ts +6 -1
- package/src/state/comments.ts +1099 -0
- package/src/state/context.tsx +19 -1
- package/src/state/editorPrefs.ts +220 -0
- package/src/state/errorReports.ts +121 -0
- package/src/state/fieldWrite.ts +161 -0
- package/src/state/fontRecents.ts +70 -0
- package/src/state/fonts.ts +656 -0
- package/src/state/graphClipboard.ts +414 -0
- package/src/state/imageThumbs.ts +216 -0
- package/src/state/insert.ts +444 -67
- package/src/state/isolationTrail.ts +92 -0
- package/src/state/keyMoves.ts +134 -0
- package/src/state/keyframeClipboard.ts +177 -0
- package/src/state/keymap.ts +1153 -117
- package/src/state/layoutPrefs.ts +272 -0
- package/src/state/layouts.ts +205 -0
- package/src/state/measureMedia.ts +167 -0
- package/src/state/menu.ts +2341 -28
- package/src/state/motionStamp.ts +7 -0
- package/src/state/panelSize.ts +375 -5
- package/src/state/pendingChanges.ts +119 -0
- package/src/state/playHold.ts +78 -0
- package/src/state/playbackPreparation.ts +562 -0
- package/src/state/posterCapture.ts +242 -0
- package/src/state/presence.ts +254 -0
- package/src/state/projectComponents.ts +160 -0
- package/src/state/renderEvents.ts +298 -18
- package/src/state/runtimeErrors.ts +46 -0
- package/src/state/selection.ts +12 -0
- package/src/state/shortcuts.ts +1606 -0
- package/src/state/sketchGuide.ts +51 -0
- package/src/state/splineRefs.ts +87 -0
- package/src/state/stageHealth.ts +259 -0
- package/src/state/stageWatchdog.ts +47 -0
- package/src/state/stillStage.ts +330 -0
- package/src/state/stillThumbs.ts +474 -0
- package/src/state/store.ts +23591 -2982
- package/src/state/storyboardModel.ts +528 -0
- package/src/state/sync.ts +1257 -0
- package/src/state/syncCache.ts +159 -0
- package/src/state/triangles.ts +13 -0
- package/src/state/types.ts +1698 -55
- package/src/state/unsavedGuard.ts +49 -0
- package/src/state/viewMode.ts +200 -0
- package/src/state/webmcp.ts +1128 -0
- package/src/state/workspace.ts +1147 -0
- package/src/styles/assets-tab.css +304 -0
- package/src/styles/canvas.css +545 -0
- package/src/styles/comments.css +1435 -0
- package/src/styles/controls.css +162 -0
- package/src/styles/dialogs.css +390 -0
- package/src/styles/insert-drawer.css +586 -0
- package/src/styles/inspector-board.css +207 -0
- package/src/styles/inspector-object.css +486 -0
- package/src/styles/inspector-shot.css +252 -0
- package/src/styles/inspector.css +360 -0
- package/src/styles/left-column.css +1628 -0
- package/src/styles/library-preview.css +575 -0
- package/src/styles/library.css +512 -0
- package/src/styles/modes/code.css +569 -0
- package/src/styles/modes/component.css +1561 -0
- package/src/styles/modes/material.css +1201 -0
- package/src/styles/modes/storyboard.css +518 -0
- package/src/styles/share-component.css +49 -0
- package/src/styles/shell.css +653 -0
- package/src/styles/shot-brief.css +360 -0
- package/src/styles/states.css +76 -0
- package/src/styles/sync.css +380 -0
- package/src/styles/timeline-graph.css +384 -0
- package/src/styles/timeline-meters.css +89 -0
- package/src/styles/timeline-rows.css +1959 -0
- package/src/styles/timeline-sound.css +1003 -0
- package/src/styles/timeline.css +754 -0
- package/src/styles/tool-footer.css +525 -0
- package/src/styles/topbar.css +886 -0
- package/src/styles/versions.css +262 -0
- package/src/styles.css +72 -2921
- package/src/tools.ts +108 -23
- package/dist/assets/index-B7notge7.css +0 -1
- package/dist/assets/index-BBE6Ta9L.js +0 -52
- package/src/panels/files/icons.tsx +0 -118
- package/src/panels/header/DocSwitcher.tsx +0 -85
- package/src/panels/header/TransportBar.tsx +0 -86
- package/src/panels/inspector/animate/BlockTiming.tsx +0 -341
- package/src/panels/inspector/animate/DuringBlocks.tsx +0 -85
- package/src/panels/inspector/animate/InOutPresets.tsx +0 -57
- package/src/panels/inspector/animate/ResolvedChannels.tsx +0 -150
- package/src/panels/inspector/animate/useBlocks.ts +0 -43
- package/src/panels/material/MaterialPicker.tsx +0 -172
- package/src/panels/timeline/SceneStrip.tsx +0 -145
- package/src/panels/toolbar/AddMenu.tsx +0 -230
- package/src/stage/MoveGizmo.tsx +0 -411
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
// An editor stage kept offscreen, that stills are drawn on: the hosted MCP
|
|
2
|
+
// surface's `screenshot_shot` (plan C4), and the board's app-drawn stills
|
|
3
|
+
// (stillThumbs.ts) on both lanes.
|
|
4
|
+
//
|
|
5
|
+
// A still of a saved Project is drawn the way the storyboard's "Frame from
|
|
6
|
+
// Shot" is: the stage's own `captureFrame` (bridge v32), which flips into
|
|
7
|
+
// export framing, snapshots the frame in the draw and scales it. The author's
|
|
8
|
+
// stage is never used for it: loading another document there would swap what
|
|
9
|
+
// they are looking at. This stage is its own `/shot-stage.html`, served as the
|
|
10
|
+
// author's is (hosted, under the Service Worker, so the Project's components
|
|
11
|
+
// import), and connected with handlers that ignore everything but its
|
|
12
|
+
// readiness.
|
|
13
|
+
//
|
|
14
|
+
// ONE PER TAB, because each stage is a WebGL context. Hosted, the code host
|
|
15
|
+
// owns it (browser-host boot.ts), feeds its loads the module epochs, and lends
|
|
16
|
+
// it to the chrome through `DailiesHost.captureStill`; it is never the stage
|
|
17
|
+
// `stageLoaded` tracks and reloads. Locally the chrome opens its own
|
|
18
|
+
// (`tabStillStage`), whose loads need nothing: Vite serves the modules.
|
|
19
|
+
//
|
|
20
|
+
// Offscreen, never hidden: a `display: none` frame does not render, and the
|
|
21
|
+
// capture waits on a drawn frame. It is closed after `idleMs` without a
|
|
22
|
+
// capture, freeing its GPU context.
|
|
23
|
+
//
|
|
24
|
+
// The stage says it is ready ONCE, when its canvas comes up with the first
|
|
25
|
+
// document, and never for a later `loadDoc`. So a stage is kept only for the
|
|
26
|
+
// Project it opened on, at that size: the next still of it loads the newer
|
|
27
|
+
// document and captures (the capture waits on its own drawn frame), and a
|
|
28
|
+
// still of another Project, or at another size, opens a fresh stage.
|
|
29
|
+
//
|
|
30
|
+
// Every await on the stage races its reload (stageWatchdog.ts): a reload kills
|
|
31
|
+
// the realm the bridge's promises live in, and one that never settled would
|
|
32
|
+
// hold the queue for good. A capture abandoned through its signal rejects and
|
|
33
|
+
// keeps the stage; a first document still coming up keeps coming up for the
|
|
34
|
+
// next capture.
|
|
35
|
+
//
|
|
36
|
+
// A BACKGROUND capture (a thumbnail) steps aside for any other: it is refused
|
|
37
|
+
// while another waits, and abandoned when one arrives, so a relayed agent
|
|
38
|
+
// still never queues behind thumbnails (store mcpRelay.ts gives it 90 s).
|
|
39
|
+
import type { Doc3D } from "@dailies-studio/shot/doc";
|
|
40
|
+
import { connectStage } from "../bridge.js";
|
|
41
|
+
import type { ShotBridgeHandlers, ShotStageBridge, ShotStageInfo } from "../bridgeTypes.js";
|
|
42
|
+
import { dailiesHost } from "../hostApi.js";
|
|
43
|
+
import { raceStage } from "./stageWatchdog.js";
|
|
44
|
+
|
|
45
|
+
export interface StillStageDeps {
|
|
46
|
+
readonly document: Document;
|
|
47
|
+
/** After each load of the stage document: says whether the stage may be
|
|
48
|
+
* connected (false: it is being reloaded, and the next load follows).
|
|
49
|
+
* Hosted, it posts the module epoch and checks the Service Worker controls
|
|
50
|
+
* the document; locally it answers true. */
|
|
51
|
+
loaded(stage: Window): boolean;
|
|
52
|
+
readonly idleMs?: number;
|
|
53
|
+
/** How long a loaded document may take to come up on the stage. */
|
|
54
|
+
readonly readyMs?: number;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface StillCaptureOptions {
|
|
58
|
+
/** Default png. */
|
|
59
|
+
readonly format?: "png" | "webp";
|
|
60
|
+
/** Abandons the capture: it rejects, and the stage is kept. */
|
|
61
|
+
readonly signal?: AbortSignal;
|
|
62
|
+
/** Steps aside for any other capture: refused while one waits, abandoned
|
|
63
|
+
* when one arrives. Either way it rejects with `stillYielded` true. */
|
|
64
|
+
readonly background?: boolean;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface StillStage {
|
|
68
|
+
/** One still of `doc` at master `frame`, `width` by `height`. One at a
|
|
69
|
+
* time. */
|
|
70
|
+
capture(doc: Doc3D, frame: number, width: number, height: number, options?: StillCaptureOptions): Promise<Blob>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Whether a capture rejected because it stepped aside for another. A shape
|
|
74
|
+
* test, since the error may come from another realm. */
|
|
75
|
+
export function stillYielded(error: unknown): boolean {
|
|
76
|
+
return typeof error === "object" && error !== null && (error as { yielded?: unknown }).yielded === true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const yieldedError = (): Error => Object.assign(new Error("the still stepped aside for another capture"), { yielded: true });
|
|
80
|
+
|
|
81
|
+
const CANCELLED = "the still was cancelled";
|
|
82
|
+
|
|
83
|
+
// `still=1`: the stage measures its canvas by hand while the page is hidden
|
|
84
|
+
// (StageApp's `measureWhenHidden`), where no ResizeObserver is delivered.
|
|
85
|
+
const STAGE_URL = "/shot-stage.html?theme=dark&still=1";
|
|
86
|
+
|
|
87
|
+
interface Open {
|
|
88
|
+
readonly iframe: HTMLIFrameElement;
|
|
89
|
+
readonly bridge: ShotStageBridge;
|
|
90
|
+
/** False once the stage document reloaded: its bridge is dead. */
|
|
91
|
+
live: boolean;
|
|
92
|
+
/** The first document's readiness, null before the first load. */
|
|
93
|
+
shown: Promise<void> | null;
|
|
94
|
+
/** Settled by the stage's next `onReady` or `onError`. */
|
|
95
|
+
next: { ready: (info: ShotStageInfo) => void; failed: (message: string) => void } | null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** `work`, or a rejection once `signal` aborts. */
|
|
99
|
+
function orCancelled<T>(work: Promise<T>, signal: AbortSignal): Promise<T> {
|
|
100
|
+
return new Promise<T>((resolve, reject) => {
|
|
101
|
+
const onAbort = (): void => reject(new Error(CANCELLED));
|
|
102
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
103
|
+
if (signal.aborted) onAbort();
|
|
104
|
+
work.then(resolve, reject).finally(() => signal.removeEventListener("abort", onAbort));
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** How long a loaded document may take to come up on the still stage. Long
|
|
109
|
+
* enough for a glyph face the page is still baking (the stage holds its
|
|
110
|
+
* readiness until the face loads), and inside the object's wait for a
|
|
111
|
+
* capture (store mcpRelay.ts RELAY_CAPTURE_TIMEOUT_MS), so this names the
|
|
112
|
+
* stall rather than the object timing the call out. */
|
|
113
|
+
export const STILL_READY_MS = 75_000;
|
|
114
|
+
|
|
115
|
+
export function createStillStage(deps: StillStageDeps): StillStage {
|
|
116
|
+
const idleMs = deps.idleMs ?? 60_000;
|
|
117
|
+
const readyMs = deps.readyMs ?? STILL_READY_MS;
|
|
118
|
+
let open: Promise<Open> | null = null;
|
|
119
|
+
/** What the open stage was opened for (`keyOf`). */
|
|
120
|
+
let openKey = "";
|
|
121
|
+
let queue: Promise<unknown> = Promise.resolve();
|
|
122
|
+
let idle: ReturnType<typeof setTimeout> | undefined;
|
|
123
|
+
/** Captures that are not background, queued or running. */
|
|
124
|
+
let others = 0;
|
|
125
|
+
/** Background captures, queued or running, each abandoned when another
|
|
126
|
+
* capture arrives. */
|
|
127
|
+
const yielding = new Set<{ controller: AbortController; yielded: boolean }>();
|
|
128
|
+
const keyOf = (doc: Doc3D): string => `${doc.id}:${doc.size.width}x${doc.size.height}`;
|
|
129
|
+
|
|
130
|
+
function close(): void {
|
|
131
|
+
const closing = open;
|
|
132
|
+
open = null;
|
|
133
|
+
void closing?.then(
|
|
134
|
+
(held) => {
|
|
135
|
+
// A reloaded stage's bridge belongs to a dead realm.
|
|
136
|
+
try {
|
|
137
|
+
held.bridge.dispose();
|
|
138
|
+
} catch {}
|
|
139
|
+
held.iframe.remove();
|
|
140
|
+
},
|
|
141
|
+
() => {},
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async function start(width: number, height: number, reloaded: (held: Open) => void): Promise<Open> {
|
|
146
|
+
const iframe = deps.document.createElement("iframe");
|
|
147
|
+
iframe.title = "Dailies still stage";
|
|
148
|
+
iframe.tabIndex = -1;
|
|
149
|
+
iframe.setAttribute("aria-hidden", "true");
|
|
150
|
+
Object.assign(iframe.style, {
|
|
151
|
+
position: "fixed",
|
|
152
|
+
left: "-100000px",
|
|
153
|
+
top: "0",
|
|
154
|
+
width: `${width}px`,
|
|
155
|
+
height: `${height}px`,
|
|
156
|
+
border: "0",
|
|
157
|
+
pointerEvents: "none",
|
|
158
|
+
});
|
|
159
|
+
const loaded = new Promise<void>((resolve) => {
|
|
160
|
+
const onLoad = (): void => {
|
|
161
|
+
const stage = iframe.contentWindow;
|
|
162
|
+
if (stage === null || !deps.loaded(stage)) return;
|
|
163
|
+
iframe.removeEventListener("load", onLoad);
|
|
164
|
+
resolve();
|
|
165
|
+
};
|
|
166
|
+
iframe.addEventListener("load", onLoad);
|
|
167
|
+
});
|
|
168
|
+
iframe.src = STAGE_URL;
|
|
169
|
+
deps.document.body.appendChild(iframe);
|
|
170
|
+
try {
|
|
171
|
+
await loaded;
|
|
172
|
+
const held: { next: Open["next"] } = { next: null };
|
|
173
|
+
// Every handler but readiness is the author's chrome's business.
|
|
174
|
+
const handlers = new Proxy({} as ShotBridgeHandlers, {
|
|
175
|
+
get: (_target, key) =>
|
|
176
|
+
key === "onReady"
|
|
177
|
+
? (info: ShotStageInfo) => held.next?.ready(info)
|
|
178
|
+
: key === "onError"
|
|
179
|
+
? (message: string) => held.next?.failed(message)
|
|
180
|
+
: () => {},
|
|
181
|
+
});
|
|
182
|
+
const bridge = await connectStage(iframe, handlers);
|
|
183
|
+
const out: Open = {
|
|
184
|
+
iframe,
|
|
185
|
+
bridge,
|
|
186
|
+
live: true,
|
|
187
|
+
shown: null,
|
|
188
|
+
get next() {
|
|
189
|
+
return held.next;
|
|
190
|
+
},
|
|
191
|
+
set next(value) {
|
|
192
|
+
held.next = value;
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
// Any later load is a reload (a Vite full reload, a crashed document).
|
|
196
|
+
iframe.addEventListener("load", () => {
|
|
197
|
+
out.live = false;
|
|
198
|
+
reloaded(out);
|
|
199
|
+
});
|
|
200
|
+
return out;
|
|
201
|
+
} catch (error) {
|
|
202
|
+
iframe.remove();
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async function captureNow(
|
|
208
|
+
doc: Doc3D,
|
|
209
|
+
frame: number,
|
|
210
|
+
width: number,
|
|
211
|
+
height: number,
|
|
212
|
+
format: "png" | "webp",
|
|
213
|
+
signal: AbortSignal,
|
|
214
|
+
): Promise<Blob> {
|
|
215
|
+
// Abandoned while it waited its turn: the stage is not touched.
|
|
216
|
+
if (signal.aborted) throw new Error(CANCELLED);
|
|
217
|
+
clearTimeout(idle);
|
|
218
|
+
if (open !== null && openKey !== keyOf(doc)) close();
|
|
219
|
+
if (open === null) {
|
|
220
|
+
const opening = start(doc.size.width, doc.size.height, () => {
|
|
221
|
+
if (open === opening) close();
|
|
222
|
+
});
|
|
223
|
+
open = opening;
|
|
224
|
+
openKey = keyOf(doc);
|
|
225
|
+
// One that failed to open is not kept, even when the capture that
|
|
226
|
+
// opened it was abandoned and no longer waits on it.
|
|
227
|
+
opening.catch(() => {
|
|
228
|
+
if (open === opening) open = null;
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
const opened = open;
|
|
232
|
+
try {
|
|
233
|
+
const held = await orCancelled(opened, signal);
|
|
234
|
+
const watch = {
|
|
235
|
+
stage: () => (held.live ? held.bridge : null),
|
|
236
|
+
bridgeAtStart: held.bridge,
|
|
237
|
+
signal,
|
|
238
|
+
reloaded: "the still stage reloaded while it drew",
|
|
239
|
+
cancelled: CANCELLED,
|
|
240
|
+
};
|
|
241
|
+
try {
|
|
242
|
+
if (held.shown === null) {
|
|
243
|
+
held.shown = new Promise<void>((resolve, reject) => {
|
|
244
|
+
const timer = setTimeout(
|
|
245
|
+
() => settle(new Error(`the stage did not show the Project within ${readyMs / 1000} s`)),
|
|
246
|
+
readyMs,
|
|
247
|
+
);
|
|
248
|
+
const settle = (error?: Error): void => {
|
|
249
|
+
clearTimeout(timer);
|
|
250
|
+
held.next = null;
|
|
251
|
+
if (error === undefined) resolve();
|
|
252
|
+
else reject(error);
|
|
253
|
+
};
|
|
254
|
+
held.next = { ready: () => settle(), failed: (message) => settle(new Error(message)) };
|
|
255
|
+
});
|
|
256
|
+
// A first document that never came up closes the stage, also when
|
|
257
|
+
// its capture was abandoned: the next still opens a fresh one
|
|
258
|
+
// rather than inheriting this failure.
|
|
259
|
+
held.shown.catch(() => {
|
|
260
|
+
if (open === opened) close();
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
// The newer document lands before the capture, which waits on a
|
|
264
|
+
// frame drawn from it. Before the first has shown, it is the one the
|
|
265
|
+
// stage comes up with.
|
|
266
|
+
held.bridge.loadDoc(doc);
|
|
267
|
+
await raceStage(held.shown, watch);
|
|
268
|
+
return await raceStage(held.bridge.captureFrame({ frame, width, height, format, signal }), watch);
|
|
269
|
+
} catch (error) {
|
|
270
|
+
// A stage that failed is not kept for the next still. One abandoned
|
|
271
|
+
// is.
|
|
272
|
+
if (!signal.aborted && open === opened) close();
|
|
273
|
+
throw error;
|
|
274
|
+
}
|
|
275
|
+
} finally {
|
|
276
|
+
idle = setTimeout(close, idleMs);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return {
|
|
281
|
+
capture(doc, frame, width, height, options = {}) {
|
|
282
|
+
const background = options.background === true;
|
|
283
|
+
if (background && others > 0) return Promise.reject(yieldedError());
|
|
284
|
+
const controller = new AbortController();
|
|
285
|
+
const outer = options.signal;
|
|
286
|
+
const forward = (): void => controller.abort();
|
|
287
|
+
if (outer?.aborted === true) controller.abort();
|
|
288
|
+
else outer?.addEventListener("abort", forward, { once: true });
|
|
289
|
+
const mine = { controller, yielded: false };
|
|
290
|
+
if (background) {
|
|
291
|
+
yielding.add(mine);
|
|
292
|
+
} else {
|
|
293
|
+
others += 1;
|
|
294
|
+
for (const other of yielding) {
|
|
295
|
+
other.yielded = true;
|
|
296
|
+
other.controller.abort();
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
const run = queue
|
|
300
|
+
.then(() => captureNow(doc, frame, width, height, options.format ?? "png", controller.signal))
|
|
301
|
+
.catch((error: unknown) => {
|
|
302
|
+
throw mine.yielded ? yieldedError() : error;
|
|
303
|
+
})
|
|
304
|
+
.finally(() => {
|
|
305
|
+
outer?.removeEventListener("abort", forward);
|
|
306
|
+
if (background) yielding.delete(mine);
|
|
307
|
+
else others -= 1;
|
|
308
|
+
});
|
|
309
|
+
queue = run.catch(() => {});
|
|
310
|
+
return run;
|
|
311
|
+
},
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
let tabStage: StillStage | undefined;
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* This tab's still stage. Hosted, the code host's, because a stage the chrome
|
|
319
|
+
* opened itself would import none of the Project's modules. Locally, the
|
|
320
|
+
* chrome's own, opened on first use.
|
|
321
|
+
*/
|
|
322
|
+
export function tabStillStage(): StillStage {
|
|
323
|
+
if (tabStage !== undefined) return tabStage;
|
|
324
|
+
const host = dailiesHost();
|
|
325
|
+
tabStage =
|
|
326
|
+
host === undefined
|
|
327
|
+
? createStillStage({ document, loaded: () => true })
|
|
328
|
+
: { capture: host.captureStill.bind(host) };
|
|
329
|
+
return tabStage;
|
|
330
|
+
}
|