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.

KQ-1156 · INBOX/CHUTE

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.