import { type IUiGranteeAsyncOption, type IUiPickedGrantee } from "../UiGranteeAsyncPicker/UiGranteeAsyncPicker.js";
import { type PermissionMenuLevel } from "../UiPermissionMenu/UiPermissionMenu.js";
/**
 * @internal
 */
export interface IUseGranteeSelectionOptions {
    /** Current picked list — caller owns the state. */
    selectedGrantees: ReadonlyArray<IUiPickedGrantee>;
    /** Fires with the next list whenever the hook produces a change. */
    onSelectedGranteesChange: (next: IUiPickedGrantee[]) => void;
    /**
     * Permission level used when a grantee is added from the picker.
     * Defaults to `"VIEW"`.
     */
    initialPermissionLevel?: PermissionMenuLevel;
}
/**
 * @internal
 */
export interface IUseGranteeSelectionResult {
    /** Pick a grantee from the picker — no-op if already in the list. */
    select: (option: IUiGranteeAsyncOption) => void;
    /** Change a row's permission level. */
    changePermission: (grantee: IUiPickedGrantee, next: PermissionMenuLevel) => void;
    /** Remove a row. */
    remove: (grantee: IUiPickedGrantee) => void;
}
/**
 * Selection callbacks for the add-grantee dialog. Caller owns the list and
 * receives the next list via `onSelectedGranteesChange`.
 *
 * @internal
 */
export declare function useGranteeSelection({ selectedGrantees, onSelectedGranteesChange, initialPermissionLevel }: IUseGranteeSelectionOptions): IUseGranteeSelectionResult;
//# sourceMappingURL=useGranteeSelection.d.ts.map