@actioneer/ads 0.5.0 → 0.5.2

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/lib/icons.js CHANGED
@@ -1,109 +1,111 @@
1
1
  "use client";
2
- import { jsx as r } from "react/jsx-runtime";
3
- import { HugeiconsIcon as s } from "@hugeicons/react";
4
- import { Tick02Icon as a, Copy01Icon as i, File02Icon as I, Cancel01Icon as l, Upload01Icon as h, ViewOffIcon as C, ViewIcon as g, MinusSignIcon as p, PlusSignIcon as f, ArrowDown01Icon as d, Search01Icon as u, InformationCircleIcon as k, AlertCircleIcon as w, Alert02Icon as A, CheckmarkCircle02Icon as L, ArrowLeft01Icon as m, ArrowRight01Icon as S, DatabaseIcon as M, Maximize01Icon as O, Magnet01Icon as P, ArrowUp01Icon as T, ArrowUpDownIcon as U, InboxIcon as B, ArrowLeft02Icon as D, MoreHorizontalIcon as y, SparklesIcon as F, Wrench01Icon as R, CancelCircleIcon as b, Clock01Icon as x, CircleDashedIcon as H, RefreshIcon as v, Attachment01Icon as G, QuoteDownIcon as V, BrainIcon as z, Loading03Icon as E, AtIcon as W, BoltIcon as N, Table01Icon as Q, File01Icon as j, Download01Icon as q, Image01Icon as J, BracesIcon as K, MusicNote01Icon as X, Video01Icon as Y, ImageNotFound01Icon as Z, Activity01Icon as _, AiChat02Icon as $, ArrowDown02Icon as oo, ArrowRight02Icon as no, ArrowUp02Icon as co, Route01Icon as eo, BlocksIcon as to, BookOpen01Icon as ro, Calendar01Icon as so, Call02Icon as ao, CheckListIcon as io, CodeIcon as Io, ComponentIcon as lo, LinkSquare02Icon as ho, Folder01Icon as Co, FolderOpenIcon as go, DashboardSpeed01Icon as po, GitBranchIcon as fo, HashtagIcon as uo, HistoryIcon as ko, Home01Icon as wo, ImageUploadIcon as Ao, GridViewIcon as Lo, Leaf01Icon as mo, Idea01Icon as So, Link01Icon as Mo, Logout01Icon as Oo, Mail01Icon as Po, Mic01Icon as To, MicOff01Icon as Uo, MoreVerticalIcon as Bo, PaintBoardIcon as Do, SidebarLeftIcon as yo, PencilEdit02Icon as Fo, PhoneOff01Icon as Ro, PieChartIcon as bo, PlugSocketIcon as xo, RocketIcon as Ho, Settings01Icon as vo, ShapesIcon as Go, Share01Icon as Vo, StarIcon as zo, StopIcon as Eo, Target01Icon as Wo, Telescope01Icon as No, TextFontIcon as Qo, ToggleOnIcon as jo, Delete02Icon as qo, UserIcon as Jo, UserGroupIcon as Ko, ArrowUpRight01Icon as Xo } from "@hugeicons/core-free-icons";
2
+ import { jsx as s } from "react/jsx-runtime";
3
+ import { HugeiconsIcon as r } from "@hugeicons/react";
4
+ import { Tick02Icon as a, Copy01Icon as i, File02Icon as I, Cancel01Icon as l, Upload01Icon as h, ViewOffIcon as C, ViewIcon as g, MinusSignIcon as p, PlusSignIcon as f, ArrowDown01Icon as d, Search01Icon as u, InformationCircleIcon as k, AlertCircleIcon as w, Alert02Icon as A, CheckmarkCircle02Icon as L, ArrowLeft01Icon as m, ArrowRight01Icon as S, DatabaseIcon as P, Maximize01Icon as M, Magnet01Icon as O, ArrowUp01Icon as T, ArrowUpDownIcon as U, InboxIcon as y, ArrowLeft02Icon as B, MoreHorizontalIcon as D, SparklesIcon as F, Wrench01Icon as R, CancelCircleIcon as b, Clock01Icon as x, CircleDashedIcon as H, RefreshIcon as v, Attachment01Icon as G, QuoteDownIcon as V, BrainIcon as z, Loading03Icon as E, AtIcon as W, BoltIcon as N, Table01Icon as Q, File01Icon as j, Download01Icon as q, Image01Icon as J, BracesIcon as K, MusicNote01Icon as X, Video01Icon as Y, ImageNotFound01Icon as Z, Activity01Icon as _, AiChat02Icon as $, ArrowDown02Icon as oo, ArrowRight02Icon as no, ArrowUp02Icon as co, Route01Icon as eo, BlocksIcon as to, BookOpen01Icon as so, Calendar01Icon as ro, Call02Icon as ao, CheckListIcon as io, CodeIcon as Io, ComponentIcon as lo, LinkSquare02Icon as ho, Folder01Icon as Co, FolderOpenIcon as go, DashboardSpeed01Icon as po, GitBranchIcon as fo, HashtagIcon as uo, HistoryIcon as ko, Home01Icon as wo, ImageUploadIcon as Ao, GridViewIcon as Lo, Leaf01Icon as mo, Idea01Icon as So, Link01Icon as Po, Logout01Icon as Mo, Mail01Icon as Oo, Mic01Icon as To, MicOff01Icon as Uo, MoreVerticalIcon as yo, PaintBoardIcon as Bo, SidebarLeftIcon as Do, PauseIcon as Fo, PencilEdit02Icon as Ro, PhoneOff01Icon as bo, PieChartIcon as xo, PlayIcon as Ho, PlugSocketIcon as vo, RocketIcon as Go, Settings01Icon as Vo, ShapesIcon as zo, Share01Icon as Eo, StarIcon as Wo, StopIcon as No, Target01Icon as Qo, Telescope01Icon as jo, TextFontIcon as qo, ToggleOnIcon as Jo, Delete02Icon as Ko, UserIcon as Xo, UserGroupIcon as Yo, ArrowUpRight01Icon as Zo } from "@hugeicons/core-free-icons";
5
5
  function o(c, e) {
6
6
  function n(t) {
7
- return /* @__PURE__ */ r(s, { icon: c, size: "1em", ...t });
7
+ return /* @__PURE__ */ s(r, { icon: c, size: "1em", ...t });
8
8
  }
9
9
  return n.displayName = e, n;
10
10
  }
