@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
|
@@ -4,88 +4,282 @@
|
|
|
4
4
|
// Every readout is the layer AS PAINTED at the playhead and every commit goes
|
|
5
5
|
// through `setEffectiveField`, so the number typed is the number drawn. See
|
|
6
6
|
// ../useDocWrite.ts for why both halves are required.
|
|
7
|
-
|
|
7
|
+
//
|
|
8
|
+
// The THIRD half — a drag — is `useTransformScrub` below, and it lives here
|
|
9
|
+
// because it is the seam's bracket plus this section's own vocabulary. Every
|
|
10
|
+
// other section that edits a transform field imports it from here.
|
|
11
|
+
import { InspectorRow, InspectorSection, NumberField, Toggle } from "@dailies-studio/ui";
|
|
12
|
+
import type { ScrubHandlers } from "@dailies-studio/ui";
|
|
13
|
+
import type { ReactNode } from "react";
|
|
14
|
+
import { MAX_LAYER_SIZE, containerFrame, setLayerTrackSpatial } from "@dailies-studio/shot/doc";
|
|
8
15
|
import type { TransformField } from "@dailies-studio/shot/doc";
|
|
9
|
-
import {
|
|
16
|
+
import { useStore } from "../../../state/context.js";
|
|
17
|
+
import { readField, typeTransformField } from "../../../state/fieldWrite.js";
|
|
18
|
+
import { authoringFrame } from "../../../state/viewMode.js";
|
|
19
|
+
import { KeyframeDot } from "../KeyframeDot.js";
|
|
20
|
+
import {
|
|
21
|
+
useScrub,
|
|
22
|
+
useSelectedLayers,
|
|
23
|
+
useSelectionScrub,
|
|
24
|
+
useSelectionValue,
|
|
25
|
+
useTransformWrite,
|
|
26
|
+
} from "../useDocWrite.js";
|
|
10
27
|
import { AlignRow } from "./AlignRow.js";
|
|
11
28
|
|
|
29
|
+
/** What keys together with each box's diamond, for its tooltip: a track is
|
|
30
|
+
* per vector (see `Pair`). */
|
|
31
|
+
const POSITION_PARTS = ["X", "Y", "Z"] as const;
|
|
32
|
+
const SIZE_PARTS = ["W", "H"] as const;
|
|
33
|
+
const TILT_PARTS = ["Tilt X", "Tilt Y"] as const;
|
|
34
|
+
|
|
12
35
|
export function TransformSection() {
|
|
13
36
|
return (
|
|
14
|
-
<InspectorSection title="Transform" persistKey="shot:transform">
|
|
37
|
+
<InspectorSection className="insp-object" title="Transform" persistKey="shot:transform">
|
|
15
38
|
{/* Above the fields, the way Raylight leads its Position section: the
|
|
16
39
|
alignment buttons are how a layout actually gets made, and the
|
|
17
40
|
numbers are how it gets adjusted afterwards. */}
|
|
18
41
|
<AlignRow />
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
{/* EVERY BOX CARRIES THE DIAMOND OF THE TRACK IT SHOWS, inside it: X
|
|
43
|
+
and Y each carry Position's (see `Pair` for why one track lights
|
|
44
|
+
two boxes). The expose pin publishes the whole track, so only a
|
|
45
|
+
vector's first box carries it (`pin={false}` on the rest). */}
|
|
46
|
+
<Pair>
|
|
47
|
+
<Field field="x" label="X" name="Position X" unit="px" keyPath="transform.position" parts={POSITION_PARTS} />
|
|
48
|
+
<Field field="y" label="Y" name="Position Y" unit="px" keyPath="transform.position" parts={POSITION_PARTS} pin={false} />
|
|
49
|
+
</Pair>
|
|
50
|
+
<PathCurveRows />
|
|
51
|
+
{/* `MAX_LAYER_SIZE` is where the write path saturates (`setEffectiveField`),
|
|
52
|
+
so the field says the ceiling before the document answers with it. */}
|
|
53
|
+
<Pair>
|
|
54
|
+
<Field field="w" label="W" name="Layer width" unit="px" min={1} max={MAX_LAYER_SIZE} keyPath="transform.size" parts={SIZE_PARTS} />
|
|
55
|
+
<Field field="h" label="H" name="Layer height" unit="px" min={1} max={MAX_LAYER_SIZE} keyPath="transform.size" parts={SIZE_PARTS} pin={false} />
|
|
56
|
+
</Pair>
|
|
57
|
+
{/* Depth is the field that makes this lane 3D, so it sits with the
|
|
58
|
+
position rather than in a section of its own. Its TRACK is the
|
|
59
|
+
position vec3, so the Z box carries Position's diamond, lit with
|
|
60
|
+
X's and Y's (and X's box holds Position's one pin); Roll beside it
|
|
61
|
+
carries its own. One diamond for the pair keyed Roll only, beside a
|
|
62
|
+
Z it did not key. */}
|
|
63
|
+
<Pair>
|
|
64
|
+
<Field field="z" label="Z" name="Position Z" unit="px" keyPath="transform.position" parts={POSITION_PARTS} pin={false} />
|
|
65
|
+
<Field field="roll" label="Roll" unit="°" step={1} keyPath="transform.rollDeg" />
|
|
66
|
+
</Pair>
|
|
67
|
+
<Pair>
|
|
68
|
+
<Field field="tiltX" label="Tilt X" unit="°" step={1} min={-180} max={180} keyPath="transform.tilt" parts={TILT_PARTS} />
|
|
69
|
+
<Field field="tiltY" label="Tilt Y" unit="°" step={1} min={-180} max={180} keyPath="transform.tilt" parts={TILT_PARTS} pin={false} />
|
|
70
|
+
</Pair>
|
|
31
71
|
</InspectorSection>
|
|
32
72
|
);
|
|
33
73
|
}
|
|
34
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Two fields side by side, each its own box with its diamond inside it.
|
|
77
|
+
*
|
|
78
|
+
* A TRACK IS PER VECTOR, not per component: `transform.position` carries x, y
|
|
79
|
+
* and z in one vec3, so keying any of them keys all three. That is the
|
|
80
|
+
* schema's own shape (one writer per FIELD, which is why validate refuses
|
|
81
|
+
* `transform.position` beside `transform.position.z`). So every box that
|
|
82
|
+
* shows a part of the vector carries the VECTOR's diamond, the same state in
|
|
83
|
+
* each, and a press in any of them keys the whole vector; the tooltip says
|
|
84
|
+
* which parts key together, so the Y box's diamond never reads as Y's own.
|
|
85
|
+
*/
|
|
86
|
+
function Pair({ children }: { children: ReactNode }) {
|
|
87
|
+
return (
|
|
88
|
+
<InspectorRow>
|
|
89
|
+
<div className="insp-vec">{children}</div>
|
|
90
|
+
</InspectorRow>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** The tension a path takes when "Curved path" turns on. */
|
|
95
|
+
const DEFAULT_TENSION = 0.5;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* "Curved path" (gap 3): the Position track's `spatialInterp`, which bends the
|
|
99
|
+
* motion path through the keys while each key's ease keeps the timing.
|
|
100
|
+
*
|
|
101
|
+
* A splineFollow layer's path is the spline, so it gets a note instead. With
|
|
102
|
+
* no Position keys there is no path to curve: the switch is disabled and says
|
|
103
|
+
* why. Over a multi-selection that disagrees each switch reads Mixed, and a
|
|
104
|
+
* press turns it on for every layer, in one undo step (the one policy every
|
|
105
|
+
* switch in the inspector keeps).
|
|
106
|
+
*/
|
|
107
|
+
function PathCurveRows() {
|
|
108
|
+
const store = useStore();
|
|
109
|
+
const layers = useSelectedLayers();
|
|
110
|
+
// THE TENSION'S DRAG HALF, over the same op the typed value takes, on every
|
|
111
|
+
// selected layer, re-derived from the gesture's base on each capture. The
|
|
112
|
+
// ids are read live, as `useSelectionScrub` reads them.
|
|
113
|
+
const tensionScrub = useScrub((doc, raw) => {
|
|
114
|
+
const s = store.getState();
|
|
115
|
+
const container = s.editingDef ?? s.sceneId;
|
|
116
|
+
if (container === null) return doc;
|
|
117
|
+
let next = doc;
|
|
118
|
+
for (const id of s.selection) {
|
|
119
|
+
next = setLayerTrackSpatial(next, container, id, "transform.position", {
|
|
120
|
+
type: "catmull-rom",
|
|
121
|
+
tension: Number(raw),
|
|
122
|
+
}).doc;
|
|
123
|
+
}
|
|
124
|
+
return next;
|
|
125
|
+
});
|
|
126
|
+
if (layers.length === 0) return null;
|
|
127
|
+
if (layers.some((l) => l.splineFollow !== undefined)) {
|
|
128
|
+
return <p className="insp-note">Path follows the spline.</p>;
|
|
129
|
+
}
|
|
130
|
+
const tracks = layers.map((l) => l.tracks?.["transform.position"]);
|
|
131
|
+
const keyed = tracks.every((t) => t !== undefined && t.keyframes.length > 0);
|
|
132
|
+
const curves = tracks.map((t) => t?.spatialInterp);
|
|
133
|
+
const on = keyed && curves.every((c) => c !== undefined);
|
|
134
|
+
const curvedMixed = keyed && !on && curves.some((c) => c !== undefined);
|
|
135
|
+
// Bezier handles (schema v40) replace the tension: the curve is then the
|
|
136
|
+
// handles, dragged on the stage.
|
|
137
|
+
const handles = on && curves.every((c) => c?.type === "bezier");
|
|
138
|
+
const handlesMixed = on && !handles && curves.some((c) => c?.type === "bezier");
|
|
139
|
+
const tensioned = on && curves.every((c) => c?.type === "catmull-rom");
|
|
140
|
+
const tensions = curves.map((c) => (c?.type === "catmull-rom" ? (c.tension ?? 0) : 0));
|
|
141
|
+
const ids = layers.map((l) => l.id);
|
|
142
|
+
return (
|
|
143
|
+
<>
|
|
144
|
+
<InspectorRow label="Curved path">
|
|
145
|
+
<Toggle
|
|
146
|
+
checked={on}
|
|
147
|
+
mixed={curvedMixed}
|
|
148
|
+
disabled={!keyed}
|
|
149
|
+
ariaLabel="Curved path"
|
|
150
|
+
onChange={(next) =>
|
|
151
|
+
store.setPathCurve(ids, next ? { type: "catmull-rom", tension: DEFAULT_TENSION } : null)
|
|
152
|
+
}
|
|
153
|
+
/>
|
|
154
|
+
</InspectorRow>
|
|
155
|
+
{keyed ? null : <p className="insp-note">Key Position to curve its path.</p>}
|
|
156
|
+
{on ? (
|
|
157
|
+
<InspectorRow label="Path handles">
|
|
158
|
+
<Toggle
|
|
159
|
+
checked={handles}
|
|
160
|
+
mixed={handlesMixed}
|
|
161
|
+
ariaLabel="Path handles"
|
|
162
|
+
onChange={(next) =>
|
|
163
|
+
store.setPathCurve(ids, next ? { type: "bezier" } : { type: "catmull-rom", tension: DEFAULT_TENSION })
|
|
164
|
+
}
|
|
165
|
+
/>
|
|
166
|
+
</InspectorRow>
|
|
167
|
+
) : null}
|
|
168
|
+
{handles ? <p className="insp-note">Press a path dot to drag its handles.</p> : null}
|
|
169
|
+
{tensioned ? (
|
|
170
|
+
// The explanation is the ROW's tooltip: an unlabelled row puts it on
|
|
171
|
+
// the row itself (InspectorRow), where it used to be dropped.
|
|
172
|
+
<InspectorRow labelTitle="0 is the roundest curve, 1 runs straight through the keys">
|
|
173
|
+
<NumberField
|
|
174
|
+
value={tensions[0]!}
|
|
175
|
+
mixed={tensions.some((t) => t !== tensions[0])}
|
|
176
|
+
label="Tension"
|
|
177
|
+
ariaLabel="Path tension"
|
|
178
|
+
min={0}
|
|
179
|
+
max={1}
|
|
180
|
+
step={0.05}
|
|
181
|
+
precision={2}
|
|
182
|
+
onCommit={(tension) => store.setPathCurve(ids, { type: "catmull-rom", tension })}
|
|
183
|
+
onScrubStart={tensionScrub.start}
|
|
184
|
+
onScrub={tensionScrub.move}
|
|
185
|
+
onScrubEnd={tensionScrub.end}
|
|
186
|
+
/>
|
|
187
|
+
</InspectorRow>
|
|
188
|
+
) : null}
|
|
189
|
+
</>
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* `useTransformWrite`'s DRAG half.
|
|
195
|
+
*
|
|
196
|
+
* Without it a NumberField still commits once at release — the seam's own
|
|
197
|
+
* fallback — but the STAGE does not move until the pointer comes up, so
|
|
198
|
+
* dragging W is a number that changes over a picture that does not. Live is the
|
|
199
|
+
* whole reason a drag handle exists.
|
|
200
|
+
*
|
|
201
|
+
* It lives here rather than at the seam because it is the seam PLUS this lane's
|
|
202
|
+
* transform vocabulary: the typed path's own builder (`typeTransformField`),
|
|
203
|
+
* re-derived from the gesture's base on every capture. With Animate on, the
|
|
204
|
+
* scrub's commit records the result as keys (`noteChange`), so one drag leaves
|
|
205
|
+
* one key per field rather than one per pointermove.
|
|
206
|
+
*
|
|
207
|
+
* Exported for AppearanceSection: `opacity` is a TransformField like every
|
|
208
|
+
* other, it just does not live in this grid.
|
|
209
|
+
*/
|
|
210
|
+
export function useTransformScrub(field: TransformField): ScrubHandlers {
|
|
211
|
+
const store = useStore();
|
|
212
|
+
return useSelectionScrub((layer, raw) => {
|
|
213
|
+
const s = store.getState();
|
|
214
|
+
const doc = s.doc;
|
|
215
|
+
const container = s.editingDef ?? s.sceneId;
|
|
216
|
+
if (doc === null || container === null) return layer;
|
|
217
|
+
// The frame is read LIVE, exactly as the typed path reads it: compensating
|
|
218
|
+
// against the inspector's coalesced frame would land the value up to 100ms
|
|
219
|
+
// of playhead away from where the stage is drawing it.
|
|
220
|
+
//
|
|
221
|
+
// AND ON THE CONTAINER'S OWN CLOCK. This used to read `sceneLocalFrame` off
|
|
222
|
+
// `s.sceneId` unconditionally — but `sceneId` stays set while a definition
|
|
223
|
+
// is open (it follows the playhead), so dragging W inside a component
|
|
224
|
+
// compensated against master-derived time while the def stage drew
|
|
225
|
+
// `defFrame`. The typed path next door already took this branch; the drag
|
|
226
|
+
// half did not, so the same edit did two different things depending on
|
|
227
|
+
// whether the author typed it or dragged it.
|
|
228
|
+
const at = containerFrame(doc, container, authoringFrame(s));
|
|
229
|
+
return typeTransformField(layer, field, raw as number, at, doc.fps);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/** One field box, carrying the diamond of the track it shows (`keyPath`);
|
|
234
|
+
* its row comes from the `Pair` around it. */
|
|
35
235
|
function Field({
|
|
36
236
|
field,
|
|
37
237
|
label,
|
|
238
|
+
name = label,
|
|
38
239
|
unit,
|
|
39
240
|
step = 1,
|
|
40
241
|
min,
|
|
41
242
|
max,
|
|
243
|
+
keyPath,
|
|
244
|
+
parts,
|
|
245
|
+
pin = true,
|
|
42
246
|
}: {
|
|
43
247
|
field: TransformField;
|
|
44
248
|
label: string;
|
|
249
|
+
/** The full name: the accessible name, and the text above the pill when
|
|
250
|
+
* Field labels is Named. Defaults to the glyph when that is already a word. */
|
|
251
|
+
name?: string;
|
|
45
252
|
unit?: string;
|
|
46
253
|
step?: number;
|
|
47
254
|
min?: number;
|
|
48
255
|
max?: number;
|
|
256
|
+
/** The track this box's value belongs to: the vector's, for a part of one. */
|
|
257
|
+
keyPath: string;
|
|
258
|
+
/** The vector's parts, which key together. */
|
|
259
|
+
parts?: readonly string[];
|
|
260
|
+
/** False for a vector's later boxes: its first box carries the one pin. */
|
|
261
|
+
pin?: boolean;
|
|
49
262
|
}) {
|
|
50
263
|
const write = useTransformWrite();
|
|
264
|
+
const scrub = useTransformScrub(field);
|
|
51
265
|
const { value, mixed } = useSelectionValue((_layer, effective) => readField(effective, field));
|
|
52
266
|
if (value === undefined) return null;
|
|
53
267
|
return (
|
|
54
|
-
<
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
268
|
+
<NumberField
|
|
269
|
+
value={value}
|
|
270
|
+
mixed={mixed}
|
|
271
|
+
label={label}
|
|
272
|
+
ariaLabel={name}
|
|
273
|
+
{...(unit === undefined ? {} : { unit })}
|
|
274
|
+
step={step}
|
|
275
|
+
{...(min === undefined ? {} : { min })}
|
|
276
|
+
{...(max === undefined ? {} : { max })}
|
|
277
|
+
trailing={<KeyframeDot path={keyPath} pin={pin} {...(parts === undefined ? {} : { parts })} />}
|
|
278
|
+
onCommit={(next) => write(field, next)}
|
|
279
|
+
onScrubStart={scrub.start}
|
|
280
|
+
onScrub={scrub.move}
|
|
281
|
+
onScrubEnd={scrub.end}
|
|
282
|
+
/>
|
|
67
283
|
);
|
|
68
284
|
}
|
|
69
285
|
|
|
70
|
-
function readField(t: { position: readonly number[]; size: readonly number[]; tilt: readonly number[]; rollDeg: number; opacity: number }, field: TransformField): number {
|
|
71
|
-
switch (field) {
|
|
72
|
-
case "x":
|
|
73
|
-
return t.position[0]!;
|
|
74
|
-
case "y":
|
|
75
|
-
return t.position[1]!;
|
|
76
|
-
case "z":
|
|
77
|
-
return t.position[2]!;
|
|
78
|
-
case "w":
|
|
79
|
-
return t.size[0]!;
|
|
80
|
-
case "h":
|
|
81
|
-
return t.size[1]!;
|
|
82
|
-
case "tiltX":
|
|
83
|
-
return t.tilt[0]!;
|
|
84
|
-
case "tiltY":
|
|
85
|
-
return t.tilt[1]!;
|
|
86
|
-
case "roll":
|
|
87
|
-
return t.rollDeg;
|
|
88
|
-
case "opacity":
|
|
89
|
-
return t.opacity;
|
|
90
|
-
}
|
|
91
|
-
}
|