@vellira-ui/tokens 2.98.6 → 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 (112) hide show
  1. package/dist/css/tokens.css +141 -189
  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 +1 -1
  6. package/dist/dark/components/input.js +4 -4
  7. package/dist/dark/components/modal.js +1 -1
  8. package/dist/dark/components/radio.js +1 -1
  9. package/dist/dark/components/select.js +2 -2
  10. package/dist/dark/semantic/action.d.ts +2 -2
  11. package/dist/dark/semantic/action.js +2 -2
  12. package/dist/dark/semantic/border.d.ts +1 -1
  13. package/dist/dark/semantic/border.js +1 -1
  14. package/dist/dark/semantic/control.js +1 -1
  15. package/dist/dark/semantic/focus.d.ts +1 -1
  16. package/dist/dark/semantic/focus.js +1 -1
  17. package/dist/dark/semantic/icons.d.ts +2 -2
  18. package/dist/dark/semantic/icons.js +2 -2
  19. package/dist/dark/semantic/index.d.ts +0 -1
  20. package/dist/dark/semantic/index.d.ts.map +1 -1
  21. package/dist/dark/semantic/index.js +0 -1
  22. package/dist/dark/semantic/overlay.d.ts +2 -2
  23. package/dist/dark/semantic/overlay.js +2 -2
  24. package/dist/dark/semantic/status.d.ts +6 -6
  25. package/dist/dark/semantic/status.js +6 -6
  26. package/dist/dark/semantic/surface.d.ts +0 -1
  27. package/dist/dark/semantic/surface.d.ts.map +1 -1
  28. package/dist/dark/semantic/surface.js +0 -1
  29. package/dist/dark/semantic/text.d.ts +2 -2
  30. package/dist/dark/semantic/text.js +2 -2
  31. package/dist/factories/componentFocusRing.d.ts +13 -0
  32. package/dist/factories/componentFocusRing.d.ts.map +1 -0
  33. package/dist/factories/componentFocusRing.js +6 -0
  34. package/dist/factories/createContextMenuTokens.d.ts +2 -1
  35. package/dist/factories/createContextMenuTokens.d.ts.map +1 -1
  36. package/dist/factories/createContextMenuTokens.js +3 -2
  37. package/dist/factories/createModalTokens.d.ts +3 -2
  38. package/dist/factories/createModalTokens.d.ts.map +1 -1
  39. package/dist/factories/createModalTokens.js +4 -3
  40. package/dist/factories/createPopoverTokens.d.ts +1 -1
  41. package/dist/factories/createPopoverTokens.d.ts.map +1 -1
  42. package/dist/factories/createPopoverTokens.js +2 -2
  43. package/dist/generated/token-types.d.ts +4 -4
  44. package/dist/generated/token-types.d.ts.map +1 -1
  45. package/dist/generated/token-types.js +168 -232
  46. package/dist/highContrast/components/dropdown.d.ts +8 -8
  47. package/dist/highContrast/components/dropdown.d.ts.map +1 -1
  48. package/dist/highContrast/components/dropdown.js +4 -3
  49. package/dist/highContrast/components/input.d.ts +4 -4
  50. package/dist/highContrast/components/input.js +4 -4
  51. package/dist/highContrast/components/radio.js +1 -1
  52. package/dist/highContrast/components/select.d.ts +1 -1
  53. package/dist/highContrast/components/select.js +2 -2
  54. package/dist/highContrast/semantic/action.d.ts +2 -2
  55. package/dist/highContrast/semantic/action.js +2 -2
  56. package/dist/highContrast/semantic/border.d.ts +1 -1
  57. package/dist/highContrast/semantic/border.js +1 -1
  58. package/dist/highContrast/semantic/focus.d.ts +1 -1
  59. package/dist/highContrast/semantic/focus.js +1 -1
  60. package/dist/highContrast/semantic/icons.d.ts +4 -4
  61. package/dist/highContrast/semantic/icons.js +4 -4
  62. package/dist/highContrast/semantic/index.d.ts +0 -1
  63. package/dist/highContrast/semantic/index.d.ts.map +1 -1
  64. package/dist/highContrast/semantic/index.js +0 -1
  65. package/dist/highContrast/semantic/overlay.d.ts +2 -2
  66. package/dist/highContrast/semantic/overlay.js +2 -2
  67. package/dist/highContrast/semantic/status.d.ts +4 -4
  68. package/dist/highContrast/semantic/status.js +4 -4
  69. package/dist/highContrast/semantic/surface.d.ts +0 -1
  70. package/dist/highContrast/semantic/surface.d.ts.map +1 -1
  71. package/dist/highContrast/semantic/surface.js +0 -1
  72. package/dist/light/components/dropdown.d.ts +8 -8
  73. package/dist/light/components/dropdown.d.ts.map +1 -1
  74. package/dist/light/components/dropdown.js +4 -3
  75. package/dist/light/components/input.js +4 -4
  76. package/dist/light/components/radio.js +1 -1
  77. package/dist/light/components/select.js +2 -2
  78. package/dist/light/semantic/action.d.ts +2 -2
  79. package/dist/light/semantic/action.js +2 -2
  80. package/dist/light/semantic/border.d.ts +1 -1
  81. package/dist/light/semantic/border.js +1 -1
  82. package/dist/light/semantic/focus.d.ts +1 -1
  83. package/dist/light/semantic/focus.js +1 -1
  84. package/dist/light/semantic/icons.d.ts +2 -2
  85. package/dist/light/semantic/icons.js +2 -2
  86. package/dist/light/semantic/index.d.ts +0 -1
  87. package/dist/light/semantic/index.d.ts.map +1 -1
  88. package/dist/light/semantic/index.js +0 -1
  89. package/dist/light/semantic/menu.js +1 -1
  90. package/dist/light/semantic/overlay.d.ts +2 -2
  91. package/dist/light/semantic/overlay.js +2 -2
  92. package/dist/light/semantic/status.d.ts +4 -4
  93. package/dist/light/semantic/status.js +4 -4
  94. package/dist/light/semantic/surface.d.ts +0 -1
  95. package/dist/light/semantic/surface.d.ts.map +1 -1
  96. package/dist/light/semantic/surface.js +0 -1
  97. package/dist/preservation/token-migrations.d.ts +169 -13
  98. package/dist/preservation/token-migrations.d.ts.map +1 -1
  99. package/dist/preservation/token-migrations.js +260 -30
  100. package/dist/token-architecture.d.ts +55 -9
  101. package/dist/token-architecture.d.ts.map +1 -1
  102. package/dist/token-architecture.js +126 -20
  103. package/package.json +1 -1
  104. package/dist/dark/semantic/navigation.d.ts +0 -34
  105. package/dist/dark/semantic/navigation.d.ts.map +0 -1
  106. package/dist/dark/semantic/navigation.js +0 -37
  107. package/dist/highContrast/semantic/navigation.d.ts +0 -34
  108. package/dist/highContrast/semantic/navigation.d.ts.map +0 -1
  109. package/dist/highContrast/semantic/navigation.js +0 -36
  110. package/dist/light/semantic/navigation.d.ts +0 -34
  111. package/dist/light/semantic/navigation.d.ts.map +0 -1
  112. package/dist/light/semantic/navigation.js +0 -37
