@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,162 @@
|
|
|
1
|
+
// THE BOARD'S STILL PICTURES, for the shot cards, the Comments panel's Frame
|
|
2
|
+
// threads and every sketch picture (`useSketchThumbs`, which `MiniSketch`
|
|
3
|
+
// shows once drawn): one `createStillThumbs` queue while it is active
|
|
4
|
+
// (state/stillThumbs.ts), shared through context, so a still shown in two
|
|
5
|
+
// places is drawn once.
|
|
6
|
+
//
|
|
7
|
+
// MOUNTED FOR THE WHOLE SESSION, ACTIVE ON THE BOARD AND FOR THE BRIEF. App
|
|
8
|
+
// wraps the shell in it, because the strip and the inspector are different
|
|
9
|
+
// shell children and the shell must never remount. `active`
|
|
10
|
+
// (`stillThumbsActive`) makes the queue when the board opens, or when Studio's
|
|
11
|
+
// right column shows the Brief, and disposes it when neither does. In Studio
|
|
12
|
+
// the Brief's sketches are then the only pictures asked for: the one other
|
|
13
|
+
// reader there, the Comments panel's Frame threads, shares the Brief's column.
|
|
14
|
+
// So Studio pays for one draw per sketch of the entered Shot's plan, and
|
|
15
|
+
// nothing while the Brief is closed.
|
|
16
|
+
//
|
|
17
|
+
// The provider owns the queue's life. It is made in an effect, not in render,
|
|
18
|
+
// so StrictMode's second mount gets a live queue rather than a disposed one,
|
|
19
|
+
// and it is disposed on unmount, which revokes every object URL it made.
|
|
20
|
+
//
|
|
21
|
+
// A CODE SAVE REDRAWS what it reaches. The store has no "saved" event, so the
|
|
22
|
+
// provider watches each code file's status move from "saving" to "idle", the
|
|
23
|
+
// one write `saveCodeFile` makes on success, and hands those paths to
|
|
24
|
+
// `codeSaved`.
|
|
25
|
+
import { createContext, useContext, useEffect, useMemo, useState } from "react";
|
|
26
|
+
import type { ReactNode } from "react";
|
|
27
|
+
import { previewBindingOf } from "@dailies-studio/shot/doc";
|
|
28
|
+
import { useStore } from "../../state/context.js";
|
|
29
|
+
import { createStillThumbs } from "../../state/stillThumbs.js";
|
|
30
|
+
import { boardRightPanel } from "../../state/workspace.js";
|
|
31
|
+
import type { StillThumb, StillThumbs, StillThumbsDeps } from "../../state/stillThumbs.js";
|
|
32
|
+
|
|
33
|
+
/** The queue, and a counter bumped on each change to what it answers. */
|
|
34
|
+
const ThumbsContext = createContext<{ thumbs: StillThumbs; version: number } | null>(null);
|
|
35
|
+
|
|
36
|
+
/** Whether the still queue runs (App's `active`): on the board, and off it
|
|
37
|
+
* while the right column shows the Brief, whose sketches it draws. */
|
|
38
|
+
export function stillThumbsActive(s: Parameters<typeof boardRightPanel>[0]): boolean {
|
|
39
|
+
return s.storyboardOpen || boardRightPanel(s) === "brief";
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function StillThumbsProvider({
|
|
43
|
+
children,
|
|
44
|
+
options,
|
|
45
|
+
active = true,
|
|
46
|
+
}: {
|
|
47
|
+
children: ReactNode;
|
|
48
|
+
/** Whether the queue exists. False answers null to every reader. */
|
|
49
|
+
active?: boolean;
|
|
50
|
+
/** The queue's seams, for tests: a stub stage, timers, object URLs. Read
|
|
51
|
+
* once, when the queue is made. */
|
|
52
|
+
options?: Omit<StillThumbsDeps, "store">;
|
|
53
|
+
}) {
|
|
54
|
+
const store = useStore();
|
|
55
|
+
const [thumbs, setThumbs] = useState<StillThumbs | null>(null);
|
|
56
|
+
const [version, setVersion] = useState(0);
|
|
57
|
+
// `options` is read once by design: a queue is not rebuilt for a new object.
|
|
58
|
+
const [seams] = useState(options);
|
|
59
|
+
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
if (!active) return;
|
|
62
|
+
const made = createStillThumbs({
|
|
63
|
+
// A sketch's code components bind by `contractBinding`'s rule
|
|
64
|
+
// (ComponentStage.tsx, which the shot board's Play uses), restated so
|
|
65
|
+
// this shell-wide provider does not load the stage preview.
|
|
66
|
+
sketchBinding: (id) => {
|
|
67
|
+
const state = store.getState();
|
|
68
|
+
const contract = state.contracts[id];
|
|
69
|
+
const availability = state.library.find((row) => row.id === id)?.contractAvailability ?? "inferred";
|
|
70
|
+
return contract === undefined ? undefined : previewBindingOf({ availability, contract });
|
|
71
|
+
},
|
|
72
|
+
loadContracts: async (ids) => {
|
|
73
|
+
if (!store.getState().libraryLoaded) await store.refreshLibrary();
|
|
74
|
+
await Promise.all(ids.map((id) => store.loadContract(id)));
|
|
75
|
+
},
|
|
76
|
+
...seams,
|
|
77
|
+
store,
|
|
78
|
+
});
|
|
79
|
+
const unlisten = made.subscribe(() => setVersion((n) => n + 1));
|
|
80
|
+
let files = store.getState().codeFiles;
|
|
81
|
+
// Cold: a save is never a transport tick.
|
|
82
|
+
const unwatch = store.subscribeCold(() => {
|
|
83
|
+
const next = store.getState().codeFiles;
|
|
84
|
+
if (next === files) return;
|
|
85
|
+
const saved = Object.keys(next).filter((rel) => files[rel]?.status === "saving" && next[rel]!.status === "idle");
|
|
86
|
+
files = next;
|
|
87
|
+
if (saved.length > 0) made.codeSaved(saved);
|
|
88
|
+
});
|
|
89
|
+
setThumbs(made);
|
|
90
|
+
return () => {
|
|
91
|
+
unwatch();
|
|
92
|
+
unlisten();
|
|
93
|
+
made.dispose();
|
|
94
|
+
setThumbs(null);
|
|
95
|
+
};
|
|
96
|
+
}, [store, seams, active]);
|
|
97
|
+
|
|
98
|
+
const value = useMemo(() => (thumbs === null ? null : { thumbs, version }), [thumbs, version]);
|
|
99
|
+
return <ThumbsContext.Provider value={value}>{children}</ThumbsContext.Provider>;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** The picture of `sceneId` at Shot-local `frame`, queueing its draw. Null
|
|
103
|
+
* outside a provider, before its queue is made, or for a Shot that is gone. */
|
|
104
|
+
export function useStillThumb(sceneId: string, frame: number): StillThumb | null {
|
|
105
|
+
const context = useContext(ThumbsContext);
|
|
106
|
+
const version = context?.version;
|
|
107
|
+
// `version` re-asks: the queue changed its answer. The body must READ it,
|
|
108
|
+
// because the React Compiler keys the memo on what the body reads, not on the
|
|
109
|
+
// listed deps, and the queue object itself never changes. Keyed on `thumbs`
|
|
110
|
+
// alone, the stills stayed pending forever (stillThumbsCompiled.test.ts).
|
|
111
|
+
return useMemo(
|
|
112
|
+
() => (version === undefined ? null : context!.thumbs.thumb(sceneId, frame)),
|
|
113
|
+
[context, version, sceneId, frame],
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** The stage-drawn pictures of `sketchIds` (all of one part), by sketch id,
|
|
118
|
+
* queueing each one's draw. Each is null outside a provider, before its
|
|
119
|
+
* queue is made, or for a sketch that is gone; `MiniSketch` keeps its DOM
|
|
120
|
+
* drawing until one is ready. */
|
|
121
|
+
export function useSketchThumbs(partId: string, sketchIds: readonly string[]): ReadonlyMap<string, StillThumb | null> {
|
|
122
|
+
const context = useContext(ThumbsContext);
|
|
123
|
+
// READ, for the React Compiler's reason above: the compiled cache re-asks
|
|
124
|
+
// the queue when `version` moves. No manual memo: asking is cheap, and the
|
|
125
|
+
// ids arrive as a fresh array each render.
|
|
126
|
+
const version = context?.version;
|
|
127
|
+
const pictures = new Map<string, StillThumb | null>();
|
|
128
|
+
for (const id of sketchIds) pictures.set(id, version === undefined || context === null ? null : context.thumbs.sketch(partId, id));
|
|
129
|
+
return pictures;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* ONE STILL, drawn: the picture when there is one (an older one while its
|
|
134
|
+
* redraw waits), else a ground that says why. Sized by the caller: the
|
|
135
|
+
* strip's cards draw it at 92x52.
|
|
136
|
+
*/
|
|
137
|
+
export function StillPicture({
|
|
138
|
+
sceneId,
|
|
139
|
+
frame,
|
|
140
|
+
width,
|
|
141
|
+
height,
|
|
142
|
+
className,
|
|
143
|
+
}: {
|
|
144
|
+
sceneId: string;
|
|
145
|
+
frame: number;
|
|
146
|
+
width: number;
|
|
147
|
+
height: number;
|
|
148
|
+
className: string;
|
|
149
|
+
}) {
|
|
150
|
+
const thumb = useStillThumb(sceneId, frame);
|
|
151
|
+
const url = thumb?.url;
|
|
152
|
+
return (
|
|
153
|
+
<span
|
|
154
|
+
className={className}
|
|
155
|
+
style={{ width, height }}
|
|
156
|
+
data-status={thumb?.status ?? "pending"}
|
|
157
|
+
title={thumb?.status === "failed" ? `No picture: ${thumb.message}` : undefined}
|
|
158
|
+
>
|
|
159
|
+
{url !== undefined && <img src={url} alt="" width={width} height={height} draggable={false} />}
|
|
160
|
+
</span>
|
|
161
|
+
);
|
|
162
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// THE STORYBOARD MODE: the Project's planning board, in the docked frame.
|
|
2
|
+
//
|
|
3
|
+
// ONE CANVAS, FULL WIDTH (S1). The board fills the docked grid's centre cell
|
|
4
|
+
// from edge to edge (BoardCanvas): no left rail, no panel bar, no strip and no
|
|
5
|
+
// stage. The top bar stays, and the right column opens only while
|
|
6
|
+
// `boardRightPanel` names an occupant (the component sheet, the inspector for
|
|
7
|
+
// a card, comments, the agent).
|
|
8
|
+
//
|
|
9
|
+
// The drop dialog (BoardDropDialog) rides along: files dropped or pasted on
|
|
10
|
+
// the board open it.
|
|
11
|
+
//
|
|
12
|
+
// A SHOT'S BOARD (`storyboardPlan`, `shotBoardOf`) takes the same cell in the
|
|
13
|
+
// whole board's place: one shot's sketches (shotboard/ShotBoard.tsx).
|
|
14
|
+
//
|
|
15
|
+
// ONLY IN ITS OWN WORKSPACE. `workspaceOf` is the one precedence for which
|
|
16
|
+
// mode is on screen, so the board portals (and binds its clipboard) only when
|
|
17
|
+
// it is the answer: two modes can never fill one cell.
|
|
18
|
+
import { useEffect, useState } from "react";
|
|
19
|
+
import { useShotEditor, useStore } from "../../state/context.js";
|
|
20
|
+
import { shotBoardOf, workspaceOf } from "../../state/workspace.js";
|
|
21
|
+
import { InCell } from "../stage/cellSlots.js";
|
|
22
|
+
import { BoardCanvas } from "./BoardCanvas.js";
|
|
23
|
+
import { BoardDropDialog } from "./BoardDropDialog.js";
|
|
24
|
+
import { ShotBoard } from "./shotboard/ShotBoard.js";
|
|
25
|
+
import { bindBoardClipboard } from "./boardClipboard.js";
|
|
26
|
+
|
|
27
|
+
export function StoryboardView() {
|
|
28
|
+
const store = useStore();
|
|
29
|
+
const active = useShotEditor((s) => workspaceOf(s) === "storyboard");
|
|
30
|
+
const docId = useShotEditor((s) => s.doc?.id ?? null);
|
|
31
|
+
const plan = useShotEditor(shotBoardOf);
|
|
32
|
+
// STATE, NOT A REF: the view lands through a portal, and on a boot with
|
|
33
|
+
// `?storyboard=1` the cells register a commit after the board opens. The
|
|
34
|
+
// focus below has to run when the element arrives, not when `active` flips.
|
|
35
|
+
const [view, setView] = useState<HTMLElement | null>(null);
|
|
36
|
+
|
|
37
|
+
// ── FOCUS THE VIEW ON THE WAY IN ────────────────────────────────────────
|
|
38
|
+
//
|
|
39
|
+
// Opening a mode should not leave the keyboard on whatever control the
|
|
40
|
+
// author last pressed in the chrome around it.
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (active) view?.focus({ preventScroll: true });
|
|
43
|
+
}, [active, view]);
|
|
44
|
+
|
|
45
|
+
// ── THE CLIPBOARD, ON THE DOCUMENT ──────────────────────────────────────
|
|
46
|
+
//
|
|
47
|
+
// DOM handlers rather than keybindings, because `clipboardData.files`
|
|
48
|
+
// exists only on a real `paste` event; binding ⌘V through `handleKey` would
|
|
49
|
+
// `preventDefault` the keydown and take away pasting a screenshot onto the
|
|
50
|
+
// board. `storyboardClipboard`'s arm returns false for exactly that reason;
|
|
51
|
+
// see keymap.ts.
|
|
52
|
+
//
|
|
53
|
+
// ON THE DOCUMENT AND NOT ON THE VIEW. A clipboard event targets
|
|
54
|
+
// `document.activeElement`, and the right column sits beside the board
|
|
55
|
+
// rather than inside it, so the moment an author touched a control over
|
|
56
|
+
// there the board's copy, cut and paste would go dead with nothing saying
|
|
57
|
+
// why. The stage iframe's document binds the same handlers
|
|
58
|
+
// (`bindBoardClipboard`, StagePanel).
|
|
59
|
+
//
|
|
60
|
+
// DECLARED ABOVE THE EARLY RETURN, because hooks must be. It closes over
|
|
61
|
+
// `store`, which is stable.
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (!active) return;
|
|
64
|
+
const aborter = new AbortController();
|
|
65
|
+
bindBoardClipboard(document, store, aborter.signal);
|
|
66
|
+
return () => aborter.abort();
|
|
67
|
+
}, [active, store]);
|
|
68
|
+
|
|
69
|
+
if (!active || docId === null) return null;
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<>
|
|
73
|
+
<InCell name="centre">
|
|
74
|
+
{plan === null ? <BoardCanvas rootRef={setView} /> : <ShotBoard key={plan} partId={plan} rootRef={setView} />}
|
|
75
|
+
</InCell>
|
|
76
|
+
<BoardDropDialog />
|
|
77
|
+
</>
|
|
78
|
+
);
|
|
79
|
+
}
|