import { type Ref } from 'vue';
import type { EventCallback, InternalEvent, InternalEventData } from './event-types';
import type { ComponentManagerConfig, ComponentManagerState, ContainerController, IShortcut, NimbusController, PanelController, PositionAndSize } from './types';
/**
 * 组件管理器
 *
 * 负责协调各子组件之间的通信和状态管理，遵循单一职责原则。
 *
 * 职责：
 * 1. UI 状态管理 - 面板、Nimbus、拖拽、压缩等状态
 * 2. 统一事件系统 - 提供 on/off/emit/once 方法，管理所有内部事件
 * 3. 组件协调 - 协调各子组件之间的交互
 *
 * 事件系统：
 * - 使用内置的 listeners Map 管理所有事件
 * - 支持一次性事件监听 (once)
 * - 通过 useEventBridge 自动桥接到 Vue emit
 */
export declare class ComponentManager {
    private _isCompressed;
    private _isDraggingOrResizing;
    private _nimbusMinimized;
    private _panelVisible;
    private _positionAndSize;
    private cleanupFunctions;
    private config;
    private containerRef;
    private debugMode;
    private listeners;
    private onceListeners;
    constructor(config?: ComponentManagerConfig);
    /**
     * 获取容器控制器
     */
    get container(): ContainerController;
    /**
     * 是否压缩状态
     */
    get isCompressed(): Ref<boolean>;
    /**
     * 是否正在拖拽或调整大小
     */
    get isDraggingOrResizing(): Ref<boolean>;
    /**
     * 获取 Nimbus 控制器
     */
    get nimbus(): NimbusController;
    /**
     * Nimbus 是否最小化
     */
    get nimbusMinimized(): Ref<boolean>;
    /**
     * 获取面板控制器
     */
    get panel(): PanelController;
    /**
     * 面板是否可见
     */
    get panelVisible(): Ref<boolean>;
    /**
     * 获取组件状态
     */
    get state(): ComponentManagerState;
    /**
     * 折叠侧面板并恢复容器到收起布局
     *
     * 代理调用容器的 collapseSidePanel，与 toggleCompression 模式一致。
     */
    collapseSidePanel(): void;
    /**
     * 销毁管理器
     */
    destroy(): void;
    /**
     * 发射事件
     * @param event 事件名称
     * @param data 事件数据
     */
    emit<T extends InternalEvent>(event: T, data: InternalEventData[T]): void;
    /**
     * 发射内部事件（别名，用于语义清晰）
     * 用于转发子组件事件
     */
    emitInternal<T extends InternalEvent>(event: T, data: InternalEventData[T]): void;
    /**
     * 为侧面板展开扩展容器宽度
     *
     * 代理调用容器的 expandForSidePanel，与 toggleCompression 模式一致。
     *
     * @param extraWidth 首次展开时需要增加的宽度（像素）
     */
    expandForSidePanel(extraWidth: number): void;
    /**
     * 获取配置
     */
    getConfig(): ComponentManagerConfig;
    /**
     * 获取所有已注册的事件列表
     */
    getRegisteredEvents(): InternalEvent[];
    /**
     * 处理拖拽中
     */
    handleDragging(position: PositionAndSize): void;
    /**
     * 处理拖拽停止
     */
    handleDragStop(position: PositionAndSize): void;
    /**
     * 处理 Nimbus 点击
     */
    handleNimbusClick(): void;
    /**
     * 处理 Popup 点击
     */
    handlePopupClick(): void;
    /**
     * 处理 Popup 快捷方式点击
     */
    handlePopupShortcutClick(shortcut: IShortcut): void;
    /**
     * 处理调整大小停止
     */
    handleResizeStop(position: PositionAndSize): void;
    /**
     * 处理调整大小中
     */
    handleResizing(position: PositionAndSize): void;
    /**
     * 处理快捷方式点击
     */
    handleShortcutClick(shortcut: IShortcut, source: 'main' | 'popup'): void;
    /**
     * 检查是否有指定事件的监听器
     * @param event 事件名称
     */
    hasListeners(event: InternalEvent): boolean;
    /**
     * 隐藏面板
     */
    hidePanel(): void;
    /**
     * 获取指定事件的监听器数量
     * @param event 事件名称
     */
    listenerCount(event: InternalEvent): number;
    /**
     * 最小化 Nimbus
     */
    minimizeNimbus(): void;
    /**
     * 取消订阅事件
     * @param event 事件名称
     * @param callback 回调函数（可选，如果不提供则移除所有该事件的监听器）
     */
    off<T extends InternalEvent>(event: T, callback?: EventCallback<T>): void;
    /**
     * 订阅事件
     * @param event 事件名称
     * @param callback 回调函数
     * @returns 取消订阅函数
     */
    on<T extends InternalEvent>(event: T, callback: EventCallback<T>): () => void;
    /**
     * 订阅一次性事件（触发后自动取消订阅）
     * @param event 事件名称
     * @param callback 回调函数
     * @returns 取消订阅函数
     */
    once<T extends InternalEvent>(event: T, callback: EventCallback<T>): () => void;
    /**
     * 恢复 Nimbus
     */
    restoreNimbus(): void;
    /**
     * 设置压缩状态（用于状态同步，不触发实际压缩操作）
     */
    setCompressed(value: boolean): void;
    /**
     * 设置容器引用
     * 用于 ComponentManager 直接调用容器的压缩/侧面板方法
     */
    setContainerRef(ref: null | {
        collapseSidePanel?: () => void;
        expandForSidePanel?: (extraWidth: number) => void;
        isCompressed?: {
            value: boolean;
        };
        isSidePanelExpanded?: Ref<boolean>;
        positionAndSize?: {
            value: PositionAndSize;
        };
        toggleCompression: () => void;
        updatePosition?: (x: number, y: number) => void;
        updatePositionAndSize?: (x: number, y: number, w: number, h: number) => void;
        updateSize?: (w: number, h: number) => void;
    }): void;
    /**
     * 设置调试模式
     * @param enabled 是否启用调试模式
     */
    setDebugMode(enabled: boolean): void;
    /**
     * 设置拖拽/调整大小状态
     */
    setDraggingOrResizing(value: boolean): void;
    /**
     * 显示面板
     */
    showPanel(sessionCode?: string): void;
    /**
     * 切换压缩状态
     *
     * 如果已设置容器引用，会调用容器的实际压缩方法。
     * 否则只更新内部状态（用于状态同步）。
     */
    toggleCompression(): void;
    /**
     * 切换 Nimbus 最小化状态
     */
    toggleNimbus(): void;
    /**
     * 切换面板显示状态
     */
    togglePanel(): void;
    /**
     * 更新位置
     */
    updatePosition(x: number, y: number): void;
    /**
     * 同时更新位置和大小
     */
    updatePositionAndSize(x: number, y: number, width: number, height: number): void;
    /**
     * 更新大小
     */
    updateSize(width: number, height: number): void;
}
/**
 * 创建组件管理器
 */
export declare function createComponentManager(config: ComponentManagerConfig): ComponentManager;
//# sourceMappingURL=component-manager.d.ts.map