@vegastack/design 0.7.4 → 0.7.6

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.
@@ -70,6 +70,12 @@ var TIMINGS = {
70
70
  feedbackRevertMs: 1500,
71
71
  /** Debounce before auto-persisting a text field (AutoSaveInput). */
72
72
  autoSaveDebounceMs: 800,
73
+ /**
74
+ * Debounce before a typed search query is sent (SearchInput's settled value, FilterBar
75
+ * search, `useAsyncSearch`). Short enough to feel like type-ahead, long enough that one
76
+ * word is one request; {@link TIMINGS.autoSaveDebounceMs} is too slow for this role.
77
+ */
78
+ searchDebounceMs: 300,
73
79
  /** Hover delay before a rich preview (HoverCard) opens — guards accidental opens. */
74
80
  hoverOpenDelayMs: 700,
75
81
  /** Hover delay before a rich preview closes — lets the pointer travel into the card. */
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  cn
4
- } from "./chunk-MSOIZXDR.js";
4
+ } from "./chunk-OHGNXG5G.js";
5
5
 
6
6
  // src/icons/create-animated-icon.tsx
7
7
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "../chunk-MSOIZXDR.js";
3
+ } from "../chunk-OHGNXG5G.js";
4
4
 
5
5
  // src/icons/icon.tsx
6
6
  import "react";
