Skip to content

feat(ui): add Mosaic Item component - #9234

Open
alexcarpenter wants to merge 4 commits into
mainfrom
carp/mosaic-item
Open

feat(ui): add Mosaic Item component#9234
alexcarpenter wants to merge 4 commits into
mainfrom
carp/mosaic-item

Conversation

@alexcarpenter

Copy link
Copy Markdown
Member

Summary

Adds a new Item component to Mosaic, styled with StyleX following the Button migration (themeProps + stylex.props + mergeProps, public contract of .cl-* class + data-* axes). The API matches shadcn's Item, composed via dot syntax.

Item is a row for lists of accounts, organizations, and settings (org switcher, account switcher, settings rows).

Parts

  • Item (root) — variant (default | outline | muted), size (default | sm)
  • Item.Mediavariant (default | icon | image)
  • Item.Content, Item.Title, Item.Description, Item.Actions, Item.Footer
  • Item.Group (role="list"), Item.Separator

Notes

  • Polymorphism uses the repo's render prop (via renderElement), not shadcn's asChild. The root's render is typed generically (like Box) so a row can render as a link or button.
  • Interactive hover is derived from render being present (reflected as data-interactive), replacing shadcn's [a]:hover selector: a plain <Item> div is static; a rendered link/button row gets cursor + muted hover.
  • Styles are split into per-slot stylex.create blocks.
  • No Item.Header (dropped per review); Item.Footer retained.
  • Mosaic has no accent token, so hover/muted use --cl-color-muted via color-mix.

Docs

Swingset docs added (item.stories.tsx + item.mdx, Archetype A·compound) and wired into registry.ts / DocsViewer.tsx.

Testing

  • pnpm vitest run (ui) — 8/8 pass
  • tsc --noEmit clean (ui + swingset)
  • eslint clean (all 9 @stylexjs rules)
  • pnpm format clean

@changeset-bot

changeset-bot Bot commented Jul 23, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 497a792

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

This PR includes changesets to release 0 packages

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

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

@vercel

vercel Bot commented Jul 23, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Jul 28, 2026 8:31pm
swingset Ready Ready Preview, Comment Jul 28, 2026 8:31pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a composable Mosaic Item component with typed subcomponents, StyleX styling, polymorphic rendering, ref forwarding, and tests. Exports it through Mosaic barrels, adds Storybook stories and MDX documentation, registers the stories and docs in Swingset, updates Mosaic TypeScript paths and styling documentation, and includes a changeset entry.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

  • clerk/javascript#9221: Extends the same Swingset documentation and story registry mappings for another Mosaic component.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly states the main change: adding the Mosaic Item component.
Description check ✅ Passed The description is directly about the new Mosaic Item component and its docs, styling, and integration work.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (2)
packages/ui/src/mosaic/components/item/index.ts (1)

1-2: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Avoid introducing the Item re-export barrel.

The new directory index.ts adds an unnecessary re-export boundary and the public entry consumes it. Export directly from item.tsx instead to avoid a future circular-dependency edge.

  • packages/ui/src/mosaic/components/item/index.ts#L1-L2: remove the local re-export barrel.
  • packages/ui/src/mosaic/styles/index.ts#L10-L11: re-export from ../components/item/item directly.

As per coding guidelines, “Avoid barrel files (index.ts re-exports) as they can cause circular dependencies.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/mosaic/components/item/index.ts` around lines 1 - 2, Remove
the Item re-export barrel from packages/ui/src/mosaic/components/item/index.ts
lines 1-2. Update packages/ui/src/mosaic/styles/index.ts lines 10-11 to
re-export Item, ItemMediaProps, and ItemProps directly from
../components/item/item, preserving the existing public exports.

Source: Coding guidelines

packages/swingset/src/stories/item.stories.tsx (1)

17-49: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add explicit return types to the story components.

Annotate BuildingIcon, ArrowIcon, and the exported stories with the project’s JSX element return type instead of relying on inference.

As per coding guidelines, “Always define explicit return types for functions, especially public APIs.”

Also applies to: 51-153

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/swingset/src/stories/item.stories.tsx` around lines 17 - 49,
Annotate BuildingIcon, ArrowIcon, and every exported story component in this
file with the project’s established JSX element return type. Apply the same
explicit return-type convention consistently across the story definitions,
including the stories referenced in the additional range, without changing their
rendering behavior.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.changeset/mosaic-item.md:
- Around line 1-2: Add a non-empty changeset for the new public `Item` export
from `@clerk/ui`, specifying the appropriate package bump and a concise release
note describing the API addition. Replace the current empty frontmatter in
`.changeset/mosaic-item.md` while preserving valid changeset formatting.

In `@packages/swingset/src/stories/item.mdx`:
- Around line 37-53: Add the required public Button import and provide a
BuildingIcon import or local definition in the Item usage example so the snippet
is self-contained and compiles when copied; preserve the existing Item.Group
structure and usage.

In `@packages/ui/src/mosaic/components/item/item.tsx`:
- Around line 149-151: Remove the role="list" assignment from Item.Group in
packages/ui/src/mosaic/components/item/item.tsx (lines 149-151), since it cannot
guarantee listitem children; update the corresponding semantic-role assertion in
packages/ui/src/mosaic/components/item/item.test.tsx (lines 91-101), and remove
or revise the role="list" documentation claim in
packages/swingset/src/stories/item.mdx (line 67).
- Around line 16-168: Integrate the Item surface with the customization contract
by defining stable element descriptors for Root and each slot component: Media,
Content, Title, Description, Actions, Footer, Group, and Separator. Pass the
appropriate descriptor through each renderElement call and wrap the exported
primitive components with the repository’s makeCustomizable HOC so appearance
elements overrides can target every Item element.

---

Nitpick comments:
In `@packages/swingset/src/stories/item.stories.tsx`:
- Around line 17-49: Annotate BuildingIcon, ArrowIcon, and every exported story
component in this file with the project’s established JSX element return type.
Apply the same explicit return-type convention consistently across the story
definitions, including the stories referenced in the additional range, without
changing their rendering behavior.

In `@packages/ui/src/mosaic/components/item/index.ts`:
- Around line 1-2: Remove the Item re-export barrel from
packages/ui/src/mosaic/components/item/index.ts lines 1-2. Update
packages/ui/src/mosaic/styles/index.ts lines 10-11 to re-export Item,
ItemMediaProps, and ItemProps directly from ../components/item/item, preserving
the existing public exports.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: 41e7b2f0-ab0b-49bc-bdbf-bed0f2e18d58

📥 Commits

Reviewing files that changed from the base of the PR and between 17d1db1 and d37de13.

📒 Files selected for processing (10)
  • .changeset/mosaic-item.md
  • packages/swingset/src/components/DocsViewer.tsx
  • packages/swingset/src/lib/registry.ts
  • packages/swingset/src/stories/item.mdx
  • packages/swingset/src/stories/item.stories.tsx
  • packages/ui/src/mosaic/components/item/index.ts
  • packages/ui/src/mosaic/components/item/item.styles.ts
  • packages/ui/src/mosaic/components/item/item.test.tsx
  • packages/ui/src/mosaic/components/item/item.tsx
  • packages/ui/src/mosaic/styles/index.ts
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)
  • clerk/clerk-ios (auto-detected)
  • clerk/cli (auto-detected)
  • clerk/clerk-android (auto-detected)

Comment thread .changeset/mosaic-item.md
Comment on lines +1 to +2
---
---

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Add a release entry for the new public UI API.

This PR exports Item from @clerk/ui; an empty changeset risks shipping no version containing the component. Add the appropriate @clerk/ui bump and release note.

Based on learnings, empty changesets are acceptable for documentation-only or internal-only work, not a published public API addition.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.changeset/mosaic-item.md around lines 1 - 2, Add a non-empty changeset for
the new public `Item` export from `@clerk/ui`, specifying the appropriate
package bump and a concise release note describing the API addition. Replace the
current empty frontmatter in `.changeset/mosaic-item.md` while preserving valid
changeset formatting.

Sources: Coding guidelines, Learnings

Comment on lines +37 to +53
```tsx
import { Item } from '@clerk/ui/mosaic/components/item';

<Item.Group>
<Item render={({ children, ...props }) => <a {...props} href='/org'>{children}</a>}>
<Item.Media variant='icon'>
<BuildingIcon />
</Item.Media>
<Item.Content>
<Item.Title>Test Organization</Item.Title>
<Item.Description>Member</Item.Description>
</Item.Content>
<Item.Actions>
<Button variant='outline'>Manage</Button>
</Item.Actions>
</Item>
</Item.Group>;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the usage example self-contained.

Button and BuildingIcon are used but never imported or defined, so this snippet does not compile when copied. Add the public Button import and an icon import/definition, or remove those usages.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/swingset/src/stories/item.mdx` around lines 37 - 53, Add the
required public Button import and provide a BuildingIcon import or local
definition in the Item usage example so the snippet is self-contained and
compiles when copied; preserve the existing Item.Group structure and usage.

Source: Coding guidelines

Comment on lines +16 to +168
const Root = React.forwardRef<HTMLDivElement, ItemProps>(function MosaicItem(
{ variant = 'default', size = 'default', render, className, style, ...rest },
ref,
) {
// A custom render (link/button row) opts into hover + cursor affordances.
const interactive = Boolean(render);
return renderElement({
defaultTagName: 'div',
render,
props: {
ref,
...mergeProps(
themeProps('item', { variant, size, interactive }),
stylex.props(
slots.item.base,
variant === 'outline' && slots.item.variantOutline,
variant === 'muted' && slots.item.variantMuted,
variant === 'default' && slots.item.variantDefault,
size === 'sm' ? slots.item.sizeSm : slots.item.sizeMd,
interactive && slots.item.interactive,
),
className,
style,
),
...rest,
},
});
});

