A record control with an idle → recording → processing → done state machine — drift-free elapsed timer, minimum/maximum take guards, and an optional hold-to-record gesture with slide-away cancel.
npx shadcn@latest add @zyeon/record-buttonZyeon UI limits how often it can be asked, and Record Button hasn't had its turn. Its source will show here once it has.