KQ-760 · SEND/HOLD
Send Hold
A send button with a plan behind it. A tap sends now; holding past holdDelay fills a hairline ring around the arrow linearly, then unfolds a panel above the button whose options rise from eight pixels on snap in a cascade stagger, nearest the button first. While the pointer is still down, dragging over an option moves one layoutId pill between rows on snap and releasing picks it; releasing anywhere else folds the panel on the exit ease with nothing sent. A pick lands a stamp beside the button on recoil — Sent, Scheduled, Queued — that fades after a beat. Space or Enter taps, holding either opens the panel with focus on the first item, ArrowUp opens it directly, and the arrows, Home, End, Enter and Escape drive the menu.
Hold Send for options
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/send-hold
Props
- options
- SendOption[]
- default send now / schedule / send as task
- { id, label, hint?, stamp? } — the plan's choices; the first is what a tap does, hint prints as a mono aside, stamp is the word that lands after a pick.
- holdDelay
- number
- default 320
- Milliseconds of hold before the panel unfolds.
- onPick
- (option: SendOption) => void
- default —
- Fires from a tap (the first option), a release on an option, or Enter in the panel.
- disabled
- boolean
- default false
- Nothing to send: the button is inert and the panel never opens.
- label
- string
- default "Send"
- The button's accessible name.
| Prop | Type | Default | Description |
|---|---|---|---|
| options | SendOption[] | send now / schedule / send as task | { id, label, hint?, stamp? } — the plan's choices; the first is what a tap does, hint prints as a mono aside, stamp is the word that lands after a pick. |
| holdDelay | number | 320 | Milliseconds of hold before the panel unfolds. |
| onPick | (option: SendOption) => void | — | Fires from a tap (the first option), a release on an option, or Enter in the panel. |
| disabled | boolean | false | Nothing to send: the button is inert and the panel never opens. |
| label | string | "Send" | The button's accessible name. |