# Unseen UI
> Controlled React 19 components for AI interfaces and the applications around them: chat, streaming replies, tool calls, approvals with host receipts, runs, sources, generated UI, MCP and trust signals. Published as @stackunseen/ui and @stackunseen/ui-core. No Tailwind required; styles are opt-in CSS files.
Rules the components follow: the host executes and authorises every action; a clicked button is a request until the host answers; unknown outcomes stay unknown; model output is rendered as inert data, never executed.
## Start
- [Getting started](https://unseenui.com/getting-started/): install, the first component, optional entries.
- [Chat](https://unseenui.com/components/chat/): `import { Chat, useLocalHost, useAiSdkChat } from '@stackunseen/ui/chat'`; `` connects the Vercel AI SDK, including tool approvals.
- [Full text for agents](https://unseenui.com/llms-full.txt): every component with its contract, responsibility and example.
- Component docs as Markdown: `https://unseenui.com/llms/.md` (for example [button.md](https://unseenui.com/llms/button.md)) has the usage, props, keyboard behavior and related components. The links below point to them.
- [Design tokens](https://unseenui.com/docs/tokens/): every `--ai-*` CSS variable, what it is for and its light and dark value. Style custom UI with these, not raw colors.
- Machine-readable API: `@stackunseen/ui/manifest.json` in the package lists every export, the props of each component, naming rules and the CSS variables.
- [shadcn registry](https://unseenui.com/r/registry.json): `npx shadcn@latest add https://unseenui.com/r/chat.json` (also chat-ai-sdk and theme) installs @stackunseen/ui and writes a starter file.
## Forms
- [Field](https://unseenui.com/llms/field.md): A shared label, description and validation message around a form control.
- [Input](https://unseenui.com/llms/input.md): A text input that works with Field and your own validation.
- [Textarea](https://unseenui.com/llms/textarea.md): A native multiline field for descriptions and longer written content.
- [Checkbox](https://unseenui.com/llms/checkbox.md): A checkbox, including a mixed state for partly selected groups.
- [Switch](https://unseenui.com/llms/switch.md): An on/off setting with a label.
- [RadioGroup](https://unseenui.com/llms/radio-group.md): A labeled set of options where only one can be picked.
- [TonePad](https://unseenui.com/llms/tone-pad.md): Two choices on one square: drag the handle between Formal and Casual, Brief and Detailed.
- [Slider](https://unseenui.com/llms/slider.md): Pick a number or a range by dragging or with the arrow keys.
- [InputGroup](https://unseenui.com/llms/input-group.md): One bordered control that holds an input and its action.
- [Combobox](https://unseenui.com/llms/combobox.md): Search a list and choose one value, or several with type="multiple", with clear loading and error messages.
- [Calendar](https://unseenui.com/llms/calendar.md): Pick a date or a range, in any language, limited to the dates you allow.
- [DateRangePicker](https://unseenui.com/llms/date-range-picker.md): A date range field with a pop-up calendar that works from the keyboard.
- [Select](https://unseenui.com/llms/select.md): A dropdown for picking one option, with full keyboard support.
## Overlays
- [Popover](https://unseenui.com/llms/popover.md): A small panel that opens from a button and can hold controls.
- [Tooltip](https://unseenui.com/llms/tooltip.md): A short hint that appears on hover and keyboard focus.
- [AlertDialog](https://unseenui.com/llms/alert-dialog.md): A confirmation dialog that stays open until your app confirms the action worked.
- [Modal](https://unseenui.com/llms/modal.md): A dialog, side sheet or full-screen panel for a focused task.
## Navigation
- [DropdownMenu](https://unseenui.com/llms/dropdown-menu.md): A menu of actions behind a button, with checkable and disabled items.
- [ContextMenu](https://unseenui.com/llms/context-menu.md): Actions for an item, opened by right-click or the menu key.
- [NavigationMenu](https://unseenui.com/llms/navigation-menu.md): Website navigation with links and dropdown groups.
- [Breadcrumb](https://unseenui.com/llms/breadcrumb.md): The path to the current page, with links back up.
- [Pagination](https://unseenui.com/llms/pagination.md): Move between pages of results, even when the total isn’t known.
- [Sidebar](https://unseenui.com/llms/sidebar.md): App navigation in groups, marking the current page.
- [Stepper](https://unseenui.com/llms/stepper.md): A step indicator for series and multi-step paths, as dots or a list, with optional links.
- [CommandPalette](https://unseenui.com/llms/command-palette.md): A Ctrl/Cmd+K menu for jumping to places and searching, with results in groups.
- [TableOfContents](https://unseenui.com/llms/table-of-contents.md): An "On this page" rail that marks the section being read.
- [ShareMenu](https://unseenui.com/llms/share-menu.md): Copy link, the device share sheet when there is one, and configurable targets.
- [Tabs](https://unseenui.com/llms/tabs.md): Switch between related views of the same thing.
## Feedback
- [Alert](https://unseenui.com/llms/alert.md): A message that stays on the page, with a tone, optional actions and a choice of how urgently screen readers hear it.
- [EmptyState](https://unseenui.com/llms/empty-state.md): Explains why there’s nothing here and what to do next.
- [Progress](https://unseenui.com/llms/progress.md): Progress as a bar or a ring, for work you can measure or with an honestly unknown total.
- [Toast](https://unseenui.com/llms/toast.md): A short-lived notification people can dismiss, with its action also available elsewhere.
- [LoadingIndicator](https://unseenui.com/llms/loading-indicator.md): Shows that something is happening, without pretending to know how far along it is.
- [Skeleton](https://unseenui.com/llms/skeleton.md): Placeholders that hold space while real content loads.
- [StatusBadge](https://unseenui.com/llms/status-badge.md): A status label with a matching icon and color.
## Data Display
- [Card](https://unseenui.com/llms/card.md): A box with a header (title, description and actions), a body and a footer, or a card that is one big link.
- [Table](https://unseenui.com/llms/table.md): A plain table in a labeled area you can scroll with the keyboard.
- [Tag](https://unseenui.com/llms/tag.md): A neutral label for categories and levels, with tones and two sizes.
- [DiffStat](https://unseenui.com/llms/diff-stat.md): Lines added and removed for a change, with optional file count and blocks.
- [ElapsedTime](https://unseenui.com/llms/elapsed-time.md): Time spent on a run or turn, ticking while it runs and fixed once it ends.
- [Numeric](https://unseenui.com/llms/numeric.md): A figure in the numeric face with its qualifier in words, so numbers line up across a screen.
- [Kbd](https://unseenui.com/llms/kbd.md): One key cap, for shortcut hints beside actions and in menus.
- [DotRing](https://unseenui.com/llms/dot-ring.md): A ring of dotted spokes, one per hour or step, denser where the value is higher, with a figure in the centre.
- [DotBars](https://unseenui.com/llms/dot-bars.md): A histogram built from dots, one column per day or step, with a highlighted range and an accent outlier.
- [WeekStrip](https://unseenui.com/llms/week-strip.md): Seven columns with the series stacked inside each and the current day in bold, for a week at a glance.
- [HeatKeys](https://unseenui.com/llms/heat-keys.md): A grid of cells shaded in four steps by their value, laid out like a keyboard or any grid, with the label kept on every cell.
- [Sparkline](https://unseenui.com/llms/sparkline.md): A word-sized trend for a stat card or a table cell, as a line, an area or bars, with gaps left open.
- [BarList](https://unseenui.com/llms/bar-list.md): Ranked rows with a bar behind each name, for tokens by tool, spend by agent or calls by model.
- [Tracker](https://unseenui.com/llms/tracker.md): A strip of blocks, one per day or run, coloured by how it went, for nightly evals, uptime or a run history.
- [DonutChart](https://unseenui.com/llms/donut-chart.md): Shares of one total as a ring, with the total in the centre and every share printed in the legend.
- [Avatar](https://unseenui.com/llms/avatar.md): An image or initials for a person or team, decorative unless given a name.
- [Stat](https://unseenui.com/llms/stat.md): A formatted number with its label, optional change and note, for rows of metrics.
- [Matrix](https://unseenui.com/llms/matrix.md): A heatmap table of counts with a single-hue fill, linked headers and linked cells.
- [DataGrid](https://unseenui.com/llms/data-grid.md): A table with sorting, paging, row selection and column toggles.
- [Accordion](https://unseenui.com/llms/accordion.md): Sections people can open and close.
## Actions
- [ToggleGroup](https://unseenui.com/llms/toggle-group.md): Choose one or several options shown at once: filter pills with counts, or joined segments, as buttons or links.
- [Chip](https://unseenui.com/llms/chip.md): A compact label that links or can be removed, with a group that wraps or scrolls. For choices, use ToggleGroup.
- [CopyButton](https://unseenui.com/llms/copy-button.md): Copies a value and reports the real outcome.
- [AppearanceToggle](https://unseenui.com/llms/appearance-toggle.md): Lets people choose light, dark or the system setting.
- [Button](https://unseenui.com/llms/button.md): A labeled action in a few sizes and levels of emphasis.
- [IconButton](https://unseenui.com/llms/icon-button.md): An icon-only button with a required label, shown as a hint on hover and focus.
## Conversation
- [Reasoning](https://unseenui.com/llms/reasoning.md): A quiet, collapsible public reasoning summary that follows the stream.
- [SuggestTextarea](https://unseenui.com/llms/suggest-textarea.md): A text area that shows an AI completion as ghost text; Tab accepts it.
- [Checkpoint](https://unseenui.com/llms/checkpoint.md): A divider marking a restorable point in a conversation.
- [SlashCommandMenu](https://unseenui.com/llms/slash-command-menu.md): Find and run your app’s slash commands from the keyboard.
- [ThreadList](https://unseenui.com/llms/thread-list.md): Search, open, rename and archive conversations.
- [BranchSwitcher](https://unseenui.com/llms/branch-switcher.md): Move between versions of a conversation created by edits and retries.
- [MessageQueue](https://unseenui.com/llms/message-queue.md): Review, reorder and remove messages waiting to send.
- [PromptInput](https://unseenui.com/llms/prompt-input.md): The composer for sending a prompt, with attachments, a toolbar and a way to stop.
- [Message](https://unseenui.com/llms/message.md): One user, assistant or system message with its parts and references.
- [MessageActions](https://unseenui.com/llms/message-actions.md): Copy, retry, edit and feedback buttons for a message, each showing whether it worked.
- [StreamingResponse](https://unseenui.com/llms/streaming-response.md): Shows an answer as it streams in, and says clearly if it was cut off or failed.
- [Suggestions](https://unseenui.com/llms/suggestions.md): Follow-up prompts the user can send with one click.
- [FollowUps](https://unseenui.com/llms/follow-ups.md): Short next steps after a response, as chips with a lead word: "Then: Shorter · Add numbers".
- [Attachment](https://unseenui.com/llms/attachment.md): Files attached to a message, with real upload progress and previews.
- [FileDropzone](https://unseenui.com/llms/file-dropzone.md): A drop target for local files with a browse button and type, size and slot checks.
- [FeedbackCapture](https://unseenui.com/llms/feedback-capture.md): Thumbs up or down, reasons and a correction for one specific reply, saved once your server confirms.
- [ChatLauncher](https://unseenui.com/llms/chat-launcher.md): A floating chat bubble for a website that opens a chat panel, full screen on phones.
- [Chat](https://unseenui.com/llms/chat.md): A complete chat: messages, streaming replies, tool cards, suggestions, stop, retry and the composer. Connect it to your server or drive it with props.
## Tools & execution
- [WorkSummary](https://unseenui.com/llms/work-summary.md): The steps of one agent turn, open while it works and collapsed to "Worked for 15s" after.
- [ChainOfThought](https://unseenui.com/llms/chain-of-thought.md): The public steps a run took, each with its sources or files.
- [Plan](https://unseenui.com/llms/plan.md): A proposed plan with collapsible steps and a button to run it.
- [WorkflowGraph](https://unseenui.com/llms/workflow-graph.md): See a workflow’s branches, loops and joins as a graph, a list or an outline.
- [RunInspector](https://unseenui.com/llms/run-inspector.md): Look inside a run: each model, tool and agent step, with measured usage.
- [ConnectionStatus](https://unseenui.com/llms/connection-status.md): Whether you’re connected, with the reconnect and catch-up actions your app supports.
- [AgentSteps](https://unseenui.com/llms/agent-steps.md): The steps of a run in order, with where each one stands, its details and anything it depends on.
- [ExecutionTimeline](https://unseenui.com/llms/execution-timeline.md): A timed record of what happened during a run, as a list, a table or a waterfall with tokens and cost per step.
- [RunBoard](https://unseenui.com/llms/run-board.md): All your runs on one board, grouped by what they need, with live clocks, the newest steps, filters and actions.
- [AgentLanes](https://unseenui.com/llms/agent-lanes.md): Where every agent is right now: a lane per agent on one time axis, with the hand-offs drawn between lanes.
- [AttentionQueue](https://unseenui.com/llms/attention-queue.md): The ordered list of approvals, questions, handoffs and failures waiting on a person.
- [RunSummaryCard](https://unseenui.com/llms/run-summary-card.md): What a run did, for reading afterwards: the goal, the outcome, what it changed and what was left undone.
- [BackgroundStatus](https://unseenui.com/llms/background-status.md): A small persistent indicator for runs still going while the person is elsewhere.
- [RunCompare](https://unseenui.com/llms/run-compare.md): Two runs or checkpoints side by side: outcome, measurements, effects and timelines.
- [SubagentTree](https://unseenui.com/llms/subagent-tree.md): Parent and child runs as a tree with the message that spawned each child, and the cost of each branch.
- [AgentSteering](https://unseenui.com/llms/agent-steering.md): Queue a note for a running agent’s next step without stopping it, and see whether each note was applied.
- [CostLedger](https://unseenui.com/llms/cost-ledger.md): Where the money went, run by run, with measured and estimated costs kept apart and never added together.
- [ToolCall](https://unseenui.com/llms/tool-call.md): A tool request with its input, result, failure and duration.
- [ToolResult](https://unseenui.com/llms/tool-result.md): Tool output, size-limited, with a safe fallback for content it can’t show.
- [ToolGroup](https://unseenui.com/llms/tool-group.md): Several tool calls grouped together, keeping each failure visible.
- [UsageMeter](https://unseenui.com/llms/usage-meter.md): How much context or money has been used, with what the number means. A percentage shows only when there’s a known limit.
- [ContextWindowMeter](https://unseenui.com/llms/context-window-meter.md): How full the model’s context window is and what fills it, drawn to scale from the numbers your server supplies.
## Sources & evidence
- [Sources](https://unseenui.com/llms/sources.md): A "Used N sources" disclosure with safe links.
- [ProvenanceBadge](https://unseenui.com/llms/provenance-badge.md): Where content came from (a model, a tool, a person or an import), marked Signed only when your server verified it.
- [ConfidenceNote](https://unseenui.com/llms/confidence-note.md): A confidence score with what it covers, how it was worked out and when, or nothing at all. Never a bare number.
- [SourceCard](https://unseenui.com/llms/source-card.md): A source behind an answer, with its access state and excerpt.
- [Citation](https://unseenui.com/llms/citation.md): An inline reference that links a passage to its source.
- [EvidenceGroup](https://unseenui.com/llms/evidence-group.md): A claim with the sources that support it.
- [GroundingStatus](https://unseenui.com/llms/grounding-status.md): How well an answer is backed by sources, with what that measure means and its limits.
## Model settings
- [ModelSelector](https://unseenui.com/llms/model-selector.md): A compact model picker: each model with its description, and a check on the current one.
- [ModelControls](https://unseenui.com/llms/model-controls.md): Model capabilities, settings and usage, each showing where the value came from.
## Coding & artifacts
- [CodeTabs](https://unseenui.com/llms/code-tabs.md): A code viewer for the files of one example, with optional numbered tour stops.
- [Snippet](https://unseenui.com/llms/snippet.md): A single command with a copy button.
- [Commit](https://unseenui.com/llms/commit.md): A commit with its subject, author and changed files.
- [EnvironmentVariables](https://unseenui.com/llms/environment-variables.md): Environment variables with masked secret values.
- [PackageInfo](https://unseenui.com/llms/package-info.md): A package change with versions and dependencies.
- [SchemaDisplay](https://unseenui.com/llms/schema-display.md): An API operation with parameters and nested bodies.
- [StackTrace](https://unseenui.com/llms/stack-trace.md): A readable error with internal frames collapsed.
- [WebPreview](https://unseenui.com/llms/web-preview.md): A sandboxed preview of a web page, with an address bar.
- [Image](https://unseenui.com/llms/image.md): A generated or attached image, with what to show while it loads or if it fails.
- [FileExplorer](https://unseenui.com/llms/file-explorer.md): Browse files as folders, a detailed list or a directory tree.
- [CodeDiff](https://unseenui.com/llms/code-diff.md): Code changes, inline or side by side, with line numbers and clear size limits.
- [TerminalOutput](https://unseenui.com/llms/terminal-output.md): Process output that follows new lines (unless you’re selecting text), with a stop button.
- [TestResults](https://unseenui.com/llms/test-results.md): Test outcomes, timings, diagnostics and file navigation.
- [ArtifactDiff](https://unseenui.com/llms/artifact-diff.md): Compare two versions of a document, with a fallback when one can’t be opened.
- [ArtifactPanel](https://unseenui.com/llms/artifact-panel.md): A panel for generated documents and other artifacts.
- [ArtifactPreview](https://unseenui.com/llms/artifact-preview.md): Read-only previews of documents and bounded tables.
## Voice
- [AudioPlayer](https://unseenui.com/llms/audio-player.md): A compact player for generated or recorded audio.
- [Transcription](https://unseenui.com/llms/transcription.md): A timed transcript that follows playback and can seek.
- [VoiceSelector](https://unseenui.com/llms/voice-selector.md): Choose a speech voice and preview samples.
- [Persona](https://unseenui.com/llms/persona.md): An animated presence for voice agents.
- [VoiceControl](https://unseenui.com/llms/voice-control.md): Pick a microphone, record, watch the input level and follow the transcription.
## Layout
- [Sidecar](https://unseenui.com/llms/sidecar.md): A drawer, sheet or inspector panel: docked beside content, floating over it, and a modal drawer or bottom sheet on small screens.
- [SplitPane](https://unseenui.com/llms/split-pane.md): Two panes side by side that you can resize, also from the keyboard, stacking on small screens.
- [WorkspaceShell](https://unseenui.com/llms/workspace-shell.md): A full app frame with header, navigation, content, inspector and footer areas that adapts to screen size.
## Context & memory
- [MentionPicker](https://unseenui.com/llms/mention-picker.md): Type @ to add files, symbols, people or sources.
- [MemoryControls](https://unseenui.com/llms/memory-controls.md): See what the assistant remembers, and ask to correct or delete it.
- [ContextInspector](https://unseenui.com/llms/context-inspector.md): Lists what a request selected, included, excluded or truncated.
- [ContextBar](https://unseenui.com/llms/context-bar.md): What the current request includes, with removable items.
- [MemoryPanel](https://unseenui.com/llms/memory-panel.md): What the assistant remembers, with where each memory came from, how far it reaches and whether it was used just now.
## Review & permissions
- [AccessModeSelector](https://unseenui.com/llms/access-mode-selector.md): Ask for a different access level while keeping current permissions in view.
- [ReviewChanges](https://unseenui.com/llms/review-changes.md): Pick which proposed changes to keep and send one review decision.
- [ApprovalCard](https://unseenui.com/llms/approval-card.md): A review card for approving or rejecting a proposed action.
- [PermissionRequest](https://unseenui.com/llms/permission-request.md): A request for specific access, with its scope and version shown.
- [ScopeGrant](https://unseenui.com/llms/scope-grant.md): Permissions that stay in place, with their scope, expiry, how often they were used, and a way to revoke them.
- [DryRunPreview](https://unseenui.com/llms/dry-run-preview.md): The agent's declared effects before anything runs, with a veto per line and one versioned decision.
- [ApprovalBatch](https://unseenui.com/llms/approval-batch.md): Approve several similar proposals at once, and still leave any of them out.
## Agents & governance
- [AgentHandoff](https://unseenui.com/llms/agent-handoff.md): Hand work from one agent or person to another, with accept and decline.
- [AuditTrail](https://unseenui.com/llms/audit-trail.md): A searchable history of actions and their outcomes, with sensitive fields hidden.
- [PolicyStatus](https://unseenui.com/llms/policy-status.md): Policy check results, with who checked, when, what they covered and which version.
- [AgentCard](https://unseenui.com/llms/agent-card.md): The identity, capabilities and current activity of one agent.
## Forms & generated UI
- [AIForm](https://unseenui.com/llms/ai-form.md): Forms with fields that appear as needed, validation and confirmed submission.
- [GeneratedUI](https://unseenui.com/llms/generated-ui.md): Screens a model describes, such as forms, charts, tables, lists and steps, checked before they render.
- [Chart](https://unseenui.com/llms/chart.md): Bar, line and area charts with a matching data table, and gaps where data is missing.
- [ClarificationRequest](https://unseenui.com/llms/clarification-request.md): A question the assistant asks before it continues.
## Rich Content
- [MarkdownResponse](https://unseenui.com/llms/markdown-response.md): Formatted replies as they stream: headings, lists, tables, code, links and footnotes.
- [MarkdownCodeBlock](https://unseenui.com/llms/markdown-code-block.md): Code with a copy button, optional syntax colors and line numbers.
- [RichMarkdownResponse](https://unseenui.com/llms/rich-markdown-response.md): Markdown that also renders math and Mermaid diagrams.
- [MathFormula](https://unseenui.com/llms/math-formula.md): LaTeX formulas, rendered with KaTeX and readable by screen readers.
- [MermaidDiagram](https://unseenui.com/llms/mermaid-diagram.md): Mermaid diagrams with zoom and a source view, and a clear message when one can’t be drawn.
## MCP connections & tools
- [MCPServerCard](https://unseenui.com/llms/mcp-server-card.md): Whether an MCP server is connected, as your app reports it.
- [MCPToolList](https://unseenui.com/llms/mcp-tool-list.md): The tools an MCP server offers and the permissions they need.
- [MCPAppFrame](https://unseenui.com/llms/mcp-app-frame.md): A sandboxed frame for an MCP App view, talking to your app only through a bridge you control.