/**
 * Macro Recorder
 *
 * Records, plays back, and manages keyboard macros.
 *
 * @since v1.58.2
 */
import type { Macro, MacroExportFormat, MacroLibrary, MacroPlaybackState, MacroRecorderConfig, MacroRecorderState, MacroStep } from './macro-types.js';
/**
 * Macro Recorder
 */
export declare class MacroRecorder {
    private config;
    private recorderState;
    private playbackState;
    private library;
    private playbackTimeoutId;
    private onRecorderStateChange?;
    private onPlaybackStateChange?;
    private onLibraryChange?;
    private onStepExecute?;
    constructor(config?: Partial<MacroRecorderConfig>, callbacks?: {
        onRecorderStateChange?: (state: MacroRecorderState) => void;
        onPlaybackStateChange?: (state: MacroPlaybackState) => void;
        onLibraryChange?: (library: MacroLibrary) => void;
        onStepExecute?: (step: MacroStep) => Promise<void>;
    });
    /**
     * Start recording a macro
     */
    startRecording(register: string): boolean;
    /**
     * Stop recording and save the macro
     */
    stopRecording(): Macro | null;
    /**
     * Cancel recording without saving
     */
    cancelRecording(): void;
    /**
     * Record a keypress
     */
    recordKeypress(key: string, modifiers?: ('ctrl' | 'alt' | 'shift' | 'meta')[]): void;
    /**
     * Record text input
     */
    recordInput(value: string, field?: string): void;
    /**
     * Record an action
     */
    recordAction(action: string, params?: Record<string, unknown>): void;
    /**
     * Record a wait step
     */
    recordWait(duration: number): void;
    /**
     * Play a macro from a register
     */
    playRegister(register: string, loops?: number): Promise<boolean>;
    /**
     * Play a macro
     */
    playMacro(macro: Macro, loops?: number): Promise<boolean>;
    /**
     * Execute the next step in playback
     */
    private executeNextStep;
    /**
     * Pause playback
     */
    pausePlayback(): void;
    /**
     * Resume playback
     */
    resumePlayback(): void;
    /**
     * Stop playback
     */
    stopPlayback(): void;
    /**
     * Set playback speed
     */
    setPlaybackSpeed(speed: number): void;
    /**
     * Save a macro to the library
     */
    saveMacro(macro: Macro): boolean;
    /**
     * Delete a macro from the library
     */
    deleteMacro(id: string): boolean;
    /**
     * Assign a macro to a register
     */
    assignToRegister(macroId: string, register: string): boolean;
    /**
     * Clear a register
     */
    clearRegister(register: string): void;
    /**
     * Get macro by ID
     */
    getMacro(id: string): Macro | undefined;
    /**
     * Get macro from register
     */
    getRegisterMacro(register: string): Macro | null;
    /**
     * Get all macros
     */
    getAllMacros(): Macro[];
    /**
     * Get last played macro
     */
    getLastPlayed(): Macro | undefined;
    /**
     * Export macros
     */
    export(macroIds?: string[]): MacroExportFormat;
    /**
     * Import macros
     */
    import(data: MacroExportFormat, overwrite?: boolean): {
        imported: number;
        errors: string[];
    };
    /**
     * Get recorder state
     */
    getRecorderState(): MacroRecorderState;
    /**
     * Get playback state
     */
    getPlaybackState(): MacroPlaybackState;
    /**
     * Get library
     */
    getLibrary(): MacroLibrary;
    /**
     * Check if recording
     */
    isRecording(): boolean;
    /**
     * Check if playing
     */
    isPlaying(): boolean;
    /**
     * Update configuration
     */
    updateConfig(config: Partial<MacroRecorderConfig>): void;
    /**
     * Check tier access
     */
    private isTierAllowed;
    private notifyRecorderStateChange;
    private notifyPlaybackStateChange;
    private notifyLibraryChange;
}
/**
 * Create a macro recorder instance
 */
export declare function createMacroRecorder(config?: Partial<MacroRecorderConfig>, callbacks?: {
    onRecorderStateChange?: (state: MacroRecorderState) => void;
    onPlaybackStateChange?: (state: MacroPlaybackState) => void;
    onLibraryChange?: (library: MacroLibrary) => void;
    onStepExecute?: (step: MacroStep) => Promise<void>;
}): MacroRecorder;
//# sourceMappingURL=macro-recorder.d.ts.map