@primer/primitives 11.4.0-rc.f798df25 → 11.4.1-rc.4e2d1de5

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 (198) 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/markdownLlmGuidelines.d.ts +11 -0
  10. package/dist/build/formats/markdownLlmGuidelines.js +1168 -0
  11. package/dist/build/platforms/index.d.ts +1 -0
  12. package/dist/build/platforms/index.js +1 -0
  13. package/dist/build/platforms/llmGuidelines.d.ts +2 -0
  14. package/dist/build/platforms/llmGuidelines.js +17 -0
  15. package/dist/build/preprocessors/inheritGroupProperties.d.ts +7 -0
  16. package/dist/build/preprocessors/inheritGroupProperties.js +70 -0
  17. package/dist/build/primerStyleDictionary.js +7 -1
  18. package/dist/build/schemas/borderToken.d.ts +22 -2
  19. package/dist/build/schemas/borderToken.js +6 -0
  20. package/dist/build/schemas/colorToken.d.ts +4 -0
  21. package/dist/build/schemas/colorToken.js +2 -0
  22. package/dist/build/schemas/cubicBezierToken.d.ts +6 -0
  23. package/dist/build/schemas/cubicBezierToken.js +10 -2
  24. package/dist/build/schemas/designToken.d.ts +1 -1
  25. package/dist/build/schemas/designToken.js +113 -21
  26. package/dist/build/schemas/dimensionToken.d.ts +14 -3
  27. package/dist/build/schemas/dimensionToken.js +6 -2
  28. package/dist/build/schemas/dimensionValue.d.ts +24 -1
  29. package/dist/build/schemas/dimensionValue.js +20 -1
  30. package/dist/build/schemas/durationToken.d.ts +13 -1
  31. package/dist/build/schemas/durationToken.js +6 -0
  32. package/dist/build/schemas/durationValue.d.ts +11 -1
  33. package/dist/build/schemas/durationValue.js +13 -3
  34. package/dist/build/schemas/fontFamilyToken.d.ts +4 -0
  35. package/dist/build/schemas/fontFamilyToken.js +2 -0
  36. package/dist/build/schemas/fontWeightToken.d.ts +4 -0
  37. package/dist/build/schemas/fontWeightToken.js +2 -0
  38. package/dist/build/schemas/gradientToken.d.ts +4 -0
  39. package/dist/build/schemas/gradientToken.js +2 -0
  40. package/dist/build/schemas/llmExtension.d.ts +9 -0
  41. package/dist/build/schemas/llmExtension.js +11 -0
  42. package/dist/build/schemas/numberToken.d.ts +4 -0
  43. package/dist/build/schemas/numberToken.js +2 -0
  44. package/dist/build/schemas/shadowToken.d.ts +676 -84
  45. package/dist/build/schemas/shadowToken.js +2 -0
  46. package/dist/build/schemas/stringToken.d.ts +6 -0
  47. package/dist/build/schemas/stringToken.js +6 -0
  48. package/dist/build/schemas/transitionToken.d.ts +20 -2
  49. package/dist/build/schemas/transitionToken.js +6 -0
  50. package/dist/build/schemas/typographyToken.d.ts +38 -4
  51. package/dist/build/schemas/typographyToken.js +6 -0
  52. package/dist/build/schemas/validTokenType.d.ts +5 -1
  53. package/dist/build/schemas/validTokenType.js +71 -17
  54. package/dist/build/schemas/viewportRangeToken.d.ts +6 -0
  55. package/dist/build/schemas/viewportRangeToken.js +6 -0
  56. package/dist/build/transformers/dimensionToPixelUnitless.d.ts +3 -2
  57. package/dist/build/transformers/dimensionToPixelUnitless.js +22 -26
  58. package/dist/build/transformers/dimensionToRem.d.ts +2 -1
  59. package/dist/build/transformers/dimensionToRem.js +21 -22
  60. package/dist/build/transformers/dimensionToRemPxArray.d.ts +2 -1
  61. package/dist/build/transformers/dimensionToRemPxArray.js +21 -22
  62. package/dist/build/transformers/durationToCss.d.ts +2 -1
  63. package/dist/build/transformers/durationToCss.js +18 -11
  64. package/dist/build/transformers/utilities/parseDimension.d.ts +12 -0
  65. package/dist/build/transformers/utilities/parseDimension.js +31 -0
  66. package/dist/build/types/dimensionTokenValue.d.ts +9 -0
  67. package/dist/css/base/motion/motion.css +5 -4
  68. package/dist/css/functional/size/border.css +9 -14
  69. package/dist/css/functional/size/radius.css +7 -0
  70. package/dist/css/functional/size/size-coarse.css +3 -3
  71. package/dist/css/functional/size/size-fine.css +3 -3
  72. package/dist/css/functional/size/viewport.css +1 -1
  73. package/dist/css/functional/themes/dark-colorblind-high-contrast.css +194 -190
  74. package/dist/css/functional/themes/dark-colorblind.css +194 -190
  75. package/dist/css/functional/themes/dark-dimmed-high-contrast.css +194 -190
  76. package/dist/css/functional/themes/dark-dimmed.css +194 -190
  77. package/dist/css/functional/themes/dark-high-contrast.css +194 -190
  78. package/dist/css/functional/themes/dark-tritanopia-high-contrast.css +194 -190
  79. package/dist/css/functional/themes/dark-tritanopia.css +194 -190
  80. package/dist/css/functional/themes/dark.css +194 -190
  81. package/dist/css/functional/themes/light-colorblind-high-contrast.css +194 -190
  82. package/dist/css/functional/themes/light-colorblind.css +194 -190
  83. package/dist/css/functional/themes/light-high-contrast.css +194 -190
  84. package/dist/css/functional/themes/light-tritanopia-high-contrast.css +194 -190
  85. package/dist/css/functional/themes/light-tritanopia.css +194 -190
  86. package/dist/css/functional/themes/light.css +194 -190
  87. package/dist/css/functional/typography/typography.css +4 -4
  88. package/dist/css/primitives.css +5 -0
  89. package/dist/docs/base/motion/motion.json +181 -32
  90. package/dist/docs/base/size/size.json +76 -19
  91. package/dist/docs/base/typography/typography.json +24 -6
  92. package/dist/docs/functional/size/border.json +62 -182
  93. package/dist/docs/functional/size/breakpoints.json +24 -6
  94. package/dist/docs/functional/size/radius.json +221 -0
  95. package/dist/docs/functional/size/size-coarse.json +45 -3
  96. package/dist/docs/functional/size/size-fine.json +45 -3
  97. package/dist/docs/functional/size/size.json +60 -15
  98. package/dist/docs/functional/size/viewport.json +2 -2
  99. package/dist/docs/functional/themes/dark-colorblind-high-contrast.json +1043 -97
  100. package/dist/docs/functional/themes/dark-colorblind.json +1043 -97
  101. package/dist/docs/functional/themes/dark-dimmed-high-contrast.json +1043 -97
  102. package/dist/docs/functional/themes/dark-dimmed.json +1081 -135
  103. package/dist/docs/functional/themes/dark-high-contrast.json +1043 -97
  104. package/dist/docs/functional/themes/dark-tritanopia-high-contrast.json +1043 -97
  105. package/dist/docs/functional/themes/dark-tritanopia.json +1043 -97
  106. package/dist/docs/functional/themes/dark.json +1043 -97
  107. package/dist/docs/functional/themes/light-colorblind-high-contrast.json +1049 -103
  108. package/dist/docs/functional/themes/light-colorblind.json +1049 -103
  109. package/dist/docs/functional/themes/light-high-contrast.json +1049 -103
  110. package/dist/docs/functional/themes/light-tritanopia-high-contrast.json +1049 -103
  111. package/dist/docs/functional/themes/light-tritanopia.json +1049 -103
  112. package/dist/docs/functional/themes/light.json +1049 -103
  113. package/dist/docs/functional/typography/typography.json +180 -10
  114. package/dist/fallbacks/base/motion/motion.json +49 -12
  115. package/dist/fallbacks/functional/size/border.json +0 -5
  116. package/dist/fallbacks/functional/size/radius.json +7 -0
  117. package/dist/fallbacks/functional/size/viewport.json +1 -1
  118. package/dist/figma/dimension/dimension.json +30 -20
  119. package/dist/figma/themes/dark-colorblind.json +85 -0
  120. package/dist/figma/themes/dark-dimmed.json +134 -49
  121. package/dist/figma/themes/dark-high-contrast.json +85 -0
  122. package/dist/figma/themes/dark-tritanopia.json +85 -0
  123. package/dist/figma/themes/dark.json +85 -0
  124. package/dist/figma/themes/light-colorblind.json +89 -4
  125. package/dist/figma/themes/light-high-contrast.json +89 -4
  126. package/dist/figma/themes/light-tritanopia.json +89 -4
  127. package/dist/figma/themes/light.json +89 -4
  128. package/dist/figma/typography/typography.json +44 -40
  129. package/dist/internalCss/dark-colorblind-high-contrast.css +208 -218
  130. package/dist/internalCss/dark-colorblind.css +208 -218
  131. package/dist/internalCss/dark-dimmed-high-contrast.css +208 -218
  132. package/dist/internalCss/dark-dimmed.css +208 -218
  133. package/dist/internalCss/dark-high-contrast.css +208 -218
  134. package/dist/internalCss/dark-tritanopia-high-contrast.css +208 -218
  135. package/dist/internalCss/dark-tritanopia.css +208 -218
  136. package/dist/internalCss/dark.css +208 -218
  137. package/dist/internalCss/light-colorblind-high-contrast.css +208 -218
  138. package/dist/internalCss/light-colorblind.css +208 -218
  139. package/dist/internalCss/light-high-contrast.css +208 -218
  140. package/dist/internalCss/light-tritanopia-high-contrast.css +208 -218
  141. package/dist/internalCss/light-tritanopia.css +208 -218
  142. package/dist/internalCss/light.css +208 -218
  143. package/dist/styleLint/base/motion/motion.json +181 -32
  144. package/dist/styleLint/base/size/size.json +76 -19
  145. package/dist/styleLint/base/typography/typography.json +30 -12
  146. package/dist/styleLint/functional/size/border.json +55 -175
  147. package/dist/styleLint/functional/size/breakpoints.json +24 -6
  148. package/dist/styleLint/functional/size/radius.json +221 -0
  149. package/dist/styleLint/functional/size/size-coarse.json +45 -3
  150. package/dist/styleLint/functional/size/size-fine.json +45 -3
  151. package/dist/styleLint/functional/size/size.json +111 -66
  152. package/dist/styleLint/functional/size/viewport.json +2 -2
  153. package/dist/styleLint/functional/themes/dark-colorblind-high-contrast.json +975 -29
  154. package/dist/styleLint/functional/themes/dark-colorblind.json +975 -29
  155. package/dist/styleLint/functional/themes/dark-dimmed-high-contrast.json +975 -29
  156. package/dist/styleLint/functional/themes/dark-dimmed.json +1013 -67
  157. package/dist/styleLint/functional/themes/dark-high-contrast.json +975 -29
  158. package/dist/styleLint/functional/themes/dark-tritanopia-high-contrast.json +975 -29
  159. package/dist/styleLint/functional/themes/dark-tritanopia.json +975 -29
  160. package/dist/styleLint/functional/themes/dark.json +975 -29
  161. package/dist/styleLint/functional/themes/light-colorblind-high-contrast.json +981 -35
  162. package/dist/styleLint/functional/themes/light-colorblind.json +981 -35
  163. package/dist/styleLint/functional/themes/light-high-contrast.json +981 -35
  164. package/dist/styleLint/functional/themes/light-tritanopia-high-contrast.json +981 -35
  165. package/dist/styleLint/functional/themes/light-tritanopia.json +981 -35
  166. package/dist/styleLint/functional/themes/light.json +981 -35
  167. package/dist/styleLint/functional/typography/typography.json +196 -26
  168. package/package.json +6 -3
  169. package/src/tokens/base/motion/easing.json5 +39 -4
  170. package/src/tokens/base/motion/timing.json5 +12 -12
  171. package/src/tokens/base/size/size.json5 +19 -19
  172. package/src/tokens/base/typography/typography.json5 +6 -6
  173. package/src/tokens/functional/border/border.json5 +25 -0
  174. package/src/tokens/functional/color/bgColor.json5 +165 -0
  175. package/src/tokens/functional/color/borderColor.json5 +146 -0
  176. package/src/tokens/functional/color/control.json5 +24 -0
  177. package/src/tokens/functional/color/data-vis.json5 +7 -0
  178. package/src/tokens/functional/color/display.json5 +7 -0
  179. package/src/tokens/functional/color/fgColor.json5 +101 -1
  180. package/src/tokens/functional/color/focus.json5 +5 -0
  181. package/src/tokens/functional/color/selection.json5 +5 -0
  182. package/src/tokens/functional/color/syntax.json5 +14 -0
  183. package/src/tokens/functional/shadow/shadow.json5 +49 -4
  184. package/src/tokens/functional/size/border.json5 +22 -74
  185. package/src/tokens/functional/size/breakpoints.json5 +6 -6
  186. package/src/tokens/functional/size/radius.json5 +90 -0
  187. package/src/tokens/functional/size/size-coarse.json5 +24 -3
  188. package/src/tokens/functional/size/size-fine.json5 +45 -24
  189. package/src/tokens/functional/size/size.json5 +50 -15
  190. package/src/tokens/functional/size/viewport.json5 +1 -1
  191. package/src/tokens/functional/typography/font-stack.json5 +60 -0
  192. package/src/tokens/functional/typography/typography.json5 +71 -44
  193. package/dist/build/parsers/index.d.ts +0 -1
  194. package/dist/build/parsers/index.js +0 -1
  195. package/dist/build/parsers/w3cJsonParser.d.ts +0 -6
  196. package/dist/build/parsers/w3cJsonParser.js +0 -25
  197. package/dist/removed/testing.json5 +0 -4
  198. package/src/tokens/removed/testing.json5 +0 -4
