import { Component } from 'vue'; import { EditorHost } from '../core'; export interface Point2D { x: number; y: number; } export interface Size2D { width: number; height: number; } export interface BoundingBox { x: number; y: number; width: number; height: number; } export interface IGraphicElement { id: string; type: string; x: number; y: number; width: number; height: number; rotation: number; scaleX: number; scaleY: number; visible: boolean; locked: boolean; draggable: boolean; resizable: boolean; zIndex: number; /** 元素自定义显示名称。空字符串/null 时回退到 layer-manager.getElementDisplayName 的自动命名逻辑。 */ displayName?: string | null; resizeAnchors?: string[] | null; getBoundingBox(): BoundingBox; clone(): IGraphicElement; serialize(): any; deserialize(data: any): void; updateProperty(host: EditorHost, property: string, oldValue: any, newValue: any): void; getTransformAttr?(event: any): { oldAttrs: any; newAttrs: any; }; } export interface IEditorPlugin { name: string; version: string; install(host: EditorHost): void; uninstall(): void; activate?(): void; deactivate?(): void; [key: string]: any; } export interface IEditorState { zoom: number; currentTool: string; snapToGrid: boolean; snapRotation: boolean; showGrid: boolean; width: number; height: number; wmm: number; hmm: number; dpm: number; } export interface IStageState { viewportWidth: number; viewportHeight: number; wrapperEl: HTMLElement | null; currentCursorMode: CursorMode; mouseStageX: number; mouseStageY: number; spacePressed: boolean; isPanning: boolean; offsetX: number; offsetY: number; autoFitPending: boolean; } export interface IToolbar { name: string; getComponent(): Component; } export type CursorMode = 'default' | 'hovering' | 'grab' | 'grabbing' | 'dragging';