/**
 * ToolCoordinator
 *
 * Manages z-index layering and visibility for floating tools.
 * Prevents conflicts between calculator, ruler, protractor, etc.
 *
 * Features:
 * - Centralized z-index management with defined layers
 * - Tool visibility state tracking
 * - Bring-to-front on interaction
 * - Framework-agnostic (works with any DOM element)
 *
 * Part of PIE Assessment Toolkit.
 */
import type { ToolCoordinatorApi, ToolState } from "./interfaces.js";
/**
 * Z-index layers for assessment components
 */
export declare enum ZIndexLayer {
    BASE = 0,// PIE content, player chrome (0-999)
    TOOL = 1000,// Non-modal tools (ruler, protractor) (1000-1999)
    MODAL = 2000,// Modal tools (calculator) (2000-2999)
    CONTROL = 3000,// Drag handles, resize controls (3000-3999)
    HIGHLIGHT = 4000
}
/**
 * Configuration for ToolCoordinator
 * Currently empty but allows future extension without breaking changes
 */
export type ToolCoordinatorConfig = Record<string, never>;
export declare class ToolCoordinator implements ToolCoordinatorApi {
    private config;
    private tools;
    private layerCounters;
    private listeners;
    constructor(config?: ToolCoordinatorConfig);
    /**
     * Subscribe to tool state changes
     * Returns unsubscribe function
     */
    subscribe(listener: () => void): () => void;
    /**
     * Notify all listeners of state change
     */
    private notifyListeners;
    /**
     * Register a tool with the coordinator
     *
     * @param id Unique tool identifier
     * @param name Display name
     * @param element DOM element for the tool (optional)
     * @param layer Z-index layer (defaults to MODAL)
     */
    registerTool(id: string, name: string, element?: HTMLElement, layer?: ZIndexLayer): void;
    /**
     * Unregister a tool
     *
     * @param id Tool identifier
     */
    unregisterTool(id: string): void;
    /**
     * Show a tool
     *
     * @param id Tool identifier
     */
    showTool(id: string): void;
    /**
     * Hide a tool
     *
     * @param id Tool identifier
     */
    hideTool(id: string): void;
    /**
     * Toggle tool visibility
     *
     * @param id Tool identifier
     */
    toggleTool(id: string): void;
    /**
     * Check if tool is visible
     *
     * @param id Tool identifier
     * @returns true if tool is visible
     */
    isToolVisible(id: string): boolean;
    /**
     * Bring element to front of its layer
     *
     * @param element DOM element to bring forward
     */
    bringToFront(element: HTMLElement): void;
    /**
     * Get all registered tool IDs
     */
    getRegisteredTools(): string[];
    /**
     * Get tool element by ID
     */
    getToolElement(id: string): HTMLElement | null;
    /**
     * Get next offset within a layer
     */
    private getNextLayerOffset;
    /**
     * Get maximum z-index currently in use in a layer
     */
    private getMaxZIndexInLayer;
    /**
     * Reset all tools to their base z-indices
     */
    resetZIndices(): void;
    /**
     * Update tool element reference
     *
     * @param id Tool identifier
     * @param element New DOM element
     */
    updateToolElement(id: string, element: HTMLElement): void;
    /**
     * Hide all tools
     */
    hideAllTools(): void;
    /**
     * Get tool state (interface method)
     *
     * @param id Tool identifier
     * @returns Tool state or undefined
     */
    getToolState(id: string): ToolState | undefined;
    /**
     * Get all visible tools (interface method)
     *
     * @returns Array of visible tool states
     */
    getVisibleTools(): ToolState[];
}
