@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.0}',
5
5
  $type: 'color',
6
+ $description: 'Default background color for pages and main content areas',
6
7
  $extensions: {
7
8
  'org.primer.figma': {
8
9
  collection: 'mode',
@@ -20,11 +21,16 @@
20
21
  'dark-tritanopia-high-contrast': '{base.color.neutral.0}',
21
22
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.neutral.0}',
22
23
  },
24
+ 'org.primer.llm': {
25
+ usage: ['page-background', 'main-content', 'card-background'],
26
+ rules: 'Use as the primary background for pages and content areas. Do NOT use for emphasis or highlighting.',
27
+ },
23
28
  },
24
29
  },
25
30
  muted: {
26
31
  $value: '{base.color.neutral.1}',
27
32
  $type: 'color',
33
+ $description: 'Muted background for secondary content areas and subtle grouping',
28
34
  $extensions: {
29
35
  'org.primer.figma': {
30
36
  collection: 'mode',
@@ -45,11 +51,16 @@
45
51
  'dark-tritanopia-high-contrast': '{base.color.neutral.2}',
46
52
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.neutral.2}',
47
53
  },
54
+ 'org.primer.llm': {
55
+ usage: ['secondary-content', 'code-block-background', 'table-header', 'sidebar'],
56
+ rules: 'Use for secondary content areas or to create visual grouping. Do NOT use for primary page backgrounds.',
57
+ },
48
58
  },
49
59
  },
50
60
  inset: {
51
61
  $value: '{bgColor.muted}',
52
62
  $type: 'color',
63
+ $description: 'Inset background for recessed content areas like wells or sunken panels',
53
64
  $extensions: {
54
65
  'org.primer.figma': {
55
66
  collection: 'mode',
@@ -67,11 +78,16 @@
67
78
  'light-tritanopia-high-contrast': '{base.color.neutral.2}',
68
79
  'light-protanopia-deuteranopia-high-contrast': '{base.color.neutral.2}',
69
80
  },
81
+ 'org.primer.llm': {
82
+ usage: ['well', 'sunken-panel', 'recessed-area', 'input-background'],
83
+ rules: 'Use for visually recessed areas. Creates depth hierarchy. Suitable for input fields and wells.',
84
+ },
70
85
  },
71
86
  },
