@equinor/eds-tokens-build
v1.0.1
Published
A build system for generating design tokens from the Equinor Design System (EDS) using Style Dictionary.
Keywords
Readme
@equinor/eds-tokens-build
A build system for generating design tokens from the Equinor Design System (EDS) using Style Dictionary.
Installation
npm install @equinor/eds-tokens-build
# or
pnpm add @equinor/eds-tokens-build
# or
yarn add @equinor/eds-tokens-buildUsage
This package provides utilities for building and transforming design tokens using Style Dictionary. It includes pre-configured transforms, filters, and build configurations.
Basic Token Building
import { _extend, includeTokenFilter } from '@equinor/eds-tokens-build';
// Build basic tokens
const config = _extend({
source: ['tokens/spacing.json'],
buildPath: 'build/css/',
fileName: 'spacing',
filter: (token) => includeTokenFilter(token),
transforms: ['name/kebab', 'size/px']
});
await config.buildAllPlatforms();Creating Light/Dark CSS colour variables
Generate separate CSS files for light and dark themes using the color scheme pattern:
import {
_extend,
includeTokenFilter,
mergeLightDarkFoundation
} from '@equinor/eds-tokens-build';
// Build light color scheme CSS variables
const lightColorScheme = _extend({
source: ['tokens/light-color-scheme.json'],
include: ['tokens/light-colors.json'], // Core light colors
filter: (token) => includeTokenFilter(token, ['Color scheme']),
buildPath: 'build/css/',
fileName: 'light-color-scheme',
selector: '[data-color-scheme="light"]',
prefix: 'eds-color',
outputReferences: false,
});
// Build dark color scheme CSS variables
const darkColorScheme = _extend({
source: ['tokens/dark-color-scheme.json'],
include: ['tokens/dark-colors.json'], // Core dark colors
filter: (token) => includeTokenFilter(token, ['Color scheme']),
buildPath: 'build/css/',
fileName: 'dark-color-scheme',
selector: '[data-color-scheme="dark"]',
prefix: 'eds-color',
outputReferences: false,
});
await lightColorScheme.buildAllPlatforms();
await darkColorScheme.buildAllPlatforms();
// Merge into a single file using light-dark() CSS function
mergeLightDarkFoundation({
prefix: 'eds-color',
});This approach:
- Uses
sourcefor the color scheme tokens (semantic colors like primary, secondary) - Uses
includefor the base color definitions (hex values, etc.) - Filters specifically for
['Color scheme']tokens to avoid outputting all colors - Generates separate files for each theme with appropriate selectors
- Merges them into a modern CSS file using the
light-dark()function
Typography Tokens
import {
_extend,
includeTokenFilter,
PX_TO_REM_NAME,
FONT_QUOTE_NAME
} from '@equinor/eds-tokens-build';
const typographyConfig = _extend({
source: ['tokens/typography.json'],
buildPath: 'build/css/',
fileName: 'typography',
selector: '[data-font-size="md"]',
filter: (token) => includeTokenFilter(token, ['Font size']),
transforms: ['name/kebab', PX_TO_REM_NAME, FONT_QUOTE_NAME],
outputReferences: true
});
await typographyConfig.buildAllPlatforms();Spacing Tokens
import {
_extend,
includeTokenFilter,
PX_TRANSFORM_NAME,
PX_FORMATTED_NAME
} from '@equinor/eds-tokens-build';
const spacingConfig = _extend({
source: ['tokens/spacing.json'],
buildPath: 'build/css/',
fileName: 'spacing',
filter: (token) => includeTokenFilter(token),
transforms: ['name/kebab', PX_TO_REM_NAME, PX_FORMATTED_NAME, PX_TRANSFORM_NAME]
});
await spacingConfig.buildAllPlatforms();Available Transforms
The package provides several pre-configured transform constants:
PX_TO_REM_NAME- Convert px values to remPX_FORMATTED_NAME- Format px valuesPX_TRANSFORM_NAME- Transform px valuesFONT_QUOTE_NAME- Add quotes around font family names
Available Functions
_extend(config)
Creates a Style Dictionary configuration with EDS-specific defaults.
Parameters:
source: string[]- Source token filesbuildPath: string- Output directoryfileName: string- Output filenamefilter?: Function- Token filter functiontransforms?: string[]- Transform names to applyselector?: string- CSS selector for outputinclude?: string[]- Additional files to includeoutputReferences?: boolean- Whether to output token references
includeTokenFilter(token, categories?)
Filters tokens based on categories or general inclusion criteria.
Parameters:
token: object- Token object to filtercategories?: string[]- Optional categories to filter by
createLightDarkTransform(options)
Creates a transform for handling light/dark mode color tokens.
Parameters:
name: string- Transform namedarkTokensObject: object- Dark mode token values
Development
Prerequisites
- Node.js >= 18.0.0
- pnpm >= 8
Setup
- Clone the repository
- Install dependencies:
pnpm install
Available Scripts
pnpm dev- Start development serverpnpm build- Build the package for productionpnpm type-check- Run TypeScript type checking
Building
pnpm buildThis will generate the distribution files in the dist directory.
License
MIT © Equinor
