`;
@@ -60,7 +60,7 @@ exports[`EuiAvatar props initials is rendered 1`] = `
= ({
type = 'user',
...rest
}) => {
+ const visColors = euiPaletteColorBlindBehindText();
+
const classes = classNames(
'euiAvatar',
sizeToClassNameMap[size],
@@ -85,8 +87,7 @@ export const EuiAvatar: FunctionComponent = ({
}
const assignedColor =
- color ||
- VISUALIZATION_COLORS[Math.floor(name.length % VISUALIZATION_COLORS.length)];
+ color || visColors[Math.floor(name.length % visColors.length)];
const textColor = isColorDark(...hexToRgb(assignedColor))
? '#FFFFFF'
: '#000000';
@@ -111,7 +112,7 @@ export const EuiAvatar: FunctionComponent = ({
// TODO: Migrate to a service
function checkValidColor(color: EuiAvatarProps['color']) {
- const validHex = color && /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(color);
+ const validHex = color && isValidHex(color);
if (color && !validHex) {
throw new Error(
'EuiAvatar needs to pass a valid color. This can either be a three ' +
diff --git a/src/components/badge/badge.tsx b/src/components/badge/badge.tsx
index 48434625814..8cb7def8d7b 100644
--- a/src/components/badge/badge.tsx
+++ b/src/components/badge/badge.tsx
@@ -7,7 +7,7 @@ import React, {
import classNames from 'classnames';
import { CommonProps, ExclusiveUnion, keysOf, PropsOf } from '../common';
import chroma from 'chroma-js';
-import { euiPaletteColorBlind } from '../../services/color/eui_palettes';
+import { euiPaletteColorBlindBehindText, isValidHex } from '../../services';
import { EuiInnerText } from '../inner_text';
import { EuiIcon, IconColor, IconType } from '../icon';
@@ -72,28 +72,18 @@ const colorInk = '#000';
const colorGhost = '#fff';
// The color blind palette has some stricter accessibility needs with regards to
-// charts and contrast. We can ease (brighten) that requirement here since our
+// charts and contrast. We use the euiPaletteColorBlindBehindText variant here since our
// accessibility concerns pertain to foreground (text) and background contrast
-const brightenValue = 0.5;
+const visColors = euiPaletteColorBlindBehindText();
const colorToHexMap: { [color in IconColor]: string } = {
// TODO - replace with variable once https://github.com/elastic/eui/issues/2731 is closed
default: '#d3dae6',
- primary: chroma(euiPaletteColorBlind()[1])
- .brighten(brightenValue)
- .hex(),
- secondary: chroma(euiPaletteColorBlind()[0])
- .brighten(brightenValue)
- .hex(),
- accent: chroma(euiPaletteColorBlind()[2])
- .brighten(brightenValue)
- .hex(),
- warning: chroma(euiPaletteColorBlind()[5])
- .brighten(brightenValue)
- .hex(),
- danger: chroma(euiPaletteColorBlind()[9])
- .brighten(brightenValue)
- .hex(),
+ primary: visColors[1],
+ secondary: visColors[0],
+ accent: visColors[2],
+ warning: visColors[5],
+ danger: visColors[9],
};
export const COLORS = keysOf(colorToHexMap);
@@ -297,11 +287,9 @@ function setTextColor(bgColor: string) {
}
function checkValidColor(color: null | IconColor | string) {
- const validHex = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i;
-
if (
color != null &&
- !validHex.test(color) &&
+ !isValidHex(color) &&
!COLORS.includes(color) &&
color !== 'hollow'
) {
diff --git a/src/components/loading/_loading_chart.scss b/src/components/loading/_loading_chart.scss
index 749bd3b68dd..3c319fa08de 100644
--- a/src/components/loading/_loading_chart.scss
+++ b/src/components/loading/_loading_chart.scss
@@ -14,21 +14,21 @@
animation: euiLoadingChart 1s infinite;
&:nth-child(1) {
- background-color: $euiColorPrimary;
+ background-color: $euiColorVis0;
}
&:nth-child(2) {
- background-color: $euiColorSecondary;
+ background-color: $euiColorVis1;
animation-delay: .1s;
}
&:nth-child(3) {
- background-color: $euiColorAccent;
+ background-color: $euiColorVis2;
animation-delay: .2s;
}
&:nth-child(4) {
- background-color: $euiColorDarkestShade;
+ background-color: $euiColorVis3;
animation-delay: .3s;
}
}
diff --git a/src/global_styling/functions/_colors.scss b/src/global_styling/functions/_colors.scss
index 1068030ffe9..ee7f6fd1995 100644
--- a/src/global_styling/functions/_colors.scss
+++ b/src/global_styling/functions/_colors.scss
@@ -1,3 +1,8 @@
+// Converting a normal hex color to RBG
+@function hexToRGB($color) {
+ @return 'rgb%28#{round(red($color))}, #{round(green($color))}, #{round(blue($color))}%29';
+}
+
// Mixes a provided color with white.
@function tint($color, $percent) {
@return mix($euiColorGhost, $color, $percent);
@@ -114,8 +119,3 @@
@return $highContrastTextColor;
}
-
-// Converting a normal hex color to RBG
-@function hexToRGB($color) {
- @return 'rgb%28#{round(red($color))}, #{round(green($color))}, #{round(blue($color))}%29';
-}
diff --git a/src/global_styling/variables/_colors.scss b/src/global_styling/variables/_colors.scss
index 5023a69739a..aade7d9b11e 100644
--- a/src/global_styling/variables/_colors.scss
+++ b/src/global_styling/variables/_colors.scss
@@ -32,21 +32,78 @@ $euiPageBackgroundColor: tintOrShade($euiColorLightestShade, 50%, 30%) !default;
// Visualization colors
-$euiColorVis0: #54B399 !default;
-$euiColorVis1: #6092C0 !default;
-$euiColorVis2: #D36086 !default;
-$euiColorVis3: #9170B8 !default;
-$euiColorVis4: #CA8EAE !default;
-$euiColorVis5: #D6BF57 !default;
-$euiColorVis6: #B9A888 !default;
-$euiColorVis7: #DA8B45 !default;
-$euiColorVis8: #AA6556 !default;
-$euiColorVis9: #E7664C !default;
+// Maps allow for easier JSON usage
+// Use map_merge($euiColorVisColors, $yourMap) to change individual colors after importing ths file
+// The `behindText` variant is a direct copy of the hex output by the JS euiPaletteColorBlindBehindText() function
+$euiPaletteColorBlind: (
+ euiColorVis0: (
+ graphic: #54B399,
+ behindText: #6DCCB1,
+ ),
+ euiColorVis1: (
+ graphic: #6092C0,
+ behindText: #79AAD9,
+ ),
+ euiColorVis2: (
+ graphic: #D36086,
+ behindText: #EE789D,
+ ),
+ euiColorVis3: (
+ graphic: #9170B8,
+ behindText: #A987D1,
+ ),
+ euiColorVis4: (
+ graphic: #CA8EAE,
+ behindText: #E4A6C7,
+ ),
+ euiColorVis5: (
+ graphic: #D6BF57,
+ behindText: #F1D86F,
+ ),
+ euiColorVis6: (
+ graphic: #B9A888,
+ behindText: #D2C0A0,
+ ),
+ euiColorVis7: (
+ graphic: #DA8B45,
+ behindText: #F5A35C,
+ ),
+ euiColorVis8: (
+ graphic: #AA6556,
+ behindText: #C47C6C,
+ ),
+ euiColorVis9: (
+ graphic: #E7664C,
+ behindText: #FF7E62,
+ )
+) !default;
+
+$euiColorVis0: map-get(map-get($euiPaletteColorBlind, 'euiColorVis0'), 'graphic') !default;
+$euiColorVis1: map-get(map-get($euiPaletteColorBlind, 'euiColorVis1'), 'graphic') !default;
+$euiColorVis2: map-get(map-get($euiPaletteColorBlind, 'euiColorVis2'), 'graphic') !default;
+$euiColorVis3: map-get(map-get($euiPaletteColorBlind, 'euiColorVis3'), 'graphic') !default;
+$euiColorVis4: map-get(map-get($euiPaletteColorBlind, 'euiColorVis4'), 'graphic') !default;
+$euiColorVis5: map-get(map-get($euiPaletteColorBlind, 'euiColorVis5'), 'graphic') !default;
+$euiColorVis6: map-get(map-get($euiPaletteColorBlind, 'euiColorVis6'), 'graphic') !default;
+$euiColorVis7: map-get(map-get($euiPaletteColorBlind, 'euiColorVis7'), 'graphic') !default;
+$euiColorVis8: map-get(map-get($euiPaletteColorBlind, 'euiColorVis8'), 'graphic') !default;
+$euiColorVis9: map-get(map-get($euiPaletteColorBlind, 'euiColorVis9'), 'graphic') !default;
+
+// sass-lint:disable-block variable-name-format
+$euiColorVis0_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis0'), 'behindText') !default;
+$euiColorVis1_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis1'), 'behindText') !default;
+$euiColorVis2_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis2'), 'behindText') !default;
+$euiColorVis3_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis3'), 'behindText') !default;
+$euiColorVis4_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis4'), 'behindText') !default;
+$euiColorVis5_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis5'), 'behindText') !default;
+$euiColorVis6_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis6'), 'behindText') !default;
+$euiColorVis7_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis7'), 'behindText') !default;
+$euiColorVis8_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis8'), 'behindText') !default;
+$euiColorVis9_behindText: map-get(map-get($euiPaletteColorBlind, 'euiColorVis9'), 'behindText') !default;
$euiColorChartLines: #EFF1F4 !default;
$euiColorChartBand: #F5F7FA !default;
-
// Code
$euiCodeBlockBackgroundColor: $euiColorLightestShade !default;
diff --git a/src/services/color/eui_palettes.ts b/src/services/color/eui_palettes.ts
index 2e8cc628af3..8ade827a468 100644
--- a/src/services/color/eui_palettes.ts
+++ b/src/services/color/eui_palettes.ts
@@ -1,6 +1,7 @@
+import { flatten } from 'lodash';
+import chroma from 'chroma-js';
import { HEX } from './color_types';
import { colorPalette } from './color_palette';
-import { flatten } from 'lodash';
export type EuiPalette = string[];
@@ -64,6 +65,20 @@ export const euiPaletteColorBlind = function(
return colors;
};
+/**
+ * Color blind palette with text is meant for use when text is applied on top of the color.
+ * It increases the brightness of the color to give the text more contrast.
+ */
+export const euiPaletteColorBlindBehindText = function(): EuiPalette {
+ const originalPalette = euiPaletteColorBlind();
+ const newPalette = originalPalette.map(color =>
+ chroma(color)
+ .brighten(0.5)
+ .hex()
+ );
+ return newPalette;
+};
+
export const euiPaletteForLightBackground = function(): EuiPalette {
return ['#006BB4', '#017D73', '#F5A700', '#BD271E', '#DD0A73'];
};
diff --git a/src/services/color/index.ts b/src/services/color/index.ts
index 0f2c99b4ce6..e0ae46e180d 100644
--- a/src/services/color/index.ts
+++ b/src/services/color/index.ts
@@ -19,6 +19,7 @@ export {
euiPaletteForLightBackground,
euiPaletteForDarkBackground,
euiPaletteColorBlind,
+ euiPaletteColorBlindBehindText,
euiPaletteForStatus,
euiPaletteForTemperature,
euiPaletteComplimentary,
diff --git a/src/services/index.ts b/src/services/index.ts
index 4ab21066f31..6dcddf73154 100644
--- a/src/services/index.ts
+++ b/src/services/index.ts
@@ -33,6 +33,7 @@ export {
euiPaletteForLightBackground,
euiPaletteForDarkBackground,
euiPaletteColorBlind,
+ euiPaletteColorBlindBehindText,
euiPaletteForStatus,
euiPaletteForTemperature,
euiPaletteComplimentary,
diff --git a/src/themes/eui-amsterdam/eui_amsterdam_colors_dark.scss b/src/themes/eui-amsterdam/eui_amsterdam_colors_dark.scss
index 3e2a2b2b8c7..90a830e59ed 100644
--- a/src/themes/eui-amsterdam/eui_amsterdam_colors_dark.scss
+++ b/src/themes/eui-amsterdam/eui_amsterdam_colors_dark.scss
@@ -29,19 +29,6 @@ $euiFocusBackgroundColor: #232635;
$euiShadowColor: #000;
$euiShadowColorLarge: #000;
-// Visualization colors
-// Currently this is the same as light. It is required to list them for our docs to work
-$euiColorVis0: #54B399;
-$euiColorVis1: #6092C0;
-$euiColorVis2: #D36086;
-$euiColorVis3: #9170B8;
-$euiColorVis4: #CA8EAE;
-$euiColorVis5: #D6BF57;
-$euiColorVis6: #B9A888;
-$euiColorVis7: #DA8B45;
-$euiColorVis8: #AA6556;
-$euiColorVis9: #E7664C;
-
$euiColorChartLines: #343741;
$euiColorChartBand: #2A2C35;
diff --git a/src/themes/eui/eui_colors_dark.scss b/src/themes/eui/eui_colors_dark.scss
index cf6c2aab427..7112a3cc5f5 100644
--- a/src/themes/eui/eui_colors_dark.scss
+++ b/src/themes/eui/eui_colors_dark.scss
@@ -29,19 +29,6 @@ $euiFocusBackgroundColor: #232635;
$euiShadowColor: #000;
$euiShadowColorLarge: #000;
-// Visualization colors
-// Currently this is the same as light. It is required to list them for our docs to work
-$euiColorVis0: #54B399;
-$euiColorVis1: #6092C0;
-$euiColorVis2: #D36086;
-$euiColorVis3: #9170B8;
-$euiColorVis4: #CA8EAE;
-$euiColorVis5: #D6BF57;
-$euiColorVis6: #B9A888;
-$euiColorVis7: #DA8B45;
-$euiColorVis8: #AA6556;
-$euiColorVis9: #E7664C;
-
$euiColorChartLines: #343741;
$euiColorChartBand: #2A2C35;