72
87
  emphasis: {
73
88
  $value: '{base.color.neutral.12}',
74
89
  $type: 'color',
90
+ $description: 'High-emphasis dark background for strong visual contrast',
75
91
  $extensions: {
76
92
  'org.primer.figma': {
77
93
  collection: 'mode',
@@ -84,11 +100,16 @@
84
100
  'org.primer.overrides': {
85
101
  dark: '{base.color.neutral.7}',
86
102
  },
103
+ 'org.primer.llm': {
104
+ usage: ['tooltip', 'badge-background', 'high-contrast-element'],
105
+ rules: 'Use for elements needing strong visual emphasis. Pair with fgColor.onEmphasis for text. Do NOT use for large areas.',
106
+ },
87
107
  },
88
108
  },
89
109
  inverse: {
90
110
  $value: '{base.color.neutral.12}',
91
111
  $type: 'color',
112
+ $description: 'Inverse background that flips between light and dark modes',
92
113
  $extensions: {
93
114
  'org.primer.figma': {
94
115
  collection: 'mode',
@@ -98,11 +119,16 @@
98
119
  'org.primer.overrides': {
99
120
  dark: '{base.color.neutral.13}',
100
121
  },
122
+ 'org.primer.llm': {
123
+ usage: ['overlay-content', 'inverse-theme-element'],
124
+ rules: 'Use when you need opposite theme background. Pair with fgColor.onInverse for text.',
125
+ },
101
126
  },
102
127
  },
103
128
  white: {
104
129
  $value: '{base.color.neutral.0}',
105
130
  $type: 'color',
131
+ $description: 'Pure white background',
106
132
  $extensions: {
107
133
  'org.primer.figma': {
108
134
  collection: 'mode',
@@ -112,11 +138,16 @@
112
138
  'org.primer.overrides': {
113
139
  dark: '{base.color.neutral.13}',
114
140
  },
141
+ 'org.primer.llm': {
142
+ doNotUse: true,
143
+ rules: 'Avoid using raw white. Use semantic alternatives: bgColor.default for standard backgrounds, bgColor.inset for recessed areas, or bgColor.inverse for inverted contexts. Raw black/white ignore theme preferences and accessibility settings.',
144
+ },
115
145
  },
116
146
  },
117
147
  black: {
118
148
  $value: '{base.color.neutral.13}',
119
149
  $type: 'color',
150
+ $description: 'Pure black background',
120
151
  $extensions: {
121
152
  'org.primer.figma': {
122
153
  collection: 'mode',
@@ -126,11 +157,16 @@
126
157
  'org.primer.overrides': {
127
158
  dark: '{base.color.neutral.0}',
128
159
  },
160
+ 'org.primer.llm': {
161
+ doNotUse: true,
162
+ rules: 'Avoid using raw black. Use semantic alternatives: bgColor.emphasis for dark backgrounds, bgColor.inverse for inverted contexts. Raw black/white ignore theme preferences and accessibility settings.',
163
+ },
129
164
  },
130
165
  },
131
166
  disabled: {
132
167
  $value: '{base.color.neutral.2}',
133
168
  $type: 'color',
169
+ $description: 'Background for disabled interactive elements',
134
170
  $extensions: {
135
171
  'org.primer.figma': {
136
172
  collection: 'mode',
@@ -148,11 +184,16 @@
148
184
  'dark-tritanopia-high-contrast': '{base.color.neutral.4}',
149
185
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.neutral.4}',
150
186
  },
187
+ 'org.primer.llm': {
188
+ usage: ['disabled-button', 'disabled-input', 'inactive-element'],
189
+ rules: 'MUST use for disabled state backgrounds. Pair with fgColor.disabled for text. Do NOT use for active elements.',
190
+ },
151
191
  },
152
192
  },
153
193
  transparent: {
154
194
  $value: '{base.color.transparent}',
155
195
  $type: 'color',
196
+ $description: 'Fully transparent background',
156
197
  $extensions: {
157
198
  'org.primer.figma': {
158
199
  collection: 'mode',
@@ -162,12 +203,17 @@
162
203
  web: 'var(--bgColor-transparent) /* utility class: .color-bg-transparent */',
163
204
  },
164
205
  },
206
+ 'org.primer.llm': {
207
+ usage: ['ghost-button', 'icon-button', 'overlay-trigger'],
208
+ rules: 'Use for ghost/icon buttons or when element should blend with parent. Ensure sufficient contrast for interactive states.',
209
+ },
165
210
  },
166
211
  },
167
212
  neutral: {
168
213
  muted: {
169
214
  $value: '{base.color.neutral.8}',
170
215
  $type: 'color',
216
+ $description: 'Subtle neutral background for tags, labels, and secondary UI elements',
171
217
  $extensions: {
172
218
  'org.primer.figma': {
173
219
  collection: 'mode',
@@ -190,11 +236,16 @@
190
236
  'dark-tritanopia-high-contrast': '{base.color.neutral.3}',
191
237
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.neutral.3}',
192
238
  },
239
+ 'org.primer.llm': {
240
+ usage: ['neutral-label', 'neutral-badge', 'secondary-tag', 'counter'],
241
+ rules: 'Use for neutral semantic meaning. Pair with fgColor.default for text. Do NOT use for status indicators.',
242
+ },
193
243
  },
194
244
  },
195
245
  emphasis: {
196
246
  $value: '{base.color.neutral.9}',
197
247
  $type: 'color',
248
+ $description: 'Strong neutral background for prominent neutral elements',
198
249
  $extensions: {
199
250
  'org.primer.figma': {
200
251
  collection: 'mode',
@@ -212,6 +263,10 @@
212
263
  'dark-tritanopia-high-contrast': '{base.color.neutral.7}',
213
264
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.neutral.7}',
214
265
  },
266
+ 'org.primer.llm': {
267
+ usage: ['neutral-button', 'secondary-action', 'neutral-indicator'],
268
+ rules: 'Use for emphasized neutral elements. Pair with fgColor.onEmphasis for text.',
269
+ },
215
270
  },
216
271
  },
217
272
  },
