Skip to content

feat(mosaic): extract mosaic into @clerk/mosaic - #9765

Merged
Ephem merged 18 commits into
mainfrom
fredrik/extract-mosaic
Sep 17, 2026
Merged

Ephem merged 18 commits into
mainfrom
fredrik/extract-mosaic

Conversation

@Ephem

@Ephem Ephem commented Sep 15, 2026 •

Copy link
Copy Markdown
Member

Description

This PR moves Mosaic into its own @clerk/mosaic package.

This PR is best reviewed commit-by-commit.

The first commit is what sets up the new package, the second moves Mosaic and cleans up ui, the rest is mostly path updates.

In its current form, merging this PR will also release a first version of Mosaic, which makes it publicly available. In other words, this is also an entry-point PR replacing the strategy in #9338 (for the experimental phase at least).

This PR exports UserButton directly from @clerk/mosaic and lets the <1.0 version and readme indicate that it's experimental. An alternative is to export it from @clerk/mosaic/experimental to make it extra clear, but I don't think that's necessary.

When components are stable, they will move to be exported from the framework packages like @clerk/nextjs. This package will still be the home of the components themselves after that, and ui will move to import them from here and become a compatibility layer for non-React frameworks (is the current plan, until it changes).

⚠️ Before merging, we need to set up trusted publishing for @clerk/mosaic or else the publish will fail.
✅ Trusted publishing has been set up

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Stack created with GitHub Stacks CLI • Give Feedback 💬

@Ephem
Ephem added this pull request to stack #9764 September 15, 2026 13:53
@vercel

vercel Bot commented Sep 15, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
clerk-js-sandbox Ready Ready Preview Sep 17, 2026 3:02pm UTC
swingset Ready Ready Preview Sep 17, 2026 3:02pm UTC

Request Review

@changeset-bot

changeset-bot Bot commented Sep 15, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: eb7f9b4

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 4 packages
Name Type
@clerk/mosaic Minor
@clerk/ui Patch
@clerk/swingset Patch
@clerk/chrome-extension Patch

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

@coderabbitai

coderabbitai Bot commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 469 files, which is 169 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Team

Run ID: a8e051c2-329b-4a97-bf69-c17ca165359c

📥 Commits

