@amsterdam/design-system-tokens
Version:
All design tokens from the Amsterdam Design System. Use it to apply its visual design to your website or application.
72 lines (51 loc) • 3.43 kB
Markdown
<!-- @license CC0-1.0 -->
# Tokens Package — Agent Instructions
These instructions are additive to the root [AGENTS.md](../../AGENTS.md). Read that first.
See [README.md](README.md) for full token usage and design guidance; this file focuses on agent-specific rules for editing token source files.
## Overview
This package defines design tokens using the [Design Tokens Community Group (DTCG)](https://tr.designtokens.org/format/) format and builds them into CSS custom properties, JSON, and Sass variables via [Style Dictionary](https://styledictionary.com/).
## Token structure
Tokens are organized into three layers:
| Directory | Purpose |
| ------------------ | ------------------------------------------------- |
| `src/brand/ams/` | Brand-level values (colors, typography, spacing) |
| `src/common/ams/` | Shared patterns across components (inputs, links) |
| `src/components/ams/` | Component-specific tokens |
## Token file format
Token files use the `.tokens.json` extension and follow the DTCG format:
```json
{
"ams": {
"<component-name>": {
"<property>": {
"$value": "{ams.<reference>}",
"$type": "<dtcg-type>"
}
}
}
}
```
- Always reference existing brand or common tokens where possible — do not hardcode raw values.
- Valid `$type` values used in this project: `color`, `dimension`, `fontFamily`, `fontWeight`, `shadow`. Do not invent other `$type` values.
- Use the `$extensions` field for Amsterdam-specific metadata (e.g. `nl.amsterdam.type`, `nl.amsterdam.subtype`). Common `$extensions` types include `fontSize`, `lineHeight`, and `space` (via `nl.amsterdam.subtype`). See existing component tokens for examples.
- Variant tokens are nested under the component (e.g. `ams.badge.azure.background-color`).
## Compact mode
Some token categories have `.compact.tokens.json` variants (e.g. `space.compact.tokens.json`, `typography.compact.tokens.json`). These provide denser values for compact layouts.
## Build
- Build command: `pnpm build` (runs `node build.js`)
- Watch mode: `pnpm build:watch`
- Output: `dist/` — never edit generated output directly.
- Build config: `build.js` with custom Style Dictionary logic in `style-dictionary/` (includes `transforms/` and `dimensionToString.js`).
## File locations
- Component tokens: `src/components/ams/<name>.tokens.json`
- Brand tokens: `src/brand/ams/`
- Common tokens: `src/common/ams/`
- Build script: `build.js`
- Custom transforms: `style-dictionary/transforms/`
## Key rules
- Every token must have a `$value`. Type information is provided through either `$type` (DTCG standard) or `$extensions` with `nl.amsterdam.type` / `nl.amsterdam.subtype`. Some tokens (e.g. cursors, aspect ratios) have no type annotation — follow the existing pattern for the token category you are editing.
- Token names use kebab-case and mirror CSS property names where applicable.
- No unused tokens — every defined token must be consumed by CSS or another token.
- No hardcoded design values in CSS or React — if a value is missing, add a token here first.
- Changes to brand-level tokens in `src/brand/ams/` have wide impact; do not change them unless the task explicitly calls for brand updates.
- When adding new component tokens, wire them into CSS (and React where applicable) in the same change so they are immediately used.