/** * Pure decision logic for how a drag should be routed when the cursor is over a * Column wrapper. A Column hosts two distinct drop systems that must never * overlap: * 1. Its cells accept drops INTO the column. * 2. The wrapper itself accepts drops BEFORE/AFTER the whole column. * * To avoid the ambiguity that previously let a drop land before a column while * a cell looked targeted, the column body always routes to the cells. A * before/after-column drop is only offered where there is a genuine reason to * drop next to the column: * - the column is the FIRST/LAST top-level block (drop at the very start/end * of the document), or * - the adjacent top-level block is ALSO a column (so a block can be inserted * in the gap between two stacked columns). * * This is extracted as a pure function so the branching can be unit-tested * without a live editor / DOM. */ export interface ColumnCellBand { /** Top edge (clientY) of the topmost cell. */ top: number; /** Bottom edge (clientY) of the bottommost cell. */ bottom: number; } export interface ResolveColumnDropZoneArgs { /** Whether the column is a direct child of the document (top level). */ isRootColumn: boolean; /** Index of the column among its siblings. */ columnIndex: number; /** Number of siblings in the column's parent. */ siblingCount: number; /** Whether the previous sibling is also a column. */ prevIsColumn: boolean; /** Whether the next sibling is also a column. */ nextIsColumn: boolean; /** Current cursor Y (clientY). */ mouseY: number; /** Measured vertical band covered by the column's cells, if known. */ cellBand: ColumnCellBand | null; } export type ColumnDropZone = /** Drop before the whole column (top edge). */ "before" /** Drop after the whole column (bottom edge). */ | "after" /** Let the cell drop targets own the drop (no column indicator). */ | "into-cells" /** Cell band not measured yet — caller should fall back to generic logic. */ | "fallthrough"; /** Returns whether the top/bottom before-after strips should be offered. */ export declare const columnStripsAllowed: ({ isRootColumn, columnIndex, siblingCount, prevIsColumn, nextIsColumn, }: Pick) => { allowTopStrip: boolean; allowBottomStrip: boolean; }; export declare const resolveColumnDropZone: (args: ResolveColumnDropZoneArgs) => ColumnDropZone;