@pulld
Typed, accessible, theme-aware React/Tailwind components installable by the shadcn CLI or your AI coding agent. Free atoms plus composed Pro blocks.
Install this registry
npx shadcn@latest add https://pulld.pages.dev/r/registry.json pnpm dlx shadcn@latest add https://pulld.pages.dev/r/registry.json bunx shadcn@latest add https://pulld.pages.dev/r/registry.json curl -s https://pulld.pages.dev/r/registry.json Components
92 totalA one-click copy control: a square icon button that writes a string to the clipboard, swaps its clipboard icon for a tick, announces "Copied" to a screen reade…
npx shadcn@latest add https://pulld.pages.dev/r/copy-button.json Inline keyboard key rendered as a real <kbd> element and styled as a bordered monospace keycap — a drop-in for a bare <kbd> tag that otherwise renders as unsty…
npx shadcn@latest add https://pulld.pages.dev/r/kbd.json The centred placeholder a screen shows when it has nothing to draw — a dashed panel with an optional icon, a heading, one line of explanation, and room for a c…
npx shadcn@latest add https://pulld.pages.dev/r/empty-state.json The single-number tile at the top of a dashboard: a label, one big value, and an optional percentage change with an up or down arrow — green when the number mo…
npx shadcn@latest add https://pulld.pages.dev/r/stat-card.json The one-button light/dark switch you drop in a navbar, header or settings row — click it and the whole app flips theme, and the choice survives a reload. Reach…
npx shadcn@latest add https://pulld.pages.dev/r/theme-toggle.json A facepile in one prop: pass a list of people and a maximum, get a row of overlapping circular avatars with everything past the maximum collapsed into a "+N" b…
npx shadcn@latest add https://pulld.pages.dev/r/avatar-stack.json A password field with the show/hide eye already built in — the one control every sign-up form needs and shadcn/ui does not ship. It is a drop-in replacement fo…
npx shadcn@latest add https://pulld.pages.dev/r/password-input.json An inline loading indicator that announces itself: a spinning lucide Loader2 inside a role="status" live region with a screen-reader-only label, so a pending o…
npx shadcn@latest add https://pulld.pages.dev/r/spinner.json A read-only code panel: a bordered, scrollable box that shows a snippet with a copy button in the corner and an optional uppercase language label. Reach for it…
npx shadcn@latest add https://pulld.pages.dev/r/code-block.json Submit button that shows a spinner, announces itself, and refuses to fire twice while an async action is in flight. Set loading={true} for the duration of the …
npx shadcn@latest add https://pulld.pages.dev/r/loading-button.json Inline two-step confirmation on the button itself: the first click arms it — the label swaps to "Confirm?" and the button turns destructive — and only the seco…
npx shadcn@latest add https://pulld.pages.dev/r/confirm-button.json A ready-made ⌘K command palette: one component you drop in, open with a keyboard shortcut, and fill with actions. Reach for it the moment a nav bar stops being…
npx shadcn@latest add https://pulld.pages.dev/r/command-palette.json A complete toast / notification system in one file: call `toast()` — or `toast.success` / `.error` / `.info` / `.warning` / `.loading` / `.promise` — from anyw…
npx shadcn@latest add https://pulld.pages.dev/r/toast.json Search field with a leading magnifier icon and a trailing clear (✕) button that appears as soon as there is text, empties the field, and puts focus back so typ…
npx shadcn@latest add https://pulld.pages.dev/r/search-input.json A number field with − and + stepper buttons either side of it. Reach for it wherever someone adjusts a number by one rather than typing it: a quantity picker i…
npx shadcn@latest add https://pulld.pages.dev/r/number-input.json A one-time passcode field split into separate digit boxes — the "enter the 6-digit code we sent you" screen. Reach for it on any challenge step where a short n…
npx shadcn@latest add https://pulld.pages.dev/r/otp-input.json A multi-value text field: what gets typed becomes a removable chip, and the value the form sees is a plain string[]. Enter or a comma commits the draft, Backsp…
npx shadcn@latest add https://pulld.pages.dev/r/tag-input.json Read-only field that shows a value with a copy button docked at its right edge: one click copies, and focusing or clicking anywhere in the field selects the wh…
npx shadcn@latest add https://pulld.pages.dev/r/copy-field.json A row of 2–4 mutually exclusive choices drawn as one moving pill on a shared track — the iOS-style segmented control, and what most dashboards use to switch a …
npx shadcn@latest add https://pulld.pages.dev/r/segmented-control.json Horizontal stepper that shows where someone is in a fixed sequence — numbered circle markers joined by a connecting line, each drawn as complete (filled, with …
npx shadcn@latest add https://pulld.pages.dev/r/step-indicator.json A star rating that works both ways: as an input that collects a score, and read-only as a display of one. Reach for it wherever a number between 0 and 5 is rea…
npx shadcn@latest add https://pulld.pages.dev/r/rating.json A vertical timeline: a list of events drawn as dots on a connecting line, each with an optional timestamp, title, description and icon. Reach for it wherever t…
npx shadcn@latest add https://pulld.pages.dev/r/timeline.json A dismissible bar pinned above your header for a message the whole site needs to see: a launch or new release, a promo, sale or free-shipping offer, a schedule…
npx shadcn@latest add https://pulld.pages.dev/r/announcement-bar.json A drag-and-drop file upload area that is also a real file picker: drop files onto it, or click it — or focus it and press Enter or Space — to open the native c…
npx shadcn@latest add https://pulld.pages.dev/r/file-dropzone.json A circular progress indicator: an SVG ring that fills clockwise from twelve o'clock, with the percentage — or any icon or short label you pass — sitting in the…
npx shadcn@latest add https://pulld.pages.dev/r/progress-ring.json A single pricing plan card — one tier's box, with its name, its price, what it includes and the button that takes it. Reach for it wherever a plan has to be ch…
npx shadcn@latest add https://pulld.pages.dev/r/pricing-card.json An icon + heading + one line of copy, as the repeating tile in the features or benefits section of a landing or marketing page — a “why us” grid, “what’s inclu…
npx shadcn@latest add https://pulld.pages.dev/r/feature-card.json A semicircular (half-circle) gauge or dial that shows one measurement inside a known range, drawn as an SVG arc that fills from the left and animates to its ne…
npx shadcn@latest add https://pulld.pages.dev/r/gauge.json Auto-updating relative timestamp — "3 minutes ago", "just now", "in 2 days" — that re-renders on a timer so the label stays fresh without a reload. Use it wher…
npx shadcn@latest add https://pulld.pages.dev/r/time-ago.json A searchable multi-select: choose several options from a list you define, each shown as a removable badge in the trigger. Reach for it wherever a field stores …
npx shadcn@latest add https://pulld.pages.dev/r/multi-select.json A live countdown timer to a future moment — it re-renders every second, ticks down, never goes negative, and fires an onComplete callback once when it reaches …
npx shadcn@latest add https://pulld.pages.dev/r/countdown.json Click-to-edit text that stays where it is: a value shown as plain text with a pencil affordance that swaps to an input in the same spot when activated, commits…
npx shadcn@latest add https://pulld.pages.dev/r/inline-edit.json A textarea that grows as you type and stops at a maximum height, then scrolls. Reach for it wherever a fixed-height box is the wrong shape: a chat, message or …
npx shadcn@latest add https://pulld.pages.dev/r/autosize-textarea.json A money input that shows a grouped, currency-formatted amount ($1,234.50) when idle and the raw number while you're editing, so the cursor never fights the tho…
npx shadcn@latest add https://pulld.pages.dev/r/currency-input.json A text input whose label sits inside the field like a placeholder, then shrinks and floats up to straddle the top border the moment the field is focused or hol…
npx shadcn@latest add https://pulld.pages.dev/r/floating-label-input.json The bar that appears once rows are selected in a table or list — it shows "3 items selected", holds your bulk actions (delete, archive, export, assign, move, a…
npx shadcn@latest add https://pulld.pages.dev/r/bulk-action-bar.json The small inline "Saving… / Saved 2 minutes ago / Couldn't save · Retry" indicator that sits beside an autosaving surface, and the announcement that goes with …
npx shadcn@latest add https://pulld.pages.dev/r/save-status.json The block that appears above a form after a failed submit — "There are 3 problems with your submission" followed by one link per error that jumps focus straigh…
npx shadcn@latest add https://pulld.pages.dev/r/form-error-summary.json The confirmation step in front of an irreversible action: the user has to type the resource's own name ("acme-prod") before the destructive button turns on. Us…
npx shadcn@latest add https://pulld.pages.dev/r/type-to-confirm.json The help sheet that opens when the user presses ? — a modal listing every keyboard shortcut in the app, grouped by area, with the key caps drawn per platform. …
npx shadcn@latest add https://pulld.pages.dev/r/keyboard-shortcuts.json The list of files under a dropzone or file picker — one row each with the file name, its size, a progress bar while it uploads, an error with a retry button wh…
npx shadcn@latest add https://pulld.pages.dev/r/upload-list.json The asymmetric panel grid behind most modern feature sections: a set of cards on one grid where a few cells are deliberately two columns wide or two rows tall,…
npx shadcn@latest add https://pulld.pages.dev/r/bento-grid.json The nested list you can open, close and walk with the arrow keys: a file explorer or file tree, a folder or directory tree, a category or taxonomy picker, an o…
npx shadcn@latest add https://pulld.pages.dev/r/tree-view.json Drag-to-reorder list: grab a row's grip handle and drop it in a new place — and do the same thing from the keyboard, which is the half that is normally missing…
npx shadcn@latest add https://pulld.pages.dev/r/sortable-list.json The footer of a list that keeps going: an invisible sentinel that loads the next page as it scrolls into view, plus a Load more button that always does the sam…
npx shadcn@latest add https://pulld.pages.dev/r/infinite-scroll.json A long list that only puts the rows you can see into the DOM: five thousand rows render as about thirty nodes, so the page stops taking seconds to paint and sc…
npx shadcn@latest add https://pulld.pages.dev/r/virtual-list.json Long text clamped to a few lines with a Show more / Show less toggle that appears only when the text is genuinely too long. Use it wherever text is usually sho…
npx shadcn@latest add https://pulld.pages.dev/r/read-more.json One line of text with the middle removed so that both ends stay readable, fitted to whatever width the container actually gives it. Use it for file names — whe…
npx shadcn@latest add https://pulld.pages.dev/r/middle-truncate.json A table of contents for the page the reader is on, with the section they are currently reading highlighted as they scroll. Use it for the "On this page" rail b…
npx shadcn@latest add https://pulld.pages.dev/r/toc.json A date field you type into, one segment at a time, that emits an ISO "YYYY-MM-DD" string. Use it for date of birth and signup forms, booking and check-in/check…
npx shadcn@latest add https://pulld.pages.dev/r/date-input.json An inline SVG trend line — a sparkline — that shows the shape of a series in about the space of a line of text. Use it when you need a chart small enough to li…
npx shadcn@latest add https://pulld.pages.dev/r/sparkline.json A URL slug field that fills itself in from a title and then gets out of the way. Use it wherever a record needs a URL: the permalink or slug field in a blog po…
npx shadcn@latest add https://pulld.pages.dev/r/slug-input.json A password strength meter for a sign-up, registration, change-password or reset-password form — the bar under the password field that says Weak or Strong, plus…
npx shadcn@latest add https://pulld.pages.dev/r/password-strength.json A line-by-line diff of two strings — the before/after view a screen needs when it has to show what changed: a config or settings change, a record edited in an …
npx shadcn@latest add https://pulld.pages.dev/r/diff-view.json A year of daily counts as a grid of shaded squares — the GitHub-style contribution graph, drawn for whatever your app counts per day: commits, deploys, orders,…
npx shadcn@latest add https://pulld.pages.dev/r/calendar-heatmap.json Renders raw terminal output — escape sequences and all — as styled, theme-aware HTML. Reach for it wherever a process's own output has to be shown inside a pag…
npx shadcn@latest add https://pulld.pages.dev/r/ansi-log.json Turns a cron expression into a sentence anyone can read, and lists the next times it fires. Reach for it wherever a schedule is shown rather than edited: a sch…
npx shadcn@latest add https://pulld.pages.dev/r/cron-expression.json One horizontal bar that shows how a whole is divided up, with a legend that names every part — the GitHub-style language / storage bar. Reach for it whenever t…
npx shadcn@latest add https://pulld.pages.dev/r/ratio-bar.json A bar that fills as the reader scrolls — the reading indicator across the top of an article, and the "how much is left?" cue on anything long. Use it on blog p…
npx shadcn@latest add https://pulld.pages.dev/r/scroll-progress.json A text field that takes a length of time written the way people actually write one — 90m, 1h30m, 1h 30m, 2d 4h 15m, 1:30, 1.5h, 500ms, "90 minutes" — reads it …
npx shadcn@latest add https://pulld.pages.dev/r/duration-input.json A colour picker built from a hex/rgb/hsl text box and native hue, saturation and lightness sliders, with optional alpha and preset swatches. Reach for it where…
npx shadcn@latest add https://pulld.pages.dev/r/color-picker.json Renders a parsed JSON value as a collapsible, type-coloured tree you can read and navigate. Reach for it wherever a page has to show a payload the reader did n…
npx shadcn@latest add https://pulld.pages.dev/r/json-viewer.json A before/after slider: two images stacked in the same box with a divider you drag across them, so the second is revealed over the first instead of sitting next…
npx shadcn@latest add https://pulld.pages.dev/r/image-comparison.json A time zone picker: every IANA zone the browser knows, grouped by region and labelled with the UTC offset it is actually on — "New York (UTC-04:00)", "Kolkata …
npx shadcn@latest add https://pulld.pages.dev/r/timezone-select.json A month picker: a year of twelve months as a grid, with arrows on the year, that hands back a plain "YYYY-MM" string — "2026-08" — and never a day or a time zo…
npx shadcn@latest add https://pulld.pages.dev/r/month-picker.json A time field you type into, one segment at a time, that hands back a plain 24-hour clock string — "09:30", or "09:30:15" with seconds — and never a date and ne…
npx shadcn@latest add https://pulld.pages.dev/r/time-input.json A week of opening hours in one editor: seven rows, each a switch plus an opening and a closing time, handing back a plain object keyed by weekday. Reach for it…
npx shadcn@latest add https://pulld.pages.dev/r/weekly-hours.json A country picker: all 249 ISO 3166-1 countries, named in the reader's own language, sorted the way that language sorts, and searchable by local name, English n…
npx shadcn@latest add https://pulld.pages.dev/r/country-select.json A currency picker: every ISO 4217 currency the runtime knows, named in the reader's own language, sorted the way that language sorts, and searchable by local n…
npx shadcn@latest add https://pulld.pages.dev/r/currency-select.json A UI language picker: every language named in its own language — 日本語, Deutsch, العربية, 한국어 — with its name in the page's language beside it, its BCP-47 tag, a…
npx shadcn@latest add https://pulld.pages.dev/r/language-select.json An international phone number field: a searchable country picker, that country's calling code shown as a live prefix, and one E.164 string ("+819012345678") co…
npx shadcn@latest add https://pulld.pages.dev/r/phone-input.json A password generator: a read-only field holding the generated password, a Generate control, a copy button, and switches for length, character classes and look-…
npx shadcn@latest add https://pulld.pages.dev/r/password-generator.json An offline banner that is right about being offline: it tells someone the page has lost the network, and — the harder half — only tells them it is back once th…
npx shadcn@latest add https://pulld.pages.dev/r/network-status.json The sheet of two-factor backup codes, with the three ways off the screen that people actually use: copy, download as a .txt, and print. Reach for it wherever a…
npx shadcn@latest add https://pulld.pages.dev/r/recovery-codes.json A leave guard for a form with unsaved changes: it holds the departure, asks whether the work should be discarded, and lets it through only when the answer is y…
npx shadcn@latest add https://pulld.pages.dev/r/unsaved-changes-guard.json A button that turns rows into a CSV file the browser saves — with the two things the inline version gets wrong already handled: the spreadsheet formulas hiding…
npx shadcn@latest add https://pulld.pages.dev/r/csv-export-button.json An inactivity timeout with a warning before it fires: it watches for the user going away, puts up a "you will be signed out in 1:59" dialog with a live countdo…
npx shadcn@latest add https://pulld.pages.dev/r/idle-timeout.json The "42 left" that sits under a field with a limit — a bio, a post box, a product description, an SMS body, a subject line — counting the characters a person c…
npx shadcn@latest add https://pulld.pages.dev/r/char-counter.json A scrolling box whose edges fade out while there is more content past them, and stop fading the moment there is not — the cue that tells a reader a wide table …
npx shadcn@latest add https://pulld.pages.dev/r/scroll-shadow.json The comment box where typing `@` opens a list of people and picking one types their handle in — the completion that lives inside the prose, anchored under the …
npx shadcn@latest add https://pulld.pages.dev/r/mention-input.json The box at the bottom of a form where somebody signs with a finger, a mouse or a stylus — and, beside it, the field where somebody who cannot draw types their …
npx shadcn@latest add https://pulld.pages.dev/r/signature-pad.json The step that comes straight after a photo is chosen: the picture sits behind a frame of the shape the product needs, and you drag it about and pinch or scroll…
npx shadcn@latest add https://pulld.pages.dev/r/image-crop.json One sortable column heading for a table you already have: press it and the rows re-order, press it again for the other direction, press it a third time and the…
npx shadcn@latest add https://pulld.pages.dev/r/sort-header.json A scannable QR code, drawn as SVG, for putting a link, a Wi-Fi network or a 2FA secret on screen where a phone can pick it up. Reach for it wherever something …
npx shadcn@latest add https://pulld.pages.dev/r/qr-code.json A share control that opens the device's native share sheet and quietly degrades to copying the link where that sheet does not exist. Reach for it wherever a pa…
npx shadcn@latest add https://pulld.pages.dev/r/share-button.json Prints one region of the page — an invoice, a receipt, an order confirmation, a ticket or boarding pass, a packing slip, a report or dashboard panel, a chart, …
npx shadcn@latest add https://pulld.pages.dev/r/print-button.json Holds a text field to one fixed shape while it is typed — a postal or ZIP code, a product or licence key, a serial, model or part number, an employee, member, …
npx shadcn@latest add https://pulld.pages.dev/r/masked-input.json A button that shows one element — a chart, a data table, a map, a video player, a preview pane — full-screen on its own, and keeps telling the truth about it a…
npx shadcn@latest add https://pulld.pages.dev/r/fullscreen-button.json A toggle that stops the screen going dark while somebody is looking at it but not touching it, and — unlike every version written by hand — keeps on being true…
npx shadcn@latest add https://pulld.pages.dev/r/wake-lock-toggle.json A "use my current location" button that is right about why it didn't. It asks the device for a position and, when that is refused, works out which of four unre…
npx shadcn@latest add https://pulld.pages.dev/r/geolocation-button.json Text with the parts matching a search query highlighted, built so that neither the text nor the query can break it — and both of them routinely arrive from a U…
npx shadcn@latest add https://pulld.pages.dev/r/highlight-text.json A frame that zooms whatever is inside it — wheel, trackpad pinch, double click or the buttons — and lets you drag it around once it no longer fits. Reach for i…
npx shadcn@latest add https://pulld.pages.dev/r/image-zoom.json