@@ -219,6 +274,7 @@
219
274
  muted: {
220
275
  $value: '{base.color.blue.0}',
221
276
  $type: 'color',
277
+ $description: 'Subtle accent background for informational or selected elements',
222
278
  $extensions: {
223
279
  'org.primer.figma': {
224
280
  collection: 'mode',
@@ -234,11 +290,16 @@
234
290
  alpha: 0.1,
235
291
  },
236
292
  },
293
+ 'org.primer.llm': {
294
+ usage: ['selected-row', 'info-banner', 'active-nav-item', 'highlight'],
295
+ rules: 'Use for selected states or informational highlights. Pair with fgColor.accent for text.',
296
+ },
237
297
  },
238
298
  },
239
299
  emphasis: {
240
300
  $value: '{base.color.blue.5}',
241
301
  $type: 'color',
302
+ $description: 'Strong accent background for active states and focused states',
242
303
  $extensions: {
243
304
  'org.primer.figma': {
244
305
  collection: 'mode',
@@ -255,6 +316,10 @@
255
316
  'dark-tritanopia-high-contrast': '{base.color.blue.9}',
256
317
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.blue.9}',
257
318
  },
319
+ 'org.primer.llm': {
320
+ usage: ['active-states', 'current', 'selected', 'active-toggle'],
321
+ rules: 'MUST use for selected or active states. Pair with fgColor.onEmphasis for text.',
322
+ },
258
323
  },
259
324
  },
260
325
  },
@@ -262,6 +327,7 @@
262
327
  muted: {
263
328
  $value: '{base.color.green.0}',
264
329
  $type: 'color',
330
+ $description: 'Subtle success background for positive feedback and completed states',
265
331
  $extensions: {
266
332
  'org.primer.figma': {
267
333
  collection: 'mode',
@@ -297,11 +363,16 @@
297
363
  alpha: 0.2,
298
364
  },
299
365
  },
366
+ 'org.primer.llm': {
367
+ usage: ['success-message', 'completed-state', 'positive-feedback'],
368
+ rules: 'Use for success states and positive feedback. Pair with fgColor.success for text.',
369
+ },
300
370
  },
301
371
  },
302
372
  emphasis: {
303
373
  $value: '#1f883d',
304
374
  $type: 'color',
375
+ $description: 'Strong success background for prominent positive actions',
305
376
  $extensions: {
306
377
  'org.primer.figma': {
307
378
  collection: 'mode',
@@ -325,6 +396,10 @@
325
396
  'dark-high-contrast': '{base.color.green.9}',
326
397
  'dark-dimmed-high-contrast': '{base.color.green.7}',
327
398
  },
399
+ 'org.primer.llm': {
400
+ usage: ['merge-button', 'confirm-action', 'success-badge'],
401
+ rules: 'Use for positive action buttons like merge or confirm. Pair with fgColor.onEmphasis for text.',
402
+ },
328
403
  },
329
404
  },
330
405
  },
@@ -332,6 +407,7 @@
332
407
  muted: {
333
408
  $value: '{bgColor.success.muted}',
334
409
  $type: 'color',
410
+ $description: 'Subtle background for open state indicators (issues, PRs)',
335
411
  $extensions: {
336
412
  'org.primer.figma': {
337
413
  collection: 'mode',
@@ -363,11 +439,16 @@
363
439
  alpha: 0.1,
364
440
  },
365
441
  },
442
+ 'org.primer.llm': {
443
+ usage: ['open-issue', 'open-pr', 'active-status'],
444
+ rules: 'Use for open/active status indicators. Specifically for GitHub issues and PRs.',
445
+ },
366
446
  },
367
447
  },
368
448
  emphasis: {
369
449
  $value: '{bgColor.success.emphasis}',
370
450
  $type: 'color',
451
+ $description: 'Strong background for open state badges and labels',
371
452
  $extensions: {
372
453
  'org.primer.figma': {
373
454
  collection: 'mode',
@@ -387,6 +468,10 @@
387
468
  'dark-protanopia-deuteranopia': '{base.color.orange.5}',
388
469
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.orange.9}',
389
470
  },
471
+ 'org.primer.llm': {
472
+ usage: ['open-badge', 'open-label', 'active-status-badge'],
473
+ rules: 'Use for prominent open/active state indicators. Pair with fgColor.onEmphasis for text.',
474
+ },
390
475
  },
