import { ReactNode } from 'react';
import { LabelProps } from '../Label/types';
import { PROPERTY_VALUE_KEY_COMPONENT } from './constants';
import { Theme } from '@mui/material';
import { PropertyValueSlots } from './slots/PropertyValueEnum';
import { ChipColorOptions, Sizes } from '@m4l/styles';
import { M4LOverridesStyleRules } from '../../@types/augmentations';
/**
 * Tipos de valores posibles para los componentes dentro de `PropertyValue`.
 */
export type PropertyValueSlotsType = keyof typeof PropertyValueSlots;
/**
 * Propiedades relacionadas con la configuración de la propiedad (`property`) en el componente `PropertyValue`.
 */
export interface PropertyProps {
    /**
     * Ancho del contenedor de la propiedad, en píxeles.
     */
    propertyWidth?: number;
    /**
     * Icono de la propiedad.
     * @deprecated proppiedad en desuso, se debe usar startAdornment de las props de PropertyValue
     */
    startAdornment?: ReactNode;
}
/**
 * Propiedades relacionadas con la configuración del valor (`value`) en el componente `PropertyValue`.
 */
export interface ValueProps {
    /**
     * Altura del contenedor del valor, en píxeles o como cadena (e.g., `'auto'`).
     */
    valueHeight?: number | string;
    /**
     * @deprecated Esta propiedad está obsoleta y será eliminada en futuras versiones.
     * Utiliza `semanticWidth` o `valueWidthMobile` en su lugar.
     *
     * Ancho del contenedor del valor como porcentaje para escritorios.
     */
    valueWidth?: number;
    /**
     * Ancho del contenedor del valor como porcentaje para dispositivos móviles.
     */
    valueWidthMobile?: number;
}
/**
 * Valores posibles para la propiedad semanticWidth
 */
export type SemanticWidthOptions = 'email' | 'shortName' | 'mediumName' | 'bigName' | 'shortId' | 'mediumId' | 'bigId' | 'shortDescription' | 'mediumDescription' | 'bigDescription' | 'shortNumber' | 'mediumNumber' | 'bigNumber' | 'percentNumber' | 'fullWidth';
/**
 * Propiedades base para el componente `PropertyValue`.
 */
interface PropertyValueBaseProps extends PropertyProps, ValueProps, Omit<LabelProps, 'label'> {
    /**
     * Nombre de la propiedad que se muestra.
     */
    property: string;
    /**
     * Valor asociado a la propiedad. Puede ser un número, una cadena o un nodo React.
     */
    value: number | string | ReactNode;
    /**
     * Indica si el componente debe mostrarse como parte de un formulario.
     * Usa por defecto la dirección 'column'
     */
    isForm?: boolean;
    /**
     * Clase CSS personalizada para el componente.
     */
    className?: string;
    /**
     * Identificador de prueba utilizado para pruebas automatizadas.
     */
    dataTestId?: string;
    /**
     * Indica si el componente está deshabilitado.
     */
    disabled?: boolean;
    /**
     * Define el ancho semántico del componente según el contenido.
     */
    semanticWidth?: SemanticWidthOptions;
    /**
     * Propiedad de tamaño para el componente `PropertyValue`.
     */
    size?: Extract<Sizes, 'small' | 'medium'>;
    /**
     * Dirección del componente `PropertyValue`.
     */
    direction?: 'row' | 'column';
    /**
     * Estilo de la línea punteada del componente `PropertyValue`.
     */
    borderStyle?: 'none' | 'solid' | 'dashed';
}
/**
 * Propiedades cuando `startAdornment` está definido y `iconVariant` es 'text'.
 */
interface PropertyValueWithStartAdornmentText extends PropertyValueBaseProps {
    /**
     * Icono que se muestra al inicio del componente `PropertyValue`.
     */
    startAdornment: ReactNode;
    /**
     * Variante del icono que se muestra al inicio del componente `PropertyValue`.
     */
    iconVariant: 'text';
    /**
     * Color del icono que se muestra al inicio del componente `PropertyValue`.
     * Solo permite valores de texto cuando iconVariant es 'text'.
     */
    iconColor?: 'text.primary' | 'text.secondary' | 'text.disabled';
}
/**
 * Propiedades cuando `startAdornment` está definido y `iconVariant` es 'outlined' o 'containedOpacity'.
 */
