import { ButtonColors, IconType, IconFontColor, VisualSlotType, AnyIconDefinition, TooltipPosition, TooltipAlignment } from './types';
import { SwitchOption, SwitchProps } from './switch';
import { InnerButtonProps } from './button';
import { IconProps } from './icon';
import { BadgeProps } from './badge';
/**
 * Configuración de un botón genérico del Modal
 * Sistema agnóstico que permite definir cualquier cantidad de botones con cualquier configuración
 * Extiende todas las props opcionales de InnerButton para máxima flexibilidad
 */
export interface ModalButton extends Pick<InnerButtonProps, 'className' | 'classNameLabel' | 'rounded' | 'clickable' | 'square' | 'badgeColor' | 'badgeLabel' | 'badgeTheme' | 'badgeSize' | 'badgeStroke' | 'badgeIcon' | 'badgeIconDuotonePrimary' | 'badgeIconDuotoneSecondary' | 'badgeIconDuotoneOpacityPrimary' | 'badgeIconDuotoneOpacitySecondary' | 'badgeLoading' | 'colorIcon' | 'leftSlotDuotonePrimary' | 'leftSlotDuotoneSecondary' | 'leftSlotDuotoneOpacityPrimary' | 'leftSlotDuotoneOpacitySecondary' | 'rightSlotDuotonePrimary' | 'rightSlotDuotoneSecondary' | 'rightSlotDuotoneOpacityPrimary' | 'rightSlotDuotoneOpacitySecondary' | 'fullWidth' | 'link' | 'borderable' | 'target' | 'onClickLeftSlot' | 'onClickRightSlot' | 'as' | 'classNameId' | 'showShadow' | 'tooltip' | 'tooltipPosition' | 'tooltipAlignment' | 'tooltipColor' | 'tooltipDelay' | 'tooltipAbsolute' | 'defaultTooltipColor' | 'classNameTooltip' | 'classNameIcon' | 'stopPropagation' | 'pointer' | 'textColor' | 'textAlign' | 'slotLayout' | 'whiteBackground' | 'strokeWidth' | 'transition' | 'active' | 'hoverText'> {
    /** ID único del botón (opcional, útil para identificar el botón en callbacks) */
    id?: string;
    /** Texto del botón (opcional para botones solo con icono) */
    label?: string;
    /** Callback que se ejecuta al hacer clic en el botón */
    onClick?: (event?: React.MouseEvent<HTMLButtonElement>) => void;
    /** Color del botón */
    color?: ButtonColors;
    /** Si el botón está deshabilitado */
    disabled?: boolean;
    /** Icono del botón */
    icon?: IconType | AnyIconDefinition;
    /** Icono a la izquierda del texto (para botones con texto) */
    leftSlot?: VisualSlotType;
    /** Icono a la derecha del texto (para botones con texto) */
    rightSlot?: VisualSlotType;
    /** Si el modal debe cerrarse automáticamente al hacer clic en este botón */
    closeOnClick?: boolean;
    /** Si el botón debe mostrarse (útil para mostrar/ocultar condicionalmente) */
    show?: boolean;
    /** Tema del botón (`icon` deprecado; preferir `solid` + solo icono sin `label`). */
    theme?: 'solid' | 'icon';
    /** Tamaño del botón */
    size?: 'xs' | 'sm' | 'md' | 'lg';
    /** Pill del botón */
    pill?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'pill';
    iconDuotonePrimary?: IconFontColor;
    iconDuotoneSecondary?: IconFontColor;
    iconDuotoneOpacityPrimary?: number;
    iconDuotoneOpacitySecondary?: number;
}
/**
 * Configuración de un badge del Modal
 * Sistema agnóstico que permite definir cualquier cantidad de badges
 * Extiende todas las props opcionales de Badge para máxima flexibilidad
 */
export interface ModalBadge extends Omit<BadgeProps, 'label'> {
    /** ID único del badge (opcional) */
    id?: string;
    /** Etiqueta del badge */
    label: string;
    /** Si el badge debe mostrarse */
    show?: boolean;
}
/**
 * Configuración del icono principal del Modal
 * Extiende todas las props opcionales de Icon para máxima flexibilidad
 */
