@workday/canvas-kit-docs
Version:
Documentation components of Canvas Kit components
148 lines (105 loc) • 5.03 kB
text/mdx
import {AIIndicator, DownloadLLMFile} from '@workday/canvas-kit-docs';
import {StorybookInformationHighlight} from './StorybookInformationHighlight';
# Canvas Kit Token Migration Guide: Moving to `@workday/canvas-tokens-web`
Canvas Kit v10+ introduces a new token system that replaces the old JavaScript-based tokens from
`@workday/canvas-kit-react/tokens` with CSS variables from `@workday/canvas-tokens-web`.
## Why Migrate?
- **Better Performance**: CSS variables eliminate the runtime cost of Emotion's dynamic styling
- **Enhanced Theming**: System and brand tokens provide semantic, themeable values
- **Cross-Platform Consistency**: Single source of truth for design tokens across web, iOS, and
Android
- **Future-Proofing**: Aligns with modern CSS capabilities and Canvas Kit's long-term direction
## LLM Assisted Migration <AIIndicator />
We provide a **LLM migration mapping file** (`llm-token-migration.txt`) specifically designed for
use with LLM-based code assistants (such as [Cursor](https://www.cursor.so/) or similar tools). This
file is not intended for direct human reference or team documentation, but rather as structured
input for LLMs to automate and assist with your token migration process.
> The LLM migration file is regularly updated to reflect the latest token mappings and best
> practices.
> For more details, see other sections of this migration guide.
This file contains a comprehensive mapping of old Canvas Kit token usages to their new equivalents
in `@workday/canvas-tokens-web`, along with migration tips and examples and formatted for optimal
LLM consumption.
**How to use:**
- **View raw file**: Open the file in a new tab to see the complete migration mapping
- **Download as txt**: Save the file locally to upload or paste into your LLM/code assistant
- **Use with LLM**: Provide the raw content to your LLM/code assistant as context for automated
migration
<DownloadLLMFile
rawFileLink="https://raw.githubusercontent.com/Workday/canvas-kit/master/modules/docs/llm-txt/llm-token-migration.txt"
filename="llm-token-migration-13.2.0.txt"
/>
## Core Principles
### Token Hierarchy
The new token system is organized into three categories:
- **Base Tokens**: Fundamental values (colors, measurements) - use sparingly
- **System Tokens**: Semantic, themeable values - **use these in most cases**
- **Brand Tokens**: Tenant/brand-specific customization values
### CSS Variables Requirement
Unlike the old JavaScript tokens, the new tokens are CSS variables that must be wrapped in `var()`
for the browser to understand them.
**The Fundamental Change**: Raw (hex, px, etc) values → CSS variables wrapped in `var()`
```javascript
// Old approach - Raw values
import {space} from '@workday/canvas-kit-react/tokens';
// padding: '1rem'
const styles = {padding: space.s};
// New approach - CSS variables with var()
import {system} from '@workday/canvas-tokens-web';
// padding: 'var(--cnvs-sys-space-x4)'
const styles = {padding: `var(${system.space.x4})`};
// New approach - Using cssVar utility (recommended) and fallback
import {cssVar} from '@workday/canvas-kit-styling';
// padding: 'var(--cnvs-sys-space-x4, 1rem)'
const styles = {padding: cssVar(system.space.x4, '1rem')};
```
### Styling Utilities
Canvas Kit provides styling utilities such as `createStyles`, `createStencil`, `cssVar`, and calc
functions to handle CSS variable syntax automatically.
<StorybookInformationHighlight
title="Why use styling utilities?"
description="Styling utilities automatically wrap tokens in <code>var()</code> and provide fallbacks for better browser support. They also ensure consistent token usage across your components."
link="/?path=/docs/styling-getting-started-overview--docs"
linkText="Learn more about styling utilities"
/>
## Best Practices
<br />
### Prefer System Tokens
Use system tokens over base tokens whenever possible for better theming support:
```javascript
// Good - Semantic and themeable
backgroundColor: system.color.bg.default;
// Avoid - Hard-coded base value
backgroundColor: base.frenchVanilla100;
```
### Use Complete Type Levels
Instead of mixing individual type properties, use complete type level tokens:
```javascript
// Good - Consistent type styling
...system.type.body.medium
// Avoid - Mixing individual properties
fontSize: system.fontSize.body.medium,
fontWeight: system.fontWeight.regular,
lineHeight: '1.5'
```
### Leverage Styling Utilities
Always use `createStyles` and `cssVar` for proper CSS variable handling:
```javascript
// Good - Proper CSS variable wrapping
const styles = createStyles({
padding: system.space.x4,
});
// Avoid - Manual CSS variable handling
const styles = {
padding: `var(${system.space.x4})`,
};
```
### Convert Pixel Values
Use `px2rem` for pixel-based values to maintain consistency:
```javascript
import {px2rem} from '@workday/canvas-kit-styling';
const styles = createStyles({
border: `solid ${px2rem(1)}`,
borderColor: system.color.border.container,
});
```