import type { Component } from 'vue';
import { Schema } from 'effect';
import type { Environment } from '../../../vendor/cel-js/lib/index.js';
type AnySchema = Schema.Schema<any, any, never>;
/**
 * Container blocks (e.g. tabs) receive a recursive `blockRef` second arg so
 * their inner `Slot` accepts the same discriminated union of blocks —
 * including themselves. Leaf blocks accept and ignore it.
 */
type SchemaFactory = (configure: (env: Environment) => void, blockRef: AnySchema) => AnySchema;
export type BlockSizeRange = Readonly<{
    initial: number;
    min: number;
    max: number;
}>;
export type BlockMetadata = Readonly<{
    name: string;
    icon: string;
    w: BlockSizeRange;
    h: BlockSizeRange;
}>;
export type BlockEntry = Readonly<{
    type: string;
    compatibilityDate: string;
    metadata: BlockMetadata;
    schema: SchemaFactory;
    defaultBody: () => Record<string, unknown>;
    config: Component;
    runtime: Component;
}>;
export declare const BLOCKS: ReadonlyArray<BlockEntry>;
/**
 * Returns the recursive `Schema.suspend`-fronted union of all registered
 * block schemas. Container blocks pass this into `Slot(blockRef, configure)`.
 */
export declare function blockRef(configure: (env: Environment) => void): AnySchema;
export declare function allBlockSchemas(configure: (env: Environment) => void): ReadonlyArray<AnySchema>;
export declare function findBlock(type: string, compatibilityDate: string): BlockEntry | undefined;
export {};