export interface ModalIcon extends Omit<IconProps, 'name'> {
    /** Icono a mostrar (mapeado desde IconProps.name) */
    icon: IconType | AnyIconDefinition;
    /** Si el icono debe mostrarse */
    show?: boolean;
    /** @deprecated Usar colorDuotonePrimary en su lugar */
    iconDuotonePrimary?: IconFontColor;
    /** @deprecated Usar colorDuotoneSecondary en su lugar */
    iconDuotoneSecondary?: IconFontColor;
    /** @deprecated Usar opacityDuotonePrimary en su lugar */
    iconDuotoneOpacityPrimary?: number;
    /** @deprecated Usar opacityDuotoneSecondary en su lugar */
    iconDuotoneOpacitySecondary?: number;
}
/**
 * Configuración de un botón del footer del Modal
 * @deprecated Usar ModalButton en su lugar. Se mantiene para retrocompatibilidad.
 */
export interface ModalFooterButton extends ModalButton {
    /** Texto del botón */
    label: string;
}
/**
 * Props del `Switch` interno del header cuando se usan pestañas (`tabsConfig.switch`).
 */
export type ModalTabsSwitchProps = Pick<SwitchProps, 'size' | 'colorIcon' | 'fullWidth' | 'slotIconSize'>;
/**
 * Pestañas del modal agrupadas (misma idea que `iconConfig` / `headerButton`): opciones, callbacks y apariencia del Switch.
 */
export interface ModalTabsConfig {
    /** Opciones mostradas en el Switch del header. */
    options: SwitchOption[];
    /** Valor inicial de la pestaña activa (no controlado; el estado interno sigue en el proveedor del modal). */
    defaultValueTab?: string;
    /** Callback al cambiar de pestaña. */
    onChangeTab?: (value: string) => void;
    /**
     * Configuración del Switch: tamaño del control (`size`), color de iconos en slots, ancho completo y
     * tamaño uniforme de iconos (`slotIconSize`). Por pestaña se pueden usar `leftSlotIconSize` / `rightSlotIconSize` en cada opción.
     */
    switch?: ModalTabsSwitchProps;
}
/**
 * Botón de cerrar (X) en la cabecera del modal — API agrupada (mismo criterio que `iconConfig`, `headerButton`, etc.).
 */
