{# Reusable chat dialog: header, scrolling transcript, busy-status bar, and a message form. Element ids derive from `id` ({{id}}-messages, {{id}}-form, {{id}}-message, {{id}}-status, {{id}}-elapsed, {{id}}-cancel) so page modules can wire behavior; styles live in static/components/chat_dialog.css. Pass disabled=true for a display-only transcript (no send/cancel controls). #} {% macro chat_messages(messages, empty_text) %} {% if messages %} {% for message in messages %}
{% endfor %} {% else %}{{ subtitle }}