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.

KQ-760 · SEND/HOLD
Hold for options, or press Up

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.