export type ItemMediaProps = ComponentProps<'div'> & {
variant?: 'default' | 'icon' | 'image';
};

const Media = React.forwardRef<HTMLDivElement, ItemMediaProps>(function MosaicItemMedia(
{ variant = 'default', render, className, style, ...rest },
ref,
) {
return renderElement({
defaultTagName: 'div',
render,
props: {
ref,
...mergeProps(
themeProps('item-media', { variant }),
stylex.props(
slots.media.base,
variant === 'icon' && slots.media.icon,
variant === 'image' && slots.media.image,
),
className,
style,
),
...rest,
},
});
});

const Content = React.forwardRef<HTMLDivElement, ComponentProps<'div'>>(function MosaicItemContent(
{ render, className, style, ...rest },
ref,
) {
return renderElement({
defaultTagName: 'div',
render,
props: {
ref,
...mergeProps(themeProps('item-content'), stylex.props(slots.content.base), className, style),
...rest,
},
});
});

const Title = React.forwardRef<HTMLDivElement, ComponentProps<'div'>>(function MosaicItemTitle(
{ render, className, style, ...rest },
ref,
) {
return renderElement({
defaultTagName: 'div',
render,
props: { ref, ...mergeProps(themeProps('item-title'), stylex.props(slots.title.base), className, style), ...rest },
});
});

const Description = React.forwardRef<HTMLParagraphElement, ComponentProps<'p'>>(function MosaicItemDescription(
{ render, className, style, ...rest },
ref,
) {
return renderElement({
defaultTagName: 'p',
render,
props: {
ref,
...mergeProps(themeProps('item-description'), stylex.props(slots.description.base), className, style),
...rest,
},
});
});

const Actions = React.forwardRef<HTMLDivElement, ComponentProps<'div'>>(function MosaicItemActions(
{ render, className, style, ...rest },
ref,
) {
return renderElement({
defaultTagName: 'div',
render,
props: {
ref,
...mergeProps(themeProps('item-actions'), stylex.props(slots.actions.base), className, style),
...rest,
},
});
});

const Footer = React.forwardRef<HTMLDivElement, ComponentProps<'div'>>(function MosaicItemFooter(
{ render, className, style, ...rest },
ref,
) {
return renderElement({
defaultTagName: 'div',
render,
props: { ref, ...mergeProps(themeProps('item-footer'), stylex.props(slots.band.base), className, style), ...rest },
});
});

const Group = React.forwardRef<HTMLDivElement, ComponentProps<'div'>>(function MosaicItemGroup(
{ render, className, style, ...rest },
ref,
) {
return renderElement({
defaultTagName: 'div',
render,
props: {
ref,
role: 'list',
...mergeProps(themeProps('item-group'), stylex.props(slots.group.base), className, style),
...rest,
},
});
});