391
476
  },
392
477
  },
@@ -394,6 +479,7 @@
394
479
  muted: {
395
480
  $value: '{base.color.yellow.0}',
396
481
  $type: 'color',
482
+ $description: 'Subtle attention background for warnings and caution states',
397
483
  $extensions: {
398
484
  'org.primer.figma': {
399
485
  collection: 'mode',
@@ -409,11 +495,16 @@
409
495
  alpha: 0.15,
410
496
  },
411
497
  },
498
+ 'org.primer.llm': {
499
+ usage: ['warning-banner', 'caution-message', 'pending-state'],
500
+ rules: 'Use for warnings that need user attention. Pair with fgColor.attention for text.',
501
+ },
412
502
  },
413
503
  },
414
504
  emphasis: {
415
505
  $value: '{base.color.yellow.5}',
416
506
  $type: 'color',
507
+ $description: 'Strong attention background for prominent warnings',
417
508
  $extensions: {
418
509
  'org.primer.figma': {
419
510
  collection: 'mode',
@@ -429,6 +520,10 @@
429
520
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.yellow.9}',
430
521
  'dark-tritanopia-high-contrast': '{base.color.yellow.9}',
431
522
  },
523
+ 'org.primer.llm': {
524
+ usage: ['warning-badge', 'caution-label', 'attention-indicator'],
525
+ rules: 'Use for prominent warnings. Consider fgColor.default for text due to yellow contrast.',
526
+ },
432
527
  },
433
528
  },
434
529
  },
@@ -436,6 +531,7 @@
436
531
  muted: {
437
532
  $value: '{base.color.orange.0}',
438
533
  $type: 'color',
534
+ $description: 'Subtle severe background for high-priority warnings',
439
535
  $extensions: {
440
536
  'org.primer.figma': {
441
537
  collection: 'mode',
@@ -457,11 +553,16 @@
457
553
  alpha: 0.1,
458
554
  },
459
555
  },
556
+ 'org.primer.llm': {
557
+ usage: ['high-priority-warning', 'urgent-message', 'escalation'],
558
+ rules: 'Use for severe warnings, less critical than danger. Pair with fgColor.severe for text.',
559
+ },
460
560
  },
461
561
  },
462
562
  emphasis: {
463
563
  $value: '{base.color.orange.5}',
464
564
  $type: 'color',
565
+ $description: 'Strong severe background for prominent high-priority warnings',
465
566
  $extensions: {
466
567
  'org.primer.figma': {
467
568
  collection: 'mode',
@@ -480,6 +581,10 @@
480
581
  'dark-dimmed-high-contrast': '{base.color.orange.7}',
481
582
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.orange.9}',
482
583
  },
584
+ 'org.primer.llm': {
585
+ usage: ['severe-badge', 'urgent-label', 'high-priority-indicator'],
586
+ rules: 'Use for prominent severe warnings. Pair with fgColor.onEmphasis for text.',
587
+ },
483
588
  },
484
589
  },
485
590
  },
@@ -487,6 +592,7 @@
487
592
  muted: {
488
593
  $value: '{base.color.red.0}',
489
594
  $type: 'color',
595
+ $description: 'Muted danger background for error states and destructive action contexts',
490
596
  $extensions: {
491
597
  'org.primer.figma': {
492
598
  collection: 'mode',
@@ -508,11 +614,16 @@
508
614
  alpha: 0.1,
509
615
  },
510
616
  },
617
+ 'org.primer.llm': {
618
+ usage: ['error-message', 'destructive-action', 'validation-error'],
619
+ rules: 'Use for error states and destructive action backgrounds. Pair with fgColor.danger for text.',
620
+ },
511
621
  },
512
622
  },
