Availability calendar
The mini calendar read as a booking chart: every day carries one of three fills, with a legend that names them.
A preset of MiniCalendar, not a second calendar: the same UTC day keys in marks, the same arrow-key grid, the same month ownership rules, plus the one thing a wash of colour cannot supply on its own — a key. The three fills are named in the legend and again in each day's accessible name, so the state of a night never depends on hue alone. legendLabels renames a state for the page it is on — a hotel says "Sold out" where the component says "Full" — without changing what a screen reader hears, which stays the component's own word. Decide the fill with a rule over a number rather than by hand: none left is full, a third or fewer is limited, anything above that is available — and print the number beside the calendar, because a reader who has to choose a night wants to know how many are left.
Install
npx shadcn@latest add @vibra/availability-calendarNeeds the @vibra registry in your components.json — set it up once.