Skip to content

Commit d9ca5fb

Browse files
committed
feat: support spectrum 2 colors
1 parent 43d5e1c commit d9ca5fb

File tree

9 files changed

+786
-15
lines changed

9 files changed

+786
-15
lines changed

packages/docs/docs/api/Chart.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,10 @@ Available color schemes:
213213
- `categorical6`
214214
- `categorical12`
215215
- `categorical16`
216-
- `categorical24`
216+
- `s2Categorical6`
217+
- `s2Categorical12`
218+
- `s2Categorical16`
219+
- `s2Categorical20`
217220
- `divergentOrangeYellowSeafoam5`
218221
- `divergentOrangeYellowSeafoam9`
219222
- `divergentOrangeYellowSeafoam15`
@@ -226,7 +229,7 @@ Available color schemes:
226229

227230
#### Spectrum color names
228231

229-
A color scale can be defined as an array of spectrum color names. Spectrum color names are responsive (excluding `static*` variants). This is great for when light and dark mode support is needed. The colors adjust so that they look ideal in both light and dark mode.
232+
A color scale can be defined as an array of spectrum color names. Spectrum color names are responsive (excluding `static*` variants). This is great for when light and dark mode support is needed. The colors adjust so that they look ideal in both light and dark mode. Spectrum 2 colors are also supported with the `s2-` prefix (ex. `s2-cinnamon-400`, `s2-silver-1600`).
230233

231234
Example: `['red-500', 'blue-600', 'celery-400']`
232235

packages/react-spectrum-charts/src/stories/Chart.test.tsx

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import { createRef } from 'react';
1313

1414
import { FADE_FACTOR } from '@spectrum-charts/constants';
15+
import { s2SpectrumColors } from '@spectrum-charts/themes';
1516
import { ChartHandle } from '@spectrum-charts/vega-spec-builder';
1617

1718
import { Chart } from '../Chart';
@@ -22,6 +23,8 @@ import { getElement } from '../utils';
2223
import { BackgroundColor, Basic, Config, Height, HighlightedItem, Locale, TooltipAnchor, Width } from './Chart.story';
2324
import {
2425
CssColors,
26+
Spectrum2CategoricalColorScheme,
27+
Spectrum2ColorNames,
2528
SpectrumColorNames,
2629
SpectrumDivergentColorScheme,
2730
SpectrumSequentialColorScheme,
@@ -194,6 +197,51 @@ describe('Chart', () => {
194197
const container = document.querySelector('.rsc-container > div');
195198
expect(container).toHaveStyle('background-color: rgb(248, 248, 248);');
196199
});
200+
201+
test('Spectrum diverging color scheme renders correctly', async () => {
202+
render(<Spectrum2CategoricalColorScheme {...Spectrum2CategoricalColorScheme.args} />);
203+
204+
const chart = await findChart();
205+
expect(chart).toBeInTheDocument();
206+
const bars = getAllMarksByGroupName(chart, 'bar0');
207+
208+
const colors = s2SpectrumColors.light;
209+
210+
expect(bars[0].getAttribute('fill')).toEqual(colors['categorical-100']);
211+
expect(bars[1].getAttribute('fill')).toEqual(colors['categorical-200']);
212+
expect(bars[2].getAttribute('fill')).toEqual(colors['categorical-300']);
213+
expect(bars[3].getAttribute('fill')).toEqual(colors['categorical-400']);
214+
});
215+
216+
test('Spectrum colors render correctly (light)', async () => {
217+
render(<Spectrum2ColorNames {...Spectrum2ColorNames.args} />);
218+
219+
const chart = await findChart();
220+
expect(chart).toBeInTheDocument();
221+
const bars = getAllMarksByGroupName(chart, 'bar0');
222+
223+
const colors = s2SpectrumColors.light;
224+
225+
expect(bars[0].getAttribute('fill')).toEqual(colors['cinnamon-1200']);
226+
expect(bars[1].getAttribute('fill')).toEqual(colors['cinnamon-1000']);
227+
expect(bars[2].getAttribute('fill')).toEqual(colors['cinnamon-800']);
228+
expect(bars[3].getAttribute('fill')).toEqual(colors['cinnamon-600']);
229+
});
230+
231+
test('Spectrum colors render correctly (dark)', async () => {
232+
render(<Spectrum2ColorNames {...Spectrum2ColorNames.args} colorScheme="dark" />);
233+
234+
const chart = await findChart();
235+
expect(chart).toBeInTheDocument();
236+
const bars = getAllMarksByGroupName(chart, 'bar0');
237+
238+
const colors = s2SpectrumColors.dark;
239+
240+
expect(bars[0].getAttribute('fill')).toEqual(colors['cinnamon-1200']);
241+
expect(bars[1].getAttribute('fill')).toEqual(colors['cinnamon-1000']);
242+
expect(bars[2].getAttribute('fill')).toEqual(colors['cinnamon-800']);
243+
expect(bars[3].getAttribute('fill')).toEqual(colors['cinnamon-600']);
244+
});
197245
});
198246

