{% comment %} Upstream drives this from React state: the parent re-renders with new messages and the provider reacts. A Django transcript grows in the DOM instead, from htmx, from an event stream, or from a socket handler, so the provider watches the content element and reacts to whatever put a row there. That is the whole contract, and it is why none of this asks the page for JavaScript. The settings arrive as data-* rather than inside the expression: Django escapes for HTML, the browser decodes the entities back, and Alpine then evaluates the result as JavaScript — so a value carrying a quote would run. {% endcomment %}
{{ slot }}