@@ -3,6 +3,7 @@
3
3
  default: {
4
4
  $value: '{base.color.neutral.6}',
5
5
  $type: 'color',
6
+ $description: 'Default border color for most UI elements',
6
7
  $extensions: {
7
8
  'org.primer.overrides': {
8
9
  dark: '{base.color.neutral.7}',
@@ -23,11 +24,16 @@
23
24
  web: 'var(--borderColor-default) /* utility class: .color-border-default */',
24
25
  },
25
26
  },
27
+ 'org.primer.llm': {
28
+ usage: ['default-border', 'card-border', 'input-border', 'divider'],
29
+ rules: 'RECOMMENDED default for all borders. Use for cards, inputs, and dividers.',
30
+ },
26
31
  },
27
32
  },
28
33
  muted: {
29
34
  $value: '{borderColor.default}',
30
35
  $type: 'color',
36
+ $description: 'Subtle border for secondary elements and light separators',
31
37
  $extensions: {
32
38
  'org.primer.figma': {
33
39
  collection: 'mode',
@@ -71,12 +77,17 @@
71
77
  alpha: 1,
72
78
  },
73
79
  },
80
+ 'org.primer.llm': {
81
+ usage: ['subtle-border', 'light-divider', 'secondary-border'],
82
+ rules: 'Use for subtle borders and separators. Less prominent than borderColor.default.',
83
+ },
74
84
  },
