import type { BlockManifest, BlockCategory, FieldDefinition, StyleTokenConfig, BehaviourConfig } from './manifest/schema';
import type { NodeDefinition } from './node';
import { type FragmentDefinition } from './fragments';
/**
 * Configuration for defining a block using the defineBlock helper.
 * Provides smart defaults and handles fragment composition automatically.
 */
export type BlockConfig = {
    /** Block identifier (e.g., 'block.hero') */
    id: string;
    /** Manifest version (defaults to '0.1.0' for system blocks) */
    version?: string;
    /** Human-readable title (e.g., 'Hero') */
    title: string;
    /** Block category for organization */
    category: BlockCategory;
    /** Fragments to compose into this block */
    fragments?: ReadonlyArray<{
        fragment: FragmentDefinition;
        fieldPriority?: number;
        scope?: string;
        dataKey?: string;
    }>;
    /** Block layout (NodeDefinition or array) */
    layout: NodeDefinition | readonly NodeDefinition[];
    /** Layout variants (e.g., { classic: layout1, minimal: layout2 }) */
    variants?: Record<string, NodeDefinition>;
    /** Default variant key */
    defaultVariant?: string;
    /**
     * Variant metadata for editor UI.
     * Allows overriding auto-generated labels and optionally providing a description/icon.
     */
    variantOptions?: Record<string, {
        label?: string;
        description?: string;
        icon?: string;
    }>;
    /** Additional fields to include (fragments are added automatically) */
    additionalFields?: ReadonlyArray<FieldDefinition>;
    /**
     * Optional list of nested field paths to surface in the main form body as shortcuts.
     * These paths must already exist in the block's data shape (no data duplication).
     *
     * Example: `['_sectionStyles.background.image']`
     */
    promotedFields?: readonly string[];
    /** If true, don't automatically add sectionStylesField */
    skipSectionStyles?: boolean;
    /**
     * If true, add `_containerStyles` to the block settings (style tab).
     * This enables contained/inner backgrounds via `styledContainer()`.
     */
    includeContainerStyles?: boolean;
    /** Block description */
    description?: string;
    /** Field ID(s) to use as block title in lists (e.g., 'headline', or ['navLabel','title']) */
    titleSource?: string | string[];
    /** Search/filter tags */
    tags?: readonly string[];
    /** Icon name (Lucide icon) */
    icon?: string;
    /** Style token mappings */
    styleTokens?: StyleTokenConfig;
    /** Behavior flags */
    behaviours?: BehaviourConfig;
    /** Hide from block picker palettes */
    paletteHidden?: boolean;
    /** Block manages its own wrapper (for sticky/fixed positioning) */
    managesOwnWrapper?: boolean;
    /** Content types this block is compatible with */
    contentTypes?: readonly string[];
};
declare const BlockInput: unique symbol;
export type DefinedBlockManifest<C> = BlockManifest & {
    readonly [BlockInput]?: C;
};
export type BlockConfigInputOf<M> = M extends {
    readonly [BlockInput]?: infer C;
} ? C extends BlockConfig ? C : never : never;
/**
 * Create a block manifest with smart defaults and automatic fragment composition.
 *
 * This helper reduces block definition boilerplate by:
 * - Composing fragments and managing field priorities automatically
 * - Adding section styles field by default
 * - Providing sensible defaults for manifest properties
 * - Auto-deriving component names from block IDs
 * - Handling manifest augmentation (variant selector, etc.)
 *
 * @example
 * ```typescript
 * export const heroManifest = createBlockManifest({
 *   id: 'block.hero',
 *   title: 'Hero',
 *   category: 'layout',
 *   fragments: [
 *     { fragment: heroCopyFragment, priority: 0 },
 *     { fragment: ctaRowFragment, priority: 2 },
 *   ],
 *   layout: styledSection({
 *     children: sectionContainer(nodes, { gap: 'md' }),
 *   }),
 *   tags: ['header', 'banner', 'landing'],
 *   icon: 'Sparkles',
 * });
 * ```
 */
export declare function createBlockManifest<const C extends BlockConfig>(config: C): DefinedBlockManifest<C>;
export {};
