MDK Logo
ReferenceUIComponents

Widget Components

Dashboard widgets and data display cards

Widget components for dashboards and data displays.

Prerequisites

  • Complete the installation
  • Import styles: import '@tetherto/mdk-react-devkit/styles.css'

Components

AddReplaceMinerDialog

Modal for adding a new miner to a slot or swapping the existing one with a replacement unit.

agent-ready

Props

PropTypeRequiredDefaultDescription
openboolean--
onCloseVoidFunction--
selectedSocketToReplaceUnknownRecord | undefined--
selectedEditSocketUnknownRecord | undefined--
currentDialogFlowstring | undefined--
isDirectToMaintenanceModeboolean | undefined--
minersTypestring | undefined--
isContainerEmptyboolean | undefined--

BatchContainerControlsCard

Bulk-controls card that applies start/stop/mode changes to multiple selected containers at once.

agent-ready

Props

PropTypeRequiredDefaultDescription
isBatchboolean--
isCompactboolean--
connectedMinersunknown--
alarmsDataItemsTimelineItemData[]--
onNavigate(path: string) => void--

BitdeerOptions

Options panel for a Bitdeer container — exposes vendor-specific operating modes and thresholds.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataUnknownRecord | undefined--

BitdeerPumps

Pump telemetry panel for a Bitdeer container showing per-pump RPM, flow, and alert states.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataUnknownRecord | undefined--

BitdeerSettings

Settings tab for a Bitdeer container — vendor-specific configuration controls and limits.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataUnknownRecord | undefined--

BitdeerTankPressureCharts

Stacked time-series of dielectric tank pressure for a Bitdeer immersion container.

agent-ready

Props

PropTypeRequiredDefaultDescription
tagstring | undefined--
chartDataPayloadChartDataPayload | undefined--
chartTitlestring | undefined--
dateRange{ start?: number | undefined; end?: number | undefined; } | undefined--
dataUnknownRecord[] | undefined--
timelinestring | undefined--
fixedTimezonestring | undefined--
heightnumber | undefined--
showLegendboolean | undefined--
showRangeSelectorboolean | undefined--
rangeOptions{ label: string; value: string; }[] | undefined--
footerReact.ReactNode--

BitdeerTankTempCharts

Tank Temperature Charts for Bitdeer containers

agent-ready

Props

PropTypeRequiredDefaultDescription
tankNumberstring | number | undefined-Tank number (1 or 2)
tagstring | undefined--
chartDataPayloadChartDataPayload | undefined--
chartTitlestring | undefined--
dateRange{ start?: number | undefined; end?: number | undefined; } | undefined--
dataUnknownRecord[] | undefined--
timelinestring | undefined--
fixedTimezonestring | undefined--
heightnumber | undefined--
showLegendboolean | undefined--
showRangeSelectorboolean | undefined--
rangeOptions{ label: string; value: string; }[] | undefined--
footerReact.ReactNode--

BitMainBasicSettings

General settings form for a BitMain container — naming, location, and power limits.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Container data

BitMainControlsTab

Controls tab for a BitMain container exposing start/stop, mode select, and emergency actions.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice-Device data

BitMainCoolingSystem

Cooling subsystem panel for a BitMain container — pumps, fans, and dry-cooler status.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Container data

BitMainHydroLiquidTemperatureCharts

Time-series charts of dielectric liquid temperature for a BitMain hydro-cooled container.

agent-ready

Props

PropTypeRequiredDefaultDescription
tagstring | undefined--
chartDataPayloadChartDataPayload | undefined--
chartTitlestring | undefined--
dateRange{ start?: number | undefined; end?: number | undefined; } | undefined--
dataUnknownRecord[] | undefined--
timelinestring | undefined--
fixedTimezonestring | undefined--
heightnumber | undefined--
showLegendboolean | undefined--
showRangeSelectorboolean | undefined--
rangeOptions{ label: string; value: string; }[] | undefined--
footerReact.ReactNode--

BitMainHydroSettings

