import { type ObjectAsyncGuard, type ObjectGuard } from '@astral/validations';
import { type ReactNode } from 'react';
import { type Control, type UseFormReturn } from 'react-hook-form';
import type { ButtonProps } from '../../components/Button';
type InputsProps<TFieldValues extends Record<string, unknown>> = {
    control: Control<TFieldValues>;
};
export type FormFiltersProps<TFieldValues extends Record<string, unknown>> = {
    form: UseFormReturn<TFieldValues>;
    onSubmit?: (values: TFieldValues) => void;
    /**
     * Схема валидации из @astral/validations
     */
    validationSchema?: ObjectGuard<TFieldValues> | ObjectAsyncGuard<TFieldValues>;
    /**
     * Поле поиска
     *
     * @example
     * ```ts
     * <FormFilters
     *   searchField={({control}) => <FormFiltersSearchField control={control} placeholder="Поиск..." />}
     * />
     * ```
     */
    searchField?: (props: InputsProps<TFieldValues>) => ReactNode;
    /**
     * Быстрые фильтры — группа чипов.
     * На больших экранах отображаются строкой чипов под mainFilters,
     * на маленьких разрешениях — последним элементом внутри модалки (как Select).
     *
     * @example
     * ```ts
     * <FormFilters
     *   quickFilters={({ control }) => (
     *     <FormQuickFilters
     *       control={control}
     *       name="status"
     *       label="Статус"
     *       options={[{ label: 'Активные', value: 'active' }]}
     *     />
     *   )}
     * />
     * ```
     */
    quickFilters?: (props: Pick<InputsProps<TFieldValues>, 'control'>) => ReactNode;
    /**
     * Основные фильтры
     *
     * @example
     * ```ts
     * <FormFilters
     *   mainFilters={({ control, isModal }) =>
     *    <FormTextField
     *      control={control}
     *      name="name"
     *      label="Название"
     *      placeholder={isModal ? 'Введите название' : 'Название'}
     *    />
     * />
     * ```
     */
    mainFilters?: (props: InputsProps<TFieldValues> & {
        isModal?: boolean;
    }) => ReactNode;
    /**
     * Фильтры, отображаемые в модальном окне "Все фильтры"
     *
     * @example
     * ```ts
     * <FormFilters
     *   secondaryFilters={({ control }) => <FormTextField control={control} name="name" label="Название" placeholder="Введите название" />}
     * />
     * ```
     */
    secondaryFilters?: (props: InputsProps<TFieldValues>) => ReactNode;
    /**
     * Кнопка отправки формы
     *
     * @example
     * ```ts
     * <FormFilters
     *   submitButton={(props) => <Button {...props} loading={isLoading}>Применить</Button>}
     * />
     * ```
     */
    submitButton?: (props: ButtonProps) => ReactNode;
    /**
     * Определение ширины колонок для основных фильтров.
     * Поддерживает CSS grid-template-columns синтаксис:
     * - minmax(min, max): например, "minmax(150px, 200px) minmax(200px, 300px)"
     * - fr (fractional units): например, "1fr 2fr"
     * - px (pixels): например, "200px 300px"
     * - Комбинации: например, "minmax(150px, 1fr) 2fr"
     *
     * @default "1fr"
     */
    mainFiltersColumns?: string;
    /**
     * Флаг загрузки фильтров, используйте когда фильтры загружаются динамически с сервера
     */
    isLoading?: boolean;
};
export {};
