import { metas as fMetas } from './shape' import type { BoardData, BoardShapeData } from 'api' import type { Emitter } from 'mitt' import { brokenLine, text, table, rect, circular, arrow, icon, cigarette, fireoint, footPrint, shoePrint, fingerPrint, corpse, theBlood, compass, title, bgImage } from './shape' type Metas = typeof fMetas export type ShapeType = brokenLine | text | table | rect | circular | arrow | icon | cigarette | fireoint | footPrint | shoePrint | fingerPrint | corpse | theBlood | compass | title | bgImage export type MetaShapeType = keyof Metas export interface Pos { x: number y: number } // 形状通用对象 export type BoardShape = IntersectionFromUnion< K extends 'type' ? { data: { [key in K]: T[K]} } : { data: { [key in K]: T[K] } } & { [key in `set${Capitalize}`]: (val: T[K]) => void } > & { delete: () => void } export type ExtractShape = BoardShape< D extends object ? T extends keyof D ? D : never : never > export type Board = { el: HTMLCanvasElement bus: Emitter<{ storeChange: undefined selectShape: BoardShape | null backDisabled: boolean forwardDisabled: boolean }> unSelectShape(): void, readyAddShape(type: ShapeType, onFinish?: () => void): () => void back(): void forward(): void setImage(url: string): void getCurrentStore(): BoardData drawStore(store: BoardData): void getStore(): BoardData export(): Promise destroy(): void } function create (store: BoardData, canvas: HTMLCanvasElement): Board export { BoardShapeData } export const metas: Metas export const images: ShapeType[] export const labels: ShapeType[] export { brokenLine, text, table, rect, circular, arrow, icon, cigarette, fireoint, footPrint, shoePrint, fingerPrint, corpse, theBlood, compass, title, bgImage } from './shape' export default create