11
- const $o = o(oo, "ArrowDown"), on = o(D, "ArrowLeft"), nn = o(no, "ArrowRight"), cn = o(co, "ArrowUp"), en = o(Xo, "ArrowUpRight"), tn = o(d, "ChevronDown"), rn = o(m, "ChevronLeft"), sn = o(S, "ChevronRight"), an = o(T, "ChevronUp"), In = o(U, "SortIcon"), ln = o(ho, "ExternalLink"), hn = o(yo, "PanelLeft"), Cn = o(W, "At"), gn = o(ao, "Call"), pn = o(l, "Close"), fn = o(b, "CloseCircle"), dn = o(i, "Copy"), un = o(q, "Download"), kn = o(Oo, "LogOut"), wn = o(To, "Mic"), An = o(Uo, "MicOff"), Ln = o(Ro, "PhoneOff"), mn = o(Fo, "Pencil"), Sn = o(V, "Quote"), Mn = o(g, "Eye"), On = o(C, "EyeOff"), Pn = o(uo, "Hash"), Tn = o(Ao, "ImageUpload"), Un = o(h, "Upload"), Bn = o(Qo, "TextFont"), Dn = o(jo, "ToggleOn"), yn = o(so, "Calendar"), Fn = o(x, "Clock"), Rn = o(Io, "Code"), bn = o(Eo, "Stop"), xn = o(P, "Magnet"), Hn = o(O, "Maximize"), vn = o(p, "Minus"), Gn = o(y, "MoreHorizontal"), Vn = o(Bo, "MoreVertical"), zn = o(Mo, "Link"), En = o(f, "Plus"), Wn = o(v, "Refresh"), Nn = o(eo, "AuditTrail"), Qn = o(u, "Search"), jn = o(Vo, "Share"), qn = o(qo, "Trash"), Jn = o(a, "Check"), Kn = o(E, "Loader"), Xn = o(L, "CheckCircle"), Yn = o(k, "Info"), Zn = o(A, "Warning"), _n = o(w, "WarningCircle"), $n = o(_, "Activity"), oc = o($, "AgentChat"), nc = o(N, "Bolt"), cc = o(ro, "BookOpen"), ec = o(z, "Brain"), tc = o(io, "CheckList"), rc = o(lo, "Component"), sc = o(M, "Database"), ac = o(Q, "Table"), ic = o(j, "File"), Ic = o(I, "FileText"), lc = o(Co, "Folder"), hc = o(J, "Image"), Cc = o(Z, "ImageOff"), gc = o(X, "Music"), pc = o(Y, "Video"), fc = o(K, "Braces"), dc = o(go, "FolderOpen"), uc = o(po, "Gauge"), kc = o(fo, "GitBranch"), wc = o(ko, "HistoryClock"), Ac = o(wo, "Home"), Lc = o(to, "Blocks"), mc = o(B, "Inbox"), Sc = o(So, "Lightbulb"), Mc = o(mo, "Leaf"), Oc = o(Lo, "LayoutGrid"), Pc = o(Po, "Mail"), Tc = o(Do, "Palette"), Uc = o(bo, "PieChart"), Bc = o(xo, "Plug"), Dc = o(Ho, "Rocket"), yc = o(vo, "Settings"), Fc = o(Go, "Shapes"), Rc = o(F, "Sparkles"), bc = o(zo, "Star"), xc = o(No, "Telescope"), Hc = o(Wo, "Target"), vc = o(Jo, "User"), Gc = o(Ko, "Users"), Vc = o(G, "Paperclip"), zc = o(H, "CircleDashed"), Ec = o(R, "Wrench");
11
+ const nn = o(oo, "ArrowDown"), cn = o(B, "ArrowLeft"), en = o(no, "ArrowRight"), tn = o(co, "ArrowUp"), sn = o(Zo, "ArrowUpRight"), rn = o(d, "ChevronDown"), an = o(m, "ChevronLeft"), In = o(S, "ChevronRight"), ln = o(T, "ChevronUp"), hn = o(U, "SortIcon"), Cn = o(ho, "ExternalLink"), gn = o(Do, "PanelLeft"), pn = o(W, "At"), fn = o(ao, "Call"), dn = o(l, "Close"), un = o(b, "CloseCircle"), kn = o(i, "Copy"), wn = o(q, "Download"), An = o(Mo, "LogOut"), Ln = o(To, "Mic"), mn = o(Uo, "MicOff"), Sn = o(bo, "PhoneOff"), Pn = o(Ro, "Pencil"), Mn = o(V, "Quote"), On = o(g, "Eye"), Tn = o(C, "EyeOff"), Un = o(uo, "Hash"), yn = o(Ao, "ImageUpload"), Bn = o(h, "Upload"), Dn = o(qo, "TextFont"), Fn = o(Jo, "ToggleOn"), Rn = o(ro, "Calendar"), bn = o(x, "Clock"), xn = o(Io, "Code"), Hn = o(No, "Stop"), vn = o(O, "Magnet"), Gn = o(M, "Maximize"), Vn = o(p, "Minus"), zn = o(D, "MoreHorizontal"), En = o(yo, "MoreVertical"), Wn = o(Po, "Link"), Nn = o(f, "Plus"), Qn = o(v, "Refresh"), jn = o(eo, "AuditTrail"), qn = o(u, "Search"), Jn = o(Eo, "Share"), Kn = o(Ko, "Trash"), Xn = o(a, "Check"), Yn = o(E, "Loader"), Zn = o(L, "CheckCircle"), _n = o(k, "Info"), $n = o(A, "Warning"), oc = o(w, "WarningCircle"), nc = o(_, "Activity"), cc = o($, "AgentChat"), ec = o(N, "Bolt"), tc = o(so, "BookOpen"), sc = o(z, "Brain"), rc = o(io, "CheckList"), ac = o(lo, "Component"), ic = o(P, "Database"), Ic = o(Q, "Table"), lc = o(j, "File"), hc = o(I, "FileText"), Cc = o(Co, "Folder"), gc = o(J, "Image"), pc = o(Z, "ImageOff"), fc = o(X, "Music"), dc = o(Y, "Video"), uc = o(K, "Braces"), kc = o(go, "FolderOpen"), wc = o(po, "Gauge"), Ac = o(fo, "GitBranch"), Lc = o(ko, "HistoryClock"), mc = o(wo, "Home"), Sc = o(to, "Blocks"), Pc = o(y, "Inbox"), Mc = o(So, "Lightbulb"), Oc = o(mo, "Leaf"), Tc = o(Lo, "LayoutGrid"), Uc = o(Oo, "Mail"), yc = o(Bo, "Palette"), Bc = o(xo, "PieChart"), Dc = o(vo, "Plug"), Fc = o(Go, "Rocket"), Rc = o(Vo, "Settings"), bc = o(zo, "Shapes"), xc = o(F, "Sparkles"), Hc = o(Wo, "Star"), vc = o(jo, "Telescope"), Gc = o(Qo, "Target"), Vc = o(Xo, "User"), zc = o(Yo, "Users"), Ec = o(Ho, "Play"), Wc = o(Fo, "Pause"), Nc = o(G, "Paperclip"), Qc = o(H, "CircleDashed"), jc = o(R, "Wrench");
12
12
  export {
13
- $n as Activity,
14
- oc as AgentChat,
15
- $o as ArrowDown,
16
- on as ArrowLeft,
17
- nn as ArrowRight,
18
- cn as ArrowUp,
19
- en as ArrowUpRight,
20
- Cn as At,
21
- Nn as AuditTrail,
22
- Lc as Blocks,
23
- nc as Bolt,
24
- cc as BookOpen,
25
- fc as Braces,
26
- ec as Brain,
27
- yn as Calendar,
28
- gn as Call,
29
- Jn as Check,
30
- Xn as CheckCircle,
31
- tc as CheckList,
32
- tn as ChevronDown,
33
- rn as ChevronLeft,
34
- sn as ChevronRight,
35
- an as ChevronUp,
36
- zc as CircleDashed,
37
- Fn as Clock,
38
- pn as Close,
39
- fn as CloseCircle,
40
- Rn as Code,
41
- rc as Component,
42
- dn as Copy,
43
- sc as Database,
44
- un as Download,
45
- ln as ExternalLink,
46
- Mn as Eye,
47
- On as EyeOff,
48
- ic as File,
49
- Ic as FileText,
50
- lc as Folder,
51
- dc as FolderOpen,
52
- uc as Gauge,
53
- kc as GitBranch,
54
- Pn as Hash,
55
- wc as HistoryClock,
56
- Ac as Home,
57
- hc as Image,
58
- Cc as ImageOff,
59
- Tn as ImageUpload,
60
- mc as Inbox,
61
- Yn as Info,
62
- Oc as LayoutGrid,
63
- Mc as Leaf,
64
- Sc as Lightbulb,
65
- zn as Link,
66
- Kn as Loader,
67
- kn as LogOut,
68
- xn as Magnet,
69
- Pc as Mail,
70
- Hn as Maximize,
71
- wn as Mic,
72
- An as MicOff,
73
- vn as Minus,
74
- Gn as MoreHorizontal,
75
- Vn as MoreVertical,
76
- gc as Music,
77
- Tc as Palette,
78
- hn as PanelLeft,
79
- Vc as Paperclip,
80
- mn as Pencil,
81
- Ln as PhoneOff,
82
- Uc as PieChart,
83
- Bc as Plug,
84
- En as Plus,
85
- Sn as Quote,
86
- Wn as Refresh,
87
- Dc as Rocket,
88
- Qn as Search,
89
- yc as Settings,
90
- Fc as Shapes,
91
- jn as Share,
92
- In as SortIcon,
93
- Rc as Sparkles,
94
- bc as Star,
95
- bn as Stop,
96
- ac as Table,
97
- Hc as Target,
98
- xc as Telescope,
99
- Bn as TextFont,
100
- Dn as ToggleOn,
101
- qn as Trash,
102
- Un as Upload,
103
- vc as User,
104
- Gc as Users,
105
- pc as Video,
106
- Zn as Warning,
107
- _n as WarningCircle,
108
- Ec as Wrench
13
+ nc as Activity,
14
+ cc as AgentChat,
15
+ nn as ArrowDown,
16
+ cn as ArrowLeft,
17
+ en as ArrowRight,
18
+ tn as ArrowUp,
19
+ sn as ArrowUpRight,
20
+ pn as At,
21
+ jn as AuditTrail,
22
+ Sc as Blocks,
23
+ ec as Bolt,
24
+ tc as BookOpen,
25
+ uc as Braces,
26
+ sc as Brain,
27
+ Rn as Calendar,
28
+ fn as Call,
29
+ Xn as Check,
30
+ Zn as CheckCircle,
31
+ rc as CheckList,
32
+ rn as ChevronDown,
33
+ an as ChevronLeft,
34
+ In as ChevronRight,
35
+ ln as ChevronUp,
36
+ Qc as CircleDashed,
37
+ bn as Clock,
38
+ dn as Close,
39
+ un as CloseCircle,
40
+ xn as Code,
41
+ ac as Component,
42
+ kn as Copy,
43
+ ic as Database,
44
+ wn as Download,
45
+ Cn as ExternalLink,
46
+ On as Eye,
47
+ Tn as EyeOff,
48
+ lc as File,
49
+ hc as FileText,
50
+ Cc as Folder,
51
+ kc as FolderOpen,
52
+ wc as Gauge,
53
+ Ac as GitBranch,
54
+ Un as Hash,
55
+ Lc as HistoryClock,
56
+ mc as Home,
57
+ gc as Image,
58
+ pc as ImageOff,
59
+ yn as ImageUpload,
60
+ Pc as Inbox,
61
+ _n as Info,
62
+ Tc as LayoutGrid,
63
+ Oc as Leaf,
64
+ Mc as Lightbulb,
65
+ Wn as Link,
66
+ Yn as Loader,
67
+ An as LogOut,
68
+ vn as Magnet,
69
+ Uc as Mail,
70
+ Gn as Maximize,
71
+ Ln as Mic,
72
+ mn as MicOff,
73
+ Vn as Minus,
74
+ zn as MoreHorizontal,
75
+ En as MoreVertical,
76
+ fc as Music,
77
+ yc as Palette,
78
+ gn as PanelLeft,
79
+ Nc as Paperclip,
80
+ Wc as Pause,
81
+ Pn as Pencil,
82
+ Sn as PhoneOff,
83
+ Bc as PieChart,
84
+ Ec as Play,
85
+ Dc as Plug,
86
+ Nn as Plus,
87
+ Mn as Quote,
88
+ Qn as Refresh,
89
+ Fc as Rocket,
90
+ qn as Search,
91
+ Rc as Settings,
92
+ bc as Shapes,
93
+ Jn as Share,
94
+ hn as SortIcon,
95
+ xc as Sparkles,
96
+ Hc as Star,
97
+ Hn as Stop,
98
+ Ic as Table,
99
+ Gc as Target,
100
+ vc as Telescope,
101
+ Dn as TextFont,
102
+ Fn as ToggleOn,
103
+ Kn as Trash,
104
+ Bn as Upload,
105
+ Vc as User,
106
+ zc as Users,
107
+ dc as Video,
108
+ $n as Warning,
109
+ oc as WarningCircle,
110
+ jc as Wrench
109
111
  };