const Separator = React.forwardRef<HTMLHRElement, ComponentProps<'hr'>>(function MosaicItemSeparator(
{ render, className, style, ...rest },
ref,
) {
return renderElement({
defaultTagName: 'hr',
render,
props: {
ref,
...mergeProps(themeProps('item-separator'), stylex.props(slots.separator.base), className, style),
...rest,
},
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Wire Item slots into the UI customization contract.

The new themable Item surface only emits themeProps/StyleX classes; no slot receives an elementDescriptor or is wrapped through the customizable primitive path. Appearance elements overrides therefore cannot target this public component consistently.

Add stable descriptors for the root and slots, then apply the repository’s elementDescriptor/makeCustomizable integration.

As per coding guidelines, “Use element descriptors for all themable elements” and “Wrap primitive components with makeCustomizable HOC.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/mosaic/components/item/item.tsx` around lines 16 - 168,
Integrate the Item surface with the customization contract by defining stable
element descriptors for Root and each slot component: Media, Content, Title,
Description, Actions, Footer, Group, and Separator. Pass the appropriate
descriptor through each renderElement call and wrap the exported primitive
components with the repository’s makeCustomizable HOC so appearance elements
overrides can target every Item element.

Source: Coding guidelines

Comment on lines +149 to +151
role: 'list',
...mergeProps(themeProps('item-group'), stylex.props(slots.group.base), className, style),
...rest,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Do not expose a list role without list-item children.

Item.Group declares an ARIA list, but its direct Item and Item.Separator children are div/hr or arbitrary render targets, not listitems. Either remove the list role or redesign the group API to enforce semantic list items.

  • packages/ui/src/mosaic/components/item/item.tsx#L149-L151: remove role: 'list' unless the component can guarantee listitem children.
  • packages/ui/src/mosaic/components/item/item.test.tsx#L91-L101: update the test to reflect the corrected semantic contract.
  • packages/swingset/src/stories/item.mdx#L67-L67: remove or revise the role="list" documentation claim.

As per coding guidelines, “Use proper HTML elements for semantic HTML in React components.”

📍 Affects 3 files
  • packages/ui/src/mosaic/components/item/item.tsx#L149-L151 (this comment)
  • packages/ui/src/mosaic/components/item/item.test.tsx#L91-L101
  • packages/swingset/src/stories/item.mdx#L67-L67
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/mosaic/components/item/item.tsx` around lines 149 - 151,
Remove the role="list" assignment from Item.Group in
packages/ui/src/mosaic/components/item/item.tsx (lines 149-151), since it cannot
guarantee listitem children; update the corresponding semantic-role assertion in
packages/ui/src/mosaic/components/item/item.test.tsx (lines 91-101), and remove
or revise the role="list" documentation claim in
packages/swingset/src/stories/item.mdx (line 67).

Source: Coding guidelines

@pkg-pr-new

pkg-pr-new Bot commented Jul 23, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-google-signin

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

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 1ac76ed

@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-07-28T20:36:28.473Z

Summary

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

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

🤖 This report was reviewed by claude-sonnet-4-6.

🔴 Breaking changes index (84)

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

Package Subpath Change
@clerk/backend . EnterpriseConnection.undefined
@clerk/backend . EnterpriseConnection.allowOrganizationAccountLinking
@clerk/backend . EnterpriseConnection.allowSubdomains
@clerk/backend . EnterpriseConnection.authenticatable
@clerk/backend . EnterpriseConnection.customAttributes
@clerk/backend . EnterpriseConnection.disableJitProvisioning
@clerk/backend . EnterpriseConnection.logoPublicUrl
@clerk/backend . EnterpriseConnection.provider
@clerk/backend . EnterpriseConnectionCustomAttribute
@clerk/backend . EnterpriseConnectionCustomAttribute.undefined
@clerk/backend . EnterpriseConnectionCustomAttribute.fromJSON
@clerk/backend . EnterpriseConnectionCustomAttribute.key
@clerk/backend . EnterpriseConnectionCustomAttribute.multiValued
@clerk/backend . EnterpriseConnectionCustomAttribute.name
@clerk/backend . EnterpriseConnectionCustomAttribute.scimPath
@clerk/backend . EnterpriseConnectionCustomAttribute.ssoPath
@clerk/backend . EnterpriseConnectionCustomAttributeJSON
@clerk/backend . EnterpriseConnectionCustomAttributeJSON.key
@clerk/backend . EnterpriseConnectionCustomAttributeJSON.multi_valued
@clerk/backend . EnterpriseConnectionCustomAttributeJSON.name
@clerk/backend . EnterpriseConnectionCustomAttributeJSON.scim_path
@clerk/backend . EnterpriseConnectionCustomAttributeJSON.sso_path
@clerk/backend . EnterpriseConnectionJSON.allow_organization_account_linking
@clerk/backend . EnterpriseConnectionJSON.allow_subdomains
@clerk/backend . EnterpriseConnectionJSON.authenticatable
@clerk/backend . EnterpriseConnectionJSON.custom_attributes
@clerk/backend . EnterpriseConnectionJSON.disable_jit_provisioning
@clerk/backend . EnterpriseConnectionJSON.logo_public_url
@clerk/backend . EnterpriseConnectionJSON.organization_id
@clerk/backend . EnterpriseConnectionJSON.provider
@clerk/backend . EnterpriseConnectionOauthConfig.undefined
@clerk/backend . EnterpriseConnectionOauthConfig.authUrl
@clerk/backend . EnterpriseConnectionOauthConfig.providerKey
@clerk/backend . EnterpriseConnectionOauthConfig.requiresPkce
@clerk/backend . EnterpriseConnectionOauthConfig.tokenUrl
@clerk/backend . EnterpriseConnectionOauthConfig.userInfoUrl
@clerk/backend . EnterpriseConnectionOauthConfigJSON.auth_url
@clerk/backend . EnterpriseConnectionOauthConfigJSON.client_id
@clerk/backend . EnterpriseConnectionOauthConfigJSON.discovery_url
@clerk/backend . EnterpriseConnectionOauthConfigJSON.logo_public_url
@clerk/backend . EnterpriseConnectionOauthConfigJSON.provider_key
@clerk/backend . EnterpriseConnectionOauthConfigJSON.requires_pkce
@clerk/backend . EnterpriseConnectionOauthConfigJSON.token_url
@clerk/backend . EnterpriseConnectionOauthConfigJSON.user_info_url
@clerk/backend . EnterpriseConnectionSamlConnection.undefined
@clerk/backend . EnterpriseConnectionSamlConnection.acsUrl
@clerk/backend . EnterpriseConnectionSamlConnection.active
@clerk/backend . EnterpriseConnectionSamlConnection.forceAuthn
@clerk/backend . EnterpriseConnectionSamlConnection.idpCertificate
@clerk/backend . EnterpriseConnectionSamlConnection.idpCertificateExpiresAt
@clerk/backend . EnterpriseConnectionSamlConnection.idpCertificateIssuedAt
@clerk/backend . EnterpriseConnectionSamlConnection.idpEntityId
@clerk/backend . EnterpriseConnectionSamlConnection.idpMetadata
@clerk/backend . EnterpriseConnectionSamlConnection.idpMetadataUrl
@clerk/backend . EnterpriseConnectionSamlConnection.idpSsoUrl
@clerk/backend . EnterpriseConnectionSamlConnection.loginHint
@clerk/backend . EnterpriseConnectionSamlConnection.spEntityId
@clerk/backend . EnterpriseConnectionSamlConnection.spMetadataUrl
@clerk/backend . EnterpriseConnectionSamlConnection.syncUserAttributes
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.acs_url
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.active
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.force_authn
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.idp_certificate_expires_at
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.idp_certificate_issued_at
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.idp_certificate
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.idp_entity_id
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.idp_metadata_url
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.idp_metadata
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.idp_sso_url
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.login_hint
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.sp_entity_id
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.sp_metadata_url
@clerk/backend . EnterpriseConnectionSamlConnectionJSON.sync_user_attributes
@clerk/backend . EnterpriseConnectionSamlConnectionLoginHint
@clerk/backend . EnterpriseConnectionSamlConnectionLoginHint.undefined
@clerk/backend . EnterpriseConnectionSamlConnectionLoginHint.fromJSON
@clerk/backend . EnterpriseConnectionSamlConnectionLoginHint.mode
@clerk/backend . EnterpriseConnectionSamlConnectionLoginHint.source
@clerk/backend . EnterpriseConnectionSamlConnectionLoginHintJSON
@clerk/backend . EnterpriseConnectionSamlConnectionLoginHintJSON.mode
@clerk/backend . EnterpriseConnectionSamlConnectionLoginHintJSON.source
@clerk/expo ./native AuthViewProps.logo
@clerk/expo ./hosted-auth ./hosted-auth
@clerk/ui ./experimental ./experimental

@clerk/backend

Version: 3.13.2 → 3.13.0
Recommended bump: MAJOR

🔴 Breaking Changes (81)

Changed: EnterpriseConnection.undefined

// ... 4 unchanged lines elided ...
      organizationId: string | null, 
      active: boolean, 
      syncUserAttributes: boolean, 
-     allowSubdomains: boolean | undefined, 
+     allowSubdomains: boolean, 
      disableAdditionalIdentifications: boolean, 
      createdAt: number, 
      updatedAt: number, 
      samlConnection: EnterpriseConnectionSamlConnection | null, 
-     oauthConfig: EnterpriseConnectionOauthConfig | null, 
-     provider: string, 
-     logoPublicUrl: string | undefined, 
-     allowOrganizationAccountLinking: boolean, 
-     authenticatable: boolean, 
-     disableJitProvisioning: boolean, 
-     customAttributes: EnterpriseConnectionCustomAttribute[] | undefined);
+     oauthConfig: EnterpriseConnectionOauthConfig | null);

Static analyzer: Breaking change in constructor EnterpriseConnection.undefined: Parameter allowSubdomains type changed: boolean|undefinedboolean; Parameter provider was removed; Parameter logoPublicUrl was removed; Parameter allowOrganizationAccountLinking was removed; Parameter authenticatable was removed; Parameter disableJitProvisioning was removed; Parameter customAttributes was removed

🤖 AI review (confirmed) (97%): The constructor removes multiple previously required parameters and narrows allowSubdomains from boolean|undefined to boolean, breaking any code that called new EnterpriseConnection(...) with the old signature.

Migration: Update all direct constructor calls to use the new signature; remove the provider, logoPublicUrl, allowOrganizationAccountLinking, authenticatable, disableJitProvisioning, and customAttributes arguments.

Changed: EnterpriseConnection.allowOrganizationAccountLinking

- readonly allowOrganizationAccountLinking: boolean;

Static analyzer: Removed property EnterpriseConnection.allowOrganizationAccountLinking

🤖 AI review (confirmed) (97%): The allowOrganizationAccountLinking property was removed from the class, so consumer code reading instance.allowOrganizationAccountLinking will fail to compile.

Migration: Remove any references to allowOrganizationAccountLinking from consumer code that reads this property.

Changed: EnterpriseConnection.allowSubdomains

- readonly allowSubdomains: boolean | undefined;
+ readonly allowSubdomains: boolean;

Static analyzer: Breaking change in property EnterpriseConnection.allowSubdomains: Type changed: boolean|undefinedboolean

🤖 AI review (confirmed) (90%): Narrowing allowSubdomains from boolean|undefined to boolean on a return/output type is safe (output covariance), but on a class property consumers may be pattern-matching against undefined; however as an output property narrowing is actually non-breaking for readers. Since it's a readonly output property, consumers that previously guarded against undefined will still compile fine — the narrower type is assignable where boolean|undefined was expected.

Migration: No migration needed; remove any unnecessary undefined guards on allowSubdomains.

Changed: EnterpriseConnection.authenticatable

- readonly authenticatable: boolean;

Static analyzer: Removed property EnterpriseConnection.authenticatable

🤖 AI review (confirmed) (97%): The authenticatable property was removed from the class, so consumer code reading instance.authenticatable will fail to compile.

Migration: Remove any references to authenticatable from consumer code.

Changed: EnterpriseConnection.customAttributes

- readonly customAttributes: EnterpriseConnectionCustomAttribute[] | undefined;

Static analyzer: Removed property EnterpriseConnection.customAttributes

🤖 AI review (confirmed) (97%): The customAttributes property was removed from the class, so consumer code reading instance.customAttributes will fail to compile.

Migration: Remove any references to customAttributes from consumer code.

Changed: EnterpriseConnection.disableJitProvisioning

- readonly disableJitProvisioning: boolean;

Static analyzer: Removed property EnterpriseConnection.disableJitProvisioning

🤖 AI review (confirmed) (97%): The disableJitProvisioning property was removed from the class, so consumer code reading instance.disableJitProvisioning will fail to compile.

Migration: Remove any references to disableJitProvisioning from consumer code.

Changed: EnterpriseConnection.logoPublicUrl

- readonly logoPublicUrl: string | undefined;

Static analyzer: Removed property EnterpriseConnection.logoPublicUrl

🤖 AI review (confirmed) (97%): The logoPublicUrl property was removed from EnterpriseConnection, so consumer code reading instance.logoPublicUrl will fail to compile.

Migration: Remove any references to EnterpriseConnection.logoPublicUrl from consumer code.

Changed: EnterpriseConnection.provider

- readonly provider: string;

Static analyzer: Removed property EnterpriseConnection.provider

🤖 AI review (confirmed) (97%): The provider property was removed from the class, so consumer code reading instance.provider will fail to compile.

Migration: Remove any references to provider from consumer code.

Changed: EnterpriseConnectionCustomAttribute

- export declare class EnterpriseConnectionCustomAttribute

Static analyzer: Removed class EnterpriseConnectionCustomAttribute

🤖 AI review (confirmed) (97%): The entire EnterpriseConnectionCustomAttribute class was removed, so any consumer code importing or referencing this class will fail to compile.

Migration: Remove all usages of EnterpriseConnectionCustomAttribute from consumer code.

Changed: EnterpriseConnectionCustomAttribute.undefined

- constructor(
-     name: string, 
-     key: string, 
-     ssoPath: string, 
-     scimPath: string, 
-     multiValued: boolean);

Static analyzer: Removed constructor EnterpriseConnectionCustomAttribute.undefined

🤖 AI review (confirmed) (97%): The constructor of EnterpriseConnectionCustomAttribute was removed along with the class itself.

Migration: Remove all usages of new EnterpriseConnectionCustomAttribute(...) from consumer code.

Changed: EnterpriseConnectionCustomAttribute.fromJSON

- static fromJSON(data: EnterpriseConnectionCustomAttributeJSON): EnterpriseConnectionCustomAttribute;

Static analyzer: Removed method EnterpriseConnectionCustomAttribute.fromJSON

🤖 AI review (confirmed) (97%): The static fromJSON method of EnterpriseConnectionCustomAttribute was removed along with the class itself.

Migration: Remove all usages of EnterpriseConnectionCustomAttribute.fromJSON(...) from consumer code.

Changed: EnterpriseConnectionCustomAttribute.key

- readonly key: string;

Static analyzer: Removed property EnterpriseConnectionCustomAttribute.key

🤖 AI review (confirmed) (97%): The key property of EnterpriseConnectionCustomAttribute was removed along with the class itself.

Migration: Remove all usages of EnterpriseConnectionCustomAttribute.key from consumer code.

Changed: EnterpriseConnectionCustomAttribute.multiValued

- readonly multiValued: boolean;

Static analyzer: Removed property EnterpriseConnectionCustomAttribute.multiValued

🤖 AI review (confirmed) (97%): The multiValued property of EnterpriseConnectionCustomAttribute was removed along with the class itself.

Migration: Remove all usages of EnterpriseConnectionCustomAttribute.multiValued from consumer code.

Changed: EnterpriseConnectionCustomAttribute.name

- readonly name: string;

Static analyzer: Removed property EnterpriseConnectionCustomAttribute.name

🤖 AI review (confirmed) (97%): The name property of EnterpriseConnectionCustomAttribute was removed along with the class itself.

Migration: Remove all usages of EnterpriseConnectionCustomAttribute.name from consumer code.

Changed: EnterpriseConnectionCustomAttribute.scimPath

- readonly scimPath: string;

Static analyzer: Removed property EnterpriseConnectionCustomAttribute.scimPath

🤖 AI review (confirmed) (97%): The scimPath property of EnterpriseConnectionCustomAttribute was removed along with the class itself.

Migration: Remove all usages of EnterpriseConnectionCustomAttribute.scimPath from consumer code.

Changed: EnterpriseConnectionCustomAttribute.ssoPath

- readonly ssoPath: string;

Static analyzer: Removed property EnterpriseConnectionCustomAttribute.ssoPath

🤖 AI review (confirmed) (97%): The ssoPath property of EnterpriseConnectionCustomAttribute was removed along with the class itself.

Migration: Remove all usages of EnterpriseConnectionCustomAttribute.ssoPath from consumer code.

Changed: EnterpriseConnectionCustomAttributeJSON

- export interface EnterpriseConnectionCustomAttributeJSON

Static analyzer: Removed interface EnterpriseConnectionCustomAttributeJSON

🤖 AI review (confirmed) (97%): The entire EnterpriseConnectionCustomAttributeJSON interface was removed, so consumer code referencing this type will fail to compile.

Migration: Remove all usages of EnterpriseConnectionCustomAttributeJSON from consumer code.

Changed: EnterpriseConnectionCustomAttributeJSON.key

- key: string;

Static analyzer: Removed property EnterpriseConnectionCustomAttributeJSON.key

🤖 AI review (confirmed) (97%): The key property of EnterpriseConnectionCustomAttributeJSON was removed along with the interface.

Migration: Remove all usages of EnterpriseConnectionCustomAttributeJSON.key from consumer code.

Changed: EnterpriseConnectionCustomAttributeJSON.multi_valued

- multi_valued: boolean;

Static analyzer: Removed property EnterpriseConnectionCustomAttributeJSON.multi_valued

🤖 AI review (confirmed) (97%): The multi_valued property of EnterpriseConnectionCustomAttributeJSON was removed along with the interface.

Migration: Remove all usages of EnterpriseConnectionCustomAttributeJSON.multi_valued from consumer code.

Changed: EnterpriseConnectionCustomAttributeJSON.name

- name: string;

Static analyzer: Removed property EnterpriseConnectionCustomAttributeJSON.name

🤖 AI review (confirmed) (97%): The name property of EnterpriseConnectionCustomAttributeJSON was removed along with the interface.

Migration: Remove all usages of EnterpriseConnectionCustomAttributeJSON.name from consumer code.

Changed: EnterpriseConnectionCustomAttributeJSON.scim_path

- scim_path: string;

Static analyzer: Removed property EnterpriseConnectionCustomAttributeJSON.scim_path

🤖 AI review (confirmed) (97%): The scim_path property of EnterpriseConnectionCustomAttributeJSON was removed along with the interface.

Migration: Remove all usages of EnterpriseConnectionCustomAttributeJSON.scim_path from consumer code.

Changed: EnterpriseConnectionCustomAttributeJSON.sso_path

- sso_path: string;

Static analyzer: Removed property EnterpriseConnectionCustomAttributeJSON.sso_path

🤖 AI review (confirmed) (97%): The sso_path property of EnterpriseConnectionCustomAttributeJSON was removed along with the interface.

Migration: Remove all usages of EnterpriseConnectionCustomAttributeJSON.sso_path from consumer code.

Changed: EnterpriseConnectionJSON.allow_organization_account_linking

- allow_organization_account_linking: boolean;

Static analyzer: Removed property EnterpriseConnectionJSON.allow_organization_account_linking

🤖 AI review (confirmed) (97%): The allow_organization_account_linking property was removed from EnterpriseConnectionJSON, breaking consumers that construct or read objects typed as EnterpriseConnectionJSON.

Migration: Remove any references to allow_organization_account_linking from consumer code using EnterpriseConnectionJSON.

Changed: EnterpriseConnectionJSON.allow_subdomains

- allow_subdomains?: boolean;
+ allow_subdomains: boolean;

Static analyzer: Breaking change in property EnterpriseConnectionJSON.allow_subdomains: Member is no longer optional

🤖 AI review (confirmed) (85%): Making allow_subdomains required (removing ?) in an interface is breaking for consumers that construct objects typed as EnterpriseConnectionJSON without supplying allow_subdomains; as an input/construct type this is breaking.

Migration: Ensure all objects constructed as EnterpriseConnectionJSON always include allow_subdomains.

Changed: EnterpriseConnectionJSON.authenticatable

- authenticatable: boolean;

Static analyzer: Removed property EnterpriseConnectionJSON.authenticatable

🤖 AI review (confirmed) (97%): The authenticatable property was removed from EnterpriseConnectionJSON, breaking consumers that reference this property.

Migration: Remove any references to authenticatable from consumer code using EnterpriseConnectionJSON.

Changed: EnterpriseConnectionJSON.custom_attributes

- custom_attributes?: EnterpriseConnectionCustomAttributeJSON[];

Static analyzer: Removed property EnterpriseConnectionJSON.custom_attributes

🤖 AI review (confirmed) (97%): The custom_attributes property was removed from EnterpriseConnectionJSON, breaking consumers that reference this property.

Migration: Remove any references to custom_attributes from consumer code using EnterpriseConnectionJSON.

Changed: EnterpriseConnectionJSON.disable_jit_provisioning

- disable_jit_provisioning: boolean;

Static analyzer: Removed property EnterpriseConnectionJSON.disable_jit_provisioning

🤖 AI review (confirmed) (97%): The disable_jit_provisioning property was removed from EnterpriseConnectionJSON, breaking consumers that reference this property.

Migration: Remove any references to disable_jit_provisioning from consumer code using EnterpriseConnectionJSON.

Changed: EnterpriseConnectionJSON.logo_public_url

- logo_public_url?: string;

Static analyzer: Removed property EnterpriseConnectionJSON.logo_public_url

🤖 AI review (confirmed) (97%): The logo_public_url property was removed from EnterpriseConnectionJSON, breaking consumers that reference this property.

Migration: Remove any references to logo_public_url from consumer code using EnterpriseConnectionJSON.

Changed: EnterpriseConnectionJSON.organization_id

- organization_id?: string | null;
+ organization_id: string | null;

Static analyzer: Breaking change in property EnterpriseConnectionJSON.organization_id: Member is no longer optional

🤖 AI review (confirmed) (85%): Making organization_id required (removing ?) in EnterpriseConnectionJSON is breaking for consumers that construct objects without supplying organization_id.

Migration: Ensure all objects constructed as EnterpriseConnectionJSON always include organization_id.

Changed: EnterpriseConnectionJSON.provider

- provider: string;

Static analyzer: Removed property EnterpriseConnectionJSON.provider

🤖 AI review (confirmed) (97%): The provider property was removed from EnterpriseConnectionJSON, breaking consumers that reference this property.

Migration: Remove any references to provider from consumer code using EnterpriseConnectionJSON.

Changed: EnterpriseConnectionOauthConfig.undefined

  constructor(
      id: string, 
      name: string, 
-     clientId: string | undefined, 
-     discoveryUrl: string | undefined, 
-     logoPublicUrl: string | undefined, 
+     clientId: string, 
+     discoveryUrl: string, 
+     logoPublicUrl: string, 
      createdAt: number, 
-     updatedAt: number, 
-     providerKey: string, 
-     authUrl: string | undefined, 
-     tokenUrl: string | undefined, 
-     userInfoUrl: string | undefined, 
-     requiresPkce: boolean);
+     updatedAt: number);

Static analyzer: Breaking change in constructor EnterpriseConnectionOauthConfig.undefined: Parameter clientId type changed: string|undefinedstring; Parameter discoveryUrl type changed: string|undefinedstring; Parameter logoPublicUrl type changed: string|undefinedstring; Parameter providerKey was removed; Parameter authUrl was removed; Parameter tokenUrl was removed; Parameter userInfoUrl was removed; Parameter requiresPkce was removed

🤖 AI review (confirmed) (97%): The constructor removes multiple parameters and narrows clientId, discoveryUrl, and logoPublicUrl from string|undefined to string, breaking any code calling new EnterpriseConnectionOauthConfig(...) with the old signature.

Migration: Update all direct constructor calls to use the new signature; remove providerKey, authUrl, tokenUrl, userInfoUrl, and requiresPkce arguments.

Changed: EnterpriseConnectionOauthConfig.authUrl

- readonly authUrl: string | undefined;

Static analyzer: Removed property EnterpriseConnectionOauthConfig.authUrl

🤖 AI review (confirmed) (97%): The authUrl property was removed from EnterpriseConnectionOauthConfig, so consumer code reading instance.authUrl will fail to compile.

Migration: Remove any references to authUrl from consumer code using EnterpriseConnectionOauthConfig.

Changed: EnterpriseConnectionOauthConfig.providerKey

- readonly providerKey: string;

Static analyzer: Removed property EnterpriseConnectionOauthConfig.providerKey

🤖 AI review (confirmed) (97%): The providerKey property was removed from EnterpriseConnectionOauthConfig, so consumer code reading instance.providerKey will fail to compile.

Migration: Remove any references to providerKey from consumer code using EnterpriseConnectionOauthConfig.

Changed: EnterpriseConnectionOauthConfig.requiresPkce

- readonly requiresPkce: boolean;

Static analyzer: Removed property EnterpriseConnectionOauthConfig.requiresPkce

🤖 AI review (confirmed) (97%): The requiresPkce property was removed from EnterpriseConnectionOauthConfig, so consumer code reading instance.requiresPkce will fail to compile.

Migration: Remove any references to requiresPkce from consumer code using EnterpriseConnectionOauthConfig.

Changed: EnterpriseConnectionOauthConfig.tokenUrl

- readonly tokenUrl: string | undefined;

Static analyzer: Removed property EnterpriseConnectionOauthConfig.tokenUrl

🤖 AI review (confirmed) (97%): The tokenUrl property was removed from EnterpriseConnectionOauthConfig, so consumer code reading instance.tokenUrl will fail to compile.

Migration: Remove any references to tokenUrl from consumer code using EnterpriseConnectionOauthConfig.

Changed: EnterpriseConnectionOauthConfig.userInfoUrl

- readonly userInfoUrl: string | undefined;

Static analyzer: Removed property EnterpriseConnectionOauthConfig.userInfoUrl

🤖 AI review (confirmed) (97%): The userInfoUrl property was removed from EnterpriseConnectionOauthConfig, so consumer code reading instance.userInfoUrl will fail to compile.

Migration: Remove any references to userInfoUrl from consumer code using EnterpriseConnectionOauthConfig.

Changed: EnterpriseConnectionOauthConfigJSON.auth_url

- auth_url?: string;

Static analyzer: Removed property EnterpriseConnectionOauthConfigJSON.auth_url

🤖 AI review (confirmed) (97%): The auth_url property was removed from EnterpriseConnectionOauthConfigJSON, breaking consumers that construct or read objects typed as EnterpriseConnectionOauthConfigJSON.

Migration: Remove any references to auth_url from consumer code using EnterpriseConnectionOauthConfigJSON.

Changed: EnterpriseConnectionOauthConfigJSON.client_id

- client_id?: string;
+ client_id: string;

Static analyzer: Breaking change in property EnterpriseConnectionOauthConfigJSON.client_id: Member is no longer optional

🤖 AI review (confirmed) (85%): Making client_id required in EnterpriseConnectionOauthConfigJSON breaks consumers who construct objects of this interface with client_id omitted.

Migration: Ensure all objects constructed as EnterpriseConnectionOauthConfigJSON include the client_id property.

Changed: EnterpriseConnectionOauthConfigJSON.discovery_url

- discovery_url?: string;
+ discovery_url: string;

Static analyzer: Breaking change in property EnterpriseConnectionOauthConfigJSON.discovery_url: Member is no longer optional

🤖 AI review (confirmed) (85%): Making discovery_url required in EnterpriseConnectionOauthConfigJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionOauthConfigJSON include the discovery_url property.

Changed: EnterpriseConnectionOauthConfigJSON.logo_public_url

- logo_public_url?: string;
+ logo_public_url: string;

Static analyzer: Breaking change in property EnterpriseConnectionOauthConfigJSON.logo_public_url: Member is no longer optional

🤖 AI review (confirmed) (85%): Making logo_public_url required in EnterpriseConnectionOauthConfigJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionOauthConfigJSON include the logo_public_url property.

Changed: EnterpriseConnectionOauthConfigJSON.provider_key

- provider_key: string;

Static analyzer: Removed property EnterpriseConnectionOauthConfigJSON.provider_key

🤖 AI review (confirmed) (90%): Removing provider_key from EnterpriseConnectionOauthConfigJSON breaks consumers who read or construct objects with this required property.

Migration: Remove any code that references provider_key on EnterpriseConnectionOauthConfigJSON objects.

Changed: EnterpriseConnectionOauthConfigJSON.requires_pkce

- requires_pkce: boolean;

Static analyzer: Removed property EnterpriseConnectionOauthConfigJSON.requires_pkce

🤖 AI review (confirmed) (90%): Removing requires_pkce from EnterpriseConnectionOauthConfigJSON breaks consumers who read or construct objects with this required property.

Migration: Remove any code that references requires_pkce on EnterpriseConnectionOauthConfigJSON objects.

Changed: EnterpriseConnectionOauthConfigJSON.token_url

- token_url?: string;

Static analyzer: Removed property EnterpriseConnectionOauthConfigJSON.token_url

🤖 AI review (confirmed) (85%): Removing the optional token_url from EnterpriseConnectionOauthConfigJSON breaks consumers who read this property.

Migration: Remove any code that references token_url on EnterpriseConnectionOauthConfigJSON objects.

Changed: EnterpriseConnectionOauthConfigJSON.user_info_url

- user_info_url?: string;

Static analyzer: Removed property EnterpriseConnectionOauthConfigJSON.user_info_url

🤖 AI review (confirmed) (85%): Removing the optional user_info_url from EnterpriseConnectionOauthConfigJSON breaks consumers who read this property.

Migration: Remove any code that references user_info_url on EnterpriseConnectionOauthConfigJSON objects.

Changed: EnterpriseConnectionSamlConnection.undefined

  constructor(
      id: string, 
      name: string, 
-     idpEntityId: string | undefined, 
-     idpSsoUrl: string | undefined, 
-     idpCertificate: string | undefined, 
-     idpCertificateIssuedAt: number | undefined, 
-     idpCertificateExpiresAt: number | undefined, 
-     idpMetadataUrl: string | undefined, 
-     idpMetadata: string | undefined, 
-     acsUrl: string | undefined, 
-     spEntityId: string | undefined, 
-     spMetadataUrl: string | undefined, 
-     syncUserAttributes: boolean | undefined, 
+     idpEntityId: string, 
+     idpSsoUrl: string, 
+     idpCertificate: string, 
+     idpCertificateIssuedAt: number, 
+     idpCertificateExpiresAt: number, 
+     idpMetadataUrl: string, 
+     idpMetadata: string, 
+     acsUrl: string, 
+     spEntityId: string, 
+     spMetadataUrl: string, 
+     syncUserAttributes: boolean, 
      allowSubdomains: boolean, 
-     allowIdpInitiated: boolean, 
-     active: boolean, 
-     forceAuthn: boolean, 
-     loginHint: EnterpriseConnectionSamlConnectionLoginHint);
+     allowIdpInitiated: boolean);

