Components
Follow-up scheduler
Move planned outreach into a distinct queue with visible timing context.
On this page
Purpose and composition
Move planned outreach into a distinct queue with visible timing context.
Use for a future contact action; do not conflate with message sent time.
Anatomy
| Part | Responsibility |
|---|---|
| Current value | Optional scheduled label and Clear |
| Date | Native date input |
| Quick choices | Today, Tomorrow, Next week |
| Footer | Cancel and Schedule |
Configuration and variants
| Input / variant | Contract |
|---|---|
| open/current/onClose | Dialog control/context |
| onSave | Receives formatted display string or undefined |
| date gate | Schedule disabled until native date has value |
States and feedback
| State | Visible / behavioral result |
|---|---|
| No date | Disabled Schedule |
| Date selected | Enabled Schedule |
| Current | Clear option |
| Quick choice | Immediate callback |
Interaction and responsive behavior
- Date converts through Intl en-US month/day at local noon.
- Parent changes state to follow-up and clears waiting fields.
- Clearing follow-up returns a follow-up thread to waiting.
Accessibility contract
- Date has a visible label.
- Quick options and clearing are native buttons.
Known implementation limits
Only display strings are stored, without year/timezone or an actual reminder job. The local date state does not initialize from current.
Composition example
<FollowUpDialog open={open} current={thread.nextFollowUp} onClose={close} onSave={scheduleLocal} />Source references
| File | Responsibility |
|---|---|
| components/inbox/follow-up-dialog.tsx | FollowUpDialog |
| components/inbox/conversation-detail.tsx | Follow-up transition |
Examples from the app
Actual Sonarist components with fictional conversations, people, example.com addresses and simulated operational states. Captured at 2× resolution or higher. Select an image to inspect it full size.
Related topics
Source audit: 2026-10-08 · Revision 10f45d1377b5 · Documentation v1.0.0