package/dist/index.cjs CHANGED
@@ -99,6 +99,12 @@ var TIMINGS = {
99
99
  feedbackRevertMs: 1500,
100
100
  /** Debounce before auto-persisting a text field (AutoSaveInput). */
101
101
  autoSaveDebounceMs: 800,
102
+ /**
103
+ * Debounce before a typed search query is sent (SearchInput's settled value, FilterBar
104
+ * search, `useAsyncSearch`). Short enough to feel like type-ahead, long enough that one
105
+ * word is one request; {@link TIMINGS.autoSaveDebounceMs} is too slow for this role.
106
+ */
107
+ searchDebounceMs: 300,
102
108
  /** Hover delay before a rich preview (HoverCard) opens — guards accidental opens. */
103
109
  hoverOpenDelayMs: 700,
104
110
  /** Hover delay before a rich preview closes — lets the pointer travel into the card. */
package/dist/index.d.cts CHANGED
@@ -132,6 +132,12 @@ declare const TIMINGS: {
132
132
  readonly feedbackRevertMs: 1500;
133
133
  /** Debounce before auto-persisting a text field (AutoSaveInput). */
134
134
  readonly autoSaveDebounceMs: 800;
135
+ /**
136
+ * Debounce before a typed search query is sent (SearchInput's settled value, FilterBar
137
+ * search, `useAsyncSearch`). Short enough to feel like type-ahead, long enough that one
138
+ * word is one request; {@link TIMINGS.autoSaveDebounceMs} is too slow for this role.
139
+ */
140
+ readonly searchDebounceMs: 300;
135
141
  /** Hover delay before a rich preview (HoverCard) opens — guards accidental opens. */
136
142
  readonly hoverOpenDelayMs: 700;
137
143
  /** Hover delay before a rich preview closes — lets the pointer travel into the card. */
package/dist/index.d.ts CHANGED
@@ -132,6 +132,12 @@ declare const TIMINGS: {
132
132
  readonly feedbackRevertMs: 1500;
133
133
  /** Debounce before auto-persisting a text field (AutoSaveInput). */
134
134
  readonly autoSaveDebounceMs: 800;
135
+ /**
136
+ * Debounce before a typed search query is sent (SearchInput's settled value, FilterBar
137
+ * search, `useAsyncSearch`). Short enough to feel like type-ahead, long enough that one
138
+ * word is one request; {@link TIMINGS.autoSaveDebounceMs} is too slow for this role.
139
+ */
140
+ readonly searchDebounceMs: 300;
135
141
  /** Hover delay before a rich preview (HoverCard) opens — guards accidental opens. */
136
142
  readonly hoverOpenDelayMs: 700;
137
143
  /** Hover delay before a rich preview closes — lets the pointer travel into the card. */
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  mergeRefs,
6
6
  prose,
7
7
  proseClassName
8
- } from "./chunk-MSOIZXDR.js";
8
+ } from "./chunk-OHGNXG5G.js";
9
9
  export {
10
10
  FLOATING,
11
11
  TIMINGS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vegastack/design",
3
- "version": "0.7.4",
3
+ "version": "0.7.6",
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": {
@@ -212,11 +212,12 @@ contract.
212
212
 
213
213
  ## Composition patterns
214
214
 
215
- - **Forms are composed, not configured** — `Field` is layout and copy: `FieldLabel` bound with
216
- `htmlFor`, the control, then `FieldDescription` and `FieldError` as CHILDREN. There is no `label`,
217
- `description` or `error` prop, and no context that reaches into the control. State is written where
218
- it belongs: `aria-invalid` on the control (for assistive tech), `data-invalid` / `data-disabled` on
219
- the `Field` (for the block's styling). `FieldError` is `role="alert"`, carries a leading icon so an
215
+ - **Forms are composed, not configured** — `Field` is layout and copy: `FieldLabel`, the control,
216
+ then `FieldDescription` and `FieldError` as CHILDREN. There is no `label`, `description` or `error`
217
+ prop. `Field` wires the control through Base UI Field — the label's `for`, the description and
218
+ error ids in `aria-describedby`, and `aria-invalid` from the Field's `data-invalid` — so pass ids
219
+ only to override; an explicit `aria-*` prop on the control merges with the Field's, it does not
220
+ replace it. Write `data-invalid` / `data-disabled` on the `Field`, not by hand on the control. `FieldError` is `role="alert"`, carries a leading icon so an
220
221
  error is never colour alone, and takes either children or an `errors` array it de-duplicates.
221
222
  react-hook-form's `register` wires straight to the control; there is no `Controller` indirection.
222
223
  - **A set of related checkboxes is a `FieldSet` + `FieldLegend` + one `Field` per option** — that is
@@ -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
- **112 components**, plus 467 animated-icon items, 11 hooks (`use-animation-replay`, `use-announcer`, `use-drag-reorder`, `use-file-drop`, `use-inline-edit`, `use-list-nav`, `use-media-query`, `use-mobile`, `use-modal-inert`, `use-overflow`, `use-platform`), 4 starter blocks (`app-shell-01`, `board-01`, `login-01`, `settings-01`), 68 chart blocks across 7 families, and 2 data libs (`geo-data`, `drag-item`) — 664 registry items in total.
6
+ **114 components**, plus 467 animated-icon items, 12 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`), 7 starter blocks (`app-shell-01`, `board-01`, `login-01`, `review-split-01`, `settings-01`, `settings-02`, `status-pages-01`), 68 chart blocks across 7 families, and 2 data libs (`geo-data`, `drag-item`) — 670 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
@@ -82,8 +82,9 @@ starts with `icon-` is a component and never an icon.
82
82
  - **`data-table-parts`** — The chrome DataList and DataGrid share — sort header, selection cells, skeleton rows, the empty row, column class rules, and the selection/sort/controlled-state hooks.
83
83
  - **`filter-bar`** — A row of removable filter chips, an "Add filter" dropdown, and an optional search input — for list and table filter toolbars.
84
84
  - **`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.
85
+ - **`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.
85
86
  - **`property-list`** — Record-facts rows: an icon+label column beside a value column, as an accessible definition list.
86
- - **`sortable-list`** — Reorderable rows on ItemGroup/Item via use-drag-reorder — pointer drag with drop indicators, keyboard move mode, a lossless Move menu, and server-refusable moves. Controlled; the host owns the order.
87
+ - **`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.
87
88
 
88
89
  ## Overlay
89
90
 
@@ -126,7 +127,7 @@ starts with `icon-` is a component and never an icon.
126
127
 
127
128
  - **`app-shell`** — The shared dashboard layout — a skip-linked sidebar + header + scrollable main region, composing Sidebar/SidebarTrigger into one reusable, hash-tracked shell.
128
129
  - **`aspect-ratio`** — Constrains its children to a given width-to-height ratio.
129
- - **`board`** — Kanban columns over use-drag-reorder — content/chrome split (host renders card content only), pointer drag, keyboard move mode + roving focus, lossless per-card Move menu with lock reasons, server-refusable moves, collapsed lanes, Empty-bordered drop targets.
130
+ - **`board`** — Kanban columns over use-drag-reorder — content/chrome split (host renders card content only), pointer drag, keyboard move mode + roving focus, lossless per-card Move menu with lock reasons, server-refusable moves, named lanes with a muted total count, loading and custom empty lanes, collapsed lanes, cards as real links, Empty-bordered drop targets.
130
131
  - **`direction`** — Base UI's DirectionProvider and useDirection — the text-direction context components read.
131
132
  - **`resizable`** — Accessible resizable panel groups and layouts with keyboard support — horizontal or vertical, nestable, with an optional visible grip.
132
133
  - **`scroll-area`** — Augments native scroll functionality for custom, cross-browser styling — a viewport, an auto-hiding scrollbar, and a corner.
@@ -135,10 +136,10 @@ starts with `icon-` is a component and never an icon.
135
136
 
136
137
  ## Media
137
138
 
138
- - **`audio-player`** — A custom audio transport with play/pause, skip, seek, a tappable speed control, and keyboard shortcuts (mute on the M key); a single line on a wide player, two lines with an optional transcript control on a narrow, mobile-width player.
139
+ - **`audio-player`** — A custom audio transport with play/pause, skip, seek, a tappable speed control, and keyboard shortcuts (mute on the M key); a single line on a wide player, two lines with an optional transcript control on a narrow, mobile-width player. Docks to the bottom of a scroll column with a close, resolves a lazy source on first play, and seeks from outside through actionsRef.
139
140
  - **`image`** — A presentational framed image with aspect-ratio, rounding, a loading skeleton, and an error fallback.
140
141
  - **`media-player-controls`** — The shared media transport — play/pause, skip, seek, elapsed/duration, mute + volume, playback speed, and one keyboard shortcut map (useMediaShortcuts) — composed by Audio Player and Video Player.
141
- - **`notification-bell`** — A bell icon button with an unread-count badge overlay. Presentational — the app supplies the count.
142
+ - **`notification-bell`** — A bell icon button with an unread-count badge overlay, plus the shared NotificationDot unread marker. Presentational — the app supplies the count.
142
143
  - **`video-player`** — A framed video player with the same grouped custom transport controls as Audio Player.
143
144
 
144
145
  ## Rich text
@@ -151,12 +152,13 @@ starts with `icon-` is a component and never an icon.
151
152
 
152
153
  ## Communication
153
154
 
154
- - **`attachment`** — A file chip / thumbnail card for chat and message-compose surfaces — media slot, name + meta, idle/uploading/processing/error/done states, an actions row and a full-bleed trigger.
155
+ - **`attachment`** — A file chip / thumbnail card for chat, record-file and upload-queue surfaces — media slot, name + meta, idle/uploading/processing/error/done states, determinate progress, a muted tile, an actions row, a full-bleed trigger, and a scrolling or grid group.
155
156
  - **`bubble`** — A chat speech bubble - 7 token-driven variants (incl. brand-tinted), start/end alignment, interactive content, and a floating reactions chip.
156
157
  - **`marker`** — An inline conversation marker - status lines, system notes, and labelled dividers. 3 variants, Base UI render-polymorphic.
157
158
  - **`message`** — Layout primitives for a conversation row - avatar anchoring, content column, header/footer slots, start/end alignment. Server-safe.
158
159
  - **`message-scroller`** — An auto-scrolling conversation viewport (not virtualised) - pins to the latest message, preserves position on prepend, tracks the anchor, and a floating scroll-to-end button.
159
160
  - **`questionnaire`** — A guided one-question-at-a-time form — choices, freeform answers, skip, shortcuts, validation, resume and conditional items, built on the @shadcn/react questionnaire state machine.
161
+ - **`transcript`** — A timestamped, speaker-labelled transcript on MessageScroller's primitive - marks the line playing at currentTime, follows it, pauses on a user scroll with a Back to current line button, seeks from each timestamp, and searches with highlighted, announced matches.
160
162
 
161
163
  ## Marketing
162
164