Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Installing design tokens and writing docs in storybook #13657

Merged
merged 3 commits into from
Feb 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .depcheckrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ ignores:
- '@metamask/auto-changelog' # invoked as `auto-changelog`
- '@metamask/forwarder'
- '@metamask/test-dapp'
- '@metamask/design-tokens' # Only imported in index.css
- '@sentry/cli' # invoked as `sentry-cli`
- 'chromedriver'
- 'depcheck' # ooo meta
Expand Down
201 changes: 201 additions & 0 deletions .storybook/3.COLORS.stories.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
import { Meta } from '@storybook/addon-docs';
import ActionaleMessage from '../ui/components/ui/actionable-message';
import designTokenDiagramImage from './images/design.token.graphic.svg';

<Meta title="Design Tokens / Color" />

# Color

Color is used to express style and communicate meaning.

<ActionaleMessage
type="warning"
message="We are in the process of consolidating all of our colors, making them accessible and enabling theming. Many of the colors used throughout the codebase are deprecated please follow the guide below to ensure you are using the correct colors when building MetaMask UI"
/>

<br />

## Design tokens

We are importing design tokens as CSS variables from [@metamask/design-tokens](https://github.com/MetaMask/design-tokens) repo to help consolidate colors and enable theming across all MetaMask products.

### Token tiers

We follow a 3 tiered system for color design tokens and css variables.

<div
style={{
textAlign: 'center',
backgroundColor: 'var(--color-background-alternative)',
padding: 32,
}}
>
<img width="80%" src={designTokenDiagramImage} />
</div>

<br />
<br />

### **Brand colors** (tier 1)
georgewrmarshall marked this conversation as resolved.
Show resolved Hide resolved

These colors **SHOULD NOT** be used in your styles directly. They are used as a reference for the [theme colors](#theme-colors-tier-2). Brand colors should just keep track of every color used in our app.

#### Example of brand color css variables

```css
/** !!!DO NOT USE BRAND COLORS DIRECTLY IN YOUR CODE!!! */
var(--brand-colors-white-white000)
var(--brand-colors-white-white010)
var(--brand-colors-grey-grey030)
```

### **Theme colors** (tier 2)

Theme colors are color agnostic, semantically neutral and theme compatible design tokens that you can use in your code and styles. Please refer to the description of each token for it's intended purpose in [@metamask/design-tokens](https://github.com/MetaMask/design-tokens/blob/main/src/figma/tokens.json#L329-L554).

#### Example of theme color css variables

```css
/** Backgrounds */
var(--color-background-default)
var(--color-background-alternative)

/** Text */
var(--color-text-default)
var(--color-text-alternative)
var(--color-text-muted)

/** Icons */
var(--color-icon-default)
var(--color-icon-muted)

/** Borders */
var(--color-border-default)
var(--color-border-muted)

/** Overlays */
var(--color-overlay-default)
var(--color-overlay-inverse)

/** User Actions */
var(--color-primary-default)
var(--color-primary-alternative)
var(--color-primary-muted)
var(--color-primary-inverse)
var(--color-primary-disabled)

var(--color-secondary-default)
var(--color-secondary-alternative)
var(--color-secondary-muted)
var(--color-secondary-inverse)
var(--color-secondary-disabled)

/** States */
/** Error */
var(--color-error-default)
var(--color-error-alternative)
var(--color-error-muted)
var(--color-error-inverse)
var(--color-error-disabled)

/** Warning */
var(--color-warning-default)
var(--color-warning-alternative)
var(--color-warning-muted)
var(--color-warning-inverse)
var(--color-warning-disabled)

/** Success */
var(--color-success-default)
var(--color-success-alternative)
var(--color-success-muted)
var(--color-success-inverse)
var(--color-success-disabled)

/** Info */
var(--color-info-default)
var(--color-info-alternative)
var(--color-info-muted)
var(--color-info-inverse)
var(--color-info-disabled)
```

### **Component colors** (tier 3)

Another level of abstraction is component tier colors that you can define at the top of your styles and use at the component specific level.

```scss
.button {
--color-background-primary: var(--color-primary-default);
--color-text-primary: var(--color-primary-inverse);
--color-border-primary: var(--color-primary-default);

--color-background-primary-hover: var(--color-primary-alternative);
--color-border-primary-hover: var(--color-primary-alternative);

.btn-primary {
background-color: var(--color-background-primary);
color: var(--color-text-primary);
border: 1px solid var(--color-border-primary);

&:hover {
background-color: var(--color-background-primary-hover);
border: 1px solid var(--color-border-primary-hover);
}

/** btn-primary css continued... */
}
}
```

## Takeaways

- Do not use static HEX values in your code. Use the [theme colors](#theme-colors-tier-2). If one does not exist for your use case ask the designer or [create an issue](https://github.com/MetaMask/metamask-extension/issues/new) and tag it with a `design-system` label.
- Make sure the design token you are using is for it's intended purpose. Please refer to the description of each token in [@metamask/design-tokens](https://github.com/MetaMask/design-tokens/blob/main/src/figma/tokens.json#L329-L554).

### ❌ Don't do this

Don't use static hex values or brand color tokens in your code.

```css
/**
* Don't do this
* Static hex values create inconsistency and will break UI when using dark mode
**/
.card {
background-color: #ffffff;
color: #24272a;
}

/**
* Don't do this
* Not theme compatible and will break UI when using dark theme
**/
.card {
background-color: var(--brand-colors-white-white000);
color: var(--brand-colors-grey-grey800);
}
```

### ✅ Do this

Do use component tiered and [theme colors](#theme-colors-tier-2) in your styles and code

```css
.card {
--color-background: var(--color-background-default);
--color-text: var(--color-text-default);

background-color: var(--color-background);
color: var(--color-text);
}
```

<br />

## References

- [@metamask/design-tokens](https://github.com/MetaMask/design-tokens)
- [Figma brand colors library](https://www.figma.com/file/cBAUPFMnbv6tHR1J8KvBI2/Brand-Colors?node-id=0%3A1) (internal use only)
- [Figma theme colors library](https://www.figma.com/file/kdFzEC7xzSNw7cXteqgzDW/Light-Theme-Colors?node-id=0%3A1) (internal use only)
- [Figma dark theme colors library](https://www.figma.com/file/rLKsoqpjyoKauYnFDcBIbO/Dark-Theme-Colors?node-id=0%3A1) (internal use only)
1 change: 1 addition & 0 deletions .storybook/images/design.token.graphic.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 7 additions & 1 deletion .storybook/preview.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,13 @@ addParameters({
},
options: {
storySort: {
order: ['Getting Started', 'Components', ['UI', 'App'], 'Pages'],
order: [
'Getting Started',
'Design Tokens',
'Components',
['UI', 'App'],
'Pages',
],
},
},
});
georgewrmarshall marked this conversation as resolved.
Show resolved Hide resolved
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@
"@material-ui/core": "^4.11.0",
"@metamask/contract-metadata": "^1.31.0",
"@metamask/controllers": "^25.0.0",
"@metamask/design-tokens": "^1.2.0",
"@metamask/eth-ledger-bridge-keyring": "^0.10.0",
"@metamask/eth-token-tracker": "^4.0.0",
"@metamask/etherscan-link": "^2.1.0",
Expand Down
1 change: 1 addition & 0 deletions ui/css/index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@
Third Party Library Styles
*/
@import '../../node_modules/react-tippy/dist/tippy';
@import '../../node_modules/@metamask/design-tokens/src/css/design-tokens';
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2707,6 +2707,11 @@
web3 "^0.20.7"
web3-provider-engine "^16.0.3"

"@metamask/design-tokens@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@metamask/design-tokens/-/design-tokens-1.2.0.tgz#4d23456ac7de950461534088ad44692e0f7c766c"
integrity sha512-/9Ps2IjYyK8SW5XSpkk0jcKw/qnEGTyyVzNwaBuU/m4mdWrukDfFCX0AS2nm6h1TIFz+bJuhOhCu5aZTuXFJ0w==

"@metamask/eslint-config-jest@^9.0.0":
version "9.0.0"
resolved "https://registry.yarnpkg.com/@metamask/eslint-config-jest/-/eslint-config-jest-9.0.0.tgz#516fdf1f03f6f006b26ca790bf748e2189d19d17"
Expand Down