import Konva from 'konva';
import { Clip as ClipType, ClipStateUpdate, TrackConfig, TimeMs, Theme, TrackType } from '../../core/models';
import { type TrackPointerOperation } from './trackInteractionState';
import type { MultiDragMoveRequest } from '../../core/tracks/timelineTrackBridge';
export declare class Track {
    private static readonly DEFAULT_DRAG_ACTIVATION_THRESHOLD;
    private static readonly DEFAULT_CLIP_SNAP_THRESHOLD;
    private static readonly AUTO_SCROLL_EDGE_THRESHOLD;
    private static readonly AUTO_SCROLL_MAX_SPEED;
    private layer;
    private trackGroup;
    private dragOverlayLayer;
    private dropPreviewGroup;
    private dropPreviewClips;
    private config;
    private theme;
    private trackType;
    private clips;
    private clipGroups;
    private zoom;
    private scrollLeft;
    private trackY;
    private trackHeight;
    private selectedClip;
    private hasSelectedClip;
    private selectedClipIds;
    private multiDragOriginalPositions;
    private promotedClipParents;
    private interactionState;
    private legacyInteractionSnapshot?;
    private isVisualUpdate;
    private onClipUpdate;
    private onClipAdd;
    private onClipRemove;
    private onClipSplit;
    private onClipSelect;
    private onTimeJump;
    private onClipOverlap?;
    private hasBoundGlobalPointerListenersForDrag;
    private hasLockedGlobalCursor;
    private edgeAutoScrollAnimationFrameId;
    private onHorizontalDragAutoScroll?;
    private onClipCrossTrackPreview?;
    private onClipCrossTrack?;
    private onClearDropPreview?;
    private onClearSelection?;
    private onSnapGuideChange?;
    private onClipToggleSelection?;
    private onSetSingleSelection?;
    private getMultiDragClipIds?;
    private onMultiDragMove?;
    private onMultiDragInteractionEnd?;
    private resolveSnapTargetClips?;
    private readonly dragActivationThreshold;
    private enableClipSnap;
    private readonly clipSnapThreshold;
    private handleGlobalPointerMove;
    private handleGlobalPointerEnd;
    private handleWindowBlur;
    get hasDragMoved(): boolean;
    set hasDragMoved(value: boolean);
    get activePointerOperation(): TrackPointerOperation | null;
    set activePointerOperation(value: TrackPointerOperation | null);
    get originalClipsState(): ClipType[];
    set originalClipsState(value: ClipType[]);
    get nonDraggedClips(): ClipType[];
    set nonDraggedClips(value: ClipType[]);
    get snapCandidateClips(): ClipType[];
    set snapCandidateClips(value: ClipType[]);
    get dragStartY(): number;
    set dragStartY(value: number);
    get dragTargetTrackY(): number;
    set dragTargetTrackY(value: number);
    get crossTrackDragOffsetY(): number;
    set crossTrackDragOffsetY(value: number);
    get crossTrackDragStartX(): number;
    set crossTrackDragStartX(value: number);
    get dragStartScrollLeft(): number;
    set dragStartScrollLeft(value: number);
    get dragGestureStartClientX(): number | null;
    set dragGestureStartClientX(value: number | null);
    get dragGestureStartClientY(): number | null;
    set dragGestureStartClientY(value: number | null);
    get lastDragClientX(): number | null;
    set lastDragClientX(value: number | null);
    get lastDragClientY(): number | null;
    set lastDragClientY(value: number | null);
    constructor(layer: Konva.Layer, config: TrackConfig, trackType: TrackType, zoom: number, trackY: number, trackHeight: number, theme: Theme, onClipUpdate: (clip: ClipType, originalClip?: ClipType, clipUpdates?: ClipStateUpdate[]) => void, onClipAdd: (clip: ClipType) => void, onClipRemove: (clipId: string) => void, onClipSplit: (clip1: ClipType, clip2: ClipType) => void, onClipSelect: (clip: ClipType) => void, onTimeJump: (time: TimeMs) => void, onHorizontalDragAutoScroll?: (nextScrollLeft: number) => number, onClipOverlap?: (clip: ClipType, currentTrackId: string) => void, onClipCrossTrackPreview?: (clip: ClipType, targetTrackY: number, currentTrackId: string) => 'self' | 'external' | 'clear', onClipCrossTrack?: (clip: ClipType, originalClip: ClipType | null, targetTrackY: number, currentTrackId: string) => boolean | void, onClearDropPreview?: () => void, onClearSelection?: () => void, onSnapGuideChange?: (guideTime: TimeMs | null) => void, onClipToggleSelection?: (clipId: string) => void, onSetSingleSelection?: (clipId: string) => void, getMultiDragClipIds?: (clipId: string) => string[] | null, onMultiDragMove?: (request: MultiDragMoveRequest) => boolean | void, onMultiDragInteractionEnd?: () => void, dragActivationThreshold?: number, enableClipSnap?: boolean, clipSnapThreshold?: number);
    private initClips;
    private getLegacyInteractionSnapshot;
    private ensureDropPreviewGroup;
    private createDropPreviewRect;
    private showDropPreview;
    private hideDropPreview;
    private initEventListeners;
    private bindGlobalPointerListenersForDrag;
    private unbindGlobalPointerListenersForDrag;
    private handleVisibilityChange;
    private readonly handleEdgeAutoScrollFrame;
    private handleTrackBackgroundClick;
    private handleTrackBackgroundMouseDown;
    private getClipDisplayLabel;
    private getClipAudioBadgeText;
    private isSourceBoundClip;
    updateClipSelection(clipId: string, isSelected: boolean): void;
    private createClipGroup;
    private handleClipClick;
    private handleClipMouseDown;
    private handleClipMouseMove;
    private handleTrackBackgroundMouseMove;
    private handleClipMouseUp;
    private finishPointerInteraction;
    private resolveDraggedClipForInteraction;
    private applyInteractionTransition;
    private resolveInteractionState;
    private syncLegacyInteractionMirror;
    private handleClipMoveEnd;
    private updateAllClips;
    private buildAndSendUpdates;
    private updateHoverCursor;
    private isDragSessionActive;
    private handleDragMove;
    private handleClipMouseLeave;
    private lockPointerCursor;
    private releasePointerCursor;
    private updateClipGroup;
    private handleClipUpdate;
    private handleClipSplit;
    addClip(clip: ClipType): void;
    removeClip(clipId: string): void;
    updateClip(clipId: string, updates: Partial<ClipType>): void;
    setZoom(zoom: number): void;
    setCurrentTime(_time: TimeMs): void;
    setScrollLeft(scrollLeft: number): void;
    private updateClipVisibility;
    private updateClipViewportState;
    setTrackY(trackY: number): void;
    setTrackStackOrder(order: number): void;
    setDragOverlayLayer(layer: Konva.Layer | null): void;
    setClipsDragOverlayActive(clipIds: string[], isActive: boolean): void;
    clearClipDragOverlay(): void;
    getTrackType(): TrackType;
    render(shouldBatchDraw?: boolean): void;
    private getTrackBackgroundFill;
    getClips(): ClipType[];
    getPrimarySelectedClip(): ClipType | null;
    clearSelection(): void;
    setSelection(clipIds: string[], preferredClipId?: string | null): void;
    private applySelectionVisual;
    private syncSelectionState;
    splitSelectedClip(time: TimeMs): void;
    removeClipGaps(): void;
    getTrackGroup(): Konva.Group;
    getId(): string;
    updateClipPosition(clipId: string, newStartTime: TimeMs, isFinal: boolean, previewOffsetY?: number): void;
    updateClipPositionFinal(clipId: string, newStartTime: TimeMs): void;
    setTrackHeight(height: number): void;
    showClipDropPreview(clip: ClipType): void;
    showClipDropPreviews(clips: ClipType[]): void;
    clearClipDropPreview(): void;
    getRole(): 'primary' | 'normal';
    setClipSnapEnabled(enabled: boolean): void;
    setSnapTargetResolver(resolver: (() => ClipType[]) | undefined): void;
    private updateDraggedClipFromPointer;
    private buildPreviewClip;
    private constrainResizePreviewToTrackBounds;
    private getResizeLeftBoundaryStart;
    private getResizeRightBoundaryEnd;
    private buildResizeLeftPreviewClip;
    private buildResizeRightPreviewClip;
    private applyClipSnap;
    private applyPreviewClipState;
    private setClipDragOverlayActive;
    private resolveClipRenderY;
    private getPromotedClipParents;
    private updateSnapGuideLine;
    private updateEdgeAutoScrollState;
    private calculateHorizontalAutoScrollVelocity;
    private startEdgeAutoScroll;
    private stopEdgeAutoScroll;
}
