import { DrawMode } from '../enums';
import type { PolydrawConfig } from '../types/polydraw-interfaces';
import { EventManager } from './event-manager';
/**
 * Represents the current state of all user interactions in Polydraw
 */
export interface InteractionState {
    polygonDragging: boolean;
    markerDragging: boolean;
    edgeClicking: boolean;
    polygonClicking: boolean;
    canStartDrawing: boolean;
    canCompletePolygon: boolean;
    mapDragging: boolean;
    mapZooming: boolean;
    mapDoubleClickZoom: boolean;
    currentMode: DrawMode;
    isDrawingActive: boolean;
    isModifierKeyHeld: boolean;
    showCrosshairCursor: boolean;
    showDragCursor: boolean;
}
/**
 * Centralized manager for all interaction states in Polydraw.
 * Acts as a single source of truth for what interactions are enabled/disabled.
 */
export declare class ModeManager {
    private state;
    private config;
    private eventManager;
    constructor(config: PolydrawConfig, eventManager: EventManager);
    /**
     * Create the initial interaction state
     */
    private createInitialState;
    /**
     * Update the interaction state when the draw mode changes
     */
    updateStateForMode(mode: DrawMode): void;
    /**
     * Set interaction state for Off mode (normal editing)
     */
    private setOffModeState;
    /**
     * Set interaction state for drawing modes (Add, Subtract)
     */
    private setDrawingModeState;
    /**
     * Set interaction state for Point-to-Point mode
     */
    private setPointToPointModeState;
    /**
     * Update modifier key state
     */
    setModifierKeyState(isHeld: boolean): void;
    /**
     * Check if a specific action is currently allowed
     */
    canPerformAction(action: InteractionAction): boolean;
    /**
     * Check if any drawing mode is active
     */
    isInDrawingMode(): boolean;
    /**
     * Check if currently in Off mode (normal editing)
     */
    isInOffMode(): boolean;
    /**
     * Get the current draw mode
     */
    getCurrentMode(): DrawMode;
    /**
     * Get read-only access to the current state
     */
    getState(): Readonly<InteractionState>;
    /**
     * Check if crosshair cursor should be shown
     */
    shouldShowCrosshairCursor(): boolean;
    /**
     * Check if drag cursor should be shown
     */
    shouldShowDragCursor(): boolean;
    /**
     * Update configuration and recalculate state
     */
    updateConfig(config: PolydrawConfig): void;
}
/**
 * All possible interaction actions that can be checked
 */
export type InteractionAction = 'polygonDrag' | 'markerDrag' | 'edgeClick' | 'polygonClick' | 'startDrawing' | 'completePolygon' | 'mapDrag' | 'mapZoom' | 'mapDoubleClickZoom';
//# sourceMappingURL=mode-manager.d.ts.map