import { DialogProps as MuiDialogProps } from '@mui/material';
import { ReactNode } from 'react';
export interface FilterItem {
    id: string;
    label: string;
    type: 'select' | 'multi-select' | 'text' | 'custom';
    placeholder?: string;
    helperText?: string;
    value?: any;
    options?: Array<{
        label: string;
        value: any;
    }>;
    render?: (item: FilterItem, onChange: (value: any) => void) => ReactNode;
    size?: 1 | 2 | 3 | 4 | 5 | 6;
}
export interface FilterGroup {
    id: string;
    label: string;
    items: FilterItem[];
    expanded?: boolean;
}
export interface FilterModalProps extends Omit<MuiDialogProps, 'open' | 'onClose'> {
    open: boolean;
    onClose: () => void;
    title?: string;
    description?: string;
    /** When provided, renders instead of groups (e.g. custom form with FormSelect/FormInput). Apply button uses form={formId} when formId is set. */
    children?: ReactNode;
    /** Id of the form element rendered in children. When set, the Apply button has form={formId} and type="submit". */
    formId?: string;
    /** Filter groups (ignored when children is provided). */
    groups?: FilterGroup[];
    onApply?: (filters: Record<string, any>) => void;
    onClear?: () => void;
    /** Called when the modal has finished opening (after transition). Use e.g. to focus first filter. */
    onOpened?: () => void;
    clearButtonText?: string;
    applyButtonText?: string;
    className?: string;
}
