{# Widget partial: Top-N horizontal bar list (label, value) Expects: widget, data {columns, rows}, widget_id, config SQL must return (label_col, value_col). Bars are scaled so the largest value fills the row width; values are listed on the right. #} {% if error %}
{{ error }}
{% elif data and data.rows and data.rows | length > 0 %} {% set max_v = namespace(value=0) %} {% for row in data.rows %} {% set v = (row[1] if row | length > 1 else 0) | float %} {% if v > max_v.value %} {% set max_v.value = v %} {% endif %} {% endfor %} {% set max_v_val = max_v.value if max_v.value > 0 else 1 %}
{% for row in data.rows[:10] %} {% set label = row[0] if row | length > 0 else '' %} {% set raw = row[1] if row | length > 1 else 0 %} {% set v = raw | float %} {% set pct = (v / max_v_val) * 100 if max_v_val else 0 %}
{{ label }}
{{ raw }}
{% endfor %}
{% else %}
No data
{% endif %}