@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,163 @@
|
|
|
1
|
+
// THE TRANSPORT'S SPEAKER: preview mute and volume, beside play.
|
|
2
|
+
//
|
|
3
|
+
// Neither touches the document, so neither can change what an export sounds
|
|
4
|
+
// like (see `ShotEditorState.previewMuted`). They are this tab's listening
|
|
5
|
+
// level, which is why they sit with the verbs that play the film and not in the
|
|
6
|
+
// mixer, where every level is saved. The mixer's master strip is a meter only.
|
|
7
|
+
//
|
|
8
|
+
// One button, two jobs. A press mutes. The volume lives in a popover that opens
|
|
9
|
+
// while the pointer rests on the speaker (or on the popover itself), and when
|
|
10
|
+
// the keyboard focuses it. The arrow keys on the focused speaker step the
|
|
11
|
+
// volume without opening anything first, so the level is reachable without a
|
|
12
|
+
// pointer at all.
|
|
13
|
+
//
|
|
14
|
+
// A leaf, because `previewVolume` changes once per slider pixel and a
|
|
15
|
+
// subscription in `TimelineDock` would re-render every row on a drag.
|
|
16
|
+
import { useEffect, useId, useRef, useState } from "react";
|
|
17
|
+
import type { CSSProperties, KeyboardEvent as ReactKeyboardEvent } from "react";
|
|
18
|
+
import { IconVolume, IconVolumeOff, Popover } from "@dailies-studio/ui";
|
|
19
|
+
import { useShotEditor, useStore } from "../../state/context.js";
|
|
20
|
+
|
|
21
|
+
/** Hover intent: long enough that a pointer crossing the transport on its way
|
|
22
|
+
* to the loop does not flash the popover, short enough to feel immediate. */
|
|
23
|
+
const OPEN_DELAY_MS = 120;
|
|
24
|
+
/** Grace to cross the gap from the speaker into the popover. */
|
|
25
|
+
const CLOSE_DELAY_MS = 240;
|
|
26
|
+
/** One arrow press, and one with Shift. */
|
|
27
|
+
const STEP = 0.05;
|
|
28
|
+
const BIG_STEP = 0.2;
|
|
29
|
+
|
|
30
|
+
/** True for keyboard focus only. `ownsActivation` in keymap.ts draws the same
|
|
31
|
+
* line: a speaker the mouse pressed must not keep the arrow keys. Guarded
|
|
32
|
+
* because an engine without the selector throws on `matches`. */
|
|
33
|
+
function keyboardFocused(el: HTMLElement): boolean {
|
|
34
|
+
try {
|
|
35
|
+
return el.matches(":focus-visible");
|
|
36
|
+
} catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function TransportVolume() {
|
|
42
|
+
const store = useStore();
|
|
43
|
+
const muted = useShotEditor((s) => s.previewMuted);
|
|
44
|
+
const volume = useShotEditor((s) => s.previewVolume);
|
|
45
|
+
const [open, setOpen] = useState(false);
|
|
46
|
+
const anchor = useRef<HTMLButtonElement | null>(null);
|
|
47
|
+
const timer = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
48
|
+
/** A thumb drag in progress: the pointer may leave the popover mid-drag,
|
|
49
|
+
* and that must not close it under the drag. */
|
|
50
|
+
const dragging = useRef(false);
|
|
51
|
+
const sliderId = useId();
|
|
52
|
+
|
|
53
|
+
const cancel = (): void => {
|
|
54
|
+
if (timer.current === null) return;
|
|
55
|
+
clearTimeout(timer.current);
|
|
56
|
+
timer.current = null;
|
|
57
|
+
};
|
|
58
|
+
const later = (next: boolean, ms: number): void => {
|
|
59
|
+
cancel();
|
|
60
|
+
timer.current = setTimeout(() => {
|
|
61
|
+
timer.current = null;
|
|
62
|
+
setOpen(next);
|
|
63
|
+
}, ms);
|
|
64
|
+
};
|
|
65
|
+
const leave = (): void => {
|
|
66
|
+
if (dragging.current) return;
|
|
67
|
+
later(false, CLOSE_DELAY_MS);
|
|
68
|
+
};
|
|
69
|
+
useEffect(() => cancel, []);
|
|
70
|
+
|
|
71
|
+
const silent = muted || volume <= 0;
|
|
72
|
+
const percent = Math.round(volume * 100);
|
|
73
|
+
|
|
74
|
+
const onKeyDown = (e: ReactKeyboardEvent<HTMLButtonElement>): void => {
|
|
75
|
+
if (!keyboardFocused(e.currentTarget)) return;
|
|
76
|
+
const dir =
|
|
77
|
+
e.key === "ArrowUp" || e.key === "ArrowRight" ? 1 : e.key === "ArrowDown" || e.key === "ArrowLeft" ? -1 : 0;
|
|
78
|
+
if (dir === 0) return;
|
|
79
|
+
// Stopped, so the timeline's own arrows (edit points, nudges) do not fire.
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
e.stopPropagation();
|
|
82
|
+
const next = Math.round(Math.min(1, Math.max(0, volume + dir * (e.shiftKey ? BIG_STEP : STEP))) * 100) / 100;
|
|
83
|
+
store.setPreviewVolume(next);
|
|
84
|
+
cancel();
|
|
85
|
+
setOpen(true);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
return (
|
|
89
|
+
<>
|
|
90
|
+
<button
|
|
91
|
+
ref={anchor}
|
|
92
|
+
type="button"
|
|
93
|
+
className="btn is-icon is-ghost dock-mute"
|
|
94
|
+
data-testid="dock-mute"
|
|
95
|
+
// The name stays put and `aria-pressed` carries the state, which is how
|
|
96
|
+
// a toggle is announced. The level is the slider's, named below.
|
|
97
|
+
aria-label="Mute preview"
|
|
98
|
+
aria-pressed={muted}
|
|
99
|
+
aria-controls={open ? sliderId : undefined}
|
|
100
|
+
aria-keyshortcuts="ArrowUp ArrowDown"
|
|
101
|
+
title={muted ? "Preview muted, press to hear it" : `Preview ${percent}%: press to mute, arrows to set`}
|
|
102
|
+
onClick={() => {
|
|
103
|
+
// A speaker drawn silent because the level is at zero, not because
|
|
104
|
+
// it is muted, is brought back up rather than muted on top.
|
|
105
|
+
if (!muted && volume <= 0) store.setPreviewVolume(1);
|
|
106
|
+
else store.setPreviewMuted(!muted);
|
|
107
|
+
}}
|
|
108
|
+
onKeyDown={onKeyDown}
|
|
109
|
+
onPointerEnter={() => later(true, OPEN_DELAY_MS)}
|
|
110
|
+
onPointerLeave={leave}
|
|
111
|
+
onFocus={(e) => {
|
|
112
|
+
if (!keyboardFocused(e.currentTarget)) return;
|
|
113
|
+
cancel();
|
|
114
|
+
setOpen(true);
|
|
115
|
+
}}
|
|
116
|
+
onBlur={() => {
|
|
117
|
+
if (!dragging.current) later(false, 0);
|
|
118
|
+
}}
|
|
119
|
+
>
|
|
120
|
+
{silent ? <IconVolumeOff /> : <IconVolume />}
|
|
121
|
+
</button>
|
|
122
|
+
<Popover open={open} anchor={anchor} onClose={() => setOpen(false)} side="above" className="dock-volume-pop">
|
|
123
|
+
<div
|
|
124
|
+
className="dock-volume-body"
|
|
125
|
+
data-testid="dock-volume-pop"
|
|
126
|
+
onPointerEnter={cancel}
|
|
127
|
+
onPointerLeave={leave}
|
|
128
|
+
>
|
|
129
|
+
<input
|
|
130
|
+
id={sliderId}
|
|
131
|
+
className="dock-volume"
|
|
132
|
+
type="range"
|
|
133
|
+
min={0}
|
|
134
|
+
max={1}
|
|
135
|
+
step={0.01}
|
|
136
|
+
value={volume}
|
|
137
|
+
// The filled level (timeline-meters.css): WebKit has no progress part.
|
|
138
|
+
style={{ "--fill": volume } as CSSProperties}
|
|
139
|
+
aria-label="Preview volume"
|
|
140
|
+
aria-valuetext={muted ? `${percent}%, muted` : `${percent}%`}
|
|
141
|
+
onChange={(e) => store.setPreviewVolume(Number(e.currentTarget.value))}
|
|
142
|
+
onPointerDown={() => {
|
|
143
|
+
dragging.current = true;
|
|
144
|
+
window.addEventListener(
|
|
145
|
+
"pointerup",
|
|
146
|
+
() => {
|
|
147
|
+
dragging.current = false;
|
|
148
|
+
},
|
|
149
|
+
{ once: true },
|
|
150
|
+
);
|
|
151
|
+
}}
|
|
152
|
+
// `DockZoom`'s reason: a focused range swallows the keymap, and Space
|
|
153
|
+
// is the key an author presses right after setting a level.
|
|
154
|
+
onPointerUp={(e) => e.currentTarget.blur()}
|
|
155
|
+
/>
|
|
156
|
+
<span className="dock-volume-value" aria-hidden="true">
|
|
157
|
+
{muted ? "Muted" : `${percent}%`}
|
|
158
|
+
</span>
|
|
159
|
+
</div>
|
|
160
|
+
</Popover>
|
|
161
|
+
</>
|
|
162
|
+
);
|
|
163
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// THE BEAT GRID: sound mode's ruler ticks and the "bar.beat" readout.
|
|
2
|
+
//
|
|
3
|
+
// Pure, and apart from SoundMode.tsx, because the timeline's ruler draws them
|
|
4
|
+
// with the shell while sound mode's lanes and mixer load when its view opens.
|
|
5
|
+
import type { Rational } from "@dailies-studio/engine";
|
|
6
|
+
import { beatFrames } from "@dailies-studio/shot/doc";
|
|
7
|
+
import type { Tempo3D } from "@dailies-studio/shot/doc";
|
|
8
|
+
|
|
9
|
+
/** Frames per beat. */
|
|
10
|
+
function beatStep(tempo: Tempo3D, fps: Rational): number {
|
|
11
|
+
return (60 * fps.num) / (fps.den * tempo.bpm);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* "bar.beat" at a MASTER frame, both 1-based: "3.2". The beat holding a frame
|
|
16
|
+
* is the last one whose rounded frame is at or before it, the same rounding
|
|
17
|
+
* `beatFrames` draws with, so the readout and the grid line agree.
|
|
18
|
+
*/
|
|
19
|
+
export function barBeatAt(tempo: Tempo3D, fps: Rational, frame: number): string {
|
|
20
|
+
const step = beatStep(tempo, fps);
|
|
21
|
+
if (!(step > 0)) return "1.1";
|
|
22
|
+
const perBar = Math.max(1, Math.trunc(tempo.beatsPerBar ?? 4));
|
|
23
|
+
// Math.round(x) <= f <=> x < f + 0.5, so the last beat n with
|
|
24
|
+
// start + n * step < f + 0.5.
|
|
25
|
+
const n = Math.ceil((frame - (tempo.startFrame ?? 0) + 0.5) / step) - 1;
|
|
26
|
+
const bar = Math.floor(n / perBar) + 1;
|
|
27
|
+
const beat = (((n % perBar) + perBar) % perBar) + 1;
|
|
28
|
+
return `${bar}.${beat}`;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface BeatTick {
|
|
32
|
+
/** LANE frame: master less the shot context's origin. */
|
|
33
|
+
frame: number;
|
|
34
|
+
/** 0 a labelled bar, 1 an unlabelled bar, 2 a beat. */
|
|
35
|
+
tier: 0 | 1 | 2;
|
|
36
|
+
label?: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The ruler's and the lanes' beat grid for `[origin, origin + extentF)`.
|
|
41
|
+
*
|
|
42
|
+
* Bars are labelled at a power-of-two stride so labels stay 32px apart, and
|
|
43
|
+
* beats are drawn only once they are 6px apart: a grid denser than that is a
|
|
44
|
+
* grey wash, not a grid.
|
|
45
|
+
*/
|
|
46
|
+
export function beatRulerTicks(
|
|
47
|
+
tempo: Tempo3D,
|
|
48
|
+
fps: Rational,
|
|
49
|
+
origin: number,
|
|
50
|
+
extentF: number,
|
|
51
|
+
ppf: number,
|
|
52
|
+
): BeatTick[] {
|
|
53
|
+
const step = beatStep(tempo, fps);
|
|
54
|
+
if (!(step > 0) || !(extentF > 0) || !(ppf > 0)) return [];
|
|
55
|
+
const perBar = Math.max(1, Math.trunc(tempo.beatsPerBar ?? 4));
|
|
56
|
+
const barPx = step * perBar * ppf;
|
|
57
|
+
let stride = 1;
|
|
58
|
+
while (stride * barPx < 32 && stride < 1 << 20) stride *= 2;
|
|
59
|
+
const showBeats = step * ppf >= 6;
|
|
60
|
+
// A bar line is drawn at all only when bars are 4px apart.
|
|
61
|
+
const showBars = barPx >= 4 || stride > 1;
|
|
62
|
+
const out: BeatTick[] = [];
|
|
63
|
+
for (const b of beatFrames(tempo, fps, origin, origin + extentF)) {
|
|
64
|
+
const lane = b.frame - origin;
|
|
65
|
+
if (b.bar) {
|
|
66
|
+
const bar = Math.floor(b.beat / perBar) + 1;
|
|
67
|
+
if ((bar - 1) % stride === 0) out.push({ frame: lane, tier: 0, label: String(bar) });
|
|
68
|
+
else if (showBars && barPx >= 8) out.push({ frame: lane, tier: 1 });
|
|
69
|
+
} else if (showBeats) {
|
|
70
|
+
out.push({ frame: lane, tier: 2 });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|