import { AdditionalFields } from '../../config/additional-fields-config';
import { AvatarConfig } from '../../config/avatar-config';
import { AuthPluginBase, AuthPluginLocalizationContext } from '../../lib/auth-plugin';
import { OrganizationLocalization } from './organization-localization';
import { OrganizationViewPaths } from './organization-view-paths';
declare module "../../lib/view-paths" {
    /** Widens `AuthViewPaths` with the organization invitation path when this plugin is imported. */
    interface AuthViewPaths {
        /** @default "accept-invitation" */
        acceptInvitation?: string;
    }
    /** Widens `SettingsViewPaths` by adding the `"organizations"` path when this plugin is imported. */
    interface SettingsViewPaths {
        /** @default "organizations" */
        organizations?: string;
    }
}
declare module "../../lib/auth-plugin" {
    interface AuthPluginViewPaths {
        organization?: Partial<OrganizationViewPaths>;
    }
}
export type OrganizationPluginOptions = {
    /** Role Better Auth assigns to organization creators. @default "owner" */
    creatorRole?: string;
    /**
     * Whether to call `organization.checkSlug` when entering an organization slug.
     * @default true
     */
    checkSlug?: boolean;
    /**
     * Override the plugin's default localization strings.
     * @remarks `OrganizationLocalization`
     */
    localization?: Partial<OrganizationLocalization>;
    /**
     * Override URL segments contributed by this plugin.
     *
     * - `auth.acceptInvitation` — segment for the direct invitation acceptance view (default `"accept-invitation"`).
     * - `settings.organizations` — segment for the organizations settings view (default `"organizations"`).
     * - `organization.settings` — segment for the `/organization/...` profile and danger zone tab (default `"settings"`).
     * - `organization.people` — segment for the `/organization/...` members and invitations tab (default `"people"`).
     * - `organization.teams` — segment for the `/organization/...` teams tab (default `"teams"`).
     * - `organization.roles` — segment for the dynamic roles tab (default `"roles"`).
     */
    viewPaths?: {
        auth?: {
            /** @default "accept-invitation" */
            acceptInvitation?: string;
        };
        settings?: {
            /** @default "organizations" */
            organizations?: string;
        };
        organization?: Partial<OrganizationViewPaths>;
    };
    /**
     * Organization logo upload, optimization, and deletion configuration.
     * Same shape as {@link AvatarConfig} used for user avatars (`AuthConfig.avatar`).
     * @remarks `AvatarConfig`
     * @default { enabled: true, resize: resizeAvatar, size: 256, extension: "png" }
     */
    logo?: Partial<AvatarConfig>;
    /**
     * Map of role keys to display labels. When omitted, defaults to localized
     * labels for `owner`, `admin`, and `member` (from `localization.owner`
     * etc.) plus {@link OrganizationPluginOptions.additionalRoles}. When set,
     * replaces that default map entirely; use {@link OrganizationPluginOptions.additionalRoles}
     * to add more labels on top. Looked up at render time via `roles?.[role]`.
     * @remarks `Record<string, string>`
     */
    roles?: Record<string, string>;
    /**
     * Extra role labels merged after the effective role map (either
     * {@link OrganizationPluginOptions.roles} when provided, or the localized
     * defaults). Use this for custom server roles without redefining built-in
     * labels.
     * @remarks `Record<string, string>`
     */
    additionalRoles?: Record<string, string>;
    /**
     * Enable runtime organization roles and configure the permission editor.
     * The Better Auth client must also enable `dynamicAccessControl`.
     */
    dynamicAccessControl?: {
        /** @default true */
        enabled?: boolean;
        /** Resources and actions available in the role permission matrix. */
        permissions: OrganizationPermissionRegistry;
    };
    slug?: string | null;
    /** Hide slugs in organization forms and views. Switchers hide slugs by default. */
    hideSlug?: boolean;
    /**
     * Prefix prepended to organization slugs.
     * @default ""
     */
    slugPrefix?: string;
    /** Additional organization fields rendered during creation and profile editing. */
    additionalFields?: AdditionalFields;
    /**
     * Additional fields grouped by the Better Auth organization model that
     * owns them. `organization` overrides the legacy `additionalFields` array.
     */
    modelFields?: OrganizationAdditionalFields;
    /** Maximum organizations the current user can create. */
    organizationLimit?: number;
    /** Maximum members per organization. */
    membershipLimit?: number;
    /** Maximum pending invitations per organization. */
    invitationLimit?: number;
    /**
     * Whether members and invitations can have more than one role.
     * @default true
     */
    allowMultipleRoles?: boolean;
    /** Whether organization creation controls are available. @default true */
    allowOrganizationCreation?: boolean;
    /** Enable Better Auth team management controls and mirror static server policies. */
    teams?: boolean | OrganizationTeamsOptions;
};
export type OrganizationTeamsOptions = {
    /** Enable team management controls. @default true */
    enabled?: boolean;
    /** Maximum teams an organization can contain. */
    maximumTeams?: number;
    /** Maximum members a team can contain. */
    maximumMembersPerTeam?: number;
    /** Allow deletion of an organization's final team. @default false */
    allowRemovingAllTeams?: boolean;
};
export type OrganizationAdditionalFields = {
    /** Fields rendered during organization creation and profile editing. */
    organization?: AdditionalFields;
    /** Read-only member details returned by Better Auth member queries. */
    member?: AdditionalFields;
    /** Fields rendered when an invitation is created. */
    invitation?: AdditionalFields;
    /** Fields rendered when a team is created or edited. */
    team?: AdditionalFields;
    /** Fields rendered when a dynamic organization role is created or edited. */
    role?: AdditionalFields;
};
export type OrganizationPermissionResource = {
    /** Resource label shown above its actions. Defaults to the resource key. */
    label?: string;
    /** Map of Better Auth action keys to display labels. */
    actions: Record<string, string>;
};
export type OrganizationPermissionRegistry = Record<string, OrganizationPermissionResource>;
export declare const organizationPlugin: ((options?: OrganizationPluginOptions | undefined) => {
    creatorRole: string;
    slug: string | null | undefined;
    hideSlug: boolean | undefined;
    slugPrefix: string;
    checkSlug: boolean;
    localization: {
        accept: string;
        acceptInvitationTitle: string;
        acceptInvitationDescription: string;
        accepted: string;
        actions: string;
        admin: string;
        all: string;
        canceled: string;
        cancelInvitation: string;
        changeLogo: string;
        changeMemberRole: string;
        changeMemberRoleDescription: string;
        clear: string;
        createOrganization: string;
        deleteLogo: string;
        deleteOrganization: string;
        deleteOrganizationDescription: string;
        invitations: string;
        invitationResent: string;
        invitationUnavailable: string;
        invitationUnavailableDescription: string;
        invitedAt: string;
        inviteMember: string;
        inviteMemberSuccess: string;
        inviteMemberDescription: string;
        leftOrganization: string;
        leaveOrganization: string;
        leaveOrganizationDescription: string;
        logo: string;
        logoChangedSuccess: string;
        logoDeletedSuccess: string;
        manage: string;
        member: string;
        memberRemoved: string;
        memberRoleUpdated: string;
        members: string;
        people: string;
        name: string;
        namePlaceholder: string;
        noInvitations: string;
        noOrganizations: string;
        organization: string;
        organizationDeleted: string;
        organizationInvitationsEmptyDescription: string;
        organizations: string;
        organizationsDescription: string;
        organizationProfile: string;
        organizationUpdatedSuccess: string;
        owner: string;
        pending: string;
        nextPage: string;
        firstPage: string;
        lastPage: string;
        pageOf: string;
        rowsPerPage: string;
        columns: string;
        selectedCount: string;
        selectRow: string;
        selectAllRows: string;
        cancelSelectedInvitations: string;
        cancelSelectedInvitationsDescription: string;
        invitationsCanceled: string;
        removeSelectedMembers: string;
        removeSelectedMembersDescription: string;
        membersRemoved: string;
        deleteSelectedRoles: string;
        deleteSelectedRolesDescription: string;
        rolesDeleted: string;
        personalAccount: string;
        previousPage: string;
        rejected: string;
        paginationRange: string;
        return: string;
        rejectInvitation: string;
        removeMember: string;
        removeMemberWarning: string;
        resendInvitation: string;
        role: string;
        search: string;
        selectAtLeastOneRole: string;
        selectRoles: string;
        slug: string;
        slugPlaceholder: string;
        status: string;
        uploadLogo: string;
        userInvitationsEmptyDescription: string;
        verifyEmailToViewInvitations: string;
        verifyEmailToViewInvitationsDescription: string;
        teams: string;
        team: string;
        teamsDescription: string;
        selectTeam: string;
        allTeams: string;
        selectMember: string;
        createTeam: string;
        renameTeam: string;
        deleteTeam: string;
        deleteTeamDescription: string;
        noTeams: string;
        noTeamsDescription: string;
        teamMembers: string;
        addTeamMember: string;
        removeTeamMember: string;
        teamCreated: string;
        teamUpdated: string;
        teamDeleted: string;
        teamLimitReached: string;
        teamMemberLimitReached: string;
        lastTeamRemovalDisabled: string;
        activeTeamRemovalDisabled: string;
        onlyOwnerActionDisabled: string;
        limitReached: string;
        organizationLimitReached: string;
        membershipLimitReached: string;
        invitationLimitReached: string;
        roles: string;
        rolesDescription: string;
        createRole: string;
        editRole: string;
        deleteRole: string;
        deleteRoleDescription: string;
        roleName: string;
        permissions: string;
        permissionsLimitedDescription: string;
        noRoles: string;
        noRolesDescription: string;
        roleCreated: string;
        roleUpdated: string;
        roleDeleted: string;
        roleInUse: string;
        roleNamePlaceholder: string;
    };
    logo: {
        delete?: (url: string) => Promise<void>;
        enabled: boolean;
        extension: "png" | "jpg" | "webp" | "inherit";
        resize: (file: File, size?: number, extension?: "png" | "jpg" | "webp" | "inherit") => Promise<File>;
        size: number;
        upload?: (file: File) => Promise<string>;
    };
    roles: {
        [x: string]: string;
    };
    _localizationResolver: (plugin: AuthPluginBase, context: AuthPluginLocalizationContext) => {
        roles: {
            [x: string]: string;
        };
        id: string;
        localization?: Record<string, unknown>;
        _localizationOverrides?: Record<string, unknown>;
        _localizationResolver?: import('../..').AuthPluginLocalizationResolver;
        viewPaths?: import('../..').AuthPluginViewPaths;
        additionalFields?: AdditionalFields;
    };
    additionalFields: AdditionalFields;
    modelFields: {
        organization: AdditionalFields;
        member: AdditionalFields;
        invitation: AdditionalFields;
        team: AdditionalFields;
        role: AdditionalFields;
    };
    dynamicAccessControl: {
        enabled: boolean;
        permissions: OrganizationPermissionRegistry;
    } | undefined;
    organizationLimit: number | undefined;
    membershipLimit: number | undefined;
    invitationLimit: number | undefined;
    allowMultipleRoles: boolean;
    allowOrganizationCreation: boolean;
    teams: boolean;
    teamPolicy: {
        maximumTeams: number | undefined;
        maximumMembersPerTeam: number | undefined;
        allowRemovingAllTeams: boolean;
    };
    viewPaths: {
        settings: {
            organizations: string;
        };
        auth: {
            acceptInvitation: string;
        };
        organization: {
            settings: string;
            people: string;
            teams: string;
            roles: string;
        };
    };
} & {
    id: "organization";
}) & {
    id: "organization";
};
