@vellira-ui/tokens 2.98.5 → 2.98.7

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 (136) hide show
  1. package/dist/css/tokens.css +189 -240
  2. package/dist/dark/components/dropdown.d.ts +9 -9
  3. package/dist/dark/components/dropdown.d.ts.map +1 -1
  4. package/dist/dark/components/dropdown.js +4 -3
  5. package/dist/dark/components/input.d.ts +2 -2
  6. package/dist/dark/components/input.js +5 -5
  7. package/dist/dark/components/modal.js +1 -1
  8. package/dist/dark/components/radio.d.ts +1 -2
  9. package/dist/dark/components/radio.d.ts.map +1 -1
  10. package/dist/dark/components/radio.js +2 -2
  11. package/dist/dark/components/select.d.ts +1 -1
  12. package/dist/dark/components/select.js +3 -3
  13. package/dist/dark/semantic/action.d.ts +6 -6
  14. package/dist/dark/semantic/action.js +6 -6
  15. package/dist/dark/semantic/border.d.ts +1 -1
  16. package/dist/dark/semantic/border.js +1 -1
  17. package/dist/dark/semantic/control.d.ts +2 -2
  18. package/dist/dark/semantic/control.js +3 -3
  19. package/dist/dark/semantic/focus.d.ts +1 -1
  20. package/dist/dark/semantic/focus.js +1 -1
  21. package/dist/dark/semantic/icons.d.ts +2 -2
  22. package/dist/dark/semantic/icons.js +2 -2
  23. package/dist/dark/semantic/index.d.ts +0 -1
  24. package/dist/dark/semantic/index.d.ts.map +1 -1
  25. package/dist/dark/semantic/index.js +0 -1
  26. package/dist/dark/semantic/overlay.d.ts +2 -2
  27. package/dist/dark/semantic/overlay.js +2 -2
  28. package/dist/dark/semantic/status.d.ts +6 -6
  29. package/dist/dark/semantic/status.js +6 -6
  30. package/dist/dark/semantic/surface.d.ts +0 -1
  31. package/dist/dark/semantic/surface.d.ts.map +1 -1
  32. package/dist/dark/semantic/surface.js +0 -1
  33. package/dist/dark/semantic/text.d.ts +3 -3
  34. package/dist/dark/semantic/text.js +3 -3
  35. package/dist/factories/componentFocusRing.d.ts +13 -0
  36. package/dist/factories/componentFocusRing.d.ts.map +1 -0
  37. package/dist/factories/componentFocusRing.js +6 -0
  38. package/dist/factories/createContextMenuTokens.d.ts +2 -1
  39. package/dist/factories/createContextMenuTokens.d.ts.map +1 -1
  40. package/dist/factories/createContextMenuTokens.js +3 -2
  41. package/dist/factories/createModalTokens.d.ts +3 -2
  42. package/dist/factories/createModalTokens.d.ts.map +1 -1
  43. package/dist/factories/createModalTokens.js +4 -3
  44. package/dist/factories/createPopoverTokens.d.ts +1 -1
  45. package/dist/factories/createPopoverTokens.d.ts.map +1 -1
  46. package/dist/factories/createPopoverTokens.js +2 -2
  47. package/dist/factories/createRadioPalette.d.ts +1 -2
  48. package/dist/factories/createRadioPalette.d.ts.map +1 -1
  49. package/dist/factories/createRadioPalette.js +1 -2
  50. package/dist/factories/createSwitchTokens.d.ts +1 -1
  51. package/dist/factories/createSwitchTokens.d.ts.map +1 -1
  52. package/dist/factories/createSwitchTokens.js +3 -3
  53. package/dist/generated/token-types.d.ts +5 -5
  54. package/dist/generated/token-types.d.ts.map +1 -1
  55. package/dist/generated/token-types.js +220 -288
  56. package/dist/highContrast/components/dropdown.d.ts +8 -8
  57. package/dist/highContrast/components/dropdown.d.ts.map +1 -1
  58. package/dist/highContrast/components/dropdown.js +4 -3
  59. package/dist/highContrast/components/input.d.ts +5 -5
  60. package/dist/highContrast/components/input.js +5 -5
  61. package/dist/highContrast/components/radio.d.ts +1 -2
  62. package/dist/highContrast/components/radio.d.ts.map +1 -1
  63. package/dist/highContrast/components/radio.js +2 -2
  64. package/dist/highContrast/components/select.d.ts +2 -2
  65. package/dist/highContrast/components/select.js +3 -3
  66. package/dist/highContrast/semantic/action.d.ts +6 -6
  67. package/dist/highContrast/semantic/action.js +6 -6
  68. package/dist/highContrast/semantic/border.d.ts +1 -1
  69. package/dist/highContrast/semantic/border.js +1 -1
  70. package/dist/highContrast/semantic/control.d.ts +2 -2
  71. package/dist/highContrast/semantic/control.js +2 -2
  72. package/dist/highContrast/semantic/focus.d.ts +1 -1
  73. package/dist/highContrast/semantic/focus.js +1 -1
  74. package/dist/highContrast/semantic/icons.d.ts +4 -4
  75. package/dist/highContrast/semantic/icons.js +4 -4
  76. package/dist/highContrast/semantic/index.d.ts +0 -1
  77. package/dist/highContrast/semantic/index.d.ts.map +1 -1
  78. package/dist/highContrast/semantic/index.js +0 -1
  79. package/dist/highContrast/semantic/overlay.d.ts +2 -2
  80. package/dist/highContrast/semantic/overlay.js +2 -2
  81. package/dist/highContrast/semantic/status.d.ts +4 -4
  82. package/dist/highContrast/semantic/status.js +4 -4
  83. package/dist/highContrast/semantic/surface.d.ts +0 -1
  84. package/dist/highContrast/semantic/surface.d.ts.map +1 -1
  85. package/dist/highContrast/semantic/surface.js +0 -1
  86. package/dist/highContrast/semantic/text.d.ts +1 -1
  87. package/dist/highContrast/semantic/text.js +1 -1
  88. package/dist/light/components/dropdown.d.ts +8 -8
  89. package/dist/light/components/dropdown.d.ts.map +1 -1
  90. package/dist/light/components/dropdown.js +4 -3
  91. package/dist/light/components/input.d.ts +1 -1
  92. package/dist/light/components/input.js +5 -5
  93. package/dist/light/components/radio.d.ts +1 -2
  94. package/dist/light/components/radio.d.ts.map +1 -1
  95. package/dist/light/components/radio.js +2 -2
  96. package/dist/light/components/select.d.ts +1 -1
  97. package/dist/light/components/select.js +3 -3
  98. package/dist/light/semantic/action.d.ts +6 -6
  99. package/dist/light/semantic/action.js +6 -6
  100. package/dist/light/semantic/border.d.ts +1 -1
  101. package/dist/light/semantic/border.js +1 -1
  102. package/dist/light/semantic/control.d.ts +2 -2
  103. package/dist/light/semantic/control.js +2 -2
  104. package/dist/light/semantic/focus.d.ts +1 -1
  105. package/dist/light/semantic/focus.js +1 -1
  106. package/dist/light/semantic/icons.d.ts +2 -2
  107. package/dist/light/semantic/icons.js +2 -2
  108. package/dist/light/semantic/index.d.ts +0 -1
  109. package/dist/light/semantic/index.d.ts.map +1 -1
  110. package/dist/light/semantic/index.js +0 -1
  111. package/dist/light/semantic/menu.js +1 -1
  112. package/dist/light/semantic/overlay.d.ts +2 -2
  113. package/dist/light/semantic/overlay.js +2 -2
  114. package/dist/light/semantic/status.d.ts +4 -4
  115. package/dist/light/semantic/status.js +4 -4
  116. package/dist/light/semantic/surface.d.ts +0 -1
  117. package/dist/light/semantic/surface.d.ts.map +1 -1
  118. package/dist/light/semantic/surface.js +0 -1
  119. package/dist/light/semantic/text.d.ts +1 -1
  120. package/dist/light/semantic/text.js +1 -1
  121. package/dist/preservation/token-migrations.d.ts +213 -11
  122. package/dist/preservation/token-migrations.d.ts.map +1 -1
  123. package/dist/preservation/token-migrations.js +385 -19
  124. package/dist/token-architecture.d.ts +119 -5
  125. package/dist/token-architecture.d.ts.map +1 -1
  126. package/dist/token-architecture.js +206 -15
  127. package/package.json +1 -1
  128. package/dist/dark/semantic/navigation.d.ts +0 -34
  129. package/dist/dark/semantic/navigation.d.ts.map +0 -1
  130. package/dist/dark/semantic/navigation.js +0 -37
  131. package/dist/highContrast/semantic/navigation.d.ts +0 -34
  132. package/dist/highContrast/semantic/navigation.d.ts.map +0 -1
  133. package/dist/highContrast/semantic/navigation.js +0 -36
  134. package/dist/light/semantic/navigation.d.ts +0 -34
  135. package/dist/light/semantic/navigation.d.ts.map +0 -1
  136. package/dist/light/semantic/navigation.js +0 -37
