Skip to content

Commit 5ed0d98

Browse files
authored
fix(chonk-ui): compute avatar colors from chart palette (#95240)
1 parent ad1e565 commit 5ed0d98

File tree

5 files changed

+23
-43
lines changed

5 files changed

+23
-43
lines changed

static/app/components/core/avatar/index.stories.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ export default Storybook.story('Avatar', (story, APIReference) => {
1717
return (
1818
<Fragment>
1919
<p>
20-
The <code>{'<Avatar user={user} />'}</code> component displays an avatar for a
21-
user.
20+
The <code>{'<UserAvatar user={user} />'}</code> component displays an avatar for
21+
a user.
2222
</p>
2323
<UserAvatar
2424
user={{
@@ -41,8 +41,8 @@ export default Storybook.story('Avatar', (story, APIReference) => {
4141
return (
4242
<Fragment>
4343
<p>
44-
The <code>{'<Avatar team={team} />'}</code> component displays an avatar for a
45-
team.
44+
The <code>{'<TeamAvatar team={team} />'}</code> component displays an avatar for
45+
a team.
4646
</p>
4747
<TeamAvatar
4848
team={{
@@ -73,8 +73,8 @@ export default Storybook.story('Avatar', (story, APIReference) => {
7373
return (
7474
<Fragment>
7575
<p>
76-
The <code>{'<Avatar project={project} />'}</code> component displays an avatar
77-
for a project.
76+
The <code>{'<ProjectAvatar project={project} />'}</code> component displays an
77+
avatar for a project.
7878
</p>
7979
<ProjectAvatar
8080
project={{
@@ -89,8 +89,8 @@ export default Storybook.story('Avatar', (story, APIReference) => {
8989
return (
9090
<Fragment>
9191
<p>
92-
The <code>{'<Avatar organization={organization} />'}</code> component displays
93-
an avatar for an organization.
92+
The <code>{'<OrganizationAvatar organization={organization} />'}</code>{' '}
93+
component displays an avatar for an organization.
9494
</p>
9595
<OrganizationAvatar
9696
organization={{
@@ -131,8 +131,8 @@ export default Storybook.story('Avatar', (story, APIReference) => {
131131
return (
132132
<Fragment>
133133
<p>
134-
The <code>{'<Avatar sentryApp={sentryApp} />'}</code> component displays an
135-
avatar for a SentryApp.
134+
The <code>{'<SentryAppAvatar sentryApp={sentryApp} />'}</code> component
135+
displays an avatar for a SentryApp.
136136
</p>
137137
<SentryAppAvatar
138138
sentryApp={{
@@ -149,8 +149,8 @@ export default Storybook.story('Avatar', (story, APIReference) => {
149149
return (
150150
<Fragment>
151151
<p>
152-
The <code>{'<Avatar docIntegration={docIntegration} />'}</code> component
153-
displays an avatar for a doc integration.
152+
The <code>{'<DocIntegrationAvatar docIntegration={docIntegration} />'}</code>{' '}
153+
component displays an avatar for a doc integration.
154154
</p>
155155
<DocIntegrationAvatar
156156
docIntegration={{

static/app/components/core/avatar/letterAvatar.tsx

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type React from 'react';
22
import type {DO_NOT_USE_ChonkTheme} from '@emotion/react';
33
import {useTheme} from '@emotion/react';
44
import styled from '@emotion/styled';
5+
import color from 'color';
56

67
import {isChonkTheme} from 'sentry/utils/theme/withChonk';
78

@@ -10,8 +11,8 @@ import {type BaseAvatarStyleProps, baseAvatarStyles} from './baseAvatarComponent
1011
interface LetterAvatarProps
1112
extends React.HTMLAttributes<SVGSVGElement>,
1213
BaseAvatarStyleProps {
14+
identifier: string | undefined;
1315
displayName?: string;
14-
identifier?: string;
1516
ref?: React.Ref<SVGSVGElement>;
1617
}
1718

@@ -130,30 +131,9 @@ function getInitials(displayName: string | undefined) {
130131
return initials.toUpperCase();
131132
}
132133

133-
function makeChonkLetterAvatarColors(theme: DO_NOT_USE_ChonkTheme): Array<{
134-
background: string;
135-
content: string;
136-
}> {
137-
return [
138-
{
139-
background: theme.colors.chonk.blue400,
140-
content: theme.colors.white,
141-
},
142-
{
143-
background: theme.colors.chonk.pink400,
144-
content: theme.colors.black,
145-
},
146-
{
147-
background: theme.colors.chonk.red400,
148-
content: theme.colors.white,
149-
},
150-
{
151-
background: theme.colors.chonk.yellow400,
152-
content: theme.colors.black,
153-
},
154-
{
155-
background: theme.colors.chonk.green400,
156-
content: theme.colors.black,
157-
},
158-
];
134+
function makeChonkLetterAvatarColors(theme: DO_NOT_USE_ChonkTheme) {
135+
return theme.chart.getColorPalette(9).map(c => ({
136+
background: c,
137+
content: color(c).isDark() ? theme.colors.white : theme.colors.black,
138+
}));
159139
}

static/app/components/core/avatar/organizationAvatar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {explodeSlug} from 'sentry/utils';
44
import {BaseAvatar, type BaseAvatarProps} from './baseAvatar';
55

66
interface OrganizationAvatarProps extends BaseAvatarProps {
7-
organization?: OrganizationSummary;
7+
organization: OrganizationSummary | undefined;
88
ref?: React.Ref<HTMLSpanElement>;
99
}
1010

@@ -18,7 +18,7 @@ export function OrganizationAvatar({
1818
return null;
1919
}
2020

21-
const slug = organization?.slug || '';
21+
const slug = organization.slug || '';
2222
const title = explodeSlug(slug);
2323

2424
return (

static/app/components/core/avatar/sentryAppAvatar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import type {AvatarSentryApp} from 'sentry/types/integrations';
44
import {BaseAvatar, type BaseAvatarProps} from './baseAvatar';
55

66
interface SentryAppAvatarProps extends BaseAvatarProps {
7+
sentryApp: AvatarSentryApp | undefined;
78
isColor?: boolean;
89
isDefault?: boolean;
910
ref?: React.Ref<HTMLSpanElement>;
10-
sentryApp?: AvatarSentryApp;
1111
}
1212

1313
export function SentryAppAvatar({

static/app/components/core/avatar/userAvatar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import {userDisplayName} from 'sentry/utils/formatters';
77
import {BaseAvatar, type BaseAvatarProps} from './baseAvatar';
88

99
export interface UserAvatarProps extends BaseAvatarProps {
10+
user: Actor | AvatarUser | undefined;
1011
gravatar?: boolean;
1112
ref?: React.Ref<HTMLSpanElement | SVGSVGElement | HTMLImageElement>;
1213
renderTooltip?: (user: AvatarUser | Actor) => React.ReactNode;
13-
user?: Actor | AvatarUser;
1414
}
1515

1616
export function UserAvatar({

0 commit comments

Comments
 (0)