@primer/primitives 11.4.0-rc.f798df25 → 11.4.1-rc.24c79953

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