Container components
Components for displaying and controlling Bitcoin mining containers
Components for viewing, navigating, and controlling Bitcoin mining containers, racks, and associated hardware.
Prerequisites
- Complete the @mdk/foundation installation and add the dependency
Container subpages
Dedicated pages for the socket primitive and vendor-specific UI:
- Socket — PDU socket tile primitive
- Bitdeer
- Bitmain
- Bitmain Immersion
- MicroBT
All container components
Every component in this category, including shared chrome and vendor-specific widgets.
| Component | Description |
|---|---|
EnabledDisableToggle | Tank circulation toggle control |
GenericDataBox | Generic label-value-unit datatable |
Socket | PDU socket tile with power and miner state |
TankRow | Single tank stats row |
ContainerFanLegend | Single container fan status badge |
ContainerFansCard | Grid of container fan indicators |
DryCooler | Dry cooler units with fans and pumps |
PumpBox | Single pump running/off indicator |
BitdeerPumps | Bitdeer exhaust fan status indicator |
BitdeerSettings | Bitdeer container settings and thresholds |
BitdeerTankPressureCharts | Bitdeer tank pressure time-series chart |
BitdeerTankTempCharts | Bitdeer tank oil and water temperature chart |
BitMainBasicSettings | Bitmain cooling, power and positioning view |
BitMainCoolingSystem | Bitmain cooling pump and fan statuses |
BitMainHydroLiquidTemperatureCharts | Bitmain hydro secondary liquid temp chart |
BitMainHydroSettings | Bitmain hydro settings and thresholds |
BitMainLiquidPressureCharts | Bitmain supply/return liquid pressure chart |
BitMainLiquidTempCharts | Bitmain supply/return liquid temp chart |
BitMainPowerAndPositioning | Bitmain distribution power and GPS panel |
BitMainPowerCharts | Bitmain total and per-box power chart |
BitMainSupplyLiquidFlowCharts | Bitmain supply liquid flow chart |
StatusItem | Labeled status indicator row |
BitMainControlsTab | Bitmain immersion controls tab view |
BitMainImmersionControlBox | Two-column immersion control box container |
BitMainImmersionPumpStationControlBox | Pump station alarm and state card |
BitMainImmersionSettings | Bitmain immersion threshold settings form |
BitMainImmersionSystemStatus | Immersion server start and connection status |
BitMainImmersionUnitControlBox | Immersion unit status and frequency card |
FireStatusBox | MicroBT fire and environmental sensors |
GaugeChartComponent | Labeled gauge chart with value and unit |
MicroBTCooling | MicroBT cooling system detail panel |
MicroBTSettings | MicroBT container settings and thresholds |
PowerMeters | MicroBT power meter readings panels |
Shared components
Container-authoring primitives that work with any container device record. Use these as building blocks inside the vendor-specific pages above, or when composing your own container view. For the PDU socket tile, see the dedicated Socket page.
EnabledDisableToggle
Toggle control to enable/disable tank circulation or the air exhaust system. Disabled when the container is offline.
Import
import { EnabledDisableToggle } from '@mdk/foundation'Props
| Prop | Type | Default | Description |
|---|---|---|---|
value | unknown | required | Current toggle value; boolean enables switch display |
tankNumber | number | string | required | Tank identifier; empty falls back to "Air Exhaust System" |
isButtonDisabled | boolean | required | Disables both Enable and Disable buttons |
isOffline | boolean | required | Marks container offline and disables controls |
onToggle | (params: { tankNumber, isOn: boolean }) => void | required | Fires when user clicks Enable or Disable |
Basic usage
<EnabledDisableToggle
value={tank.circulationEnabled}
tankNumber={1}
isButtonDisabled={false}
isOffline={false}
onToggle={({ tankNumber, isOn }) => submitToggle(tankNumber, isOn)}
/>Air exhaust variant
<EnabledDisableToggle
value={exhaustEnabled}
tankNumber=""
isButtonDisabled={false}
isOffline={false}
onToggle={({ isOn }) => setExhaust(isOn)}
/>Styling
.mdk-enabled-disable-toggle: Root element.mdk-enabled-disable-toggle__toggle: Label andSwitchrow shown whenvalueis boolean
GenericDataBox
Renders a table of label/value/unit rows with optional highlighting, color, and flash states, using a shared fallback when a value is missing.
Import
import { GenericDataBox } from '@mdk/foundation'Props
| Prop | Type | Default | Description |
|---|---|---|---|
data | DataItem[] | [] | Rows to render as label, value, and units |
fallbackValue | unknown | none | Value used when a row's value is undefined |
DataItem type
type DataItem = {
label?: string
value?: unknown
units?: string
unit?: string // Alternative unit field
isHighlighted?: boolean
color?: string
flash?: boolean
}Basic usage
<GenericDataBox
data={[
{ label: 'Temperature', value: 45, units: '°C' },
{ label: 'Pressure', value: 2.5, units: 'bar', isHighlighted: true },
{ label: 'Status', value: 'Running', color: 'green' },
]}
/>Styling
.mdk-generic-data-box: Root element- Renders each row through
DataRow
TankRow
Row showing a tank's temperature, optional pressure, and oil/water pump running indicators, with color and flash hints for alerts.
Import
import { TankRow } from '@mdk/foundation'Props
| Prop | Type | Default | Description |
|---|---|---|---|
label | string | required | Row label shown on the left |
temperature | number | required | Temperature reading displayed in the row |
unit | string | required | Unit suffix appended to the temperature |
oilPumpEnabled | boolean | required | Drives the oil pump indicator state |
waterPumpEnabled | boolean | required | Drives the water pump indicator state |
color | string | required | Accent color for the temperature cell |
flash | boolean | none | Enables flash animation on the temp cell |
tooltip | string | none | Overrides the default temperature tooltip |
pressure | TankRowPressure | required | Pressure readout block; see type below |
TankRowPressure type
type TankRowPressure = Partial<{
value: number
flash: boolean
color: string
tooltip: string
}>Basic usage
<TankRow
label="Tank 1"
temperature={45}
unit="°C"
oilPumpEnabled
waterPumpEnabled={false}
color=""
pressure={{ value: 1.2 }}
/>With alert state
<TankRow
label="Tank 2"
temperature={82}
unit="°C"
oilPumpEnabled
waterPumpEnabled
color="red"
flash
tooltip="Oil temperature above threshold"
pressure={{ value: 2.4, color: 'orange', flash: true }}
/>Styling
.mdk-tanks-box__row: Root row element.mdk-tanks-box__params: Temperature and pressure group.mdk-tanks-box__param/__param-label/__param-value: Individual readouts.mdk-tanks-box__pump-statuses: Pump indicator group.mdk-tanks-box__pump-status/__pump-status-title: Per-pump indicator
ContainerFanLegend
Small badge displaying a numbered fan with an on/off styled fan icon. Used as a legend tile within fan grids.
Import
import { ContainerFanLegend } from '@mdk/foundation'Props
| Prop | Type | Default | Description |
|---|---|---|---|
index | number | null | none | Fan number shown in the badge |
enabled | boolean | false | Renders on/off styling and icon color |
className | string | none | Additional CSS class on the root element |
Basic usage
<ContainerFanLegend index={1} enabled />
<ContainerFanLegend index={2} enabled={false} />Styling
.mdk-container-fan-legend: Root element.mdk-container-fan-legend--on/--off: On/off state modifier.mdk-container-fan-legend__number: Fan number badge.mdk-container-fan-legend__icon/--on/--off: Fan icon container
ContainerFansCard
Renders a grid of ContainerFanLegend entries from a fans data array, showing each fan's number and on/off state.
Import
import { ContainerFansCard } from '@mdk/foundation'Props
| Prop | Type | Default | Description |
|---|---|---|---|
fansData | PumpItem[] | none | Fan entries; returns null when omitted |
PumpItem type
type PumpItem = {
enabled?: boolean
index: number
}Basic usage
<ContainerFansCard
fansData={[
{ enabled: true, index: 0 },
{ enabled: false, index: 1 },
{ enabled: true, index: 2 },
]}
/>Styling
.mdk-container-fans-card: Root grid element- Renders one
ContainerFanLegendper entry
DryCooler
Displays two dry cooler segments, each with a running/off indicator, fan grid, and associated oil and water pump boxes, backfilling empty slots when data is partial.
Import
import { DryCooler } from '@mdk/foundation'Props
| Prop | Type | Default | Description |
|---|---|---|---|
data | UnknownRecord | none | Container device record with cooling system stats |
Basic usage
<DryCooler data={containerDevice} />Expected data shape
The component reads the following path from data:
// data.container_specific_stats.cooling_system
{
dry_cooler: [
{ index: 0, enabled: true, fans: [{ enabled: true, index: 0 }] },
{ index: 1, enabled: false, fans: [] },
],
oil_pump: [{ enabled: true, index: 0 }, { enabled: false, index: 1 }],
water_pump: [{ enabled: true, index: 0 }, { enabled: true, index: 1 }],
}Styling
.mdk-dry-cooler: Root element.mdk-dry-cooler__segment: Per-cooler group.mdk-dry-cooler__card: Cooler card with status and fans.mdk-dry-cooler__status: Title and indicator row.mdk-dry-cooler__title: Cooler title.mdk-dry-cooler__pumps: Oil and water pump column
PumpBox
Compact box showing a named, numbered pump with a running or off indicator. Renders nothing when the pump has no boolean enabled state.
Import
import { PumpBox } from '@mdk/foundation'Props
| Prop | Type | Default | Description |
|---|---|---|---|
pumpTitle | string | required | Pump label prefix (e.g. "Oil", "Water") |
pumpItem | PumpItem | none | Pump entry; returns null without a boolean enabled |
PumpItem type
type PumpItem = {
enabled?: boolean
index: number // zero-based; shown as index + 1
}Basic usage
<PumpBox pumpTitle="Oil" pumpItem={{ enabled: true, index: 0 }} />
<PumpBox pumpTitle="Water" pumpItem={{ enabled: false, index: 1 }} />Styling
.mdk-pump-box: Root element.mdk-pump-box__status: Title and indicator row.mdk-pump-box__title: Pump title text
Next steps
- For browsing containers, racks, and miners, see the device explorer.
- For container-level controls, see
ContainerControlsBoxon the Controls page. - For container summary widgets that surface on the dashboard, see
TanksBox,SupplyLiquidBox, andMinersSummaryBox.

