/**
 * Semantic Block Registry
 *
 * This registry maps semantic concepts to available UI blocks for AI-driven
 * site generation. Each block entry contains:
 * - id: Unique identifier for the block
 * - name: Human-readable name
 * - description: What the block does and when to use it
 * - semanticTags: Array of semantic concepts this block represents
 * - category: Block category (about, features, cta, testimonials, etc.)
 * - component: Reference to the actual component
 * - props: TypeScript type for the component's props
 * - exampleUsage: Code example showing how to use the block
 */
interface BlockRegistryEntry$1<T = any> {
    id: string;
    name: string;
    description: string;
    semanticTags: string[];
    category: BlockCategory$1;
    component: React.ComponentType<T>;
    props: string;
    exampleUsage: string;
}
type BlockCategory$1 = "about" | "features" | "cta" | "testimonials" | "services" | "hero" | "footer" | "header" | "pricing" | "team" | "stats" | "faq" | "contact" | "carousel" | "gallery" | "timeline" | "process" | "benefits" | "comparison" | "background-pattern-hero" | "blog" | "article" | "case-studies-list" | "case-study-detail" | "navbar" | "logos" | "project-list" | "project-detail" | "list" | "offer-modal" | "banner" | "industries" | "resource-detail" | "service-detail" | "services-list" | "resource-list" | "link-page";
/**
 * Block Registry - Central registry of all available UI blocks
 */
declare const BLOCK_REGISTRY: Record<string, BlockRegistryEntry$1>;
/**
 * Get blocks by semantic tag
 */
declare function getBlocksBySemanticTag(tag: string): BlockRegistryEntry$1[];
/**
 * Get blocks by category
 */
declare function getBlocksByCategory(category: BlockCategory$1): BlockRegistryEntry$1[];
/**
 * Get block by ID
 */
declare function getBlockById(id: string): BlockRegistryEntry$1 | undefined;
/**
 * Get all available blocks
 */
declare function getAllBlocks(): BlockRegistryEntry$1[];
/**
 * Get all categories
 */
declare function getAllCategories(): BlockCategory$1[];
/**
 * Search blocks by query (searches name, description, and semantic tags)
 */
declare function searchBlocks(query: string): BlockRegistryEntry$1[];

/**
 * Block Registry Types
 *
 * Shared type definitions for the block registry system.
 */
type BlockCategory = "about" | "features" | "cta" | "testimonials" | "services" | "hero" | "footer" | "header" | "pricing" | "team" | "stats" | "faq" | "contact" | "carousel" | "gallery" | "timeline" | "process" | "benefits" | "comparison" | "background-pattern-hero" | "blog" | "article" | "case-studies-list" | "case-study-detail" | "navbar" | "logos" | "project-list" | "project-detail" | "list" | "offer-modal" | "banner" | "industries" | "resource-detail" | "service-detail" | "services-list" | "resource-list" | "link-page";
/**
 * Metadata-only block registry entry (no component import)
 * Used for AI-driven component discovery without bundling all components
 */
interface BlockMetadata {
    id: string;
    name: string;
    description: string;
    semanticTags: string[];
    category: BlockCategory;
    /** Module path for dynamic import, e.g., "@opensite/ui/blocks/about/alternating-blocks" */
    modulePath: string;
    /** Export name from the module */
    exportName: string;
    /** TypeScript props type name */
    props: string;
    /** Example usage code */
    exampleUsage: string;
}
/**
 * Full block registry entry with component reference
 * @deprecated Use BlockMetadata for new code - this type causes all components to be bundled
 */
