/**
 * Fragment Lowering
 *
 * Transforms JSX-returning expressions into structural fragment nodes.
 *
 * This phase runs AFTER parsing, BEFORE component resolution.
 * Transforms ExpressionNode → ConditionalFragmentNode | OptionalFragmentNode | LoopFragmentNode
 *
 * IMPORTANT: JSX in Zenith is compile-time sugar only.
 * The compiler enumerates all possible DOM shapes and lowers them at compile time.
 * Runtime never creates DOM — it only toggles visibility and binds values.
 */
import type { TemplateNode, ExpressionIR } from '../ir/types';
/**
 * Lower JSX-returning expressions into structural fragments
 *
 * Walks the node tree and transforms ExpressionNode instances
 * that return JSX into the appropriate fragment node types.
 *
 * @param nodes - Template nodes to process
 * @param filePath - Source file path for error reporting
 * @param expressions - Expression registry (mutated to add new expressions)
 * @returns Lowered nodes with fragment bindings
 */
export declare function lowerFragments(nodes: TemplateNode[], filePath: string, expressions: ExpressionIR[]): TemplateNode[];
