feat(ui): Expose profile sub components#8654
Conversation
🦋 Changeset detectedLatest commit: a700fea The changes in this PR will be included in the next version bump. This PR includes changesets to release 4 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
!snapshot |
This comment has been minimized.
This comment has been minimized.
|
!snapshot |
This comment has been minimized.
This comment has been minimized.
|
!snapshot |
This comment has been minimized.
This comment has been minimized.
|
!snapshot |
This comment has been minimized.
This comment has been minimized.
|
!snapshot |
|
Hey @alexcarpenter - the snapshot version command generated the following package versions:
Tip: Use the snippet copy button below to quickly install the required packages. npm i @clerk/astro@3.3.0-snapshot.v20260527161602 --save-exact
npm i @clerk/backend@3.4.12-snapshot.v20260527161602 --save-exact
npm i @clerk/chrome-extension@3.1.29-snapshot.v20260527161602 --save-exact
npm i @clerk/clerk-js@6.12.0-snapshot.v20260527161602 --save-exact
npm i @clerk/dev-cli@0.1.1-snapshot.v20260527161602 --save-exact
npm i @clerk/expo@3.2.15-snapshot.v20260527161602 --save-exact
npm i @clerk/expo-passkeys@1.0.28-snapshot.v20260527161602 --save-exact
npm i @clerk/express@2.1.20-snapshot.v20260527161602 --save-exact
npm i @clerk/fastify@3.1.30-snapshot.v20260527161602 --save-exact
npm i @clerk/hono@0.1.30-snapshot.v20260527161602 --save-exact
npm i @clerk/localizations@4.6.7-snapshot.v20260527161602 --save-exact
npm i @clerk/msw@0.0.28-snapshot.v20260527161602 --save-exact
npm i @clerk/nextjs@7.4.0-snapshot.v20260527161602 --save-exact
npm i @clerk/nuxt@2.5.0-snapshot.v20260527161602 --save-exact
npm i @clerk/react@6.7.0-snapshot.v20260527161602 --save-exact
npm i @clerk/react-router@3.3.0-snapshot.v20260527161602 --save-exact
npm i @clerk/shared@4.13.0-snapshot.v20260527161602 --save-exact
npm i @clerk/tanstack-react-start@1.3.0-snapshot.v20260527161602 --save-exact
npm i @clerk/testing@2.0.32-snapshot.v20260527161602 --save-exact
npm i @clerk/ui@1.13.0-snapshot.v20260527161602 --save-exact
npm i @clerk/upgrade@2.0.3-snapshot.v20260527161602 --save-exact
npm i @clerk/vue@2.3.0-snapshot.v20260527161602 --save-exact |
e47d56e to
4c41b6b
Compare
Annotate every exported composed component with a ReactNode return type so the generated .d.ts files are compatible with both React 18 and React 19 consumers. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Export UserProfile and OrganizationProfile as function components with static properties (via Object.assign) instead of plain objects. This matches the existing UserButton pattern and is compatible with React Server Components client references, which support property access on function exports but not on plain object exports. The provider is now the root component itself — consumers write <UserProfile> instead of <UserProfile.Provider>. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The spy returned undefined in jsdom, causing autoAnimate's MutationObserver callback to crash on .addEventListener. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ender React swallows render errors in production mode, so expect(() => render(...)).toThrow() only works with the dev bundle.
…ce exports Move each composed section wrapper into its own file and replace Object.assign compound components with `export * as` namespace exports for tree-shakability.
The store was the original way composed providers received the ModuleManager but was replaced by reading clerk.__internal_moduleManager directly. The store was still populated by ClerkUI but never read in production code.
…ore for moduleManager Move moduleManager access from a public __internal_moduleManager getter on the Clerk class to a WeakMap<object, ModuleManager> inside @clerk/ui. The store is keyed by the Clerk instance, so it is multi-instance safe and automatically cleaned up on GC. This avoids expanding the clerk-js runtime ABI surface that older SDK versions depend on.
…tion factory - Extract createSection factory to eliminate repeated useRequirePage guard pattern across 18 section files (9→4 lines each) - Extract shared BillingSection and APIKeysSection to deduplicate identical components between UserProfile and OrganizationProfile - Memoize useBillingRouter to prevent unnecessary RouteContext consumer re-renders - Change useRequirePage from console.warn to throw for consistent error behavior with other context guards - Remove dead additionalOAuthScopes prop from OrganizationProfileProvider - Add tree-shaking regression tests to enforce per-file module isolation
d534857 to
a700fea
Compare
API Changes Report
Summary
@clerk/uiCurrent version: 1.15.0 Subpath
|
Summary
Exposes
UserProfileandOrganizationProfileas composable sub-components from@clerk/ui/experimental. Lets consumers render individual profile sections (Account, Security, Members, Billing, etc.) outside the full modal/page flow.Approach
composed/directory — each profile gets a Provider that wires up the required context tree (appearance, environment, module manager, routing, flow metadata) so individual section components render standalone.moduleManagerStore— module-level get/set because composed components mount outside the normal component tree and can't inheritModuleManagervia context fromClerkUI.init().stubRouter— minimalRouteContextimplementation delegating toclerk.navigate. Child components calluseRouter()internally but composed pages don't do real routing.StyleCacheProvider— moveddocument.querySelectorfrom module scope into the component body; import-time access breaks SSR.useSafeState— resetisMountedReftotruein effect body; StrictMode cleanup between double-invocation left it permanentlyfalse.Animated— guard against StrictMode double-mount leaving animation refs stale.@clerk/ui/experimentalwith'use client'directive.API
Sub-components available:
Account,Security,Billing,APIKeys(user);General,Members,Billing,APIKeys,ConfigureSSO(org). Fine-grained wrappers also exported (e.g.AccountProfile,SecurityPasskeys).Test plan
🤖 Generated with Claude Code