fix(studio): harden composition timeline reliability (#2615)

* fix(studio): preserve composition playback continuity

* feat(studio): drag compositions into the timeline

* fix(studio): collapse expanded composition move aliases

* fix(studio): make timeline cuts atomic

* fix(studio): group inspector gesture history

* test(studio): cover masked text selection

* fix(studio): harden composition timeline reliability

* fix(studio): satisfy CI source gates

* fix(studio): harden composition mutation requests
This commit is contained in:
Miguel Ángel
2026-07-17 14:15:30 -04:00
committed by GitHub
parent 2be8a62c00
commit 2b65b4efce
93 changed files with 3925 additions and 758 deletions
@@ -42,6 +42,10 @@ export interface EditorShellProps extends TimelineEditCallbackDeps {
blockName: string,
placement: TimelineDropPlacement,
) => Promise<void> | void;
handleTimelineCompositionDrop?: (
sourcePath: string,
placement: TimelineDropPlacement,
) => Promise<void> | void;
handlePreviewBlockDrop?: (
blockName: string,
position: { left: number; top: number },
@@ -72,6 +76,7 @@ export function EditorShell({
handleTimelineElementDelete,
handleTimelineAssetDrop,
handleTimelineBlockDrop,
handleTimelineCompositionDrop,
handlePreviewBlockDrop,
handleTimelineFileDrop,
handleTimelineElementMove,
@@ -140,6 +145,7 @@ export function EditorShell({
onFileDrop={handleTimelineFileDrop}
onAssetDrop={handleTimelineAssetDrop}
onBlockDrop={handleTimelineBlockDrop}
onCompositionDrop={handleTimelineCompositionDrop}
onDeleteElement={handleTimelineElementDelete}
previewOverlay={
<PreviewOverlays
@@ -174,6 +180,10 @@ interface EditorShellBodyProps {
onFileDrop: (files: File[], placement?: TimelineDropPlacement) => Promise<void> | void;
onAssetDrop: (assetPath: string, placement: TimelineDropPlacement) => Promise<void> | void;
onBlockDrop?: (blockName: string, placement: TimelineDropPlacement) => Promise<void> | void;
onCompositionDrop?: (
sourcePath: string,
placement: TimelineDropPlacement,
) => Promise<void> | void;
onDeleteElement: (element: TimelineElement) => Promise<void> | void;
}
@@ -189,6 +199,7 @@ function EditorShellBody({
onFileDrop,
onAssetDrop,
onBlockDrop,
onCompositionDrop,
onDeleteElement,
}: EditorShellBodyProps) {
const { compositionStack, updateCompositionStack, containerRef } = useNLEContext();
@@ -233,6 +244,7 @@ function EditorShellBody({
onFileDrop={onFileDrop}
onAssetDrop={onAssetDrop}
onBlockDrop={onBlockDrop}
onCompositionDrop={onCompositionDrop}
onDeleteElement={onDeleteElement}
onSelectTimelineElement={onSelectTimelineElement}
timelineFooter={