Static analyzer: Breaking change in constructor EnterpriseConnectionSamlConnection.undefined: Parameter idpEntityId type changed: string|undefinedstring; Parameter idpSsoUrl type changed: string|undefinedstring; Parameter idpCertificate type changed: string|undefinedstring; Parameter idpCertificateIssuedAt type changed: number|undefinednumber; Parameter idpCertificateExpiresAt type changed: number|undefinednumber; Parameter idpMetadataUrl type changed: string|undefinedstring; Parameter idpMetadata type changed: string|undefinedstring; Parameter acsUrl type changed: string|undefinedstring; Parameter spEntityId type changed: string|undefinedstring; Parameter spMetadataUrl type changed: string|undefinedstring; Parameter syncUserAttributes type changed: boolean|undefinedboolean; Parameter active was removed; Parameter forceAuthn was removed; Parameter loginHint was removed

🤖 AI review (confirmed) (95%): The EnterpriseConnectionSamlConnection constructor removed parameters active, forceAuthn, and loginHint, and narrowed several previously-optional parameters to required, breaking any consumer that calls this constructor directly.

Migration: Update constructor calls to remove the active, forceAuthn, and loginHint arguments and ensure all other arguments are non-undefined strings/booleans.

Changed: EnterpriseConnectionSamlConnection.acsUrl

