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; /** * 是否正在拖拽或调整大小 */ get isDraggingOrResizing(): Ref; /** * 获取 Nimbus 控制器 */ get nimbus(): NimbusController; /** * Nimbus 是否最小化 */ get nimbusMinimized(): Ref; /** * 获取面板控制器 */ get panel(): PanelController; /** * 面板是否可见 */ get panelVisible(): Ref; /** * 获取组件状态 */ get state(): ComponentManagerState; /** * 折叠侧面板并恢复容器到收起布局 * * 代理调用容器的 collapseSidePanel,与 toggleCompression 模式一致。 */ collapseSidePanel(): void; /** * 销毁管理器 */ destroy(): void; /** * 发射事件 * @param event 事件名称 * @param data 事件数据 */ emit(event: T, data: InternalEventData[T]): void; /** * 发射内部事件(别名,用于语义清晰) * 用于转发子组件事件 */ emitInternal(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(event: T, callback?: EventCallback): void; /** * 订阅事件 * @param event 事件名称 * @param callback 回调函数 * @returns 取消订阅函数 */ on(event: T, callback: EventCallback): () => void; /** * 订阅一次性事件(触发后自动取消订阅) * @param event 事件名称 * @param callback 回调函数 * @returns 取消订阅函数 */ once(event: T, callback: EventCallback): () => void; /** * 恢复 Nimbus */ restoreNimbus(): void; /** * 设置压缩状态(用于状态同步,不触发实际压缩操作) */ setCompressed(value: boolean): void; /** * 设置容器引用 * 用于 ComponentManager 直接调用容器的压缩/侧面板方法 */ setContainerRef(ref: null | { collapseSidePanel?: () => void; expandForSidePanel?: (extraWidth: number) => void; isCompressed?: { value: boolean; }; isSidePanelExpanded?: Ref; 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