Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@clerk/clerk-react

Package Overview
Dependencies
Maintainers
7
Versions
4272
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@clerk/clerk-react - npm Package Compare versions

Comparing version
5.60.1
to
5.60.2
+282
dist/chunk-3EQWAEPK.mjs
// src/errors/errorThrower.ts
import { buildErrorThrower } from "@clerk/shared/error";
var errorThrower = buildErrorThrower({ packageName: "@clerk/clerk-react" });
function setErrorThrowerOptions(options) {
errorThrower.setMessages(options).setPackageName(options);
}
// src/hooks/useAuth.ts
import { createCheckAuthorization, resolveAuthState } from "@clerk/shared/authorization";
import { eventMethodCalled } from "@clerk/shared/telemetry";
import { useCallback } from "react";
// src/contexts/AuthContext.ts
import { createContextAndHook } from "@clerk/shared/react";
var [AuthContext, useAuthContext] = createContextAndHook("AuthContext");
// src/contexts/IsomorphicClerkContext.tsx
import { ClerkInstanceContext, useClerkInstanceContext } from "@clerk/shared/react";
var IsomorphicClerkContext = ClerkInstanceContext;
var useIsomorphicClerkContext = useClerkInstanceContext;
// src/errors/messages.ts
var multipleClerkProvidersError = "You've added multiple <ClerkProvider> components in your React component tree. Wrap your components in a single <ClerkProvider>.";
var multipleChildrenInButtonComponent = (name) => `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`;
var invalidStateError = "Invalid state. Feel free to submit a bug or reach out to support here: https://clerk.com/support";
var unsupportedNonBrowserDomainOrProxyUrlFunction = "Unsupported usage of isSatellite, domain or proxyUrl. The usage of isSatellite, domain or proxyUrl as function is not supported in non-browser environments.";
var userProfilePageRenderedError = "<UserProfile.Page /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.";
var userProfileLinkRenderedError = "<UserProfile.Link /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.";
var organizationProfilePageRenderedError = "<OrganizationProfile.Page /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.";
var organizationProfileLinkRenderedError = "<OrganizationProfile.Link /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.";
var customPagesIgnoredComponent = (componentName) => `<${componentName} /> can only accept <${componentName}.Page /> and <${componentName}.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;
var customPageWrongProps = (componentName) => `Missing props. <${componentName}.Page /> component requires the following props: url, label, labelIcon, alongside with children to be rendered inside the page.`;
var customLinkWrongProps = (componentName) => `Missing props. <${componentName}.Link /> component requires the following props: url, label and labelIcon.`;
var noPathProvidedError = (componentName) => `The <${componentName}/> component uses path-based routing by default unless a different routing strategy is provided using the \`routing\` prop. When path-based routing is used, you need to provide the path where the component is mounted on by using the \`path\` prop. Example: <${componentName} path={'/my-path'} />`;
var incompatibleRoutingWithPathProvidedError = (componentName) => `The \`path\` prop will only be respected when the Clerk component uses path-based routing. To resolve this error, pass \`routing='path'\` to the <${componentName}/> component, or drop the \`path\` prop to switch to hash-based routing. For more details please refer to our docs: https://clerk.com/docs`;
var userButtonIgnoredComponent = `<UserButton /> can only accept <UserButton.UserProfilePage />, <UserButton.UserProfileLink /> and <UserButton.MenuItems /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;
var customMenuItemsIgnoredComponent = "<UserButton.MenuItems /> component can only accept <UserButton.Action /> and <UserButton.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.";
var userButtonMenuItemsRenderedError = "<UserButton.MenuItems /> component needs to be a direct child of `<UserButton />`.";
var userButtonMenuActionRenderedError = "<UserButton.Action /> component needs to be a direct child of `<UserButton.MenuItems />`.";
var userButtonMenuLinkRenderedError = "<UserButton.Link /> component needs to be a direct child of `<UserButton.MenuItems />`.";
var userButtonMenuItemLinkWrongProps = "Missing props. <UserButton.Link /> component requires the following props: href, label and labelIcon.";
var userButtonMenuItemsActionWrongsProps = "Missing props. <UserButton.Action /> component requires the following props: label.";
// src/hooks/useAssertWrappedByClerkProvider.ts
import { useAssertWrappedByClerkProvider as useSharedAssertWrappedByClerkProvider } from "@clerk/shared/react";
var useAssertWrappedByClerkProvider = (source) => {
useSharedAssertWrappedByClerkProvider(() => {
errorThrower.throwMissingClerkProviderError({ source });
});
};
// src/hooks/utils.ts
var clerkLoaded = (isomorphicClerk) => {
return new Promise((resolve) => {
const handler = (status) => {
if (["ready", "degraded"].includes(status)) {
resolve();
isomorphicClerk.off("status", handler);
}
};
isomorphicClerk.on("status", handler, { notify: true });
});
};
var createGetToken = (isomorphicClerk) => {
return async (options) => {
await clerkLoaded(isomorphicClerk);
if (!isomorphicClerk.session) {
return null;
}
return isomorphicClerk.session.getToken(options);
};
};
var createSignOut = (isomorphicClerk) => {
return async (...args) => {
await clerkLoaded(isomorphicClerk);
return isomorphicClerk.signOut(...args);
};
};
// src/hooks/useAuth.ts
var useAuth = (initialAuthStateOrOptions = {}) => {
var _a;
useAssertWrappedByClerkProvider("useAuth");
const { treatPendingAsSignedOut, ...rest } = initialAuthStateOrOptions != null ? initialAuthStateOrOptions : {};
const initialAuthState = rest;
const authContextFromHook = useAuthContext();
let authContext = authContextFromHook;
if (authContext.sessionId === void 0 && authContext.userId === void 0) {
authContext = initialAuthState != null ? initialAuthState : {};
}
const isomorphicClerk = useIsomorphicClerkContext();
const getToken = useCallback(createGetToken(isomorphicClerk), [isomorphicClerk]);
const signOut = useCallback(createSignOut(isomorphicClerk), [isomorphicClerk]);
(_a = isomorphicClerk.telemetry) == null ? void 0 : _a.record(eventMethodCalled("useAuth", { treatPendingAsSignedOut }));
return useDerivedAuth(
{
...authContext,
getToken,
signOut
},
{
treatPendingAsSignedOut
}
);
};
function useDerivedAuth(authObject, { treatPendingAsSignedOut = true } = {}) {
const { userId, orgId, orgRole, has, signOut, getToken, orgPermissions, factorVerificationAge, sessionClaims } = authObject != null ? authObject : {};
const derivedHas = useCallback(
(params) => {
if (has) {
return has(params);
}
return createCheckAuthorization({
userId,
orgId,
orgRole,
orgPermissions,
factorVerificationAge,
features: (sessionClaims == null ? void 0 : sessionClaims.fea) || "",
plans: (sessionClaims == null ? void 0 : sessionClaims.pla) || ""
})(params);
},
[has, userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims]
);
const payload = resolveAuthState({
authObject: {
...authObject,
getToken,
signOut,
has: derivedHas
},
options: {
treatPendingAsSignedOut
}
});
if (!payload) {
return errorThrower.throw(invalidStateError);
}
return payload;
}
// src/hooks/useEmailLink.ts
import React from "react";
function useEmailLink(resource) {
const { startEmailLinkFlow, cancelEmailLinkFlow } = React.useMemo(() => resource.createEmailLinkFlow(), [resource]);
React.useEffect(() => {
return cancelEmailLinkFlow;
}, []);
return {
startEmailLinkFlow,
cancelEmailLinkFlow
};
}
// src/hooks/useSignIn.ts
import { useClientContext } from "@clerk/shared/react";
import { eventMethodCalled as eventMethodCalled2 } from "@clerk/shared/telemetry";
var useSignIn = () => {
var _a;
useAssertWrappedByClerkProvider("useSignIn");
const isomorphicClerk = useIsomorphicClerkContext();
const client = useClientContext();
(_a = isomorphicClerk.telemetry) == null ? void 0 : _a.record(eventMethodCalled2("useSignIn"));
if (!client) {
return { isLoaded: false, signIn: void 0, setActive: void 0 };
}
return {
isLoaded: true,
signIn: client.signIn,
setActive: isomorphicClerk.setActive
};
};
// src/hooks/useSignUp.ts
import { useClientContext as useClientContext2 } from "@clerk/shared/react";
import { eventMethodCalled as eventMethodCalled3 } from "@clerk/shared/telemetry";
var useSignUp = () => {
var _a;
useAssertWrappedByClerkProvider("useSignUp");
const isomorphicClerk = useIsomorphicClerkContext();
const client = useClientContext2();
(_a = isomorphicClerk.telemetry) == null ? void 0 : _a.record(eventMethodCalled3("useSignUp"));
if (!client) {
return { isLoaded: false, signUp: void 0, setActive: void 0 };
}
return {
isLoaded: true,
signUp: client.signUp,
setActive: isomorphicClerk.setActive
};
};
// src/hooks/index.ts
import {
useClerk,
useOrganization,
useOrganizationCreationDefaults,
useOrganizationList,
useSessionList,
useUser,
useSession,
useReverification,
__experimental_useCheckout,
__experimental_CheckoutProvider,
__experimental_usePaymentElement,
__experimental_PaymentElementProvider,
__experimental_PaymentElement
} from "@clerk/shared/react";
// src/components/withClerk.tsx
import React2 from "react";
var withClerk = (Component, displayNameOrOptions) => {
const passedDisplayedName = typeof displayNameOrOptions === "string" ? displayNameOrOptions : displayNameOrOptions == null ? void 0 : displayNameOrOptions.component;
const displayName = passedDisplayedName || Component.displayName || Component.name || "Component";
Component.displayName = displayName;
const options = typeof displayNameOrOptions === "string" ? void 0 : displayNameOrOptions;
const HOC = (props) => {
useAssertWrappedByClerkProvider(displayName || "withClerk");
const clerk = useIsomorphicClerkContext();
if (!clerk.loaded && !(options == null ? void 0 : options.renderWhileLoading)) {
return null;
}
return /* @__PURE__ */ React2.createElement(
Component,
{
...props,
component: displayName,
clerk
}
);
};
HOC.displayName = `withClerk(${displayName})`;
return HOC;
};
export {
errorThrower,
setErrorThrowerOptions,
multipleClerkProvidersError,
multipleChildrenInButtonComponent,
unsupportedNonBrowserDomainOrProxyUrlFunction,
userProfilePageRenderedError,
userProfileLinkRenderedError,
organizationProfilePageRenderedError,
organizationProfileLinkRenderedError,
customPagesIgnoredComponent,
customPageWrongProps,
customLinkWrongProps,
noPathProvidedError,
incompatibleRoutingWithPathProvidedError,
userButtonIgnoredComponent,
customMenuItemsIgnoredComponent,
userButtonMenuItemsRenderedError,
userButtonMenuActionRenderedError,
userButtonMenuLinkRenderedError,
userButtonMenuItemLinkWrongProps,
userButtonMenuItemsActionWrongsProps,
IsomorphicClerkContext,
useIsomorphicClerkContext,
useAssertWrappedByClerkProvider,
withClerk,
AuthContext,
useAuth,
useDerivedAuth,
useEmailLink,
useSignIn,
useSignUp,
useClerk,
useOrganization,
useOrganizationCreationDefaults,
useOrganizationList,
useSessionList,
useUser,
useSession,
useReverification,
__experimental_useCheckout,
__experimental_CheckoutProvider,
__experimental_usePaymentElement,
__experimental_PaymentElementProvider,
__experimental_PaymentElement
};
//# sourceMappingURL=chunk-3EQWAEPK.mjs.map
{"version":3,"sources":["../src/errors/errorThrower.ts","../src/hooks/useAuth.ts","../src/contexts/AuthContext.ts","../src/contexts/IsomorphicClerkContext.tsx","../src/errors/messages.ts","../src/hooks/useAssertWrappedByClerkProvider.ts","../src/hooks/utils.ts","../src/hooks/useEmailLink.ts","../src/hooks/useSignIn.ts","../src/hooks/useSignUp.ts","../src/hooks/index.ts","../src/components/withClerk.tsx"],"sourcesContent":["import type { ErrorThrowerOptions } from '@clerk/shared/error';\nimport { buildErrorThrower } from '@clerk/shared/error';\n\nconst errorThrower = buildErrorThrower({ packageName: '@clerk/clerk-react' });\n\nexport { errorThrower };\n\n/**\n * Overrides options of the internal errorThrower (eg setting packageName prefix).\n *\n * @internal\n */\nexport function setErrorThrowerOptions(options: ErrorThrowerOptions) {\n errorThrower.setMessages(options).setPackageName(options);\n}\n","import { createCheckAuthorization, resolveAuthState } from '@clerk/shared/authorization';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type {\n CheckAuthorizationWithCustomPermissions,\n GetToken,\n JwtPayload,\n PendingSessionOptions,\n SignOut,\n UseAuthReturn,\n} from '@clerk/shared/types';\nimport { useCallback } from 'react';\n\nimport { useAuthContext } from '../contexts/AuthContext';\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { errorThrower } from '../errors/errorThrower';\nimport { invalidStateError } from '../errors/messages';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\nimport { createGetToken, createSignOut } from './utils';\n\n/**\n * @inline\n */\ntype UseAuthOptions = Record<string, any> | PendingSessionOptions | undefined | null;\n\n/**\n * The `useAuth()` hook provides access to the current user's authentication state and methods to manage the active session.\n *\n * > [!NOTE]\n * > To access auth data server-side, see the [`Auth` object reference doc](https://clerk.com/docs/reference/backend/types/auth-object).\n *\n * <If sdk=\"nextjs\">\n * By default, Next.js opts all routes into static rendering. If you need to opt a route or routes into dynamic rendering because you need to access the authentication data at request time, you can create a boundary by passing the `dynamic` prop to `<ClerkProvider>`. See the [guide on rendering modes](https://clerk.com/docs/guides/development/rendering-modes) for more information, including code examples.\n * </If>\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Signed out\", \"Signed in (no active organization)\", \"Signed in (with active organization)\"]\n *\n * @param [initialAuthStateOrOptions] - An object containing the initial authentication state or options for the `useAuth()` hook. If not provided, the hook will attempt to derive the state from the context. `treatPendingAsSignedOut` is a boolean that indicates whether pending sessions are considered as signed out or not. Defaults to `true`.\n *\n * @function\n *\n * @example\n *\n * The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/ExternalDataPage.tsx' }}\n * import { useAuth } from '@clerk/clerk-react'\n *\n * export default function ExternalDataPage() {\n * const { userId, sessionId, getToken, isLoaded, isSignedIn } = useAuth()\n *\n * const fetchExternalData = async () => {\n * const token = await getToken()\n *\n * // Fetch data from an external API\n * const response = await fetch('https://api.example.com/data', {\n * headers: {\n * Authorization: `Bearer ${token}`,\n * },\n * })\n *\n * return response.json()\n * }\n *\n * if (!isLoaded) {\n * return <div>Loading...</div>\n * }\n *\n * if (!isSignedIn) {\n * return <div>Sign in to view this page</div>\n * }\n *\n * return (\n * <div>\n * <p>\n * Hello, {userId}! Your current active session is {sessionId}.\n * </p>\n * <button onClick={fetchExternalData}>Fetch Data</button>\n * </div>\n * )\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-auth.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n */\nexport const useAuth = (initialAuthStateOrOptions: UseAuthOptions = {}): UseAuthReturn => {\n useAssertWrappedByClerkProvider('useAuth');\n\n const { treatPendingAsSignedOut, ...rest } = initialAuthStateOrOptions ?? {};\n const initialAuthState = rest as any;\n\n const authContextFromHook = useAuthContext();\n let authContext = authContextFromHook;\n\n if (authContext.sessionId === undefined && authContext.userId === undefined) {\n authContext = initialAuthState != null ? initialAuthState : {};\n }\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const getToken: GetToken = useCallback(createGetToken(isomorphicClerk), [isomorphicClerk]);\n const signOut: SignOut = useCallback(createSignOut(isomorphicClerk), [isomorphicClerk]);\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useAuth', { treatPendingAsSignedOut }));\n\n return useDerivedAuth(\n {\n ...authContext,\n getToken,\n signOut,\n },\n {\n treatPendingAsSignedOut,\n },\n );\n};\n\n/**\n * A hook that derives and returns authentication state and utility functions based on the provided auth object.\n *\n * @param authObject - An object containing authentication-related properties and functions.\n *\n * @returns A derived authentication state with helper methods. If the authentication state is invalid, an error is thrown.\n *\n * @remarks\n * This hook inspects session, user, and organization information to determine the current authentication state.\n * It returns an object that includes various properties such as whether the state is loaded, if a user is signed in,\n * session and user identifiers, Organization Roles, and a `has` function for authorization checks.\n * Additionally, it provides `signOut` and `getToken` functions if applicable.\n *\n * @example\n * ```tsx\n * const {\n * isLoaded,\n * isSignedIn,\n * userId,\n * orgId,\n * has,\n * signOut,\n * getToken\n * } = useDerivedAuth(authObject);\n * ```\n */\nexport function useDerivedAuth(\n authObject: any,\n { treatPendingAsSignedOut = true }: PendingSessionOptions = {},\n): UseAuthReturn {\n const { userId, orgId, orgRole, has, signOut, getToken, orgPermissions, factorVerificationAge, sessionClaims } =\n authObject ?? {};\n\n const derivedHas = useCallback(\n (params: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => {\n if (has) {\n return has(params);\n }\n return createCheckAuthorization({\n userId,\n orgId,\n orgRole,\n orgPermissions,\n factorVerificationAge,\n features: ((sessionClaims as JwtPayload | undefined)?.fea as string) || '',\n plans: ((sessionClaims as JwtPayload | undefined)?.pla as string) || '',\n })(params);\n },\n [has, userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims],\n );\n\n const payload = resolveAuthState({\n authObject: {\n ...authObject,\n getToken,\n signOut,\n has: derivedHas,\n },\n options: {\n treatPendingAsSignedOut,\n },\n });\n\n if (!payload) {\n return errorThrower.throw(invalidStateError);\n }\n\n return payload;\n}\n","import { createContextAndHook } from '@clerk/shared/react';\nimport type {\n ActClaim,\n JwtPayload,\n OrganizationCustomPermissionKey,\n OrganizationCustomRoleKey,\n SessionStatusClaim,\n} from '@clerk/shared/types';\n\nexport type AuthContextValue = {\n userId: string | null | undefined;\n sessionId: string | null | undefined;\n sessionStatus: SessionStatusClaim | null | undefined;\n sessionClaims: JwtPayload | null | undefined;\n actor: ActClaim | null | undefined;\n orgId: string | null | undefined;\n orgRole: OrganizationCustomRoleKey | null | undefined;\n orgSlug: string | null | undefined;\n orgPermissions: OrganizationCustomPermissionKey[] | null | undefined;\n factorVerificationAge: [number, number] | null;\n};\n\nexport const [AuthContext, useAuthContext] = createContextAndHook<AuthContextValue>('AuthContext');\n","import { ClerkInstanceContext, useClerkInstanceContext } from '@clerk/shared/react';\n\nimport type { IsomorphicClerk } from '../isomorphicClerk';\n\nexport const IsomorphicClerkContext = ClerkInstanceContext;\nexport const useIsomorphicClerkContext = useClerkInstanceContext as unknown as () => IsomorphicClerk;\n","export const noClerkProviderError = 'You must wrap your application in a <ClerkProvider> component.';\n\nexport const multipleClerkProvidersError =\n \"You've added multiple <ClerkProvider> components in your React component tree. Wrap your components in a single <ClerkProvider>.\";\n\nexport const multipleChildrenInButtonComponent = (name: string) =>\n `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`;\n\nexport const invalidStateError =\n 'Invalid state. Feel free to submit a bug or reach out to support here: https://clerk.com/support';\n\nexport const unsupportedNonBrowserDomainOrProxyUrlFunction =\n 'Unsupported usage of isSatellite, domain or proxyUrl. The usage of isSatellite, domain or proxyUrl as function is not supported in non-browser environments.';\n\nexport const userProfilePageRenderedError =\n '<UserProfile.Page /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.';\nexport const userProfileLinkRenderedError =\n '<UserProfile.Link /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.';\n\nexport const organizationProfilePageRenderedError =\n '<OrganizationProfile.Page /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.';\nexport const organizationProfileLinkRenderedError =\n '<OrganizationProfile.Link /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.';\n\nexport const customPagesIgnoredComponent = (componentName: string) =>\n `<${componentName} /> can only accept <${componentName}.Page /> and <${componentName}.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;\n\nexport const customPageWrongProps = (componentName: string) =>\n `Missing props. <${componentName}.Page /> component requires the following props: url, label, labelIcon, alongside with children to be rendered inside the page.`;\n\nexport const customLinkWrongProps = (componentName: string) =>\n `Missing props. <${componentName}.Link /> component requires the following props: url, label and labelIcon.`;\n\nexport const useAuthHasRequiresRoleOrPermission =\n 'Missing parameters. `has` from `useAuth` requires a permission or role key to be passed. Example usage: `has({permission: \"org:posts:edit\"`';\n\nexport const noPathProvidedError = (componentName: string) =>\n `The <${componentName}/> component uses path-based routing by default unless a different routing strategy is provided using the \\`routing\\` prop. When path-based routing is used, you need to provide the path where the component is mounted on by using the \\`path\\` prop. Example: <${componentName} path={'/my-path'} />`;\n\nexport const incompatibleRoutingWithPathProvidedError = (componentName: string) =>\n `The \\`path\\` prop will only be respected when the Clerk component uses path-based routing. To resolve this error, pass \\`routing='path'\\` to the <${componentName}/> component, or drop the \\`path\\` prop to switch to hash-based routing. For more details please refer to our docs: https://clerk.com/docs`;\n\nexport const userButtonIgnoredComponent = `<UserButton /> can only accept <UserButton.UserProfilePage />, <UserButton.UserProfileLink /> and <UserButton.MenuItems /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;\n\nexport const customMenuItemsIgnoredComponent =\n '<UserButton.MenuItems /> component can only accept <UserButton.Action /> and <UserButton.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.';\n\nexport const userButtonMenuItemsRenderedError =\n '<UserButton.MenuItems /> component needs to be a direct child of `<UserButton />`.';\n\nexport const userButtonMenuActionRenderedError =\n '<UserButton.Action /> component needs to be a direct child of `<UserButton.MenuItems />`.';\n\nexport const userButtonMenuLinkRenderedError =\n '<UserButton.Link /> component needs to be a direct child of `<UserButton.MenuItems />`.';\n\nexport const userButtonMenuItemLinkWrongProps =\n 'Missing props. <UserButton.Link /> component requires the following props: href, label and labelIcon.';\n\nexport const userButtonMenuItemsActionWrongsProps =\n 'Missing props. <UserButton.Action /> component requires the following props: label.';\n","import { useAssertWrappedByClerkProvider as useSharedAssertWrappedByClerkProvider } from '@clerk/shared/react';\n\nimport { errorThrower } from '../errors/errorThrower';\n\nexport const useAssertWrappedByClerkProvider = (source: string): void => {\n useSharedAssertWrappedByClerkProvider(() => {\n errorThrower.throwMissingClerkProviderError({ source });\n });\n};\n","import type { IsomorphicClerk } from '../isomorphicClerk';\n\n/**\n * @internal\n */\nconst clerkLoaded = (isomorphicClerk: IsomorphicClerk) => {\n return new Promise<void>(resolve => {\n const handler = (status: string) => {\n if (['ready', 'degraded'].includes(status)) {\n resolve();\n isomorphicClerk.off('status', handler);\n }\n };\n\n // Register the event listener\n isomorphicClerk.on('status', handler, { notify: true });\n });\n};\n\n/**\n * @internal\n */\nexport const createGetToken = (isomorphicClerk: IsomorphicClerk) => {\n return async (options: any) => {\n await clerkLoaded(isomorphicClerk);\n if (!isomorphicClerk.session) {\n return null;\n }\n return isomorphicClerk.session.getToken(options);\n };\n};\n\n/**\n * @internal\n */\nexport const createSignOut = (isomorphicClerk: IsomorphicClerk) => {\n return async (...args: any) => {\n await clerkLoaded(isomorphicClerk);\n return isomorphicClerk.signOut(...args);\n };\n};\n","import type {\n CreateEmailLinkFlowReturn,\n EmailAddressResource,\n SignInResource,\n SignInStartEmailLinkFlowParams,\n SignUpResource,\n StartEmailLinkFlowParams,\n} from '@clerk/shared/types';\nimport React from 'react';\n\ntype EmailLinkable = SignUpResource | EmailAddressResource | SignInResource;\ntype UseEmailLinkSignInReturn = CreateEmailLinkFlowReturn<SignInStartEmailLinkFlowParams, SignInResource>;\ntype UseEmailLinkSignUpReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, SignUpResource>;\ntype UseEmailLinkEmailAddressReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, EmailAddressResource>;\n\nfunction useEmailLink(resource: SignInResource): UseEmailLinkSignInReturn;\nfunction useEmailLink(resource: SignUpResource): UseEmailLinkSignUpReturn;\nfunction useEmailLink(resource: EmailAddressResource): UseEmailLinkEmailAddressReturn;\nfunction useEmailLink(\n resource: EmailLinkable,\n): UseEmailLinkSignInReturn | UseEmailLinkSignUpReturn | UseEmailLinkEmailAddressReturn {\n const { startEmailLinkFlow, cancelEmailLinkFlow } = React.useMemo(() => resource.createEmailLinkFlow(), [resource]);\n\n React.useEffect(() => {\n return cancelEmailLinkFlow;\n }, []);\n\n return {\n startEmailLinkFlow,\n cancelEmailLinkFlow,\n } as UseEmailLinkSignInReturn | UseEmailLinkSignUpReturn | UseEmailLinkEmailAddressReturn;\n}\n\nexport { useEmailLink };\n","import { useClientContext } from '@clerk/shared/react';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type { UseSignInReturn } from '@clerk/shared/types';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\n\n/**\n * The `useSignIn()` hook provides access to the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which allows you to check the current state of a sign-in attempt and manage the sign-in flow. You can use this to create a [custom sign-in flow](!custom-flow).\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Loaded\"]\n *\n * @example\n * ### Check the current state of a sign-in\n *\n * The following example uses the `useSignIn()` hook to access the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which contains the current sign-in attempt status and methods to create a new sign-in attempt. The `isLoaded` property is used to handle the loading state.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/SignInPage.tsx' }}\n * import { useSignIn } from '@clerk/clerk-react'\n *\n * export default function SignInPage() {\n * const { isLoaded, signIn } = useSignIn()\n *\n * if (!isLoaded) {\n * // Handle loading state\n * return null\n * }\n *\n * return <div>The current sign-in attempt status is {signIn?.status}.</div>\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-sign-in.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n *\n * @example\n * ### Create a custom sign-in flow with `useSignIn()`\n *\n * The `useSignIn()` hook can also be used to build fully custom sign-in flows, if Clerk's prebuilt components don't meet your specific needs or if you require more control over the authentication flow. Different sign-in flows include email and password, email and phone codes, email links, and multifactor (MFA). To learn more about using the `useSignIn()` hook to create custom flows, see the [custom flow guides](https://clerk.com/docs/guides/development/custom-flows/overview).\n *\n * ```empty```\n */\nexport const useSignIn = (): UseSignInReturn => {\n useAssertWrappedByClerkProvider('useSignIn');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const client = useClientContext();\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useSignIn'));\n\n if (!client) {\n return { isLoaded: false, signIn: undefined, setActive: undefined };\n }\n\n return {\n isLoaded: true,\n signIn: client.signIn,\n setActive: isomorphicClerk.setActive,\n };\n};\n","import { useClientContext } from '@clerk/shared/react';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type { UseSignUpReturn } from '@clerk/shared/types';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\n\n/**\n * The `useSignUp()` hook provides access to the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which allows you to check the current state of a sign-up attempt and manage the sign-up flow. You can use this to create a [custom sign-up flow](!custom-flow).\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Loaded\"]\n *\n * @example\n * ### Check the current state of a sign-up\n *\n * The following example uses the `useSignUp()` hook to access the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which contains the current sign-up attempt status and methods to create a new sign-up attempt. The `isLoaded` property is used to handle the loading state.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/SignUpPage.tsx' }}\n * import { useSignUp } from '@clerk/clerk-react'\n *\n * export default function SignUpPage() {\n * const { isLoaded, signUp } = useSignUp()\n *\n * if (!isLoaded) {\n * // Handle loading state\n * return null\n * }\n *\n * return <div>The current sign-up attempt status is {signUp?.status}.</div>\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-sign-up.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n *\n * @example\n * ### Create a custom sign-up flow with `useSignUp()`\n *\n * The `useSignUp()` hook can also be used to build fully custom sign-up flows, if Clerk's prebuilt components don't meet your specific needs or if you require more control over the authentication flow. Different sign-up flows include email and password, email and phone codes, email links, and multifactor (MFA). To learn more about using the `useSignUp()` hook to create custom flows, see the [custom flow guides](https://clerk.com/docs/guides/development/custom-flows/overview).\n *\n * ```empty```\n */\nexport const useSignUp = (): UseSignUpReturn => {\n useAssertWrappedByClerkProvider('useSignUp');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const client = useClientContext();\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useSignUp'));\n\n if (!client) {\n return { isLoaded: false, signUp: undefined, setActive: undefined };\n }\n\n return {\n isLoaded: true,\n signUp: client.signUp,\n setActive: isomorphicClerk.setActive,\n };\n};\n","export { useAuth } from './useAuth';\nexport { useEmailLink } from './useEmailLink';\nexport { useSignIn } from './useSignIn';\nexport { useSignUp } from './useSignUp';\nexport {\n useClerk,\n useOrganization,\n useOrganizationCreationDefaults,\n useOrganizationList,\n useSessionList,\n useUser,\n useSession,\n useReverification,\n __experimental_useCheckout,\n __experimental_CheckoutProvider,\n __experimental_usePaymentElement,\n __experimental_PaymentElementProvider,\n __experimental_PaymentElement,\n} from '@clerk/shared/react';\nexport type { UseOrganizationCreationDefaultsParams, UseOrganizationCreationDefaultsReturn } from '@clerk/shared/react';\n","import type { LoadedClerk, Without } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from '../hooks/useAssertWrappedByClerkProvider';\n\nexport const withClerk = <P extends { clerk: LoadedClerk; component?: string }>(\n Component: React.ComponentType<P>,\n displayNameOrOptions?: string | { component: string; renderWhileLoading?: boolean },\n) => {\n const passedDisplayedName =\n typeof displayNameOrOptions === 'string' ? displayNameOrOptions : displayNameOrOptions?.component;\n const displayName = passedDisplayedName || Component.displayName || Component.name || 'Component';\n Component.displayName = displayName;\n\n const options = typeof displayNameOrOptions === 'string' ? undefined : displayNameOrOptions;\n\n const HOC = (props: Without<P, 'clerk'>) => {\n useAssertWrappedByClerkProvider(displayName || 'withClerk');\n\n const clerk = useIsomorphicClerkContext();\n\n if (!clerk.loaded && !options?.renderWhileLoading) {\n return null;\n }\n\n return (\n <Component\n {...(props as P)}\n component={displayName}\n clerk={clerk}\n />\n );\n };\n HOC.displayName = `withClerk(${displayName})`;\n return HOC;\n};\n"],"mappings":"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","names":["eventMethodCalled","eventMethodCalled","useClientContext","eventMethodCalled","useClientContext","eventMethodCalled","React","React"]}
import {
useAssertWrappedByClerkProvider,
useAuth,
useIsomorphicClerkContext,
withClerk
} from "./chunk-3EQWAEPK.mjs";
// src/components/controlComponents.tsx
import { deprecated } from "@clerk/shared/deprecated";
import React from "react";
// src/contexts/SessionContext.tsx
import { SessionContext, useSessionContext } from "@clerk/shared/react";
// src/components/controlComponents.tsx
var SignedIn = ({ children, treatPendingAsSignedOut }) => {
useAssertWrappedByClerkProvider("SignedIn");
const { userId } = useAuth({ treatPendingAsSignedOut });
if (userId) {
return children;
}
return null;
};
var SignedOut = ({ children, treatPendingAsSignedOut }) => {
useAssertWrappedByClerkProvider("SignedOut");
const { userId } = useAuth({ treatPendingAsSignedOut });
if (userId === null) {
return children;
}
return null;
};
var ClerkLoaded = ({ children }) => {
useAssertWrappedByClerkProvider("ClerkLoaded");
const isomorphicClerk = useIsomorphicClerkContext();
if (!isomorphicClerk.loaded) {
return null;
}
return children;
};
var ClerkLoading = ({ children }) => {
useAssertWrappedByClerkProvider("ClerkLoading");
const isomorphicClerk = useIsomorphicClerkContext();
if (isomorphicClerk.status !== "loading") {
return null;
}
return children;
};
var ClerkFailed = ({ children }) => {
useAssertWrappedByClerkProvider("ClerkFailed");
const isomorphicClerk = useIsomorphicClerkContext();
if (isomorphicClerk.status !== "error") {
return null;
}
return children;
};
var ClerkDegraded = ({ children }) => {
useAssertWrappedByClerkProvider("ClerkDegraded");
const isomorphicClerk = useIsomorphicClerkContext();
if (isomorphicClerk.status !== "degraded") {
return null;
}
return children;
};
var Protect = ({ children, fallback, treatPendingAsSignedOut, ...restAuthorizedParams }) => {
useAssertWrappedByClerkProvider("Protect");
const { isLoaded, has, userId } = useAuth({ treatPendingAsSignedOut });
if (!isLoaded) {
return null;
}
const unauthorized = fallback != null ? fallback : null;
const authorized = children;
if (!userId) {
return unauthorized;
}
if (typeof restAuthorizedParams.condition === "function") {
if (restAuthorizedParams.condition(has)) {
return authorized;
}
return unauthorized;
}
if (restAuthorizedParams.role || restAuthorizedParams.permission || restAuthorizedParams.feature || restAuthorizedParams.plan) {
if (has(restAuthorizedParams)) {
return authorized;
}
return unauthorized;
}
return authorized;
};
var RedirectToSignIn = withClerk(({ clerk, ...props }) => {
const { client, session } = clerk;
const hasSignedInSessions = client.signedInSessions ? client.signedInSessions.length > 0 : (
// Compat for clerk-js<5.54.0 (which was released with the `signedInSessions` property)
client.activeSessions && client.activeSessions.length > 0
);
React.useEffect(() => {
if (session === null && hasSignedInSessions) {
void clerk.redirectToAfterSignOut();
} else {
void clerk.redirectToSignIn(props);
}
}, []);
return null;
}, "RedirectToSignIn");
var RedirectToSignUp = withClerk(({ clerk, ...props }) => {
React.useEffect(() => {
void clerk.redirectToSignUp(props);
}, []);
return null;
}, "RedirectToSignUp");
var RedirectToTasks = withClerk(({ clerk, ...props }) => {
React.useEffect(() => {
void clerk.redirectToTasks(props);
}, []);
return null;
}, "RedirectToTasks");
var RedirectToUserProfile = withClerk(({ clerk }) => {
React.useEffect(() => {
deprecated("RedirectToUserProfile", "Use the `redirectToUserProfile()` method instead.");
void clerk.redirectToUserProfile();
}, []);
return null;
}, "RedirectToUserProfile");
var RedirectToOrganizationProfile = withClerk(({ clerk }) => {
React.useEffect(() => {
deprecated("RedirectToOrganizationProfile", "Use the `redirectToOrganizationProfile()` method instead.");
void clerk.redirectToOrganizationProfile();
}, []);
return null;
}, "RedirectToOrganizationProfile");
var RedirectToCreateOrganization = withClerk(({ clerk }) => {
React.useEffect(() => {
deprecated("RedirectToCreateOrganization", "Use the `redirectToCreateOrganization()` method instead.");
void clerk.redirectToCreateOrganization();
}, []);
return null;
}, "RedirectToCreateOrganization");
var AuthenticateWithRedirectCallback = withClerk(
({ clerk, ...handleRedirectCallbackParams }) => {
React.useEffect(() => {
void clerk.handleRedirectCallback(handleRedirectCallbackParams);
}, []);
return null;
},
"AuthenticateWithRedirectCallback"
);
var MultisessionAppSupport = ({ children }) => {
useAssertWrappedByClerkProvider("MultisessionAppSupport");
const session = useSessionContext();
return /* @__PURE__ */ React.createElement(React.Fragment, { key: session ? session.id : "no-users" }, children);
};
export {
SignedIn,
SignedOut,
ClerkLoaded,
ClerkLoading,
ClerkFailed,
ClerkDegraded,
Protect,
RedirectToSignIn,
RedirectToSignUp,
RedirectToTasks,
RedirectToUserProfile,
RedirectToOrganizationProfile,
RedirectToCreateOrganization,
AuthenticateWithRedirectCallback,
MultisessionAppSupport
};
//# sourceMappingURL=chunk-BUI34B34.mjs.map
{"version":3,"sources":["../src/components/controlComponents.tsx","../src/contexts/SessionContext.tsx"],"sourcesContent":["import { deprecated } from '@clerk/shared/deprecated';\nimport type {\n HandleOAuthCallbackParams,\n PendingSessionOptions,\n ProtectProps as _ProtectProps,\n} from '@clerk/shared/types';\nimport React from 'react';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useSessionContext } from '../contexts/SessionContext';\nimport { useAuth } from '../hooks';\nimport { useAssertWrappedByClerkProvider } from '../hooks/useAssertWrappedByClerkProvider';\nimport type { RedirectToSignInProps, RedirectToSignUpProps, RedirectToTasksProps, WithClerkProp } from '../types';\nimport { withClerk } from './withClerk';\n\nexport const SignedIn = ({ children, treatPendingAsSignedOut }: React.PropsWithChildren<PendingSessionOptions>) => {\n useAssertWrappedByClerkProvider('SignedIn');\n\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (userId) {\n return children;\n }\n return null;\n};\n\nexport const SignedOut = ({ children, treatPendingAsSignedOut }: React.PropsWithChildren<PendingSessionOptions>) => {\n useAssertWrappedByClerkProvider('SignedOut');\n\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (userId === null) {\n return children;\n }\n return null;\n};\n\nexport const ClerkLoaded = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkLoaded');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (!isomorphicClerk.loaded) {\n return null;\n }\n return children;\n};\n\nexport const ClerkLoading = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkLoading');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'loading') {\n return null;\n }\n return children;\n};\n\nexport const ClerkFailed = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkFailed');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'error') {\n return null;\n }\n return children;\n};\n\nexport const ClerkDegraded = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkDegraded');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'degraded') {\n return null;\n }\n return children;\n};\n\nexport type ProtectProps = React.PropsWithChildren<\n _ProtectProps & {\n fallback?: React.ReactNode;\n } & PendingSessionOptions\n>;\n\n/**\n * Use `<Protect/>` in order to prevent unauthenticated or unauthorized users from accessing the children passed to the component.\n *\n * Examples:\n * ```\n * <Protect permission=\"a_permission_key\" />\n * <Protect role=\"a_role_key\" />\n * <Protect condition={(has) => has({permission:\"a_permission_key\"})} />\n * <Protect condition={(has) => has({role:\"a_role_key\"})} />\n * <Protect fallback={<p>Unauthorized</p>} />\n * ```\n */\nexport const Protect = ({ children, fallback, treatPendingAsSignedOut, ...restAuthorizedParams }: ProtectProps) => {\n useAssertWrappedByClerkProvider('Protect');\n\n const { isLoaded, has, userId } = useAuth({ treatPendingAsSignedOut });\n\n /**\n * Avoid flickering children or fallback while clerk is loading sessionId or userId\n */\n if (!isLoaded) {\n return null;\n }\n\n /**\n * Fallback to UI provided by user or `null` if authorization checks failed\n */\n const unauthorized = fallback ?? null;\n\n const authorized = children;\n\n if (!userId) {\n return unauthorized;\n }\n\n /**\n * Check against the results of `has` called inside the callback\n */\n if (typeof restAuthorizedParams.condition === 'function') {\n if (restAuthorizedParams.condition(has)) {\n return authorized;\n }\n return unauthorized;\n }\n\n if (\n restAuthorizedParams.role ||\n restAuthorizedParams.permission ||\n restAuthorizedParams.feature ||\n restAuthorizedParams.plan\n ) {\n if (has(restAuthorizedParams)) {\n return authorized;\n }\n return unauthorized;\n }\n\n /**\n * If neither of the authorization params are passed behave as the `<SignedIn/>`.\n * If fallback is present render that instead of rendering nothing.\n */\n return authorized;\n};\n\nexport const RedirectToSignIn = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToSignInProps>) => {\n const { client, session } = clerk;\n\n const hasSignedInSessions = client.signedInSessions\n ? client.signedInSessions.length > 0\n : // Compat for clerk-js<5.54.0 (which was released with the `signedInSessions` property)\n client.activeSessions && client.activeSessions.length > 0;\n\n React.useEffect(() => {\n if (session === null && hasSignedInSessions) {\n void clerk.redirectToAfterSignOut();\n } else {\n void clerk.redirectToSignIn(props);\n }\n }, []);\n\n return null;\n}, 'RedirectToSignIn');\n\nexport const RedirectToSignUp = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToSignUpProps>) => {\n React.useEffect(() => {\n void clerk.redirectToSignUp(props);\n }, []);\n\n return null;\n}, 'RedirectToSignUp');\n\nexport const RedirectToTasks = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToTasksProps>) => {\n React.useEffect(() => {\n void clerk.redirectToTasks(props);\n }, []);\n\n return null;\n}, 'RedirectToTasks');\n\n/**\n * @function\n * @deprecated Use [`redirectToUserProfile()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-user-profile) instead.\n */\nexport const RedirectToUserProfile = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToUserProfile', 'Use the `redirectToUserProfile()` method instead.');\n void clerk.redirectToUserProfile();\n }, []);\n\n return null;\n}, 'RedirectToUserProfile');\n\n/**\n * @function\n * @deprecated Use [`redirectToOrganizationProfile()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-organization-profile) instead.\n */\nexport const RedirectToOrganizationProfile = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToOrganizationProfile', 'Use the `redirectToOrganizationProfile()` method instead.');\n void clerk.redirectToOrganizationProfile();\n }, []);\n\n return null;\n}, 'RedirectToOrganizationProfile');\n\n/**\n * @function\n * @deprecated Use [`redirectToCreateOrganization()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-create-organization) instead.\n */\nexport const RedirectToCreateOrganization = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToCreateOrganization', 'Use the `redirectToCreateOrganization()` method instead.');\n void clerk.redirectToCreateOrganization();\n }, []);\n\n return null;\n}, 'RedirectToCreateOrganization');\n\nexport const AuthenticateWithRedirectCallback = withClerk(\n ({ clerk, ...handleRedirectCallbackParams }: WithClerkProp<HandleOAuthCallbackParams>) => {\n React.useEffect(() => {\n void clerk.handleRedirectCallback(handleRedirectCallbackParams);\n }, []);\n\n return null;\n },\n 'AuthenticateWithRedirectCallback',\n);\n\nexport const MultisessionAppSupport = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('MultisessionAppSupport');\n\n const session = useSessionContext();\n return <React.Fragment key={session ? session.id : 'no-users'}>{children}</React.Fragment>;\n};\n","export { SessionContext, useSessionContext } from '@clerk/shared/react';\n"],"mappings":"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","names":[]}
import {
customLinkWrongProps,
customMenuItemsIgnoredComponent,
customPageWrongProps,
customPagesIgnoredComponent,
errorThrower,
multipleChildrenInButtonComponent,
organizationProfileLinkRenderedError,
organizationProfilePageRenderedError,
userButtonIgnoredComponent,
userButtonMenuActionRenderedError,
userButtonMenuItemLinkWrongProps,
userButtonMenuItemsActionWrongsProps,
userButtonMenuItemsRenderedError,
userButtonMenuLinkRenderedError,
userProfileLinkRenderedError,
userProfilePageRenderedError,
withClerk
} from "./chunk-3EQWAEPK.mjs";
// src/components/uiComponents.tsx
import { logErrorInDevMode as logErrorInDevMode3 } from "@clerk/shared/utils";
import React7, { createContext, createElement, useContext } from "react";
// src/utils/childrenUtils.tsx
import React from "react";
var assertSingleChild = (children) => (name) => {
try {
return React.Children.only(children);
} catch {
return errorThrower.throw(multipleChildrenInButtonComponent(name));
}
};
var normalizeWithDefaultValue = (children, defaultText) => {
if (!children) {
children = defaultText;
}
if (typeof children === "string") {
children = /* @__PURE__ */ React.createElement("button", null, children);
}
return children;
};
var safeExecute = (cb) => (...args) => {
if (cb && typeof cb === "function") {
return cb(...args);
}
};
// src/utils/isConstructor.ts
function isConstructor(f) {
return typeof f === "function";
}
// src/utils/useMaxAllowedInstancesGuard.tsx
import React2 from "react";
var counts = /* @__PURE__ */ new Map();
function useMaxAllowedInstancesGuard(name, error, maxCount = 1) {
React2.useEffect(() => {
const count = counts.get(name) || 0;
if (count == maxCount) {
return errorThrower.throw(error);
}
counts.set(name, count + 1);
return () => {
counts.set(name, (counts.get(name) || 1) - 1);
};
}, []);
}
function withMaxAllowedInstancesGuard(WrappedComponent, name, error) {
const displayName = WrappedComponent.displayName || WrappedComponent.name || name || "Component";
const Hoc = (props) => {
useMaxAllowedInstancesGuard(name, error);
return /* @__PURE__ */ React2.createElement(WrappedComponent, { ...props });
};
Hoc.displayName = `withMaxAllowedInstancesGuard(${displayName})`;
return Hoc;
}
// src/utils/useCustomElementPortal.tsx
import { useState } from "react";
import { createPortal } from "react-dom";
var useCustomElementPortal = (elements) => {
const [nodeMap, setNodeMap] = useState(/* @__PURE__ */ new Map());
return elements.map((el) => ({
id: el.id,
mount: (node) => setNodeMap((prev) => new Map(prev).set(String(el.id), node)),
unmount: () => setNodeMap((prev) => {
const newMap = new Map(prev);
newMap.set(String(el.id), null);
return newMap;
}),
portal: () => {
const node = nodeMap.get(String(el.id));
return node ? createPortal(el.component, node) : null;
}
}));
};
// src/utils/useCustomPages.tsx
import { logErrorInDevMode } from "@clerk/shared/utils";
import React4 from "react";
// src/utils/componentValidation.ts
import React3 from "react";
var isThatComponent = (v, component) => {
return !!v && React3.isValidElement(v) && (v == null ? void 0 : v.type) === component;
};
// src/utils/useCustomPages.tsx
var useUserProfileCustomPages = (children, options) => {
const reorderItemsLabels = ["account", "security", "billing", "apiKeys"];
return useCustomPages(
{
children,
reorderItemsLabels,
LinkComponent: UserProfileLink,
PageComponent: UserProfilePage,
MenuItemsComponent: MenuItems,
componentName: "UserProfile"
},
options
);
};
var useOrganizationProfileCustomPages = (children, options) => {
const reorderItemsLabels = ["general", "members", "billing", "apiKeys"];
return useCustomPages(
{
children,
reorderItemsLabels,
LinkComponent: OrganizationProfileLink,
PageComponent: OrganizationProfilePage,
componentName: "OrganizationProfile"
},
options
);
};
var useSanitizedChildren = (children) => {
const sanitizedChildren = [];
const excludedComponents = [
OrganizationProfileLink,
OrganizationProfilePage,
MenuItems,
UserProfilePage,
UserProfileLink
];
React4.Children.forEach(children, (child) => {
if (!excludedComponents.some((component) => isThatComponent(child, component))) {
sanitizedChildren.push(child);
}
});
return sanitizedChildren;
};
var useCustomPages = (params, options) => {
const { children, LinkComponent, PageComponent, MenuItemsComponent, reorderItemsLabels, componentName } = params;
const { allowForAnyChildren = false } = options || {};
const validChildren = [];
React4.Children.forEach(children, (child) => {
if (!isThatComponent(child, PageComponent) && !isThatComponent(child, LinkComponent) && !isThatComponent(child, MenuItemsComponent)) {
if (child && !allowForAnyChildren) {
logErrorInDevMode(customPagesIgnoredComponent(componentName));
}
return;
}
const { props } = child;
const { children: children2, label, url, labelIcon } = props;
if (isThatComponent(child, PageComponent)) {
if (isReorderItem(props, reorderItemsLabels)) {
validChildren.push({ label });
} else if (isCustomPage(props)) {
validChildren.push({ label, labelIcon, children: children2, url });
} else {
logErrorInDevMode(customPageWrongProps(componentName));
return;
}
}
if (isThatComponent(child, LinkComponent)) {
if (isExternalLink(props)) {
validChildren.push({ label, labelIcon, url });
} else {
logErrorInDevMode(customLinkWrongProps(componentName));
return;
}
}
});
const customPageContents = [];
const customPageLabelIcons = [];
const customLinkLabelIcons = [];
validChildren.forEach((cp, index) => {
if (isCustomPage(cp)) {
customPageContents.push({ component: cp.children, id: index });
customPageLabelIcons.push({ component: cp.labelIcon, id: index });
return;
}
if (isExternalLink(cp)) {
customLinkLabelIcons.push({ component: cp.labelIcon, id: index });
}
});
const customPageContentsPortals = useCustomElementPortal(customPageContents);
const customPageLabelIconsPortals = useCustomElementPortal(customPageLabelIcons);
const customLinkLabelIconsPortals = useCustomElementPortal(customLinkLabelIcons);
const customPages = [];
const customPagesPortals = [];
validChildren.forEach((cp, index) => {
if (isReorderItem(cp, reorderItemsLabels)) {
customPages.push({ label: cp.label });
return;
}
if (isCustomPage(cp)) {
const {
portal: contentPortal,
mount,
unmount
} = customPageContentsPortals.find((p) => p.id === index);
const {
portal: labelPortal,
mount: mountIcon,
unmount: unmountIcon
} = customPageLabelIconsPortals.find((p) => p.id === index);
customPages.push({ label: cp.label, url: cp.url, mount, unmount, mountIcon, unmountIcon });
customPagesPortals.push(contentPortal);
customPagesPortals.push(labelPortal);
return;
}
if (isExternalLink(cp)) {
const {
portal: labelPortal,
mount: mountIcon,
unmount: unmountIcon
} = customLinkLabelIconsPortals.find((p) => p.id === index);
customPages.push({ label: cp.label, url: cp.url, mountIcon, unmountIcon });
customPagesPortals.push(labelPortal);
return;
}
});
return { customPages, customPagesPortals };
};
var isReorderItem = (childProps, validItems) => {
const { children, label, url, labelIcon } = childProps;
return !children && !url && !labelIcon && validItems.some((v) => v === label);
};
var isCustomPage = (childProps) => {
const { children, label, url, labelIcon } = childProps;
return !!children && !!url && !!labelIcon && !!label;
};
var isExternalLink = (childProps) => {
const { children, label, url, labelIcon } = childProps;
return !children && !!url && !!labelIcon && !!label;
};
// src/utils/useCustomMenuItems.tsx
import { logErrorInDevMode as logErrorInDevMode2 } from "@clerk/shared/utils";
import React5 from "react";
var useUserButtonCustomMenuItems = (children, options) => {
var _a;
const reorderItemsLabels = ["manageAccount", "signOut"];
return useCustomMenuItems({
children,
reorderItemsLabels,
MenuItemsComponent: MenuItems,
MenuActionComponent: MenuAction,
MenuLinkComponent: MenuLink,
UserProfileLinkComponent: UserProfileLink,
UserProfilePageComponent: UserProfilePage,
allowForAnyChildren: (_a = options == null ? void 0 : options.allowForAnyChildren) != null ? _a : false
});
};
var useCustomMenuItems = ({
children,
MenuItemsComponent,
MenuActionComponent,
MenuLinkComponent,
UserProfileLinkComponent,
UserProfilePageComponent,
reorderItemsLabels,
allowForAnyChildren = false
}) => {
const validChildren = [];
const customMenuItems = [];
const customMenuItemsPortals = [];
React5.Children.forEach(children, (child) => {
if (!isThatComponent(child, MenuItemsComponent) && !isThatComponent(child, UserProfileLinkComponent) && !isThatComponent(child, UserProfilePageComponent)) {
if (child && !allowForAnyChildren) {
logErrorInDevMode2(userButtonIgnoredComponent);
}
return;
}
if (isThatComponent(child, UserProfileLinkComponent) || isThatComponent(child, UserProfilePageComponent)) {
return;
}
const { props } = child;
React5.Children.forEach(props.children, (child2) => {
if (!isThatComponent(child2, MenuActionComponent) && !isThatComponent(child2, MenuLinkComponent)) {
if (child2) {
logErrorInDevMode2(customMenuItemsIgnoredComponent);
}
return;
}
const { props: props2 } = child2;
const { label, labelIcon, href, onClick, open } = props2;
if (isThatComponent(child2, MenuActionComponent)) {
if (isReorderItem2(props2, reorderItemsLabels)) {
validChildren.push({ label });
} else if (isCustomMenuItem(props2)) {
const baseItem = {
label,
labelIcon
};
if (onClick !== void 0) {
validChildren.push({
...baseItem,
onClick
});
} else if (open !== void 0) {
validChildren.push({
...baseItem,
open: open.startsWith("/") ? open : `/${open}`
});
} else {
logErrorInDevMode2("Custom menu item must have either onClick or open property");
return;
}
} else {
logErrorInDevMode2(userButtonMenuItemsActionWrongsProps);
return;
}
}
if (isThatComponent(child2, MenuLinkComponent)) {
if (isExternalLink2(props2)) {
validChildren.push({ label, labelIcon, href });
} else {
logErrorInDevMode2(userButtonMenuItemLinkWrongProps);
return;
}
}
});
});
const customMenuItemLabelIcons = [];
const customLinkLabelIcons = [];
validChildren.forEach((mi, index) => {
if (isCustomMenuItem(mi)) {
customMenuItemLabelIcons.push({ component: mi.labelIcon, id: index });
}
if (isExternalLink2(mi)) {
customLinkLabelIcons.push({ component: mi.labelIcon, id: index });
}
});
const customMenuItemLabelIconsPortals = useCustomElementPortal(customMenuItemLabelIcons);
const customLinkLabelIconsPortals = useCustomElementPortal(customLinkLabelIcons);
validChildren.forEach((mi, index) => {
if (isReorderItem2(mi, reorderItemsLabels)) {
customMenuItems.push({
label: mi.label
});
}
if (isCustomMenuItem(mi)) {
const {
portal: iconPortal,
mount: mountIcon,
unmount: unmountIcon
} = customMenuItemLabelIconsPortals.find((p) => p.id === index);
const menuItem = {
label: mi.label,
mountIcon,
unmountIcon
};
if ("onClick" in mi) {
menuItem.onClick = mi.onClick;
} else if ("open" in mi) {
menuItem.open = mi.open;
}
customMenuItems.push(menuItem);
customMenuItemsPortals.push(iconPortal);
}
if (isExternalLink2(mi)) {
const {
portal: iconPortal,
mount: mountIcon,
unmount: unmountIcon
} = customLinkLabelIconsPortals.find((p) => p.id === index);
customMenuItems.push({
label: mi.label,
href: mi.href,
mountIcon,
unmountIcon
});
customMenuItemsPortals.push(iconPortal);
}
});
return { customMenuItems, customMenuItemsPortals };
};
var isReorderItem2 = (childProps, validItems) => {
const { children, label, onClick, labelIcon } = childProps;
return !children && !onClick && !labelIcon && validItems.some((v) => v === label);
};
var isCustomMenuItem = (childProps) => {
const { label, labelIcon, onClick, open } = childProps;
return !!labelIcon && !!label && (typeof onClick === "function" || typeof open === "string");
};
var isExternalLink2 = (childProps) => {
const { label, href, labelIcon } = childProps;
return !!href && !!labelIcon && !!label;
};
// src/utils/useWaitForComponentMount.ts
import { useEffect, useRef, useState as useState2 } from "react";
var createAwaitableMutationObserver = (globalOptions) => {
const isReady = globalOptions == null ? void 0 : globalOptions.isReady;
return (options) => new Promise((resolve, reject) => {
const { root = document == null ? void 0 : document.body, selector, timeout = 0 } = options;
if (!root) {
reject(new Error("No root element provided"));
return;
}
let elementToWatch = root;
if (selector) {
elementToWatch = root == null ? void 0 : root.querySelector(selector);
}
if (isReady(elementToWatch, selector)) {
resolve();
return;
}
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (!elementToWatch && selector) {
elementToWatch = root == null ? void 0 : root.querySelector(selector);
}
if (globalOptions.childList && mutation.type === "childList" || globalOptions.attributes && mutation.type === "attributes") {
if (isReady(elementToWatch, selector)) {
observer.disconnect();
resolve();
return;
}
}
}
});
observer.observe(root, globalOptions);
if (timeout > 0) {
setTimeout(() => {
observer.disconnect();
reject(new Error(`Timeout waiting for ${selector}`));
}, timeout);
}
});
};
var waitForElementChildren = createAwaitableMutationObserver({
childList: true,
subtree: true,
isReady: (el, selector) => {
var _a;
return !!(el == null ? void 0 : el.childElementCount) && ((_a = el == null ? void 0 : el.matches) == null ? void 0 : _a.call(el, selector)) && el.childElementCount > 0;
}
});
function useWaitForComponentMount(component, options) {
const watcherRef = useRef();
const [status, setStatus] = useState2("rendering");
useEffect(() => {
if (!component) {
throw new Error("Clerk: no component name provided, unable to detect mount.");
}
if (typeof window !== "undefined" && !watcherRef.current) {
const defaultSelector = `[data-clerk-component="${component}"]`;
const selector = options == null ? void 0 : options.selector;
watcherRef.current = waitForElementChildren({
selector: selector ? (
// Allows for `[data-clerk-component="xxxx"][data-some-attribute="123"] .my-class`
defaultSelector + selector
) : defaultSelector
}).then(() => {
setStatus("rendered");
}).catch(() => {
setStatus("error");
});
}
}, [component, options == null ? void 0 : options.selector]);
return status;
}
// src/components/ClerkHostRenderer.tsx
import { without } from "@clerk/shared/object";
import { isDeeplyEqual } from "@clerk/shared/react";
import React6 from "react";
var isMountProps = (props) => {
return "mount" in props;
};
var isOpenProps = (props) => {
return "open" in props;
};
var stripMenuItemIconHandlers = (menuItems) => {
return menuItems == null ? void 0 : menuItems.map(({ mountIcon, unmountIcon, ...rest }) => rest);
};
var ClerkHostRenderer = class extends React6.PureComponent {
constructor() {
super(...arguments);
this.rootRef = React6.createRef();
}
componentDidUpdate(_prevProps) {
var _a, _b, _c, _d;
if (!isMountProps(_prevProps) || !isMountProps(this.props)) {
return;
}
const prevProps = without(_prevProps.props, "customPages", "customMenuItems", "children");
const newProps = without(this.props.props, "customPages", "customMenuItems", "children");
const customPagesChanged = ((_a = prevProps.customPages) == null ? void 0 : _a.length) !== ((_b = newProps.customPages) == null ? void 0 : _b.length);
const customMenuItemsChanged = ((_c = prevProps.customMenuItems) == null ? void 0 : _c.length) !== ((_d = newProps.customMenuItems) == null ? void 0 : _d.length);
const prevMenuItemsWithoutHandlers = stripMenuItemIconHandlers(_prevProps.props.customMenuItems);
const newMenuItemsWithoutHandlers = stripMenuItemIconHandlers(this.props.props.customMenuItems);
if (!isDeeplyEqual(prevProps, newProps) || !isDeeplyEqual(prevMenuItemsWithoutHandlers, newMenuItemsWithoutHandlers) || customPagesChanged || customMenuItemsChanged) {
if (this.rootRef.current) {
this.props.updateProps({ node: this.rootRef.current, props: this.props.props });
}
}
}
componentDidMount() {
if (this.rootRef.current) {
if (isMountProps(this.props)) {
this.props.mount(this.rootRef.current, this.props.props);
}
if (isOpenProps(this.props)) {
this.props.open(this.props.props);
}
}
}
componentWillUnmount() {
if (this.rootRef.current) {
if (isMountProps(this.props)) {
this.props.unmount(this.rootRef.current);
}
if (isOpenProps(this.props)) {
this.props.close();
}
}
}
render() {
const { hideRootHtmlElement = false } = this.props;
const rootAttributes = {
ref: this.rootRef,
...this.props.rootProps,
...this.props.component && { "data-clerk-component": this.props.component }
};
return /* @__PURE__ */ React6.createElement(React6.Fragment, null, !hideRootHtmlElement && /* @__PURE__ */ React6.createElement("div", { ...rootAttributes }), this.props.children);
}
};
// src/components/uiComponents.tsx
var CustomPortalsRenderer = (props) => {
var _a, _b;
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, (_a = props == null ? void 0 : props.customPagesPortals) == null ? void 0 : _a.map((portal, index) => createElement(portal, { key: index })), (_b = props == null ? void 0 : props.customMenuItemsPortals) == null ? void 0 : _b.map((portal, index) => createElement(portal, { key: index })));
};
var SignIn = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountSignIn,
unmount: clerk.unmountSignIn,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "SignIn", renderWhileLoading: true }
);
var SignUp = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountSignUp,
unmount: clerk.unmountSignUp,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "SignUp", renderWhileLoading: true }
);
function UserProfilePage({ children }) {
logErrorInDevMode3(userProfilePageRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function UserProfileLink({ children }) {
logErrorInDevMode3(userProfileLinkRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
var _UserProfile = withClerk(
({
clerk,
component,
fallback,
...props
}) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
const { customPages, customPagesPortals } = useUserProfileCustomPages(props.children);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountUserProfile,
unmount: clerk.unmountUserProfile,
updateProps: clerk.__unstable__updateProps,
props: { ...props, customPages },
rootProps: rendererRootProps
},
/* @__PURE__ */ React7.createElement(CustomPortalsRenderer, { customPagesPortals })
));
},
{ component: "UserProfile", renderWhileLoading: true }
);
var UserProfile = Object.assign(_UserProfile, {
Page: UserProfilePage,
Link: UserProfileLink
});
var UserButtonContext = createContext({
mount: () => {
},
unmount: () => {
},
updateProps: () => {
}
});
var _UserButton = withClerk(
({
clerk,
component,
fallback,
...props
}) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
const { customPages, customPagesPortals } = useUserProfileCustomPages(props.children, {
allowForAnyChildren: !!props.__experimental_asProvider
});
const userProfileProps = { ...props.userProfileProps, customPages };
const { customMenuItems, customMenuItemsPortals } = useUserButtonCustomMenuItems(props.children, {
allowForAnyChildren: !!props.__experimental_asProvider
});
const sanitizedChildren = useSanitizedChildren(props.children);
const passableProps = {
mount: clerk.mountUserButton,
unmount: clerk.unmountUserButton,
updateProps: clerk.__unstable__updateProps,
props: { ...props, userProfileProps, customMenuItems }
};
const portalProps = {
customPagesPortals,
customMenuItemsPortals
};
return /* @__PURE__ */ React7.createElement(UserButtonContext.Provider, { value: passableProps }, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
...passableProps,
hideRootHtmlElement: !!props.__experimental_asProvider,
rootProps: rendererRootProps
},
props.__experimental_asProvider ? sanitizedChildren : null,
/* @__PURE__ */ React7.createElement(CustomPortalsRenderer, { ...portalProps })
));
},
{ component: "UserButton", renderWhileLoading: true }
);
function MenuItems({ children }) {
logErrorInDevMode3(userButtonMenuItemsRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function MenuAction({ children }) {
logErrorInDevMode3(userButtonMenuActionRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function MenuLink({ children }) {
logErrorInDevMode3(userButtonMenuLinkRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function UserButtonOutlet(outletProps) {
const providerProps = useContext(UserButtonContext);
const portalProps = {
...providerProps,
props: {
...providerProps.props,
...outletProps
}
};
return /* @__PURE__ */ React7.createElement(ClerkHostRenderer, { ...portalProps });
}
var UserButton = Object.assign(_UserButton, {
UserProfilePage,
UserProfileLink,
MenuItems,
Action: MenuAction,
Link: MenuLink,
__experimental_Outlet: UserButtonOutlet
});
function OrganizationProfilePage({ children }) {
logErrorInDevMode3(organizationProfilePageRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function OrganizationProfileLink({ children }) {
logErrorInDevMode3(organizationProfileLinkRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
var _OrganizationProfile = withClerk(
({
clerk,
component,
fallback,
...props
}) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
const { customPages, customPagesPortals } = useOrganizationProfileCustomPages(props.children);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountOrganizationProfile,
unmount: clerk.unmountOrganizationProfile,
updateProps: clerk.__unstable__updateProps,
props: { ...props, customPages },
rootProps: rendererRootProps
},
/* @__PURE__ */ React7.createElement(CustomPortalsRenderer, { customPagesPortals })
));
},
{ component: "OrganizationProfile", renderWhileLoading: true }
);
var OrganizationProfile = Object.assign(_OrganizationProfile, {
Page: OrganizationProfilePage,
Link: OrganizationProfileLink
});
var CreateOrganization = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountCreateOrganization,
unmount: clerk.unmountCreateOrganization,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "CreateOrganization", renderWhileLoading: true }
);
var OrganizationSwitcherContext = createContext({
mount: () => {
},
unmount: () => {
},
updateProps: () => {
}
});
var _OrganizationSwitcher = withClerk(
({
clerk,
component,
fallback,
...props
}) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
const { customPages, customPagesPortals } = useOrganizationProfileCustomPages(props.children, {
allowForAnyChildren: !!props.__experimental_asProvider
});
const organizationProfileProps = { ...props.organizationProfileProps, customPages };
const sanitizedChildren = useSanitizedChildren(props.children);
const passableProps = {
mount: clerk.mountOrganizationSwitcher,
unmount: clerk.unmountOrganizationSwitcher,
updateProps: clerk.__unstable__updateProps,
props: { ...props, organizationProfileProps },
rootProps: rendererRootProps,
component
};
clerk.__experimental_prefetchOrganizationSwitcher();
return /* @__PURE__ */ React7.createElement(OrganizationSwitcherContext.Provider, { value: passableProps }, /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
...passableProps,
hideRootHtmlElement: !!props.__experimental_asProvider
},
props.__experimental_asProvider ? sanitizedChildren : null,
/* @__PURE__ */ React7.createElement(CustomPortalsRenderer, { customPagesPortals })
)));
},
{ component: "OrganizationSwitcher", renderWhileLoading: true }
);
function OrganizationSwitcherOutlet(outletProps) {
const providerProps = useContext(OrganizationSwitcherContext);
const portalProps = {
...providerProps,
props: {
...providerProps.props,
...outletProps
}
};
return /* @__PURE__ */ React7.createElement(ClerkHostRenderer, { ...portalProps });
}
var OrganizationSwitcher = Object.assign(_OrganizationSwitcher, {
OrganizationProfilePage,
OrganizationProfileLink,
__experimental_Outlet: OrganizationSwitcherOutlet
});
var OrganizationList = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountOrganizationList,
unmount: clerk.unmountOrganizationList,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "OrganizationList", renderWhileLoading: true }
);
var GoogleOneTap = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
open: clerk.openGoogleOneTap,
close: clerk.closeGoogleOneTap,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "GoogleOneTap", renderWhileLoading: true }
);
var Waitlist = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountWaitlist,
unmount: clerk.unmountWaitlist,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "Waitlist", renderWhileLoading: true }
);
var PricingTable = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component, {
// This attribute is added to the PricingTable root element after we've successfully fetched the plans asynchronously.
selector: '[data-component-status="ready"]'
});
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountPricingTable,
unmount: clerk.unmountPricingTable,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "PricingTable", renderWhileLoading: true }
);
var APIKeys = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountAPIKeys,
unmount: clerk.unmountAPIKeys,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "ApiKeys", renderWhileLoading: true }
);
var UserAvatar = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountUserAvatar,
unmount: clerk.unmountUserAvatar,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "UserAvatar", renderWhileLoading: true }
);
var TaskChooseOrganization = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountTaskChooseOrganization,
unmount: clerk.unmountTaskChooseOrganization,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "TaskChooseOrganization", renderWhileLoading: true }
);
var TaskResetPassword = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountTaskResetPassword,
unmount: clerk.unmountTaskResetPassword,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "TaskResetPassword", renderWhileLoading: true }
);
export {
assertSingleChild,
normalizeWithDefaultValue,
safeExecute,
isConstructor,
withMaxAllowedInstancesGuard,
SignIn,
SignUp,
UserProfile,
UserButton,
OrganizationProfile,
CreateOrganization,
OrganizationSwitcher,
OrganizationList,
GoogleOneTap,
Waitlist,
PricingTable,
APIKeys,
UserAvatar,
TaskChooseOrganization,
TaskResetPassword
};
//# sourceMappingURL=chunk-Z4HQK7I2.mjs.map