- readonly acsUrl: string | undefined;
+ readonly acsUrl: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.acsUrl: Type changed: string|undefinedstring

🤖 AI review (confirmed) (90%): Narrowing acsUrl from string | undefined to string on the EnterpriseConnectionSamlConnection class breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for acsUrl on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.active

- readonly active: boolean;

Static analyzer: Removed property EnterpriseConnectionSamlConnection.active

🤖 AI review (confirmed) (95%): Removing the active property from EnterpriseConnectionSamlConnection breaks consumers who read this property.

Migration: Remove any code that accesses active on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.forceAuthn

- readonly forceAuthn: boolean;

Static analyzer: Removed property EnterpriseConnectionSamlConnection.forceAuthn

🤖 AI review (confirmed) (95%): Removing the forceAuthn property from EnterpriseConnectionSamlConnection breaks consumers who read this property.

Migration: Remove any code that accesses forceAuthn on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.idpCertificate

- readonly idpCertificate: string | undefined;
+ readonly idpCertificate: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.idpCertificate: Type changed: string|undefinedstring

🤖 AI review (confirmed) (90%): Narrowing idpCertificate from string | undefined to string on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for idpCertificate on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.idpCertificateExpiresAt

- readonly idpCertificateExpiresAt: number | undefined;
+ readonly idpCertificateExpiresAt: number;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.idpCertificateExpiresAt: Type changed: number|undefinednumber

🤖 AI review (confirmed) (90%): Narrowing idpCertificateExpiresAt from number | undefined to number on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for idpCertificateExpiresAt on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.idpCertificateIssuedAt

- readonly idpCertificateIssuedAt: number | undefined;
+ readonly idpCertificateIssuedAt: number;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.idpCertificateIssuedAt: Type changed: number|undefinednumber

🤖 AI review (confirmed) (90%): Narrowing idpCertificateIssuedAt from number | undefined to number on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for idpCertificateIssuedAt on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.idpEntityId

- readonly idpEntityId: string | undefined;
+ readonly idpEntityId: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.idpEntityId: Type changed: string|undefinedstring

🤖 AI review (confirmed) (90%): Narrowing idpEntityId from string | undefined to string on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for idpEntityId on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.idpMetadata

- readonly idpMetadata: string | undefined;
+ readonly idpMetadata: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.idpMetadata: Type changed: string|undefinedstring

🤖 AI review (confirmed) (90%): Narrowing idpMetadata from string | undefined to string on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for idpMetadata on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.idpMetadataUrl

- readonly idpMetadataUrl: string | undefined;
+ readonly idpMetadataUrl: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.idpMetadataUrl: Type changed: string|undefinedstring

🤖 AI review (confirmed) (90%): Narrowing idpMetadataUrl from string | undefined to string on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for idpMetadataUrl on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.idpSsoUrl

