@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
|
@@ -1,60 +1,124 @@
|
|
|
1
1
|
// The align/distribute grid, the first thing in Raylight's Position section.
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
3
|
+
// Two rows of five, one per axis: row 1 works on x (left, centre, right,
|
|
4
|
+
// distribute, flip horizontal), row 2 on y. Every tooltip names its key, so the
|
|
5
|
+
// grid teaches the chords.
|
|
5
6
|
//
|
|
6
7
|
// The icons are inline SVG rather than glyphs: the whole point of this control
|
|
7
8
|
// is that you recognise it without reading it, and no font ships a
|
|
8
9
|
// distribute-horizontally character.
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
10
|
+
import { useLocked } from "@dailies-studio/ui";
|
|
11
|
+
import { ALIGN_LABELS, DISTRIBUTE_MODES, MIN_DISTRIBUTE } from "@dailies-studio/shot/doc";
|
|
12
|
+
import type { AlignMode, FlipAxis } from "@dailies-studio/shot/doc";
|
|
11
13
|
import { useShotEditor, useStore } from "../../../state/context.js";
|
|
14
|
+
import { shortcutHint } from "../../../state/shortcuts.js";
|
|
12
15
|
import { useSelectedLayers } from "../useDocWrite.js";
|
|
13
16
|
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
/** Icon path per mode, the design's own 24-grid strokes: a rule for the edge
|
|
18
|
+
* or axis being matched and two bars that sit against it, or three bars for
|
|
19
|
+
* a distribution. `satisfies` so a new ALIGN_MODES entry without a row here is
|
|
20
|
+
* a compile error rather than a blank button. Drawn at this chrome's 1.5
|
|
21
|
+
* stroke (the design shows 1.4), so the grid reads as the same family as
|
|
22
|
+
* every other 24-grid glyph in the shot editor.
|
|
23
|
+
*
|
|
24
|
+
* The LABEL comes from `ALIGN_LABELS` in packages/shot: the app menu names
|
|
25
|
+
* these modes too, and a mode with two names is two controls the author
|
|
26
|
+
* cannot tell apart. */
|
|
27
|
+
const PATHS = {
|
|
28
|
+
left: "M5 3V21M8 7H20V10H8M8 14H16V17H8",
|
|
29
|
+
hcenter: "M12 3V21M5 7H19V10H5M8 14H16V17H8",
|
|
30
|
+
right: "M19 3V21M4 7H16V10H4M8 14H16V17H8",
|
|
31
|
+
top: "M3 5H21M7 8V20H10V8M14 8V16H17V8",
|
|
32
|
+
vcenter: "M3 12H21M7 5V19H10V5M14 8V16H17V8",
|
|
33
|
+
bottom: "M3 19H21M7 4V16H10V4M14 8V16H17V8",
|
|
34
|
+
hdistribute: "M3 4V20M21 4V20M7 8V16M12 5V19M17 8V16",
|
|
35
|
+
vdistribute: "M4 3H20M4 21H20M8 7H16M5 12H19M8 17H16",
|
|
36
|
+
} as const satisfies Record<AlignMode, string>;
|
|
37
|
+
|
|
38
|
+
/** The flip glyphs: a dashed mirror line between two facing triangles. */
|
|
39
|
+
const FLIP_PATHS = {
|
|
40
|
+
x: "M12 3V5M12 9V11M12 15V17M12 21V21M9 6L3 18H9ZM15 6L21 18H15Z",
|
|
41
|
+
y: "M3 12H5M9 12H11M15 12H17M21 12H21M6 9L18 3V9ZM6 15L18 21V15Z",
|
|
42
|
+
} as const satisfies Record<FlipAxis, string>;
|
|
43
|
+
|
|
44
|
+
const FLIP_LABELS = { x: "Flip horizontal", y: "Flip vertical" } as const satisfies Record<FlipAxis, string>;
|
|
45
|
+
|
|
46
|
+
type Cell = { kind: "align"; mode: AlignMode } | { kind: "flip"; axis: FlipAxis };
|
|
47
|
+
|
|
48
|
+
/** One row per axis. A new align mode has to be placed here by hand; the
|
|
49
|
+
* grid test counts the buttons. */
|
|
50
|
+
const ROWS: readonly (readonly Cell[])[] = (
|
|
51
|
+
[
|
|
52
|
+
["left", "hcenter", "right", "hdistribute", "x"],
|
|
53
|
+
["top", "vcenter", "bottom", "vdistribute", "y"],
|
|
54
|
+
] as const
|
|
55
|
+
).map((row) =>
|
|
56
|
+
row.map((id): Cell => (id === "x" || id === "y" ? { kind: "flip", axis: id } : { kind: "align", mode: id })),
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
function Glyph({ d }: { d: string }) {
|
|
60
|
+
return (
|
|
61
|
+
<svg
|
|
62
|
+
viewBox="0 0 24 24"
|
|
63
|
+
fill="none"
|
|
64
|
+
stroke="currentColor"
|
|
65
|
+
strokeWidth={1.5}
|
|
66
|
+
strokeLinecap="round"
|
|
67
|
+
strokeLinejoin="round"
|
|
68
|
+
aria-hidden="true"
|
|
69
|
+
>
|
|
70
|
+
<path d={d} />
|
|
71
|
+
</svg>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
26
74
|
|
|
27
75
|
export function AlignRow() {
|
|
28
76
|
const store = useStore();
|
|
29
77
|
const layers = useSelectedLayers();
|
|
30
78
|
const doc = useShotEditor((s) => s.doc);
|
|
79
|
+
// Every cell moves layers, so a viewer's panel disables the whole grid.
|
|
80
|
+
const locked = useLocked();
|
|
31
81
|
if (doc === null || layers.length === 0) return null;
|
|
32
82
|
|
|
33
83
|
return (
|
|
34
|
-
<div className="align-grid" role="group" aria-label="Align and
|
|
35
|
-
{
|
|
36
|
-
|
|
84
|
+
<div className="align-grid" role="group" aria-label="Align, distribute and flip" data-testid="align-row">
|
|
85
|
+
{ROWS.flat().map((cell) => {
|
|
86
|
+
if (cell.kind === "flip") {
|
|
87
|
+
const label = FLIP_LABELS[cell.axis];
|
|
88
|
+
return (
|
|
89
|
+
<button
|
|
90
|
+
key={`flip-${cell.axis}`}
|
|
91
|
+
type="button"
|
|
92
|
+
className="align-button"
|
|
93
|
+
aria-label={label}
|
|
94
|
+
title={`${label}${shortcutHint(`layer.flip.${cell.axis}`)}`}
|
|
95
|
+
disabled={locked}
|
|
96
|
+
onClick={() => store.flipSelection(cell.axis)}
|
|
97
|
+
>
|
|
98
|
+
<Glyph d={FLIP_PATHS[cell.axis]} />
|
|
99
|
+
</button>
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
const { mode } = cell;
|
|
37
103
|
// Distribute needs three. Disabled rather than hidden: a control that
|
|
38
104
|
// vanishes teaches nothing, and the tooltip says what is missing.
|
|
39
|
-
const needsThree =
|
|
105
|
+
const needsThree = DISTRIBUTE_MODES.has(mode) && layers.length < MIN_DISTRIBUTE;
|
|
106
|
+
const label = ALIGN_LABELS[mode];
|
|
40
107
|
return (
|
|
41
108
|
<button
|
|
42
109
|
key={mode}
|
|
43
110
|
type="button"
|
|
44
111
|
className="align-button"
|
|
45
|
-
aria-label={
|
|
46
|
-
title={
|
|
47
|
-
|
|
112
|
+
aria-label={label}
|
|
113
|
+
title={
|
|
114
|
+
needsThree
|
|
115
|
+
? `${label}: needs ${MIN_DISTRIBUTE} or more layers`
|
|
116
|
+
: `${label}${shortcutHint(`layout.align.${mode}`)}`
|
|
117
|
+
}
|
|
118
|
+
disabled={locked || needsThree}
|
|
48
119
|
onClick={() => store.alignSelection(mode)}
|
|
49
120
|
>
|
|
50
|
-
<
|
|
51
|
-
{spec.bar !== null && (
|
|
52
|
-
<rect x={spec.bar[0]} y={spec.bar[1]} width={spec.bar[2]} height={spec.bar[3]} className="align-icon-rule" />
|
|
53
|
-
)}
|
|
54
|
-
{spec.marks.map((m, i) => (
|
|
55
|
-
<rect key={i} x={m[0]} y={m[1]} width={m[2]} height={m[3]} rx="1" className="align-icon-box" />
|
|
56
|
-
))}
|
|
57
|
-
</svg>
|
|
121
|
+
<Glyph d={PATHS[mode]} />
|
|
58
122
|
</button>
|
|
59
123
|
);
|
|
60
124
|
})}
|
|
@@ -1,20 +1,105 @@
|
|
|
1
|
-
// Opacity, visibility and lock.
|
|
1
|
+
// Opacity, blur, visibility and lock.
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
3
|
+
// Visible and Locked read the whole selection. One that disagrees reads Mixed
|
|
4
|
+
// (a third state, not the first layer's), and a press turns the switch ON for
|
|
5
|
+
// every layer: the one policy every inspector switch keeps, so a Mixed row
|
|
6
|
+
// lands somewhere in one press.
|
|
7
|
+
import { useRef } from "react";
|
|
8
|
+
import { BLUR_PX_MAX, containerFrame } from "@dailies-studio/shot/doc";
|
|
9
|
+
import type { Doc3D, Layer3D } from "@dailies-studio/shot/doc";
|
|
6
10
|
import { InspectorRow, InspectorSection, NumberField, Toggle } from "@dailies-studio/ui";
|
|
7
|
-
import {
|
|
11
|
+
import type { ScrubHandlers } from "@dailies-studio/ui";
|
|
12
|
+
import { useStore } from "../../../state/context.js";
|
|
13
|
+
import { writeSelection } from "../../../state/fieldWrite.js";
|
|
14
|
+
import { authoringFrame } from "../../../state/viewMode.js";
|
|
15
|
+
import { KeyframeDot } from "../KeyframeDot.js";
|
|
16
|
+
import { useScrub, useSelectionValue, useSelectionWrite, useTransformWrite } from "../useDocWrite.js";
|
|
17
|
+
import { useTransformScrub } from "./TransformSection.js";
|
|
18
|
+
|
|
19
|
+
/** A typed or dragged radius held to the field's range, 0 for garbage. */
|
|
20
|
+
const clampBlur = (px: number): number => (Number.isFinite(px) ? Math.min(BLUR_PX_MAX, Math.max(0, px)) : 0);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* `layer` blurred by `px` (schema v47), clamped to the field's range. 0
|
|
24
|
+
* removes the field, so an unblurred layer keeps no step in the render plan,
|
|
25
|
+
* unless the layer keys `blurPx`: there 0 is a value to key, and a removed
|
|
26
|
+
* field would read to the router as the property gone, taking the animation
|
|
27
|
+
* with it. The same layer for a no-op, so a typed no-op costs no undo entry.
|
|
28
|
+
*/
|
|
29
|
+
export function withBlur(layer: Layer3D, px: number): Layer3D {
|
|
30
|
+
const next = clampBlur(px);
|
|
31
|
+
if (next === 0 && layer.tracks?.["blurPx"] === undefined) {
|
|
32
|
+
if (layer.blurPx === undefined) return layer;
|
|
33
|
+
const { blurPx: _sharp, ...rest } = layer;
|
|
34
|
+
return rest as Layer3D;
|
|
35
|
+
}
|
|
36
|
+
return layer.blurPx === next ? layer : { ...layer, blurPx: next };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The Blur field's write over `ids`, as ONE document change: `withBlur`
|
|
41
|
+
* through `writeSelection`, which keys a layer that animates `blurPx` at
|
|
42
|
+
* `frame` (Animate mode's keys included).
|
|
43
|
+
*/
|
|
44
|
+
export function writeBlur(
|
|
45
|
+
doc: Doc3D,
|
|
46
|
+
containerId: string,
|
|
47
|
+
ids: readonly string[],
|
|
48
|
+
px: number,
|
|
49
|
+
frame: number,
|
|
50
|
+
): { doc: Doc3D; refusal: string | null } {
|
|
51
|
+
const value = clampBlur(px);
|
|
52
|
+
return writeSelection(doc, containerId, ids, (layer) => withBlur(layer, value), frame);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** `writeBlur` over the LIVE selection at the frame the inspector writes at:
|
|
56
|
+
* `useSelectionWrite`'s and `useSelectionScrub`'s reads, with the blur's own
|
|
57
|
+
* write, and a refusal named once (at the commit, or the drag's release). */
|
|
58
|
+
function useBlurWrite(): { commit: (px: number) => void; scrub: ScrubHandlers } {
|
|
59
|
+
const store = useStore();
|
|
60
|
+
const refusal = useRef<string | null>(null);
|
|
61
|
+
const run = (doc: Doc3D, px: number): Doc3D => {
|
|
62
|
+
const s = store.getState();
|
|
63
|
+
const container = s.editingDef ?? s.sceneId;
|
|
64
|
+
if (container === null) return doc;
|
|
65
|
+
const out = writeBlur(doc, container, s.selection, px, containerFrame(doc, container, authoringFrame(s)));
|
|
66
|
+
refusal.current = out.refusal;
|
|
67
|
+
return out.doc;
|
|
68
|
+
};
|
|
69
|
+
const say = (ran: boolean): void => {
|
|
70
|
+
if (ran && refusal.current !== null) store.reportError(refusal.current);
|
|
71
|
+
refusal.current = null;
|
|
72
|
+
};
|
|
73
|
+
const scrub = useScrub((doc, raw) => run(doc, Number(raw)));
|
|
74
|
+
return {
|
|
75
|
+
commit: (px) => say(store.edit((doc) => run(doc, px))),
|
|
76
|
+
scrub: {
|
|
77
|
+
...scrub,
|
|
78
|
+
end: (commit) => {
|
|
79
|
+
scrub.end(commit);
|
|
80
|
+
say(commit);
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
8
85
|
|
|
9
86
|
export function AppearanceSection() {
|
|
10
87
|
const write = useSelectionWrite();
|
|
11
88
|
const writeTransform = useTransformWrite();
|
|
89
|
+
// Opacity is a TransformField, so its drag is the transform grid's drag — it
|
|
90
|
+
// just arrives as a PERCENT, which is why both halves divide by 100 rather
|
|
91
|
+
// than only the commit one.
|
|
92
|
+
const scrub = useTransformScrub("opacity");
|
|
12
93
|
const opacity = useSelectionValue((_l, effective) => Math.round(effective.opacity * 100));
|
|
94
|
+
// The resolved radius, so a keyed blur reads the value at the playhead.
|
|
95
|
+
const blur = useSelectionValue((layer) => layer.blurPx ?? 0);
|
|
96
|
+
const blurWrite = useBlurWrite();
|
|
97
|
+
const blurScrub = blurWrite.scrub;
|
|
13
98
|
const hidden = useSelectionValue((layer) => layer.hidden === true);
|
|
14
99
|
const locked = useSelectionValue((layer) => layer.locked === true);
|
|
15
100
|
|
|
16
101
|
return (
|
|
17
|
-
<InspectorSection title="Appearance" persistKey="shot:appearance">
|
|
102
|
+
<InspectorSection className="insp-object" title="Appearance" persistKey="shot:appearance">
|
|
18
103
|
<InspectorRow>
|
|
19
104
|
<NumberField
|
|
20
105
|
value={opacity.value ?? 100}
|
|
@@ -25,23 +110,47 @@ export function AppearanceSection() {
|
|
|
25
110
|
min={0}
|
|
26
111
|
max={100}
|
|
27
112
|
step={1}
|
|
113
|
+
trailing={<KeyframeDot path="transform.opacity" />}
|
|
28
114
|
onCommit={(next) => writeTransform("opacity", next / 100)}
|
|
115
|
+
onScrubStart={scrub.start}
|
|
116
|
+
onScrub={(next) => scrub.move(next / 100)}
|
|
117
|
+
onScrubEnd={scrub.end}
|
|
118
|
+
/>
|
|
119
|
+
</InspectorRow>
|
|
120
|
+
<InspectorRow>
|
|
121
|
+
<NumberField
|
|
122
|
+
value={blur.value ?? 0}
|
|
123
|
+
mixed={blur.mixed}
|
|
124
|
+
label="Blur"
|
|
125
|
+
ariaLabel="Blur"
|
|
126
|
+
unit="px"
|
|
127
|
+
title="A gaussian blur of the whole layer, children included: the radius in design px"
|
|
128
|
+
min={0}
|
|
129
|
+
max={BLUR_PX_MAX}
|
|
130
|
+
step={1}
|
|
131
|
+
trailing={<KeyframeDot path="blurPx" />}
|
|
132
|
+
onCommit={blurWrite.commit}
|
|
133
|
+
onScrubStart={blurScrub.start}
|
|
134
|
+
onScrub={blurScrub.move}
|
|
135
|
+
onScrubEnd={blurScrub.end}
|
|
29
136
|
/>
|
|
30
137
|
</InspectorRow>
|
|
31
138
|
<InspectorRow label="Visible">
|
|
32
139
|
<Toggle
|
|
33
140
|
checked={hidden.value !== true}
|
|
141
|
+
mixed={hidden.mixed}
|
|
34
142
|
ariaLabel="Visible"
|
|
35
143
|
onChange={(next) => write((layer) => ({ ...layer, hidden: !next }))}
|
|
36
144
|
/>
|
|
37
145
|
</InspectorRow>
|
|
38
146
|
<InspectorRow label="Locked">
|
|
39
|
-
{/*
|
|
40
|
-
|
|
147
|
+
{/* Visible and Locked are the two fields `lockRefuses` lets through,
|
|
148
|
+
so both work on a locked layer. */}
|
|
41
149
|
<Toggle
|
|
42
150
|
checked={locked.value === true}
|
|
151
|
+
mixed={locked.mixed}
|
|
43
152
|
ariaLabel="Locked"
|
|
44
|
-
onChange={(next) => write((layer) => ({ ...layer, locked: next })
|
|
153
|
+
onChange={(next) => write((layer) => ({ ...layer, locked: next }))}
|
|
45
154
|
/>
|
|
46
155
|
</InspectorRow>
|
|
47
156
|
</InspectorSection>
|