FAQ
Does it work in Expo Go?
Yes. There's no native code, so it runs in Expo Go, dev builds, bare React Native and the web without a rebuild.
Does it need Reanimated or Gesture Handler?
No. It uses only React Native core: Animated (native driver), PanResponder, FlatList and Modal.
How do I clear a date?
Set value to null (single mode) or { start: null, end: null } (range). The calendar shows no selection.
How do I clear a single SelectPicker with the × button?
Single mode × calls only onClear, so reset your state there: clearable onClear={() => setValue(null)}. Multiple mode clears for you.
Why doesn't onChange fire when I set value?
By design: onChange reports user changes only. Programmatic changes to value move the picker silently, which avoids feedback loops.
Why doesn't onChange fire while the wheel is spinning?
onChange fires once the wheel settles. Use onValueChanging for per-row updates (haptics, live labels).
What time zone are dates in?
Local time, the same as new Date(). Calendar days are compared by local year / month / day, so time zones never shift a selected day. Serialize days with toDateKey, not toISOString().
Does TimePicker change the date?
No. It only changes hours, minutes and seconds, and the date part of value is preserved.
Can I select a date and a time together?
Use one Date in state for both:
<DatePicker value={when} onChange={(d) => setWhen(new Date(d.getFullYear(), d.getMonth(), d.getDate(), when.getHours(), when.getMinutes()))} />
<TimePicker value={when} onChange={setWhen} />
How big is it?
There are no dependencies. The emoji table (about 134 KB of source text) is the largest part. On the web it's dropped by tree-shaking if you don't import EmojiPicker or the emoji utilities.
Can I use custom fonts?
Yes: theme={{ typography: { fontFamily: 'Inter-Regular', fontFamilyMedium: 'Inter-SemiBold' } }} on PickersProvider.
How do I make the wheel bigger?
itemHeight sets the row height, visibleItems the row count, and styles.itemText the font size. The wheel's height is itemHeight × visibleItems.
How do I use it in a ScrollView?
Just place it there. Wheels and the emoji grid scroll independently and don't trigger the "VirtualizedLists should never be nested" warning. For SelectList inside a ScrollView, set listHeight.
Is it accessible?
Yes. Wheels are adjustable with increment / decrement actions, days announce full dates, and states are exposed throughout. See Accessibility.
Does it support RTL?
Yes, automatically through I18nManager.isRTL. See i18n & RTL.