/**
 * Validation functions for declarative node layouts in custom blocks.
 *
 * These functions validate that layouts only use allowed node types
 * and transform IDs. Used for strict save-time validation.
 */
import type { NodeDefinition } from '../contracts';
export interface LayoutValidationError {
    path: string;
    type: 'invalid_node_type' | 'invalid_transform_id';
    value: string;
    message: string;
}
export interface LayoutValidationResult {
    valid: boolean;
    errors: LayoutValidationError[];
}
/**
 * Validate all node types in a layout tree.
 *
 * Recursively walks the node tree and checks that all `type` values
 * are in the allowed whitelist.
 *
 * @example
 * ```typescript
 * const result = validateLayoutNodeTypes(block.layout);
 * if (!result.valid) {
 *   throw new Error(result.errors.map(e => e.message).join(', '));
 * }
 * ```
 */
export declare function validateLayoutNodeTypes(layout: NodeDefinition): LayoutValidationResult;
/**
 * Validate all transform IDs in a layout tree.
 *
 * Recursively walks the node tree and checks that all transform IDs
 * in $bind.transforms are in the allowed whitelist.
 *
 * @example
 * ```typescript
 * const result = validateTransformIds(block.layout);
 * if (!result.valid) {
 *   throw new Error(result.errors.map(e => e.message).join(', '));
 * }
 * ```
 */
export declare function validateTransformIds(layout: NodeDefinition): LayoutValidationResult;
/**
 * Validate a complete layout (both node types and transform IDs).
 *
 * Combines validateLayoutNodeTypes and validateTransformIds into
 * a single validation pass.
 *
 * @example
 * ```typescript
 * const result = validateLayout(block.layout);
 * if (!result.valid) {
 *   return { error: result.errors.map(e => e.message).join(', ') };
 * }
 * ```
 */
export declare function validateLayout(layout: NodeDefinition): LayoutValidationResult;
