summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/timeline/placement/insert-index.ts
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-07 04:41:27 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-07 04:41:27 +0200
commitcbd1b8212370c67b34a70dccd21bd82de72fead2 (patch)
treed97cbee2aae22c22b59c59a50e9f8a6af0ae8ccf /apps/web/src/lib/timeline/placement/insert-index.ts
parent4f7d401a974047d37673ee8e3840dceaaddc295c (diff)
downloadopencut-cbd1b8212370c67b34a70dccd21bd82de72fead2.tar.gz
refactor: structured track layout per scene
Diffstat (limited to 'apps/web/src/lib/timeline/placement/insert-index.ts')
-rw-r--r--apps/web/src/lib/timeline/placement/insert-index.ts33
1 files changed, 11 insertions, 22 deletions
diff --git a/apps/web/src/lib/timeline/placement/insert-index.ts b/apps/web/src/lib/timeline/placement/insert-index.ts
index fecb893a..04fa5a4a 100644
--- a/apps/web/src/lib/timeline/placement/insert-index.ts
+++ b/apps/web/src/lib/timeline/placement/insert-index.ts
@@ -1,44 +1,32 @@
-import type { TrackType, TimelineTrack } from "@/lib/timeline";
-import { isMainTrack } from "./main-track";
+import type { SceneTracks, TrackType } from "@/lib/timeline";
export function getDefaultInsertIndexForTrack({
tracks,
trackType,
}: {
- tracks: TimelineTrack[];
+ tracks: SceneTracks;
trackType: TrackType;
}): number {
if (trackType === "audio") {
- return tracks.length;
+ return tracks.overlay.length + 1 + tracks.audio.length;
}
if (trackType === "effect") {
return 0;
}
- const mainTrackIndex = tracks.findIndex((track) => isMainTrack(track));
- if (mainTrackIndex >= 0) {
- return mainTrackIndex;
- }
-
- const firstAudioTrackIndex = tracks.findIndex((track) => track.type === "audio");
- if (firstAudioTrackIndex >= 0) {
- return firstAudioTrackIndex;
- }
-
- return tracks.length;
+ return tracks.overlay.length;
}
export function getHighestInsertIndexForTrack({
tracks,
trackType,
}: {
- tracks: TimelineTrack[];
+ tracks: SceneTracks;
trackType: TrackType;
}): number {
- const mainTrackIndex = tracks.findIndex((track) => isMainTrack(track));
if (trackType === "audio") {
- return mainTrackIndex >= 0 ? mainTrackIndex + 1 : tracks.length;
+ return tracks.overlay.length + 1;
}
return 0;
@@ -50,12 +38,13 @@ export function resolvePreferredNewTrackPlacement({
preferredIndex,
direction,
}: {
- tracks: TimelineTrack[];
+ tracks: SceneTracks;
trackType: TrackType;
preferredIndex: number;
direction: "above" | "below";
}): { insertIndex: number; insertPosition: "above" | "below" | null } {
- if (tracks.length === 0) {
+ const trackCount = tracks.overlay.length + 1 + tracks.audio.length;
+ if (trackCount === 0) {
return {
insertIndex: 0,
insertPosition: trackType === "audio" ? "below" : null,
@@ -64,9 +53,9 @@ export function resolvePreferredNewTrackPlacement({
const safePreferredIndex = Math.min(
Math.max(preferredIndex, 0),
- tracks.length - 1,
+ trackCount - 1,
);
- const mainTrackIndex = tracks.findIndex((track) => isMainTrack(track));
+ const mainTrackIndex = tracks.overlay.length;
if (trackType === "audio") {
if (safePreferredIndex <= mainTrackIndex) {