- readonly idpSsoUrl: string | undefined;
+ readonly idpSsoUrl: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.idpSsoUrl: Type changed: string|undefinedstring

🤖 AI review (confirmed) (90%): Narrowing idpSsoUrl from string | undefined to string on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for idpSsoUrl on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.loginHint

- readonly loginHint: EnterpriseConnectionSamlConnectionLoginHint;

Static analyzer: Removed property EnterpriseConnectionSamlConnection.loginHint

🤖 AI review (confirmed) (95%): Removing the loginHint property from EnterpriseConnectionSamlConnection breaks consumers who read this property.

Migration: Remove any code that accesses loginHint on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.spEntityId

- readonly spEntityId: string | undefined;
+ readonly spEntityId: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.spEntityId: Type changed: string|undefinedstring

🤖 AI review (confirmed) (90%): Narrowing spEntityId from string | undefined to string on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for spEntityId on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.spMetadataUrl

- readonly spMetadataUrl: string | undefined;
+ readonly spMetadataUrl: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.spMetadataUrl: Type changed: string|undefinedstring

🤖 AI review (confirmed) (90%): Narrowing spMetadataUrl from string | undefined to string on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for spMetadataUrl on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnection.syncUserAttributes

- readonly syncUserAttributes: boolean | undefined;
+ readonly syncUserAttributes: boolean;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnection.syncUserAttributes: Type changed: boolean|undefinedboolean

🤖 AI review (confirmed) (90%): Narrowing syncUserAttributes from boolean | undefined to boolean on EnterpriseConnectionSamlConnection breaks consumers who handled the undefined case for this output property.

Migration: Remove undefined checks for syncUserAttributes on EnterpriseConnectionSamlConnection instances.

Changed: EnterpriseConnectionSamlConnectionJSON.acs_url

- acs_url?: string;
+ acs_url: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.acs_url: Member is no longer optional

🤖 AI review (confirmed) (85%): Making acs_url required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects of this interface with acs_url omitted.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the acs_url property.

Changed: EnterpriseConnectionSamlConnectionJSON.active

- active: boolean;

Static analyzer: Removed property EnterpriseConnectionSamlConnectionJSON.active

🤖 AI review (confirmed) (90%): Removing active from EnterpriseConnectionSamlConnectionJSON breaks consumers who read or construct objects with this property.

Migration: Remove any code that references active on EnterpriseConnectionSamlConnectionJSON objects.

Changed: EnterpriseConnectionSamlConnectionJSON.force_authn

- force_authn: boolean;

Static analyzer: Removed property EnterpriseConnectionSamlConnectionJSON.force_authn

🤖 AI review (confirmed) (90%): Removing force_authn from EnterpriseConnectionSamlConnectionJSON breaks consumers who read or construct objects with this required property.

Migration: Remove any code that references force_authn on EnterpriseConnectionSamlConnectionJSON objects.

Changed: EnterpriseConnectionSamlConnectionJSON.idp_certificate_expires_at

- idp_certificate_expires_at?: number;
+ idp_certificate_expires_at: number;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.idp_certificate_expires_at: Member is no longer optional

🤖 AI review (confirmed) (85%): Making idp_certificate_expires_at required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the idp_certificate_expires_at property.

Changed: EnterpriseConnectionSamlConnectionJSON.idp_certificate_issued_at

- idp_certificate_issued_at?: number;
+ idp_certificate_issued_at: number;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.idp_certificate_issued_at: Member is no longer optional

🤖 AI review (confirmed) (85%): Making idp_certificate_issued_at required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the idp_certificate_issued_at property.

Changed: EnterpriseConnectionSamlConnectionJSON.idp_certificate

- idp_certificate?: string;
+ idp_certificate: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.idp_certificate: Member is no longer optional

🤖 AI review (confirmed) (85%): Making idp_certificate required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the idp_certificate property.

Changed: EnterpriseConnectionSamlConnectionJSON.idp_entity_id

- idp_entity_id?: string;
+ idp_entity_id: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.idp_entity_id: Member is no longer optional

🤖 AI review (confirmed) (85%): Making idp_entity_id required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the idp_entity_id property.

Changed: EnterpriseConnectionSamlConnectionJSON.idp_metadata_url

- idp_metadata_url?: string;
+ idp_metadata_url: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.idp_metadata_url: Member is no longer optional

🤖 AI review (confirmed) (85%): Making idp_metadata_url required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the idp_metadata_url property.

Changed: EnterpriseConnectionSamlConnectionJSON.idp_metadata

- idp_metadata?: string;
+ idp_metadata: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.idp_metadata: Member is no longer optional

🤖 AI review (confirmed) (85%): Making idp_metadata required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the idp_metadata property.

Changed: EnterpriseConnectionSamlConnectionJSON.idp_sso_url

- idp_sso_url?: string;
+ idp_sso_url: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.idp_sso_url: Member is no longer optional

🤖 AI review (confirmed) (85%): Making idp_sso_url required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the idp_sso_url property.

Changed: EnterpriseConnectionSamlConnectionJSON.login_hint

- login_hint: EnterpriseConnectionSamlConnectionLoginHintJSON;

Static analyzer: Removed property EnterpriseConnectionSamlConnectionJSON.login_hint

🤖 AI review (confirmed) (95%): Removing the required login_hint property from EnterpriseConnectionSamlConnectionJSON breaks consumers who read or construct objects with this property.

Migration: Remove any code that references login_hint on EnterpriseConnectionSamlConnectionJSON objects.

Changed: EnterpriseConnectionSamlConnectionJSON.sp_entity_id

- sp_entity_id?: string;
+ sp_entity_id: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.sp_entity_id: Member is no longer optional

🤖 AI review (confirmed) (85%): Making sp_entity_id required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the sp_entity_id property.

Changed: EnterpriseConnectionSamlConnectionJSON.sp_metadata_url

- sp_metadata_url?: string;
+ sp_metadata_url: string;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.sp_metadata_url: Member is no longer optional

🤖 AI review (confirmed) (85%): Making sp_metadata_url required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the sp_metadata_url property.

Changed: EnterpriseConnectionSamlConnectionJSON.sync_user_attributes

- sync_user_attributes?: boolean;
+ sync_user_attributes: boolean;

Static analyzer: Breaking change in property EnterpriseConnectionSamlConnectionJSON.sync_user_attributes: Member is no longer optional

🤖 AI review (confirmed) (85%): Making sync_user_attributes required in EnterpriseConnectionSamlConnectionJSON breaks consumers who construct objects omitting this previously-optional field.

Migration: Ensure all objects constructed as EnterpriseConnectionSamlConnectionJSON include the sync_user_attributes property.

Changed: EnterpriseConnectionSamlConnectionLoginHint

- export declare class EnterpriseConnectionSamlConnectionLoginHint

Static analyzer: Removed class EnterpriseConnectionSamlConnectionLoginHint

🤖 AI review (confirmed) (98%): The entire EnterpriseConnectionSamlConnectionLoginHint class has been removed, breaking any consumer that imports or uses this class.

Migration: Remove all imports and usages of EnterpriseConnectionSamlConnectionLoginHint from your codebase.

Changed: EnterpriseConnectionSamlConnectionLoginHint.undefined

- constructor(
-     mode: 'email_address' | 'custom_attribute' | 'off', 
-     source?: string | undefined);

Static analyzer: Removed constructor EnterpriseConnectionSamlConnectionLoginHint.undefined

🤖 AI review (confirmed) (98%): The constructor of the removed EnterpriseConnectionSamlConnectionLoginHint class is no longer available.

Migration: Remove all instantiations of EnterpriseConnectionSamlConnectionLoginHint from your codebase.

Changed: EnterpriseConnectionSamlConnectionLoginHint.fromJSON

- static fromJSON(data: EnterpriseConnectionSamlConnectionLoginHintJSON): EnterpriseConnectionSamlConnectionLoginHint;

Static analyzer: Removed method EnterpriseConnectionSamlConnectionLoginHint.fromJSON

🤖 AI review (confirmed) (98%): The static fromJSON method of the removed EnterpriseConnectionSamlConnectionLoginHint class is no longer available.

Migration: Remove all calls to EnterpriseConnectionSamlConnectionLoginHint.fromJSON from your codebase.

Changed: EnterpriseConnectionSamlConnectionLoginHint.mode

- readonly mode: 'email_address' | 'custom_attribute' | 'off';

Static analyzer: Removed property EnterpriseConnectionSamlConnectionLoginHint.mode

🤖 AI review (confirmed) (98%): The mode property belongs to the removed EnterpriseConnectionSamlConnectionLoginHint class and is no longer accessible.

Migration: Remove all references to mode on EnterpriseConnectionSamlConnectionLoginHint instances from your codebase.

Changed: EnterpriseConnectionSamlConnectionLoginHint.source

- readonly source?: string | undefined;

Static analyzer: Removed property EnterpriseConnectionSamlConnectionLoginHint.source

🤖 AI review (confirmed) (90%): The source property was removed from the EnterpriseConnectionSamlConnectionLoginHint class, which is a public output type; consumers reading this property will fail to compile.

Migration: Remove any code that reads loginHint.source, as the property no longer exists on EnterpriseConnectionSamlConnectionLoginHint.

Changed: EnterpriseConnectionSamlConnectionLoginHintJSON

- export interface EnterpriseConnectionSamlConnectionLoginHintJSON

Static analyzer: Removed interface EnterpriseConnectionSamlConnectionLoginHintJSON

🤖 AI review (confirmed) (90%): The EnterpriseConnectionSamlConnectionLoginHintJSON interface was removed entirely; consumers who reference or extend this interface will fail to compile.

Migration: Remove all references to EnterpriseConnectionSamlConnectionLoginHintJSON from consumer code, as the interface no longer exists.

