/**
 * Block System - Operadic composition for UI components
 * Following category-theoretic operads for structured composition
 */
import { Signal } from '../core/signal';
export interface Block {
    readonly id: string;
    readonly arity: number;
    readonly render: (parent: HTMLElement) => HTMLElement;
    readonly plug: (children: Block[]) => Block;
    readonly destroy: () => void;
}
export interface BlockMetadata {
    readonly type: string;
    readonly props: Record<string, any>;
    readonly children: Block[];
}
export type BlockFactory<T = any> = (props: T) => Block;
export declare const registerBlock: <T = any>(type: string, factory: BlockFactory<T>) => void;
export declare const createBlock: <T = any>(type: string, props: T) => Block;
export declare const block: (type: string, arity: number, renderFn: (parent: HTMLElement, props: any, children: Block[]) => HTMLElement, props?: any) => Block;
export interface ReactiveBlock extends Block {
    readonly signal: Signal<any>;
    readonly update: (newProps: any) => void;
}
export declare const reactiveBlock: <T = any>(type: string, arity: number, renderFn: (parent: HTMLElement, props: T, children: Block[], signal: Signal<T> & {
    _set: (value: T) => void;
}) => HTMLElement, initialProps: T) => ReactiveBlock;
export declare const textBlock: (text: string) => Block;
export declare const headingBlock: (level: 1 | 2 | 3 | 4 | 5 | 6, text: string) => Block;
export declare const paragraphBlock: (text: string) => Block;
export declare const containerBlock: (className?: string) => Block;
export declare const listBlock: (ordered?: boolean) => Block;
export declare const editableTextBlock: (initialText: string) => ReactiveBlock;
export declare const compose: (...blocks: Block[]) => Block;
export declare const sequence: (blocks: Block[]) => Block;
export declare const walkBlocks: (block: Block, visitor: (block: Block) => void) => void;
