import { ButtonColors, VisualSlotType, PillSize, TooltipPosition, TooltipAlignment } from '../../../shared/types/types';
import { IconProp, IconDefinition } from '@fortawesome/fontawesome-svg-core';
type AnyIconDefinition = IconProp | IconDefinition | {
    icon: IconDefinition['icon'];
    prefix?: string;
};
/**
 * Configuración de un botón en el Toolbar
 */
export interface ToolbarButton {
    /** ID único del botón (ej: 'delete', 'recover', 'calendar'). Usado para compartir estado entre múltiples toolbars */
    id?: string;
    /** Color del botón: primary, secondary o tertiary */
    color?: ButtonColors;
    /** Icono del botón */
    icon?: VisualSlotType | AnyIconDefinition;
    /** Texto del botón */
    label?: string;
    /** Handler al hacer click (siempre se ejecuta, tenga o no addons) */
    onClick?: () => void;
    /** Si el botón está deshabilitado */
    disabled?: boolean;
    /** Si el botón debe mostrarse (por defecto: true) */
    show?: boolean;
    /** Addons asociados a este botón (se muestran al hacer click) */
    addons?: ToolbarAddon[];
    /** Radio de borde del botón (pill = completamente redondeado) */
    pill?: PillSize;
    /** Texto del tooltip que se muestra al hacer hover */
    tooltip?: string;
    /** Posición del tooltip */
    tooltipPosition?: TooltipPosition;
    /** Alineación del tooltip */
    tooltipAlignment?: TooltipAlignment;
    /** Retraso en milisegundos antes de mostrar el tooltip */
    tooltipDelay?: number;
}
/**
 * Configuración de un addon en el Toolbar
 */
export interface ToolbarAddon {
    /** Tipo de addon: 'input', 'date' o 'button' */
    type: 'input' | 'date' | 'button';
    /** Label del addon (para inputs y buttons) */
    label?: string;
    /** Icono del addon (para buttons) */
    icon?: VisualSlotType | AnyIconDefinition;
    /** Slot izquierdo (para inputs) */
    leftSlot?: VisualSlotType;
    /** Slot derecho (para inputs) */
    rightSlot?: VisualSlotType;
    /** Handler cuando cambia el valor (para inputs y date pickers) */
    onChange?: (value: string | Date | null | {
        start: Date | null;
        end: Date | null;
    }) => void;
    /** Handler cuando se hace click en el botón (para type: 'button') */
    onClick?: () => void;
    /** Color del botón (para type: 'button') */
    color?: ButtonColors;
    /** Si el addon está deshabilitado */
    disabled?: boolean;
    /** Si el addon debe mostrarse (por defecto: true) */
    show?: boolean;
    /** Radio de borde del botón (para type: 'button', pill = completamente redondeado) */
    pill?: PillSize;
    /** Texto del tooltip que se muestra al hacer hover (para type: 'button') */
    tooltip?: string;
    /** Posición del tooltip (para type: 'button') */
    tooltipPosition?: TooltipPosition;
    /** Alineación del tooltip (para type: 'button') */
    tooltipAlignment?: TooltipAlignment;
    /** Retraso en milisegundos antes de mostrar el tooltip (para type: 'button') */
    tooltipDelay?: number;
    /** Valor inicial para inputs */
    value?: string;
    /** Valor inicial para date picker (fecha única) */
    selectedDate?: Date | null;
    /** Valor inicial para date picker (rango) */
    selectedRange?: {
        start: Date | null;
        end: Date | null;
    };
    /** Placeholder para inputs */
    placeholder?: string;
    /** Tipo de input HTML (text, email, password, etc.) */
    inputType?: React.InputHTMLAttributes<HTMLInputElement>['type'];
    /** Name del input */
    name?: string;
    /** Props adicionales para el DatePicker */
    datePickerProps?: {
        mode?: 'single' | 'range';
        minDate?: Date;
        maxDate?: Date;
        format?: string;
        placeholder?: string;
    };
}
/**
 * Props del componente Toolbar
 */
export interface ToolbarProps {
    /** Texto a mostrar en la barra de addons (ej: "Seleccionados") */
    text?: string;
    /** Número de elementos seleccionados (se muestra como "(count) text" en la vista de addons) */
    count?: number;
    /** Botones a mostrar (cada botón puede tener sus propios addons) */
    buttons?: ToolbarButton[];
    /** Handler cuando se hace click en el botón de cerrar */
    onClose?: () => void;
    /**
     * Si es `false`, no se renderiza el botón de cierre (X) aunque exista `onClose` (útil p. ej. en un paso de confirmación solo con acciones en addons).
     * Por defecto `true`: misma regla que antes (hay X solo cuando `onClose` está definido).
     */
    showCloseButton?: boolean;
    /** Clase CSS adicional */
    className?: string;
    /** Si el toolbar debe mostrarse (controla la visibilidad) */
    visible?: boolean;
    /** ID del botón activo (modo controlado). Si se proporciona, el componente está en modo controlado */
    activeButtonId?: string | null;
    /** Callback cuando cambia el botón activo. Se llama con el id del botón o null si se vuelve a la vista de botones */
    onActiveButtonIdChange?: (id: string | null) => void;
    /** Callback opcional al hacer click en el botón "atrás" en la vista de addons (se ejecuta además de volver a la vista principal) */
    onBackClick?: () => void;
    /**
     * Opt-in: muestra `text` / `(count)` en la **vista de botones** (antes del bloque de botones), con el mismo estilo que en la vista de addons.
     * Por defecto `false` para conservar el comportamiento anterior (solo botones + cierre).
     */
    showCounterInButtonsView?: boolean;
    /**
     * Si es `false`, oculta el botón «atrás» en la **vista de addons** (p. ej. confirmación solo con contador + acciones).
     * Por defecto `true` (comportamiento anterior).
     */
    showBackButton?: boolean;
}
export {};
//# sourceMappingURL=index.d.ts.map