@vegastack/design 0.7.47 → 0.7.49

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.47",
3
+ "version": "0.7.49",
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.46",
73
+ "@vegastack/design-tokens": "^0.7.49",
74
74
  "clsx": "^2.1.1",
75
75
  "tailwind-merge": "^3.6.0",
76
76
  "tsconfig-paths": "^4.2.0",
@@ -81,9 +81,10 @@ rg -n '(focus|focus-visible|focus-within|data-focused|popup-open)[^ "]*:border-(
81
81
  tint, text entry included. A glow usually means a component was pasted from upstream's
82
82
  docs without the patch. **error**
83
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**
84
+ `focus-within:border-ring`, `data-popup-open:border-input`, `not-focus:aria-invalid:…`) in app
85
+ code. A border never changes colour on focus or while active (FOC-14) — the DS's own text-entry
86
+ components are the one exception (a subtle `border-ring/40` focus border, no fill) and carry it
87
+ themselves; only an invalid field's destructive border shows, in every state. **error**
87
88
  - a status FILL used as a text ink on that family's own tint — `bg-destructive/10 text-destructive`
88
89
  measures 3.98:1. The readable half is `text-destructive-text`. **error**
89
90
  - `text-brand` used as a label — `brand` is a 3:1 marker; labels take `text-brand-text`. **error**
@@ -380,9 +380,10 @@ contract.
380
380
 
381
381
  - Hardcode a hex, a px value, or a raw Tailwind palette class (`bg-neutral-900`, `text-red-500`).
382
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
383
+ paints a subtle background tint on focus, and no border changes colour on focus or while a popup
384
+ is open (FOC-14) — except text entry, whose DS components already darken their border subtly with
385
+ no fill; never restate that in app code. Only an invalid field's destructive border holds in every
386
+ state. `ring-3`, `ring-ring/50`, `focus-visible:ring-*`, `focus-visible:outline-*` and
386
387
  any `focus:`/`focus-within:`/`data-popup-open:` border colour are rejected by lint.
387
388
  - Leave a neutral hover on a button inside a tinted container — a status `Alert` already gives its
388
389
  buttons the family's own hover; don't override it back to `hover:bg-muted`.
@@ -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
- **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.
6
+ **131 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`) — 694 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 whose border never moves on focus (FOC-14), or a borderless ghost title field tinted on hover and focus; sm, default and lg sizes.
34
+ - **`input`** — A styled Base UI input for every text-entry type: a bordered default whose border darkens subtly on focus with no fill, or a borderless ghost title field tinted on hover; 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 background focus tint and a border that never moves (FOC-14).
49
+ - **`textarea`** — A styled native textarea that grows with its content; focus darkens its border subtly with an ease and paints no fill.
50
50
 
51
51
  ## Display
52
52
 
@@ -89,12 +89,13 @@ starts with `icon-` is a component and never an icon.
89
89
  - **`filter-bar`** — The two-row toolbar above a list or table — search (~320px) left; a Filters (n) toggle, scope Tabs and the view switch right; compact rounded-md filter chips (FilterBarFacet, DateRangeFilter with presets) on a toggled row 12px below that scrolls sideways on a phone.
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
- - **`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.
92
+ - **`media-card`** — A record as a card — an image, the title with its badge beside it, a meta line and a ⋯ menu — where the whole card is one link.
93
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.
94
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".
95
95
  - **`property-list`** — Record-facts rows: an icon+label column beside a value column, as an accessible definition list.
96
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.
97
- - **`sortable-list`** — Reorderable rows or tiles on ItemGroup/Item via use-drag-reorder — pointer drag with drop indicators, keyboard move mode, a lossless row menu, locked rows, inline actions, a grid layout, and server-refusable moves. Controlled; the host owns the order.
97
+ - **`record-list`** — A numbered list of the records a change affects — a muted record-type icon, the name with a new-tab link after it, a badge and a description line — plus a Show more footer whose next rows keep the numbering. For confirmation dialogs.
98
+ - **`sortable-list`** — Reorderable rows or tiles on ItemGroup/Item via use-drag-reorder — pointer drag with drop indicators, touch long-press, keyboard move mode, a remove button or a row menu, locked rows, a grid layout with bare tiles for attachments, and server-refusable moves. Controlled; the host owns the order.
98
99
  - **`thumbnail`** — A small rounded, cover-fit image, 32 or 48px, with a fallback for records that have no image.
99
100
  - **`view-toggle`** — The Grid | List | Board icon switch for a list page, labels hidden on a phone.
100
101
 
@@ -140,7 +141,7 @@ starts with `icon-` is a component and never an icon.
140
141
 
141
142
  - **`app-shell`** — The shared dashboard layout — a skip-linked sidebar + header + scrollable main region, composing Sidebar/SidebarTrigger into one reusable, hash-tracked shell.
142
143
  - **`aspect-ratio`** — Constrains its children to a given width-to-height ratio.
143
- - **`board`** — Kanban lanes — full-height lanes that scroll their cards inside, sticky headers with a collapse button left of the ⋯ menu, transparent lanes, + Add at each lane's foot, Nothing here / Drop here empty zones, per-lane skeletons and load-on-scroll paging; live pointer and touch drag (lift, make room, settle, edge auto-scroll), a keyboard pick-up/move/drop model, a per-card ⋯ menu of the card's own actions, optimistic moves with rollback and a toast, and one lane at a time on a phone.
144
+ - **`board`** — Kanban lanes — full-height lanes that scroll their cards inside, sticky headers with a collapse button left of the ⋯ menu, a subtle top-down fade on each lane, + Add after the last card (the empty lane's action when it has none), Nothing here / Drop here empty zones, per-lane skeletons and load-on-scroll paging; live pointer and touch drag (lift, make room, settle, edge auto-scroll), a keyboard pick-up/move/drop model, a per-card ⋯ menu of the card's own actions, optimistic moves with rollback and a toast, and one lane at a time on a phone.
144
145
  - **`direction`** — Base UI's DirectionProvider and useDirection — the text-direction context components read.
145
146
  - **`record-layout`** — A record page's main column beside a sticky right rail of cards, with an ⓘ Details sheet in its place on small screens.
146
147
  - **`resizable`** — Accessible resizable panel groups and layouts with keyboard support — horizontal or vertical, nestable, with an optional visible grip.
@@ -159,7 +160,7 @@ starts with `icon-` is a component and never an icon.
159
160
 
160
161
  ## Rich text
161
162
 
162
- - **`text-edit`** — A Tiptap-based, markdown-first rich-text editor with no toolbar and no fill: a slash menu for blocks, a bubble menu for marks and block types, GFM tables with a menu and drag grips, block drag handles, portaled menus, and one onCommit path.
163
+ - **`text-edit`** — A Tiptap-based, markdown-first rich-text editor with no toolbar and no fill — caret-only as a document, or boxed with a subtle focus border: a slash menu for blocks, a bubble menu for marks and block types, GFM tables with a menu and drag grips, block drag handles, portaled menus, and one onCommit path.
163
164
 
164
165
  ## Chat
165
166
 
@@ -182,4 +183,4 @@ starts with `icon-` is a component and never an icon.
182
183
 
183
184
  ## forms
184
185
 
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.
186
+ - **`avatar-picker`** — A person's avatar that opens a dialog to upload, change or remove their photo — the file is staged in a 128px drop circle and saved only on Update.