@clerk/react 6.8.0-snapshot.v20260604052353 → 6.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3ME65G46.mjs → chunk-FQVXBXXF.mjs} +109 -66
- package/dist/chunk-FQVXBXXF.mjs.map +1 -0
- package/dist/{chunk-DAD5TWXQ.mjs → chunk-RRVXNJ3Z.mjs} +21 -30
- package/dist/chunk-RRVXNJ3Z.mjs.map +1 -0
- package/dist/experimental.js +105 -61
- package/dist/experimental.js.map +1 -1
- package/dist/experimental.mjs +1 -1
- package/dist/index.d.mts +2 -6
- package/dist/index.d.ts +2 -6
- package/dist/index.js +124 -91
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -4
- package/dist/index.mjs.map +1 -1
- package/dist/internal.js +124 -89
- package/dist/internal.js.map +1 -1
- package/dist/internal.mjs +2 -2
- package/package.json +4 -4
- package/dist/chunk-3ME65G46.mjs.map +0 -1
- package/dist/chunk-DAD5TWXQ.mjs.map +0 -1
package/dist/index.mjs
CHANGED
|
@@ -12,10 +12,9 @@ import {
|
|
|
12
12
|
RedirectToTasks,
|
|
13
13
|
RedirectToUserProfile,
|
|
14
14
|
Show
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-RRVXNJ3Z.mjs";
|
|
16
16
|
import {
|
|
17
17
|
APIKeys,
|
|
18
|
-
ConfigureSSO,
|
|
19
18
|
CreateOrganization,
|
|
20
19
|
GoogleOneTap,
|
|
21
20
|
OAuthConsent,
|
|
@@ -56,7 +55,7 @@ import {
|
|
|
56
55
|
useUser,
|
|
57
56
|
useWaitlist,
|
|
58
57
|
withClerk
|
|
59
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-FQVXBXXF.mjs";
|
|
60
59
|
import {
|
|
61
60
|
setErrorThrowerOptions
|
|
62
61
|
} from "./chunk-RQWALB2R.mjs";
|
|
@@ -343,7 +342,6 @@ export {
|
|
|
343
342
|
ClerkLoaded,
|
|
344
343
|
ClerkLoading,
|
|
345
344
|
ClerkProvider,
|
|
346
|
-
ConfigureSSO,
|
|
347
345
|
CreateOrganization,
|
|
348
346
|
GoogleOneTap,
|
|
349
347
|
HandleSSOCallback,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/polyfills.ts","../../ui/register/index.mjs","../src/index.ts","../src/components/SignInButton.tsx","../src/components/SignInWithMetamaskButton.tsx","../src/components/SignOutButton.tsx","../src/components/SignUpButton.tsx","../src/components/HandleSSOCallback.tsx","../src/contexts/index.ts"],"sourcesContent":["/**\n * Vite does not define `global` by default\n * One workaround is to use the `define` config prop\n * https://vitejs.dev/config/#define\n * We are solving this in the SDK level to reduce setup steps.\n */\nif (typeof window !== 'undefined' && !window.global) {\n window.global = typeof global === 'undefined' ? window : global;\n}\n\nexport {};\n","/**\n * Register React dependencies for sharing with @clerk/ui's shared variant.\n *\n * Import this module BEFORE loading the ui.shared.browser.js bundle:\n *\n * ```js\n * import '@clerk/ui/register';\n * // Now load clerk-js which will load ui.shared.browser.js\n * ```\n *\n * This enables @clerk/ui to use the host app's React instead of bundling its own,\n * reducing the overall bundle size.\n */\n\nimport * as react from 'react';\nimport * as reactDom from 'react-dom';\nimport * as reactDomClient from 'react-dom/client';\nimport * as jsxRuntime from 'react/jsx-runtime';\n\n// Only register if not already registered to avoid overwriting with potentially\n// different React versions in complex module resolution scenarios.\nif (globalThis.__clerkSharedModules) {\n // Warn if the already-registered React version differs from this import.\n // This could indicate multiple React versions in the bundle, which may cause issues.\n const existingVersion = globalThis.__clerkSharedModules.react?.version;\n if (existingVersion && existingVersion !== react.version) {\n console.warn(\n `[@clerk/ui/register] React version mismatch detected. ` +\n `Already registered: ${existingVersion}, current import: ${react.version}. ` +\n `This may cause issues with the shared @clerk/ui variant.`,\n );\n }\n} else {\n globalThis.__clerkSharedModules = {\n react,\n 'react-dom': reactDom,\n 'react-dom/client': reactDomClient,\n 'react/jsx-runtime': jsxRuntime,\n };\n}\n","import './polyfills';\nimport './types/appearance';\n// Register React on the global shared modules registry.\n// This enables @clerk/ui's shared variant to use the host app's React\n// instead of bundling its own copy, reducing overall bundle size.\nimport '@clerk/ui/register';\n\nimport { setClerkJSLoadingErrorPackageName } from '@clerk/shared/loadClerkJsScript';\n\nimport { setErrorThrowerOptions } from './errors/errorThrower';\n\nexport * from './components';\nexport * from './contexts';\n\nexport * from './hooks';\nexport { getToken } from '@clerk/shared/getToken';\nexport type {\n BrowserClerk,\n BrowserClerkConstructor,\n ClerkProp,\n HeadlessBrowserClerk,\n HeadlessBrowserClerkConstructor,\n IsomorphicClerkOptions,\n} from '@clerk/shared/types';\nexport type { ClerkProviderProps } from './types';\n\nsetErrorThrowerOptions({ packageName: PACKAGE_NAME });\nsetClerkJSLoadingErrorPackageName(PACKAGE_NAME);\n","import type { SignInButtonProps, SignInProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from '../types';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../utils';\nimport { withClerk } from './withClerk';\n\nexport const SignInButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<SignInButtonProps>>) => {\n const {\n // @ts-expect-error - appearance is a valid prop for SignInProps & SignInButtonPropsModal\n appearance,\n getContainer,\n component,\n signUpFallbackRedirectUrl,\n forceRedirectUrl,\n fallbackRedirectUrl,\n signUpForceRedirectUrl,\n mode,\n initialValues,\n withSignUp,\n oauthFlow,\n ...rest\n } = props;\n children = normalizeWithDefaultValue(children, 'Sign in');\n const child = assertSingleChild(children)('SignInButton');\n\n const clickHandler = () => {\n const opts: SignInProps = {\n forceRedirectUrl,\n fallbackRedirectUrl,\n signUpFallbackRedirectUrl,\n signUpForceRedirectUrl,\n initialValues,\n withSignUp,\n oauthFlow,\n };\n\n if (mode === 'modal') {\n return clerk.openSignIn({ ...opts, appearance, getContainer });\n }\n return clerk.redirectToSignIn({\n ...opts,\n signInFallbackRedirectUrl: fallbackRedirectUrl,\n signInForceRedirectUrl: forceRedirectUrl,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n { component: 'SignInButton', renderWhileLoading: true },\n);\n","import React from 'react';\n\nimport type { SignInWithMetamaskButtonProps, WithClerkProp } from '../types';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../utils';\nimport { withClerk } from './withClerk';\n\nexport const SignInWithMetamaskButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<SignInWithMetamaskButtonProps>) => {\n const { redirectUrl, getContainer, component, ...rest } = props;\n\n children = normalizeWithDefaultValue(children, 'Sign in with Metamask');\n const child = assertSingleChild(children)('SignInWithMetamaskButton');\n\n // TODO: Properly fix this code\n // eslint-disable-next-line @typescript-eslint/require-await\n const clickHandler = async () => {\n async function authenticate() {\n await clerk.authenticateWithMetamask({ redirectUrl: redirectUrl || undefined });\n }\n void authenticate();\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n await safeExecute((child as any).props.onClick)(e);\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n { component: 'SignInWithMetamask', renderWhileLoading: true },\n);\n","import { deprecated } from '@clerk/shared/deprecated';\nimport type { SignOutOptions } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from '../types';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../utils';\nimport { withClerk } from './withClerk';\n\nexport type SignOutButtonProps = {\n redirectUrl?: string;\n sessionId?: string;\n /**\n * @deprecated Use the `redirectUrl` and `sessionId` props directly instead.\n */\n signOutOptions?: SignOutOptions;\n children?: React.ReactNode;\n};\n\nexport const SignOutButton = withClerk(\n ({ clerk, children, ...props }: React.PropsWithChildren<WithClerkProp<SignOutButtonProps>>) => {\n const { redirectUrl = '/', sessionId, signOutOptions, getContainer, component, ...rest } = props;\n\n if (signOutOptions) {\n deprecated('SignOutButton `signOutOptions`', 'Use the `redirectUrl` and `sessionId` props directly instead.');\n }\n\n children = normalizeWithDefaultValue(children, 'Sign out');\n const child = assertSingleChild(children)('SignOutButton');\n\n const clickHandler = () =>\n clerk.signOut({\n redirectUrl,\n ...(sessionId !== undefined && { sessionId }),\n ...signOutOptions,\n });\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n await safeExecute((child as any).props.onClick)(e);\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n { component: 'SignOutButton', renderWhileLoading: true },\n);\n","import type { SignUpButtonProps, SignUpProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from '../types';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../utils';\nimport { withClerk } from './withClerk';\n\nexport const SignUpButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<SignUpButtonProps>>) => {\n const {\n // @ts-expect-error - appearance is a valid prop for SignUpProps & SignUpButtonPropsModal\n appearance,\n // @ts-expect-error - unsafeMetadata is a valid prop for SignUpProps & SignUpButtonPropsModal\n unsafeMetadata,\n getContainer,\n component,\n fallbackRedirectUrl,\n forceRedirectUrl,\n signInFallbackRedirectUrl,\n signInForceRedirectUrl,\n mode,\n initialValues,\n oauthFlow,\n ...rest\n } = props;\n\n children = normalizeWithDefaultValue(children, 'Sign up');\n const child = assertSingleChild(children)('SignUpButton');\n\n const clickHandler = () => {\n const opts: SignUpProps = {\n fallbackRedirectUrl,\n forceRedirectUrl,\n signInFallbackRedirectUrl,\n signInForceRedirectUrl,\n initialValues,\n oauthFlow,\n };\n\n if (mode === 'modal') {\n return clerk.openSignUp({\n ...opts,\n appearance,\n unsafeMetadata,\n getContainer,\n });\n }\n\n return clerk.redirectToSignUp({\n ...opts,\n signUpFallbackRedirectUrl: fallbackRedirectUrl,\n signUpForceRedirectUrl: forceRedirectUrl,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n { component: 'SignUpButton', renderWhileLoading: true },\n);\n","import type { SetActiveNavigate } from '@clerk/shared/types';\nimport React, { type ReactNode, useEffect, useRef } from 'react';\n\nimport { useClerk, useSignIn, useSignUp } from '../hooks';\n\nexport interface HandleSSOCallbackProps {\n /**\n * Called when the SSO callback is complete and a session has been created.\n */\n navigateToApp: (...params: Parameters<SetActiveNavigate>) => void;\n /**\n * Called when a sign-in requires additional verification, or a sign-up is transfered to a sign-in that requires\n * additional verification.\n */\n navigateToSignIn: () => void;\n /**\n * Called when a sign-in is transfered to a sign-up that requires additional verification.\n */\n navigateToSignUp: () => void;\n}\n\n/**\n * Use this component when building custom UI to handle the SSO callback and navigate to the appropriate page based on\n * the status of the sign-in or sign-up. By default, this component might render a captcha element to handle captchas\n * when required by the Clerk API.\n *\n * @example\n * ```tsx\n * import { HandleSSOCallback } from '@clerk/react';\n * import { useNavigate } from 'react-router';\n *\n * export default function Page() {\n * const navigate = useNavigate();\n *\n * return (\n * <HandleSSOCallback\n * navigateToApp={({ session, decorateUrl }) => {\n * if (session?.currentTask) {\n * const destination = decorateUrl(`/onboarding/${session?.currentTask.key}`);\n * if (destination.startsWith('http')) {\n * window.location.href = destination;\n * return;\n * }\n * navigate(destination);\n * return;\n * }\n *\n * const destination = decorateUrl('/dashboard');\n * if (destination.startsWith('http')) {\n * window.location.href = destination;\n * return;\n * }\n * navigate(destination);\n * }}\n * navigateToSignIn={() => {\n * navigate('/sign-in');\n * }}\n * navigateToSignUp={() => {\n * navigate('/sign-up');\n * }}\n * />\n * );\n * }\n * ```\n */\nexport function HandleSSOCallback(props: HandleSSOCallbackProps): ReactNode {\n const { navigateToApp, navigateToSignIn, navigateToSignUp } = props;\n const clerk = useClerk();\n const { signIn } = useSignIn();\n const { signUp } = useSignUp();\n const hasRun = useRef(false);\n\n useEffect(() => {\n (async () => {\n if (!clerk.loaded || hasRun.current) {\n return;\n }\n // Prevent re-running this effect if the page is re-rendered during session activation (such as on Next.js).\n hasRun.current = true;\n\n // If this was a sign-in, and it's complete, there's nothing else to do.\n // Note: We perform a cast here to prevent TypeScript from narrowing the type of signIn.status. TypeScript\n // doesn't understand that the status can be mutated during the execution of this function.\n if ((signIn.status as string) === 'complete') {\n await signIn.finalize({\n navigate: async (...params) => {\n navigateToApp(...params);\n },\n });\n return;\n }\n\n // If the sign-up used an existing account, transfer it to a sign-in.\n if (signUp.isTransferable) {\n await signIn.create({ transfer: true });\n if (signIn.status === 'complete') {\n await signIn.finalize({\n navigate: async (...params) => {\n navigateToApp(...params);\n },\n });\n return;\n }\n // The sign-in requires additional verification, so we need to navigate to the sign-in page.\n return navigateToSignIn();\n }\n\n if (\n signIn.status === 'needs_first_factor' &&\n !signIn.supportedFirstFactors?.every(f => f.strategy === 'enterprise_sso')\n ) {\n // The sign-in requires the use of a configured first factor, so navigate to the sign-in page.\n return navigateToSignIn();\n }\n\n // If the sign-in used an external account not associated with an existing user, create a sign-up.\n if (signIn.isTransferable) {\n await signUp.create({ transfer: true });\n if (signUp.status === 'complete') {\n await signUp.finalize({\n navigate: async (...params) => {\n navigateToApp(...params);\n },\n });\n return;\n }\n return navigateToSignUp();\n }\n\n if (signUp.status === 'complete') {\n await signUp.finalize({\n navigate: async (...params) => {\n navigateToApp(...params);\n },\n });\n return;\n }\n\n if (signIn.status === 'needs_second_factor' || signIn.status === 'needs_new_password') {\n // The sign-in requires a MFA token or a new password, so navigate to the sign-in page.\n return navigateToSignIn();\n }\n\n // The external account used to sign-in or sign-up was already associated with an existing user and active\n // session on this client, so activate the session and navigate to the application.\n if (signIn.existingSession || signUp.existingSession) {\n const sessionId = signIn.existingSession?.sessionId || signUp.existingSession?.sessionId;\n if (sessionId) {\n // Because we're activating a session that's not the result of a sign-in or sign-up, we need to use the\n // Clerk `setActive` API instead of the `finalize` API.\n await clerk.setActive({\n session: sessionId,\n navigate: async (...params) => {\n return navigateToApp(...params);\n },\n });\n return;\n }\n }\n })();\n }, [clerk, clerk.loaded, signIn, signUp]);\n\n return (\n <div>\n {/* Because a sign-in transferred to a sign-up might require captcha verification, make sure to render the\n captcha element. */}\n <div id='clerk-captcha' />\n </div>\n );\n}\n","export { ClerkProvider } from './ClerkProvider';\nexport { UNSAFE_PortalProvider } from '@clerk/shared/react';\n"],"mappings":"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","names":["React","React","React","React","React","React","React","_a","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/polyfills.ts","../../ui/register/index.mjs","../src/index.ts","../src/components/SignInButton.tsx","../src/components/SignInWithMetamaskButton.tsx","../src/components/SignOutButton.tsx","../src/components/SignUpButton.tsx","../src/components/HandleSSOCallback.tsx","../src/contexts/index.ts"],"sourcesContent":["/**\n * Vite does not define `global` by default\n * One workaround is to use the `define` config prop\n * https://vitejs.dev/config/#define\n * We are solving this in the SDK level to reduce setup steps.\n */\nif (typeof window !== 'undefined' && !window.global) {\n window.global = typeof global === 'undefined' ? window : global;\n}\n\nexport {};\n","/**\n * Register React dependencies for sharing with @clerk/ui's shared variant.\n *\n * Import this module BEFORE loading the ui.shared.browser.js bundle:\n *\n * ```js\n * import '@clerk/ui/register';\n * // Now load clerk-js which will load ui.shared.browser.js\n * ```\n *\n * This enables @clerk/ui to use the host app's React instead of bundling its own,\n * reducing the overall bundle size.\n */\n\nimport * as react from 'react';\nimport * as reactDom from 'react-dom';\nimport * as reactDomClient from 'react-dom/client';\nimport * as jsxRuntime from 'react/jsx-runtime';\n\n// Only register if not already registered to avoid overwriting with potentially\n// different React versions in complex module resolution scenarios.\nif (globalThis.__clerkSharedModules) {\n // Warn if the already-registered React version differs from this import.\n // This could indicate multiple React versions in the bundle, which may cause issues.\n const existingVersion = globalThis.__clerkSharedModules.react?.version;\n if (existingVersion && existingVersion !== react.version) {\n console.warn(\n `[@clerk/ui/register] React version mismatch detected. ` +\n `Already registered: ${existingVersion}, current import: ${react.version}. ` +\n `This may cause issues with the shared @clerk/ui variant.`,\n );\n }\n} else {\n globalThis.__clerkSharedModules = {\n react,\n 'react-dom': reactDom,\n 'react-dom/client': reactDomClient,\n 'react/jsx-runtime': jsxRuntime,\n };\n}\n","import './polyfills';\nimport './types/appearance';\n// Register React on the global shared modules registry.\n// This enables @clerk/ui's shared variant to use the host app's React\n// instead of bundling its own copy, reducing overall bundle size.\nimport '@clerk/ui/register';\n\nimport { setClerkJSLoadingErrorPackageName } from '@clerk/shared/loadClerkJsScript';\n\nimport { setErrorThrowerOptions } from './errors/errorThrower';\n\nexport * from './components';\nexport * from './contexts';\n\nexport * from './hooks';\nexport { getToken } from '@clerk/shared/getToken';\nexport type {\n BrowserClerk,\n BrowserClerkConstructor,\n ClerkProp,\n HeadlessBrowserClerk,\n HeadlessBrowserClerkConstructor,\n IsomorphicClerkOptions,\n} from '@clerk/shared/types';\nexport type { ClerkProviderProps } from './types';\n\nsetErrorThrowerOptions({ packageName: PACKAGE_NAME });\nsetClerkJSLoadingErrorPackageName(PACKAGE_NAME);\n","import type { SignInButtonProps, SignInProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from '../types';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../utils';\nimport { withClerk } from './withClerk';\n\nexport const SignInButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<SignInButtonProps>>) => {\n const {\n // @ts-expect-error - appearance is a valid prop for SignInProps & SignInButtonPropsModal\n appearance,\n getContainer,\n component,\n signUpFallbackRedirectUrl,\n forceRedirectUrl,\n fallbackRedirectUrl,\n signUpForceRedirectUrl,\n mode,\n initialValues,\n withSignUp,\n oauthFlow,\n ...rest\n } = props;\n children = normalizeWithDefaultValue(children, 'Sign in');\n const child = assertSingleChild(children)('SignInButton');\n\n const clickHandler = () => {\n const opts: SignInProps = {\n forceRedirectUrl,\n fallbackRedirectUrl,\n signUpFallbackRedirectUrl,\n signUpForceRedirectUrl,\n initialValues,\n withSignUp,\n oauthFlow,\n };\n\n if (mode === 'modal') {\n return clerk.openSignIn({ ...opts, appearance, getContainer });\n }\n return clerk.redirectToSignIn({\n ...opts,\n signInFallbackRedirectUrl: fallbackRedirectUrl,\n signInForceRedirectUrl: forceRedirectUrl,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n { component: 'SignInButton', renderWhileLoading: true },\n);\n","import React from 'react';\n\nimport type { SignInWithMetamaskButtonProps, WithClerkProp } from '../types';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../utils';\nimport { withClerk } from './withClerk';\n\nexport const SignInWithMetamaskButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<SignInWithMetamaskButtonProps>) => {\n const { redirectUrl, getContainer, component, ...rest } = props;\n\n children = normalizeWithDefaultValue(children, 'Sign in with Metamask');\n const child = assertSingleChild(children)('SignInWithMetamaskButton');\n\n // TODO: Properly fix this code\n // eslint-disable-next-line @typescript-eslint/require-await\n const clickHandler = async () => {\n async function authenticate() {\n await clerk.authenticateWithMetamask({ redirectUrl: redirectUrl || undefined });\n }\n void authenticate();\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n await safeExecute((child as any).props.onClick)(e);\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n { component: 'SignInWithMetamask', renderWhileLoading: true },\n);\n","import { deprecated } from '@clerk/shared/deprecated';\nimport type { SignOutOptions } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from '../types';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../utils';\nimport { withClerk } from './withClerk';\n\nexport type SignOutButtonProps = {\n redirectUrl?: string;\n sessionId?: string;\n /**\n * @deprecated Use the `redirectUrl` and `sessionId` props directly instead.\n */\n signOutOptions?: SignOutOptions;\n children?: React.ReactNode;\n};\n\nexport const SignOutButton = withClerk(\n ({ clerk, children, ...props }: React.PropsWithChildren<WithClerkProp<SignOutButtonProps>>) => {\n const { redirectUrl = '/', sessionId, signOutOptions, getContainer, component, ...rest } = props;\n\n if (signOutOptions) {\n deprecated('SignOutButton `signOutOptions`', 'Use the `redirectUrl` and `sessionId` props directly instead.');\n }\n\n children = normalizeWithDefaultValue(children, 'Sign out');\n const child = assertSingleChild(children)('SignOutButton');\n\n const clickHandler = () =>\n clerk.signOut({\n redirectUrl,\n ...(sessionId !== undefined && { sessionId }),\n ...signOutOptions,\n });\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n await safeExecute((child as any).props.onClick)(e);\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n { component: 'SignOutButton', renderWhileLoading: true },\n);\n","import type { SignUpButtonProps, SignUpProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport type { WithClerkProp } from '../types';\nimport { assertSingleChild, normalizeWithDefaultValue, safeExecute } from '../utils';\nimport { withClerk } from './withClerk';\n\nexport const SignUpButton = withClerk(\n ({ clerk, children, ...props }: WithClerkProp<React.PropsWithChildren<SignUpButtonProps>>) => {\n const {\n // @ts-expect-error - appearance is a valid prop for SignUpProps & SignUpButtonPropsModal\n appearance,\n // @ts-expect-error - unsafeMetadata is a valid prop for SignUpProps & SignUpButtonPropsModal\n unsafeMetadata,\n getContainer,\n component,\n fallbackRedirectUrl,\n forceRedirectUrl,\n signInFallbackRedirectUrl,\n signInForceRedirectUrl,\n mode,\n initialValues,\n oauthFlow,\n ...rest\n } = props;\n\n children = normalizeWithDefaultValue(children, 'Sign up');\n const child = assertSingleChild(children)('SignUpButton');\n\n const clickHandler = () => {\n const opts: SignUpProps = {\n fallbackRedirectUrl,\n forceRedirectUrl,\n signInFallbackRedirectUrl,\n signInForceRedirectUrl,\n initialValues,\n oauthFlow,\n };\n\n if (mode === 'modal') {\n return clerk.openSignUp({\n ...opts,\n appearance,\n unsafeMetadata,\n getContainer,\n });\n }\n\n return clerk.redirectToSignUp({\n ...opts,\n signUpFallbackRedirectUrl: fallbackRedirectUrl,\n signUpForceRedirectUrl: forceRedirectUrl,\n });\n };\n\n const wrappedChildClickHandler: React.MouseEventHandler = async e => {\n if (child && typeof child === 'object' && 'props' in child) {\n await safeExecute(child.props.onClick)(e);\n }\n return clickHandler();\n };\n\n const childProps = { ...rest, onClick: wrappedChildClickHandler };\n return React.cloneElement(child as React.ReactElement<unknown>, childProps);\n },\n { component: 'SignUpButton', renderWhileLoading: true },\n);\n","import type { SetActiveNavigate } from '@clerk/shared/types';\nimport React, { type ReactNode, useEffect, useRef } from 'react';\n\nimport { useClerk, useSignIn, useSignUp } from '../hooks';\n\nexport interface HandleSSOCallbackProps {\n /**\n * Called when the SSO callback is complete and a session has been created.\n */\n navigateToApp: (...params: Parameters<SetActiveNavigate>) => void;\n /**\n * Called when a sign-in requires additional verification, or a sign-up is transfered to a sign-in that requires\n * additional verification.\n */\n navigateToSignIn: () => void;\n /**\n * Called when a sign-in is transfered to a sign-up that requires additional verification.\n */\n navigateToSignUp: () => void;\n}\n\n/**\n * Use this component when building custom UI to handle the SSO callback and navigate to the appropriate page based on\n * the status of the sign-in or sign-up. By default, this component might render a captcha element to handle captchas\n * when required by the Clerk API.\n *\n * @example\n * ```tsx\n * import { HandleSSOCallback } from '@clerk/react';\n * import { useNavigate } from 'react-router';\n *\n * export default function Page() {\n * const navigate = useNavigate();\n *\n * return (\n * <HandleSSOCallback\n * navigateToApp={({ session, decorateUrl }) => {\n * if (session?.currentTask) {\n * const destination = decorateUrl(`/onboarding/${session?.currentTask.key}`);\n * if (destination.startsWith('http')) {\n * window.location.href = destination;\n * return;\n * }\n * navigate(destination);\n * return;\n * }\n *\n * const destination = decorateUrl('/dashboard');\n * if (destination.startsWith('http')) {\n * window.location.href = destination;\n * return;\n * }\n * navigate(destination);\n * }}\n * navigateToSignIn={() => {\n * navigate('/sign-in');\n * }}\n * navigateToSignUp={() => {\n * navigate('/sign-up');\n * }}\n * />\n * );\n * }\n * ```\n */\nexport function HandleSSOCallback(props: HandleSSOCallbackProps): ReactNode {\n const { navigateToApp, navigateToSignIn, navigateToSignUp } = props;\n const clerk = useClerk();\n const { signIn } = useSignIn();\n const { signUp } = useSignUp();\n const hasRun = useRef(false);\n\n useEffect(() => {\n (async () => {\n if (!clerk.loaded || hasRun.current) {\n return;\n }\n // Prevent re-running this effect if the page is re-rendered during session activation (such as on Next.js).\n hasRun.current = true;\n\n // If this was a sign-in, and it's complete, there's nothing else to do.\n // Note: We perform a cast here to prevent TypeScript from narrowing the type of signIn.status. TypeScript\n // doesn't understand that the status can be mutated during the execution of this function.\n if ((signIn.status as string) === 'complete') {\n await signIn.finalize({\n navigate: async (...params) => {\n navigateToApp(...params);\n },\n });\n return;\n }\n\n // If the sign-up used an existing account, transfer it to a sign-in.\n if (signUp.isTransferable) {\n await signIn.create({ transfer: true });\n if (signIn.status === 'complete') {\n await signIn.finalize({\n navigate: async (...params) => {\n navigateToApp(...params);\n },\n });\n return;\n }\n // The sign-in requires additional verification, so we need to navigate to the sign-in page.\n return navigateToSignIn();\n }\n\n if (\n signIn.status === 'needs_first_factor' &&\n !signIn.supportedFirstFactors?.every(f => f.strategy === 'enterprise_sso')\n ) {\n // The sign-in requires the use of a configured first factor, so navigate to the sign-in page.\n return navigateToSignIn();\n }\n\n // If the sign-in used an external account not associated with an existing user, create a sign-up.\n if (signIn.isTransferable) {\n await signUp.create({ transfer: true });\n if (signUp.status === 'complete') {\n await signUp.finalize({\n navigate: async (...params) => {\n navigateToApp(...params);\n },\n });\n return;\n }\n return navigateToSignUp();\n }\n\n if (signUp.status === 'complete') {\n await signUp.finalize({\n navigate: async (...params) => {\n navigateToApp(...params);\n },\n });\n return;\n }\n\n if (signIn.status === 'needs_second_factor' || signIn.status === 'needs_new_password') {\n // The sign-in requires a MFA token or a new password, so navigate to the sign-in page.\n return navigateToSignIn();\n }\n\n // The external account used to sign-in or sign-up was already associated with an existing user and active\n // session on this client, so activate the session and navigate to the application.\n if (signIn.existingSession || signUp.existingSession) {\n const sessionId = signIn.existingSession?.sessionId || signUp.existingSession?.sessionId;\n if (sessionId) {\n // Because we're activating a session that's not the result of a sign-in or sign-up, we need to use the\n // Clerk `setActive` API instead of the `finalize` API.\n await clerk.setActive({\n session: sessionId,\n navigate: async (...params) => {\n return navigateToApp(...params);\n },\n });\n return;\n }\n }\n })();\n }, [clerk, clerk.loaded, signIn, signUp]);\n\n return (\n <div>\n {/* Because a sign-in transferred to a sign-up might require captcha verification, make sure to render the\n captcha element. */}\n <div id='clerk-captcha' />\n </div>\n );\n}\n","export { ClerkProvider } from './ClerkProvider';\nexport { UNSAFE_PortalProvider } from '@clerk/shared/react';\n"],"mappings":"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","names":["React","React","React","React","React","React","React","_a","React"]}
|
package/dist/internal.js
CHANGED
|
@@ -154,19 +154,41 @@ var import_react3 = require("react");
|
|
|
154
154
|
var import_react_dom = require("react-dom");
|
|
155
155
|
var useCustomElementPortal = (elements) => {
|
|
156
156
|
const [nodeMap, setNodeMap] = (0, import_react3.useState)(/* @__PURE__ */ new Map());
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const node = nodeMap.get(String(el.id));
|
|
167
|
-
return node ? (0, import_react_dom.createPortal)(el.component, node) : null;
|
|
157
|
+
const nodeMapRef = (0, import_react3.useRef)(nodeMap);
|
|
158
|
+
const elementsRef = (0, import_react3.useRef)(/* @__PURE__ */ new Map());
|
|
159
|
+
const portalsRef = (0, import_react3.useRef)(/* @__PURE__ */ new Map());
|
|
160
|
+
nodeMapRef.current = nodeMap;
|
|
161
|
+
elementsRef.current = new Map(elements.map((el) => [el.id, el.component]));
|
|
162
|
+
const elementIds = new Set(elements.map((el) => el.id));
|
|
163
|
+
portalsRef.current.forEach((_, id) => {
|
|
164
|
+
if (!elementIds.has(id)) {
|
|
165
|
+
portalsRef.current.delete(id);
|
|
168
166
|
}
|
|
169
|
-
})
|
|
167
|
+
});
|
|
168
|
+
return elements.map((el) => {
|
|
169
|
+
const id = el.id;
|
|
170
|
+
const existingPortal = portalsRef.current.get(id);
|
|
171
|
+
if (existingPortal) {
|
|
172
|
+
return existingPortal;
|
|
173
|
+
}
|
|
174
|
+
const portal = () => {
|
|
175
|
+
const node = nodeMapRef.current.get(id);
|
|
176
|
+
const component = elementsRef.current.get(id);
|
|
177
|
+
return node ? (0, import_react_dom.createPortal)(component, node) : null;
|
|
178
|
+
};
|
|
179
|
+
const customElementPortal = {
|
|
180
|
+
id: el.id,
|
|
181
|
+
mount: (node) => setNodeMap((prev) => new Map(prev).set(id, node)),
|
|
182
|
+
unmount: () => setNodeMap((prev) => {
|
|
183
|
+
const newMap = new Map(prev);
|
|
184
|
+
newMap.set(id, null);
|
|
185
|
+
return newMap;
|
|
186
|
+
}),
|
|
187
|
+
portal
|
|
188
|
+
};
|
|
189
|
+
portalsRef.current.set(id, customElementPortal);
|
|
190
|
+
return customElementPortal;
|
|
191
|
+
});
|
|
170
192
|
};
|
|
171
193
|
|
|
172
194
|
// src/utils/useCustomPages.tsx
|
|
@@ -227,6 +249,7 @@ var useCustomPages = (params, options) => {
|
|
|
227
249
|
const { children, LinkComponent, PageComponent, MenuItemsComponent, reorderItemsLabels, componentName } = params;
|
|
228
250
|
const { allowForAnyChildren = false } = options || {};
|
|
229
251
|
const validChildren = [];
|
|
252
|
+
const portalIdCounts = /* @__PURE__ */ new Map();
|
|
230
253
|
import_react5.default.Children.forEach(children, (child) => {
|
|
231
254
|
if (!isThatComponent(child, PageComponent) && !isThatComponent(child, LinkComponent) && !isThatComponent(child, MenuItemsComponent)) {
|
|
232
255
|
if (child && !allowForAnyChildren) {
|
|
@@ -236,11 +259,18 @@ var useCustomPages = (params, options) => {
|
|
|
236
259
|
}
|
|
237
260
|
const { props } = child;
|
|
238
261
|
const { children: children2, label, url, labelIcon } = props;
|
|
262
|
+
const childKey = child.key;
|
|
239
263
|
if (isThatComponent(child, PageComponent)) {
|
|
240
264
|
if (isReorderItem(props, reorderItemsLabels)) {
|
|
241
265
|
validChildren.push({ label });
|
|
242
266
|
} else if (isCustomPage(props)) {
|
|
243
|
-
validChildren.push({
|
|
267
|
+
validChildren.push({
|
|
268
|
+
label,
|
|
269
|
+
labelIcon,
|
|
270
|
+
children: children2,
|
|
271
|
+
url,
|
|
272
|
+
portalId: getCustomPagePortalId("page", props, childKey, portalIdCounts)
|
|
273
|
+
});
|
|
244
274
|
} else {
|
|
245
275
|
(0, import_utils.logErrorInDevMode)(customPageWrongProps(componentName));
|
|
246
276
|
return;
|
|
@@ -248,7 +278,12 @@ var useCustomPages = (params, options) => {
|
|
|
248
278
|
}
|
|
249
279
|
if (isThatComponent(child, LinkComponent)) {
|
|
250
280
|
if (isExternalLink(props)) {
|
|
251
|
-
validChildren.push({
|
|
281
|
+
validChildren.push({
|
|
282
|
+
label,
|
|
283
|
+
labelIcon,
|
|
284
|
+
url,
|
|
285
|
+
portalId: getCustomPagePortalId("link", props, childKey, portalIdCounts)
|
|
286
|
+
});
|
|
252
287
|
} else {
|
|
253
288
|
(0, import_utils.logErrorInDevMode)(customLinkWrongProps(componentName));
|
|
254
289
|
return;
|
|
@@ -260,12 +295,12 @@ var useCustomPages = (params, options) => {
|
|
|
260
295
|
const customLinkLabelIcons = [];
|
|
261
296
|
validChildren.forEach((cp, index) => {
|
|
262
297
|
if (isCustomPage(cp)) {
|
|
263
|
-
customPageContents.push({ component: cp.children, id: index });
|
|
264
|
-
customPageLabelIcons.push({ component: cp.labelIcon, id: index });
|
|
298
|
+
customPageContents.push({ component: cp.children, id: cp.portalId || index });
|
|
299
|
+
customPageLabelIcons.push({ component: cp.labelIcon, id: cp.portalId || index });
|
|
265
300
|
return;
|
|
266
301
|
}
|
|
267
302
|
if (isExternalLink(cp)) {
|
|
268
|
-
customLinkLabelIcons.push({ component: cp.labelIcon, id: index });
|
|
303
|
+
customLinkLabelIcons.push({ component: cp.labelIcon, id: cp.portalId || index });
|
|
269
304
|
}
|
|
270
305
|
});
|
|
271
306
|
const customPageContentsPortals = useCustomElementPortal(customPageContents);
|
|
@@ -283,15 +318,15 @@ var useCustomPages = (params, options) => {
|
|
|
283
318
|
portal: contentPortal,
|
|
284
319
|
mount,
|
|
285
320
|
unmount
|
|
286
|
-
} = customPageContentsPortals.find((p) => p.id === index);
|
|
321
|
+
} = customPageContentsPortals.find((p) => p.id === (cp.portalId || index));
|
|
287
322
|
const {
|
|
288
323
|
portal: labelPortal,
|
|
289
324
|
mount: mountIcon,
|
|
290
325
|
unmount: unmountIcon
|
|
291
|
-
} = customPageLabelIconsPortals.find((p) => p.id === index);
|
|
326
|
+
} = customPageLabelIconsPortals.find((p) => p.id === (cp.portalId || index));
|
|
292
327
|
customPages.push({ label: cp.label, url: cp.url, mount, unmount, mountIcon, unmountIcon });
|
|
293
|
-
customPagesPortals.push(contentPortal);
|
|
294
|
-
customPagesPortals.push(labelPortal);
|
|
328
|
+
customPagesPortals.push({ key: `content:${cp.portalId || index}`, portal: contentPortal });
|
|
329
|
+
customPagesPortals.push({ key: `label:${cp.portalId || index}`, portal: labelPortal });
|
|
295
330
|
return;
|
|
296
331
|
}
|
|
297
332
|
if (isExternalLink(cp)) {
|
|
@@ -299,14 +334,24 @@ var useCustomPages = (params, options) => {
|
|
|
299
334
|
portal: labelPortal,
|
|
300
335
|
mount: mountIcon,
|
|
301
336
|
unmount: unmountIcon
|
|
302
|
-
} = customLinkLabelIconsPortals.find((p) => p.id === index);
|
|
337
|
+
} = customLinkLabelIconsPortals.find((p) => p.id === (cp.portalId || index));
|
|
303
338
|
customPages.push({ label: cp.label, url: cp.url, mountIcon, unmountIcon });
|
|
304
|
-
customPagesPortals.push(labelPortal);
|
|
339
|
+
customPagesPortals.push({ key: `label:${cp.portalId || index}`, portal: labelPortal });
|
|
305
340
|
return;
|
|
306
341
|
}
|
|
307
342
|
});
|
|
308
343
|
return { customPages, customPagesPortals };
|
|
309
344
|
};
|
|
345
|
+
var getCustomPagePortalId = (type, props, key, portalIdCounts) => {
|
|
346
|
+
var _a;
|
|
347
|
+
if (key != null) {
|
|
348
|
+
return `${type}:key:${key}`;
|
|
349
|
+
}
|
|
350
|
+
const baseId = `${type}:${props.label}:${props.url}`;
|
|
351
|
+
const occurrence = (_a = portalIdCounts.get(baseId)) != null ? _a : 0;
|
|
352
|
+
portalIdCounts.set(baseId, occurrence + 1);
|
|
353
|
+
return `${baseId}:${occurrence}`;
|
|
354
|
+
};
|
|
310
355
|
var isReorderItem = (childProps, validItems) => {
|
|
311
356
|
const { children, label, url, labelIcon } = childProps;
|
|
312
357
|
return !children && !url && !labelIcon && validItems.some((v) => v === label);
|
|
@@ -350,6 +395,7 @@ var useCustomMenuItems = ({
|
|
|
350
395
|
const validChildren = [];
|
|
351
396
|
const customMenuItems = [];
|
|
352
397
|
const customMenuItemsPortals = [];
|
|
398
|
+
const portalIdCounts = /* @__PURE__ */ new Map();
|
|
353
399
|
import_react6.default.Children.forEach(children, (child) => {
|
|
354
400
|
if (!isThatComponent(child, MenuItemsComponent) && !isThatComponent(child, UserProfileLinkComponent) && !isThatComponent(child, UserProfilePageComponent)) {
|
|
355
401
|
if (child && !allowForAnyChildren) {
|
|
@@ -369,6 +415,7 @@ var useCustomMenuItems = ({
|
|
|
369
415
|
return;
|
|
370
416
|
}
|
|
371
417
|
const { props: props2 } = child2;
|
|
418
|
+
const childKey = child2.key;
|
|
372
419
|
const { label, labelIcon, href, onClick, open } = props2;
|
|
373
420
|
if (isThatComponent(child2, MenuActionComponent)) {
|
|
374
421
|
if (isReorderItem2(props2, reorderItemsLabels)) {
|
|
@@ -381,12 +428,14 @@ var useCustomMenuItems = ({
|
|
|
381
428
|
if (onClick !== void 0) {
|
|
382
429
|
validChildren.push({
|
|
383
430
|
...baseItem,
|
|
384
|
-
onClick
|
|
431
|
+
onClick,
|
|
432
|
+
portalId: getCustomMenuItemPortalId("action", props2, childKey, portalIdCounts)
|
|
385
433
|
});
|
|
386
434
|
} else if (open !== void 0) {
|
|
387
435
|
validChildren.push({
|
|
388
436
|
...baseItem,
|
|
389
|
-
open: open.startsWith("/") ? open : `/${open}
|
|
437
|
+
open: open.startsWith("/") ? open : `/${open}`,
|
|
438
|
+
portalId: getCustomMenuItemPortalId("action", props2, childKey, portalIdCounts)
|
|
390
439
|
});
|
|
391
440
|
} else {
|
|
392
441
|
(0, import_utils2.logErrorInDevMode)("Custom menu item must have either onClick or open property");
|
|
@@ -399,7 +448,12 @@ var useCustomMenuItems = ({
|
|
|
399
448
|
}
|
|
400
449
|
if (isThatComponent(child2, MenuLinkComponent)) {
|
|
401
450
|
if (isExternalLink2(props2)) {
|
|
402
|
-
validChildren.push({
|
|
451
|
+
validChildren.push({
|
|
452
|
+
label,
|
|
453
|
+
labelIcon,
|
|
454
|
+
href,
|
|
455
|
+
portalId: getCustomMenuItemPortalId("link", props2, childKey, portalIdCounts)
|
|
456
|
+
});
|
|
403
457
|
} else {
|
|
404
458
|
(0, import_utils2.logErrorInDevMode)(userButtonMenuItemLinkWrongProps);
|
|
405
459
|
return;
|
|
@@ -411,10 +465,10 @@ var useCustomMenuItems = ({
|
|
|
411
465
|
const customLinkLabelIcons = [];
|
|
412
466
|
validChildren.forEach((mi, index) => {
|
|
413
467
|
if (isCustomMenuItem(mi)) {
|
|
414
|
-
customMenuItemLabelIcons.push({ component: mi.labelIcon, id: index });
|
|
468
|
+
customMenuItemLabelIcons.push({ component: mi.labelIcon, id: mi.portalId || index });
|
|
415
469
|
}
|
|
416
470
|
if (isExternalLink2(mi)) {
|
|
417
|
-
customLinkLabelIcons.push({ component: mi.labelIcon, id: index });
|
|
471
|
+
customLinkLabelIcons.push({ component: mi.labelIcon, id: mi.portalId || index });
|
|
418
472
|
}
|
|
419
473
|
});
|
|
420
474
|
const customMenuItemLabelIconsPortals = useCustomElementPortal(customMenuItemLabelIcons);
|
|
@@ -430,7 +484,7 @@ var useCustomMenuItems = ({
|
|
|
430
484
|
portal: iconPortal,
|
|
431
485
|
mount: mountIcon,
|
|
432
486
|
unmount: unmountIcon
|
|
433
|
-
} = customMenuItemLabelIconsPortals.find((p) => p.id === index);
|
|
487
|
+
} = customMenuItemLabelIconsPortals.find((p) => p.id === (mi.portalId || index));
|
|
434
488
|
const menuItem = {
|
|
435
489
|
label: mi.label,
|
|
436
490
|
mountIcon,
|
|
@@ -442,25 +496,36 @@ var useCustomMenuItems = ({
|
|
|
442
496
|
menuItem.open = mi.open;
|
|
443
497
|
}
|
|
444
498
|
customMenuItems.push(menuItem);
|
|
445
|
-
customMenuItemsPortals.push(iconPortal);
|
|
499
|
+
customMenuItemsPortals.push({ key: `icon:${mi.portalId || index}`, portal: iconPortal });
|
|
446
500
|
}
|
|
447
501
|
if (isExternalLink2(mi)) {
|
|
448
502
|
const {
|
|
449
503
|
portal: iconPortal,
|
|
450
504
|
mount: mountIcon,
|
|
451
505
|
unmount: unmountIcon
|
|
452
|
-
} = customLinkLabelIconsPortals.find((p) => p.id === index);
|
|
506
|
+
} = customLinkLabelIconsPortals.find((p) => p.id === (mi.portalId || index));
|
|
453
507
|
customMenuItems.push({
|
|
454
508
|
label: mi.label,
|
|
455
509
|
href: mi.href,
|
|
456
510
|
mountIcon,
|
|
457
511
|
unmountIcon
|
|
458
512
|
});
|
|
459
|
-
customMenuItemsPortals.push(iconPortal);
|
|
513
|
+
customMenuItemsPortals.push({ key: `icon:${mi.portalId || index}`, portal: iconPortal });
|
|
460
514
|
}
|
|
461
515
|
});
|
|
462
516
|
return { customMenuItems, customMenuItemsPortals };
|
|
463
517
|
};
|
|
518
|
+
var getCustomMenuItemPortalId = (type, props, key, portalIdCounts) => {
|
|
519
|
+
var _a;
|
|
520
|
+
if (key != null) {
|
|
521
|
+
return `${type}:key:${key}`;
|
|
522
|
+
}
|
|
523
|
+
const target = props.href || props.open || "";
|
|
524
|
+
const baseId = `${type}:${props.label}:${target}`;
|
|
525
|
+
const occurrence = (_a = portalIdCounts.get(baseId)) != null ? _a : 0;
|
|
526
|
+
portalIdCounts.set(baseId, occurrence + 1);
|
|
527
|
+
return `${baseId}:${occurrence}`;
|
|
528
|
+
};
|
|
464
529
|
var isReorderItem2 = (childProps, validItems) => {
|
|
465
530
|
const { children, label, onClick, labelIcon } = childProps;
|
|
466
531
|
return !children && !onClick && !labelIcon && validItems.some((v) => v === label);
|
|
@@ -567,16 +632,16 @@ var ClerkHostRenderer = class extends import_react9.default.PureComponent {
|
|
|
567
632
|
this.rootRef = import_react9.default.createRef();
|
|
568
633
|
}
|
|
569
634
|
componentDidUpdate(_prevProps) {
|
|
570
|
-
var _a, _b, _c, _d;
|
|
635
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
571
636
|
if (!isMountProps(_prevProps) || !isMountProps(this.props)) {
|
|
572
637
|
return;
|
|
573
638
|
}
|
|
574
|
-
const prevProps = (0, import_object.without)(_prevProps.props, "customPages", "customMenuItems", "children");
|
|
575
|
-
const newProps = (0, import_object.without)(this.props.props, "customPages", "customMenuItems", "children");
|
|
576
|
-
const customPagesChanged = ((_a =
|
|
577
|
-
const customMenuItemsChanged = ((
|
|
578
|
-
const prevMenuItemsWithoutHandlers = stripMenuItemIconHandlers(_prevProps.props.customMenuItems);
|
|
579
|
-
const newMenuItemsWithoutHandlers = stripMenuItemIconHandlers(this.props.props.customMenuItems);
|
|
639
|
+
const prevProps = (0, import_object.without)(_prevProps.props || {}, "customPages", "customMenuItems", "children");
|
|
640
|
+
const newProps = (0, import_object.without)(this.props.props || {}, "customPages", "customMenuItems", "children");
|
|
641
|
+
const customPagesChanged = ((_b = (_a = _prevProps.props) == null ? void 0 : _a.customPages) == null ? void 0 : _b.length) !== ((_d = (_c = this.props.props) == null ? void 0 : _c.customPages) == null ? void 0 : _d.length);
|
|
642
|
+
const customMenuItemsChanged = ((_f = (_e = _prevProps.props) == null ? void 0 : _e.customMenuItems) == null ? void 0 : _f.length) !== ((_h = (_g = this.props.props) == null ? void 0 : _g.customMenuItems) == null ? void 0 : _h.length);
|
|
643
|
+
const prevMenuItemsWithoutHandlers = stripMenuItemIconHandlers((_i = _prevProps.props) == null ? void 0 : _i.customMenuItems);
|
|
644
|
+
const newMenuItemsWithoutHandlers = stripMenuItemIconHandlers((_j = this.props.props) == null ? void 0 : _j.customMenuItems);
|
|
580
645
|
if (!(0, import_react8.isDeeplyEqual)(prevProps, newProps) || !(0, import_react8.isDeeplyEqual)(prevMenuItemsWithoutHandlers, newMenuItemsWithoutHandlers) || customPagesChanged || customMenuItemsChanged) {
|
|
581
646
|
if (this.rootRef.current) {
|
|
582
647
|
this.props.updateProps({ node: this.rootRef.current, props: this.props.props });
|
|
@@ -660,7 +725,7 @@ var withClerk = (Component, displayNameOrOptions) => {
|
|
|
660
725
|
// src/components/uiComponents.tsx
|
|
661
726
|
var CustomPortalsRenderer = (props) => {
|
|
662
727
|
var _a, _b;
|
|
663
|
-
return /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, (_a = props == null ? void 0 : props.customPagesPortals) == null ? void 0 : _a.map((
|
|
728
|
+
return /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, (_a = props == null ? void 0 : props.customPagesPortals) == null ? void 0 : _a.map(({ key, portal }) => (0, import_react14.createElement)(portal, { key })), (_b = props == null ? void 0 : props.customMenuItemsPortals) == null ? void 0 : _b.map(({ key, portal }) => (0, import_react14.createElement)(portal, { key })));
|
|
664
729
|
};
|
|
665
730
|
var SignIn = withClerk(
|
|
666
731
|
({ clerk, component, fallback, ...props }) => {
|
|
@@ -1058,27 +1123,6 @@ var APIKeys = withClerk(
|
|
|
1058
1123
|
},
|
|
1059
1124
|
{ component: "ApiKeys", renderWhileLoading: true }
|
|
1060
1125
|
);
|
|
1061
|
-
var ConfigureSSO = withClerk(
|
|
1062
|
-
({ clerk, component, fallback, ...props }) => {
|
|
1063
|
-
const mountingStatus = useWaitForComponentMount(component);
|
|
1064
|
-
const shouldShowFallback = mountingStatus === "rendering" || !clerk.loaded;
|
|
1065
|
-
const rendererRootProps = {
|
|
1066
|
-
...shouldShowFallback && fallback && { style: { display: "none" } }
|
|
1067
|
-
};
|
|
1068
|
-
return /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, shouldShowFallback && fallback, clerk.loaded && /* @__PURE__ */ import_react14.default.createElement(
|
|
1069
|
-
ClerkHostRenderer,
|
|
1070
|
-
{
|
|
1071
|
-
component,
|
|
1072
|
-
mount: clerk.mountConfigureSSO,
|
|
1073
|
-
unmount: clerk.unmountConfigureSSO,
|
|
1074
|
-
updateProps: clerk.__internal_updateProps,
|
|
1075
|
-
props,
|
|
1076
|
-
rootProps: rendererRootProps
|
|
1077
|
-
}
|
|
1078
|
-
));
|
|
1079
|
-
},
|
|
1080
|
-
{ component: "ConfigureSSO", renderWhileLoading: true }
|
|
1081
|
-
);
|
|
1082
1126
|
var OAuthConsent = withClerk(
|
|
1083
1127
|
({ clerk, component, fallback, ...props }) => {
|
|
1084
1128
|
const mountingStatus = useWaitForComponentMount(component);
|
|
@@ -1661,7 +1705,7 @@ if (typeof globalThis.__BUILD_DISABLE_RHC__ === "undefined") {
|
|
|
1661
1705
|
}
|
|
1662
1706
|
var SDK_METADATA = {
|
|
1663
1707
|
name: "@clerk/react",
|
|
1664
|
-
version: "6.8.0
|
|
1708
|
+
version: "6.8.0",
|
|
1665
1709
|
environment: process.env.NODE_ENV
|
|
1666
1710
|
};
|
|
1667
1711
|
var _status, _domain, _proxyUrl, _publishableKey, _eventBus, _stateProxy, _instance, _IsomorphicClerk_instances, waitForClerkJS_fn;
|
|
@@ -1976,7 +2020,7 @@ var _IsomorphicClerk = class _IsomorphicClerk {
|
|
|
1976
2020
|
clerkjs.mountAPIKeys(node, props);
|
|
1977
2021
|
});
|
|
1978
2022
|
this.premountConfigureSSONodes.forEach((props, node) => {
|
|
1979
|
-
clerkjs.
|
|
2023
|
+
clerkjs.__internal_mountConfigureSSO(node, props);
|
|
1980
2024
|
});
|
|
1981
2025
|
this.premountOAuthConsentNodes.forEach((props, node) => {
|
|
1982
2026
|
clerkjs.__internal_mountOAuthConsent(node, props);
|
|
@@ -2363,32 +2407,20 @@ var _IsomorphicClerk = class _IsomorphicClerk {
|
|
|
2363
2407
|
this.premountAPIKeysNodes.delete(node);
|
|
2364
2408
|
}
|
|
2365
2409
|
};
|
|
2366
|
-
this.
|
|
2410
|
+
this.__internal_mountConfigureSSO = (node, props) => {
|
|
2367
2411
|
if (this.clerkjs && this.loaded) {
|
|
2368
|
-
this.clerkjs.
|
|
2412
|
+
this.clerkjs.__internal_mountConfigureSSO(node, props);
|
|
2369
2413
|
} else {
|
|
2370
2414
|
this.premountConfigureSSONodes.set(node, props);
|
|
2371
2415
|
}
|
|
2372
2416
|
};
|
|
2373
|
-
this.
|
|
2417
|
+
this.__internal_unmountConfigureSSO = (node) => {
|
|
2374
2418
|
if (this.clerkjs && this.loaded) {
|
|
2375
|
-
this.clerkjs.
|
|
2419
|
+
this.clerkjs.__internal_unmountConfigureSSO(node);
|
|
2376
2420
|
} else {
|
|
2377
2421
|
this.premountConfigureSSONodes.delete(node);
|
|
2378
2422
|
}
|
|
2379
2423
|
};
|
|
2380
|
-
/**
|
|
2381
|
-
* @deprecated Use `mountConfigureSSO` instead.
|
|
2382
|
-
*/
|
|
2383
|
-
this.__experimental_mountConfigureSSO = (node, props) => {
|
|
2384
|
-
this.mountConfigureSSO(node, props);
|
|
2385
|
-
};
|
|
2386
|
-
/**
|
|
2387
|
-
* @deprecated Use `unmountConfigureSSO` instead.
|
|
2388
|
-
*/
|
|
2389
|
-
this.__experimental_unmountConfigureSSO = (node) => {
|
|
2390
|
-
this.unmountConfigureSSO(node);
|
|
2391
|
-
};
|
|
2392
2424
|
this.__internal_mountOAuthConsent = (node, props) => {
|
|
2393
2425
|
if (this.clerkjs && this.loaded) {
|
|
2394
2426
|
this.clerkjs.__internal_mountOAuthConsent(node, props);
|
|
@@ -2954,17 +2986,20 @@ var _IsomorphicClerk = class _IsomorphicClerk {
|
|
|
2954
2986
|
if ((uiProp || this.options.prefetchUI === false) && !hasInternalUrl) {
|
|
2955
2987
|
return void 0;
|
|
2956
2988
|
}
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2989
|
+
if (!__BUILD_DISABLE_RHC__) {
|
|
2990
|
+
await (0, import_loadClerkJsScript.loadClerkUIScript)({
|
|
2991
|
+
...this.options,
|
|
2992
|
+
publishableKey: __privateGet(this, _publishableKey),
|
|
2993
|
+
proxyUrl: this.proxyUrl,
|
|
2994
|
+
domain: this.domain,
|
|
2995
|
+
nonce: this.options.nonce
|
|
2996
|
+
});
|
|
2997
|
+
if (!global.__internal_ClerkUICtor) {
|
|
2998
|
+
throw new Error("Failed to download latest Clerk UI. Contact support@clerk.com.");
|
|
2999
|
+
}
|
|
3000
|
+
return global.__internal_ClerkUICtor;
|
|
2966
3001
|
}
|
|
2967
|
-
return
|
|
3002
|
+
return void 0;
|
|
2968
3003
|
}
|
|
2969
3004
|
get version() {
|
|
2970
3005
|
var _a;
|