@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,49 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import type { SaveState } from "./types.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Whether work exists that is NOT on disk.
|
|
6
|
+
*
|
|
7
|
+
* `dirty` covers the ordinary case: the autosave debounce is 400ms
|
|
8
|
+
* (`AUTOSAVE_MS`), and a tab closed inside that window takes the edit with it.
|
|
9
|
+
*
|
|
10
|
+
* `saveState === "error"` is the case that matters more, and it is the reason
|
|
11
|
+
* this guard is not optional. `runSave` deliberately does NOT retry a failed
|
|
12
|
+
* save: the failure that gets there is a 409 against a baseline someone else
|
|
13
|
+
* moved, and re-sending the same rev would be the corruption rather than the
|
|
14
|
+
* cure. Refusing "keeps the document open, in memory, with the reason already
|
|
15
|
+
* on screen" — a design that assumes the document survives until the author
|
|
16
|
+
* acts on it. Nothing enforced that assumption, so the recovery path this
|
|
17
|
+
* chrome carefully preserves could be closed away by a keystroke.
|
|
18
|
+
*
|
|
19
|
+
* A save in flight needs no separate case: `dirty` is cleared only on success,
|
|
20
|
+
* so it is still true while "saving".
|
|
21
|
+
*/
|
|
22
|
+
export function unsavedWorkPending(dirty: boolean, saveState: SaveState, syncUnstored: boolean | null = null): boolean {
|
|
23
|
+
// LIVE SYNC: an edit is safe once it is in IndexedDB, acked or not, so the
|
|
24
|
+
// guard warns only while one is not (`ShotEditorState.syncUnstored`).
|
|
25
|
+
return syncUnstored ?? (dirty || saveState === "error");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Arm the browser's own close confirmation while unsaved work exists.
|
|
30
|
+
*
|
|
31
|
+
* Deliberately only `beforeunload`. A `pagehide` handler cannot await, so the
|
|
32
|
+
* flush it started would be abandoned mid-request, and a blind re-PUT of a
|
|
33
|
+
* moved rev is exactly the write `runSave` refuses to make. The prompt is the
|
|
34
|
+
* guarantee; there is no partial save behind it.
|
|
35
|
+
*/
|
|
36
|
+
export function useUnsavedWorkGuard(dirty: boolean, saveState: SaveState, syncUnstored: boolean | null = null): void {
|
|
37
|
+
const pending = unsavedWorkPending(dirty, saveState, syncUnstored);
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (!pending) return;
|
|
40
|
+
const onBeforeUnload = (event: BeforeUnloadEvent): void => {
|
|
41
|
+
// preventDefault is the modern spelling; returnValue is what older
|
|
42
|
+
// engines read. Neither carries custom text any more, by design.
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
event.returnValue = "";
|
|
45
|
+
};
|
|
46
|
+
window.addEventListener("beforeunload", onBeforeUnload);
|
|
47
|
+
return () => window.removeEventListener("beforeunload", onBeforeUnload);
|
|
48
|
+
}, [pending]);
|
|
49
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// EDIT AND VIDEO: the two words the editor offers for "what am I doing", and
|
|
2
|
+
// the three questions the rest of the chrome asks about them.
|
|
3
|
+
//
|
|
4
|
+
// ── VIDEO IS A FLAG OVER THE PICTURE, NOT A PANE ───────────────────────────
|
|
5
|
+
//
|
|
6
|
+
// Video is the export's frame with the authoring taken off it: no handles, no
|
|
7
|
+
// hover outline, no marquee, no drawing, no drags. Edit is that same editor
|
|
8
|
+
// with all of it back. The transport runs in both.
|
|
9
|
+
//
|
|
10
|
+
// It was spelled as a PANE LAYOUT — Edit meant `working`, Video meant `camera`
|
|
11
|
+
// — and that could not survive contact with the stage. The rect, ellipse,
|
|
12
|
+
// line, text, image and pen tools draw in the CAMERA pane and nowhere else
|
|
13
|
+
// (`StageApp`'s draw lane), and so do the move, resize and rotate handles. The
|
|
14
|
+
// working pane is the 3D viewport: orbit, gizmo, frustum, the G/R/S modals. So
|
|
15
|
+
// "Video is the camera pane" made drawing impossible in the view that could
|
|
16
|
+
// not play and possible in the one that could, and `toolRefusal` was left
|
|
17
|
+
// telling authors to press 3 for Video in order to draw a rectangle.
|
|
18
|
+
//
|
|
19
|
+
// The two ideas are orthogonal, so they are two fields:
|
|
20
|
+
//
|
|
21
|
+
// `state.video` am I watching, or working
|
|
22
|
+
// `state.stageLayout.mode` WHICH EDITOR — the 3D viewport, the split, or the
|
|
23
|
+
// frame. Keys ⇧1 / ⇧2 / ⇧3, the View menu, and the
|
|
24
|
+
// thing Video is drawn over and hands back.
|
|
25
|
+
//
|
|
26
|
+
// The stage still speaks `working | split | camera` (`stage/panes.ts`) and the
|
|
27
|
+
// bridge versions that vocabulary, because those are PANES. Nothing here
|
|
28
|
+
// renames them; what changed is that they stopped being asked a question they
|
|
29
|
+
// could not answer.
|
|
30
|
+
//
|
|
31
|
+
// ── AND THE WAY OUT OF VIDEO IS ANY EDIT ───────────────────────────────────
|
|
32
|
+
//
|
|
33
|
+
// Every selection verb, the document seam, both scrub lanes, the tool arm and
|
|
34
|
+
// the four "go somewhere to work" doors call the store's `enterEdit()`. So the
|
|
35
|
+
// author never meets a dead control: the click that would have edited lands in
|
|
36
|
+
// Edit, paused, on the frame they were watching.
|
|
37
|
+
import type { ShotEditorState } from "./types.js";
|
|
38
|
+
import type { StageLayout } from "../stage/panes.js";
|
|
39
|
+
|
|
40
|
+
/** The value the segmented control shows, and the value its two options carry.
|
|
41
|
+
* Its own two words rather than a `StageLayout["mode"]`: what this names is
|
|
42
|
+
* what the author is DOING, and the layout underneath is a separate choice
|
|
43
|
+
* with three answers (see `setViewLayout`). */
|
|
44
|
+
export type ViewMode = "edit" | "video";
|
|
45
|
+
|
|
46
|
+
export interface ViewModeSpec {
|
|
47
|
+
/** The word, which is also the toggle's accessible name (it is a glyph),
|
|
48
|
+
* the View menu's row, the help sentences and the key table's line. */
|
|
49
|
+
label: string;
|
|
50
|
+
/** What gets you there, in the house glyphs. Not a pair: ⇧4 goes to the
|
|
51
|
+
* picture and Escape comes back, because Escape already means "put the
|
|
52
|
+
* editor back" everywhere else in this chrome. */
|
|
53
|
+
key: string;
|
|
54
|
+
/** The physical key, for the one of the two the keymap reads by `code`
|
|
55
|
+
* (⇧4 types "$" on a US board and "4" on AZERTY). */
|
|
56
|
+
code?: string;
|
|
57
|
+
/** The App menu row, for the one of the two that has one. Edit is not a row:
|
|
58
|
+
* the menu carries Video as a CHECKBOX, because Video is drawn over Edit
|
|
59
|
+
* rather than chosen instead of it. */
|
|
60
|
+
menuId?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The two words, in the order the work is: you build a thing and then you
|
|
65
|
+
* watch it.
|
|
66
|
+
*
|
|
67
|
+
* Same bargain as `state/layouts.ts` and `tools.ts` — one literal, every
|
|
68
|
+
* surface derives. The bar, the menu row and the key lane all read these, so
|
|
69
|
+
* the flag cannot be "Clean view" on the control while the menu still says
|
|
70
|
+
* Video. The GLYPHS stay in the bar: `state/` is JSX-free on purpose.
|
|
71
|
+
*
|
|
72
|
+
* "Clean view", not "Video" (2026-10-13 design review): the footer draws the
|
|
73
|
+
* flag as an eye toggle beside the layouts, and what it does is take the
|
|
74
|
+
* authoring furniture off the frame. The state, the verb and the key keep
|
|
75
|
+
* their old names (`state.video`, `setVideo`, ⇧4), so nothing persisted or
|
|
76
|
+
* bridged moves. Edit has no control of its own any more: it is the toggle
|
|
77
|
+
* off, and Escape.
|
|
78
|
+
*/
|
|
79
|
+
export const VIEW_MODE_SPECS = {
|
|
80
|
+
edit: { label: "Edit", key: "Esc" },
|
|
81
|
+
video: { label: "Clean view", key: "⇧4", code: "Digit4", menuId: "view.video" },
|
|
82
|
+
} as const satisfies Record<ViewMode, ViewModeSpec>;
|
|
83
|
+
|
|
84
|
+
/** Both words, in control order. */
|
|
85
|
+
export const VIEW_MODES = Object.keys(VIEW_MODE_SPECS) as readonly ViewMode[];
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The author is standing above every shot: arranging the cut, not authoring
|
|
89
|
+
* inside one.
|
|
90
|
+
*
|
|
91
|
+
* The store has this predicate too (`inSceneContext`), closed over its own
|
|
92
|
+
* state; this is the same sentence for the chrome readers that cannot reach
|
|
93
|
+
* it. `editingDef` is part of it because a definition opened from the scene
|
|
94
|
+
* level is a container the author IS inside.
|
|
95
|
+
*/
|
|
96
|
+
export function isSceneContext(s: ShotEditorState): boolean {
|
|
97
|
+
return s.doc !== null && s.enteredScene === null && s.editingDef === null;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** Inside a component definition: a container with its own clock and no shot
|
|
101
|
+
* camera. The third context, and the one every layout verb refuses. */
|
|
102
|
+
export function inDefinition(s: Pick<ShotEditorState, "editingDef">): boolean {
|
|
103
|
+
return s.editingDef !== null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Inside a shot, authoring its elements. The complement of the two above,
|
|
107
|
+
* spelled once because five panels were each deriving it from two fields. */
|
|
108
|
+
export function inShotContext(s: Pick<ShotEditorState, "enteredScene" | "editingDef">): boolean {
|
|
109
|
+
return s.enteredScene !== null && s.editingDef === null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* WHICH CLOCK AN EDIT IS ON: a definition plays on its own frame, everything
|
|
114
|
+
* else on the document's.
|
|
115
|
+
*
|
|
116
|
+
* Nine call sites wrote this ternary out. It is one rule — an edit inside a
|
|
117
|
+
* container is timed by that container — and getting it wrong writes a
|
|
118
|
+
* keyframe at the wrong frame with no error, which is the kind of bug an
|
|
119
|
+
* author reports as "the animation is off" a week later.
|
|
120
|
+
*
|
|
121
|
+
* A `Pick` and not the whole state, so the timeline's own narrow row objects
|
|
122
|
+
* and `store.getState()` both fit. Three sites that LOOK like this rule are
|
|
123
|
+
* deliberately not routed here: the dock's lane frame subtracts a row origin
|
|
124
|
+
* on one arm, the material graph compares `editingDef` to its container id
|
|
125
|
+
* rather than to null, and the inspector's hook reads the COALESCED frame.
|
|
126
|
+
*/
|
|
127
|
+
export function authoringFrame(
|
|
128
|
+
s: Pick<ShotEditorState, "editingDef" | "defFrame" | "frame">,
|
|
129
|
+
): number {
|
|
130
|
+
return s.editingDef !== null ? s.defFrame : s.frame;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Is there a shot camera here at all — a picture Video could be OF?
|
|
135
|
+
*
|
|
136
|
+
* A component definition, Code Studio and the material graph each put
|
|
137
|
+
* something that is not the film on the stage: a definition plays on its own
|
|
138
|
+
* clock (`defFrame`) and the stage forces the working-only layout while one is
|
|
139
|
+
* open, and the other two frame one subject into a hole in the canvas cell. None of
|
|
140
|
+
* them has a Video to be in, so every question below forks on this first.
|
|
141
|
+
*
|
|
142
|
+
* The store keeps the author OUT of that ambiguity rather than resolving it:
|
|
143
|
+
* opening any of the three calls `enterEdit()` on the way in, so `video` is
|
|
144
|
+
* never true underneath one. This predicate is what makes that reachable.
|
|
145
|
+
*/
|
|
146
|
+
export function hasVideo(s: ShotEditorState): boolean {
|
|
147
|
+
return (
|
|
148
|
+
s.doc !== null &&
|
|
149
|
+
s.editingDef === null &&
|
|
150
|
+
s.codeComponent === null &&
|
|
151
|
+
s.materialWorkspace === null
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* VIDEO IS ON SCREEN: the picture is the export's and nothing is drawn over
|
|
157
|
+
* it. What the control lights, what the stage draws, and what the keys ask
|
|
158
|
+
* before they refuse.
|
|
159
|
+
*/
|
|
160
|
+
export function videoView(s: ShotEditorState): boolean {
|
|
161
|
+
return hasVideo(s) && s.video;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Which of the two words is lit. */
|
|
165
|
+
export function viewModeOf(s: ShotEditorState): ViewMode {
|
|
166
|
+
return videoView(s) ? "video" : "edit";
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* WHICH PANES ARE ON SCREEN, which is not the same as which layout is chosen.
|
|
171
|
+
*
|
|
172
|
+
* Video draws the frame over whatever Edit was showing without writing it, so
|
|
173
|
+
* a reader that asked `stageLayout.mode` while watching would answer for a
|
|
174
|
+
* viewport nobody can see: the shading bar would offer to change an invisible
|
|
175
|
+
* pane's mode, the split divider would draw a handle across the picture, and
|
|
176
|
+
* `toolRefusal` would tell an author looking at the frame that the frame is
|
|
177
|
+
* not on screen. Every one of those asks this instead.
|
|
178
|
+
*
|
|
179
|
+
* The verbs that WRITE the layout keep reading `stageLayout.mode`: what they
|
|
180
|
+
* change is the editor underneath, which is still there.
|
|
181
|
+
*/
|
|
182
|
+
export function shownLayoutMode(s: ShotEditorState): StageLayout["mode"] {
|
|
183
|
+
return videoView(s) ? "camera" : s.stageLayout.mode;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* THE LAYOUT THE TOOLS ARE JUDGED AGAINST (`toolRefusal`): what is on screen,
|
|
188
|
+
* except inside a definition.
|
|
189
|
+
*
|
|
190
|
+
* There the stage draws one pane whatever layout the Shot left stashed (layout
|
|
191
|
+
* verbs are refused in a definition, so the stash carries in), and that pane
|
|
192
|
+
* plays both roles: the frame the box tools and the pen draw on, and the 3D
|
|
193
|
+
* view the spline draws in. Every tool's pane is on screen, which is the
|
|
194
|
+
* split's answer. Asking `shownLayoutMode` there judged the tools against a
|
|
195
|
+
* layout nothing draws: Rect refused or armed depending on where the Shot was
|
|
196
|
+
* left, and Spline refused in the pane it works in.
|
|
197
|
+
*/
|
|
198
|
+
export function toolLayoutMode(s: ShotEditorState): StageLayout["mode"] {
|
|
199
|
+
return inDefinition(s) ? "split" : shownLayoutMode(s);
|
|
200
|
+
}
|