UX Catalogue¶
Every component below is rendered from real Dazzle DSL through the real render pipeline — the same code that produces a running app's HTML. Each card shows the live component and the DSL that produced it.
List¶
The workhorse table. Here it carries the outlier_on decorator — the latency_ms cell flags the statistical outlier (⚠ high) vs the displayed rows.
| Name | Team | Status | Latency Ms | Error Rate | Target Ms |
|---|---|---|---|---|---|
| alpha | platform | healthy | 42 | 0.1 | 50 |
| bravo | platform | healthy | 38 | 0.2 | 50 |
| charlie | payments | degraded | 44 | 1.4 | 50 |
| delta | payments | healthy | 40 | 0.3 | 50 |
| echo | growth | healthy | 46 | 0.2 | 50 |
| foxtrot | data | critical | 380⚠ high | 7.2 | 50 |
cat_list:
source: Box
display: list
sort: name asc
outlier_on: latency_ms
outlier_method: iqr
empty: "No boxes"
Metrics¶
KPI tiles — scalar aggregates over the scoped set.
cat_metrics:
source: Box
display: metrics
aggregate:
total: count(Box)
critical: count(Box where status = critical)
avg_latency: avg(latency_ms)
Bar Chart¶
Distribution by a category — one bar per group. One scope-aware GROUP BY.
cat_bar_chart:
source: Box
display: bar_chart
group_by: team
aggregate:
count: count(Box)
empty: "No boxes"
Comparison¶
Ranked league — rows ranked by a metric with inline bars + automatic outlier flag.
cat_comparison:
source: Box
display: comparison
group_by: team
aggregate:
total: count(Box)
rank_by: total
order: desc
outlier_method: iqr
empty: "No boxes"
Pivot Table¶
Cross-tab — counts across two dimensions (team × status).
| Team | Status | Count |
|---|---|---|
| Platform | Healthy | 8 |
| Platform | Critical | 1 |
| Payments | Healthy | 6 |
| Payments | Degraded | 2 |
4 rows
cat_pivot:
source: Box
display: pivot_table
group_by: [team, status]
aggregate:
count: count(Box)
empty: "No boxes"
Kanban¶
Board view — boxes grouped into status columns.
alpha
Team: platform
Latency Ms: 42
Error Rate: 0.1
Target Ms: 50
bravo
Team: platform
Latency Ms: 38
Error Rate: 0.2
Target Ms: 50
delta
Team: payments
Latency Ms: 40
Error Rate: 0.3
Target Ms: 50
echo
Team: growth
Latency Ms: 46
Error Rate: 0.2
Target Ms: 50
charlie
Team: payments
Latency Ms: 44
Error Rate: 1.4
Target Ms: 50
foxtrot
Team: data
Latency Ms: 380
Error Rate: 7.2
Target Ms: 50
Insight Summary¶
A grounded, deterministic narrative — scale + leader + outlier — over a grouped aggregate, with the underlying values cited so every claim is verifiable. No LLM (that's Slice 2).
List¶
Fixed-band RAG decorator — error_rate cells are coloured green/amber/red against author thresholds (WCAG-safe tone + icon + label). The deterministic sibling of the outlier decorator.
| Name | Team | Status | Latency Ms | Error Rate | Target Ms |
|---|---|---|---|---|---|
| alpha | platform | healthy | 42 | 0.1● good | 50 |
| bravo | platform | healthy | 38 | 0.2● good | 50 |
| charlie | payments | degraded | 44 | 1.4● watch | 50 |
| delta | payments | healthy | 40 | 0.3● good | 50 |
| echo | growth | healthy | 46 | 0.2● good | 50 |
| foxtrot | data | critical | 380 | 7.2● critical | 50 |
cat_rag:
source: Box
display: list
rag_on: error_rate
tone_bands:
- at: 5
tone: destructive
- at: 1
tone: warning
- at: 0
tone: positive
Line Chart¶
Time series — daily box volume. One date_trunc('day') GROUP BY.
5 buckets · peak 8
cat_line:
source: Box
display: line_chart
group_by: bucket(opened_at, day)
aggregate:
count: count(Box)
empty: "No boxes"
Radar¶
Polar profile — one spoke per team, value = box count for that team.
4 spokes · 1 series · peak 12