@vegastack/design 0.7.45 → 0.7.47
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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vegastack/design",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.47",
|
|
4
4
|
"description": "VegaStack design system — cn utility, icon runtime, Tailwind v4 preset, and the vegastack-design CLI (tokens ship separately as @vegastack/design-tokens)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"test": "node test/compare.test.mjs && node test/check-updates.test.mjs && node test/skills-install.test.mjs && node test/doctor.test.mjs"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@vegastack/design-tokens": "^0.7.
|
|
73
|
+
"@vegastack/design-tokens": "^0.7.46",
|
|
74
74
|
"clsx": "^2.1.1",
|
|
75
75
|
"tailwind-merge": "^3.6.0",
|
|
76
76
|
"tsconfig-paths": "^4.2.0",
|
|
@@ -72,13 +72,18 @@ rg -n 'style=\{\{' --glob '!components/ui/**'
|
|
|
72
72
|
```bash
|
|
73
73
|
rg -n '#[0-9a-fA-F]{3,8}\b|\b(bg|text|border|ring|fill|stroke)-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-[0-9]{2,3}\b' --glob '!components/ui/**'
|
|
74
74
|
rg -n 'ring-3\b|ring-\[3px\]|ring-ring/[0-9]+|focus-visible:ring-|shadow-\[0_0_0_' --glob '!components/ui/**'
|
|
75
|
+
rg -n '(focus|focus-visible|focus-within|data-focused|popup-open)[^ "]*:border-(ring|primary|input|destructive|foreground)' --glob '!components/ui/**'
|
|
75
76
|
```
|
|
76
77
|
|
|
77
78
|
- a hex literal or a numbered Tailwind palette utility — use a semantic token. **error**
|
|
78
79
|
- **a focus-ring glow** — `ring-3`, `ring-[3px]`, `ring-ring/NN`, `focus-visible:ring-*` or a
|
|
79
|
-
`0 0 0` box-shadow ring. The system has ONE focus affordance,
|
|
80
|
-
text entry
|
|
80
|
+
`0 0 0` box-shadow ring. The system has ONE focus affordance, `base.css`'s global background
|
|
81
|
+
tint, text entry included. A glow usually means a component was pasted from upstream's
|
|
81
82
|
docs without the patch. **error**
|
|
83
|
+
- **a focus border** — a border colour under a focus or open-popup variant (`focus:border-ring/70`,
|
|
84
|
+
`focus-within:border-ring`, `data-popup-open:border-input`, `not-focus:aria-invalid:…`). A border
|
|
85
|
+
never changes colour on focus or while active (FOC-14); only an invalid field's destructive border
|
|
86
|
+
shows, in every state. **error**
|
|
82
87
|
- a status FILL used as a text ink on that family's own tint — `bg-destructive/10 text-destructive`
|
|
83
88
|
measures 3.98:1. The readable half is `text-destructive-text`. **error**
|
|
84
89
|
- `text-brand` used as a label — `brand` is a 3:1 marker; labels take `text-brand-text`. **error**
|
|
@@ -59,6 +59,11 @@ link` (upstream's set, verbatim). `destructive` is a soft tint, not a solid red
|
|
|
59
59
|
- **People icons are the round lucide set** — `UserRound`, `UsersRound`, `CircleUserRound` (and
|
|
60
60
|
their `-Plus`/`-Check` kin), never the square-shouldered `User`, `Users` or `CircleUser`, so a
|
|
61
61
|
person reads the same as an `Avatar` everywhere.
|
|
62
|
+
- **A person is always `PersonAvatar`** (from `person-avatar`) — the photo, else initials (one rule,
|
|
63
|
+
`personInitials`, exported from `person-avatar`) on the person's stored `hue`, else muted. Pass `hue` wherever a
|
|
64
|
+
person is (`RecordChip` `person`, `BoardCard` `assignee`, `InboxItem` `avatar`, `PropertyPerson`,
|
|
65
|
+
`SearchableSelect` `itemToAvatar`); never hand-roll `Avatar` + initials for a person, and set a
|
|
66
|
+
person's own photo with `AvatarPicker`.
|
|
62
67
|
- **Control sizes are upstream's names: `default · xs · sm · lg`**, plus
|
|
63
68
|
`icon · icon-xs · icon-sm · icon-lg` where a square tier exists. The old `md` default is gone, and
|
|
64
69
|
most of the components that are ours dropped their `size` prop entirely and take their height from
|
|
@@ -374,9 +379,11 @@ contract.
|
|
|
374
379
|
**Don't**
|
|
375
380
|
|
|
376
381
|
- Hardcode a hex, a px value, or a raw Tailwind palette class (`bg-neutral-900`, `text-red-500`).
|
|
377
|
-
- Add a focus ring, outline or
|
|
378
|
-
background tint on
|
|
379
|
-
|
|
382
|
+
- Add a focus ring, outline, glow or focus border. No focus rings anywhere, Tabs included: `base.css`
|
|
383
|
+
paints a subtle background tint on focus, text entry included, and no border changes colour on
|
|
384
|
+
focus or while a popup is open (FOC-14) — only an invalid field's destructive border, which holds
|
|
385
|
+
in every state. `ring-3`, `ring-ring/50`, `focus-visible:ring-*`, `focus-visible:outline-*` and
|
|
386
|
+
any `focus:`/`focus-within:`/`data-popup-open:` border colour are rejected by lint.
|
|
380
387
|
- Leave a neutral hover on a button inside a tinted container — a status `Alert` already gives its
|
|
381
388
|
buttons the family's own hover; don't override it back to `hover:bg-muted`.
|
|
382
389
|
- Set `outline-none` without providing another focus affordance.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<!-- GENERATED — do not hand-edit. Regenerated from the design system's component contract,
|
|
4
4
|
which is the authority for membership and counts. -->
|
|
5
5
|
|
|
6
|
-
**
|
|
6
|
+
**130 components**, plus 467 animated-icon items, 13 hooks (`use-animation-replay`, `use-announcer`, `use-async-search`, `use-drag-reorder`, `use-file-drop`, `use-inline-edit`, `use-list-nav`, `use-media-query`, `use-mobile`, `use-modal-inert`, `use-overflow`, `use-platform`, `use-tabs-swipe`), 11 starter blocks (`app-shell-01`, `board-01`, `issue-detail-01`, `command-search-01`, `list-page-01`, `login-01`, `notifications-01`, `review-split-01`, `settings-01`, `settings-02`, `status-pages-01`), 68 chart blocks across 7 families, and 4 data libs (`date-time`, `geo-data`, `emoji-data`, `drag-item`) — 693 registry items in total.
|
|
7
7
|
|
|
8
8
|
Install any of them with `shadcn add @vegastack/<name>`. Animated icons install as
|
|
9
9
|
`@vegastack/icon-<name>`; the bare name is reserved for components, so a component whose name
|
|
@@ -31,7 +31,7 @@ starts with `icon-` is a component and never an icon.
|
|
|
31
31
|
- **`editable-cell`** — Inline-editable value whose edit mode looks like view — same box, inherited type, no border — with optimistic saves, a delayed spinner, rollback plus a Retry toast on failure, required, multiline, table-cell and heading variants, and a typed text/select/custom editor registry.
|
|
32
32
|
- **`emoji-picker`** — A popover with a quick row, search, a category bar, recents and a category-grouped grid of emoji that returns the selected character via onValueChange (curated set, loaded lazily).
|
|
33
33
|
- **`field`** — The form-field scaffold — label, description, error, legend, separator and choice-card layouts.
|
|
34
|
-
- **`input`** — A styled Base UI input for every text-entry type: a bordered default
|
|
34
|
+
- **`input`** — A styled Base UI input for every text-entry type: a bordered default whose border never moves on focus (FOC-14), or a borderless ghost title field tinted on hover and focus; sm, default and lg sizes.
|
|
35
35
|
- **`input-group`** — An input or textarea with addons — icons, text, buttons, kbd hints and spinners on one surface.
|
|
36
36
|
- **`input-otp`** — A one-time-password field with per-character slots, driven by one hidden input.
|
|
37
37
|
- **`label`** — A styled native label for form controls.
|
|
@@ -46,7 +46,7 @@ starts with `icon-` is a component and never an icon.
|
|
|
46
46
|
- **`select`** — A dropdown for one value — trigger, grouped scrollable popup and item-aligned positioning.
|
|
47
47
|
- **`slider`** — A number or range over a continuous track — horizontal or vertical, any number of thumbs.
|
|
48
48
|
- **`switch`** — An on/off toggle for instant settings — two sizes and a 24px invisible hit area (A11Y-2).
|
|
49
|
-
- **`textarea`** — A styled native textarea that grows with its content, with the
|
|
49
|
+
- **`textarea`** — A styled native textarea that grows with its content, with the background focus tint and a border that never moves (FOC-14).
|
|
50
50
|
|
|
51
51
|
## Display
|
|
52
52
|
|
|
@@ -90,6 +90,7 @@ starts with `icon-` is a component and never an icon.
|
|
|
90
90
|
- **`filter-bar-managed`** — The controlled nested and/or filter builder — host-injected field grammar (vocabulary + per-type value editors), depth and condition caps, focus-managed removal, and a removable FilterChip summary.
|
|
91
91
|
- **`load-more`** — The shared Load more footer for keyset lists — an outline button that keeps its width while loading, an error line with Try again, and an optional end caption.
|
|
92
92
|
- **`media-card`** — A record as a card — an image, the title, a meta line, a badge and a ⋯ menu — where the whole card is one link.
|
|
93
|
+
- **`person-avatar`** — A person's avatar — the photo, else initials on their hue, else initials on the muted fallback — the one way every people surface draws a person.
|
|
93
94
|
- **`person-hover-card`** — Stacked avatars with a hover card per person — a compact card with a 32px avatar, with the name and muted email beside it — and the rest behind "+N".
|
|
94
95
|
- **`property-list`** — Record-facts rows: an icon+label column beside a value column, as an accessible definition list.
|
|
95
96
|
- **`record-aside`** — The cards of a record page's right rail — titled sections of inline properties, people, linked records and full-width action rows.
|
|
@@ -178,3 +179,7 @@ starts with `icon-` is a component and never an icon.
|
|
|
178
179
|
|
|
179
180
|
- **`announcement-banner`** — A dismissible one-line announcement — the full-width inverse page-top band (in-content notices use Alert variant=strip).
|
|
180
181
|
- **`terminal`** — A dark mono command block with a phosphor prompt glyph and a composed copy button.
|
|
182
|
+
|
|
183
|
+
## forms
|
|
184
|
+
|
|
185
|
+
- **`avatar-picker`** — Upload, change or remove a person's photo — a large PersonAvatar with a busy spinner, Upload/Change photo through the file picker, Remove, and a line for a refused file.
|