import { NodeId, Node, NodeTree } from './nodes'; export type NodeInfo = { id: NodeId; } & DOMInfo; export type DOMInfo = Record<'x' | 'y' | 'top' | 'left' | 'bottom' | 'right' | 'width' | 'height' | 'outerWidth' | 'outerHeight', number> & { inFlow: boolean; margin: Record<'top' | 'left' | 'bottom' | 'right', number>; padding: Record<'top' | 'left' | 'bottom' | 'right', number>; }; export type NormalDropPosition = { parent: Node; index: number; where: string; isDropCol: false; }; export type DropColPosition = Omit & { x: number; y: number; width: number; height: number; isDropCol: true; }; export type DropPosition = NormalDropPosition | DropColPosition; export type Placement = DropPosition & { currentNode: Node | null; }; type CommonDragTarget = { isDropCol: false; } | { isDropCol: true; width: number; height: number; }; type ExistingDragTarget = { type: 'existing'; nodeId: NodeId; } & CommonDragTarget; type NewDragTarget = { type: 'new'; tree: NodeTree; } & CommonDragTarget; export type DragTarget = ExistingDragTarget | NewDragTarget; export {};