export interface ModalCloseButtonConfig {
    /** Muestra tooltip al pasar el cursor sobre la X. @default false */
    tooltip?: boolean;
    /** Texto del tooltip. Solo aplica si `tooltip` es `true`. @default 'Cerrar' */
    tooltipLabel?: string;
    /**
     * Posición del tooltip respecto al botón. Si se omite: **`bottom`** en `Modal`, **`left`** en `Drawer`.
     */
    tooltipPosition?: TooltipPosition;
    /** Alineación del tooltip (eje perpendicular a `tooltipPosition`). @default 'center' */
    tooltipAlignment?: TooltipAlignment;
}
export interface ModalProps {
    isOpen: boolean;
    onClose: () => void;
    size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';
    children: React.ReactNode;
    disableEscapeClose?: boolean;
    disableOutsideTab?: boolean;
    disableOutsideClick?: boolean;
    closeAtCorner?: boolean;
    showCloseButton?: boolean;
    title?: string;
    /**
     * z-index del overlay raíz. Por defecto `52` (por encima de headers/celdas sticky de `Table`, hasta 51).
     * `50` y `60` (p. ej. AlertDialog anidado) usan tokens; cualquier otro número se aplica vía `style`
     * (p. ej. `1200` para quedar por encima de popovers en portal ~1000).
     */
    zIndex?: number;
    hideFooter?: boolean;
    /**
     * Padding uniforme de cabecera, cuerpo y pie (`Modal.Header` / `Modal.Body` / `Modal.Footer`).
     * - `md` (por defecto): 16px — diálogo modal.
     * - `sm`: 8px — p. ej. `Popup` con `popoverStructured`.
     */
    sectionPadding?: 'md' | 'sm';
    /**
     * Sistema nuevo: Icono principal del Modal
     * Permite configurar el icono principal de forma más flexible
     * Si se proporciona, tiene prioridad sobre las props legacy (icon, iconDuotonePrimary, etc.)
     */
    iconConfig?: ModalIcon;
    /**
     * Botón de cerrar (cabecera): tooltip opcional. Preferir este bloque frente a extender props sueltas en raíz.
     */
    closeButton?: ModalCloseButtonConfig;
    /**
     * Sistema nuevo: Botón del header (modelo cerrado)
     * Solo existe un botón en el header actualmente
     * Si se proporciona, tiene prioridad sobre las props legacy (headerButtonIcon, headerButtonOnClick, etc.)
     * Para casos especiales con múltiples botones, usar headerButtons (array)
     */
    headerButton?: ModalButton;
    /**
     * Sistema nuevo: Array de botones del header (para casos especiales)
     * Permite definir múltiples botones cuando se necesite más flexibilidad
     */
    headerButtons?: ModalButton[];
    /**
     * Sistema nuevo: Badge del header (modelo cerrado)
     * Solo existe un badge en el header actualmente
     * Si se proporciona, tiene prioridad sobre las props legacy (badgeIcon, badgeLabel, etc.)
     * Para casos especiales con múltiples badges, usar badges (array)
     */
    badge?: ModalBadge;
    /**
     * Sistema nuevo: Array de badges del header (para casos especiales)
     * Permite definir múltiples badges cuando se necesite más flexibilidad
     */
    badges?: ModalBadge[];
    /**
     * Sistema nuevo: Botón auxiliar del footer (a la izquierda)
     * Solo existe un botón auxiliar en el footer actualmente
     * Si se proporciona, tiene prioridad sobre las props legacy (footerButtonIcon, footerButtonOnClick, etc.)
     */
    footerAuxButton?: ModalButton;
    /**
     * Sistema nuevo: Botones del footer (modelo cerrado)
     * Define específicamente los botones principales del footer (primary = success, secondary = cancel)
     * Si se proporciona, tiene prioridad sobre las props legacy (cancelButtonText, successButtonText, etc.)
     * Para casos especiales con más botones, usar footerButtons (array)
     */
    footerPrimaryButton?: ModalButton;
    footerSecondaryButton?: ModalButton;
    /**
     * Sistema nuevo: Array de botones del footer (para casos especiales)
     * Permite definir múltiples botones cuando se necesite más flexibilidad
     */
    footerButtons?: ModalButton[];
    /**
     * @deprecated Usar iconConfig en su lugar
     */
    icon?: IconType | AnyIconDefinition;
    iconDuotonePrimary?: IconFontColor;
    iconDuotoneSecondary?: IconFontColor;
    iconDuotoneOpacityPrimary?: number;
    iconDuotoneOpacitySecondary?: number;
    /**
     * @deprecated Usar headerButton en su lugar
     */
    headerButtonIcon?: IconType | AnyIconDefinition;
    headerButtonIconDuotonePrimary?: IconFontColor;
    headerButtonIconDuotoneSecondary?: IconFontColor;
    headerButtonIconDuotoneOpacityPrimary?: number;
    headerButtonIconDuotoneOpacitySecondary?: number;
    headerButtonOnClick?: () => void;
    /**
     * @deprecated Usar badge en su lugar
     */
    badgeIcon?: IconType | AnyIconDefinition;
    badgeIconDuotonePrimary?: IconFontColor;
    badgeIconDuotoneSecondary?: IconFontColor;
    badgeIconDuotoneOpacityPrimary?: number;
    badgeIconDuotoneOpacitySecondary?: number;
    badgeLabel?: string;
    /**
     * @deprecated Usar footerAuxButton en su lugar
     */
    footerButtonIcon?: IconType | AnyIconDefinition;
    footerButtonIconDuotonePrimary?: IconFontColor;
    footerButtonIconDuotoneSecondary?: IconFontColor;
    footerButtonIconDuotoneOpacityPrimary?: number;
    footerButtonIconDuotoneOpacitySecondary?: number;
    footerButtonOnClick?: () => void;
    /**
     * @deprecated Usar footerPrimaryButton (success) y footerSecondaryButton (cancel) en su lugar
     */
    cancelButtonText?: string;
    successButtonText?: string;
    onCancel?: (event?: React.MouseEvent<HTMLButtonElement>) => void;
    onSuccess?: (event?: React.MouseEvent<HTMLButtonElement>) => void;
    showCancelButton?: boolean;
    showSuccessButton?: boolean;
    closeAtSuccess?: boolean;
    closeAtCancel?: boolean;
    cancelButtonSlotLeft?: VisualSlotType;
    successButtonSlotRight?: VisualSlotType;
    disableCancelButton?: boolean;
    disableSuccessButton?: boolean;
    successButtonColor?: ButtonColors;
    /**
     * Reparto de iconos en los botones legacy del footer (`cancelButtonSlotLeft` / `successButtonSlotRight`).
     * `spread` aplica `slotLayout={{ var: 'spread', textAlign: 'center' }}` en ambos y reparte el ancho en la fila del footer.
     */
    footerSlotLayout?: 'inline' | 'spread';
    /**
     * Pestañas del header: opciones, callbacks y props del Switch en un solo objeto (API recomendada).
     */
    tabsConfig?: ModalTabsConfig;
    /**
     * @deprecated Usar `tabsConfig.options` en su lugar.
     */
    tabs?: SwitchOption[];
    /**
     * @deprecated Usar `tabsConfig.defaultValueTab` en su lugar.
     */
    defaultValueTab?: string;
    /**
     * @deprecated Usar `tabsConfig.onChangeTab` en su lugar.
     */
    onChangeTab?: (value: string) => void;
}
export interface ModalHeaderProps extends Pick<ModalProps, 'closeAtCorner' | 'showCloseButton' | 'closeButton' | 'tabs' | 'defaultValueTab' | 'onChangeTab' | 'headerButton' | 'headerButtons' | 'badge' | 'badges' | 'headerButtonIcon' | 'headerButtonIconDuotonePrimary' | 'headerButtonIconDuotoneSecondary' | 'headerButtonIconDuotoneOpacityPrimary' | 'headerButtonIconDuotoneOpacitySecondary' | 'headerButtonOnClick' | 'badgeIcon' | 'badgeIconDuotonePrimary' | 'badgeIconDuotoneSecondary' | 'badgeIconDuotoneOpacityPrimary' | 'badgeIconDuotoneOpacitySecondary' | 'badgeLabel'> {
    children?: React.ReactNode;
    title?: string;
}
export interface ModalBodyProps {
    children: React.ReactNode;
    withPadding?: boolean;
}
export interface ModalFooterProps extends Pick<ModalProps, 'footerPrimaryButton' | 'footerSecondaryButton' | 'footerButtons' | 'footerAuxButton' | 'footerButtonIcon' | 'footerButtonIconDuotonePrimary' | 'footerButtonIconDuotoneSecondary' | 'footerButtonIconDuotoneOpacityPrimary' | 'footerButtonIconDuotoneOpacitySecondary' | 'footerButtonOnClick' | 'cancelButtonSlotLeft' | 'successButtonSlotRight' | 'disableCancelButton' | 'disableSuccessButton' | 'successButtonColor' | 'footerSlotLayout'> {
    children?: React.ReactNode;
}
export interface ModalContextType extends Omit<ModalProps, 'isOpen' | 'size' | 'children' | 'disableEscapeClose' | 'disableOutsideTab' | 'disableOutsideClick'> {
    currentTab?: string;
    /**
     * Props efectivas del `Switch` de pestañas (fusión de defaults del modal con `tabsConfig.switch`).
     */
    tabsSwitchProps: ModalTabsSwitchProps;
    /** Icono procesado (puede venir de iconConfig o de las props legacy) */
    processedIcon?: ModalIcon;
    /** Botones procesados del header (pueden venir de headerButton, headerButtons o de las props legacy) */
    processedHeaderButtons?: ModalButton[];
    /** Badges procesados (pueden venir de badge, badges o de las props legacy) */
    processedBadges?: ModalBadge[];
    /** Botón auxiliar procesado del footer (puede venir de footerAuxButton o de las props legacy) */
    processedFooterAuxButton?: ModalButton;
    /** Botones procesados del footer (pueden venir de footerPrimaryButton, footerSecondaryButton, footerButtons o de las props legacy) */
    processedFooterButtons?: ModalButton[];
}
//# sourceMappingURL=modal.d.ts.map