@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 FONT PICKER'S FACES: one cache for the page, shared by the picker's rows
|
|
2
|
+
// and the Font field, so a family draws its name in its own face and the file
|
|
3
|
+
// is fetched once per page.
|
|
4
|
+
//
|
|
5
|
+
// - EVERY FACE REGISTERS UNDER A PRIVATE FAMILY ("dailies-gf-<id>",
|
|
6
|
+
// "dailies-ws-<hash8>", "dailies-pf-<hash8>"), never under the family's
|
|
7
|
+
// own name: a Google copy of "Inter" must not take over the chrome's Inter.
|
|
8
|
+
// A file's family is keyed by its bytes (the stores name a file
|
|
9
|
+
// `<hash8>-<name>`), so a reused asset id or another Project never draws
|
|
10
|
+
// one file's name in another file's glyphs.
|
|
11
|
+
// - ONLY A GOOGLE ROW CONTACTS JSDELIVR (Recent, Google Fonts). A family the
|
|
12
|
+
// Project holds draws from the Project's own file, a machine font from the
|
|
13
|
+
// computer, so selecting text fetches nothing from anyone (privacy.html:
|
|
14
|
+
// new text's Inter "contacts no one").
|
|
15
|
+
// - ONLY WHAT IS ON SCREEN LOADS. A row asks for its face while it is in the
|
|
16
|
+
// viewport (the picker mounts a few rows past each edge, and those ask for
|
|
17
|
+
// nothing), at most `MAX_LOADS` at once, in the order asked. An ask whose
|
|
18
|
+
// row scrolled away before its turn waits unstarted until a row asks
|
|
19
|
+
// again, so a fast scroll never queues the rows it passed ahead of the
|
|
20
|
+
// ones it stopped on.
|
|
21
|
+
// - NOTHING IS DELETED. A face stays in `document.fonts` for the page's life,
|
|
22
|
+
// so reopening the picker or scrolling back draws at once.
|
|
23
|
+
//
|
|
24
|
+
// Kept out of the picker's lazy chunk: the Font field draws through it too.
|
|
25
|
+
import { useEffect, useSyncExternalStore } from "react";
|
|
26
|
+
import type { Doc3D } from "@dailies-studio/shot/doc";
|
|
27
|
+
import { isGenericFontFamily, quoteFontFamily } from "@dailies-studio/shot/doc";
|
|
28
|
+
import { findGoogleFont, hasNonLatinDefault, previewFile } from "../../fonts/googleFonts.js";
|
|
29
|
+
import type { GoogleFontEntry } from "../../fonts/googleFonts.js";
|
|
30
|
+
import { workspaceFontUrl } from "../../api.js";
|
|
31
|
+
import type { WorkspaceFont } from "../../api.js";
|
|
32
|
+
import { fold } from "../../state/fontRecents.js";
|
|
33
|
+
import { chooseFace, projectFontFamilies, workspaceFacts } from "../../state/fonts.js";
|
|
34
|
+
import type { ProjectFontFamily } from "../../state/fonts.js";
|
|
35
|
+
|
|
36
|
+
/** What a family's name is drawn in. `url` null is a face this computer may
|
|
37
|
+
* have (a machine font): nothing loads, the stack names the family itself. */
|
|
38
|
+
export interface PreviewFace {
|
|
39
|
+
family: string;
|
|
40
|
+
url: string | null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** How a face stands: loading (queued or fetching), ready, or failed (drawn
|
|
44
|
+
* in the chrome's Inter). */
|
|
45
|
+
export type FaceStatus = "loading" | "ready" | "failed";
|
|
46
|
+
|
|
47
|
+
const MAX_LOADS = 4;
|
|
48
|
+
|
|
49
|
+
interface Entry {
|
|
50
|
+
face: PreviewFace;
|
|
51
|
+
status: "queued" | FaceStatus;
|
|
52
|
+
/** Mounted rows asking for it now. */
|
|
53
|
+
wants: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const entries = new Map<string, Entry>();
|
|
57
|
+
/** Unstarted asks, in the order asked. */
|
|
58
|
+
const queue: Entry[] = [];
|
|
59
|
+
let running = 0;
|
|
60
|
+
const listeners = new Set<() => void>();
|
|
61
|
+
|
|
62
|
+
function notify(): void {
|
|
63
|
+
for (const listener of listeners) listener();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function start(entry: Entry): void {
|
|
67
|
+
if (typeof FontFace === "undefined" || typeof document === "undefined" || document.fonts === undefined) {
|
|
68
|
+
entry.status = "failed";
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
entry.status = "loading";
|
|
72
|
+
running++;
|
|
73
|
+
// Every weight maps to the one file, so a name is never drawn in a
|
|
74
|
+
// synthesized bold.
|
|
75
|
+
const face = new FontFace(entry.face.family, `url(${JSON.stringify(entry.face.url)})`, { weight: "1 1000" });
|
|
76
|
+
document.fonts.add(face);
|
|
77
|
+
face.load().then(
|
|
78
|
+
() => {
|
|
79
|
+
entry.status = "ready";
|
|
80
|
+
},
|
|
81
|
+
() => {
|
|
82
|
+
entry.status = "failed";
|
|
83
|
+
},
|
|
84
|
+
).finally(() => {
|
|
85
|
+
running--;
|
|
86
|
+
pump();
|
|
87
|
+
notify();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function pump(): void {
|
|
92
|
+
while (running < MAX_LOADS) {
|
|
93
|
+
const at = queue.findIndex((entry) => entry.wants > 0);
|
|
94
|
+
if (at < 0) return;
|
|
95
|
+
start(queue.splice(at, 1)[0]!);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Hold `face` wanted while a row shows it; answers the release. */
|
|
100
|
+
function want(face: PreviewFace): () => void {
|
|
101
|
+
let entry = entries.get(face.family);
|
|
102
|
+
if (entry === undefined) {
|
|
103
|
+
entry = { face, status: face.url === null ? "ready" : "queued", wants: 0 };
|
|
104
|
+
entries.set(face.family, entry);
|
|
105
|
+
if (entry.status === "queued") queue.push(entry);
|
|
106
|
+
}
|
|
107
|
+
const held = entry;
|
|
108
|
+
held.wants++;
|
|
109
|
+
pump();
|
|
110
|
+
notify();
|
|
111
|
+
return () => {
|
|
112
|
+
held.wants--;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function subscribe(listener: () => void): () => void {
|
|
117
|
+
listeners.add(listener);
|
|
118
|
+
return () => {
|
|
119
|
+
listeners.delete(listener);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function statusOf(face: PreviewFace | null): FaceStatus | null {
|
|
124
|
+
if (face === null) return null;
|
|
125
|
+
if (face.url === null) return "ready";
|
|
126
|
+
const status = entries.get(face.family)?.status ?? "queued";
|
|
127
|
+
return status === "queued" ? "loading" : status;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** `face`'s status while the calling row is mounted, asking for it to load;
|
|
131
|
+
* null for no face (the name is drawn in Inter). */
|
|
132
|
+
export function usePreviewFace(face: PreviewFace | null): FaceStatus | null {
|
|
133
|
+
const family = face?.family ?? null;
|
|
134
|
+
useEffect(() => {
|
|
135
|
+
if (face === null) return;
|
|
136
|
+
return want(face);
|
|
137
|
+
// One family is one file: the url never changes under it.
|
|
138
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
139
|
+
}, [family]);
|
|
140
|
+
return useSyncExternalStore(subscribe, () => statusOf(face), () => statusOf(face));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** The CSS stack a ready face draws a name in, the chrome's Inter behind it.
|
|
144
|
+
* A generic keyword stays bare: a quoted "serif" names a family called
|
|
145
|
+
* serif, which no computer has, so the name would draw in Inter. */
|
|
146
|
+
export const faceStack = (face: PreviewFace): string =>
|
|
147
|
+
`${isGenericFontFamily(face.family) ? face.family.trim() : quoteFontFamily(face.family)}, var(--font-sans)`;
|
|
148
|
+
|
|
149
|
+
// ── WHICH FACE A FAMILY DRAWS IN ──────────────────────────────────────────
|
|
150
|
+
|
|
151
|
+
const assetUrl = (path: string): string => `/studio/assets/${encodeURIComponent(path)}`;
|
|
152
|
+
|
|
153
|
+
/** A Google family: its preview file (`previewFile`), or null for a family
|
|
154
|
+
* whose own face cannot spell its name (a non-Latin default), drawn in
|
|
155
|
+
* Inter with nothing fetched. */
|
|
156
|
+
export function googleFace(entry: GoogleFontEntry): PreviewFace | null {
|
|
157
|
+
const file = previewFile(entry);
|
|
158
|
+
return file === null ? null : { family: `dailies-gf-${entry.id}`, url: file.url };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** A workspace family: its regular file, or the one nearest it. */
|
|
162
|
+
export function workspaceFace(fonts: readonly WorkspaceFont[]): PreviewFace | null {
|
|
163
|
+
if (fonts.length === 0) return null;
|
|
164
|
+
const font = chooseFace(fonts, workspaceFacts, 400, "normal").face;
|
|
165
|
+
return { family: `dailies-ws-${font.id.slice(0, 8)}`, url: workspaceFontUrl(font.id) };
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** A family the Project holds, from the Project's own file of its regular
|
|
169
|
+
* face (or the one nearest it): a catalog face's first file is its default
|
|
170
|
+
* subset's. A workspace copy shares the workspace row's face (the same
|
|
171
|
+
* bytes, the same `<hash8>`). A catalog copy draws in Inter while the
|
|
172
|
+
* catalog is not loaded and for a non-Latin default, since only the catalog
|
|
173
|
+
* says whether its default subset can spell its name. */
|
|
174
|
+
export function projectFace(
|
|
175
|
+
row: ProjectFontFamily,
|
|
176
|
+
assets: Doc3D["assets"],
|
|
177
|
+
catalog: readonly GoogleFontEntry[] | null,
|
|
178
|
+
): PreviewFace | null {
|
|
179
|
+
if (row.pick.faces.length === 0) return null;
|
|
180
|
+
if (row.source === "catalog") {
|
|
181
|
+
if (catalog === null) return null;
|
|
182
|
+
const entry = findGoogleFont(catalog, row.family);
|
|
183
|
+
if (entry !== undefined && hasNonLatinDefault(entry)) return null;
|
|
184
|
+
}
|
|
185
|
+
const asset = assets[chooseFace(row.pick.faces, (face) => face, 400, "normal").face.fontAsset];
|
|
186
|
+
if (asset?.kind !== "font") return null;
|
|
187
|
+
const family = row.source === "workspace" ? `dailies-ws-${asset.path.slice(0, 8)}` : `dailies-pf-${asset.hash.slice(0, 8)}`;
|
|
188
|
+
return { family, url: assetUrl(asset.path) };
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** The face the Font field draws `family` in: the In this Project row's face,
|
|
192
|
+
* else the family itself, a machine font this computer may have (the face
|
|
193
|
+
* the stage draws). Null draws Inter.
|
|
194
|
+
*
|
|
195
|
+
* The families are grouped without the catalog: its 1,984-name map is what
|
|
196
|
+
* costs, and the field runs this on every edit while text is selected. Only
|
|
197
|
+
* the non-Latin check (`projectFace`) reads the catalog. */
|
|
198
|
+
export function familyFace(
|
|
199
|
+
doc: Doc3D,
|
|
200
|
+
family: string,
|
|
201
|
+
catalog: readonly GoogleFontEntry[] | null,
|
|
202
|
+
workspace: readonly WorkspaceFont[] | null,
|
|
203
|
+
): PreviewFace | null {
|
|
204
|
+
const key = fold(family);
|
|
205
|
+
const row = projectFontFamilies(doc, null, workspace).families.find((f) => f.key === key);
|
|
206
|
+
return row === undefined ? { family, url: null } : projectFace(row, doc.assets, catalog);
|
|
207
|
+
}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
@layer component-sheets {
|
|
2
|
+
/* THE FONT PICKER (FontPicker.tsx), a component sheet: it styles its own
|
|
3
|
+
classes and the layout around the house controls it holds (the search
|
|
4
|
+
field, the chips, the badge, the buttons, the drop zone, the empty
|
|
5
|
+
state), never those controls.
|
|
6
|
+
|
|
7
|
+
The surface is the house popover (`.popover`: the panel ground, the
|
|
8
|
+
strong edge, the control's corners, the popover shadow), a fixed 340
|
|
9
|
+
hung from the field's right edge, and the list is its only scroller.
|
|
10
|
+
Its frame's height is set inline, the room beside the field up to
|
|
11
|
+
min(560px, 70vh), and stays put while a search narrows the list. */
|
|
12
|
+
.font-picker {
|
|
13
|
+
width: 340px;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.font-picker-frame {
|
|
20
|
+
max-height: min(560px, 70vh);
|
|
21
|
+
min-height: 0;
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* The row height is FONT_PICKER_ROW_H (FontPicker.tsx), which the list's
|
|
27
|
+
window arithmetic reads; the body also sets it inline from that constant,
|
|
28
|
+
so the inline value wins and the two cannot drift. */
|
|
29
|
+
.font-picker-body {
|
|
30
|
+
--font-picker-row-h: 32px;
|
|
31
|
+
flex: 1 1 auto;
|
|
32
|
+
min-height: 0;
|
|
33
|
+
display: flex;
|
|
34
|
+
flex-direction: column;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.font-picker-top {
|
|
38
|
+
flex: none;
|
|
39
|
+
display: flex;
|
|
40
|
+
flex-direction: column;
|
|
41
|
+
gap: var(--space-4);
|
|
42
|
+
padding: var(--space-4);
|
|
43
|
+
border-bottom: 1px solid var(--line-soft);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.font-picker-scroll {
|
|
47
|
+
flex: 1 1 auto;
|
|
48
|
+
min-height: 0;
|
|
49
|
+
overflow-y: auto;
|
|
50
|
+
overscroll-behavior: contain;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* No padding and no margin: an item's top is its index times the row
|
|
54
|
+
height, which the scroll arithmetic and the window read. */
|
|
55
|
+
.font-picker-list {
|
|
56
|
+
margin: 0;
|
|
57
|
+
padding: 0;
|
|
58
|
+
list-style: none;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.font-picker-gap {
|
|
62
|
+
margin: 0;
|
|
63
|
+
padding: 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* A section head is a list item of the row height, in the caps label. */
|
|
67
|
+
.font-picker-head {
|
|
68
|
+
display: flex;
|
|
69
|
+
align-items: center;
|
|
70
|
+
justify-content: space-between;
|
|
71
|
+
height: var(--font-picker-row-h);
|
|
72
|
+
padding: 0 var(--space-6);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.font-picker-num {
|
|
76
|
+
font-family: var(--font-numeric);
|
|
77
|
+
font-variant-numeric: var(--numeric);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.font-picker-note {
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
gap: var(--space-4);
|
|
84
|
+
height: var(--font-picker-row-h);
|
|
85
|
+
padding: 0 var(--space-6);
|
|
86
|
+
font-size: var(--type-md);
|
|
87
|
+
line-height: var(--leading-xs);
|
|
88
|
+
color: var(--ink-3);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* An option: the menu row's anatomy at the list's fixed height. The check
|
|
92
|
+
lane, the family in its own face, the tag. The active option (the
|
|
93
|
+
arrows' or the pointer's) wears the menu's quiet wash; its words keep
|
|
94
|
+
their ink. */
|
|
95
|
+
.font-picker-row {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
gap: var(--space-4);
|
|
99
|
+
height: var(--font-picker-row-h);
|
|
100
|
+
margin: 0 var(--space-3);
|
|
101
|
+
padding: 0 var(--space-4);
|
|
102
|
+
border-radius: var(--radius-sm);
|
|
103
|
+
color: var(--ink-1);
|
|
104
|
+
cursor: default;
|
|
105
|
+
user-select: none;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.font-picker-row.is-active {
|
|
109
|
+
background: var(--accent-quiet);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.font-picker-check {
|
|
113
|
+
flex: none;
|
|
114
|
+
display: inline-flex;
|
|
115
|
+
justify-content: center;
|
|
116
|
+
width: 16px;
|
|
117
|
+
color: var(--accent-ink);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.font-picker-check > svg {
|
|
121
|
+
width: 12px;
|
|
122
|
+
height: 12px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.font-picker-name {
|
|
126
|
+
flex: 1;
|
|
127
|
+
min-width: 0;
|
|
128
|
+
overflow: hidden;
|
|
129
|
+
text-overflow: ellipsis;
|
|
130
|
+
white-space: nowrap;
|
|
131
|
+
font-size: var(--type-title);
|
|
132
|
+
line-height: var(--leading-md);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* Its face still on its way: the name in Inter, in the third ink. */
|
|
136
|
+
.font-picker-row.is-loading .font-picker-name {
|
|
137
|
+
color: var(--ink-3);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.font-picker-count {
|
|
141
|
+
flex: none;
|
|
142
|
+
font-size: var(--type-sm);
|
|
143
|
+
line-height: var(--leading-xs);
|
|
144
|
+
color: var(--ink-3);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.font-picker-machine {
|
|
148
|
+
flex: none;
|
|
149
|
+
font-size: var(--type-sm);
|
|
150
|
+
line-height: var(--leading-xs);
|
|
151
|
+
color: var(--warn);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* The loading ring: it turns only where motion is wanted, and stands still
|
|
155
|
+
otherwise, so the row says "loading" by its shape as well as its ink. */
|
|
156
|
+
.font-picker-spinner {
|
|
157
|
+
flex: none;
|
|
158
|
+
width: 10px;
|
|
159
|
+
height: 10px;
|
|
160
|
+
border: 1.5px solid var(--line-strong);
|
|
161
|
+
border-top-color: var(--ink-2);
|
|
162
|
+
border-radius: var(--radius-full);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
166
|
+
.font-picker-spinner {
|
|
167
|
+
animation: font-picker-turn 900ms linear infinite;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@keyframes font-picker-turn {
|
|
172
|
+
to {
|
|
173
|
+
transform: rotate(360deg);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.font-picker-foot {
|
|
178
|
+
flex: none;
|
|
179
|
+
display: flex;
|
|
180
|
+
align-items: center;
|
|
181
|
+
justify-content: space-between;
|
|
182
|
+
gap: var(--space-4);
|
|
183
|
+
padding: var(--space-2) var(--space-3) var(--space-2) var(--space-6);
|
|
184
|
+
border-top: 1px solid var(--line-soft);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.font-picker-keys {
|
|
188
|
+
display: inline-flex;
|
|
189
|
+
align-items: center;
|
|
190
|
+
gap: var(--space-2);
|
|
191
|
+
font-size: var(--type-sm);
|
|
192
|
+
line-height: var(--leading-xs);
|
|
193
|
+
color: var(--ink-3);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* THE UPLOAD VIEW: Back and the title, the drop zone holding Choose file and
|
|
197
|
+
the accepted types, then the count, the reasons and the quiet lines. */
|
|
198
|
+
.font-picker-upload {
|
|
199
|
+
gap: var(--space-4);
|
|
200
|
+
padding: var(--space-4) var(--space-6) var(--space-6);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.font-picker-upload-head {
|
|
204
|
+
display: flex;
|
|
205
|
+
align-items: center;
|
|
206
|
+
gap: var(--space-4);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.font-picker-back > svg {
|
|
210
|
+
transform: rotate(180deg);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.font-picker-title {
|
|
214
|
+
font-size: var(--type-title);
|
|
215
|
+
line-height: var(--leading-md);
|
|
216
|
+
font-weight: var(--weight-medium);
|
|
217
|
+
color: var(--ink-1);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.font-picker-drop {
|
|
221
|
+
flex-direction: column;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* Disabled with its reason under it: the words step down to the disabled
|
|
225
|
+
ink (Choose file dims itself, `aria-disabled`). */
|
|
226
|
+
.font-picker-drop.is-disabled > span {
|
|
227
|
+
color: var(--ink-disabled);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.font-picker-limits {
|
|
231
|
+
font-size: var(--type-sm);
|
|
232
|
+
line-height: var(--leading-xs);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.font-picker-line {
|
|
236
|
+
margin: 0;
|
|
237
|
+
font-size: var(--type-md);
|
|
238
|
+
line-height: var(--leading-xs);
|
|
239
|
+
color: var(--ink-2);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.font-picker-line.is-quiet {
|
|
243
|
+
color: var(--ink-3);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.font-picker-line.is-warn {
|
|
247
|
+
color: var(--warn);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.font-picker-retry {
|
|
251
|
+
align-self: flex-start;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.font-picker-manage {
|
|
255
|
+
align-self: flex-start;
|
|
256
|
+
font-size: var(--type-md);
|
|
257
|
+
line-height: var(--leading-xs);
|
|
258
|
+
color: var(--accent-ink);
|
|
259
|
+
text-decoration: none;
|
|
260
|
+
border-radius: var(--radius-xs);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.font-picker-manage:hover {
|
|
264
|
+
text-decoration: underline;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.font-picker-manage:focus-visible {
|
|
268
|
+
outline: none;
|
|
269
|
+
box-shadow: var(--focus-ring);
|
|
270
|
+
}
|
|
271
|
+
}
|