Settings form for a BitMain hydro-cooled container; flow, temperature, and pump configuration.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Device data

BitMainImmersionControlBox

Control box for a BitMain immersion container exposing tank, pump, and unit-level actions.

agent-ready

Props

PropTypeRequiredDefaultDescription
titlestring | undefined-Box title
leftContentReact.ReactNode-Content for left column
rightContentReact.ReactNode-Content for right column
bottomContentReact.ReactNode-Content for bottom row
secondaryboolean | undefined-Secondary variant (no border)
classNamestring | undefined-Custom className

BitMainImmersionPumpStationControlBox

Pump-station control card for a BitMain immersion container with per-pump enable/disable.

agent-ready

Props

PropTypeRequiredDefaultDescription
titlestring | undefined-Box title
alarmStatusboolean | undefined-Alarm/fault status
readyboolean | undefined-Ready status
operationboolean | undefined-Operation status
startboolean | undefined-Start status
classNamestring | undefined-Custom className

BitMainImmersionSettings

Settings form for a BitMain immersion container — tank thresholds, pump curves, and limits.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Device data
containerSettings{ thresholds?: Record<string, unknown> | undefined; } | null | undefined-Container settings with custom thresholds

BitMainImmersionSummaryBox

Summary card for a BitMain immersion-cooled container: temps, pumps, power, and overall status.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined--
containerSettingsBitMainImmersionSummaryBoxContainerSettings | null | undefined--

BitMainImmersionSystemStatus

Aggregated system-status card for a BitMain immersion container; rolls up subsystem health.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Device data

BitMainImmersionUnitControlBox

Per-unit control card inside a BitMain immersion container with start/stop and reset actions.

agent-ready

Props

PropTypeRequiredDefaultDescription
titlestring | undefined-Box title
alarmStatusboolean | undefined-Alarm/fault status
frequencynumber | undefined-Frequency value in Hz
isDryCoolerboolean | undefined-Whether this is a dry cooler unit
runningboolean | undefined-Whether the unit is running
showFrequencyInLeftColumnboolean | undefined-Show frequency in left column instead of right
secondaryboolean | undefined-Secondary variant (no border)
classNamestring | undefined-Custom className

BitMainLiquidPressureCharts

Time-series charts of dielectric liquid pressure across a BitMain immersion container.

agent-ready

Props

PropTypeRequiredDefaultDescription
tagstring | undefined--
chartDataPayloadChartDataPayload | undefined--
chartTitlestring | undefined--
dateRange{ start?: number | undefined; end?: number | undefined; } | undefined--
dataUnknownRecord[] | undefined--
timelinestring | undefined--
fixedTimezonestring | undefined--
heightnumber | undefined--
showLegendboolean | undefined--
showRangeSelectorboolean | undefined--
rangeOptions{ label: string; value: string; }[] | undefined--
footerReact.ReactNode--

BitMainLiquidTempCharts

Time-series charts of dielectric liquid temperature across a BitMain immersion container.

agent-ready

Props

PropTypeRequiredDefaultDescription
tagstring | undefined--
chartDataPayloadChartDataPayload | undefined--
chartTitlestring | undefined--
dateRange{ start?: number | undefined; end?: number | undefined; } | undefined--
dataUnknownRecord[] | undefined--
timelinestring | undefined--
fixedTimezonestring | undefined--
heightnumber | undefined--
showLegendboolean | undefined--
showRangeSelectorboolean | undefined--
rangeOptions{ label: string; value: string; }[] | undefined--
footerReact.ReactNode--

BitMainPowerAndPositioning

Power and physical-positioning settings for a BitMain container — circuits, phases, and rack slots.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Container data

BitMainPowerCharts

Time-series charts of per-phase power, voltage, and current draw for a BitMain container.

agent-ready

Props

PropTypeRequiredDefaultDescription
tagstring | undefined--
chartDataPayloadChartDataPayload | undefined--
chartTitlestring | undefined--
dateRange{ start?: number | undefined; end?: number | undefined; } | undefined--
dataUnknownRecord[] | undefined--
timelinestring | undefined--
fixedTimezonestring | undefined--
heightnumber | undefined--
showLegendboolean | undefined--
showRangeSelectorboolean | undefined--
rangeOptions{ label: string; value: string; }[] | undefined--
footerReact.ReactNode--

