# Mischief UI > 117 React components for shadcn projects: document viewers and redaction, agent chat, data tables, command palettes, form controls, and shader fields, built with Tailwind CSS and shadcn theme tokens. Every component installs through the shadcn registry or from npm, and anything heavier than React is an optional peer. Each link below is that component's whole documentation as markdown: what it does, how to install it, a worked example, the concerns particular to it, its props, and its accessibility behaviour. - Install one component: `npx shadcn@latest add Tinkerers-Labs/mischief-ui/{name}` - Or from npm: `npm install mischief-ui`, then `import { X } from "mischief-ui/{name}"` - Any page on the site is also markdown at the same address with `.md` appended. ## Agent UI The surface an assistant answers through: the thread, the composer, and everything it shows while it is working. - [Conversation](https://ui.tinkererslabs.com/docs/components/conversation.md): The scroll container a thread lives in. It follows a streaming reply to the bottom, and stops the moment the reader scrolls up to read something older. - [Message](https://ui.tinkererslabs.com/docs/components/message.md): One turn in a thread, with a role, an optional avatar and timestamp, and actions that stay reachable without a pointer. - [Prompt Input](https://ui.tinkererslabs.com/docs/components/prompt-input.md): The composer. Grows with the message, sends on Enter, keeps Shift+Enter for a new line, and turns into a stop button while a reply streams. - [Suggestions](https://ui.tinkererslabs.com/docs/components/suggestions.md): A row of prompts to start or continue with, for the moment someone does not know what to ask. - [Questionnaire](https://ui.tinkererslabs.com/docs/components/questionnaire.md): The questions an agent asks before it starts. One at a time, with single or multiple answers, an open answer alongside them, and required ones it will not move past. - [Ask AI](https://ui.tinkererslabs.com/docs/components/ask-ai.md): Hand someone a prepared, source-aware prompt in the AI assistant they already use, or let them copy it for another one. - [Streaming Text](https://ui.tinkererslabs.com/docs/components/streaming-text.md): Text that arrives a piece at a time from an async source, with a cursor while it runs and sentence-level announcements for screen readers. - [Thinking State](https://ui.tinkererslabs.com/docs/components/thinking-state.md): A status row for work in progress, with a live elapsed timer and optional reasoning behind a disclosure. - [Tool Call](https://ui.tinkererslabs.com/docs/components/tool-call.md): A compact record of one tool invocation: name, status, duration, and the input and output behind a disclosure. - [Agent Checklist](https://ui.tinkererslabs.com/docs/components/agent-checklist.md): A task list whose items change state as work proceeds, announcing what changed instead of re-reading the whole list. - [Inline Citations](https://ui.tinkererslabs.com/docs/components/inline-citations.md): Numbered markers placed inside generated text, each linking to its entry in a source list underneath. - [Response Actions](https://ui.tinkererslabs.com/docs/components/response-actions.md): The row under an answer: copy it, ask again, and rate it. Drops into the actions slot on Message. - [Voice Input](https://ui.tinkererslabs.com/docs/components/voice-input.md): A microphone that draws what it is hearing, so a live one is told apart from a dead one at a glance. - [Audio Player](https://ui.tinkererslabs.com/docs/components/audio-player.md): A recording with its shape, its position and its words, so a voice note can be read as well as heard. - [Bar Visualizer](https://ui.tinkererslabs.com/docs/components/bar-visualizer.md): Frequency bars for audio on its way out, the counterpart to the trace a microphone draws on the way in. - [Mic Selector](https://ui.tinkererslabs.com/docs/components/mic-selector.md): Chooses which microphone to use, then settles the question by lighting a meter from the one you chose. - [Chain of Thought](https://ui.tinkererslabs.com/docs/components/chain-of-thought.md): The steps an assistant took before answering, open while it is working and folded away once it is done. - [Video Player](https://ui.tinkererslabs.com/docs/components/video-player.md): Video with captions that can be turned on, a real scrubber, and controls that survive full screen. - [Subagent Tree](https://ui.tinkererslabs.com/docs/components/subagent-tree.md): Several agents working at once, nested under whoever handed the work down, each with its own state and elapsed time. - [Stopped Run](https://ui.tinkererslabs.com/docs/components/stopped-run.md): What the thread says after an answer ended early, with whatever it had already written kept above the line. - [Memory Chips](https://ui.tinkererslabs.com/docs/components/memory-chips.md): Everything an assistant has been told to remember about someone, each one removable on its own. - [Orb](https://ui.tinkererslabs.com/docs/components/orb.md): A sphere that carries what an assistant is doing, settled when idle and moving with the voice when there is one. - [Matrix](https://ui.tinkererslabs.com/docs/components/matrix.md): A grid of cells lit from the bottom by a level, which reads as a piece of hardware rather than as a chart. - [Response](https://ui.tinkererslabs.com/docs/components/response.md): An assistant's answer as markdown, including while it is still half-written and briefly invalid. - [Transcript Viewer](https://ui.tinkererslabs.com/docs/components/transcript-viewer.md): A recording as text, where every line is also the way back to the moment it was said. - [Stop Generating](https://ui.tinkererslabs.com/docs/components/stop-generating.md): The control that interrupts a running answer, with the time it has been going and Escape wired up. - [Token Meter](https://ui.tinkererslabs.com/docs/components/token-meter.md): How much of the context window is gone, split by what spent it, and a warning before it runs out. - [Model Picker](https://ui.tinkererslabs.com/docs/components/model-picker.md): A model chooser that has room for what each one is good at, and full keyboard control. - [Source Card](https://ui.tinkererslabs.com/docs/components/source-card.md): One retrieved passage: where it came from, what it said, and how well it matched. - [Presence Field](https://ui.tinkererslabs.com/docs/components/presence-field.md): An ambient backdrop that carries what the assistant is doing. It changes colour and pace with the state, and settles into each one rather than snapping to it. - [Stream Glow](https://ui.tinkererslabs.com/docs/components/stream-glow.md): An edge that breathes along a region while tokens land in it, and stops the moment they do. ## Code Code an agent wrote, ran, or wants to change, and the controls to accept it. - [Code Block](https://ui.tinkererslabs.com/docs/components/code-block.md): A code panel with copy, optional line numbers, highlighted lines, and a collapse for anything long. - [Diff View](https://ui.tinkererslabs.com/docs/components/diff-view.md): A proposed change shown as a unified or side-by-side diff, with optional accept and reject controls. - [Terminal Output](https://ui.tinkererslabs.com/docs/components/terminal-output.md): Streaming command output with stderr called out, an exit code, and scroll that follows without trapping you. - [Web Preview](https://ui.tinkererslabs.com/docs/components/web-preview.md): A sandboxed frame for whatever the assistant just built, with the widths to check it at. - [Reviewable Diff](https://ui.tinkererslabs.com/docs/components/reviewable-diff.md): A proposed change reviewed a hunk at a time: take three of the seven, leave the rest, apply what you took. ## Documents Reading a file someone uploaded, marking it up, cutting it into pieces, and pulling structure out of it. - [Bounding Boxes](https://ui.tinkererslabs.com/docs/components/bounding-boxes.md): Selectable regions drawn over a page image from normalized coordinates, for showing an agent exactly where an answer came from. - [Annotation Layer](https://ui.tinkererslabs.com/docs/components/annotation-layer.md): Notes attached to regions of a page. Drag to add one, select to read it, and the coordinates stay relative to the page rather than the screen. - [Redaction](https://ui.tinkererslabs.com/docs/components/redaction.md): Mark regions to black out before a document leaves the building, with a reveal that says plainly it is only a preview. - [Page Navigator](https://ui.tinkererslabs.com/docs/components/page-navigator.md): A rail of page thumbnails for moving through a long document, with arrow-key navigation and a clear active page. - [File Tree](https://ui.tinkererslabs.com/docs/components/file-tree.md): An expandable tree of folders and files with full keyboard navigation and correct tree semantics. - [Document Splits](https://ui.tinkererslabs.com/docs/components/document-splits.md): Mark where one scanned batch becomes several documents. Splits are toggled between pages and the segments update as you go. - [Schema Builder](https://ui.tinkererslabs.com/docs/components/schema-builder.md): Build the shape you want extracted from a document. Fields carry a name, type, description, and requirement, and object and array fields nest. - [Signature Pad](https://ui.tinkererslabs.com/docs/components/signature-pad.md): Sign with a pointer on a canvas, or type a name instead. Returns a PNG data URL or the typed text. - [CSV Viewer](https://ui.tinkererslabs.com/docs/components/csv-viewer.md): A real table for delimited data, with sortable columns, a sticky header, and a row cap so a large file cannot lock the page. - [JSON Viewer](https://ui.tinkererslabs.com/docs/components/json-viewer.md): A collapsible tree for a JSON payload, navigable from the keyboard, where every row can hand you its path. - [DOCX Viewer](https://ui.tinkererslabs.com/docs/components/docx-viewer.md): Renders a Word document as elements built through an allowlist, so a file you did not write cannot bring its own scripts or links. - [PDF Viewer](https://ui.tinkererslabs.com/docs/components/pdf-viewer.md): Page-by-page PDF rendering on a canvas, with paging and zoom, over any loader you give it. - [Markdown Blocks](https://ui.tinkererslabs.com/docs/components/markdown-blocks.md): Extracted document regions rendered as markdown, each one selectable so it can be tied back to where it came from. ## Files Getting a file in, and showing what arrived. - [File Upload](https://ui.tinkererslabs.com/docs/components/file-upload.md): A file picker and dropzone with clear validation and a visible queue. Connect your upload function when you need progress, cancel, and retry. - [File Thumbnail](https://ui.tinkererslabs.com/docs/components/file-thumbnail.md): A compact image preview for attachments, upload queues, and file lists. Browser image files work without any setup. ## Feedback What the page says while it waits, and when there is nothing to show. - [Empty State](https://ui.tinkererslabs.com/docs/components/empty-state.md): What to show when there is nothing yet: what this place is for, and the way to fill it. - [Empty Row](https://ui.tinkererslabs.com/docs/components/empty-row.md): One line saying a list came back empty, for a table, a list, or a popover. - [Not Found](https://ui.tinkererslabs.com/docs/components/not-found.md): The page-scale empty state: a status, a heading you can read across a room, and somewhere to go. - [Spinner](https://ui.tinkererslabs.com/docs/components/spinner.md): The smallest way to say something is happening, for a control that is working. - [Shimmering Text](https://ui.tinkererslabs.com/docs/components/shimmering-text.md): Words with a light moving across them, for the wait between asking and the first token. - [Skeleton](https://ui.tinkererslabs.com/docs/components/skeleton.md): A placeholder the shape of what is coming, so the page does not jump when it arrives. - [Status Pill](https://ui.tinkererslabs.com/docs/components/status-pill.md): A dot and a few words: operational, degraded, closed. ## Controls Familiar inputs with more feedback than usual, and none of it required to operate them. - [Magnetic Tabs](https://ui.tinkererslabs.com/docs/components/magnetic-tabs.md): Familiar tabs with a gentle pull toward the pointer. Selection stays clear and keyboard navigation remains immediate. - [Elastic Slider](https://ui.tinkererslabs.com/docs/components/elastic-slider.md): A precise slider with a small amount of give at either end. The current value stays visible and the control works without a pointer. - [Hold Button](https://ui.tinkererslabs.com/docs/components/hold-button.md): A confirmation button for actions that deserve a second thought. Release early to cancel, or activate once with a keyboard. - [Shift Button](https://ui.tinkererslabs.com/docs/components/shift-button.md): A call to action that trades its leading icon for a directional cue when someone approaches it. - [Impossible Checkbox](https://ui.tinkererslabs.com/docs/components/impossible-checkbox.md): A checkbox with one stubborn rule: the bear will not let you leave it on. Best kept for demos, Easter eggs, and harmless preferences. - [Save Bar](https://ui.tinkererslabs.com/docs/components/save-bar.md): A bar that exists only while a form has unsaved changes. It says so, saves, confirms, and leaves. - [Theme Toggle](https://ui.tinkererslabs.com/docs/components/theme-toggle.md): A light and dark switch that survives a reload, follows the system when asked, and stays in step across tabs. - [Accordion](https://ui.tinkererslabs.com/docs/components/accordion.md): A list of disclosures built on native details elements, so find-in-page and the browser do the work. - [Copy Button](https://ui.tinkererslabs.com/docs/components/copy-button.md): Copies a value and says whether it worked, including when the clipboard refuses. - [Secret Field](https://ui.tinkererslabs.com/docs/components/secret-field.md): An API key or token: hidden until asked for, copied whole either way. - [Scrub Bar](https://ui.tinkererslabs.com/docs/components/scrub-bar.md): The seek control on its own: a slider that happens to be a timeline, announced in minutes and seconds. - [OTP Input](https://ui.tinkererslabs.com/docs/components/otp-input.md): A one time code, one box per character, where pasting the whole code into any box fills the rest. - [Tag Input](https://ui.tinkererslabs.com/docs/components/tag-input.md): An input that turns what you typed into a removable tag, and gives the last one back when you press backspace on an empty field. - [Combobox](https://ui.tinkererslabs.com/docs/components/combobox.md): A field that narrows a list as you type, and holds one choice or several as removable chips. - [Sortable List](https://ui.tinkererslabs.com/docs/components/sortable-list.md): A list reordered by dragging a handle, or from the keyboard without one, where every move is announced. - [Stepper](https://ui.tinkererslabs.com/docs/components/stepper.md): Where someone is in something with a beginning and an end, said in words as well as drawn. ## Wayfinding Knowing where you are in something long, and getting somewhere else quickly. - [Floating Index](https://ui.tinkererslabs.com/docs/components/floating-index.md): A compact outline for long pages. It keeps the active section and reading progress visible without becoming another permanent sidebar. - [Command Palette](https://ui.tinkererslabs.com/docs/components/command-palette.md): A search dialog over anything you can list, opened from a keyboard shortcut, with ranked matches and hidden keywords. - [Scroll to Top Button](https://ui.tinkererslabs.com/docs/components/scroll-to-top-button.md): A floating way back after someone has moved down a long page or scroll area. It stays hidden near the top. - [Pagination](https://ui.tinkererslabs.com/docs/components/pagination.md): Page numbers with gaps where the run is broken, as buttons or as your own links. - [Side Panel](https://ui.tinkererslabs.com/docs/components/side-panel.md): A pane that comes in from the side: an inspector, a filter set, a row's detail. ## Docs The furniture of a documentation site, taken out of this one. - [Install Command](https://ui.tinkererslabs.com/docs/components/install-command.md): The install line for a library, switchable between package managers, with the runner and the installer kept apart. - [Copy for AI](https://ui.tinkererslabs.com/docs/components/copy-for-ai.md): Hands the page to an assistant as markdown, by clipboard, by link, or by opening it somewhere that can read it. - [Table of Contents](https://ui.tinkererslabs.com/docs/components/table-of-contents.md): An outline of the page that keeps up with the reader, marking the section they are in as they scroll. - [Component Preview](https://ui.tinkererslabs.com/docs/components/component-preview.md): A framed example with a tab for the source beside it, and the live one still running when you switch back. - [Kbd](https://ui.tinkererslabs.com/docs/components/kbd.md): A keyboard chord rendered with the right glyphs for the reader's platform, and spoken in words. ## Blocks Larger pieces that compose several components into one part of a page. - [Signature Footer](https://ui.tinkererslabs.com/docs/components/signature-footer.md): A complete closing section with room for the useful links first and one oversized wordmark at the end. - [Image Gallery](https://ui.tinkererslabs.com/docs/components/image-gallery.md): A responsive image collection with equal and masonry layouts, plus a lightbox that handles focus, keyboard navigation, and scroll locking. - [Footer Columns](https://ui.tinkererslabs.com/docs/components/footer-columns.md): Labelled columns of links, with the column count and the link rendering left to you. - [Footer Row](https://ui.tinkererslabs.com/docs/components/footer-row.md): A wrapping row of links under its own label, set apart by a dashed rule. - [Footer Wordmark](https://ui.tinkererslabs.com/docs/components/footer-wordmark.md): The oversized brand word that closes a page, drawn as texture rather than content. - [Image Grid](https://ui.tinkererslabs.com/docs/components/image-grid.md): Thumbnails in even cells or masonry columns, with nothing but React behind them. - [Lightbox](https://ui.tinkererslabs.com/docs/components/lightbox.md): One image at a time, full bleed, with the rest of the set a key away. - [Resizable Panels](https://ui.tinkererslabs.com/docs/components/resizable-panels.md): Two panels and something to drag between them, where the divider is a real separator that also works from the keyboard. - [Avatar Stack](https://ui.tinkererslabs.com/docs/components/avatar-stack.md): Overlapping faces with a count for the rest, and the names underneath as a real list. - [Timeline](https://ui.tinkererslabs.com/docs/components/timeline.md): Things that happened, in the order they happened, with the state of each one said aloud rather than left in a coloured dot. - [Data Table](https://ui.tinkererslabs.com/docs/components/data-table.md): Typed rows with cells you write, column widths you set or the reader drags, sorting that is one property to switch on, and selection kept in keys rather than positions. ## Scenes Backdrops and moments where the drawing is the job, each one taking its colours from the theme it was installed into. - [Render Surface](https://ui.tinkererslabs.com/docs/components/render-surface.md): The canvas the other scenes are drawn on. It stays the size of its box, sleeps when nobody is looking at it, and holds still when motion is reduced. - [Aurora Field](https://ui.tinkererslabs.com/docs/components/aurora-field.md): A drifting gradient backdrop for a hero or an empty state, built from the colours already in your theme rather than from a palette it brought with it. - [Grain Overlay](https://ui.tinkererslabs.com/docs/components/grain-overlay.md): Film grain for any positioned box, which incidentally fixes the banding a wide gradient shows on a good monitor. - [Spotlight Card](https://ui.tinkererslabs.com/docs/components/spotlight-card.md): A card that catches a light following the pointer, and can light every card in its grid from the same pointer at once. - [Constellation Field](https://ui.tinkererslabs.com/docs/components/constellation-field.md): Drifting points joined by lines when they come close, brightening and swelling around the pointer. - [Lattice Field](https://ui.tinkererslabs.com/docs/components/lattice-field.md): A grid of dots that parts around the pointer and falls apart when pressed, then climbs back into line. - [Burst](https://ui.tinkererslabs.com/docs/components/burst.md): A short burst of pieces for the moment something finally completes. It draws nothing until it is fired and stops as soon as the last piece falls out of the box. - [Shader Surface](https://ui.tinkererslabs.com/docs/components/shader-surface.md): Four shader backdrops -- caustics, metal, plasma and ripple -- each taking its two colours from your theme, so the same surface arrives dark in a dark application and light in a light one. - [Displacement Image](https://ui.tinkererslabs.com/docs/components/displacement-image.md): Two images crossing by pushing their pixels through the same noise in opposite directions, with the first image also present as ordinary markup for anything that cannot run it. - [Scene Hero](https://ui.tinkererslabs.com/docs/components/scene-hero.md): A lit three-dimensional object behind a headline, steered by the pointer and coloured by the theme. The one component here that asks for three. - [Scroll Scene](https://ui.tinkererslabs.com/docs/components/scroll-scene.md): Turns the scrolling of a tall element into a number between nought and one, published to a custom property and to a callback, without rendering the page to do it. - [Tilt Card](https://ui.tinkererslabs.com/docs/components/tilt-card.md): A card that leans toward the pointer as though it were a physical object lying on the page. - [Connection Beam](https://ui.tinkererslabs.com/docs/components/connection-beam.md): A line between two elements with something travelling along it, measured from the elements rather than given as coordinates. - [Cursor Trail](https://ui.tinkererslabs.com/docs/components/cursor-trail.md): A fading mark behind the pointer, drawn only inside its own box and only while the pointer is in it. - [Metaballs](https://ui.tinkererslabs.com/docs/components/metaballs.md): Blobs that swell into one another as they meet, taking their two colours from your theme. - [Dither Image](https://ui.tinkererslabs.com/docs/components/dither-image.md): A photograph reduced to two theme colours through an ordered dither, the way a newspaper reduced one to ink and paper. - [ASCII Image](https://ui.tinkererslabs.com/docs/components/ascii-image.md): A photograph redrawn as characters. The grid is worked out once and kept, so each frame is a single copy rather than thousands of letters measured again. - [Wireframe Globe](https://ui.tinkererslabs.com/docs/components/wireframe-globe.md): A wireframe world with places marked on it, arcs between them, and the same places written out underneath as text. ## Motion Entrances and numbers that move, driven by arrival or by scrolling, and never by withholding the content. - [Reveal](https://ui.tinkererslabs.com/docs/components/reveal.md): Moves its children in when they arrive on screen. It changes how something arrives and never whether it is there. - [Split Text](https://ui.tinkererslabs.com/docs/components/split-text.md): A heading animated one character, word, or line at a time, and still announced as one sentence rather than as a pile of single letters. - [Marquee](https://ui.tinkererslabs.com/docs/components/marquee.md): A row that runs on its own, seamlessly, and turns back into an ordinary scrolling row for anyone who asked for less motion. - [Number Ticker](https://ui.tinkererslabs.com/docs/components/number-ticker.md): Counts to a number rather than replacing it, in whatever currency or format you asked for. ## Optional - [Everything in one file](https://ui.tinkererslabs.com/llms-full.txt): every component's documentation concatenated. - [Agent skill](https://ui.tinkererslabs.com/skill.md): instructions for installing components on someone's behalf. - [Site](https://ui.tinkererslabs.com/): the same documentation, with live examples.