@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,886 @@
|
|
|
1
|
+
/* The top bar: the app menu, the breadcrumb, history, the workspace switch, save state, Export, the Agent chip and the avatar, plus the status chip both bars wear. */
|
|
2
|
+
|
|
3
|
+
/* ---- header ------------------------------------------------------------- */
|
|
4
|
+
/* The top row of the grid, edge to edge, on the panel ground. Its seam is its
|
|
5
|
+
own bottom border.
|
|
6
|
+
|
|
7
|
+
THREE TRACKS, `1fr auto 1fr`: the workspace switch is the middle one, so it
|
|
8
|
+
is centred on the WINDOW whatever the two ends hold, which a flex row with
|
|
9
|
+
spacers only manages when both ends happen to be the same width. The ends
|
|
10
|
+
are `minmax(0, 1fr)` so a long Project name shrinks its own end instead of
|
|
11
|
+
pushing the switch off centre.
|
|
12
|
+
|
|
13
|
+
Paper's 44px bar (`--topbar-h`, 2026-10-13 design review): 12px sides and
|
|
14
|
+
28px controls, so every button sits 8px off the bar's two edges. */
|
|
15
|
+
.shell-header {
|
|
16
|
+
grid-column: edge-l / edge-r;
|
|
17
|
+
grid-row: edge-t / main-t;
|
|
18
|
+
display: grid;
|
|
19
|
+
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
|
|
20
|
+
align-items: center;
|
|
21
|
+
gap: var(--space-6);
|
|
22
|
+
padding: 0 var(--space-6);
|
|
23
|
+
background: var(--surface-panel);
|
|
24
|
+
border-bottom: 1px solid var(--line);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.header-start,
|
|
28
|
+
.header-end {
|
|
29
|
+
display: flex;
|
|
30
|
+
align-items: center;
|
|
31
|
+
gap: var(--space-7);
|
|
32
|
+
min-width: 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.header-end {
|
|
36
|
+
justify-content: flex-end;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* EVERY BUTTON IN THE BAR IS 28 (`--control-h`), the house 32 a step down so
|
|
40
|
+
the 44px bar keeps 8px above and below each one. In the header's own
|
|
41
|
+
context, so the house `.btn` keeps its 32 everywhere else. */
|
|
42
|
+
.shell-header .btn {
|
|
43
|
+
height: var(--control-h);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.shell-header .btn.is-icon {
|
|
47
|
+
width: var(--control-h);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.header-center {
|
|
51
|
+
display: flex;
|
|
52
|
+
justify-content: center;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* The group divider: Paper's 1x20 hairline between the menu, the crumbs and
|
|
56
|
+
history. */
|
|
57
|
+
.header-sep {
|
|
58
|
+
flex: none;
|
|
59
|
+
width: 1px;
|
|
60
|
+
height: 20px;
|
|
61
|
+
background: var(--line);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* THE APP MENU'S BUTTON carries `.btn`, so hover, disabled and the
|
|
65
|
+
`.is-active` fill all come from the one recipe; only its mark and caret are
|
|
66
|
+
styled here. NO `transform`, `filter` or `will-change` on anything in this
|
|
67
|
+
file: a hover lift is exactly how the stage iframe's containing block gets
|
|
68
|
+
broken.
|
|
69
|
+
|
|
70
|
+
Paper's workspace trigger: a 48x28 box with the mark and a caret. The mark
|
|
71
|
+
is `DailiesMark` in `currentColor`, so it takes the ink, never a gradient. */
|
|
72
|
+
.app-menu-trigger {
|
|
73
|
+
flex: none;
|
|
74
|
+
width: 48px;
|
|
75
|
+
gap: var(--space-2);
|
|
76
|
+
padding: 0 var(--space-3);
|
|
77
|
+
border-radius: var(--field-radius);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.app-menu-mark {
|
|
81
|
+
width: 20px;
|
|
82
|
+
height: 20px;
|
|
83
|
+
color: var(--ink-1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.app-menu-caret {
|
|
87
|
+
display: inline-flex;
|
|
88
|
+
color: var(--ink-2);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.app-menu-caret svg {
|
|
92
|
+
width: 12px;
|
|
93
|
+
height: 12px;
|
|
94
|
+
display: block;
|
|
95
|
+
}
|
|
96
|
+
.app-menu-trigger.is-active .app-menu-caret {
|
|
97
|
+
color: inherit;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.project-identity {
|
|
101
|
+
display: flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
gap: var(--space-3);
|
|
104
|
+
min-width: 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* The root crumb: a link out to the Projects dashboard, quiet until hovered. */
|
|
108
|
+
.project-home {
|
|
109
|
+
flex: none;
|
|
110
|
+
font-size: var(--type-lg);
|
|
111
|
+
color: var(--ink-2);
|
|
112
|
+
text-decoration: none;
|
|
113
|
+
border-radius: var(--radius-xs);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.project-home:hover {
|
|
117
|
+
color: var(--ink-1);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.project-home:focus-visible {
|
|
121
|
+
outline: none;
|
|
122
|
+
box-shadow: var(--focus-ring);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* The title is the only Project mutation in the editor. Resting it directly on
|
|
126
|
+
the header keeps it label-like; focus reveals the inset field without moving
|
|
127
|
+
anything around it.
|
|
128
|
+
|
|
129
|
+
── IT SIZES TO ITS TEXT, IT DOES NOT RESERVE 260px ──────────────────
|
|
130
|
+
The width was a flat `min(260px, 24vw)`, so a project called "Demo" held
|
|
131
|
+
the same sixth of the header as one with a sentence for a name — and with
|
|
132
|
+
the shot crumb after it the identity block measured 435px whatever it was
|
|
133
|
+
naming. `field-sizing: content` makes the box the text's width, which is
|
|
134
|
+
what every other label in this bar already is. The cap is what keeps a long
|
|
135
|
+
name from pushing the view switch into the status badges, and the floor is
|
|
136
|
+
what keeps an EMPTY title (mid-rename, everything selected and deleted)
|
|
137
|
+
from collapsing to a slit nobody can click back into. */
|
|
138
|
+
.project-title-input {
|
|
139
|
+
field-sizing: content;
|
|
140
|
+
width: auto;
|
|
141
|
+
max-width: min(200px, 18vw);
|
|
142
|
+
height: var(--control-h);
|
|
143
|
+
min-width: 56px;
|
|
144
|
+
padding: 0 var(--space-4);
|
|
145
|
+
font: inherit;
|
|
146
|
+
font-size: var(--type-title);
|
|
147
|
+
font-weight: var(--weight-medium);
|
|
148
|
+
color: var(--ink-1);
|
|
149
|
+
background: transparent;
|
|
150
|
+
border: 1px solid transparent;
|
|
151
|
+
border-radius: var(--control-radius);
|
|
152
|
+
text-overflow: ellipsis;
|
|
153
|
+
/* The hover-reveal was a hard cut while every button beside it eased. */
|
|
154
|
+
transition:
|
|
155
|
+
background var(--dur-fast) var(--ease),
|
|
156
|
+
border-color var(--dur-fast) var(--ease);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.project-title-input:hover:not(:disabled) {
|
|
160
|
+
background: var(--fill-rest);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.project-title-input:focus {
|
|
164
|
+
outline: none;
|
|
165
|
+
background: var(--fill-rest);
|
|
166
|
+
border-color: var(--accent);
|
|
167
|
+
box-shadow: var(--focus-ring);
|
|
168
|
+
text-overflow: clip;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.project-title-input:disabled {
|
|
172
|
+
color: var(--ink-disabled);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
.history-controls,
|
|
177
|
+
.status-badges {
|
|
178
|
+
display: flex;
|
|
179
|
+
align-items: center;
|
|
180
|
+
gap: var(--space-2);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* The 24-grid set sizes by CSS, never by attribute. */
|
|
184
|
+
.history-controls svg {
|
|
185
|
+
width: 16px;
|
|
186
|
+
height: 16px;
|
|
187
|
+
display: block;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* Nothing to say is silence, not an empty slot costing the bar a gap. */
|
|
191
|
+
.status-badges:empty {
|
|
192
|
+
display: none;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* The status pills: save state and a codegen warning up here, the frame rate
|
|
196
|
+
and the preview backend in the canvas bar (StatusBadges.tsx has both). The
|
|
197
|
+
chrome's own component, not the house `.badge` (a 16px tag), because these
|
|
198
|
+
are a row of rounded pills of one height. */
|
|
199
|
+
.status-chip {
|
|
200
|
+
display: inline-flex;
|
|
201
|
+
align-items: center;
|
|
202
|
+
height: 22px;
|
|
203
|
+
padding: 0 var(--space-4);
|
|
204
|
+
border: 1px solid var(--line);
|
|
205
|
+
border-radius: var(--radius-full);
|
|
206
|
+
font-size: var(--type-micro);
|
|
207
|
+
line-height: 16px;
|
|
208
|
+
color: var(--ink-2);
|
|
209
|
+
background: var(--fill-hover);
|
|
210
|
+
white-space: nowrap;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* The digits must not reflow the bar as the rate moves between 9 and 10 or 59
|
|
214
|
+
and 60, which on a proportional face they would. No tone rule: the adaptive
|
|
215
|
+
presentation policy already ACTS on lag by stepping quality rungs, so a red
|
|
216
|
+
pill would be an alarm with no action attached to it. */
|
|
217
|
+
.status-chip-fps {
|
|
218
|
+
font-variant-numeric: var(--numeric);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.status-chip-quiet {
|
|
222
|
+
color: var(--ink-3);
|
|
223
|
+
border-color: transparent;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* `saved` had no rule, so a document fully on disk wore the same weight as an
|
|
227
|
+
alert. It is the quietest thing the chip can say, so it gets the ambient
|
|
228
|
+
posture — the same one `.status-chip-quiet` gives the backend word.
|
|
229
|
+
|
|
230
|
+
ONLY `saved`. `.status-chip-saving` would be a no-op (the base pill is already
|
|
231
|
+
`--text-dim`, and the ellipsis carries the activity, not a pulse), and
|
|
232
|
+
`.status-chip-idle` is the tone SaveBadges hands "unsaved": the one state an
|
|
233
|
+
author must be able to catch, which is exactly the base weight. */
|
|
234
|
+
.status-chip-saved {
|
|
235
|
+
gap: var(--space-3);
|
|
236
|
+
padding: 0;
|
|
237
|
+
color: var(--ink-3);
|
|
238
|
+
background: transparent;
|
|
239
|
+
border-color: transparent;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/* Paper's saved state: a check and the word, no pill. */
|
|
243
|
+
.status-chip-saved svg {
|
|
244
|
+
width: 14px;
|
|
245
|
+
height: 14px;
|
|
246
|
+
display: block;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.status-chip-warn {
|
|
250
|
+
border-color: color-mix(in srgb, var(--warn) 40%, transparent);
|
|
251
|
+
color: var(--warn);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.status-chip-error {
|
|
255
|
+
border-color: color-mix(in srgb, var(--danger) 45%, transparent);
|
|
256
|
+
color: var(--danger-ink);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* A badge APPEARING is the whole event — "saving…" arrives, the backend chip
|
|
260
|
+
lands after onReady, "unsaved" shows up on the first edit — and these now
|
|
261
|
+
come and go rather than sitting there permanently, so the arrival wants the
|
|
262
|
+
softest possible landing. Opacity only: no geometry moves, and nothing above
|
|
263
|
+
`.stage-frame` may take a transform. Exits stay instant; disappearing is the
|
|
264
|
+
quiet outcome and does not need announcing. */
|
|
265
|
+
@keyframes status-chip-in {
|
|
266
|
+
from { opacity: 0; }
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
270
|
+
.status-chip { animation: status-chip-in var(--dur-fast) var(--ease); }
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
/* ---- the workspace switch ----------------------------------------------- */
|
|
275
|
+
/* Studio | Storyboard, Paper's centred switch: a 32 tall track with 26 tall
|
|
276
|
+
chips, the selected one in the quiet accent wash with an accent edge. It
|
|
277
|
+
is the house `.segmented.is-accent`; only the sizes are the top bar's.
|
|
278
|
+
The chips are centred in the track, so the 3px Paper leaves above and
|
|
279
|
+
below a 26 chip is the track's own arithmetic, not a literal here. */
|
|
280
|
+
.workspace-switch {
|
|
281
|
+
flex: none;
|
|
282
|
+
align-items: center;
|
|
283
|
+
height: var(--button-h);
|
|
284
|
+
padding: var(--space-1);
|
|
285
|
+
gap: var(--space-1);
|
|
286
|
+
border-radius: var(--radius-tab);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.workspace-switch .segmented-item,
|
|
290
|
+
.workspace-switch .segmented-item:first-child,
|
|
291
|
+
.workspace-switch .segmented-item:last-child {
|
|
292
|
+
flex: none;
|
|
293
|
+
height: 26px;
|
|
294
|
+
gap: var(--space-3);
|
|
295
|
+
padding: 0 var(--space-6);
|
|
296
|
+
font-size: var(--type-md);
|
|
297
|
+
border: 1px solid transparent;
|
|
298
|
+
border-radius: var(--radius-sm);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.workspace-switch .segmented-item.is-active,
|
|
302
|
+
.workspace-switch .segmented-item.is-active:hover:not(:disabled) {
|
|
303
|
+
border-color: var(--accent);
|
|
304
|
+
font-weight: var(--weight-semibold);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.workspace-switch .header-glyph {
|
|
308
|
+
margin-right: 0;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* ---- the Agent chip ------------------------------------------------------ */
|
|
312
|
+
/* A `.btn` (hover, focus and the pressed fill come from the recipe): a dot,
|
|
313
|
+
"Agent" and the health word in the secondary ink. The dot is the state, so
|
|
314
|
+
the word never needs a colour: green for writes on, a quiet ink for read
|
|
315
|
+
only and for an unanswered probe, the warning tone for off. */
|
|
316
|
+
.agent-chip {
|
|
317
|
+
flex: none;
|
|
318
|
+
gap: var(--space-3);
|
|
319
|
+
padding: 0 var(--space-5);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.agent-chip[aria-expanded="true"] {
|
|
323
|
+
background: var(--fill-state-soft);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.agent-chip-dot {
|
|
327
|
+
flex: none;
|
|
328
|
+
width: 8px;
|
|
329
|
+
height: 8px;
|
|
330
|
+
border-radius: var(--radius-full);
|
|
331
|
+
background: var(--ink-3);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.agent-chip.is-write .agent-chip-dot {
|
|
335
|
+
background: var(--success);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.agent-chip.is-read .agent-chip-dot {
|
|
339
|
+
background: var(--ink-2);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.agent-chip.is-off .agent-chip-dot {
|
|
343
|
+
background: var(--warn);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.agent-chip-word {
|
|
347
|
+
color: var(--ink-2);
|
|
348
|
+
font-weight: var(--weight-regular);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* Under 1280 the word gives way: the dot still says the state, and the title
|
|
352
|
+
and the popover say it in full. */
|
|
353
|
+
@media (max-width: 1279px) {
|
|
354
|
+
.agent-chip-word {
|
|
355
|
+
display: none;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/* ---- the account avatar ------------------------------------------------- */
|
|
360
|
+
.header-avatar {
|
|
361
|
+
flex: none;
|
|
362
|
+
width: var(--control-h);
|
|
363
|
+
height: var(--control-h);
|
|
364
|
+
margin-left: var(--space-4);
|
|
365
|
+
padding: 0;
|
|
366
|
+
font: inherit;
|
|
367
|
+
font-size: var(--type-md);
|
|
368
|
+
font-weight: var(--weight-semibold);
|
|
369
|
+
color: var(--ink-1);
|
|
370
|
+
background: var(--fill-rest);
|
|
371
|
+
border: 0;
|
|
372
|
+
border-radius: var(--radius-full);
|
|
373
|
+
cursor: pointer;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.header-avatar:hover {
|
|
377
|
+
background: var(--fill-hover);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.header-avatar:focus-visible {
|
|
381
|
+
outline: none;
|
|
382
|
+
box-shadow: var(--focus-ring);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/* A guest in this workspace: a text note, not a control, so it reads the
|
|
386
|
+
same to a screen reader and needs no colour to mean anything. */
|
|
387
|
+
.header-guest {
|
|
388
|
+
flex: none;
|
|
389
|
+
margin-left: var(--space-4);
|
|
390
|
+
padding: var(--space-1) var(--space-3);
|
|
391
|
+
font-size: var(--type-md);
|
|
392
|
+
font-weight: var(--weight-medium);
|
|
393
|
+
color: var(--ink-2);
|
|
394
|
+
border: 1px solid var(--line);
|
|
395
|
+
border-radius: var(--radius-full);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
/* ---- the header's breadcrumb -------------------------------------------- */
|
|
400
|
+
/* The way back, visible from any panel state — including a collapsed rail and
|
|
401
|
+
a collapsed dock, which is exactly when the other three heads are gone. */
|
|
402
|
+
/* A `.btn`, so a filled chip like every control in the bar; this only keeps
|
|
403
|
+
a long title inside it. */
|
|
404
|
+
/* THE SHOT CRUMB GIVES WAY FIRST. Flex shrinks by basis, so a long shot name
|
|
405
|
+
(220px) used to take the room and leave the Project title at "Do…". The
|
|
406
|
+
crumb shrinks four times faster and stops at a few letters plus its caret.
|
|
407
|
+
56px with 8px sides, so a squeezed crumb still shows a letter and its
|
|
408
|
+
ellipsis, and the title and the crumb still fit a 1024 window without
|
|
409
|
+
running into the history buttons. */
|
|
410
|
+
.project-crumb {
|
|
411
|
+
flex-shrink: 4;
|
|
412
|
+
min-width: 56px;
|
|
413
|
+
padding: 0 var(--space-4);
|
|
414
|
+
max-width: 220px;
|
|
415
|
+
overflow: hidden;
|
|
416
|
+
text-overflow: ellipsis;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/* Under 1280 the bar cannot fit the root crumb and a readable title: drop the
|
|
420
|
+
root crumb, since the app menu's "Go to Projects" row is the same exit, and
|
|
421
|
+
tighten the groups from 16 to 8. */
|
|
422
|
+
@media (max-width: 1279px) {
|
|
423
|
+
.header-start,
|
|
424
|
+
.header-end {
|
|
425
|
+
gap: var(--space-4);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
.project-home,
|
|
429
|
+
.project-home + .project-crumb-sep {
|
|
430
|
+
display: none;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
.project-crumb svg {
|
|
435
|
+
flex: none;
|
|
436
|
+
width: 12px;
|
|
437
|
+
height: 12px;
|
|
438
|
+
opacity: 0.7;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
.project-crumb-menu {
|
|
442
|
+
display: flex;
|
|
443
|
+
flex-direction: column;
|
|
444
|
+
gap: 1px;
|
|
445
|
+
padding: var(--space-2);
|
|
446
|
+
min-width: 180px;
|
|
447
|
+
max-height: 320px;
|
|
448
|
+
overflow: auto;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
.project-crumb-item {
|
|
452
|
+
display: flex;
|
|
453
|
+
align-items: center;
|
|
454
|
+
gap: var(--space-2);
|
|
455
|
+
font: inherit;
|
|
456
|
+
text-align: left;
|
|
457
|
+
color: var(--ink-1);
|
|
458
|
+
background: transparent;
|
|
459
|
+
border: 0;
|
|
460
|
+
border-radius: var(--radius-xs);
|
|
461
|
+
padding: var(--space-2);
|
|
462
|
+
cursor: pointer;
|
|
463
|
+
white-space: nowrap;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
.project-crumb-item:hover {
|
|
467
|
+
background: var(--fill-rest);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
.project-crumb-item.is-current {
|
|
471
|
+
color: var(--accent-ink);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
.project-crumb-item:disabled {
|
|
475
|
+
color: var(--ink-3);
|
|
476
|
+
background: transparent;
|
|
477
|
+
cursor: default;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
.project-crumb-item svg {
|
|
481
|
+
flex: none;
|
|
482
|
+
width: 14px;
|
|
483
|
+
height: 14px;
|
|
484
|
+
color: var(--ink-2);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
.project-crumb-sep {
|
|
488
|
+
display: inline-flex;
|
|
489
|
+
flex: none;
|
|
490
|
+
color: var(--ink-3);
|
|
491
|
+
user-select: none;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
.project-crumb-sep svg {
|
|
495
|
+
width: 12px;
|
|
496
|
+
height: 12px;
|
|
497
|
+
display: block;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/* ---- re-homed here from other region files (the component that renders
|
|
501
|
+
these lives in this region) ------------------------------------------ */
|
|
502
|
+
|
|
503
|
+
.header-glyph svg {
|
|
504
|
+
width: 16px;
|
|
505
|
+
height: 16px;
|
|
506
|
+
display: block;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
.header-glyph {
|
|
510
|
+
display: inline-flex;
|
|
511
|
+
margin-right: var(--space-2);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/* The percentage is already in the label; this puts it in the BUTTON, so the
|
|
515
|
+
render's progress is legible at a glance from across the room instead of
|
|
516
|
+
only by reading a number that ticks.
|
|
517
|
+
|
|
518
|
+
Two stops off the SAME accent, never a second hue: this is still the one
|
|
519
|
+
primary control on the surface, showing its own state. `--export-pct` is set
|
|
520
|
+
inline by ExportButton (0-100, unitless, so `calc()` can take a percentage
|
|
521
|
+
of it). The chrome layer sits above the house `.btn.is-primary:hover`, so
|
|
522
|
+
the fill holds under the cursor without borrowing the widget's classes. */
|
|
523
|
+
/* Paper's Export: 28 tall, radius 8, a download glyph, flat. */
|
|
524
|
+
.header-export {
|
|
525
|
+
flex: none;
|
|
526
|
+
height: var(--control-h);
|
|
527
|
+
gap: var(--space-3);
|
|
528
|
+
padding: 0 var(--space-6);
|
|
529
|
+
border-radius: var(--radius-tab);
|
|
530
|
+
box-shadow: none;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
.header-export .header-glyph {
|
|
534
|
+
margin-right: 0;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/* Share (ShareButton.tsx): Export's size, the quiet house button. */
|
|
538
|
+
.header-share {
|
|
539
|
+
flex: none;
|
|
540
|
+
height: var(--control-h);
|
|
541
|
+
gap: var(--space-3);
|
|
542
|
+
padding: 0 var(--space-6);
|
|
543
|
+
border-radius: var(--radius-tab);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.header-export.is-running {
|
|
547
|
+
font-variant-numeric: var(--numeric);
|
|
548
|
+
background: linear-gradient(
|
|
549
|
+
to right,
|
|
550
|
+
var(--accent-hover) calc(var(--export-pct, 0) * 1%),
|
|
551
|
+
var(--accent) 0
|
|
552
|
+
);
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/* WHO ELSE IS HERE (Paper page 21): 30px faces in each person's peer colour,
|
|
556
|
+
ringed in the bar's own colour so an overlap reads as two faces, stepping
|
|
557
|
+
24px. Three faces, then "+N". */
|
|
558
|
+
.presence-stack {
|
|
559
|
+
position: relative;
|
|
560
|
+
display: flex;
|
|
561
|
+
flex: none;
|
|
562
|
+
align-items: center;
|
|
563
|
+
padding-left: var(--space-3);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
.presence-face {
|
|
567
|
+
position: relative;
|
|
568
|
+
display: inline-grid;
|
|
569
|
+
flex: none;
|
|
570
|
+
place-items: center;
|
|
571
|
+
width: 30px;
|
|
572
|
+
height: 30px;
|
|
573
|
+
margin-left: calc(-1 * var(--space-3));
|
|
574
|
+
padding: 0;
|
|
575
|
+
font: inherit;
|
|
576
|
+
font-family: var(--font-sans);
|
|
577
|
+
font-size: var(--type-sm);
|
|
578
|
+
font-weight: 600;
|
|
579
|
+
line-height: 14px;
|
|
580
|
+
color: #0b0b0b;
|
|
581
|
+
border: 2px solid #080808;
|
|
582
|
+
border-radius: var(--radius-full);
|
|
583
|
+
cursor: pointer;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
.presence-face > img {
|
|
587
|
+
width: 100%;
|
|
588
|
+
height: 100%;
|
|
589
|
+
border-radius: inherit;
|
|
590
|
+
object-fit: cover;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
.presence-face:focus-visible {
|
|
594
|
+
outline: none;
|
|
595
|
+
box-shadow: var(--focus-ring);
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
.presence-face-agent {
|
|
599
|
+
cursor: default;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
.presence-more {
|
|
603
|
+
color: #b5b5b5;
|
|
604
|
+
background: #1c1c1c;
|
|
605
|
+
cursor: default;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/* The hover card: who, where, and how to follow. */
|
|
609
|
+
.presence-card {
|
|
610
|
+
position: absolute;
|
|
611
|
+
top: calc(100% + var(--space-4));
|
|
612
|
+
right: calc(-1 * var(--space-4));
|
|
613
|
+
z-index: var(--z-menu);
|
|
614
|
+
display: flex;
|
|
615
|
+
flex-direction: column;
|
|
616
|
+
gap: var(--space-5);
|
|
617
|
+
width: 280px;
|
|
618
|
+
padding: var(--space-6);
|
|
619
|
+
font-family: var(--font-sans);
|
|
620
|
+
font-size: var(--type-md);
|
|
621
|
+
font-weight: 500;
|
|
622
|
+
line-height: 16px;
|
|
623
|
+
color: var(--ink-1);
|
|
624
|
+
text-align: left;
|
|
625
|
+
white-space: nowrap;
|
|
626
|
+
cursor: default;
|
|
627
|
+
background: #1c1c1c;
|
|
628
|
+
border: 1px solid #3d3d3d;
|
|
629
|
+
border-radius: var(--radius-md);
|
|
630
|
+
box-shadow: var(--shadow-menu, 0 8px 24px rgb(0 0 0 / 40%));
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
.presence-card-who {
|
|
634
|
+
display: flex;
|
|
635
|
+
gap: var(--space-5);
|
|
636
|
+
align-items: center;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
.presence-card-avatar {
|
|
640
|
+
display: inline-grid;
|
|
641
|
+
flex: none;
|
|
642
|
+
place-items: center;
|
|
643
|
+
width: 32px;
|
|
644
|
+
height: 32px;
|
|
645
|
+
overflow: hidden;
|
|
646
|
+
font-size: var(--type-md);
|
|
647
|
+
font-weight: 600;
|
|
648
|
+
color: #0b0b0b;
|
|
649
|
+
border-radius: var(--radius-full);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
.presence-card-avatar > img {
|
|
653
|
+
width: 100%;
|
|
654
|
+
height: 100%;
|
|
655
|
+
object-fit: cover;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
.presence-card-name {
|
|
659
|
+
display: flex;
|
|
660
|
+
flex-direction: column;
|
|
661
|
+
min-width: 0;
|
|
662
|
+
font-size: var(--type-lg);
|
|
663
|
+
font-weight: 600;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
.presence-card-role {
|
|
667
|
+
font-size: var(--type-md);
|
|
668
|
+
font-weight: 500;
|
|
669
|
+
color: var(--ink-3);
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
.presence-card-where {
|
|
673
|
+
display: flex;
|
|
674
|
+
gap: var(--space-3);
|
|
675
|
+
align-items: center;
|
|
676
|
+
min-width: 0;
|
|
677
|
+
color: var(--ink-2);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
.presence-card-number {
|
|
681
|
+
font-family: var(--font-mono);
|
|
682
|
+
color: var(--ink-3);
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
.presence-card-shot,
|
|
686
|
+
.presence-card-layer {
|
|
687
|
+
overflow: hidden;
|
|
688
|
+
text-overflow: ellipsis;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
.presence-card-slash {
|
|
692
|
+
color: var(--ink-3);
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
.presence-card-swatch {
|
|
696
|
+
flex: none;
|
|
697
|
+
width: 8px;
|
|
698
|
+
height: 8px;
|
|
699
|
+
border: 1.5px solid;
|
|
700
|
+
border-radius: var(--radius-2xs);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.presence-card-foot {
|
|
704
|
+
display: flex;
|
|
705
|
+
justify-content: space-between;
|
|
706
|
+
padding-top: var(--space-5);
|
|
707
|
+
font-size: var(--type-sm);
|
|
708
|
+
color: var(--ink-3);
|
|
709
|
+
border-top: 1px solid var(--line);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/* FOLLOWING: the whole editor framed in the followed person's colour, and a
|
|
713
|
+
pill at the top centre that says whose view this is and how to leave it.
|
|
714
|
+
Neither takes a click. */
|
|
715
|
+
.presence-follow-frame {
|
|
716
|
+
position: fixed;
|
|
717
|
+
inset: 0;
|
|
718
|
+
z-index: var(--z-menu);
|
|
719
|
+
pointer-events: none;
|
|
720
|
+
border: 2px solid;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
.presence-follow-pill {
|
|
724
|
+
position: fixed;
|
|
725
|
+
top: 72px;
|
|
726
|
+
left: 50%;
|
|
727
|
+
z-index: var(--z-menu);
|
|
728
|
+
display: flex;
|
|
729
|
+
gap: var(--space-4);
|
|
730
|
+
align-items: center;
|
|
731
|
+
padding: var(--space-3) var(--space-6);
|
|
732
|
+
font-family: var(--font-sans);
|
|
733
|
+
font-size: var(--type-md);
|
|
734
|
+
font-weight: 600;
|
|
735
|
+
color: var(--ink-1);
|
|
736
|
+
pointer-events: none;
|
|
737
|
+
background: #1c1c1c;
|
|
738
|
+
border: 1px solid #3d3d3d;
|
|
739
|
+
border-radius: var(--radius-full);
|
|
740
|
+
transform: translateX(-50%);
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
.presence-follow-dot {
|
|
744
|
+
width: 8px;
|
|
745
|
+
height: 8px;
|
|
746
|
+
border-radius: var(--radius-full);
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
/* An MCP agent editing the Project as a whole: the follow frame in the Agent's
|
|
750
|
+
colour, breathing so it reads as work in progress, not a mode. */
|
|
751
|
+
.presence-follow-frame.is-agent {
|
|
752
|
+
border-color: var(--agent);
|
|
753
|
+
border-style: dashed;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
757
|
+
.presence-follow-frame.is-agent {
|
|
758
|
+
animation: agent-frame-breathe 1.6s ease-in-out infinite;
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
@keyframes agent-frame-breathe {
|
|
763
|
+
50% {
|
|
764
|
+
opacity: 0.4;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/* WHAT THE AGENT IS DOING: its step beside its face, and Follow. One line, it
|
|
769
|
+
ellipses before it pushes the bar. */
|
|
770
|
+
.agent-status-chip {
|
|
771
|
+
display: inline-flex;
|
|
772
|
+
flex: 0 1 auto;
|
|
773
|
+
gap: var(--space-3);
|
|
774
|
+
align-items: center;
|
|
775
|
+
min-width: 0;
|
|
776
|
+
max-width: 320px;
|
|
777
|
+
height: 24px;
|
|
778
|
+
margin-right: var(--space-4);
|
|
779
|
+
padding: 0 var(--space-2) 0 var(--space-4);
|
|
780
|
+
font-size: var(--type-sm);
|
|
781
|
+
color: var(--ink-2);
|
|
782
|
+
border: 1px solid var(--line);
|
|
783
|
+
border-radius: var(--radius-full);
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
.agent-status-text {
|
|
787
|
+
min-width: 0;
|
|
788
|
+
overflow: hidden;
|
|
789
|
+
text-overflow: ellipsis;
|
|
790
|
+
white-space: nowrap;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.agent-status-name {
|
|
794
|
+
color: var(--ink-1);
|
|
795
|
+
font-weight: var(--weight-semibold);
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
.agent-status-dot {
|
|
799
|
+
flex: none;
|
|
800
|
+
width: 6px;
|
|
801
|
+
height: 6px;
|
|
802
|
+
background: var(--agent);
|
|
803
|
+
border-radius: var(--radius-full);
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
.agent-status-follow {
|
|
807
|
+
flex: none;
|
|
808
|
+
height: 18px;
|
|
809
|
+
padding: 0 var(--space-3);
|
|
810
|
+
font: inherit;
|
|
811
|
+
font-weight: var(--weight-semibold);
|
|
812
|
+
color: var(--ink-1);
|
|
813
|
+
cursor: pointer;
|
|
814
|
+
background: var(--fill-rest);
|
|
815
|
+
border: 0;
|
|
816
|
+
border-radius: var(--radius-full);
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
.agent-status-follow:hover,
|
|
820
|
+
.agent-status-follow:focus-visible {
|
|
821
|
+
background: var(--fill-hover);
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
/* THE AGENT'S DOTS: three 4px dots in its colour, rising in turn while it
|
|
825
|
+
works (still for reduced motion). Shared by the chip, the component card,
|
|
826
|
+
the code tab and the layer row. */
|
|
827
|
+
.agent-dots {
|
|
828
|
+
display: inline-flex;
|
|
829
|
+
flex: none;
|
|
830
|
+
gap: var(--space-1);
|
|
831
|
+
align-items: center;
|
|
832
|
+
margin-left: var(--space-2);
|
|
833
|
+
vertical-align: middle;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
.agent-dots > span {
|
|
837
|
+
width: 4px;
|
|
838
|
+
height: 4px;
|
|
839
|
+
background: var(--agent);
|
|
840
|
+
border-radius: var(--radius-full);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
844
|
+
.agent-dots > span {
|
|
845
|
+
animation: agent-dot 1.2s ease-in-out infinite;
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
.agent-dots > span:nth-child(2) {
|
|
849
|
+
animation-delay: 0.15s;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
.agent-dots > span:nth-child(3) {
|
|
853
|
+
animation-delay: 0.3s;
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
@keyframes agent-dot {
|
|
858
|
+
0%,
|
|
859
|
+
60%,
|
|
860
|
+
100% {
|
|
861
|
+
opacity: 0.35;
|
|
862
|
+
transform: translateY(0);
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
30% {
|
|
866
|
+
opacity: 1;
|
|
867
|
+
transform: translateY(-2px);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
/* A person's place on a row or a frame card: a 6px dot in their colour after
|
|
872
|
+
the label. Shared by the strip, the Layers rows and the timeline rows. */
|
|
873
|
+
.peer-dots {
|
|
874
|
+
display: inline-flex;
|
|
875
|
+
flex: none;
|
|
876
|
+
gap: var(--space-1);
|
|
877
|
+
align-items: center;
|
|
878
|
+
margin-left: var(--space-3);
|
|
879
|
+
vertical-align: middle;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
.peer-dot {
|
|
883
|
+
width: 6px;
|
|
884
|
+
height: 6px;
|
|
885
|
+
border-radius: var(--radius-full);
|
|
886
|
+
}
|