Skip to Content
This documentation is provided with the HEAT environment and describes this HEAT instance.
DevelopersDashboardsNext dashboard components

Next dashboard components

A Widget is one visual block in a layout row, rendered by a named dashboard component. The Next dashboard (ui/dashboard, published by dashboard-v2 or heat-system-next-dimension) has 20 of them. Each binds to channels in the data service payload through the Layout.

Configuration and payloads differ from Legacy components even when the same React component renders underneath. Next is the current generation. Legacy is kept for existing templates.

Concepts (realms, channels, direct ingestion): Next data service and direct ingestion. The layout document: Layout reference.

How wiring works

  1. A runner or system-utils node publishes $heat-dataservice (see the dashboard-v2 upstream contract).
  2. A layout column sets "component": "<ComponentId>" (for example MapDisplay) plus a configuration block with name, titleContent, channels and the widget’s own options.
  3. The component’s data-service wrapper (for example MapDisplayDS) loads channel data for the realm in view and samples it at the current playback time.
  4. Widget options (for example mapDisplayItem or composableChartItem) live in the layout configuration, not in the channel payload.

Component ids in a layout are not always the same as Legacy mount ids, though many names match.

Component manifest (build-time)

Building ui/dashboard runs npm run build:manifest, which writes dist/dashboard-component-manifest.json. The source of truth is ui/dashboard/src/dashboard-manifest/registry.ts, which records each component’s channel shapes, widget config key and migration status.

Dataservice migration

Full status table, reference JSON paths and notes on partial and layout-only widgets: Dataservice migration status.

All components (20)

ComponentWidget config keyMigrationDoc
BarChartbarChartItemmigratedbar-chart
CircuitStatscircuitStatsItemsmigratedcircuit-stats
CognitiveLoadcognitiveItemmigratedcognitive-load
CognitiveLoadBreakdowncognitiveLoadBreakdownItemmigratedcognitive-load-breakdown
CommscommsItemmigratedcomms
ComposableChartcomposableChartItemmigratedcomposable-chart
CustomRenderercustomRendererItemlayout-onlycustom-renderer
EyeTrackingNonemigratedeye-tracking
EyeTrackingContainereyeTrackingItemmigratedeye-tracking-container
FlightPathflightPathItemmigratedflight-path
ImpactHeatmapNonemigratedimpact-heatmap
LeaderBoardleaderBoardItemmigratedleader-board
MapDisplaymapDisplayItemmigratedmap-display
ModalmodalItemmigratedmodal
ProgressScoreprogressScoreItemsmigratedprogress-score
ResponseTimeresponseTimeItemmigratedresponse-time
StatsSummarystatsItemsmigratedstats-summary
TacticalMapNonemigratedtactical-map
TimelineCharttimelineItemspartialtimeline-chart
VideoPlaybackvideoPlaybackItemmigratedvideo-playback

TimelineChart is partially migrated. Use ComposableChart for new layouts. CustomRenderer binds no channels and is documented as layout only.

Reference JSON (maximal examples): tools/arbex/reference/next/<ComponentId>.json

Arbex RAG (per-widget): tools/arbex/rag/reference/components/

Authoring new pages

Follow the structure of an existing component page such as bar-chart. Document the layout configuration, the channel shape and the payload fields separately, and add the component to the registry with a docsPath that matches the new page.

Opens your browser's print dialog. Choose "Save as PDF" as the destination.