@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,84 @@
|
|
|
1
|
+
// THE MASK SECTION (gap 7, Paper page 25, "3 · Mask section"). First in the
|
|
2
|
+
// rail whenever the selection is a mask or a group that holds one: Mode,
|
|
3
|
+
// Invert, what it masks, and Release.
|
|
4
|
+
//
|
|
5
|
+
// Mode and Invert are plain switches, not keyframed: the mask's opacity,
|
|
6
|
+
// transform and keyframes are what animate a matte. Every write goes through
|
|
7
|
+
// `store.editMask`, the same verb the menu rows call, so a locked mask refuses
|
|
8
|
+
// here exactly as it does there.
|
|
9
|
+
//
|
|
10
|
+
// A DOCUMENT GATE, like Spline follow: the table in layout.ts lists "mask" for
|
|
11
|
+
// every kind, and this section withholds itself when nothing selected is a mask
|
|
12
|
+
// or holds one.
|
|
13
|
+
import { InspectorRow, InspectorSection, SegmentedControl, Toggle, useLocked } from "@dailies-studio/ui";
|
|
14
|
+
import { homeOf, maskRun, maskTargetOf } from "@dailies-studio/shot/doc";
|
|
15
|
+
import type { LayerMask3D } from "@dailies-studio/shot/doc";
|
|
16
|
+
import { MASK_ICON } from "../../../icons.js";
|
|
17
|
+
import { useShotEditor, useStore } from "../../../state/context.js";
|
|
18
|
+
import { NO_CONTENT_HINT } from "../../maskMarks.js";
|
|
19
|
+
|
|
20
|
+
export function MaskSection() {
|
|
21
|
+
const store = useStore();
|
|
22
|
+
const doc = useShotEditor((s) => s.doc);
|
|
23
|
+
const container = useShotEditor((s) => s.editingDef ?? s.sceneId);
|
|
24
|
+
const selection = useShotEditor((s) => s.selection);
|
|
25
|
+
// Release is a plain button, so it reads a viewer's lock here; Mode and
|
|
26
|
+
// Invert are widgets that read it themselves.
|
|
27
|
+
const locked = useLocked();
|
|
28
|
+
const home = doc === null || container === null ? null : homeOf(doc, container);
|
|
29
|
+
if (home === null) return null;
|
|
30
|
+
// `editMask`'s own reading of the selection, so the rows show what it writes.
|
|
31
|
+
const targets = [
|
|
32
|
+
...new Set(selection.map((id) => maskTargetOf(home, id)).filter((id): id is string => id !== null)),
|
|
33
|
+
];
|
|
34
|
+
const masks = targets.map((id) => home.layersById[id]!);
|
|
35
|
+
if (masks.length === 0) return null;
|
|
36
|
+
const modes = new Set(masks.map((l) => l.mask!.mode));
|
|
37
|
+
// Invert over EVERY mask the selection names: masks that disagree read
|
|
38
|
+
// Mixed, and a press inverts them all (the one switch policy).
|
|
39
|
+
const inverts = new Set(masks.map((l) => l.mask!.invert === true));
|
|
40
|
+
const invert = inverts.has(true) && inverts.size === 1;
|
|
41
|
+
const live = masks.filter((l) => l.hidden !== true);
|
|
42
|
+
const covered = [...new Set(live.flatMap((l) => maskRun(home, l.id)))].map((id) => home.layersById[id]!.label);
|
|
43
|
+
const reach =
|
|
44
|
+
live.length === 0 ? "Off while hidden" : covered.length === 0 ? NO_CONTENT_HINT : covered.join(", ");
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<InspectorSection className="insp-object insp-mask" title="Mask" icon={MASK_ICON} persistKey="shot:mask">
|
|
48
|
+
<InspectorRow label="Mode">
|
|
49
|
+
<SegmentedControl
|
|
50
|
+
ariaLabel="Mask mode"
|
|
51
|
+
// A selection whose masks disagree selects neither, Stroke's rule.
|
|
52
|
+
value={modes.size === 1 ? [...modes][0]! : ""}
|
|
53
|
+
options={[
|
|
54
|
+
{ value: "alpha", label: "Alpha" },
|
|
55
|
+
{ value: "luma", label: "Luma" },
|
|
56
|
+
]}
|
|
57
|
+
onChange={(mode) => store.editMask({ mode: mode as LayerMask3D["mode"] })}
|
|
58
|
+
/>
|
|
59
|
+
</InspectorRow>
|
|
60
|
+
<InspectorRow label="Invert">
|
|
61
|
+
<Toggle
|
|
62
|
+
checked={invert}
|
|
63
|
+
mixed={inverts.size > 1}
|
|
64
|
+
ariaLabel="Invert mask"
|
|
65
|
+
onChange={(next) => store.editMask({ invert: next })}
|
|
66
|
+
/>
|
|
67
|
+
</InspectorRow>
|
|
68
|
+
{/* What it masks is read, never typed: the house readout, so the box
|
|
69
|
+
neither lifts on hover nor offers a text cursor. */}
|
|
70
|
+
<InspectorRow label="Masks" className="insp-readout">
|
|
71
|
+
<span className="insp-dim is-text" title={reach}>
|
|
72
|
+
{reach}
|
|
73
|
+
</span>
|
|
74
|
+
</InspectorRow>
|
|
75
|
+
{/* One quiet verb under the rows: the house row of buttons, holding the
|
|
76
|
+
house outline button (no fill, the quiet edge) across the row. */}
|
|
77
|
+
<div className="insp-buttons insp-mask-release">
|
|
78
|
+
<button type="button" className="btn is-outline" disabled={locked} onClick={() => store.editMask(null)}>
|
|
79
|
+
Release mask
|
|
80
|
+
</button>
|
|
81
|
+
</div>
|
|
82
|
+
</InspectorSection>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// The reusable material's own fields, on the mesh that wears it: its name,
|
|
2
|
+
// which graph it is bound to, whether anything else shares it, and the
|
|
3
|
+
// controls it exposes per mesh.
|
|
4
|
+
//
|
|
5
|
+
// ── WHY THESE ARE NOT IN THE NODE EDITOR ────────────────────────────────
|
|
6
|
+
//
|
|
7
|
+
// They were, briefly, as a column beside the graph. The node editor shows the
|
|
8
|
+
// shader and the object it is on and nothing else — a properties rail in there
|
|
9
|
+
// is the thing that made it read as a docked plugin rather than a view.
|
|
10
|
+
//
|
|
11
|
+
// They belong here anyway. An exposed control is a PER-MESH value with a
|
|
12
|
+
// keyframe dot: it is shot work, authored against the playhead, on the layer.
|
|
13
|
+
// The graph those controls come from is the reusable thing, and which mesh
|
|
14
|
+
// wears it is a property of the mesh. Both questions are this panel's.
|
|
15
|
+
//
|
|
16
|
+
// SUBJECT: the selected mesh, not the open workspace. Selecting a mesh is how
|
|
17
|
+
// you get here, and `openMaterialWorkspace` selects the mesh it opens on, so
|
|
18
|
+
// closing the editor lands on exactly these rows for the material just edited.
|
|
19
|
+
import { useState } from "react";
|
|
20
|
+
import { Combobox, IconPlus, InspectorRow, InspectorSection, TextField, useLocked } from "@dailies-studio/ui";
|
|
21
|
+
import {
|
|
22
|
+
homeOf,
|
|
23
|
+
isGraphMaterial,
|
|
24
|
+
materialBindingForSlot,
|
|
25
|
+
materialGraphUseCount,
|
|
26
|
+
validateMaterialGraph,
|
|
27
|
+
} from "@dailies-studio/shot/doc";
|
|
28
|
+
import type { MaterialGraphParameterType } from "@dailies-studio/shot/doc";
|
|
29
|
+
import { useShotEditor, useStore } from "../../../state/context.js";
|
|
30
|
+
import { governingMaterialSlot } from "../../../state/store.js";
|
|
31
|
+
import { useRebindGraph } from "../../material/MaterialLibrary.js";
|
|
32
|
+
import {
|
|
33
|
+
MaterialParameterControls,
|
|
34
|
+
MaterialParameterDefinitions,
|
|
35
|
+
} from "../../material/MaterialParameterControls.js";
|
|
36
|
+
import type { MaterialWorkspaceState } from "../../../state/types.js";
|
|
37
|
+
|
|
38
|
+
/** The slot the node editor is open on, when it is open on THIS mesh. Null
|
|
39
|
+
* otherwise, which is the layer-wide binding — the only one a primitive has
|
|
40
|
+
* and the one a fresh selection means. */
|
|
41
|
+
function workspaceSlot(workspace: MaterialWorkspaceState | null, layerId: string): number | null {
|
|
42
|
+
return workspace !== null && workspace.layerId === layerId ? workspace.slot : null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function MaterialSection() {
|
|
46
|
+
const store = useStore();
|
|
47
|
+
const doc = useShotEditor((s) => s.doc);
|
|
48
|
+
const containerId = useShotEditor((s) => s.editingDef ?? s.enteredScene ?? s.sceneId);
|
|
49
|
+
const selection = useShotEditor((s) => s.selection);
|
|
50
|
+
const workspace = useShotEditor((s) => s.materialWorkspace);
|
|
51
|
+
const [parameterType, setParameterType] = useState<MaterialGraphParameterType>("float");
|
|
52
|
+
// Make unique and the add are plain buttons, so they read a viewer's lock
|
|
53
|
+
// here; the name, the graph and the type are widgets that read it themselves.
|
|
54
|
+
const locked = useLocked();
|
|
55
|
+
// The material column's rebind, so a swap here asks before it takes
|
|
56
|
+
// submesh graphs or keyed controls with it, exactly as a press there does.
|
|
57
|
+
const { rebind, dialog } = useRebindGraph();
|
|
58
|
+
|
|
59
|
+
// ONE MESH. These keys belong to ONE graph's parameter list, so a fan-out
|
|
60
|
+
// across a mixed selection would write keys the other material has never
|
|
61
|
+
// heard of — MeshSection's own rule, for its own reason.
|
|
62
|
+
const layerId = selection.length === 1 ? selection[0] : undefined;
|
|
63
|
+
if (doc === null || containerId === null || layerId === undefined) return null;
|
|
64
|
+
const layer = homeOf(doc, containerId)?.layersById[layerId];
|
|
65
|
+
if (layer?.kind !== "mesh") return null;
|
|
66
|
+
// THROUGH THE SLOT the node editor is open on, when it is open: a model's
|
|
67
|
+
// submesh has its own graph, and closing the editor must land on the rows
|
|
68
|
+
// for the graph that was just edited rather than the layer-wide default.
|
|
69
|
+
const slot = workspaceSlot(workspace, layer.id);
|
|
70
|
+
const binding = isGraphMaterial(layer.mesh.material)
|
|
71
|
+
? materialBindingForSlot(layer.mesh.material, slot)
|
|
72
|
+
: null;
|
|
73
|
+
// The binding the shown graph actually sits on: the submesh's own, or the
|
|
74
|
+
// whole model's when that submesh has none.
|
|
75
|
+
const bindingSlot = isGraphMaterial(layer.mesh.material)
|
|
76
|
+
? governingMaterialSlot(layer.mesh.material, slot)
|
|
77
|
+
: null;
|
|
78
|
+
const layerName = layer.label?.trim() || "Mesh";
|
|
79
|
+
const graph = binding === null ? undefined : doc.materials?.[binding.materialId];
|
|
80
|
+
// A legacy catalog material, or none at all. MeshSection's own Material row
|
|
81
|
+
// is what offers to set one up; there is nothing here to name until it is.
|
|
82
|
+
if (graph === undefined) return null;
|
|
83
|
+
|
|
84
|
+
const usage = materialGraphUseCount(doc, graph.id);
|
|
85
|
+
const problems = validateMaterialGraph(graph, doc.assets);
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<InspectorSection className="insp-object" title="Material" persistKey="shot:material-graph">
|
|
89
|
+
<InspectorRow label="Name">
|
|
90
|
+
<TextField
|
|
91
|
+
value={graph.name}
|
|
92
|
+
ariaLabel="Material name"
|
|
93
|
+
onCommit={(next) => store.renameProjectMaterial(graph.id, next)}
|
|
94
|
+
/>
|
|
95
|
+
</InspectorRow>
|
|
96
|
+
<InspectorRow label="Graph">
|
|
97
|
+
<Combobox
|
|
98
|
+
value={graph.id}
|
|
99
|
+
ariaLabel="Project material"
|
|
100
|
+
options={Object.values(doc.materials ?? {})
|
|
101
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
102
|
+
.map((material) => ({ value: material.id, label: material.name }))}
|
|
103
|
+
onChange={(materialId) => {
|
|
104
|
+
if (materialId === graph.id) return;
|
|
105
|
+
const named = doc.materials?.[materialId]?.name ?? "this graph";
|
|
106
|
+
rebind(layer, layerName, slot, `“${named}”`, (to) =>
|
|
107
|
+
store.assignMeshGraphMaterial(layer.id, materialId, to),
|
|
108
|
+
);
|
|
109
|
+
}}
|
|
110
|
+
/>
|
|
111
|
+
</InspectorRow>
|
|
112
|
+
<InspectorRow label="Shared">
|
|
113
|
+
<button
|
|
114
|
+
type="button"
|
|
115
|
+
className="btn"
|
|
116
|
+
disabled={locked || usage <= 1}
|
|
117
|
+
title={
|
|
118
|
+
usage <= 1
|
|
119
|
+
? "This mesh already owns the only binding"
|
|
120
|
+
: "Copy this shared material for only this surface"
|
|
121
|
+
}
|
|
122
|
+
onClick={() => store.duplicateMeshGraphMaterial(layer.id, slot)}
|
|
123
|
+
>
|
|
124
|
+
{usage <= 1 ? "Only this mesh" : `Make unique · ${usage} uses`}
|
|
125
|
+
</button>
|
|
126
|
+
</InspectorRow>
|
|
127
|
+
|
|
128
|
+
{/* ONE LINE. The two-deck heading this replaces was drawn for a 260px
|
|
129
|
+
detail rail with nothing above it; in the inspector it sits under a
|
|
130
|
+
section title that already says "Material", and "Exposed controls"
|
|
131
|
+
wrapped to two lines to make room for a second label saying the same
|
|
132
|
+
thing again. */}
|
|
133
|
+
<div className="material-section-heading">
|
|
134
|
+
<span className="material-eyebrow">Exposed controls</span>
|
|
135
|
+
<div className="material-add-parameter">
|
|
136
|
+
<Combobox
|
|
137
|
+
value={parameterType}
|
|
138
|
+
ariaLabel="New parameter type"
|
|
139
|
+
className="material-parameter-type"
|
|
140
|
+
options={[
|
|
141
|
+
{ value: "float", label: "Float" },
|
|
142
|
+
{ value: "color", label: "Color" },
|
|
143
|
+
{ value: "vec2", label: "Vector 2" },
|
|
144
|
+
{ value: "vec3", label: "Vector 3" },
|
|
145
|
+
]}
|
|
146
|
+
onChange={(value) => setParameterType(value as MaterialGraphParameterType)}
|
|
147
|
+
/>
|
|
148
|
+
{/* The house add glyph, as every inspector add is drawn, and a
|
|
149
|
+
name a screen reader announces. */}
|
|
150
|
+
<button
|
|
151
|
+
type="button"
|
|
152
|
+
className="btn is-icon"
|
|
153
|
+
aria-label="Expose parameter"
|
|
154
|
+
title="Expose parameter"
|
|
155
|
+
disabled={locked}
|
|
156
|
+
onClick={() => store.addProjectMaterialParameter(graph.id, parameterType)}
|
|
157
|
+
>
|
|
158
|
+
<IconPlus />
|
|
159
|
+
</button>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
<MaterialParameterDefinitions graph={graph} />
|
|
163
|
+
<MaterialParameterControls graph={graph} containerId={containerId} layerId={layer.id} slot={bindingSlot} />
|
|
164
|
+
|
|
165
|
+
{problems.length === 0 ? null : (
|
|
166
|
+
<section className="material-problem-list" aria-label="Graph issues">
|
|
167
|
+
{problems.map((problem) => (
|
|
168
|
+
<p key={`${problem.at}:${problem.message}`}>
|
|
169
|
+
<code>{problem.at || "graph"}</code> {problem.message}
|
|
170
|
+
</p>
|
|
171
|
+
))}
|
|
172
|
+
</section>
|
|
173
|
+
)}
|
|
174
|
+
{dialog}
|
|
175
|
+
</InspectorSection>
|
|
176
|
+
);
|
|
177
|
+
}
|