@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// The camera row: one shot's camera moves, as INTERVALS.
|
|
2
2
|
//
|
|
3
3
|
// ── THE THREE DRAGS, AND WHY THEY WRITE DIFFERENT FIELDS ────────────────
|
|
4
4
|
//
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// OUT writes `durationFrames`.
|
|
8
8
|
//
|
|
9
9
|
// One field for both edges is the classic version of this bug, and it makes a
|
|
10
|
-
// left-trim slide the whole
|
|
10
|
+
// left-trim slide the whole move. The document math is in
|
|
11
11
|
// @dailies-studio/shot's timelineOps; this file only turns pixels into frames.
|
|
12
12
|
//
|
|
13
13
|
// ── SCENE-LOCAL BARS ON A MASTER STRIP ──────────────────────────────────
|
|
@@ -19,90 +19,101 @@
|
|
|
19
19
|
// scenes — so that is the one place the offset crosses, and it crosses in one
|
|
20
20
|
// expression that converts straight back.
|
|
21
21
|
//
|
|
22
|
+
// `originFrames` is the SHOT CONTEXT's re-zero, and it is a second number
|
|
23
|
+
// rather than a smaller `offsetFrames` on purpose: it is subtracted in the
|
|
24
|
+
// `left` expression and NOWHERE else, so the snap conversion above still runs
|
|
25
|
+
// on true master frames. One number for both would make a snap inside a shot
|
|
26
|
+
// land `start` frames away from where the same drag lands outside it.
|
|
27
|
+
//
|
|
22
28
|
// ── THE SPRING'S OUT HANDLE IS DISABLED, AND SAYS SO ────────────────────
|
|
23
29
|
//
|
|
24
30
|
// `clipProgress01`'s spring arm measures elapsed SECONDS, because a spring has
|
|
25
31
|
// an intrinsic settle time. So dragging that edge changes where the window
|
|
26
32
|
// CLIPS, not how fast the spring settles. That is correct physics and it is
|
|
27
|
-
// still surprising, so the handle is
|
|
28
|
-
//
|
|
29
|
-
// the rule by dragging
|
|
33
|
+
// still surprising, so the handle is DRAWN AND DEAD — carrying the reason in
|
|
34
|
+
// its title — and the tail is drawn dashed. The author sees the move
|
|
35
|
+
// continuing past its window rather than discovering the rule by dragging, and
|
|
36
|
+
// sees why the one control that is missing is missing.
|
|
30
37
|
import { frameToPx, startDrag } from "@dailies-studio/timeline";
|
|
31
38
|
import type { PointerEvent as ReactPointerEvent } from "react";
|
|
39
|
+
import { ADD_ICON } from "../../icons.js";
|
|
32
40
|
import { useShotEditor, useStore } from "../../state/context.js";
|
|
33
|
-
import type { BlockBar,
|
|
34
|
-
import { CAMERA_ROW_ID,
|
|
41
|
+
import type { BlockBar, CameraMark } from "./model.js";
|
|
42
|
+
import { CAMERA_ROW_ID, fitsBlockLabel, frameDelta, isLoadBearingMark, thinCameraMarks } from "./model.js";
|
|
35
43
|
import type { SnapPress } from "./snap.js";
|
|
36
44
|
import { isSnapSuppressed } from "./snap.js";
|
|
45
|
+
import { useLive } from "./useLive.js";
|
|
37
46
|
|
|
38
47
|
export function BlockRow({
|
|
39
48
|
label,
|
|
40
49
|
sceneId,
|
|
41
|
-
layerId,
|
|
42
|
-
depth,
|
|
43
50
|
bars,
|
|
44
51
|
ppf,
|
|
45
52
|
labelWidth,
|
|
46
53
|
offsetFrames = 0,
|
|
47
|
-
|
|
54
|
+
originFrames = 0,
|
|
48
55
|
beginSnap,
|
|
49
56
|
onAdd,
|
|
50
|
-
|
|
57
|
+
marks,
|
|
51
58
|
}: {
|
|
52
59
|
label: string;
|
|
53
60
|
/** WHICH SCENE this row's bars live in. Read from the row and never from
|
|
54
61
|
* `state.sceneId`: the dock shows every scene at once, so the row under the
|
|
55
62
|
* pointer is routinely not the one the playhead is in. */
|
|
56
63
|
sceneId: string;
|
|
57
|
-
layerId: string;
|
|
58
|
-
depth: number;
|
|
59
64
|
bars: readonly BlockBar[];
|
|
60
65
|
ppf: number;
|
|
61
66
|
labelWidth: number;
|
|
62
|
-
/** The scene's master start. Drawing
|
|
67
|
+
/** The scene's master start. Drawing AND the snap conversion — see the header. */
|
|
63
68
|
offsetFrames?: number;
|
|
64
|
-
/** The
|
|
65
|
-
|
|
66
|
-
* layer and therefore no lifespan. */
|
|
67
|
-
lifespan?: Lifespan;
|
|
69
|
+
/** The shot context's re-zero. DRAWING ONLY — see the header. */
|
|
70
|
+
originFrames?: number;
|
|
68
71
|
beginSnap?: SnapPress;
|
|
69
|
-
/** Give the row a create button in its label cell.
|
|
70
|
-
* one: a layer's blocks are added from the Animate palette, which is where
|
|
71
|
-
* the author picks WHICH preset, and a bare "+" there would have to guess. */
|
|
72
|
+
/** Give the row a create button in its label cell. */
|
|
72
73
|
onAdd?: () => void;
|
|
73
|
-
|
|
74
|
+
/**
|
|
75
|
+
* READ-ONLY marks drawn over the bars: the camera's poses (P4).
|
|
76
|
+
*
|
|
77
|
+
* Read-only is the point, not a shortcut: a camera pose is not stored
|
|
78
|
+
* anywhere a mark could write to. It is `shot.from`/`shot.to`, which the
|
|
79
|
+
* inspector edits, and a path's waypoints, which only the agent can replace.
|
|
80
|
+
*/
|
|
81
|
+
marks?: readonly CameraMark[];
|
|
74
82
|
}) {
|
|
75
83
|
const store = useStore();
|
|
76
|
-
const
|
|
77
|
-
|
|
84
|
+
const selectedMove = useShotEditor((s) => s.selectedMove);
|
|
85
|
+
// Preferences > Timeline > Camera move labels. Read once per row, not per bar.
|
|
86
|
+
const labels = useShotEditor((s) => s.blockLabels) === "fit";
|
|
78
87
|
|
|
79
88
|
return (
|
|
80
|
-
<div
|
|
81
|
-
className={`block-row${selectedLayer ? " is-selected" : ""}`}
|
|
82
|
-
data-track={layerId}
|
|
83
|
-
data-row-scene={sceneId}
|
|
84
|
-
>
|
|
89
|
+
<div className="block-row is-camera" data-track={CAMERA_ROW_ID} data-row-scene={sceneId}>
|
|
85
90
|
{/* A CELL rather than a wide button, because the add control has to sit
|
|
86
91
|
beside the name and a button inside a button is not markup a browser
|
|
87
92
|
will keep. */}
|
|
88
93
|
<div className="block-row-label-cell" style={{ width: labelWidth }}>
|
|
94
|
+
{/* THE CAMERA ROW WEARS ITS MARK: a hollow square, the shot's own eye
|
|
95
|
+
rather than one of its contents. */}
|
|
96
|
+
<span className="camera-swatch" aria-hidden="true" />
|
|
89
97
|
<button
|
|
90
98
|
type="button"
|
|
91
99
|
className="block-row-label"
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
// shows one scene, and `select` orders within the current one — so
|
|
96
|
-
// without this the selection resolves to empty and nothing happens.
|
|
97
|
-
store.focusScene(sceneId);
|
|
98
|
-
if (layerId !== CAMERA_ROW_ID) store.select([layerId]);
|
|
99
|
-
}}
|
|
100
|
+
// NAVIGATE when the row belongs to another scene: the stage shows one
|
|
101
|
+
// scene, and the camera row is that scene's.
|
|
102
|
+
onClick={() => store.focusScene(sceneId)}
|
|
100
103
|
>
|
|
101
104
|
{label}
|
|
102
105
|
</button>
|
|
106
|
+
{/* How many marks the camera holds, at the label's end. */}
|
|
107
|
+
{marks === undefined ? null : <span className="camera-keyed">{marks.length} keyed</span>}
|
|
103
108
|
{onAdd !== undefined && (
|
|
104
|
-
<button
|
|
105
|
-
|
|
109
|
+
<button
|
|
110
|
+
type="button"
|
|
111
|
+
className="btn is-icon is-ghost block-row-add"
|
|
112
|
+
aria-label="Add camera move"
|
|
113
|
+
title="Add a camera move at the playhead"
|
|
114
|
+
onClick={onAdd}
|
|
115
|
+
>
|
|
116
|
+
{ADD_ICON}
|
|
106
117
|
</button>
|
|
107
118
|
)}
|
|
108
119
|
</div>
|
|
@@ -113,19 +124,50 @@ export function BlockRow({
|
|
|
113
124
|
bar={bar}
|
|
114
125
|
ppf={ppf}
|
|
115
126
|
offsetFrames={offsetFrames}
|
|
116
|
-
|
|
127
|
+
originFrames={originFrames}
|
|
117
128
|
beginSnap={beginSnap}
|
|
118
|
-
|
|
119
|
-
selected={
|
|
129
|
+
labels={labels}
|
|
130
|
+
selected={selectedMove?.sceneId === sceneId && selectedMove.shotId === bar.id}
|
|
120
131
|
onSelect={() => {
|
|
121
132
|
store.focusScene(sceneId);
|
|
122
|
-
store.
|
|
133
|
+
store.selectMove({ sceneId, shotId: bar.id });
|
|
123
134
|
}}
|
|
124
|
-
onDrag={(edge, toFrame) => store.
|
|
135
|
+
onDrag={(edge, toFrame) => store.dragMove(sceneId, bar.id, edge, toFrame)}
|
|
125
136
|
onDragEnd={(commit) => store.endBlockDrag(commit)}
|
|
126
137
|
onDragStart={() => store.beginBlockDrag()}
|
|
127
138
|
/>
|
|
128
139
|
))}
|
|
140
|
+
{/* AFTER the bars, so a pose sitting on a bar's edge — which is where
|
|
141
|
+
every one of them sits — reads as being on top of it rather than
|
|
142
|
+
half-swallowed. `pointer-events: none` in the CSS: these are a
|
|
143
|
+
reading, and a mark that ate the press would take the bar's own
|
|
144
|
+
trim handle away. */}
|
|
145
|
+
{(marks === undefined ? undefined : thinCameraMarks(marks, ppf))?.map((mark) => (
|
|
146
|
+
<span
|
|
147
|
+
key={mark.id}
|
|
148
|
+
className={`camera-key is-${mark.kind}`}
|
|
149
|
+
style={{ left: frameToPx(mark.frame + offsetFrames - originFrames, ppf) }}
|
|
150
|
+
data-camera-key={mark.id}
|
|
151
|
+
// The MARK's id, never its frame: a cut puts two marks on one frame
|
|
152
|
+
// (a move's end and the next move's differing start), and a frame
|
|
153
|
+
// key would name both.
|
|
154
|
+
data-testid={`camera-key-${mark.id}`}
|
|
155
|
+
title={mark.title}
|
|
156
|
+
// ── ONE OF THESE FOUR IS NOT DECORATION ────────────────────────
|
|
157
|
+
//
|
|
158
|
+
// A pose, a chain and a waypoint each restate something the bars
|
|
159
|
+
// beside them already say, so they are hidden from assistive tech
|
|
160
|
+
// — a twenty-move camera row would otherwise announce forty marks.
|
|
161
|
+
//
|
|
162
|
+
// A BREAK is the exception and has to be exposed: the rig
|
|
163
|
+
// discontinuity exists nowhere else in this row, and hiding the one
|
|
164
|
+
// mark that carries new information is how an accessibility default
|
|
165
|
+
// quietly becomes an omission.
|
|
166
|
+
{...(isLoadBearingMark(mark)
|
|
167
|
+
? { role: "img", "aria-label": mark.title }
|
|
168
|
+
: { "aria-hidden": "true" as const })}
|
|
169
|
+
/>
|
|
170
|
+
))}
|
|
129
171
|
</div>
|
|
130
172
|
</div>
|
|
131
173
|
);
|
|
@@ -135,10 +177,10 @@ function BlockBarView({
|
|
|
135
177
|
bar,
|
|
136
178
|
ppf,
|
|
137
179
|
offsetFrames,
|
|
138
|
-
|
|
180
|
+
originFrames,
|
|
139
181
|
beginSnap,
|
|
140
|
-
sceneId,
|
|
141
182
|
selected,
|
|
183
|
+
labels,
|
|
142
184
|
onSelect,
|
|
143
185
|
onDragStart,
|
|
144
186
|
onDrag,
|
|
@@ -147,18 +189,39 @@ function BlockBarView({
|
|
|
147
189
|
bar: BlockBar;
|
|
148
190
|
ppf: number;
|
|
149
191
|
offsetFrames: number;
|
|
150
|
-
|
|
192
|
+
originFrames: number;
|
|
151
193
|
beginSnap: SnapPress | undefined;
|
|
152
|
-
sceneId: string;
|
|
153
194
|
selected: boolean;
|
|
195
|
+
/** The Camera move labels pref: false draws no label on any bar. */
|
|
196
|
+
labels: boolean;
|
|
154
197
|
onSelect(): void;
|
|
155
198
|
onDragStart(): void;
|
|
156
199
|
onDrag(edge: "body" | "in" | "out", toFrame: number): void;
|
|
157
200
|
onDragEnd(commit: boolean): void;
|
|
158
201
|
}) {
|
|
159
|
-
|
|
202
|
+
// ── WHERE THE BAR IS, IN LANE FRAMES ───────────────────────────────────
|
|
203
|
+
//
|
|
204
|
+
// Named once and used twice: `left` is drawn from it and `useLive` compares
|
|
205
|
+
// the clock against it. Two spellings of one position is how a highlight
|
|
206
|
+
// ends up a bar to the left of the bar it is highlighting.
|
|
207
|
+
const startLane = bar.frame + offsetFrames - originFrames;
|
|
208
|
+
const live = useLive(startLane, startLane + bar.durationFrames, originFrames);
|
|
209
|
+
const left = frameToPx(startLane, ppf);
|
|
210
|
+
// ── THE FLOOR, AND WHAT IT COSTS ────────────────────────────────────────
|
|
211
|
+
//
|
|
212
|
+
// 4px so a one-frame move stays visible and grabbable. It is the ONLY floor
|
|
213
|
+
// now: `.block-bar` used to carry `padding: 0 8px`, which under border-box
|
|
214
|
+
// put a second, invisible 18px floor under every bar and made short moves
|
|
215
|
+
// overdraw their neighbours. The inset lives on `.block-label` for that
|
|
216
|
+
// reason.
|
|
217
|
+
//
|
|
218
|
+
// Below about 4px per frame this floor is wider than the gap to the next
|
|
219
|
+
// move, so a dense run overlaps by a pixel or two. That is deliberate and
|
|
220
|
+
// it is the only honest choice left: at that zoom the space per move is
|
|
221
|
+
// genuinely smaller than the smallest visible mark, so the alternative is
|
|
222
|
+
// a move that renders sub-pixel and disappears. Being slightly wide is
|
|
223
|
+
// recoverable by zooming in; being invisible is not.
|
|
160
224
|
const width = Math.max(4, frameToPx(bar.durationFrames, ppf));
|
|
161
|
-
const dead = deadSpans(bar, lifespan);
|
|
162
225
|
|
|
163
226
|
const drag =
|
|
164
227
|
(edge: "body" | "in" | "out") =>
|
|
@@ -173,11 +236,9 @@ function BlockBarView({
|
|
|
173
236
|
// through would be unusable.
|
|
174
237
|
const startFrame = bar.frame;
|
|
175
238
|
const startEnd = bar.frame + bar.durationFrames;
|
|
176
|
-
//
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
// layer is what moves.
|
|
180
|
-
const snap = beginSnap?.({ sceneId, layerId: bar.layerId, blockId: bar.id }, isSnapSuppressed(e));
|
|
239
|
+
// Nothing to exclude: a camera move's edges are not snap targets, so the
|
|
240
|
+
// bar cannot catch on itself.
|
|
241
|
+
const snap = beginSnap?.(undefined, isSnapSuppressed(e));
|
|
181
242
|
const place = (anchor: number, delta: number): number =>
|
|
182
243
|
snap === undefined ? anchor + delta : snap(anchor + delta + offsetFrames) - offsetFrames;
|
|
183
244
|
onDragStart();
|
|
@@ -195,48 +256,56 @@ function BlockBarView({
|
|
|
195
256
|
|
|
196
257
|
return (
|
|
197
258
|
<div
|
|
198
|
-
className={`block-bar
|
|
259
|
+
className={`block-bar${live ? " is-live" : ""}${selected ? " is-selected" : ""}`}
|
|
199
260
|
style={{ left, width }}
|
|
200
261
|
data-block={bar.id}
|
|
201
|
-
data-clipped={dead.length > 0 ? "true" : undefined}
|
|
202
262
|
onPointerDown={drag("body")}
|
|
203
|
-
title={
|
|
204
|
-
`${bar.preset} · ${bar.slot} · ${bar.frame}–${bar.frame + bar.durationFrames}` +
|
|
205
|
-
(dead.length > 0 ? " · outside the layer's lifespan, so this part never plays" : "")
|
|
206
|
-
}
|
|
263
|
+
title={`${bar.label} · ${bar.frame}–${bar.frame + bar.durationFrames}`}
|
|
207
264
|
>
|
|
208
|
-
{/* KEPT, NOT DELETED. Shortening a lifespan past a block is a trim, not a
|
|
209
|
-
request to throw the block away — refusal over corruption applies to
|
|
210
|
-
the editor too. The part that can never play is greyed in place, so the
|
|
211
|
-
author can see exactly how far to pull the edge back. */}
|
|
212
|
-
{dead.map((span) => (
|
|
213
|
-
<span
|
|
214
|
-
key={span.from}
|
|
215
|
-
className="block-dead"
|
|
216
|
-
aria-hidden="true"
|
|
217
|
-
style={{ left: frameToPx(span.from - bar.frame, ppf), width: frameToPx(span.to - span.from, ppf) }}
|
|
218
|
-
/>
|
|
219
|
-
))}
|
|
220
265
|
<span
|
|
221
266
|
className="block-handle block-handle-in"
|
|
222
267
|
data-handle="in"
|
|
223
268
|
onPointerDown={drag("in")}
|
|
224
269
|
aria-hidden="true"
|
|
225
270
|
/>
|
|
226
|
-
|
|
271
|
+
{/* ONLY WHEN THE WHOLE WORD FITS. See `fitsBlockLabel`: a bar is as wide
|
|
272
|
+
as its move is long, so on a dense row the label used to be handed
|
|
273
|
+
the two or three pixels left after the inset and drew a sliver of a
|
|
274
|
+
letter. The `title` above carries the kind for every bar, fitted or
|
|
275
|
+
not, so this hides a name that could not be read rather than a fact.
|
|
276
|
+
The Camera move labels pref turns them all off; the title stays. */}
|
|
277
|
+
{labels && fitsBlockLabel(width, bar.label) ? <span className="block-label">{bar.label}</span> : null}
|
|
227
278
|
{bar.spring ? (
|
|
228
|
-
// The settle tail: the
|
|
229
|
-
// what a spring does and what the
|
|
279
|
+
// The settle tail: the move keeps going past its own window, which is
|
|
280
|
+
// what a spring does and what the dead handle beside it is about.
|
|
230
281
|
<span className="block-spring-tail" aria-hidden="true" />
|
|
231
|
-
) :
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
282
|
+
) : null}
|
|
283
|
+
{/* DRAWN EVEN WHEN IT DOES NOTHING. A spring's out edge omitted outright
|
|
284
|
+
teaches an author nothing: the affordance every other bar has simply
|
|
285
|
+
is not there, and the rule behind that is invisible. It is drawn dead
|
|
286
|
+
with the reason in its title instead, and the press is swallowed
|
|
287
|
+
rather than left to bubble — reaching the bar's body drag would MOVE
|
|
288
|
+
the move, which is the one thing someone pulling an out handle
|
|
289
|
+
certainly did not ask for. */}
|
|
290
|
+
<span
|
|
291
|
+
className={`block-handle block-handle-out${bar.spring ? " is-disabled" : ""}`}
|
|
292
|
+
data-handle="out"
|
|
293
|
+
data-disabled={bar.spring ? "true" : undefined}
|
|
294
|
+
onPointerDown={
|
|
295
|
+
bar.spring
|
|
296
|
+
? (e) => {
|
|
297
|
+
e.preventDefault();
|
|
298
|
+
e.stopPropagation();
|
|
299
|
+
}
|
|
300
|
+
: drag("out")
|
|
301
|
+
}
|
|
302
|
+
title={
|
|
303
|
+
bar.spring
|
|
304
|
+
? "A spring settles in its own time, so this edge would only clip the window rather than shorten the motion"
|
|
305
|
+
: undefined
|
|
306
|
+
}
|
|
307
|
+
aria-hidden="true"
|
|
308
|
+
/>
|
|
239
309
|
</div>
|
|
240
310
|
);
|
|
241
311
|
}
|
|
242
|
-
|