@actioneer/ads 0.6.0 → 0.8.0

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.
Files changed (123) hide show
  1. package/DESIGN.md +597 -0
  2. package/components/ai-elements/agent-trace.d.ts +2 -2
  3. package/components/ai-elements/agent-trace.js +164 -105
  4. package/components/ai-elements/chain-of-thought.d.ts +2 -2
  5. package/components/ai-elements/chain-of-thought.js +1 -1
  6. package/components/ai-elements/index.d.ts +0 -5
  7. package/components/ai-elements/inline-citation.js +1 -1
  8. package/components/alert.d.ts +6 -6
  9. package/components/alert.js +89 -53
  10. package/components/answer-sources.d.ts +2 -6
  11. package/components/answer-sources.js +58 -60
  12. package/components/answer.d.ts +5 -0
  13. package/components/answer.js +311 -271
  14. package/components/assistant-ui/action-bar.js +1 -1
  15. package/components/assistant-ui/attachment.js +11 -11
  16. package/components/assistant-ui/badge.js +18 -18
  17. package/components/assistant-ui/composer-harness.js +15 -20
  18. package/components/assistant-ui/composer-trigger-popover.js +9 -9
  19. package/components/assistant-ui/composer.d.ts +3 -1
  20. package/components/assistant-ui/composer.js +148 -144
  21. package/components/assistant-ui/image.js +61 -61
  22. package/components/assistant-ui/index.d.ts +0 -3
  23. package/components/assistant-ui/message-timing.js +1 -1
  24. package/components/assistant-ui/selection-toolbar.js +7 -7
  25. package/components/assistant-ui/thread-context.d.ts +3 -1
  26. package/components/assistant-ui/thread.js +50 -42
  27. package/components/avatar.js +42 -42
  28. package/components/badge.d.ts +5 -6
  29. package/components/badge.js +13 -76
  30. package/components/body-page-header.d.ts +15 -0
  31. package/components/body-page-header.js +24 -0
  32. package/components/brand-loader.d.ts +0 -3
  33. package/components/brand-loader.js +10 -32
  34. package/components/breadcrumbs.d.ts +0 -7
  35. package/components/breadcrumbs.js +54 -71
  36. package/components/button.d.ts +1 -1
  37. package/components/button.js +55 -49
  38. package/components/chart.js +298 -296
  39. package/components/chip.d.ts +13 -1
  40. package/components/chip.js +93 -80
  41. package/components/collection-header.d.ts +17 -0
  42. package/components/collection-header.js +31 -0
  43. package/components/connector-card.d.ts +6 -6
  44. package/components/connector-card.js +31 -32
  45. package/components/date-range-picker.d.ts +2 -1
  46. package/components/date-range-picker.js +158 -122
  47. package/components/divider.js +25 -25
  48. package/components/drawer.d.ts +6 -2
  49. package/components/drawer.js +61 -58
  50. package/components/dropdown.d.ts +1 -2
  51. package/components/dropdown.js +88 -89
  52. package/components/field.js +41 -36
  53. package/components/file-dropzone.js +1 -1
  54. package/components/index.d.ts +4 -4
  55. package/components/index.js +501 -549
  56. package/components/infinite-canvas.js +24 -24
  57. package/components/input-field.d.ts +18 -3
  58. package/components/input-field.js +88 -72
  59. package/components/input.js +32 -29
  60. package/components/modal.d.ts +31 -3
  61. package/components/modal.js +244 -170
  62. package/components/number-field.js +45 -42
  63. package/components/page-body.d.ts +12 -0
  64. package/components/page-body.js +18 -0
  65. package/components/pagination.js +36 -36
  66. package/components/pixel-blast-svg.js +71 -73
  67. package/components/select.d.ts +21 -0
  68. package/components/select.js +189 -148
  69. package/components/setting-row.d.ts +6 -5
  70. package/components/setting-row.js +33 -32
  71. package/components/sidebar.d.ts +2 -0
  72. package/components/sidebar.js +151 -141
  73. package/components/skeleton.js +8 -7
  74. package/components/slider.js +1 -1
  75. package/components/surface-loader.d.ts +11 -0
  76. package/components/surface-loader.js +35 -0
  77. package/components/table.d.ts +16 -10
  78. package/components/table.js +427 -412
  79. package/components/tabs.d.ts +2 -0
  80. package/components/tabs.js +160 -295
  81. package/components/textarea.js +9 -9
  82. package/components/toast.d.ts +1 -1
  83. package/components/toast.js +181 -118
  84. package/components/tree.d.ts +5 -1
  85. package/components/tree.js +54 -49
  86. package/components/typography.d.ts +4 -4
  87. package/components/typography.js +13 -13
  88. package/components/ui/button.d.ts +1 -1
  89. package/components/ui/button.js +4 -4
  90. package/components/ui/dialog.js +25 -25
  91. package/demo/components/add-to-artifact.js +6 -10
  92. package/lib/cn.js +11 -4
  93. package/lib/icons.d.ts +4 -0
  94. package/lib/icons.js +103 -102
  95. package/lib/interactive.d.ts +1 -1
  96. package/llms.txt +132 -188
  97. package/manifest.json +1719 -2831
  98. package/package.json +2 -2
  99. package/styles.css +362 -233
  100. package/theme.css +312 -177
  101. package/components/agent-icon.d.ts +0 -76
  102. package/components/agent-icon.js +0 -265
  103. package/components/ai-elements/queue.d.ts +0 -60
  104. package/components/ai-elements/queue.js +0 -193
  105. package/components/ai-elements/speech-input.d.ts +0 -16
  106. package/components/ai-elements/speech-input.js +0 -151
  107. package/components/ai-elements/task-progress.d.ts +0 -41
  108. package/components/ai-elements/task-progress.js +0 -224
  109. package/components/ai-elements/task.d.ts +0 -39
  110. package/components/ai-elements/task.js +0 -105
  111. package/components/ai-elements/voice.d.ts +0 -90
  112. package/components/ai-elements/voice.js +0 -496
  113. package/components/assistant-ui/follow-up-suggestions.d.ts +0 -11
  114. package/components/assistant-ui/follow-up-suggestions.js +0 -72
  115. package/components/assistant-ui/suggestions.d.ts +0 -7
  116. package/components/assistant-ui/suggestions.js +0 -19
  117. package/components/assistant-ui/voice.d.ts +0 -18
  118. package/components/link.d.ts +0 -14
  119. package/components/link.js +0 -72
  120. package/components/navbar.d.ts +0 -15
  121. package/components/navbar.js +0 -68
  122. package/components/pixel-icon.d.ts +0 -37
  123. package/components/pixel-icon.js +0 -859
package/llms.txt CHANGED
@@ -16,47 +16,62 @@
16
16
  ## Tokens
17
17
 
18
18
  Reference semantic roles, never raw color/dimension literals (ads-lint rejects literals). Each role produces `bg-/text-/border-<role>` utilities:
19
- - `background`
20
- - `foreground`
21
- - `primary` — Text hierarchy — three accessible levels (all ≥ AA on --background)
22
- - `secondary` — Text hierarchy — three accessible levels (all ≥ AA on --background)
23
- - `tertiary` — Text hierarchy — three accessible levels (all ≥ AA on --background)
24
- - `surface`
25
- - `surface-foreground`
26
- - `elevated`
27
- - `muted`
28
- - `muted-foreground`
29
- - `card`
30
- - `card-foreground`
19
+ - `background` — The shell canvas and its ink: the ground between top-level panels.
20
+ - `foreground` — The shell canvas and its ink: the ground between top-level panels.
21
+ - `on-white-primary` — Contextual text hierarchies — three accessible levels per surface.
22
+ - `on-white-secondary` — Contextual text hierarchies — three accessible levels per surface.
23
+ - `on-white-tertiary` — Contextual text hierarchies — three accessible levels per surface.
24
+ - `on-warm-grey-primary` — Contextual text hierarchies — three accessible levels per surface.
25
+ - `on-warm-grey-secondary` — Contextual text hierarchies — three accessible levels per surface.
26
+ - `on-warm-grey-tertiary` — Contextual text hierarchies — three accessible levels per surface.
27
+ - `primary` — Context-free compatibility aliases remain conservative.
28
+ - `secondary` — Context-free compatibility aliases remain conservative.
29
+ - `tertiary` — Context-free compatibility aliases remain conservative.
30
+ - `surface` — One continuous recess inside a white surface, never a screen-level ground.
31
+ - `surface-foreground` — One continuous recess inside a white surface, never a screen-level ground.
32
+ - `elevated` — One continuous recess inside a white surface, never a screen-level ground.
33
+ - `muted` — The hover and row-state wash: interaction, not a default item background.
34
+ - `muted-foreground` — The hover and row-state wash: interaction, not a default item background.
35
+ - `card` — The white working plane that sits on the canvas, and the specimen hairline.
36
+ - `card-foreground` — The white working plane that sits on the canvas, and the specimen hairline.
37
+ - `specimen-stroke` — The white working plane that sits on the canvas, and the specimen hairline.
31
38
  - `action-primary` — Primary CTA role — restrained Studio green, used sparingly.
