import { Sizes } from '@m4l/styles';
import { Theme } from '@mui/material/styles';
import { SelectProps as MUISelectProps } from '@mui/material/Select';
import { SELECT_KEY_COMPONENT } from './constants';
import { SelectSlots } from './slots';
import { M4LOverridesStyleRules } from '../../../../@types/augmentations';
import { default as React } from 'react';
/**
 * Representa una opción dentro del Select.
 * id - Identificador único de la opción. Puede ser número o string.
 * label - Texto que representa la opción.
 * [icon] - (Opcional) URL del ícono asociado a la opción.
 */
export type SelectOption<T extends string | number> = {
    id: T;
    label: string;
    description?: string;
    startAdornment?: React.ReactNode;
    selectedStartAdornment?: React.ReactNode;
    endAdornment?: React.ReactNode;
};
export interface BaseSelectProps {
    /**
     * Tamaño del Select.
     */
    size?: Extract<Sizes, 'small' | 'medium'>;
    /**
     * Define si el Select está deshabilitado.
     */
    disabled?: boolean;
    /**
     * Define si el Select está en estado de error.
     */
    error?: boolean;
    /**
     * Enseña un texto de guia en el Select.
     */
    placeholder?: string;
    /**
     * Variaciones de apariecia del Select.
     */
    variant?: 'text' | 'outlined';
    /**
     * Classes personalizadas.
     */
    className?: string;
    /**
     * Identificador único del componente, para pruebas automatizadas.
     */
    dataTestId?: string;
    /**
     * Define si el Select está en modo solo lectura.
     */
    readOnly?: boolean;
}
export type SelectOptionValue<T extends string | number, Multiple> = Multiple extends true ? Array<SelectOption<T>> : SelectOption<T> | null;
/**
 * Propiedades que acepta el componente `Select`, extendiendo las propiedades de Material-UI `SelectProps`.
 */
export interface SelectProps<T extends string | number, Multiple extends boolean | undefined = false> extends BaseSelectProps, Omit<MUISelectProps<T>, 'size' | 'onChange' | 'error' | 'variant' | 'color' | 'value'> {
    /**
     * Lista de opciones para enseñar en el Select.
     */
    options: SelectOption<T>[];
    /**
     * Valor seleccionado en el Select. el Id o los Ids
     */
    value: (Multiple extends true ? T[] : T) | null;
    /**
     * Indica si el Select permite seleccionar múltiples opciones.
     */
    multiple?: Multiple;
    /**
     * procedimiento para ejecutarse cuando cabia la selección.
     */
    onChange: (opt: SelectOptionValue<T, Multiple>) => void;
}
/**
 * Propiedades internas que definen el estado del componente `Select`.
 * paletteColor - Color de la paleta aplicado al Select.
 */
export interface SelectOwnerState<T extends string | number, Multiple extends boolean | undefined = false> extends Pick<SelectProps<T, Multiple>, 'classes' | 'size' | 'error' | 'variant' | 'disabled' | 'multiple' | 'readOnly'> {
    disabled?: boolean;
    readOnly?: boolean;
}
/**
 * Define los tipos de slots disponibles en el Select.
 */
export type SelectSlotsType = keyof typeof SelectSlots;
/**
 * Estilos aplicables al componente Select.
 */
export type SelectStyles = M4LOverridesStyleRules<SelectSlotsType, typeof SELECT_KEY_COMPONENT, Theme>;
//# sourceMappingURL=types.d.ts.map