{#- Общие части форм. Ошибка поля живёт в

сразу под полем: её заполняет сервер (форма перерисовывается с сообщением) или forms.js (проверка перед отправкой). Поле ссылается на неё через aria-describedby, поэтому пустое сообщение держим пустым. -#} {% from "_partials/icon.html" import icon %} {% macro error_slot(id, message) -%}

{{- icon("warning-circle") }}{{ message or "" }}

{%- endmacro %} {#- aria-invalid для поля с ошибкой сервера; первое такое поле (порядок ошибок = порядок полей) получает autofocus: после перерисовки формы курсор сразу там, где надо исправить -#} {% macro invalid(errors, name) -%} {% if errors.get(name) %} aria-invalid="true"{% if name == errors|first %} autofocus{% endif %}{% endif %} {%- endmacro %}