Sorry, the diff of this file is too big to display

+2
-2

@@ -5,3 +5,3 @@ import {

safeExecute
} from "./chunk-36EXAXVP.mjs";
} from "./chunk-Z4HQK7I2.mjs";
import {

@@ -12,3 +12,3 @@ useAssertWrappedByClerkProvider,

withClerk
} from "./chunk-4QQOMF5H.mjs";
} from "./chunk-3EQWAEPK.mjs";
import "./chunk-OANWQR3B.mjs";

@@ -15,0 +15,0 @@

@@ -192,3 +192,3 @@ import * as _clerk_shared_types from '@clerk/shared/types';

/**
* The `useSignIn()` hook provides access to the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which allows you to check the current state of a sign-in attempt and manage the sign-in flow. You can use this to create a [custom sign-in flow](https://clerk.com/docs/guides/development/custom-flows/overview#sign-in-flow).
* The `useSignIn()` hook provides access to the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which allows you to check the current state of a sign-in attempt and manage the sign-in flow. You can use this to create a [custom sign-in flow](!custom-flow).
*

@@ -239,3 +239,3 @@ * @unionReturnHeadings

/**
* The `useSignUp()` hook provides access to the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which allows you to check the current state of a sign-up attempt and manage the sign-up flow. You can use this to create a [custom sign-up flow](https://clerk.com/docs/guides/development/custom-flows/overview#sign-up-flow).
* The `useSignUp()` hook provides access to the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which allows you to check the current state of a sign-up attempt and manage the sign-up flow. You can use this to create a [custom sign-up flow](!custom-flow).
*

@@ -242,0 +242,0 @@ * @unionReturnHeadings

@@ -192,3 +192,3 @@ import * as _clerk_shared_types from '@clerk/shared/types';

/**
* The `useSignIn()` hook provides access to the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which allows you to check the current state of a sign-in attempt and manage the sign-in flow. You can use this to create a [custom sign-in flow](https://clerk.com/docs/guides/development/custom-flows/overview#sign-in-flow).
* The `useSignIn()` hook provides access to the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which allows you to check the current state of a sign-in attempt and manage the sign-in flow. You can use this to create a [custom sign-in flow](!custom-flow).
*

@@ -239,3 +239,3 @@ * @unionReturnHeadings

/**
* The `useSignUp()` hook provides access to the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which allows you to check the current state of a sign-up attempt and manage the sign-up flow. You can use this to create a [custom sign-up flow](https://clerk.com/docs/guides/development/custom-flows/overview#sign-up-flow).
* The `useSignUp()` hook provides access to the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which allows you to check the current state of a sign-up attempt and manage the sign-up flow. You can use this to create a [custom sign-up flow](!custom-flow).
*

@@ -242,0 +242,0 @@ * @unionReturnHeadings

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/internal.ts","../src/errors/errorThrower.ts","../src/components/controlComponents.tsx","../src/contexts/IsomorphicClerkContext.tsx","../src/contexts/SessionContext.tsx","../src/hooks/useAuth.ts","../src/contexts/AuthContext.ts","../src/errors/messages.ts","../src/hooks/useAssertWrappedByClerkProvider.ts","../src/hooks/useEmailLink.ts","../src/hooks/useSignIn.ts","../src/hooks/useSignUp.ts","../src/hooks/index.ts","../src/components/withClerk.tsx","../src/hooks/useRoutingProps.ts"],"sourcesContent":["export { setErrorThrowerOptions } from './errors/errorThrower';\nexport { MultisessionAppSupport } from './components/controlComponents';\nexport { useRoutingProps } from './hooks/useRoutingProps';\nexport { useDerivedAuth } from './hooks/useAuth';\n\nexport {\n clerkJsScriptUrl,\n buildClerkJsScriptAttributes,\n setClerkJsLoadingErrorPackageName,\n} from '@clerk/shared/loadClerkJsScript';\n","import type { ErrorThrowerOptions } from '@clerk/shared/error';\nimport { buildErrorThrower } from '@clerk/shared/error';\n\nconst errorThrower = buildErrorThrower({ packageName: '@clerk/clerk-react' });\n\nexport { errorThrower };\n\n/**\n * Overrides options of the internal errorThrower (eg setting packageName prefix).\n *\n * @internal\n */\nexport function setErrorThrowerOptions(options: ErrorThrowerOptions) {\n errorThrower.setMessages(options).setPackageName(options);\n}\n","import { deprecated } from '@clerk/shared/deprecated';\nimport type {\n HandleOAuthCallbackParams,\n PendingSessionOptions,\n ProtectProps as _ProtectProps,\n} from '@clerk/shared/types';\nimport React from 'react';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useSessionContext } from '../contexts/SessionContext';\nimport { useAuth } from '../hooks';\nimport { useAssertWrappedByClerkProvider } from '../hooks/useAssertWrappedByClerkProvider';\nimport type { RedirectToSignInProps, RedirectToSignUpProps, RedirectToTasksProps, WithClerkProp } from '../types';\nimport { withClerk } from './withClerk';\n\nexport const SignedIn = ({ children, treatPendingAsSignedOut }: React.PropsWithChildren<PendingSessionOptions>) => {\n useAssertWrappedByClerkProvider('SignedIn');\n\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (userId) {\n return children;\n }\n return null;\n};\n\nexport const SignedOut = ({ children, treatPendingAsSignedOut }: React.PropsWithChildren<PendingSessionOptions>) => {\n useAssertWrappedByClerkProvider('SignedOut');\n\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (userId === null) {\n return children;\n }\n return null;\n};\n\nexport const ClerkLoaded = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkLoaded');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (!isomorphicClerk.loaded) {\n return null;\n }\n return children;\n};\n\nexport const ClerkLoading = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkLoading');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'loading') {\n return null;\n }\n return children;\n};\n\nexport const ClerkFailed = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkFailed');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'error') {\n return null;\n }\n return children;\n};\n\nexport const ClerkDegraded = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkDegraded');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'degraded') {\n return null;\n }\n return children;\n};\n\nexport type ProtectProps = React.PropsWithChildren<\n _ProtectProps & {\n fallback?: React.ReactNode;\n } & PendingSessionOptions\n>;\n\n/**\n * Use `<Protect/>` in order to prevent unauthenticated or unauthorized users from accessing the children passed to the component.\n *\n * Examples:\n * ```\n * <Protect permission=\"a_permission_key\" />\n * <Protect role=\"a_role_key\" />\n * <Protect condition={(has) => has({permission:\"a_permission_key\"})} />\n * <Protect condition={(has) => has({role:\"a_role_key\"})} />\n * <Protect fallback={<p>Unauthorized</p>} />\n * ```\n */\nexport const Protect = ({ children, fallback, treatPendingAsSignedOut, ...restAuthorizedParams }: ProtectProps) => {\n useAssertWrappedByClerkProvider('Protect');\n\n const { isLoaded, has, userId } = useAuth({ treatPendingAsSignedOut });\n\n /**\n * Avoid flickering children or fallback while clerk is loading sessionId or userId\n */\n if (!isLoaded) {\n return null;\n }\n\n /**\n * Fallback to UI provided by user or `null` if authorization checks failed\n */\n const unauthorized = fallback ?? null;\n\n const authorized = children;\n\n if (!userId) {\n return unauthorized;\n }\n\n /**\n * Check against the results of `has` called inside the callback\n */\n if (typeof restAuthorizedParams.condition === 'function') {\n if (restAuthorizedParams.condition(has)) {\n return authorized;\n }\n return unauthorized;\n }\n\n if (\n restAuthorizedParams.role ||\n restAuthorizedParams.permission ||\n restAuthorizedParams.feature ||\n restAuthorizedParams.plan\n ) {\n if (has(restAuthorizedParams)) {\n return authorized;\n }\n return unauthorized;\n }\n\n /**\n * If neither of the authorization params are passed behave as the `<SignedIn/>`.\n * If fallback is present render that instead of rendering nothing.\n */\n return authorized;\n};\n\nexport const RedirectToSignIn = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToSignInProps>) => {\n const { client, session } = clerk;\n\n const hasSignedInSessions = client.signedInSessions\n ? client.signedInSessions.length > 0\n : // Compat for clerk-js<5.54.0 (which was released with the `signedInSessions` property)\n client.activeSessions && client.activeSessions.length > 0;\n\n React.useEffect(() => {\n if (session === null && hasSignedInSessions) {\n void clerk.redirectToAfterSignOut();\n } else {\n void clerk.redirectToSignIn(props);\n }\n }, []);\n\n return null;\n}, 'RedirectToSignIn');\n\nexport const RedirectToSignUp = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToSignUpProps>) => {\n React.useEffect(() => {\n void clerk.redirectToSignUp(props);\n }, []);\n\n return null;\n}, 'RedirectToSignUp');\n\nexport const RedirectToTasks = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToTasksProps>) => {\n React.useEffect(() => {\n void clerk.redirectToTasks(props);\n }, []);\n\n return null;\n}, 'RedirectToTasks');\n\n/**\n * @function\n * @deprecated Use [`redirectToUserProfile()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-user-profile) instead.\n */\nexport const RedirectToUserProfile = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToUserProfile', 'Use the `redirectToUserProfile()` method instead.');\n void clerk.redirectToUserProfile();\n }, []);\n\n return null;\n}, 'RedirectToUserProfile');\n\n/**\n * @function\n * @deprecated Use [`redirectToOrganizationProfile()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-organization-profile) instead.\n */\nexport const RedirectToOrganizationProfile = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToOrganizationProfile', 'Use the `redirectToOrganizationProfile()` method instead.');\n void clerk.redirectToOrganizationProfile();\n }, []);\n\n return null;\n}, 'RedirectToOrganizationProfile');\n\n/**\n * @function\n * @deprecated Use [`redirectToCreateOrganization()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-create-organization) instead.\n */\nexport const RedirectToCreateOrganization = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToCreateOrganization', 'Use the `redirectToCreateOrganization()` method instead.');\n void clerk.redirectToCreateOrganization();\n }, []);\n\n return null;\n}, 'RedirectToCreateOrganization');\n\nexport const AuthenticateWithRedirectCallback = withClerk(\n ({ clerk, ...handleRedirectCallbackParams }: WithClerkProp<HandleOAuthCallbackParams>) => {\n React.useEffect(() => {\n void clerk.handleRedirectCallback(handleRedirectCallbackParams);\n }, []);\n\n return null;\n },\n 'AuthenticateWithRedirectCallback',\n);\n\nexport const MultisessionAppSupport = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('MultisessionAppSupport');\n\n const session = useSessionContext();\n return <React.Fragment key={session ? session.id : 'no-users'}>{children}</React.Fragment>;\n};\n","import { ClerkInstanceContext, useClerkInstanceContext } from '@clerk/shared/react';\n\nimport type { IsomorphicClerk } from '../isomorphicClerk';\n\nexport const IsomorphicClerkContext = ClerkInstanceContext;\nexport const useIsomorphicClerkContext = useClerkInstanceContext as unknown as () => IsomorphicClerk;\n","export { SessionContext, useSessionContext } from '@clerk/shared/react';\n","import { createCheckAuthorization, resolveAuthState } from '@clerk/shared/authorization';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type {\n CheckAuthorizationWithCustomPermissions,\n GetToken,\n JwtPayload,\n PendingSessionOptions,\n SignOut,\n UseAuthReturn,\n} from '@clerk/shared/types';\nimport { useCallback } from 'react';\n\nimport { useAuthContext } from '../contexts/AuthContext';\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { errorThrower } from '../errors/errorThrower';\nimport { invalidStateError } from '../errors/messages';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\nimport { createGetToken, createSignOut } from './utils';\n\n/**\n * @inline\n */\ntype UseAuthOptions = Record<string, any> | PendingSessionOptions | undefined | null;\n\n/**\n * The `useAuth()` hook provides access to the current user's authentication state and methods to manage the active session.\n *\n * > [!NOTE]\n * > To access auth data server-side, see the [`Auth` object reference doc](https://clerk.com/docs/reference/backend/types/auth-object).\n *\n * <If sdk=\"nextjs\">\n * By default, Next.js opts all routes into static rendering. If you need to opt a route or routes into dynamic rendering because you need to access the authentication data at request time, you can create a boundary by passing the `dynamic` prop to `<ClerkProvider>`. See the [guide on rendering modes](https://clerk.com/docs/guides/development/rendering-modes) for more information, including code examples.\n * </If>\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Signed out\", \"Signed in (no active organization)\", \"Signed in (with active organization)\"]\n *\n * @param [initialAuthStateOrOptions] - An object containing the initial authentication state or options for the `useAuth()` hook. If not provided, the hook will attempt to derive the state from the context. `treatPendingAsSignedOut` is a boolean that indicates whether pending sessions are considered as signed out or not. Defaults to `true`.\n *\n * @function\n *\n * @example\n *\n * The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/ExternalDataPage.tsx' }}\n * import { useAuth } from '@clerk/clerk-react'\n *\n * export default function ExternalDataPage() {\n * const { userId, sessionId, getToken, isLoaded, isSignedIn } = useAuth()\n *\n * const fetchExternalData = async () => {\n * const token = await getToken()\n *\n * // Fetch data from an external API\n * const response = await fetch('https://api.example.com/data', {\n * headers: {\n * Authorization: `Bearer ${token}`,\n * },\n * })\n *\n * return response.json()\n * }\n *\n * if (!isLoaded) {\n * return <div>Loading...</div>\n * }\n *\n * if (!isSignedIn) {\n * return <div>Sign in to view this page</div>\n * }\n *\n * return (\n * <div>\n * <p>\n * Hello, {userId}! Your current active session is {sessionId}.\n * </p>\n * <button onClick={fetchExternalData}>Fetch Data</button>\n * </div>\n * )\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-auth.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n */\nexport const useAuth = (initialAuthStateOrOptions: UseAuthOptions = {}): UseAuthReturn => {\n useAssertWrappedByClerkProvider('useAuth');\n\n const { treatPendingAsSignedOut, ...rest } = initialAuthStateOrOptions ?? {};\n const initialAuthState = rest as any;\n\n const authContextFromHook = useAuthContext();\n let authContext = authContextFromHook;\n\n if (authContext.sessionId === undefined && authContext.userId === undefined) {\n authContext = initialAuthState != null ? initialAuthState : {};\n }\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const getToken: GetToken = useCallback(createGetToken(isomorphicClerk), [isomorphicClerk]);\n const signOut: SignOut = useCallback(createSignOut(isomorphicClerk), [isomorphicClerk]);\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useAuth', { treatPendingAsSignedOut }));\n\n return useDerivedAuth(\n {\n ...authContext,\n getToken,\n signOut,\n },\n {\n treatPendingAsSignedOut,\n },\n );\n};\n\n/**\n * A hook that derives and returns authentication state and utility functions based on the provided auth object.\n *\n * @param authObject - An object containing authentication-related properties and functions.\n *\n * @returns A derived authentication state with helper methods. If the authentication state is invalid, an error is thrown.\n *\n * @remarks\n * This hook inspects session, user, and organization information to determine the current authentication state.\n * It returns an object that includes various properties such as whether the state is loaded, if a user is signed in,\n * session and user identifiers, Organization Roles, and a `has` function for authorization checks.\n * Additionally, it provides `signOut` and `getToken` functions if applicable.\n *\n * @example\n * ```tsx\n * const {\n * isLoaded,\n * isSignedIn,\n * userId,\n * orgId,\n * has,\n * signOut,\n * getToken\n * } = useDerivedAuth(authObject);\n * ```\n */\nexport function useDerivedAuth(\n authObject: any,\n { treatPendingAsSignedOut = true }: PendingSessionOptions = {},\n): UseAuthReturn {\n const { userId, orgId, orgRole, has, signOut, getToken, orgPermissions, factorVerificationAge, sessionClaims } =\n authObject ?? {};\n\n const derivedHas = useCallback(\n (params: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => {\n if (has) {\n return has(params);\n }\n return createCheckAuthorization({\n userId,\n orgId,\n orgRole,\n orgPermissions,\n factorVerificationAge,\n features: ((sessionClaims as JwtPayload | undefined)?.fea as string) || '',\n plans: ((sessionClaims as JwtPayload | undefined)?.pla as string) || '',\n })(params);\n },\n [has, userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims],\n );\n\n const payload = resolveAuthState({\n authObject: {\n ...authObject,\n getToken,\n signOut,\n has: derivedHas,\n },\n options: {\n treatPendingAsSignedOut,\n },\n });\n\n if (!payload) {\n return errorThrower.throw(invalidStateError);\n }\n\n return payload;\n}\n","import { createContextAndHook } from '@clerk/shared/react';\nimport type {\n ActClaim,\n JwtPayload,\n OrganizationCustomPermissionKey,\n OrganizationCustomRoleKey,\n SessionStatusClaim,\n} from '@clerk/shared/types';\n\nexport type AuthContextValue = {\n userId: string | null | undefined;\n sessionId: string | null | undefined;\n sessionStatus: SessionStatusClaim | null | undefined;\n sessionClaims: JwtPayload | null | undefined;\n actor: ActClaim | null | undefined;\n orgId: string | null | undefined;\n orgRole: OrganizationCustomRoleKey | null | undefined;\n orgSlug: string | null | undefined;\n orgPermissions: OrganizationCustomPermissionKey[] | null | undefined;\n factorVerificationAge: [number, number] | null;\n};\n\nexport const [AuthContext, useAuthContext] = createContextAndHook<AuthContextValue>('AuthContext');\n","export const noClerkProviderError = 'You must wrap your application in a <ClerkProvider> component.';\n\nexport const multipleClerkProvidersError =\n \"You've added multiple <ClerkProvider> components in your React component tree. Wrap your components in a single <ClerkProvider>.\";\n\nexport const multipleChildrenInButtonComponent = (name: string) =>\n `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`;\n\nexport const invalidStateError =\n 'Invalid state. Feel free to submit a bug or reach out to support here: https://clerk.com/support';\n\nexport const unsupportedNonBrowserDomainOrProxyUrlFunction =\n 'Unsupported usage of isSatellite, domain or proxyUrl. The usage of isSatellite, domain or proxyUrl as function is not supported in non-browser environments.';\n\nexport const userProfilePageRenderedError =\n '<UserProfile.Page /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.';\nexport const userProfileLinkRenderedError =\n '<UserProfile.Link /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.';\n\nexport const organizationProfilePageRenderedError =\n '<OrganizationProfile.Page /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.';\nexport const organizationProfileLinkRenderedError =\n '<OrganizationProfile.Link /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.';\n\nexport const customPagesIgnoredComponent = (componentName: string) =>\n `<${componentName} /> can only accept <${componentName}.Page /> and <${componentName}.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;\n\nexport const customPageWrongProps = (componentName: string) =>\n `Missing props. <${componentName}.Page /> component requires the following props: url, label, labelIcon, alongside with children to be rendered inside the page.`;\n\nexport const customLinkWrongProps = (componentName: string) =>\n `Missing props. <${componentName}.Link /> component requires the following props: url, label and labelIcon.`;\n\nexport const useAuthHasRequiresRoleOrPermission =\n 'Missing parameters. `has` from `useAuth` requires a permission or role key to be passed. Example usage: `has({permission: \"org:posts:edit\"`';\n\nexport const noPathProvidedError = (componentName: string) =>\n `The <${componentName}/> component uses path-based routing by default unless a different routing strategy is provided using the \\`routing\\` prop. When path-based routing is used, you need to provide the path where the component is mounted on by using the \\`path\\` prop. Example: <${componentName} path={'/my-path'} />`;\n\nexport const incompatibleRoutingWithPathProvidedError = (componentName: string) =>\n `The \\`path\\` prop will only be respected when the Clerk component uses path-based routing. To resolve this error, pass \\`routing='path'\\` to the <${componentName}/> component, or drop the \\`path\\` prop to switch to hash-based routing. For more details please refer to our docs: https://clerk.com/docs`;\n\nexport const userButtonIgnoredComponent = `<UserButton /> can only accept <UserButton.UserProfilePage />, <UserButton.UserProfileLink /> and <UserButton.MenuItems /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;\n\nexport const customMenuItemsIgnoredComponent =\n '<UserButton.MenuItems /> component can only accept <UserButton.Action /> and <UserButton.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.';\n\nexport const userButtonMenuItemsRenderedError =\n '<UserButton.MenuItems /> component needs to be a direct child of `<UserButton />`.';\n\nexport const userButtonMenuActionRenderedError =\n '<UserButton.Action /> component needs to be a direct child of `<UserButton.MenuItems />`.';\n\nexport const userButtonMenuLinkRenderedError =\n '<UserButton.Link /> component needs to be a direct child of `<UserButton.MenuItems />`.';\n\nexport const userButtonMenuItemLinkWrongProps =\n 'Missing props. <UserButton.Link /> component requires the following props: href, label and labelIcon.';\n\nexport const userButtonMenuItemsActionWrongsProps =\n 'Missing props. <UserButton.Action /> component requires the following props: label.';\n","import { useAssertWrappedByClerkProvider as useSharedAssertWrappedByClerkProvider } from '@clerk/shared/react';\n\nimport { errorThrower } from '../errors/errorThrower';\n\nexport const useAssertWrappedByClerkProvider = (source: string): void => {\n useSharedAssertWrappedByClerkProvider(() => {\n errorThrower.throwMissingClerkProviderError({ source });\n });\n};\n","import type {\n CreateEmailLinkFlowReturn,\n EmailAddressResource,\n SignInResource,\n SignInStartEmailLinkFlowParams,\n SignUpResource,\n StartEmailLinkFlowParams,\n} from '@clerk/shared/types';\nimport React from 'react';\n\ntype EmailLinkable = SignUpResource | EmailAddressResource | SignInResource;\ntype UseEmailLinkSignInReturn = CreateEmailLinkFlowReturn<SignInStartEmailLinkFlowParams, SignInResource>;\ntype UseEmailLinkSignUpReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, SignUpResource>;\ntype UseEmailLinkEmailAddressReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, EmailAddressResource>;\n\nfunction useEmailLink(resource: SignInResource): UseEmailLinkSignInReturn;\nfunction useEmailLink(resource: SignUpResource): UseEmailLinkSignUpReturn;\nfunction useEmailLink(resource: EmailAddressResource): UseEmailLinkEmailAddressReturn;\nfunction useEmailLink(\n resource: EmailLinkable,\n): UseEmailLinkSignInReturn | UseEmailLinkSignUpReturn | UseEmailLinkEmailAddressReturn {\n const { startEmailLinkFlow, cancelEmailLinkFlow } = React.useMemo(() => resource.createEmailLinkFlow(), [resource]);\n\n React.useEffect(() => {\n return cancelEmailLinkFlow;\n }, []);\n\n return {\n startEmailLinkFlow,\n cancelEmailLinkFlow,\n } as UseEmailLinkSignInReturn | UseEmailLinkSignUpReturn | UseEmailLinkEmailAddressReturn;\n}\n\nexport { useEmailLink };\n","import { useClientContext } from '@clerk/shared/react';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type { UseSignInReturn } from '@clerk/shared/types';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\n\n/**\n * The `useSignIn()` hook provides access to the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which allows you to check the current state of a sign-in attempt and manage the sign-in flow. You can use this to create a [custom sign-in flow](https://clerk.com/docs/guides/development/custom-flows/overview#sign-in-flow).\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Loaded\"]\n *\n * @example\n * ### Check the current state of a sign-in\n *\n * The following example uses the `useSignIn()` hook to access the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which contains the current sign-in attempt status and methods to create a new sign-in attempt. The `isLoaded` property is used to handle the loading state.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/SignInPage.tsx' }}\n * import { useSignIn } from '@clerk/clerk-react'\n *\n * export default function SignInPage() {\n * const { isLoaded, signIn } = useSignIn()\n *\n * if (!isLoaded) {\n * // Handle loading state\n * return null\n * }\n *\n * return <div>The current sign-in attempt status is {signIn?.status}.</div>\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-sign-in.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n *\n * @example\n * ### Create a custom sign-in flow with `useSignIn()`\n *\n * The `useSignIn()` hook can also be used to build fully custom sign-in flows, if Clerk's prebuilt components don't meet your specific needs or if you require more control over the authentication flow. Different sign-in flows include email and password, email and phone codes, email links, and multifactor (MFA). To learn more about using the `useSignIn()` hook to create custom flows, see the [custom flow guides](https://clerk.com/docs/guides/development/custom-flows/overview).\n *\n * ```empty```\n */\nexport const useSignIn = (): UseSignInReturn => {\n useAssertWrappedByClerkProvider('useSignIn');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const client = useClientContext();\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useSignIn'));\n\n if (!client) {\n return { isLoaded: false, signIn: undefined, setActive: undefined };\n }\n\n return {\n isLoaded: true,\n signIn: client.signIn,\n setActive: isomorphicClerk.setActive,\n };\n};\n","import { useClientContext } from '@clerk/shared/react';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type { UseSignUpReturn } from '@clerk/shared/types';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\n\n/**\n * The `useSignUp()` hook provides access to the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which allows you to check the current state of a sign-up attempt and manage the sign-up flow. You can use this to create a [custom sign-up flow](https://clerk.com/docs/guides/development/custom-flows/overview#sign-up-flow).\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Loaded\"]\n *\n * @example\n * ### Check the current state of a sign-up\n *\n * The following example uses the `useSignUp()` hook to access the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which contains the current sign-up attempt status and methods to create a new sign-up attempt. The `isLoaded` property is used to handle the loading state.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/SignUpPage.tsx' }}\n * import { useSignUp } from '@clerk/clerk-react'\n *\n * export default function SignUpPage() {\n * const { isLoaded, signUp } = useSignUp()\n *\n * if (!isLoaded) {\n * // Handle loading state\n * return null\n * }\n *\n * return <div>The current sign-up attempt status is {signUp?.status}.</div>\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-sign-up.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n *\n * @example\n * ### Create a custom sign-up flow with `useSignUp()`\n *\n * The `useSignUp()` hook can also be used to build fully custom sign-up flows, if Clerk's prebuilt components don't meet your specific needs or if you require more control over the authentication flow. Different sign-up flows include email and password, email and phone codes, email links, and multifactor (MFA). To learn more about using the `useSignUp()` hook to create custom flows, see the [custom flow guides](https://clerk.com/docs/guides/development/custom-flows/overview).\n *\n * ```empty```\n */\nexport const useSignUp = (): UseSignUpReturn => {\n useAssertWrappedByClerkProvider('useSignUp');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const client = useClientContext();\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useSignUp'));\n\n if (!client) {\n return { isLoaded: false, signUp: undefined, setActive: undefined };\n }\n\n return {\n isLoaded: true,\n signUp: client.signUp,\n setActive: isomorphicClerk.setActive,\n };\n};\n","export { useAuth } from './useAuth';\nexport { useEmailLink } from './useEmailLink';\nexport { useSignIn } from './useSignIn';\nexport { useSignUp } from './useSignUp';\nexport {\n useClerk,\n useOrganization,\n useOrganizationCreationDefaults,\n useOrganizationList,\n useSessionList,\n useUser,\n useSession,\n useReverification,\n __experimental_useCheckout,\n __experimental_CheckoutProvider,\n __experimental_usePaymentElement,\n __experimental_PaymentElementProvider,\n __experimental_PaymentElement,\n} from '@clerk/shared/react';\nexport type { UseOrganizationCreationDefaultsParams, UseOrganizationCreationDefaultsReturn } from '@clerk/shared/react';\n","import type { LoadedClerk, Without } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from '../hooks/useAssertWrappedByClerkProvider';\n\nexport const withClerk = <P extends { clerk: LoadedClerk; component?: string }>(\n Component: React.ComponentType<P>,\n displayNameOrOptions?: string | { component: string; renderWhileLoading?: boolean },\n) => {\n const passedDisplayedName =\n typeof displayNameOrOptions === 'string' ? displayNameOrOptions : displayNameOrOptions?.component;\n const displayName = passedDisplayedName || Component.displayName || Component.name || 'Component';\n Component.displayName = displayName;\n\n const options = typeof displayNameOrOptions === 'string' ? undefined : displayNameOrOptions;\n\n const HOC = (props: Without<P, 'clerk'>) => {\n useAssertWrappedByClerkProvider(displayName || 'withClerk');\n\n const clerk = useIsomorphicClerkContext();\n\n if (!clerk.loaded && !options?.renderWhileLoading) {\n return null;\n }\n\n return (\n <Component\n {...(props as P)}\n component={displayName}\n clerk={clerk}\n />\n );\n };\n HOC.displayName = `withClerk(${displayName})`;\n return HOC;\n};\n","import type { RoutingOptions } from '@clerk/shared/types';\n\nimport { errorThrower } from '../errors/errorThrower';\nimport { incompatibleRoutingWithPathProvidedError, noPathProvidedError } from '../errors/messages';\n\nexport function useRoutingProps<T extends RoutingOptions>(\n componentName: string,\n props: T,\n routingOptions?: RoutingOptions,\n): T {\n const path = props.path || routingOptions?.path;\n const routing = props.routing || routingOptions?.routing || 'path';\n\n if (routing === 'path') {\n if (!path) {\n return errorThrower.throw(noPathProvidedError(componentName));\n }\n\n return {\n ...routingOptions,\n ...props,\n routing: 'path',\n };\n }\n\n if (props.path) {\n return errorThrower.throw(incompatibleRoutingWithPathProvidedError(componentName));\n }\n\n return {\n ...routingOptions,\n ...props,\n path: undefined,\n };\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","useSharedAssertWrappedByClerkProvider","import_react","import_react","import_telemetry","import_react","import_telemetry","import_react","import_react","React","React"]}
{"version":3,"sources":["../src/internal.ts","../src/errors/errorThrower.ts","../src/components/controlComponents.tsx","../src/contexts/IsomorphicClerkContext.tsx","../src/contexts/SessionContext.tsx","../src/hooks/useAuth.ts","../src/contexts/AuthContext.ts","../src/errors/messages.ts","../src/hooks/useAssertWrappedByClerkProvider.ts","../src/hooks/useEmailLink.ts","../src/hooks/useSignIn.ts","../src/hooks/useSignUp.ts","../src/hooks/index.ts","../src/components/withClerk.tsx","../src/hooks/useRoutingProps.ts"],"sourcesContent":["export { setErrorThrowerOptions } from './errors/errorThrower';\nexport { MultisessionAppSupport } from './components/controlComponents';\nexport { useRoutingProps } from './hooks/useRoutingProps';\nexport { useDerivedAuth } from './hooks/useAuth';\n\nexport {\n clerkJsScriptUrl,\n buildClerkJsScriptAttributes,\n setClerkJsLoadingErrorPackageName,\n} from '@clerk/shared/loadClerkJsScript';\n","import type { ErrorThrowerOptions } from '@clerk/shared/error';\nimport { buildErrorThrower } from '@clerk/shared/error';\n\nconst errorThrower = buildErrorThrower({ packageName: '@clerk/clerk-react' });\n\nexport { errorThrower };\n\n/**\n * Overrides options of the internal errorThrower (eg setting packageName prefix).\n *\n * @internal\n */\nexport function setErrorThrowerOptions(options: ErrorThrowerOptions) {\n errorThrower.setMessages(options).setPackageName(options);\n}\n","import { deprecated } from '@clerk/shared/deprecated';\nimport type {\n HandleOAuthCallbackParams,\n PendingSessionOptions,\n ProtectProps as _ProtectProps,\n} from '@clerk/shared/types';\nimport React from 'react';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useSessionContext } from '../contexts/SessionContext';\nimport { useAuth } from '../hooks';\nimport { useAssertWrappedByClerkProvider } from '../hooks/useAssertWrappedByClerkProvider';\nimport type { RedirectToSignInProps, RedirectToSignUpProps, RedirectToTasksProps, WithClerkProp } from '../types';\nimport { withClerk } from './withClerk';\n\nexport const SignedIn = ({ children, treatPendingAsSignedOut }: React.PropsWithChildren<PendingSessionOptions>) => {\n useAssertWrappedByClerkProvider('SignedIn');\n\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (userId) {\n return children;\n }\n return null;\n};\n\nexport const SignedOut = ({ children, treatPendingAsSignedOut }: React.PropsWithChildren<PendingSessionOptions>) => {\n useAssertWrappedByClerkProvider('SignedOut');\n\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (userId === null) {\n return children;\n }\n return null;\n};\n\nexport const ClerkLoaded = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkLoaded');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (!isomorphicClerk.loaded) {\n return null;\n }\n return children;\n};\n\nexport const ClerkLoading = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkLoading');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'loading') {\n return null;\n }\n return children;\n};\n\nexport const ClerkFailed = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkFailed');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'error') {\n return null;\n }\n return children;\n};\n\nexport const ClerkDegraded = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkDegraded');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'degraded') {\n return null;\n }\n return children;\n};\n\nexport type ProtectProps = React.PropsWithChildren<\n _ProtectProps & {\n fallback?: React.ReactNode;\n } & PendingSessionOptions\n>;\n\n/**\n * Use `<Protect/>` in order to prevent unauthenticated or unauthorized users from accessing the children passed to the component.\n *\n * Examples:\n * ```\n * <Protect permission=\"a_permission_key\" />\n * <Protect role=\"a_role_key\" />\n * <Protect condition={(has) => has({permission:\"a_permission_key\"})} />\n * <Protect condition={(has) => has({role:\"a_role_key\"})} />\n * <Protect fallback={<p>Unauthorized</p>} />\n * ```\n */\nexport const Protect = ({ children, fallback, treatPendingAsSignedOut, ...restAuthorizedParams }: ProtectProps) => {\n useAssertWrappedByClerkProvider('Protect');\n\n const { isLoaded, has, userId } = useAuth({ treatPendingAsSignedOut });\n\n /**\n * Avoid flickering children or fallback while clerk is loading sessionId or userId\n */\n if (!isLoaded) {\n return null;\n }\n\n /**\n * Fallback to UI provided by user or `null` if authorization checks failed\n */\n const unauthorized = fallback ?? null;\n\n const authorized = children;\n\n if (!userId) {\n return unauthorized;\n }\n\n /**\n * Check against the results of `has` called inside the callback\n */\n if (typeof restAuthorizedParams.condition === 'function') {\n if (restAuthorizedParams.condition(has)) {\n return authorized;\n }\n return unauthorized;\n }\n\n if (\n restAuthorizedParams.role ||\n restAuthorizedParams.permission ||\n restAuthorizedParams.feature ||\n restAuthorizedParams.plan\n ) {\n if (has(restAuthorizedParams)) {\n return authorized;\n }\n return unauthorized;\n }\n\n /**\n * If neither of the authorization params are passed behave as the `<SignedIn/>`.\n * If fallback is present render that instead of rendering nothing.\n */\n return authorized;\n};\n\nexport const RedirectToSignIn = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToSignInProps>) => {\n const { client, session } = clerk;\n\n const hasSignedInSessions = client.signedInSessions\n ? client.signedInSessions.length > 0\n : // Compat for clerk-js<5.54.0 (which was released with the `signedInSessions` property)\n client.activeSessions && client.activeSessions.length > 0;\n\n React.useEffect(() => {\n if (session === null && hasSignedInSessions) {\n void clerk.redirectToAfterSignOut();\n } else {\n void clerk.redirectToSignIn(props);\n }\n }, []);\n\n return null;\n}, 'RedirectToSignIn');\n\nexport const RedirectToSignUp = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToSignUpProps>) => {\n React.useEffect(() => {\n void clerk.redirectToSignUp(props);\n }, []);\n\n return null;\n}, 'RedirectToSignUp');\n\nexport const RedirectToTasks = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToTasksProps>) => {\n React.useEffect(() => {\n void clerk.redirectToTasks(props);\n }, []);\n\n return null;\n}, 'RedirectToTasks');\n\n/**\n * @function\n * @deprecated Use [`redirectToUserProfile()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-user-profile) instead.\n */\nexport const RedirectToUserProfile = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToUserProfile', 'Use the `redirectToUserProfile()` method instead.');\n void clerk.redirectToUserProfile();\n }, []);\n\n return null;\n}, 'RedirectToUserProfile');\n\n/**\n * @function\n * @deprecated Use [`redirectToOrganizationProfile()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-organization-profile) instead.\n */\nexport const RedirectToOrganizationProfile = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToOrganizationProfile', 'Use the `redirectToOrganizationProfile()` method instead.');\n void clerk.redirectToOrganizationProfile();\n }, []);\n\n return null;\n}, 'RedirectToOrganizationProfile');\n\n/**\n * @function\n * @deprecated Use [`redirectToCreateOrganization()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-create-organization) instead.\n */\nexport const RedirectToCreateOrganization = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToCreateOrganization', 'Use the `redirectToCreateOrganization()` method instead.');\n void clerk.redirectToCreateOrganization();\n }, []);\n\n return null;\n}, 'RedirectToCreateOrganization');\n\nexport const AuthenticateWithRedirectCallback = withClerk(\n ({ clerk, ...handleRedirectCallbackParams }: WithClerkProp<HandleOAuthCallbackParams>) => {\n React.useEffect(() => {\n void clerk.handleRedirectCallback(handleRedirectCallbackParams);\n }, []);\n\n return null;\n },\n 'AuthenticateWithRedirectCallback',\n);\n\nexport const MultisessionAppSupport = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('MultisessionAppSupport');\n\n const session = useSessionContext();\n return <React.Fragment key={session ? session.id : 'no-users'}>{children}</React.Fragment>;\n};\n","import { ClerkInstanceContext, useClerkInstanceContext } from '@clerk/shared/react';\n\nimport type { IsomorphicClerk } from '../isomorphicClerk';\n\nexport const IsomorphicClerkContext = ClerkInstanceContext;\nexport const useIsomorphicClerkContext = useClerkInstanceContext as unknown as () => IsomorphicClerk;\n","export { SessionContext, useSessionContext } from '@clerk/shared/react';\n","import { createCheckAuthorization, resolveAuthState } from '@clerk/shared/authorization';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type {\n CheckAuthorizationWithCustomPermissions,\n GetToken,\n JwtPayload,\n PendingSessionOptions,\n SignOut,\n UseAuthReturn,\n} from '@clerk/shared/types';\nimport { useCallback } from 'react';\n\nimport { useAuthContext } from '../contexts/AuthContext';\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { errorThrower } from '../errors/errorThrower';\nimport { invalidStateError } from '../errors/messages';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\nimport { createGetToken, createSignOut } from './utils';\n\n/**\n * @inline\n */\ntype UseAuthOptions = Record<string, any> | PendingSessionOptions | undefined | null;\n\n/**\n * The `useAuth()` hook provides access to the current user's authentication state and methods to manage the active session.\n *\n * > [!NOTE]\n * > To access auth data server-side, see the [`Auth` object reference doc](https://clerk.com/docs/reference/backend/types/auth-object).\n *\n * <If sdk=\"nextjs\">\n * By default, Next.js opts all routes into static rendering. If you need to opt a route or routes into dynamic rendering because you need to access the authentication data at request time, you can create a boundary by passing the `dynamic` prop to `<ClerkProvider>`. See the [guide on rendering modes](https://clerk.com/docs/guides/development/rendering-modes) for more information, including code examples.\n * </If>\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Signed out\", \"Signed in (no active organization)\", \"Signed in (with active organization)\"]\n *\n * @param [initialAuthStateOrOptions] - An object containing the initial authentication state or options for the `useAuth()` hook. If not provided, the hook will attempt to derive the state from the context. `treatPendingAsSignedOut` is a boolean that indicates whether pending sessions are considered as signed out or not. Defaults to `true`.\n *\n * @function\n *\n * @example\n *\n * The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/ExternalDataPage.tsx' }}\n * import { useAuth } from '@clerk/clerk-react'\n *\n * export default function ExternalDataPage() {\n * const { userId, sessionId, getToken, isLoaded, isSignedIn } = useAuth()\n *\n * const fetchExternalData = async () => {\n * const token = await getToken()\n *\n * // Fetch data from an external API\n * const response = await fetch('https://api.example.com/data', {\n * headers: {\n * Authorization: `Bearer ${token}`,\n * },\n * })\n *\n * return response.json()\n * }\n *\n * if (!isLoaded) {\n * return <div>Loading...</div>\n * }\n *\n * if (!isSignedIn) {\n * return <div>Sign in to view this page</div>\n * }\n *\n * return (\n * <div>\n * <p>\n * Hello, {userId}! Your current active session is {sessionId}.\n * </p>\n * <button onClick={fetchExternalData}>Fetch Data</button>\n * </div>\n * )\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-auth.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n */\nexport const useAuth = (initialAuthStateOrOptions: UseAuthOptions = {}): UseAuthReturn => {\n useAssertWrappedByClerkProvider('useAuth');\n\n const { treatPendingAsSignedOut, ...rest } = initialAuthStateOrOptions ?? {};\n const initialAuthState = rest as any;\n\n const authContextFromHook = useAuthContext();\n let authContext = authContextFromHook;\n\n if (authContext.sessionId === undefined && authContext.userId === undefined) {\n authContext = initialAuthState != null ? initialAuthState : {};\n }\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const getToken: GetToken = useCallback(createGetToken(isomorphicClerk), [isomorphicClerk]);\n const signOut: SignOut = useCallback(createSignOut(isomorphicClerk), [isomorphicClerk]);\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useAuth', { treatPendingAsSignedOut }));\n\n return useDerivedAuth(\n {\n ...authContext,\n getToken,\n signOut,\n },\n {\n treatPendingAsSignedOut,\n },\n );\n};\n\n/**\n * A hook that derives and returns authentication state and utility functions based on the provided auth object.\n *\n * @param authObject - An object containing authentication-related properties and functions.\n *\n * @returns A derived authentication state with helper methods. If the authentication state is invalid, an error is thrown.\n *\n * @remarks\n * This hook inspects session, user, and organization information to determine the current authentication state.\n * It returns an object that includes various properties such as whether the state is loaded, if a user is signed in,\n * session and user identifiers, Organization Roles, and a `has` function for authorization checks.\n * Additionally, it provides `signOut` and `getToken` functions if applicable.\n *\n * @example\n * ```tsx\n * const {\n * isLoaded,\n * isSignedIn,\n * userId,\n * orgId,\n * has,\n * signOut,\n * getToken\n * } = useDerivedAuth(authObject);\n * ```\n */\nexport function useDerivedAuth(\n authObject: any,\n { treatPendingAsSignedOut = true }: PendingSessionOptions = {},\n): UseAuthReturn {\n const { userId, orgId, orgRole, has, signOut, getToken, orgPermissions, factorVerificationAge, sessionClaims } =\n authObject ?? {};\n\n const derivedHas = useCallback(\n (params: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => {\n if (has) {\n return has(params);\n }\n return createCheckAuthorization({\n userId,\n orgId,\n orgRole,\n orgPermissions,\n factorVerificationAge,\n features: ((sessionClaims as JwtPayload | undefined)?.fea as string) || '',\n plans: ((sessionClaims as JwtPayload | undefined)?.pla as string) || '',\n })(params);\n },\n [has, userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims],\n );\n\n const payload = resolveAuthState({\n authObject: {\n ...authObject,\n getToken,\n signOut,\n has: derivedHas,\n },\n options: {\n treatPendingAsSignedOut,\n },\n });\n\n if (!payload) {\n return errorThrower.throw(invalidStateError);\n }\n\n return payload;\n}\n","import { createContextAndHook } from '@clerk/shared/react';\nimport type {\n ActClaim,\n JwtPayload,\n OrganizationCustomPermissionKey,\n OrganizationCustomRoleKey,\n SessionStatusClaim,\n} from '@clerk/shared/types';\n\nexport type AuthContextValue = {\n userId: string | null | undefined;\n sessionId: string | null | undefined;\n sessionStatus: SessionStatusClaim | null | undefined;\n sessionClaims: JwtPayload | null | undefined;\n actor: ActClaim | null | undefined;\n orgId: string | null | undefined;\n orgRole: OrganizationCustomRoleKey | null | undefined;\n orgSlug: string | null | undefined;\n orgPermissions: OrganizationCustomPermissionKey[] | null | undefined;\n factorVerificationAge: [number, number] | null;\n};\n\nexport const [AuthContext, useAuthContext] = createContextAndHook<AuthContextValue>('AuthContext');\n","export const noClerkProviderError = 'You must wrap your application in a <ClerkProvider> component.';\n\nexport const multipleClerkProvidersError =\n \"You've added multiple <ClerkProvider> components in your React component tree. Wrap your components in a single <ClerkProvider>.\";\n\nexport const multipleChildrenInButtonComponent = (name: string) =>\n `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`;\n\nexport const invalidStateError =\n 'Invalid state. Feel free to submit a bug or reach out to support here: https://clerk.com/support';\n\nexport const unsupportedNonBrowserDomainOrProxyUrlFunction =\n 'Unsupported usage of isSatellite, domain or proxyUrl. The usage of isSatellite, domain or proxyUrl as function is not supported in non-browser environments.';\n\nexport const userProfilePageRenderedError =\n '<UserProfile.Page /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.';\nexport const userProfileLinkRenderedError =\n '<UserProfile.Link /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.';\n\nexport const organizationProfilePageRenderedError =\n '<OrganizationProfile.Page /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.';\nexport const organizationProfileLinkRenderedError =\n '<OrganizationProfile.Link /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.';\n\nexport const customPagesIgnoredComponent = (componentName: string) =>\n `<${componentName} /> can only accept <${componentName}.Page /> and <${componentName}.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;\n\nexport const customPageWrongProps = (componentName: string) =>\n `Missing props. <${componentName}.Page /> component requires the following props: url, label, labelIcon, alongside with children to be rendered inside the page.`;\n\nexport const customLinkWrongProps = (componentName: string) =>\n `Missing props. <${componentName}.Link /> component requires the following props: url, label and labelIcon.`;\n\nexport const useAuthHasRequiresRoleOrPermission =\n 'Missing parameters. `has` from `useAuth` requires a permission or role key to be passed. Example usage: `has({permission: \"org:posts:edit\"`';\n\nexport const noPathProvidedError = (componentName: string) =>\n `The <${componentName}/> component uses path-based routing by default unless a different routing strategy is provided using the \\`routing\\` prop. When path-based routing is used, you need to provide the path where the component is mounted on by using the \\`path\\` prop. Example: <${componentName} path={'/my-path'} />`;\n\nexport const incompatibleRoutingWithPathProvidedError = (componentName: string) =>\n `The \\`path\\` prop will only be respected when the Clerk component uses path-based routing. To resolve this error, pass \\`routing='path'\\` to the <${componentName}/> component, or drop the \\`path\\` prop to switch to hash-based routing. For more details please refer to our docs: https://clerk.com/docs`;\n\nexport const userButtonIgnoredComponent = `<UserButton /> can only accept <UserButton.UserProfilePage />, <UserButton.UserProfileLink /> and <UserButton.MenuItems /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;\n\nexport const customMenuItemsIgnoredComponent =\n '<UserButton.MenuItems /> component can only accept <UserButton.Action /> and <UserButton.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.';\n\nexport const userButtonMenuItemsRenderedError =\n '<UserButton.MenuItems /> component needs to be a direct child of `<UserButton />`.';\n\nexport const userButtonMenuActionRenderedError =\n '<UserButton.Action /> component needs to be a direct child of `<UserButton.MenuItems />`.';\n\nexport const userButtonMenuLinkRenderedError =\n '<UserButton.Link /> component needs to be a direct child of `<UserButton.MenuItems />`.';\n\nexport const userButtonMenuItemLinkWrongProps =\n 'Missing props. <UserButton.Link /> component requires the following props: href, label and labelIcon.';\n\nexport const userButtonMenuItemsActionWrongsProps =\n 'Missing props. <UserButton.Action /> component requires the following props: label.';\n","import { useAssertWrappedByClerkProvider as useSharedAssertWrappedByClerkProvider } from '@clerk/shared/react';\n\nimport { errorThrower } from '../errors/errorThrower';\n\nexport const useAssertWrappedByClerkProvider = (source: string): void => {\n useSharedAssertWrappedByClerkProvider(() => {\n errorThrower.throwMissingClerkProviderError({ source });\n });\n};\n","import type {\n CreateEmailLinkFlowReturn,\n EmailAddressResource,\n SignInResource,\n SignInStartEmailLinkFlowParams,\n SignUpResource,\n StartEmailLinkFlowParams,\n} from '@clerk/shared/types';\nimport React from 'react';\n\ntype EmailLinkable = SignUpResource | EmailAddressResource | SignInResource;\ntype UseEmailLinkSignInReturn = CreateEmailLinkFlowReturn<SignInStartEmailLinkFlowParams, SignInResource>;\ntype UseEmailLinkSignUpReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, SignUpResource>;\ntype UseEmailLinkEmailAddressReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, EmailAddressResource>;\n\nfunction useEmailLink(resource: SignInResource): UseEmailLinkSignInReturn;\nfunction useEmailLink(resource: SignUpResource): UseEmailLinkSignUpReturn;\nfunction useEmailLink(resource: EmailAddressResource): UseEmailLinkEmailAddressReturn;\nfunction useEmailLink(\n resource: EmailLinkable,\n): UseEmailLinkSignInReturn | UseEmailLinkSignUpReturn | UseEmailLinkEmailAddressReturn {\n const { startEmailLinkFlow, cancelEmailLinkFlow } = React.useMemo(() => resource.createEmailLinkFlow(), [resource]);\n\n React.useEffect(() => {\n return cancelEmailLinkFlow;\n }, []);\n\n return {\n startEmailLinkFlow,\n cancelEmailLinkFlow,\n } as UseEmailLinkSignInReturn | UseEmailLinkSignUpReturn | UseEmailLinkEmailAddressReturn;\n}\n\nexport { useEmailLink };\n","import { useClientContext } from '@clerk/shared/react';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type { UseSignInReturn } from '@clerk/shared/types';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\n\n/**\n * The `useSignIn()` hook provides access to the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which allows you to check the current state of a sign-in attempt and manage the sign-in flow. You can use this to create a [custom sign-in flow](!custom-flow).\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Loaded\"]\n *\n * @example\n * ### Check the current state of a sign-in\n *\n * The following example uses the `useSignIn()` hook to access the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which contains the current sign-in attempt status and methods to create a new sign-in attempt. The `isLoaded` property is used to handle the loading state.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/SignInPage.tsx' }}\n * import { useSignIn } from '@clerk/clerk-react'\n *\n * export default function SignInPage() {\n * const { isLoaded, signIn } = useSignIn()\n *\n * if (!isLoaded) {\n * // Handle loading state\n * return null\n * }\n *\n * return <div>The current sign-in attempt status is {signIn?.status}.</div>\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-sign-in.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n *\n * @example\n * ### Create a custom sign-in flow with `useSignIn()`\n *\n * The `useSignIn()` hook can also be used to build fully custom sign-in flows, if Clerk's prebuilt components don't meet your specific needs or if you require more control over the authentication flow. Different sign-in flows include email and password, email and phone codes, email links, and multifactor (MFA). To learn more about using the `useSignIn()` hook to create custom flows, see the [custom flow guides](https://clerk.com/docs/guides/development/custom-flows/overview).\n *\n * ```empty```\n */\nexport const useSignIn = (): UseSignInReturn => {\n useAssertWrappedByClerkProvider('useSignIn');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const client = useClientContext();\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useSignIn'));\n\n if (!client) {\n return { isLoaded: false, signIn: undefined, setActive: undefined };\n }\n\n return {\n isLoaded: true,\n signIn: client.signIn,\n setActive: isomorphicClerk.setActive,\n };\n};\n","import { useClientContext } from '@clerk/shared/react';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type { UseSignUpReturn } from '@clerk/shared/types';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\n\n/**\n * The `useSignUp()` hook provides access to the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which allows you to check the current state of a sign-up attempt and manage the sign-up flow. You can use this to create a [custom sign-up flow](!custom-flow).\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Loaded\"]\n *\n * @example\n * ### Check the current state of a sign-up\n *\n * The following example uses the `useSignUp()` hook to access the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which contains the current sign-up attempt status and methods to create a new sign-up attempt. The `isLoaded` property is used to handle the loading state.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/SignUpPage.tsx' }}\n * import { useSignUp } from '@clerk/clerk-react'\n *\n * export default function SignUpPage() {\n * const { isLoaded, signUp } = useSignUp()\n *\n * if (!isLoaded) {\n * // Handle loading state\n * return null\n * }\n *\n * return <div>The current sign-up attempt status is {signUp?.status}.</div>\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-sign-up.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n *\n * @example\n * ### Create a custom sign-up flow with `useSignUp()`\n *\n * The `useSignUp()` hook can also be used to build fully custom sign-up flows, if Clerk's prebuilt components don't meet your specific needs or if you require more control over the authentication flow. Different sign-up flows include email and password, email and phone codes, email links, and multifactor (MFA). To learn more about using the `useSignUp()` hook to create custom flows, see the [custom flow guides](https://clerk.com/docs/guides/development/custom-flows/overview).\n *\n * ```empty```\n */\nexport const useSignUp = (): UseSignUpReturn => {\n useAssertWrappedByClerkProvider('useSignUp');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const client = useClientContext();\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useSignUp'));\n\n if (!client) {\n return { isLoaded: false, signUp: undefined, setActive: undefined };\n }\n\n return {\n isLoaded: true,\n signUp: client.signUp,\n setActive: isomorphicClerk.setActive,\n };\n};\n","export { useAuth } from './useAuth';\nexport { useEmailLink } from './useEmailLink';\nexport { useSignIn } from './useSignIn';\nexport { useSignUp } from './useSignUp';\nexport {\n useClerk,\n useOrganization,\n useOrganizationCreationDefaults,\n useOrganizationList,\n useSessionList,\n useUser,\n useSession,\n useReverification,\n __experimental_useCheckout,\n __experimental_CheckoutProvider,\n __experimental_usePaymentElement,\n __experimental_PaymentElementProvider,\n __experimental_PaymentElement,\n} from '@clerk/shared/react';\nexport type { UseOrganizationCreationDefaultsParams, UseOrganizationCreationDefaultsReturn } from '@clerk/shared/react';\n","import type { LoadedClerk, Without } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from '../hooks/useAssertWrappedByClerkProvider';\n\nexport const withClerk = <P extends { clerk: LoadedClerk; component?: string }>(\n Component: React.ComponentType<P>,\n displayNameOrOptions?: string | { component: string; renderWhileLoading?: boolean },\n) => {\n const passedDisplayedName =\n typeof displayNameOrOptions === 'string' ? displayNameOrOptions : displayNameOrOptions?.component;\n const displayName = passedDisplayedName || Component.displayName || Component.name || 'Component';\n Component.displayName = displayName;\n\n const options = typeof displayNameOrOptions === 'string' ? undefined : displayNameOrOptions;\n\n const HOC = (props: Without<P, 'clerk'>) => {\n useAssertWrappedByClerkProvider(displayName || 'withClerk');\n\n const clerk = useIsomorphicClerkContext();\n\n if (!clerk.loaded && !options?.renderWhileLoading) {\n return null;\n }\n\n return (\n <Component\n {...(props as P)}\n component={displayName}\n clerk={clerk}\n />\n );\n };\n HOC.displayName = `withClerk(${displayName})`;\n return HOC;\n};\n","import type { RoutingOptions } from '@clerk/shared/types';\n\nimport { errorThrower } from '../errors/errorThrower';\nimport { incompatibleRoutingWithPathProvidedError, noPathProvidedError } from '../errors/messages';\n\nexport function useRoutingProps<T extends RoutingOptions>(\n componentName: string,\n props: T,\n routingOptions?: RoutingOptions,\n): T {\n const path = props.path || routingOptions?.path;\n const routing = props.routing || routingOptions?.routing || 'path';\n\n if (routing === 'path') {\n if (!path) {\n return errorThrower.throw(noPathProvidedError(componentName));\n }\n\n return {\n ...routingOptions,\n ...props,\n routing: 'path',\n };\n }\n\n if (props.path) {\n return errorThrower.throw(incompatibleRoutingWithPathProvidedError(componentName));\n }\n\n return {\n ...routingOptions,\n ...props,\n path: undefined,\n };\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","useSharedAssertWrappedByClerkProvider","import_react","import_react","import_telemetry","import_react","import_telemetry","import_react","import_react","React","React"]}
import {
MultisessionAppSupport
} from "./chunk-GT2SDNBC.mjs";
} from "./chunk-BUI34B34.mjs";
import {

@@ -10,3 +10,3 @@ errorThrower,

useDerivedAuth
} from "./chunk-4QQOMF5H.mjs";
} from "./chunk-3EQWAEPK.mjs";
import "./chunk-OANWQR3B.mjs";