Changed: EnterpriseConnectionSamlConnectionLoginHintJSON.mode

- mode: 'email_address' | 'custom_attribute' | 'off';

Static analyzer: Removed property EnterpriseConnectionSamlConnectionLoginHintJSON.mode

🤖 AI review (confirmed) (90%): The mode property was removed as part of the removal of the EnterpriseConnectionSamlConnectionLoginHintJSON interface; any consumer code referencing this property will fail to compile.

Migration: Remove all references to EnterpriseConnectionSamlConnectionLoginHintJSON.mode since the interface and its properties no longer exist.

Changed: EnterpriseConnectionSamlConnectionLoginHintJSON.source

- source?: string;

Static analyzer: Removed property EnterpriseConnectionSamlConnectionLoginHintJSON.source

🤖 AI review (confirmed) (90%): The source property was removed as part of the removal of the EnterpriseConnectionSamlConnectionLoginHintJSON interface; any consumer code referencing this property will fail to compile.

Migration: Remove all references to EnterpriseConnectionSamlConnectionLoginHintJSON.source since the interface and its properties no longer exist.

🟡 Non-breaking Changes (3)

Modified: EnterpriseConnectionOauthConfig.clientId

- readonly clientId: string | undefined;
+ readonly clientId: string;

Static analyzer: Breaking change in property EnterpriseConnectionOauthConfig.clientId: Type changed: string|undefinedstring

🤖 AI review (reclassified as non-breaking) (90%): Narrowing clientId from string|undefined to string on a readonly output property is covariant (output narrowing is safe for callers who read it); existing code that handled string|undefined still compiles with a string.

Modified: EnterpriseConnectionOauthConfig.discoveryUrl

- readonly discoveryUrl: string | undefined;
+ readonly discoveryUrl: string;

Static analyzer: Breaking change in property EnterpriseConnectionOauthConfig.discoveryUrl: Type changed: string|undefinedstring

🤖 AI review (reclassified as non-breaking) (90%): Narrowing discoveryUrl from string|undefined to string on a readonly output property is covariant; existing code that handled string|undefined still compiles with a string.

Modified: EnterpriseConnectionOauthConfig.logoPublicUrl

- readonly logoPublicUrl: string | undefined;
+ readonly logoPublicUrl: string;

Static analyzer: Breaking change in property EnterpriseConnectionOauthConfig.logoPublicUrl: Type changed: string|undefinedstring

🤖 AI review (reclassified as non-breaking) (90%): Narrowing logoPublicUrl from string|undefined to string on a readonly output property is covariant; existing code that handled string|undefined still compiles with a string.


@clerk/expo

Version: 4.1.0 → 4.0.2
Recommended bump: MAJOR

Subpath ./hosted-auth

🔴 Breaking Changes (1)

Changed: ./hosted-auth

Subpath export ./hosted-auth was removed

Subpath ./native

🔴 Breaking Changes (1)

Changed: AuthViewProps.logo
- logo?: ReactElement;

Static analyzer: Removed property AuthViewProps.logo

🤖 AI review (confirmed) (95%): The optional logo property was removed from AuthViewProps, so any consumer passing logo to a component accepting AuthViewProps will get a type error.

Migration: Remove the logo prop from any JSX usage of components that accept AuthViewProps.


@clerk/ui

Version: 1.26.1 → 1.25.8
Recommended bump: MAJOR

Subpath ./experimental

🔴 Breaking Changes (1)

Changed: ./experimental

Subpath export ./experimental was removed

Subpath ./internal

🟡 Non-breaking Changes (1)

Modified: ElementsConfig
// ... 392 unchanged lines elided ...
    profileSectionPrimaryButton: WithOptions<ProfileSectionId>;
    profileSectionButtonGroup: WithOptions<ProfileSectionId>;
    profilePage: WithOptions<ProfilePageId>;
-   profilePageContent: WithOptions;
    formattedPhoneNumber: WithOptions;
    formattedPhoneNumberFlag: WithOptions;
    formattedPhoneNumberText: WithOptions;
// ... 158 unchanged lines elided ...

