From ac43a5a73fa905cdac905bc956763b6093d6738e Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 15 Apr 2026 05:43:29 +0200 Subject: feat: move/resize multiple elements --- apps/web/src/lib/timeline/snap-utils.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'apps/web/src/lib/timeline/snap-utils.ts') diff --git a/apps/web/src/lib/timeline/snap-utils.ts b/apps/web/src/lib/timeline/snap-utils.ts index c1768deb..b2be95a9 100644 --- a/apps/web/src/lib/timeline/snap-utils.ts +++ b/apps/web/src/lib/timeline/snap-utils.ts @@ -22,6 +22,7 @@ export function findSnapPoints({ tracks, playheadTime, excludeElementId, + excludeElementIds, bookmarks = [], excludeBookmarkTime, enableElementSnapping = true, @@ -32,6 +33,7 @@ export function findSnapPoints({ tracks: SceneTracks; playheadTime: number; excludeElementId?: string; + excludeElementIds?: Set; bookmarks?: Array; excludeBookmarkTime?: number; enableElementSnapping?: boolean; @@ -41,10 +43,14 @@ export function findSnapPoints({ }): SnapPoint[] { const snapPoints: SnapPoint[] = []; const orderedTracks = [...tracks.overlay, tracks.main, ...tracks.audio]; + const blockedElementIds = new Set(excludeElementIds); + if (excludeElementId) { + blockedElementIds.add(excludeElementId); + } for (const track of orderedTracks) { for (const element of track.elements) { - if (element.id === excludeElementId) continue; + if (blockedElementIds.has(element.id)) continue; if (enableElementSnapping) { snapPoints.push( @@ -136,6 +142,7 @@ export function snapElementEdge({ playheadTime, zoomLevel, excludeElementId, + excludeElementIds, snapToStart = true, bookmarks = [], }: { @@ -145,6 +152,7 @@ export function snapElementEdge({ playheadTime: number; zoomLevel: number; excludeElementId?: string; + excludeElementIds?: Set; snapToStart?: boolean; bookmarks?: Array; }): SnapResult { @@ -152,6 +160,7 @@ export function snapElementEdge({ tracks, playheadTime, excludeElementId, + excludeElementIds, bookmarks, }); -- cgit v1.3.1