Founding price: $35, then $99 after 23:59 UTC on 4 November, then $99
Get ProThe "reward early, punish late" strategy: a field stays quiet while typing, validates when you leave it, and once it has shown an error it re-validates on every keystroke so the message clears the moment it is fixed. Use this when live validation feels nagging but a stale error feels broken.
This item has no props to tune. Use the lens above to change theme, density, direction and more.
You want validation timing that respects people: no errors while typing the first time, immediate relief when an error is fixed.
Do not use it when: For fields where every keystroke matters (password rules checklist) show rules live instead of errors.
import { ValidateOnBlurThenChange } from "@/components/validate-on-blur-then-change"<ValidateOnBlurThenChange />The pattern takes no props. Copy it and change the rules; the timing logic is the form store's: errors are shown for a field after it was blurred, and validation runs on every change.
role="alert" and the input gets aria-invalid.inputMode, so touch keyboards match the data.The pattern ships with a Testing Library test (validate-on-blur-then-change.test.tsx) that covers: its main behaviour, the keyboard path and the error or empty states.