import type { ReactElement } from 'react';
/** Catalog role the dialog can render. Both RoleListDto and TenantRoleDto structurally satisfy this subset. */
export interface DialogRole {
    readonly id: string;
    readonly name: string;
    readonly shortName: string;
    readonly code: string | null;
    readonly category: string;
    readonly description: string | null;
    readonly applicationId: string | null;
    readonly applicationName: string | null;
}
/** One selectable target. `kind` lets the caller route assign/remove appropriately. */
export interface RoleAssignmentTarget {
    /** Stable key: 'global' for the global option, tenantId otherwise. */
    readonly id: string;
    readonly label: string;
    readonly kind: 'global' | 'tenant';
    /** Present when kind==='tenant'; used to load accessible apps + as assign/remove arg. */
    readonly tenantId?: string;
}
/** One already-assigned role for the CURRENTLY SELECTED target. */
export interface AssignedRoleState {
    readonly roleId: string;
    /** false => render a disabled "locked" indicator instead of a Retirer button. */
    readonly removable: boolean;
    /** Tooltip explaining why it is locked. */
    readonly lockedReason?: string;
}
export interface RoleAssignmentDialogProps {
    readonly roles: readonly DialogRole[];
    /** Dropdown options. When length<=1 OR lockTarget, render a static badge. */
    readonly targets: readonly RoleAssignmentTarget[];
    readonly initialTargetId: string;
    /** Force single-target mode: badge only, no dropdown even if targets.length>1. */
    readonly lockTarget?: boolean;
    /** Fires when the user switches target inside the dialog (caller recomputes assignedForTarget). */
    readonly onTargetChange?: (target: RoleAssignmentTarget) => void;
    /** Assigned roles for the CURRENTLY SELECTED target. */
    readonly assignedForTarget: readonly AssignedRoleState[];
    /** Per-role assign. Caller persists + refreshes assignedForTarget afterward. */
    readonly onAssign: (target: RoleAssignmentTarget, roleId: string) => Promise<void>;
    /** Per-role remove (Retirer). Same contract. */
    readonly onRemove: (target: RoleAssignmentTarget, roleId: string) => Promise<void>;
    readonly onClose: () => void;
    /** Title override (defaults to admin:userRoles.assignRole). */
    readonly title?: string;
    /** Optional subtitle (e.g. member name on the tenant side). */
    readonly subtitle?: string;
}
export declare function RoleAssignmentDialog({ roles, targets, initialTargetId, lockTarget, onTargetChange, assignedForTarget, onAssign, onRemove, onClose, title, subtitle, }: RoleAssignmentDialogProps): ReactElement;
//# sourceMappingURL=RoleAssignmentDialog.d.ts.map