Files
website/frontend/vite-template-master/color-migration-guide.md

4.6 KiB

Color System Migration Guide

This guide will help you migrate your components to use our new standardized color system.

Why Migrate?

  • Consistency: Ensure all UI elements have consistent colors
  • Maintainability: Easier to update the design system
  • Accessibility: Better contrast and readability
  • Dark Mode: Simplified light/dark mode support

Migration Steps

1. Identify Current Color Usage

First, identify all hardcoded colors or direct Mantine color variables in your component:

/* Before */
.element {
  color: #333;
  background-color: var(--mantine-color-blue-6); 
  border: 1px solid var(--mantine-color-gray-3);
}

2. Replace with Theme Color Tokens

Replace hardcoded colors and direct Mantine variables with our standardized tokens:

/* After */
.element {
  color: var(--mantine-color-brand-gray-7);
  background-color: var(--mantine-color-brand-primary-6);
  border: 1px solid var(--mantine-color-brand-gray-3);
}

3. Use Semantic Color Tokens Where Available

For common UI elements, use semantic tokens:

/* Before */
.header {
  background-color: var(--mantine-color-body);
  border-bottom: 1px solid var(--mantine-color-gray-3);
}

/* After */
.header {
  background-color: var(--mantine-other-headerBgColor);
  border-bottom: 1px solid var(--mantine-other-headerBorderColor);
}

4. Use Light/Dark Mode Consistently

For elements that need different colors in light/dark mode:

/* Before */
.text {
  color: light-dark(var(--mantine-color-gray-7), var(--mantine-color-dark-0));
}

/* After */
.text {
  color: light-dark(var(--mantine-color-brand-gray-7), var(--mantine-color-brand-gray-0));
}

5. Update Inline Styles in Components

For inline styles in components:

// Before
<Box style={{ color: theme.colors.blue[6] }} />

// After
<Box style={{ color: 'var(--mantine-color-brand-primary-6)' }} />

// Or better, use Mantine props
<Box c="brand-primary.6" />

Mapping Old Colors to New Colors

Use this reference to map old color values to our new color system:

Old Color New Color
var(--mantine-color-blue-0) var(--mantine-color-brand-primary-0)
var(--mantine-color-blue-1) var(--mantine-color-brand-primary-1)
var(--mantine-color-blue-4) var(--mantine-color-brand-primary-4)
var(--mantine-color-blue-6) var(--mantine-color-brand-primary-6)
var(--mantine-color-blue-7) var(--mantine-color-brand-primary-7)
var(--mantine-color-blue-filled) var(--mantine-other-navigationActiveColor)
var(--mantine-color-gray-0) var(--mantine-color-brand-gray-0)
var(--mantine-color-gray-3) var(--mantine-color-brand-gray-3)
var(--mantine-color-gray-4) var(--mantine-color-brand-gray-4)
var(--mantine-color-gray-5) var(--mantine-color-brand-gray-5)
var(--mantine-color-gray-7) var(--mantine-color-brand-gray-7)
var(--mantine-color-dark-0) var(--mantine-color-brand-gray-0)
var(--mantine-color-dark-4) var(--mantine-color-brand-gray-4)
var(--mantine-color-dark-6) var(--mantine-color-brand-gray-6)
var(--mantine-color-dark-8) var(--mantine-color-brand-gray-8)

Examples

Header Component Example

/* Before */
.header {
  background-color: var(--mantine-color-body);
  border-bottom: 1px solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4));
}

.link {
  color: light-dark(var(--mantine-color-gray-7), var(--mantine-color-dark-0));
}

.link:hover {
  background-color: light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-6));
}

.active {
  background-color: var(--mantine-color-blue-filled);
  color: var(--mantine-color-white);
}

/* After */
.header {
  background-color: var(--mantine-other-headerBgColor);
  border-bottom: 1px solid var(--mantine-other-headerBorderColor);
}

.link {
  color: light-dark(var(--mantine-color-brand-gray-7), var(--mantine-color-brand-gray-0));
}

.link:hover {
  background-color: light-dark(var(--mantine-color-brand-gray-1), var(--mantine-color-brand-gray-8));
}

.active {
  background-color: var(--mantine-other-navigationActiveColor);
  color: var(--mantine-color-white);
}

Button Component Example

// Before
<Button 
  style={{ 
    backgroundColor: theme.colors.blue[6],
    color: 'white'
  }}
>
  Click me
</Button>

// After
<Button color="brand-primary">Click me</Button>

Testing Your Migration

After migrating, run stylelint to ensure you're not using hardcoded colors:

yarn stylelint

Need Help?

Refer to the color-tokens.md file or the ColorPalette component in Storybook for a complete reference of our color system.