32
39
  - `action-primary-foreground` — Primary CTA role — restrained Studio green, used sparingly.
33
40
  - `action-primary-hover` — Primary CTA role — restrained Studio green, used sparingly.
41
+ - `action-primary-text` — Primary CTA role — restrained Studio green, used sparingly.
42
+ - `action-primary-soft` — Primary CTA role — restrained Studio green, used sparingly.
43
+ - `field-focus` — Primary CTA role — restrained Studio green, used sparingly.
34
44
  - `brand` — Compatibility action role — neutral ink, never a colored primary hue.
35
45
  - `brand-foreground` — Compatibility action role — neutral ink, never a colored primary hue.
36
46
  - `brand-hover` — Compatibility action role — neutral ink, never a colored primary hue.
37
47
  - `brand-text` — Compatibility action role — neutral ink, never a colored primary hue.
38
- - `fill` — Quiet fill — secondary buttons, avatars, chips
39
- - `fill-foreground` — Quiet fill — secondary buttons, avatars, chips
40
- - `table-shell` — Quiet fill — secondary buttons, avatars, chips
41
- - `artifact-canvas`
42
- - `accent`
43
- - `accent-foreground`
44
- - `success` — success-700 on white = 5.48:1 (600 was 3.77:1, failed AA).
45
- - `success-foreground` — success-700 on white = 5.48:1 (600 was 3.77:1, failed AA).
46
- - `warning` — Amber-500 fill kept (it IS the caution signal); dark ink foreground
47
- - `warning-foreground` — Amber-500 fill kept (it IS the caution signal); dark ink foreground
48
- - `danger` — Amber-500 fill kept (it IS the caution signal); dark ink foreground
49
- - `danger-foreground` — Amber-500 fill kept (it IS the caution signal); dark ink foreground
50
- - `info` — Amber-500 fill kept (it IS the caution signal); dark ink foreground
51
- - `info-foreground` — Amber-500 fill kept (it IS the caution signal); dark ink foreground
52
- - `border-primary`
53
- - `border-secondary`
54
- - `border-tertiary`
55
- - `border`
56
- - `border-strong`
57
- - `input`
58
- - `ring`
59
- - `overlay`
48
+ - `fill` — Quiet fill — avatars, chips, and disabled controls
49
+ - `fill-foreground` — Quiet fill — avatars, chips, and disabled controls
50
+ - `table-shell` — Table surfaces: the white tray, its hairlines, and header ink.
51
+ - `table-stroke` — Table surfaces: the white tray, its hairlines, and header ink.
52
+ - `table-header-foreground` — Table surfaces: the white tray, its hairlines, and header ink.
53
+ - `artifact-canvas` — The artifact sheet: white warmed by a trace of the brand mark.
54
+ - `accent` — The active and selected wash, one step above hover.
55
+ - `accent-foreground` — The active and selected wash, one step above hover.
56
+ - `success` — Lichen success-700 clears AA on White and both success soft fills; success-600 is reserved for non-text marks because its 3.73:1 contrast on White does not clear body-text AA.
57
+ - `success-foreground` — Lichen success-700 clears AA on White and both success soft fills; success-600 is reserved for non-text marks because its 3.73:1 contrast on White does not clear body-text AA.
58
+ - `warning` — Amber-500 fill kept (it IS the caution signal); dark ink foreground instead of white = 6.94:1 (white on amber was 2.35:1, failed even 3:1).
59
+ - `warning-foreground` — Amber-500 fill kept (it IS the caution signal); dark ink foreground instead of white = 6.94:1 (white on amber was 2.35:1, failed even 3:1).
60
+ - `danger` — Danger and info: solid semantic fills carrying white foregrounds.
61
+ - `danger-foreground` — Danger and info: solid semantic fills carrying white foregrounds.
62
+ - `info` — Danger and info: solid semantic fills carrying white foregrounds.
63
+ - `info-foreground` — Danger and info: solid semantic fills carrying white foregrounds.
64
+ - `border-primary` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
65
+ - `border-secondary` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
66
+ - `border-tertiary` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
67
+ - `border` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
68
+ - `border-strong` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
69
+ - `input` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
70
+ - `menu-stroke` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
71
+ - `toast-stroke` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
72
+ - `tree-stroke` — The neutral stroke ladder: every 1px UI border stays within WG3 to WG5.
73
+ - `ring` — Focus ring and scrim, both translucent warm ink.
74
+ - `overlay` — Focus ring and scrim, both translucent warm ink.
60
75
 
61
76
  ## Design principles
62
77
 
@@ -64,23 +79,27 @@ The house rules for every ADS UI. `[lint]` = `@actioneer/ads-lint` auto-checks i
64
79
 
65
80
  ### 1. Prefer fills & elevation over strokes — but keep a balance (~75/25) [judgment]
66
81
 
67
- 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.
82
+ Delineate SURFACES (cards, panels, sidebars, page regions) with color contrast, elevation, and spacing — not borders. Keep no more than two persistent neutral layers in one composition: panels establish hierarchy; embedded items express state. Aim for ~75% shadow/fill, 25% strokes: form controls and floating menus keep a subtle border so they read as interactive; surfaces do not.
68
83
 
69
- - Do: Separate regions by fill color first: bg-background → bg-surface → bg-card/bg-elevated → bg-muted.
84
+ - Do: Establish hierarchy with at most two persistent layers: bg-background for the screen ground and bg-card/bg-elevated for the primary surface.
85
+ - Do: Inside a white Panel or Card, keep rows and items transparent at rest; group them with spacing or inset dividers, use bg-muted for hover/selection, and reserve bg-surface for one continuous semantic recess such as an editor or table tray.
70
86
  - 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).
71
87
  - Do: Keep strokes on focus rings, the outline Button/Badge/Chip variants, Kbd, Divider, the Tree connector rail, and functional color swatches.
72
88
  - Don't: Add a border to a surface to separate or group it — use fill/elevation/spacing instead.
89
+ - Don't: Alternate persistent neutral fills inside one panel (for example white Panel → grey item → white child); flatten the item or promote the recess to the container.
73
90
  - Don't: Give a filled control no stroke on the tinted canvas — it disappears; it needs a crisp edge.
74
91
 
75
- ### 2. Elevation = actionability [judgment]
92
+ ### 2. Shadow only by request [judgment]
76
93
 
77
- The single shadow-elevation token is an affordance: it goes ONLY on surfaces the user can act on. Never elevate something that can't be clicked. There is no shadow scale.
94
+ Every surface defaults to shadow-0. Use the numbered elevation ladder only when the user explicitly requests a shadow for the named surface; the legacy shadow-elevation hook remains flat.
78
95
 
79
- - Do: Elevate actionable surfaces: pressable/hoverable cards, primary CTAs, control thumbs (Switch, Slider, active tab segments), and interactive floating layers (Modal, Drawer, Popover, Dropdown, listboxes, Toast).
80
- - Do: Keep static surfaces flat: Panel, plain Card, Kbd, Navbar, headers, rails, docs boxes, Tooltip, InlineDrawer — they read by fill/color.
81
- - Do: Ask 'can the user click this surface?' — if no, it's flat.
82
- - Don't: Reintroduce a shadow scale (shadow-xs/sm/md/lg/xl) — there is one token only, shadow-elevation.
96
+ - Do: Keep controls, cards, menus, overlays, panels, and other surfaces at shadow-0 unless the user specifically requests elevation.
97
+ - Do: When requested, use shadow-100 for controls, shadow-200 for raised surfaces and pressable cards, shadow-300 for menus, popovers, listboxes, and toasts, and shadow-400 for dialogs and overlay drawers.
98
+ - Do: Reserve shadow-500 and shadow-600 for rare higher stacked layers; the legacy shadow-elevation hook resolves to shadow-0.
99
+ - Don't: Infer permission to use a shadow from actionability, floating placement, or component type.
100
+ - Don't: Use raw shadow values or legacy named shadow utilities.
83
101
  - Don't: Put a shadow on a non-interactive surface for decoration.
