Skip to content

Commit 0b6b6c8

Browse files
committed
Update avatar meta color tokens
1 parent 9f61a07 commit 0b6b6c8

4 files changed

Lines changed: 215 additions & 34 deletions

File tree

src/avatar/avatar.mdx

Lines changed: 83 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,34 +85,114 @@ component appearance. The values shown below are the default values.
8585
#### Avatar colors
8686

8787
<ColorPalette>
88-
<ColorItem title="--reactist-avatar-initials-color" colors={['#ffffff']} />
88+
<ColorItem
89+
title="--reactist-avatar-initials-color"
90+
colors={['var(--reactist-actionable-primary-idle-tint)']}
91+
/>
8992
<ColorItem title="--reactist-avatar-border-tint" colors={['#0000001a']} />
90-
<ColorItem title="--reactist-avatar-empty-fill" colors={['var(--reactist-framework-fill-crest)']} />
93+
<ColorItem
94+
title="--reactist-avatar-empty-fill"
95+
colors={['var(--reactist-framework-fill-crest)']}
96+
/>
9197
</ColorPalette>
9298

93-
#### Avatar meta fills
99+
#### Avatar meta colors
94100

95101
<ColorPalette>
96102
<ColorItem title="--reactist-avatar-meta-fill-0" colors={['#b8255f']} />
103+
<ColorItem
104+
title="--reactist-avatar-meta-on-idle-tint-0"
105+
colors={['var(--reactist-avatar-initials-color)']}
106+
/>
97107
<ColorItem title="--reactist-avatar-meta-fill-1" colors={['#dc4c3e']} />
108+
<ColorItem
109+
title="--reactist-avatar-meta-on-idle-tint-1"
110+
colors={['var(--reactist-avatar-initials-color)']}
111+
/>
98112
<ColorItem title="--reactist-avatar-meta-fill-2" colors={['#f48318']} />
113+
<ColorItem
114+
title="--reactist-avatar-meta-on-idle-tint-2"
115+
colors={['var(--reactist-avatar-initials-color)']}
116+
/>
99117
<ColorItem title="--reactist-avatar-meta-fill-3" colors={['#fecf05']} />
118+
<ColorItem title="--reactist-avatar-meta-on-idle-tint-3" colors={['#202020']} />
100119
<ColorItem title="--reactist-avatar-meta-fill-4" colors={['#aeb83a']} />
120+
<ColorItem
121+
title="--reactist-avatar-meta-on-idle-tint-4"
122+
colors={['var(--reactist-avatar-initials-color)']}
123+
/>
101124
<ColorItem title="--reactist-avatar-meta-fill-5" colors={['#7ecc48']} />
125+
<ColorItem
126+
title="--reactist-avatar-meta-on-idle-tint-5"
127+
colors={['var(--reactist-avatar-initials-color)']}
128+
/>
102129
<ColorItem title="--reactist-avatar-meta-fill-6" colors={['#369307']} />
130+
<ColorItem
131+
title="--reactist-avatar-meta-on-idle-tint-6"
132+
colors={['var(--reactist-avatar-initials-color)']}
133+
/>
103134
<ColorItem title="--reactist-avatar-meta-fill-7" colors={['#52ccb8']} />
135+
<ColorItem
136+
title="--reactist-avatar-meta-on-idle-tint-7"
137+
colors={['var(--reactist-avatar-initials-color)']}
138+
/>
104139
<ColorItem title="--reactist-avatar-meta-fill-8" colors={['#148fad']} />
140+
<ColorItem
141+
title="--reactist-avatar-meta-on-idle-tint-8"
142+
colors={['var(--reactist-avatar-initials-color)']}
143+
/>
105144
<ColorItem title="--reactist-avatar-meta-fill-9" colors={['#3ab9e2']} />
145+
<ColorItem title="--reactist-avatar-meta-on-idle-tint-9" colors={['#202020']} />
106146
<ColorItem title="--reactist-avatar-meta-fill-10" colors={['#96c3eb']} />
147+
<ColorItem
148+
title="--reactist-avatar-meta-on-idle-tint-10"
149+
colors={['var(--reactist-avatar-initials-color)']}
150+
/>
107151
<ColorItem title="--reactist-avatar-meta-fill-11" colors={['#2a67e2']} />
152+
<ColorItem
153+
title="--reactist-avatar-meta-on-idle-tint-11"
154+
colors={['var(--reactist-avatar-initials-color)']}
155+
/>
108156
<ColorItem title="--reactist-avatar-meta-fill-12" colors={['#692ec2']} />
157+
<ColorItem
158+
title="--reactist-avatar-meta-on-idle-tint-12"
159+
colors={['var(--reactist-avatar-initials-color)']}
160+
/>
109161
<ColorItem title="--reactist-avatar-meta-fill-13" colors={['#ac30cc']} />
162+
<ColorItem
163+
title="--reactist-avatar-meta-on-idle-tint-13"
164+
colors={['var(--reactist-avatar-initials-color)']}
165+
/>
110166
<ColorItem title="--reactist-avatar-meta-fill-14" colors={['#eb96c8']} />
167+
<ColorItem
168+
title="--reactist-avatar-meta-on-idle-tint-14"
169+
colors={['var(--reactist-avatar-initials-color)']}
170+
/>
111171
<ColorItem title="--reactist-avatar-meta-fill-15" colors={['#e05095']} />
172+
<ColorItem
173+
title="--reactist-avatar-meta-on-idle-tint-15"
174+
colors={['var(--reactist-avatar-initials-color)']}
175+
/>
112176
<ColorItem title="--reactist-avatar-meta-fill-16" colors={['#c9766f']} />
177+
<ColorItem
178+
title="--reactist-avatar-meta-on-idle-tint-16"
179+
colors={['var(--reactist-avatar-initials-color)']}
180+
/>
113181
<ColorItem title="--reactist-avatar-meta-fill-17" colors={['#808080']} />
182+
<ColorItem
183+
title="--reactist-avatar-meta-on-idle-tint-17"
184+
colors={['var(--reactist-avatar-initials-color)']}
185+
/>
114186
<ColorItem title="--reactist-avatar-meta-fill-18" colors={['#999999']} />
187+
<ColorItem
188+
title="--reactist-avatar-meta-on-idle-tint-18"
189+
colors={['var(--reactist-avatar-initials-color)']}
190+
/>
115191
<ColorItem title="--reactist-avatar-meta-fill-19" colors={['#ccae96']} />
192+
<ColorItem
193+
title="--reactist-avatar-meta-on-idle-tint-19"
194+
colors={['var(--reactist-avatar-initials-color)']}
195+
/>
116196
</ColorPalette>
117197