75
85
  alpha: 0.7,
76
86
  },
77
87
  emphasis: {
78
88
  $value: '{base.color.neutral.8}',
79
89
  $type: 'color',
90
+ $description: 'Strong border for emphasis and visual weight',
80
91
  $extensions: {
81
92
  'org.primer.figma': {
82
93
  collection: 'mode',
@@ -92,11 +103,16 @@
92
103
  'dark-tritanopia-high-contrast': '{borderColor.default}',
93
104
  'dark-protanopia-deuteranopia-high-contrast': '{borderColor.default}',
94
105
  },
106
+ 'org.primer.llm': {
107
+ usage: ['emphasis-border', 'strong-border', 'selected-border'],
108
+ rules: 'Use for borders needing more visual weight. Darker than borderColor.default.',
109
+ },
95
110
  },
96
111
  },
97
112
  disabled: {
98
113
  $value: '{base.color.neutral.8}',
99
114
  $type: 'color',
115
+ $description: 'Border color for disabled interactive elements',
100
116
  $extensions: {
101
117
  'org.primer.figma': {
102
118
  collection: 'mode',
@@ -125,12 +141,17 @@
125
141
  alpha: 0.12,
126
142
  },
127
143
  },
144
+ 'org.primer.llm': {
145
+ usage: ['disabled-border', 'inactive-border', 'unavailable'],
146
+ rules: 'MUST use for disabled state borders. Pair with bgColor.disabled. Do NOT use for active elements.',
147
+ },
128
148
  },
