import { VisualEditorProps } from "./visual-editor.props" ; export interface VisualEditorBlockData { top : number ; left : number ; componentKey : string ; adjustPosition : boolean ; focus : boolean ; width : number ; height : number ; hasResize : boolean ; props ? : object ; } export interface VisualEditorModelValue { container : { width : number ; height : number ; } ; blocks : VisualEditorBlockData [ ] ; } export interface VisualEditorComponent { key : string ; label : string ; preview : ( ) => JSX . Element ; render : ( data : { size : { width ? : number ; height ? : number ; } ; props : any ; } ) => JSX . Element ; resize ? : { width ? : boolean ; height ? : boolean ; } ; props ? : Record < string , VisualEditorProps > ; } export function createNewBlock ( data ) { return { componentKey : data . component ! . key , top : data . top , left : data . left , adjustPosition : true , focus : false , width : 0 , height : 0 , hasResize : false , props : { } , } ; } export function createVisualEditorConfig ( ) { const componentList = [ ] ; const componentMap = { } ; return { componentList , componentMap , registry : ( key , component ) => { const comp = { ... component , key } ; componentList . push ( comp ) ; componentMap [ key ] = comp ; } , } ; } export type VisualEditorConfig = ReturnType < typeof createVisualEditorConfig > ; export interface VisualEditorMarkLine { x : { left : number ; showLeft : number ; } [ ] ; y : { top : number ; showTop : number ; } [ ] ; }