BitMainSupplyLiquidFlowCharts

Time-series charts of supply-side coolant flow rates for a BitMain immersion container.

agent-ready

Props

PropTypeRequiredDefaultDescription
tagstring | undefined--
chartDataPayloadChartDataPayload | undefined--
chartTitlestring | undefined--
dateRange{ start?: number | undefined; end?: number | undefined; } | undefined--
dataUnknownRecord[] | undefined--
timelinestring | undefined--
fixedTimezonestring | undefined--
heightnumber | undefined--
showLegendboolean | undefined--
showRangeSelectorboolean | undefined--
rangeOptions{ label: string; value: string; }[] | undefined--
footerReact.ReactNode--

ContainerCharts

Tabbed chart panel showing per-container hashrate, power, and temperature time series.

agent-ready

Props

PropTypeRequiredDefaultDescription
featureEnabledboolean | undefinedtrueWhen false, shows an empty state (feature gate).
disabledMessagestring | undefined-Message when featureEnabled is false
combinationsContainerChartCombinationOption[]-Options for the combination selector
isLoadingCombinationsboolean | undefined-Loading state for combination options
titlestring | undefined-Section heading
selectedCombinationstring | null | undefined-Controlled selected combination value
defaultSelectedCombinationstring | null | undefined-Initial selection when uncontrolled
onSelectedCombinationChange((value: string | null) => void) | undefined--
chartRawDataChartEntry[] | null | undefined-Raw overview stats rows passed to chart adapters
isLoadingChartsboolean | undefined--
getDatasetBorderColorContainerChartsDatasetBorderColorResolver | undefined-Optional per-dataset line colors after adapters run (e.g. demo or host branding).

ContainerControlsBox

Control panel for a single container — start/stop, mode select, and operator actions.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined--
isBatchboolean | undefined--
isCompactboolean | undefined--
selectedDevicesDevice[] | undefined--
pendingSubmissionsPendingSubmission[] | undefined--
alarmsDataItemsTimelineItemData[] | undefined--
tailLogDataUnknownRecord[] | undefined--
powerModesLogUnknownRecord | undefined--
onNavigate(path: string) => void--

ContainerControlsCard