129
149
  alpha: 0.1,
130
150
  },
131
151
  transparent: {
132
152
  $value: '{base.color.transparent}',
133
153
  $type: 'color',
154
+ $description: 'Fully transparent border',
134
155
  $extensions: {
135
156
  'org.primer.figma': {
136
157
  collection: 'mode',
@@ -142,6 +163,7 @@
142
163
  translucent: {
143
164
  $value: '{base.color.neutral.13}',
144
165
  $type: 'color',
166
+ $description: 'Semi-transparent border for overlays and layered elements',
145
167
  $extensions: {
146
168
  'org.primer.figma': {
147
169
  collection: 'mode',
@@ -178,6 +200,10 @@
178
200
  alpha: 1,
179
201
  },
180
202
  },
203
+ 'org.primer.llm': {
204
+ usage: ['overlay-border', 'translucent-border'],
205
+ rules: 'Use for semi-transparent borders on overlays. Works well with translucent backgrounds.',
206
+ },
181
207
  },
182
208
  alpha: 0.15,
183
209
  },
@@ -185,6 +211,7 @@
185
211
  muted: {
186
212
  $value: '{borderColor.muted}',
187
213
  $type: 'color',
214
+ $description: 'Subtle neutral semantic border',
188
215
  $extensions: {
189
216
  'org.primer.figma': {
190
217
  collection: 'mode',
@@ -201,11 +228,16 @@
201
228
  alpha: 1,
202
229
  },
203
230
  },
231
+ 'org.primer.llm': {
232
+ usage: ['neutral-muted', 'neutral-secondary'],
233
+ rules: 'Use for neutral semantic borders on tags and badges. Prefer borderColor.muted for general use.',
234
+ },
204
235
  },
205
236
  },
206
237
  emphasis: {
207
238
  $value: '{base.color.neutral.9}',
208
239
  $type: 'color',
240
+ $description: 'Strong neutral semantic border',
209
241
  $extensions: {
210
242
  'org.primer.figma': {
211
243
  collection: 'mode',
@@ -215,6 +247,10 @@
215
247
  'org.primer.overrides': {
216
248
  dark: '{borderColor.emphasis}',
217
249
  },
250
+ 'org.primer.llm': {
251
+ usage: ['neutral-emphasis', 'neutral-strong'],
252
+ rules: 'Use for emphasized neutral semantic borders. Stronger than neutral.muted.',
253
+ },
218
254
  },
219
255
  },
220
256
  },
@@ -222,6 +258,7 @@
222
258
  muted: {
223
259
  $value: '{base.color.blue.3}',
224
260
  $type: 'color',
261
+ $description: 'Subtle accent border for selected or focused elements',
225
262
  $extensions: {
226
263
  'org.primer.figma': {
227
264
  collection: 'mode',
@@ -262,12 +299,17 @@
262
299
  alpha: 1,
263
300
  },
264
301
  },
302
+ 'org.primer.llm': {
303
+ usage: ['accent-muted', 'selected-muted', 'info-muted'],
304
+ rules: 'Use for accent-colored borders on selected elements. Pair with bgColor.accent.muted.',
305
+ },
265
306
  },
266
307
  alpha: 0.4,
267
308
  },