interface BlockRegistryEntry<T = any> {
    id: string;
    name: string;
    description: string;
    semanticTags: string[];
    category: BlockCategory;
    component: React.ComponentType<T>;
    props: string;
    exampleUsage: string;
}
type BuilderContractLayoutRole = "page" | "header" | "footer";
interface BuilderContractBlockSource {
    exportPath: string;
    modulePath: string;
    typesPath?: string;
    importPath?: string;
    requirePath?: string;
}
interface BuilderContractPropsContract {
    type: "typescript-type-reference";
    reference: string;
    runtimeSchema: null;
    runtimeSchemaStatus: "missing";
}
interface BuilderContractExamples {
    exampleUsage: string | null;
    defaultData: null;
}
interface BuilderContractBlock {
    componentId: string;
    blockName: string;
    blockRef: string;
    displayName: string;
    description: string;
    category: BlockCategory;
    semanticTags: string[];
    layoutRole: BuilderContractLayoutRole;
    propsContract: BuilderContractPropsContract;
    examples: BuilderContractExamples;
    source: BuilderContractBlockSource | null;
}
interface BuilderContractMetadata {
    contractVersion: string;
    uiVersion: string;
    exportedAt: string;
    source: string;
    totalBlocks: number;
}
interface BuilderContractSharedLayoutSection {
    sourceType: string;
    sourceOfTruth: string;
    aiAuthoring: "variant_request_only";
    canonicalPayloadKey: "header" | "footer";
    allowedBlockRefs: string[];
}
interface BuilderContractSharedLayout {
    canonicalLayoutKey: "_layout";
    sections: {
        header: BuilderContractSharedLayoutSection;
        footer: BuilderContractSharedLayoutSection;
    };
}
interface BuilderContractDynamicSourceDefinition {
    sourceType: string;
    symbolic: true;
    hydrationOwner: string;
    hydrationPhase: string;
    canonicalPayloadExpectation: string;
    requiredFields: string[];
    optionalFields: string[];
}
interface BuilderContractDynamicSources {
    blog_feed: BuilderContractDynamicSourceDefinition;
}
interface BuilderContractDesignTokens {
    canonicalSource: "theme_config";
    derivedArtifacts: ["tailwind_css"];
    requiredTokenFamilies: string[];
    requiredSemanticColorRoles: string[];
    policy: string;
}
interface BuilderContractPageRules {
    outputFormat: "route-map";
    routeKeyPattern: string;
    sharedLayoutKey: "_layout";
    routeEntry: {
        requiredKeys: string[];
        blocksKey: "blocks";
    };
    blockEntry: {
        requiredKeys: string[];
        blockRefSource: string;
        blockNameSource: string;
    };
    sharedLayoutComposition: {
        owner: string;
        headerSource: string;
        footerSource: string;
    };
    dynamicHydration: {
        symbolicInCanonicalPageJson: true;
        owner: string;
        phase: string;
    };
}
interface BuilderContractBundle {
    metadata: BuilderContractMetadata;
    blocks: BuilderContractBlock[];
    sharedLayout: BuilderContractSharedLayout;
    dynamicSources: BuilderContractDynamicSources;
    designTokens: BuilderContractDesignTokens;
    pageRules: BuilderContractPageRules;
}

declare const BUILDER_CONTRACT_VERSION = "v1";
interface CreateBuilderContractBundleOptions {
    blocks: BlockRegistryEntry[];
    uiVersion: string;
    exportedAt?: string;
    source?: string;
    blockSources?: Record<string, BuilderContractBlockSource>;
}
declare function createBuilderContractBundle({ blocks, uiVersion, exportedAt, source, blockSources, }: CreateBuilderContractBundleOptions): BuilderContractBundle;

export { BLOCK_REGISTRY, BUILDER_CONTRACT_VERSION, type BlockCategory, type BlockMetadata, type BlockRegistryEntry, type BuilderContractBlock, type BuilderContractBlockSource, type BuilderContractBundle, type BuilderContractDesignTokens, type BuilderContractDynamicSourceDefinition, type BuilderContractDynamicSources, type BuilderContractExamples, type BuilderContractLayoutRole, type BuilderContractMetadata, type BuilderContractPageRules, type BuilderContractPropsContract, type BuilderContractSharedLayout, type BuilderContractSharedLayoutSection, createBuilderContractBundle, getAllBlocks, getAllCategories, getBlockById, getBlocksByCategory, getBlocksBySemanticTag, searchBlocks };