199247
describe('State stories', () => {

packages/react-spectrum-charts/src/stories/ChartColors.story.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,16 @@ CssColors.args = {
4343
data,
4444
};
4545

46-
export { SpectrumColorNames, SpectrumDivergentColorScheme, SpectrumSequentialColorScheme, CssColors };
46+
const Spectrum2CategoricalColorScheme = bindWithProps(ChartBarStory);
47+
Spectrum2CategoricalColorScheme.args = {
48+
colors: 's2Categorical12',
49+
data,
50+
};
51+
52+
const Spectrum2ColorNames = bindWithProps(ChartBarStory);
53+
Spectrum2ColorNames.args = {
54+
colors: ['s2-cinnamon-1200', 's2-cinnamon-1000', 's2-cinnamon-800', 's2-cinnamon-600'],
55+
data,
56+
};
57+
58+
export { SpectrumColorNames, SpectrumDivergentColorScheme, SpectrumSequentialColorScheme, CssColors, Spectrum2CategoricalColorScheme, Spectrum2ColorNames };

packages/themes/src/categoricalColorPalette.ts

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,38 @@ export const categorical16 = [
4040
colors['categorical-1600'],
4141
];
4242

43-
export const categorical24 = [
44-
...categorical16,
45-
colors['categorical-1700'],
46-
colors['categorical-1800'],
47-
colors['categorical-1900'],
48-
colors['categorical-2000'],
49-
colors['categorical-2100'],
50-
colors['categorical-2200'],
51-
colors['categorical-2300'],
52-
colors['categorical-2400'],
53-
];
43+
export const s2Categorical6 = [
44+
colors['s2-categorical-100'],
45+
colors['s2-categorical-200'],
46+
colors['s2-categorical-300'],
47+
colors['s2-categorical-400'],
48+
colors['s2-categorical-500'],
49+
colors['s2-categorical-600'],
50+
];
51+
52+
export const s2Categorical12 = [
53+
...s2Categorical6,
54+
colors['s2-categorical-700'],
55+
colors['s2-categorical-800'],
56+
colors['s2-categorical-900'],
57+
colors['s2-categorical-1000'],
58+
colors['s2-categorical-1100'],
59+
colors['s2-categorical-1200'],
60+
];
61+
62+
export const s2Categorical16 = [
63+
...s2Categorical12,
64+
colors['s2-categorical-1300'],
65+
colors['s2-categorical-1400'],
66+
colors['s2-categorical-1500'],
67+
colors['s2-categorical-1600'],
68+
];
69+
70+
export const s2Categorical20 = [
71+
...s2Categorical16,
72+
colors['s2-categorical-1700'],
73+
colors['s2-categorical-1800'],
74+
colors['s2-categorical-1900'],
75+
colors['s2-categorical-2000'],
76+
];
77+

packages/themes/src/colorSchemes.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* OF ANY KIND, either express or implied. See the License for the specific language
1010
* governing permissions and limitations under the License.
1111
*/
12-
import { categorical6, categorical12, categorical16 } from './categoricalColorPalette';
12+
import { categorical6, categorical12, categorical16, s2Categorical6, s2Categorical12, s2Categorical16, s2Categorical20 } from './categoricalColorPalette';
1313
import {
1414
divergentOrangeYellowSeafoam5,
1515
divergentOrangeYellowSeafoam9,
@@ -43,6 +43,10 @@ export const colorSchemes = {
4343
categorical6,
4444
categorical12,
4545
categorical16,
46+
s2Categorical6,
47+
s2Categorical12,
48+
s2Categorical16,
49+
s2Categorical20,
4650
divergentOrangeYellowSeafoam5,
4751
divergentOrangeYellowSeafoam9,
4852
divergentOrangeYellowSeafoam15,

packages/themes/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ export * from './colorSchemes';
1515
export * from './divergingColorPalette';
1616
export * from './sequentialColorPalette';
1717
export * from './spectrumColors';
18+
export * from './s2SpectrumColors';
1819
export * from './spectrumTheme';
1920
export * from './utils';

0 commit comments

Comments
 (0)