interface PropertyValueWithStartAdornmentColored extends PropertyValueBaseProps {
    /**
     * Icono que se muestra al inicio del componente `PropertyValue`.
     */
    startAdornment: ReactNode;
    /**
     * Variante del icono que se muestra al inicio del componente `PropertyValue`.
     */
    iconVariant: 'outlined' | 'containedOpacity';
    /**
     * Color del icono que se muestra al inicio del componente `PropertyValue`.
     * Solo permite ChipColorOptions cuando iconVariant es 'outlined' o 'containedOpacity'.
     */
    iconColor?: ChipColorOptions;
}
/**
 * Propiedades cuando `startAdornment` está definido pero `iconVariant` no está especificado.
 */
interface PropertyValueWithStartAdornmentNoVariant extends PropertyValueBaseProps {
    /**
     * Icono que se muestra al inicio del componente `PropertyValue`.
     */
    startAdornment: ReactNode;
    /**
     * Variante del icono que se muestra al inicio del componente `PropertyValue`.
     */
    iconVariant?: never;
    /**
     * Color del icono que se muestra al inicio del componente `PropertyValue`.
     */
    iconColor?: never;
}
/**
 * Unión de todas las variantes cuando `startAdornment` está definido.
 */
type PropertyValueWithStartAdornment = PropertyValueWithStartAdornmentText | PropertyValueWithStartAdornmentColored | PropertyValueWithStartAdornmentNoVariant;
/**
 * Propiedades cuando `startAdornment` no está definido.
 */
interface PropertyValueWithoutStartAdornment extends PropertyValueBaseProps {
    /**
     * Icono que se muestra al inicio del componente `PropertyValue`.
     */
    startAdornment?: never;
    /**
     * Variante del icono que se muestra al inicio del componente `PropertyValue`.
     */
    iconVariant?: never;
    /**
     * Color del icono que se muestra al inicio del componente `PropertyValue`.
     */
    iconColor?: never;
}
/**
 * Propiedades principales para el componente `PropertyValue`.
 * @example
 * // ✅ Correcto: startAdornment definido con iconVariant 'text', solo permite text.primary, text.secondary o text.disabled
 * <PropertyValue startAdornment={<Icon />} iconVariant="text" iconColor="text.primary" />
 * @example
 * // ✅ Correcto: startAdornment definido con iconVariant 'containedOpacity', permite ChipColorOptions
 * <PropertyValue startAdornment={<Icon />} iconVariant="containedOpacity" iconColor="primary" />
 * @example
 * // ✅ Correcto: startAdornment no definido, iconVariant e iconColor no disponibles
 * <PropertyValue property="Nombre" value="Juan" />
 * @example
 * // ❌ Error de TypeScript: iconVariant no puede usarse sin startAdornment
 * <PropertyValue property="Nombre" value="Juan" iconVariant="text" />
 * @example
 * // ❌ Error de TypeScript: iconColor con ChipColorOptions no puede usarse con iconVariant 'text'
 * <PropertyValue startAdornment={<Icon />} iconVariant="text" iconColor="primary" />
 */
export type PropertyValueProps = PropertyValueWithStartAdornment | PropertyValueWithoutStartAdornment;
/**
 * Estado del propietario para el componente `PropertyValue`, utilizado para personalizar estilos y comportamientos.
 */
export interface PropertyVaLueOwnerState extends Pick<PropertyValueBaseProps, 'disabled' | 'semanticWidth' | 'valueHeight' | 'propertyWidth'> {
    /**
     * Indica si el componente está en modo formulario.
     */
    isForm: boolean;
    /**
     * Tamaño del componente.
     */
    size?: PropertyValueProps['size'];
    /**
     * Dirección del componente `PropertyValue`.
     */
    direction?: PropertyValueProps['direction'];
    /**
     * Variante del icono que se muestra al inicio del componente `PropertyValue`.
     */
    iconVariant?: PropertyValueProps['iconVariant'];
    /**
     * Propiedades adicionales para estilos o comportamientos personalizados.
     */
    [key: string]: unknown;
}
/**
 * Definición de estilos para el componente `PropertyValue`.
 */
export type PropertyValueStyles = M4LOverridesStyleRules<PropertyValueSlotsType, typeof PROPERTY_VALUE_KEY_COMPONENT, Theme>;
export {};
//# sourceMappingURL=types.d.ts.map