@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,207 @@
|
|
|
1
|
+
/* The transition's inspector rows (scene/TransitionSection.tsx), in Studio's
|
|
2
|
+
Shot & transition section and in the board's Between: the heading, the
|
|
3
|
+
preset tiles, the length's seconds, the direction stepper, the seam and
|
|
4
|
+
the handover notes. A sentence in a read-only row (a requirement's Status
|
|
5
|
+
reason, a card's Use for and Avoid for) wraps in the house readout
|
|
6
|
+
(`insp-readout`, widgets.css). Tokens only. */
|
|
7
|
+
|
|
8
|
+
/* "Transition · into Shot 02": the seam's heading in Studio's Shot &
|
|
9
|
+
transition section. The far shot is the quieter half. */
|
|
10
|
+
.insp-transition-head {
|
|
11
|
+
margin: var(--space-3) 0 0;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
text-overflow: ellipsis;
|
|
14
|
+
white-space: nowrap;
|
|
15
|
+
font: var(--weight-semibold) var(--type-md)/var(--leading-xs) var(--font-sans);
|
|
16
|
+
color: var(--ink-1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.insp-transition-into {
|
|
20
|
+
font-weight: var(--weight-regular);
|
|
21
|
+
color: var(--ink-3);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Four preset tiles, two by two, the full width of the rail: a picture of
|
|
25
|
+
the blend over its name. */
|
|
26
|
+
.insp-tiles {
|
|
27
|
+
display: grid;
|
|
28
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
29
|
+
gap: var(--space-4);
|
|
30
|
+
width: 100%;
|
|
31
|
+
min-width: 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* A NAME THAT DOES NOT FIT WRAPS. At a narrow rail "Directional Wipe" can
|
|
35
|
+
outgrow its tile. The `.btn` is a flex box, so its text would be an
|
|
36
|
+
anonymous flex item that never draws an ellipsis: the centred name was cut
|
|
37
|
+
at both edges. Two lines keep every word, and the row grows to hold them. */
|
|
38
|
+
.insp-tile {
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
gap: var(--space-3);
|
|
41
|
+
min-width: 0;
|
|
42
|
+
height: auto;
|
|
43
|
+
min-height: var(--button-h);
|
|
44
|
+
padding: var(--space-6);
|
|
45
|
+
justify-content: center;
|
|
46
|
+
text-align: center;
|
|
47
|
+
white-space: normal;
|
|
48
|
+
overflow-wrap: anywhere;
|
|
49
|
+
line-height: var(--leading-tight);
|
|
50
|
+
font-size: var(--type-sm);
|
|
51
|
+
color: var(--ink-2);
|
|
52
|
+
background: var(--surface-secondary);
|
|
53
|
+
border: 1px solid var(--line);
|
|
54
|
+
border-radius: var(--radius-sm);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.insp-tile:hover:not(:disabled) {
|
|
58
|
+
color: var(--ink-1);
|
|
59
|
+
background: var(--fill-hover);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* The lit preset: an accent border round a soft accent fill. */
|
|
63
|
+
.insp-tile[aria-pressed="true"],
|
|
64
|
+
.insp-tile[aria-pressed="true"]:hover:not(:disabled) {
|
|
65
|
+
color: var(--accent-ink);
|
|
66
|
+
background: var(--accent-quiet);
|
|
67
|
+
border-color: var(--accent);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.insp-tile-glyph {
|
|
71
|
+
flex: none;
|
|
72
|
+
width: 28px;
|
|
73
|
+
height: 14px;
|
|
74
|
+
fill: none;
|
|
75
|
+
stroke: currentColor;
|
|
76
|
+
stroke-width: 1.25;
|
|
77
|
+
stroke-linecap: round;
|
|
78
|
+
stroke-linejoin: round;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.insp-tile-glyph .is-b {
|
|
82
|
+
fill: currentColor;
|
|
83
|
+
fill-opacity: 0.55;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* THE LENGTH'S SECONDS, after the frames inside the length's one box (the
|
|
87
|
+
house field, its NumberField flattened into it): what the frames last,
|
|
88
|
+
in the numeral face at the unit's size and in the third ink, so it reads
|
|
89
|
+
as a gloss on the value rather than a second value. Outside the field, so
|
|
90
|
+
a press on it is not the field's scrub. */
|
|
91
|
+
.insp-length-secs {
|
|
92
|
+
flex: none;
|
|
93
|
+
white-space: nowrap;
|
|
94
|
+
font: var(--type-sm)/var(--leading-xs) var(--font-numeric);
|
|
95
|
+
font-variant-numeric: var(--numeric);
|
|
96
|
+
color: var(--ink-3);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.insp-length-secs::before {
|
|
100
|
+
content: "· ";
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* The direction step: the arrow and the vector it points along, in the
|
|
104
|
+
numeral face, on the house 28px button row (`.insp-buttons`, widgets.css). */
|
|
105
|
+
.insp-direction {
|
|
106
|
+
gap: var(--space-3);
|
|
107
|
+
font-family: var(--font-mono);
|
|
108
|
+
font-size: var(--type-sm);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.insp-direction-arrow {
|
|
112
|
+
display: inline-block;
|
|
113
|
+
line-height: var(--leading-none);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* THE SEAM, one readout line inside its row's box: the three spans (the
|
|
117
|
+
lead-in, the blend, the run-out) across what the label leaves, then the
|
|
118
|
+
reading. Stacked, the track over the reading made the box taller than
|
|
119
|
+
every other row's. */
|
|
120
|
+
.insp-seam {
|
|
121
|
+
display: flex;
|
|
122
|
+
align-items: center;
|
|
123
|
+
gap: var(--space-4);
|
|
124
|
+
width: 100%;
|
|
125
|
+
min-width: 0;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* The rail in `--line`, the tick slider's rail colour: the box it sits in is
|
|
129
|
+
already the control ground, and a track on that ground would vanish. */
|
|
130
|
+
.insp-seam-track {
|
|
131
|
+
display: flex;
|
|
132
|
+
flex: 1 1 auto;
|
|
133
|
+
min-width: 0;
|
|
134
|
+
height: var(--space-3);
|
|
135
|
+
border-radius: var(--radius-2xs);
|
|
136
|
+
overflow: hidden;
|
|
137
|
+
background: var(--line);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.insp-seam-span {
|
|
141
|
+
flex: none;
|
|
142
|
+
height: 100%;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.insp-seam-span.is-blend {
|
|
146
|
+
background: var(--accent);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.insp-seam > .insp-dim {
|
|
150
|
+
flex: none;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* The cut's handover notes (TransitionSection.tsx): the headings, the text
|
|
154
|
+
and the numbered beats. A beat's number wears the warm accent, the way the
|
|
155
|
+
Paper mock marks what an agent can animate. */
|
|
156
|
+
.notes-block-section {
|
|
157
|
+
display: flex;
|
|
158
|
+
flex-direction: column;
|
|
159
|
+
gap: var(--space-2);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.notes-block-heading {
|
|
163
|
+
margin: 0;
|
|
164
|
+
font-size: var(--type-micro);
|
|
165
|
+
font-weight: var(--weight-semibold);
|
|
166
|
+
letter-spacing: var(--tracking-caps);
|
|
167
|
+
text-transform: uppercase;
|
|
168
|
+
color: var(--ink-3);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.notes-block-text {
|
|
172
|
+
margin: 0;
|
|
173
|
+
font-size: var(--type-md);
|
|
174
|
+
line-height: var(--leading-body);
|
|
175
|
+
color: var(--ink-1);
|
|
176
|
+
white-space: pre-wrap;
|
|
177
|
+
}
|
|
178
|
+
.notes-block-beats {
|
|
179
|
+
display: flex;
|
|
180
|
+
flex-direction: column;
|
|
181
|
+
gap: var(--space-2);
|
|
182
|
+
margin: 0;
|
|
183
|
+
padding: 0;
|
|
184
|
+
list-style: none;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.notes-block-beat {
|
|
188
|
+
display: flex;
|
|
189
|
+
align-items: baseline;
|
|
190
|
+
gap: var(--space-3);
|
|
191
|
+
min-width: 0;
|
|
192
|
+
font-size: var(--type-md);
|
|
193
|
+
color: var(--ink-1);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.notes-block-number {
|
|
197
|
+
flex: 0 0 auto;
|
|
198
|
+
min-width: var(--space-6);
|
|
199
|
+
font-family: var(--font-numeric);
|
|
200
|
+
font-size: var(--type-sm);
|
|
201
|
+
color: var(--accent-warm);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.notes-block-beat-text {
|
|
205
|
+
flex: 1 1 auto;
|
|
206
|
+
min-width: 0;
|
|
207
|
+
}
|
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
/* The inspector's object context: align, paint (the gradient bar, the stops), a prose value's ink, the Animate panel's pad, the expose pin, plate styles, the mesh material rows, the stroke switch, the font field and the mask. The field geometry (the 28px box, the type scale, the 6px rhythm, the colour field, the accessory lane), the inspector's buttons (one in a pill, a row's own, a row of them) and the readout row are the house recipes in packages/ui/src/widgets.css, for every panel alike; nothing here restates them. `.insp-object` is on the root of every object section (the InspectorSection `className`). Imported right after inspector-shot.css, in the same layer. */
|
|
2
|
+
|
|
3
|
+
/* ---- align / distribute ------------------------------------------------- */
|
|
4
|
+
/* Two rows of five, one per axis: align, centre, align, distribute, flip.
|
|
5
|
+
Bordered buttons at the house 28px, each a 14px glyph in the second ink. */
|
|
6
|
+
.align-grid {
|
|
7
|
+
display: grid;
|
|
8
|
+
grid-template-columns: repeat(5, 1fr);
|
|
9
|
+
gap: var(--space-3);
|
|
10
|
+
margin: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.align-button {
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
height: var(--control-h);
|
|
18
|
+
padding: 0;
|
|
19
|
+
color: var(--ink-2);
|
|
20
|
+
background: var(--fill-rest);
|
|
21
|
+
border: 1px solid var(--line-strong);
|
|
22
|
+
border-radius: var(--field-radius);
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* The glyph is drawn on the 24 grid and carries no size of its own. */
|
|
28
|
+
.align-button > svg {
|
|
29
|
+
width: 14px;
|
|
30
|
+
height: 14px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.align-button:hover:not(:disabled) {
|
|
34
|
+
background: var(--fill-hover);
|
|
35
|
+
color: var(--ink-1);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.align-button:disabled {
|
|
39
|
+
opacity: var(--opacity-disabled);
|
|
40
|
+
cursor: default;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.align-button:focus-visible {
|
|
44
|
+
outline: none;
|
|
45
|
+
border-color: var(--accent);
|
|
46
|
+
box-shadow: var(--focus-ring);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* ---- paint: the gradient bar and its stops ------------------------------ */
|
|
50
|
+
/* THE TYPE CHIPS are the one shared segmented control (ui/widgets.css
|
|
51
|
+
`.segmented`), and the colour field is the house one (ui ColorField): Fill
|
|
52
|
+
here, the scene's Background, the dock's Rows | Graph | Sound and the tool
|
|
53
|
+
footer's view switch all draw the same controls. Nothing below is scoped to
|
|
54
|
+
an object section, because the shot's Background renders the same
|
|
55
|
+
PaintRows, and one control drawn two ways would read as two controls. */
|
|
56
|
+
|
|
57
|
+
/* THE BAR'S RAMP IN THE CANVAS'S SPACE. GradientBar fills its track through
|
|
58
|
+
an OKLCH preview, and the rasterizer blends sRGB. PaintRows sets
|
|
59
|
+
`--paint-ramp` as a plain CSS gradient, and this layer covers the bar's
|
|
60
|
+
fill with it. It sits inside the track, over the checkerboard, so a
|
|
61
|
+
translucent stop still shows its alpha. */
|
|
62
|
+
.paint-gradient .gradient-bar-track::after {
|
|
63
|
+
content: "";
|
|
64
|
+
position: absolute;
|
|
65
|
+
inset: 0;
|
|
66
|
+
background: var(--paint-ramp);
|
|
67
|
+
pointer-events: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* The stop the bar has selected: its box takes the accent wash and edge, so
|
|
71
|
+
the row and the marker read as one selection. A stop's remove is the house
|
|
72
|
+
accessory inside that box (`.insp-key.is-danger`), so it needs no look of
|
|
73
|
+
its own here. */
|
|
74
|
+
.paint-stop.is-selected .insp-pill {
|
|
75
|
+
background: var(--accent-soft);
|
|
76
|
+
border-color: var(--accent);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* A stop's box holds two values, shared by what each holds: the colour is a
|
|
80
|
+
swatch, six digits and a chevron, and the position a two-letter prefix and
|
|
81
|
+
at most four characters (0 to 1 in steps of 0.05), about two to one, so the
|
|
82
|
+
At field grows at half the colour's rate. Shared evenly, the hex was cut to
|
|
83
|
+
"FF000" at the panel's 264px floor beside an At field holding empty space.
|
|
84
|
+
A ratio and not a content size: the At field's input would bring its own
|
|
85
|
+
intrinsic width of twenty characters. */
|
|
86
|
+
.paint-stop .insp-pill .numfield {
|
|
87
|
+
flex-grow: 0.5;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* "+ Stop" is the gradient's one way to grow, drawn as Paper's accent chip:
|
|
91
|
+
the accent wash, an accent edge and accent ink, at the row's right
|
|
92
|
+
(`.insp-control` already ends its content there). Its 28px and its inset
|
|
93
|
+
are the house row button's (a row's own button, widgets.css). */
|
|
94
|
+
.paint-add-stop .btn {
|
|
95
|
+
background: var(--accent-soft);
|
|
96
|
+
border: 1px solid var(--accent);
|
|
97
|
+
color: var(--accent-ink);
|
|
98
|
+
font-size: var(--type-md);
|
|
99
|
+
font-weight: var(--weight-medium);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* This layer outranks `.btn:hover`, so the hover is restated: the edge takes
|
|
103
|
+
the hover accent rather than the wash going grey. */
|
|
104
|
+
.paint-add-stop .btn:hover:not(:disabled) {
|
|
105
|
+
background: var(--accent-soft);
|
|
106
|
+
border-color: var(--accent-hover);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* ---- a prose value ------------------------------------------------------- */
|
|
110
|
+
/* A value in a row that also holds a verb (a source file's name beside
|
|
111
|
+
Replace…, a module's name) is WORDS: the row's own sans face (`.is-text`)
|
|
112
|
+
in the second ink the house readout gives its values. The third ink was
|
|
113
|
+
dimmer than the label naming it. A row that only reads out a value is the
|
|
114
|
+
house readout (`insp-readout`), which inks its value itself. */
|
|
115
|
+
.insp-object .insp-dim.is-text {
|
|
116
|
+
color: var(--ink-2);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* The bezier pad, sharing the shape the other two chromes draw so an ease
|
|
120
|
+
reads the same everywhere. */
|
|
121
|
+
.insp-pad {
|
|
122
|
+
display: block;
|
|
123
|
+
margin: var(--space-3) 0;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.insp-pad-box {
|
|
127
|
+
fill: none;
|
|
128
|
+
stroke: var(--line);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.insp-pad-curve {
|
|
132
|
+
fill: none;
|
|
133
|
+
stroke: var(--accent);
|
|
134
|
+
stroke-width: 1.5;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.insp-pad-arm {
|
|
138
|
+
stroke: var(--line);
|
|
139
|
+
stroke-width: 1;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.insp-pad-handle {
|
|
143
|
+
fill: var(--accent);
|
|
144
|
+
cursor: grab;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
/* ---- the expose pin ------------------------------------------------------ */
|
|
149
|
+
/* `.insp-key` (ui/widgets.css) carries this button's box and its inks (16px,
|
|
150
|
+
the third ink at rest, the first under the pointer), because the pin and
|
|
151
|
+
the diamond sit in one accessory lane inside the field, and two
|
|
152
|
+
affordances there that rested at different sizes or strengths would read
|
|
153
|
+
as two kinds of control rather than two verbs on one value. So no ink is
|
|
154
|
+
set here: a chrome rule outranks the house at any specificity, and one
|
|
155
|
+
that held the pin at the third ink kept its glyph dark under the pointer
|
|
156
|
+
while the diamond beside it lit. What it must never take is `--kf`. That
|
|
157
|
+
token means "this property has a keyframe", and publishing a prop is the
|
|
158
|
+
opposite claim: the value belongs to whoever places the component, and
|
|
159
|
+
nothing in this definition animates it. The pin never wears the diamond's
|
|
160
|
+
tracked or keyed class, so it has no keyed state at all.
|
|
161
|
+
|
|
162
|
+
ITS GLYPH IS A CHARACTER, NOT AN SVG, so `.insp-key > svg` does not size
|
|
163
|
+
it and it took the font of whatever held it: 13px in a field's box, 11px
|
|
164
|
+
in a ControlSpec row's label column, where a vector's one pin sits. One
|
|
165
|
+
size wherever it sits, the box's. */
|
|
166
|
+
.insp-expose {
|
|
167
|
+
font-size: var(--type-lg);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
/* ---- plate style shelf --------------------------------------------------- */
|
|
172
|
+
/* Six named looks over one grid of chips. A GRID and not a SegmentedControl,
|
|
173
|
+
because these are not the values of one field: nothing records which was
|
|
174
|
+
chosen, each is a write of ordinary paint fields the author then owns, and a
|
|
175
|
+
segmented control would claim a selected state this section cannot honestly
|
|
176
|
+
show. Two rows of three at the inspector's width, which keeps every label
|
|
177
|
+
readable without truncating "Outline". */
|
|
178
|
+
.plate-style-grid {
|
|
179
|
+
display: grid;
|
|
180
|
+
grid-template-columns: repeat(3, 1fr);
|
|
181
|
+
gap: var(--space-1);
|
|
182
|
+
width: 100%;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.plate-style-chip {
|
|
186
|
+
font: inherit;
|
|
187
|
+
font-size: var(--type-sm);
|
|
188
|
+
line-height: var(--leading-none);
|
|
189
|
+
color: var(--ink-2);
|
|
190
|
+
background: var(--fill-rest);
|
|
191
|
+
border: 1px solid var(--line);
|
|
192
|
+
border-radius: var(--radius-sm);
|
|
193
|
+
cursor: pointer;
|
|
194
|
+
/* A control's height, so the shelf's rows line up with the pills around it. */
|
|
195
|
+
height: var(--control-h);
|
|
196
|
+
padding: 0 var(--space-2);
|
|
197
|
+
text-align: center;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.plate-style-chip:hover:not(:disabled) {
|
|
201
|
+
color: var(--ink-1);
|
|
202
|
+
background: var(--fill-hover);
|
|
203
|
+
border-color: var(--line-strong);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* A viewer's locked panel: every chip writes paint, so the shelf dims. */
|
|
207
|
+
.plate-style-chip:disabled {
|
|
208
|
+
opacity: var(--opacity-disabled);
|
|
209
|
+
cursor: default;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* The capability's affordance stays visible at rest (design-system rule), so
|
|
213
|
+
this is a focus ring on top of a chip that is already legible, never the
|
|
214
|
+
thing that reveals it. */
|
|
215
|
+
.plate-style-chip:focus-visible {
|
|
216
|
+
outline: none;
|
|
217
|
+
box-shadow: var(--focus-ring);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
/* ---- re-homed here from other region files (the component that renders
|
|
222
|
+
these lives in this region) ------------------------------------------ */
|
|
223
|
+
|
|
224
|
+
/* THE MATERIAL ROW's value: the material's name as a button that opens its
|
|
225
|
+
nodes, flattened into the row's pill by the house text-input rule like
|
|
226
|
+
every value in one, and read from the right like them. Its remove is the
|
|
227
|
+
house accessory in the pill's own lane. */
|
|
228
|
+
.mesh-material-name {
|
|
229
|
+
min-width: 0;
|
|
230
|
+
text-align: right;
|
|
231
|
+
overflow: hidden;
|
|
232
|
+
text-overflow: ellipsis;
|
|
233
|
+
white-space: nowrap;
|
|
234
|
+
cursor: pointer;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* The model's own materials, one row each. A LIST rather than a dropdown: the
|
|
238
|
+
author is choosing what to go and edit, not setting a value, and a row can
|
|
239
|
+
carry the mesh and map counts that say which surface it is. */
|
|
240
|
+
.mesh-slot-list {
|
|
241
|
+
display: flex;
|
|
242
|
+
flex-direction: column;
|
|
243
|
+
gap: var(--space-1);
|
|
244
|
+
padding: var(--space-1) 0 var(--space-3);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.mesh-slot-row {
|
|
248
|
+
display: flex;
|
|
249
|
+
align-items: center;
|
|
250
|
+
gap: var(--space-3);
|
|
251
|
+
min-height: 24px;
|
|
252
|
+
padding: 0 var(--space-3);
|
|
253
|
+
color: var(--ink-1);
|
|
254
|
+
background: transparent;
|
|
255
|
+
border: 0;
|
|
256
|
+
border-radius: var(--radius-xs);
|
|
257
|
+
font: inherit;
|
|
258
|
+
text-align: left;
|
|
259
|
+
cursor: pointer;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.mesh-slot-row:hover {
|
|
263
|
+
background: var(--fill-rest);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.mesh-slot-index {
|
|
267
|
+
flex: none;
|
|
268
|
+
min-width: 14px;
|
|
269
|
+
color: var(--ink-3);
|
|
270
|
+
font-variant-numeric: var(--numeric);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.mesh-slot-name {
|
|
274
|
+
flex: 1 1 auto;
|
|
275
|
+
min-width: 0;
|
|
276
|
+
overflow: hidden;
|
|
277
|
+
text-overflow: ellipsis;
|
|
278
|
+
white-space: nowrap;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.mesh-slot-row small {
|
|
282
|
+
flex: none;
|
|
283
|
+
color: var(--ink-3);
|
|
284
|
+
font-size: var(--type-micro);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/* ---- Stroke ------------------------------------------------------------- */
|
|
288
|
+
/* The Stroke section's header switch (`Stroke.hidden`, schema v36). The
|
|
289
|
+
actions slot rests at 0.55 so a `+` sits quietly under its title, but a
|
|
290
|
+
switch's whole job is to show a state: at 0.55 the accent "on" and the grey
|
|
291
|
+
"off" are hard to tell apart without a hover a touch device cannot do. So
|
|
292
|
+
the slot that holds this switch stays at full strength. */
|
|
293
|
+
.insp-section-actions:has(> .insp-stroke-switch) {
|
|
294
|
+
opacity: 1;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/* THE FONT FIELD (FontField.tsx): the colour field's box (the house
|
|
298
|
+
`.color-field` recipe) is the font picker's trigger. One button fills it:
|
|
299
|
+
the family drawn in its own face, right-aligned as every value in a pill,
|
|
300
|
+
then the house caret. The box draws the edge and the ring for it (the
|
|
301
|
+
recipe's `:focus-within` and `:has(:focus-visible)`), so the button draws
|
|
302
|
+
none of its own. A font write in flight sits in the accessory lane. */
|
|
303
|
+
.font-field-open {
|
|
304
|
+
flex: 1;
|
|
305
|
+
min-width: 0;
|
|
306
|
+
display: flex;
|
|
307
|
+
align-items: center;
|
|
308
|
+
gap: var(--space-3);
|
|
309
|
+
padding: 0;
|
|
310
|
+
font: inherit;
|
|
311
|
+
color: var(--ink-2);
|
|
312
|
+
background: transparent;
|
|
313
|
+
border: 0;
|
|
314
|
+
outline: none;
|
|
315
|
+
cursor: pointer;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
.font-field-open:hover:not(:disabled),
|
|
319
|
+
.font-field-open[aria-expanded="true"] {
|
|
320
|
+
color: var(--ink-1);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/* A viewer's locked panel opens no picker (a pick writes the Project). The
|
|
324
|
+
caret keeps its ink, as the colour field's does in a read-only box. */
|
|
325
|
+
.font-field-open:disabled {
|
|
326
|
+
cursor: default;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/* Its glyph is the house dropdown caret (`.field-caret`), the last thing in
|
|
330
|
+
the button, so it lands where every other caret does. The button is aimed
|
|
331
|
+
at, so the caret takes the button's ink: --ink-2 at rest, as every caret,
|
|
332
|
+
and --ink-1 while the field is hovered or its picker is open. */
|
|
333
|
+
.font-field-open .field-caret {
|
|
334
|
+
color: inherit;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/* The family keeps the UI's size and its own face (set inline once the face
|
|
338
|
+
has loaded, Inter until then). "Mixed" is the quiet ink a field's Mixed
|
|
339
|
+
placeholder takes; a locked box reads its value in the second ink. */
|
|
340
|
+
.font-field-name {
|
|
341
|
+
flex: 1;
|
|
342
|
+
min-width: 0;
|
|
343
|
+
overflow: hidden;
|
|
344
|
+
text-overflow: ellipsis;
|
|
345
|
+
white-space: nowrap;
|
|
346
|
+
text-align: right;
|
|
347
|
+
font-size: var(--type-md);
|
|
348
|
+
line-height: var(--leading-md);
|
|
349
|
+
color: var(--ink-1);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.font-field-name.is-mixed {
|
|
353
|
+
color: var(--ink-3);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.font-field.is-readonly .font-field-name {
|
|
357
|
+
color: var(--ink-2);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/* THE WRITE IN FLIGHT: a 12px ring whose lit arc is the level, in the meter
|
|
361
|
+
grey (a level, not a selection), with its percent in the numeral face in a
|
|
362
|
+
lane wide enough for "100%", so the caret never steps as it counts. A size
|
|
363
|
+
not known yet has no level: a short arc that turns where motion is wanted,
|
|
364
|
+
and a dashed ring where it is not (a still short arc would read as 25%).
|
|
365
|
+
The picker's skeleton, while its chunk loads, is the same ring in the
|
|
366
|
+
accessory lane. */
|
|
367
|
+
.font-field-apply {
|
|
368
|
+
gap: var(--space-2);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.font-field-ring {
|
|
372
|
+
flex: none;
|
|
373
|
+
width: 12px;
|
|
374
|
+
height: 12px;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.font-field-ring circle {
|
|
378
|
+
fill: none;
|
|
379
|
+
stroke-width: 1.5;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.font-field-ring-track {
|
|
383
|
+
stroke: var(--line-strong);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.font-field-ring-level {
|
|
387
|
+
stroke: var(--meter-lit);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.font-field-ring.is-indeterminate .font-field-ring-level {
|
|
391
|
+
stroke-dasharray: 8 4.5;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.font-field-percent {
|
|
395
|
+
min-width: 4ch;
|
|
396
|
+
font-family: var(--font-numeric);
|
|
397
|
+
font-variant-numeric: var(--numeric);
|
|
398
|
+
font-size: var(--type-sm);
|
|
399
|
+
line-height: var(--leading-xs);
|
|
400
|
+
color: var(--ink-2);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.font-field-wait {
|
|
404
|
+
flex: none;
|
|
405
|
+
width: 12px;
|
|
406
|
+
height: 12px;
|
|
407
|
+
border: 1.5px dashed var(--line-strong);
|
|
408
|
+
border-radius: var(--radius-full);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
412
|
+
.font-field-ring.is-indeterminate .font-field-ring-level {
|
|
413
|
+
stroke-dasharray: 25 100;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.font-field-wait {
|
|
417
|
+
border-style: solid;
|
|
418
|
+
border-top-color: var(--meter-lit);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
.font-field-ring.is-indeterminate,
|
|
422
|
+
.font-field-wait {
|
|
423
|
+
animation: font-field-turn 900ms linear infinite;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
@keyframes font-field-turn {
|
|
428
|
+
to {
|
|
429
|
+
transform: rotate(360deg);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/* A failed write's way back: the house button, sized in the lane at the
|
|
434
|
+
badge's height so the row keeps its 28. Its look and states stay `.btn`'s. */
|
|
435
|
+
.font-field-retry {
|
|
436
|
+
height: var(--badge-h);
|
|
437
|
+
padding: 0 var(--space-3);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/* The picker's chunk did not load: its crash card takes its own line in the
|
|
441
|
+
box, which grows to hold it, so the message reads and Try again is in
|
|
442
|
+
reach rather than spilling over the rows below. */
|
|
443
|
+
.font-field:has(> .panel-crash) {
|
|
444
|
+
flex-wrap: wrap;
|
|
445
|
+
height: auto;
|
|
446
|
+
min-height: var(--control-h);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
.font-field > .panel-crash {
|
|
450
|
+
flex: 1 0 100%;
|
|
451
|
+
margin: 0 0 var(--space-3);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/* THE PICKER'S CHIPS share its 340 by their words, in one line: at the
|
|
455
|
+
house 10px a side the six wrapped, Mono alone on a second line. A context
|
|
456
|
+
sets a chip's width only (docs/design-system.md, Segmented), from the
|
|
457
|
+
chrome layer, since the picker's own sheet ranks under the widgets. */
|
|
458
|
+
.font-picker-chips .segmented-item {
|
|
459
|
+
flex: 1 1 auto;
|
|
460
|
+
padding-inline: var(--space-2);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/* ---- mask (gap 7, Paper page 25) ----------------------------------------
|
|
464
|
+
What the mask covers is the house readout (`insp-readout`: no hover lift,
|
|
465
|
+
the default cursor), its names in full ink rather than the readout's
|
|
466
|
+
second ink, and Release is one quiet full-width button under the rows:
|
|
467
|
+
the house row of buttons and the house outline button, at the house 28px.
|
|
468
|
+
This places the row only. */
|
|
469
|
+
.insp-object.insp-mask .insp-dim.is-text {
|
|
470
|
+
color: var(--ink-1);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
.insp-mask-release {
|
|
474
|
+
padding: var(--space-2) 0 var(--space-6);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/* A notice of several sentences (an instance's drift: what moved, what the
|
|
478
|
+
stage renders now, what Accept does), one to a line so they never run
|
|
479
|
+
into each other. */
|
|
480
|
+
.insp-notice-line {
|
|
481
|
+
display: block;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
.insp-notice-line + .insp-notice-line {
|
|
485
|
+
margin-top: var(--space-2);
|
|
486
|
+
}
|