One confirmation dialog for every destructive action — async pending, inline failure and type-to-confirm.
npx shadcn@latest add @zyeon/confirm-dialogZyeon UI limits how often it can be asked, and Confirm Dialog hasn't had its turn. Its source will show here once it has.