513
623
  emphasis: {
514
624
  $value: '{base.color.red.5}',
515
625
  $type: 'color',
626
+ $description: 'Emphasized danger background for critical errors and delete confirmations',
516
627
  $extensions: {
517
628
  'org.primer.figma': {
518
629
  collection: 'mode',
@@ -531,6 +642,10 @@
531
642
  'dark-dimmed-high-contrast': '{base.color.red.7}',
532
643
  'dark-tritanopia-high-contrast': '{base.color.red.9}',
533
644
  },
645
+ 'org.primer.llm': {
646
+ usage: ['delete-button', 'critical-alert', 'destructive-confirmation'],
647
+ rules: 'MUST use for destructive action buttons like delete. Use fgColor.onEmphasis for text on this background.',
648
+ },
534
649
  },
535
650
  },
536
651
  },
@@ -538,6 +653,7 @@
538
653
  muted: {
539
654
  $value: '{bgColor.danger.muted}',
540
655
  $type: 'color',
656
+ $description: 'Subtle background for closed state indicators (issues, PRs)',
541
657
  $extensions: {
542
658
  'org.primer.figma': {
543
659
  collection: 'mode',
@@ -565,11 +681,16 @@
565
681
  alpha: 0.1,
566
682
  },
567
683
  },
684
+ 'org.primer.llm': {
685
+ usage: ['closed-issue', 'closed-pr', 'declined-state'],
686
+ rules: 'Use for closed/declined status indicators. Specifically for GitHub issues and PRs.',
687
+ },
568
688
  },
569
689
  },
570
690
  emphasis: {
571
691
  $value: '{bgColor.danger.emphasis}',
572
692
  $type: 'color',
693
+ $description: 'Strong background for closed state badges and labels',
573
694
  $extensions: {
574
695
  'org.primer.figma': {
575
696
  collection: 'mode',
@@ -589,6 +710,10 @@
589
710
  'dark-protanopia-deuteranopia': '{bgColor.neutral.emphasis}',
590
711
  'dark-protanopia-deuteranopia-high-contrast': '{bgColor.neutral.emphasis}',
591
712
  },
713
+ 'org.primer.llm': {
714
+ usage: ['closed-badge', 'closed-label', 'declined-status-badge'],
715
+ rules: 'Use for prominent closed/declined state indicators. Pair with fgColor.onEmphasis for text.',
716
+ },
592
717
  },
593
718
  },
594
719
  },
@@ -596,6 +721,7 @@
596
721
  muted: {
597
722
  $value: '{bgColor.neutral.muted}',
598
723
  $type: 'color',
724
+ $description: 'Subtle background for draft state indicators',
599
725
  $extensions: {
600
726
  'org.primer.figma': {
601
727
  collection: 'mode',
@@ -623,11 +749,16 @@
623
749
  alpha: 0.1,
624
750
  },
625
751
  },
752
+ 'org.primer.llm': {
753
+ usage: ['draft-pr', 'draft-issue', 'work-in-progress'],
754
+ rules: 'Use for draft/WIP status indicators. Conveys incomplete or pending state.',
755
+ },
626
756
  },
627
757
  },
628
758
  emphasis: {
629
759
  $value: '{bgColor.neutral.emphasis}',
630
760
  $type: 'color',
761
+ $description: 'Strong background for draft state badges and labels',
631
762
  $extensions: {
632
763
  'org.primer.figma': {
633
764
  collection: 'mode',
@@ -637,6 +768,10 @@
637
768
  web: 'var(--bgColor-draft-emphasis)',
638
769
  },
639
770
  },
771
+ 'org.primer.llm': {
772
+ usage: ['draft-badge', 'draft-label', 'wip-indicator'],
773
+ rules: 'Use for prominent draft state indicators. Pair with fgColor.onEmphasis for text.',
774
+ },
640
775
  },
641
776
  },
642
777
  },
@@ -644,6 +779,7 @@
644
779
  muted: {
645
780
  $value: '{base.color.purple.0}',
646
781
  $type: 'color',
782
+ $description: 'Subtle background for completed/done state indicators',
647
783
  $extensions: {
648
784
  'org.primer.figma': {
649
785
  collection: 'mode',
@@ -659,11 +795,16 @@
659
795
  alpha: 0.15,
660
796
  },
661
797
  },
798
+ 'org.primer.llm': {
799
+ usage: ['completed-task', 'merged-pr', 'done-state'],
800
+ rules: 'Use for completed/done status indicators. Conveys finished or merged state.',
801
+ },
662
802
  },