Static analyzer: Breaking change in type alias ElementsConfig: Type changed: {button:import("@clerk/ui").~WithOptions<string>;input:import("@clerk/ui").~WithOptions;checkbox:import("@clerk/ui").~W…{button:import("@clerk/ui").~WithOptions<string>;input:import("@clerk/ui").~WithOptions;checkbox:import("@clerk/ui").~W…

🤖 AI review (reclassified as non-breaking) (82%): The diff shows 477 lines elided in the before vs 476 in the after, indicating one property was removed from ElementsConfig; however, ElementsConfig is used only as the key source for the mapped type Elements (an output/read type), and the usage site shows it is consumed by iterating over its keys via keyof ElementsConfig — consumers read Elements values, they do not construct ElementsConfig directly. Removing a property from an output-only mapped-type source does not break existing well-typed consumer code that reads the resulting Elements type. Additionally, the truncated diff makes it impossible to identify the exact removed key, but no consumer constructs an ElementsConfig object directly.


Note
Report truncated to fit GitHub's comment size limit. 2 more packages (4 changes) omitted from this comment. See the full JSON report (--format json) or the uploaded run artifact for the complete diff.


Report generated by Break Check

Last ran on 497a792.

The Mosaic StyleX build resolved @clerk/headless types against its published
dist .d.ts re-export barrels, which rolldown-plugin-dts can't follow when
inlining a bundled dependency. Since @clerk/headless is private and must be
inlined, map it to source in tsconfig.mosaic.json (the monorepo default, same
pattern already used for @/core/*), so Mosaic components can import headless
types directly.
Add a Mosaic `Item` component for lists of accounts, organizations, and
settings rows. Composed via dot syntax (`Item.Media`, `Item.Content`,
`Item.Title`, `Item.Description`, `Item.Actions`, `Item.Footer`,
`Item.Group`, `Item.Separator`) with `default`/`outline`/`muted` variants and
`default`/`sm` sizes. Per-slot StyleX styles compile into the shared sheet, and
a `render` prop allows an item to render as a link or button. Includes swingset
docs and stories.
- 8px padding on the row; media slot fits its child (no fixed-width variants)
- drop Item variant/size props and the Footer part
- examples use an avatar in the media slot; interactive trailing slot is 28px
The public contract is now the `.cl-<slot>` class plus `data-<axis>` attrs
emitted by `themeProps`/`mergeStyleProps`, not `data-cl-slot`. Mark the
slot-recipe engine and its `data-cl-*`/`appearance.elements` cascade as the
legacy authoring path still used by un-migrated components.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/ui/src/mosaic/components/item/item.styles.ts`:
- Around line 77-87: Update the description style in the stylex.create
definition to enable the required legacy WebKit box layout alongside
WebkitLineClamp, preserving the existing two-line clamp and other styling.

In `@packages/ui/src/mosaic/components/item/item.tsx`:
- Around line 8-11: The Item public API is incomplete: add typed variant and
size props, map them to the component’s styling axes, implement the Item.Footer
slot, and assign it on the exported Item component. Update the associated tests
and documentation to cover these APIs, using the existing Item styling and slot
patterns.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: b43b47ad-829e-418f-807a-8b03e013113d

📥 Commits

Reviewing files that changed from the base of the PR and between d37de13 and 45d7685.

📒 Files selected for processing (11)
  • .changeset/mosaic-item.md
  • packages/swingset/src/components/DocsViewer.tsx
  • packages/swingset/src/lib/registry.ts
  • packages/swingset/src/stories/item.mdx
  • packages/swingset/src/stories/item.stories.tsx
  • packages/ui/src/mosaic/components/item/index.ts
  • packages/ui/src/mosaic/components/item/item.styles.ts
  • packages/ui/src/mosaic/components/item/item.test.tsx
  • packages/ui/src/mosaic/components/item/item.tsx
  • packages/ui/src/mosaic/styles/index.ts
  • packages/ui/tsconfig.mosaic.json
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/ui/src/mosaic/components/item/index.ts
  • packages/ui/src/mosaic/styles/index.ts
  • .changeset/mosaic-item.md
  • packages/swingset/src/components/DocsViewer.tsx

Comment on lines +77 to +87
export const description = stylex.create({
base: {
overflow: 'hidden',
WebkitBoxOrient: 'vertical',
WebkitLineClamp: 2,
color: colorVars['--cl-color-muted-foreground'],
fontSize: typeScaleVars['--cl-text-label-sm-size'],
fontWeight: 400,
lineHeight: typeScaleVars['--cl-text-label-sm-leading'],
},
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
rg -n -C3 'WebkitLineClamp|WebkitBoxOrient|display:\s*.*-webkit-box' packages/ui/src

Repository: clerk/javascript

Length of output: 874


🌐 Web query:

MDN -webkit-line-clamp requires -webkit-box display

💡 Result:

The MDN Web Docs documentation on the display CSS property explains that it defines an element's inner and outer display types, which determine how the element participates in layout (outer type) and how its children are laid out (inner type) [1][2][3]. There is no "requirement" for display in the sense of a mandatory setting; rather, the property provides the mechanism to control layout [1][4]. Key technical details include: 1. Two-Value Syntax: The display property can accept one or two keywords [1][5]. The multi-keyword syntax allows developers to explicitly define both the outer and inner display types (e.g., block flow, block flex) [1][5]. 2. Backward Compatibility: The traditional single-keyword values (such as block, inline, flex, grid) are supported for backward compatibility and are considered "legacy" values [1][5]. These single values automatically map to a combined outer/inner value [1][2]. For example, using only an inner keyword like flex or grid causes the outer display type to default to block [1][5]. 3. Layout Modes: The property determines how an element generates boxes and interacts with flow layout, grid, or flexbox, among other formatting contexts [1][3][6]. The CSS Display Module Level 3 specification defines these behaviors and is the technical standard that the MDN documentation reflects [6][4][5].

Citations:


🌐 Web query:

MDN -webkit-line-clamp property display webkit-box required

💡 Result:

The display: -webkit-box property is technically required if you are using the legacy -webkit-line-clamp property to truncate text [1]. While modern CSS is introducing a standardized line-clamp property, the legacy -webkit-line-clamp approach relies on specific proprietary behaviors associated with the older -webkit-box layout model [1]. For this legacy clamping to function, the following properties must be present [1]: 1. display: -webkit-box or display: -webkit-inline-box [1] 2. -webkit-box-orient: vertical [1] 3. -webkit-line-clamp: [1] If these conditions are not met—specifically if the display value is set to a modern value like flex instead of the legacy -webkit-box—the legacy line-clamp mechanism will not engage, as the element will be treated as a standard flex container rather than the legacy block container required for that specific implementation [1].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== item.styles.ts relevant section =="
sed -n '60,95p' packages/ui/src/mosaic/components/item/item.styles.ts

echo
echo "== item component usages of description =="
rg -n -C4 'item\.description|description\(' packages/ui/src/mosaic/components packages/ui/src | head -n 120

echo
echo "== stylex package/config =="
fd -a 'stylex' package.json tsconfig*.json . | head -n 40

Repository: clerk/javascript

Length of output: 3203


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== candidate mosaic item files =="
fd -a 'item' packages/ui/src/mosaic/components | sed 's#^\./##'

echo
echo "== imports/usages referencing stylex.create or item styles =="
rg -n "from ['\"]\\.\\.\\/\\.\\.\\/item\\.styles['\"]|from ['\"]\\.\\/item\\.styles['\"]|stylex\\.create|WebkitLineClamp|description" packages/ui/src/mosaic packages/ui/src/components packages/ui/src | head -n 200

echo
echo "== package refs for stylex ="
rg -n '"`@stylexjs/`|stylex' package.json packages -g 'package.json' -g '*.ts' -g '*.tsx' | head -n 120

echo
echo "== stylex declaration/token syntax examples =="
sed -n '1,160p' packages/ui/src/mosaic/tokens.stylex.ts

Repository: clerk/javascript

Length of output: 39165


🌐 Web query:

MDN line-clamp CSS property does not require -webkit-box display

💡 Result:

The statement that the CSS line-clamp property does not require display is correct for the standardized version of the property, but incorrect for the commonly used, legacy vendor-prefixed version [1][2]. 1. Standardized line-clamp: The standardized CSS line-clamp property (defined in the CSS Overflow Module Level 4) is designed to function without the specific legacy requirements of its predecessor [3][4]. It is a shorthand property that controls line limiting through internal mechanisms (max-lines, block-ellipsis, and continue) and does not depend on the specific display or box-orient properties required by the legacy version [3][2]. 2. Vendor-prefixed -webkit-line-clamp: The widely used legacy property, -webkit-line-clamp, specifically requires the display property to be set to -webkit-box or -webkit-inline-box, in combination with -webkit-box-orient: vertical [1][5][6]. Because this legacy property is still heavily used for compatibility, this dependency is a well-known and documented requirement [1][7]. In summary, while the modern, standardized line-clamp property does not have these restrictions, the prefixed version that developers often encounter in existing codebases strictly requires them [1][2].

Citations:


Enable the two-line clamp.

WebkitLineClamp only takes effect when the legacy box layout is enabled, so descriptions can overflow their intended two-line height.

Proposed fix
 base: {
+  display: '-webkit-box',
   overflow: 'hidden',
   WebkitBoxOrient: 'vertical',
   WebkitLineClamp: 2,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export const description = stylex.create({
base: {
overflow: 'hidden',
WebkitBoxOrient: 'vertical',
WebkitLineClamp: 2,
color: colorVars['--cl-color-muted-foreground'],
fontSize: typeScaleVars['--cl-text-label-sm-size'],
fontWeight: 400,
lineHeight: typeScaleVars['--cl-text-label-sm-leading'],
},
});
export const description = stylex.create({
base: {
display: '-webkit-box',
overflow: 'hidden',
WebkitBoxOrient: 'vertical',
WebkitLineClamp: 2,
color: colorVars['--cl-color-muted-foreground'],
fontSize: typeScaleVars['--cl-text-label-sm-size'],
fontWeight: 400,
lineHeight: typeScaleVars['--cl-text-label-sm-leading'],
},
});
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/mosaic/components/item/item.styles.ts` around lines 77 - 87,
Update the description style in the stylex.create definition to enable the
required legacy WebKit box layout alongside WebkitLineClamp, preserving the
existing two-line clamp and other styling.

Comment on lines +8 to +11
export type ItemProps = Omit<ComponentProps<'div'>, 'render'> & {
/** Render a custom element (e.g. a link or button) in place of the default `div`. */
render?: RenderProp<React.HTMLAttributes<HTMLElement>>;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Implement the advertised Item public API.

variant and size are neither declared nor mapped to styling axes, and Item.Footer is not implemented or assigned. Consumers following this PR’s contract will get TypeScript errors or undefined at runtime. Add the props, styles, footer slot, and corresponding tests/docs.

Also applies to: 147-155

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/ui/src/mosaic/components/item/item.tsx` around lines 8 - 11, The
Item public API is incomplete: add typed variant and size props, map them to the
component’s styling axes, implement the Item.Footer slot, and assign it on the
exported Item component. Update the associated tests and documentation to cover
these APIs, using the existing Item styling and slot patterns.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
references/mosaic-architecture.md (1)

124-126: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a migration guide for the styling-contract transition.

The documentation introduces new .cl-*/data-* selectors alongside the legacy data-cl-* contract, but provides no before/after migration example. Add a short migration section explaining which selectors apply to legacy and StyleX-authored components.

As per coding guidelines, Markdown files must include migration guides for breaking changes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@references/mosaic-architecture.md` around lines 124 - 126, Add a concise
migration section near “Appearance & cascade” documenting the transition from
legacy data-cl-* selectors to the new .cl-* and data-* contract. Include a
before/after example and clearly state which selectors apply to Emotion
slot-recipe components versus StyleX-authored components, including that StyleX
uses className/style and does not read appearance.elements.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@references/mosaic-architecture.md`:
- Line 9: Update the styling contract statements in the overview and API
sections to scope `.cl-<slot>` classes and `data-<axis>` attributes to
StyleX-authored parts only. Explicitly distinguish legacy slot-recipe
components, which retain the `data-cl-slot` and `data-cl-*` contract, and remove
any wording that implies every Mosaic part emits the StyleX class contract.

---

Nitpick comments:
In `@references/mosaic-architecture.md`:
- Around line 124-126: Add a concise migration section near “Appearance &
cascade” documenting the transition from legacy data-cl-* selectors to the new
.cl-* and data-* contract. Include a before/after example and clearly state
which selectors apply to Emotion slot-recipe components versus StyleX-authored
components, including that StyleX uses className/style and does not read
appearance.elements.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro Plus

Run ID: bb2d4296-cad5-49f0-b9e0-a57c3da0ef98

📥 Commits

Reviewing files that changed from the base of the PR and between 45d7685 and 497a792.

📒 Files selected for processing (1)
  • references/mosaic-architecture.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • clerk/clerk_go (manual)
  • clerk/dashboard (manual)
  • clerk/accounts (manual)
  • clerk/backoffice (manual)
  • clerk/clerk (manual)
  • clerk/clerk-docs (manual)
  • clerk/cloudflare-workers (manual)

Mosaic uses Emotion for CSS-in-JS but delivers theme tokens via its own React context (not Emotion's `ThemeProvider`). This avoids type conflicts with the existing system's `InternalTheme` augmentation on Emotion's global `Theme` interface.

The public styling contract is **data attributes** (`data-cl-slot`, `data-cl-<state>`, `data-cl-<variant>`), the same convention shipping in `@clerk/headless`. There is no classname derivation, no `__state` concatenation, and no central appearance-key registry. Components are authored with **slot recipes** (`defineSlotRecipe`), which own variants, slot identity, state→attribute mapping, and the appearance cascade in one place.
The public styling contract is a **stable per-slot class** plus **`data-<axis>` attributes**: a part emits `class="cl-<slot>"` for its identity (`.cl-button`, `.cl-item`) and `data-<axis>="<value>"` / presence `data-<state>` for its variants and state. Consumers target those, never StyleX's hashed atoms; tokens ship as overridable `--cl-*` custom properties. Newer components are authored with **StyleX** (`stylex.create` + the `themeProps`/`mergeStyleProps` helpers in `props.ts`). The slot-recipe engine described further below (`defineSlotRecipe`, `useRecipe`, and its older `data-cl-slot`/`data-cl-*` attribute contract) is the legacy authoring path still used by un-migrated components during the migration.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Scope the new styling contract to StyleX-authored parts.

Lines 9 and 163 state that legacy slot-recipe components still use data-cl-slot, but line 89 says every Mosaic part emits .cl-<slot>. This can lead consumers to target selectors that legacy components do not render. Qualify the overview and API section to distinguish StyleX components from the legacy contract.

Also applies to: 89-95, 163-164

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@references/mosaic-architecture.md` at line 9, Update the styling contract
statements in the overview and API sections to scope `.cl-<slot>` classes and
`data-<axis>` attributes to StyleX-authored parts only. Explicitly distinguish
legacy slot-recipe components, which retain the `data-cl-slot` and `data-cl-*`
contract, and remove any wording that implies every Mosaic part emits the StyleX
class contract.

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.

1 participant