ns-ui

Schedule ASCII Free/Busy

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.json
View source and playground

ns-ui / schedule-ascii-freebusy

Design sync — Thu 16 Apr
09
10
11
12
13
14
15
16
17
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
load
+
:
:
+
%
*
-
-
+
+
+
+
-
+
10:30 → 11:30 all 6 free
2 windows ≥ 60 min · click a name to drop them to optional

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.

Props

PropTypeDefaultDescription
attendees?Attendee[]
slots?numbernumber of half-hour columns (default 18 = 09:00–18:00)
dayStartMinutes?numberminutes at the first column (default 540 = 09:00)
defaultDuration?numberinitial meeting length in minutes; must be one of `durations`
durations?number[]
title?string
className?string