@@ -15,6 +15,7 @@ export const tokenMigrationThemeNames = [
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
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.';
18
19
  const stateVocabularyRenamePairsV1 = [
19
20
  [
20
21
  'control-active-bg',
@@ -61,36 +62,6 @@ const stateVocabularyRenamePairsV1 = [
61
62
  'semantic.action.primary.active.border',
62
63
  'semantic.action.primary.pressed.border',
63
64
  ],
64
- [
65
- 'action-secondary-active-bg',
66
- 'semantic.action.secondary.active.bg',
67
- 'semantic.action.secondary.pressed.bg',
68
- ],
69
- [
70
- 'action-secondary-active-fg',
71
- 'semantic.action.secondary.active.fg',
72
- 'semantic.action.secondary.pressed.fg',
73
- ],
74
- [
75
- 'action-secondary-active-border',
76
- 'semantic.action.secondary.active.border',
77
- 'semantic.action.secondary.pressed.border',
78
- ],
79
- [
80
- 'action-close-active-bg',
81
- 'semantic.action.close.active.bg',
82
- 'semantic.action.close.pressed.bg',
83
- ],
84
- [
85
- 'action-close-active-fg',
86
- 'semantic.action.close.active.fg',
87
- 'semantic.action.close.pressed.fg',
88
- ],
89
- [
90
- 'action-close-active-border',
91
- 'semantic.action.close.active.border',
92
- 'semantic.action.close.pressed.border',
93
- ],
94
65
  [
95
66
  'action-danger-active-bg',
96
67
  'semantic.action.danger.active.bg',
@@ -135,6 +106,169 @@ const stateVocabularyRenameMigrationsV1 = stateVocabularyRenamePairsV1.flatMap((
135
106
  evidence: 'Token preservation validates the canonical/RN value-preserving rename; generated CSS checks and pinned Linux visual regression validate Web output.',
136
107
  },
137
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
+ ];
138
272
  /**
139
273
  * Migration/test metadata only. This is not a runtime token registry.
140
274
  *
@@ -142,8 +276,104 @@ const stateVocabularyRenameMigrationsV1 = stateVocabularyRenamePairsV1.flatMap((
142
276
  * change, or intentionally approved visual change must be recorded here before
143
277
  * the preservation baseline is allowed to accept it.
144
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
+ ];
145
371
  export const tokenMigrationManifestV1 = [
146
372
  ...stateVocabularyRenameMigrationsV1,
373
+ ...semanticVocabularyRenameMigrationsV1,
374
+ ...semanticVocabularyRemovalMigrationsV1,
375
+ ...semanticVocabularyVisualMigrationsV1,
376
+ ...semanticVocabularyDownstreamVisualMigrationsV1,
147
377
  {
148
378
  id: '882-radio-active-scale-remove',
149
379
  kind: 'remove',
@@ -128,12 +128,6 @@ export declare const legitimatePersistentActiveStateDomainsV1: readonly [{
128
128
  }, {
129
129
  readonly pattern: "semantic.menu.item.danger.active";
130
130
  readonly meaning: "Current/highlighted danger menu item.";
131
- }, {
132
- readonly pattern: "semantic.navigation.active";
133
- readonly meaning: "Current navigation destination.";
134
- }, {
135
- readonly pattern: "semantic.navigation.optionActive";
136
- readonly meaning: "Current/highlighted navigation option.";
137
131
  }, {
138
132
  readonly pattern: "components.contextMenu.item.active";
139
133
  readonly meaning: "Current/highlighted context-menu item.";
@@ -147,15 +141,67 @@ export declare const legitimatePersistentActiveStateDomainsV1: readonly [{
147
141
  readonly pattern: "components.tabs.*.*.active";
148
142
  readonly meaning: "Current active tab presentation; physical press is a separate interaction.";
149
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
+ };
150
196
  export declare const canonicalTokenVocabulary: {
151
197
  readonly surface: readonly ["canvas", "default", "subtle", "muted", "elevated", "hover", "active", "pressed", "disabled", "danger", "inverse"];
152
198
  readonly state: readonly ["default", "hover", "pressed", "active", "selected", "disabled", "focus"];
153
199
  readonly foreground: readonly ["primary", "secondary", "muted", "subtle", "disabled", "brand", "interactive", "interactiveHover", "interactivePressed", "inverse"];
154
- readonly border: readonly ["subtle", "muted", "default", "strong", "elevated", "disabled"];
155
- readonly intent: readonly ["primary", "neutral", "success", "warning", "danger"];
200
+ readonly border: readonly ["subtle", "muted", "default", "strong", "elevated", "disabled", "interactive"];
201
+ readonly intent: readonly ["primary", "accent", "neutral", "success", "warning", "danger"];
156
202
  readonly status: readonly ["success", "error", "warning", "info"];
157
203
  };
158
- 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", "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"];
159
205
  export declare const componentTokenFactoryModel: {
160
206
  readonly canonicalName: "create<Component>Tokens";
161
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,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;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyC3C,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;;CAsC3B,CAAC;AAEX,eAAO,MAAM,0BAA0B,uvCAgE7B,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"}
@@ -279,14 +279,6 @@ export const legitimatePersistentActiveStateDomainsV1 = [
279
279
  pattern: 'semantic.menu.item.danger.active',
280
280
  meaning: 'Current/highlighted danger menu item.',
281
281
  },
282
- {
283
- pattern: 'semantic.navigation.active',
284
- meaning: 'Current navigation destination.',
285
- },
286
- {
287
- pattern: 'semantic.navigation.optionActive',
288
- meaning: 'Current/highlighted navigation option.',
289
- },
290
282
  {
291
283
  pattern: 'components.contextMenu.item.active',
292
284
  meaning: 'Current/highlighted context-menu item.',
@@ -304,6 +296,101 @@ export const legitimatePersistentActiveStateDomainsV1 = [
304
296
  meaning: 'Current active tab presentation; physical press is a separate interaction.',
305
297
  },
306
298
  ];
299
+ export const semanticVocabularyV1 = {
300
+ surface: {
301
+ purpose: 'Layer and interaction backgrounds.',
302
+ roles: [
303
+ 'canvas',
304
+ 'default',
305
+ 'subtle',
306
+ 'muted',
307
+ 'elevated',
308
+ 'hover',
309
+ 'active',
310
+ 'pressed',
311
+ 'disabled',
312
+ 'danger',
313
+ 'inverse',
314
+ ],
315
+ },
316
+ text: {
317
+ purpose: 'Text foreground hierarchy and text interaction roles.',
318
+ roles: [
319
+ 'primary',
320
+ 'secondary',
321
+ 'muted',
322
+ 'subtle',
323
+ 'disabled',
324
+ 'brand',
325
+ 'interactive',
326
+ 'interactiveHover',
327
+ 'interactivePressed',
328
+ 'inverse',
329
+ ],
330
+ },
331
+ icons: {
332
+ purpose: 'Icon foreground hierarchy; interactive roles are distinct from brand identity.',
333
+ roles: [
334
+ 'default',
335
+ 'secondary',
336
+ 'muted',
337
+ 'subtle',
338
+ 'disabled',
339
+ 'interactive',
340
+ 'brand',
341
+ 'interactiveHover',
342
+ 'success',
343
+ 'danger',
344
+ 'inverse',
345
+ ],
346
+ },
347
+ border: {
348
+ purpose: 'Structural border strength plus generic interactive border emphasis.',
349
+ roles: [
350
+ 'subtle',
351
+ 'muted',
352
+ 'default',
353
+ 'strong',
354
+ 'elevated',
355
+ 'disabled',
356
+ 'interactive',
357
+ ],
358
+ },
359
+ divider: {
360
+ purpose: 'Non-interactive separators.',
361
+ roles: ['muted', 'default', 'strong'],
362
+ },
363
+ focus: {
364
+ purpose: 'Input-focus indication only; independent from hover and pressed states.',
365
+ roles: ['ring.color', 'ring.width', 'ring.shadow', 'ring.offsetColor'],
366
+ },
367
+ status: {
368
+ purpose: 'Status intent paint using explicit consumption roles.',
369
+ intents: ['success', 'error', 'warning', 'info'],
370
+ roles: ['fg', 'bg', 'border', 'ring', 'emphasisFg'],
371
+ },
372
+ action: {
373
+ purpose: 'Action intent palettes; accent is the cyan secondary-brand hue, neutral is non-brand action chrome.',
374
+ roles: ['primary', 'accent', 'neutral', 'danger'],
375
+ states: ['default', 'hover', 'pressed', 'muted', 'subtle'],
376
+ },
377
+ control: {
378
+ purpose: 'Generic form-control state paint; pressed is physical press and selected is persistent choice.',
379
+ roles: ['default', 'hover', 'pressed', 'selected', 'disabled', 'focus'],
380
+ },
381
+ menu: {
382
+ purpose: 'Menu-item roles where active/current is a legitimate domain state.',
383
+ roles: ['item', 'item.danger'],
384
+ },
385
+ overlay: {
386
+ purpose: 'Reusable overlay surfaces named by presentation purpose, not component history.',
387
+ roles: ['backdrop', 'tooltip', 'floating', 'dialog'],
388
+ },
389
+ shadow: {
390
+ purpose: 'Semantic elevation references; renderer ownership is normalized separately.',
391
+ roles: ['sm', 'md', 'lg', 'xl'],
392
+ },
393
+ };
307
394
  export const canonicalTokenVocabulary = {
308
395
  surface: [
309
396
  'canvas',
@@ -339,8 +426,16 @@ export const canonicalTokenVocabulary = {
339
426
  'interactivePressed',
340
427
  'inverse',
341
428
  ],
342
- border: ['subtle', 'muted', 'default', 'strong', 'elevated', 'disabled'],
343
- intent: ['primary', 'neutral', 'success', 'warning', 'danger'],
429
+ border: [
430
+ 'subtle',
431
+ 'muted',
432
+ 'default',
433
+ 'strong',
434
+ 'elevated',
435
+ 'disabled',
436
+ 'interactive',
437
+ ],
438
+ intent: ['primary', 'accent', 'neutral', 'success', 'warning', 'danger'],
344
439
  status: ['success', 'error', 'warning', 'info'],
345
440
  };
346
441
  export const canonicalSemanticRolePaths = [
@@ -365,48 +460,59 @@ export const canonicalSemanticRolePaths = [
365
460
  'text.interactiveHover',
366
461
  'text.interactivePressed',
367
462
  'text.inverse',
463
+ 'icons.default',
464
+ 'icons.secondary',
465
+ 'icons.muted',
466
+ 'icons.subtle',
467
+ 'icons.disabled',
468
+ 'icons.interactive',
469
+ 'icons.brand',
470
+ 'icons.interactiveHover',
471
+ 'icons.success',
472
+ 'icons.danger',
473
+ 'icons.inverse',
368
474
  'border.subtle',
369
475
  'border.muted',
370
476
  'border.default',
371
477
  'border.strong',
372
478
  'border.elevated',
373
479
  'border.disabled',
374
- 'border.focus',
480
+ 'border.interactive',
375
481
  'divider.muted',
376
482
  'divider.default',
377
483
  'divider.strong',
378
484
  'focus.ring.color',
379
485
  'focus.ring.width',
380
486
  'focus.ring.shadow',
381
- 'focus.ring.offset',
487
+ 'focus.ring.offsetColor',
382
488
  'status.success.fg',
383
489
  'status.success.bg',
384
490
  'status.success.border',
385
491
  'status.success.ring',
386
- 'status.success.strong',
492
+ 'status.success.emphasisFg',
387
493
  'status.error.fg',
388
494
  'status.error.bg',
389
495
  'status.error.border',
390
496
  'status.error.ring',
391
- 'status.error.strong',
497
+ 'status.error.emphasisFg',
392
498
  'status.warning.fg',
393
499
  'status.warning.bg',
394
500
  'status.warning.border',
395
501
  'status.warning.ring',
396
- 'status.warning.strong',
502
+ 'status.warning.emphasisFg',
397
503
  'status.info.fg',
398
504
  'status.info.bg',
399
505
  'status.info.border',
400
506
  'status.info.ring',
401
- 'status.info.strong',
507
+ 'status.info.emphasisFg',
402
508
  'overlay.backdrop',
403
509
  'overlay.tooltip.bg',
404
510
  'overlay.tooltip.fg',
405
511
  'overlay.tooltip.border',
406
- 'overlay.popover.bg',
407
- 'overlay.popover.border',
408
- 'overlay.modal.bg',
409
- 'overlay.modal.border',
512
+ 'overlay.floating.bg',
513
+ 'overlay.floating.border',
514
+ 'overlay.dialog.bg',
515
+ 'overlay.dialog.border',
410
516
  ];
411
517
  export const componentTokenFactoryModel = {
412
518
  canonicalName: 'create<Component>Tokens',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vellira-ui/tokens",
3
- "version": "2.98.6",
3
+ "version": "2.98.7",
4
4
  "description": "Design tokens for Vellira Design System",
5
5
  "keywords": [
6
6
  "vellira",
@@ -1,34 +0,0 @@
1
- export declare const navigation: {
2
- readonly hover: {
3
- readonly bg: "#2F2A42";
4
- readonly fg: "#F4F1FB";
5
- };
6
- readonly active: {
7
- readonly bg: "#3D3754";
8
- readonly fg: "#F4F1FB";
9
- };
10
- readonly brandHover: {
11
- readonly bg: "#2F2A42";
12
- readonly fg: "#D4CCFF";
13
- };
14
- readonly tabHover: {
15
- readonly fg: "#D4CCFF";
16
- };
17
- readonly tabFocus: {
18
- readonly ring: "#F59E0B";
19
- };
20
- readonly optionHover: {
21
- readonly bg: "#2F2A42";
22
- readonly fg: "#F4F1FB";
23
- };
24
- readonly optionActive: {
25
- readonly bg: "#3D3754";
26
- readonly fg: "#F4F1FB";
27
- };
28
- readonly triggerHover: {
29
- readonly bg: "#2F2A42";
30
- readonly fg: "#F4F1FB";
31
- };
32
- readonly border: "#3D3754";
33
- };
34
- //# sourceMappingURL=navigation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../src/dark/semantic/navigation.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCb,CAAC"}