@primer/primitives 11.4.0-rc.f798df25 → 11.4.1-rc.14fb4bb1

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.
Files changed (215) hide show
  1. package/DESIGN_TOKENS_GUIDE.md +185 -0
  2. package/DESIGN_TOKENS_SPEC.md +565 -0
  3. package/dist/build/filters/hasLlmExtensions.d.ts +7 -0
  4. package/dist/build/filters/hasLlmExtensions.js +11 -0
  5. package/dist/build/filters/index.d.ts +1 -0
  6. package/dist/build/filters/index.js +1 -0
  7. package/dist/build/formats/index.d.ts +1 -0
  8. package/dist/build/formats/index.js +1 -0
  9. package/dist/build/formats/jsonFigma.js +8 -1
  10. package/dist/build/formats/markdownLlmGuidelines.d.ts +11 -0
  11. package/dist/build/formats/markdownLlmGuidelines.js +1168 -0
  12. package/dist/build/platforms/index.d.ts +1 -0
  13. package/dist/build/platforms/index.js +1 -0
  14. package/dist/build/platforms/llmGuidelines.d.ts +2 -0
  15. package/dist/build/platforms/llmGuidelines.js +17 -0
  16. package/dist/build/preprocessors/inheritGroupProperties.d.ts +7 -0
  17. package/dist/build/preprocessors/inheritGroupProperties.js +70 -0
  18. package/dist/build/primerStyleDictionary.js +7 -1
  19. package/dist/build/schemas/borderToken.d.ts +67 -5
  20. package/dist/build/schemas/borderToken.js +8 -1
  21. package/dist/build/schemas/colorToken.d.ts +643 -30
  22. package/dist/build/schemas/colorToken.js +5 -2
  23. package/dist/build/schemas/colorW3cValue.d.ts +28 -0
  24. package/dist/build/schemas/colorW3cValue.js +42 -0
  25. package/dist/build/schemas/cubicBezierToken.d.ts +7 -1
  26. package/dist/build/schemas/cubicBezierToken.js +10 -2
  27. package/dist/build/schemas/designToken.d.ts +1 -1
  28. package/dist/build/schemas/designToken.js +113 -21
  29. package/dist/build/schemas/dimensionToken.d.ts +15 -4
  30. package/dist/build/schemas/dimensionToken.js +6 -2
  31. package/dist/build/schemas/dimensionValue.d.ts +12 -1
  32. package/dist/build/schemas/dimensionValue.js +10 -13
  33. package/dist/build/schemas/durationToken.d.ts +14 -2
  34. package/dist/build/schemas/durationToken.js +6 -0
  35. package/dist/build/schemas/durationValue.d.ts +11 -1
  36. package/dist/build/schemas/durationValue.js +13 -3
  37. package/dist/build/schemas/fontFamilyToken.d.ts +5 -1
  38. package/dist/build/schemas/fontFamilyToken.js +2 -0
  39. package/dist/build/schemas/fontWeightToken.d.ts +5 -1
  40. package/dist/build/schemas/fontWeightToken.js +2 -0
  41. package/dist/build/schemas/gradientToken.d.ts +27 -2
  42. package/dist/build/schemas/gradientToken.js +4 -1
  43. package/dist/build/schemas/llmExtension.d.ts +9 -0
  44. package/dist/build/schemas/llmExtension.js +11 -0
  45. package/dist/build/schemas/numberToken.d.ts +5 -1
  46. package/dist/build/schemas/numberToken.js +2 -0
  47. package/dist/build/schemas/shadowToken.d.ts +1755 -127
  48. package/dist/build/schemas/shadowToken.js +10 -2
  49. package/dist/build/schemas/stringToken.d.ts +7 -1
  50. package/dist/build/schemas/stringToken.js +7 -1
  51. package/dist/build/schemas/tokenType.d.ts +1 -1
  52. package/dist/build/schemas/transitionToken.d.ts +21 -3
  53. package/dist/build/schemas/transitionToken.js +6 -0
  54. package/dist/build/schemas/typographyToken.d.ts +25 -5
  55. package/dist/build/schemas/typographyToken.js +7 -1
  56. package/dist/build/schemas/validTokenType.d.ts +6 -2
  57. package/dist/build/schemas/validTokenType.js +72 -18
  58. package/dist/build/schemas/viewportRangeToken.d.ts +7 -1
  59. package/dist/build/schemas/viewportRangeToken.js +6 -0
  60. package/dist/build/transformers/borderToCss.js +19 -1
  61. package/dist/build/transformers/colorAlphaToCss.js +6 -3
  62. package/dist/build/transformers/colorToHex.js +5 -2
  63. package/dist/build/transformers/colorToRgbAlpha.js +5 -2
  64. package/dist/build/transformers/colorToRgbaFloat.js +5 -0
  65. package/dist/build/transformers/dimensionToPixelUnitless.d.ts +3 -2
  66. package/dist/build/transformers/dimensionToPixelUnitless.js +22 -26
  67. package/dist/build/transformers/dimensionToRem.d.ts +2 -1
  68. package/dist/build/transformers/dimensionToRem.js +21 -22
  69. package/dist/build/transformers/dimensionToRemPxArray.d.ts +2 -1
  70. package/dist/build/transformers/dimensionToRemPxArray.js +21 -22
  71. package/dist/build/transformers/durationToCss.d.ts +2 -1
  72. package/dist/build/transformers/durationToCss.js +18 -11
  73. package/dist/build/transformers/gradientToCss.js +2 -1
  74. package/dist/build/transformers/shadowToCss.js +15 -1
  75. package/dist/build/transformers/utilities/normalizeColorValue.d.ts +23 -0
  76. package/dist/build/transformers/utilities/normalizeColorValue.js +74 -0
  77. package/dist/build/transformers/utilities/parseDimension.d.ts +12 -0
  78. package/dist/build/transformers/utilities/parseDimension.js +31 -0
  79. package/dist/build/types/borderTokenValue.d.ts +5 -2
  80. package/dist/build/types/dimensionTokenValue.d.ts +9 -0
  81. package/dist/build/types/shadowTokenValue.d.ts +8 -5
  82. package/dist/css/base/motion/motion.css +5 -4
  83. package/dist/css/functional/size/border.css +9 -14
  84. package/dist/css/functional/size/radius.css +7 -0
  85. package/dist/css/functional/size/size-coarse.css +3 -3
  86. package/dist/css/functional/size/size-fine.css +3 -3
  87. package/dist/css/functional/size/viewport.css +1 -1
  88. package/dist/css/functional/themes/dark-colorblind-high-contrast.css +204 -200
  89. package/dist/css/functional/themes/dark-colorblind.css +204 -200
  90. package/dist/css/functional/themes/dark-dimmed-high-contrast.css +204 -200
  91. package/dist/css/functional/themes/dark-dimmed.css +204 -200
  92. package/dist/css/functional/themes/dark-high-contrast.css +204 -200
  93. package/dist/css/functional/themes/dark-tritanopia-high-contrast.css +204 -200
  94. package/dist/css/functional/themes/dark-tritanopia.css +204 -200
  95. package/dist/css/functional/themes/dark.css +204 -200
  96. package/dist/css/functional/themes/light-colorblind-high-contrast.css +204 -200
  97. package/dist/css/functional/themes/light-colorblind.css +204 -200
  98. package/dist/css/functional/themes/light-high-contrast.css +204 -200
  99. package/dist/css/functional/themes/light-tritanopia-high-contrast.css +204 -200
  100. package/dist/css/functional/themes/light-tritanopia.css +204 -200
  101. package/dist/css/functional/themes/light.css +204 -200
  102. package/dist/css/functional/typography/typography.css +4 -4
  103. package/dist/css/primitives.css +5 -0
  104. package/dist/docs/base/motion/motion.json +181 -32
  105. package/dist/docs/base/size/size.json +76 -19
  106. package/dist/docs/base/typography/typography.json +24 -6
  107. package/dist/docs/functional/size/border.json +66 -186
  108. package/dist/docs/functional/size/breakpoints.json +24 -6
  109. package/dist/docs/functional/size/radius.json +221 -0
  110. package/dist/docs/functional/size/size-coarse.json +45 -3
  111. package/dist/docs/functional/size/size-fine.json +45 -3
  112. package/dist/docs/functional/size/size.json +60 -15
  113. package/dist/docs/functional/size/viewport.json +2 -2
  114. package/dist/docs/functional/themes/dark-colorblind-high-contrast.json +3563 -436
  115. package/dist/docs/functional/themes/dark-colorblind.json +3563 -436
  116. package/dist/docs/functional/themes/dark-dimmed-high-contrast.json +3563 -436
  117. package/dist/docs/functional/themes/dark-dimmed.json +3601 -474
  118. package/dist/docs/functional/themes/dark-high-contrast.json +3563 -436
  119. package/dist/docs/functional/themes/dark-tritanopia-high-contrast.json +3563 -436
  120. package/dist/docs/functional/themes/dark-tritanopia.json +3563 -436
  121. package/dist/docs/functional/themes/dark.json +3563 -436
  122. package/dist/docs/functional/themes/light-colorblind-high-contrast.json +3569 -442
  123. package/dist/docs/functional/themes/light-colorblind.json +3566 -439
  124. package/dist/docs/functional/themes/light-high-contrast.json +3569 -442
  125. package/dist/docs/functional/themes/light-tritanopia-high-contrast.json +3569 -442
  126. package/dist/docs/functional/themes/light-tritanopia.json +3566 -439
  127. package/dist/docs/functional/themes/light.json +3566 -439
  128. package/dist/docs/functional/typography/typography.json +180 -10
  129. package/dist/fallbacks/base/motion/motion.json +49 -12
  130. package/dist/fallbacks/functional/size/border.json +0 -5
  131. package/dist/fallbacks/functional/size/radius.json +7 -0
  132. package/dist/fallbacks/functional/size/viewport.json +1 -1
  133. package/dist/figma/dimension/dimension.json +30 -20
  134. package/dist/figma/themes/dark-colorblind.json +85 -0
  135. package/dist/figma/themes/dark-dimmed.json +134 -49
  136. package/dist/figma/themes/dark-high-contrast.json +85 -0
  137. package/dist/figma/themes/dark-tritanopia.json +85 -0
  138. package/dist/figma/themes/dark.json +85 -0
  139. package/dist/figma/themes/light-colorblind.json +89 -4
  140. package/dist/figma/themes/light-high-contrast.json +89 -4
  141. package/dist/figma/themes/light-tritanopia.json +89 -4
  142. package/dist/figma/themes/light.json +89 -4
  143. package/dist/figma/typography/typography.json +44 -40
  144. package/dist/internalCss/dark-colorblind-high-contrast.css +218 -228
  145. package/dist/internalCss/dark-colorblind.css +218 -228
  146. package/dist/internalCss/dark-dimmed-high-contrast.css +218 -228
  147. package/dist/internalCss/dark-dimmed.css +218 -228
  148. package/dist/internalCss/dark-high-contrast.css +218 -228
  149. package/dist/internalCss/dark-tritanopia-high-contrast.css +218 -228
  150. package/dist/internalCss/dark-tritanopia.css +218 -228
  151. package/dist/internalCss/dark.css +218 -228
  152. package/dist/internalCss/light-colorblind-high-contrast.css +218 -228
  153. package/dist/internalCss/light-colorblind.css +218 -228
  154. package/dist/internalCss/light-high-contrast.css +218 -228
  155. package/dist/internalCss/light-tritanopia-high-contrast.css +218 -228
  156. package/dist/internalCss/light-tritanopia.css +218 -228
  157. package/dist/internalCss/light.css +218 -228
  158. package/dist/styleLint/base/motion/motion.json +181 -32
  159. package/dist/styleLint/base/size/size.json +76 -19
  160. package/dist/styleLint/base/typography/typography.json +30 -12
  161. package/dist/styleLint/functional/size/border.json +61 -181
  162. package/dist/styleLint/functional/size/breakpoints.json +24 -6
  163. package/dist/styleLint/functional/size/radius.json +221 -0
  164. package/dist/styleLint/functional/size/size-coarse.json +45 -3
  165. package/dist/styleLint/functional/size/size-fine.json +45 -3
  166. package/dist/styleLint/functional/size/size.json +111 -66
  167. package/dist/styleLint/functional/size/viewport.json +2 -2
  168. package/dist/styleLint/functional/themes/dark-colorblind-high-contrast.json +3603 -368
  169. package/dist/styleLint/functional/themes/dark-colorblind.json +3603 -368
  170. package/dist/styleLint/functional/themes/dark-dimmed-high-contrast.json +3603 -368
  171. package/dist/styleLint/functional/themes/dark-dimmed.json +3641 -406
  172. package/dist/styleLint/functional/themes/dark-high-contrast.json +3603 -368
  173. package/dist/styleLint/functional/themes/dark-tritanopia-high-contrast.json +3603 -368
  174. package/dist/styleLint/functional/themes/dark-tritanopia.json +3603 -368
  175. package/dist/styleLint/functional/themes/dark.json +3603 -368
  176. package/dist/styleLint/functional/themes/light-colorblind-high-contrast.json +3609 -374
  177. package/dist/styleLint/functional/themes/light-colorblind.json +3606 -371
  178. package/dist/styleLint/functional/themes/light-high-contrast.json +3609 -374
  179. package/dist/styleLint/functional/themes/light-tritanopia-high-contrast.json +3609 -374
  180. package/dist/styleLint/functional/themes/light-tritanopia.json +3606 -371
  181. package/dist/styleLint/functional/themes/light.json +3606 -371
  182. package/dist/styleLint/functional/typography/typography.json +196 -26
  183. package/package.json +9 -5
  184. package/src/tokens/base/motion/easing.json5 +39 -4
  185. package/src/tokens/base/motion/timing.json5 +12 -12
  186. package/src/tokens/base/size/size.json5 +194 -194
  187. package/src/tokens/base/typography/typography.json5 +6 -6
  188. package/src/tokens/component/avatar.json5 +72 -44
  189. package/src/tokens/component/button.json5 +1545 -1193
  190. package/src/tokens/functional/border/border.json5 +29 -1
  191. package/src/tokens/functional/color/bgColor.json5 +165 -0
  192. package/src/tokens/functional/color/borderColor.json5 +146 -0
  193. package/src/tokens/functional/color/control.json5 +24 -0
  194. package/src/tokens/functional/color/data-vis.json5 +7 -0
  195. package/src/tokens/functional/color/display.json5 +7 -0
  196. package/src/tokens/functional/color/fgColor.json5 +101 -1
  197. package/src/tokens/functional/color/focus.json5 +5 -0
  198. package/src/tokens/functional/color/selection.json5 +5 -0
  199. package/src/tokens/functional/color/syntax.json5 +14 -0
  200. package/src/tokens/functional/shadow/shadow.json5 +1264 -163
  201. package/src/tokens/functional/size/border.json5 +25 -77
  202. package/src/tokens/functional/size/breakpoints.json5 +6 -6
  203. package/src/tokens/functional/size/radius.json5 +90 -0
  204. package/src/tokens/functional/size/size-coarse.json5 +24 -3
  205. package/src/tokens/functional/size/size-fine.json5 +45 -24
  206. package/src/tokens/functional/size/size.json5 +50 -15
  207. package/src/tokens/functional/size/viewport.json5 +1 -1
  208. package/src/tokens/functional/typography/font-stack.json5 +60 -0
  209. package/src/tokens/functional/typography/typography.json5 +71 -44
  210. package/dist/build/parsers/index.d.ts +0 -1
  211. package/dist/build/parsers/index.js +0 -1
  212. package/dist/build/parsers/w3cJsonParser.d.ts +0 -6
  213. package/dist/build/parsers/w3cJsonParser.js +0 -25
  214. package/dist/removed/testing.json5 +0 -4
  215. package/src/tokens/removed/testing.json5 +0 -4
@@ -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 */`.**