ns-ui
A meeting-time finder: one row of block glyphs per attendee, a density skyline summing the overlap, and an underlined accent window marking the earliest slot where everyone required is actually free — toggling a person optional recomputes the answer instantly.
Use when showing a group's overlapping availability and the concrete meeting slot that falls out of it — pick this when the point is the ANSWER (the earliest window everyone required is free) and the visible cost of one person's calendar, since making an attendee optional re-runs the solver in front of you. heatmap-year-stipple is the right pick for one series of daily intensity over a year with no solver at all; sheet-ascii-range is for selecting an arbitrary rectangle of cells rather than reading a computed window.
Install
npx shadcn add https://design.helpmarq.com /r/schedule-ascii-freebusy.jsonns-ui / schedule-ascii-freebusy
Six calendars, one skyline of how booked the day is, and the earliest hour everyone required is free. Click a name to make them optional and watch the window move.
| Prop | Type | Default | Description |
|---|---|---|---|
| attendees? | Attendee[] | — | — |
| slots? | number | — | number of half-hour columns (default 18 = 09:00–18:00) |
| dayStartMinutes? | number | — | minutes at the first column (default 540 = 09:00) |
| defaultDuration? | number | — | initial meeting length in minutes; must be one of `durations` |
| durations? | number[] | — | — |
| title? | string | — | — |
| className? | string | — | — |