# HoldToStrike

G4 as a behavior: hold ~600ms while the fill sweeps, release early cancels, completion strikes — and the CALLER announces with Undo. A hook for any control plus the ready-made StrikeButton.

Install: `npx candlelight-ds add hold-to-strike`

Category: instrument · Grammar: G4, G5

## Use when

Deleting one thing — a row, an object, a pad. Wrap menu items and icon buttons with the hook.

## Don't use when

Cascade deletes — those earn a typed-confirm Overlay.

## States

- resting (cold danger outline)
- holding (linear fill sweep)
- released early (sweep snaps back)
- struck

## Keyboard

- `Enter/Space held` — same hold; keyup cancels — the keyboard path is first-class

## Acceptance tests

- Release before the threshold never strikes.
- Completion fires exactly once and suppresses the trailing click.
- Every strike is announced with Undo at the call site — undo is a deferred commit, not a restore.

## Files

- components/instruments/HoldToStrike.tsx

npm dependencies: @candlelight-ds/tokens, clsx, tailwind-merge

Rendered twin: https://candlelight-docs.vercel.app/components/hold-to-strike · Full spec: https://candlelight-docs.vercel.app/spec.md