@@ -14,6 +14,261 @@ export const tokenMigrationThemeNames = [
14
14
  ];
15
15
  export const tokenMigrationPlatforms = ['web', 'react-native'];
16
16
  const valueKindWebFixApproval = '#881 explicitly requires correcting invalid unitless CSS serialization; targeted serializer regressions and the pinned Linux visual suite are the approval evidence.';
17
+ const stateVocabularyVisualApproval = '#879/#882 explicitly authorizes removal of pressed/active semantic conflation; the change stays inside the existing Vellira palette and requires pinned Linux visual regression.';
18
+ const semanticVocabularyVisualApproval = '#879/#883 explicitly authorizes Semantic Vocabulary V1 normalization and the narrowly scoped hierarchy/status corrections inside existing Vellira palettes; token preservation plus pinned Linux visual regression are required evidence.';
19
+ const stateVocabularyRenamePairsV1 = [
20
+ [
21
+ 'control-active-bg',
22
+ 'semantic.control.active.bg',
23
+ 'semantic.control.pressed.bg',
24
+ ],
25
+ [
26
+ 'control-active-fg',
27
+ 'semantic.control.active.fg',
28
+ 'semantic.control.pressed.fg',
29
+ ],
30
+ [
31
+ 'control-active-border',
32
+ 'semantic.control.active.border',
33
+ 'semantic.control.pressed.border',
34
+ ],
35
+ [
36
+ 'control-selected-active-bg',
37
+ 'semantic.control.selected.active.bg',
38
+ 'semantic.control.selected.pressed.bg',
39
+ ],
40
+ [
41
+ 'control-selected-active-fg',
42
+ 'semantic.control.selected.active.fg',
43
+ 'semantic.control.selected.pressed.fg',
44
+ ],
45
+ [
46
+ 'control-selected-active-border',
47
+ 'semantic.control.selected.active.border',
48
+ 'semantic.control.selected.pressed.border',
49
+ ],
50
+ [
51
+ 'action-primary-active-bg',
52
+ 'semantic.action.primary.active.bg',
53
+ 'semantic.action.primary.pressed.bg',
54
+ ],
55
+ [
56
+ 'action-primary-active-fg',
57
+ 'semantic.action.primary.active.fg',
58
+ 'semantic.action.primary.pressed.fg',
59
+ ],
60
+ [
61
+ 'action-primary-active-border',
62
+ 'semantic.action.primary.active.border',
63
+ 'semantic.action.primary.pressed.border',
64
+ ],
65
+ [
66
+ 'action-danger-active-bg',
67
+ 'semantic.action.danger.active.bg',
68
+ 'semantic.action.danger.pressed.bg',
69
+ ],
70
+ [
71
+ 'action-danger-active-fg',
72
+ 'semantic.action.danger.active.fg',
73
+ 'semantic.action.danger.pressed.fg',
74
+ ],
75
+ [
76
+ 'action-danger-active-border',
77
+ 'semantic.action.danger.active.border',
78
+ 'semantic.action.danger.pressed.border',
79
+ ],
80
+ [
81
+ 'text-interactive-active',
82
+ 'semantic.text.interactiveActive',
83
+ 'semantic.text.interactivePressed',
84
+ ],
85
+ ];
86
+ const stateVocabularyRenameMigrationsV1 = stateVocabularyRenamePairsV1.flatMap(([id, from, to]) => [
87
+ {
88
+ id: `882-${id}-rename`,
89
+ kind: 'rename',
90
+ issue: '#882',
91
+ reason: 'Rename a transient physical-interaction role to canonical pressed while preserving its resolved design value.',
92
+ platforms: ['react-native'],
93
+ from,
94
+ to,
95
+ },
96
+ {
97
+ id: `882-${id}-web-identity`,
98
+ kind: 'representation-change',
99
+ layer: 'platform-output',
100
+ issue: '#882',
101
+ reason: 'Align the public Web CSS variable identity with the canonical pressed state name.',
102
+ platforms: ['web'],
103
+ from,
104
+ to,
105
+ equivalence: 'The paired canonical #882 rename preserves the resolved design value; only the Web CSS variable identity changes from active to pressed.',
106
+ evidence: 'Token preservation validates the canonical/RN value-preserving rename; generated CSS checks and pinned Linux visual regression validate Web output.',
107
+ },
108
+ ]);
109
+ const semanticActionRoleRenamePairsV1 = [
110
+ ['secondary', 'accent'],
111
+ ['close', 'neutral'],
112
+ ].flatMap(([fromRole, toRole]) => ['default', 'hover', 'active', 'muted', 'subtle'].flatMap((fromState) => ['bg', 'fg', 'border'].map((field) => {
113
+ const toState = fromState === 'active' ? 'pressed' : fromState;
114
+ return [
115
+ `action-${fromRole}-${fromState}-${field}`,
116
+ `semantic.action.${fromRole}.${fromState}.${field}`,
117
+ `semantic.action.${toRole}.${toState}.${field}`,
118
+ ];
119
+ })));
120
+ const semanticStatusEmphasisRenamePairsV1 = ['success', 'error', 'warning', 'info'].map((status) => [
121
+ `status-${status}-strong`,
122
+ `semantic.status.${status}.strong`,
123
+ `semantic.status.${status}.emphasisFg`,
124
+ ]);
125
+ const semanticVocabularySimpleRenamePairsV1 = [
126
+ ['icons-primary', 'semantic.icons.primary', 'semantic.icons.interactive'],
127
+ ['icons-hover', 'semantic.icons.hover', 'semantic.icons.interactiveHover'],
128
+ ['border-focus', 'semantic.border.focus', 'semantic.border.interactive'],
129
+ [
130
+ 'focus-ring-offset',
131
+ 'semantic.focus.ring.offset',
132
+ 'semantic.focus.ring.offsetColor',
133
+ ],
134
+ [
135
+ 'overlay-popover-bg',
136
+ 'semantic.overlay.popover.bg',
137
+ 'semantic.overlay.floating.bg',
138
+ ],
139
+ [
140
+ 'overlay-popover-border',
141
+ 'semantic.overlay.popover.border',
142
+ 'semantic.overlay.floating.border',
143
+ ],
144
+ [
145
+ 'overlay-modal-bg',
146
+ 'semantic.overlay.modal.bg',
147
+ 'semantic.overlay.dialog.bg',
148
+ ],
149
+ [
150
+ 'overlay-modal-border',
151
+ 'semantic.overlay.modal.border',
152
+ 'semantic.overlay.dialog.border',
153
+ ],
154
+ ];
155
+ const semanticVocabularyRenamePairsV1 = [
156
+ ...semanticActionRoleRenamePairsV1,
157
+ ...semanticStatusEmphasisRenamePairsV1,
158
+ ...semanticVocabularySimpleRenamePairsV1,
159
+ ];
160
+ const semanticVocabularyRenameMigrationsV1 = semanticVocabularyRenamePairsV1.flatMap(([id, from, to]) => [
161
+ {
162
+ id: `883-${id}-rename`,
163
+ kind: 'rename',
164
+ issue: '#883',
165
+ reason: 'Rename a public semantic role to Semantic Vocabulary V1 while preserving its resolved design value.',
166
+ platforms: ['react-native'],
167
+ from,
168
+ to,
169
+ },
170
+ {
171
+ id: `883-${id}-web-identity`,
172
+ kind: 'representation-change',
173
+ layer: 'platform-output',
174
+ issue: '#883',
175
+ reason: 'Align the public Web CSS variable identity with the normalized Semantic Vocabulary V1 role.',
176
+ platforms: ['web'],
177
+ from,
178
+ to,
179
+ equivalence: 'The paired canonical #883 rename preserves the resolved design value; only the public Web CSS variable identity changes.',
180
+ evidence: 'Token preservation validates the canonical/RN rename; generated CSS and pinned Linux visual regression validate Web output identity.',
181
+ },
182
+ ]);
183
+ const semanticVocabularyRemovalPathsV1 = [
184
+ 'semantic.surface.background',
185
+ 'semantic.navigation.hover.bg',
186
+ 'semantic.navigation.hover.fg',
187
+ 'semantic.navigation.active.bg',
188
+ 'semantic.navigation.active.fg',
189
+ 'semantic.navigation.brandHover.bg',
190
+ 'semantic.navigation.brandHover.fg',
191
+ 'semantic.navigation.tabHover.fg',
192
+ 'semantic.navigation.tabFocus.ring',
193
+ 'semantic.navigation.optionHover.bg',
194
+ 'semantic.navigation.optionHover.fg',
195
+ 'semantic.navigation.optionActive.bg',
196
+ 'semantic.navigation.optionActive.fg',
197
+ 'semantic.navigation.triggerHover.bg',
198
+ 'semantic.navigation.triggerHover.fg',
199
+ 'semantic.navigation.border',
200
+ ];
201
+ const semanticVocabularyRemovalMigrationsV1 = semanticVocabularyRemovalPathsV1.map((from) => ({
202
+ id: `883-remove-${from.replaceAll('.', '-')}`,
203
+ kind: 'remove',
204
+ issue: '#883',
205
+ reason: from === 'semantic.surface.background'
206
+ ? 'Remove the ambiguous surface.background alias after application roots move to the canonical surface.canvas role.'
207
+ : 'Remove the unused legacy semantic.navigation namespace instead of preserving a duplicate component-history vocabulary.',
208
+ from,
209
+ }));
210
+ const semanticVocabularyVisualMigrationsV1 = [
211
+ {
212
+ id: '883-dark-text-muted-hierarchy',
213
+ kind: 'visual-change',
214
+ issue: '#883',
215
+ themes: ['dark'],
216
+ reason: 'Correct the Dark text hierarchy so muted remains stronger than subtle using only existing Vellira palette values.',
217
+ from: 'semantic.text.muted',
218
+ approved: true,
219
+ approvalEvidence: semanticVocabularyVisualApproval,
220
+ },
221
+ {
222
+ id: '883-dark-text-subtle-hierarchy',
223
+ kind: 'visual-change',
224
+ issue: '#883',
225
+ themes: ['dark'],
226
+ reason: 'Correct the Dark text hierarchy so subtle remains below muted using only existing Vellira palette values.',
227
+ from: 'semantic.text.subtle',
228
+ approved: true,
229
+ approvalEvidence: semanticVocabularyVisualApproval,
230
+ },
231
+ {
232
+ id: '883-high-contrast-icons-muted-hierarchy',
233
+ kind: 'visual-change',
234
+ issue: '#883',
235
+ themes: ['high-contrast'],
236
+ reason: 'Correct the High Contrast icon hierarchy so muted remains stronger than subtle using the existing gray scale.',
237
+ from: 'semantic.icons.muted',
238
+ approved: true,
239
+ approvalEvidence: semanticVocabularyVisualApproval,
240
+ },
241
+ {
242
+ id: '883-high-contrast-icons-subtle-hierarchy',
243
+ kind: 'visual-change',
244
+ issue: '#883',
245
+ themes: ['high-contrast'],
246
+ reason: 'Correct the High Contrast icon hierarchy so subtle remains below muted using the existing gray scale.',
247
+ from: 'semantic.icons.subtle',
248
+ approved: true,
249
+ approvalEvidence: semanticVocabularyVisualApproval,
250
+ },
251
+ {
252
+ id: '883-dark-warning-ring-own-palette',
253
+ kind: 'visual-change',
254
+ issue: '#883',
255
+ themes: ['dark'],
256
+ reason: 'Correct warning.ring to use the existing warning palette instead of the unrelated error palette.',
257
+ from: 'semantic.status.warning.ring',
258
+ approved: true,
259
+ approvalEvidence: semanticVocabularyVisualApproval,
260
+ },
261
+ {
262
+ id: '883-dark-info-ring-own-palette',
263
+ kind: 'visual-change',
264
+ issue: '#883',
265
+ themes: ['dark'],
266
+ reason: 'Correct info.ring to use the existing info palette instead of the unrelated error palette.',
267
+ from: 'semantic.status.info.ring',
268
+ approved: true,
269
+ approvalEvidence: semanticVocabularyVisualApproval,
270
+ },
271
+ ];
17
272
  /**
18
273
  * Migration/test metadata only. This is not a runtime token registry.
19
274
  *
@@ -21,36 +276,147 @@ const valueKindWebFixApproval = '#881 explicitly requires correcting invalid uni
21
276
  * change, or intentionally approved visual change must be recorded here before
22
277
  * the preservation baseline is allowed to accept it.
23
278
  */
