@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/index.mjs CHANGED
@@ -12,10 +12,9 @@ import {
12
12
  RedirectToTasks,
13
13
  RedirectToUserProfile,
14
14
  Show
15
- } from "./chunk-DAD5TWXQ.mjs";
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-3ME65G46.mjs";
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,
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,IAAI,OAAO,WAAW,eAAe,CAAC,OAAO,QAAQ;AACnD,SAAO,SAAS,OAAO,WAAW,cAAc,SAAS;AAC3D;;;ACMA,YAAY,WAAW;AACvB,YAAY,cAAc;AAC1B,YAAY,oBAAoB;AAChC,YAAY,gBAAgB;AAjB5B;AAqBA,IAAI,WAAW,sBAAsB;AAGnC,QAAM,mBAAkB,gBAAW,qBAAqB,UAAhC,mBAAuC;AAC/D,MAAI,mBAAmB,oBAA0B,eAAS;AACxD,YAAQ;AAAA,MACN,6EACyB,eAAe,qBAA2B,aAAO;AAAA,IAE5E;AAAA,EACF;AACF,OAAO;AACL,aAAW,uBAAuB;AAAA,IAChC;AAAA,IACA,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,EACvB;AACF;;;AChCA,SAAS,yCAAyC;;;ACNlD,OAAO,WAAW;AAMX,IAAM,eAAe;AAAA,EAC1B,CAAC,EAAE,OAAO,UAAU,GAAG,MAAM,MAAiE;AAC5F,UAAM;AAAA;AAAA,MAEJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,eAAW,0BAA0B,UAAU,SAAS;AACxD,UAAM,QAAQ,kBAAkB,QAAQ,EAAE,cAAc;AAExD,UAAM,eAAe,MAAM;AACzB,YAAM,OAAoB;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,SAAS,SAAS;AACpB,eAAO,MAAM,WAAW,EAAE,GAAG,MAAM,YAAY,aAAa,CAAC;AAAA,MAC/D;AACA,aAAO,MAAM,iBAAiB;AAAA,QAC5B,GAAG;AAAA,QACH,2BAA2B;AAAA,QAC3B,wBAAwB;AAAA,MAC1B,CAAC;AAAA,IACH;AAEA,UAAM,2BAAoD,OAAM,MAAK;AACnE,UAAI,SAAS,OAAO,UAAU,YAAY,WAAW,OAAO;AAC1D,cAAM,YAAY,MAAM,MAAM,OAAO,EAAE,CAAC;AAAA,MAC1C;AACA,aAAO,aAAa;AAAA,IACtB;AAEA,UAAM,aAAa,EAAE,GAAG,MAAM,SAAS,yBAAyB;AAChE,WAAO,MAAM,aAAa,OAAsC,UAAU;AAAA,EAC5E;AAAA,EACA,EAAE,WAAW,gBAAgB,oBAAoB,KAAK;AACxD;;;AC3DA,OAAOA,YAAW;AAMX,IAAM,2BAA2B;AAAA,EACtC,CAAC,EAAE,OAAO,UAAU,GAAG,MAAM,MAAoD;AAC/E,UAAM,EAAE,aAAa,cAAc,WAAW,GAAG,KAAK,IAAI;AAE1D,eAAW,0BAA0B,UAAU,uBAAuB;AACtE,UAAM,QAAQ,kBAAkB,QAAQ,EAAE,0BAA0B;AAIpE,UAAM,eAAe,YAAY;AAC/B,qBAAe,eAAe;AAC5B,cAAM,MAAM,yBAAyB,EAAE,aAAa,eAAe,OAAU,CAAC;AAAA,MAChF;AACA,WAAK,aAAa;AAAA,IACpB;AAEA,UAAM,2BAAoD,OAAM,MAAK;AACnE,YAAM,YAAa,MAAc,MAAM,OAAO,EAAE,CAAC;AACjD,aAAO,aAAa;AAAA,IACtB;AAEA,UAAM,aAAa,EAAE,GAAG,MAAM,SAAS,yBAAyB;AAChE,WAAOC,OAAM,aAAa,OAAsC,UAAU;AAAA,EAC5E;AAAA,EACA,EAAE,WAAW,sBAAsB,oBAAoB,KAAK;AAC9D;;;AC/BA,SAAS,kBAAkB;AAE3B,OAAOC,YAAW;AAgBX,IAAM,gBAAgB;AAAA,EAC3B,CAAC,EAAE,OAAO,UAAU,GAAG,MAAM,MAAkE;AAC7F,UAAM,EAAE,cAAc,KAAK,WAAW,gBAAgB,cAAc,WAAW,GAAG,KAAK,IAAI;AAE3F,QAAI,gBAAgB;AAClB,iBAAW,kCAAkC,+DAA+D;AAAA,IAC9G;AAEA,eAAW,0BAA0B,UAAU,UAAU;AACzD,UAAM,QAAQ,kBAAkB,QAAQ,EAAE,eAAe;AAEzD,UAAM,eAAe,MACnB,MAAM,QAAQ;AAAA,MACZ;AAAA,MACA,GAAI,cAAc,UAAa,EAAE,UAAU;AAAA,MAC3C,GAAG;AAAA,IACL,CAAC;AACH,UAAM,2BAAoD,OAAM,MAAK;AACnE,YAAM,YAAa,MAAc,MAAM,OAAO,EAAE,CAAC;AACjD,aAAO,aAAa;AAAA,IACtB;AAEA,UAAM,aAAa,EAAE,GAAG,MAAM,SAAS,yBAAyB;AAChE,WAAOC,OAAM,aAAa,OAAsC,UAAU;AAAA,EAC5E;AAAA,EACA,EAAE,WAAW,iBAAiB,oBAAoB,KAAK;AACzD;;;AC3CA,OAAOC,YAAW;AAMX,IAAM,eAAe;AAAA,EAC1B,CAAC,EAAE,OAAO,UAAU,GAAG,MAAM,MAAiE;AAC5F,UAAM;AAAA;AAAA,MAEJ;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAEJ,eAAW,0BAA0B,UAAU,SAAS;AACxD,UAAM,QAAQ,kBAAkB,QAAQ,EAAE,cAAc;AAExD,UAAM,eAAe,MAAM;AACzB,YAAM,OAAoB;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI,SAAS,SAAS;AACpB,eAAO,MAAM,WAAW;AAAA,UACtB,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO,MAAM,iBAAiB;AAAA,QAC5B,GAAG;AAAA,QACH,2BAA2B;AAAA,QAC3B,wBAAwB;AAAA,MAC1B,CAAC;AAAA,IACH;AAEA,UAAM,2BAAoD,OAAM,MAAK;AACnE,UAAI,SAAS,OAAO,UAAU,YAAY,WAAW,OAAO;AAC1D,cAAM,YAAY,MAAM,MAAM,OAAO,EAAE,CAAC;AAAA,MAC1C;AACA,aAAO,aAAa;AAAA,IACtB;AAEA,UAAM,aAAa,EAAE,GAAG,MAAM,SAAS,yBAAyB;AAChE,WAAOC,OAAM,aAAa,OAAsC,UAAU;AAAA,EAC5E;AAAA,EACA,EAAE,WAAW,gBAAgB,oBAAoB,KAAK;AACxD;;;ACjEA,OAAOC,UAAyB,WAAW,cAAc;AAgElD,SAAS,kBAAkB,OAA0C;AAC1E,QAAM,EAAE,eAAe,kBAAkB,iBAAiB,IAAI;AAC9D,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,SAAS,OAAO,KAAK;AAE3B,YAAU,MAAM;AACd,KAAC,YAAY;AAzEjB,UAAAC,KAAA;AA0EM,UAAI,CAAC,MAAM,UAAU,OAAO,SAAS;AACnC;AAAA,MACF;AAEA,aAAO,UAAU;AAKjB,UAAK,OAAO,WAAsB,YAAY;AAC5C,cAAM,OAAO,SAAS;AAAA,UACpB,UAAU,UAAU,WAAW;AAC7B,0BAAc,GAAG,MAAM;AAAA,UACzB;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAGA,UAAI,OAAO,gBAAgB;AACzB,cAAM,OAAO,OAAO,EAAE,UAAU,KAAK,CAAC;AACtC,YAAI,OAAO,WAAW,YAAY;AAChC,gBAAM,OAAO,SAAS;AAAA,YACpB,UAAU,UAAU,WAAW;AAC7B,4BAAc,GAAG,MAAM;AAAA,YACzB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAEA,eAAO,iBAAiB;AAAA,MAC1B;AAEA,UACE,OAAO,WAAW,wBAClB,GAACA,MAAA,OAAO,0BAAP,gBAAAA,IAA8B,MAAM,OAAK,EAAE,aAAa,oBACzD;AAEA,eAAO,iBAAiB;AAAA,MAC1B;AAGA,UAAI,OAAO,gBAAgB;AACzB,cAAM,OAAO,OAAO,EAAE,UAAU,KAAK,CAAC;AACtC,YAAI,OAAO,WAAW,YAAY;AAChC,gBAAM,OAAO,SAAS;AAAA,YACpB,UAAU,UAAU,WAAW;AAC7B,4BAAc,GAAG,MAAM;AAAA,YACzB;AAAA,UACF,CAAC;AACD;AAAA,QACF;AACA,eAAO,iBAAiB;AAAA,MAC1B;AAEA,UAAI,OAAO,WAAW,YAAY;AAChC,cAAM,OAAO,SAAS;AAAA,UACpB,UAAU,UAAU,WAAW;AAC7B,0BAAc,GAAG,MAAM;AAAA,UACzB;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAEA,UAAI,OAAO,WAAW,yBAAyB,OAAO,WAAW,sBAAsB;AAErF,eAAO,iBAAiB;AAAA,MAC1B;AAIA,UAAI,OAAO,mBAAmB,OAAO,iBAAiB;AACpD,cAAM,cAAY,YAAO,oBAAP,mBAAwB,gBAAa,YAAO,oBAAP,mBAAwB;AAC/E,YAAI,WAAW;AAGb,gBAAM,MAAM,UAAU;AAAA,YACpB,SAAS;AAAA,YACT,UAAU,UAAU,WAAW;AAC7B,qBAAO,cAAc,GAAG,MAAM;AAAA,YAChC;AAAA,UACF,CAAC;AACD;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG;AAAA,EACL,GAAG,CAAC,OAAO,MAAM,QAAQ,QAAQ,MAAM,CAAC;AAExC,SACE,gBAAAC,OAAA,cAAC,aAGC,gBAAAA,OAAA,cAAC,SAAI,IAAG,iBAAgB,CAC1B;AAEJ;;;ACxKA,SAAS,6BAA6B;;;ANctC,SAAS,gBAAgB;AAWzB,uBAAuB,EAAE,aAAa,eAAa,CAAC;AACpD,kCAAkC,cAAY;","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
- return elements.map((el) => ({
158
- id: el.id,
159
- mount: (node) => setNodeMap((prev) => new Map(prev).set(String(el.id), node)),
160
- unmount: () => setNodeMap((prev) => {
161
- const newMap = new Map(prev);
162
- newMap.set(String(el.id), null);
163
- return newMap;
164
- }),
165
- portal: () => {
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({ label, labelIcon, children: children2, url });
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({ label, labelIcon, url });
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({ label, labelIcon, href });
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 = prevProps.customPages) == null ? void 0 : _a.length) !== ((_b = newProps.customPages) == null ? void 0 : _b.length);
577
- const customMenuItemsChanged = ((_c = prevProps.customMenuItems) == null ? void 0 : _c.length) !== ((_d = newProps.customMenuItems) == null ? void 0 : _d.length);
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((portal, index) => (0, import_react14.createElement)(portal, { key: index })), (_b = props == null ? void 0 : props.customMenuItemsPortals) == null ? void 0 : _b.map((portal, index) => (0, import_react14.createElement)(portal, { key: index })));
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-snapshot.v20260604052353",
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.mountConfigureSSO(node, props);
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.mountConfigureSSO = (node, props) => {
2410
+ this.__internal_mountConfigureSSO = (node, props) => {
2367
2411
  if (this.clerkjs && this.loaded) {
2368
- this.clerkjs.mountConfigureSSO(node, props);
2412
+ this.clerkjs.__internal_mountConfigureSSO(node, props);
2369
2413
  } else {
2370
2414
  this.premountConfigureSSONodes.set(node, props);
2371
2415
  }
2372
2416
  };
2373
- this.unmountConfigureSSO = (node) => {
2417
+ this.__internal_unmountConfigureSSO = (node) => {
2374
2418
  if (this.clerkjs && this.loaded) {
2375
- this.clerkjs.unmountConfigureSSO(node);
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
- await (0, import_loadClerkJsScript.loadClerkUIScript)({
2958
- ...this.options,
2959
- publishableKey: __privateGet(this, _publishableKey),
2960
- proxyUrl: this.proxyUrl,
2961
- domain: this.domain,
2962
- nonce: this.options.nonce
2963
- });
2964
- if (!global.__internal_ClerkUICtor) {
2965
- throw new Error("Failed to download latest Clerk UI. Contact support@clerk.com.");
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 global.__internal_ClerkUICtor;
3002
+ return void 0;
2968
3003
  }
2969
3004
  get version() {
2970
3005
  var _a;