import type { PageTemplate, PageCategory, PageCategoryId } from "../types/page-template";
/**
 * Registry for managing reusable page templates.
 *
 * The registry provides a central store for page templates that can be
 * shared across multiple navigations. Core pages (like Messaging, Contacts)
 * are pre-registered and cannot be removed.
 *
 * @example
 * ```ts
 * // Register a custom page template
 * PageTemplateRegistry.register({
 *   id: 'custom-dashboard',
 *   slug: 'dashboard',
 *   name: 'Custom Dashboard',
 *   category: 'custom',
 *   version: '1.0.0',
 *   component_tree: [{ type: 'TextWidget', props: { text: 'Hello' } }],
 * });
 *
 * // Get a template by ID
 * const template = PageTemplateRegistry.get('custom-dashboard');
 *
 * // List all templates in a category
 * const corePages = PageTemplateRegistry.getByCategory('core');
 * ```
 */
declare class PageTemplateRegistryImpl {
    private templates;
    private categories;
    constructor();
    /**
     * Register a new page template.
     * @throws Error if a template with the same ID already exists
     */
    register(template: PageTemplate): void;
    /**
     * Unregister a page template by ID.
     * Core templates cannot be unregistered.
     * @returns true if the template was removed, false if it didn't exist or is a core template
     */
    unregister(id: string): boolean;
    /**
     * Get a page template by ID.
     */
    get(id: string): PageTemplate | undefined;
    /**
     * Get all page templates in a specific category.
     */
    getByCategory(category: PageCategoryId | string): PageTemplate[];
    /**
     * List all registered page templates.
     */
    listAll(): PageTemplate[];
    /**
     * List all core page templates (isCore: true).
     */
    listCore(): PageTemplate[];
    /**
     * List all non-core page templates.
     */
    listOptional(): PageTemplate[];
    /**
     * List all registered categories.
     */
    listCategories(): PageCategory[];
    /**
     * Add a custom category.
     */
    addCategory(category: PageCategory): void;
    /**
     * Check if a template exists by ID.
     */
    has(id: string): boolean;
    /**
     * Get the count of registered templates.
     */
    get size(): number;
    /**
     * Clear all non-core templates.
     * Useful for testing or resetting the registry.
     */
    clearNonCore(): void;
}
/**
 * Global page template registry singleton.
 *
 * This registry is automatically populated with core page templates
 * (Messaging, Contacts) when the SDK is imported.
 */
export declare const PageTemplateRegistry: PageTemplateRegistryImpl;
export {};
//# sourceMappingURL=page-template-registry.d.ts.map