@@ -13,0 +13,0 @@

{
"name": "@clerk/clerk-react",
"version": "5.60.1",
"version": "5.60.2",
"description": "Clerk React library",

@@ -77,8 +77,8 @@ "keywords": [

"tslib": "2.8.1",
"@clerk/shared": "^3.45.0"
"@clerk/shared": "^3.45.1"
},
"devDependencies": {
"@types/semver": "^7.7.1",
"@clerk/localizations": "3.35.4",
"@clerk/themes": "2.4.52"
"@clerk/localizations": "3.35.5",
"@clerk/themes": "2.4.53"
},

@@ -85,0 +85,0 @@ "peerDependencies": {

import {
customLinkWrongProps,
customMenuItemsIgnoredComponent,
customPageWrongProps,
customPagesIgnoredComponent,
errorThrower,
multipleChildrenInButtonComponent,
organizationProfileLinkRenderedError,
organizationProfilePageRenderedError,
userButtonIgnoredComponent,
userButtonMenuActionRenderedError,
userButtonMenuItemLinkWrongProps,
userButtonMenuItemsActionWrongsProps,
userButtonMenuItemsRenderedError,
userButtonMenuLinkRenderedError,
userProfileLinkRenderedError,
userProfilePageRenderedError,
withClerk
} from "./chunk-4QQOMF5H.mjs";
// src/components/uiComponents.tsx
import { logErrorInDevMode as logErrorInDevMode3 } from "@clerk/shared/utils";
import React7, { createContext, createElement, useContext } from "react";
// src/utils/childrenUtils.tsx
import React from "react";
var assertSingleChild = (children) => (name) => {
try {
return React.Children.only(children);
} catch {
return errorThrower.throw(multipleChildrenInButtonComponent(name));
}
};
var normalizeWithDefaultValue = (children, defaultText) => {
if (!children) {
children = defaultText;
}
if (typeof children === "string") {
children = /* @__PURE__ */ React.createElement("button", null, children);
}
return children;
};
var safeExecute = (cb) => (...args) => {
if (cb && typeof cb === "function") {
return cb(...args);
}
};
// src/utils/isConstructor.ts
function isConstructor(f) {
return typeof f === "function";
}
// src/utils/useMaxAllowedInstancesGuard.tsx
import React2 from "react";
var counts = /* @__PURE__ */ new Map();
function useMaxAllowedInstancesGuard(name, error, maxCount = 1) {
React2.useEffect(() => {
const count = counts.get(name) || 0;
if (count == maxCount) {
return errorThrower.throw(error);
}
counts.set(name, count + 1);
return () => {
counts.set(name, (counts.get(name) || 1) - 1);
};
}, []);
}
function withMaxAllowedInstancesGuard(WrappedComponent, name, error) {
const displayName = WrappedComponent.displayName || WrappedComponent.name || name || "Component";
const Hoc = (props) => {
useMaxAllowedInstancesGuard(name, error);
return /* @__PURE__ */ React2.createElement(WrappedComponent, { ...props });
};
Hoc.displayName = `withMaxAllowedInstancesGuard(${displayName})`;
return Hoc;
}
// src/utils/useCustomElementPortal.tsx
import { useState } from "react";
import { createPortal } from "react-dom";
var useCustomElementPortal = (elements) => {
const [nodeMap, setNodeMap] = useState(/* @__PURE__ */ new Map());
return elements.map((el) => ({
id: el.id,
mount: (node) => setNodeMap((prev) => new Map(prev).set(String(el.id), node)),
unmount: () => setNodeMap((prev) => {
const newMap = new Map(prev);
newMap.set(String(el.id), null);
return newMap;
}),
portal: () => {
const node = nodeMap.get(String(el.id));
return node ? createPortal(el.component, node) : null;
}
}));
};
// src/utils/useCustomPages.tsx
import { logErrorInDevMode } from "@clerk/shared/utils";
import React4 from "react";
// src/utils/componentValidation.ts
import React3 from "react";
var isThatComponent = (v, component) => {
return !!v && React3.isValidElement(v) && (v == null ? void 0 : v.type) === component;
};
// src/utils/useCustomPages.tsx
var useUserProfileCustomPages = (children, options) => {
const reorderItemsLabels = ["account", "security", "billing", "apiKeys"];
return useCustomPages(
{
children,
reorderItemsLabels,
LinkComponent: UserProfileLink,
PageComponent: UserProfilePage,
MenuItemsComponent: MenuItems,
componentName: "UserProfile"
},
options
);
};
var useOrganizationProfileCustomPages = (children, options) => {
const reorderItemsLabels = ["general", "members", "billing", "apiKeys"];
return useCustomPages(
{
children,
reorderItemsLabels,
LinkComponent: OrganizationProfileLink,
PageComponent: OrganizationProfilePage,
componentName: "OrganizationProfile"
},
options
);
};
var useSanitizedChildren = (children) => {
const sanitizedChildren = [];
const excludedComponents = [
OrganizationProfileLink,
OrganizationProfilePage,
MenuItems,
UserProfilePage,
UserProfileLink
];
React4.Children.forEach(children, (child) => {
if (!excludedComponents.some((component) => isThatComponent(child, component))) {
sanitizedChildren.push(child);
}
});
return sanitizedChildren;
};
var useCustomPages = (params, options) => {
const { children, LinkComponent, PageComponent, MenuItemsComponent, reorderItemsLabels, componentName } = params;
const { allowForAnyChildren = false } = options || {};
const validChildren = [];
React4.Children.forEach(children, (child) => {
if (!isThatComponent(child, PageComponent) && !isThatComponent(child, LinkComponent) && !isThatComponent(child, MenuItemsComponent)) {
if (child && !allowForAnyChildren) {
logErrorInDevMode(customPagesIgnoredComponent(componentName));
}
return;
}
const { props } = child;
const { children: children2, label, url, labelIcon } = props;
if (isThatComponent(child, PageComponent)) {
if (isReorderItem(props, reorderItemsLabels)) {
validChildren.push({ label });
} else if (isCustomPage(props)) {
validChildren.push({ label, labelIcon, children: children2, url });
} else {
logErrorInDevMode(customPageWrongProps(componentName));
return;
}
}
if (isThatComponent(child, LinkComponent)) {
if (isExternalLink(props)) {
validChildren.push({ label, labelIcon, url });
} else {
logErrorInDevMode(customLinkWrongProps(componentName));
return;
}
}
});
const customPageContents = [];
const customPageLabelIcons = [];
const customLinkLabelIcons = [];
validChildren.forEach((cp, index) => {
if (isCustomPage(cp)) {
customPageContents.push({ component: cp.children, id: index });
customPageLabelIcons.push({ component: cp.labelIcon, id: index });
return;
}
if (isExternalLink(cp)) {
customLinkLabelIcons.push({ component: cp.labelIcon, id: index });
}
});
const customPageContentsPortals = useCustomElementPortal(customPageContents);
const customPageLabelIconsPortals = useCustomElementPortal(customPageLabelIcons);
const customLinkLabelIconsPortals = useCustomElementPortal(customLinkLabelIcons);
const customPages = [];
const customPagesPortals = [];
validChildren.forEach((cp, index) => {
if (isReorderItem(cp, reorderItemsLabels)) {
customPages.push({ label: cp.label });
return;
}
if (isCustomPage(cp)) {
const {
portal: contentPortal,
mount,
unmount
} = customPageContentsPortals.find((p) => p.id === index);
const {
portal: labelPortal,
mount: mountIcon,
unmount: unmountIcon
} = customPageLabelIconsPortals.find((p) => p.id === index);
customPages.push({ label: cp.label, url: cp.url, mount, unmount, mountIcon, unmountIcon });
customPagesPortals.push(contentPortal);
customPagesPortals.push(labelPortal);
return;
}
if (isExternalLink(cp)) {
const {
portal: labelPortal,
mount: mountIcon,
unmount: unmountIcon
} = customLinkLabelIconsPortals.find((p) => p.id === index);
customPages.push({ label: cp.label, url: cp.url, mountIcon, unmountIcon });
customPagesPortals.push(labelPortal);
return;
}
});
return { customPages, customPagesPortals };
};
var isReorderItem = (childProps, validItems) => {
const { children, label, url, labelIcon } = childProps;
return !children && !url && !labelIcon && validItems.some((v) => v === label);
};
var isCustomPage = (childProps) => {
const { children, label, url, labelIcon } = childProps;
return !!children && !!url && !!labelIcon && !!label;
};
var isExternalLink = (childProps) => {
const { children, label, url, labelIcon } = childProps;
return !children && !!url && !!labelIcon && !!label;
};
// src/utils/useCustomMenuItems.tsx
import { logErrorInDevMode as logErrorInDevMode2 } from "@clerk/shared/utils";
import React5 from "react";
var useUserButtonCustomMenuItems = (children, options) => {
var _a;
const reorderItemsLabels = ["manageAccount", "signOut"];
return useCustomMenuItems({
children,
reorderItemsLabels,
MenuItemsComponent: MenuItems,
MenuActionComponent: MenuAction,
MenuLinkComponent: MenuLink,
UserProfileLinkComponent: UserProfileLink,
UserProfilePageComponent: UserProfilePage,
allowForAnyChildren: (_a = options == null ? void 0 : options.allowForAnyChildren) != null ? _a : false
});
};
var useCustomMenuItems = ({
children,
MenuItemsComponent,
MenuActionComponent,
MenuLinkComponent,
UserProfileLinkComponent,
UserProfilePageComponent,
reorderItemsLabels,
allowForAnyChildren = false
}) => {
const validChildren = [];
const customMenuItems = [];
const customMenuItemsPortals = [];
React5.Children.forEach(children, (child) => {
if (!isThatComponent(child, MenuItemsComponent) && !isThatComponent(child, UserProfileLinkComponent) && !isThatComponent(child, UserProfilePageComponent)) {
if (child && !allowForAnyChildren) {
logErrorInDevMode2(userButtonIgnoredComponent);
}
return;
}
if (isThatComponent(child, UserProfileLinkComponent) || isThatComponent(child, UserProfilePageComponent)) {
return;
}
const { props } = child;
React5.Children.forEach(props.children, (child2) => {
if (!isThatComponent(child2, MenuActionComponent) && !isThatComponent(child2, MenuLinkComponent)) {
if (child2) {
logErrorInDevMode2(customMenuItemsIgnoredComponent);
}
return;
}
const { props: props2 } = child2;
const { label, labelIcon, href, onClick, open } = props2;
if (isThatComponent(child2, MenuActionComponent)) {
if (isReorderItem2(props2, reorderItemsLabels)) {
validChildren.push({ label });
} else if (isCustomMenuItem(props2)) {
const baseItem = {
label,
labelIcon
};
if (onClick !== void 0) {
validChildren.push({
...baseItem,
onClick
});
} else if (open !== void 0) {
validChildren.push({
...baseItem,
open: open.startsWith("/") ? open : `/${open}`
});
} else {
logErrorInDevMode2("Custom menu item must have either onClick or open property");
return;
}
} else {
logErrorInDevMode2(userButtonMenuItemsActionWrongsProps);
return;
}
}
if (isThatComponent(child2, MenuLinkComponent)) {
if (isExternalLink2(props2)) {
validChildren.push({ label, labelIcon, href });
} else {
logErrorInDevMode2(userButtonMenuItemLinkWrongProps);
return;
}
}
});
});
const customMenuItemLabelIcons = [];
const customLinkLabelIcons = [];
validChildren.forEach((mi, index) => {
if (isCustomMenuItem(mi)) {
customMenuItemLabelIcons.push({ component: mi.labelIcon, id: index });
}
if (isExternalLink2(mi)) {
customLinkLabelIcons.push({ component: mi.labelIcon, id: index });
}
});
const customMenuItemLabelIconsPortals = useCustomElementPortal(customMenuItemLabelIcons);
const customLinkLabelIconsPortals = useCustomElementPortal(customLinkLabelIcons);
validChildren.forEach((mi, index) => {
if (isReorderItem2(mi, reorderItemsLabels)) {
customMenuItems.push({
label: mi.label
});
}
if (isCustomMenuItem(mi)) {
const {
portal: iconPortal,
mount: mountIcon,
unmount: unmountIcon
} = customMenuItemLabelIconsPortals.find((p) => p.id === index);
const menuItem = {
label: mi.label,
mountIcon,
unmountIcon
};
if ("onClick" in mi) {
menuItem.onClick = mi.onClick;
} else if ("open" in mi) {
menuItem.open = mi.open;
}
customMenuItems.push(menuItem);
customMenuItemsPortals.push(iconPortal);
}
if (isExternalLink2(mi)) {
const {
portal: iconPortal,
mount: mountIcon,
unmount: unmountIcon
} = customLinkLabelIconsPortals.find((p) => p.id === index);
customMenuItems.push({
label: mi.label,
href: mi.href,
mountIcon,
unmountIcon
});
customMenuItemsPortals.push(iconPortal);
}
});
return { customMenuItems, customMenuItemsPortals };
};
var isReorderItem2 = (childProps, validItems) => {
const { children, label, onClick, labelIcon } = childProps;
return !children && !onClick && !labelIcon && validItems.some((v) => v === label);
};
var isCustomMenuItem = (childProps) => {
const { label, labelIcon, onClick, open } = childProps;
return !!labelIcon && !!label && (typeof onClick === "function" || typeof open === "string");
};
var isExternalLink2 = (childProps) => {
const { label, href, labelIcon } = childProps;
return !!href && !!labelIcon && !!label;
};
// src/utils/useWaitForComponentMount.ts
import { useEffect, useRef, useState as useState2 } from "react";
var createAwaitableMutationObserver = (globalOptions) => {
const isReady = globalOptions == null ? void 0 : globalOptions.isReady;
return (options) => new Promise((resolve, reject) => {
const { root = document == null ? void 0 : document.body, selector, timeout = 0 } = options;
if (!root) {
reject(new Error("No root element provided"));
return;
}
let elementToWatch = root;
if (selector) {
elementToWatch = root == null ? void 0 : root.querySelector(selector);
}
if (isReady(elementToWatch, selector)) {
resolve();
return;
}
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (!elementToWatch && selector) {
elementToWatch = root == null ? void 0 : root.querySelector(selector);
}
if (globalOptions.childList && mutation.type === "childList" || globalOptions.attributes && mutation.type === "attributes") {
if (isReady(elementToWatch, selector)) {
observer.disconnect();
resolve();
return;
}
}
}
});
observer.observe(root, globalOptions);
if (timeout > 0) {
setTimeout(() => {
observer.disconnect();
reject(new Error(`Timeout waiting for ${selector}`));
}, timeout);
}
});
};
var waitForElementChildren = createAwaitableMutationObserver({
childList: true,
subtree: true,
isReady: (el, selector) => {
var _a;
return !!(el == null ? void 0 : el.childElementCount) && ((_a = el == null ? void 0 : el.matches) == null ? void 0 : _a.call(el, selector)) && el.childElementCount > 0;
}
});
function useWaitForComponentMount(component, options) {
const watcherRef = useRef();
const [status, setStatus] = useState2("rendering");
useEffect(() => {
if (!component) {
throw new Error("Clerk: no component name provided, unable to detect mount.");
}
if (typeof window !== "undefined" && !watcherRef.current) {
const defaultSelector = `[data-clerk-component="${component}"]`;
const selector = options == null ? void 0 : options.selector;
watcherRef.current = waitForElementChildren({
selector: selector ? (
// Allows for `[data-clerk-component="xxxx"][data-some-attribute="123"] .my-class`
defaultSelector + selector
) : defaultSelector
}).then(() => {
setStatus("rendered");
}).catch(() => {
setStatus("error");
});
}
}, [component, options == null ? void 0 : options.selector]);
return status;
}
// src/components/ClerkHostRenderer.tsx
import { without } from "@clerk/shared/object";
import { isDeeplyEqual } from "@clerk/shared/react";
import React6 from "react";
var isMountProps = (props) => {
return "mount" in props;
};
var isOpenProps = (props) => {
return "open" in props;
};
var stripMenuItemIconHandlers = (menuItems) => {
return menuItems == null ? void 0 : menuItems.map(({ mountIcon, unmountIcon, ...rest }) => rest);
};
var ClerkHostRenderer = class extends React6.PureComponent {
constructor() {
super(...arguments);
this.rootRef = React6.createRef();
}
componentDidUpdate(_prevProps) {
var _a, _b, _c, _d;
if (!isMountProps(_prevProps) || !isMountProps(this.props)) {
return;
}
const prevProps = without(_prevProps.props, "customPages", "customMenuItems", "children");
const newProps = without(this.props.props, "customPages", "customMenuItems", "children");
const customPagesChanged = ((_a = prevProps.customPages) == null ? void 0 : _a.length) !== ((_b = newProps.customPages) == null ? void 0 : _b.length);
const customMenuItemsChanged = ((_c = prevProps.customMenuItems) == null ? void 0 : _c.length) !== ((_d = newProps.customMenuItems) == null ? void 0 : _d.length);
const prevMenuItemsWithoutHandlers = stripMenuItemIconHandlers(_prevProps.props.customMenuItems);
const newMenuItemsWithoutHandlers = stripMenuItemIconHandlers(this.props.props.customMenuItems);
if (!isDeeplyEqual(prevProps, newProps) || !isDeeplyEqual(prevMenuItemsWithoutHandlers, newMenuItemsWithoutHandlers) || customPagesChanged || customMenuItemsChanged) {
if (this.rootRef.current) {
this.props.updateProps({ node: this.rootRef.current, props: this.props.props });
}
}
}
componentDidMount() {
if (this.rootRef.current) {
if (isMountProps(this.props)) {
this.props.mount(this.rootRef.current, this.props.props);
}
if (isOpenProps(this.props)) {
this.props.open(this.props.props);
}
}
}
componentWillUnmount() {
if (this.rootRef.current) {
if (isMountProps(this.props)) {
this.props.unmount(this.rootRef.current);
}
if (isOpenProps(this.props)) {
this.props.close();
}
}
}
render() {
const { hideRootHtmlElement = false } = this.props;
const rootAttributes = {
ref: this.rootRef,
...this.props.rootProps,
...this.props.component && { "data-clerk-component": this.props.component }
};
return /* @__PURE__ */ React6.createElement(React6.Fragment, null, !hideRootHtmlElement && /* @__PURE__ */ React6.createElement("div", { ...rootAttributes }), this.props.children);
}
};
// src/components/uiComponents.tsx
var CustomPortalsRenderer = (props) => {
var _a, _b;
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, (_a = props == null ? void 0 : props.customPagesPortals) == null ? void 0 : _a.map((portal, index) => createElement(portal, { key: index })), (_b = props == null ? void 0 : props.customMenuItemsPortals) == null ? void 0 : _b.map((portal, index) => createElement(portal, { key: index })));
};
var SignIn = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountSignIn,
unmount: clerk.unmountSignIn,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "SignIn", renderWhileLoading: true }
);
var SignUp = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountSignUp,
unmount: clerk.unmountSignUp,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "SignUp", renderWhileLoading: true }
);
function UserProfilePage({ children }) {
logErrorInDevMode3(userProfilePageRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function UserProfileLink({ children }) {
logErrorInDevMode3(userProfileLinkRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
var _UserProfile = withClerk(
({
clerk,
component,
fallback,
...props
}) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
const { customPages, customPagesPortals } = useUserProfileCustomPages(props.children);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountUserProfile,
unmount: clerk.unmountUserProfile,
updateProps: clerk.__unstable__updateProps,
props: { ...props, customPages },
rootProps: rendererRootProps
},
/* @__PURE__ */ React7.createElement(CustomPortalsRenderer, { customPagesPortals })
));
},
{ component: "UserProfile", renderWhileLoading: true }
);
var UserProfile = Object.assign(_UserProfile, {
Page: UserProfilePage,
Link: UserProfileLink
});
var UserButtonContext = createContext({
mount: () => {
},
unmount: () => {
},
updateProps: () => {
}
});
var _UserButton = withClerk(
({
clerk,
component,
fallback,
...props
}) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
const { customPages, customPagesPortals } = useUserProfileCustomPages(props.children, {
allowForAnyChildren: !!props.__experimental_asProvider
});
const userProfileProps = { ...props.userProfileProps, customPages };
const { customMenuItems, customMenuItemsPortals } = useUserButtonCustomMenuItems(props.children, {
allowForAnyChildren: !!props.__experimental_asProvider
});
const sanitizedChildren = useSanitizedChildren(props.children);
const passableProps = {
mount: clerk.mountUserButton,
unmount: clerk.unmountUserButton,
updateProps: clerk.__unstable__updateProps,
props: { ...props, userProfileProps, customMenuItems }
};
const portalProps = {
customPagesPortals,
customMenuItemsPortals
};
return /* @__PURE__ */ React7.createElement(UserButtonContext.Provider, { value: passableProps }, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
...passableProps,
hideRootHtmlElement: !!props.__experimental_asProvider,
rootProps: rendererRootProps
},
props.__experimental_asProvider ? sanitizedChildren : null,
/* @__PURE__ */ React7.createElement(CustomPortalsRenderer, { ...portalProps })
));
},
{ component: "UserButton", renderWhileLoading: true }
);
function MenuItems({ children }) {
logErrorInDevMode3(userButtonMenuItemsRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function MenuAction({ children }) {
logErrorInDevMode3(userButtonMenuActionRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function MenuLink({ children }) {
logErrorInDevMode3(userButtonMenuLinkRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function UserButtonOutlet(outletProps) {
const providerProps = useContext(UserButtonContext);
const portalProps = {
...providerProps,
props: {
...providerProps.props,
...outletProps
}
};
return /* @__PURE__ */ React7.createElement(ClerkHostRenderer, { ...portalProps });
}
var UserButton = Object.assign(_UserButton, {
UserProfilePage,
UserProfileLink,
MenuItems,
Action: MenuAction,
Link: MenuLink,
__experimental_Outlet: UserButtonOutlet
});
function OrganizationProfilePage({ children }) {
logErrorInDevMode3(organizationProfilePageRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
function OrganizationProfileLink({ children }) {
logErrorInDevMode3(organizationProfileLinkRenderedError);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, children);
}
var _OrganizationProfile = withClerk(
({
clerk,
component,
fallback,
...props
}) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
const { customPages, customPagesPortals } = useOrganizationProfileCustomPages(props.children);
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountOrganizationProfile,
unmount: clerk.unmountOrganizationProfile,
updateProps: clerk.__unstable__updateProps,
props: { ...props, customPages },
rootProps: rendererRootProps
},
/* @__PURE__ */ React7.createElement(CustomPortalsRenderer, { customPagesPortals })
));
},
{ component: "OrganizationProfile", renderWhileLoading: true }
);
var OrganizationProfile = Object.assign(_OrganizationProfile, {
Page: OrganizationProfilePage,
Link: OrganizationProfileLink
});
var CreateOrganization = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountCreateOrganization,
unmount: clerk.unmountCreateOrganization,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "CreateOrganization", renderWhileLoading: true }
);
var OrganizationSwitcherContext = createContext({
mount: () => {
},
unmount: () => {
},
updateProps: () => {
}
});
var _OrganizationSwitcher = withClerk(
({
clerk,
component,
fallback,
...props
}) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
const { customPages, customPagesPortals } = useOrganizationProfileCustomPages(props.children, {
allowForAnyChildren: !!props.__experimental_asProvider
});
const organizationProfileProps = { ...props.organizationProfileProps, customPages };
const sanitizedChildren = useSanitizedChildren(props.children);
const passableProps = {
mount: clerk.mountOrganizationSwitcher,
unmount: clerk.unmountOrganizationSwitcher,
updateProps: clerk.__unstable__updateProps,
props: { ...props, organizationProfileProps },
rootProps: rendererRootProps,
component
};
clerk.__experimental_prefetchOrganizationSwitcher();
return /* @__PURE__ */ React7.createElement(OrganizationSwitcherContext.Provider, { value: passableProps }, /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
...passableProps,
hideRootHtmlElement: !!props.__experimental_asProvider
},
props.__experimental_asProvider ? sanitizedChildren : null,
/* @__PURE__ */ React7.createElement(CustomPortalsRenderer, { customPagesPortals })
)));
},
{ component: "OrganizationSwitcher", renderWhileLoading: true }
);
function OrganizationSwitcherOutlet(outletProps) {
const providerProps = useContext(OrganizationSwitcherContext);
const portalProps = {
...providerProps,
props: {
...providerProps.props,
...outletProps
}
};
return /* @__PURE__ */ React7.createElement(ClerkHostRenderer, { ...portalProps });
}
var OrganizationSwitcher = Object.assign(_OrganizationSwitcher, {
OrganizationProfilePage,
OrganizationProfileLink,
__experimental_Outlet: OrganizationSwitcherOutlet
});
var OrganizationList = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountOrganizationList,
unmount: clerk.unmountOrganizationList,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "OrganizationList", renderWhileLoading: true }
);
var GoogleOneTap = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
open: clerk.openGoogleOneTap,
close: clerk.closeGoogleOneTap,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "GoogleOneTap", renderWhileLoading: true }
);
var Waitlist = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountWaitlist,
unmount: clerk.unmountWaitlist,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "Waitlist", renderWhileLoading: true }
);
var PricingTable = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component, {
// This attribute is added to the PricingTable root element after we've successfully fetched the plans asynchronously.
selector: '[data-component-status="ready"]'
});
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountPricingTable,
unmount: clerk.unmountPricingTable,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "PricingTable", renderWhileLoading: true }
);
var APIKeys = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountAPIKeys,
unmount: clerk.unmountAPIKeys,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "ApiKeys", renderWhileLoading: true }
);
var UserAvatar = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountUserAvatar,
unmount: clerk.unmountUserAvatar,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "UserAvatar", renderWhileLoading: true }
);
var TaskChooseOrganization = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountTaskChooseOrganization,
unmount: clerk.unmountTaskChooseOrganization,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "TaskChooseOrganization", renderWhileLoading: true }
);
var TaskResetPassword = withClerk(
({ clerk, component, fallback, ...props }) => {
const mountingStatus = useWaitForComponentMount(component);
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
const rendererRootProps = {
...shouldShowFallback && fallback && { style: { display: "none" } }
};
return /* @__PURE__ */ React7.createElement(React7.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ React7.createElement(
ClerkHostRenderer,
{
component,
mount: clerk.mountTaskResetPassword,
unmount: clerk.unmountTaskResetPassword,
updateProps: clerk.__unstable__updateProps,
props,
rootProps: rendererRootProps
}
));
},
{ component: "TaskResetPassword", renderWhileLoading: true }
);
export {
assertSingleChild,
normalizeWithDefaultValue,
safeExecute,
isConstructor,
withMaxAllowedInstancesGuard,
SignIn,
SignUp,
UserProfile,
UserButton,
OrganizationProfile,
CreateOrganization,
OrganizationSwitcher,
OrganizationList,
GoogleOneTap,
Waitlist,
PricingTable,
APIKeys,
UserAvatar,
TaskChooseOrganization,
TaskResetPassword
};
//# sourceMappingURL=chunk-36EXAXVP.mjs.map