279
+ const semanticVocabularyDownstreamVisualMigrationsV1 = [
280
+ {
281
+ id: '883-dark-dropdown-separator-muted-hierarchy',
282
+ kind: 'visual-change',
283
+ issue: '#883',
284
+ themes: ['dark'],
285
+ reason: 'Dropdown separator follows the corrected Dark muted text hierarchy without introducing a new palette value.',
286
+ from: 'components.dropdown.separator.fg',
287
+ approved: true,
288
+ approvalEvidence: semanticVocabularyVisualApproval,
289
+ },
290
+ {
291
+ id: '883-dark-form-field-helper-muted-hierarchy',
292
+ kind: 'visual-change',
293
+ issue: '#883',
294
+ themes: ['dark'],
295
+ reason: 'FormField helper text follows the corrected Dark muted text hierarchy without introducing a new palette value.',
296
+ from: 'components.formField.helperText.default.fg',
297
+ approved: true,
298
+ approvalEvidence: semanticVocabularyVisualApproval,
299
+ },
300
+ {
301
+ id: '883-dark-input-readonly-placeholder-muted-hierarchy',
302
+ kind: 'visual-change',
303
+ issue: '#883',
304
+ themes: ['dark'],
305
+ reason: 'Input read-only placeholder follows the corrected Dark muted text hierarchy without introducing a new palette value.',
306
+ from: 'components.input.readOnly.placeholder',
307
+ approved: true,
308
+ approvalEvidence: semanticVocabularyVisualApproval,
309
+ },
310
+ {
311
+ id: '883-dark-modal-close-button-pressed-state',
312
+ kind: 'visual-change',
313
+ issue: '#883',
314
+ themes: ['dark'],
315
+ reason: 'Modal close-button physical press now consumes the canonical surface.pressed state instead of the persistent surface.active state.',
316
+ from: 'components.modal.closeButton.pressed.bg',
317
+ approved: true,
318
+ approvalEvidence: semanticVocabularyVisualApproval,
319
+ },
320
+ {
321
+ id: '883-high-contrast-input-clear-button-icon-hierarchy',
322
+ kind: 'visual-change',
323
+ issue: '#883',
324
+ themes: ['high-contrast'],
325
+ reason: 'Input clear-button foreground follows the corrected High Contrast muted icon hierarchy.',
326
+ from: 'components.input.clearButton.fg',
327
+ approved: true,
328
+ approvalEvidence: semanticVocabularyVisualApproval,
329
+ },
330
+ {
331
+ id: '883-high-contrast-input-muted-icon-hierarchy',
332
+ kind: 'visual-change',
333
+ issue: '#883',
334
+ themes: ['high-contrast'],
335
+ reason: 'Input muted icon follows the corrected High Contrast muted/subtle icon hierarchy.',
336
+ from: 'components.input.icon.muted',
337
+ approved: true,
338
+ approvalEvidence: semanticVocabularyVisualApproval,
339
+ },
340
+ {
341
+ id: '883-high-contrast-input-readonly-icon-hierarchy',
342
+ kind: 'visual-change',
343
+ issue: '#883',
344
+ themes: ['high-contrast'],
345
+ reason: 'Input read-only icon follows the corrected High Contrast muted icon hierarchy.',
346
+ from: 'components.input.readOnly.icon',
347
+ approved: true,
348
+ approvalEvidence: semanticVocabularyVisualApproval,
349
+ },
350
+ {
351
+ id: '883-high-contrast-input-spinner-icon-hierarchy',
352
+ kind: 'visual-change',
353
+ issue: '#883',
354
+ themes: ['high-contrast'],
355
+ reason: 'Input spinner foreground follows the corrected High Contrast muted icon hierarchy.',
356
+ from: 'components.input.spinner.fg',
357
+ approved: true,
358
+ approvalEvidence: semanticVocabularyVisualApproval,
359
+ },
360
+ {
361
+ id: '883-high-contrast-select-clear-button-icon-hierarchy',
362
+ kind: 'visual-change',
363
+ issue: '#883',
364
+ themes: ['high-contrast'],
365
+ reason: 'Select clear-button foreground follows the corrected High Contrast muted icon hierarchy.',
366
+ from: 'components.select.clearButton.fg',
367
+ approved: true,
368
+ approvalEvidence: semanticVocabularyVisualApproval,
369
+ },
370
+ ];
24
371
  export const tokenMigrationManifestV1 = [
372
+ ...stateVocabularyRenameMigrationsV1,
373
+ ...semanticVocabularyRenameMigrationsV1,
374
+ ...semanticVocabularyRemovalMigrationsV1,
375
+ ...semanticVocabularyVisualMigrationsV1,
376
+ ...semanticVocabularyDownstreamVisualMigrationsV1,
25
377
  {
26
- id: '881-modal-z-index-offset-number',
27
- kind: 'representation-change',
28
- layer: 'canonical',
29
- issue: '#881',
30
- reason: 'Remove a stringified-number workaround now that z-index/order has a canonical unitless numeric kind.',
31
- from: 'components.modal.content.zIndexOffset',
32
- equivalence: 'Canonical "1" and numeric 1 represent the same stack offset; Web serialization remains the literal value 1.',
33
- evidence: 'The value-kind serializer regression locks Web output to 1 and current first-party Modal renderers do not consume the old string representation directly.',
378
+ id: '882-radio-active-scale-remove',
379
+ kind: 'remove',
380
+ issue: '#882',
381
+ reason: 'Remove activeScale because it encoded transient physical press rather than a persistent active state.',
382
+ from: 'components.radio.motion.activeScale',
34
383
  },
35
384
  {
36
- id: '881-radio-pressed-scale-web',
385
+ id: '882-radio-pressed-scale-own-effective-press',
37
386
  kind: 'visual-change',
38
- issue: '#881',
39
- platforms: ['web'],
40
- reason: 'Correct Radio pressed scale from invalid px-suffixed transform input to the intended unitless scale.',
387
+ issue: '#882',
388
+ reason: 'Move the existing effective Radio press scale of 0.92 from misleading activeScale ownership to the canonical pressedScale token.',
41
389
  from: 'components.radio.motion.pressedScale',
42
390
  approved: true,
43
- approvalEvidence: valueKindWebFixApproval,
391
+ approvalEvidence: stateVocabularyVisualApproval,
44
392
  },
45
393
  {
46
- id: '881-radio-active-scale-web',
394
+ id: '882-input-clear-button-pressed-surface',
47
395
  kind: 'visual-change',
48
- issue: '#881',
49
- platforms: ['web'],
50
- reason: 'Correct Radio active scale from invalid px-suffixed transform input to the intended unitless scale.',
51
- from: 'components.radio.motion.activeScale',
396
+ issue: '#882',
397
+ reason: 'Map Input clear-button physical press to surface.pressed instead of the persistent/current surface.active role.',
398
+ from: 'components.input.clearButton.pressedBg',
52
399
  approved: true,
53
- approvalEvidence: valueKindWebFixApproval,
400
+ approvalEvidence: stateVocabularyVisualApproval,
401
+ },
402
+ {
403
+ id: '882-select-clear-button-pressed-surface',
404
+ kind: 'visual-change',
405
+ issue: '#882',
406
+ reason: 'Map Select clear-button physical press to surface.pressed instead of the persistent/current surface.active role.',
407
+ from: 'components.select.clearButton.pressedBg',
408
+ approved: true,
409
+ approvalEvidence: stateVocabularyVisualApproval,
410
+ },
411
+ {
412
+ id: '881-modal-z-index-offset-number',
413
+ kind: 'representation-change',
414
+ layer: 'canonical',
415
+ issue: '#881',
416
+ reason: 'Remove a stringified-number workaround now that z-index/order has a canonical unitless numeric kind.',
417
+ from: 'components.modal.content.zIndexOffset',
418
+ equivalence: 'Canonical "1" and numeric 1 represent the same stack offset; Web serialization remains the literal value 1.',
419
+ evidence: 'The value-kind serializer regression locks Web output to 1 and current first-party Modal renderers do not consume the old string representation directly.',
54
420
  },
55
421
  {
56
422
  id: '881-radio-pressed-opacity-web',
@@ -79,15 +79,129 @@ export declare const canonicalComponentNumericRoleFamilies: {
79
79
  */
80
80
  export declare function resolveTokenValueKind(tokenPath: string, value: string | number): TokenValueKind | null;
81
81
  export declare function requireTokenValueKind(tokenPath: string, value: string | number): TokenValueKind;
82
+ export declare const canonicalInteractionStates: readonly ["default", "hover", "pressed", "active", "selected", "disabled", "focus"];
83
+ export type CanonicalInteractionState = (typeof canonicalInteractionStates)[number];
84
+ /**
85
+ * Interaction-state semantics consumed by token audits, Generator V2, and agents.
86
+ * State names describe meaning, never a visual intensity level.
87
+ */
88
+ export declare const interactionStateVocabularyV1: {
89
+ readonly default: {
90
+ readonly temporality: "resting";
91
+ readonly meaning: "Resting enabled state before interaction or persistent selection.";
92
+ };
93
+ readonly hover: {
94
+ readonly temporality: "transient";
95
+ readonly meaning: "Pointer hover only; optional when the input platform has no hover capability.";
96
+ };
97
+ readonly pressed: {
98
+ readonly temporality: "transient";
99
+ readonly meaning: "Physical pointer or key activation while the interaction is held.";
100
+ };
101
+ readonly active: {
102
+ readonly temporality: "persistent-or-current";
103
+ readonly meaning: "Current or persistently active domain state; never an alias for physical press.";
104
+ };
105
+ readonly selected: {
106
+ readonly temporality: "persistent";
107
+ readonly meaning: "Chosen, checked, or selected domain state.";
108
+ };
109
+ readonly disabled: {
110
+ readonly temporality: "persistent";
111
+ readonly meaning: "Unavailable interaction state that cannot be activated.";
112
+ };
113
+ readonly focus: {
114
+ readonly temporality: "transient-or-current";
115
+ readonly meaning: "Current input focus indication, independent from hover, press, or selection.";
116
+ };
117
+ };
118
+ /**
119
+ * Domains where active is intentionally distinct from physical press.
120
+ * Patterns are architecture metadata for #890; they are not runtime selectors.
121
+ */
122
+ export declare const legitimatePersistentActiveStateDomainsV1: readonly [{
123
+ readonly pattern: "semantic.surface.active";
124
+ readonly meaning: "Generic current/active surface role distinct from surface.pressed.";
125
+ }, {
126
+ readonly pattern: "semantic.menu.item.active";
127
+ readonly meaning: "Current/highlighted menu item independent from physical press.";
128
+ }, {
129
+ readonly pattern: "semantic.menu.item.danger.active";
130
+ readonly meaning: "Current/highlighted danger menu item.";
131
+ }, {
132
+ readonly pattern: "components.contextMenu.item.active";
133
+ readonly meaning: "Current/highlighted context-menu item.";
134
+ }, {
135
+ readonly pattern: "components.dropdown.*.item.active";
136
+ readonly meaning: "Current/highlighted dropdown item independent from :active press.";
137
+ }, {
138
+ readonly pattern: "components.select.*.option.active";
139
+ readonly meaning: "Current/highlighted Select option independent from aria-selected and press.";
140
+ }, {
141
+ readonly pattern: "components.tabs.*.*.active";
142
+ readonly meaning: "Current active tab presentation; physical press is a separate interaction.";
143
+ }];
144
+ export declare const semanticVocabularyV1: {
145
+ readonly surface: {
146
+ readonly purpose: "Layer and interaction backgrounds.";
147
+ readonly roles: readonly ["canvas", "default", "subtle", "muted", "elevated", "hover", "active", "pressed", "disabled", "danger", "inverse"];
148
+ };
149
+ readonly text: {
150
+ readonly purpose: "Text foreground hierarchy and text interaction roles.";
151
+ readonly roles: readonly ["primary", "secondary", "muted", "subtle", "disabled", "brand", "interactive", "interactiveHover", "interactivePressed", "inverse"];
152
+ };
153
+ readonly icons: {
154
+ readonly purpose: "Icon foreground hierarchy; interactive roles are distinct from brand identity.";
155
+ readonly roles: readonly ["default", "secondary", "muted", "subtle", "disabled", "interactive", "brand", "interactiveHover", "success", "danger", "inverse"];
156
+ };
157
+ readonly border: {
158
+ readonly purpose: "Structural border strength plus generic interactive border emphasis.";
159
+ readonly roles: readonly ["subtle", "muted", "default", "strong", "elevated", "disabled", "interactive"];
160
+ };
161
+ readonly divider: {
162
+ readonly purpose: "Non-interactive separators.";
163
+ readonly roles: readonly ["muted", "default", "strong"];
164
+ };
165
+ readonly focus: {
166
+ readonly purpose: "Input-focus indication only; independent from hover and pressed states.";
167
+ readonly roles: readonly ["ring.color", "ring.width", "ring.shadow", "ring.offsetColor"];
168
+ };
169
+ readonly status: {
170
+ readonly purpose: "Status intent paint using explicit consumption roles.";
171
+ readonly intents: readonly ["success", "error", "warning", "info"];
172
+ readonly roles: readonly ["fg", "bg", "border", "ring", "emphasisFg"];
173
+ };
174
+ readonly action: {
175
+ readonly purpose: "Action intent palettes; accent is the cyan secondary-brand hue, neutral is non-brand action chrome.";
176
+ readonly roles: readonly ["primary", "accent", "neutral", "danger"];
177
+ readonly states: readonly ["default", "hover", "pressed", "muted", "subtle"];
178
+ };
179
+ readonly control: {
180
+ readonly purpose: "Generic form-control state paint; pressed is physical press and selected is persistent choice.";
181
+ readonly roles: readonly ["default", "hover", "pressed", "selected", "disabled", "focus"];
182
+ };
183
+ readonly menu: {
184
+ readonly purpose: "Menu-item roles where active/current is a legitimate domain state.";
185
+ readonly roles: readonly ["item", "item.danger"];
186
+ };
187
+ readonly overlay: {
188
+ readonly purpose: "Reusable overlay surfaces named by presentation purpose, not component history.";
189
+ readonly roles: readonly ["backdrop", "tooltip", "floating", "dialog"];
190
+ };
191
+ readonly shadow: {
192
+ readonly purpose: "Semantic elevation references; renderer ownership is normalized separately.";
193
+ readonly roles: readonly ["sm", "md", "lg", "xl"];
194
+ };
195
+ };
82
196
  export declare const canonicalTokenVocabulary: {
83
197
  readonly surface: readonly ["canvas", "default", "subtle", "muted", "elevated", "hover", "active", "pressed", "disabled", "danger", "inverse"];
84
- readonly state: readonly ["default", "hover", "active", "pressed", "selected", "disabled", "focus"];
85
- readonly foreground: readonly ["primary", "secondary", "muted", "subtle", "disabled", "brand", "interactive", "interactiveHover", "interactiveActive", "inverse"];
86
- readonly border: readonly ["subtle", "muted", "default", "strong", "elevated", "disabled"];
87
- readonly intent: readonly ["primary", "neutral", "success", "warning", "danger"];
198
+ readonly state: readonly ["default", "hover", "pressed", "active", "selected", "disabled", "focus"];
199
+ readonly foreground: readonly ["primary", "secondary", "muted", "subtle", "disabled", "brand", "interactive", "interactiveHover", "interactivePressed", "inverse"];
200
+ readonly border: readonly ["subtle", "muted", "default", "strong", "elevated", "disabled", "interactive"];
201
+ readonly intent: readonly ["primary", "accent", "neutral", "success", "warning", "danger"];
88
202
  readonly status: readonly ["success", "error", "warning", "info"];
89
203
  };
90
- export declare const canonicalSemanticRolePaths: readonly ["surface.canvas", "surface.default", "surface.subtle", "surface.muted", "surface.elevated", "surface.hover", "surface.active", "surface.pressed", "surface.disabled", "surface.danger", "surface.inverse", "text.primary", "text.secondary", "text.muted", "text.subtle", "text.disabled", "text.brand", "text.interactive", "text.interactiveHover", "text.interactiveActive", "text.inverse", "border.subtle", "border.muted", "border.default", "border.strong", "border.elevated", "border.disabled", "border.focus", "divider.muted", "divider.default", "divider.strong", "focus.ring.color", "focus.ring.width", "focus.ring.shadow", "focus.ring.offset", "status.success.fg", "status.success.bg", "status.success.border", "status.success.ring", "status.success.strong", "status.error.fg", "status.error.bg", "status.error.border", "status.error.ring", "status.error.strong", "status.warning.fg", "status.warning.bg", "status.warning.border", "status.warning.ring", "status.warning.strong", "status.info.fg", "status.info.bg", "status.info.border", "status.info.ring", "status.info.strong", "overlay.backdrop", "overlay.tooltip.bg", "overlay.tooltip.fg", "overlay.tooltip.border", "overlay.popover.bg", "overlay.popover.border", "overlay.modal.bg", "overlay.modal.border"];
204
+ export declare const canonicalSemanticRolePaths: readonly ["surface.canvas", "surface.default", "surface.subtle", "surface.muted", "surface.elevated", "surface.hover", "surface.active", "surface.pressed", "surface.disabled", "surface.danger", "surface.inverse", "text.primary", "text.secondary", "text.muted", "text.subtle", "text.disabled", "text.brand", "text.interactive", "text.interactiveHover", "text.interactivePressed", "text.inverse", "icons.default", "icons.secondary", "icons.muted", "icons.subtle", "icons.disabled", "icons.interactive", "icons.brand", "icons.interactiveHover", "icons.success", "icons.danger", "icons.inverse", "border.subtle", "border.muted", "border.default", "border.strong", "border.elevated", "border.disabled", "border.interactive", "divider.muted", "divider.default", "divider.strong", "focus.ring.color", "focus.ring.width", "focus.ring.shadow", "focus.ring.offsetColor", "status.success.fg", "status.success.bg", "status.success.border", "status.success.ring", "status.success.emphasisFg", "status.error.fg", "status.error.bg", "status.error.border", "status.error.ring", "status.error.emphasisFg", "status.warning.fg", "status.warning.bg", "status.warning.border", "status.warning.ring", "status.warning.emphasisFg", "status.info.fg", "status.info.bg", "status.info.border", "status.info.ring", "status.info.emphasisFg", "overlay.backdrop", "overlay.tooltip.bg", "overlay.tooltip.fg", "overlay.tooltip.border", "overlay.floating.bg", "overlay.floating.border", "overlay.dialog.bg", "overlay.dialog.border"];
91
205
  export declare const componentTokenFactoryModel: {
92
206
  readonly canonicalName: "create<Component>Tokens";
93
207
  readonly legacyPaletteName: "create<Component>Palette is retained when the component exposes intent palettes.";
@@ -1 +1 @@
1
- {"version":3,"file":"token-architecture.d.ts","sourceRoot":"","sources":["../src/token-architecture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,uBAAuB,qGAO1B,CAAC;AAEX,eAAO,MAAM,qBAAqB,EAChC,wFAAiG,CAAC;AAEpG,eAAO,MAAM,eAAe,wLAelB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBrC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qCAAqC;;;;;;;;;;CA2BqB,CAAC;AAsHxE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,cAAc,GAAG,IAAI,CAwCvB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,cAAc,CAQhB;AAED,eAAO,MAAM,wBAAwB;;;;;;;CAsC3B,CAAC;AAEX,eAAO,MAAM,0BAA0B,svCAgE7B,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;;;;CAS7B,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqG/B,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;EA+BjC,CAAC"}
1
+ {"version":3,"file":"token-architecture.d.ts","sourceRoot":"","sources":["../src/token-architecture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,uBAAuB,qGAO1B,CAAC;AAEX,eAAO,MAAM,qBAAqB,EAChC,wFAAiG,CAAC;AAEpG,eAAO,MAAM,eAAe,wLAelB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBrC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qCAAqC;;;;;;;;;;CA2BqB,CAAC;AAsHxE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,cAAc,GAAG,IAAI,CAwCvB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GACrB,cAAc,CAQhB;AAED,eAAO,MAAM,0BAA0B,qFAQ7B,CAAC;AAEX,MAAM,MAAM,yBAAyB,GACnC,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC/B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,wCAAwC;;;;;;;;;;;;;;;;;;;;;EAiC3C,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGvB,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;;CA8C3B,CAAC;AAEX,eAAO,MAAM,0BAA0B,29CA2E7B,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;;;;CAS7B,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqG/B,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;EA+BjC,CAAC"}