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 ( ); }),