Per-socket controls card for the container detail view: powers the selected miner sockets on/off and shows their aggregate power / current. Reads the selected sockets from the devices store (populate…

advanced

Props

PropTypeRequiredDefaultDescription
isLoadingboolean--
buttonsStatesButtonsStates--

ContainerFanLegend

Legend strip describing fan states and colours used by the container fans visualisation.

agent-ready

Props

PropTypeRequiredDefaultDescription
indexnumber | null | undefined-Fan index/number to display
enabledboolean | undefined-Whether the fan is enabled/running
classNamestring | undefined-Custom className

ContainerFansCard

Card displaying the array of cooling fans in a container with live state per fan.

agent-ready

Props

PropTypeRequiredDefaultDescription
fansDataPumpItem[] | undefined--

ContainerSelectionDialog

Modal that lists containers and lets the operator pick one or many for a follow-up action.

agent-ready

Props

PropTypeRequiredDefaultDescription
minerDevice | undefined--
containersDevice[] | undefined--
isLoadingboolean | undefined--
openboolean--
onClose(value?: boolean | undefined) => void--

ContainerWidgetCard

Presentational summary card for a single container in the Site Overview widgets grid: a header row (title / alarms / power), then either an offline / error banner or the body (optional vendor content…

agent-ready

Props

PropTypeRequiredDefaultDescription
titlestring-Container display name shown in the header row.
powernumber | undefined-Latest container power draw in watts (rendered in kW by the top row).
powerUnitstring | undefined-Power unit label shown next to the reading.
alarmsPartial<Record<AlarmPropKey, Alert[]>> | undefined-Per-category alarm badges for the header row.
statsErrorMessagestring | ErrorWithTimestamp[] | null | undefined-Raw stats error surfaced as a tooltip in place of the power reading.
summaryMinersSummaryParam[]-Pre-formatted miners-summary rows (label + display value incl. units).
activityContainerActivityData | undefined-Miner-state activity counts for the embedded chart.
isActivityLoadingboolean | undefined-Activity chart loading state.
isActivityErrorboolean | undefined-Activity chart error state.
activityErrorContainerActivityError | undefined-Activity chart error payload.
isOfflineboolean | undefined-Render the offline banner instead of the body.
errorMessagestring | undefined-Container-level error message; renders an error banner instead of the body.
flashboolean | undefined-Critical-high alarm flash. Computed upstream (by the data hook) so the card stays presentational — never derive alarm s…
vendorContentReact.ReactNode-Optional vendor-specific content (supply-liquid / tanks / immersion / MicroBT boxes) rendered above the miners summary.…
onClick(() => void) | undefined-Invoked when the card is clicked (navigation is the caller's concern).
classNamestring | undefined--

CostMetrics

Three "$/MWh" tiles that summarise the cost-summary period. Order mirrors the OSS Cost page: All-in (highlighted), Energy, Operations.

agent-ready

Props

PropTypeRequiredDefaultDescription
metricsCostSummaryDisplayMetrics--

DryCooler

Dry-cooler subsystem panel showing inlet/outlet temperatures and fan-stage status.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataUnknownRecord | undefined--

EnabledDisableToggle

Switch with confirmation that enables or disables a container, miner, or feature flag.

agent-ready

Props

PropTypeRequiredDefaultDescription
valueunknown--
tankNumberstring | number--
isButtonDisabledboolean--
isOfflineboolean--
onToggle(params: EnabledDisableToggleCbParams) => void--

ExplorerDetail

Per-type Explorer detail panel. Reads the selection the [**useExplorerSelection**](/reference/ui/hooks/op-centre/#useexplorerselection) bridge writes into devicesStore and composes the matching cards:

agent-ready

Props

PropTypeRequiredDefaultDescription
deviceTypeDeviceExplorerDeviceType-The active Explorer tab — selects which per-type panel renders.
onNavigate((path: string) => void) | undefined-Router navigate used by alarm rows to deep-link into /alerts/:id.
isCompactboolean | undefined-Compact layout for the narrower Explorer detail column.

FireStatusBox

Fire Status Box Component x Displays fire safety and environmental monitoring status.

agent-ready

Props

PropTypeRequiredDefaultDescription
data{ smokeDetector: string | number; waterIngressDetector: string | number; coolingFanStatus: string | number; } | undefined-Device data

GaugeChartComponent

Single-needle gauge chart used inside container settings for thresholded percentage values.

agent-ready

Props

PropTypeRequiredDefaultDescription
maxnumber-Maximum value for the gauge
valuenumber-Current value
labelstring | undefined-Label/title for the chart
unitstring-Unit of measurement
chartStyleReact.CSSProperties | undefined-Custom chart style
colorsstring[] | undefined-Arc colors in HEX format
hideTextboolean | undefined-Hide the percentage text inside the chart
heightnumber | undefined-Chart height in pixels
classNamestring | undefined-Custom className

GenericDataBox

Reusable labelled stat box used by container summary panels for one-off numeric values.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDataItem[] | undefined-Array of data items to display
fallbackValueunknown-Fallback value when value is undefined

MaintenanceDialogContent

Body of the maintenance dialog — captures the work-order details before applying the maintenance flag.

agent-ready

Props

PropTypeRequiredDefaultDescription
selectedEditSocketPartial<SelectedEditSocket>--
onCancelVoidFunction--

MicroBTCooling

Cooling subsystem panel for a MicroBT container — pumps, fans, and coolant flow telemetry.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Device data

MicroBTSettings

Settings form for a MicroBT container with vendor-specific operating limits.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Device data
containerSettings{ thresholds?: Record<string, unknown> | undefined; } | null | undefined-Container settings with custom thresholds

MicroBTWidgetBox

Summary card for a MicroBT-equipped container showing pumps, fans, and operating mode.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined--

MinerChip

Selectable chip representing a single miner; surfaces id, slot, and current state with click handling.

agent-ready

Props

PropTypeRequiredDefaultDescription
indexnumber--
frequency{ current: number; }--
temperature{ avg: number; min: number; max: number; }--

MinerChipsCard

Card listing every miner in a container as &lt;[**MinerChip**](/reference/ui/components/widgets/#minerchip)&gt;s for at-a-glance selection.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataContainerStats--

MinerControlsCard

Action card for a single miner: power, reboot, mode select, and maintenance entry points.

agent-ready

Props

PropTypeRequiredDefaultDescription
buttonsStatesRecord<string, boolean | undefined>--
isLoadingboolean--
showPowerModeSelectorboolean | undefined--

MinerInfoCard

Info card for one miner — serial, model, firmware, location, and recent activity summary.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataInfoItem[]--
labelstring--

MinerMetricCard

Single-metric card (hashrate, temperature, or power) for one miner with sparkline and delta.

agent-ready

Props

PropTypeRequiredDefaultDescription
primaryStatsStatItem[]-Primary statistics (efficiency, hashrate, temperature, frequency, consumption)
secondaryStatsStatItem[]-Secondary statistics to display in grid
showSecondaryStatsboolean-Whether to show secondary stats section

MinerPowerModeSelectionButtons

Segmented control letting an operator switch a miner between low / normal / turbo power modes.

agent-ready

Props

PropTypeRequiredDefaultDescription
selectedDevicesDevice[] | undefined--
setPowerMode((devices: Device[], mode: string) => void) | undefined--
connectedMinersDevice[] | undefined--
powerModesLogUnknownRecord | undefined--
disabledboolean | undefined--
hasMarginboolean | undefined--

MinersActivityChart

Per-status miner counts (online / offline / faulted / power-mode). Renders as coloured indicator dots (indicators) or tinted status tiles (tiles).

agent-ready

Props

PropTypeRequiredDefaultDescription
dataMinersActivityData--
largeboolean--
isLoadingboolean--
isErrorboolean--
errorMinerActivityChartErrorProp | null--
showLabelboolean--
isDemoModeboolean--
variantMinersActivityVariant-indicators (default) renders coloured dots; tiles renders tinted status tiles.

MinersSummaryBox

Headline card summarising miner counts by state (online, offline, faulted) for one container.

agent-ready

Props

PropTypeRequiredDefaultDescription
paramsMinersSummaryParam[]-Array of label-value pairs to display in a 2-column grid
classNamestring | undefined-Additional CSS class name

PositionChangeDialog

Modal that moves a miner to a different rack slot, validating the destination first.

agent-ready

Props

PropTypeRequiredDefaultDescription
openboolean--
onClose(currentDialogFlow: string, isDontReset?: boolean | undefined) => void--
selectedSocketToReplaceUnknownRecord | undefined--
selectedEditSocketUnknownRecord | undefined--
onChangePositionClickedVoidFunction | undefined--
onPositionChangedSuccessVoidFunction | undefined--
isContainerEmptyboolean | undefined--
dialogFlowstring | undefined--

PowerMeters

Per-circuit power-meter panel showing live kW, kWh, and power-factor readings.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined-Device data

PumpBox

Single-pump status card with RPM, flow, and fault state for one immersion-cooling pump.

agent-ready

Props

PropTypeRequiredDefaultDescription
pumpTitlestring--
pumpItemPumpItem | undefined--

RemoveMinerDialog

Confirmation modal for removing a miner from a slot with an optional reason capture.

agent-ready

Props

PropTypeRequiredDefaultDescription
headDeviceDevice | undefined--
isRemoveMinerFlowboolean--
onCancelVoidFunction--

SecondaryStatCard

Compact stat tile rendered alongside a primary stat to provide supporting context.

agent-ready

Props

PropTypeRequiredDefaultDescription
namestring | undefined-Stat name/label
valuestring | number | undefined-Stat value
classNamestring | undefined-Custom className

SingleStatCard

Hero stat tile rendering one big number with a label and optional delta indicator.

agent-ready

Props

PropTypeRequiredDefaultDescription
namestring | undefined-Stat name/label
subtitlestring | undefined-Subtitle text
valuestring | number | null | undefined-Stat value
unitstring | undefined-Unit of measurement
colorstring | undefined-Color for flash/border
flashboolean | undefined-Enable flash animation
superflashboolean | undefined-Enable superflash animation (faster)
variantSingleStatCardVariant | undefined-Card variant
rowboolean | undefined-Row layout

Socket

Per-socket panel showing the miner slotted into a container slot, its state, and quick actions.

agent-ready

Props

PropTypeRequiredDefaultDescription
current_anumber | null | undefined-Current in amperes
power_wnumber | null | undefined-Power in watts
enabledboolean | undefined-Whether socket is enabled
socketnumber | null | undefined-Socket number/index
selectedboolean | undefined-Whether socket is selected
innerRefReact.ForwardedRef<HTMLDivElement> | undefined-Forwarded ref for the container
minerMiner | null | undefined-Miner data
heatmapHeatmap | null | undefined-Heatmap configuration
isEditFlowboolean | undefined-Whether in edit flow mode
clickDisabledboolean | undefined-Whether click is disabled
coolingboolean | undefined-Cooling status
isEmptyPowerDashedboolean | undefined-Whether to show dashed border for empty power
isContainerControlSupportedboolean | undefined-Whether container control is supported
pduPdu | undefined-PDU information

StatsGroupCard

Card grouping multiple &lt;[**SingleStatCard**](/reference/ui/components/widgets/#singlestatcard)&gt;s or &lt;[**SecondaryStatCard**](/reference/ui/components/widgets/#secondarystatcard)&gt;s under a shared title.

agent-ready

Props

PropTypeRequiredDefaultDescription
minersDevice[] | DeviceData[] | undefined-Array of miners to display stats for
isMinerMetricsboolean | undefined-Whether to show miner metrics card layout

StatusItem

Compact labelled status pill used inside container panels for boolean or enum readings.

agent-ready

Props

PropTypeRequiredDefaultDescription
labelstring | undefined-Status label text
status"warning" | "normal" | "fault" | "unavailable" | undefined-Status type

SupplyLiquidBox

Status card for the dielectric supply tank — level, temperature, and pressure readings.

agent-ready

Props

PropTypeRequiredDefaultDescription
dataDevice | undefined--
containerSettingsSupplyLiquidBoxContainerSettings | null | undefined--

TankRow

Single tank-list row used inside &lt;[**TanksBox**](/reference/ui/components/widgets/#tanksbox)&gt; to display per-tank temperature and pressure.

agent-ready

Props

PropTypeRequiredDefaultDescription
labelstring--
temperaturenumber--
unitstring--
oilPumpEnabledboolean--
waterPumpEnabledboolean--
colorstring--
flashboolean | undefined--
tooltipstring | undefined--
pressurePartial<{ value: number; flash: boolean; color: string; tooltip: string; }>--

TanksBox

Card listing all tanks inside an immersion container with per-tank temperature and pressure rows.

agent-ready

Props

PropTypeRequiredDefaultDescription
data{ oil_pump: Tank[]; water_pump: WaterPump[]; pressure: TanksBoxPressure[]; } | undefined--

WidgetTopRow

Compact header row used at the top of container / miner widgets — shows the title, per-category alarm badges, and the current power reading (or an error tooltip).

agent-ready

Props

PropTypeRequiredDefaultDescription
titlestring--
powernumber | undefined--
unitstring | undefined--
statsErrorMessagestring | ErrorWithTimestamp[] | null | undefined--
alarmsPartial<Record<AlarmPropKey, Alert[]>> | undefined--
classNamestring | undefined--

On this page