Portal Community

Data Shape

Unlike chart types that bind to arrays, the radial gauge binds to a single numeric value in the form context:

// Binding resolves to a single number
// context.kpi.npsScore = 72

{
  "id": "nps-gauge",
  "type": "gauge-radial",
  "settings": {
    "min": 0,
    "max": 100,
    "value": {
      "source": "$context",
      "path": "kpi.npsScore"
    }
  }
}

Settings Reference

SettingTypeDefaultDescription
minnumber0Minimum value of the gauge scale
maxnumber100Maximum value of the gauge scale
valueBindingConfig | numberScalar binding to the current value, or a static number
zonesGaugeZone[]Colour bands: [{ from, to, color, label? }]
unitstringUnit label shown below the value (e.g. "%" or "ms")
titlestringLabel shown at the bottom of the gauge
showPointerbooleantrueShow the needle pointer
pointerStyleneedle | pinneedleShape of the pointer
startAnglenumber-225Starting angle in degrees (ECharts convention)
endAnglenumber-315Ending angle — controls arc length
showTicksbooleantrueShow scale tick marks on the arc
splitNumbernumber5Number of major tick/label divisions on the arc
formatstringValue format: number, currency, percent

NPS Score Gauge with Zones

{
  "id": "nps-gauge",
  "type": "gauge-radial",
  "width": "third",
  "settings": {
    "height": "260px",
    "title": "Net Promoter Score",
    "min": -100,
    "max": 100,
    "unit": "NPS",
    "splitNumber": 4,
    "zones": [
      { "from": -100, "to": 0,   "color": "#ef4444", "label": "Detractor" },
      { "from": 0,    "to": 50,  "color": "#f59e0b", "label": "Passive"   },
      { "from": 50,   "to": 100, "color": "#22c55e", "label": "Promoter"  }
    ],
    "value": { "source": "$context", "path": "survey.nps" }
  }
}

SLA Compliance Gauge

{
  "id": "sla-gauge",
  "type": "gauge-radial",
  "width": "third",
  "settings": {
    "height": "260px",
    "title": "SLA Compliance",
    "min": 0,
    "max": 100,
    "unit": "%",
    "format": "number",
    "zones": [
      { "from": 0,  "to": 80, "color": "#ef4444" },
      { "from": 80, "to": 95, "color": "#f59e0b" },
      { "from": 95, "to": 100, "color": "#22c55e" }
    ],
    "value": { "source": "$context", "path": "sla.compliancePercent" }
  }
}

System Latency Monitor

{
  "id": "latency-gauge",
  "type": "gauge-radial",
  "width": "third",
  "settings": {
    "height": "260px",
    "title": "Avg Response Time",
    "min": 0,
    "max": 2000,
    "unit": "ms",
    "splitNumber": 4,
    "zones": [
      { "from": 0,    "to": 200,  "color": "#22c55e" },
      { "from": 200,  "to": 500,  "color": "#f59e0b" },
      { "from": 500,  "to": 2000, "color": "#ef4444" }
    ],
    "value": { "source": "$context", "path": "telemetry.avgLatencyMs" }
  }
}

Three Gauges Side by Side

Using width: "third" places three gauges on a single row for a compact KPI dashboard panel:

// Form schema excerpt — three gauges in a row
[
  { "id": "nps-gauge",     "type": "gauge-radial", "width": "third", "settings": { ... } },
  { "id": "sla-gauge",     "type": "gauge-radial", "width": "third", "settings": { ... } },
  { "id": "latency-gauge", "type": "gauge-radial", "width": "third", "settings": { ... } }
]
Reactive Value Updates The value binding is reactive. If a workflow node pushes an updated value into the form context (via SignalR or a form action), the needle animates smoothly to the new position without a page reload. Set animation: true (the default) to enable the sweep animation.