import { IMetadataProvider, NormalizedPermission, UserInfo } from '@memberjunction/core';
/**
 * Narrow shape the Permissions admin resource components need when rendering a user picker.
 * We only pull the handful of columns used in dropdown labels and UserInfo hydration.
 */
export interface PermissionsUserOption {
    ID: string;
    Name: string;
    Email: string;
}
/**
 * Domain-to-icon lookup used by the User Access Report and the Audit Log tabs.
 * Re-exports the shared constant from `@memberjunction/core-entities` so the admin
 * dashboard and the end-user Sharing Center always render the same glyph. Add new
 * domains in `core-entities/src/engines/PermissionEngine.ts`, not here.
 */
export declare const PERMISSIONS_DOMAIN_ICONS: Record<string, string>;
/**
 * A single domain section in the User Access Report — used by the UI to render
 * collapsible groups of {@link NormalizedPermission} rows.
 */
export interface PermissionsDomainGroup {
    DomainName: string;
    Icon: string;
    Count: number;
    Expanded: boolean;
    Rows: NormalizedPermission[];
}
/**
 * Load every user from `MJ: Users` with just the columns the Permissions admin
 * dropdowns need. Sorted by Name.
 */
export declare function loadPermissionsUsers(provider?: IMetadataProvider): Promise<PermissionsUserOption[]>;
/**
 * Hydrate a full `UserInfo` for the user we want to report against. When the target
 * is the current user we reuse `Metadata.CurrentUser` directly (it already has
 * roles loaded). Otherwise we hit `MJ: User Roles` to assemble a UserInfo-shaped
 * object with the target user's roles attached, because every provider needs roles
 * to evaluate access correctly.
 */
export declare function resolvePermissionsUser(userId: string, userDropdown: PermissionsUserOption[], provider?: IMetadataProvider): Promise<UserInfo | null>;
/**
 * Bucket a flat list of {@link NormalizedPermission} into {@link PermissionsDomainGroup}s,
 * sorted by each domain's catalog DisplayOrder (falling back to alpha when the
 * engine's domain catalog doesn't know the domain).
 *
 * @param domainOrderMap map of domain name → DisplayOrder, typically built from
 *        `PermissionEngine.Instance.Domains`.
 */
export declare function groupPermissionsByDomain(rows: NormalizedPermission[], domainOrderMap: Map<string, number>): PermissionsDomainGroup[];
//# sourceMappingURL=permissions-shared.d.ts.map