import { type ActionDefinition, type AppDefinition, type BlockDefinition, type ControllerDefinition, type PageDefinition } from './types/index.js';
export type Prefix = (number | string)[];
type IterCallback<T> = (item: T, path: Prefix) => boolean | void;
interface IterCallbacks {
    onPage?: IterCallback<PageDefinition>;
    onBlockList?: IterCallback<BlockDefinition[]>;
    onBlock?: IterCallback<BlockDefinition>;
    onAction?: IterCallback<ActionDefinition>;
    onController?: IterCallback<ControllerDefinition>;
}
/**
 * Iterate over an action definition and call each callback if relevant.
 *
 * If a callback returns true, the iteration is aborted.
 *
 * @param action The action definition to iterate over.
 * @param callbacks The callbacks to call if a sub definition is found.
 * @param prefix The initial path prefix. This is mainly used for nested iteration.
 * @returns True if any callback returns true, false otherwise.
 */
export declare function iterAction(action: ActionDefinition, callbacks: IterCallbacks, prefix?: Prefix): boolean;
export declare function iterController(controller: ControllerDefinition, callbacks: IterCallbacks, prefix?: Prefix): boolean;
/**
 * Iterate over a block definition and call each callback if relevant.
 *
 * If a callback returns true, the iteration is aborted.
 *
 * @param block The block definition to iterate over.
 * @param callbacks The callbacks to call if a sub definition is found.
 * @param prefix The initial path prefix. This is mainly used for nested iteration.
 * @returns True if any callback returns true, false otherwise.
 */
export declare function iterBlock(block: BlockDefinition, callbacks: IterCallbacks, prefix?: Prefix): boolean;
/**
 * Iterate over a block definition list and call each callback if relevant.
 *
 * If a callback returns true, the iteration is aborted.
 *
 * @param blockList The block definition list to iterate over.
 * @param callbacks The callbacks to call if a sub definition is found.
 * @param prefix The initial path prefix. This is mainly used for nested iteration.
 * @returns True if any callback returns true, false otherwise.
 */
export declare function iterBlockList(blockList: BlockDefinition[], callbacks: IterCallbacks, prefix?: Prefix): boolean;
/**
 * Iterate over a page definition and call each callback if relevant.
 *
 * If a callback returns true, the iteration is aborted.
 *
 * @param page The page definition to iterate over.
 * @param callbacks The callbacks to call if a sub definition is found.
 * @param prefix The initial path prefix. This is mainly used for nested iteration.
 * @returns True if any callback returns true, false otherwise.
 */
export declare function iterPage(page: PageDefinition, callbacks: IterCallbacks, prefix?: Prefix): boolean;
/**
 * Iterate over an app definition and call each callback if relevant.
 *
 * @param app The app definition to iterate over.
 * @param callbacks The callbacks to call if a sub definition is found.
 * @returns True if any callback returns true, false otherwise.
 */
export declare function iterApp(app: AppDefinition, callbacks: IterCallbacks): boolean;
export {};