package/llms.txt CHANGED
@@ -57,7 +57,7 @@ The house rules for every ADS UI. `[lint]` = `@actioneer/ads-lint` auto-checks i
57
57
  Delineate SURFACES (cards, panels, sidebars, page regions) with color contrast, elevation, and spacing — not borders. Aim for ~75% shadow/fill, 25% strokes: form controls and floating menus keep a subtle border so they read as interactive; surfaces do not.
58
58
 
59
59
  - Do: Separate regions by fill color first: bg-background → bg-surface → bg-card/bg-elevated → bg-muted.
60
- - Do: Keep a subtle border-input/border-border on form controls (input, select, textarea, checkbox, radio, segmented-control track) and floating menus (dropdown, popover, listboxes).
60
+ - Do: Use border-border for outline buttons and lightweight action rows; reserve border-input for form controls (input, select, textarea, checkbox, radio, segmented-control track) and floating menus (dropdown, popover, listboxes).
61
61
  - Do: Keep strokes on focus rings, the outline Button/Badge/Chip variants, Kbd, Divider, the Tree connector rail, and functional color swatches.
62
62
  - Don't: Add a border to a surface to separate or group it — use fill/elevation/spacing instead.
63
63
  - Don't: Give a filled control no stroke on the tinted canvas — it disappears; it needs a crisp edge.
