Generate Color Palette
Pearl UI provides a utility function to create a color palette from a single color. This color palette can then be inserted into theme.palette
to be used by components.
#
Importimport { generatePalette } from "pearl-ui";
#
Usage#
Allowed color inputsThe function uses TinyColor under the hood, so it's very permissive with the input value for the color
property
// Support for Hex values and 8-digit (RGBA) Hex valuesgeneratePalette("#000", "label");generatePalette("000", "label");generatePalette("#369C", "label");generatePalette("369C", "label");generatePalette("#f0f0f6", "label");generatePalette("f0f0f6", "label");generatePalette("#f0f0f688", "label");generatePalette("f0f0f688", "label");
// Support for RGB and RGBA valuesgeneratePalette("rgb (255, 0, 0)", "label");generatePalette("rgb 255 0 0", "label");generatePalette("rgba (255, 0, 0, .5)", "label");
// Support for HSL and HSLA valuesgeneratePalette("hsl(0, 100%, 50%)", "label");generatePalette("hsla(0, 100%, 50%, .5)", "label");generatePalette("hsl(0, 100%, 50%)", "label");generatePalette("hsl 0 1.0 0.5", "label");
// Support for HSV and HSVA valuesgeneratePalette("hsv(0, 100%, 100%)", "label");generatePalette("hsva(0, 100%, 100%, .5)", "label");generatePalette("hsv (0 100% 100%)", "label");generatePalette("hsv 0 1 1", "label");
// Support for Named color valuesgeneratePalette("RED", "label");generatePalette("blanchedalmond", "label");generatePalette("darkblue", "label");
#
Basic Usageconst colorPalette = generatePalette("#00fa9a", "accent");
#
Output// colorPalette{ "accent": { "100": "#b6fee2", "200": "#89fdd0", "300": "#5bfcbe", "400": "#2efbac", "500": "#00fa9a", "600": "#00cd7f", "700": "#00a163", "800": "#007448", "900": "#00472c" }}
Accent 100
#b6fee2
Accent 200
#89fdd0
Accent 300
#5bfcbe
Accent 400
#2efbac
Accent 500
#00fa9a
Accent 600
#00cd7f
Accent 700
#00a163
Accent 800
#007448
Accent 900
#00472c
#
Advanced UsageYou can tweak the count
and similarity
prop values to have more fine grained control over the palette generation.
const colorPalette = generatePalette("#00fa9a", "accent", 5, 4);
#
Output// colorPalette{ "accent": { "100": "#40fbb3", "200": "#20fba7", "300": "#00fa9a", "400": "#00db87", "500": "#00bc74" }}
Accent 100
#40fbb3
Accent 200
#20fba7
Accent 300
#00fa9a
Accent 400
#00db87
Accent 500
#00bc74
const colorPalette = generatePalette("#00fa9a", "accent", 14, 1);
#
Output// colorPalette{ "accent": { "100": "#ffffff", "200": "#dbfef1", "300": "#b6fee2", "400": "#92fdd4", "500": "#6dfcc5", "600": "#49fbb7", "700": "#24fba8", "800": "#00d684", "900": "#00b36e", "1000": "#008f58", "1100": "#006b42", "1200": "#00472c", "1300": "#002416", "1400": "#000000" }}
Accent 100
#ffffff
Accent 200
#dbfef1
Accent 300
#b6fee2
Accent 400
#92fdd4
Accent 500
#6dfcc5
Accent 600
#49fbb7
Accent 700
#24fba8
Accent 800
#00d684
Accent 900
#00b36e
Accent 1000
#008f58
Accent 1100
#006b42
Accent 1200
#00472c
Accent 1300
#002416
Accent 1400
#000000
#
Adding palette to themeYou can insert the generated palette into your theme object as follows. The values accent.100
, accent.200
, accent.300
, etc. would then be available to the props which query the color
and backgroundColor
).
// theme.jsexport default { palette: { primary: { 100: "#E1E6FF", 200: "#C3CCFF", 300: "#A5B1FF", 400: "#8F9DFF", 500: "#6A7BFF", 600: "#4D5BDB", 700: "#3541B7", 800: "#212A93", 900: "#141B7A", }
...colorPalette,
// ... },};
#
PropsName | Required | Type | Default | Description |
---|---|---|---|---|
color | true | Color to generate tints and shades for | ||
label | true | Identifier for the generated colors ('primary', 'secondary', etc). Eg, for a label of 'primary', the generated tints and shades be referred as 'primary.100', 'primary.200', etc. | ||
count | false | 9 | The number of color values to be generated | |
similarity | false | 1.4 | The similarity between the generated colors |