{#- Chirp Alpine.js macros — importable via {% from "chirp/alpine.html" import ... %} Requires AppConfig(alpine=True) for script injection. Use for local UI state: dropdowns, modals, tabs. htmx handles server round-trips; Alpine handles client-only state. Usage: {% from "chirp/alpine.html" import dropdown, modal, tabs %} {% call dropdown("Menu") %} Link A Link B {% end %} {% call modal("confirm-dialog") %}

Are you sure?

{% end %} {% call tabs(["Overview", "Details", "Settings"], default="Overview") %}
Overview content
Details content
Settings content
{% end %} -#} {# Dropdown — toggle panel with click-outside, escape key, focus return #} {% def dropdown(trigger="Menu", wrapper_class="", panel_class="") %}
{% end %} {# Modal — dialog with escape to close. managed=true: self-contained (default). managed=false: use parent's open variable. #} {% def modal(id="chirp-modal", title="", wrapper_class="", content_class="", managed=true) %} {% end %} {# Tabs — tab list + panel slot; caller provides panel content with x-show per tab #} {% def tabs(tab_names, default=none, tab_list_class="", panel_class="") %} {% set default_tab = default ?? tab_names[0] if tab_names else "" %}
{% for name in tab_names %} {% end %}
{% slot %}
{% end %}