Alex Riviere
Senior Front-end Developer
A design system is a series of design elements that can be leveraged to develop a set of products that are true to the Brand.
Lou Delgado
It defines everything that makes up a product – from type, layouts, grids, color, icons, components, coding conventions, and motion principles to voice, tone, style-guides, and documentation.
Mark Gallo
Operational tools for publishing in a digital world.
Andrew Walpole
Brand guidelines document the core visual and verbal elements of the brand, and provide visual examples of how the brand is expressed across various applications.
UI kits are only a part of the Design System. UI Kits help Designers to design faster and better.
A component library is a collection where you can browse examples and find code snippets to implement into a codebase. Component libraries help engineers to code faster and better
Design Tokens
Reference site or Sandbox
Visual Identity
Guidlines/Design
Language
UI Kit
Component Library
JSON
JSON
--color
JSON
--color
JSON
--color
Dragoman
Theemo
Mole
Theo
Style-Dictionary
{
"colors": {
"red": {
"value": "#FF0000"
},
"blue": {
"value": "#0000FF"
},
"green": {
"value": "#00FF00"
}
}
}
{
"colors": {
"black": { "value": "#000000" },
"traina-purple-400": { "value": "#8875e2" },
"traina-purple-300": { "value": "#A897F8" },
"traina-pink-400": { "value": "#DE706F" },
"traina-pink-300": { "value": "#F98989" },
"traina-green-400": { "value": "#5D9E70" },
"traina-green-300": { "value": "#82C596" },
"traina-gray-900": { "value": "#151515" },
"traina-gray-800": { "value": "#232323" },
"traina-gray-700": { "value": "#454545" },
"traina-gray-600": { "value": "#636363" },
"traina-gray-500": { "value": "#727272" },
"traina-gray-400": { "value": "#8e8e8e" },
"traina-gray-300": { "value": "#D0D0D0" },
"traina-gray-200": { "value": "#e8e8e8" },
"traina-gray-110": { "value": "#f5f5f5" },
"traina-gray-100": { "value": "#fafafa" },
"white": { "value": "#ffffff" },
"error-red": { "value": "#852323" }
}
}
{
"source": ["tokens/**/*.json"],
"platforms": {
"scss": {
"transformGroup": "scss",
"buildPath": "build/",
"files": [{
"destination": "_vars.scss",
"format": "scss/map-deep"
}]
},
"json": {
"transforms": [
"attribute/cti",
"name/cti/pascal",
"color/hex",
"size/rem"
],
"buildPath": "build/",
"files": [{
"destination": "tokens.json",
"format": "json/nested"
}]
}
}
}
npx style-dictionary build
/**
* Do not edit directly
*/
$colors-black: #000000 !default;
$colors-traina-purple-400: #8875e2 !default;
$colors-traina-purple-300: #A897F8 !default;
$colors-traina-pink-400: #DE706F !default;
$colors-traina-pink-300: #F98989 !default;
$colors-traina-green-400: #5D9E70 !default;
$colors-traina-green-300: #82C596 !default;
$colors-traina-gray-900: #151515 !default;
$colors-traina-gray-800: #232323 !default;
$colors-traina-gray-700: #454545 !default;
$colors-traina-gray-600: #636363 !default;
$colors-traina-gray-500: #727272 !default;
$colors-traina-gray-400: #8e8e8e !default;
$colors-traina-gray-300: #D0D0D0 !default;
$colors-traina-gray-200: #e8e8e8 !default;
$colors-traina-gray-110: #f5f5f5 !default;
$colors-traina-gray-100: #fafafa !default;
$colors-white: #ffffff !default;
$colors-error-red: #852323 !default;
$tokens: (
'colors': (
'black': $colors-black,
'traina-purple-400': $colors-traina-purple-400,
'traina-purple-300': $colors-traina-purple-300,
'traina-pink-400': $colors-traina-pink-400,
'traina-pink-300': $colors-traina-pink-300,
'traina-green-400': $colors-traina-green-400,
'traina-green-300': $colors-traina-green-300,
'traina-gray-900': $colors-traina-gray-900,
'traina-gray-800': $colors-traina-gray-800,
'traina-gray-700': $colors-traina-gray-700,
'traina-gray-600': $colors-traina-gray-600,
'traina-gray-500': $colors-traina-gray-500,
'traina-gray-400': $colors-traina-gray-400,
'traina-gray-300': $colors-traina-gray-300,
'traina-gray-200': $colors-traina-gray-200,
'traina-gray-110': $colors-traina-gray-110,
'traina-gray-100': $colors-traina-gray-100,
'white': $colors-white,
'error-red': $colors-error-red
)
);
{
"colors": {
"black": "#000000",
"traina-purple-400": "#8875e2",
"traina-purple-300": "#A897F8",
"traina-pink-400": "#DE706F",
"traina-pink-300": "#F98989",
"traina-green-400": "#5D9E70",
"traina-green-300": "#82C596",
"traina-gray-900": "#151515",
"traina-gray-800": "#232323",
"traina-gray-700": "#454545",
"traina-gray-600": "#636363",
"traina-gray-500": "#727272",
"traina-gray-400": "#8e8e8e",
"traina-gray-300": "#D0D0D0",
"traina-gray-200": "#e8e8e8",
"traina-gray-110": "#f5f5f5",
"traina-gray-100": "#fafafa",
"white": "#ffffff",
"error-red": "#852323"
}
}
Created a version we can use in PHP and JS
Created a version that can be used in CSS or JS in the browser
More export options available!
<?php
// Set this once here, so we can cache this value for later.
$__DESIGN_TOKENS = null;
function tcp_return_design_tokens()
{
global $__DESIGN_TOKENS;
if (!is_null($__DESIGN_TOKENS)) {
return $__DESIGN_TOKENS;
}
$plugin_dir = WP_PLUGIN_DIR . '/traina-color-picker';
$__DESIGN_TOKENS = json_decode(
file_get_contents($plugin_dir . '/build/tokens.json'),
true
);
return $__DESIGN_TOKENS;
}
// gutenberg custom color palette
function tcp_change_gutenberg_color_palette()
{
$design_tokens = tcp_return_design_tokens();
// creates an array to store our color variables from css file
$color_palette = [];
foreach ($design_tokens['colors'] as $color_slug => $color_hex){
$color_name = trim(
ucwords(
str_replace('-', ' ', $color_slug)
)
);
$color_palette[] = [
'name' => $color_name,
'slug' => $color_slug,
'color' => $color_hex
];
}
if ($color_palette) {
add_theme_support('editor-color-palette', $color_palette);
}
}
add_action('after_setup_theme', 'tcp_change_gutenberg_color_palette');
@use "./build/vars" as v;
@use "sass:map";
@each $name, $color in map.get(v.$tokens,colors){
.has-#{$name}-color{
color: #{$color};
}
}
<?php
function tcp_enqueue_styles(){
wp_enqueue_style('tcp_styles', plugins_url().'/traina-color-picker/build/main.css');
}
add_action('init', 'tcp_enqueue_styles');
add_action('admin_enqueue_scripts', 'tcp_enqueue_styles');
// Set this once here, so we can cache this value for later.
$__DESIGN_TOKENS = null;
function tcp_return_design_tokens()
{
global $__DESIGN_TOKENS;
if (!is_null($__DESIGN_TOKENS)) {
return $__DESIGN_TOKENS;
}
$plugin_dir = WP_PLUGIN_DIR . '/traina-color-picker';
$__DESIGN_TOKENS = json_decode(
file_get_contents($plugin_dir . '/build/tokens.json'),
true
);
return $__DESIGN_TOKENS;
}
// gutenberg custom color palette
function tcp_change_gutenberg_color_palette()
{
$design_tokens = tcp_return_design_tokens();
// creates an array to store our color variables from css file
$color_palette = [];
foreach ($design_tokens['colors'] as $color_slug => $color_hex){
$color_name = trim(
ucwords(
str_replace('-', ' ', $color_slug)
)
);
$color_palette[] = [
'name' => $color_name,
'slug' => $color_slug,
'color' => $color_hex
];
}
if ($color_palette) {
add_theme_support('editor-color-palette', $color_palette);
}
}
add_action('after_setup_theme', 'tcp_change_gutenberg_color_palette');