{#- chirp-ui: Dropdown menu (items-based) Trigger + items list. Items: {label, href?} or {label, action?, variant?, icon?, divider?} Requires Alpine.js for behavior. Usage: from "chirpui/dropdown_menu.html" import dropdown_menu, dropdown_select, dropdown_split from "chirpui/button.html" import btn {{ dropdown_menu(btn("Actions", icon="▾"), items=[...]) }} -#} {% def dropdown_menu(trigger, items, id="chirpui-dropdown") %} {% set dropdown_id = id %} {% end %} {% def dropdown_select(trigger_label, items, selected=none, id="chirpui-dropdown-select") %} {% set sel = selected or (items[0].get("value", items[0].get("label"))) if items else "" %} {% set display = items[0].get("label", items[0].get("value", "")) if items else "" %} {% for it in items %} {% if it.get("value") == sel or it.get("label") == sel %} {% set display = it.get("label", it.get("value", "")) %} {% endif %} {% endfor %}
{{ display }}
{% for item in items %} {% set val = item.get("value", item.get("label")) %} {% set lbl = item.get("label", val) %}
{% if item.get("icon") %}{{ item.get("icon") }}{% endif %} {{ lbl }}
{% endfor %}
{% end %} {% def dropdown_split(primary_label, primary_href=none, primary_action=none, items=[], icon=none) %}
{% if primary_href %} {% if icon %}{% endif %} {{ primary_label }} {% elif primary_action %} {% endif %}
{% end %}