/**
 * useUrlFilters Types
 *
 * Type definitions for URL-synchronized filter system.
 * Supports search, multiSelect, numberRange, dateRange, and singleSelect filters.
 */
export type FilterType = 'search' | 'multiSelect' | 'numberRange' | 'dateRange' | 'singleSelect';
export interface NumberRange {
    min: number | null;
    max: number | null;
}
export interface DateRange {
    start: string | null;
    end: string | null;
}
interface BaseFilterDefinition {
    type: FilterType;
    urlParam: string;
}
interface SearchFilterDefinition extends BaseFilterDefinition {
    type: 'search';
}
interface SingleSelectFilterDefinition extends BaseFilterDefinition {
    type: 'singleSelect';
}
interface MultiSelectFilterDefinition extends BaseFilterDefinition {
    type: 'multiSelect';
}
interface NumberRangeFilterDefinition extends BaseFilterDefinition {
    type: 'numberRange';
    urlParamMax: string;
}
interface DateRangeFilterDefinition extends BaseFilterDefinition {
    type: 'dateRange';
    urlParamEnd: string;
}
export type FilterDefinition = SearchFilterDefinition | SingleSelectFilterDefinition | MultiSelectFilterDefinition | NumberRangeFilterDefinition | DateRangeFilterDefinition;
export type FilterSchema = Record<string, FilterDefinition>;
export type FilterValueType<T extends FilterDefinition> = T['type'] extends 'search' ? string : T['type'] extends 'singleSelect' ? string | null : T['type'] extends 'multiSelect' ? string[] : T['type'] extends 'numberRange' ? NumberRange : T['type'] extends 'dateRange' ? DateRange : never;
export type FilterValues<S extends FilterSchema> = {
    [K in keyof S]: FilterValueType<S[K]>;
};
export interface UseUrlFiltersOptions {
    /** Debounce delay in ms for URL updates (default: 300 for search, 0 for others) */
    debounceMs?: number;
    /** Use shallow routing - don't trigger data refetch (default: true) */
    shallow?: boolean;
    /** Scroll to top on filter change (default: false) */
    scroll?: boolean;
}
export interface UseUrlFiltersReturn<S extends FilterSchema> {
    /** Current filter values */
    filters: FilterValues<S>;
    /** Set a single filter value */
    setFilter: <K extends keyof S>(key: K, value: FilterValues<S>[K]) => void;
    /** Set multiple filter values at once */
    setFilters: (values: Partial<FilterValues<S>>) => void;
    /** Clear a single filter to its default value */
    clearFilter: (key: keyof S) => void;
    /** Clear all filters to default values */
    clearAllFilters: () => void;
    /** Whether any filter has a non-default value */
    hasActiveFilters: boolean;
    /** Count of filters with non-default values */
    activeFilterCount: number;
    /** Build URL with current filters + optional overrides */
    buildFilterUrl: (baseUrl: string, overrides?: Partial<FilterValues<S>>) => string;
}
/**
 * Type-safe return type for entity filters built from EntityConfig at runtime.
 * Use this when the schema is dynamically constructed from ui.dashboard.filters.
 */
export interface EntityFiltersReturn {
    /** Current filter values - includes search (string) and dynamic fields (string[]) */
    filters: Record<string, string | string[] | null>;
    /** Set a single filter value */
    setFilter: (key: string, value: string | string[]) => void;
    /** Set multiple filter values at once */
    setFilters: (values: Record<string, string | string[] | null>) => void;
    /** Clear a single filter to its default value */
    clearFilter: (key: string) => void;
    /** Clear all filters to default values */
    clearAllFilters: () => void;
    /** Whether any filter has a non-default value */
    hasActiveFilters: boolean;
    /** Count of filters with non-default values */
    activeFilterCount: number;
    /** Build URL with current filters + optional overrides */
    buildFilterUrl: (baseUrl: string, overrides?: Record<string, string | string[] | null>) => string;
}
export {};
//# sourceMappingURL=useUrlFilters.types.d.ts.map