/**
 * Contains classes for Reaper regions
 * @module
 */
import { INotifyPropertyChanged } from './Notify';
import { ReaperOscEvent } from './Client/Events';
import { ReaperOscCommand } from './Client/Commands';
declare type SendCommand = (command: ReaperOscCommand) => void;
/** A region in the current device region bank */
export declare class Region implements INotifyPropertyChanged {
    readonly slotIndex: number;
    private readonly _send;
    private _name;
    /** The user-assigned region number (as shown in Reaper's UI), or empty string if not yet populated */
    private _number;
    private _time;
    private _length;
    /**
     * @param slotIndex The 1-based slot index within the current device region bank
     * @param send A callback used to send typed commands to Reaper
     */
    constructor(slotIndex: number, _send: SendCommand);
    /** The region's name */
    get name(): string;
    /**
     * The user-assigned region number (as shown in Reaper's UI).
     * This is a string because Reaper sends it as a string (e.g. "1", "2").
     * Empty string if not yet populated.
     */
    get number(): string;
    /** The region's start time in seconds */
    get time(): number;
    /** The region's length in seconds */
    get length(): number;
    /**
     * Handle a typed incoming event
     * @param event The event to handle
     */
    handleEvent(event: ReaperOscEvent): void;
    onPropertyChanged(property: string, callback: () => void): () => void;
    /**
     * Rename this region. Uses write-by-ID: the user-assigned region number from {@link number}.
     * @param name The new name for the region
     */
    rename(name: string): void;
    /**
     * Move this region to a new start time. Uses write-by-ID.
     * Note: moving a region may change its bank slot index on the next sync.
     * @param time The new start time in seconds
     */
    setTime(time: number): void;
    /**
     * Set the length of this region. Uses write-by-ID.
     * @param length The new length in seconds
     */
    setLength(length: number): void;
    /**
     * Change the user-assigned number of this region. Uses write-by-ID.
     * @param number The new user-assigned region number
     */
    setNumber(number: number): void;
}
/** The most recently entered region during playback */
export declare class LastRegion implements INotifyPropertyChanged {
    private _name;
    private _number;
    private _time;
    private _length;
    /** The region's name */
    get name(): string;
    /**
     * The user-assigned region number (as shown in Reaper's UI).
     * Empty string if no region has been entered yet.
     */
    get number(): string;
    /** The region's start time in seconds */
    get time(): number;
    /** The region's length in seconds */
    get length(): number;
    /**
     * Handle a typed incoming event
     * @param event The event to handle
     */
    handleEvent(event: ReaperOscEvent): void;
    onPropertyChanged(property: string, callback: () => void): () => void;
}
export {};
