@primer/primitives 11.4.0 → 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 (152) hide show
  1. package/DESIGN_TOKENS_GUIDE.md +185 -0
  2. package/DESIGN_TOKENS_SPEC.md +565 -0
  3. package/dist/build/formats/jsonFigma.js +8 -1
  4. package/dist/build/formats/markdownLlmGuidelines.d.ts +7 -6
  5. package/dist/build/formats/markdownLlmGuidelines.js +1034 -60
  6. package/dist/build/schemas/borderToken.d.ts +17 -3
  7. package/dist/build/schemas/colorToken.d.ts +1 -1
  8. package/dist/build/schemas/cubicBezierToken.d.ts +1 -1
  9. package/dist/build/schemas/dimensionToken.d.ts +9 -2
  10. package/dist/build/schemas/dimensionValue.d.ts +12 -1
  11. package/dist/build/schemas/dimensionValue.js +10 -13
  12. package/dist/build/schemas/durationToken.d.ts +8 -2
  13. package/dist/build/schemas/durationValue.d.ts +11 -1
  14. package/dist/build/schemas/durationValue.js +13 -3
  15. package/dist/build/schemas/fontFamilyToken.d.ts +1 -1
  16. package/dist/build/schemas/fontWeightToken.d.ts +1 -1
  17. package/dist/build/schemas/gradientToken.d.ts +1 -1
  18. package/dist/build/schemas/numberToken.d.ts +1 -1
  19. package/dist/build/schemas/shadowToken.d.ts +673 -85
  20. package/dist/build/schemas/stringToken.d.ts +1 -1
  21. package/dist/build/schemas/stringToken.js +1 -1
  22. package/dist/build/schemas/tokenType.d.ts +1 -1
  23. package/dist/build/schemas/transitionToken.d.ts +15 -3
  24. package/dist/build/schemas/typographyToken.d.ts +19 -5
  25. package/dist/build/schemas/typographyToken.js +1 -1
  26. package/dist/build/schemas/validTokenType.d.ts +1 -1
  27. package/dist/build/schemas/validTokenType.js +1 -1
  28. package/dist/build/schemas/viewportRangeToken.d.ts +1 -1
  29. package/dist/build/transformers/borderToCss.js +17 -1
  30. package/dist/build/transformers/dimensionToPixelUnitless.d.ts +3 -2
  31. package/dist/build/transformers/dimensionToPixelUnitless.js +22 -26
  32. package/dist/build/transformers/dimensionToRem.d.ts +2 -1
  33. package/dist/build/transformers/dimensionToRem.js +21 -22
  34. package/dist/build/transformers/dimensionToRemPxArray.d.ts +2 -1
  35. package/dist/build/transformers/dimensionToRemPxArray.js +21 -22
  36. package/dist/build/transformers/durationToCss.d.ts +2 -1
  37. package/dist/build/transformers/durationToCss.js +18 -11
  38. package/dist/build/transformers/shadowToCss.js +12 -1
  39. package/dist/build/transformers/utilities/parseDimension.d.ts +12 -0
  40. package/dist/build/transformers/utilities/parseDimension.js +31 -0
  41. package/dist/build/types/borderTokenValue.d.ts +3 -1
  42. package/dist/build/types/dimensionTokenValue.d.ts +9 -0
  43. package/dist/build/types/shadowTokenValue.d.ts +6 -4
  44. package/dist/css/functional/themes/dark-colorblind-high-contrast.css +32 -28
  45. package/dist/css/functional/themes/dark-colorblind.css +32 -28
  46. package/dist/css/functional/themes/dark-dimmed-high-contrast.css +32 -28
  47. package/dist/css/functional/themes/dark-dimmed.css +32 -28
  48. package/dist/css/functional/themes/dark-high-contrast.css +32 -28
  49. package/dist/css/functional/themes/dark-tritanopia-high-contrast.css +32 -28
  50. package/dist/css/functional/themes/dark-tritanopia.css +32 -28
  51. package/dist/css/functional/themes/dark.css +32 -28
  52. package/dist/css/functional/themes/light-colorblind-high-contrast.css +32 -28
  53. package/dist/css/functional/themes/light-colorblind.css +32 -28
  54. package/dist/css/functional/themes/light-high-contrast.css +32 -28
  55. package/dist/css/functional/themes/light-tritanopia-high-contrast.css +32 -28
  56. package/dist/css/functional/themes/light-tritanopia.css +32 -28
  57. package/dist/css/functional/themes/light.css +32 -28
  58. package/dist/css/primitives.css +4 -0
  59. package/dist/docs/base/motion/motion.json +96 -24
  60. package/dist/docs/base/size/size.json +76 -19
  61. package/dist/docs/base/typography/typography.json +24 -6
  62. package/dist/docs/functional/size/border.json +26 -11
  63. package/dist/docs/functional/size/breakpoints.json +24 -6
  64. package/dist/docs/functional/size/radius.json +16 -4
  65. package/dist/docs/functional/size/size.json +60 -15
  66. package/dist/docs/functional/themes/dark-colorblind-high-contrast.json +1423 -346
  67. package/dist/docs/functional/themes/dark-colorblind.json +1423 -346
  68. package/dist/docs/functional/themes/dark-dimmed-high-contrast.json +1423 -346
  69. package/dist/docs/functional/themes/dark-dimmed.json +1423 -346
  70. package/dist/docs/functional/themes/dark-high-contrast.json +1423 -346
  71. package/dist/docs/functional/themes/dark-tritanopia-high-contrast.json +1423 -346
  72. package/dist/docs/functional/themes/dark-tritanopia.json +1423 -346
  73. package/dist/docs/functional/themes/dark.json +1423 -346
  74. package/dist/docs/functional/themes/light-colorblind-high-contrast.json +1426 -349
  75. package/dist/docs/functional/themes/light-colorblind.json +1426 -349
  76. package/dist/docs/functional/themes/light-high-contrast.json +1426 -349
  77. package/dist/docs/functional/themes/light-tritanopia-high-contrast.json +1426 -349
  78. package/dist/docs/functional/themes/light-tritanopia.json +1426 -349
  79. package/dist/docs/functional/themes/light.json +1426 -349
  80. package/dist/docs/functional/typography/typography.json +8 -2
  81. package/dist/fallbacks/base/motion/motion.json +48 -12
  82. package/dist/figma/themes/light-colorblind.json +4 -4
  83. package/dist/figma/themes/light-high-contrast.json +4 -4
  84. package/dist/figma/themes/light-tritanopia.json +4 -4
  85. package/dist/figma/themes/light.json +4 -4
  86. package/dist/internalCss/dark-colorblind-high-contrast.css +28 -28
  87. package/dist/internalCss/dark-colorblind.css +28 -28
  88. package/dist/internalCss/dark-dimmed-high-contrast.css +28 -28
  89. package/dist/internalCss/dark-dimmed.css +28 -28
  90. package/dist/internalCss/dark-high-contrast.css +28 -28
  91. package/dist/internalCss/dark-tritanopia-high-contrast.css +28 -28
  92. package/dist/internalCss/dark-tritanopia.css +28 -28
  93. package/dist/internalCss/dark.css +28 -28
  94. package/dist/internalCss/light-colorblind-high-contrast.css +28 -28
  95. package/dist/internalCss/light-colorblind.css +28 -28
  96. package/dist/internalCss/light-high-contrast.css +28 -28
  97. package/dist/internalCss/light-tritanopia-high-contrast.css +28 -28
  98. package/dist/internalCss/light-tritanopia.css +28 -28
  99. package/dist/internalCss/light.css +28 -28
  100. package/dist/styleLint/base/motion/motion.json +96 -24
  101. package/dist/styleLint/base/size/size.json +76 -19
  102. package/dist/styleLint/base/typography/typography.json +30 -12
  103. package/dist/styleLint/functional/size/border.json +27 -12
  104. package/dist/styleLint/functional/size/breakpoints.json +24 -6
  105. package/dist/styleLint/functional/size/radius.json +17 -5
  106. package/dist/styleLint/functional/size/size-coarse.json +3 -3
  107. package/dist/styleLint/functional/size/size-fine.json +3 -3
  108. package/dist/styleLint/functional/size/size.json +111 -66
  109. package/dist/styleLint/functional/themes/dark-colorblind-high-contrast.json +1551 -366
  110. package/dist/styleLint/functional/themes/dark-colorblind.json +1551 -366
  111. package/dist/styleLint/functional/themes/dark-dimmed-high-contrast.json +1551 -366
  112. package/dist/styleLint/functional/themes/dark-dimmed.json +1551 -366
  113. package/dist/styleLint/functional/themes/dark-high-contrast.json +1551 -366
  114. package/dist/styleLint/functional/themes/dark-tritanopia-high-contrast.json +1551 -366
  115. package/dist/styleLint/functional/themes/dark-tritanopia.json +1551 -366
  116. package/dist/styleLint/functional/themes/dark.json +1551 -366
  117. package/dist/styleLint/functional/themes/light-colorblind-high-contrast.json +1554 -369
  118. package/dist/styleLint/functional/themes/light-colorblind.json +1554 -369
  119. package/dist/styleLint/functional/themes/light-high-contrast.json +1554 -369
  120. package/dist/styleLint/functional/themes/light-tritanopia-high-contrast.json +1554 -369
  121. package/dist/styleLint/functional/themes/light-tritanopia.json +1554 -369
  122. package/dist/styleLint/functional/themes/light.json +1554 -369
  123. package/dist/styleLint/functional/typography/typography.json +28 -22
  124. package/package.json +6 -5
  125. package/src/tokens/base/motion/timing.json5 +12 -12
  126. package/src/tokens/base/size/size.json5 +19 -19
  127. package/src/tokens/base/typography/typography.json5 +6 -6
  128. package/src/tokens/component/avatar.json5 +72 -44
  129. package/src/tokens/component/button.json5 +1545 -1193
  130. package/src/tokens/functional/border/border.json5 +4 -1
  131. package/src/tokens/functional/color/bgColor.json5 +8 -0
  132. package/src/tokens/functional/color/display.json5 +7 -0
  133. package/src/tokens/functional/color/fgColor.json5 +8 -0
  134. package/src/tokens/functional/color/syntax.json5 +14 -0
  135. package/src/tokens/functional/shadow/shadow.json5 +678 -163
  136. package/src/tokens/functional/size/border.json5 +8 -8
  137. package/src/tokens/functional/size/breakpoints.json5 +6 -6
  138. package/src/tokens/functional/size/radius.json5 +4 -4
  139. package/src/tokens/functional/size/size.json5 +15 -15
  140. package/src/tokens/functional/typography/typography.json5 +8 -4
  141. package/dist/build/parsers/index.d.ts +0 -1
  142. package/dist/build/parsers/index.js +0 -1
  143. package/dist/build/parsers/w3cJsonParser.d.ts +0 -6
  144. package/dist/build/parsers/w3cJsonParser.js +0 -25
  145. package/dist/removed/testing.json5 +0 -4
  146. package/guidelines/color.llm.md +0 -16
  147. package/guidelines/guidelines.llm.md +0 -34
  148. package/guidelines/motion.llm.md +0 -41
  149. package/guidelines/spacing.llm.md +0 -20
  150. package/guidelines/typography.llm.md +0 -14
  151. package/src/tokens/removed/testing.json5 +0 -4
  152. package/token-guidelines.llm.md +0 -695