268
309
  emphasis: {
269
310
  $value: '{base.color.blue.5}',
270
311
  $type: 'color',
312
+ $description: 'Strong accent border for selected or focused elements',
271
313
  $extensions: {
272
314
  'org.primer.figma': {
273
315
  collection: 'mode',
@@ -280,6 +322,10 @@
280
322
  'org.primer.overrides': {
281
323
  'dark-dimmed-high-contrast': '{base.color.blue.2}',
282
324
  },
325
+ 'org.primer.llm': {
326
+ usage: ['accent-emphasis', 'selected-border', 'focus-border'],
327
+ rules: 'Use for selected elements and focus states. Strong visual emphasis.',
328
+ },
283
329
  },
284
330
  },
285
331
  },
@@ -287,6 +333,7 @@
287
333
  muted: {
288
334
  $value: '{base.color.green.3}',
289
335
  $type: 'color',
336
+ $description: 'Subtle success border for positive feedback elements',
290
337
  $extensions: {
291
338
  'org.primer.figma': {
292
339
  collection: 'mode',
@@ -342,12 +389,17 @@
342
389
  alpha: 1,
343
390
  },
344
391
  },
392
+ 'org.primer.llm': {
393
+ usage: ['success-muted', 'valid-muted', 'positive-muted'],
394
+ rules: 'Use for success state borders. Pair with bgColor.success.muted.',
395
+ },
345
396
  },
346
397
  alpha: 0.4,
347
398
  },
348
399
  emphasis: {
349
400
  $value: '{base.color.green.5}',
350
401
  $type: 'color',
402
+ $description: 'Strong success border for prominent positive elements',
351
403
  $extensions: {
352
404
  'org.primer.figma': {
353
405
  collection: 'mode',
@@ -368,6 +420,10 @@
368
420
  'light-protanopia-deuteranopia-high-contrast': '{base.color.blue.5}',
369
421
  'dark-dimmed-high-contrast': '{base.color.green.2}',
370
422
  },
423
+ 'org.primer.llm': {
424
+ usage: ['success-emphasis', 'confirmed', 'positive-emphasis'],
425
+ rules: 'Use for emphasized success borders. Pair with bgColor.success.emphasis.',
426
+ },
371
427
  },
372
428
  },
373
429
  },
@@ -375,6 +431,7 @@
375
431
  muted: {
376
432
  $value: '{borderColor.success.muted}',
377
433
  $type: 'color',
434
+ $description: 'Subtle border for open state indicators',
378
435
  $extensions: {
379
436
  'org.primer.figma': {
380
437
  collection: 'mode',
@@ -418,11 +475,16 @@
418
475
  alpha: 1,
419
476
  },
420
477
  },
478
+ 'org.primer.llm': {
479
+ usage: ['open-muted', 'open-issue', 'open-pr'],
480
+ rules: 'Use for open/active status borders. Specifically for GitHub issues and PRs.',
481
+ },
421
482
  },
422
483
  },
423
484
  emphasis: {
424
485
  $value: '{borderColor.success.emphasis}',
425
486
  $type: 'color',
487
+ $description: 'Strong border for open state badges',
426
488
  $extensions: {
427
489
  'org.primer.figma': {
428
490
  collection: 'mode',
@@ -442,6 +504,10 @@
442
504
  'light-protanopia-deuteranopia': '{base.color.orange.5}',
443
505
  'light-protanopia-deuteranopia-high-contrast': '{base.color.orange.5}',
444
506
  },
507
+ 'org.primer.llm': {
508
+ usage: ['open-emphasis', 'open-status'],
509
+ rules: 'Use for emphasized open state borders. Pair with bgColor.open.emphasis.',
510
+ },
445
511
  },
446
512
  },
447
513
  },
@@ -449,6 +515,7 @@
449
515
  muted: {
450
516
  $value: '{base.color.yellow.3}',
451
517
  $type: 'color',
518
+ $description: 'Subtle attention border for warnings and caution states',
452
519
  $extensions: {
453
520
  'org.primer.figma': {
454
521
  collection: 'mode',
@@ -489,12 +556,17 @@
489
556
  alpha: 1,
490
557
  },
491
558
  },
559
+ 'org.primer.llm': {
560
+ usage: ['attention-muted', 'warning-muted', 'caution-muted'],
561
+ rules: 'Use for warning state borders. Pair with bgColor.attention.muted.',
562
+ },
492
563
  },
493
564
  alpha: 0.4,
494
565
  },
495
566
  emphasis: {
496
567
  $value: '{base.color.yellow.5}',
497
568
  $type: 'color',
569
+ $description: 'Strong attention border for prominent warnings',
498
570
  $extensions: {
499
571
  'org.primer.figma': {
500
572
  collection: 'mode',
@@ -507,6 +579,10 @@
507
579
  'org.primer.overrides': {
508
580
  'dark-dimmed-high-contrast': '{base.color.yellow.2}',
509
581
  },
582
+ 'org.primer.llm': {
583
+ usage: ['attention-emphasis', 'warning-emphasis', 'caution-emphasis'],
584
+ rules: 'Use for emphasized warning borders. Pair with bgColor.attention.emphasis.',
585
+ },
510
586
  },
511
587
  },
512
588
  },
