The common rules — try submitting empty (live)
The rules
- Validation is DECLARATIVE:
validateon the form +validate-*attributes on fields; you write no validation JS. Submit firesvalidator:submitonly when everything passes. - Errors render INLINE at the field (message under it,
is-invalidon the control) — never alerts, never toasts (UI elements). - Custom texts per rule via
validate-*-message; check/radio groups put the rules on the FIRST input and the error lands after the group. - New-password fields take
validate-password— the house policy (10+ characters; up to 20 also an uppercase, a lowercase and a special character; over 20 length alone counts). The error says exactly what is missing. - SERVER validation closes the loop: a save's
data.fieldslands on the same fields through former — one look for both sides. - Docs:
templates/app/docs/libs/validator.md; every rule live: /tests/validator.