{# General-purpose server-loaded modal — native element, pure Tailwind. #} {# Contract: ~/.claude/skills/ux-architect/components/modal.md #} {# Parameters: modal_id (str, default: 'dz-modal'), title (str), size (str: sm|md|lg|xl, default: md) #} {# Usage: server returns this template via hx-get; caller triggers .showModal() on the element. #} {% set modal_id = modal_id | default('dz-modal') %} {% set size = size | default('md') %} {% set size_classes = { 'sm': 'max-w-sm', 'md': 'max-w-lg', 'lg': 'max-w-2xl', 'xl': 'max-w-4xl', } %}
{% if title %}
{% else %} {# No title — close button still present in top-right #}
{% endif %} {# Body — caller fills this #}
{% block modal_content %} {{ content | safe if content else '' }} {% endblock %}
{# Backdrop click closes the dialog (native dialog semantics) #}