import * as _clerk_types from '@clerk/types';
import { Without, SignInProps, SignUpProps, __experimental_UserVerificationProps, CreateOrganizationProps, OrganizationListProps, GoogleOneTapProps, UserProfileProps, OrganizationProfileProps, UserButtonProps, OrganizationSwitcherProps, SignOutOptions, SignOut, GetToken, ActJWTClaim, OrganizationCustomRoleKey, CheckAuthorizationWithCustomPermissions, SignInResource, SignUpResource, EmailAddressResource, CreateEmailLinkFlowReturn, SignInStartEmailLinkFlowParams, StartEmailLinkFlowParams, SetActive } from '@clerk/types';
import React, { PropsWithChildren } from 'react';
import { W as WithClerkProp, U as UserProfilePageProps, a as UserProfileLinkProps, b as UserButtonActionProps, c as UserButtonLinkProps, O as OrganizationProfilePageProps, d as OrganizationProfileLinkProps, S as SignInButtonProps, e as SignUpButtonProps, f as SignInWithMetamaskButtonProps, C as ClerkProviderProps } from './controlComponents-B9SlJ0L1.js';
export { A as AuthenticateWithRedirectCallback, B as BrowserClerk, h as ClerkLoaded, i as ClerkLoading, g as ClerkProp, H as HeadlessBrowserClerk, P as Protect, p as ProtectProps, n as RedirectToCreateOrganization, o as RedirectToOrganizationProfile, R as RedirectToSignIn, l as RedirectToSignUp, m as RedirectToUserProfile, k as SignedIn, j as SignedOut } from './controlComponents-B9SlJ0L1.js';
export { useClerk, useOrganization, useOrganizationList, useSession, useSessionList, useUser } from '@clerk/shared/react';

