import { BaseEventData, EditorLifecyclePayload, ElementDragEventData, ElementEventData, SelectionEventData, TransformEventData, ToolEventData, PluginEventData, PluginLoadedPayload, CommandEventData, HistoryEventData, ViewEventData, CreationEventData, ErrorEventData, PerformanceEventData, AlignEventData, DistributeEventData, LayerOrderEventData, LayerOrderChangedPayload, LayerVisibilityChangedPayload, ElementUpdateEventData, StageDblClickEventData, StageMouseEventData, StageKeyboardEventData, ElementRegisteredEventData, StatusEventData, GraphicEventData, GraphicToolEventData, PropertyPanelEventData } from './event-data'; /** * 编辑器事件映射接口 * @description 定义编辑器中所有可能的事件及其对应的负载类型。 * 每个事件名称映射到一个函数类型,该函数接受特定的事件数据作为参数。 * 通过使用此接口,可以实现类型安全的事件处理机制,确保在触发和监听事件时使用正确的数据类型。 * 拓展示例: * @example * ```typescript * declare module '@/types' { * interface EventMap { * yourType: (payload: YourEventData) => void * }} * - 然后你就可以这样使用它了: * - host.emit(yourType,(evt)=>{}) // evt 的类型被推断为 YourEventData * ``` * */ export interface EventMap { 'editor:ready': (payload: EditorLifecyclePayload) => void; 'editor:destroy': (payload: EditorLifecyclePayload) => void; 'editor:reset': (payload: EditorLifecyclePayload) => void; 'file:new': (payload: BaseEventData) => void; 'file:open': (payload: BaseEventData) => void; 'file:save': (payload: BaseEventData) => void; 'file:save-as': (payload: BaseEventData) => void; 'file:export': (payload: BaseEventData) => void; 'file:import': (payload: BaseEventData) => void; 'file:loaded': (payload: BaseEventData) => void; 'file:saved': (payload: BaseEventData) => void; 'file:modified-change': (payload: BaseEventData) => void; 'stage:mousedown': (payload: StageMouseEventData) => void; 'stage:mousemove': (payload: StageMouseEventData) => void; 'stage:mouseup': (payload: StageMouseEventData) => void; 'stage:click': (payload: StageMouseEventData) => void; 'stage:dblclick': (payload: StageDblClickEventData) => void; 'stage:contextmenu': (payload: StageMouseEventData) => void; 'stage:mouseenter': (payload: StageMouseEventData) => void; 'stage:mouseleave': (payload: StageMouseEventData) => void; 'stage:wheel': (payload: StageMouseEventData) => void; 'stage:dragstart': (payload: StageMouseEventData) => void; 'stage:dragend': (payload: StageMouseEventData) => void; 'stage:keydown': (payload: StageKeyboardEventData) => void; 'stage:keydown-delete': (payload: StageKeyboardEventData) => void; 'stage:keydown-left': (payload: StageKeyboardEventData) => void; 'stage:keydown-right': (payload: StageKeyboardEventData) => void; 'stage:keydown-up': (payload: StageKeyboardEventData) => void; 'stage:keydown-down': (payload: StageKeyboardEventData) => void; 'stage:redraw': (payload: BaseEventData) => void; 'tool:changed': (payload: ToolEventData) => void; 'tool:activated': (payload: ToolEventData) => void; 'tool:registered': (payload: ToolEventData) => void; 'tool:unregistered': (payload: ToolEventData) => void; 'element:registered': (payload: ElementRegisteredEventData) => void; 'element:unregistered': (payload: ElementRegisteredEventData) => void; 'element:added': (payload: ElementEventData) => void; 'element:removed': (payload: ElementEventData) => void; 'element:selected': (payload: ElementEventData) => void; 'element:deselected': (payload: ElementEventData) => void; 'element:transformed': (payload: TransformEventData) => void; 'element:updated': (payload: ElementUpdateEventData) => void; 'element:copied': (payload: ElementEventData) => void; 'element:pasted': (payload: ElementEventData) => void; 'element:cloned': (payload: ElementEventData) => void; 'element:locked-change': (payload: ElementEventData) => void; 'element:visibility-change': (payload: ElementEventData) => void; 'element:zindex-change': (payload: ElementEventData) => void; 'element:dragstart': (payload: ElementDragEventData) => void; 'element:dragmove': (payload: ElementDragEventData) => void; 'element:dragend': (payload: ElementDragEventData) => void; 'selection:changed': (payload: SelectionEventData) => void; 'selection:cleared': (payload: SelectionEventData) => void; 'selection:multi-change': (payload: SelectionEventData) => void; 'creation:started': (payload: CreationEventData) => void; 'creation:updated': (payload: CreationEventData) => void; 'creation:completed': (payload: CreationEventData) => void; 'creation:cancelled': (payload: CreationEventData) => void; 'view:zoom-change': (payload: ViewEventData) => void; 'view:pan': (payload: ViewEventData) => void; 'view:zoom-to-fit': (payload: ViewEventData) => void; 'view:reset': (payload: ViewEventData) => void; 'view:grid-visibility-change': (payload: ViewEventData) => void; 'view:snap-change': (payload: ViewEventData) => void; 'view:ruler-visibility-change': (payload: ViewEventData) => void; 'layer:added': (payload: BaseEventData) => void; 'layer:removed': (payload: BaseEventData) => void; 'layer:order-changed': (payload: LayerOrderChangedPayload) => void; 'layer:visibility-change': (payload: LayerVisibilityChangedPayload) => void; 'layer:locked-change': (payload: BaseEventData) => void; 'layer:active-change': (payload: BaseEventData) => void; 'command:executed': (payload: CommandEventData) => void; 'command:undone': (payload: CommandEventData) => void; 'command:redone': (payload: CommandEventData) => void; 'history:changed': (payload: HistoryEventData) => void; 'history:cleared': (payload: HistoryEventData) => void; 'plugin:registered': (payload: PluginEventData) => void; 'plugin:unregistered': (payload: PluginEventData) => void; 'plugin:activated': (payload: PluginEventData) => void; 'plugin:deactivated': (payload: PluginEventData) => void; 'plugin:loaded': (payload: PluginLoadedPayload) => void; 'plugin:error': (payload: ErrorEventData) => void; 'graphic:registered': (payload: GraphicEventData) => void; 'graphic:unregistered': (payload: GraphicEventData) => void; 'graphic-tool:registered': (payload: GraphicToolEventData) => void; 'graphic-tool:unregistered': (payload: GraphicToolEventData) => void; 'create-strategy:registered': (payload: BaseEventData) => void; 'create-strategy:unregistered': (payload: BaseEventData) => void; 'create-strategy:needs-register': (payload: BaseEventData) => void; 'property-panel:registered': (payload: PropertyPanelEventData) => void; 'property-panel:unregistered': (payload: PropertyPanelEventData) => void; 'property:value-change': (payload: BaseEventData) => void; 'property:batch-update-start': (payload: BaseEventData) => void; 'property:batch-update-end': (payload: BaseEventData) => void; 'elements:align': (payload: AlignEventData) => void; 'elements:distribute': (payload: DistributeEventData) => void; 'elements:group': (payload: BaseEventData) => void; 'elements:ungroup': (payload: BaseEventData) => void; 'elements:layer': (payload: LayerOrderEventData) => void; 'elements:reorder': (payload: LayerOrderEventData) => void; 'shortcut:triggered': (payload: BaseEventData) => void; 'shortcut:registered': (payload: BaseEventData) => void; 'shortcut:conflict': (payload: BaseEventData) => void; 'clipboard:copy': (payload: BaseEventData) => void; 'clipboard:paste': (payload: BaseEventData) => void; 'clipboard:cut': (payload: BaseEventData) => void; 'clipboard:clear': (payload: BaseEventData) => void; 'host:status-changed': (payload: StatusEventData) => void; 'host:status-saved': (payload: StatusEventData) => void; 'host:status-restored': (payload: StatusEventData) => void; 'editor:error': (payload: ErrorEventData) => void; 'operation:error': (payload: ErrorEventData) => void; 'resource:load-error': (payload: ErrorEventData) => void; 'plugin:load-error': (payload: ErrorEventData) => void; 'performance:warning': (payload: PerformanceEventData) => void; 'memory:warning': (payload: PerformanceEventData) => void; 'render:performance': (payload: PerformanceEventData) => void; 'host:load-json:start': (payload: BaseEventData) => void; 'host:load-json:complete': (payload: BaseEventData) => void; 'host:load-json:error': (payload: ErrorEventData) => void; 'host:to-json:start': (payload: BaseEventData) => void; 'host:to-json:complete': (payload: BaseEventData) => void; 'host:to-json:error': (payload: ErrorEventData) => void; 'collab:connected': (payload: BaseEventData) => void; 'collab:disconnected': (payload: BaseEventData) => void; 'collab:data-received': (payload: BaseEventData) => void; 'collab:operation-sync': (payload: BaseEventData) => void; 'custom:': (...args: any[]) => any; } /** 类型安全的事件总线实现示例,基于上面的 EventMap */ export declare class EventBus void; }> { private events; on(event: K, callback: T[K]): void; emit(event: K, payload: Parameters[0]): void; off(event: K, callback?: T[K]): void; }