@primer/primitives 11.4.0 → 11.4.1-rc.0499d5a6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN_TOKENS_GUIDE.md +185 -0
- package/DESIGN_TOKENS_SPEC.md +565 -0
- package/dist/build/formats/jsonFigma.js +8 -1
- package/dist/build/formats/markdownLlmGuidelines.d.ts +7 -6
- package/dist/build/formats/markdownLlmGuidelines.js +1034 -60
- package/dist/build/schemas/borderToken.d.ts +61 -5
- package/dist/build/schemas/borderToken.js +2 -1
- package/dist/build/schemas/colorToken.d.ts +639 -30
- package/dist/build/schemas/colorToken.js +3 -2
- package/dist/build/schemas/colorW3cValue.d.ts +28 -0
- package/dist/build/schemas/colorW3cValue.js +42 -0
- package/dist/build/schemas/cubicBezierToken.d.ts +1 -1
- package/dist/build/schemas/dimensionToken.d.ts +9 -2
- package/dist/build/schemas/dimensionValue.d.ts +12 -1
- package/dist/build/schemas/dimensionValue.js +10 -13
- package/dist/build/schemas/durationToken.d.ts +8 -2
- package/dist/build/schemas/durationValue.d.ts +11 -1
- package/dist/build/schemas/durationValue.js +13 -3
- package/dist/build/schemas/fontFamilyToken.d.ts +1 -1
- package/dist/build/schemas/fontWeightToken.d.ts +1 -1
- package/dist/build/schemas/gradientToken.d.ts +23 -2
- package/dist/build/schemas/gradientToken.js +2 -1
- package/dist/build/schemas/numberToken.d.ts +1 -1
- package/dist/build/schemas/shadowToken.d.ts +1751 -127
- package/dist/build/schemas/shadowToken.js +8 -2
- package/dist/build/schemas/stringToken.d.ts +1 -1
- package/dist/build/schemas/stringToken.js +1 -1
- package/dist/build/schemas/tokenType.d.ts +1 -1
- package/dist/build/schemas/transitionToken.d.ts +15 -3
- package/dist/build/schemas/typographyToken.d.ts +19 -5
- package/dist/build/schemas/typographyToken.js +1 -1
- package/dist/build/schemas/validTokenType.d.ts +1 -1
- package/dist/build/schemas/validTokenType.js +1 -1
- package/dist/build/schemas/viewportRangeToken.d.ts +1 -1
- package/dist/build/transformers/borderToCss.js +19 -1
- package/dist/build/transformers/colorAlphaToCss.js +6 -3
- package/dist/build/transformers/colorToHex.js +5 -2
- package/dist/build/transformers/colorToRgbAlpha.js +5 -2
- package/dist/build/transformers/colorToRgbaFloat.js +5 -0
- package/dist/build/transformers/dimensionToPixelUnitless.d.ts +3 -2
- package/dist/build/transformers/dimensionToPixelUnitless.js +22 -26
- package/dist/build/transformers/dimensionToRem.d.ts +2 -1
- package/dist/build/transformers/dimensionToRem.js +21 -22
- package/dist/build/transformers/dimensionToRemPxArray.d.ts +2 -1
- package/dist/build/transformers/dimensionToRemPxArray.js +21 -22
- package/dist/build/transformers/durationToCss.d.ts +2 -1
- package/dist/build/transformers/durationToCss.js +18 -11
- package/dist/build/transformers/gradientToCss.js +2 -1
- package/dist/build/transformers/shadowToCss.js +15 -1
- package/dist/build/transformers/utilities/normalizeColorValue.d.ts +23 -0
- package/dist/build/transformers/utilities/normalizeColorValue.js +74 -0
- package/dist/build/transformers/utilities/parseDimension.d.ts +12 -0
- package/dist/build/transformers/utilities/parseDimension.js +31 -0
- package/dist/build/types/borderTokenValue.d.ts +5 -2
- package/dist/build/types/dimensionTokenValue.d.ts +9 -0
- package/dist/build/types/shadowTokenValue.d.ts +8 -5
- package/dist/css/functional/themes/dark-colorblind-high-contrast.css +32 -28
- package/dist/css/functional/themes/dark-colorblind.css +32 -28
- package/dist/css/functional/themes/dark-dimmed-high-contrast.css +32 -28
- package/dist/css/functional/themes/dark-dimmed.css +32 -28
- package/dist/css/functional/themes/dark-high-contrast.css +32 -28
- package/dist/css/functional/themes/dark-tritanopia-high-contrast.css +32 -28
- package/dist/css/functional/themes/dark-tritanopia.css +32 -28
- package/dist/css/functional/themes/dark.css +32 -28
- package/dist/css/functional/themes/light-colorblind-high-contrast.css +32 -28
- package/dist/css/functional/themes/light-colorblind.css +32 -28
- package/dist/css/functional/themes/light-high-contrast.css +32 -28
- package/dist/css/functional/themes/light-tritanopia-high-contrast.css +32 -28
- package/dist/css/functional/themes/light-tritanopia.css +32 -28
- package/dist/css/functional/themes/light.css +32 -28
- package/dist/css/primitives.css +4 -0
- package/dist/docs/base/motion/motion.json +96 -24
- package/dist/docs/base/size/size.json +76 -19
- package/dist/docs/base/typography/typography.json +24 -6
- package/dist/docs/functional/size/border.json +26 -11
- package/dist/docs/functional/size/breakpoints.json +24 -6
- package/dist/docs/functional/size/radius.json +16 -4
- package/dist/docs/functional/size/size.json +60 -15
- package/dist/docs/functional/themes/dark-colorblind-high-contrast.json +2629 -346
- package/dist/docs/functional/themes/dark-colorblind.json +2629 -346
- package/dist/docs/functional/themes/dark-dimmed-high-contrast.json +2629 -346
- package/dist/docs/functional/themes/dark-dimmed.json +2629 -346
- package/dist/docs/functional/themes/dark-high-contrast.json +2629 -346
- package/dist/docs/functional/themes/dark-tritanopia-high-contrast.json +2629 -346
- package/dist/docs/functional/themes/dark-tritanopia.json +2629 -346
- package/dist/docs/functional/themes/dark.json +2629 -346
- package/dist/docs/functional/themes/light-colorblind-high-contrast.json +2635 -352
- package/dist/docs/functional/themes/light-colorblind.json +2632 -349
- package/dist/docs/functional/themes/light-high-contrast.json +2635 -352
- package/dist/docs/functional/themes/light-tritanopia-high-contrast.json +2635 -352
- package/dist/docs/functional/themes/light-tritanopia.json +2632 -349
- package/dist/docs/functional/themes/light.json +2632 -349
- package/dist/docs/functional/typography/typography.json +8 -2
- package/dist/fallbacks/base/motion/motion.json +48 -12
- package/dist/figma/themes/light-colorblind.json +4 -4
- package/dist/figma/themes/light-high-contrast.json +4 -4
- package/dist/figma/themes/light-tritanopia.json +4 -4
- package/dist/figma/themes/light.json +4 -4
- package/dist/internalCss/dark-colorblind-high-contrast.css +28 -28
- package/dist/internalCss/dark-colorblind.css +28 -28
- package/dist/internalCss/dark-dimmed-high-contrast.css +28 -28
- package/dist/internalCss/dark-dimmed.css +28 -28
- package/dist/internalCss/dark-high-contrast.css +28 -28
- package/dist/internalCss/dark-tritanopia-high-contrast.css +28 -28
- package/dist/internalCss/dark-tritanopia.css +28 -28
- package/dist/internalCss/dark.css +28 -28
- package/dist/internalCss/light-colorblind-high-contrast.css +28 -28
- package/dist/internalCss/light-colorblind.css +28 -28
- package/dist/internalCss/light-high-contrast.css +28 -28
- package/dist/internalCss/light-tritanopia-high-contrast.css +28 -28
- package/dist/internalCss/light-tritanopia.css +28 -28
- package/dist/internalCss/light.css +28 -28
- package/dist/styleLint/base/motion/motion.json +96 -24
- package/dist/styleLint/base/size/size.json +76 -19
- package/dist/styleLint/base/typography/typography.json +30 -12
- package/dist/styleLint/functional/size/border.json +27 -12
- package/dist/styleLint/functional/size/breakpoints.json +24 -6
- package/dist/styleLint/functional/size/radius.json +17 -5
- package/dist/styleLint/functional/size/size-coarse.json +3 -3
- package/dist/styleLint/functional/size/size-fine.json +3 -3
- package/dist/styleLint/functional/size/size.json +111 -66
- package/dist/styleLint/functional/themes/dark-colorblind-high-contrast.json +2757 -366
- package/dist/styleLint/functional/themes/dark-colorblind.json +2757 -366
- package/dist/styleLint/functional/themes/dark-dimmed-high-contrast.json +2757 -366
- package/dist/styleLint/functional/themes/dark-dimmed.json +2757 -366
- package/dist/styleLint/functional/themes/dark-high-contrast.json +2757 -366
- package/dist/styleLint/functional/themes/dark-tritanopia-high-contrast.json +2757 -366
- package/dist/styleLint/functional/themes/dark-tritanopia.json +2757 -366
- package/dist/styleLint/functional/themes/dark.json +2757 -366
- package/dist/styleLint/functional/themes/light-colorblind-high-contrast.json +2763 -372
- package/dist/styleLint/functional/themes/light-colorblind.json +2760 -369
- package/dist/styleLint/functional/themes/light-high-contrast.json +2763 -372
- package/dist/styleLint/functional/themes/light-tritanopia-high-contrast.json +2763 -372
- package/dist/styleLint/functional/themes/light-tritanopia.json +2760 -369
- package/dist/styleLint/functional/themes/light.json +2760 -369
- package/dist/styleLint/functional/typography/typography.json +28 -22
- package/package.json +9 -7
- package/src/tokens/base/motion/timing.json5 +12 -12
- package/src/tokens/base/size/size.json5 +194 -194
- package/src/tokens/base/typography/typography.json5 +6 -6
- package/src/tokens/component/avatar.json5 +72 -44
- package/src/tokens/component/button.json5 +1545 -1193
- package/src/tokens/functional/border/border.json5 +4 -1
- package/src/tokens/functional/color/bgColor.json5 +8 -0
- package/src/tokens/functional/color/display.json5 +7 -0
- package/src/tokens/functional/color/fgColor.json5 +8 -0
- package/src/tokens/functional/color/syntax.json5 +14 -0
- package/src/tokens/functional/shadow/shadow.json5 +1254 -163
- package/src/tokens/functional/size/border.json5 +8 -8
- package/src/tokens/functional/size/breakpoints.json5 +6 -6
- package/src/tokens/functional/size/radius.json5 +4 -4
- package/src/tokens/functional/size/size.json5 +15 -15
- package/src/tokens/functional/typography/typography.json5 +8 -4
- package/dist/build/parsers/index.d.ts +0 -1
- package/dist/build/parsers/index.js +0 -1
- package/dist/build/parsers/w3cJsonParser.d.ts +0 -6
- package/dist/build/parsers/w3cJsonParser.js +0 -25
- package/dist/removed/testing.json5 +0 -4
- package/guidelines/color.llm.md +0 -16
- package/guidelines/guidelines.llm.md +0 -34
- package/guidelines/motion.llm.md +0 -41
- package/guidelines/spacing.llm.md +0 -20
- package/guidelines/typography.llm.md +0 -14
- package/src/tokens/removed/testing.json5 +0 -4
- package/token-guidelines.llm.md +0 -695
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# Design Tokens Master Guide
|
|
2
|
+
|
|
3
|
+
> Metadata: This file defines the Logic and Rules for the design system. For individual token definitions and raw values, refer to DESIGN_TOKENS_SPEC.md.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Core Rule
|
|
8
|
+
|
|
9
|
+
**You are a CSS expert. Never use raw values (hex, px, etc.). Only use semantic tokens.**
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Logic Matrix: Color Pairings
|
|
14
|
+
|
|
15
|
+
| Background Token | Foreground Token | Notes |
|
|
16
|
+
| ---------------------- | ---------------------- | ------------------------- |
|
|
17
|
+
| `--bgColor-*-emphasis` | `--fgColor-onEmphasis` | MUST pair |
|
|
18
|
+
| `--bgColor-*-muted` | `--fgColor-{semantic}` | MUST use semantic fg |
|
|
19
|
+
| `--bgColor-default` | `--fgColor-default` | Standard pairing |
|
|
20
|
+
| `--bgColor-muted` | `--fgColor-default` | NEVER use `fgColor-muted` |
|
|
21
|
+
|
|
22
|
+
**Contrast Requirements:**
|
|
23
|
+
|
|
24
|
+
| Context | Ratio | Standard |
|
|
25
|
+
| --------------- | ----- | -------- |
|
|
26
|
+
| Normal text | 4.5:1 | WCAG AA |
|
|
27
|
+
| Large text / UI | 3:1 | WCAG AA |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Pattern Compression
|
|
32
|
+
|
|
33
|
+
### Control Tokens
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
--control-[size]-[property]
|
|
37
|
+
├── size: xsmall | small | medium | large | xlarge
|
|
38
|
+
└── property: size | paddingInline-[density] | paddingBlock
|
|
39
|
+
└── density: condensed | normal | spacious
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Stack Tokens
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
--stack-[property]-[size]
|
|
46
|
+
├── property: gap | padding
|
|
47
|
+
└── size: condensed | normal | spacious
|
|
48
|
+
|
|
49
|
+
--controlStack-[size]-gap-[density]
|
|
50
|
+
├── size: small | medium | large
|
|
51
|
+
└── density: condensed | auto | spacious
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Typography Tokens
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
--text-[role]-shorthand-[size]
|
|
58
|
+
├── role: display | title | body | subtitle | caption | codeBlock | codeInline
|
|
59
|
+
└── size: small | medium | large
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Keyword Enforcement (RFC 2119)
|
|
65
|
+
|
|
66
|
+
### Motion
|
|
67
|
+
|
|
68
|
+
| Keyword | Rule |
|
|
69
|
+
| ------- | -------------------------------------------------------------- |
|
|
70
|
+
| MUST | Use motion for interactive state changes (hover, focus, press) |
|
|
71
|
+
| MUST | Keep animations ≤300ms for UI interactions |
|
|
72
|
+
| MUST | Respect `prefers-reduced-motion` media query |
|
|
73
|
+
| MUST | Provide instant alternatives when motion is reduced |
|
|
74
|
+
| SHOULD | Use 100-200ms for micro-interactions |
|
|
75
|
+
| SHOULD | Use 200-300ms for state changes |
|
|
76
|
+
| NEVER | Exceed 500ms for UI interactions |
|
|
77
|
+
| NEVER | Use motion purely for decoration |
|
|
78
|
+
| NEVER | Create indefinitely looping motion without user control |
|
|
79
|
+
| NEVER | Rely solely on motion to convey information |
|
|
80
|
+
|
|
81
|
+
### Typography
|
|
82
|
+
|
|
83
|
+
| Keyword | Rule |
|
|
84
|
+
| ---------- | --------------------------------------------------------------------------------------------------------------- |
|
|
85
|
+
| **MUST** | Use **shorthand** tokens (e.g., `font: var(...)`) to ensure `line-height` and `font-weight` are synchronized. |
|
|
86
|
+
| **MUST** | Use `text-codeBlock` for multi-line blocks and `text-codeInline` for inline spans. |
|
|
87
|
+
| **SHOULD** | Match the token to the **semantic role** (e.g., use `title` tokens for headers, not just a large `body` token). |
|
|
88
|
+
| **SHOULD** | Downgrade one size level for mobile viewports (e.g., `title-large` → `title-medium`). |
|
|
89
|
+
| **NEVER** | Use individual `font-size` or `line-height` tokens if a shorthand variant is available. |
|
|
90
|
+
| **NEVER** | Use `text-caption-shorthand` for multi-line body text (accessibility/readability failure). |
|
|
91
|
+
|
|
92
|
+
### Spacing
|
|
93
|
+
|
|
94
|
+
| Keyword | Rule |
|
|
95
|
+
| ------- | ------------------------------------------- |
|
|
96
|
+
| MUST | Use control tokens for interactive elements |
|
|
97
|
+
| MUST | Use stack tokens for layout spacing |
|
|
98
|
+
| MUST | Match padding density to control's purpose |
|
|
99
|
+
| SHOULD | Use `medium` size as default |
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Decision Tree: Easing Selection
|
|
104
|
+
|
|
105
|
+
1. Is element entering/exiting viewport? → ease-out (default)
|
|
106
|
+
2. Is element moving/morphing on screen? → ease-in-out
|
|
107
|
+
3. Is this a hover state change? → ease
|
|
108
|
+
4. Is this constant motion (loaders)? → linear
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Golden Example: Reference Component
|
|
113
|
+
|
|
114
|
+
```css
|
|
115
|
+
/* Button: All 5 interactive states with correct token usage */
|
|
116
|
+
.btn {
|
|
117
|
+
/* Base styles */
|
|
118
|
+
background-color: var(--control-bgColor-rest);
|
|
119
|
+
color: var(--fgColor-default);
|
|
120
|
+
border: none;
|
|
121
|
+
border-radius: var(--borderRadius-medium);
|
|
122
|
+
padding-block: var(--control-medium-paddingBlock);
|
|
123
|
+
padding-inline: var(--control-medium-paddingInline-normal);
|
|
124
|
+
font: var(--text-body-shorthand-medium);
|
|
125
|
+
cursor: pointer;
|
|
126
|
+
|
|
127
|
+
/* Motion: MUST be <300ms */
|
|
128
|
+
transition:
|
|
129
|
+
background-color 150ms ease,
|
|
130
|
+
box-shadow 150ms ease,
|
|
131
|
+
transform 100ms ease;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* State: Hover */
|
|
135
|
+
.btn:hover {
|
|
136
|
+
background-color: var(--control-bgColor-hover);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* State: Focus-visible (MUST use :focus-visible, not :focus) */
|
|
140
|
+
.btn:focus-visible {
|
|
141
|
+
outline: var(--focus-outline);
|
|
142
|
+
outline-offset: var(--outline-focus-offset);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* State: Active/Pressed */
|
|
146
|
+
.btn:active {
|
|
147
|
+
background-color: var(--control-bgColor-active);
|
|
148
|
+
transform: scale(0.98);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* State: Disabled */
|
|
152
|
+
.btn:disabled {
|
|
153
|
+
background-color: var(--bgColor-disabled);
|
|
154
|
+
color: var(--fgColor-disabled);
|
|
155
|
+
cursor: not-allowed;
|
|
156
|
+
opacity: 1; /* NEVER use opacity for disabled */
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* Accessibility: MUST respect reduced motion */
|
|
160
|
+
@media (prefers-reduced-motion: reduce) {
|
|
161
|
+
.btn {
|
|
162
|
+
transition: none;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Interactive States Checklist
|
|
170
|
+
|
|
171
|
+
All interactive elements MUST define:
|
|
172
|
+
|
|
173
|
+
| State | Selector | Required |
|
|
174
|
+
| -------- | -------------------------------------- | ------------------------ |
|
|
175
|
+
| Rest | `.element` | ✓ |
|
|
176
|
+
| Hover | `:hover` | ✓ |
|
|
177
|
+
| Focus | `:focus-visible` | ✓ (NEVER `:focus` alone) |
|
|
178
|
+
| Active | `:active` | ✓ |
|
|
179
|
+
| Disabled | `:disabled` / `[aria-disabled="true"]` | ✓ |
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Hallucination Guard
|
|
184
|
+
|
|
185
|
+
> **If you suggest a token name not found in this spec or the system, suffix it with `/* check-token */`.**
|