import type { ListMediaAssetsOptions, ListMediaAssetsResult, MediaStorageRepo } from '@riverbankcms/media-storage-supabase';
import { type MediaSearchState } from './useMediaSearch';
export type SemanticLabel = {
    slug: string;
    name: string;
    count: number;
};
export type SemanticSearchArgs = {
    siteId: string;
    query: string;
    limit?: number;
    labels?: string[];
    threshold?: number;
};
export type UseMediaSemanticSearchOptions = {
    repo: Pick<MediaStorageRepo, 'listAssets'>;
    siteId: string;
    initialQuery?: string;
    pageSize?: number;
    fetchLabels?: () => Promise<SemanticLabel[]>;
    semanticSearch?: (args: SemanticSearchArgs & {
        threshold?: number;
    }) => Promise<ListMediaAssetsResult>;
    defaultThreshold?: number;
    filters?: () => Partial<ListMediaAssetsOptions>;
    filtersKey?: string;
};
export type UseMediaSemanticSearchState = MediaSearchState & {
    labels: SemanticLabel[];
    labelsLoading: boolean;
    labelsError: Error | null;
    selectedLabels: string[];
    toggleLabel: (slug: string) => void;
    clearLabels: () => void;
    refreshLabels: () => Promise<void>;
    threshold: number;
    setThreshold: (value: number) => void;
};
export declare function useMediaSemanticSearch({ repo, siteId, initialQuery, pageSize, fetchLabels, semanticSearch, defaultThreshold, filters: externalFilters, filtersKey: externalFiltersKey, }: UseMediaSemanticSearchOptions): UseMediaSemanticSearchState;
