import type { ResourceTemplate, TemplateCategory } from "./templates/types";
/** Options for {@link useTemplateFilter}. */
export interface UseTemplateFilterOptions<TData> {
    /** The full set of templates to filter. */
    readonly templates: readonly ResourceTemplate<TData>[];
}
/** Return value of {@link useTemplateFilter}. */
export interface UseTemplateFilterReturn<TData> {
    /** Templates matching the current search query and active category. */
    readonly filtered: readonly ResourceTemplate<TData>[];
    /** Current search query string. */
    readonly query: string;
    /** Update the search query. */
    readonly setQuery: (query: string) => void;
    /** Currently active category filter, or `null` for "All". */
    readonly activeCategory: TemplateCategory | null;
    /** Set the active category filter. Pass `null` to show all. */
    readonly setActiveCategory: (category: TemplateCategory | null) => void;
    /** Deduplicated, sorted list of categories present in the template set. */
    readonly availableCategories: readonly TemplateCategory[];
}
/**
 * Headless hook for filtering and searching a set of resource templates.
 *
 * Provides category tab state, text search across name/description/tags,
 * and the filtered result set. Fully memoized — only recalculates when
 * inputs change.
 *
 * Platform builders can use this hook with their own rendering; the
 * styled `TemplateGallery` component uses it internally.
 *
 * @typeParam TData - The wizard data shape (e.g. `AgentWizardData`).
 *
 * @example
 * ```tsx
 * const { filtered, query, setQuery, activeCategory, setActiveCategory, availableCategories } =
 *   useTemplateFilter({ templates: AGENT_TEMPLATES });
 *
 * // Render your own gallery UI using `filtered`
 * ```
 */
export declare function useTemplateFilter<TData>(options: UseTemplateFilterOptions<TData>): UseTemplateFilterReturn<TData>;
//# sourceMappingURL=useTemplateFilter.d.ts.map