diff --git a/.changeset/happy-panthers-approve.md b/.changeset/happy-panthers-approve.md
new file mode 100644
index 00000000000..8f30c7fe15e
--- /dev/null
+++ b/.changeset/happy-panthers-approve.md
@@ -0,0 +1,6 @@
+---
+'@clerk/clerk-js': major
+---
+
+Make the user name on clickable, i.e. part of the button's trigger.
+This change inverts the positions of `cl-userButtonTrigger` and `cl-userButtonBox`, the latter now being a child of the former.
diff --git a/packages/clerk-js/src/ui/components/UserButton/UserButton.tsx b/packages/clerk-js/src/ui/components/UserButton/UserButton.tsx
index 6115e3bb7bb..55820f5c7eb 100644
--- a/packages/clerk-js/src/ui/components/UserButton/UserButton.tsx
+++ b/packages/clerk-js/src/ui/components/UserButton/UserButton.tsx
@@ -1,9 +1,7 @@
-import { useUser } from '@clerk/shared/react';
import { useId } from 'react';
-import { getFullName, getIdentifier } from '../../../utils/user';
import { useUserButtonContext, withCoreUserGuard } from '../../contexts';
-import { descriptors, Flex, Flow, Text } from '../../customizables';
+import { Flow } from '../../customizables';
import { Popover, withCardStateProvider, withFloatingTree } from '../../elements';
import { usePopover } from '../../hooks';
import { UserButtonPopover } from './UserButtonPopover';
@@ -21,51 +19,26 @@ const _UserButton = withFloatingTree(() => {
return (
-
+
-
-
-
-
-
-
+
);
});
-const UserButtonTopLevelIdentifier = () => {
- const { user } = useUser();
-
- const { showName } = useUserButtonContext();
- if (!user) {
- return null;
- }
- return showName ? (
-
- {getFullName(user) || getIdentifier(user)}
-
- ) : null;
-};
-
export const UserButton = withCoreUserGuard(withCardStateProvider(_UserButton));
diff --git a/packages/clerk-js/src/ui/components/UserButton/UserButtonTopLevelIdentifier.tsx b/packages/clerk-js/src/ui/components/UserButton/UserButtonTopLevelIdentifier.tsx
new file mode 100644
index 00000000000..b82635d578a
--- /dev/null
+++ b/packages/clerk-js/src/ui/components/UserButton/UserButtonTopLevelIdentifier.tsx
@@ -0,0 +1,24 @@
+import { useUser } from '@clerk/shared/react';
+
+import { getFullName, getIdentifier } from '../../../utils/user';
+import { descriptors, Text } from '../../customizables';
+
+type UserButtonTopLevelIdentifierProps = {
+ showName: boolean | undefined;
+};
+
+export const UserButtonTopLevelIdentifier = ({ showName }: UserButtonTopLevelIdentifierProps) => {
+ const { user } = useUser();
+
+ if (!user || !showName) {
+ return null;
+ }
+ return (
+
+ {getFullName(user) || getIdentifier(user)}
+
+ );
+};
diff --git a/packages/clerk-js/src/ui/components/UserButton/UserButtonTrigger.tsx b/packages/clerk-js/src/ui/components/UserButton/UserButtonTrigger.tsx
index e16b3807069..3576d975935 100644
--- a/packages/clerk-js/src/ui/components/UserButton/UserButtonTrigger.tsx
+++ b/packages/clerk-js/src/ui/components/UserButton/UserButtonTrigger.tsx
@@ -1,9 +1,11 @@
import { useUser } from '@clerk/shared/react';
import { forwardRef } from 'react';
-import { Button, descriptors } from '../../customizables';
+import { useUserButtonContext } from '../../contexts';
+import { Button, descriptors, Flex } from '../../customizables';
import { UserAvatar, withAvatarShimmer } from '../../elements';
import type { PropsOfComponent } from '../../styledSystem';
+import { UserButtonTopLevelIdentifier } from './UserButtonTopLevelIdentifier';
type UserButtonTriggerProps = PropsOfComponent & {
isOpen: boolean;
@@ -13,24 +15,33 @@ export const UserButtonTrigger = withAvatarShimmer(
forwardRef((props, ref) => {
const { sx, ...rest } = props;
const { user } = useUser();
+ const { showName } = useUserButtonContext();
return (
);
}),