@@ -514,6 +590,7 @@
514
590
  muted: {
515
591
  $value: '{base.color.orange.3}',
516
592
  $type: 'color',
593
+ $description: 'Subtle severe border for high-priority warnings',
517
594
  $extensions: {
518
595
  'org.primer.figma': {
519
596
  collection: 'mode',
@@ -552,12 +629,17 @@
552
629
  alpha: 1,
553
630
  },
554
631
  },
632
+ 'org.primer.llm': {
633
+ usage: ['severe-muted', 'urgent-muted'],
634
+ rules: 'Use for severe warning borders. More critical than attention, less than danger.',
635
+ },
555
636
  },
556
637
  alpha: 0.4,
557
638
  },
558
639
  emphasis: {
559
640
  $value: '{base.color.orange.5}',
560
641
  $type: 'color',
642
+ $description: 'Strong severe border for prominent high-priority warnings',
561
643
  $extensions: {
562
644
  'org.primer.figma': {
563
645
  collection: 'mode',
@@ -573,6 +655,10 @@
573
655
  'light-tritanopia-high-contrast': '{base.color.red.5}',
574
656
  'dark-dimmed-high-contrast': '{base.color.orange.2}',
575
657
  },
658
+ 'org.primer.llm': {
659
+ usage: ['severe-emphasis', 'urgent-emphasis'],
660
+ rules: 'Use for emphasized severe borders. Pair with bgColor.severe.emphasis.',
661
+ },
576
662
  },
577
663
  },
578
664
  },
@@ -580,6 +666,7 @@
580
666
  muted: {
581
667
  $value: '{base.color.red.3}',
582
668
  $type: 'color',
669
+ $description: 'Subtle danger border for errors and destructive contexts',
583
670
  $extensions: {
584
671
  'org.primer.figma': {
585
672
  collection: 'mode',
@@ -627,12 +714,17 @@
627
714
  alpha: 1,
628
715
  },
629
716
  },
717
+ 'org.primer.llm': {
718
+ usage: ['danger-muted', 'error-muted', 'destructive-muted'],
719
+ rules: 'Use for error state borders. Pair with bgColor.danger.muted.',
720
+ },
630
721
  },
631
722
  alpha: 0.4,
632
723
  },
633
724
  emphasis: {
634
725
  $value: '{base.color.red.5}',
635
726
  $type: 'color',
727
+ $description: 'Strong danger border for destructive actions and errors',
636
728
  $extensions: {
637
729
  'org.primer.figma': {
638
730
  collection: 'mode',
@@ -657,6 +749,10 @@
657
749
  },
658
750
  'dark-dimmed-high-contrast': '{base.color.red.2}',
659
751
  },
752
+ 'org.primer.llm': {
753
+ usage: ['danger-emphasis', 'error-emphasis', 'destructive-emphasis'],
754
+ rules: 'MUST use for destructive action borders. Pair with bgColor.danger.emphasis.',
755
+ },
660
756
  },
661
757
  },
662
758
  },
@@ -664,6 +760,7 @@
664
760
  muted: {
665
761
  $value: '{borderColor.danger.muted}',
666
762
  $type: 'color',
763
+ $description: 'Subtle border for closed state indicators',
667
764
  $extensions: {
668
765
  'org.primer.figma': {
669
766
  collection: 'mode',
@@ -707,11 +804,16 @@
707
804
  alpha: 1,
708
805
  },
709
806
  },
807
+ 'org.primer.llm': {
808
+ usage: ['closed-muted', 'closed-issue', 'closed-pr'],
809
+ rules: 'Use for closed/declined status borders. Specifically for GitHub issues and PRs.',
810
+ },
710
811
  },
711
812
  },
712
813
  emphasis: {
713
814
  $value: '{borderColor.danger.emphasis}',
714
815
  $type: 'color',
816
+ $description: 'Strong border for closed state badges',
715
817
  $extensions: {
716
818
  'org.primer.figma': {
717
819
  collection: 'mode',
@@ -731,6 +833,10 @@
731
833
  'light-tritanopia': '{borderColor.emphasis}',
732
834
  'light-tritanopia-high-contrast': '{borderColor.emphasis}',
733
835
  },
836
+ 'org.primer.llm': {
837
+ usage: ['closed-emphasis', 'closed-status'],
838
+ rules: 'Use for emphasized closed state borders. Pair with bgColor.closed.emphasis.',
839
+ },
734
840
  },
735
841
  },
736
842
  },
@@ -738,6 +844,7 @@
738
844
  muted: {
739
845
  $value: '{borderColor.neutral.muted}',
740
846
  $type: 'color',
847
+ $description: 'Subtle border for draft state indicators',
741
848
  $extensions: {
742
849
  'org.primer.figma': {
743
850
  collection: 'mode',
@@ -781,11 +888,16 @@
781
888
  alpha: 1,
782
889
  },
783
890
  },
891
+ 'org.primer.llm': {
892
+ usage: ['draft-muted', 'draft-pr', 'draft-issue'],
893
+ rules: 'Use for draft/WIP status borders. Conveys incomplete or pending state.',
894
+ },
784
895
  },
