KQ-913 · SLOW/MODE
Slow Mode
A slow-mode wait drawn on the control it is holding. A shutter fills the send button and drains on a linear tween one second per step while a mono countdown replaces the word, fed by a timeout that lives in an effect and never runs while the tab is hidden; when it empties the button wakes with one snap overshoot from 1.06x. Hovering or focusing Send swaps the hint line to the remainder — two readings in one grid cell, cross-faded — and Send stays in the tab order while held, with the wait spoken in its name.
KQ-913 · SLOW/MODE
One message every 8 seconds.
awake · draft 0 chars · 0 sent
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/slow-mode
Props
- value / defaultValue
- string
- default ""
- Controlled or initial draft.
- onValueChange
- (value: string) => void
- default —
- Fires from every keystroke and from the clear after a send.
- interval
- number
- default 60
- The slow-mode window, in seconds; it also builds the default rule line.
- remaining / defaultRemaining
- number
- default 0
- Seconds left. Passing `remaining` hands the clock to the host; `defaultRemaining` is a plain number for the first paint, never a clock.
- onRemainingChange
- (seconds: number) => void
- default —
- Fires on every tick, on a send, and on the wake, with whole seconds.
- onSend
- (text: string) => void
- default —
- Fires from Enter or the Send button with the trimmed draft.
- onWake
- () => void
- default —
- Fires once when the wait reaches zero.
- ruleLabel
- string
- default —
- The rest reading under the composer. Built from `interval` by default: "One message a minute." at 60.
- placeholder
- string
- default "Message the room"
- The textarea's placeholder.
- disabled
- boolean
- default false
- Holds the composer and the button.
- label
- string
- default —
- Names the textarea for assistive technology.
| Prop | Type | Default | Description |
|---|---|---|---|
| value / defaultValue | string | "" | Controlled or initial draft. |
| onValueChange | (value: string) => void | — | Fires from every keystroke and from the clear after a send. |
| interval | number | 60 | The slow-mode window, in seconds; it also builds the default rule line. |
| remaining / defaultRemaining | number | 0 | Seconds left. Passing `remaining` hands the clock to the host; `defaultRemaining` is a plain number for the first paint, never a clock. |
| onRemainingChange | (seconds: number) => void | — | Fires on every tick, on a send, and on the wake, with whole seconds. |
| onSend | (text: string) => void | — | Fires from Enter or the Send button with the trimmed draft. |
| onWake | () => void | — | Fires once when the wait reaches zero. |
| ruleLabel | string | — | The rest reading under the composer. Built from `interval` by default: "One message a minute." at 60. |
| placeholder | string | "Message the room" | The textarea's placeholder. |
| disabled | boolean | false | Holds the composer and the button. |
| label | string | — | Names the textarea for assistive technology. |