/**
 * Minimal tag shape for the TagsFilter component.
 * Compatible with any item with at least id (optional) and value.
 */
export interface TagItem {
    id?: string;
    value: string;
    [key: string]: unknown;
}
/**
 * Traducciones disponibles para TagsFilter.
 * Todas las propiedades son opcionales para permitir traducciones parciales.
 */
export type TagsFilterTranslations = {
    /** Placeholder del input de búsqueda/selección */
    placeholder?: string;
    /** Etiqueta sobre el autocomplete (ej. "Selecciona etiqueta") */
    labelSelect?: string;
    /** Etiqueta sobre los chips seleccionados (ej. "Etiquetas actuales") */
    labelSelected?: string;
    /** Mensaje cuando no hay etiquetas seleccionadas */
    emptySelectedMessage?: string;
    /** Prefijo del mensaje de error (ej. "Error al cargar etiquetas") */
    errorLoadingPrefix?: string;
    /** Texto sr-only del spinner inline mientras se cargan más páginas. */
    loadingMoreLabel?: string;
    /** Texto opcional al final de la lista cuando ya no hay más. Default: "" (oculto). */
    endOfListMessage?: string;
};
export interface TagsFilterProps<T extends TagItem = TagItem> {
    /** Lista de etiquetas disponibles (ej. desde API) */
    items: T[];
    /** Etiquetas actualmente seleccionadas */
    value: T[];
    /** Se invoca cuando cambia la selección (añadir/quitar) */
    onChange: (selected: T[]) => void;
    /** Traducciones i18n. Si no se proporciona, se usan valores por defecto en español. */
    translations?: TagsFilterTranslations;
    /** Mensaje de error a mostrar (ej. error de carga) */
    error?: string;
    /** Muestra spinner de carga */
    isLoading?: boolean;
    /** Clase CSS del contenedor raíz */
    className?: string;
    /** aria-label del autocomplete */
    "aria-label"?: string;
    /** Si es true, muestra asterisco en la etiqueta (campo requerido). La validación la hace el padre/form. */
    required?: boolean;
    /** Función para comparar dos etiquetas (por defecto: por id o value) */
    compareTags?: (a: T, b: T) => boolean;
    /** Función para obtener clave única de una etiqueta (por defecto: id ?? value) */
    getTagKey?: (tag: T) => string;
    /**
     * Se invoca cada vez que el usuario escribe en el input de búsqueda.
     * Útil para filtrado server-side: el padre puede llamar a un endpoint con el valor
     * y actualizar `items` con los resultados.
     *
     * Importante: cuando este callback está definido, el componente desactiva su
     * filtro client-side sobre `items` (solo excluye los ya seleccionados). Se asume
     * que el padre controla qué items se muestran según el query.
     */
    onInputChange?: (value: string) => void;
    /** Hay más páginas disponibles. Si false, no se intenta cargar más. */
    hasMore?: boolean;
    /** Se está cargando la siguiente página (muestra spinner inline al final). */
    isLoadingMore?: boolean;
    /** Callback que se invoca cuando el componente necesita cargar la siguiente página. Solo se llama si hasMore && !isLoadingMore. */
    onLoadMore?: () => void;
    /** Margen para precarga del IntersectionObserver. Default: "0px". */
    loadMoreRootMargin?: string;
}
//# sourceMappingURL=TagsFilter.types.d.ts.map