Reviewing files that changed from the base of the PR and between 804d3db and eb7f9b4.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (469)
  • .changeset/extract-mosaic-package.md
  • .claude/skills/clerk-monorepo/SKILL.md
  • .claude/skills/clerk-monorepo/references/package-map.md
  • .claude/skills/mosaic/SKILL.md
  • .claude/skills/mosaic/references/controllers.md
  • .claude/skills/mosaic/references/headless.md
  • .claude/skills/mosaic/references/machines.md
  • .claude/skills/mosaic/references/migration.md
  • .claude/skills/mosaic/references/models.md
  • .claude/skills/mosaic/references/motion.md
  • .claude/skills/mosaic/references/stylex.md
  • .claude/skills/mosaic/references/testing.md
  • .github/labeler.yml
  • .gitignore
  • .prettierignore
  • eslint.config.mjs
  • packages/headless/README.md
  • packages/mosaic/LICENSE
  • packages/mosaic/README.md
  • packages/mosaic/bundlewatch.config.json
  • packages/mosaic/package.json
  • packages/mosaic/scripts/check-bundle.mjs
  • packages/mosaic/src/MosaicProvider.tsx
  • packages/mosaic/src/__tests__/MosaicProvider.ssr.test.tsx
  • packages/mosaic/src/__tests__/MosaicProvider.test.tsx
  • packages/mosaic/src/__tests__/props.test.ts
  • packages/mosaic/src/blocks/confirmation/confirmation.controller.test.ts
  • packages/mosaic/src/blocks/confirmation/confirmation.controller.ts
  • packages/mosaic/src/blocks/confirmation/confirmation.test.tsx
  • packages/mosaic/src/blocks/confirmation/confirmation.tsx
  • packages/mosaic/src/blocks/confirmation/index.ts
  • packages/mosaic/src/blocks/destructive/destructive.test.tsx
  • packages/mosaic/src/blocks/destructive/destructive.tsx
  • packages/mosaic/src/blocks/destructive/index.ts
  • packages/mosaic/src/components/avatar/avatar.styles.ts
  • packages/mosaic/src/components/avatar/avatar.test.tsx
  • packages/mosaic/src/components/avatar/avatar.tsx
  • packages/mosaic/src/components/avatar/index.ts
  • packages/mosaic/src/components/badge/badge.styles.ts
  • packages/mosaic/src/components/badge/badge.test.tsx
  • packages/mosaic/src/components/badge/badge.tsx
  • packages/mosaic/src/components/badge/index.ts
  • packages/mosaic/src/components/banner/banner.styles.ts
  • packages/mosaic/src/components/banner/banner.test.tsx
  • packages/mosaic/src/components/banner/banner.tsx
  • packages/mosaic/src/components/banner/index.ts
  • packages/mosaic/src/components/branding/branding.styles.ts
  • packages/mosaic/src/components/branding/branding.test.tsx
  • packages/mosaic/src/components/branding/branding.tsx
  • packages/mosaic/src/components/branding/index.ts
  • packages/mosaic/src/components/button/button.context.ts
  • packages/mosaic/src/components/button/button.markers.stylex.ts
  • packages/mosaic/src/components/button/button.styles.ts
  • packages/mosaic/src/components/button/button.test.tsx
  • packages/mosaic/src/components/button/button.tsx
  • packages/mosaic/src/components/button/index.ts
  • packages/mosaic/src/components/button/submit-button.styles.ts
  • packages/mosaic/src/components/button/submit-button.test.tsx
  • packages/mosaic/src/components/button/submit-button.tsx
  • packages/mosaic/src/components/card/card.markers.stylex.ts
  • packages/mosaic/src/components/card/card.styles.ts
  • packages/mosaic/src/components/card/card.test.tsx
  • packages/mosaic/src/components/card/card.tsx
  • packages/mosaic/src/components/card/index.ts
  • packages/mosaic/src/components/clerk-logo/clerk-logo.tsx
  • packages/mosaic/src/components/clerk-logo/index.ts
  • packages/mosaic/src/components/combobox/combobox.styles.ts
  • packages/mosaic/src/components/combobox/combobox.test.tsx
  • packages/mosaic/src/components/combobox/combobox.tsx
  • packages/mosaic/src/components/combobox/index.ts
  • packages/mosaic/src/components/dialog/alert-dialog.test.tsx
  • packages/mosaic/src/components/dialog/dialog.styles.ts
  • packages/mosaic/src/components/dialog/dialog.test.tsx
  • packages/mosaic/src/components/dialog/dialog.tsx
  • packages/mosaic/src/components/dialog/index.ts
  • packages/mosaic/src/components/dialog/keyboard-inset.ts
  • packages/mosaic/src/components/drawer/drawer.styles.ts
  • packages/mosaic/src/components/drawer/drawer.test.tsx
  • packages/mosaic/src/components/drawer/drawer.tsx
  • packages/mosaic/src/components/drawer/index.ts
  • packages/mosaic/src/components/field/field.context.tsx
  • packages/mosaic/src/components/field/field.ssr.test.tsx
  • packages/mosaic/src/components/field/field.styles.ts
  • packages/mosaic/src/components/field/field.test.tsx
  • packages/mosaic/src/components/field/field.tsx
  • packages/mosaic/src/components/field/index.ts
  • packages/mosaic/src/components/flow/flow.styles.ts
  • packages/mosaic/src/components/flow/flow.test.tsx
  • packages/mosaic/src/components/flow/flow.tsx
  • packages/mosaic/src/components/flow/index.ts
  • packages/mosaic/src/components/heading/heading.styles.ts
  • packages/mosaic/src/components/heading/heading.test.tsx
  • packages/mosaic/src/components/heading/heading.tsx
  • packages/mosaic/src/components/heading/index.ts
  • packages/mosaic/src/components/icon/icon-frame.styles.ts
  • packages/mosaic/src/components/icon/icon-frame.test.tsx
  • packages/mosaic/src/components/icon/icon-frame.tsx
  • packages/mosaic/src/components/icon/icon.markers.stylex.ts
  • packages/mosaic/src/components/icon/icon.styles.ts
  • packages/mosaic/src/components/icon/icon.test.tsx
  • packages/mosaic/src/components/icon/icon.tsx
  • packages/mosaic/src/components/icon/index.ts
  • packages/mosaic/src/components/input-group/index.ts
  • packages/mosaic/src/components/input-group/input-group.context.ts
  • packages/mosaic/src/components/input-group/input-group.styles.ts
  • packages/mosaic/src/components/input-group/input-group.test.tsx
  • packages/mosaic/src/components/input-group/input-group.tsx
  • packages/mosaic/src/components/input/index.ts
  • packages/mosaic/src/components/input/input.styles.ts
  • packages/mosaic/src/components/input/input.test.tsx
  • packages/mosaic/src/components/input/input.tsx
  • packages/mosaic/src/components/item/index.ts
  • packages/mosaic/src/components/item/item.styles.ts
  • packages/mosaic/src/components/item/item.test.tsx
  • packages/mosaic/src/components/item/item.tsx
  • packages/mosaic/src/components/menu/index.ts
  • packages/mosaic/src/components/menu/menu.styles.ts
  • packages/mosaic/src/components/menu/menu.test.tsx
  • packages/mosaic/src/components/menu/menu.tsx
  • packages/mosaic/src/components/otp/index.ts
  • packages/mosaic/src/components/otp/otp.styles.ts
  • packages/mosaic/src/components/otp/otp.test.tsx
  • packages/mosaic/src/components/otp/otp.tsx
  • packages/mosaic/src/components/phone-input/index.ts
  • packages/mosaic/src/components/phone-input/phone-input.styles.ts
  • packages/mosaic/src/components/phone-input/phone-input.test.tsx
  • packages/mosaic/src/components/phone-input/phone-input.tsx
  • packages/mosaic/src/components/popover/index.ts
  • packages/mosaic/src/components/popover/popover.styles.ts
  • packages/mosaic/src/components/popover/popover.test.tsx
  • packages/mosaic/src/components/popover/popover.tsx
  • packages/mosaic/src/components/profile/index.ts
  • packages/mosaic/src/components/profile/profile.styles.ts
  • packages/mosaic/src/components/profile/profile.test.tsx
  • packages/mosaic/src/components/profile/profile.tsx
  • packages/mosaic/src/components/scroll-area/index.ts
  • packages/mosaic/src/components/scroll-area/scroll-area.styles.ts
  • packages/mosaic/src/components/scroll-area/scroll-area.test.ts
  • packages/mosaic/src/components/scroll-area/scroll-area.vars.stylex.ts
  • packages/mosaic/src/components/section/index.ts
  • packages/mosaic/src/components/section/section.markers.stylex.ts
  • packages/mosaic/src/components/section/section.styles.ts
  • packages/mosaic/src/components/section/section.test.tsx
  • packages/mosaic/src/components/section/section.tsx
  • packages/mosaic/src/components/select/index.ts
  • packages/mosaic/src/components/select/select.markers.stylex.ts
  • packages/mosaic/src/components/select/select.styles.ts
  • packages/mosaic/src/components/select/select.test.tsx
  • packages/mosaic/src/components/select/select.tsx
  • packages/mosaic/src/components/spinner/index.ts
  • packages/mosaic/src/components/spinner/spinner.styles.ts
  • packages/mosaic/src/components/spinner/spinner.test.tsx
  • packages/mosaic/src/components/spinner/spinner.tsx
  • packages/mosaic/src/components/text/index.ts
  • packages/mosaic/src/components/text/text.test.tsx
  • packages/mosaic/src/components/text/text.tsx
  • packages/mosaic/src/components/visually-hidden/index.ts
  • packages/mosaic/src/components/visually-hidden/visually-hidden.test.tsx
  • packages/mosaic/src/components/visually-hidden/visually-hidden.tsx
  • packages/mosaic/src/features/reverification/__tests__/reverification.controller.test.tsx
  • packages/mosaic/src/features/reverification/__tests__/reverification.model.test.tsx
  • packages/mosaic/src/features/reverification/__tests__/reverification.test.tsx
  • packages/mosaic/src/features/reverification/__tests__/reverification.view.test.tsx
  • packages/mosaic/src/features/reverification/__tests__/use-reverification-with-state.test.tsx
  • packages/mosaic/src/features/reverification/index.ts
  • packages/mosaic/src/features/reverification/reverification.controller.ts
  • packages/mosaic/src/features/reverification/reverification.messages.ts
  • packages/mosaic/src/features/reverification/reverification.model.tsx
  • packages/mosaic/src/features/reverification/reverification.tsx
  • packages/mosaic/src/features/reverification/reverification.types.ts
  • packages/mosaic/src/features/reverification/reverification.utils.ts
  • packages/mosaic/src/features/reverification/reverification.view.tsx
  • packages/mosaic/src/features/reverification/steps/reverification-backup-code.tsx
  • packages/mosaic/src/features/reverification/steps/reverification-help.tsx
  • packages/mosaic/src/features/reverification/steps/reverification-method-picker.tsx
  • packages/mosaic/src/features/reverification/steps/reverification-otp.tsx
  • packages/mosaic/src/features/reverification/steps/reverification-passkey.tsx
  • packages/mosaic/src/features/reverification/steps/reverification-password.tsx
  • packages/mosaic/src/features/reverification/use-reverification-with-state.ts
  • packages/mosaic/src/features/user-button/__tests__/user-button.controller.test.tsx
  • packages/mosaic/src/features/user-button/__tests__/user-button.integration.test.tsx
  • packages/mosaic/src/features/user-button/__tests__/user-button.layout.test.ts
  • packages/mosaic/src/features/user-button/__tests__/user-button.model.test.tsx
  • packages/mosaic/src/features/user-button/__tests__/user-button.pages.test.tsx
  • packages/mosaic/src/features/user-button/__tests__/user-button.test.tsx
  • packages/mosaic/src/features/user-button/__tests__/user-button.view.test.tsx
  • packages/mosaic/src/features/user-button/user-button.controller.tsx
  • packages/mosaic/src/features/user-button/user-button.layout.ts
  • packages/mosaic/src/features/user-button/user-button.messages.ts
  • packages/mosaic/src/features/user-button/user-button.model.tsx
  • packages/mosaic/src/features/user-button/user-button.pages.tsx
  • packages/mosaic/src/features/user-button/user-button.styles.ts
  • packages/mosaic/src/features/user-button/user-button.tsx
  • packages/mosaic/src/features/user-button/user-button.types.ts
  • packages/mosaic/src/features/user-button/user-button.view.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-add-email.dialog.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-add-email.integration.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-add-phone.controller.test.ts
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-add-phone.dialog.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-add-phone.integration.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-api-keys-panel.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-billing-panel.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-connected-accounts-actions.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-connected-accounts-section.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-contact-list-row.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-delete-section.controller.test.ts
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-delete-section.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-edit-name.controller.test.ts
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-edit-name.dialog.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-edit-password.dialog.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-edit-username.controller.test.ts
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-edit-username.dialog.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-email-actions.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-enterprise-accounts-section.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-password-section.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-phone-actions.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-picture-row.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-profile-panel.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-security-panel.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-verify-email-link.dialog.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-verify-email-sso.dialog.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-web3-actions.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile-web3-wallets-section.view.test.tsx
  • packages/mosaic/src/features/user-profile/__tests__/user-profile.layout.test.ts
  • packages/mosaic/src/features/user-profile/__tests__/user-profile.view.test.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-account-section.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-account-section.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-account-section.types.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-account-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-add-email.controller.test.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-add-email.controller.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-add-email.dialog.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-add-email.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-add-phone.controller.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-add-phone.dialog.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-add-phone.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-contact-list-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-contact-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-edit-name.controller.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-edit-name.dialog.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-edit-username.controller.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-edit-username.dialog.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-email-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-name-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-phone-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-picture-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-username-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-verify-email-link.dialog.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-verify-email-link.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-verify-email-link.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-verify-email-sso.dialog.tsx
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-verify-email-sso.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-account-section/user-profile-verify-email-sso.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-action-menu.tsx
  • packages/mosaic/src/features/user-profile/user-profile-active-devices-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-api-keys-panel.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-api-keys-panel.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-billing-history-section.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-billing-history-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-billing-panel.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-billing-panel.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-connected-account-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-connected-accounts-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-connected-accounts.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-connected-accounts.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-delete-section/user-profile-delete-section.controller.ts
  • packages/mosaic/src/features/user-profile/user-profile-delete-section/user-profile-delete-section.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-delete-section/user-profile-delete-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-enterprise-accounts-section/user-profile-enterprise-account-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-enterprise-accounts-section/user-profile-enterprise-accounts-section.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-enterprise-accounts-section/user-profile-enterprise-accounts-section.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-enterprise-accounts-section/user-profile-enterprise-accounts-section.types.ts
  • packages/mosaic/src/features/user-profile/user-profile-enterprise-accounts-section/user-profile-enterprise-accounts-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-mfa-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-passkeys-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-password-section/user-profile-edit-password.controller.test.ts
  • packages/mosaic/src/features/user-profile/user-profile-password-section/user-profile-edit-password.controller.ts
  • packages/mosaic/src/features/user-profile/user-profile-password-section/user-profile-edit-password.dialog.tsx
  • packages/mosaic/src/features/user-profile/user-profile-password-section/user-profile-password-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-password-section/user-profile-password-section.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-password-section/user-profile-password-section.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-password-section/user-profile-password-section.types.ts
  • packages/mosaic/src/features/user-profile/user-profile-password-section/user-profile-password-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-payment-methods-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-profile-panel.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-profile-panel.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-provider-icon.tsx
  • packages/mosaic/src/features/user-profile/user-profile-security-icon.tsx
  • packages/mosaic/src/features/user-profile/user-profile-security-list.tsx
  • packages/mosaic/src/features/user-profile/user-profile-security-panel.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile-security-panel.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-subscription-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-web3-wallet-row.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-web3-wallets-section.view.tsx
  • packages/mosaic/src/features/user-profile/user-profile-web3-wallets.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile-web3-wallets.styles.ts
  • packages/mosaic/src/features/user-profile/user-profile.layout.ts
  • packages/mosaic/src/features/user-profile/user-profile.messages.ts
  • packages/mosaic/src/features/user-profile/user-profile.types.ts
  • packages/mosaic/src/features/user-profile/user-profile.view.tsx
  • packages/mosaic/src/global.d.ts
  • packages/mosaic/src/hooks/__tests__/useAccessibleWarnings.test.ts
  • packages/mosaic/src/hooks/__tests__/useMeasure.test.tsx
  • packages/mosaic/src/hooks/__tests__/useMosaicSupportEmail.test.ts
  • packages/mosaic/src/hooks/__tests__/useSpinDelay.test.ts
  • packages/mosaic/src/hooks/useAccessibleDescriptionWarning.ts
  • packages/mosaic/src/hooks/useAccessibleNameWarning.ts
  • packages/mosaic/src/hooks/useInView.ts
  • packages/mosaic/src/hooks/useMeasure.ts
  • packages/mosaic/src/hooks/useMosaicEnvironment.ts
  • packages/mosaic/src/hooks/useMosaicRouter.ts
  • packages/mosaic/src/hooks/useMosaicSupportEmail.ts
  • packages/mosaic/src/hooks/useOrganizationListInView.ts
  • packages/mosaic/src/hooks/useSpinDelay.ts
  • packages/mosaic/src/icons/overrides.ts
  • packages/mosaic/src/icons/registry.tsx
  • packages/mosaic/src/index.ts
  • packages/mosaic/src/machine/ADOPTION.md
  • packages/mosaic/src/machine/README.md
  • packages/mosaic/src/machine/__tests__/delete-organization-machine.ts
  • packages/mosaic/src/machine/__tests__/machine.test.ts
  • packages/mosaic/src/machine/__tests__/patterns.test.ts
  • packages/mosaic/src/machine/__tests__/useMachine.test.tsx
  • packages/mosaic/src/machine/__tests__/wizard-migration.test.tsx
  • packages/mosaic/src/machine/assign.ts
  • packages/mosaic/src/machine/createActor.ts
  • packages/mosaic/src/machine/createMachine.ts
  • packages/mosaic/src/machine/setup.ts
  • packages/mosaic/src/machine/types.test-d.ts
  • packages/mosaic/src/machine/types.ts
  • packages/mosaic/src/machine/useMachine.ts
  • packages/mosaic/src/machines/__tests__/firstFactorMachine.test.ts
  • packages/mosaic/src/machines/__tests__/signInMachine.test.ts
  • packages/mosaic/src/machines/__tests__/test-utils.ts
  • packages/mosaic/src/machines/firstFactorMachine.ts
  • packages/mosaic/src/machines/signInMachine.ts
  • packages/mosaic/src/props.test-d.ts
  • packages/mosaic/src/props.ts
  • packages/mosaic/src/styles/index.ts
  • packages/mosaic/src/tokens.stylex.ts
  • packages/mosaic/src/utils/apply-order.test.ts
  • packages/mosaic/src/utils/apply-order.ts
  • packages/mosaic/src/utils/context.ts
  • packages/mosaic/src/utils/focus-outline.styles.ts
  • packages/mosaic/src/utils/focus-outline.test.ts
  • packages/mosaic/src/utils/input.styles.ts
  • packages/mosaic/src/utils/messages.test.tsx
  • packages/mosaic/src/utils/messages.ts
  • packages/mosaic/src/utils/reset.styles.ts
  • packages/mosaic/src/utils/reset.test.tsx
  • packages/mosaic/src/utils/truncateTextWithEndVisible.ts
  • packages/mosaic/src/utils/typography.styles.ts
  • packages/mosaic/src/utils/typography.test.ts
  • packages/mosaic/src/utils/visually-hidden.styles.ts
  • packages/mosaic/src/utils/visually-hidden.test.tsx
  • packages/mosaic/styles.css.d.ts
  • packages/mosaic/stylex-lightningcss.config.mjs
  • packages/mosaic/tsconfig.base.json
  • packages/mosaic/tsconfig.build.json
  • packages/mosaic/tsconfig.json
  • packages/mosaic/tsconfig.test.json
  • packages/mosaic/tsdown.config.mts
  • packages/mosaic/tsdown.css.config.mts
  • packages/mosaic/turbo.json
  • packages/mosaic/vitest.config.mts
  • packages/swingset/CLAUDE.md
  • packages/swingset/README.md
  • packages/swingset/next.config.mjs
  • packages/swingset/package.json
  • packages/swingset/postcss.config.mjs
  • packages/swingset/src/components/StoryEmbed.tsx
  • packages/swingset/src/components/StoryPreview.tsx
  • packages/swingset/src/lib/types.ts
  • packages/swingset/src/stories/avatar.mdx
  • packages/swingset/src/stories/avatar.stories.tsx
  • packages/swingset/src/stories/badge.mdx
  • packages/swingset/src/stories/badge.stories.tsx
  • packages/swingset/src/stories/banner.mdx
  • packages/swingset/src/stories/banner.stories.tsx
  • packages/swingset/src/stories/button.mdx
  • packages/swingset/src/stories/button.stories.tsx
  • packages/swingset/src/stories/card.component.mdx
  • packages/swingset/src/stories/card.component.stories.tsx
  • packages/swingset/src/stories/combobox.stories.tsx
  • packages/swingset/src/stories/confirmation.mdx
  • packages/swingset/src/stories/confirmation.stories.tsx
  • packages/swingset/src/stories/destructive.mdx
  • packages/swingset/src/stories/destructive.stories.tsx
  • packages/swingset/src/stories/dialog.component.mdx
  • packages/swingset/src/stories/dialog.component.stories.tsx
  • packages/swingset/src/stories/drawer.component.mdx
  • packages/swingset/src/stories/drawer.component.stories.tsx
  • packages/swingset/src/stories/field.component.mdx
  • packages/swingset/src/stories/field.component.stories.tsx
  • packages/swingset/src/stories/fixtures/user-profile-add-email.ts
  • packages/swingset/src/stories/fixtures/user-profile-add-phone.ts
  • packages/swingset/src/stories/fixtures/user-profile-connected-accounts.ts
  • packages/swingset/src/stories/fixtures/user-profile-edit-name.ts
  • packages/swingset/src/stories/fixtures/user-profile-edit-password.ts
  • packages/swingset/src/stories/fixtures/user-profile-edit-username.ts
  • packages/swingset/src/stories/fixtures/user-profile-enterprise-accounts.ts
  • packages/swingset/src/stories/fixtures/user-profile-web3-wallets.ts
  • packages/swingset/src/stories/fixtures/user-profile.ts
  • packages/swingset/src/stories/flow.component.mdx
  • packages/swingset/src/stories/flow.component.stories.tsx
  • packages/swingset/src/stories/heading.mdx
  • packages/swingset/src/stories/heading.stories.tsx
  • packages/swingset/src/stories/icon-frame.mdx
  • packages/swingset/src/stories/icon-frame.stories.tsx
  • packages/swingset/src/stories/icon.mdx
  • packages/swingset/src/stories/icon.stories.tsx
  • packages/swingset/src/stories/input-group.mdx
  • packages/swingset/src/stories/input-group.stories.tsx
  • packages/swingset/src/stories/input.mdx
  • packages/swingset/src/stories/input.stories.tsx
  • packages/swingset/src/stories/item.mdx
  • packages/swingset/src/stories/item.stories.tsx
  • packages/swingset/src/stories/menu.component.mdx
  • packages/swingset/src/stories/menu.component.stories.tsx
  • packages/swingset/src/stories/otp.component.mdx
  • packages/swingset/src/stories/otp.component.stories.tsx
  • packages/swingset/src/stories/phone-input.mdx
  • packages/swingset/src/stories/phone-input.stories.tsx
  • packages/swingset/src/stories/popover.component.mdx
  • packages/swingset/src/stories/popover.component.stories.tsx
  • packages/swingset/src/stories/profile.component.mdx
  • packages/swingset/src/stories/profile.component.stories.tsx
  • packages/swingset/src/stories/reverification.mdx
  • packages/swingset/src/stories/reverification.stories.tsx
  • packages/swingset/src/stories/scroll-area.mdx
  • packages/swingset/src/stories/scroll-area.stories.tsx
  • packages/swingset/src/stories/section.mdx
  • packages/swingset/src/stories/section.stories.tsx
  • packages/swingset/src/stories/select.component.mdx
  • packages/swingset/src/stories/select.component.stories.tsx
  • packages/swingset/src/stories/text.mdx
  • packages/swingset/src/stories/text.stories.tsx
  • packages/swingset/src/stories/user-button.mdx
  • packages/swingset/src/stories/user-button.stories.tsx
  • packages/swingset/src/stories/user-profile-account-section.stories.tsx
  • packages/swingset/src/stories/user-profile-active-devices-section.stories.tsx
  • packages/swingset/src/stories/user-profile-api-keys-panel.stories.tsx
  • packages/swingset/src/stories/user-profile-billing-history-section.stories.tsx
  • packages/swingset/src/stories/user-profile-billing-panel.stories.tsx
  • packages/swingset/src/stories/user-profile-connected-accounts-section.stories.tsx
  • packages/swingset/src/stories/user-profile-delete-section.stories.tsx
  • packages/swingset/src/stories/user-profile-enterprise-accounts-section.stories.tsx
  • packages/swingset/src/stories/user-profile-mfa-section.stories.tsx
  • packages/swingset/src/stories/user-profile-passkeys-section.stories.tsx
  • packages/swingset/src/stories/user-profile-password-section.stories.tsx
  • packages/swingset/src/stories/user-profile-payment-methods-section.stories.tsx
  • packages/swingset/src/stories/user-profile-profile-panel.mdx
  • packages/swingset/src/stories/user-profile-profile-panel.stories.tsx
  • packages/swingset/src/stories/user-profile-security-panel.stories.tsx
  • packages/swingset/src/stories/user-profile-subscription-section.stories.tsx
  • packages/swingset/src/stories/user-profile-web3-wallets-section.stories.tsx
  • packages/swingset/src/stories/user-profile.stories.tsx
  • packages/swingset/src/stories/visually-hidden.mdx
  • packages/swingset/src/stories/visually-hidden.stories.tsx
  • packages/swingset/tsconfig.json
  • packages/ui/package.json
  • packages/ui/styles.css.d.ts
  • packages/ui/tsconfig.mosaic.json
  • packages/ui/tsdown.config.mts
  • packages/ui/tsdown.mosaic.config.mts
  • packages/ui/turbo.json
  • packages/ui/vitest.config.mts
  • references/mosaic-architecture.md
  • turbo.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Comment @coderabbitai help to get the list of available commands.

