Skip to main content
React Wheel Picker Hero Light

Welcome to React Wheel Picker

A beautiful iOS-style wheel picker component for React with natural touch scrolling, smooth inertia effects, and infinite loop support. Perfect for building date pickers, selection menus, and any interface requiring an intuitive scrolling wheel.

Installation

Get started with npm, yarn, or pnpm installation

Quick Start

Build your first wheel picker in minutes

Examples

Explore real-world examples and demos

API Reference

Complete API documentation and type definitions

Key Features

Smooth inertia scrolling with physics-based deceleration that feels just like iOS native pickers. Supports both touch and mouse interactions with drag gestures.
Enable seamless infinite scrolling for options that should wrap around. Perfect for time pickers and circular selections.
Unstyled components with complete control over appearance. Style with Tailwind CSS, CSS modules, or any styling solution. Includes data attributes and className props for flexible styling.
Full keyboard support with arrow keys for scrolling, Home/End for jumping to first/last items, and type-ahead search for quick navigation.
Built with accessibility in mind. Proper focus management, keyboard navigation, and ARIA attributes for screen readers.
Install via shadcn/ui CLI for quick setup, or use the primitives package for full control. Works with Next.js, Vite, and any React setup.

Simple Example

Here’s a basic example showing how easy it is to create a wheel picker:
import { useState } from "react";
import {
  WheelPicker,
  WheelPickerWrapper,
  type WheelPickerOption,
} from "@ncdai/react-wheel-picker";

const frameworks: WheelPickerOption[] = [
  { label: "Next.js", value: "nextjs" },
  { label: "Vite", value: "vite" },
  { label: "Remix", value: "remix" },
  { label: "Astro", value: "astro" },
  { label: "Gatsby", value: "gatsby" },
];

export function FrameworkPicker() {
  const [value, setValue] = useState("nextjs");

  return (
    <WheelPickerWrapper>
      <WheelPicker
        options={frameworks}
        value={value}
        onValueChange={setValue}
      />
    </WheelPickerWrapper>
  );
}

Why React Wheel Picker?

Performance

Optimized for smooth 60fps animations with efficient rendering

TypeScript

Fully typed with comprehensive TypeScript definitions

Framework Agnostic

Works with Next.js, Vite, Remix, or any React setup

Zero Dependencies

Lightweight with no external runtime dependencies

Controlled & Uncontrolled

Supports both controlled and uncontrolled component patterns

Active Development

Regularly updated with new features and improvements

Get Started

1

Install the package

Choose your preferred installation method:
npx shadcn add @ncdai/wheel-picker
or
npm install @ncdai/react-wheel-picker
2

Import and use

Add the wheel picker to your component:
import { WheelPicker, WheelPickerWrapper } from "@ncdai/react-wheel-picker";
3

Customize

Style it to match your design system with classNames or CSS

Community & Support

Ready to build?

Continue to installation to get started with React Wheel Picker

Build docs developers (and LLMs) love