Support requests, sales enquiries, split map-and-form layouts.
A contact form is a promise about a reply, so the useful ones say when to expect it and offer an alternative for people who would rather not fill anything in. These carry the full state machine — idle, submitting, success, and an error that keeps what the user typed — which is the part most hand-built forms are missing when the network drops.
A contact form beside the channels that bypass it — a real address, a support link and a response-time promise, which is what makes a form people cannot see into feel worth filling.
The state every form reaches and none of them illustrate: a focused summary at the top linking to each bad field, validation that waits for submit, and somewhere for the failure that belongs to no field.
A three-step form where each step validates only its own fields, errors are wired to inputs with aria-describedby, and advancing moves focus to the new heading.
Most tickets take two round trips because the first reply has to ask what was already tried. This asks up front, and the answer is optional so it never blocks sending.
A honeypot field hidden from humans, a timestamp check that rejects sub-second submissions, and rate limiting per IP will clear most of it. Add a challenge only when that stops being enough — every CAPTCHA costs real submissions.
What is the minimum accessible form?
A visible `<label>` per field, errors linked with `aria-describedby`, and a success message in a live region. Placeholder-as-label fails all three at once.
Are these contact forms free to use?
All 6 are free to copy and use in your own projects, including commercial ones. A Pro licence exists for redistribution — shipping them inside a product other people buy — and the full terms are on the licence page.
How do I add one to my project?
Install it with the CLI: `npx hoverlab add contact-form-split` writes the component and its dependencies into your project. Every artifact here also has a copy button for the raw source, and an "Open in sandbox" link if you would rather try it first.