@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,345 @@
|
|
|
1
|
+
// THE PROPS, FROM CODE: a code component's defaults in the Components
|
|
2
|
+
// workspace's right panel (InspectorPanel's code branch renders
|
|
3
|
+
// `CodeSubjectHead` and the component actions over this).
|
|
4
|
+
//
|
|
5
|
+
// Every row is one contract key at its DEFAULT — the value `buildProps` gives
|
|
6
|
+
// every instance that has no opinion of its own. Editing a row edits the
|
|
7
|
+
// component's SOURCE, which is what squares this panel with the old header
|
|
8
|
+
// rule ("the way to change a code component's props is to change the code"):
|
|
9
|
+
// the rail does not bypass the code, it is a hand on it. A scrub crosses the
|
|
10
|
+
// bridge as a live preview override and touches nothing; the release commits
|
|
11
|
+
// through the defaults-persist route, the server splices the one literal, and
|
|
12
|
+
// the watcher pipeline carries the new default to the stage, this panel, and
|
|
13
|
+
// every placed instance without an override.
|
|
14
|
+
//
|
|
15
|
+
// TRY FIRST, SAVE ON PURPOSE. With "Apply to all instances" off (the
|
|
16
|
+
// default), an edit is only TRIED: `playComponentProp` holds it for the
|
|
17
|
+
// preview and nothing else changes. Ticking the box saves what was tried and
|
|
18
|
+
// makes later edits save as they happen (the source path above).
|
|
19
|
+
//
|
|
20
|
+
// NO DOCUMENT WRITES ANYWHERE IN THIS FILE. There is no KeyframeDot (a default
|
|
21
|
+
// is not a track) and no useDocWrite: the store verbs it calls write preview
|
|
22
|
+
// state and HTTP, never a document, so nothing here can land in a shot's undo
|
|
23
|
+
// stack. The head's Reset puts every default the author changed back to what
|
|
24
|
+
// it was before the first change (the store's `codeDefaultsBaseline`), through
|
|
25
|
+
// the same commit as a typed value.
|
|
26
|
+
import { useRef } from "react";
|
|
27
|
+
import { InspectorSection, PropRow, useConfirm } from "@dailies-studio/ui";
|
|
28
|
+
import type { ScrubHandlers } from "@dailies-studio/ui";
|
|
29
|
+
import { orderSpecs } from "@dailies-studio/contract";
|
|
30
|
+
import type { ControlSpec } from "@dailies-studio/contract";
|
|
31
|
+
import { valueEquals, type Value } from "@dailies-studio/engine";
|
|
32
|
+
import { instanceExportOf } from "@dailies-studio/shot/doc";
|
|
33
|
+
import { COMPONENT_ICON } from "../../icons.js";
|
|
34
|
+
import { useShotEditor, useStore } from "../../state/context.js";
|
|
35
|
+
import { codeSubjectRel } from "../../state/types.js";
|
|
36
|
+
import { dirtyCodeFileCount, discardBuffersMessage } from "./codeBufferGuard.js";
|
|
37
|
+
import { ApplyAllToggle, useNewPropKeys } from "../studio/componentParts.js";
|
|
38
|
+
import { coercePropValue, propEditOf, shownPropValue } from "../inspector/propValue.js";
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The inspector's subject line in Code Studio: the component the stage is
|
|
42
|
+
* drawing, on `InspectorHead`'s markup and look. Its own component because
|
|
43
|
+
* `InspectorHead`'s ladder is about the document (a layer, a shot, the
|
|
44
|
+
* Project), and none of those is on screen here. No rename: a code
|
|
45
|
+
* component's name is its export, which is changed in the code.
|
|
46
|
+
*/
|
|
47
|
+
export function CodeSubjectHead({ componentId }: { componentId: string }) {
|
|
48
|
+
// The NAME, a string, so the head re-renders only when it changes.
|
|
49
|
+
const name = useShotEditor(
|
|
50
|
+
(s) => s.library.find((r) => r.id === componentId)?.name ?? instanceExportOf(componentId),
|
|
51
|
+
);
|
|
52
|
+
return (
|
|
53
|
+
<div className="insp-head" data-testid="insp-head">
|
|
54
|
+
<span className="insp-head-icon is-component">{COMPONENT_ICON}</span>
|
|
55
|
+
<div className="insp-head-text">
|
|
56
|
+
<span className="insp-head-kind">Code component</span>
|
|
57
|
+
<span className="insp-head-name" title={name}>
|
|
58
|
+
{name}
|
|
59
|
+
</span>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function CodeDefaultsPanel({ componentId }: { componentId: string }) {
|
|
66
|
+
const contract = useShotEditor((s) => s.contracts[componentId]);
|
|
67
|
+
const meta = useShotEditor((s) => s.contractDefaults[componentId]);
|
|
68
|
+
const error = useShotEditor((s) => s.codeDefaultsError);
|
|
69
|
+
// The owning Project, from the subject's own buffer (the server resolved it).
|
|
70
|
+
const owner = useShotEditor((s) => {
|
|
71
|
+
const rel = codeSubjectRel(s);
|
|
72
|
+
return (rel === null ? null : s.codeFiles[rel]?.generated?.docName) ?? null;
|
|
73
|
+
});
|
|
74
|
+
// KEYS THE LAST VERSION DID NOT HAVE: a prop just added in code gets the
|
|
75
|
+
// "New" badge until the next version records it.
|
|
76
|
+
const fresh = useNewPropKeys(contract === undefined ? [] : Object.keys(contract.keys));
|
|
77
|
+
// RESET'S TARGET, from the store: each changed default before its first
|
|
78
|
+
// change, recorded by the commit itself. A remount keeps it, and a prop
|
|
79
|
+
// added in code later is covered once it is changed here.
|
|
80
|
+
const baseline = useShotEditor((s) => s.codeDefaultsBaseline);
|
|
81
|
+
const applyAll = useShotEditor((s) => s.componentApplyAll);
|
|
82
|
+
const tried = useShotEditor((s) => Object.keys(s.componentPlay).length);
|
|
83
|
+
const viewer = useShotEditor((s) => s.readOnly);
|
|
84
|
+
const store = useStore();
|
|
85
|
+
|
|
86
|
+
// Quiet until the contract lands: the fetch was started by
|
|
87
|
+
// openCodeComponent and a spinner here would flash on every entry.
|
|
88
|
+
if (contract === undefined) return null;
|
|
89
|
+
|
|
90
|
+
const specs = orderSpecs(contract);
|
|
91
|
+
// Absent meta (still in flight, or an older server) fails OPEN: the rows
|
|
92
|
+
// render editable and `commitCodeDefault` re-checks everything the meta
|
|
93
|
+
// would have said, so the only cost is a later refusal instead of an
|
|
94
|
+
// earlier badge.
|
|
95
|
+
const writable = meta === undefined || meta.writable;
|
|
96
|
+
// Saving is only ever on when it can work; trying always can.
|
|
97
|
+
const saving = applyAll && writable && !viewer;
|
|
98
|
+
// Keys whose default moved off the baseline and can still be written.
|
|
99
|
+
const moved = specs
|
|
100
|
+
.filter((spec) => {
|
|
101
|
+
const was = baseline[spec.key];
|
|
102
|
+
// As the engine value the baseline holds: a curve's default is its
|
|
103
|
+
// decoded object here and its canonical JSON there.
|
|
104
|
+
const now = "default" in spec ? coercePropValue(spec, spec.default) : null;
|
|
105
|
+
return was !== undefined && now !== null && !valueEquals(was, now);
|
|
106
|
+
})
|
|
107
|
+
.filter((spec) => meta?.keys[spec.key]?.editable !== false)
|
|
108
|
+
.map((spec) => spec.key);
|
|
109
|
+
const reset = !saving ? (
|
|
110
|
+
<button
|
|
111
|
+
type="button"
|
|
112
|
+
className="props-head-reset"
|
|
113
|
+
data-testid="code-defaults-reset"
|
|
114
|
+
disabled={tried === 0}
|
|
115
|
+
title={tried === 0 ? "Nothing tried" : "Drop every tried value"}
|
|
116
|
+
onClick={() => store.resetComponentPlay()}
|
|
117
|
+
>
|
|
118
|
+
Reset
|
|
119
|
+
</button>
|
|
120
|
+
) : (
|
|
121
|
+
<button
|
|
122
|
+
type="button"
|
|
123
|
+
className="props-head-reset"
|
|
124
|
+
data-testid="code-defaults-reset"
|
|
125
|
+
disabled={!writable || moved.length === 0}
|
|
126
|
+
title={moved.length === 0 ? "No default changed here" : "Put every changed default back to how it was"}
|
|
127
|
+
onClick={() => {
|
|
128
|
+
void (async () => {
|
|
129
|
+
for (const key of moved) {
|
|
130
|
+
const was = baseline[key];
|
|
131
|
+
if (was !== undefined) await store.commitCodeDefault(key, was);
|
|
132
|
+
}
|
|
133
|
+
})();
|
|
134
|
+
}}
|
|
135
|
+
>
|
|
136
|
+
Reset
|
|
137
|
+
</button>
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
return (
|
|
141
|
+
// The rows are PropRows, drawn by the ui widgets (widgets.css) exactly as
|
|
142
|
+
// every ControlSpec row is, and a button that is a row's control is the
|
|
143
|
+
// house row button: nothing here needs a section scope.
|
|
144
|
+
<InspectorSection title="Props · from code" action={reset}>
|
|
145
|
+
<ApplyAllToggle
|
|
146
|
+
disabled={!writable || viewer}
|
|
147
|
+
disabledReason={viewer ? "View only" : "Generated component: edit the Project instead."}
|
|
148
|
+
/>
|
|
149
|
+
{!writable ? (
|
|
150
|
+
<GeneratedStrip docName={owner} className="insp-notice" testId="code-defaults-generated" />
|
|
151
|
+
) : null}
|
|
152
|
+
{error !== null ? (
|
|
153
|
+
<div className="insp-inline-error" role="alert" data-testid="code-defaults-error">
|
|
154
|
+
{error}
|
|
155
|
+
</div>
|
|
156
|
+
) : null}
|
|
157
|
+
{specs.length === 0 ? <div className="insp-notice">This component has no props.</div> : null}
|
|
158
|
+
{specs.map((spec) => {
|
|
159
|
+
const keyMeta = meta?.keys[spec.key];
|
|
160
|
+
// Trying writes nothing, so only a saving edit can be refused.
|
|
161
|
+
const readOnlyReason = !saving
|
|
162
|
+
? null
|
|
163
|
+
: !writable
|
|
164
|
+
? "Generated component: edit the Project instead."
|
|
165
|
+
: keyMeta !== undefined && !keyMeta.editable
|
|
166
|
+
? keyMeta.reason
|
|
167
|
+
: null;
|
|
168
|
+
return (
|
|
169
|
+
<DefaultRow
|
|
170
|
+
key={spec.key}
|
|
171
|
+
spec={spec}
|
|
172
|
+
readOnlyReason={readOnlyReason}
|
|
173
|
+
isNew={fresh.includes(spec.key)}
|
|
174
|
+
saving={saving}
|
|
175
|
+
/>
|
|
176
|
+
);
|
|
177
|
+
})}
|
|
178
|
+
{/* Said once, under the rows: what a saved value here is. */}
|
|
179
|
+
<p className="insp-note code-defaults-note" data-testid="code-defaults-intro">
|
|
180
|
+
A saved value here is the default in code. In a shot or on the board, a change only touches that use.
|
|
181
|
+
</p>
|
|
182
|
+
</InspectorSection>
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* One key. The row is the SAME `PropRow` a placed instance's props and one
|
|
188
|
+
* use's props render, so a default and an override can never be two
|
|
189
|
+
* different editors over one spec: only the write seams differ.
|
|
190
|
+
*
|
|
191
|
+
* A key whose SOURCE cannot take the edit (a computed default, a spread, a
|
|
192
|
+
* generated file) is READ-ONLY with the reason as its tooltip: the value it
|
|
193
|
+
* holds stays on screen in its own control, and nothing is offered that would
|
|
194
|
+
* fail. A slot or an event says "set in code", as it does everywhere.
|
|
195
|
+
*/
|
|
196
|
+
function DefaultRow({
|
|
197
|
+
spec,
|
|
198
|
+
readOnlyReason,
|
|
199
|
+
isNew,
|
|
200
|
+
saving,
|
|
201
|
+
}: {
|
|
202
|
+
spec: ControlSpec;
|
|
203
|
+
readOnlyReason: string | null;
|
|
204
|
+
isNew: boolean;
|
|
205
|
+
/** "Apply to all instances" is on: edits save to source. Off = tried. */
|
|
206
|
+
saving: boolean;
|
|
207
|
+
}) {
|
|
208
|
+
const store = useStore();
|
|
209
|
+
const held = useShotEditor((s) => s.codePreviewProps[spec.key]);
|
|
210
|
+
const tried = useShotEditor((s) => s.componentPlay[spec.key]);
|
|
211
|
+
const fallback = "default" in spec ? spec.default : undefined;
|
|
212
|
+
// A tried value first (what the preview draws), then the held override
|
|
213
|
+
// while a gesture or an in-flight commit owns the key, then the contract's
|
|
214
|
+
// own default.
|
|
215
|
+
const value = tried ?? held ?? fallback;
|
|
216
|
+
|
|
217
|
+
// Every value crosses the contract's own coercion (`propValue.ts`): a curve
|
|
218
|
+
// or a gradient editor hands back its VALUE OBJECT, encoded here to the
|
|
219
|
+
// canonical JSON the bridge and the source both take, and a value the
|
|
220
|
+
// contract refuses writes nothing. A drag refuses by writing nothing: a
|
|
221
|
+
// per-pointermove React state write would re-render the rail sixty times a
|
|
222
|
+
// second to say what the typed path says once.
|
|
223
|
+
//
|
|
224
|
+
// TRYING: every move IS the edit, so a cancelled gesture puts back the
|
|
225
|
+
// value it started from.
|
|
226
|
+
const before = useRef<Value | undefined>(undefined);
|
|
227
|
+
const scrub: ScrubHandlers = saving
|
|
228
|
+
? {
|
|
229
|
+
start: () => {},
|
|
230
|
+
move: (raw: unknown) => {
|
|
231
|
+
const next = coercePropValue(spec, raw);
|
|
232
|
+
if (next !== null) store.scrubCodeDefault(spec.key, next);
|
|
233
|
+
},
|
|
234
|
+
end: (commit: boolean) => store.endCodeDefaultScrub(commit),
|
|
235
|
+
}
|
|
236
|
+
: {
|
|
237
|
+
start: () => {
|
|
238
|
+
before.current = tried;
|
|
239
|
+
},
|
|
240
|
+
move: (raw: unknown) => {
|
|
241
|
+
const next = coercePropValue(spec, raw);
|
|
242
|
+
if (next !== null) store.playComponentProp(spec.key, next);
|
|
243
|
+
},
|
|
244
|
+
end: (commit: boolean) => {
|
|
245
|
+
if (!commit) store.playComponentProp(spec.key, before.current ?? null);
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
const commit = (raw: unknown): void => {
|
|
249
|
+
const edit = propEditOf(spec, raw, fallback);
|
|
250
|
+
if (edit.kind === "refused") {
|
|
251
|
+
store.reportError(edit.reason);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
// "No asset" over a default of none: drop what is tried, and the default
|
|
255
|
+
// (none) shows again. Saving it would write nothing new.
|
|
256
|
+
if (edit.kind === "clear") {
|
|
257
|
+
if (!saving) store.playComponentProp(spec.key, null);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
if (saving) void store.commitCodeDefault(spec.key, edit.value);
|
|
261
|
+
else store.playComponentProp(spec.key, edit.value);
|
|
262
|
+
};
|
|
263
|
+
// The spec's own description, then why the row cannot be edited, in the
|
|
264
|
+
// label's tooltip; the reason is the row's own tooltip too.
|
|
265
|
+
const description = [spec.description?.trim() ?? "", readOnlyReason ?? ""].filter((line) => line !== "").join("\n");
|
|
266
|
+
|
|
267
|
+
return (
|
|
268
|
+
<div className={`code-default${isNew ? " is-new" : ""}`} data-testid={`code-default-${spec.key}`}>
|
|
269
|
+
<PropRow
|
|
270
|
+
spec={spec}
|
|
271
|
+
value={shownPropValue(spec, value)}
|
|
272
|
+
commit={commit}
|
|
273
|
+
scrub={scrub}
|
|
274
|
+
// THE BLUE DOT: a value tried here, not saved.
|
|
275
|
+
changed={tried !== undefined}
|
|
276
|
+
changedLabel="Tried, not saved"
|
|
277
|
+
dotProps={{ "data-tried": spec.key }}
|
|
278
|
+
{...(description !== "" ? { description } : {})}
|
|
279
|
+
{...(readOnlyReason !== null ? { readOnly: true, rowProps: { title: readOnlyReason } } : {})}
|
|
280
|
+
/>
|
|
281
|
+
{isNew ? (
|
|
282
|
+
// The badge is drawn in the label column (component.css); this copy is
|
|
283
|
+
// what a screen reader reads, once.
|
|
284
|
+
<span className="component-new-badge" data-testid="component-new-badge">
|
|
285
|
+
New
|
|
286
|
+
</span>
|
|
287
|
+
) : null}
|
|
288
|
+
</div>
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* A generated file or component: who owns it, and the way there. Open Project
|
|
294
|
+
* leaves the code (asking first when a buffer is dirty, since leaving drops
|
|
295
|
+
* them all) and opens the owner. Without a resolved owner the copy stands alone.
|
|
296
|
+
*
|
|
297
|
+
* Here and not beside the editor in codeParts.tsx, because this panel loads
|
|
298
|
+
* with the shell and the editor does not.
|
|
299
|
+
*/
|
|
300
|
+
export function GeneratedStrip({
|
|
301
|
+
docName,
|
|
302
|
+
className,
|
|
303
|
+
testId,
|
|
304
|
+
}: {
|
|
305
|
+
docName: string | null;
|
|
306
|
+
className: string;
|
|
307
|
+
testId: string;
|
|
308
|
+
}) {
|
|
309
|
+
const store = useStore();
|
|
310
|
+
const { confirm, dialog } = useConfirm();
|
|
311
|
+
const open = (name: string): void => {
|
|
312
|
+
const go = (): void => {
|
|
313
|
+
if (store.getState().codeComponent !== null) store.closeCodeComponent();
|
|
314
|
+
void store.openShot(name);
|
|
315
|
+
};
|
|
316
|
+
const count = dirtyCodeFileCount(store.getState().codeFiles);
|
|
317
|
+
if (count === 0) {
|
|
318
|
+
go();
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
void confirm({
|
|
322
|
+
title: "Unsaved changes",
|
|
323
|
+
message: discardBuffersMessage(count),
|
|
324
|
+
confirmLabel: "Discard",
|
|
325
|
+
danger: true,
|
|
326
|
+
}).then((ok) => {
|
|
327
|
+
if (ok) go();
|
|
328
|
+
});
|
|
329
|
+
};
|
|
330
|
+
return (
|
|
331
|
+
<div className={className} data-testid={testId}>
|
|
332
|
+
{dialog}
|
|
333
|
+
<span>
|
|
334
|
+
{docName === null
|
|
335
|
+
? "Generated from a Project. Edit the Project to change it."
|
|
336
|
+
: `Generated from the Project ${docName}. Edit the Project to change it.`}
|
|
337
|
+
</span>
|
|
338
|
+
{docName !== null ? (
|
|
339
|
+
<button type="button" className="btn" data-testid={`${testId}-open`} onClick={() => open(docName)}>
|
|
340
|
+
Open Project
|
|
341
|
+
</button>
|
|
342
|
+
) : null}
|
|
343
|
+
</div>
|
|
344
|
+
);
|
|
345
|
+
}
|