import type { Clip, TimeMs } from '../models/types';
import type Konva from 'konva';
import type { TimelineTrackView } from '../commands/timelineCommands';
export interface TimelineTrackCollectionItem extends TimelineTrackView {
    getRole?(): 'primary' | 'normal';
    showClipDropPreview?(clip: Clip): void;
    showClipDropPreviews?(clips: Clip[]): void;
    clearClipDropPreview?(): void;
    setCurrentTime?(time: TimeMs): void;
    setZoom?(zoom: number): void;
    setScrollLeft?(scrollLeft: number): void;
    setScrollTop?(scrollTop: number): void;
    updateClip?(clipId: string, updates: Partial<Clip>): void;
    updateClipPosition?(clipId: string, newStartTime: TimeMs, isFinal: boolean, previewOffsetY?: number): void;
    removeClipGaps?(): void;
    setSelection?(clipIds: string[], preferredClipId?: string | null): void;
    clearSelection?(): void;
    getPrimarySelectedClip?(): Clip | null;
    setTrackY?(y: number): void;
    setTrackStackOrder?(order: number): void;
    setTrackHeight?(height: number): void;
    setDragOverlayLayer?(layer: Konva.Layer | null): void;
    setClipsDragOverlayActive?(clipIds: string[], isActive: boolean): void;
    clearClipDragOverlay?(): void;
    getTrackGroup?(): {
        destroy(): void;
    };
}
export declare class TimelineTrackCollection {
    private readonly tracks;
    constructor(tracks: TimelineTrackCollectionItem[]);
    getAll(): TimelineTrackCollectionItem[];
    getDefaultTrack(): TimelineTrackCollectionItem | null;
    getPrimaryTrack(): TimelineTrackCollectionItem | null;
    getLastTrack(): TimelineTrackCollectionItem | null;
    add(track: TimelineTrackCollectionItem): void;
    findById(trackId: string): TimelineTrackCollectionItem | null;
    removeById(trackId: string): TimelineTrackCollectionItem | null;
    removeEmptyNonPrimaryTracks(): TimelineTrackCollectionItem[];
    findTrackByClipId(clipId: string): TimelineTrackCollectionItem | null;
    getAllClips(): Clip[];
    syncCurrentTime(time: TimeMs): void;
    syncZoom(zoom: number): void;
    syncScrollLeft(scrollLeft: number): void;
    syncScrollTop(scrollTop: number): void;
    updateClip(clipId: string, updates: Partial<Clip>): void;
    removeClip(clipId: string): void;
    addClipToTrack(trackId: string, clip: Clip): boolean;
    removeClipFromTrack(trackId: string, clipId: string): boolean;
    moveClipToTrack(clip: Clip, sourceTrackId: string, targetTrackId: string): boolean;
    removeClipGaps(): void;
    clearSelection(): void;
    syncSelection(clipIds: string[], preferredClipId?: string | null): void;
    findPrimarySelectedClip(): Clip | null;
    forEach(callback: (track: TimelineTrackCollectionItem) => void): void;
    private findIndexById;
    private resolveTrackId;
}
