import { Control, FieldPath, FieldValues, ControllerRenderProps, ControllerFieldState, FormState } from 'react-hook-form';
import { Theme } from '@mui/material';
import { M4LOverridesStyleRules } from '../../@types/augmentations';
import { WithRHFControllerSlots } from './slots/WithRHFControllerEnum';
import { WITH_RHF_CONTROLLER_KEY } from './constants';
import { LabelPropsBase } from '../../components/Label/types';
import { Sizes } from '@m4l/styles';
/**
 * Props que el componente envuelto recibirá del Controller de react-hook-form
 */
export interface RHFControllerRenderProps<TFieldValues extends FieldValues = FieldValues> {
    /** Props del field del Controller */
    field: ControllerRenderProps<TFieldValues, FieldPath<TFieldValues>>;
    /** Estado del field (error, invalid, etc.) */
    fieldState: ControllerFieldState;
    /** Estado del formulario completo */
    formState: FormState<TFieldValues>;
}
/**
 * Props base que todos los componentes RHF deben tener
 */
export interface BaseRHFProps<TFieldValues extends FieldValues = FieldValues> extends LabelPropsBase {
    /** Nombre del campo en el formulario */
    name: FieldPath<TFieldValues>;
    /** Control del formulario (opcional, se obtiene automáticamente de useFormContext si no se proporciona) */
    control?: Control<TFieldValues>;
    /** Tamaño del componente */
    size?: Extract<Sizes, 'small' | 'medium'>;
    /** Indica si el componente está deshabilitado */
    disabled?: boolean;
    /** Identificador único para el campo */
    id?: string;
}
/**
 * Props que el HOC añade al componente envuelto
 */
export interface WithRHFControllerProps<TFieldValues extends FieldValues = FieldValues> extends BaseRHFProps<TFieldValues> {
    /** Props del render del Controller */
    renderProps?: RHFControllerRenderProps<TFieldValues>;
}
/**
 * Props adicionales que el HOC pasa al componente envuelto
 */
export interface WithRHFControllerAdditionalProps {
    /** Valor del campo */
    value?: any;
    /** Función de cambio de valor */
    onChange?: (...event: any[]) => void;
    /** Función de blur (puede ser de diferentes tipos según el componente) */
    onBlur?: (...args: any[]) => void;
    /** Nombre del campo */
    name?: string;
    /** Indica si hay error */
    error?: boolean;
    /** Tamaño del componente */
    size?: Extract<Sizes, 'small' | 'medium'>;
    /** Indica si el componente está deshabilitado */
    disabled?: boolean;
    /** Identificador único para el campo */
    id?: string;
}
/**
 * Tipo para el componente que será envuelto por el HOC
 */
export type ComponentWithRHFControllerProps<TComponentProps extends Record<string, any> = {}, TFieldValues extends FieldValues = FieldValues> = TComponentProps & RHFControllerRenderProps<TFieldValues> & Partial<WithRHFControllerAdditionalProps>;
/**
 * Define los estilos del HOC `withRHFController`. Permite la personalización parcial
 * de las reglas de estilo mediante `M4LOverridesStyleRules`.
 */
export type WithRHFControllerStyles = M4LOverridesStyleRules<WithRHFControllerSlots, typeof WITH_RHF_CONTROLLER_KEY, Theme>;
//# sourceMappingURL=types.d.ts.map