import type { Layer } from "../board/Layer"; import type { ShapeType } from "../shape/ShapeEnum"; import type { IShapeData } from "../shape/base/IShapeData"; import type { ToolType } from "../tools/ToolEnum"; import { IRect } from "../utils"; import type { EventEnum } from "./EventType"; export namespace Events { export interface IOperatorDetail { operator: string; } export interface IShapesDetail extends IOperatorDetail { shapeDatas: IShapeData[]; } export interface IShagesDetail> extends IOperatorDetail { shapeType: ShapeType; shapeDatas: [T, T][]; } export interface IAnyShagesDetail extends IOperatorDetail { tool: ToolType, shapeDatas: (readonly [Partial, Partial])[]; } export interface ILayerDetail extends IOperatorDetail { layer: Layer } export interface IShapeGeoData { i: string; x?: number; y?: number; w?: number; h?: number; r?: number; } export function pickShapePosData(data: IShapeData): IShapeGeoData { return { i: data.i, x: data.x, y: data.y, } } export function pickShapeGeoData(data: IShapeData): IShapeGeoData { return { i: data.i, x: data.x, y: data.y, w: data.w, h: data.h, r: data.r } } export interface IToolChangedDetail { operator: string; from?: ToolType; to?: ToolType; } export interface IRectChangeDetail { form: IRect; to: IRect; } export interface EventDetailMap { [EventEnum.ShapesAdded]: IShapesDetail; [EventEnum.ShapesRemoved]: IShapesDetail; [EventEnum.ShapesChanging]: IShagesDetail; [EventEnum.ShapesChanged]: IShagesDetail; [EventEnum.ShapesDone]: IShapesDetail; [EventEnum.ShapesGeoChanging]: IAnyShagesDetail; [EventEnum.ShapesGeoChanged]: IAnyShagesDetail; [EventEnum.ToolChanged]: IToolChangedDetail; [EventEnum.LayerAdded]: ILayerDetail; [EventEnum.LayerRemoved]: ILayerDetail; [EventEnum.ShapesSelected]: IShapesDetail; [EventEnum.ShapesDeselected]: IShapesDetail; [EventEnum.WorldRectChanged]: IRectChangeDetail; [EventEnum.ViewportChanged]: IRectChangeDetail; } export interface EventMap extends HTMLElementEventMap { [EventEnum.ShapesAdded]: CustomEvent; [EventEnum.ShapesRemoved]: CustomEvent; [EventEnum.ShapesChanging]: CustomEvent; [EventEnum.ShapesChanged]: CustomEvent; [EventEnum.ShapesDone]: CustomEvent; [EventEnum.ShapesGeoChanging]: CustomEvent; [EventEnum.ShapesGeoChanged]: CustomEvent; [EventEnum.ToolChanged]: CustomEvent; [EventEnum.LayerAdded]: CustomEvent; [EventEnum.LayerRemoved]: CustomEvent; [EventEnum.ShapesSelected]: CustomEvent; [EventEnum.ShapesDeselected]: CustomEvent; [EventEnum.WorldRectChanged]: CustomEvent; [EventEnum.ViewportChanged]: CustomEvent; } }