# Clinic Chair Board block

> Clinic chair board with per-practitioner columns, status-tinted chips, and drop-rejecting clinic holds

Clinic day board on the event calendar resource view: one column per practitioner with avatar headers and live patient counts, status-tinted appointment chips, hatched clinic holds that reject drops, a searchable patient lookup, day and week switching, a multi-select chair picker and status filters, full appointment CRUD, and a Log History tab fed by every desk action.

- Type: Pro block
- Category: [Event Calendar](https://web.dev.reui.io/blocks/application/event-calendar.md)
- Page: https://web.dev.reui.io/blocks/application/event-calendar/event-calendar-5
- Docs (Base UI): https://web.dev.reui.io/docs/components/base/event-calendar.md
- Docs (Radix UI): https://web.dev.reui.io/docs/components/radix/event-calendar.md
- MCP: `get_block("event-calendar-5")`
- Built with: Alert Dialog, Avatar, Badge, Button, Calendar, Card, Combobox, Dropdown Menu, Event Calendar, Field, Icon Tile, Input, Item, Popover, Scroll Area, Select, Separator, Sheet, Tabs, Textarea, Toggle Group
- Installs with a ReUI Pro or Ultimate license; setup: https://web.dev.reui.io/docs/license-setup

## Best for

One column per practitioner with patient counts, hatched holds that block drops and drag creates, and a log of each desk action

## Agent notes

- Replace `PRACTITIONERS`, `PATIENTS`, `PROCEDURES` and the `DAY_SHEET` and `HOLDS` rows in data.ts with your clinic's records
- `appendLog` stamps entries from `LOG_CLOCK_START`, a fake demo clock, and the log lives only in local state
- `findHoldConflict` guards clinic holds only, so two appointments can still overlap in one chair

## When not to use

- Staff shifts with a required headcount, open slots and a publish step: use [Shift Roster](https://web.dev.reui.io/blocks/application/event-calendar/event-calendar-4.md) (`get_block("event-calendar-4")`)
- The day's appointments as a searchable queue table under KPI tiles: use [Salon Front Desk](https://web.dev.reui.io/blocks/solutions/bookings/solution-bookings-1.md) (`get_block("solution-bookings-1")`)

## Third-party libraries

- date-fns v4: [docs](https://date-fns.org/v4.1.0/docs/Getting-Started)
- Sonner v2: [API reference](https://sonner.emilkowal.ski/toast), [docs](https://sonner.emilkowal.ski/getting-started)
- React DayPicker v9: [API reference](https://daypicker.dev/v9/api), [docs](https://daypicker.dev/v9/start), through shadcn Calendar

## Install

```bash
npx shadcn@latest add @reui/event-calendar-5
```

## About Event Calendar blocks

### When to use

- A full page scheduling workspace where people drag, resize and create events on a week time grid
- A personal calendar of meetings, focus time and travel, filtered by color-coded calendars
- An operations board for one trade: a hotel front desk, a shift roster, clinic chairs or a lending desk

### When not to use

- Only the scheduling grid and its props, to compose inside a layout you already have: use [Event Calendar](https://web.dev.reui.io/components/event-calendar.md) (`get_component("event-calendar")`)
- A compact card that books one meeting from a date picker and a list of time slots: use the [Schedule blocks](https://web.dev.reui.io/blocks/application/schedule.md)
- A single date or range picker with no events, hours or drag: use [Calendar](https://web.dev.reui.io/components/calendar.md) (`get_component("calendar")`)

### Agent notes

- Replace `buildEvents` and the fixed `ANCHOR` date in data.ts with your own events and opening date; every block seeds `events` from them
- Every create, edit, move and delete only updates local state; persist moves in `handleEventsChange` and saves in `saveDraft`
- Each block sets its own `h-svh` wrapper and `p-4` padding, and the grid scrolls inside it, so give it a bounded height in an app shell

Every ReUI item has a twin like this one; the index is https://web.dev.reui.io/llms.txt. Agents with the ReUI MCP (https://web.dev.reui.io/docs/mcp) get the same guidance from the getters named above.
