/**
 * ViewerRegistry - Central registry for cell viewers
 * Manages viewer registration and retrieval with fallback support
 */
import type { CellViewer, CellViewerData, ViewerConstructor, ViewerFactory } from './types';
/**
 * Central registry for cell viewers
 * Uses singleton pattern to ensure consistent viewer management
 */
declare class ViewerRegistry {
    private static instance;
    /** Map of viewer type to viewer instance */
    private viewers;
    /** Default viewer type for fallback */
    private defaultViewerType;
    /** Whether the registry has been initialized */
    private initialized;
    /** Track warned types to avoid repeated console.warn */
    private warnedTypes;
    private constructor();
    /**
     * Get the singleton instance of ViewerRegistry
     */
    static getInstance(): ViewerRegistry;
    /**
     * Register a viewer for a specific type
     * @param type Viewer type identifier
     * @param viewer Viewer instance, constructor, or factory function
     */
    register<T extends CellViewerData>(type: string, viewer: CellViewer<T> | ViewerConstructor<T> | ViewerFactory<T>): void;
    /**
     * Register multiple viewers at once
     * @param viewers Object mapping types to viewers
     */
    registerAll(viewers: Record<string, CellViewer<any> | ViewerConstructor<any> | ViewerFactory<any>>): void;
    /**
     * Get a viewer by type
     * Falls back to default viewer if type is not found
     * @param type Viewer type identifier
     * @returns Viewer instance
     */
    get<T extends CellViewerData = CellViewerData>(type: string): CellViewer<T> | null;
    /**
     * Check if a viewer type is registered
     * @param type Viewer type identifier
     */
    has(type: string): boolean;
    /**
     * Get all registered viewer types
     */
    getRegisteredTypes(): string[];
    /**
     * Set the default viewer type for fallback
     * @param type Viewer type identifier
     */
    setDefaultViewerType(type: string): void;
    /**
     * Get the default viewer type
     */
    getDefaultViewerType(): string;
    /**
     * Unregister a viewer
     * @param type Viewer type identifier
     */
    unregister(type: string): boolean;
    /**
     * Clear all registered viewers
     */
    clear(): void;
    /**
     * Get viewer count
     */
    get size(): number;
}
export declare const getViewerRegistry: () => ViewerRegistry;
export default ViewerRegistry;