785
896
  },
786
897
  emphasis: {
787
898
  $value: '{borderColor.neutral.emphasis}',
788
899
  $type: 'color',
900
+ $description: 'Strong border for draft state badges',
789
901
  $extensions: {
790
902
  'org.primer.figma': {
791
903
  collection: 'mode',
@@ -795,6 +907,10 @@
795
907
  web: 'var(--borderColor-draft-emphasis)',
796
908
  },
797
909
  },
910
+ 'org.primer.llm': {
911
+ usage: ['draft-emphasis', 'draft-status'],
912
+ rules: 'Use for emphasized draft state borders. Pair with bgColor.draft.emphasis.',
913
+ },
798
914
  },
799
915
  },
800
916
  },
@@ -802,6 +918,7 @@
802
918
  muted: {
803
919
  $value: '{base.color.purple.3}',
804
920
  $type: 'color',
921
+ $description: 'Subtle border for completed/done state indicators',
805
922
  $extensions: {
806
923
  'org.primer.figma': {
807
924
  collection: 'mode',
@@ -842,12 +959,17 @@
842
959
  alpha: 1,
843
960
  },
844
961
  },
962
+ 'org.primer.llm': {
963
+ usage: ['done-muted', 'merged', 'completed'],
964
+ rules: 'Use for completed/done status borders. Conveys finished or merged state.',
965
+ },
845
966
  },
846
967
  alpha: 0.4,
847
968
  },
848
969
  emphasis: {
849
970
  $value: '{base.color.purple.5}',
850
971
  $type: 'color',
972
+ $description: 'Strong border for completed/done state badges',
851
973
  $extensions: {
852
974
  'org.primer.figma': {
853
975
  collection: 'mode',
@@ -860,6 +982,10 @@
860
982
  'org.primer.overrides': {
861
983
  'dark-dimmed-high-contrast': '{base.color.purple.2}',
862
984
  },
985
+ 'org.primer.llm': {
986
+ usage: ['done-emphasis', 'merged-status'],
987
+ rules: 'Use for emphasized done state borders. Pair with bgColor.done.emphasis.',
988
+ },
863
989
  },
864
990
  },
865
991
  },
@@ -867,6 +993,7 @@
867
993
  muted: {
868
994
  $value: '{borderColor.done.muted}',
869
995
  $type: 'color',
996
+ $description: 'Subtle border for upsell and promotional content',
870
997
  $extensions: {
871
998
  'org.primer.figma': {
872
999
  collection: 'mode',
@@ -876,11 +1003,16 @@
876
1003
  web: 'var(--borderColor-upsell-muted)',
877
1004
  },
878
1005
  },
1006
+ 'org.primer.llm': {
1007
+ usage: ['upsell-muted', 'premium-muted'],
1008
+ rules: 'Use for upgrade prompts and premium feature borders. Do NOT use for regular content.',
1009
+ },
879
1010
  },
880
1011
  },
881
1012
  emphasis: {
882
1013
  $value: '{borderColor.done.emphasis}',
883
1014
  $type: 'color',
1015
+ $description: 'Strong border for prominent upsell elements',
884
1016
  $extensions: {
885
1017
  'org.primer.figma': {
886
1018
  collection: 'mode',
@@ -890,6 +1022,10 @@
890
1022
  web: 'var(--borderColor-upsell-emphasis)',
891
1023
  },
892
1024
  },
1025
+ 'org.primer.llm': {
1026
+ usage: ['upsell-emphasis', 'premium-emphasis'],
1027
+ rules: 'Use for emphasized upsell borders. Pair with bgColor.upsell.emphasis.',
1028
+ },
893
1029
  },
894
1030
  },
895
1031
  },
@@ -897,6 +1033,7 @@
897
1033
  muted: {
898
1034
  $value: '{base.color.pink.3}',
899
1035
  $type: 'color',
1036
+ $description: 'Subtle border for GitHub Sponsors content',
900
1037
  $extensions: {
901
1038
  'org.primer.figma': {
902
1039
  collection: 'mode',
@@ -937,12 +1074,17 @@
937
1074
  alpha: 1,
938
1075
  },
939
1076
  },
1077
+ 'org.primer.llm': {
1078
+ usage: ['sponsors-muted', 'funding-muted'],
1079
+ rules: 'Use for GitHub Sponsors related borders. Do NOT use for general pink-colored elements.',
1080
+ },
940
1081
  },
941
1082
  alpha: 0.4,
942
1083
  },
943
1084
  emphasis: {
944
1085
  $value: '{base.color.pink.5}',
945
1086
  $type: 'color',
1087
+ $description: 'Strong border for prominent GitHub Sponsors elements',
946
1088
  $extensions: {
947
1089
  'org.primer.figma': {
948
1090
  collection: 'mode',
@@ -955,6 +1097,10 @@
955
1097
  'org.primer.overrides': {
956
1098
  'dark-dimmed-high-contrast': '{base.color.pink.3}',
957
1099
  },
1100
+ 'org.primer.llm': {
1101
+ usage: ['sponsors-emphasis', 'funding-emphasis'],
1102
+ rules: 'Use for emphasized Sponsors borders. Pair with bgColor.sponsors.emphasis.',
1103
+ },
958
1104
  },
959
1105
  },
960
1106
  },
