Skip to content

Commit df07db9

Browse files
refactor(eds-tokens): tokens build sync setup (#3993)
* refactor (eds-tokens-build): Move eds specific build scripts to eds-tokens * refactor (eds-tokens): Move eds specific build scripts to eds-tokens * feat(eds-tokens-build): Add README support for light/dark CSS color variables and remove unused dependency * refactor: remove the eds-tokens-sync dependency from the docker files and build script * fix: update pnpm lock after removing dependency to tokens-sync in tokens-build.
1 parent 879ed06 commit df07db9

17 files changed

+18701
-11004
lines changed

DockerfileColorPaletteGenerator

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ COPY packages/eds-color-palette-generator/package.json ./packages/eds-color-pale
2121
COPY packages/eds-tailwind/package.json ./packages/eds-tailwind/
2222
COPY packages/eds-tokens/package.json ./packages/eds-tokens/
2323
COPY packages/eds-tokens-build/package.json ./packages/eds-tokens-build/
24-
COPY packages/eds-tokens-sync/package.json ./packages/eds-tokens-sync/
2524

2625
# Install dependencies with frozen lockfile and clean cache
2726
RUN pnpm install --frozen-lockfile && \

DockerfileEdsDemo

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml babel.config.cjs tsconfig.b
2020
COPY packages/eds-demo/package.json ./packages/eds-demo/
2121
COPY packages/eds-tokens/package.json ./packages/eds-tokens/
2222
COPY packages/eds-tokens-build/package.json ./packages/eds-tokens-build/
23-
COPY packages/eds-tokens-sync/package.json ./packages/eds-tokens-sync/
2423

2524
# Install dependencies with frozen lockfile and clean cache
2625
RUN pnpm install --frozen-lockfile && \

DockerfileEdsDocs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ COPY . ./
1717
RUN pnpm install --frozen-lockfile
1818

1919
# Build all necessary dependencies and docs
20-
RUN pnpm run build:token-sync && \
21-
pnpm run build:tokens-build && \
20+
RUN pnpm run build:tokens-build && \
2221
pnpm run build:tokens && \
2322
pnpm run build:utils && \
2423
pnpm run build:icons && \

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"build:tokens": "pnpm --filter @equinor/eds-tokens run build",
1919
"build:tokens-build": "pnpm --filter @equinor/eds-tokens-build run build",
2020
"build:token-sync": "pnpm --filter @equinor/eds-tokens-sync run build",
21-
"build:variables": "pnpm --filter @equinor/eds-tokens-sync run build && pnpm --filter @equinor/eds-tokens-build run build && pnpm --filter @equinor/eds-tokens run build:variables",
21+
"build:variables": "pnpm --filter @equinor/eds-tokens-build run build && pnpm --filter @equinor/eds-tokens run build:variables",
2222
"update:tokens": "pnpm --filter @equinor/eds-tokens-sync run build && pnpm --filter @equinor/eds-tokens run update-tokens",
2323
"update:figma": "pnpm --filter @equinor/eds-tokens-sync run build && pnpm --filter @equinor/eds-tokens run update-figma",
2424
"build:icons": "pnpm --filter @equinor/eds-icons run build",

packages/eds-tokens-build/README.md

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,43 +33,57 @@ const config = _extend({
3333
await config.buildAllPlatforms();
3434
```
3535

36-
### Color Tokens with Light/Dark Mode
36+
### Creating Light/Dark CSS colour variables
37+
38+
Generate separate CSS files for light and dark themes using the color scheme pattern:
3739

3840
```typescript
3941
import {
4042
_extend,
41-
createLightDarkTransform,
42-
includeTokenFilter
43+
includeTokenFilter,
44+
mergeLightDarkFoundation
4345
} from '@equinor/eds-tokens-build';
44-
import { readJsonFiles } from '@equinor/eds-tokens-sync';
45-
import { StyleDictionary } from 'style-dictionary-utils';
46-
47-
// Read dark mode tokens
48-
const darkTokens = readJsonFiles(['tokens/dark-theme.json']);
4946

50-
// Create and register light/dark transform
51-
const lightDarkTransform = createLightDarkTransform({
52-
name: 'lightDarkMatrix',
53-
darkTokensObject: darkTokens['dark-theme.json']
47+
// Build light color scheme CSS variables
48+
const lightColorScheme = _extend({
49+
source: ['tokens/light-color-scheme.json'],
50+
include: ['tokens/light-colors.json'], // Core light colors
51+
filter: (token) => includeTokenFilter(token, ['Color scheme']),
52+
buildPath: 'build/css/',
53+
fileName: 'light-color-scheme',
54+
selector: '[data-color-scheme="light"]',
55+
prefix: 'eds-color',
56+
outputReferences: false,
5457
});
5558

56-
StyleDictionary.registerTransform(lightDarkTransform);
57-
58-
// Build color tokens with light/dark support
59-
const colorConfig = _extend({
60-
source: ['tokens/light-theme.json'],
61-
include: ['tokens/core.json'],
59+
// Build dark color scheme CSS variables
60+
const darkColorScheme = _extend({
61+
source: ['tokens/dark-color-scheme.json'],
62+
include: ['tokens/dark-colors.json'], // Core dark colors
63+
filter: (token) => includeTokenFilter(token, ['Color scheme']),
6264
buildPath: 'build/css/',
63-
fileName: 'colors',
64-
selector: ':root',
65-
filter: (token) => includeTokenFilter(token, ['Color']),
66-
transforms: ['name/kebab', 'color/css', 'lightDarkMatrix'],
67-
outputReferences: true
65+
fileName: 'dark-color-scheme',
66+
selector: '[data-color-scheme="dark"]',
67+
prefix: 'eds-color',
68+
outputReferences: false,
6869
});
6970

70-
await colorConfig.buildAllPlatforms();
71+
await lightColorScheme.buildAllPlatforms();
72+
await darkColorScheme.buildAllPlatforms();
73+
74+
// Merge into a single file using light-dark() CSS function
75+
mergeLightDarkFoundation({
76+
prefix: 'eds-color',
77+
});
7178
```
7279

80+
This approach:
81+
- Uses `source` for the color scheme tokens (semantic colors like primary, secondary)
82+
- Uses `include` for the base color definitions (hex values, etc.)
83+
- Filters specifically for `['Color scheme']` tokens to avoid outputting all colors
84+
- Generates separate files for each theme with appropriate selectors
85+
- Merges them into a modern CSS file using the `light-dark()` function
86+
7387
### Typography Tokens
7488

7589
```typescript

packages/eds-tokens-build/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
"type-check": "tsc --noEmit"
3838
},
3939
"devDependencies": {
40-
"@equinor/eds-tokens-sync": "workspace:*",
4140
"@types/node": "^22.18.0",
4241
"prettier": "3.6.2",
4342
"style-dictionary": "^5.0.3",

packages/eds-tokens-build/src/main.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ export { PX_TO_REM_NAME } from './transform/pxToRem'
66
export { _extend } from './utils'
77
export { createLightDarkTransform } from './transform/lightDark'
88
export { PX_TRANSFORM_NAME } from './transform/pxTransform'
9-
export { createSpacingAndTypographyVariables } from './createSpacingAndTypographyVariables'
10-
export { createColorVariablesStatic } from './createColorVariablesStatic'
11-
export { createColorVariablesDynamic } from './createColorVariablesDynamic'
12-
export { createColorVariablesFoundation } from './createColorVariablesFoundation'
139
export { fontQuote } from './transform/fontQuote'
1410
export { pxFormatted } from './transform/pxFormatted'
1511
export { pxToRem } from './transform/pxToRem'
1612
export { pxTransform } from './transform/pxTransform'
13+
export {
14+
mergeLightDarkFoundation,
15+
type MergeLightDarkOptions,
16+
} from './utils/mergeLightDarkFoundation'

packages/eds-tokens-build/src/utils/mergeLightDarkFoundation.ts

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,43 @@
11
import { readFileSync, writeFileSync } from 'fs'
22
import path from 'path'
33

4-
export function mergeLightDarkFoundation({ prefix }: { prefix: string }) {
5-
const outputDirectory = `${process.cwd()}/build/css/color`
4+
export interface MergeLightDarkOptions {
5+
/** CSS variable prefix to match (e.g., 'eds-color') */
6+
prefix: string
7+
/** Path to the light theme CSS file */
8+
lightFilePath?: string
9+
/** Path to the dark theme CSS file */
10+
darkFilePath?: string
11+
/** Output path for the merged CSS file */
12+
outputFilePath?: string
13+
/** Base output directory (used if specific file paths are not provided) */
14+
outputDirectory?: string
15+
/** Light file name pattern (used if lightFilePath is not provided) */
16+
lightFileName?: string
17+
/** Dark file name pattern (used if darkFilePath is not provided) */
18+
darkFileName?: string
19+
/** Output file name (used if outputFilePath is not provided) */
20+
outputFileName?: string
21+
}
22+
23+
export function mergeLightDarkFoundation(options: MergeLightDarkOptions) {
24+
const {
25+
prefix,
26+
lightFilePath,
27+
darkFilePath,
28+
outputFilePath,
29+
outputDirectory = `${process.cwd()}/build/css/color`,
30+
lightFileName = 'light-color-scheme-trimmed.css',
31+
darkFileName = 'dark-color-scheme-trimmed.css',
32+
outputFileName = 'foundation.css',
33+
} = options
634

7-
const lightFoundationPath = path.join(
8-
outputDirectory,
9-
'light-color-scheme-trimmed.css',
10-
)
11-
const darkFoundationPath = path.join(
12-
outputDirectory,
13-
'dark-color-scheme-trimmed.css',
14-
)
15-
const mergedFoundationPath = path.join(outputDirectory, 'foundation.css')
35+
const lightFoundationPath =
36+
lightFilePath || path.join(outputDirectory, lightFileName)
37+
const darkFoundationPath =
38+
darkFilePath || path.join(outputDirectory, darkFileName)
39+
const mergedFoundationPath =
40+
outputFilePath || path.join(outputDirectory, outputFileName)
1641

1742
try {
1843
const lightContent = readFileSync(lightFoundationPath, 'utf-8')

packages/eds-tokens-build/vite.config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export default defineConfig({
1818
'crypto',
1919
'style-dictionary',
2020
'style-dictionary-utils',
21-
'@equinor/eds-tokens-sync',
2221
],
2322
},
2423
},

0 commit comments

Comments
 (0)