import type { RangeValue } from "@heroui/react";
import type { DateValue } from "@internationalized/date";
export type FilterType = "select" | "multiselect" | "range" | "date" | "text" | "number";
export interface BaseFilterData {
    key: string;
    title: string;
    description?: string;
    type: FilterType;
    /** When true, the filter section is collapsed and non-interactive. */
    disabled?: boolean;
}
export interface SelectFilterData extends BaseFilterData {
    type: "select";
    data: Array<{
        label: string;
        value: string;
    }>;
}
export interface MultiSelectFilterData extends BaseFilterData {
    type: "multiselect";
    data: Array<{
        label: string;
        value: string;
    }>;
    /**
     * Si es `true`, muestra un buscador dentro del panel del multiselect.
     * Por defecto `false` (solo lista).
     */
    searchable?: boolean;
    /**
     * Cuántos nombres seleccionados se muestran en texto en el disparador; el resto con `translations.multiselectMoreLabel`.
     * Por defecto `5` (mínimo efectivo 1).
     */
    maxVisibleChips?: number;
}
export interface RangeFilterData extends BaseFilterData {
    type: "range";
    data: {
        min: number;
        max: number;
        step?: number;
        unit?: string;
        formatValue?: (val: number) => string;
        /** When false, hides the product count in the histogram tooltip. Defaults to true. */
        showHistogramCount?: boolean;
    };
}
export interface DateFilterData extends BaseFilterData {
    type: "date";
    granularity?: "full" | "dayMonth";
    data: {
        min?: string;
        max?: string;
        placeholder?: string;
    };
}
export interface TextFilterData extends BaseFilterData {
    type: "text";
    data: {
        placeholder?: string;
    };
}
export interface NumberFilterData extends BaseFilterData {
    type: "number";
    data: {
        placeholder?: string;
        min?: number;
        max?: number;
        step?: number;
    };
}
export type FilterData = SelectFilterData | MultiSelectFilterData | RangeFilterData | DateFilterData | TextFilterData | NumberFilterData;
export type DrawerFiltersTranslations = {
    clearFilters?: string;
    cancel?: string;
    applyFilters?: string;
    /** Placeholder del buscador en filtros `multiselect` cuando `searchable === true` */
    multiselectSearchPlaceholder?: string;
    /**
     * Texto cuando hay más seleccionados que `maxVisibleChips` en el disparador.
     * Debe incluir `{more}` = cantidad de ítems no mostrados como chip (p. ej. "+{more} más").
     */
    multiselectMoreLabel?: string;
    /** Mensaje cuando el buscador no coincide con ninguna opción */
    multiselectNoResults?: string;
    /** Aria-label del DatePicker en filtros `date` con `granularity: 'dayMonth'` */
    dayMonthAriaLabel?: string;
    /** Aria-label del DateRangePicker en filtros `date` con `granularity: 'dayMonth'` y modo rango */
    dayMonthRangeAriaLabel?: string;
    /** Label del radio "día específico" en modo dayMonth. Default: "Día específico" */
    dayMonthSingleOption?: string;
    /** Label del radio "rango" en modo dayMonth. Default: "Rango de fechas" */
    dayMonthRangeOption?: string;
};
export interface DrawerFiltersConfig {
    title: string;
    description: string;
    data: FilterData[];
}
export interface DrawerFiltersProps {
    isOpen: boolean;
    onOpenChange: (isOpen: boolean) => void;
    config: DrawerFiltersConfig;
    onApplyFilters: (filters: Record<string, string>) => void;
    onClearFilters?: () => void;
    onCancel?: () => void;
    className?: string;
    translations?: DrawerFiltersTranslations;
    initialValues?: FilterValues;
}
export interface FilterSectionProps {
    filter: FilterData;
    translations?: DrawerFiltersTranslations;
    value?: SelectFilterValue | MultiSelectFilterValue | RangeFilterValue | DateFilterValue | TextFilterValue | NumberFilterValue;
    onChange: (value: SelectFilterValue | MultiSelectFilterValue | RangeFilterValue | DateFilterValue | TextFilterValue | NumberFilterValue) => void;
    isExpanded?: boolean;
    onToggleExpanded?: () => void;
}
export interface DrawerFiltersHeaderProps {
    title: string;
    description: string;
}
export interface DrawerFiltersFooterProps {
    onClearFilters: () => void;
    onCancel: () => void;
    onApplyFilters: () => void;
    translations?: DrawerFiltersTranslations;
}
export interface FilterValues {
    [key: string]: SelectFilterValue | MultiSelectFilterValue | RangeFilterValue | DateFilterValue | TextFilterValue | NumberFilterValue;
}
export interface SelectFilterValue {
    value: string;
}
export interface MultiSelectFilterValue {
    values: string[];
}
export interface RangeFilterValue {
    min: number;
    max: number;
}
export interface DateFilterValue {
    type: "singleDay" | "dateRange" | "dayMonth" | "dayMonthRange";
    date: string | null;
    dateRange: {
        start: string | null;
        end: string | null;
    } | null;
    dayMonth: string | DateValue | null;
    dayMonthRange: {
        start: string | null;
        end: string | null;
    } | RangeValue<DateValue> | null;
}
export interface TextFilterValue {
    value: string;
}
export interface NumberFilterValue {
    value: number | null;
}
//# sourceMappingURL=DrawerFilters.types.d.ts.map