Pick a stay night by night, with prices in the grid. A range cannot cross a booked night.
FreeWeb and MobileMotion
Preview
npx shadcn add @fetaui/stay-pickerPlaygroundNovember 2026Nightly price in USD
Pick a check-in night
TotalPick dates
Booked nightsNovember 2026Nightly price in USD
Pick a check-in night
TotalPick dates
Minimum stay
Maximum stay
Icons animation
Fail next action
Motion
Installation
Terminal· bash
npx shadcn add @fetaui/stay-picker
Accessibility
- Each night reads its date, its price or full, and whether it is the check-in or check-out.
- Booked nights are aria-disabled but stay focusable, and a click on one explains why it is refused.
- Refusals and totals are announced.
Motion
- Hover or focus previews a valid range at 4%.
- A refused pick rings that night in danger and slides a message in.
- Reserved turns the button secondary with a check and the total green.
- With reduced motion, these changes are instant.
Responsive behavior
- 380 px on Web and full width on Mobile.
Performance
- Prices are computed once per month in a memo, so keep
priceForstable. - The grid has one tab stop, and hover only changes one preview value.
Note for AI
Give your coding assistant the Markdown reference instead of screenshots.
- Import
StayPickerfrom@/components/fetaui/stay-picker. It composesButtonandIconButton. priceForreturns a number, or null for a booked night. The total is the sum of those prices.- Selection is
{ from, to }with Date or null. PassvalueandonChangeto control it, ordefaultValueto seed it. Clicking the check-in clears the stay, clicking the check-out keeps only the check-in, and Esc clears. minNightsandmaxNightsrefuse a check-out outside the range with a message, and Reserve stays disabled for a stay that breaks them.onReservegets{ from, to }and the total. Return a promise to hold Reserve in a loading state: it shows Reserved once it resolves, andfailedMessagewith the nights kept if it rejects.- The demo's prices are generated and nothing is booked. Check availability and the total on your server.
Related
CalendarComponentPick a date, a range, or a date and a time. Six rows always, so the height never jumps.Date PickerComponentA pill field that opens a month in a floating surface.Slot PickerComponentBook a time by placing a block on a day. It snaps to 15 minutes and avoids busy time.Seat MapProBlockA cinema seat picker. Click a seat or drag along a row, with priced tiers, a lone seat warning and a booking limit.