@@ -1,5 +1,12 @@
1
1
  {
2
2
  control: {
3
+ $description: 'Colors for interactive form controls like buttons, inputs, selects, and checkboxes.',
4
+ $extensions: {
5
+ 'org.primer.llm': {
6
+ usage: ['button', 'input', 'select', 'checkbox', 'radio', 'form-control'],
7
+ rules: 'Use control tokens for interactive form elements. Match states (rest, hover, active, disabled) to user interactions. Use transparent variants for ghost/tertiary buttons. Use danger variants for destructive actions. Use checked variants for selected checkboxes and radios.',
8
+ },
9
+ },
3
10
  bgColor: {
4
11
  rest: {
5
12
  $value: '{base.color.neutral.1}',
@@ -345,6 +352,7 @@
345
352
  },
346
353
  },
347
354
  transparent: {
355
+ $description: 'Transparent control colors for ghost buttons and tertiary actions with no visible background at rest.',
348
356
  bgColor: {
349
357
  rest: {
350
358
  $value: '{base.color.transparent}',
@@ -613,6 +621,7 @@
613
621
  },
614
622
  },
615
623
  danger: {
624
+ $description: 'Danger control colors for destructive actions like delete buttons and remove actions.',
616
625
  fgColor: {
617
626
  rest: {
618
627
  $value: '{fgColor.danger}',
@@ -752,6 +761,7 @@
752
761
  },
753
762
  },
754
763
  checked: {
764
+ $description: 'Colors for checked/selected state of checkboxes, radio buttons, and toggle switches.',
755
765
  bgColor: {
756
766
  rest: {
757
767
  $value: '{bgColor.accent.emphasis}',
@@ -1009,6 +1019,13 @@
1009
1019
  },
1010
1020
  },
1011
1021
  controlTrack: {
1022
+ $description: 'Colors for toggle switch tracks (the background rail that the knob slides along).',
1023
+ $extensions: {
1024
+ 'org.primer.llm': {
1025
+ usage: ['toggle-track', 'switch-track', 'slider-track'],
1026
+ rules: 'Use for the track/rail element of toggle switches and sliders. Pair with controlKnob tokens for the movable handle.',
1027
+ },
1028
+ },
1012
1029
  bgColor: {
1013
1030
  rest: {
1014
1031
  $value: '{base.color.neutral.3}',
@@ -1234,6 +1251,13 @@
1234
1251
  },
1235
1252
  },
1236
1253
  controlKnob: {
1254
+ $description: 'Colors for toggle switch knobs (the circular handle that moves along the track).',
1255
+ $extensions: {
1256
+ 'org.primer.llm': {
1257
+ usage: ['toggle-knob', 'switch-handle', 'slider-thumb'],
1258
+ rules: 'Use for the movable handle/thumb of toggle switches and sliders. Pair with controlTrack tokens for the background rail.',
1259
+ },
1260
+ },
1237
1261
  bgColor: {
1238
1262
  rest: {
1239
1263
  $value: '{base.color.neutral.0}',
@@ -1,5 +1,12 @@
1
1
  {
2
2
  data: {
3
+ $description: 'Colors for data visualization including charts, graphs, and diagrams. Use these colors to differentiate data series. Emphasis variants are for lines, bars, and borders. Muted variants are for area fills and backgrounds.',
4
+ $extensions: {
5
+ 'org.primer.llm': {
6
+ usage: ['chart-series', 'graph-line', 'bar-fill', 'pie-segment', 'area-chart', 'data-point'],
7
+ rules: 'Use data colors for visualizations only. Do NOT use for semantic meaning (use bgColor.success/danger instead). When using multiple series, ensure sufficient contrast between adjacent colors. Pair emphasis with muted variants of the same color for cohesive styling.',
8
+ },
9
+ },
3
10
  blue: {
4
11
  color: {
5
12
  emphasis: {
@@ -1,5 +1,12 @@
1
1
  {
2
2
  display: {
3
+ $description: 'Decorative colors for categorization and visual distinction without semantic meaning. Use for labels, tags, avatars, status indicators, and user-assigned colors. Do NOT use for success/error/warning states—use semantic colors (bgColor.success/danger/attention) instead.',
4
+ $extensions: {
5
+ 'org.primer.llm': {
6
+ usage: ['label', 'tag', 'avatar', 'badge', 'category-indicator', 'user-assigned-color', 'project-color', 'decorative-element'],
7
+ rules: 'Use display colors for arbitrary categorization where the color has no inherent meaning (e.g., project labels, user avatars). For meaningful states like success, error, or warning, use semantic colors instead. Scales 0-2 are lighter (backgrounds), 3-5 are mid-tones, 6-9 are darker (foregrounds/borders).',
8
+ },
9
+ },
3
10
  blue: {
4
11
  scale: {
5
12
  '0': {