102
+ - Don't: Use shadow-500 or shadow-600 as a routine default.
84
103
 
85
104
  ### 3. Motion follows the interaction [lint: unbounded-transition, sluggish-easing, zero-scale-entrance, undersized-zoom-entrance, raw-spring-config]
86
105
 
@@ -96,15 +115,15 @@ Component motion follows the closest Animate UI interaction pattern, using role-
96
115
  - Don't: Animate keyboard-initiated or 100×/day actions (e.g. a command-palette toggle).
97
116
  - Don't: Add motion to a component only because it is visible; static structure and decorative chrome stay still.
98
117
 
99
- ### 4. Icons: Hugeicons, stroke only [lint: icon-package-import]
118
+ ### 4. Icons: Phosphor, regular weight (fill for active) [lint: icon-package-import]
100
119
 
101
- All icons come from Hugeicons in the Stroke Rounded style only. Components import named icons from the @/lib/icons registry — never from an icon package directly — so a free→Pro swap or a restyle touches one file.
120
+ All icons come from Phosphor Icons at the regular weight — the stroke-led icon language of ADS. Components import named icons from the @/lib/icons registry — never from an icon package directly — so swapping the underlying set touches one file.
102
121
 
103
- - Do: Import icons from the @/lib/icons registry; add a new one there (stroke variant) before using it.
122
+ - Do: Import icons from the @/lib/icons registry; wrap a new Phosphor component with createIcon there before using it.
104
123
  - Do: Let icons default to size='1em' so they scale with text; size with a size prop or size-* class.
105
- - Do: Keep stroke weight at the drawn 1.5; strokeWidth={2} is the one sanctioned emphasis step.
106
- - Don't: Import from an icon package directly, or use solid/duotone/twotone/fill variants.
107
- - Don't: Use a stroke weight thinner than 1.5.
124
+ - Do: Render weight='fill' for the active or selected state, and weight='bold' for the rare heavier stroke.
125
+ - Don't: Import from an icon package directly, or install a second icon set.
126
+ - Don't: Leave an active nav item's icon at the regular stroke weight.
108
127
 
109
128
  ### 5. Demo screens: the shell owns the frame [judgment]
110
129
 
