import { Exec, int } from "@opendaw/lib-std";
import { ppqn } from "@opendaw/lib-dsp";
import { AnyRegionBoxAdapter, BoxAdapters, TrackBoxAdapter } from "@opendaw/studio-adapters";
import { RegionModifyStrategies } from "./RegionModifyStrategies";
import { ProjectApi } from "../../project";
import { TrackResolver } from "./TrackResolver";
/**
 * Resolver for "keep-existing" overlap behavior.
 * When overlap is detected, the INCOMING (selected/moved/copied) region moves to a track below.
 * Existing regions stay in place.
 */
export declare class RegionKeepExistingResolver {
    #private;
    /**
     * For selection-based operations (move, resize, copy).
     * Returns:
     * - postProcess: function to call AFTER changes are applied (handles moves)
     * - trackResolver: function to get target track for copies (use BEFORE creating copy)
     *
     * NOTE: Track resolution is lazy - target tracks are computed when trackResolver is called
     * or when postProcess runs. This is necessary because creating new tracks requires being
     * inside a transaction.
     */
    static fromSelection(tracks: ReadonlyArray<TrackBoxAdapter>, adapters: ReadonlyArray<AnyRegionBoxAdapter>, strategy: RegionModifyStrategies, deltaIndex: int, projectApi: ProjectApi, boxAdapters: BoxAdapters): {
        postProcess: Exec;
        trackResolver: TrackResolver;
    };
    /**
     * For range-based operations (drop, duplicate).
     * Returns the target track to use for creation (may be different from original if overlap exists).
     */
    static resolveTargetTrack(track: TrackBoxAdapter, position: ppqn, complete: ppqn, projectApi: ProjectApi, boxAdapters: BoxAdapters): TrackBoxAdapter;
}
//# sourceMappingURL=RegionKeepExistingResolver.d.ts.map