pulld

Components your AI coding agent installs by itself.

An open, shadcn-compatible component registry. Point Claude Code, Cursor, or v0 at a component and it pulls it straight into your project — typed, accessible, theme-aware.

npx shadcn@latest add https://pulld.pages.dev/r/copy-button.json

Works with the shadcn CLI & MCP. 11 free components, growing daily.

Components

Copy Button

Accessible icon button that copies a string to the clipboard and shows a transient copied state. Has aria-label, an aria-live announcement, keyboard focus ring, and a configurable reset timeout. Use it next to code blocks, API keys, share links, or any inline value a user might want to copy.

npx shadcn@latest add https://pulld.pages.dev/r/copy-button.json

Kbd

Inline keyboard key hint that renders a styled <kbd> element for showing shortcuts like Cmd+K or Ctrl+S. Use it in command palettes, tooltips, docs, and shortcut hints. Theme-aware via shadcn tokens; no dependencies.

npx shadcn@latest add https://pulld.pages.dev/r/kbd.json

Empty State

Centered empty/zero-data placeholder with an optional icon, title, description, and call-to-action slot. Use it when a list, table, search result, inbox, or dashboard has no items yet. Dashed border, muted text, fully accessible.

npx shadcn@latest add https://pulld.pages.dev/r/empty-state.json

Stat Card

Compact metric card showing a label, a big value, and an optional percentage delta with an up/down arrow (green for positive, red for negative). Use it in dashboards, analytics, and KPI rows. Composes well into dashboard blocks.

npx shadcn@latest add https://pulld.pages.dev/r/stat-card.json

Theme Toggle

Self-contained light/dark mode toggle button. Persists the choice to localStorage, respects the OS prefers-color-scheme on first load, and toggles the 'dark' class on the html element. No next-themes or provider required. Sun/Moon icons, aria-pressed.

npx shadcn@latest add https://pulld.pages.dev/r/theme-toggle.json

Avatar Stack

Row of overlapping circular avatars that collapses the remainder into a '+N' badge past a max count. Falls back to an initial when no image is provided. Use it for team members, participants, collaborators, or assignees.

npx shadcn@latest add https://pulld.pages.dev/r/avatar-stack.json

Password Input

Password text input with a built-in show/hide toggle button. Toggles between password and text, has an accessible aria-label and aria-pressed, and the toggle stays out of the tab order. Use it in sign-up, login, and reset-password forms.

npx shadcn@latest add https://pulld.pages.dev/r/password-input.json

Spinner

Accessible loading spinner with role=status, an aria-live region, and a screen-reader label. Use it for inline loading, button busy states, or anywhere you need to indicate a pending async operation. Animated lucide Loader2.

npx shadcn@latest add https://pulld.pages.dev/r/spinner.json

Code Block

composes copy-button

Code snippet container with an optional language label and a hover/focus-revealed copy button (composes pulld's copy-button). Use it in docs, changelogs, and developer marketing pages to show installable commands or code. Demonstrates how pulld premium blocks compose free atoms.

npx shadcn@latest add https://pulld.pages.dev/r/code-block.json

Loading Button

composes spinner

Button that shows a spinner and disables itself while an async action is pending. Set loading=true during submit, save, or checkout to prevent double-clicks; an optional loadingText swaps the label. Composes pulld's spinner atom.

npx shadcn@latest add https://pulld.pages.dev/r/loading-button.json

Confirm Button

Two-step confirm button for destructive actions: the first click arms it and swaps the label to a confirmation prompt, the second click runs onConfirm. Auto-reverts after a timeout and on blur so a stray click can't fire. Use it for delete, remove, reset, revoke, unsubscribe, or disconnect actions where a full alert dialog is overkill. Theme-aware via shadcn destructive tokens; no dependencies.

npx shadcn@latest add https://pulld.pages.dev/r/confirm-button.json