663
803
  },
664
804
  emphasis: {
665
805
  $value: '{base.color.purple.5}',
666
806
  $type: 'color',
807
+ $description: 'Strong background for completed/done state badges and labels',
667
808
  $extensions: {
668
809
  'org.primer.figma': {
669
810
  collection: 'mode',
@@ -679,6 +820,10 @@
679
820
  'dark-tritanopia-high-contrast': '{base.color.purple.9}',
680
821
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.purple.9}',
681
822
  },
823
+ 'org.primer.llm': {
824
+ usage: ['done-badge', 'merged-label', 'completed-indicator'],
825
+ rules: 'Use for prominent done/completed state indicators. Pair with fgColor.onEmphasis for text.',
826
+ },
682
827
  },
683
828
  },
684
829
  },
@@ -686,6 +831,7 @@
686
831
  muted: {
687
832
  $value: '{bgColor.done.muted}',
688
833
  $type: 'color',
834
+ $description: 'Subtle background for upsell and promotional content',
689
835
  $extensions: {
690
836
  'org.primer.figma': {
691
837
  collection: 'mode',
@@ -695,11 +841,16 @@
695
841
  web: 'var(--bgColor-upsell-muted)',
696
842
  },
697
843
  },
844
+ 'org.primer.llm': {
845
+ usage: ['upgrade-prompt', 'premium-feature', 'promotional-banner'],
846
+ rules: 'Use for upgrade prompts and premium feature highlights. Do NOT use for regular content.',
847
+ },
698
848
  },
699
849
  },
700
850
  emphasis: {
701
851
  $value: '{bgColor.done.emphasis}',
702
852
  $type: 'color',
853
+ $description: 'Strong background for prominent upsell elements',
703
854
  $extensions: {
704
855
  'org.primer.figma': {
705
856
  collection: 'mode',
@@ -709,6 +860,10 @@
709
860
  web: 'var(--bgColor-upsell-emphasis)',
710
861
  },
711
862
  },
863
+ 'org.primer.llm': {
864
+ usage: ['upgrade-button', 'premium-badge', 'upsell-cta'],
865
+ rules: 'Use for prominent upgrade/upsell CTAs. Pair with fgColor.onEmphasis for text.',
866
+ },
712
867
  },
713
868
  },
714
869
  },
@@ -716,6 +871,7 @@
716
871
  muted: {
717
872
  $value: '{base.color.pink.0}',
718
873
  $type: 'color',
874
+ $description: 'Subtle background for GitHub Sponsors content',
719
875
  $extensions: {
720
876
  'org.primer.figma': {
721
877
  collection: 'mode',
@@ -735,11 +891,16 @@
735
891
  alpha: 0.1,
736
892
  },
737
893
  },
894
+ 'org.primer.llm': {
895
+ usage: ['sponsor-card', 'sponsor-highlight', 'funding-prompt'],
896
+ rules: 'Use for GitHub Sponsors related content. Do NOT use for general pink-colored elements.',
897
+ },
738
898
  },
739
899
  },
740
900
  emphasis: {
741
901
  $value: '{base.color.pink.5}',
742
902
  $type: 'color',
903
+ $description: 'Strong background for prominent GitHub Sponsors elements',
743
904
  $extensions: {
744
905
  'org.primer.figma': {
745
906
  collection: 'mode',
@@ -755,6 +916,10 @@
755
916
  'dark-tritanopia-high-contrast': '{base.color.pink.9}',
756
917
  'dark-protanopia-deuteranopia-high-contrast': '{base.color.pink.9}',
757
918
  },
919
+ 'org.primer.llm': {
920
+ usage: ['sponsor-button', 'sponsor-badge', 'funding-cta'],
921
+ rules: 'Use for prominent Sponsors CTAs. Pair with fgColor.onEmphasis for text.',
922
+ },
758
923
  },
759
924
  },
760
925
  },