import { ReactNode } from 'react';
import { RadioGroupProps, Theme } from '@mui/material';
import { M4LOverridesStyleRules } from '../../../@types/augmentations';
import { RHFRADIO_GROUP_KEY_COMPONENT } from './constants';
import { RHFRadioGroupSlots } from './slots/slots';
import { LabelProps } from '../../Label/types';
import { Sizes } from '@m4l/styles';
import { HelperErrorProps } from '../../HelperError';
export type GetOptionLabelType<T> = (option: T) => string | undefined;
export type GetOptionValueType<T> = (option: T) => string | number;
export interface RHFRadioGroupProps<T> extends RadioGroupProps, Omit<LabelProps, 'dataTestId' | 'error' | 'children' | 'className' | 'disabled' | 'size' | 'skeletonWidth'> {
    /**
     * Identificador para el manejo de campos en react hook form.
     */
    name: string;
    /**
     * Tamaño del componente
     */
    size?: Extract<Sizes, 'small' | 'medium'>;
    /**
     * Propiedad que deshabilita la interacción del componente.
     */
    disabled?: boolean;
    /**
     * Nombre de clase CSS personalizada que se aplicará al componente.
     */
    className?: string;
    /**
     * Propiedad usada para facilitar la identificación del componente en las pruebas.
     */
    dataTestId?: string;
    /**
     * Medida de anchura para el esqueleto del label
     */
    labelSkeletonWidth?: LabelProps['skeletonWidth'];
    /**
     * Medida de anchura para el esqueleto del helperError
     */
    helperErrorSkeletonWidth?: HelperErrorProps['skeletonWidth'];
    /**
     * Opciones del componente
     */
    options: T[];
    /**
     * Componente de control para la opción
     */
    ControlOption?: React.ComponentType<any>;
    /**
     * Función para obtener el label de la opción
     */
    getOptionLabel: GetOptionLabelType<T>;
    /**
     * Función para obtener el valor de la opción
     */
    getOptionValue: GetOptionValueType<T>;
    /**
     * Optional. Renders an icon or image before each option label.
     * If it returns a string, it is used as an image URL; otherwise the ReactNode is rendered as-is (e.g. icon from @m4l/icons).
     */
    getOptionStartAdornment?: (option: T) => ReactNode | string | undefined;
    /**
     * Optional. Number of columns for the options grid (e.g. 2 for two columns per row).
     * When set, options are laid out in a grid with this many columns; no need to pass row.
     */
    rowColumns?: number;
}
/** Owner state for radioGroup slot: when true, options container uses gap sp6 (images/icons stories). */
export interface RHFRadioGroupRadioGroupOwnerState {
    hasStartAdornment?: boolean;
    /** When set, options use grid with this many columns (no need for row). */
    rowColumns?: number;
}
/** Owner state for optionLabel slot (text.primary when selected, text.secondary when not). */
export interface RHFRadioGroupOptionLabelOwnerState {
    checked?: boolean;
}
export type RHFRadioGroupSlotsType = keyof typeof RHFRadioGroupSlots;
export type RHFRadioGroupStyles = M4LOverridesStyleRules<RHFRadioGroupSlotsType, typeof RHFRADIO_GROUP_KEY_COMPONENT, Theme>;
//# sourceMappingURL=types.d.ts.map