import type { DocumentNode } from './contracts.js'; /** Pure layout projection. Input nodes and intrinsic source leaves are never mutated. */ export interface LayoutSpec { direction: 'horizontal' | 'vertical' | 'grid'; gap: number; padding: number; align?: 'start' | 'center' | 'end' | 'stretch'; sizing?: 'fixed' | 'hug'; crossSizing?: 'fixed' | 'hug'; wrap?: boolean; crossGap?: number; distribute?: 'start' | 'center' | 'end' | 'space-between'; paddingTop?: number; paddingRight?: number; paddingBottom?: number; paddingLeft?: number; columns?: number; minWidth?: number; maxWidth?: number; minHeight?: number; maxHeight?: number; } export declare function layoutHugAxes(layout?: LayoutSpec | null): { width: boolean; height: boolean; }; export interface LayoutChild { position?: 'auto' | 'absolute'; horizontal?: 'fixed' | 'fill'; vertical?: 'fixed' | 'fill'; columnSpan?: number; } export interface LayoutPlacement { nodeId: string; x: number; y: number; width: number; height: number; } export interface LayoutResult { width: number; height: number; children: LayoutPlacement[]; } export declare function layoutProblem(value: unknown): string | null; export declare function layoutChildProblem(properties: DocumentNode['properties']): string | null; export declare function layoutChild(node: Pick): LayoutChild; export declare const isAbsoluteLayoutChild: (node: Pick) => boolean; export declare const participatesInLayout: (node: Pick) => boolean; export declare function applyLayout(node: Pick & { layout?: LayoutSpec | null; properties?: DocumentNode['properties']; }, children: readonly DocumentNode[]): LayoutResult;