import { ButtonTheme, ButtonColors, IconType, VisualSlotType, TooltipPosition, TooltipAlignment, TooltipColors, VisualSize, PillSize, IconFontColor, AnyIconDefinition } from './types';
import { BadgeColor, BadgeTheme, BadgeSize } from './badge';
import { ButtonIconConfig, ButtonBadgeConfig, ButtonSlotConfig, ButtonTooltipConfig } from './buttonConfig';
export type { ButtonIconConfig, ButtonBadgeConfig, ButtonSlotConfig } from './buttonConfig';
/** Alineación del texto en layout `{ var: 'spread' }`. */
export type ButtonSlotSpreadTextAlign = 'left' | 'center' | 'right';
/**
 * Layout «spread»: slots en extremos; el texto se controla con `textAlign`.
 * @example `{ var: 'spread', textAlign: 'center' }`
 */
export type ButtonSlotSpreadLayout = {
    var: 'spread';
    textAlign?: ButtonSlotSpreadTextAlign;
};
export type ButtonSlotLayout = 'inline' | ButtonSlotSpreadLayout;
/** Objeto listo para footers/popup: texto centrado entre slots. */
export declare const BUTTON_SLOT_SPREAD_CENTER: ButtonSlotSpreadLayout;
export declare function isButtonSlotSpreadLayout(layout: ButtonSlotLayout | undefined): layout is ButtonSlotSpreadLayout;
export interface InnerButtonProps extends React.HTMLAttributes<HTMLElement> {
    className?: string;
    disabled?: boolean;
    classNameLabel?: string;
    /**
     * Tema visual del botón (`solid` o variante **`icon`** deprecada).
     * Preferir `solid` y botón solo icono vía `icon` + sin `children`.
     */
    theme?: ButtonTheme;
    rounded?: boolean;
    clickable?: boolean;
    square?: boolean;
    /** @deprecated Usar `badge.color` en su lugar */
    badgeColor?: BadgeColor;
    /** @deprecated Usar `badge.label` en su lugar */
    badgeLabel?: string;
    badgeTheme?: BadgeTheme;
    badgeSize?: BadgeSize;
    badgeStroke?: boolean;
    /** @deprecated Usar `badge.icon` en su lugar */
    badgeIcon?: IconType | AnyIconDefinition;
    badgeIconDuotonePrimary?: IconFontColor;
    badgeIconDuotoneSecondary?: IconFontColor;
    badgeIconDuotoneOpacityPrimary?: number;
    badgeIconDuotoneOpacitySecondary?: number;
    /**
     * Si es true, muestra un spinner de carga en el badge.
     * @deprecated Usar `badge.loading` en su lugar
     */
    badgeLoading?: boolean;
    color?: ButtonColors;
    /**
     * Icono principal del botón.
     * Puede ser un string simple (ej: "ImageOutlined"), un ReactElement, o un objeto de configuración completo.
     * Si se usa como string simple (sin estilos personalizados), funciona sin deprecación.
     * Si se usa como objeto de configuración, tiene la misma funcionalidad que iconProps.
     * Para estilos personalizados con props separadas, usar iconProps.
     */
    icon?: VisualSlotType | React.ReactElement | ButtonIconConfig;
    /** @deprecated Usar `iconProps.color` en su lugar */
    colorIcon?: IconFontColor;
    /** @deprecated Usar iconProps.iconDuotonePrimary en su lugar */
    iconDuotonePrimary?: IconFontColor;
    /** @deprecated Usar iconProps.iconDuotoneSecondary en su lugar */
    iconDuotoneSecondary?: IconFontColor;
    /** @deprecated Usar iconProps.iconDuotoneOpacityPrimary en su lugar */
    iconDuotoneOpacityPrimary?: number;
    /** @deprecated Usar iconProps.iconDuotoneOpacitySecondary en su lugar */
    iconDuotoneOpacitySecondary?: number;
    /**
     * Slot izquierdo del botón.
     * Puede ser un string simple (ej: "EditOutlined"), un ReactElement, o un objeto de configuración completo.
     * Si se usa como string simple (sin estilos personalizados), funciona sin deprecación.
     * Si se usa como objeto de configuración, tiene la misma funcionalidad que leftSlotProps.
     * Para estilos personalizados con props separadas, usar leftSlotProps.
     */
    leftSlot?: VisualSlotType | ButtonSlotConfig;
    /**
     * Slot derecho del botón.
     * Puede ser un string simple (ej: "ArrowRightOutlined"), un ReactElement, o un objeto de configuración completo.
     * Si se usa como string simple (sin estilos personalizados), funciona sin deprecación.
     * Si se usa como objeto de configuración, tiene la misma funcionalidad que rightSlotProps.
     * Para estilos personalizados con props separadas, usar rightSlotProps.
     */
    rightSlot?: VisualSlotType | ButtonSlotConfig;
    /** @deprecated Usar leftSlotProps.iconDuotonePrimary en su lugar */
    leftSlotDuotonePrimary?: IconFontColor;
    /** @deprecated Usar leftSlotProps.iconDuotoneSecondary en su lugar */
    leftSlotDuotoneSecondary?: IconFontColor;
    /** @deprecated Usar leftSlotProps.iconDuotoneOpacityPrimary en su lugar */
    leftSlotDuotoneOpacityPrimary?: number;
    /** @deprecated Usar leftSlotProps.iconDuotoneOpacitySecondary en su lugar */
    leftSlotDuotoneOpacitySecondary?: number;
    /** @deprecated Usar rightSlotProps.iconDuotonePrimary en su lugar */
    rightSlotDuotonePrimary?: IconFontColor;
    /** @deprecated Usar rightSlotProps.iconDuotoneSecondary en su lugar */
    rightSlotDuotoneSecondary?: IconFontColor;
    /** @deprecated Usar rightSlotProps.iconDuotoneOpacityPrimary en su lugar */
    rightSlotDuotoneOpacityPrimary?: number;
    /** @deprecated Usar rightSlotProps.iconDuotoneOpacitySecondary en su lugar */
    rightSlotDuotoneOpacitySecondary?: number;
    fullWidth?: boolean;
    size?: 'xxs' | 'xs' | 'sm' | 'md' | 'lg';
    iconSizeExtended?: 'none' | VisualSize;
    link?: string;
    borderable?: boolean | undefined;
    target?: string;
    /**
     * Atributo nativo `type` del `<button>` (`button`, `submit`, `reset`).
     * Solo aplica cuando el componente se renderiza como `<button>` (sin `link`, y `as` distinto de `div`).
     */
    type?: React.ButtonHTMLAttributes<HTMLButtonElement>['type'];
    defaultSizeIcon?: boolean;
    /** @deprecated Usar `iconProps.onClick` en su lugar */
    onClickIcon?: (e: React.MouseEvent<HTMLDivElement>) => void;
    /** @deprecated Usar `leftSlotProps.onClick` en su lugar */
    onClickLeftSlot?: (e: React.MouseEvent<HTMLDivElement>) => void;
    /** @deprecated Usar `rightSlotProps.onClick` en su lugar */
    onClickRightSlot?: (e: React.MouseEvent<HTMLDivElement>) => void;
    as?: 'button' | 'div';
    classNameId?: string;
    showShadow?: boolean;
    /**
     * Tooltip del botón.
     * Puede ser un string simple o un objeto de configuración completo.
     * Si se usa como string simple (sin estilos personalizados), funciona sin deprecación.
     * Si se usa como objeto de configuración, tiene la misma funcionalidad que tooltipProps.
     * Para estilos personalizados con props separadas, usar tooltipProps.
     */
    tooltip?: string | ButtonTooltipConfig;
    /** @deprecated Usar tooltip como objeto o tooltipProps.position en su lugar */
    tooltipPosition?: TooltipPosition;
    /** @deprecated Usar tooltip como objeto o tooltipProps.alignment en su lugar */
    tooltipAlignment?: TooltipAlignment;
    /** @deprecated Usar tooltip como objeto o tooltipProps.color en su lugar */
    tooltipColor?: TooltipColors;
    /** @deprecated Usar tooltip como objeto o tooltipProps.delay en su lugar */
    tooltipDelay?: number;
    /** @deprecated Usar tooltip como objeto o tooltipProps.absolute en su lugar */
    tooltipAbsolute?: boolean;
    /** @deprecated Usar tooltip como objeto o tooltipProps.defaultColor en su lugar */
    defaultTooltipColor?: boolean;
    /** @deprecated Usar tooltip como objeto o tooltipProps.className en su lugar */
    classNameTooltip?: string;
    /** @deprecated Usar `iconProps.className` en su lugar */
    classNameIcon?: string;
    stopPropagation?: boolean;
    pointer?: boolean;
    textColor?: ButtonColors;
    textAlign?: 'left' | 'center' | 'right';
    /**
     * Distribución de `leftSlot` / `rightSlot` respecto al texto.
     * - `inline` (por defecto): iconos y texto forman un grupo centrado (comportamiento histórico).
     * - `{ var: 'spread', textAlign? }`: iconos en extremos; el bloque de texto usa `textAlign` (`left` | `center` | `right`).
     *   Si omites `textAlign` en el objeto, se usa heurística: ambos slots → `center`; solo izquierda → `right`; solo derecha → `left`.
     * La prop raíz `textAlign` del botón, si se define, tiene prioridad sobre `slotLayout.textAlign`.
     */
    slotLayout?: ButtonSlotLayout;
    whiteBackground?: boolean;
    strokeWidth?: number;
    transition?: boolean;
    pill?: PillSize;
    active?: boolean;
    /** Texto que se muestra al hacer hover sobre el botón. Solo funciona cuando el badge termina de cargar (badgeLoading cambia de true a false) */
    hoverText?: string;
    /**
     * Sistema nuevo: Configuración del icono principal del botón (objeto)
     * Permite configurar el icono principal de forma más flexible
     * Si se proporciona, tiene prioridad sobre las props legacy (icon, iconDuotonePrimary, etc.)
     * @example { icon: 'ImageOutlined', color: 'brand', show: true }
     */
    iconProps?: ButtonIconConfig;
    /**
     * Sistema nuevo: Configuración del badge del botón (objeto)
     * Permite configurar el badge de forma más flexible
     * Si se proporciona, tiene prioridad sobre las props legacy (badgeColor, badgeLabel, etc.)
     * @example { label: '5', color: 'accent', show: true }
     */
    badge?: ButtonBadgeConfig;
    /**
     * Sistema nuevo: Configuración del slot izquierdo (objeto)
     * Permite configurar el slot izquierdo de forma más flexible
     * Si se proporciona, tiene prioridad sobre las props legacy (leftSlot, leftSlotDuotonePrimary, etc.)
     * @example { icon: 'EditOutlined', onClick: () => {}, show: true }
     */
    leftSlotProps?: ButtonSlotConfig;
    /**
     * Sistema nuevo: Configuración del slot derecho (objeto)
     * Permite configurar el slot derecho de forma más flexible
     * Si se proporciona, tiene prioridad sobre las props legacy (rightSlot, rightSlotDuotonePrimary, etc.)
     * @example { icon: 'Check2Outlined', onClick: () => {}, show: true }
     */
    rightSlotProps?: ButtonSlotConfig;
    /**
     * Sistema nuevo: Configuración del tooltip del botón (objeto)
     * Permite configurar el tooltip de forma más flexible
     * Si se proporciona, tiene prioridad sobre las props legacy (tooltip, tooltipPosition, etc.)
     * @example { label: 'Guardar archivo', position: 'top', delay: 500 }
     */
    tooltipProps?: ButtonTooltipConfig;
}
/** Variante interna de reparto de slots cuando el layout es spread (texto + badge en columna central). */
export type ButtonSlotSpreadSides = 'both' | 'left-only' | 'right-only';
export interface ButtonProps extends Omit<InnerButtonProps, 'iconSizeExtended' | 'defaultSizeIcon' | 'classNameTooltip' | 'tooltipColor'> {
    variant?: 'button' | 'text' | 'outlined';
}
/** @deprecated Usa InnerButtonProps en su lugar */
export type IInnerButtonProps = InnerButtonProps;
/** @deprecated Usa ButtonProps en su lugar */
export type IButtonProps = ButtonProps;
//# sourceMappingURL=button.d.ts.map