Skip to content

Commit bca205b

Browse files
authored
fix(theming): getColor shade default depends on transparency (#1979)
1 parent 23e010e commit bca205b

File tree

4 files changed

+46
-11
lines changed

4 files changed

+46
-11
lines changed

packages/tags/src/styled/StyledTag.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ describe('StyledTag', () => {
154154
it.each([['light'], ['dark']])('renders using a custom hue for %s mode', mode => {
155155
const renderFn = mode === 'light' ? render : renderDark;
156156
const { container } = renderFn(<StyledTag $hue="azure" />);
157-
const backgroundColor = mode === 'dark' ? PALETTE.azure[500] : PALETTE.azure[700];
157+
const backgroundColor = mode === 'dark' ? PALETTE.azure[600] : PALETTE.azure[700];
158158

159159
expect(container.firstChild).toHaveStyleRule('background-color', backgroundColor);
160160
});

packages/theming/src/utils/getColor.spec.ts

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ describe('getColor', () => {
9595
describe('by hue', () => {
9696
it.each([['light'], ['dark']])('gets the %s mode color specified by string', mode => {
9797
const color = getColor({ theme: mode === 'dark' ? DARK_THEME : DEFAULT_THEME, hue: 'red' });
98-
const expected = mode === 'dark' ? PALETTE.red[500] : PALETTE.red[700];
98+
const expected = mode === 'dark' ? PALETTE.red[600] : PALETTE.red[700];
9999

100100
expect(color).toBe(expected);
101101
});
@@ -108,7 +108,7 @@ describe('getColor', () => {
108108

109109
it('applies mode hue as expected', () => {
110110
const color = getColor({ theme: DARK_THEME, hue: 'red', dark: { hue: 'green' } });
111-
const expected = PALETTE.green[500];
111+
const expected = PALETTE.green[600];
112112

113113
expect(color).toBe(expected);
114114
});
@@ -136,11 +136,38 @@ describe('getColor', () => {
136136
['chromeHue', 'dark']
137137
])('gets the default %s for %s mode', (hue, mode) => {
138138
const color = getColor({ theme: mode === 'dark' ? DARK_THEME : DEFAULT_THEME, hue });
139-
const shade = mode === 'dark' ? 500 : 700;
139+
const shade = mode === 'dark' ? 600 : 700;
140140
const expected = (PALETTE as any)[(DEFAULT_THEME as any).colors[hue]][shade];
141141

142142
expect(color).toBe(expected);
143143
});
144+
145+
it.each([
146+
['primaryHue', 'light'],
147+
['primaryHue', 'dark'],
148+
['successHue', 'light'],
149+
['successHue', 'dark'],
150+
['dangerHue', 'light'],
151+
['dangerHue', 'dark'],
152+
['warningHue', 'light'],
153+
['warningHue', 'dark'],
154+
['neutralHue', 'light'],
155+
['neutralHue', 'dark'],
156+
['chromeHue', 'light'],
157+
['chromeHue', 'dark']
158+
])('gets the default %s with transparency for %s mode', (hue, mode) => {
159+
const transparency = 0.5;
160+
const color = getColor({
161+
theme: mode === 'dark' ? DARK_THEME : DEFAULT_THEME,
162+
hue,
163+
transparency
164+
});
165+
const shade = mode === 'dark' ? 500 : 700;
166+
const rgbColor = (PALETTE as any)[(DEFAULT_THEME as any).colors[hue]][shade];
167+
const expected = rgba(rgbColor, transparency);
168+
169+
expect(color).toBe(expected);
170+
});
144171
});
145172

146173
it('uses `DEFAULT_THEME` fallback for malformed palette', () => {
@@ -232,7 +259,7 @@ describe('getColor', () => {
232259
offset: 100,
233260
dark: { offset: -100 }
234261
});
235-
const expected = PALETTE.blue[400];
262+
const expected = PALETTE.blue[500];
236263

237264
expect(color).toBe(expected);
238265
});

packages/theming/src/utils/getColor.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,18 @@ const adjust = (color: string, expected: number, actual: number) => {
2424
};
2525

2626
/* convert the optional shade + offset to a shade for the given scheme */
27-
const toShade = (shade?: number | string, offset?: number, scheme?: 'dark' | 'light') => {
27+
const toShade = (
28+
shade?: number | string,
29+
offset?: number,
30+
transparency?: number,
31+
scheme?: 'dark' | 'light'
32+
) => {
2833
let _shade;
2934

3035
if (shade === undefined) {
31-
_shade = scheme === 'dark' ? 500 : 700;
36+
const darkShade = transparency === undefined ? 600 : 500;
37+
38+
_shade = scheme === 'dark' ? darkShade : 700;
3239
} else {
3340
_shade = parseInt(shade.toString(), 10);
3441

@@ -45,9 +52,10 @@ const toHex = (
4552
hue: Record<string | number, string>,
4653
shade?: number | string,
4754
offset?: number,
55+
transparency?: number,
4856
scheme?: 'dark' | 'light'
4957
) => {
50-
const _shade = toShade(shade, offset, scheme);
58+
const _shade = toShade(shade, offset, transparency, scheme);
5159
let retVal = hue[_shade];
5260

5361
if (!retVal) {
@@ -186,14 +194,14 @@ const toColor = (
186194
}
187195

188196
if (typeof _hue === 'object') {
189-
retVal = toHex(_hue, shade, offset, scheme);
197+
retVal = toHex(_hue, shade, offset, transparency, scheme);
190198
} else if (isValidColor(_hue)) {
191199
if (shade === undefined) {
192200
retVal = _hue;
193201
} else {
194202
_hue = generateColorScale(_hue);
195203

196-
retVal = toHex(_hue, shade, offset, scheme);
204+
retVal = toHex(_hue, shade, offset, transparency, scheme);
197205
}
198206
}
199207

packages/typography/src/elements/span/Span.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ describe('Span', () => {
7777

7878
expect(container.firstChild).toHaveStyleRule(
7979
'color',
80-
(PALETTE as any)[hue][mode === 'light' ? 700 : 500]
80+
(PALETTE as any)[hue][mode === 'light' ? 700 : 600]
8181
);
8282
});
8383

0 commit comments

Comments
 (0)