Sorry, the diff of this file is too big to display

// src/errors/errorThrower.ts
import { buildErrorThrower } from "@clerk/shared/error";
var errorThrower = buildErrorThrower({ packageName: "@clerk/clerk-react" });
function setErrorThrowerOptions(options) {
errorThrower.setMessages(options).setPackageName(options);
}
// src/hooks/useAuth.ts
import { createCheckAuthorization, resolveAuthState } from "@clerk/shared/authorization";
import { eventMethodCalled } from "@clerk/shared/telemetry";
import { useCallback } from "react";
// src/contexts/AuthContext.ts
import { createContextAndHook } from "@clerk/shared/react";
var [AuthContext, useAuthContext] = createContextAndHook("AuthContext");
// src/contexts/IsomorphicClerkContext.tsx
import { ClerkInstanceContext, useClerkInstanceContext } from "@clerk/shared/react";
var IsomorphicClerkContext = ClerkInstanceContext;
var useIsomorphicClerkContext = useClerkInstanceContext;
// src/errors/messages.ts
var multipleClerkProvidersError = "You've added multiple <ClerkProvider> components in your React component tree. Wrap your components in a single <ClerkProvider>.";
var multipleChildrenInButtonComponent = (name) => `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`;
var invalidStateError = "Invalid state. Feel free to submit a bug or reach out to support here: https://clerk.com/support";
var unsupportedNonBrowserDomainOrProxyUrlFunction = "Unsupported usage of isSatellite, domain or proxyUrl. The usage of isSatellite, domain or proxyUrl as function is not supported in non-browser environments.";
var userProfilePageRenderedError = "<UserProfile.Page /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.";
var userProfileLinkRenderedError = "<UserProfile.Link /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.";
var organizationProfilePageRenderedError = "<OrganizationProfile.Page /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.";
var organizationProfileLinkRenderedError = "<OrganizationProfile.Link /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.";
var customPagesIgnoredComponent = (componentName) => `<${componentName} /> can only accept <${componentName}.Page /> and <${componentName}.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;
var customPageWrongProps = (componentName) => `Missing props. <${componentName}.Page /> component requires the following props: url, label, labelIcon, alongside with children to be rendered inside the page.`;
var customLinkWrongProps = (componentName) => `Missing props. <${componentName}.Link /> component requires the following props: url, label and labelIcon.`;
var noPathProvidedError = (componentName) => `The <${componentName}/> component uses path-based routing by default unless a different routing strategy is provided using the \`routing\` prop. When path-based routing is used, you need to provide the path where the component is mounted on by using the \`path\` prop. Example: <${componentName} path={'/my-path'} />`;
var incompatibleRoutingWithPathProvidedError = (componentName) => `The \`path\` prop will only be respected when the Clerk component uses path-based routing. To resolve this error, pass \`routing='path'\` to the <${componentName}/> component, or drop the \`path\` prop to switch to hash-based routing. For more details please refer to our docs: https://clerk.com/docs`;
var userButtonIgnoredComponent = `<UserButton /> can only accept <UserButton.UserProfilePage />, <UserButton.UserProfileLink /> and <UserButton.MenuItems /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;
var customMenuItemsIgnoredComponent = "<UserButton.MenuItems /> component can only accept <UserButton.Action /> and <UserButton.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.";
var userButtonMenuItemsRenderedError = "<UserButton.MenuItems /> component needs to be a direct child of `<UserButton />`.";
var userButtonMenuActionRenderedError = "<UserButton.Action /> component needs to be a direct child of `<UserButton.MenuItems />`.";
var userButtonMenuLinkRenderedError = "<UserButton.Link /> component needs to be a direct child of `<UserButton.MenuItems />`.";
var userButtonMenuItemLinkWrongProps = "Missing props. <UserButton.Link /> component requires the following props: href, label and labelIcon.";
var userButtonMenuItemsActionWrongsProps = "Missing props. <UserButton.Action /> component requires the following props: label.";
// src/hooks/useAssertWrappedByClerkProvider.ts
import { useAssertWrappedByClerkProvider as useSharedAssertWrappedByClerkProvider } from "@clerk/shared/react";
var useAssertWrappedByClerkProvider = (source) => {
useSharedAssertWrappedByClerkProvider(() => {
errorThrower.throwMissingClerkProviderError({ source });
});
};
// src/hooks/utils.ts
var clerkLoaded = (isomorphicClerk) => {
return new Promise((resolve) => {
const handler = (status) => {
if (["ready", "degraded"].includes(status)) {
resolve();
isomorphicClerk.off("status", handler);
}
};
isomorphicClerk.on("status", handler, { notify: true });
});
};
var createGetToken = (isomorphicClerk) => {
return async (options) => {
await clerkLoaded(isomorphicClerk);
if (!isomorphicClerk.session) {
return null;
}
return isomorphicClerk.session.getToken(options);
};
};
var createSignOut = (isomorphicClerk) => {
return async (...args) => {
await clerkLoaded(isomorphicClerk);
return isomorphicClerk.signOut(...args);
};
};
// src/hooks/useAuth.ts
var useAuth = (initialAuthStateOrOptions = {}) => {
var _a;
useAssertWrappedByClerkProvider("useAuth");
const { treatPendingAsSignedOut, ...rest } = initialAuthStateOrOptions != null ? initialAuthStateOrOptions : {};
const initialAuthState = rest;
const authContextFromHook = useAuthContext();
let authContext = authContextFromHook;
if (authContext.sessionId === void 0 && authContext.userId === void 0) {
authContext = initialAuthState != null ? initialAuthState : {};
}
const isomorphicClerk = useIsomorphicClerkContext();
const getToken = useCallback(createGetToken(isomorphicClerk), [isomorphicClerk]);
const signOut = useCallback(createSignOut(isomorphicClerk), [isomorphicClerk]);
(_a = isomorphicClerk.telemetry) == null ? void 0 : _a.record(eventMethodCalled("useAuth", { treatPendingAsSignedOut }));
return useDerivedAuth(
{
...authContext,
getToken,
signOut
},
{
treatPendingAsSignedOut
}
);
};
function useDerivedAuth(authObject, { treatPendingAsSignedOut = true } = {}) {
const { userId, orgId, orgRole, has, signOut, getToken, orgPermissions, factorVerificationAge, sessionClaims } = authObject != null ? authObject : {};
const derivedHas = useCallback(
(params) => {
if (has) {
return has(params);
}
return createCheckAuthorization({
userId,
orgId,
orgRole,
orgPermissions,
factorVerificationAge,
features: (sessionClaims == null ? void 0 : sessionClaims.fea) || "",
plans: (sessionClaims == null ? void 0 : sessionClaims.pla) || ""
})(params);
},
[has, userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims]
);
const payload = resolveAuthState({
authObject: {
...authObject,
getToken,
signOut,
has: derivedHas
},
options: {
treatPendingAsSignedOut
}
});
if (!payload) {
return errorThrower.throw(invalidStateError);
}
return payload;
}
// src/hooks/useEmailLink.ts
import React from "react";
function useEmailLink(resource) {
const { startEmailLinkFlow, cancelEmailLinkFlow } = React.useMemo(() => resource.createEmailLinkFlow(), [resource]);
React.useEffect(() => {
return cancelEmailLinkFlow;
}, []);
return {
startEmailLinkFlow,
cancelEmailLinkFlow
};
}
// src/hooks/useSignIn.ts
import { useClientContext } from "@clerk/shared/react";
import { eventMethodCalled as eventMethodCalled2 } from "@clerk/shared/telemetry";
var useSignIn = () => {
var _a;
useAssertWrappedByClerkProvider("useSignIn");
const isomorphicClerk = useIsomorphicClerkContext();
const client = useClientContext();
(_a = isomorphicClerk.telemetry) == null ? void 0 : _a.record(eventMethodCalled2("useSignIn"));
if (!client) {
return { isLoaded: false, signIn: void 0, setActive: void 0 };
}
return {
isLoaded: true,
signIn: client.signIn,
setActive: isomorphicClerk.setActive
};
};
// src/hooks/useSignUp.ts
import { useClientContext as useClientContext2 } from "@clerk/shared/react";
import { eventMethodCalled as eventMethodCalled3 } from "@clerk/shared/telemetry";
var useSignUp = () => {
var _a;
useAssertWrappedByClerkProvider("useSignUp");
const isomorphicClerk = useIsomorphicClerkContext();
const client = useClientContext2();
(_a = isomorphicClerk.telemetry) == null ? void 0 : _a.record(eventMethodCalled3("useSignUp"));
if (!client) {
return { isLoaded: false, signUp: void 0, setActive: void 0 };
}
return {
isLoaded: true,
signUp: client.signUp,
setActive: isomorphicClerk.setActive
};
};
// src/hooks/index.ts
import {
useClerk,
useOrganization,
useOrganizationCreationDefaults,
useOrganizationList,
useSessionList,
useUser,
useSession,
useReverification,
__experimental_useCheckout,
__experimental_CheckoutProvider,
__experimental_usePaymentElement,
__experimental_PaymentElementProvider,
__experimental_PaymentElement
} from "@clerk/shared/react";
// src/components/withClerk.tsx
import React2 from "react";
var withClerk = (Component, displayNameOrOptions) => {
const passedDisplayedName = typeof displayNameOrOptions === "string" ? displayNameOrOptions : displayNameOrOptions == null ? void 0 : displayNameOrOptions.component;
const displayName = passedDisplayedName || Component.displayName || Component.name || "Component";
Component.displayName = displayName;
const options = typeof displayNameOrOptions === "string" ? void 0 : displayNameOrOptions;
const HOC = (props) => {
useAssertWrappedByClerkProvider(displayName || "withClerk");
const clerk = useIsomorphicClerkContext();
if (!clerk.loaded && !(options == null ? void 0 : options.renderWhileLoading)) {
return null;
}
return /* @__PURE__ */ React2.createElement(
Component,
{
...props,
component: displayName,
clerk
}
);
};
HOC.displayName = `withClerk(${displayName})`;
return HOC;
};
export {
errorThrower,
setErrorThrowerOptions,
multipleClerkProvidersError,
multipleChildrenInButtonComponent,
unsupportedNonBrowserDomainOrProxyUrlFunction,
userProfilePageRenderedError,
userProfileLinkRenderedError,
organizationProfilePageRenderedError,
organizationProfileLinkRenderedError,
customPagesIgnoredComponent,
customPageWrongProps,
customLinkWrongProps,
noPathProvidedError,
incompatibleRoutingWithPathProvidedError,
userButtonIgnoredComponent,
customMenuItemsIgnoredComponent,
userButtonMenuItemsRenderedError,
userButtonMenuActionRenderedError,
userButtonMenuLinkRenderedError,
userButtonMenuItemLinkWrongProps,
userButtonMenuItemsActionWrongsProps,
IsomorphicClerkContext,
useIsomorphicClerkContext,
useAssertWrappedByClerkProvider,
withClerk,
AuthContext,
useAuth,
useDerivedAuth,
useEmailLink,
useSignIn,
useSignUp,
useClerk,
useOrganization,
useOrganizationCreationDefaults,
useOrganizationList,
useSessionList,
useUser,
useSession,
useReverification,
__experimental_useCheckout,
__experimental_CheckoutProvider,
__experimental_usePaymentElement,
__experimental_PaymentElementProvider,
__experimental_PaymentElement
};
//# sourceMappingURL=chunk-4QQOMF5H.mjs.map
{"version":3,"sources":["../src/errors/errorThrower.ts","../src/hooks/useAuth.ts","../src/contexts/AuthContext.ts","../src/contexts/IsomorphicClerkContext.tsx","../src/errors/messages.ts","../src/hooks/useAssertWrappedByClerkProvider.ts","../src/hooks/utils.ts","../src/hooks/useEmailLink.ts","../src/hooks/useSignIn.ts","../src/hooks/useSignUp.ts","../src/hooks/index.ts","../src/components/withClerk.tsx"],"sourcesContent":["import type { ErrorThrowerOptions } from '@clerk/shared/error';\nimport { buildErrorThrower } from '@clerk/shared/error';\n\nconst errorThrower = buildErrorThrower({ packageName: '@clerk/clerk-react' });\n\nexport { errorThrower };\n\n/**\n * Overrides options of the internal errorThrower (eg setting packageName prefix).\n *\n * @internal\n */\nexport function setErrorThrowerOptions(options: ErrorThrowerOptions) {\n errorThrower.setMessages(options).setPackageName(options);\n}\n","import { createCheckAuthorization, resolveAuthState } from '@clerk/shared/authorization';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type {\n CheckAuthorizationWithCustomPermissions,\n GetToken,\n JwtPayload,\n PendingSessionOptions,\n SignOut,\n UseAuthReturn,\n} from '@clerk/shared/types';\nimport { useCallback } from 'react';\n\nimport { useAuthContext } from '../contexts/AuthContext';\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { errorThrower } from '../errors/errorThrower';\nimport { invalidStateError } from '../errors/messages';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\nimport { createGetToken, createSignOut } from './utils';\n\n/**\n * @inline\n */\ntype UseAuthOptions = Record<string, any> | PendingSessionOptions | undefined | null;\n\n/**\n * The `useAuth()` hook provides access to the current user's authentication state and methods to manage the active session.\n *\n * > [!NOTE]\n * > To access auth data server-side, see the [`Auth` object reference doc](https://clerk.com/docs/reference/backend/types/auth-object).\n *\n * <If sdk=\"nextjs\">\n * By default, Next.js opts all routes into static rendering. If you need to opt a route or routes into dynamic rendering because you need to access the authentication data at request time, you can create a boundary by passing the `dynamic` prop to `<ClerkProvider>`. See the [guide on rendering modes](https://clerk.com/docs/guides/development/rendering-modes) for more information, including code examples.\n * </If>\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Signed out\", \"Signed in (no active organization)\", \"Signed in (with active organization)\"]\n *\n * @param [initialAuthStateOrOptions] - An object containing the initial authentication state or options for the `useAuth()` hook. If not provided, the hook will attempt to derive the state from the context. `treatPendingAsSignedOut` is a boolean that indicates whether pending sessions are considered as signed out or not. Defaults to `true`.\n *\n * @function\n *\n * @example\n *\n * The following example demonstrates how to use the `useAuth()` hook to access the current auth state, like whether the user is signed in or not. It also includes a basic example for using the `getToken()` method to retrieve a session token for fetching data from an external resource.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/ExternalDataPage.tsx' }}\n * import { useAuth } from '@clerk/clerk-react'\n *\n * export default function ExternalDataPage() {\n * const { userId, sessionId, getToken, isLoaded, isSignedIn } = useAuth()\n *\n * const fetchExternalData = async () => {\n * const token = await getToken()\n *\n * // Fetch data from an external API\n * const response = await fetch('https://api.example.com/data', {\n * headers: {\n * Authorization: `Bearer ${token}`,\n * },\n * })\n *\n * return response.json()\n * }\n *\n * if (!isLoaded) {\n * return <div>Loading...</div>\n * }\n *\n * if (!isSignedIn) {\n * return <div>Sign in to view this page</div>\n * }\n *\n * return (\n * <div>\n * <p>\n * Hello, {userId}! Your current active session is {sessionId}.\n * </p>\n * <button onClick={fetchExternalData}>Fetch Data</button>\n * </div>\n * )\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-auth.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n */\nexport const useAuth = (initialAuthStateOrOptions: UseAuthOptions = {}): UseAuthReturn => {\n useAssertWrappedByClerkProvider('useAuth');\n\n const { treatPendingAsSignedOut, ...rest } = initialAuthStateOrOptions ?? {};\n const initialAuthState = rest as any;\n\n const authContextFromHook = useAuthContext();\n let authContext = authContextFromHook;\n\n if (authContext.sessionId === undefined && authContext.userId === undefined) {\n authContext = initialAuthState != null ? initialAuthState : {};\n }\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const getToken: GetToken = useCallback(createGetToken(isomorphicClerk), [isomorphicClerk]);\n const signOut: SignOut = useCallback(createSignOut(isomorphicClerk), [isomorphicClerk]);\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useAuth', { treatPendingAsSignedOut }));\n\n return useDerivedAuth(\n {\n ...authContext,\n getToken,\n signOut,\n },\n {\n treatPendingAsSignedOut,\n },\n );\n};\n\n/**\n * A hook that derives and returns authentication state and utility functions based on the provided auth object.\n *\n * @param authObject - An object containing authentication-related properties and functions.\n *\n * @returns A derived authentication state with helper methods. If the authentication state is invalid, an error is thrown.\n *\n * @remarks\n * This hook inspects session, user, and organization information to determine the current authentication state.\n * It returns an object that includes various properties such as whether the state is loaded, if a user is signed in,\n * session and user identifiers, Organization Roles, and a `has` function for authorization checks.\n * Additionally, it provides `signOut` and `getToken` functions if applicable.\n *\n * @example\n * ```tsx\n * const {\n * isLoaded,\n * isSignedIn,\n * userId,\n * orgId,\n * has,\n * signOut,\n * getToken\n * } = useDerivedAuth(authObject);\n * ```\n */\nexport function useDerivedAuth(\n authObject: any,\n { treatPendingAsSignedOut = true }: PendingSessionOptions = {},\n): UseAuthReturn {\n const { userId, orgId, orgRole, has, signOut, getToken, orgPermissions, factorVerificationAge, sessionClaims } =\n authObject ?? {};\n\n const derivedHas = useCallback(\n (params: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => {\n if (has) {\n return has(params);\n }\n return createCheckAuthorization({\n userId,\n orgId,\n orgRole,\n orgPermissions,\n factorVerificationAge,\n features: ((sessionClaims as JwtPayload | undefined)?.fea as string) || '',\n plans: ((sessionClaims as JwtPayload | undefined)?.pla as string) || '',\n })(params);\n },\n [has, userId, orgId, orgRole, orgPermissions, factorVerificationAge, sessionClaims],\n );\n\n const payload = resolveAuthState({\n authObject: {\n ...authObject,\n getToken,\n signOut,\n has: derivedHas,\n },\n options: {\n treatPendingAsSignedOut,\n },\n });\n\n if (!payload) {\n return errorThrower.throw(invalidStateError);\n }\n\n return payload;\n}\n","import { createContextAndHook } from '@clerk/shared/react';\nimport type {\n ActClaim,\n JwtPayload,\n OrganizationCustomPermissionKey,\n OrganizationCustomRoleKey,\n SessionStatusClaim,\n} from '@clerk/shared/types';\n\nexport type AuthContextValue = {\n userId: string | null | undefined;\n sessionId: string | null | undefined;\n sessionStatus: SessionStatusClaim | null | undefined;\n sessionClaims: JwtPayload | null | undefined;\n actor: ActClaim | null | undefined;\n orgId: string | null | undefined;\n orgRole: OrganizationCustomRoleKey | null | undefined;\n orgSlug: string | null | undefined;\n orgPermissions: OrganizationCustomPermissionKey[] | null | undefined;\n factorVerificationAge: [number, number] | null;\n};\n\nexport const [AuthContext, useAuthContext] = createContextAndHook<AuthContextValue>('AuthContext');\n","import { ClerkInstanceContext, useClerkInstanceContext } from '@clerk/shared/react';\n\nimport type { IsomorphicClerk } from '../isomorphicClerk';\n\nexport const IsomorphicClerkContext = ClerkInstanceContext;\nexport const useIsomorphicClerkContext = useClerkInstanceContext as unknown as () => IsomorphicClerk;\n","export const noClerkProviderError = 'You must wrap your application in a <ClerkProvider> component.';\n\nexport const multipleClerkProvidersError =\n \"You've added multiple <ClerkProvider> components in your React component tree. Wrap your components in a single <ClerkProvider>.\";\n\nexport const multipleChildrenInButtonComponent = (name: string) =>\n `You've passed multiple children components to <${name}/>. You can only pass a single child component or text.`;\n\nexport const invalidStateError =\n 'Invalid state. Feel free to submit a bug or reach out to support here: https://clerk.com/support';\n\nexport const unsupportedNonBrowserDomainOrProxyUrlFunction =\n 'Unsupported usage of isSatellite, domain or proxyUrl. The usage of isSatellite, domain or proxyUrl as function is not supported in non-browser environments.';\n\nexport const userProfilePageRenderedError =\n '<UserProfile.Page /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.';\nexport const userProfileLinkRenderedError =\n '<UserProfile.Link /> component needs to be a direct child of `<UserProfile />` or `<UserButton />`.';\n\nexport const organizationProfilePageRenderedError =\n '<OrganizationProfile.Page /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.';\nexport const organizationProfileLinkRenderedError =\n '<OrganizationProfile.Link /> component needs to be a direct child of `<OrganizationProfile />` or `<OrganizationSwitcher />`.';\n\nexport const customPagesIgnoredComponent = (componentName: string) =>\n `<${componentName} /> can only accept <${componentName}.Page /> and <${componentName}.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;\n\nexport const customPageWrongProps = (componentName: string) =>\n `Missing props. <${componentName}.Page /> component requires the following props: url, label, labelIcon, alongside with children to be rendered inside the page.`;\n\nexport const customLinkWrongProps = (componentName: string) =>\n `Missing props. <${componentName}.Link /> component requires the following props: url, label and labelIcon.`;\n\nexport const useAuthHasRequiresRoleOrPermission =\n 'Missing parameters. `has` from `useAuth` requires a permission or role key to be passed. Example usage: `has({permission: \"org:posts:edit\"`';\n\nexport const noPathProvidedError = (componentName: string) =>\n `The <${componentName}/> component uses path-based routing by default unless a different routing strategy is provided using the \\`routing\\` prop. When path-based routing is used, you need to provide the path where the component is mounted on by using the \\`path\\` prop. Example: <${componentName} path={'/my-path'} />`;\n\nexport const incompatibleRoutingWithPathProvidedError = (componentName: string) =>\n `The \\`path\\` prop will only be respected when the Clerk component uses path-based routing. To resolve this error, pass \\`routing='path'\\` to the <${componentName}/> component, or drop the \\`path\\` prop to switch to hash-based routing. For more details please refer to our docs: https://clerk.com/docs`;\n\nexport const userButtonIgnoredComponent = `<UserButton /> can only accept <UserButton.UserProfilePage />, <UserButton.UserProfileLink /> and <UserButton.MenuItems /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.`;\n\nexport const customMenuItemsIgnoredComponent =\n '<UserButton.MenuItems /> component can only accept <UserButton.Action /> and <UserButton.Link /> as its children. Any other provided component will be ignored. Additionally, please ensure that the component is rendered in a client component.';\n\nexport const userButtonMenuItemsRenderedError =\n '<UserButton.MenuItems /> component needs to be a direct child of `<UserButton />`.';\n\nexport const userButtonMenuActionRenderedError =\n '<UserButton.Action /> component needs to be a direct child of `<UserButton.MenuItems />`.';\n\nexport const userButtonMenuLinkRenderedError =\n '<UserButton.Link /> component needs to be a direct child of `<UserButton.MenuItems />`.';\n\nexport const userButtonMenuItemLinkWrongProps =\n 'Missing props. <UserButton.Link /> component requires the following props: href, label and labelIcon.';\n\nexport const userButtonMenuItemsActionWrongsProps =\n 'Missing props. <UserButton.Action /> component requires the following props: label.';\n","import { useAssertWrappedByClerkProvider as useSharedAssertWrappedByClerkProvider } from '@clerk/shared/react';\n\nimport { errorThrower } from '../errors/errorThrower';\n\nexport const useAssertWrappedByClerkProvider = (source: string): void => {\n useSharedAssertWrappedByClerkProvider(() => {\n errorThrower.throwMissingClerkProviderError({ source });\n });\n};\n","import type { IsomorphicClerk } from '../isomorphicClerk';\n\n/**\n * @internal\n */\nconst clerkLoaded = (isomorphicClerk: IsomorphicClerk) => {\n return new Promise<void>(resolve => {\n const handler = (status: string) => {\n if (['ready', 'degraded'].includes(status)) {\n resolve();\n isomorphicClerk.off('status', handler);\n }\n };\n\n // Register the event listener\n isomorphicClerk.on('status', handler, { notify: true });\n });\n};\n\n/**\n * @internal\n */\nexport const createGetToken = (isomorphicClerk: IsomorphicClerk) => {\n return async (options: any) => {\n await clerkLoaded(isomorphicClerk);\n if (!isomorphicClerk.session) {\n return null;\n }\n return isomorphicClerk.session.getToken(options);\n };\n};\n\n/**\n * @internal\n */\nexport const createSignOut = (isomorphicClerk: IsomorphicClerk) => {\n return async (...args: any) => {\n await clerkLoaded(isomorphicClerk);\n return isomorphicClerk.signOut(...args);\n };\n};\n","import type {\n CreateEmailLinkFlowReturn,\n EmailAddressResource,\n SignInResource,\n SignInStartEmailLinkFlowParams,\n SignUpResource,\n StartEmailLinkFlowParams,\n} from '@clerk/shared/types';\nimport React from 'react';\n\ntype EmailLinkable = SignUpResource | EmailAddressResource | SignInResource;\ntype UseEmailLinkSignInReturn = CreateEmailLinkFlowReturn<SignInStartEmailLinkFlowParams, SignInResource>;\ntype UseEmailLinkSignUpReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, SignUpResource>;\ntype UseEmailLinkEmailAddressReturn = CreateEmailLinkFlowReturn<StartEmailLinkFlowParams, EmailAddressResource>;\n\nfunction useEmailLink(resource: SignInResource): UseEmailLinkSignInReturn;\nfunction useEmailLink(resource: SignUpResource): UseEmailLinkSignUpReturn;\nfunction useEmailLink(resource: EmailAddressResource): UseEmailLinkEmailAddressReturn;\nfunction useEmailLink(\n resource: EmailLinkable,\n): UseEmailLinkSignInReturn | UseEmailLinkSignUpReturn | UseEmailLinkEmailAddressReturn {\n const { startEmailLinkFlow, cancelEmailLinkFlow } = React.useMemo(() => resource.createEmailLinkFlow(), [resource]);\n\n React.useEffect(() => {\n return cancelEmailLinkFlow;\n }, []);\n\n return {\n startEmailLinkFlow,\n cancelEmailLinkFlow,\n } as UseEmailLinkSignInReturn | UseEmailLinkSignUpReturn | UseEmailLinkEmailAddressReturn;\n}\n\nexport { useEmailLink };\n","import { useClientContext } from '@clerk/shared/react';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type { UseSignInReturn } from '@clerk/shared/types';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\n\n/**\n * The `useSignIn()` hook provides access to the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which allows you to check the current state of a sign-in attempt and manage the sign-in flow. You can use this to create a [custom sign-in flow](https://clerk.com/docs/guides/development/custom-flows/overview#sign-in-flow).\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Loaded\"]\n *\n * @example\n * ### Check the current state of a sign-in\n *\n * The following example uses the `useSignIn()` hook to access the [`SignIn`](https://clerk.com/docs/reference/javascript/sign-in) object, which contains the current sign-in attempt status and methods to create a new sign-in attempt. The `isLoaded` property is used to handle the loading state.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/SignInPage.tsx' }}\n * import { useSignIn } from '@clerk/clerk-react'\n *\n * export default function SignInPage() {\n * const { isLoaded, signIn } = useSignIn()\n *\n * if (!isLoaded) {\n * // Handle loading state\n * return null\n * }\n *\n * return <div>The current sign-in attempt status is {signIn?.status}.</div>\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-sign-in.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n *\n * @example\n * ### Create a custom sign-in flow with `useSignIn()`\n *\n * The `useSignIn()` hook can also be used to build fully custom sign-in flows, if Clerk's prebuilt components don't meet your specific needs or if you require more control over the authentication flow. Different sign-in flows include email and password, email and phone codes, email links, and multifactor (MFA). To learn more about using the `useSignIn()` hook to create custom flows, see the [custom flow guides](https://clerk.com/docs/guides/development/custom-flows/overview).\n *\n * ```empty```\n */\nexport const useSignIn = (): UseSignInReturn => {\n useAssertWrappedByClerkProvider('useSignIn');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const client = useClientContext();\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useSignIn'));\n\n if (!client) {\n return { isLoaded: false, signIn: undefined, setActive: undefined };\n }\n\n return {\n isLoaded: true,\n signIn: client.signIn,\n setActive: isomorphicClerk.setActive,\n };\n};\n","import { useClientContext } from '@clerk/shared/react';\nimport { eventMethodCalled } from '@clerk/shared/telemetry';\nimport type { UseSignUpReturn } from '@clerk/shared/types';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from './useAssertWrappedByClerkProvider';\n\n/**\n * The `useSignUp()` hook provides access to the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which allows you to check the current state of a sign-up attempt and manage the sign-up flow. You can use this to create a [custom sign-up flow](https://clerk.com/docs/guides/development/custom-flows/overview#sign-up-flow).\n *\n * @unionReturnHeadings\n * [\"Initialization\", \"Loaded\"]\n *\n * @example\n * ### Check the current state of a sign-up\n *\n * The following example uses the `useSignUp()` hook to access the [`SignUp`](https://clerk.com/docs/reference/javascript/sign-up) object, which contains the current sign-up attempt status and methods to create a new sign-up attempt. The `isLoaded` property is used to handle the loading state.\n *\n * <Tabs items='React,Next.js'>\n * <Tab>\n *\n * ```tsx {{ filename: 'src/pages/SignUpPage.tsx' }}\n * import { useSignUp } from '@clerk/clerk-react'\n *\n * export default function SignUpPage() {\n * const { isLoaded, signUp } = useSignUp()\n *\n * if (!isLoaded) {\n * // Handle loading state\n * return null\n * }\n *\n * return <div>The current sign-up attempt status is {signUp?.status}.</div>\n * }\n * ```\n *\n * </Tab>\n * <Tab>\n *\n * {@include ../../docs/use-sign-up.md#nextjs-01}\n *\n * </Tab>\n * </Tabs>\n *\n * @example\n * ### Create a custom sign-up flow with `useSignUp()`\n *\n * The `useSignUp()` hook can also be used to build fully custom sign-up flows, if Clerk's prebuilt components don't meet your specific needs or if you require more control over the authentication flow. Different sign-up flows include email and password, email and phone codes, email links, and multifactor (MFA). To learn more about using the `useSignUp()` hook to create custom flows, see the [custom flow guides](https://clerk.com/docs/guides/development/custom-flows/overview).\n *\n * ```empty```\n */\nexport const useSignUp = (): UseSignUpReturn => {\n useAssertWrappedByClerkProvider('useSignUp');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n const client = useClientContext();\n\n isomorphicClerk.telemetry?.record(eventMethodCalled('useSignUp'));\n\n if (!client) {\n return { isLoaded: false, signUp: undefined, setActive: undefined };\n }\n\n return {\n isLoaded: true,\n signUp: client.signUp,\n setActive: isomorphicClerk.setActive,\n };\n};\n","export { useAuth } from './useAuth';\nexport { useEmailLink } from './useEmailLink';\nexport { useSignIn } from './useSignIn';\nexport { useSignUp } from './useSignUp';\nexport {\n useClerk,\n useOrganization,\n useOrganizationCreationDefaults,\n useOrganizationList,\n useSessionList,\n useUser,\n useSession,\n useReverification,\n __experimental_useCheckout,\n __experimental_CheckoutProvider,\n __experimental_usePaymentElement,\n __experimental_PaymentElementProvider,\n __experimental_PaymentElement,\n} from '@clerk/shared/react';\nexport type { UseOrganizationCreationDefaultsParams, UseOrganizationCreationDefaultsReturn } from '@clerk/shared/react';\n","import type { LoadedClerk, Without } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useAssertWrappedByClerkProvider } from '../hooks/useAssertWrappedByClerkProvider';\n\nexport const withClerk = <P extends { clerk: LoadedClerk; component?: string }>(\n Component: React.ComponentType<P>,\n displayNameOrOptions?: string | { component: string; renderWhileLoading?: boolean },\n) => {\n const passedDisplayedName =\n typeof displayNameOrOptions === 'string' ? displayNameOrOptions : displayNameOrOptions?.component;\n const displayName = passedDisplayedName || Component.displayName || Component.name || 'Component';\n Component.displayName = displayName;\n\n const options = typeof displayNameOrOptions === 'string' ? undefined : displayNameOrOptions;\n\n const HOC = (props: Without<P, 'clerk'>) => {\n useAssertWrappedByClerkProvider(displayName || 'withClerk');\n\n const clerk = useIsomorphicClerkContext();\n\n if (!clerk.loaded && !options?.renderWhileLoading) {\n return null;\n }\n\n return (\n <Component\n {...(props as P)}\n component={displayName}\n clerk={clerk}\n />\n );\n };\n HOC.displayName = `withClerk(${displayName})`;\n return HOC;\n};\n"],"mappings":"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","names":["eventMethodCalled","eventMethodCalled","useClientContext","eventMethodCalled","useClientContext","eventMethodCalled","React","React"]}
import {
useAssertWrappedByClerkProvider,
useAuth,
useIsomorphicClerkContext,
withClerk
} from "./chunk-4QQOMF5H.mjs";
// src/components/controlComponents.tsx
import { deprecated } from "@clerk/shared/deprecated";
import React from "react";
// src/contexts/SessionContext.tsx
import { SessionContext, useSessionContext } from "@clerk/shared/react";
// src/components/controlComponents.tsx
var SignedIn = ({ children, treatPendingAsSignedOut }) => {
useAssertWrappedByClerkProvider("SignedIn");
const { userId } = useAuth({ treatPendingAsSignedOut });
if (userId) {
return children;
}
return null;
};
var SignedOut = ({ children, treatPendingAsSignedOut }) => {
useAssertWrappedByClerkProvider("SignedOut");
const { userId } = useAuth({ treatPendingAsSignedOut });
if (userId === null) {
return children;
}
return null;
};
var ClerkLoaded = ({ children }) => {
useAssertWrappedByClerkProvider("ClerkLoaded");
const isomorphicClerk = useIsomorphicClerkContext();
if (!isomorphicClerk.loaded) {
return null;
}
return children;
};
var ClerkLoading = ({ children }) => {
useAssertWrappedByClerkProvider("ClerkLoading");
const isomorphicClerk = useIsomorphicClerkContext();
if (isomorphicClerk.status !== "loading") {
return null;
}
return children;
};
var ClerkFailed = ({ children }) => {
useAssertWrappedByClerkProvider("ClerkFailed");
const isomorphicClerk = useIsomorphicClerkContext();
if (isomorphicClerk.status !== "error") {
return null;
}
return children;
};
var ClerkDegraded = ({ children }) => {
useAssertWrappedByClerkProvider("ClerkDegraded");
const isomorphicClerk = useIsomorphicClerkContext();
if (isomorphicClerk.status !== "degraded") {
return null;
}
return children;
};
var Protect = ({ children, fallback, treatPendingAsSignedOut, ...restAuthorizedParams }) => {
useAssertWrappedByClerkProvider("Protect");
const { isLoaded, has, userId } = useAuth({ treatPendingAsSignedOut });
if (!isLoaded) {
return null;
}
const unauthorized = fallback != null ? fallback : null;
const authorized = children;
if (!userId) {
return unauthorized;
}
if (typeof restAuthorizedParams.condition === "function") {
if (restAuthorizedParams.condition(has)) {
return authorized;
}
return unauthorized;
}
if (restAuthorizedParams.role || restAuthorizedParams.permission || restAuthorizedParams.feature || restAuthorizedParams.plan) {
if (has(restAuthorizedParams)) {
return authorized;
}
return unauthorized;
}
return authorized;
};
var RedirectToSignIn = withClerk(({ clerk, ...props }) => {
const { client, session } = clerk;
const hasSignedInSessions = client.signedInSessions ? client.signedInSessions.length > 0 : (
// Compat for clerk-js<5.54.0 (which was released with the `signedInSessions` property)
client.activeSessions && client.activeSessions.length > 0
);
React.useEffect(() => {
if (session === null && hasSignedInSessions) {
void clerk.redirectToAfterSignOut();
} else {
void clerk.redirectToSignIn(props);
}
}, []);
return null;
}, "RedirectToSignIn");
var RedirectToSignUp = withClerk(({ clerk, ...props }) => {
React.useEffect(() => {
void clerk.redirectToSignUp(props);
}, []);
return null;
}, "RedirectToSignUp");
var RedirectToTasks = withClerk(({ clerk, ...props }) => {
React.useEffect(() => {
void clerk.redirectToTasks(props);
}, []);
return null;
}, "RedirectToTasks");
var RedirectToUserProfile = withClerk(({ clerk }) => {
React.useEffect(() => {
deprecated("RedirectToUserProfile", "Use the `redirectToUserProfile()` method instead.");
void clerk.redirectToUserProfile();
}, []);
return null;
}, "RedirectToUserProfile");
var RedirectToOrganizationProfile = withClerk(({ clerk }) => {
React.useEffect(() => {
deprecated("RedirectToOrganizationProfile", "Use the `redirectToOrganizationProfile()` method instead.");
void clerk.redirectToOrganizationProfile();
}, []);
return null;
}, "RedirectToOrganizationProfile");
var RedirectToCreateOrganization = withClerk(({ clerk }) => {
React.useEffect(() => {
deprecated("RedirectToCreateOrganization", "Use the `redirectToCreateOrganization()` method instead.");
void clerk.redirectToCreateOrganization();
}, []);
return null;
}, "RedirectToCreateOrganization");
var AuthenticateWithRedirectCallback = withClerk(
({ clerk, ...handleRedirectCallbackParams }) => {
React.useEffect(() => {
void clerk.handleRedirectCallback(handleRedirectCallbackParams);
}, []);
return null;
},
"AuthenticateWithRedirectCallback"
);
var MultisessionAppSupport = ({ children }) => {
useAssertWrappedByClerkProvider("MultisessionAppSupport");
const session = useSessionContext();
return /* @__PURE__ */ React.createElement(React.Fragment, { key: session ? session.id : "no-users" }, children);
};
export {
SignedIn,
SignedOut,
ClerkLoaded,
ClerkLoading,
ClerkFailed,
ClerkDegraded,
Protect,
RedirectToSignIn,
RedirectToSignUp,
RedirectToTasks,
RedirectToUserProfile,
RedirectToOrganizationProfile,
RedirectToCreateOrganization,
AuthenticateWithRedirectCallback,
MultisessionAppSupport
};
//# sourceMappingURL=chunk-GT2SDNBC.mjs.map
{"version":3,"sources":["../src/components/controlComponents.tsx","../src/contexts/SessionContext.tsx"],"sourcesContent":["import { deprecated } from '@clerk/shared/deprecated';\nimport type {\n HandleOAuthCallbackParams,\n PendingSessionOptions,\n ProtectProps as _ProtectProps,\n} from '@clerk/shared/types';\nimport React from 'react';\n\nimport { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext';\nimport { useSessionContext } from '../contexts/SessionContext';\nimport { useAuth } from '../hooks';\nimport { useAssertWrappedByClerkProvider } from '../hooks/useAssertWrappedByClerkProvider';\nimport type { RedirectToSignInProps, RedirectToSignUpProps, RedirectToTasksProps, WithClerkProp } from '../types';\nimport { withClerk } from './withClerk';\n\nexport const SignedIn = ({ children, treatPendingAsSignedOut }: React.PropsWithChildren<PendingSessionOptions>) => {\n useAssertWrappedByClerkProvider('SignedIn');\n\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (userId) {\n return children;\n }\n return null;\n};\n\nexport const SignedOut = ({ children, treatPendingAsSignedOut }: React.PropsWithChildren<PendingSessionOptions>) => {\n useAssertWrappedByClerkProvider('SignedOut');\n\n const { userId } = useAuth({ treatPendingAsSignedOut });\n if (userId === null) {\n return children;\n }\n return null;\n};\n\nexport const ClerkLoaded = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkLoaded');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (!isomorphicClerk.loaded) {\n return null;\n }\n return children;\n};\n\nexport const ClerkLoading = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkLoading');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'loading') {\n return null;\n }\n return children;\n};\n\nexport const ClerkFailed = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkFailed');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'error') {\n return null;\n }\n return children;\n};\n\nexport const ClerkDegraded = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('ClerkDegraded');\n\n const isomorphicClerk = useIsomorphicClerkContext();\n if (isomorphicClerk.status !== 'degraded') {\n return null;\n }\n return children;\n};\n\nexport type ProtectProps = React.PropsWithChildren<\n _ProtectProps & {\n fallback?: React.ReactNode;\n } & PendingSessionOptions\n>;\n\n/**\n * Use `<Protect/>` in order to prevent unauthenticated or unauthorized users from accessing the children passed to the component.\n *\n * Examples:\n * ```\n * <Protect permission=\"a_permission_key\" />\n * <Protect role=\"a_role_key\" />\n * <Protect condition={(has) => has({permission:\"a_permission_key\"})} />\n * <Protect condition={(has) => has({role:\"a_role_key\"})} />\n * <Protect fallback={<p>Unauthorized</p>} />\n * ```\n */\nexport const Protect = ({ children, fallback, treatPendingAsSignedOut, ...restAuthorizedParams }: ProtectProps) => {\n useAssertWrappedByClerkProvider('Protect');\n\n const { isLoaded, has, userId } = useAuth({ treatPendingAsSignedOut });\n\n /**\n * Avoid flickering children or fallback while clerk is loading sessionId or userId\n */\n if (!isLoaded) {\n return null;\n }\n\n /**\n * Fallback to UI provided by user or `null` if authorization checks failed\n */\n const unauthorized = fallback ?? null;\n\n const authorized = children;\n\n if (!userId) {\n return unauthorized;\n }\n\n /**\n * Check against the results of `has` called inside the callback\n */\n if (typeof restAuthorizedParams.condition === 'function') {\n if (restAuthorizedParams.condition(has)) {\n return authorized;\n }\n return unauthorized;\n }\n\n if (\n restAuthorizedParams.role ||\n restAuthorizedParams.permission ||\n restAuthorizedParams.feature ||\n restAuthorizedParams.plan\n ) {\n if (has(restAuthorizedParams)) {\n return authorized;\n }\n return unauthorized;\n }\n\n /**\n * If neither of the authorization params are passed behave as the `<SignedIn/>`.\n * If fallback is present render that instead of rendering nothing.\n */\n return authorized;\n};\n\nexport const RedirectToSignIn = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToSignInProps>) => {\n const { client, session } = clerk;\n\n const hasSignedInSessions = client.signedInSessions\n ? client.signedInSessions.length > 0\n : // Compat for clerk-js<5.54.0 (which was released with the `signedInSessions` property)\n client.activeSessions && client.activeSessions.length > 0;\n\n React.useEffect(() => {\n if (session === null && hasSignedInSessions) {\n void clerk.redirectToAfterSignOut();\n } else {\n void clerk.redirectToSignIn(props);\n }\n }, []);\n\n return null;\n}, 'RedirectToSignIn');\n\nexport const RedirectToSignUp = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToSignUpProps>) => {\n React.useEffect(() => {\n void clerk.redirectToSignUp(props);\n }, []);\n\n return null;\n}, 'RedirectToSignUp');\n\nexport const RedirectToTasks = withClerk(({ clerk, ...props }: WithClerkProp<RedirectToTasksProps>) => {\n React.useEffect(() => {\n void clerk.redirectToTasks(props);\n }, []);\n\n return null;\n}, 'RedirectToTasks');\n\n/**\n * @function\n * @deprecated Use [`redirectToUserProfile()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-user-profile) instead.\n */\nexport const RedirectToUserProfile = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToUserProfile', 'Use the `redirectToUserProfile()` method instead.');\n void clerk.redirectToUserProfile();\n }, []);\n\n return null;\n}, 'RedirectToUserProfile');\n\n/**\n * @function\n * @deprecated Use [`redirectToOrganizationProfile()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-organization-profile) instead.\n */\nexport const RedirectToOrganizationProfile = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToOrganizationProfile', 'Use the `redirectToOrganizationProfile()` method instead.');\n void clerk.redirectToOrganizationProfile();\n }, []);\n\n return null;\n}, 'RedirectToOrganizationProfile');\n\n/**\n * @function\n * @deprecated Use [`redirectToCreateOrganization()`](https://clerk.com/docs/reference/javascript/clerk#redirect-to-create-organization) instead.\n */\nexport const RedirectToCreateOrganization = withClerk(({ clerk }) => {\n React.useEffect(() => {\n deprecated('RedirectToCreateOrganization', 'Use the `redirectToCreateOrganization()` method instead.');\n void clerk.redirectToCreateOrganization();\n }, []);\n\n return null;\n}, 'RedirectToCreateOrganization');\n\nexport const AuthenticateWithRedirectCallback = withClerk(\n ({ clerk, ...handleRedirectCallbackParams }: WithClerkProp<HandleOAuthCallbackParams>) => {\n React.useEffect(() => {\n void clerk.handleRedirectCallback(handleRedirectCallbackParams);\n }, []);\n\n return null;\n },\n 'AuthenticateWithRedirectCallback',\n);\n\nexport const MultisessionAppSupport = ({ children }: React.PropsWithChildren<unknown>) => {\n useAssertWrappedByClerkProvider('MultisessionAppSupport');\n\n const session = useSessionContext();\n return <React.Fragment key={session ? session.id : 'no-users'}>{children}</React.Fragment>;\n};\n","export { SessionContext, useSessionContext } from '@clerk/shared/react';\n"],"mappings":"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","names":[]}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display