Comment thread packages/mosaic/README.md
@github-actions

github-actions Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-09-17T15:04:40.620Z

Summary

Metric Count
Packages analyzed 19
Packages with changes 1
🔴 Breaking changes 1
🟡 Non-breaking changes 0
🟢 Additions 0

Warning
1 breaking change(s) detected - Major version bump required

🔴 Breaking changes index (1)

Every breaking change, up front. Full diffs are in the package sections below.

Package Subpath Change
@clerk/ui ./styles.css ./styles.css

@clerk/ui

Current version: 1.33.1
Recommended bump: MAJOR → 2.0.0

Subpath ./styles.css

🔴 Breaking Changes (1)

Changed: ./styles.css

Subpath export ./styles.css was removed


Report generated by Break Check

Last ran on eb7f9b4.

Comment thread packages/mosaic/README.md Outdated
Comment thread packages/mosaic/README.md Outdated
Comment thread packages/mosaic/README.md Outdated
### Prerequisites

- Node.js `>=20.9.0` or later
- A Clerk SDK that renders a `ClerkProvider` (`@clerk/react`, `@clerk/nextjs`, …)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure if it's worth mentioning, but installing a version of @clerk/mosaic that references a different version of @clerk/shared than their framework SDK package will result in the "must be rendered under ClerkProvider" error since there are two different ClerkProvider types. So they would need to make sure to install the version of their framework SDK that was published at the same time as @clerk/mosaic.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is very true.. Hmm, I wonder if we should let Mosaic just bundle the shared stuff it needs? It's not much. When we move exports over to the framework packages when they are stable this wont be an issue.