@@ -0,0 +1,185 @@
1
+ # Design Tokens Master Guide
2
+
3
+ > Metadata: This file defines the Logic and Rules for the design system. For individual token definitions and raw values, refer to DESIGN_TOKENS_SPEC.md.
4
+
5
+ ---
6
+
7
+ ## Core Rule
8
+
9
+ **You are a CSS expert. Never use raw values (hex, px, etc.). Only use semantic tokens.**
10
+
11
+ ---
12
+
13
+ ## Logic Matrix: Color Pairings
14
+
15
+ | Background Token | Foreground Token | Notes |
16
+ | ---------------------- | ---------------------- | ------------------------- |
17
+ | `--bgColor-*-emphasis` | `--fgColor-onEmphasis` | MUST pair |
18
+ | `--bgColor-*-muted` | `--fgColor-{semantic}` | MUST use semantic fg |
19
+ | `--bgColor-default` | `--fgColor-default` | Standard pairing |
20
+ | `--bgColor-muted` | `--fgColor-default` | NEVER use `fgColor-muted` |
21
+
22
+ **Contrast Requirements:**
23
+
24
+ | Context | Ratio | Standard |
25
+ | --------------- | ----- | -------- |
26
+ | Normal text | 4.5:1 | WCAG AA |
27
+ | Large text / UI | 3:1 | WCAG AA |
28
+
29
+ ---
30
+
31
+ ## Pattern Compression
32
+
33
+ ### Control Tokens
34
+
35
+ ```
36
+ --control-[size]-[property]
37
+ ├── size: xsmall | small | medium | large | xlarge
38
+ └── property: size | paddingInline-[density] | paddingBlock-[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 */`.**