@actioneer/ads 0.5.1 → 0.5.3

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.1",
3
+ "version": "0.5.3",
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.1",
3
+ "version": "0.5.3",
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
@@ -233,16 +233,21 @@
233
233
  * every comparison series survives production builds.
234
234
  */
235
235
  :root {
236
- /* Data-series palette — Sage (brand) leads as the focal/primary series,
237
- then the three data-viz accents and two deep variants for extended
238
- series. Explicit hexes (not var()) so every series survives @theme
239
- pruning, since chart colours are referenced from SVG prop strings. */
240
- --color-chart-1: #3f7a34; /* sage — primary / focal series */
241
- --color-chart-2: #12b5a5; /* cyan base */
242
- --color-chart-3: #f3a72e; /* amber base */
243
- --color-chart-4: #a3c765; /* lichen lime base */
244
- --color-chart-5: #0a7e82; /* cyan deep */
245
- --color-chart-6: #b57414; /* amber deep */
236
+ /* Data-series palette — NO GREEN (user-mandated): green implies "good /
237
+ growing" even when the numbers fall, so data series must stay
238
+ valence-neutral. Cyan deep leads as the focal/primary series; amber,
239
+ ink and the remaining non-green accents extend, with a mid ink for a
240
+ sixth series. Sage/lime stay OUT of charts — green is
241
+ reserved for genuinely semantic success (badges, deltas the caller has
242
+ judged positive). Explicit hexes (not var()) so every series survives
243
+ @theme pruning, since chart colours are referenced from SVG prop
244
+ strings. */
245
+ --color-chart-1: #0a7e82; /* cyan deep — primary / focal series */
246
+ --color-chart-2: #f3a72e; /* amber base */
247
+ --color-chart-3: #26251f; /* ink 900 */
248
+ --color-chart-4: #12b5a5; /* cyan base */
249
+ --color-chart-5: #b57414; /* amber deep */
250
+ --color-chart-6: #8c8c84; /* ink 500 — extended series */
246
251
  }
247
252
 
248
253
  /*
@@ -345,6 +350,12 @@
345
350
  --brand-foreground: #ffffff;
346
351
  --brand-hover: #2c5724;
347
352
 
353
+ /* Table interaction fills are pre-composited and opaque. Sticky edge cells
354
+ therefore cover horizontally scrolled content while preserving the
355
+ original quiet bg-card/40-over-muted row hover. */
356
+ --table-row-hover: color-mix(in srgb, var(--card) 40%, var(--muted));
357
+ --table-row-selected: color-mix(in srgb, var(--card) 10%, var(--muted));
358
+
348
359
  /* Quiet fill */
349
360
  --fill: #e7e7e1;
350
361
  --fill-foreground: #1a1a17;
@@ -845,10 +856,18 @@
845
856
  .ads-tree-branch:first-child::before {
846
857
  top: calc(-1 * var(--tree-rail-lead, 0px));
847
858
  }
848
- /* The last child needs no rail: its elbow (or the content's end) terminates
849
- the branch, and a rail there pokes through the curve. */
850
- .ads-tree-rail:last-child::before,
859
+ /* Last children end the branch — but the two classes end differently.
860
+ A last BRANCH stops its rail where the elbow begins (the row top): hiding
861
+ it entirely erased the climb on a single-child branch (first AND last),
862
+ leaving its elbow floating. For a non-first last branch the span
863
+ collapses to zero, same as hidden.
864
+ A last RAIL drops its rail completely: pass-through content only carries
865
+ a rail to REACH something beneath it, and for the last child nothing is
866
+ beneath — a climb stub there is a line to nowhere. */
851
867
  .ads-tree-branch:last-child::before {
868
+ bottom: 100%;
869
+ }
870
+ .ads-tree-rail:last-child::before {
852
871
  display: none;
853
872
  }
854
873
  .ads-tree-branch::after {
package/theme.css CHANGED
@@ -206,16 +206,21 @@
206
206
  * every comparison series survives production builds.
207
207
  */
208
208
  :root {
209
- /* Data-series palette — Sage (brand) leads as the focal/primary series,
210
- then the three data-viz accents and two deep variants for extended
211
- series. Explicit hexes (not var()) so every series survives @theme
212
- pruning, since chart colours are referenced from SVG prop strings. */
213
- --color-chart-1: #3f7a34; /* sage — primary / focal series */
214
- --color-chart-2: #12b5a5; /* cyan base */
215
- --color-chart-3: #f3a72e; /* amber base */
216
- --color-chart-4: #a3c765; /* lichen lime base */
217
- --color-chart-5: #0a7e82; /* cyan deep */
218
- --color-chart-6: #b57414; /* amber deep */
209
+ /* Data-series palette — NO GREEN (user-mandated): green implies "good /
210
+ growing" even when the numbers fall, so data series must stay
211
+ valence-neutral. Cyan deep leads as the focal/primary series; amber,
212
+ ink and the remaining non-green accents extend, with a mid ink for a
213
+ sixth series. Sage/lime stay OUT of charts — green is
214
+ reserved for genuinely semantic success (badges, deltas the caller has
215
+ judged positive). Explicit hexes (not var()) so every series survives
216
+ @theme pruning, since chart colours are referenced from SVG prop
217
+ strings. */
218
+ --color-chart-1: #0a7e82; /* cyan deep — primary / focal series */
219
+ --color-chart-2: #f3a72e; /* amber base */
220
+ --color-chart-3: #26251f; /* ink 900 */
221
+ --color-chart-4: #12b5a5; /* cyan base */
222
+ --color-chart-5: #b57414; /* amber deep */
223
+ --color-chart-6: #8c8c84; /* ink 500 — extended series */
219
224
  }
220
225
 
221
226
  /*
@@ -318,6 +323,12 @@
318
323
  --brand-foreground: #ffffff;
319
324
  --brand-hover: #2c5724;
320
325
 
326
+ /* Table interaction fills are pre-composited and opaque. Sticky edge cells
327
+ therefore cover horizontally scrolled content while preserving the
328
+ original quiet bg-card/40-over-muted row hover. */
329
+ --table-row-hover: color-mix(in srgb, var(--card) 40%, var(--muted));
330
+ --table-row-selected: color-mix(in srgb, var(--card) 10%, var(--muted));
331
+
321
332
  /* Quiet fill */
322
333
  --fill: #e7e7e1;
323
334
  --fill-foreground: #1a1a17;