I'll go ahead and do that in this PR tomorrow. 😄

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was tired yesterday when I wrote this, I had the assumption we were only using a few shared helpers that we could specifically bundle to avoid this, but ofc we are using useClerk etc inside Mosaic so that wont help.

Need to think through this some more. Keeping Mosaic and framework packages in sync would be very annoying and opposite to what we want, we want people to be able to pin Mosaic but not the main package. 🤔

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think your original idea of just documenting this was right. This should normally not be a problem, if it is, you do want to resolve it so you don't have duplicate packages. I added a troubleshooting section to the PR with details and how to fix it if you see the error we already have in place for this.


import { mosaicLightningCssTargets } from './stylex-lightningcss.config.mjs';

export default defineConfig({

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can review this later, but I think we need to avoid actually bundling UI components since it makes it more difficult to tree-shake unused code.

Comment on lines +28 to +33
onSuccess: async () => {
const { cp, rm } = await import('node:fs/promises');
await cp('./dist-css/styles.css', './dist/styles.css');
await rm('./dist-css', { recursive: true, force: true });
await rm('./dist/styles.partial.css', { force: true });
await rm('./dist/index.js.map', { force: true });

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for future investigation, this seems like we're holding the bundler wrong

@pkg-pr-new

pkg-pr-new Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@9765

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@9765

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@9765

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@9765

@clerk/electron

npm i https://pkg.pr.new/@clerk/electron@9765

@clerk/electron-passkeys

npm i https://pkg.pr.new/@clerk/electron-passkeys@9765

@clerk/eslint-plugin

npm i https://pkg.pr.new/@clerk/eslint-plugin@9765

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@9765

@clerk/expo-google-signin

npm i https://pkg.pr.new/@clerk/expo-google-signin@9765

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@9765

@clerk/express

npm i https://pkg.pr.new/@clerk/express@9765

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@9765

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@9765

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@9765

@clerk/mosaic

npm i https://pkg.pr.new/@clerk/mosaic@9765

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@9765

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@9765

@clerk/react

npm i https://pkg.pr.new/@clerk/react@9765

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@9765

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@9765

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@9765

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@9765

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@9765

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@9765

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@9765

commit: eb7f9b4

This branch was successfully deployed

2 active deployments
Preview – swingset — eb7f9b47 Deployed Sep 17, 2026 by vercel[bot]
Preview – clerk-js-sandbox — eb7f9b47 Deployed Sep 17, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants