import { type Group } from './groups';
import { type KnexPaginatedData } from './knex-paginate';
import { type UserAvatarColorValue } from './userAvatars';
export declare enum OrganizationMemberRole {
    MEMBER = "member",
    VIEWER = "viewer",
    INTERACTIVE_VIEWER = "interactive_viewer",
    EDITOR = "editor",
    DEVELOPER = "developer",
    ADMIN = "admin"
}
export declare const OrganizationMemberRoleLabels: Record<OrganizationMemberRole, string>;
export declare const isOrganizationMemberRole: (x: string) => x is OrganizationMemberRole;
/**
 * Profile for a user's membership in an organization
 */
export type OrganizationMemberProfile = {
    /**
     * Unique identifier for the user
     * @format uuid
     */
    userUuid: string;
    userCreatedAt: Date;
    userUpdatedAt: Date;
    firstName: string;
    lastName: string;
    email: string;
    /**
     * Unique identifier for the organization the user is a member of
     */
    organizationUuid: string;
    /**
     * The role of the user in the organization
     */
    role: OrganizationMemberRole;
    roleUuid: string | undefined;
    /**
     * Whether the user can login
     */
    isActive: boolean;
    /**
     * Whether the user's invite to the organization has expired
     */
    isInviteExpired?: boolean;
    /**
     * Whether the user doesn't have an authentication method (password or openId)
     */
    isPending?: boolean;
    /**
     * Content-addressed path to the uploaded avatar image; null when none uploaded
     */
    avatarUrl: string | null;
    /**
     * Explicit gradient placeholder override; null falls back to the deterministic gradient
     */
    avatarGradient: UserAvatarColorValue | null;
};
export type OrganizationMemberProfileWithGroups = OrganizationMemberProfile & {
    groups: Pick<Group, 'name' | 'uuid'>[];
};
export declare const isOrganizationMemberProfileWithGroups: (obj: OrganizationMemberProfile | OrganizationMemberProfileWithGroups) => obj is OrganizationMemberProfileWithGroups;
export type OrganizationMemberProfileUpdate = {
    role: OrganizationMemberRole;
};
export type ApiOrganizationMemberProfiles = {
    status: 'ok';
    results: KnexPaginatedData<OrganizationMemberProfile[]>;
};
export type ApiOrganizationMemberProfile = {
    status: 'ok';
    results: OrganizationMemberProfile;
};
export declare const getRoleDescription: (role: OrganizationMemberRole) => "No access to projects by default. Project level permissions to be set separately" | "Has view only access to all projects" | "Has view access to all projects and can create new projects but cannot edit existing projects" | "Can create, edit and delete projects" | "Full access to entire project, manage all projects and user access" | null;
//# sourceMappingURL=organizationMemberProfile.d.ts.map