Multi Select
InputsChip-based multi-select with command-palette dropdown, search, select-all and a loading state. Compound and single-prop APIs.
View101 components shadcn/ui leaves out: multi-select, combobox, date and time pickers, tag and currency inputs, file dropzones, data views and more. Each one runs live below, so you can test it before the shadcn CLI copies its source into your repo.
Chip-based multi-select with command-palette dropdown, search, select-all and a loading state. Compound and single-prop APIs.
ViewTwo-thumb slider paired with synced number inputs. Min/max/step, currency or unit formatting, keyboard-first.
ViewSegmented duration field over days, hours, minutes and seconds. Digits auto-advance, arrows step, and the value stays a plain number of seconds.
ViewNumber input with step buttons, arrow-key and hold-to-repeat stepping, min and max, and Intl formatting for currency, percent or units. Submits the raw number.
ViewSingle-choice control with a sliding thumb. Keyboard works like a radio group and mirrors in RTL. Two sizes, icons, disabled options and a full-width mode.
ViewA free-text input with suggestions from a local list or an async search, with optional inline completion, groups and recent entries. The value is whatever you type.
ViewA group of checkboxes with a select-all parent, nested groups, min and max limits, and an optional search that narrows the list.
ViewAutocomplete single-select that defers loading until open and pages through results on scroll. Debounced server-side search with a pluggable lazy paginator hook.
ViewPassword field with a show/hide toggle and an optional pluggable strength meter.
ViewLocale-aware grouping with currency-symbol prefix and configurable decimal precision.
ViewPhone number field with a country dial-code picker and E.164 output from libphonenumber-js.
ViewStar rating with hover preview, half-star precision, read-only mode and sm / md / lg sizes.
View@-mention textarea with caret-anchored autocomplete, highlighted mention chips, async search and multiple trigger characters.
ViewTiptap editor with a formatting toolbar (headings, lists, links, highlight, alignment) and a hover bubble to edit or unlink links inline. Outputs HTML, controlled or uncontrolled, with composable parts.
ViewClick-to-edit text with preview, validation, async submit and confirm/cancel controls. Input and textarea modes.
ViewSignature capture on signature_pad: smooth ink, per-stroke undo, ink that follows the theme, and PNG/JPEG export via ref.
ViewEditable code field with dependency-free YAML syntax highlighting, a line-number gutter and tab-to-indent. Controlled or uncontrolled.
ViewVisual cron builder kept in sync with the raw expression. Presets, per-field modes, validation, a plain-English preview, and the next run times.
ViewSearchable country picker with flag emoji, pinned countries, optional dial codes, and single or multiple selection. Search by name or ISO code.
ViewPostal address field group that follows the selected country: which fields appear, the order they sit in, and what they are called.
ViewCard number, expiry, and CVC in one row with brand detection, per-brand grouping, Luhn and expiry validation, and auto-advance between fields.
ViewA shadcn Input that formats as you type, for IBANs, postcodes, dates, licence plates or your own pattern. Reports the masked text, the bare characters and whether the mask is complete. Ships presets for common formats.
ViewA Linear-style filter bar for lists and tables: pick a field, then an option, and get a chip with an operator menu and a value editor. Handles options, multi-select, text, number ranges and date ranges, keeps every filter in one array you can save to the URL, and ships applyFilters for client-side lists.
ViewDecade-grid year picker with keyboard nav, min/max bounds, single or range mode.
View4×3 month grid with year stepper, keyboard nav, min/max bounds, single or range mode.
ViewHour, minute and optional second scroll columns with 12/24h modes, step intervals and keyboard nav.
ViewColor picker on react-colorful with HEX / RGB / HSL inputs (colord), an eyedropper where supported, and recent swatches.
ViewSingle-date picker: a trigger that formats the date, opening shadcn Calendar in a popover. Takes react-day-picker matchers for bounds and disabled days.
ViewRange picker on shadcn Calendar: preset column, one or two months, and react-day-picker matchers for bounds and disabled days.
ViewEmoji picker on frimousse: the full emoji set by category, search, skin tones, keyboard navigation and a hover preview.
ViewOne field for a day and a time: a calendar beside hour and minute columns, with an AM/PM column on a 12-hour clock. Picking a day keeps the time, minutes snap to a step, and the value is a single Date.
ViewPick a meeting time: a calendar where days without free slots are disabled, beside the times for the chosen day. Booked slots show crossed out, and arrow keys skip over them.
ViewDrag-and-drop or click upload zone on react-dropzone, with a file list, type and size validation, and readable rejection messages.
ViewPan-and-zoom image cropper on react-easy-crop: rect or round mask, fixed aspect, zoom slider and canvas export via ref.
ViewLocal media file picker that previews via an object URL; empty-state prompt, replace and clear, size validation. Nothing leaves the browser.
ViewClick or drop an image, crop it to a circle or square with zoom, and preview the result. Initials fallback, size and type limits, remove control.
ViewShows a PDF in your page on react-pdf: page arrows and a page number field, zoom steps, fit to width and a download button. Text can be selected and links work, and the arrow keys turn pages.
ViewA file as a row for lists or a tile for grids: an icon picked from the type, or an image preview, with the name, size and your own actions. FileIcon and fileKindOf are exported for your own layouts.
ViewUploads files a few at a time with progress for each and overall, plus cancel, retry and clear finished. useUploadQueue takes your upload function, so it works with S3, a signed URL or your own API, and pairs with File Dropzone.
ViewVertical event timeline with default or icon dots, tone variants and labelled time / title / description parts.
ViewOverlapping avatar group with size (sm/md/lg) and spacing (tight/normal/loose) variants, image or fallback support, numeric overflow chip, and asChild on items/overflow so each avatar can render as a link or button.
ViewCollapsible nested tree for file explorers and hierarchical data, with auto folder/file icons, depth indentation, selection and keyboard focus.
ViewCount-up number that tweens to its target with easing, Intl formatting (currency, compact, percent), prefix/suffix and reduced-motion support.
ViewDrag-to-reorder list on dnd-kit: pointer and keyboard sorting, handle or whole-item dragging, and controls inside items that stay clickable.
ViewCount-down-to-date timer with boxed / inline / minimal variants, a useCountdown hook, digit animation and completion content.
ViewLive "3 minutes ago" label on a semantic <time>, formatted with Intl for any locale. Every instance shares one timer per refresh rate, and old dates refresh hourly.
ViewGitHub-style contribution heatmap with month and weekday labels, tooltips, configurable intensity scale and a legend.
ViewTanStack-powered data table: faceted, text, range and date filters, sortable columns, column visibility, row selection and pagination, with page, sort and filters kept in the URL. One useDataTable hook drives it: pass pageCount to query server-side, or omit it to sort, filter and page a local array in memory. Ships as a folder of composable parts.
ViewCompact metric card with a value and unit, a tone-aware sparkline and an up / down trend line. Compound API.
ViewBoard of columns and cards on dnd-kit: pointer and keyboard drag-and-drop across columns, a drag overlay, an empty-column hint, and one commit per move.
ViewTiny inline chart on recharts in line, area or bar form with optional curve, last-point dot, reference line and hover tooltip. Tints with currentColor.
ViewRadial SVG gauge for a single reading on a scale, with threshold bands that recolour the arc, an animated sweep and a centred value and caption. Any start and end angle, from a half circle to a full ring.
ViewLinear meter for how much of a limit is used, like storage or an API quota, with stacked segments, a legend and thresholds that change the colour. Unlike Progress, which tracks a task, it shows an amount against a limit.
ViewLabel and value pairs for detail pages, like an invoice, a user or a server. Terms sit beside their values when there is room and stack on narrow screens, with optional columns, dividers and icons.
ViewA discussion thread for documents, designs or issues: comments with avatars, emoji reactions you can toggle, indented replies, a composer that sends with Ctrl or ⌘ + Enter, and a resolve button that folds the thread away.
ViewA list that renders only the rows in view, so thousands of items scroll smoothly. Rows can be any height and are measured as they render, and it asks for the next page as the reader nears the end, with a loading row and an empty state.
ViewA pressable 3D keycap with hover lift and a pressed state, for shortcut legends and keyboard-driven UIs. Pairs with shadcn's Kbd and KbdGroup for inline shortcuts and chords.
ViewMDX-style admonition with neutral / info / success / warning / destructive variants, CalloutTitle and CalloutDescription parts, and an optional icon override. Ships --info / --success / --warning theme tokens.
ViewFixed reading progress bar. Tracks document scroll by default or a scoped container ref.
ViewTop-of-page banner with default / primary / muted tones, optional dismiss button and localStorage persistence.
ViewClick-to-copy button with copied feedback, icon-only or labelled, ghost / outline variants and a non-secure-context clipboard fallback.
ViewIsometric stack of plates with an icon skewed onto the front face, for feature headers and empty states. Layer count is a prop, and the plates take their color from the surrounding text.
ViewInfinite scrolling row or column for logos and testimonials, with pause-on-hover, reverse and vertical modes. Keyframes ship inline, zero config.
ViewBefore/after comparison slider with a draggable, keyboard-accessible divider, horizontal or vertical orientation and hover-follow mode.
ViewFullscreen image lightbox on Radix Dialog with gallery navigation, zoom and pan, swipe gestures, captions and a thumbnail strip.
ViewQR code on uqr, rendered as crisp SVG, with L/M/Q/H error correction, quiet-zone control and custom colors.
ViewCode display with built-in dependency-free syntax highlighting via theme tokens, line numbers, line highlights, diff gutters, copy button and collapsible max-height.
ViewTrue masonry layout that balances children into the shortest column by measured height, order-preserving, responsive, dependency-free.
ViewComposable audio player with play/pause, scrub-safe seek with buffered tint, skip, time readouts, volume and playback rate.
ViewComposable video player with click or Space to play, scrub-safe seek with buffered tint, time readouts, volume, full screen, and controls that fade out while it plays.
ViewImperative confirmation dialog: a root provider plus a useConfirm hook that resolves a promise on confirm or cancel. Default or destructive tone, an optional icon, and an async confirm action with a pending spinner.
ViewUnsaved-changes guard: a root provider plus a useUnsavedGuard hook. Warns before reload, tab close and in-app link navigation, and returns a guard(proceed) to wrap programmatic navigation in a confirm dialog.
ViewCollapsible JSON tree with typed value colors, item counts on closed nodes, long-string truncation, expand or collapse all, copy, and arrow-key navigation.
ViewReveals content with a blur, fade and lift as it scrolls into view. Configurable delay, duration and threshold; respects reduced-motion.
ViewStaggered text entrance that masks and slides each word, character or line into place on scroll. Respects reduced-motion.
ViewText with a moving highlight for loading labels like "Thinking...". CSS only, follows the text colour, runs the other way in RTL and stays still when reduced motion is on.
ViewFades and slides content in from any direction as it enters the viewport. Configurable distance, delay and replay; respects reduced-motion.
ViewCard surface with a crisp spotlight that tracks the cursor and fades in on hover. Built on Cursor Glow and design tokens.
ViewButton that pulls toward the cursor and springs back on leave. Adjustable strength, asChild to wrap a link, respects reduced-motion.
ViewAmbient glow layer that follows the pointer across its container and fades when it leaves. Drop it behind heroes, grids or feature panels.
ViewCanvas particle field that drifts and twinkles behind any container. Density scales with size, colors resolve from tokens, and it pauses offscreen and under reduced-motion. No dependencies.
View3D pointer tilt with optional cursor-following glare and configurable max angle, scale and perspective. Respects reduced-motion.
ViewA trigger card that morphs into a centered dialog via shared-layout animation, with focus trapping, scroll lock, Esc to close and reduced-motion support.
ViewA collapsible panel for a model's thinking. It opens while the reasoning streams in with a shimmering label, times itself, then folds away into "Thought for 6s" once the answer starts, unless the reader opened it.
ViewShows a tool the model called: its name, a status from pending to done, the input and output as formatted JSON, and errors. Calls that need a human get Allow and Deny buttons and stay open until answered.
ViewCitations for AI answers: numbered inline chips that preview their page on hover or focus, and a "Used 4 sources" line that opens into a list of links with their sites.
ViewA searchable model picker grouped by provider, showing each model's context size, a short description and what it can do: read images, use tools, reason or read files. Fits in a prompt toolbar.
ViewEvery compound component ships as flat top-level exports, no namespacing, no convenience wrappers. The bare name is the root primitive and holds state; every rendered piece carries adata-slotattribute for downstream styling.
import {
MultiSelect,
MultiSelectContent,
MultiSelectTrigger,
} from "@/components/multi-select"
<MultiSelect value={value} onValueChange={setValue} options={options}>
<MultiSelectTrigger placeholder="Pick…" />
<MultiSelectContent searchPlaceholder="Filter…" />
</MultiSelect>