118198
### Component-owned variables
@@ -125,7 +205,6 @@ the component props instead of overriding them directly.
125205
.avatar {
126206
--reactist-avatar-size: 36px;
127207
--reactist-avatar-rounded-radius: 5px;
128-
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-0);
129208
}
130209
```
131210

src/avatar/avatar.module.css

Lines changed: 121 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,48 @@
11
:root {
2-
--reactist-avatar-initials-color: #ffffff;
2+
--reactist-avatar-initials-color: var(--reactist-actionable-primary-idle-tint);
33
--reactist-avatar-border-tint: #0000001a;
44
--reactist-avatar-empty-fill: var(--reactist-framework-fill-crest);
55

66
--reactist-avatar-meta-fill-0: #b8255f;
7-
--reactist-avatar-meta-tint-0: #d43876;
7+
--reactist-avatar-meta-on-idle-tint-0: var(--reactist-avatar-initials-color);
88
--reactist-avatar-meta-fill-1: #dc4c3e;
9-
--reactist-avatar-meta-tint-1: #ea584a;
9+
--reactist-avatar-meta-on-idle-tint-1: var(--reactist-avatar-initials-color);
1010
--reactist-avatar-meta-fill-2: #f48318;
11-
--reactist-avatar-meta-tint-2: #c77100;
11+
--reactist-avatar-meta-on-idle-tint-2: var(--reactist-avatar-initials-color);
1212
--reactist-avatar-meta-fill-3: #fecf05;
13-
--reactist-avatar-meta-tint-3: #b29104;
13+
--reactist-avatar-meta-on-idle-tint-3: #202020;
1414
--reactist-avatar-meta-fill-4: #aeb83a;
15-
--reactist-avatar-meta-tint-4: #949c31;
15+
--reactist-avatar-meta-on-idle-tint-4: var(--reactist-avatar-initials-color);
1616
--reactist-avatar-meta-fill-5: #7ecc48;
17-
--reactist-avatar-meta-tint-5: #65a33a;
17+
--reactist-avatar-meta-on-idle-tint-5: var(--reactist-avatar-initials-color);
1818
--reactist-avatar-meta-fill-6: #369307;
19-
--reactist-avatar-meta-tint-6: #369307;
19+
--reactist-avatar-meta-on-idle-tint-6: var(--reactist-avatar-initials-color);
2020
--reactist-avatar-meta-fill-7: #52ccb8;
21-
--reactist-avatar-meta-tint-7: #42a393;
21+
--reactist-avatar-meta-on-idle-tint-7: var(--reactist-avatar-initials-color);
2222
--reactist-avatar-meta-fill-8: #148fad;
23-
--reactist-avatar-meta-tint-8: #148fad;
23+
--reactist-avatar-meta-on-idle-tint-8: var(--reactist-avatar-initials-color);
2424
--reactist-avatar-meta-fill-9: #3ab9e2;
25-
--reactist-avatar-meta-tint-9: #319dc0;
25+
--reactist-avatar-meta-on-idle-tint-9: #202020;
2626
--reactist-avatar-meta-fill-10: #96c3eb;
27-
--reactist-avatar-meta-tint-10: #6988a4;
27+
--reactist-avatar-meta-on-idle-tint-10: var(--reactist-avatar-initials-color);
2828
--reactist-avatar-meta-fill-11: #2a67e2;
29-
--reactist-avatar-meta-tint-11: #4180ff;
29+
--reactist-avatar-meta-on-idle-tint-11: var(--reactist-avatar-initials-color);
3030
--reactist-avatar-meta-fill-12: #692ec2;
31-
--reactist-avatar-meta-tint-12: #692ec2;
31+
--reactist-avatar-meta-on-idle-tint-12: var(--reactist-avatar-initials-color);
3232
--reactist-avatar-meta-fill-13: #ac30cc;
33-
--reactist-avatar-meta-tint-13: #ca3fee;
33+
--reactist-avatar-meta-on-idle-tint-13: var(--reactist-avatar-initials-color);
3434
--reactist-avatar-meta-fill-14: #eb96c8;
35-
--reactist-avatar-meta-tint-14: #a4698c;
35+
--reactist-avatar-meta-on-idle-tint-14: var(--reactist-avatar-initials-color);
3636
--reactist-avatar-meta-fill-15: #e05095;
37-
--reactist-avatar-meta-tint-15: #e05095;
37+
--reactist-avatar-meta-on-idle-tint-15: var(--reactist-avatar-initials-color);
3838
--reactist-avatar-meta-fill-16: #c9766f;
39-
--reactist-avatar-meta-tint-16: #ff8e84;
39+
--reactist-avatar-meta-on-idle-tint-16: var(--reactist-avatar-initials-color);
4040
--reactist-avatar-meta-fill-17: #808080;
41-
--reactist-avatar-meta-tint-17: #808080;
41+
--reactist-avatar-meta-on-idle-tint-17: var(--reactist-avatar-initials-color);
4242
--reactist-avatar-meta-fill-18: #999999;
43-
--reactist-avatar-meta-tint-18: #999999;
43+
--reactist-avatar-meta-on-idle-tint-18: var(--reactist-avatar-initials-color);
4444
--reactist-avatar-meta-fill-19: #ccae96;
45-
--reactist-avatar-meta-tint-19: #8f7a69;
45+
--reactist-avatar-meta-on-idle-tint-19: var(--reactist-avatar-initials-color);
4646
}
4747

4848
.avatar {
@@ -62,6 +62,106 @@
6262
background-color: var(--reactist-avatar-meta-fill);
6363
}
6464

65+
.metaColor-0 {
66+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-0);
67+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-0);
68+
}
69+
70+
.metaColor-1 {
71+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-1);
72+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-1);
73+
}
74+
75+
.metaColor-2 {
76+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-2);
77+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-2);
78+
}
79+
80+
.metaColor-3 {
81+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-3);
82+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-3);
83+
}
84+
85+
.metaColor-4 {
86+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-4);
87+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-4);
88+
}
89+
90+
.metaColor-5 {
91+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-5);
92+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-5);
93+
}
94+
95+
.metaColor-6 {
96+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-6);
97+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-6);
98+
}
99+
100+
.metaColor-7 {
101+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-7);
102+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-7);
103+
}
104+
105+
.metaColor-8 {
106+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-8);
107+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-8);
108+
}
109+
110+
.metaColor-9 {
111+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-9);
112+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-9);
113+
}
114+
115+
.metaColor-10 {
116+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-10);
117+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-10);
118+
}
119+
120+
.metaColor-11 {
121+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-11);
122+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-11);
123+
}
124+
125+
.metaColor-12 {
126+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-12);
127+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-12);
128+
}
129+
130+
.metaColor-13 {
131+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-13);
132+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-13);
133+
}
134+
135+
.metaColor-14 {
136+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-14);
137+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-14);
138+
}
139+
140+
.metaColor-15 {
141+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-15);
142+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-15);
143+
}
144+
145+
.metaColor-16 {
146+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-16);
147+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-16);
148+
}
149+
150+
.metaColor-17 {
151+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-17);
152+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-17);
153+
}
154+
155+
.metaColor-18 {
156+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-18);
157+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-18);
158+
}
159+
160+
.metaColor-19 {
161+
--reactist-avatar-meta-fill: var(--reactist-avatar-meta-fill-19);
162+
--reactist-avatar-initials-color: var(--reactist-avatar-meta-on-idle-tint-19);
163+
}
164+
65165
.empty {
66166
background-color: var(--reactist-avatar-empty-fill);
67167
}

src/avatar/avatar.test.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,13 @@ describe('Avatar', () => {
4949
render(<Avatar data-testid="avatar" size={36} name="Jane Doe" />)
5050

5151
expect(screen.getByRole('img', { name: 'Jane Doe' })).toHaveTextContent('JD')
52-
expect(screen.getByTestId('avatar')).toHaveStyle({
53-
'--reactist-avatar-meta-fill': 'var(--reactist-avatar-meta-fill-0)',
54-
})
52+
expect(screen.getByTestId('avatar')).toHaveClass('metaColor-0')
53+
})
54+
55+
it('applies the deterministic meta color class for the avatar name', () => {
56+
render(<Avatar data-testid="avatar" size={36} name="John Doe" />)
57+
58+
expect(screen.getByTestId('avatar')).toHaveClass('metaColor-9')
5559
})
5660

5761
it('falls back to initials when image source map is empty', () => {

src/avatar/avatar.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import type { AvatarImage, AvatarShape, AvatarSize, ImageSources } from './utils
2121
type AvatarStyle = React.CSSProperties & {
2222
'--reactist-avatar-size': string
2323
'--reactist-avatar-rounded-radius': string
24-
'--reactist-avatar-meta-fill': string
2524
}
2625

2726
/**
@@ -104,16 +103,18 @@ function AvatarContent({
104103
const hasInitials = initials !== ''
105104
const label = alt ?? name
106105
const isDecorative = label === ''
106+
const metaColorIndex = getAvatarMetaColorIndex(name)
107107

108108
return (
109109
<Box
110110
className={classNames(
111111
styles.avatar,
112112
styles[`shape-${shape}`],
113+
styles[`metaColor-${metaColorIndex}`],
113114
!availableImageSources && !hasInitials && styles.empty,
114115
exceptionallySetClassName,
115116
)}
116-
style={getAvatarStyle(size, name)}
117+
style={getAvatarStyle(size)}
117118
data-testid={testId}
118119
aria-hidden={isDecorative || undefined}
119120
display="inlineFlex"
@@ -158,13 +159,10 @@ function AvatarContent({
158159
)
159160
}
160161

161-
function getAvatarStyle(size: AvatarSize, name?: string): AvatarStyle {
162-
const metaColorIndex = getAvatarMetaColorIndex(name)
163-
162+
function getAvatarStyle(size: AvatarSize): AvatarStyle {
164163
return {
165164
'--reactist-avatar-size': `${size}px`,
166165
'--reactist-avatar-rounded-radius': ROUNDED_AVATAR_RADIUS_BY_SIZE[size],
167-
'--reactist-avatar-meta-fill': `var(--reactist-avatar-meta-fill-${metaColorIndex})`,
168166
}
169167
}
170168

0 commit comments

Comments
 (0)