KQ-1156 · INBOX/CHUTE
Inbox Chute
An inbox you watch fill: each notice is a card that drops through a glass chute under gravity, solved on one linear clock, lands on the pile in the tray and hops with bounce, then tips to its own seeded lean while the pile gives and the tray's count rolls on springs.snap. A tap on the tray fans the pile into a readable list newest first on springs.glide, a cascade beat apart, and gathers it back with the same bounce; Clear all tips the tray about its right end and the pile slides off, then the tray drops back level on springs.recoil. The tray is a button — Enter fans the list and focus moves to the newest card; arrows move, Delete dismisses and Escape gathers the pile.
Press to fan the pile into a list. In the list, arrow keys move, Delete dismisses and Escape gathers the pile.
3 in the tray · newest: unusual sign-in
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/inbox-chute
Props
- notices
- InboxChuteNotice[]
- default —
- The notices in the tray, oldest first: { id, title, body?, tone? }. A new one drops down the chute.
- onDismiss
- (id: string) => void
- default —
- A notice was dismissed from the fanned list: its ×, or Delete.
- onClearAll
- () => void
- default —
- Clear all tipped the tray. Without it, onDismiss fires for each.
- label
- string
- default "Inbox"
- The inbox's accessible name.
- clearLabel
- string
- default "Clear all"
- The Clear all button's text.
- bounce
- number
- default 0.35
- How lively a landing is, 0 to 0.8: a dead drop, or a card that hops.
- lean
- number
- default 4
- How untidy the pile is, 0 to 10 degrees.
- tray
- "steel" | "wood" | "plastic"
- default "steel"
- What the tray is made of: its look and the landing's voice.
- sound
- boolean
- default false
- Play the landings, the fan and the clear. A landing is heard only when the visitor has just acted.
- disabled
- boolean
- default false
- Folds the list and takes no presses.
- className
- string
- default —
- Classes for the instrument's box.
| Prop | Type | Default | Description |
|---|---|---|---|
| notices | InboxChuteNotice[] | — | The notices in the tray, oldest first: { id, title, body?, tone? }. A new one drops down the chute. |
| onDismiss | (id: string) => void | — | A notice was dismissed from the fanned list: its ×, or Delete. |
| onClearAll | () => void | — | Clear all tipped the tray. Without it, onDismiss fires for each. |
| label | string | "Inbox" | The inbox's accessible name. |
| clearLabel | string | "Clear all" | The Clear all button's text. |
| bounce | number | 0.35 | How lively a landing is, 0 to 0.8: a dead drop, or a card that hops. |
| lean | number | 4 | How untidy the pile is, 0 to 10 degrees. |
| tray | "steel" | "wood" | "plastic" | "steel" | What the tray is made of: its look and the landing's voice. |
| sound | boolean | false | Play the landings, the fan and the clear. A landing is heard only when the visitor has just acted. |
| disabled | boolean | false | Folds the list and takes no presses. |
| className | string | — | Classes for the instrument's box. |