import { type ReactNode } from 'react';
/**
 * PermissionMatrix - Composant de matrice de permissions standardisé SmartStack
 *
 * Fonctionnalités:
 * - Grille rows × columns avec états
 * - Groupes de lignes (collapsibles)
 * - En-têtes de colonnes rotatifs
 * - États: granted, denied, partial, inherited
 * - Click pour toggle
 * - Légende automatique
 *
 * Usage:
 * ```tsx
 * <PermissionMatrix
 *   rows={resources}
 *   columns={roles}
 *   getRowId={(r) => r.id}
 *   getRowLabel={(r) => r.name}
 *   getRowGroup={(r) => r.category}
 *   getColumnId={(c) => c.id}
 *   getColumnLabel={(c) => c.name}
 *   getCellState={(rowId, colId) => assignments[rowId]?.[colId]}
 *   onCellClick={(rowId, colId) => toggleAssignment(rowId, colId)}
 * />
 * ```
 */
export type CellState = 'granted' | 'denied' | 'partial' | 'inherited' | 'none';
export interface PermissionMatrixRow {
    id: string;
    label: string;
    group?: string;
    subGroup?: string;
    icon?: ReactNode;
    locked?: boolean;
    childCount?: number;
}
export interface PermissionMatrixColumn {
    id: string;
    label: string;
    shortLabel?: string;
    locked?: boolean;
    color?: string;
}
export interface PermissionMatrixProps<R, C> {
    /** Row data array */
    rows: R[];
    /** Column data array */
    columns: C[];
    /** Get unique row ID */
    getRowId: (row: R) => string;
    /** Get row display label */
    getRowLabel: (row: R) => string;
    /** Get row group (for collapsible sections) */
    getRowGroup?: (row: R) => string | undefined;
    /** Get row sub-group */
    getRowSubGroup?: (row: R) => string | undefined;
    /** Get row icon */
    getRowIcon?: (row: R) => ReactNode;
    /** Is row locked (read-only) */
    isRowLocked?: (row: R) => boolean;
    /** Get row child count (for display) */
    getRowChildCount?: (row: R) => number | undefined;
    /** Get unique column ID */
    getColumnId: (col: C) => string;
    /** Get column display label */
    getColumnLabel: (col: C) => string;
    /** Get column short label (for rotated header) */
    getColumnShortLabel?: (col: C) => string;
    /** Is column locked (read-only) */
    isColumnLocked?: (col: C) => boolean;
    /** Get column color */
    getColumnColor?: (col: C) => string | undefined;
    /** Get cell state */
    getCellState: (rowId: string, colId: string) => CellState;
    /** Cell click handler */
    onCellClick?: (rowId: string, colId: string) => void;
    /** Loading state */
    loading?: boolean;
    /** Show legend */
    showLegend?: boolean;
    /** Show search */
    searchable?: boolean;
    /** Row column width */
    rowColumnWidth?: string;
    /** Cell width */
    cellWidth?: string;
    /** Custom className */
    className?: string;
    /** Empty message */
    emptyMessage?: string;
    /** Can edit locked columns */
    canEditLocked?: boolean;
}
export declare function PermissionMatrix<R, C>({ rows, columns, getRowId, getRowLabel, getRowGroup, getRowSubGroup, getRowIcon, isRowLocked, getRowChildCount, getColumnId, getColumnLabel, getColumnShortLabel, isColumnLocked, getColumnColor, getCellState, onCellClick, loading, showLegend, searchable, rowColumnWidth, cellWidth, className, emptyMessage, canEditLocked, }: PermissionMatrixProps<R, C>): import("react/jsx-runtime").JSX.Element;
export default PermissionMatrix;
//# sourceMappingURL=PermissionMatrix.d.ts.map