import type RootStore from '../store/RootStore';
import { type URLFilters } from '../store/types';
export declare class URLFilterManager {
    private rootStore;
    currentFilters: URLFilters;
    isInitialized: boolean;
    constructor(rootStore: RootStore);
    initialize(): void;
    private parseURLFilters;
    /**
     * The raw filter values, before catalog validation. The canonical
     * `config.filters` node wins when present (`?filters[categories][0]=food` or
     * any config layer; values are plain names, no custom decoding).
     */
    private readRawFilters;
    private applyFiltersToStore;
    /**
     * The active filters' contribution to `location.search` — `''` when no
     * filter is active, else `'?<legacy filter keys>'`, byte-identical to what
     * `updateURLFromFilters` writes. Also read by the URL autorun (url-dispatch):
     * when nothing else claims the URL, the filter query IS the selection. Both
     * writers must emit the same string — emitting different ones made their
     * MobX ordering decide the final address bar (the poiType-clearing race).
     */
    filterSearch(): string;
    updateURLFromFilters(): void;
    setCategories(categoryNames: string[]): void;
    setPoiType(poiTypeName: string | null): void;
    setPoiTypes(poiTypeNames: string[]): void;
    clearAllFilters(): void;
    getCurrentFilters(): URLFilters;
    private setupReactions;
    validateFilters(filters: URLFilters): boolean;
    private getCategoryIdByName;
    private getPoiTypeIdByName;
    private focusOnFilteredBooths;
    private openExhibitorsList;
}
//# sourceMappingURL=URLFilterManager.d.ts.map