type UserProfileExportType = typeof _UserProfile & {
    Page: typeof UserProfilePage;
    Link: typeof UserProfileLink;
};
type UserButtonExportType = typeof _UserButton & {
    UserProfilePage: typeof UserProfilePage;
    UserProfileLink: typeof UserProfileLink;
    MenuItems: typeof MenuItems;
    Action: typeof MenuAction;
    Link: typeof MenuLink;
};
type UserButtonPropsWithoutCustomPages = Without<UserButtonProps, 'userProfileProps'> & {
    userProfileProps?: Pick<UserProfileProps, 'additionalOAuthScopes' | 'appearance'>;
};
type OrganizationProfileExportType = typeof _OrganizationProfile & {
    Page: typeof OrganizationProfilePage;
    Link: typeof OrganizationProfileLink;
};
type OrganizationSwitcherExportType = typeof _OrganizationSwitcher & {
    OrganizationProfilePage: typeof OrganizationProfilePage;
    OrganizationProfileLink: typeof OrganizationProfileLink;
};
type OrganizationSwitcherPropsWithoutCustomPages = Without<OrganizationSwitcherProps, 'organizationProfileProps'> & {
    organizationProfileProps?: Pick<OrganizationProfileProps, 'appearance'>;
};
declare const SignIn: {
    (props: Without<WithClerkProp<SignInProps>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare const SignUp: {
    (props: Without<WithClerkProp<SignUpProps>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare function UserProfilePage({ children }: PropsWithChildren<UserProfilePageProps>): React.JSX.Element;
declare function UserProfileLink({ children }: PropsWithChildren<UserProfileLinkProps>): React.JSX.Element;
declare const _UserProfile: {
    (props: Without<WithClerkProp<PropsWithChildren<Without<UserProfileProps, "customPages">>>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare const UserProfile: UserProfileExportType;
declare const _UserButton: {
    (props: Without<WithClerkProp<PropsWithChildren<UserButtonPropsWithoutCustomPages>>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare function MenuItems({ children }: PropsWithChildren): React.JSX.Element;
declare function MenuAction({ children }: PropsWithChildren<UserButtonActionProps>): React.JSX.Element;
declare function MenuLink({ children }: PropsWithChildren<UserButtonLinkProps>): React.JSX.Element;
declare const UserButton: UserButtonExportType;
declare const __experimental_UserVerification: {
    (props: Without<WithClerkProp<PropsWithChildren<__experimental_UserVerificationProps>>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare function OrganizationProfilePage({ children }: PropsWithChildren<OrganizationProfilePageProps>): React.JSX.Element;
declare function OrganizationProfileLink({ children }: PropsWithChildren<OrganizationProfileLinkProps>): React.JSX.Element;
declare const _OrganizationProfile: {
    (props: Without<WithClerkProp<PropsWithChildren<Without<OrganizationProfileProps, "customPages">>>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare const OrganizationProfile: OrganizationProfileExportType;
declare const CreateOrganization: {
    (props: Without<WithClerkProp<CreateOrganizationProps>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare const _OrganizationSwitcher: {
    (props: Without<WithClerkProp<PropsWithChildren<OrganizationSwitcherPropsWithoutCustomPages>>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare const OrganizationSwitcher: OrganizationSwitcherExportType;
declare const OrganizationList: {
    (props: Without<WithClerkProp<OrganizationListProps>, "clerk">): React.JSX.Element | null;
    displayName: string;
};
declare const GoogleOneTap: {
    (props: Without<WithClerkProp<GoogleOneTapProps>, "clerk">): React.JSX.Element | null;
    displayName: string;
};

declare const SignInButton: {
    (props: _clerk_types.Without<WithClerkProp<SignInButtonProps>, "clerk">): React.JSX.Element | null;
    displayName: string;
};

declare const SignUpButton: {
    (props: _clerk_types.Without<WithClerkProp<SignUpButtonProps>, "clerk">): React.JSX.Element | null;
    displayName: string;
};

type SignOutButtonProps = {
    redirectUrl?: string;
    signOutOptions?: SignOutOptions;
    children?: React.ReactNode;
};
declare const SignOutButton: {
    (props: _clerk_types.Without<React.PropsWithChildren<WithClerkProp<SignOutButtonProps>>, "clerk">): React.JSX.Element | null;
    displayName: string;
};

declare const SignInWithMetamaskButton: {
    (props: _clerk_types.Without<WithClerkProp<SignInWithMetamaskButtonProps>, "clerk">): React.JSX.Element | null;
    displayName: string;
};

declare const ClerkProvider: React.ComponentType<ClerkProviderProps>;

type CheckAuthorizationSignedOut = undefined;
type CheckAuthorizationWithoutOrgOrUser = (params?: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => false;
type UseAuthReturn = {
    isLoaded: false;
    isSignedIn: undefined;
    userId: undefined;
    sessionId: undefined;
    actor: undefined;
    orgId: undefined;
    orgRole: undefined;
    orgSlug: undefined;
    has: CheckAuthorizationSignedOut;
    signOut: SignOut;
    getToken: GetToken;
} | {
    isLoaded: true;
    isSignedIn: false;
    userId: null;
    sessionId: null;
    actor: null;
    orgId: null;
    orgRole: null;
    orgSlug: null;
    has: CheckAuthorizationWithoutOrgOrUser;
    signOut: SignOut;
    getToken: GetToken;
} | {
    isLoaded: true;
    isSignedIn: true;
    userId: string;
    sessionId: string;
    actor: ActJWTClaim | null;
    orgId: null;
    orgRole: null;
    orgSlug: null;
    has: CheckAuthorizationWithoutOrgOrUser;
    signOut: SignOut;
    getToken: GetToken;
} | {
    isLoaded: true;
    isSignedIn: true;
    userId: string;
    sessionId: string;
    actor: ActJWTClaim | null;
    orgId: string;
    orgRole: OrganizationCustomRoleKey;
    orgSlug: string | null;
    has: CheckAuthorizationWithCustomPermissions;
    signOut: SignOut;
    getToken: GetToken;
};
type UseAuth = () => UseAuthReturn;
/**
 * Returns the current auth state, the user and session ids and the `getToken`
 * that can be used to retrieve the given template or the default Clerk token.
 *
 * Until Clerk loads, `isLoaded` will be set to `false`.
 * Once Clerk loads, `isLoaded` will be set to `true`, and you can
 * safely access the `userId` and `sessionId` variables.
 *
 * For projects using NextJs or Remix, you can have immediate access to this data during SSR
 * simply by using the `ClerkProvider`.
 *
 * @example
 * A simple example:
 *
 * import { useAuth } from '@clerk/clerk-react'
 *
 * function Hello() {
 *   const { isSignedIn, sessionId, userId } = useAuth();
 *   if(isSignedIn) {
 *     return null;
 *   }
 *   console.log(sessionId, userId)
 *   return <div>...</div>
 * }
 *
 * @example
 * Basic example in a NextJs app. This page will be fully rendered during SSR:
 *
 * import { useAuth } from '@clerk/nextjs'
 *
 * export HelloPage = () => {
 *   const { isSignedIn, sessionId, userId } = useAuth();
 *   console.log(isSignedIn, sessionId, userId)
 *   return <div>...</div>
 * }
 */
declare const useAuth: UseAuth;

type UseEmailLinkSignInReturn = CreateEmailLinkFlowReturn<SignInStartEmailLinkFlowParams, SignInResource>;
type UseEmailLinkSignUpReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, SignUpResource>;
type UseEmailLinkEmailAddressReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, EmailAddressResource>;
declare function useEmailLink(resource: SignInResource): UseEmailLinkSignInReturn;
declare function useEmailLink(resource: SignUpResource): UseEmailLinkSignUpReturn;
declare function useEmailLink(resource: EmailAddressResource): UseEmailLinkEmailAddressReturn;

type UseSignInReturn = {
    isLoaded: false;
    signIn: undefined;
    setActive: undefined;
} | {
    isLoaded: true;
    signIn: SignInResource;
    setActive: SetActive;
};
type UseSignIn = () => UseSignInReturn;
declare const useSignIn: UseSignIn;

type UseSignUpReturn = {
    isLoaded: false;
    signUp: undefined;
    setActive: undefined;
} | {
    isLoaded: true;
    signUp: SignUpResource;
    setActive: SetActive;
};
type UseSignUp = () => UseSignUpReturn;
declare const useSignUp: UseSignUp;

export { ClerkProvider, ClerkProviderProps, CreateOrganization, GoogleOneTap, OrganizationList, OrganizationProfile, OrganizationSwitcher, SignIn, SignInButton, SignInWithMetamaskButton, SignOutButton, SignUp, SignUpButton, UserButton, UserProfile, __experimental_UserVerification, useAuth, useEmailLink, useSignIn, useSignUp };
