import { type TemplateResult, LitElement } from 'lit';
import type { IconType } from '../../md/icons/Icons.js';
import { templatesByVertical } from '@api-client/domain-templates';
import type { AssociationInfo, DomainTemplate, DomainTemplateMetadata, EntityInfo, ModelInfo, NamespaceInfo, PropertyInfo } from '@api-client/domain-templates/types.js';
/**
 * Registry of all available template metadata
 */
export declare const TEMPLATE_METADATA_REGISTRY: Record<string, DomainTemplate>;
export declare const availableCategories: (keyof typeof templatesByVertical)[];
/**
 * The selection detail object dispatched by the `selectionchange` event.
 */
export interface BrowseTemplatesSelection {
    /**
     * The key of the selected template
     */
    selected: string;
}
/**
 * Generates an icon name for the DomainProperty that illustrate its primary purpose.
 */
export declare function getPropertyIcon(p: PropertyInfo): IconType;
/**
 * A browser component for exploring and selecting domain templates.
 * It provides the UI for searching, filtering, previewing, and selecting data domain templates.
 *
 * It manages the filtering state internally but allows property binding for query and category.
 *
 * @fires selectionchange - Dispatched when the user selects a template item. The detail object contains the `selected`
 *                          status which is the template ID (e.g. `CustomEvent<{ selected: string }>`).
 */
export default class DomainTemplateBrowser extends LitElement {
    /**
     * The user entered search query to filter the templates.
     * If not set, all templates are shown (unless filtered by category).
     * @attribute
     */
    accessor query: string | undefined;
    /**
     * The selected template category to filter the list.
     * If not set, all categories are included.
     * @attribute
     */
    accessor category: keyof typeof templatesByVertical | undefined;
    /**
     * The internal list of filtered templates to render in the UI.
     * This is computed based on `query` and `category`.
     */
    accessor templates: DomainTemplateMetadata[];
    /**
     * The currently previewed template. When set, the component renders the preview view instead of the list.
     */
    accessor previewTemplate: DomainTemplate | undefined;
    /**
     * Handles keydown events on the search input.
     * Triggers a search on Enter or resets on Escape.
     */
    protected handleSearchKeydown(e: KeyboardEvent): void;
    /**
     * Performs an in-memory search for templates matching the provided query.
     * Updates the `templates` state with the search results.
     *
     * @param value The search query. If empty, resets the search.
     */
    search(value?: string): void;
    protected handleFilterClick(e: Event): void;
    protected handleTemplateSelect(e: Event): void;
    protected handleTemplatePreview(e: Event): void;
    protected handleClosePreview(): void;
    protected render(): TemplateResult;
    protected renderTopControls(): TemplateResult;
    protected renderSearchInput(): TemplateResult;
    protected renderCategoryFilters(): TemplateResult;
    protected renderTemplatesGrid(): TemplateResult;
    protected renderTemplateCard(template: DomainTemplateMetadata): TemplateResult;
    protected renderEmptyState(): TemplateResult;
    renderPreviewMode(): TemplateResult;
    protected renderTemplateDetails(template: DomainTemplate): TemplateResult;
    protected renderDomainStructure(template: DomainTemplate): TemplateResult;
    protected renderNamespaces(namespaces: NamespaceInfo[]): TemplateResult;
    protected renderModels(models: ModelInfo[]): TemplateResult;
    protected renderDomainEntity(entity: EntityInfo): TemplateResult;
    protected renderProperty(property: PropertyInfo): TemplateResult;
    protected renderAssociation(association: AssociationInfo): TemplateResult;
}
//# sourceMappingURL=DomainTemplateBrowser.d.ts.map