@@ -167,6 +167,7 @@ When tabs and a search field control the same content, they share one responsive
167
167
 
168
168
  ### Foundations
169
169
 
170
+ - [AudioWaveform] — component [docs](https://ads.actioneer.dev/#/audio-waveform)
170
171
  - [Button] — Use Button for any pressable action — a primary CTA, secondary action, or icon-only control — choosing variant by emphasis and size by context. (variants: variant: solid|secondary|outline|ghost|soft|link|danger; size: xs|sm|md|lg|icon|icon-sm|icon-xs) [docs](https://ads.actioneer.dev/#/button)
171
172
  - [Code] — Use inline within a Text/paragraph to mark a literal token — a command, filename, variable, or short snippet — never as a block-level code display. [docs](https://ads.actioneer.dev/#/typography)
172
173
  - [CodeBlock] — Show a snippet that owns its own line — a query, config, or tool payload — with an optional filename/language header and copy control; use the inline Code for a token inside a sentence. (variants: variant: soft|plain) [docs](https://ads.actioneer.dev/#/code-block)
@@ -189,6 +190,7 @@ When tabs and a search field control the same content, they share one responsive
189
190
  - [Spinner] — Use for an indeterminate loading state (e.g. inside a Button's isLoading, or standalone while content is fetching) — not for measurable/determinate progress. (variants: size: sm|md|lg; color: current|primary|muted) [docs](https://ads.actioneer.dev/#/spinner)
190
191
  - [Stepper] — component (variants: status: complete|current|upcoming|error; size: sm|md) [docs](https://ads.actioneer.dev/#/review/stepper)
191
192
  - [Text] — Use Text for any body copy, caption, or inline run of prose instead of a raw p/span tag. [docs](https://ads.actioneer.dev/#/typography)
193
+ - [AudioWaveformProps] — TypeScript type
192
194
  - [ButtonProps] — TypeScript type
193
195
  - [CodeBlockProps] — TypeScript type
194
196
  - [DividerProps] — TypeScript type
@@ -252,7 +254,7 @@ When tabs and a search field control the same content, they share one responsive
252
254
  ### Overlays
253
255
 
254
256
  - [CommandPalette] — component [docs](https://ads.actioneer.dev/#/command-palette)
255
- - [Drawer] — Use the portaled Drawer for a focused, blocking task (form, details, settings) that slides in over the page with a backdrop and focus trap; use InlineDrawer instead for a contextual panel that must stay in-flow beside content the user still needs. The inline Drawer is a flat white panel (bg-card, no shadow, no border) that reads ONLY by fill contrast, so it MUST sit as a sibling of its content inside a bg-surface flex row — on a white (bg-background) parent it is invisible. If it doesn't read, tint the ground; never add a border or shadow to force it. (variants: side: right|left|bottom; size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/drawer)
257
+ - [Drawer] — Use the portaled Drawer for a focused, blocking task (form, details, settings) that slides in over the page with a backdrop and focus trap; use InlineDrawer instead for a contextual panel that must stay in-flow beside content the user still needs. The inline Drawer is a flat white panel (bg-card, no shadow, no border) that reads ONLY by fill contrast, so it MUST sit as a sibling of its content inside a bg-surface flex row — on a white (bg-background) parent it is invisible. If it doesn't read, tint the ground; never add a border or shadow to force it. SELECTION-DRIVEN DETAIL RAILS (inspector/detail panels tied to a selected row, node, or category) are CLOSED BY DEFAULT: the slot mounts only while a selection exists and unmounts on deselect. Never render a placeholder rail ('Select a row to see details') — an empty rail is chrome that claims space and implies a selection the user hasn't made. Header anatomy when open: uppercase kicker (what kind of thing is selected) + title + close affordance, then a scrollable body. Never hand-roll the panel with translate-x + backdrop — that's this component. (variants: side: right|left|bottom; size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/drawer)
256
258
  - [DrawerBody] — component (variants: side: right|left|bottom; size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/drawer)
257
259
  - [DrawerFooter] — component (variants: side: right|left|bottom; size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/drawer)
258
260
  - [DrawerHeader] — component (variants: side: right|left|bottom; size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/drawer)
@@ -343,7 +345,7 @@ When tabs and a search field control the same content, they share one responsive
343
345
  - [ScatterChart] — component [docs](https://ads.actioneer.dev/#/ai/chart)
344
346
  - [StatusAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
345
347
  - [Tab] — component (variants: variant: primary|secondary; orientation: horizontal|vertical; size: sm|md|lg; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
346
- - [Table] — Use Table for structured tabular data that may need row selection, column sorting, sticky columns, or a paginated footer — not for simple key-value lists. [docs](https://ads.actioneer.dev/#/table)
348
+ - [Table] — Use Table for structured tabular data that may need row selection, column sorting, sticky columns, or a paginated footer — not for simple key-value lists. Interactive rows inherit the shared soft neutral hover/focus sink and keep their normal table geometry; do not add a brand tint or hover-only corner rounding. Primary record links stay text-only in every state: never reveal an arrow, chevron, or other directional icon only on hover. Persistent row actions use a final sticky-right column plus elevatedActionColumn so one body-column shadow lifts the action surface instead of repeating on individual cells. The empty matching header cell remains transparent and non-sticky. [docs](https://ads.actioneer.dev/#/table)
347
349
  - [TableBody] — component [docs](https://ads.actioneer.dev/#/table)
348
350
  - [TableCell] — component [docs](https://ads.actioneer.dev/#/table)
349
351
  - [TableColumn] — component [docs](https://ads.actioneer.dev/#/table)
@@ -498,7 +500,7 @@ When tabs and a search field control the same content, they share one responsive
498
500
  ### Navigation
499
501
 
500
502
  - [BreadcrumbItem] — component [docs](https://ads.actioneer.dev/#/breadcrumbs)
501
- - [Breadcrumbs] — Use to show a page's location in a hierarchy as a trail of parent links ending in the current page. [docs](https://ads.actioneer.dev/#/breadcrumbs)
503
+ - [Breadcrumbs] — Use to show a page's location in a hierarchy as a trail of parent links ending in the current page. Keep item labels text-only; the component supplies right-chevron separators. Each drill-down level gets a full-width 48px bar with a subtle bottom stroke. [docs](https://ads.actioneer.dev/#/breadcrumbs)
502
504
  - [Navbar] — Use for a sticky top-of-page nav shell with a brand slot, justified link/action groups, and active-state item links. (variants: justify: start|center|end) [docs](https://ads.actioneer.dev/#/navbar)
503
505
  - [NavbarBrand] — component (variants: justify: start|center|end) [docs](https://ads.actioneer.dev/#/navbar)
504
506
  - [NavbarContent] — component (variants: justify: start|center|end) [docs](https://ads.actioneer.dev/#/navbar)
@@ -623,6 +625,7 @@ When tabs and a search field control the same content, they share one responsive
623
625
  - [ToolHeader] — component [docs](https://ads.actioneer.dev/#/ai/tool)
624
626
  - [ToolInput] — component [docs](https://ads.actioneer.dev/#/ai/tool)
625
627
  - [ToolOutput] — component [docs](https://ads.actioneer.dev/#/ai/tool)
628
+ - [Transcript] — component [docs](https://ads.actioneer.dev/#/ai/transcript)
626
629
  - [Voice] — component [docs](https://ads.actioneer.dev/#/ai/voice)
627
630
  - [VoiceConnectButton] — component [docs](https://ads.actioneer.dev/#/ai/voice)
628
631
  - [VoiceControl] — component [docs](https://ads.actioneer.dev/#/ai/voice)
@@ -720,6 +723,9 @@ When tabs and a search field control the same content, they share one responsive
720
723
  - [ToolOutputProps] — TypeScript type
721
724
  - [ToolProps] — TypeScript type
722
725
  - [ToolState] — TypeScript type
726
+ - [TranscriptProps] — TypeScript type
727
+ - [TranscriptTone] — TypeScript type
728
+ - [TranscriptTurn] — TypeScript type
723
729
  - [VoiceConnectButtonProps] — TypeScript type
724
730
  - [VoiceControlProps] — TypeScript type
725
731
  - [VoiceDisconnectButtonProps] — TypeScript type
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actioneer/ads",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "importPath": "@actioneer/ads",
5
5
  "styleImport": "@import \"@actioneer/ads/styles.css\";",
6
6
  "families": [
@@ -16,9 +16,9 @@
16
16
  "Chat"
17
17
  ],
18
18
  "counts": {
19
- "total": 678,
20
- "component": 327,
21
- "type": 288,
19
+ "total": 684,
20
+ "component": 329,
21
+ "type": 292,
22
22
  "hook": 10,
23
23
  "util": 53
24
24
  },
@@ -362,6 +362,24 @@
362
362
  "importPath": "@actioneer/ads",
363
363
  "module": "interactive"
364
364
  },
365
+ {
366
+ "name": "AudioWaveform",
367
+ "family": "Foundations",
368
+ "kind": "component",
369
+ "importPath": "@actioneer/ads",
370
+ "module": "audio-waveform",
371
+ "showcaseUrl": "https://ads.actioneer.dev/#/audio-waveform",
372
+ "props": [
373
+ "src",
374
+ "durationSeconds",
375
+ "contentType",
376
+ "channels",
377
+ "topLabel",
378
+ "bottomLabel",
379
+ "downloadName",
380
+ "className"
381
+ ]
382
+ },
365
383
  {
366
384
  "name": "Button",
367
385
  "family": "Foundations",
@@ -756,6 +774,13 @@
756
774
  "as"
757
775
  ]
758
776
  },
777
+ {
778
+ "name": "AudioWaveformProps",
779
+ "family": "Foundations",
780
+ "kind": "type",
781
+ "importPath": "@actioneer/ads",
782
+ "module": "audio-waveform"
783
+ },
759
784
  {
760
785
  "name": "ButtonProps",
761
786
  "family": "Foundations",
@@ -1318,7 +1343,7 @@
1318
1343
  "kind": "component",
1319
1344
  "importPath": "@actioneer/ads",
1320
1345
  "module": "drawer",
1321
- "description": "Use the portaled Drawer for a focused, blocking task (form, details, settings) that slides in over the page with a backdrop and focus trap; use InlineDrawer instead for a contextual panel that must stay in-flow beside content the user still needs. The inline Drawer is a flat white panel (bg-card, no shadow, no border) that reads ONLY by fill contrast, so it MUST sit as a sibling of its content inside a bg-surface flex row — on a white (bg-background) parent it is invisible. If it doesn't read, tint the ground; never add a border or shadow to force it.",
1346
+ "description": "Use the portaled Drawer for a focused, blocking task (form, details, settings) that slides in over the page with a backdrop and focus trap; use InlineDrawer instead for a contextual panel that must stay in-flow beside content the user still needs. The inline Drawer is a flat white panel (bg-card, no shadow, no border) that reads ONLY by fill contrast, so it MUST sit as a sibling of its content inside a bg-surface flex row — on a white (bg-background) parent it is invisible. If it doesn't read, tint the ground; never add a border or shadow to force it. SELECTION-DRIVEN DETAIL RAILS (inspector/detail panels tied to a selected row, node, or category) are CLOSED BY DEFAULT: the slot mounts only while a selection exists and unmounts on deselect. Never render a placeholder rail ('Select a row to see details') — an empty rail is chrome that claims space and implies a selection the user hasn't made. Header anatomy when open: uppercase kicker (what kind of thing is selected) + title + close affordance, then a scrollable body. Never hand-roll the panel with translate-x + backdrop — that's this component.",
1322
1347
  "showcaseUrl": "https://ads.actioneer.dev/#/drawer",
1323
1348
  "variants": {
1324
1349
  "side": {
@@ -2600,7 +2625,7 @@
2600
2625
  "kind": "component",
2601
2626
  "importPath": "@actioneer/ads",
2602
2627
  "module": "table",
2603
- "description": "Use Table for structured tabular data that may need row selection, column sorting, sticky columns, or a paginated footer — not for simple key-value lists.",
2628
+ "description": "Use Table for structured tabular data that may need row selection, column sorting, sticky columns, or a paginated footer — not for simple key-value lists. Interactive rows inherit the shared soft neutral hover/focus sink and keep their normal table geometry; do not add a brand tint or hover-only corner rounding. Primary record links stay text-only in every state: never reveal an arrow, chevron, or other directional icon only on hover. Persistent row actions use a final sticky-right column plus elevatedActionColumn so one body-column shadow lifts the action surface instead of repeating on individual cells. The empty matching header cell remains transparent and non-sticky.",
2604
2629
  "showcaseUrl": "https://ads.actioneer.dev/#/table",
2605
2630
  "props": [
2606
2631
  "wrapperClassName",
@@ -2609,6 +2634,8 @@
2609
2634
  "selectedKeys",
2610
2635
  "onSelectionChange",
2611
2636
  "rowKeys",
2637
+ "elevatedActionColumn",
2638
+ "actionColumnWidth",
2612
2639
  "sortDescriptor",
2613
2640
  "onSortChange"
2614
2641
  ]
@@ -3986,7 +4013,7 @@
3986
4013
  "kind": "component",
3987
4014
  "importPath": "@actioneer/ads",
3988
4015
  "module": "breadcrumbs",
3989
- "description": "Use to show a page's location in a hierarchy as a trail of parent links ending in the current page.",
4016
+ "description": "Use to show a page's location in a hierarchy as a trail of parent links ending in the current page. Keep item labels text-only; the component supplies right-chevron separators. Each drill-down level gets a full-width 48px bar with a subtle bottom stroke.",
3990
4017
  "showcaseUrl": "https://ads.actioneer.dev/#/breadcrumbs"
3991
4018
  },
3992
4019
  {
@@ -5399,6 +5426,20 @@
5399
5426
  "module": "tool",
5400
5427
  "showcaseUrl": "https://ads.actioneer.dev/#/ai/tool"
5401
5428
  },
5429
+ {
5430
+ "name": "Transcript",
5431
+ "family": "AI Elements",
5432
+ "kind": "component",
5433
+ "importPath": "@actioneer/ads",
5434
+ "module": "transcript",
5435
+ "showcaseUrl": "https://ads.actioneer.dev/#/ai/transcript",
5436
+ "props": [
5437
+ "turns",
5438
+ "agentLabel",
5439
+ "userLabel",
5440
+ "emptyMessage"
5441
+ ]
5442
+ },
5402
5443
  {
5403
5444
  "name": "Voice",
5404
5445
  "family": "AI Elements",
@@ -6124,6 +6165,27 @@
6124
6165
  "importPath": "@actioneer/ads",
6125
6166
  "module": "tool"
6126
6167
  },
6168
+ {
6169
+ "name": "TranscriptProps",
6170
+ "family": "AI Elements",
6171
+ "kind": "type",
6172
+ "importPath": "@actioneer/ads",
6173
+ "module": "transcript"
6174
+ },
6175
+ {
6176
+ "name": "TranscriptTone",
6177
+ "family": "AI Elements",
6178
+ "kind": "type",
6179
+ "importPath": "@actioneer/ads",
6180
+ "module": "transcript"
6181
+ },
6182
+ {
6183
+ "name": "TranscriptTurn",
6184
+ "family": "AI Elements",
6185
+ "kind": "type",
6186
+ "importPath": "@actioneer/ads",
6187
+ "module": "transcript"
6188
+ },
6127
6189
  {
6128
6190
  "name": "VoiceConnectButtonProps",
6129
6191
  "family": "AI Elements",
@@ -7462,7 +7524,7 @@
7462
7524
  "rule": "Delineate SURFACES (cards, panels, sidebars, page regions) with color contrast, elevation, and spacing — not borders. Aim for ~75% shadow/fill, 25% strokes: form controls and floating menus keep a subtle border so they read as interactive; surfaces do not.",
7463
7525
  "do": [
7464
7526
  "Separate regions by fill color first: bg-background → bg-surface → bg-card/bg-elevated → bg-muted.",
7465
- "Keep a subtle border-input/border-border on form controls (input, select, textarea, checkbox, radio, segmented-control track) and floating menus (dropdown, popover, listboxes).",
7527
+ "Use border-border for outline buttons and lightweight action rows; reserve border-input for form controls (input, select, textarea, checkbox, radio, segmented-control track) and floating menus (dropdown, popover, listboxes).",
7466
7528
  "Keep strokes on focus rings, the outline Button/Badge/Chip variants, Kbd, Divider, the Tree connector rail, and functional color swatches."
7467
7529
  ],
7468
7530
  "dont": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actioneer/ads",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Actioneer Design System 1.0 — React 19 + Tailwind v4 component library.",
5
5
  "type": "module",
6
6
  "sideEffects": [
package/styles.css CHANGED
@@ -296,16 +296,28 @@
296
296
  --color-overlay: var(--overlay);
297
297
 
298
298
  /*
299
- * shadcn-compat aliases — consumed ONLY by the vendored chat components
300
- * (src/components/ui, src/components/assistant-ui). ADS UI never uses
301
- * these; they map shadcn's expected roles onto ADS tokens.
299
+ * shadcn-compat aliases — map shadcn's expected color roles onto ADS tokens.
300
+ * ADS's own UI never uses these; they exist for the vendored chat components
301
+ * (src/components/ui, src/components/assistant-ui) AND for downstream shadcn
302
+ * consumers, so a shadcn Sidebar/Popover picks up the ADS palette instead of
303
+ * shadcn's grey/black defaults. The raw --sidebar-*/--popover values live in
304
+ * :root below.
302
305
  */
303
306
  --color-primary-foreground: var(--brand-foreground);
304
307
  --color-secondary-foreground: #ffffff;
305
308
  --color-destructive: var(--color-danger-600);
306
309
  --color-destructive-foreground: #ffffff;
307
- --color-popover: var(--elevated);
308
- --color-popover-foreground: var(--foreground);
310
+ --color-popover: var(--popover);
311
+ --color-popover-foreground: var(--popover-foreground);
312
+
313
+ --color-sidebar: var(--sidebar);
314
+ --color-sidebar-foreground: var(--sidebar-foreground);
315
+ --color-sidebar-primary: var(--sidebar-primary);
316
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
317
+ --color-sidebar-accent: var(--sidebar-accent);
318
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
319
+ --color-sidebar-border: var(--sidebar-border);
320
+ --color-sidebar-ring: var(--sidebar-ring);
309
321
  }
310
322
 
311
323
  /* ---- Theme (light only) ---- */
@@ -333,6 +345,12 @@
333
345
  --brand-foreground: #ffffff;
334
346
  --brand-hover: #2c5724;
335
347
 
348
+ /* Table interaction fills are pre-composited and opaque. Sticky edge cells
349
+ therefore cover horizontally scrolled content while preserving the
350
+ original quiet bg-card/40-over-muted row hover. */
351
+ --table-row-hover: color-mix(in srgb, var(--card) 40%, var(--muted));
352
+ --table-row-selected: color-mix(in srgb, var(--card) 10%, var(--muted));
353
+
336
354
  /* Quiet fill */
337
355
  --fill: #e7e7e1;
338
356
  --fill-foreground: #1a1a17;
@@ -345,6 +363,22 @@
345
363
  --input: #c7c6be;
346
364
  --ring: rgb(63 122 52 / 0.5);
347
365
  --overlay: rgb(26 26 23 / 0.5);
366
+
367
+ /* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
368
+ (or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
369
+ palette instead of shadcn's grey/black defaults. The sidebar reads as the
370
+ warm greige canvas; its active item takes Sage. A consumer that had
371
+ hard-coded these can now delete its overrides and inherit from here. */
372
+ --sidebar: var(--surface);
373
+ --sidebar-foreground: var(--foreground);
374
+ --sidebar-primary: var(--brand);
375
+ --sidebar-primary-foreground: var(--brand-foreground);
376
+ --sidebar-accent: var(--muted);
377
+ --sidebar-accent-foreground: var(--foreground);
378
+ --sidebar-border: var(--border);
379
+ --sidebar-ring: var(--ring);
380
+ --popover: var(--elevated);
381
+ --popover-foreground: var(--foreground);
348
382
  }
349
383
  /* ---- Base, keyframes & component helpers ---- */
350
384
  /* Hide scrollbars app-wide but keep scrollability. The demo UI is filled
package/theme.css CHANGED
@@ -269,16 +269,28 @@
269
269
  --color-overlay: var(--overlay);
270
270
 
271
271
  /*
272
- * shadcn-compat aliases — consumed ONLY by the vendored chat components
273
- * (src/components/ui, src/components/assistant-ui). ADS UI never uses
274
- * these; they map shadcn's expected roles onto ADS tokens.
272
+ * shadcn-compat aliases — map shadcn's expected color roles onto ADS tokens.
273
+ * ADS's own UI never uses these; they exist for the vendored chat components
274
+ * (src/components/ui, src/components/assistant-ui) AND for downstream shadcn
275
+ * consumers, so a shadcn Sidebar/Popover picks up the ADS palette instead of
276
+ * shadcn's grey/black defaults. The raw --sidebar-*/--popover values live in
277
+ * :root below.
275
278
  */
276
279
  --color-primary-foreground: var(--brand-foreground);
277
280
  --color-secondary-foreground: #ffffff;
278
281
  --color-destructive: var(--color-danger-600);
279
282
  --color-destructive-foreground: #ffffff;
280
- --color-popover: var(--elevated);
281
- --color-popover-foreground: var(--foreground);
283
+ --color-popover: var(--popover);
284
+ --color-popover-foreground: var(--popover-foreground);
285
+
286
+ --color-sidebar: var(--sidebar);
287
+ --color-sidebar-foreground: var(--sidebar-foreground);
288
+ --color-sidebar-primary: var(--sidebar-primary);
289
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
290
+ --color-sidebar-accent: var(--sidebar-accent);
291
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
292
+ --color-sidebar-border: var(--sidebar-border);
293
+ --color-sidebar-ring: var(--sidebar-ring);
282
294
  }
283
295
 
284
296
  /* ---- Theme (light only) ---- */
@@ -306,6 +318,12 @@
306
318
  --brand-foreground: #ffffff;
307
319
  --brand-hover: #2c5724;
308
320
 
321
+ /* Table interaction fills are pre-composited and opaque. Sticky edge cells
322
+ therefore cover horizontally scrolled content while preserving the
323
+ original quiet bg-card/40-over-muted row hover. */
324
+ --table-row-hover: color-mix(in srgb, var(--card) 40%, var(--muted));
325
+ --table-row-selected: color-mix(in srgb, var(--card) 10%, var(--muted));
326
+
309
327
  /* Quiet fill */
310
328
  --fill: #e7e7e1;
311
329
  --fill-foreground: #1a1a17;
@@ -318,4 +336,20 @@
318
336
  --input: #c7c6be;
319
337
  --ring: rgb(63 122 52 / 0.5);
320
338
  --overlay: rgb(26 26 23 / 0.5);
339
+
340
+ /* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
341
+ (or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
342
+ palette instead of shadcn's grey/black defaults. The sidebar reads as the
343
+ warm greige canvas; its active item takes Sage. A consumer that had
344
+ hard-coded these can now delete its overrides and inherit from here. */
345
+ --sidebar: var(--surface);
346
+ --sidebar-foreground: var(--foreground);
347
+ --sidebar-primary: var(--brand);
348
+ --sidebar-primary-foreground: var(--brand-foreground);
349
+ --sidebar-accent: var(--muted);
350
+ --sidebar-accent-foreground: var(--foreground);
351
+ --sidebar-border: var(--border);
352
+ --sidebar-ring: var(--ring);
353
+ --popover: var(--elevated);
354
+ --popover-foreground: var(--foreground);
321
355
  }