import { type ReactNode } from 'react';
import type { ReactElement } from 'react';
/**
 * KanbanBoard - Composant Kanban drag-and-drop standardisé SmartStack
 *
 * Fonctionnalités:
 * - Colonnes avec compteurs
 * - Drag & drop des cartes (natif HTML5)
 * - Actions sur cartes et colonnes
 * - États vide/chargement
 * - Personnalisation des cartes
 *
 * Usage:
 * ```tsx
 * <KanbanBoard
 *   columns={[
 *     { id: 'todo', title: 'À faire', color: 'var(--warning-text)' },
 *     { id: 'in-progress', title: 'En cours', color: 'var(--info-text)' },
 *     { id: 'done', title: 'Terminé', color: 'var(--success-text)' },
 *   ]}
 *   items={tasks}
 *   getItemColumn={(task) => task.status}
 *   onMoveItem={(taskId, newColumnId) => updateTask(taskId, { status: newColumnId })}
 *   renderCard={(task) => <TaskCard task={task} />}
 * />
 * ```
 */
export interface KanbanColumn {
    /** Unique column ID */
    id: string;
    /** Column title */
    title: string;
    /** Optional color (CSS value) */
    color?: string;
    /** Max items in column (optional limit) */
    maxItems?: number;
    /** Can add items to this column */
    canAddItem?: boolean;
}
export interface KanbanBoardProps<T> {
    /** Column definitions */
    readonly columns: KanbanColumn[];
    /** All items */
    readonly items: T[];
    /** Get unique item ID */
    readonly getItemId: (item: T) => string;
    /** Get item's column ID */
    readonly getItemColumn: (item: T) => string;
    /** Move item to new column */
    readonly onMoveItem: (itemId: string, newColumnId: string, newIndex?: number) => void;
    /** Render card content */
    readonly renderCard: (item: T, index: number) => ReactNode;
    /** Loading state */
    readonly loading?: boolean;
    /** Add item handler */
    readonly onAddItem?: (columnId: string) => void;
    /** Card click handler */
    readonly onCardClick?: (item: T) => void;
    /** Card menu actions */
    readonly cardActions?: (item: T) => {
        label: string;
        onClick: () => void;
        icon?: ReactNode;
    }[];
    /** Empty column message */
    readonly emptyColumnMessage?: string;
    /** Custom className */
    readonly className?: string;
    /** Column min width */
    readonly columnMinWidth?: string;
    /** Disable drag & drop */
    readonly disabled?: boolean;
}
export declare function KanbanBoard<T>({ columns, items, getItemId, getItemColumn, onMoveItem, renderCard, loading, onAddItem, onCardClick, cardActions, emptyColumnMessage, className, columnMinWidth, disabled, }: KanbanBoardProps<T>): ReactElement;
export interface KanbanCardProps {
    readonly title: string;
    readonly subtitle?: string;
    readonly tags?: {
        label: string;
        color?: string;
    }[];
    readonly avatar?: {
        letter: string;
        color: string;
    } | {
        imageUrl: string;
    };
    readonly priority?: 'low' | 'medium' | 'high' | 'critical';
    readonly dueDate?: string;
}
export declare function KanbanCard({ title, subtitle, tags, avatar, priority, dueDate }: KanbanCardProps): ReactElement;
export default KanbanBoard;
//# sourceMappingURL=KanbanBoard.d.ts.map