@@ -123,13 +142,17 @@ Indicator/status dots (Badge & Chip dot variants, ConnectionStatus, chart legend
123
142
 
124
143
  ### 7. ADS-first UI: use the library; extend only when asked [lint: deep-import, barrel-aliased-import, barrel-default-import, barrel-namespace-import, external-ui-import]
125
144
 
126
- Every UI decision stays synchronized with ADS. Before making a new screen/control/pattern, check the ADS component suite first and use the exact exported name from the public barrel. Do not hand-roll, alias, deep-import, or import external UI libraries.
145
+ Every UI decision stays synchronized with ADS. Search the full catalog before deciding a component is missing, and use the exact exported name from the public barrel. When the barrel genuinely has no primitive, the sanctioned fallback is a shadcn/ui component vendored into src/components/ui through the repo's components.json recipe — never a hand-rolled control and never a UI library imported at a call site.
127
146
 
128
147
  - Do: Use an existing ADS component by its exact exported name from the package barrel; compose existing components for layout-only patterns.
129
- - Do: Ask the user before extending ADS; only an explicit request authorizes new library work.
148
+ - Do: Search the whole catalog before concluding a component is missing — the documented specimens are a sample, not the inventory.
149
+ - Do: Fall back to shadcn/ui when the barrel has no primitive: vendor it with npx shadcn add into src/components/ui, import cn from @/lib/utils, and swap its lucide icons for @/lib/icons.
150
+ - Do: Let a vendored shadcn component inherit the ADS palette through the shadcn-compat aliases in theme.css rather than restyling it by hand.
151
+ - Do: Ask the user before promoting a vendored component into the public barrel; only an explicit request authorizes new library work.
130
152
  - Do: When authorized, add the component to the right family, export its exact name through the barrel, and document it.
131
153
  - Don't: Deep-import, alias, default/namespace-import, or hand-roll a local copy of a component.
132
- - Don't: Import a visual component directly from the web or an npm UI library.
154
+ - Don't: Import a visual component directly from the web or an npm UI library at a call site.
155
+ - Don't: Reach for the shadcn fallback before searching the catalog, or install a second component library beside it.
133
156
 
134
157
  ### 8. Minimal information per screen [judgment]
135
158
 
@@ -137,9 +160,11 @@ A screen carries ONLY what the user needs to move forward: one title, the inputs
137
160
 
138
161
  - Do: Prefer more, smaller steps over dense ones; ask one thing at a time.
139
162
  - Do: Derive instead of asking whenever possible (a name from a work email, the company from its domain).
163
+ - Do: Prefer clear text-only buttons; add an icon only when it communicates essential meaning the label cannot carry alone, or for a compact conventional icon-only control.
140
164
  - Do: Render multi-step flows full-screen — a single content container that holds the inputs and its own Back/Continue is fine.
141
165
  - Don't: Add section eyebrows above a title that already names the screen, or helper text that restates the obvious / duplicates a disabled button's meaning.
142
166
  - Don't: Add any header description unless the user explicitly requested supporting copy for that page, section, panel, modal, dialog, drawer, or popover.
167
+ - Don't: Decorate a labeled button with a redundant leading or trailing icon.
143
168
  - Don't: Nest panel/step-rail chrome inside a multi-step flow.
144
169
 
145
170
  ### 9. Responsive = container-fluid components, shells own the width [judgment]
@@ -147,7 +172,7 @@ A screen carries ONLY what the user needs to move forward: one title, the inputs
147
172
  ADS targets landscape tablet (1024) → laptop (1440) → wide display (1920+); phone/portrait is out of scope. Components adapt to their CONTAINER via container queries; shells and pages decide pane widths through width tokens. Design against under-utilization, not cramping.
148
173
 
149
174
  - Do: Use @container on the pane and @lg:/@xl: variants on children inside components.
150
- - Do: Set pane widths in shells/pages through width tokens (--thread-max-width, --sidebar-width, --aside-width, --connector-card-min/-max).
175
+ - Do: Set pane widths in shells/pages through width tokens (thread-max-width, sidebar-width, aside-width, connector-card-min/-max).
151
176
  - Do: Cap prose at its measure; let tables/charts/tool cards break out wider. Use auto-fill + minmax(min, 1fr) for grids.
152
177
  - Don't: Use sm:/md: viewport variants inside src/components, or hardcode a pane width there.
153
178
  - Don't: Cap a grid at a hard column count so it stops growing on wide displays.
@@ -176,7 +201,7 @@ When tabs and a search field control the same content, they share one responsive
176
201
  Before composing a screen, match its intent to one production below, preserve the named JSX tree, then query the design graph for required component states. State axes are independent; render only the representative combinations named by the graph instead of a Cartesian product.
177
202
 
178
203
  - `standard-screen` — Standard screen: One shell-owned screen frame containing a single primary Panel. (intents: screen, page, workspace, editor, detail page; Storybook: ADS/Components/Layout/Panel)
179
- - `browse-with-detail` — Browse with selection-driven detail: A primary browse Panel and an inline Drawer mounted as shell-level siblings. (intents: browse, records, list detail, inspector, audit log; Storybook: ADS/Recipes/Immersive detail view)
204
+ - `browse-with-detail` — Browse with selection-driven detail: A primary browse Panel and an inline Drawer mounted as shell-level siblings. (intents: browse, records, list detail, inspector, audit log; Storybook: ADS/Components/Navigation/Sidebar)
180
205
  - `data-table` — Structured data table: Semantic table anatomy with matching header and body rows. (intents: table, records, comparison, sorting, selection; Storybook: ADS/Components/Data display/Table)
181
206
  - `tabbed-results` — Tabbed results with scoped search: Tabs lead and a scoped search trails in one responsive control row. (intents: tabs, filter, search, results, segmented views; Storybook: ADS/Components/Data display/Tabs)
182
207
  - `modal-task` — Blocking modal task: A focused interruption with one title, body, and decisive footer. (intents: modal, confirmation, short form, blocking task, destructive action; Storybook: ADS/Components/Overlays/Modal)
@@ -222,7 +247,7 @@ Before using any component below, preserve its built-in motion and apply the mot
222
247
  ### Foundations
223
248
 
224
249
  - [AudioWaveform] — component [docs](https://ads.actioneer.dev/#/audio-waveform)
225
- - [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)
250
+ - [Button] — Use Button for any pressable action and prefer a clear text-only label. Add an icon only when it communicates essential meaning the label cannot carry alone; reserve icon-only buttons for compact, repeated controls with universally understood symbols and an accessible label. (variants: variant: solid|secondary|outline|ghost|link|danger; size: xs|sm|md|lg|icon|icon-sm|icon-xs) [docs](https://ads.actioneer.dev/#/button)
226
251
  - [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)
227
252
  - [CodeBlock] — Show multi-line source — a query, config, or tool payload — by passing it as a string child. The default treatment is an unfilled outlined filename toolbar above a white outlined source surface, separated by the toolbar's bottom stroke. Line numbers are on by default; add language for syntax highlighting and dedicated props for highlighted, added, or removed lines. Use inline Code for a token inside a sentence. (variants: variant: soft|plain) [docs](https://ads.actioneer.dev/#/code-block)
228
253
  - [Divider] — Separate grouped content or inline clusters with a thin rule instead of adding a border to the container. [docs](https://ads.actioneer.dev/#/divider)
@@ -233,7 +258,6 @@ Before using any component below, preserve its built-in motion and apply the mot
233
258
  - [Heading] — Use Heading for semantic h1–h4 titles above a page, section, or card, sized by document level via `level` (never a `size` prop). [docs](https://ads.actioneer.dev/#/typography)
234
259
  - [Kbd] — Use to display a keyboard shortcut or key name, inline in text or trailing a label in a shortcut list. [docs](https://ads.actioneer.dev/#/kbd)
235
260
  - [Label] — component [docs](https://ads.actioneer.dev/#/field)
236
- - [Link] — Use Link for inline or standalone anchor navigation; add isExternal for links that leave the app. [docs](https://ads.actioneer.dev/#/link)
237
261
  - [ResizablePanel] — component [docs](https://ads.actioneer.dev/#/review/resizable-panel)
238
262
  - [Reveal] — Choreograph a data surface's entrance instead of a skeleton swap: wrap the shell, labels, values, and charts in ordered Reveals so the layout lands instantly and the content draws itself in. [docs](https://ads.actioneer.dev/#/reveal)
239
263
  - [RevealGroup] — component [docs](https://ads.actioneer.dev/#/reveal)
@@ -253,7 +277,6 @@ Before using any component below, preserve its built-in motion and apply the mot
253
277
  - [FileDropzoneProps] — TypeScript type
254
278
  - [HeadingProps] — TypeScript type
255
279
  - [KbdProps] — TypeScript type
256
- - [LinkProps] — TypeScript type
257
280
  - [ResizablePanelProps] — TypeScript type
258
281
  - [RevealGroupProps] — TypeScript type
259
282
  - [RevealProps] — TypeScript type
@@ -299,6 +322,7 @@ Before using any component below, preserve its built-in motion and apply the mot
299
322
  - [CheckboxProps] — TypeScript type
300
323
  - [DateRangePickerProps] — TypeScript type
301
324
  - [DateRangeValue] — TypeScript type
325
+ - [DropdownOptionsProps] — TypeScript type
302
326
  - [InputFieldProps] — TypeScript type
303
327
  - [InputProps] — TypeScript type
304
328
  - [NumberFieldProps] — TypeScript type
@@ -311,6 +335,7 @@ Before using any component below, preserve its built-in motion and apply the mot
311
335
  - [SliderProps] — TypeScript type
312
336
  - [SwitchProps] — TypeScript type
313
337
  - [TextareaProps] — TypeScript type
338
+ - [DropdownOptions] — utility
314
339
 
315
340
  ### Overlays
316
341
 
@@ -327,13 +352,15 @@ Before using any component below, preserve its built-in motion and apply the mot
327
352
  - [DropdownSeparator] — component [docs](https://ads.actioneer.dev/#/dropdown)
328
353
  - [DropdownTrigger] — component [docs](https://ads.actioneer.dev/#/dropdown)
329
354
  - [InlineDrawer] — component (variants: side: right|left|bottom; size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/drawer)
330
- - [Modal] — Use for a blocking, focused task or confirmation that must interrupt the page until resolved (portaled, focus-trapped, Escape/backdrop dismissible). (variants: size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/modal)
331
- - [ModalBody] — component (variants: size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/modal)
332
- - [ModalDescription] — component (variants: size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/modal)
355
+ - [Modal] — Use for a blocking, focused task or confirmation that must interrupt the page until resolved (portaled, focus-trapped, Escape/backdrop dismissible). (variants: size: sm|md|lg|xl|full; position: center|top) [docs](https://ads.actioneer.dev/#/modal)
356
+ - [ModalBody] — component (variants: size: sm|md|lg|xl|full; position: center|top) [docs](https://ads.actioneer.dev/#/modal)
357
+ - [ModalClose] — component (variants: size: sm|md|lg|xl|full; position: center|top) [docs](https://ads.actioneer.dev/#/modal)
358
+ - [ModalDescription] — component (variants: size: sm|md|lg|xl|full; position: center|top) [docs](https://ads.actioneer.dev/#/modal)
333
359
  - [ModalDrawer] — component (variants: side: right|left|bottom; size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/drawer)
334
- - [ModalFooter] — component (variants: size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/modal)
335
- - [ModalHeader] — component (variants: size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/modal)
336
- - [ModalTitle] — component (variants: size: sm|md|lg|xl) [docs](https://ads.actioneer.dev/#/modal)
360
+ - [ModalFooter] — component (variants: size: sm|md|lg|xl|full; position: center|top) [docs](https://ads.actioneer.dev/#/modal)
361
+ - [ModalHeader] — component (variants: size: sm|md|lg|xl|full; position: center|top) [docs](https://ads.actioneer.dev/#/modal)
362
+ - [ModalSection] — component (variants: size: sm|md|lg|xl|full; position: center|top) [docs](https://ads.actioneer.dev/#/modal)
363
+ - [ModalTitle] — component (variants: size: sm|md|lg|xl|full; position: center|top) [docs](https://ads.actioneer.dev/#/modal)
337
364
  - [Popover] — Use Popover for a portaled, dismissible panel anchored to a trigger — quick settings, a profile card, or a short inline form — that closes on outside click or Escape. [docs](https://ads.actioneer.dev/#/popover)
338
365
  - [PopoverContent] — component [docs](https://ads.actioneer.dev/#/popover)
339
366
  - [PopoverTrigger] — component [docs](https://ads.actioneer.dev/#/popover)
@@ -346,6 +373,7 @@ Before using any component below, preserve its built-in motion and apply the mot
346
373
  - [DropdownProps] — TypeScript type
347
374
  - [DropdownTriggerProps] — TypeScript type
348
375
  - [InlineDrawerProps] — TypeScript type
376
+ - [ModalBodyProps] — TypeScript type
349
377
  - [ModalDrawerProps] — TypeScript type
350
378
  - [ModalProps] — TypeScript type
351
379
  - [PopoverContentProps] — TypeScript type
@@ -365,14 +393,14 @@ Before using any component below, preserve its built-in motion and apply the mot
365
393
  - [AccordionItem] — component [docs](https://ads.actioneer.dev/#/accordion)
366
394
  - [AnswerRenderer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
367
395
  - [AnswerSkeleton] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
368
- - [AnswerSourceChip] — Use the blue connector/source chip inside AnswerSources to open only the referenced nodes represented by that chip in the shell's inspector. [docs](https://ads.actioneer.dev/#/ai/sources)
369
- - [AnswerSourceInspector] — Render as a persistent right-side sibling when a source or node is selected, then unmount it when that context clears. Execution contract: use a transparent split wrapper with an 8px gap; keep the inspector fixed at 320px and shrink-0 while the primary panel stays min-w-0; use a bg-background canvas, bg-card panels, bg-surface detail rows, independent border-border strokes, text-primary/text-secondary/text-tertiary text, and bg-action-primary CTAs (bg-action-primary-hover on hover); apply the 2/4/6/8px radius scale with 8px on panels and rows, 24px panel padding, and no panel shadow; keep the immersive outer shell transparent, borderless, shadowless, and square; never fill the gutter or draw one shared border around both panels. [docs](https://ads.actioneer.dev/#/ai/sources)
370
- - [AnswerSourceItem] — Use as an outlined clickable row inside AnswerSourceInspector for one referenced table or node, including its parent source, read state, and optional status. [docs](https://ads.actioneer.dev/#/ai/sources)
371
- - [AnswerSources] — Place immediately above an answer's follow-up questions to summarize the referenced nodes and group them into clickable AnswerSourceChips. [docs](https://ads.actioneer.dev/#/ai/sources)
396
+ - [AnswerSourceChip] — Use the blue connector/source chip inside AnswerSources to open only the referenced nodes represented by that chip in the shell's inspector. [docs](https://ads.actioneer.dev/#/ai/answer)
397
+ - [AnswerSourceInspector] — Render as a persistent right-side sibling when a source or node is selected, then unmount it when that context clears. Execution contract: use a transparent split wrapper with an 8px gap; keep the inspector fixed at 320px and shrink-0 while the primary panel stays min-w-0; use a bg-background canvas, bg-card panels, bg-surface detail rows, independent border-border strokes, text-primary/text-secondary/text-tertiary text, and bg-action-primary CTAs (bg-action-primary-hover on hover); apply the 2/4/6/8px radius scale with 8px on panels and rows, 24px panel padding, and no panel shadow; keep the split workspace wrapper transparent, borderless, shadowless, and square; never fill the gutter or draw one shared border around both panels. [docs](https://ads.actioneer.dev/#/ai/answer)
398
+ - [AnswerSourceItem] — Use as an outlined clickable row inside AnswerSourceInspector for one referenced table or node, including its parent source, read state, and optional status. [docs](https://ads.actioneer.dev/#/ai/answer)
399
+ - [AnswerSources] — Place immediately above an answer's follow-up questions to summarize the referenced nodes and group them into clickable AnswerSourceChips. [docs](https://ads.actioneer.dev/#/ai/answer)
372
400
  - [AreaChart] — component [docs](https://ads.actioneer.dev/#/ai/chart)
373
401
  - [Avatar] — Use to represent a person or entity as a compact photo-or-initials glyph, standalone or stacked in an AvatarGroup. [docs](https://ads.actioneer.dev/#/avatar)
374
402
  - [AvatarGroup] — component [docs](https://ads.actioneer.dev/#/avatar)
375
- - [Badge] — Use Badge for a small inline label — status, counts, or tags — attached to text or a row. (variants: variant: solid|soft|outline|dot; color: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/badge)
403
+ - [Badge] — Use Badge for a small inline label — status, counts, or tags — attached to text or a row. [docs](https://ads.actioneer.dev/#/badge)
376
404
  - [BarChart] — component [docs](https://ads.actioneer.dev/#/ai/chart)
377
405
  - [BaseEdge] — component [docs](https://ads.actioneer.dev/#/infinite-canvas)
378
406
  - [BreakdownAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
@@ -388,7 +416,7 @@ Before using any component below, preserve its built-in motion and apply the mot
388
416
  - [CarouselItem] — component [docs](https://ads.actioneer.dev/#/carousel)
389
417
  - [CarouselNext] — component [docs](https://ads.actioneer.dev/#/carousel)
390
418
  - [CarouselPrevious] — component [docs](https://ads.actioneer.dev/#/carousel)
391
- - [Chip] — A compact pill for statuses, tags, or metadata, with an optional leading icon/avatar or a dismiss control. (variants: variant: solid|soft|outline|dot; color: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/chip)
419
+ - [Chip] — A compact pill for statuses, tags, or metadata, with an optional leading icon/avatar or a dismiss control. (variants: variant: solid|outline; color: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/chip)
392
420
  - [ClarificationAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
393
421
  - [ComboChart] — component [docs](https://ads.actioneer.dev/#/ai/chart)
394
422
  - [ComparisonAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
@@ -402,6 +430,7 @@ Before using any component below, preserve its built-in motion and apply the mot
402
430
  - [ErrorAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
403
431
  - [ExplanationAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
404
432
  - [FactAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
433
+ - [FollowUpQuestion] — Use for the two or three full-width next-question rows that close a structured answer, immediately after its source strip; show the exact prompt that clicking will send. (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
405
434
  - [FunnelBarsHorizontal] — component [docs](https://ads.actioneer.dev/#/viz-charts)
406
435
  - [FunnelChart] — component [docs](https://ads.actioneer.dev/#/ai/chart)
407
436
  - [FunnelViz] — component [docs](https://ads.actioneer.dev/#/viz-charts)
@@ -424,18 +453,18 @@ Before using any component below, preserve its built-in motion and apply the mot
424
453
  - [ScatterChart] — component [docs](https://ads.actioneer.dev/#/ai/chart)
425
454
  - [SeriesChart] — component [docs](https://ads.actioneer.dev/#/viz-charts)
426
455
  - [StatusAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
427
- - [Tab] — component (variants: variant: primary|secondary|pill; orientation: horizontal|vertical; size: sm|md|lg; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
428
- - [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)
456
+ - [Tab] — component (variants: orientation: horizontal|vertical; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
457
+ - [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. Every primary body-cell value defaults to text-m (15px / 22px); only clearly secondary metadata inside a cell may opt down to text-s. 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)
429
458
  - [TableAnswer] — component (variants: tone: default|primary|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/ai/answer)
430
459
  - [TableBody] — component [docs](https://ads.actioneer.dev/#/table)
431
460
  - [TableCell] — component [docs](https://ads.actioneer.dev/#/table)
432
461
  - [TableColumn] — component [docs](https://ads.actioneer.dev/#/table)
433
462
  - [TableHeader] — component [docs](https://ads.actioneer.dev/#/table)
434
463
  - [TableRow] — component [docs](https://ads.actioneer.dev/#/table)
435
- - [TabList] — component (variants: variant: primary|secondary|pill; orientation: horizontal|vertical; size: sm|md|lg) [docs](https://ads.actioneer.dev/#/tabs)
436
- - [TabPanel] — component (variants: variant: primary|secondary|pill; orientation: horizontal|vertical; size: sm|md|lg; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
437
- - [Tabs] — Use Tabs to switch between mutually exclusive views/sections that share the same page context, not for page-level navigation. Always reach for the primary recessed-track variant — it is the default; use secondary only when explicitly asked for it. Tab radius follows control size (4px sm, 8px md/lg), never rounded-full. When Tabs and a scoped search field coexist, compose one responsive control row with tabs leading and search trailing; do not stack search above tabs at widths where both fit. (variants: variant: primary|secondary|pill; orientation: horizontal|vertical; size: sm|md|lg; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
438
- - [TabSeparator] — component (variants: variant: primary|secondary|pill; orientation: horizontal|vertical; size: sm|md|lg; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
464
+ - [TabList] — component (variants: orientation: horizontal|vertical) [docs](https://ads.actioneer.dev/#/tabs)
465
+ - [TabPanel] — component (variants: orientation: horizontal|vertical; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
466
+ - [Tabs] — Use Tabs to switch between mutually exclusive views/sections that share the same page context, not for page-level navigation. Always reach for the primary recessed-track variant — it is the default; use secondary only when explicitly asked for it. Tab radius follows control size: 4px at sm and 8px at md/lg, never rounded-full. When Tabs and a scoped search field coexist, compose one responsive control row with tabs leading and search trailing; do not stack search above tabs at widths where both fit. (variants: orientation: horizontal|vertical; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
467
+ - [TabSeparator] — component (variants: orientation: horizontal|vertical; selected: true|false) [docs](https://ads.actioneer.dev/#/tabs)
439
468
  - [Timeline] — Use for a vertical rail of dated events — version history, audit trails, activity/status feeds. [docs](https://ads.actioneer.dev/#/timeline)
440
469
  - [TimelineItem] — component [docs](https://ads.actioneer.dev/#/timeline)
441
470
  - [Tree] — component [docs](https://ads.actioneer.dev/#/tree)
@@ -484,6 +513,7 @@ Before using any component below, preserve its built-in motion and apply the mot
484
513
  - [ChartTooltipItem] — TypeScript type
485
514
  - [ChartTooltipRenderer] — TypeScript type
486
515
  - [ChartXScale] — TypeScript type
516
+ - [ChipInteraction] — TypeScript type
487
517
  - [ChipProps] — TypeScript type
488
518
  - [ClarificationAnswerProps] — TypeScript type
489
519
  - [ClarificationAnswerSpec] — TypeScript type
@@ -514,6 +544,7 @@ Before using any component below, preserve its built-in motion and apply the mot
514
544
  - [ExplanationAnswerSpec] — TypeScript type
515
545
  - [FactAnswerProps] — TypeScript type
516
546
  - [FactAnswerSpec] — TypeScript type
547
+ - [FollowUpQuestionProps] — TypeScript type
517
548
  - [FunnelBarsHorizontalProps] — TypeScript type
518
549
  - [FunnelChartProps] — TypeScript type
519
550
  - [FunnelLabelContext] — TypeScript type
@@ -568,6 +599,7 @@ Before using any component below, preserve its built-in motion and apply the mot
568
599
  - [TreeItemProps] — TypeScript type
569
600
  - [TreemapChartProps] — TypeScript type
570
601
  - [TreemapDatum] — TypeScript type
602
+ - [TreeProps] — TypeScript type
571
603
  - [TrendAnswerProps] — TypeScript type
572
604
  - [TrendAnswerSpec] — TypeScript type
573
605
  - [Viewport] — TypeScript type
@@ -616,11 +648,9 @@ Before using any component below, preserve its built-in motion and apply the mot
616
648
 
617
649
  ### Feedback
618
650
 
619
- - [AgentIcon] — component [docs](https://ads.actioneer.dev/#/agent-icon)
620
- - [Alert] — Use for persistent inline status messaging on a page (not toasts) — a neutral surface where only the icon and title carry variant color. (variants: variant: default|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/alert)
651
+ - [Alert] — Use for inline status messaging on a raised white surface. Add duration for a temporary announcement with a countdown bar; otherwise it remains persistent. (variants: variant: default|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/alert)
621
652
  - [AlertDescription] — component (variants: variant: default|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/alert)
622
653
  - [AlertTitle] — component (variants: variant: default|success|warning|danger|info) [docs](https://ads.actioneer.dev/#/alert)
623
- - [BrandLoader] — Use for a branded loading/generating indicator (inline in a text row or as a standalone full-screen moment) instead of a generic spinner. [docs](https://ads.actioneer.dev/#/brand-loader)
624
654
  - [BrandMark] — component [docs](https://ads.actioneer.dev/#/brand-loader)
625
655
  - [BrandTexture] — Place the ambient halftone wash behind a welcome or hero surface inside a relative container; set lifted when real content takes over so the field dissolves upward, and paused a beat later to stop the shader clock. [docs](https://ads.actioneer.dev/#/brand-texture)
626
656
  - [BrandTextureField] — component [docs](https://ads.actioneer.dev/#/brand-texture)
@@ -630,41 +660,31 @@ Before using any component below, preserve its built-in motion and apply the mot
630
660
  - [EmptySearch] — component [docs](https://ads.actioneer.dev/#/empty-state)
631
661
  - [EmptyState] — Use as the centered placeholder inside a list, table, or panel that currently has nothing to show. [docs](https://ads.actioneer.dev/#/empty-state)
632
662
  - [PixelBlastSVG] — component [docs](https://ads.actioneer.dev/#/pixel-blast-svg)
633
- - [PixelIcon] — component [docs](https://ads.actioneer.dev/#/pixel-icon)
634
663
  - [Progress] — Use for a determinate or indeterminate bar showing task completion, driven by a value/max (default 100). [docs](https://ads.actioneer.dev/#/progress)
635
664
  - [ProgressCircle] — Use for a compact circular loading/progress indicator (determinate or indeterminate) where a linear bar doesn't fit, e.g. inline with a caption or a small avatar-sized control. [docs](https://ads.actioneer.dev/#/progress-circle)
636
665
  - [Ripple] — component [docs](https://ads.actioneer.dev/#/ripple)
637
666
  - [Skeleton] — Placeholder the shape of content that's still loading — size it via className and pair with circle for avatars. [docs](https://ads.actioneer.dev/#/skeleton)
638
- - [AgentIconColorPreset] — TypeScript type
639
- - [AgentIconName] — TypeScript type
640
- - [AgentIconProps] — TypeScript type
641
- - [AgentIconState] — TypeScript type
667
+ - [SurfaceLoader] — Use for any whole panel, modal, or page that is temporarily blocked; it owns the ADS surface spinner, visible status, spacing, and busy semantics. [docs](https://ads.actioneer.dev/#/surface-loader)
642
668
  - [AlertProps] — TypeScript type
643
- - [BrandLoaderProps] — TypeScript type
644
669
  - [BrandMarkProps] — TypeScript type
645
670
  - [BrandTextureProps] — TypeScript type
646
671
  - [EmptyStateProps] — TypeScript type
647
672
  - [PixelBlastSVGProps] — TypeScript type
648
- - [PixelIconMask] — TypeScript type
649
- - [PixelIconProps] — TypeScript type
650
673
  - [ProgressCircleProps] — TypeScript type
651
674
  - [ProgressProps] — TypeScript type
652
675
  - [RippleProps] — TypeScript type
653
676
  - [SkeletonProps] — TypeScript type
654
- - [AGENT_ICON_NAMES] — utility
655
- - [AGENT_ICONS] — utility
677
+ - [SurfaceLoaderProps] — TypeScript type
656
678
 
657
679
  ### Navigation
658
680
 
681
+ - [BodyPageHeader] — component [docs](https://ads.actioneer.dev/#/body-page-header)
659
682
  - [BreadcrumbItem] — component [docs](https://ads.actioneer.dev/#/breadcrumbs)
660
683
  - [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)
661
- - [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)
662
- - [NavbarBrand] — component (variants: justify: start|center|end) [docs](https://ads.actioneer.dev/#/navbar)
663
- - [NavbarContent] — component (variants: justify: start|center|end) [docs](https://ads.actioneer.dev/#/navbar)
664
- - [NavbarItem] — component (variants: justify: start|center|end) [docs](https://ads.actioneer.dev/#/navbar)
665
- - [PageHeader] — Use for every page title row; supply onBack to anchor an icon-only back arrow immediately before the title, never in the trailing actions area. [docs](https://ads.actioneer.dev/#/page-header)
684
+ - [CollectionHeader] — Use for a top-level sidebar destination or collection. Supply the destination icon, keep search and secondary controls before one compact primary action, and place collection content below its built-in separator. [docs](https://ads.actioneer.dev/#/collection-header)
685
+ - [PageHeader] — Use for detail, create, and edit page title rows; supply onBack to anchor an icon-only back arrow immediately before the title. Use CollectionHeader for top-level sidebar destinations and collections. [docs](https://ads.actioneer.dev/#/page-header)
666
686
  - [Pagination] — Use for navigating multi-page numbered content — table footers, search results, or any list too long for one screen. [docs](https://ads.actioneer.dev/#/pagination)
667
- - [Sidebar] — Use as an app's vertical navigation rail. The canonical Actioneer shell pairs one collapsible global product rail with one fixed contextual Sidebar inside the shared workspace Panel; only the global rail owns a collapse control. Compose SidebarBrand, grouped SidebarItems, optional SidebarHistory, and SidebarAccount as the area requires. [docs](https://ads.actioneer.dev/#/sidebar)
687
+ - [Sidebar] — Use as an app's vertical navigation rail. The canonical Actioneer shell uses one collapsible Sidebar for product areas and the active area's grouped internal options. Compose SidebarBrand, grouped SidebarItems, optional SidebarHistory, and SidebarAccount as the area requires. [docs](https://ads.actioneer.dev/#/sidebar)
668
688
  - [SidebarAccount] — component [docs](https://ads.actioneer.dev/#/sidebar)
669
689
  - [SidebarAction] — component [docs](https://ads.actioneer.dev/#/sidebar)
670
690
  - [SidebarBrand] — component [docs](https://ads.actioneer.dev/#/sidebar)
@@ -676,10 +696,10 @@ Before using any component below, preserve its built-in motion and apply the mot
676
696
  - [SidebarNav] — component [docs](https://ads.actioneer.dev/#/sidebar)
677
697
  - [SidebarSection] — component [docs](https://ads.actioneer.dev/#/sidebar)
678
698
  - [SidebarTrigger] — component [docs](https://ads.actioneer.dev/#/sidebar)
699
+ - [BodyPageHeaderProps] — TypeScript type
679
700
  - [BreadcrumbItemProps] — TypeScript type
680
701
  - [BreadcrumbsProps] — TypeScript type
681
- - [NavbarContentProps] — TypeScript type
682
- - [NavbarItemProps] — TypeScript type
702
+ - [CollectionHeaderProps] — TypeScript type
683
703
  - [PageHeaderProps] — TypeScript type
684
704
  - [PaginationProps] — TypeScript type
685
705
  - [SidebarAccountProps] — TypeScript type
@@ -697,6 +717,7 @@ Before using any component below, preserve its built-in motion and apply the mot
697
717
  - [Collapsible] — Reach for it to build a single disclosure row, detail panel, or FAQ item that expands/collapses in place — compose several instances for a list since ADS has no accordion-group wrapper. [docs](https://ads.actioneer.dev/#/collapsible)
698
718
  - [CollapsibleContent] — component [docs](https://ads.actioneer.dev/#/collapsible)
699
719
  - [CollapsibleTrigger] — component [docs](https://ads.actioneer.dev/#/collapsible)
720
+ - [PageBody] — component [docs](https://ads.actioneer.dev/#/page-body)
700
721
  - [Panel] — Use Panel for app-frame regions (editors, previews, side columns, tool windows) that need a fixed header/footer around independently scrolling body content. [docs](https://ads.actioneer.dev/#/panel)
701
722
  - [PanelBody] — component [docs](https://ads.actioneer.dev/#/panel)
702
723
  - [PanelFooter] — component [docs](https://ads.actioneer.dev/#/panel)
@@ -705,6 +726,7 @@ Before using any component below, preserve its built-in motion and apply the mot
705
726
  - [PanelToolbar] — component [docs](https://ads.actioneer.dev/#/panel)
706
727
  - [SelectionActionBar] — Render it above a selectable list or table once selectedCount is greater than zero, to summarize the selection and expose bulk actions plus a clear control. [docs](https://ads.actioneer.dev/#/selection-action-bar)
707
728
  - [SelectionActionBarAction] — component [docs](https://ads.actioneer.dev/#/selection-action-bar)
729
+ - [PageBodyProps] — TypeScript type
708
730
  - [SelectionActionBarProps] — TypeScript type
709
731
 
710
732
  ### AI Elements
@@ -724,20 +746,20 @@ Before using any component below, preserve its built-in motion and apply the mot
724
746
  - [ChainOfThoughtSearchResults] — component [docs](https://ads.actioneer.dev/#/ai/chain-of-thought)
725
747
  - [ChainOfThoughtStep] — component [docs](https://ads.actioneer.dev/#/ai/chain-of-thought)
726
748
  - [ChainOfThoughtTrigger] — component [docs](https://ads.actioneer.dev/#/ai/chain-of-thought)
727
- - [InlineCitation] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
728
- - [InlineCitationCard] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
729
- - [InlineCitationCardBody] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
730
- - [InlineCitationCardTrigger] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
731
- - [InlineCitationCarousel] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
732
- - [InlineCitationCarouselContent] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
733
- - [InlineCitationCarouselHeader] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
734
- - [InlineCitationCarouselIndex] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
735
- - [InlineCitationCarouselItem] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
736
- - [InlineCitationCarouselNext] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
737
- - [InlineCitationCarouselPrev] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
738
- - [InlineCitationQuote] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
739
- - [InlineCitationSource] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
740
- - [InlineCitationText] — component [docs](https://ads.actioneer.dev/#/ai/inline-citation)
749
+ - [InlineCitation] — component [docs](https://ads.actioneer.dev/#/inline-citation)
750
+ - [InlineCitationCard] — component [docs](https://ads.actioneer.dev/#/inline-citation)
751
+ - [InlineCitationCardBody] — component [docs](https://ads.actioneer.dev/#/inline-citation)
752
+ - [InlineCitationCardTrigger] — component [docs](https://ads.actioneer.dev/#/inline-citation)
753
+ - [InlineCitationCarousel] — component [docs](https://ads.actioneer.dev/#/inline-citation)
754
+ - [InlineCitationCarouselContent] — component [docs](https://ads.actioneer.dev/#/inline-citation)
755
+ - [InlineCitationCarouselHeader] — component [docs](https://ads.actioneer.dev/#/inline-citation)
756
+ - [InlineCitationCarouselIndex] — component [docs](https://ads.actioneer.dev/#/inline-citation)
757
+ - [InlineCitationCarouselItem] — component [docs](https://ads.actioneer.dev/#/inline-citation)
758
+ - [InlineCitationCarouselNext] — component [docs](https://ads.actioneer.dev/#/inline-citation)
759
+ - [InlineCitationCarouselPrev] — component [docs](https://ads.actioneer.dev/#/inline-citation)
760
+ - [InlineCitationQuote] — component [docs](https://ads.actioneer.dev/#/inline-citation)
761
+ - [InlineCitationSource] — component [docs](https://ads.actioneer.dev/#/inline-citation)
762
+ - [InlineCitationText] — component [docs](https://ads.actioneer.dev/#/inline-citation)
741
763
  - [Message] — component (variants: align: start|end) [docs](https://ads.actioneer.dev/#/ai/message)
742
764
  - [MessageAction] — component (variants: align: start|end; variant: contained|flat|plain|request) [docs](https://ads.actioneer.dev/#/ai/message)
743
765
  - [MessageActions] — component (variants: align: start|end; variant: contained|flat|plain|request) [docs](https://ads.actioneer.dev/#/ai/message)
@@ -754,43 +776,14 @@ Before using any component below, preserve its built-in motion and apply the mot
754
776
  - [MessageMeta] — component (variants: align: start|end; variant: contained|flat|plain|request) [docs](https://ads.actioneer.dev/#/ai/message)
755
777
  - [MessageResponse] — component (variants: align: start|end; variant: contained|flat|plain|request) [docs](https://ads.actioneer.dev/#/ai/message)
756
778
  - [MessageToolbar] — component (variants: align: start|end; variant: contained|flat|plain|request) [docs](https://ads.actioneer.dev/#/ai/message)
757
- - [Queue] — component [docs](https://ads.actioneer.dev/#/ai/queue)
758
- - [QueueItem] — component [docs](https://ads.actioneer.dev/#/ai/queue)
759
- - [QueueItemAction] — component [docs](https://ads.actioneer.dev/#/ai/queue)
760
- - [QueueItemActions] — component [docs](https://ads.actioneer.dev/#/ai/queue)
761
- - [QueueItemAttachment] — component [docs](https://ads.actioneer.dev/#/ai/queue)
762
- - [QueueItemContent] — component [docs](https://ads.actioneer.dev/#/ai/queue)
763
- - [QueueItemDescription] — component [docs](https://ads.actioneer.dev/#/ai/queue)
764
- - [QueueItemFile] — component [docs](https://ads.actioneer.dev/#/ai/queue)
765
- - [QueueItemImage] — component [docs](https://ads.actioneer.dev/#/ai/queue)
766
- - [QueueItemIndicator] — component [docs](https://ads.actioneer.dev/#/ai/queue)
767
- - [QueueList] — component [docs](https://ads.actioneer.dev/#/ai/queue)
768
- - [QueueSection] — component [docs](https://ads.actioneer.dev/#/ai/queue)
769
- - [QueueSectionContent] — component [docs](https://ads.actioneer.dev/#/ai/queue)
770
- - [QueueSectionLabel] — component [docs](https://ads.actioneer.dev/#/ai/queue)
771
- - [QueueSectionTrigger] — component [docs](https://ads.actioneer.dev/#/ai/queue)
772
779
  - [ResearchActivity] — Wrap a multi-step research trace that may run for minutes; pass activity so the run reads as one morphing live line with the full trace a click away, then settle into its source count, duration, and first-insight time. (variants: status: active|complete) [docs](https://ads.actioneer.dev/#/ai/research-activity)
773
- - [Shimmer] — component [docs](https://ads.actioneer.dev/#/ai/shimmer)
774
- - [SpeechInput] — component [docs](https://ads.actioneer.dev/#/ai/speech-input)
775
- - [Task] — component [docs](https://ads.actioneer.dev/#/ai/task)
776
- - [TaskContent] — component [docs](https://ads.actioneer.dev/#/ai/task)
777
- - [TaskItem] — component [docs](https://ads.actioneer.dev/#/ai/task)
778
- - [TaskItemFile] — component [docs](https://ads.actioneer.dev/#/ai/task)
779
- - [TaskProgress] — Keep a multi-step answer’s current task, elapsed time, completed work, and pending work visible in a collapsible dock above the chat composer. (variants: isSticky: true|false) [docs](https://ads.actioneer.dev/#/ai/task-progress)
780
- - [TaskProgressDock] — component (variants: isSticky: true|false) [docs](https://ads.actioneer.dev/#/ai/task-progress)
781
- - [TaskTrigger] — component [docs](https://ads.actioneer.dev/#/ai/task)
780
+ - [Shimmer] — component [docs](https://ads.actioneer.dev/#/shimmer)
782
781
  - [ToolContent] — component [docs](https://ads.actioneer.dev/#/ai/tool)
783
782
  - [ToolHeader] — component [docs](https://ads.actioneer.dev/#/ai/tool)
784
783
  - [ToolInput] — component [docs](https://ads.actioneer.dev/#/ai/tool)
785
784
  - [ToolOutput] — component [docs](https://ads.actioneer.dev/#/ai/tool)
786
785
  - [TraceStateIcon] — component [docs](https://ads.actioneer.dev/#/chain-of-thought-icon)
787
786
  - [Transcript] — component [docs](https://ads.actioneer.dev/#/ai/transcript)
788
- - [Voice] — component [docs](https://ads.actioneer.dev/#/ai/voice)
789
- - [VoiceConnectButton] — component [docs](https://ads.actioneer.dev/#/ai/voice)
790
- - [VoiceControl] — component [docs](https://ads.actioneer.dev/#/ai/voice)
791
- - [VoiceDisconnectButton] — component [docs](https://ads.actioneer.dev/#/ai/voice)
792
- - [VoiceMuteButton] — component [docs](https://ads.actioneer.dev/#/ai/voice)
793
- - [VoiceStatusDot] — component [docs](https://ads.actioneer.dev/#/ai/voice)
794
787
  - [ActiveChainOfThoughtState] — TypeScript type
795
788
  - [AgentTraceCall] — TypeScript type
796
789
  - [AgentTraceProps] — TypeScript type
@@ -848,36 +841,8 @@ Before using any component below, preserve its built-in motion and apply the mot
848
841
  - [MessageResponseProps] — TypeScript type
849
842
  - [MessageRole] — TypeScript type
850
843
  - [MessageToolbarProps] — TypeScript type
851
- - [QueueItemActionProps] — TypeScript type
852
- - [QueueItemActionsProps] — TypeScript type
853
- - [QueueItemAttachmentProps] — TypeScript type
854
- - [QueueItemContentProps] — TypeScript type
855
- - [QueueItemDescriptionProps] — TypeScript type
856
- - [QueueItemFileProps] — TypeScript type
857
- - [QueueItemImageProps] — TypeScript type
858
- - [QueueItemIndicatorProps] — TypeScript type
859
- - [QueueItemProps] — TypeScript type
860
- - [QueueListProps] — TypeScript type
861
- - [QueueMessage] — TypeScript type
862
- - [QueueMessagePart] — TypeScript type
863
- - [QueueProps] — TypeScript type
864
- - [QueueSectionContentProps] — TypeScript type
865
- - [QueueSectionLabelProps] — TypeScript type
866
- - [QueueSectionProps] — TypeScript type
867
- - [QueueSectionTriggerProps] — TypeScript type
868
- - [QueueTodo] — TypeScript type
869
844
  - [ResearchActivityProps] — TypeScript type
870
845
  - [ResearchActivityStatus] — TypeScript type
871
- - [SpeechInputProps] — TypeScript type
872
- - [TaskContentProps] — TypeScript type
873
- - [TaskItemFileProps] — TypeScript type
874
- - [TaskItemProps] — TypeScript type
875
- - [TaskProgressDockProps] — TypeScript type
876
- - [TaskProgressProps] — TypeScript type
877
- - [TaskProgressStatus] — TypeScript type
878
- - [TaskProgressStep] — TypeScript type
879
- - [TaskProps] — TypeScript type
880
- - [TaskTriggerProps] — TypeScript type
881
846
  - [TextShimmerProps] — TypeScript type
882
847
  - [ToolContentProps] — TypeScript type
883
848
  - [ToolHeaderProps] — TypeScript type
@@ -889,24 +854,11 @@ Before using any component below, preserve its built-in motion and apply the mot
889
854
  - [TranscriptProps] — TypeScript type
890
855
  - [TranscriptTone] — TypeScript type
891
856
  - [TranscriptTurn] — TypeScript type
892
- - [VoiceConnectButtonProps] — TypeScript type
893
- - [VoiceControlProps] — TypeScript type
894
- - [VoiceDisconnectButtonProps] — TypeScript type
895
- - [VoiceMuteButtonProps] — TypeScript type
896
- - [VoiceOrbPalette] — TypeScript type
897
- - [VoicePalette] — TypeScript type
898
- - [VoiceProps] — TypeScript type
899
- - [VoiceState] — TypeScript type
900
- - [VoiceStatusDotProps] — TypeScript type
901
- - [VoiceVariant] — TypeScript type
902
857
  - [aiChartVariants] — utility
903
858
  - [CHAIN_OF_THOUGHT_DESCRIPTIONS] — utility
904
859
  - [CHAIN_OF_THOUGHT_STATES] — utility
905
860
  - [resolveTraceState] — utility
906
861
  - [Tool] — utility
907
- - [VOICE_PALETTES] — utility
908
- - [VOICE_STATES] — utility
909
- - [VOICE_VARIANTS] — utility
910
862
 
911
863
  ### Chat
912
864
 
@@ -914,7 +866,6 @@ Before using any component below, preserve its built-in motion and apply the mot
914
866
  - [AssistantMessage] — component [docs](https://ads.actioneer.dev/#/demo/ask)
915
867
  - [AssistantRuntimeProvider] — component [docs](https://ads.actioneer.dev/#/demo/ask)
916
868
  - [AttachmentPrimitive] — component [docs](https://ads.actioneer.dev/#/demo/ask)
917
- - [BranchPicker] — component [docs](https://ads.actioneer.dev/#/demo/ask)
918
869
  - [Composer] — component [docs](https://ads.actioneer.dev/#/demo/ask)
919
870
  - [ComposerAddAttachment] — component [docs](https://ads.actioneer.dev/#/demo/ask)
920
871
  - [ComposerAddDocument] — component [docs](https://ads.actioneer.dev/#/demo/ask)
@@ -942,8 +893,6 @@ Before using any component below, preserve its built-in motion and apply the mot
942
893
  - [FileName] — component [docs](https://ads.actioneer.dev/#/demo/ask)
943
894
  - [FileRoot] — component [docs](https://ads.actioneer.dev/#/demo/ask)
944
895
  - [FileSize] — component [docs](https://ads.actioneer.dev/#/demo/ask)
945
- - [FollowUpQuestion] — Use for the two or three full-width next-question rows that close a structured answer, immediately after its source strip; show the exact prompt that clicking will send. [docs](https://ads.actioneer.dev/#/ai/follow-up-suggestions)
946
- - [FollowUpSuggestion] — Use only for compact runtime suggestion chips above the composer; use FollowUpQuestion for the larger answer-ending question rows. [docs](https://ads.actioneer.dev/#/ai/follow-up-suggestions)
947
896
  - [Image] — component [docs](https://ads.actioneer.dev/#/demo/ask)
948
897
  - [ImageActions] — component [docs](https://ads.actioneer.dev/#/demo/ask)
949
898
  - [ImageContentFilterError] — component [docs](https://ads.actioneer.dev/#/demo/ask)
@@ -971,11 +920,8 @@ Before using any component below, preserve its built-in motion and apply the mot
971
920
  - [Sources] — component [docs](https://ads.actioneer.dev/#/demo/ask)
972
921
  - [SourceTitle] — component [docs](https://ads.actioneer.dev/#/demo/ask)
973
922
  - [Thread] — component [docs](https://ads.actioneer.dev/#/demo/ask)
974
- - [ThreadFollowupSuggestions] — component [docs](https://ads.actioneer.dev/#/demo/ask)
975
923
  - [ThreadMessage] — component [docs](https://ads.actioneer.dev/#/demo/ask)
976
924
  - [ThreadPrimitive] — component [docs](https://ads.actioneer.dev/#/demo/ask)
977
- - [ThreadSuggestionItem] — component [docs](https://ads.actioneer.dev/#/demo/ask)
978
- - [ThreadSuggestions] — component [docs](https://ads.actioneer.dev/#/demo/ask)
979
925
  - [ToolFallback] — component [docs](https://ads.actioneer.dev/#/demo/ask)
980
926
  - [ToolFallbackApproval] — component [docs](https://ads.actioneer.dev/#/demo/ask)
981
927
  - [ToolFallbackArgs] — component [docs](https://ads.actioneer.dev/#/demo/ask)
@@ -997,8 +943,6 @@ Before using any component below, preserve its built-in motion and apply the mot
997
943
  - [CreateDirectiveTextOptions] — TypeScript type
998
944
  - [DeepResearchState] — TypeScript type
999
945
  - [FileRootProps] — TypeScript type
1000
- - [FollowUpQuestionProps] — TypeScript type
1001
- - [FollowUpSuggestionProps] — TypeScript type
1002
946
  - [ImageActionsProps] — TypeScript type
1003
947
  - [ImageRootProps] — TypeScript type
1004
948
  - [LocalRuntimeOptions] — TypeScript type