import { Component } from 'vue'; import { IEditorState, IGraphicElement, Point2D } from './base'; /** * 事件数据接口定义 */ export interface BaseEventData { timestamp?: number; source?: string; } export interface EditorLifecyclePayload { timestamp: number; source: string; } export interface ElementEventData extends BaseEventData { element: any; elementId: string; } export interface ElementRegisteredEventData extends BaseEventData { createElement: () => IGraphicElement; type: string; } export interface SelectionEventData extends BaseEventData { selection: Array; } export interface SelectionChangedPayload { elements: unknown[]; } export interface TransformEventData extends ElementEventData { oldState: any; newState: any; transformType: 'move' | 'rotate' | 'scale' | 'skew' | 'resize' | 'transform'; } export interface ElementUpdateEventData extends ElementEventData { updatedProperties: string[]; } export type ToolGroup = 'history' | 'tools' | 'actions'; export interface ToolEventData extends BaseEventData { toolName: string; render: () => Component; group?: ToolGroup; } export interface PluginEventData extends BaseEventData { plugin: any; } export interface PluginLoadedPayload extends BaseEventData { name: string; plugin: unknown; } export interface CommandEventData extends BaseEventData { command: any; } export interface HistoryEventData extends BaseEventData { canUndo: boolean; canRedo: boolean; undoDescription?: string; redoDescription?: string; } export interface ViewEventData extends BaseEventData { zoom: number; previousZoom?: number; viewport?: any; } export interface CreationEventData extends BaseEventData { element: any; toolName: string; startPoint: any; endPoint?: any; } export interface ErrorEventData extends BaseEventData { error: any; operation?: string; context?: any; } export interface PerformanceEventData extends BaseEventData { metric: string; value: number; threshold?: number; } export interface StateEventData extends BaseEventData { state: IEditorState; } export interface AlignEventData extends BaseEventData { alignment: 'left' | 'right' | 'top' | 'bottom' | 'centerX' | 'centerY'; elementIds: string[]; } export interface DistributeEventData extends BaseEventData { direction: 'horizontal' | 'vertical'; elementIds: string[]; } export interface LayerOrderEventData extends BaseEventData { elementId: string; direction: 'up' | 'down' | 'top' | 'bottom'; newOrder?: string[]; } export interface LayerOrderChangedPayload extends BaseEventData { elementIds: string[]; elementId?: string; direction?: 'up' | 'down' | 'top' | 'bottom'; newOrder?: string[]; } export interface LayerVisibilityChangedPayload extends BaseEventData { elementId: string; visible: boolean; } export interface BaseStageEventData extends BaseEventData { point: Point2D; target: any; currentTarget: any; pointerId: number; type: string; } export interface StageMouseEventData extends BaseStageEventData { evt: MouseEvent; } export interface StageDblClickEventData extends StageMouseEventData { element: IGraphicElement | null; elementId: string | null; } export interface StageKeyboardEventData extends BaseEventData { evt: KeyboardEvent; } export interface StatusEventData extends BaseEventData { status: IEditorState; } export interface ElementDragEventData extends BaseEventData { element: IGraphicElement; elementId: string; target: any; evt: MouseEvent | undefined; } export interface GraphicEventData extends BaseEventData { type: string; render: () => Component; iconComponent?: Component; typeDisplayName?: string; } export interface GraphicToolEventData extends BaseEventData { type: string; render: () => Component; } export interface PropertyPanelEventData extends BaseEventData { graphicTypes: string[]; render: () => Component; isCanvas: boolean; isPublic: boolean; } /** * 事件工具函数 */ export declare class EventUtils { /** * 生成自定义事件名(供插件使用) */ static createCustomEvent(pluginName: string, eventName: string): string; /** * 检查是否为自定义事件 */ static isCustomEvent(eventName: string): boolean; /** * 从自定义事件名解析插件名和事件名 */ static parseCustomEvent(eventName: string): { pluginName: string; eventName: string; } | null; /** * 创建基础事件数据 */ static createBaseEventData(source?: string): BaseEventData; }