@vegastack/design-tokens 0.7.45 → 0.7.46

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 (2) hide show
  1. package/dist/base.css +29 -25
  2. package/package.json +1 -1
package/dist/base.css CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  FOC-1 one global :focus-visible cue; components restate nothing
8
8
  FOC-13 no focus rings anywhere, Tabs included: the cue is a background tint (MK 2026-09-25)
9
+ FOC-14 a border never changes colour on focus or while active; invalid keeps its destructive
10
+ border in every state (MK 2026-09-26)
9
11
  FOC-7 the forced-colours fallback for text entry
10
12
  MOT-5 the reduced-motion reset (and the one sanctioned !important)
11
13
  INT-1 the hand cursor, on a wider selector list than shadcn's --pointer rule
@@ -60,14 +62,20 @@
60
62
  @apply font-sans;
61
63
  }
62
64
 
63
- /* FOC-1 + FOC-13 — the SINGLE focus affordance in the system, and it is NOT a ring.
64
- No focus ring anywhere, Tabs included (MK 2026-09-25): a keyboard user sees a subtle background
65
- TINT — `accent` at 50%, laid over whatever fill the control already has as a background IMAGE,
66
- so a primary button, a chip, a row and a menu item all show it without any component
67
- restating it. Text entry (text inputs, textarea, contenteditable) keeps its border tint
68
- (FOC-3) and takes no fill. Tab triggers and panels take the same tint as everything else. Components carry no focus ring of their
69
- own (FOC-6), and `design-lint`'s `no-focus-ring-glow` rule rejects any focus ring or outline
70
- class, so one cannot creep back through a later upstream pull.
65
+ /* FOC-1 + FOC-13 + FOC-14 — the SINGLE focus affordance in the system, and it is NOT a ring and
66
+ NOT a border. No focus ring anywhere, Tabs included (MK 2026-09-25), and no border-colour change
67
+ on focus or while a control is active (MK 2026-09-26): every border keeps its resting
68
+ `border-border`/`border-input` colour in every state, and only the invalid state paints its
69
+ destructive border. A keyboard user sees a subtle background TINT — `accent` at 50%, laid over
70
+ whatever fill the control already has as a background IMAGE, so a primary button, a chip, a
71
+ row, a menu item and a text field all show it without any component restating it.
72
+ Text entry takes the same tint (FOC-3). A bare `input`/`textarea` wears it itself; a bordered
73
+ field GROUP (`data-field-group`: InputGroup, NumberField, ChipInput, the combobox chips, the
74
+ panel search row) wears it on the group, and the control inside it stands down so the two
75
+ never stack. The one caret-only surface is a contenteditable document editor (TextEdit,
76
+ `data-focus-cue="caret"`): no border, no fill, the caret is the cue. Components carry no focus
77
+ ring or focus border of their own (FOC-6); `design-lint`'s `no-focus-ring-glow` and
78
+ `no-focus-border` rules reject them, so one cannot creep back through a later upstream pull.
71
79
 
72
80
  Programmatic focus targets (`tabindex="-1"`) take no tint: AppShell's skip-link `<main>`, Base UI
73
81
  popups, a step heading focus is moved to. They are not tab stops, and each is a whole region.
@@ -79,25 +87,21 @@
79
87
  outline: none;
80
88
  }
81
89
  :focus-visible:not(
82
- textarea,
83
90
  [contenteditable="true"],
84
- input:not(
85
- [type="range"],
86
- [type="radio"],
87
- [type="checkbox"],
88
- [type="button"],
89
- [type="submit"],
90
- [type="reset"],
91
- [type="color"],
92
- [type="file"]
93
- ),
94
91
  [tabindex="-1"]:not([data-slot="combobox-chip"])
95
- ) {
92
+ ),
93
+ [data-field-group]:has(input:focus, textarea:focus):not(
94
+ [data-slot="combobox-content"] *
95
+ ) {
96
96
  background-image: linear-gradient(
97
97
  color-mix(in oklch, var(--accent) 50%, transparent),
98
98
  color-mix(in oklch, var(--accent) 50%, transparent)
99
99
  );
100
100
  }
101
+ [data-field-group] input:focus-visible,
102
+ [data-field-group] textarea:focus-visible {
103
+ background-image: none;
104
+ }
101
105
 
102
106
  /* INT-1 — the hand cursor. shadcn's `--pointer` flag writes
103
107
  `button:not(:disabled), [role="button"]:not(:disabled) { cursor: pointer }`; ours is the same
@@ -136,9 +140,9 @@
136
140
  outline-offset: 1px;
137
141
  }
138
142
 
139
- /* Text-entry focus (FOC-3). Every text-entry control signals focus with a border TINT and strips
140
- the outline, because a raw text field cannot tell mouse from keyboard. Forced colours replaces
141
- `border-color` outright, so the tint vanishes and `outline-style: none` stays in force — a
143
+ /* Text-entry focus (FOC-3). Every text-entry control signals focus with the background TINT and
144
+ strips the outline, because a raw text field cannot tell mouse from keyboard. Forced colours
145
+ drops authored backgrounds outright, so the tint vanishes and `outline-style: none` stays in force — a
142
146
  Windows High Contrast user had no caret location at all. This block is UNLAYERED on purpose:
143
147
  it beats the component's `outline-none` (a layered utility) regardless of specificity, so the
144
148
  fallback is written ONCE here, never per component.
@@ -159,8 +163,8 @@
159
163
  NumberField's stepper group, ChipInput, the Combobox input-group — clips with `overflow-hidden`
160
164
  so its addons follow the rounded corner. The inner input's own outline is offset outward INTO
161
165
  that clip, so it was drawn and then cut, which is how an addon field ended up with no visible
162
- focus at all under the forced palette. The group carries the outline (it is the element whose
163
- border the tint would have moved); the control inside it stands down, so the two never paint a
166
+ focus at all under the forced palette. The group carries the outline (it is the element that
167
+ wears the tint); the control inside it stands down, so the two never paint a
164
168
  double ring. */
165
169
  [data-field-group] input:focus,
166
170
  [data-field-group] textarea:focus {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vegastack/design-tokens",
3
- "version": "0.7.45",
3
+ "version": "0.7.46",
4
4
  "description": "VegaStack design tokens (DTCG → Tailwind v4 theme + TS)",
5
5
  "license": "MIT",
6
6
  "repository": {