LabsPortfolio

Components

Controls

Animated Select

A searchable select with staggered option entry, spring chevron, grouped items, and a bottom-sheet on mobile — one component, every platform.

All components

Installation

Coming soon. Components will be available via the registry once checkout goes live.

Usage

const [framework, setFramework] = useState("");

<AnimatedSelect
  label="Framework"
  value={framework}
  onChange={setFramework}
  options={[
    { value: "next", label: "Next.js" },
    { value: "remix", label: "Remix" },
    { value: "vite", label: "Vite" },
  ]}
/>

Props

PropTypeDefaultDescription
options*SelectOption[]Array of options. Each needs value and label; icon and group are optional.
valuestringCurrently selected value (controlled).
onChange(value: string) => voidFired when a new option is selected.
placeholderstring"Select an option"Trigger label when nothing is selected.
searchablebooleantrueShows a search input inside the dropdown for filtering.
labelstringLabel displayed above the trigger.
disabledbooleanfalseDisables the trigger.
emptyTextstring"No results"Message shown when the search produces no results.
maxHeightnumber280Max height of the option list in px before scrolling.
classNamestringTailwind classes on the root container.

Use cases

  • Settings forms

    Country, timezone, language, currency — any setting with many options benefits from search.

  • Filter dropdowns

    Replace bare <select> elements in filter bars with a searchable, keyboard-navigable component.

  • Team / user assignment

    Pick a team member from a grouped list (by department, role, etc.).

  • Category selectors

    Product categories, tags, or any taxonomy with grouped options.