Skip to content

feat(clerk-js): Retheme profile cards and scroll boxes #2290

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .changeset/red-shrimps-hunt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
---
1 change: 0 additions & 1 deletion packages/clerk-js/src/ui.retheme/common/BlockButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ export const AddBlockButton = (props: BlockButtonProps) => {
const { leftIcon, ...rest } = props;
return (
<BlockButton
colorScheme='primary'
{...rest}
sx={theme => ({ justifyContent: 'flex-start', gap: theme.space.$2 })}
leftIcon={
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ export const OrganizationMembers = withCardStateProvider(() => {
localizationKey={localizationKeys('organizationProfile.start.headerTitle__members')}
textVariant='xxlargeMedium'
/>
<Header.Subtitle localizationKey={localizationKeys('organizationProfile.start.headerSubtitle__members')} />
</Header.Root>
<Tabs>
<TabsList>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ const _OrganizationProfile = (_: OrganizationProfileProps) => {
const AuthenticatedRoutes = withCoreUserGuard(() => {
const contentRef = React.useRef<HTMLDivElement>(null);
return (
<ProfileCard sx={{ height: '100%' }}>
<ProfileCard
sx={t => ({ display: 'grid', gridTemplateColumns: '1fr 3fr', height: t.sizes.$176, overflow: 'hidden' })}
Copy link
Member

Choose a reason for hiding this comment

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

Should these be hardcoded: '1fr 3fr'?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't see why not

>
<OrganizationProfileNavbar contentRef={contentRef}>
<OrganizationProfileRoutes contentRef={contentRef} />
</OrganizationProfileNavbar>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ export const OrganizationSettings = () => {
localizationKey={localizationKeys('organizationProfile.start.headerTitle__settings')}
textVariant='xxlargeMedium'
/>
<Header.Subtitle localizationKey={localizationKeys('organizationProfile.start.headerSubtitle__settings')} />
</Header.Root>
<OrganizationProfileSection />
<Gate permission='org:sys_domains:read'>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ export const RootPage = withCardStateProvider(() => {
localizationKey={localizationKeys('userProfile.start.headerTitle__account')}
textVariant='xxlargeMedium'
/>
<Header.Subtitle localizationKey={localizationKeys('userProfile.start.headerSubtitle__account')} />
</Header.Root>

<UserProfileSection />
Expand All @@ -69,7 +68,6 @@ export const RootPage = withCardStateProvider(() => {
localizationKey={localizationKeys('userProfile.start.headerTitle__security')}
textVariant='xxlargeMedium'
/>
<Header.Subtitle localizationKey={localizationKeys('userProfile.start.headerSubtitle__security')} />
</Header.Root>
{showPassword && <PasswordSection />}
{showMfa && <MfaSection />}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ const _UserProfile = (_: UserProfileProps) => {
const AuthenticatedRoutes = withCoreUserGuard(() => {
const contentRef = React.useRef<HTMLDivElement>(null);
return (
<ProfileCard sx={{ height: '100%' }}>
<ProfileCard
sx={t => ({ display: 'grid', gridTemplateColumns: '1fr 3fr', height: t.sizes.$176, overflow: 'hidden' })}
>
<UserProfileNavbar contentRef={contentRef}>
<UserProfileRoutes contentRef={contentRef} />
<UserProfileRoutes />
</UserProfileNavbar>
</ProfileCard>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const UserProfileNavbar = (
props: React.PropsWithChildren<Pick<PropsOfComponent<typeof NavBar>, 'contentRef'>>,
) => {
const { pages } = useUserProfileContext();

return (
<NavbarContextProvider>
<NavBar
Expand Down
32 changes: 12 additions & 20 deletions packages/clerk-js/src/ui.retheme/elements/Card.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,27 +71,18 @@ export const Card = React.forwardRef<HTMLDivElement, CardProps>((props, ref) =>

export const ProfileCard = React.forwardRef<HTMLDivElement, CardProps>((props, ref) => {
const { sx, children, ...rest } = props;
const { branded } = useEnvironment().displayConfig;
return (
<BaseCard ref={ref}>
<Flex
sx={[
t => ({
width: t.sizes.$220,
}),
sx,
]}
{...rest}
>
{children}
</Flex>
<CardFooter>
{branded && (
<CardFooterItem>
<PoweredByClerkTag />
</CardFooterItem>
)}
</CardFooter>
<BaseCard
ref={ref}
sx={[
t => ({
width: t.sizes.$220,
}),
sx,
]}
{...rest}
>
{children}
</BaseCard>
);
});
Expand All @@ -112,6 +103,7 @@ export const BaseCard = React.forwardRef<HTMLDivElement, BaseCardProps>((props,
sx={[
t => ({
backgroundColor: t.colors.$colorBackground,
overflow: 'hidden',
willChange: 'transform, opacity, height',
transitionProperty: t.transitionProperty.$common,
transitionDuration: '200ms',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ export const InvisibleRootBox = makeCustomizable(_InvisibleRootBox, {
defaultStyles: t => ({
boxSizing: 'border-box',
width: 'fit-content',

fontFamily: t.fonts.$main,
fontStyle: t.fontStyles.$normal,
}),
Expand Down
38 changes: 21 additions & 17 deletions packages/clerk-js/src/ui.retheme/elements/Navbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { animations, mqu } from '../styledSystem';
import { colors, sleep } from '../utils';
import { withFloatingTree } from './contexts';
import { Popover } from './Popover';
import { PoweredByClerkTag } from './PoweredByClerk';

type NavbarContextValue = { isOpen: boolean; open: () => void; close: () => void };
export const [NavbarContext, useNavbarContext, useUnsafeNavbarContext] =
Expand Down Expand Up @@ -187,34 +188,37 @@ const NavbarContainer = (
<Col
elementDescriptor={descriptors.navbar}
sx={t => ({
flex: `0 0 ${t.space.$60}`,
maxWidth: t.space.$60,
borderRight: `${t.borders.$normal} ${t.colors.$blackAlpha300}`,
backgroundColor: t.colors.$blackAlpha100,
padding: `${t.space.$9x5} ${t.space.$6}`,
[mqu.md]: {
display: 'none',
},
gap: t.space.$6,
padding: `${t.space.$9x5} ${t.space.$6} ${t.space.$3} ${t.space.$6}`,
color: t.colors.$colorText,
justifyContent: 'space-between',
})}
>
<Col
sx={t => ({
gap: t.space.$0x5,
})}
>
<Heading
as='h1'
localizationKey={title}
/>
<Col sx={t => ({ gap: t.space.$6, flex: `0 0 ${t.space.$60}` })}>
<Col
sx={t => ({
gap: t.space.$0x5,
})}
>
<Heading
as='h1'
localizationKey={title}
/>

<Text
colorScheme='neutral'
localizationKey={description}
/>
<Text
colorScheme='neutral'
variant='smallRegular'
localizationKey={description}
/>
</Col>
{props.children}
</Col>
{props.children}
<PoweredByClerkTag sx={{ justifyContent: 'start' }} />
</Col>
);
};
Expand Down
4 changes: 2 additions & 2 deletions packages/clerk-js/src/ui.retheme/elements/PopoverCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { descriptors, Flex, Flow, Link, localizationKeys, useAppearance } from '
import type { PropsOfComponent } from '../styledSystem';
import { animations } from '../styledSystem';
import { BaseCard } from './Card';
import { PoweredByClerkText } from './PoweredByClerk';
import { PoweredByClerkTag } from './PoweredByClerk';

const PopoverCardRoot = React.forwardRef<HTMLDivElement, PropsOfComponent<typeof BaseCard>>((props, ref) => {
return (
Expand Down Expand Up @@ -67,7 +67,7 @@ const PopoverCardFooter = (props: PropsOfComponent<typeof Flex>) => {
]}
{...rest}
>
<PoweredByClerkText />
<PoweredByClerkTag />
<PopoverCardLinks />
</Flex>
);
Expand Down
58 changes: 17 additions & 41 deletions packages/clerk-js/src/ui.retheme/elements/PoweredByClerk.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,57 +5,33 @@ import { Flex, Icon, Link, Text } from '../customizables';
import { LogoMark } from '../icons';
import type { PropsOfComponent } from '../styledSystem';

export const PoweredByClerkText = React.memo(() => {
const { branded } = useEnvironment().displayConfig;

return (
<Flex
gap={1}
align='center'
justify='center'
sx={t => ({ width: '100%', color: t.colors.$colorTextSecondary })}
>
{branded ? (
<>
<Text
variant='extraSmallRegular'
sx={{ color: 'inherit' }}
>
Secured by
</Text>
<LogoMarkIconLink />
</>
) : null}
</Flex>
);
});

export const PoweredByClerkTag = React.memo(
React.forwardRef<HTMLDivElement, PropsOfComponent<typeof Flex>>((props, ref) => {
const { sx, ...rest } = props;
const { branded } = useEnvironment().displayConfig;

return branded ? (
return (
<Flex
gap={2}
gap={1}
align='center'
justify='center'
sx={t => ({
width: '100%',
color: t.colors.$colorTextSecondary,
padding: t.space.$2,
})}
{...props}
sx={[t => ({ width: '100%', color: t.colors.$colorTextSecondary }), sx]}
{...rest}
ref={ref}
>
<Text
variant='regularRegular'
sx={theme => ({ color: 'inherit', letterSpacing: theme.space.$none })}
>
Secured by
</Text>
<LogoMarkIconLink />
{branded ? (
<>
<Text
variant='regularRegular'
sx={{ color: 'inherit' }}
>
Secured by
</Text>
<LogoMarkIconLink />
</>
) : null}
</Flex>
) : null;
);
}),
);

Expand Down
17 changes: 5 additions & 12 deletions packages/clerk-js/src/ui.retheme/elements/ProfileCardContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ export const ProfileCardContent = (props: ProfileCardContentProps) => {
}, [router.currentPath]);

return (
<ScrollerContainer>
<Col
elementDescriptor={descriptors.scrollBox}
sx={t => ({ position: 'relative', borderRadius: t.radii.$xl, width: '100%', overflowY: 'auto' })}
>
<Col
elementDescriptor={descriptors.pageScrollBox}
sx={theme => ({
Expand All @@ -44,16 +47,6 @@ export const ProfileCardContent = (props: ProfileCardContentProps) => {
>
{children}
</Col>
</ScrollerContainer>
);
};

const ScrollerContainer = (props: React.PropsWithChildren<Record<never, never>>) => {
return (
<Col
elementDescriptor={descriptors.scrollBox}
sx={t => ({ position: 'relative', borderRadius: t.radii.$xl, width: '100%', overflow: 'hidden' })}
{...props}
/>
</Col>
);
};
6 changes: 1 addition & 5 deletions packages/localizations/src/en-US.retheme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -251,10 +251,8 @@ export const enUS: LocalizationResource = {
description: 'Manage your account info.',
},
start: {
headerTitle__account: 'Account',
headerTitle__account: 'Profile',
headerTitle__security: 'Security',
headerSubtitle__account: 'Manage your account information',
headerSubtitle__security: 'Manage your security preferences',
profileSection: {
title: 'Profile',
},
Expand Down Expand Up @@ -553,8 +551,6 @@ export const enUS: LocalizationResource = {
start: {
headerTitle__members: 'Members',
headerTitle__settings: 'Settings',
headerSubtitle__members: 'View and manage organization members',
headerSubtitle__settings: 'Manage organization settings',
},
profilePage: {
title: 'Organization Profile',
Expand Down
4 changes: 0 additions & 4 deletions packages/types/src/localization.retheme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,6 @@ type _LocalizationResource = {
start: {
headerTitle__account: LocalizationValue;
headerTitle__security: LocalizationValue;
headerSubtitle__account: LocalizationValue;
headerSubtitle__security: LocalizationValue;
profileSection: {
title: LocalizationValue;
};
Expand Down Expand Up @@ -556,8 +554,6 @@ type _LocalizationResource = {
start: {
headerTitle__members: LocalizationValue;
headerTitle__settings: LocalizationValue;
headerSubtitle__members: LocalizationValue;
headerSubtitle__settings: LocalizationValue;
};
profilePage: {
title: LocalizationValue;
Expand Down