MDK Logo
ReferenceUITypes

Devkit General Types

General TypeScript types from react-devkit

General type definitions from the react-devkit package.

Package

@tetherto/mdk-react-devkit

Types

ActionButtonConfirmation

type ActionButtonConfirmation = { title: string cancelLabel?: string confirmLabel?: string icon?: React.ReactNode onCancel?: VoidFunction onConfirm?: VoidFunction description?: React.ReactNode }

ActionButtonProps

type ActionButtonProps = { label?: string loading?: boolean disabled?: boolean className?: string variant?: TActionButtonVariant confirmation: ActionButtonConfirmation /** Confirmation mode: popover (inline) or dialog (modal). Default: popover */ mode?: 'popover'

ActionNameKey

type ActionNameKey = keyof typeof ACTION_NAMES_MAP

ActionNameValue

type ActionNameValue = (typeof ACTION_NAMES_MAP)[ActionNameKey]

ActionStatusTypeKey

type ActionStatusTypeKey = keyof typeof ACTION_STATUS_TYPES

ActionStatusTypeValue

type ActionStatusTypeValue = (typeof ACTION_STATUS_TYPES)[ActionStatusTypeKey]

ActionTypeKey

type ActionTypeKey = keyof typeof ACTION_TYPES

ActionTypeValue

type ActionTypeValue = (typeof ACTION_TYPES)[ActionTypeKey]

ActiveIncidentsCardPartialProps

type ActiveIncidentsCardPartialProps = Partial<{ label: string isLoading: boolean className: string skeletonRows: number emptyMessage: string items: TIncidentRowProps[] onItemClick: (id: string) => void }>

ActiveTimeframe

Which single control “owns” the range: others show placeholders (mutually exclusive UI).

type ActiveTimeframe = 'year' | 'month' | 'week'

ActualEbitdaCardProps

type ActualEbitdaCardProps = { value: number }

AddSparePartFormValues

Values collected by the register-part form. Select fields are nullable until chosen.

type AddSparePartFormValues = { partTypeId: string; model: string | null; parentDeviceModel: string | null; serialNum: string; macAddress: string; status: string | null; location: string | null; comment: string; tags: string[]; }

AddSparePartModalProps

Props for AddSparePartModal; option lists and handlers are supplied by the caller.

type AddSparePartModalProps = { isOpen: boolean; onClose: VoidFunction; partTypes: SparePartSubTypesModalPartType[]; defaultPartTypeId?: string; modelOptions: FormSelectOption[]; isModelOptionsLoading?: boolean; minerModelOptions: FormSelectOption[]; statusOptions: For

AddUserModalProps

type AddUserModalProps = { open: boolean onClose: VoidFunction roles: RoleOption[] onSubmit: (data: { name: string; email: string; role: string }) => Promise<void> isSubmitting?: boolean }

AlarmItemData

type AlarmItemData = { title: string subtitle: string body: string uuid?: string status: string [key: string]: unknown }

AlarmsBellButtonCounts

type AlarmsBellButtonCounts = { critical?: number high?: number medium?: number }

AlarmsBellButtonProps

type AlarmsBellButtonProps = { /** Severity-bucketed alarm counts rendered in the stacked badge. */ counts?: AlarmsBellButtonCounts /** Click handler — typically opens an alerts panel or routes to /alerts. */ onClick?: (event: MouseEvent<HTMLButtonElement>) => void /*…

Alert

type Alert = { id?: string severity: string createdAt: number | string name: string description: string message?: string uuid?: string code?: string | number [key: string]: unknown }

AlertActions

type AlertActions = { onAlertClick?: (id: string, uuid: string) => void id?: string uuid: string }

AlertConfirmationModalProps

type AlertConfirmationModalProps = { isOpen: boolean onOk: VoidFunction }

AlertLocalFilters

type AlertLocalFilters = { severity?: string[] | string status?: string[] type?: string[] id?: string[] thing?: { id?: string } [key: string]: unknown }

AlertSeverity

type AlertSeverity = (typeof ALERT_SEVERITY_TYPES)[keyof typeof ALERT_SEVERITY_TYPES]

AlertsProps

type AlertsProps = { /** * Devices payload powering the "Current Alerts" table. * Mirrors the API response shape of `useGetListThingsQuery({ ... alerts query })`. */ devices?: Device[][] /** * Loading flag for the "Current Alerts" table. */ isCurrentAlertsLo

AlertsTableTitleProps

type AlertsTableTitleProps = { title: ReactNode subtitle?: ReactNode className?: string }

AlertTableRecord

type AlertTableRecord = { shortCode: string device: string alertName: string description?: string message?: string severity: string createdAt: number | string id?: string uuid: string actions?: AlertActions /** * Hidden tokens (uuid, ip-/mac-/sn-/firmware- tags,…

ApiErrorKey

type ApiErrorKey = keyof typeof API_ERRORS

ApiErrorValue

type ApiErrorValue = (typeof API_ERRORS)[ApiErrorKey]

ApiResponse

type ApiResponse = { data: T message?: string status: number }

AppHeaderProps

type AppHeaderProps = { /** Left-most slot — typically the app's brand lockup / logo. */ logo?: ReactNode /** Left-edge content — e.g. a sidebar collapse toggle button. */ start?: ReactNode /** Middle slot — typically the dashboard's stats strip. */ children?:

AreaChartProps

type AreaChartProps = { /** Chart data - required, provided by parent */ data: ChartJS<'line'>['data'] /** Chart.js options - merged with defaults */ options?: ChartJS<'line'>['options'] /** Custom HTML tooltip configuration. When provided, replaces the default…

ArrowIconProps

type ArrowIconProps = { isOpen?: boolean } & IconProps

AssignPoolModalProps

type AssignPoolModalProps = { isOpen: boolean onClose: () => void onSubmit: (values: { pool: PoolSummary }) => Promise<void> miners: Device[] poolConfig: PoolConfigData[] }

AttentionLevelColorKey

type AttentionLevelColorKey = keyof typeof ATTENTION_LEVEL_COLORS

AuthCapKey

type AuthCapKey = keyof typeof AUTH_CAPS

AuthCapValue

type AuthCapValue = (typeof AUTH_CAPS)[AuthCapKey]

AverageDowntimeChartData

type AverageDowntimeChartData = { labels: string[] curtailment?: number[] operationalIssues?: number[] }

AverageDowntimeChartProps

type AverageDowntimeChartProps = Partial<{ title: string unit: string height: number barWidth: number className: string isLoading: boolean emptyMessage: string data: AverageDowntimeChartData /** Formats Y-axis ticks, tooltips, and bar data labels (values are 0–1 rates). *…

AvgAllInCostChartProps

type AvgAllInCostChartProps = { data?: ReadonlyArray<AvgAllInCostDataPoint> dateRange: FinancialDateRange | null isLoading?: boolean }

AvgAllInCostDataPoint

type AvgAllInCostDataPoint = { ts: number revenueUSDPerMWh: number costUSDPerMWh: number }

AvgHistoryRangeKey

type AvgHistoryRangeKey = keyof typeof AVG_HISTORY_RANGES

AvgHistoryRangeValue

type AvgHistoryRangeValue = (typeof AVG_HISTORY_RANGES)[AvgHistoryRangeKey]

AxisTitleText

type AxisTitleText = { x: string y: string }

BadgeColors

Display colors for a status/location badge.

type BadgeColors = { backgroundColor: string borderColor: string }

BadgeProps

type BadgeProps = { /** * Badge content (wraps children with badge) */ children?: ReactNode /** * Number to display in badge * If > overflowCount, will show "overflowCount+" */ count?: number /** * Maximum count to display * @default 99 */ overflowCount?: n

BadgeStatus

Badge status options

type BadgeStatus = 'success' | 'processing' | 'error' | 'warning' | 'default'

BarChartConstant

type BarChartConstant = { label: string value: number color?: string borderDash?: number[] yAxisID?: string }

BarChartInput

type BarChartInput = { labels?: string[] series: BarChartSeries[] lines?: BarChartLine[] constants?: BarChartConstant[] }

BarChartItemBorderColorKey

type BarChartItemBorderColorKey = keyof typeof BAR_CHART_ITEM_BORDER_COLORS

BarChartLine

type BarChartLine = { label: string values: number[] | Record<string, number> color?: string yAxisID?: string tension?: number pointRadius?: number pointHoverRadius?: number }

BarChartProps

type BarChartProps = { /** Chart data - required, provided by parent. Use `as any` for mixed bar+line datasets. */ data: any /** Chart.js options - merged with defaults */ options?: ChartJS<'bar'>['options'] /** Stack bars on top of each other */ isStacked?: b

BarChartSeries

type BarChartSeries = { label: string values: number[] | Record<string, number> color?: string /** Assign a stack group id to stack multiple series together */ stack?: string /** Gradient opacity stops (default { top: 0.3, bottom: 0.1 }) */ gradient?: { top: nu

BatchActionTypeKey

type BatchActionTypeKey = keyof typeof BATCH_ACTION_TYPES

BatchActionTypeValue

type BatchActionTypeValue = (typeof BATCH_ACTION_TYPES)[BatchActionTypeKey]

BatchMoveSparePart

A spare part shown in the batch-move table.

type BatchMoveSparePart = { id: string; code: string; location: string; status: string; }

BatchMoveSparePartsModalProps

Props for BatchMoveSparePartsModal; unselected location/status arrive as null on submit.

type BatchMoveSparePartsModalProps = { isOpen: boolean; onClose: VoidFunction; spareParts: BatchMoveSparePart[]; locationOptions: FormSelectOption[]; statusOptions: FormSelectOption[]; onSubmit: (values: { location: string | null; status: string | null; observation: string |

BitcoinPriceCardProps

type BitcoinPriceCardProps = { value: number }

BitcoinProducedCardProps

type BitcoinProducedCardProps = { value: number }

BitcoinProducedChartProps

type BitcoinProducedChartProps = { chartData: BarChartDataResult isLoading?: boolean hasAllZeros?: boolean height?: number }

BitcoinProductionCostCardProps

type BitcoinProductionCostCardProps = { value: number }

BitMainControlsTabProps

type BitMainControlsTabProps = { /** Device data */ data: Device }

BitMainHydroSettingsProps

type BitMainHydroSettingsProps = { /** Device data */ data?: Device }

BitMainImmersionSummaryBoxContainerSettings

type BitMainImmersionSummaryBoxContainerSettings = { thresholds?: Record<string, unknown> }

BitMainImmersionSummaryBoxProps

type BitMainImmersionSummaryBoxProps = { data?: Device containerSettings?: BitMainImmersionSummaryBoxContainerSettings | null }

BorderRadius

Border radius variants Used by Checkbox, Switch, Radio

type BorderRadius = 'none' | 'small' | 'medium' | 'large' | 'full'
type BreadcrumbItem = { label: string href?: string onClick?: VoidFunction }
type BreadcrumbsProps = { items: BreadcrumbItem[] showBack?: boolean backLabel?: string className?: string itemClassName?: string backClassName?: string onBackClick?: VoidFunction separator?: ReactNode }

BtcAveragePriceProps

type BtcAveragePriceProps = Partial<{ /** * BTC price in USD; formatted with grouping and no decimal places. * When `null`, `undefined`, non-finite, or negative, the value shows `-` (`FALLBACK` from format utils). */ price: number | null /** * Label for the BTC avera…

BtcPriceTimeSeriesEntry

type BtcPriceTimeSeriesEntry = { ts: number priceUSD: number }

BuildAvgAllInCostInputArgs

type BuildAvgAllInCostInputArgs = { data?: ReadonlyArray<AvgAllInCostDataPoint> dateRange: FinancialDateRange | null }

BuildBarChartOptionsInput

type BuildBarChartOptionsInput = { isHorizontal?: boolean isStacked?: boolean yTicksFormatter?: (value: number) => string yRightTicksFormatter?: ((value: number) => string) | null displayColors?: boolean legendPosition?: 'top' | 'bottom' | 'left' | 'right' legendAlign?: '

BuildProductionCostInputArgs

type BuildProductionCostInputArgs = { costLog: ReadonlyArray<CostTimeSeriesEntry> btcPriceLog: ReadonlyArray<BtcPriceTimeSeriesEntry> dateRange: FinancialDateRange | null }

BulkAddSparePartsModalProps

Props for BulkAddSparePartsModal; onSubmit receives the parsed CSV records.

type BulkAddSparePartsModalProps = { isOpen: boolean; onClose: VoidFunction; onSubmit: (records: CSVRecord[]) => Promise<{ error?: string } | void>; isLoading?: boolean; }

ButtonIconPosition

Button icon position

type ButtonIconPosition = 'left' | 'right'

ButtonProps

Props for Button. Extends all native &lt;button&gt; attributes.

type ButtonProps = Partial< { /** Show a spinner instead of the content and disable the button. */ loading: boolean /** Make the button stretch to fill its container. */ fullWidth: boolean /** Icon node rendered alongside `children`. */ icon: ReactNode /** V…

ButtonSize

Button-specific size including icon-only variant

type ButtonSize = ComponentSize | 'icon'

ButtonVariant

Component-specific prop types

type ButtonVariant = | 'primary' | 'secondary' | 'danger' | 'tertiary' | 'link' | 'nav-link' | 'icon' | 'outline' | 'ghost'

CabinetDetailCardProps

type CabinetDetailCardProps = { /** Cabinet display title (`LV Cabinet 1` / transformer title). */ title: string /** Non-root powermeter reading rows. */ powerMeters: CabinetReadingRow[] /** The cabinet-root temperature reading, when present. */ rootTempSensor?: Cabine

CabinetReadingRow

One sensor / powermeter reading row rendered in the cabinet detail.

type CabinetReadingRow = { /** Stable key — the source device id. */ id: string /** Display name (sensor / powermeter name). */ label: string /** Formatted reading, or `-` when unavailable. */ value: string /** Unit shown next to the value. */ unit: string /** Sev…

CardBodyProps

Props for CardBody slot. Forwards all native &lt;div&gt; attributes.

type CardBodyProps = HTMLAttributes<HTMLDivElement>

CardComponent

type CardComponent = ForwardRefExoticComponent<CardProps & RefAttributes<HTMLDivElement>> & { Header: typeof CardHeader Body: typeof CardBody Footer: typeof CardFooter }

CardFooterProps

Props for CardFooter slot. Forwards all native &lt;div&gt; attributes.

type CardFooterProps = HTMLAttributes<HTMLDivElement>

CardHeaderProps

Props for CardHeader slot. Forwards all native &lt;div&gt; attributes.

type CardHeaderProps = HTMLAttributes<HTMLDivElement>

CardProps

Props for Card. Forwards all native &lt;div&gt; attributes.

type CardProps = HTMLAttributes<HTMLDivElement>

CascaderOption

Cascader option type - represents a hierarchical option with optional children

type CascaderOption = { /** Unique value for the option */ value: string | number | boolean /** Display label for the option */ label: string /** Child options (creates a nested category) */ children?: CascaderOption[] /** Whether the option is disabled */ disa

CascaderProps

Cascader component props

type CascaderProps = { /** * Hierarchical options to display in the cascader * Parent options with children appear in the left panel * Child options appear in the right panel when parent is selected */ options: CascaderOption[] /** * Current selected value(s)…

CascaderValue

Cascader value type - array representing the path from parent to child Example: ['electronics', 'phones'] means category 'electronics', option 'phones'

type CascaderValue = (string | number | boolean)[]

ChangeConfirmationModalProps

type ChangeConfirmationModalProps = { open: boolean title: string onConfirm: VoidFunction onClose: VoidFunction children: ReactNode confirmText?: string destructive?: boolean }

ChartColorKey

type ChartColorKey = keyof typeof CHART_COLORS

ChartContainerProps

type ChartContainerProps = { title?: string /** * Optional node rendered immediately after the title text (e.g. an info * tooltip). Only shown when `title` is set and `header` is not. Additive - * omit it and the title renders exactly as before. */ titleExtra?: Reac

ChartDataByDevice

type ChartDataByDevice = { [deviceName: string]: ChartDataset }

ChartDataPoint

type ChartDataPoint = { x: number | string y: number }

ChartEntry

type ChartEntry = { ts: number | string container_specific_stats_group_aggr: Record<string, EntryData | null | undefined> }

ChartExpandActionProps

type ChartExpandActionProps = { /** Whether the parent chart is currently expanded to full width. */ isExpanded: boolean /** Toggles the expanded state. */ onToggle?: VoidFunction }

ChartLabelKey

type ChartLabelKey = keyof typeof CHART_LABELS

ChartLabelValue

type ChartLabelValue = (typeof CHART_LABELS)[ChartLabelKey]

ChartLegendOpacityKey

type ChartLegendOpacityKey = keyof typeof CHART_LEGEND_OPACITY

ChartLegendOpacityValue

type ChartLegendOpacityValue = (typeof CHART_LEGEND_OPACITY)[ChartLegendOpacityKey]

ChartLegendPosition

type ChartLegendPosition = 'top' | 'bottom' | 'left' | 'right' | 'center' | 'chartArea'

ChartPerformanceKey

type ChartPerformanceKey = keyof typeof CHART_PERFORMANCE

ChartRange

type ChartRange = { min: Date | number max: Date | number }

ChartStatsFooterItem

type ChartStatsFooterItem = { label: string value: string | number }

ChartStatsFooterProps

type ChartStatsFooterProps = Partial<{ /** Min/Max/Avg values row */ minMaxAvg: MinMaxAvgValues /** Additional stats displayed in a columnar grid */ stats: ChartStatsFooterItem[] /** Number of stat items per column (default: 1) */ statsPerColumn: number /** Secondary…

ChartTitleKey

type ChartTitleKey = keyof typeof CHART_TITLES

ChartTitleValue

type ChartTitleValue = (typeof CHART_TITLES)[ChartTitleKey]

ChartTooltipConfig

type ChartTooltipConfig = { /** Color for label text. Use 'dataset' to match dataset border color. Defaults to COLOR.WHITE_ALPHA_05 */ labelColor?: string | 'dataset' /** Color for value text. Use 'dataset' to match dataset border color. Defaults to 'dataset' */ va

ChartTypeKey

type ChartTypeKey = keyof typeof CHART_TYPES

ChartTypeValue

type ChartTypeValue = (typeof CHART_TYPES)[ChartTypeKey]

CheckboxProps

type CheckboxProps = { /** * Size variant of the checkbox * @default 'md' */ size?: CheckboxSize /** * Color variant when checked * @default 'primary' */ color?: ComponentColor /** * Border radius variant * @default 'none' */ radius?: BorderRadius /** * Custom…

CheckboxSize

type CheckboxSize = 'xs' | ComponentSize

ChipData

type ChipData = { index: number current: number }

ColorKey

type ColorKey = keyof typeof COLOR

ColorValue

type ColorValue = (typeof COLOR)[ColorKey]

ColorVariant

Color variants for components Comprehensive set including all semantic colors

type ColorVariant = | 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'

ComponentColor

Component color options (subset of ColorVariant) Used by form components like Checkbox, Switch, Radio, Typography

type ComponentColor = 'default' | 'primary' | 'success' | 'warning' | 'error'

ComponentSize

Common shared types used across components

type ComponentSize = 'sm' | 'md' | 'lg'

ConfirmDeleteSparePartModalProps

Props for ConfirmDeleteSparePartModal.

type ConfirmDeleteSparePartModalProps = { isOpen?: boolean; onClose?: VoidFunction; onConfirm?: (sparePart: ConfirmDeleteSparePartModalSparePart) => Promise<void> | void; sparePart?: ConfirmDeleteSparePartModalSparePart; isLoading?: boolean; }

ConfirmDeleteSparePartModalSparePart

The spare part targeted for deletion.

type ConfirmDeleteSparePartModalSparePart = { id: string; code: string; }

ConsumptionNominalValueType

type ConsumptionNominalValueType = typeof CONSUMPTION_NOMINAL_VALUE_W

Container

type Container = { info?: Partial<ContainerInfo> last?: Partial<ContainerLast> } & Device

ContainerActionValue

type ContainerActionValue = (typeof CONTAINER_ACTIONS)[number]

ContainerActivityData

Miner-state counts fed to the embedded activity chart (online / offline / faulted / …).

type ContainerActivityData = { total?: number } & Record<string, number | undefined>

ContainerActivityError

Error envelope surfaced by the activity chart when its data fails to load.

type ContainerActivityError = { data?: { message?: string }; [key: string]: unknown } | null

ContainerChartCombinationOption

type ContainerChartCombinationOption = { value: string label: string }

ContainerChartsDatasetBorderColorResolver

type ContainerChartsDatasetBorderColorResolver = (args: { chartTitle: string datasetLabel: string datasetIndex: number }) => string | undefined

ContainerChartsProps

type ContainerChartsProps = { /** When false, shows an empty state (feature gate). @default true */ featureEnabled?: boolean /** Message when `featureEnabled` is false */ disabledMessage?: string /** Options for the combination selector */ combinations: ContainerChar

ContainerControlsBoxProps

type ContainerControlsBoxProps = { data?: Device isBatch?: boolean isCompact?: boolean // --- data from outside (no API calls inside) --- selectedDevices?: Device[] pendingSubmissions?: PendingSubmission[] alarmsDataItems?: TimelineItemData[] tailLogData?: UnknownRecord[]…

ContainerDetailPlaceholderProps

type ContainerDetailPlaceholderProps = { /** Human label of the tab this placeholder stands in for, e.g. "PDU Layout". */ label: string }

ContainerDetailProps

type ContainerDetailProps = { /** * Container display name shown in the header. Optional — omit it when the * host already renders the container name as the page title (e.g. the shell's * `PageLayout`), so the name is not shown twice. */ name?: ReactNode /** Ordered…

ContainerDetailTab

A single tab in the container detail strip.

type ContainerDetailTab = { /** Route segment / Radix value, e.g. `"home"`, `"pdu"`. */ key: string /** Human label, e.g. `"PDU Layout"`. */ label: string }

ContainerInfo

type ContainerInfo = { container: string type?: string rack?: string nominalMinerCapacity?: string cooling_system: Record<string, unknown> cdu: Record<string, unknown> primary_supply_temp: number second_supply_temp1: number second_supply_temp2: number supply_l

ContainerLast

type ContainerLast = { snap: { stats?: Partial<ContainerStats> } alerts: unknown[] | null err: string | null }

ContainerPduData

type ContainerPduData = { power_w: number status: number }

ContainerPosInfo

type ContainerPosInfo = { containerInfo: Partial<ContainerInfo> pdu: string | number socket: string | number pos: string [key: string]: unknown }

ContainerSnap

type ContainerSnap = { stats?: Partial<ContainerStats> config?: Record<string, unknown> }

ContainerSpecific

type ContainerSpecific = { pdu_data: Partial<ContainerPduData>[] [key: string]: unknown }

ContainerStats

type ContainerStats = { status: string ambient_temp_c: number humidity_percent: number power_w: number container_specific: Partial<ContainerSpecific> distribution_box1_power_w: number distribution_box2_power_w: number stats: Record<string, unknown> temperature_

ContainerWidgetCardProps

type ContainerWidgetCardProps = { /** Container display name shown in the header row. */ title: string /** Latest container power draw in watts (rendered in kW by the top row). */ power?: number /** Power unit label shown next to the reading. */ powerUnit?: string /** Pe…

ContainerWidgetItem

One container's card data plus the stable id used for keys and click routing.

type ContainerWidgetItem = ContainerWidgetCardProps & { id: string }

ContainerWidgetsProps

type ContainerWidgetsProps = { /** Card-ready data for every container, shaped by the data hook. */ containers: ContainerWidgetItem[] /** Section heading. */ title?: string /** Shows a spinner while the first load is in flight. */ isLoading?: boolean /** Error message…

CostChartsProps

type CostChartsProps = { costLog: ReadonlyArray<CostTimeSeriesEntry> btcPriceLog: ReadonlyArray<BtcPriceTimeSeriesEntry> totals: CostSummaryMonetaryTotals | null dateRange: FinancialDateRange | null avgAllInCostData?: ReadonlyArray<AvgAllInCostDataPoint> isLoadi

CostChromeProps

type CostChromeProps = { /** Period selector element. Pass `<TimeframeControls>` for the OSS-style year/month picker. */ controls: ReactElement /** * Optional "Set Monthly Cost" header action slot. * * A `ReactElement` slot (rather than an href string) so consum…

CostContentProps

type CostContentProps = CostViewModelProps & CostQueryStateProps & { dateRange: FinancialDateRange | null /** Optional revenue/cost time-series for the Avg All-in Cost panel. */ avgAllInCostData?: ReadonlyArray<AvgAllInCostDataPoint> }

CostMetricsProps

type CostMetricsProps = { metrics: CostSummaryDisplayMetrics }

CostProps

type CostProps = CostContentProps & CostChromeProps

CostQueryStateProps

type CostQueryStateProps = { isLoading?: boolean error?: unknown }

CostSummaryDisplayMetrics

type CostSummaryDisplayMetrics = { allInCost: CostSummaryMetric energyCost: CostSummaryMetric operationsCost: CostSummaryMetric }

CostSummaryLogEntry

type CostSummaryLogEntry = { ts: number consumptionMWh: number energyCostsUSD: number operationalCostsUSD: number totalCostsUSD: number allInCostPerMWh: number | null energyCostPerMWh: number | null btcPrice: number }

CostSummaryMetric

type CostSummaryMetric = { label: string unit: string value: number | null isHighlighted?: boolean }

CostSummaryMonetaryTotals

type CostSummaryMonetaryTotals = { totalEnergyCostsUSD: number totalOperationalCostsUSD: number totalCostsUSD: number totalConsumptionMWh: number }

CostSummaryQueryParams

type CostSummaryQueryParams = { start: number end: number period: FinancePeriod }

CostSummaryQueryResult

type CostSummaryQueryResult = { data?: CostSummaryResponse isLoading?: boolean error?: unknown }

CostSummaryResponse

type CostSummaryResponse = FinanceResponse<CostSummaryLogEntry, CostSummaryTotals>

CostSummaryTotals

type CostSummaryTotals = { totalEnergyCostsUSD: number totalOperationalCostsUSD: number totalCostsUSD: number totalConsumptionMWh: number avgAllInCostPerMWh: number | null avgEnergyCostPerMWh: number | null avgBtcPrice: number | null }

CostSummaryViewModel

type CostSummaryViewModel = { metrics: CostSummaryDisplayMetrics | null costLog: ReadonlyArray<CostTimeSeriesEntry> btcPriceLog: ReadonlyArray<BtcPriceTimeSeriesEntry> totals: CostSummaryMonetaryTotals | null avgBtcPrice: number | null }

CostTimeSeriesEntry

type CostTimeSeriesEntry = { ts: number totalCostUSD: number energyCostUSD: number operationalCostUSD: number }

CostViewModelProps

Subset of useCostSummary output that the Cost composite page needs. Defined as a standalone type so consumers wiring up their own data flow can pass an object of this shape without coupling to the…

type CostViewModelProps = { metrics: CostSummaryDisplayMetrics | null costLog: ReadonlyArray<CostTimeSeriesEntry> btcPriceLog: ReadonlyArray<BtcPriceTimeSeriesEntry> totals: CostSummaryMonetaryTotals | null }

CreateIconOptions

type CreateIconOptions = { displayName: string viewBox: string defaultWidth?: number defaultHeight?: number multiColor?: boolean path: ReactNode | ((props: { color: string }) => ReactNode) }

CrossThingTypeKey

type CrossThingTypeKey = keyof typeof CROSS_THING_TYPES

CrossThingTypeValue

type CrossThingTypeValue = (typeof CROSS_THING_TYPES)[CrossThingTypeKey]

CSVRecord

type CSVRecord = { partType?: string; model?: string; parentDeviceModel?: string; serialNum?: string; macAddress?: string; status?: string; location?: string; comment?: string; rackId?: string; [key: string]: unknown; }

CurrencyKey

type CurrencyKey = keyof typeof CURRENCY

CurrencyUnit

type CurrencyUnit = ValueUnit & { unit: string }

CurrencyValue

type CurrencyValue = (typeof CURRENCY)[CurrencyKey]

CurrentAlertsProps

type CurrentAlertsProps = { /** * Raw devices (with last.alerts) used to derive current alerts from. * Shape mirrors the API response from the source app. */ devices?: Device[][] isLoading?: boolean /** * Filters controlled outside (typically by URL severity param)…

CurtailmentResult

type CurtailmentResult = { curtailmentMWh: number curtailmentRate: number }

DashboardDateRange

type DashboardDateRange = { /** Window start, milliseconds since epoch. */ start: number /** Window end, milliseconds since epoch. */ end: number }

DashboardDateRangePickerProps

type DashboardDateRangePickerProps = { /** Current range as `{ start, end }` epoch-millisecond timestamps. */ value: DashboardDateRange /** Fires with the next `{ start, end }` window when the user applies a range. */ onChange: (next: DashboardDateRange) => void /** Display f…

DashboardProps

type DashboardProps = { stats?: DashboardStats isStatsLoading?: boolean alerts?: Alert[] onNavigationClick: (url: string) => void onViewAllAlerts: VoidFunction }

DashboardStats

type DashboardStats = { items: StatItem[] }

DataLabelProps

type DataLabelProps = Partial<{ /** * Range start; formatted in the active timezone (`dd/MM/yy`). */ startDate: Date | null /** * Range end; formatted in the active timezone (`dd/MM/yy`). */ endDate: Date | null /** * Label text; defaults to `PERIOD`. */ label:

DataTableProps

type DataTableProps = { /** * The data to be shown in the table. See https://tanstack.com/table/v8/docs/guide/data */ data: I[] /** * The column configuration table. See https://tanstack.com/table/v8/docs/guide/column-defs */ columns: DataTableColumnDef<I, any>…

DateFormatType

type DateFormatType = | typeof DATE_FORMAT | typeof DATE_FORMAT_SLASHED | typeof SHORT_DATE_FORMAT

DatePickerProps

type DatePickerProps = { /** * Currently selected date */ selected?: Date /** * Callback when date changes */ onSelect?: (date: Date | undefined) => void /** * Placeholder text when no date is selected * @default "Pick a date" */ placeholder?: string /** * Date…

DateRange

type DateRange = { from: Date | undefined to?: Date | undefined }

DateRangeKey

type DateRangeKey = keyof typeof DATE_RANGE

DateRangePickerProps

type DateRangePickerProps = { /** * Selected date range */ selected?: DateRange /** * Callback when date range changes */ onSelect?: (range: DateRange | undefined) => void /** * Placeholder text when no range is selected * @default "Pick a date range" */ placeholder?

DateRangeValue

type DateRangeValue = (typeof DATE_RANGE)[DateRangeKey]

DateTimeFormatType

type DateTimeFormatType = typeof DATE_TIME_FORMAT | typeof DATE_TIME_FORMAT_WITH_SECONDS

DetailLegendItem

type DetailLegendItem = { /** Legend label text */ label: string /** Color for the legend icon */ color: string /** Custom icon to display (defaults to a colored square) */ icon?: ReactNode /** Current value display */ currentValue?: { value: number | string unit

DetailLegendProps

type DetailLegendProps = { /** Legend items to display */ items: DetailLegendItem[] /** Callback when a legend item is toggled */ onToggle?: (label: string, index: number) => void /** Custom class name */ className?: string }

Device

type Device = { id: string type: string tags?: string[] rack?: string last?: DeviceLast username?: string info?: DeviceInfo containerId?: string address?: string | null code?: string alerts?: Alert[] | null powerMeters?: Device[] tempSensors?: Device[]…

DeviceAttributeView

A single labelled device attribute row.

type DeviceAttributeView = { label: string value: string }

DeviceData

type DeviceData = { id: string | undefined type: string | undefined tags?: string[] rack?: string snap: ContainerSnap alerts?: Alert[] | null username?: string info?: DeviceInfo containerId?: string address?: string | null err?: string | null [key: string]:

DeviceExplorerDeviceData

type DeviceExplorerDeviceData = Device

DeviceExplorerDeviceType

type DeviceExplorerDeviceType = (typeof DEVICE_EXPLORER_DEVICE_TYPE)[keyof typeof DEVICE_EXPLORER_DEVICE_TYPE]

DeviceExplorerFilterOption

type DeviceExplorerFilterOption = { value: string label: string children?: DeviceExplorerFilterOption[] }

DeviceExplorerProps

type DeviceExplorerProps = { deviceType: DeviceExplorerDeviceType className?: string selectedDevices?: DataTableRowSelectionState onSelectedDevicesChange?: (selections: DataTableRowSelectionState) => void } & ForwardedToolbarProps & ForwardedTableProps

DeviceExplorerSearchOption

type DeviceExplorerSearchOption = { value: string label: string }

DeviceInfo

type DeviceInfo = { container?: string pos?: string poolConfig?: string serialNum?: string macAddress?: string | null posHistory?: Partial<PosHistoryEntry[]> [key: string]: unknown }

DeviceLast

type DeviceLast = { err?: string | null type?: string snap?: ContainerSnap alerts?: Alert[] | null [key: string]: unknown }

DeviceStatus

type DeviceStatus = (typeof DEVICE_STATUS)[keyof typeof DEVICE_STATUS]

DialogContentProps

type DialogContentProps = { title?: string description?: string closeOnClickOutside?: boolean closeOnEscape?: boolean } & DialogHeaderProps

DialogHeaderProps

type DialogHeaderProps = { bare?: boolean closable?: boolean onClose?: VoidFunction }

DisplayMode

type DisplayMode = typeof CURRENCY.USD_LABEL | typeof CURRENCY.BTC_LABEL

DividerOrientation

type DividerOrientation = 'horizontal' | 'vertical'

DividerProps

type DividerProps = { /** Line orientation */ orientation?: DividerOrientation /** Line style */ dashed?: boolean dotted?: boolean /** Text or node rendered in the middle of the divider */ children?: ReactNode /** Horizontal alignment of the label */ align?:

DividerType

type DividerType = 'solid' | 'dashed' | 'dotted'

DoughnutChartDataset

type DoughnutChartDataset = { label: string value: number color?: string }

DoughnutChartProps

type DoughnutChartProps = { /** Array of labelled slices */ data: DoughnutChartDataset[] /** Unit suffix shown in tooltips */ unit?: string /** Chart.js options – merged with defaults */ options?: ChartJS<'doughnut'>['options'] /** Doughnut cutout percentage (defau…

EbitdaChartsProps

type EbitdaChartsProps = { showEbitdaBarChart: boolean ebitdaChartData: BarChartDataResult btcDisplayData: BarChartDataResult isLoading: boolean hasBtcProducedAllZeros: boolean }

EbitdaDisplayMetrics

Display metrics for the financial EBITDA reporting surface (foundation). Values mirror Mining OS Views/Financial/EBITDA/EBITDA.types EbitdaMetrics.

type EbitdaDisplayMetrics = { bitcoinProductionCost: number bitcoinPrice: number bitcoinProduced: number ebitdaSellingBTC: number actualEbitda: number ebitdaNotSellingBTC: number }

EbitdaHodlCardProps

type EbitdaHodlCardProps = { value: number currentBTCPrice: number }

EbitdaLogEntry

type EbitdaLogEntry = { ts: number revenueBTC: number revenueUSD: number btcPrice: number powerW: number hashrateMhs: number consumptionMWh: number energyCostsUSD: number operationalCostsUSD: number totalCostsUSD: number ebitdaSelling: number ebitdaHodl: number

EbitdaMetricsProps

type EbitdaMetricsProps = { metrics: EbitdaDisplayMetrics currentBTCPrice: number }

EbitdaProps

type EbitdaProps = { metrics: EbitdaDisplayMetrics | null ebitdaChartInput: ToBarChartDataInput | null btcProducedChartInput: ToBarChartDataInput | null hasBtcProducedAllZeros: boolean showEbitdaBarChart: boolean currentBTCPrice: number datePicker: ReactElem

EbitdaQueryParams

type EbitdaQueryParams = { start: number end: number period: FinancePeriod }

EbitdaResponse

type EbitdaResponse = FinanceResponse<EbitdaLogEntry, EbitdaTotals>

EbitdaSellingCardProps

type EbitdaSellingCardProps = { value: number }

EbitdaTotals

type EbitdaTotals = { totalRevenueBTC: number totalRevenueUSD: number totalCostsUSD: number totalEbitdaSelling: number totalEbitdaHodl: number avgBtcProductionCost: number | null currentBtcPrice: number }

EbitdaViewModel

type EbitdaViewModel = { metrics: EbitdaDisplayMetrics | null ebitdaChartInput: ToBarChartDataInput | null btcProducedChartInput: ToBarChartDataInput | null hasBtcProducedAllZeros: boolean currentBTCPrice: number /** When false, hide the EBITDA bar group (Mining…

EfficiencyDateRange

type EfficiencyDateRange = { start: number; end: number }

EfficiencyMinerTypeTailLog

type EfficiencyMinerTypeTailLog = Record<string, unknown>

EfficiencyMinerTypeViewProps

type EfficiencyMinerTypeViewProps = Omit<EfficiencyBarViewProps, 'title'>

EfficiencyMinerUnitTailLog

type EfficiencyMinerUnitTailLog = Record<string, unknown>

EfficiencyMinerUnitViewProps

type EfficiencyMinerUnitViewProps = Omit<EfficiencyBarViewProps, 'title'>

EfficiencySiteViewProps

type EfficiencySiteViewProps = { log?: MetricsEfficiencyLogEntry[] avgEfficiency?: number | null nominalValue?: number | null isLoading?: boolean dateRange?: EfficiencyDateRange onDateRangeChange?: (range: EfficiencyDateRange) => void onReset?: VoidFunction }

EfficiencyTabValue

type EfficiencyTabValue = (typeof EfficiencyTabTypes)[keyof typeof EfficiencyTabTypes]

EmptyStateImage

type EmptyStateImage = 'default' | 'simple' | ReactNode

EmptyStateProps

type EmptyStateProps = { /** * Description text or ReactNode displayed below the image */ description: ReactNode /** * Image to display. Use "default" for the standard illustration, * "simple" for a minimal icon, or pass a custom ReactNode. * @default "default"

EmptyStateSize

type EmptyStateSize = ComponentSize

EnabledDisableToggleProps

type EnabledDisableToggleProps = { value: unknown tankNumber: number | string isButtonDisabled: boolean isOffline: boolean onToggle: (params: EnabledDisableToggleCbParams) => void }

EnergyBalanceCostChartsProps

type EnergyBalanceCostChartsProps = { costChartData: BarChartDataResult btcUnit: EnergyCostChartInput['btcUnit'] powerChartInput: ThresholdLineChartInput displayMode: DisplayMode barLabelFormatter: (v: number) => string onDisplayModeChange: (mode: DisplayMode) => void /** Sh…

EnergyBalanceCostMetricsProps

type EnergyBalanceCostMetricsProps = { metrics: EnergyCostMetrics }

EnergyBalanceData

type EnergyBalanceData = { revenueMetrics: EnergyRevenueMetrics | null costMetrics: EnergyCostMetrics | null energyRevenueChartInput: ThresholdBarChartInput averageDowntimeData: AverageDowntimeChartData powerChartInput: ThresholdLineChartInput powerChartCostInput:

EnergyBalanceLogEntry

type EnergyBalanceLogEntry = { ts: number powerW: number consumptionMWh: number revenueBTC: number revenueUSD: number btcPrice: number energyCostUSD: number totalCostUSD: number energyRevenuePerMWh: number | null allInCostPerMWh: number | null profitUSD: number curtai

EnergyBalancePowerChartProps

type EnergyBalancePowerChartProps = { height?: number fillHeight?: boolean periodType: PeriodType chartInput: ThresholdLineChartInput }

EnergyBalanceProps

type EnergyBalanceProps = { viewModel: EnergyBalanceViewModel onTabChange: (tab: EnergyBalanceTab) => void onRevenueDisplayModeChange: (mode: DisplayMode) => void onCostDisplayModeChange: (mode: DisplayMode) => void isDemoMode?: boolean /** Slot for timeframe / dat…

EnergyBalanceQueryParams

type EnergyBalanceQueryParams = { start: number end: number period: FinancePeriod }

EnergyBalanceResponse

type EnergyBalanceResponse = FinanceResponse<EnergyBalanceLogEntry, EnergyBalanceTotals>

EnergyBalanceRevenueChartsProps

type EnergyBalanceRevenueChartsProps = { revenueChartData: BarChartDataResult averageDowntimeData: AverageDowntimeChartData powerChartInput: ThresholdLineChartInput displayMode: DisplayMode barLabelFormatter: (v: number) => string onDisplayModeChange: (mode: DisplayMode) => voi

EnergyBalanceRevenueMetricsProps

type EnergyBalanceRevenueMetricsProps = { metrics: EnergyRevenueMetrics }

EnergyBalanceTab

type EnergyBalanceTab = 'revenue' | 'cost'

EnergyBalanceTotals

type EnergyBalanceTotals = { totalRevenueBTC: number totalRevenueUSD: number totalCostUSD: number totalProfitUSD: number avgCostPerMWh: number | null avgRevenuePerMWh: number | null totalConsumptionMWh: number avgCurtailmentRate: number | null avgOperationalIssuesRa

EnergyBalanceViewModel

type EnergyBalanceViewModel = EnergyBalanceData & { activeTab: EnergyBalanceTab revenueDisplayMode: DisplayMode costDisplayMode: DisplayMode isLoading: boolean errors: string[] hasDateSelection: boolean }

EnergyCostChartInput

type EnergyCostChartInput = ThresholdBarChartInput & { btcUnit: string | null }

EnergyCostChartProps

type EnergyCostChartProps = { chartData: BarChartDataResult btcUnit: EnergyCostChartInput['btcUnit'] displayMode: DisplayMode barLabelFormatter: (v: number) => string onDisplayModeChange: (mode: DisplayMode) => void height?: number }

EnergyCostMetrics

type EnergyCostMetrics = { avgPowerConsumption: number avgEnergyCost: number avgAllInCost: number avgPowerAvailability: number avgOperationsCost: number avgEnergyRevenue: number }

EnergyMetricCardProps

type EnergyMetricCardProps = { name: string value: number unit: string fallback?: string }

EnergyReportBarChartLegacy

type EnergyReportBarChartLegacy = { labels: string[] dataSet1: { label: string; data: number[] } }

EnergyReportBarViewProps

type EnergyReportBarViewProps = { title: string isEmpty?: boolean isLoading?: boolean chartInput?: ToBarChartDataInput onTimeFrameChange?: (start: Date, end: Date) => void }

EnergyReportContainer

type EnergyReportContainer = Container & { containerId?: string minersCount?: number }

EnergyReportDateRange

type EnergyReportDateRange = { start: number; end: number }

EnergyReportGroupedBarViewProps

type EnergyReportGroupedBarViewProps = { isLoading?: boolean containers?: Container[] groupedConsumption?: MetricsConsumptionGroupedResponse onTimeFrameChange?: EnergyReportBarViewProps['onTimeFrameChange'] }

EnergyReportMinerSliceConfig

type EnergyReportMinerSliceConfig = { title: string groupBy: MetricsConsumptionGroupBy filterCategory?: (category: string) => boolean getLabelName: (category: string, containers?: Container[]) => string }

EnergyReportMinerTypeViewProps

type EnergyReportMinerTypeViewProps = EnergyReportGroupedBarViewProps

EnergyReportMinerUnitViewProps

type EnergyReportMinerUnitViewProps = EnergyReportGroupedBarViewProps

EnergyReportMinerViewSlice

type EnergyReportMinerViewSlice = (typeof ENERGY_REPORT_MINER_VIEW_SLICES)[keyof typeof ENERGY_REPORT_MINER_VIEW_SLICES]

EnergyReportProps

type EnergyReportProps = { defaultTab?: EnergyReportTabValue siteView?: Omit<EnergyReportSiteViewProps, 'dateRange'> & { dateRange?: EnergyReportDateRange } minerTypeView?: EnergyReportMinerTypeViewProps minerUnitView?: EnergyReportMinerUnitViewProps className?: s

EnergyReportSiteViewProps

type EnergyReportSiteViewProps = Omit<UseEnergyReportSiteInput, 'dateRange'> & { snapshotLoading?: boolean onRefetchSnapshot?: VoidFunction dateRange: EnergyReportDateRange onDateRangeChange?: (range: EnergyReportDateRange) => void }

EnergyReportTabValue

type EnergyReportTabValue = (typeof ENERGY_REPORT_TAB_TYPES)[keyof typeof ENERGY_REPORT_TAB_TYPES]

EnergyReportTailLogItem

type EnergyReportTailLogItem = Record< string, EnergyReportTailLogNumericBucket | number | undefined >

EnergyReportTailLogNumericBucket

type EnergyReportTailLogNumericBucket = Record<string, number>

EnergyRevenueChartProps

type EnergyRevenueChartProps = { chartData: BarChartDataResult displayMode: DisplayMode barLabelFormatter: (v: number) => string onDisplayModeChange: (mode: DisplayMode) => void height?: number }

EnergyRevenueMetrics

type EnergyRevenueMetrics = { curtailmentRate: number operationalIssuesRate: number }

EntryData

type EntryData = { [key: string]: number | null | undefined }

ErrorBoundaryProps

type ErrorBoundaryProps = { /** * Fallback UI to render when an error is caught. * If not provided, a default error panel with expandable stack trace is shown. */ fallback?: ReactNode /** * Name of the wrapped component (shown in the default fallback) */ componentN

ErrorCardProps

type ErrorCardProps = { /** * Error message string. Supports `\n` for line breaks. */ error: string /** * Title displayed above the error message * @default "Errors" */ title?: string /** * Display variant. "card" shows a bordered container, "inline" shows flat…

ErrorCardVariant

type ErrorCardVariant = 'card' | 'inline'

ErrorWithTimestamp

type ErrorWithTimestamp = { msg?: string message?: string timestamp?: number | string }

ExplorerDetailProps

type ExplorerDetailProps = { /** The active Explorer tab — selects which per-type panel renders. */ deviceType: DeviceExplorerDeviceType /** Router navigate used by alarm rows to deep-link into `/alerts/:id`. */ onNavigate?: (path: string) => void /** Compact layout…

ExplorerLayoutProps

type ExplorerLayoutProps = { /** Page heading. */ title?: string /** Optional header controls (export button, etc.) shown next to the title. */ headerActions?: ReactNode /** The list column — typically a tab switch plus the device/container table. */ list: ReactNode

ExplorerRowSelection

Row-selection map from &lt;DeviceExplorer&gt; — thing id → selected.

type ExplorerRowSelection = Record<string, boolean>

ExplorerThingDetailRow

type ExplorerThingDetailRow = { label: string value: string }

ExportButtonProps

type ExportButtonProps = { /** Fires with the chosen format when the user picks an item. */ onExport: (format: ExportFormat) => void /** Formats to offer in the dropdown — defaults to `['csv', 'json']`. */ formats?: readonly ExportFormat[] /** Button label — defau…

ExportFormat

type ExportFormat = 'csv' | 'json'

ExtraTooltipData

type ExtraTooltipData = Record<number, string>

FeatureFlagsSettingsProps

type FeatureFlagsSettingsProps = { featureFlags: Record<string, boolean> isEditingEnabled: boolean isLoading?: boolean isSaving?: boolean onSave: (flags: Record<string, boolean>) => void className?: string }

FieldName

Extract field names from a form schema with type safety. Useful for creating type-safe field name constants.

type FieldName = FieldPath<TFieldValues>

FilterSelectionTuple

type FilterSelectionTuple = CascaderValue

FinancePeriod

Finance v2 API types - shapes returned by /auth/finance/* endpoints.

type FinancePeriod = 'daily' | 'weekly' | 'monthly' | 'yearly'

FinanceQueryParams

type FinanceQueryParams = { start: number end: number period?: FinancePeriod overwriteCache?: boolean }

FinanceResponse

type FinanceResponse = { log: Log[] summary: Summary }

FinanceRevenueLogEntry

type FinanceRevenueLogEntry = { ts: number revenueBTC: number feesBTC: number netRevenueBTC: number }

FinanceRevenueQueryParams

type FinanceRevenueQueryParams = FinanceQueryParams & { pool?: string }

FinanceRevenueResponse

type FinanceRevenueResponse = FinanceResponse<FinanceRevenueLogEntry, FinanceRevenueTotals>

FinanceRevenueTotals

type FinanceRevenueTotals = { totalRevenueBTC: number totalFeesBTC: number totalNetRevenueBTC: number }

FinancialDateRange

type FinancialDateRange = { start: number end: number period?: PeriodValue }

FinancialRangeChangeOptions

type FinancialRangeChangeOptions = { year?: number month?: number period?: PeriodValue }

FlexAlign

Flex/Grid alignment options Used by Popover, charts, and layout components

type FlexAlign = 'start' | 'center' | 'end'

FormatHashBalanceValueOptions

type FormatHashBalanceValueOptions = { forAxis?: boolean }

FormCascaderProps

type FormCascaderProps = BaseFormFieldProps<TFieldValues, TName> & { options: CascaderOption[] multiple?: boolean cascaderProps?: Omit< React.ComponentProps<typeof Cascader>, 'value' | 'onChange' | 'options' | 'placeholder' > }

FormCheckboxProps

type FormCheckboxProps = BaseFormFieldProps<TFieldValues, TName> & { checkboxProps?: React.ComponentProps<typeof Checkbox> layout?: 'row' | 'column' }

FormDatePickerProps

type FormDatePickerProps = BaseFormFieldProps<TFieldValues, TName> & { datePickerProps?: Omit<React.ComponentProps<typeof DatePicker>, 'selected' | 'onSelect'> }

FormInputProps

type FormInputProps = BaseFormFieldProps<TFieldValues, TName> & { type?: React.ComponentProps<typeof Input>['type'] variant?: React.ComponentProps<typeof Input>['variant'] inputProps?: Omit<React.ComponentProps<typeof Input>, 'type' | 'variant'> }

FormProps

Form wrapper that provides react-hook-form context to child components.

type FormProps = Omit< ComponentProps<'form'>, 'children' > & { form: UseFormReturn<TFieldValues> children: ReactNode }

FormRadioGroupProps

type FormRadioGroupProps = BaseFormFieldProps<TFieldValues, TName> & { options: FormRadioOption[] orientation?: 'horizontal' | 'vertical' radioGroupProps?: Omit< React.ComponentProps<typeof RadioGroup>, 'onValueChange' | 'defaultValue' | 'orientation' > }

FormRadioOption

type FormRadioOption = { value: string label: string disabled?: boolean }

FormSelectOption

type FormSelectOption = { value: string label: string disabled?: boolean }

FormSelectProps

type FormSelectProps = BaseFormFieldProps<TFieldValues, TName> & { options: FormSelectOption[] selectProps?: Omit<React.ComponentProps<typeof Select>, 'onValueChange' | 'defaultValue'> }

FormSwitchProps

type FormSwitchProps = BaseFormFieldProps<TFieldValues, TName> & { switchProps?: Omit<React.ComponentProps<typeof Switch>, 'checked' | 'onCheckedChange'> layout?: 'row' | 'column' }

FormTagInputProps

type FormTagInputProps = BaseFormFieldProps<TFieldValues, TName> & { options?: TagInputOption[] allowCustomTags?: boolean variant?: 'default' | 'search' tagInputProps?: Omit< React.ComponentProps<typeof TagInput>, 'value' | 'onTagsChange' | 'label' | 'placeholder'

FormTextAreaProps

type FormTextAreaProps = BaseFormFieldProps<TFieldValues, TName> & { textAreaProps?: React.ComponentProps<typeof TextArea> }

GaugeChartProps

type GaugeChartProps = { /** Value between 0 and 1 (e.g. 0.75 = 75%). Values outside the range are clamped. */ percent: number /** Arc colours in HEX format. */ colors?: string[] /** Arc thickness as a fraction of the gauge radius (0–1). */ arcWidth?: number /**…

GetAlertsTableColumnsOptions

type GetAlertsTableColumnsOptions = { getFormattedDate: (date: Date) => string }

GetColumnConfigParams

type GetColumnConfigParams = { getFormattedDate: (date: Date) => string renderAction: (device: DeviceExplorerDeviceData) => React.ReactNode }

GlobalConfig

type GlobalConfig = { nominalSiteHashrate_MHS?: number nominalAvailablePowerMWh?: number nominalPowerConsumption_MW?: number nominalWeightedAvgEfficiency_WThs?: number nominalMinerCapacity?: number isAutoSleepAllowed?: boolean siteEnergyDataThresholdMWh?: num

HashBalanceCostPanelProps

type HashBalanceCostPanelProps = HashBalancePanelProps

HashBalanceCurrency

type HashBalanceCurrency = typeof CURRENCY.USD_LABEL | typeof CURRENCY.BTC_LABEL

HashBalanceMetric

type HashBalanceMetric = { label: string unit: string value: number isHighlighted?: boolean }

HashBalancePanelProps

type HashBalancePanelProps = Pick< UseHashBalanceInput, 'data' | 'log' | 'dateRange' | 'timeframeType' > & { isLoading?: boolean }

HashBalanceProps

type HashBalanceProps = Partial<{ isError: boolean isLoading: boolean errorMessage: string className: string tabsClassName: string tabsListClassName: string data: HashRevenueResponse | null initialDateRange: FinancialDateRange onDateRangeChange: (dateRange: Finan

HashBalanceRevenuePanelProps

type HashBalanceRevenuePanelProps = HashBalancePanelProps & { currency: HashBalanceCurrency onCurrencyChange: (currency: HashBalanceCurrency) => void }

HashrateBarChartData

type HashrateBarChartData = { labels: string[] series: { label: string values: number[] color: string }[] }

HashrateDateRange

type HashrateDateRange = { start: number; end: number }

HashrateFilterOption

type HashrateFilterOption = { value: string label: string }

HashrateGroupBy

groupBy axis for the v2 grouped hashrate endpoint.

type HashrateGroupBy = 'miner' | 'container'

HashrateGroupedLog

type HashrateGroupedLog = ReadonlyArray<HashrateGroupedLogEntry>

HashrateGroupedLogEntry

Single bucket of a v2 /auth/metrics/hashrate grouped response.

type HashrateGroupedLogEntry = { ts: number hashrateMhs: Record<string, number> }

HashrateGroupedQueryData

type HashrateGroupedQueryData = { log?: HashrateGroupedLog }

HashrateLabelDivisorKey

type HashrateLabelDivisorKey = keyof typeof HASHRATE_LABEL_DIVISOR

HashrateLabelDivisorValue

type HashrateLabelDivisorValue = (typeof HASHRATE_LABEL_DIVISOR)[HashrateLabelDivisorKey]

HashrateMinerTypeViewProps

type HashrateMinerTypeViewProps = { /** Hashrate log grouped by miner type (groupBy=miner). */ log?: HashrateGroupedLog isLoading?: boolean dateRange?: HashrateDateRange onDateRangeChange?: (range: HashrateDateRange) => void onReset?: VoidFunction }

HashrateMiningUnitViewProps

type HashrateMiningUnitViewProps = { /** Hashrate log grouped by container / mining unit (groupBy=container). */ log?: HashrateGroupedLog isLoading?: boolean dateRange?: HashrateDateRange onDateRangeChange?: (range: HashrateDateRange) => void onReset?: VoidFunction }

HashrateProps

type HashrateProps = { /** Tab selected on first render. Defaults to the Site View. */ defaultTab?: HashrateTabValue /** Props forwarded to the Site View tab. */ siteView?: HashrateSiteViewProps /** Props forwarded to the Miner Type View tab. */ minerTypeView?

HashrateQueryState

type HashrateQueryState = { data?: HashrateGroupedQueryData isLoading?: boolean error?: unknown }

HashrateSeries

type HashrateSeries = { label: string color?: string points: HashrateSeriesPoint[] }

HashrateSeriesPoint

type HashrateSeriesPoint = { ts: string value: number }

HashrateSiteViewChartData

type HashrateSiteViewChartData = { series: HashrateSeries[] }

HashrateSiteViewProps

type HashrateSiteViewProps = { /** Hashrate log grouped by miner type. */ log?: HashrateGroupedLog /** Loading state - drives the chart spinner. */ isLoading?: boolean /** Selected date range used by the host to drive the query. */ dateRange?: HashrateDateRange /** Fi…

HashrateTabValue

type HashrateTabValue = (typeof HashrateTabTypes)[keyof typeof HashrateTabTypes]

HashrateUnit

type HashrateUnit = ValueUnit & { unit: string }

HashRevenueLogEntry

type HashRevenueLogEntry = { ts: number revenueBTC: number feesBTC: number revenueUSD: number feesUSD: number btcPrice: number hashrateMhs: number hashRevenueBTCPerPHsPerDay: number | null hashRevenueUSDPerPHsPerDay: number | null hashCostBTCPerPHsPerDay: number | n

HashRevenueResponse

type HashRevenueResponse = FinanceResponse<HashRevenueLogEntry, HashRevenueTotals>

HashRevenueTotals

type HashRevenueTotals = { avgHashRevenueBTCPerPHsPerDay: number | null avgHashRevenueUSDPerPHsPerDay: number | null avgHashCostBTCPerPHsPerDay: number | null avgHashCostUSDPerPHsPerDay: number | null avgNetworkHashPriceBTCPerPHsPerDay: number | null avgNetworkHas

HeaderConsumptionBoxProps

type HeaderConsumptionBoxProps = { icon?: ReactNode /** Current site-level power consumption, in megawatts. */ valueMw?: number /** Unit label — defaults to `MW`. */ unit?: string className?: string }

HeaderControlsSettingsProps

type HeaderControlsSettingsProps = { preferences: HeaderPreferences isLoading?: boolean onToggle: (key: keyof HeaderPreferences, value: boolean) => void onReset: VoidFunction className?: string }

HeaderEfficiencyBoxProps

type HeaderEfficiencyBoxProps = { icon?: ReactNode /** Efficiency in watts per TH/s. */ valueWthS?: number /** Unit label — defaults to `W/TH/S`. */ unit?: string className?: string }

HeaderHashrateBoxProps

type HeaderHashrateBoxProps = { icon?: ReactNode /** MOS-side aggregate hashrate in PH/s. */ mosPhs?: number /** Pool-side aggregate hashrate in PH/s. */ poolPhs?: number /** Hashrate unit label — defaults to `PH/s`. */ unit?: string className?: string }

HeaderMinersBoxProps

type HeaderMinersBoxProps = { /** Icon shown next to the "Miners" label. Caller-provided so the package stays icon-agnostic. */ icon?: ReactNode /** Total miners across the site (denominator of the `158 / 2,188` ratio). */ total?: number /** Online miners (the `158`…

HeaderPreferences

type HeaderPreferences = { poolMiners: boolean mosMiners: boolean poolHashrate: boolean mosHashrate: boolean consumption: boolean efficiency: boolean }

HeaderStatsBarProps

type HeaderStatsBarProps = { /** Stat boxes to render in order, left-to-right. */ children: ReactNode /** Optional class hook. */ className?: string }

HeatmapCell

A single heatmap cell.

type HeatmapCell = { /** Numeric value driving the cell colour; `null` renders the empty colour. */ value: number | null /** Text shown in the cell (defaults to the value when `showValues` is on). */ label?: string /** Stable React key (defaults to the row/c…

HeatmapCellContext

Context handed to renderCell for a single cell.

type HeatmapCellContext = { /** The colour resolved for this cell from the gradient (or the empty colour). */ color: string /** Zero-based row index. */ row: number /** Zero-based column index. */ col: number }

HeatmapKey

type HeatmapKey = keyof typeof HEATMAP

HeatmapLegendProps

type HeatmapLegendProps = { /** Value (or pre-formatted label) at the low end of the scale. */ min: number | string /** Value (or pre-formatted label) at the high end of the scale. */ max: number | string /** Unit suffix appended to `min`/`max`. */ unit?: string /*…

HeatmapModeKey

type HeatmapModeKey = keyof typeof HEATMAP_MODE

HeatmapModeValue

type HeatmapModeValue = (typeof HEATMAP_MODE)[HeatmapModeKey]

HeatmapProps

type HeatmapProps = { /** Rows of cells (row-major). Rows may be ragged. */ data: HeatmapCell[][] /** Range floor; auto-derived from the finite values when omitted. */ min?: number /** Range ceiling; auto-derived from the finite values when omitted. */ max?:

HighlightedValueProps

type HighlightedValueProps = { value: string | number unit?: string className?: string style?: CSSProperties }

HistoricalAlertsProps

type HistoricalAlertsProps = { /** * Pre-fetched historical alerts log entries (each with a `thing` device payload). */ alerts?: Alert[] isLoading?: boolean /** * Filters and search tags coming from the parent (typically shared with `CurrentAlerts`). */ localFilters:

HistoricalAlertsRange

type HistoricalAlertsRange = { start: number end: number }

IconProps

type IconProps = { /** Sets both width and height */ size?: number | string /** Only affects single-color icons (default: 'currentColor') */ color?: string children?: never } & SVGAttributes<SVGElement>

ImportExportSettingsProps

type ImportExportSettingsProps = { onExport: VoidFunction onImport: (data: SettingsExportData) => void onParseFile?: (file: File) => Promise<SettingsExportData> isExporting?: boolean isImporting?: boolean className?: string }

IndicatorColor

type IndicatorColor = | 'red' | 'gray' | 'blue' | 'yellow' | 'green' | 'purple' | 'amber' | 'slate'

IndicatorProps

type IndicatorProps = { /** * Color variant of the indicator * @default 'gray' */ color?: IndicatorColor /** * Size variant of the indicator * @default 'md' */ size?: ComponentSize /** * Custom className for the root element */ className?: string /** * When tru…

InputProps

type InputProps = Omit<ComponentProps<'input'>, 'prefix' | 'size'> & { /** * Optional label displayed above the input */ label?: string /** * HTML id for the input. Required when using label for accessibility. */ id?: string /** * Variant of the input * - `…

InputSize

type InputSize = 'default' | 'medium'

LabeledCardNavigateOptions

type LabeledCardNavigateOptions = Partial<{ href: string target: string }>

LabeledCardProps

type LabeledCardProps = Partial<{ isDark: boolean className: string hasNoWrap: boolean isRelative: boolean isFullWidth: boolean hasNoMargin: boolean hasNoBorder: boolean isFullHeight: boolean isScrollable: boolean label: ReactNode children: ReactNode getNavigateO

LabelToIgnoreValue

type LabelToIgnoreValue = (typeof LABEL_TO_IGNORE)[number]

LegendItem

type LegendItem = { label: string color: string hidden?: boolean }

LightWeightLineChartProps

type LightWeightLineChartProps = { /** * Mutable ref to hold the LightWeightCharts reference */ chartRef?: MutableRefObject<IChartApi | null> /** * Data of the chart */ data: LineChartData /** * Callback to format ticks on y axis. If `priceFormatter` is given. It would be…

LineChartCardData

type LineChartCardData = { /** Chart datasets */ datasets: LineChartCardDataset[] } & Partial<{ /** Y-axis tick formatter */ yTicksFormatter: (value: number) => string /** Price formatter for lightweight-charts */ priceFormatter: (value: number) => string /** Whet…

LineChartCardDataset

type LineChartCardDataset = { /** Label for the dataset (used in legend) */ label?: string /** Line color */ borderColor: string /** Data points */ data: Array<{ x: number; y: number | null }> /** Whether this dataset is visible */ visible?: boolean /** Custom icon f…

LineChartCardProps

type LineChartCardProps = Partial<{ /** Pre-adapted chart data (use this OR rawData+dataAdapter) */ data: LineChartCardData /** Raw data to be transformed by dataAdapter */ rawData: unknown /** Adapter to transform rawData into LineChartCardData */ dataAdapter: (da

LineChartData

type LineChartData = { datasets: LineDataset[] }

LineDataPoint

type LineDataPoint = { x: number; y: number | null | undefined }

LineDataset

type LineDataset = { label?: string visible?: boolean borderColor: string borderWidth?: number extraTooltipData?: ExtraTooltipData data: LineDataPoint[] }

LineSeriesApi

type LineSeriesApi = ISeriesApi<'Line', Time>

LoaderProps

type LoaderProps = { /** * Size of each dot in pixels * @default 10 */ size?: number /** * Number of dots to display * @default 5 */ count?: 3 | 5 | 7 /** * Color variant of the loader * @default 'orange' */ color?: 'red' | 'gray' | 'blue' | 'amber' | 'orang

LocalFilters

type LocalFilters = Record<string, string | number | boolean | (string | number | boolean)[]>

LogActivityIconProps

type LogActivityIconProps = { status: string }

LogData

type LogData = { uuid: string body: string title: string status: string subtitle: string }

LogDotProps

type LogDotProps = { type: string status: string }

LogFormattedAlertData

type LogFormattedAlertData = { title: string subtitle: string status: string severityLevel: number creationDate: number | string body: string id: string uuid?: string [key: string]: unknown }

LogItemProps

type LogItemProps = { data: LogData onLogClicked?: (uuid: string) => void }

LogPagination

type LogPagination = { current: number total: number pageSize: number handlePaginationChange: (page: number) => void }

LogRowProps

type LogRowProps = { log: LogData type: string style?: CSSProperties onLogClicked?: (uuid: string) => void }

LogsCardProps

type LogsCardProps = Partial<{ type: string label: string isDark: boolean isLoading: boolean logsData: LogData[] emptyMessage: string skeletonRows: number pagination: LogPagination onLogClicked: (uuid: string) => void }>

LvCabinetRecord

type LvCabinetRecord = { id: string powerMeters?: PowerMeter[] }

ManageUserModalProps

type ManageUserModalProps = { open: boolean onClose: VoidFunction user: SettingsUser roles: RoleOption[] rolePermissions: Record<string, Record<string, PermLevel>> permissionLabels: Record<string, string> onSubmit: (data: { id: string; name: string; email: string; ro

MaxUnitValueKey

type MaxUnitValueKey = keyof typeof MAX_UNIT_VALUE

MaxUnitValueValue

type MaxUnitValueValue = (typeof MAX_UNIT_VALUE)[MaxUnitValueKey]

Maybe

type Maybe = T | null | undefined

MdkWordmarkProps

type MdkWordmarkProps = { /** Visual size of the wordmark. `sm` ≈ 24px tall, `md` ≈ 32px, `lg` ≈ 64px. */ size?: MdkWordmarkSize /** Optional class hook on the outer `<svg>`. */ className?: string /** Accessible label. Defaults to "MDK". */ title?: string }

MdkWordmarkSize

type MdkWordmarkSize = 'sm' | 'md' | 'lg'

MetricsConsumptionGroupBy

type MetricsConsumptionGroupBy = 'container' | 'miner'

MetricsConsumptionGroupedLogEntry

type MetricsConsumptionGroupedLogEntry = { ts: number powerW: Record<string, number> consumptionMWh: Record<string, number> | null }

MetricsConsumptionGroupedResponse

type MetricsConsumptionGroupedResponse = MetricsResponse< MetricsConsumptionGroupedLogEntry, MetricsConsumptionGroupedSummary >

MetricsConsumptionGroupedSummary

type MetricsConsumptionGroupedSummary = { avgPowerW: number | null totalConsumptionMWh: number groupedBy?: Record<string, MetricsConsumptionGroupSummary> }

MetricsConsumptionGroupSummary

type MetricsConsumptionGroupSummary = { avgPowerW: number | null totalConsumptionMWh: number }

MetricsConsumptionLogEntry

type MetricsConsumptionLogEntry = { ts: number powerW: number consumptionMWh: number }

MetricsConsumptionQueryParams

type MetricsConsumptionQueryParams = MetricsQueryParams & { groupBy?: MetricsConsumptionGroupBy }

MetricsConsumptionResponse

type MetricsConsumptionResponse = MetricsResponse< MetricsConsumptionLogEntry, MetricsConsumptionSummary >

MetricsConsumptionSummary

type MetricsConsumptionSummary = { avgPowerW: number | null totalConsumptionMWh: number }

MetricsEfficiencyLogEntry

type MetricsEfficiencyLogEntry = { ts: number efficiencyWThs: number }

MetricsEfficiencyResponse

type MetricsEfficiencyResponse = MetricsResponse< MetricsEfficiencyLogEntry, MetricsEfficiencySummary >

MetricsEfficiencySummary

type MetricsEfficiencySummary = { avgEfficiencyWThs: number | null }

MetricsHashrateGroupBy

type MetricsHashrateGroupBy = 'container' | 'miner'

MetricsHashrateGroupedLogEntry

type MetricsHashrateGroupedLogEntry = { ts: number hashrateMhs: Record<string, number> }

MetricsHashrateGroupedResponse

type MetricsHashrateGroupedResponse = MetricsResponse< MetricsHashrateGroupedLogEntry, MetricsHashrateGroupedSummary >

MetricsHashrateGroupedSummary

type MetricsHashrateGroupedSummary = { avgHashrateMhs: number | null totalHashrateMhs: number groupedBy?: Record<string, MetricsHashrateSummary> }

MetricsHashrateLogEntry

type MetricsHashrateLogEntry = { ts: number hashrateMhs: number }

MetricsHashrateQueryParams

type MetricsHashrateQueryParams = MetricsQueryParams & { groupBy?: MetricsHashrateGroupBy }

MetricsHashrateResponse

type MetricsHashrateResponse = MetricsResponse< MetricsHashrateLogEntry, MetricsHashrateSummary >

MetricsHashrateSummary

type MetricsHashrateSummary = { avgHashrateMhs: number | null totalHashrateMhs: number }

MetricsInterval

type MetricsInterval = '1h' | '1d' | '1w'

MetricsMinerStatusLogEntry

type MetricsMinerStatusLogEntry = { ts: number online: number offline: number sleep: number maintenance: number }

MetricsMinerStatusResponse

type MetricsMinerStatusResponse = MetricsResponse< MetricsMinerStatusLogEntry, MetricsMinerStatusSummary >

MetricsMinerStatusSummary

type MetricsMinerStatusSummary = { avgOnline: number | null avgOffline: number | null avgSleep: number | null avgMaintenance: number | null }

MetricsPowerModeLogEntry

type MetricsPowerModeLogEntry = { ts: number low: number normal: number high: number sleep: number offline: number notMining: number maintenance: number error: number }

MetricsPowerModeQueryParams

type MetricsPowerModeQueryParams = MetricsQueryParams & { interval?: MetricsInterval }

MetricsPowerModeResponse

type MetricsPowerModeResponse = MetricsResponse< MetricsPowerModeLogEntry, MetricsPowerModeSummary >

MetricsPowerModeSummary

type MetricsPowerModeSummary = { avgLow: number | null avgNormal: number | null avgHigh: number | null avgSleep: number | null avgOffline: number | null avgNotMining: number | null avgMaintenance: number | null avgError: number | null }

MetricsPowerModeTimelineLogEntry

type MetricsPowerModeTimelineLogEntry = { minerId: string container: string segments: MetricsPowerModeTimelineSegment[] }

MetricsPowerModeTimelineQueryParams

type MetricsPowerModeTimelineQueryParams = { start?: number end?: number container?: string overwriteCache?: boolean }

MetricsPowerModeTimelineResponse

type MetricsPowerModeTimelineResponse = { log: MetricsPowerModeTimelineLogEntry[] }

MetricsPowerModeTimelineSegment

type MetricsPowerModeTimelineSegment = { from: number to: number powerMode: string status: string }

MetricsQueryParams

Operational metrics v2 API types - shapes returned by /auth/metrics/* endpoints.

type MetricsQueryParams = { start: number end: number overwriteCache?: boolean }

MetricsResponse

type MetricsResponse = { log: Log[] summary: Summary }

MetricsTemperatureContainerStats

type MetricsTemperatureContainerStats = { maxC: number avgC: number }

MetricsTemperatureLogEntry

type MetricsTemperatureLogEntry = { ts: number containers: Record<string, MetricsTemperatureContainerStats> siteMaxC: number | null siteAvgC: number | null }

MetricsTemperatureQueryParams

type MetricsTemperatureQueryParams = MetricsQueryParams & { interval?: MetricsInterval container?: string }

MetricsTemperatureResponse

type MetricsTemperatureResponse = MetricsResponse< MetricsTemperatureLogEntry, MetricsTemperatureSummary >

MetricsTemperatureSummary

type MetricsTemperatureSummary = { avgMaxTemp: number | null avgAvgTemp: number | null peakTemp: number | null }

MetricValueProps

type MetricValueProps = { value: number | string unit: string }

MicroBTWidgetBoxProps

type MicroBTWidgetBoxProps = { data?: Device }

MinerActionValue

type MinerActionValue = (typeof MINER_ACTIONS)[number]

MinerConfig

type MinerConfig = { firmware_ver?: string power_mode?: string led_status?: boolean }

MinerData

type MinerData = { id: string hashrate: MinerHashrate error?: string type?: string info?: { poolConfig?: string } snap?: { config?: { power_mode: string [key: string]: unknown } stats?: { status?: string [key: string]: unknown } } [key: string]: unknown }

MinerDeviceSnapshot

type MinerDeviceSnapshot = { last?: { snap?: { config?: MinerConfig } } }

MinerHashrate

type MinerHashrate = { value?: string | number | null unit?: string realValue?: number }

MinerHashrateMhs

type MinerHashrateMhs = { t_5m?: number }

MinerInfo

type MinerInfo = { container?: string pos?: string macAddress?: string serialNum?: string }

MinerPowerModeTimeline

type MinerPowerModeTimeline = { ts?: number miner?: string powerMode?: string data?: { from?: number to?: number } }

MinerRecord

type MinerRecord = { id?: string shortCode?: string info?: MinerInfo address?: string type?: string alerts?: unknown[] stats?: MinerStats config?: MinerConfig device?: MinerDeviceSnapshot error?: string err?: string isPoolStatsEnabled?: boolean }

MinerRow

type MinerRow = { id: string code: string unit: string pool: string status?: string }

MinersActivityVariant

Visual style for the per-status items.

type MinersActivityVariant = 'indicators' | 'tiles'

MinerSpecificStats

type MinerSpecificStats = { upfreq_speed: number [key: string]: unknown }

MinersStatusChartData

Pre-shaped data for the miners-status bar chart.

type MinersStatusChartData = { labels: string[] datasets: MinersStatusDataset[] }

MinersStatusDataset

Chart.js dataset for one stacked miners-status series.

type MinersStatusDataset = { label: string stack: string borderColor: string data: number[] }

MinersSummaryBoxProps

type MinersSummaryBoxProps = { /** Array of label-value pairs to display in a 2-column grid */ params: MinersSummaryParam[] /** Additional CSS class name */ className?: string }

MinersSummaryParam

type MinersSummaryParam = { /** Parameter label */ label: string /** Pre-formatted display value (including units) */ value: string }

MinerStats

type MinerStats = { status?: string uptime_ms?: number power_w?: number hashrate_mhs?: MinerHashrateMhs poolHashrate?: string temperature_c?: { max?: number } }

MiningPoolsPanelProps

type MiningPoolsPanelProps = Partial<{ /** Override the card title — defaults to `Mining Pools`. */ label: string /** Hide the title row entirely. */ hideHeader: boolean /** Loading state — renders skeleton rows. */ isLoading: boolean /** Number of skeleton rows to sh…

MinMaxAvgFormatted

type MinMaxAvgFormatted = Partial<{ min: string max: string avg: string }>

MinMaxAvgProps

type MinMaxAvgProps = MinMaxAvgValues & { className?: string }

MinMaxAvgValues

type MinMaxAvgValues = Partial<{ min: string max: string avg: string }>

MonthlyEbitdaChartProps

type MonthlyEbitdaChartProps = { chartData: BarChartDataResult height?: number }

MovementData

A single historical device movement: a location/status transition for one device.

type MovementData = { origin: string destination: string previousStatus: string newStatus: string device?: MovementDevice comments?: ReactNode }

MovementDetailsModalProps

Props for MovementDetailsModal; pass the selected movement and open/close handlers.

type MovementDetailsModalProps = Partial<{ isOpen: boolean onClose: () => void movement: MovementData }>

MovementDetailsViewModel

Fully resolved, render-ready view of a movement.

type MovementDetailsViewModel = { device: MovementDeviceView | null origin: MovementSideView destination: MovementSideView comments?: ReactNode }

MovementDevice

Device record attached to a movement (e.g. a miner or spare part). All fields optional.

type MovementDevice = Partial<{ code: string tags: string[] type: string info: Partial<{ subType: string site: string container: string serialNum: string macAddress: string }> }>

MovementDeviceView

Render-ready device summary.

type MovementDeviceView = { code: string model: string attributes: DeviceAttributeView[] }

MovementSideView

Resolved label + colors for one side (origin or destination) of a movement.

type MovementSideView = { locationLabel: string locationColors: BadgeColors statusLabel: string statusColors: BadgeColors }

MoveSparePartModalProps

Props for MoveSparePartModal.

type MoveSparePartModalProps = { isOpen?: boolean; onClose?: VoidFunction; sparePart?: MoveSparePartModalSparePart; requestedValues?: { location?: string; status?: string }; locationOptions: FormSelectOption[]; statusOptions: FormSelectOption[]; onSubmit: ( values: { lo

MoveSparePartModalSparePart

A spare part being moved: its display attributes plus current location and status.

type MoveSparePartModalSparePart = SparePartDetailsRecord & { id: string; location: string; status: string; }

MultiLevelSelectRootProps

type MultiLevelSelectRootProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Root> & { /** * Show a clear button when a value is selected * @default false */ allowClear?: boolean }

MultiLevelSelectSectionProps

type MultiLevelSelectSectionProps = { open?: boolean children?: ReactNode defaultOpen?: boolean sectionTitle: ReactNode onToggle?: (open: boolean) => void }

MultiLevelSelectTriggerProps

type MultiLevelSelectTriggerProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & { /** * Size of the select trigger * - `sm`: Small (32px height) * - `md`: Medium (36px height) * - `lg`: Large/Big (40px height) * @default 'lg' */ size?: SelectSize /** * Visual…

MultiSelectOption

type MultiSelectOption = { value: string label: ReactNode disabled?: boolean }

MultiSelectProps

type MultiSelectProps = { options: MultiSelectOption[] /** Controlled selected values. Omit to use `defaultValue` for uncontrolled mode. */ value?: string[] /** Initial values for uncontrolled mode. Ignored when `value` is provided. */ defaultValue?: string[] onV

MultiSelectSize

type MultiSelectSize = 'sm' | 'md' | 'lg'

MultiSelectVariant

type MultiSelectVariant = 'default' | 'colored'
type NavigationBlockItem = { icon: ReactNode title: string description: string navText: string url: string }

NotFoundPageProps

type NotFoundPageProps = { /** * Callback fired when the "Go Home" button is clicked */ onGoHome?: VoidFunction /** * Page title * @default "404" */ title?: string /** * Message displayed below the title * @default "The page you are looking for does not exist." */

NotificationOptions

type NotificationOptions = { /** * Duration in milliseconds (0 = no auto-close) * @default 3000 */ duration?: number /** * Toast position on screen * @default 'top-left' */ position?: ToastPosition /** * Prevent auto-close (keeps toast open until manually closed) *…

NotificationVariant

Toast/notification variant options

type NotificationVariant = 'success' | 'error' | 'warning' | 'info'

Nullable

type Nullable = T | null

OilTempThresholds

type OilTempThresholds = { COLD: number LIGHT_WARM: number WARM: number HOT: number SUPERHOT?: number [key: string]: unknown }

OperationalDashboardChartId

type OperationalDashboardChartId = (typeof OPERATIONAL_DASHBOARD_CHART_IDS)[keyof typeof OPERATIONAL_DASHBOARD_CHART_IDS]

OperationalDashboardMinersInput

type OperationalDashboardMinersInput = Pick< OperationalMinersStatusChartProps, 'data' | 'isLoading' >

OperationalDashboardProps

Props for the operational dashboard composite.

type OperationalDashboardProps = Partial<{ hashrate: OperationalDashboardTrendInput consumption: OperationalDashboardTrendInput efficiency: OperationalDashboardTrendInput miners: OperationalDashboardMinersInput /** Optional controls (e.g. a date-range picker) rendered abo…

OperationalDashboardTrendInput

Data props for one card on the composite (expand state is owned internally).

type OperationalDashboardTrendInput = Pick<OperationalTrendChartProps, 'data' | 'isLoading'>

OperationalMinersStatusChartProps

Props for the miners-status chart component.

type OperationalMinersStatusChartProps = Partial<{ data: MinersStatusChartData isLoading: boolean isExpanded: boolean onToggleExpand: VoidFunction }>

OperationalTrendChartProps

Shared props for the three line-trend chart components.

type OperationalTrendChartProps = Partial<{ data: LineChartCardData isLoading: boolean isExpanded: boolean onToggleExpand: VoidFunction }>

OperationsEfficiencyMinerTypeInput

type OperationsEfficiencyMinerTypeInput = { tailLog?: EfficiencyMinerTypeTailLog | null }

OperationsEfficiencyMinerTypeResult

type OperationsEfficiencyMinerTypeResult = { chartInput: ToBarChartDataInput isEmpty: boolean }

OperationsEfficiencyMinerUnitInput

type OperationsEfficiencyMinerUnitInput = { tailLog?: EfficiencyMinerUnitTailLog | null containers?: Container[] }

OperationsEfficiencyMinerUnitResult

type OperationsEfficiencyMinerUnitResult = { chartInput: ToBarChartDataInput isEmpty: boolean }

OperationsEfficiencyProps

type OperationsEfficiencyProps = { defaultTab?: EfficiencyTabValue siteView?: EfficiencySiteViewProps minerTypeView?: EfficiencyMinerTypeViewProps minerUnitView?: EfficiencyMinerUnitViewProps }

OperationsEnergyChartProps

type OperationsEnergyChartProps = { totals: CostSummaryMonetaryTotals | null isLoading?: boolean }

OperationsEnergyCostChartData

type OperationsEnergyCostChartData = Partial<{ energyCostsUSD: number operationalCostsUSD: number }>

OperationsEnergyCostChartProps

type OperationsEnergyCostChartProps = Partial<{ title: string unit: string height: number className: string isLoading: boolean emptyMessage: string data: OperationsEnergyCostChartData }>

OperationsMinersInput

DI input for the stacked miners-status chart.

type OperationsMinersInput = Partial<{ log: ReadonlyArray<OperationsMinersStatusPoint> isLoading: boolean error: unknown }>

OperationsMinersStatusPoint

Per-day miner status counts, already aggregated by the data layer.

type OperationsMinersStatusPoint = { ts: number online: number error: number offline: number sleep: number maintenance: number }

OperationsMinersViewModel

View-model for the miners-status chart (hook output).

type OperationsMinersViewModel = { data: MinersStatusChartData isLoading: boolean error: unknown }

OperationsTrendInput

DI input for one of the three line-trend charts.

type OperationsTrendInput = Partial<{ /** Raw metric buckets ordered by time. */ log: ReadonlyArray<OperationsTrendPoint> /** Nominal/reference value in the same base unit; renders a flat reference line. */ nominalValue: number | null isLoading: boolean error: unknow

OperationsTrendPoint

A single timestamped sample of one operational metric (base unit).

type OperationsTrendPoint = { /** Bucket timestamp in epoch ms. */ ts: number /** Value in its base unit (hashrate: MH/s, power: W, efficiency: W/TH/s). */ value: number }

OperationsTrendViewModel

View-model for one line-trend chart (hook output).

type OperationsTrendViewModel = { data: LineChartCardData isLoading: boolean error: unknown }

Optional

type Optional = T | undefined

OsTypeKey

type OsTypeKey = keyof typeof OsTypes

OsTypeValue

type OsTypeValue = (typeof OsTypes)[OsTypeKey]

OverviewChartResult

type OverviewChartResult = { yTicksFormatter: (value: number) => string timeRange: TimeRangeType | null datasets: ChartDataset[] }

PaginatedResponse

type PaginatedResponse = { data: T[] page: number total: number totalPages: number }

PaginationParams

type PaginationParams = { limit?: number offset?: number page?: number }

PaginationProps

type PaginationProps = { /** * Current active page number */ current?: number /** * Total number of items */ total?: number /** * Number of items per page * @default 20 */ pageSize?: number /** * Page size options for the select dropdown * @default [10, 20, 50,…

ParameterSetting

type ParameterSetting = { name: string value?: number | string suffix?: string type?: 'number' | 'string' }

ParameterSettings

type ParameterSettings = Record<string, ParameterSetting>

ParsedAlertEntry

type ParsedAlertEntry = { shortCode: string device: string tags: string[] alertName: string alertCode: string severity: string description?: string message?: string createdAt: string | number status?: string uuid: string id?: string type?: string actions: AlertAc

Pdu

type Pdu = { pdu: string power_w?: number | string current_a?: number | string sockets?: PduSocket[] offline?: boolean }

PduSocket

type PduSocket = { socket: string | number enabled: boolean cooling?: boolean }

PendingActionLike

The fields of a staged actionsStore submission the tray needs to render a human-readable summary. Mirrors the pool-action payloads enqueued by the add/edit/assign modals.

type PendingActionLike = { id?: number action?: string params?: Array<{ data?: { poolConfigName?: string /** Pool stratum URLs — present on create/update pool-config actions. */ poolUrls?: Array<{ url?: string }> } poolConfigId?: string configType?: string }> quer

PendingActionsButtonProps

type PendingActionsButtonProps = { /** Click handler override — defaults to toggling the actionsStore sidebar. */ onClick?: (event: MouseEvent<HTMLButtonElement>) => void className?: string }

PendingSubmission

type PendingSubmission = { id: string | number action: string tags: string[] params: unknown[] [key: string]: unknown }

PeriodKey

type PeriodKey = keyof typeof PERIOD

PeriodValue

type PeriodValue = (typeof PERIOD)[PeriodKey]

PollingIntervalType

type PollingIntervalType = | typeof POLLING_5s | typeof POLLING_1m | typeof POLLING_2m | typeof POLLING_10s | typeof POLLING_15s | typeof POLLING_20s | typeof POLLING_30s

PoolConfigData

Structurally identical to PoolConfigEntry from @tetherto/mdk-ui-foundation. Aliased here so consumers import from @tetherto/mdk-react-devkit without reaching into the core layer.

type PoolConfigData = PoolConfigEntry

PoolDetailItem

type PoolDetailItem = { title: string value?: string | number }

PoolDetailsCardProps

type PoolDetailsCardProps = PoolDetailsCardPartialProps & { details: PoolDetailItem[] }

PoolEndpoint

type PoolEndpoint = { role?: string host: string port: string pool: string url?: string }

PoolEndpointFormValues

type PoolEndpointFormValues = Omit<PoolEndpoint, 'role' | 'region'>

PoolManagerMinerExplorerProps

type PoolManagerMinerExplorerProps = { /** Miners to render in the explorer table. */ miners: ListThingsDevice[] /** Pool configurations powering the "Assign Pool" dropdown. */ poolConfig: PoolConfigData[] /** Called when the operator clicks the "Pool Manager" back link. */ b

PoolManagerPoolsProps

type PoolManagerPoolsProps = { /** Array of pool configurations to render. */ poolConfig: PoolConfigData[] /** Called when the operator clicks the "Pool Manager" back link. */ backButtonClick: VoidFunction }

PoolManagerProps

type PoolManagerProps = { /** Pool configurations shared by every sub-view (Pools, Miner Explorer, Sites). */ poolConfig: PoolConfigData[] /** Dashboard site-level stat blocks. */ stats?: DashboardStats /** Dashboard stats loading flag. */ isStatsLoading?: boolea

PoolManagerSiteOverviewDetailsProps

type PoolManagerSiteOverviewDetailsProps = { /** The site (container unit) to render details for. */ unit: UnitData /** Display name shown in the breadcrumb (`Site Overview / <unitName>`). */ unitName: string /** Pool configurations powering the per-pool detail rows. */ poolConfig:

PoolManagerSitesOverviewProps

type PoolManagerSitesOverviewProps = { /** Sites to render (already normalised through `useSitesOverviewData`). */ units: ProcessedContainerUnit[] /** Pool configurations powering each card's pool summary. */ poolConfig: PoolConfigData[] /** Show a skeleton placeholder while…

PoolManagerView

Internal surfaces the wrapper switches between on a single route.

type PoolManagerView = | 'dashboard' | 'pools' | 'sites-overview' | 'miner-explorer' | 'site-detail'

PoolSummary

type PoolSummary = { id: string name: string description: string units: number miners: number workerName: string | undefined workerPassword: string | undefined endpoints: PoolEndpoint[] validation?: { status: string } credentialsTemplate?: Partial<PoolCreden

PosHistoryEntry

type PosHistoryEntry = { container: string pos: string removedAt: number }

Position

Position/side options for UI elements Used by Tooltip, Popover, and chart legends

type Position = 'top' | 'right' | 'bottom' | 'left'

PositionChangeDialogFlowKey

type PositionChangeDialogFlowKey = keyof typeof POSITION_CHANGE_DIALOG_FLOWS

PositionChangeDialogFlowValue

type PositionChangeDialogFlowValue = (typeof POSITION_CHANGE_DIALOG_FLOWS)[PositionChangeDialogFlowKey]

PowerMeter

type PowerMeter = { last?: { snap?: { stats?: { power_w?: number } } } }

PowerModeTableRow

type PowerModeTableRow = { minerType: string count: number power: string [mode: string]: string | number }

PowerModeTimelineChartData

type PowerModeTimelineChartData = { labels: string[] datasets: PowerModeTimelineDataset[] }

PowerModeTimelineChartProps

Props for PowerModeTimelineChart.

type PowerModeTimelineChartProps = Partial<{ /** Initial power-mode entries (each with start/end ts + mode). */ data: PowerModeTimelineEntry[] /** Streaming updates appended to the initial data. */ dataUpdates: PowerModeTimelineEntry[] /** Show a loading skeleton instead of…

PowerModeTimelineDataset

type PowerModeTimelineDataset = { label: string data: Array<{ x: [number, number]; y: string | undefined }> color: string }

PowerModeTimelineEntry

type PowerModeTimelineEntry = { ts?: number power_mode_group_aggr?: Record<string, string> status_group_aggr?: Record<string, string> [key: string]: unknown }

PresetItem

type PresetItem = { label: string value: DateRange }

PressureThresholds

type PressureThresholds = { CRITICAL_LOW: number MEDIUM_LOW: number NORMAL?: number MEDIUM_HIGH: number CRITICAL_HIGH: number [key: string]: unknown }

ProductionCostChartProps

type ProductionCostChartProps = { costLog: ReadonlyArray<CostTimeSeriesEntry> btcPriceLog: ReadonlyArray<BtcPriceTimeSeriesEntry> dateRange: FinancialDateRange | null isLoading?: boolean }

ProfileMenuItem

type ProfileMenuItem = { label: string onSelect: () => void /** Render as a destructive action (red). */ danger?: boolean /** Optional leading icon. */ icon?: ReactNode /** Optional secondary line under the label (e.g. "Current: Europe/Podgorica"). */ descriptio

ProfileMenuProps

type ProfileMenuProps = { /** Items rendered in the dropdown, top-to-bottom. Defaults to a single "Sign out" item. */ items: ProfileMenuItem[] /** Optional user label rendered at the top of the dropdown (e.g. an email). */ user?: ReactNode /** Override the trigge…

PumpItem

type PumpItem = { enabled?: boolean index: number }

RadioGroupProps

type RadioGroupProps = { /** * Layout orientation * @default 'vertical' */ orientation?: 'horizontal' | 'vertical' /** * Remove gap between radio items * @default false */ noGap?: boolean /** * Custom className for the group */ className?: string } & ComponentPr

RadioProps

type RadioProps = { /** * Size variant of the radio * @default 'md' */ size?: ComponentSize /** * Color variant when checked * @default 'default' */ color?: ComponentColor /** * Border radius variant (full makes it circular) * @default 'full' */ radius?: Bo

RangeKey

type RangeKey = keyof typeof RANGES

RangeSelectorOption

type RangeSelectorOption = { label: string value: string }

RangeSelectorProps

type RangeSelectorProps = { options: RangeSelectorOption[] value: string onChange: (value: string) => void className?: string style?: CSSProperties buttonClassName?: string }

RangeValue

type RangeValue = (typeof RANGES)[RangeKey]

RawCsvRow

type RawCsvRow = { part: string; model: string; "miner model": string; "serial num": string; mac: string; status: string; location: string; comment: string; }

RBACControlSettingsProps

type RBACControlSettingsProps = { users: SettingsUser[] roles: RoleOption[] rolePermissions: Record<string, Record<string, PermLevel>> permissionLabels: Record<string, string> canWrite: boolean isLoading?: boolean onCreateUser: (data: { name: string; email: string; role:

RepairAction

A single repair action within a batch. params[0] carries the part-change payload.

type RepairAction = Partial<{ params: RepairActionParam[] }>

RepairActionParam

Shape of a single inner repair action recorded inside a batch action. params[0] holds the part-change payload the sub-row reads.

type RepairActionParam = Partial<{ comment: string id: string rackId: string info: { parentDeviceId: string | null } }>

RepairBatchAction

A repair batch action. Its params are the individual repair actions (part swaps, comments, etc.) grouped under one log entry.

type RepairBatchAction = Partial<{ params: RepairAction[] }>

RepairDevice

Minimal device record consumed by RepairLogChangesSubRow. The parent fetches these (e.g. via the things API) and passes them in as props.

type RepairDevice = Partial<{ id: string rack: string info: Partial<{ serialNum: string macAddress: string }> }>

RepairLogChangesSubRowProps

type RepairLogChangesSubRowProps = { /** * The repair batch action whose part changes should be displayed. */ batchAction: RepairBatchAction /** * Devices referenced by the batch action, pre-fetched by the parent. */ devices: RepairDevice[] /** * Show a spinner while the pa…

ReportTimeFrameSelectorProps

type ReportTimeFrameSelectorProps = Pick< ReportTimeFrameSelectorState, 'presetTimeFrame' | 'dateRange' | 'setPresetTimeFrame' | 'setDateRange' >

ReportTimeFrameSelectorState

type ReportTimeFrameSelectorState = { start: Date end: Date presetTimeFrame: number | null dateRange: [Date, Date] setPresetTimeFrame: (value: number | null) => void setDateRange: (value: [Date, Date]) => void }

RequireAuthProps

type RequireAuthProps = { /** Rendered when a token is present. */ children: ReactNode /** Rendered when no token is present — typically `<Navigate to="/signin" />`. */ fallback: ReactNode /** * When true (default), the current location is persisted to sessionSto…

ResponseCodeKey

type ResponseCodeKey = keyof typeof RESPONSE_CODE

ResponseCodeValue

type ResponseCodeValue = (typeof RESPONSE_CODE)[ResponseCodeKey]

RevenueChartProps

Props for RevenueChart; pass pre-fetched data and optional legend layout overrides.

type RevenueChartProps = Partial<{ data: RevenueDataItem[] isLoading: boolean siteList: (string | SiteItem)[] legendPosition: Position legendAlign: 'start' | 'center' | 'end' }>

RevenueChartViewModel

type RevenueChartViewModel = { /** Chart-ready series input — pass to `toBarChartData` in the component layer. */ chartInput: ToBarChartDataInput /** Resolved display unit: `'₿'` (BTC) or `'Sats'` depending on value scale. */ currencyUnit: string }

RevenueDataItem

A single time-period revenue record; reserved keys plus one numeric value per site ID.

type RevenueDataItem = { timeKey: string period: string timestamp: number [key: string]: unknown }

RevenueMultiplierKey

type RevenueMultiplierKey = keyof typeof REVENUE_MULTIPLIER

RevenueSummaryLogEntry

type RevenueSummaryLogEntry = { ts: number revenueBTC: number feesBTC: number revenueUSD: number feesUSD: number btcPrice: number powerW: number consumptionMWh: number hashrateMhs: number energyCostsUSD: number operationalCostsUSD: number totalCostsUSD: number ebitdaSe

RevenueSummaryResponse

type RevenueSummaryResponse = FinanceResponse<RevenueSummaryLogEntry, RevenueSummaryTotals>

RevenueSummaryTotals

type RevenueSummaryTotals = { totalRevenueBTC: number totalRevenueUSD: number totalFeesBTC: number totalFeesUSD: number totalCostsUSD: number totalConsumptionMWh: number avgCostPerMWh: number | null avgRevenuePerMWh: number | null avgBtcPrice: number | null avgCurtai

RgbColor

type RgbColor = { r: number; g: number; b: number }

RouteKey

type RouteKey = keyof typeof ROUTE

RouteTitleKey

type RouteTitleKey = keyof typeof ROUTE_TITLES_MAP

RouteTitleValue

type RouteTitleValue = (typeof ROUTE_TITLES_MAP)[RouteTitleKey]

RouteValue

type RouteValue = (typeof ROUTE)[RouteKey]

SecondaryLabel

type SecondaryLabel = { title: string value: string | number }

SelectProps

type SelectProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Root> & { /** * Show a clear button when a value is selected * @default false */ allowClear?: boolean }

SelectSize

type SelectSize = 'sm' | 'md' | 'lg'

SelectTriggerProps

type SelectTriggerProps = ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & { /** * Size of the select trigger * - `sm`: Small (32px height) * - `md`: Medium (36px height) * - `lg`: Large/Big (40px height) * @default 'lg' */ size?: SelectSize /** * Visual…

SelectVariant

type SelectVariant = 'default' | 'colored'

SettingsDashboardProps

type SettingsDashboardProps = { dangerActions?: ActionButtonProps[] headerControlsProps?: HeaderControlsSettingsProps rbacControlProps?: RBACControlSettingsProps importExportProps?: ImportExportSettingsProps featureFlagsProps?: FeatureFlagsSettingsProps showFeatureFlag

SeverityColorKey

type SeverityColorKey = keyof typeof SEVERITY_COLORS

SeverityKey

type SeverityKey = keyof typeof SEVERITY

SeverityLevelKey

type SeverityLevelKey = keyof typeof SEVERITY_LEVELS

SeverityLevelValue

type SeverityLevelValue = (typeof SEVERITY_LEVELS)[SeverityLevelKey]

SeverityValue

type SeverityValue = (typeof SEVERITY)[SeverityKey]

SidebarCallbacks

type SidebarCallbacks = Partial<{ onClose: VoidFunction onExpandedChange: (expanded: boolean) => void onItemClick: (item: SidebarMenuItem) => void }>

SidebarMenuItem

type SidebarMenuItem = SidebarMenuItemBase & SidebarMenuItemOptions

SidebarMenuItemBase

type SidebarMenuItemBase = { id: string label: string }

SidebarMenuItemOptions

type SidebarMenuItemOptions = Partial<{ disabled: boolean icon: React.ReactNode items: SidebarMenuItem[] }>

SidebarOptions

type SidebarOptions = Partial<{ activeId: string expanded: boolean visible: boolean overlay: boolean className: string defaultExpanded: boolean header: React.ReactNode }>

SidebarProps

type SidebarProps = SidebarOptions & SidebarCallbacks & { items: SidebarMenuItem[] }

SignInGoogleButtonProps

type SignInGoogleButtonProps = Omit<ButtonProps, 'onClick' | 'children'> & { /** * Base URL of the OAuth backend (no trailing slash). Click navigates to * `${oauthBaseUrl}/oauth/google`. */ oauthBaseUrl: string /** Override the visible button label. */ label?: string /*…

SingleStatCardVariant

type SingleStatCardVariant = 'primary' | 'secondary' | 'tertiary' | 'highlighted'

SiteItem

A site reference used to resolve site IDs in the data to display names.

type SiteItem = { id: string name?: string }

SiteOverviewDetailsDataOptions

type SiteOverviewDetailsDataOptions = { pdus?: Pdu[] connectedMiners?: ListThingsDevice[] connectedMinersData?: Partial<ContainerInfo[]> containerHashRate?: string actualMinersCount?: number isLoading?: boolean }

SitePowerConsumptionSlice

type SitePowerConsumptionSlice = { data: Array<{ ts: number; consumption: number }> nominalValue: number | null isLoading: boolean error?: unknown }

SiteStatsBarProps

type SiteStatsBarProps = { /** Site label rendered in the header row. */ title: string /** Current site-level power consumption, in watts (or whatever `powerUnit` says). */ power?: number /** Display unit for `power` — defaults to `kW`. */ powerUnit?: string /** A…

SkeletonBlockProps

type SkeletonBlockProps = Partial<{ circle: boolean className: string width: number | string height: number | string borderRadius: number | string }>

SocketBorderColorKey

type SocketBorderColorKey = keyof typeof SOCKET_BORDER_COLOR

SocketProps

type SocketProps = { /** Current in amperes */ current_a?: number | null /** Power in watts */ power_w?: number | null /** Whether socket is enabled */ enabled?: boolean /** Socket number/index */ socket?: number | null /** Whether socket is selected */ sele

SparePartDetailsRecord

A spare part's display attributes, rendered by SparePartDetails. Extra keys are allowed.

type SparePartDetailsRecord = { code?: string; type?: string; site?: string; serialNum?: string; macAddress?: string; [key: string]: unknown; }

SparePartSubTypesModalPartType

A selectable part type shown as a tab in the subtypes modal.

type SparePartSubTypesModalPartType = { value: string; label: string; }

SparePartSubTypesModalProps

Props for SparePartSubTypesModal; the active part type is controlled by the caller.

type SparePartSubTypesModalProps = { isOpen: boolean; onClose: VoidFunction; partTypes: SparePartSubTypesModalPartType[]; activePartTypeId: string; onPartTypeChange: (id: string) => void; subTypes: string[]; onAddSubType: (name: string) => Promise<{ error?: string } | void>…

SpinnerProps

type SpinnerProps = { /** * Size variant of the spinner * @default 'md' */ size?: ComponentSize /** * Color variant of the spinner * @default 'primary' */ color?: 'primary' | 'secondary' /** * Whether to display in fullscreen mode * @default false */ fullScre

StagingEnvType

type StagingEnvType = typeof STAGING_ENV

StatItem

type StatItem = { name?: string value?: number | string unit?: string }

StatItemType

type StatItemType = 'ERROR' | 'SUCCESS'

StatKey

type StatKey = typeof STAT_REALTIME | typeof STAT_5_MINUTES | typeof STAT_3_HOURS

StatsFrequencyMhz

type StatsFrequencyMhz = { avg: number chips: ChipData[] [key: string]: unknown }

StatsTemperatureC

type StatsTemperatureC = { avg: number min: number max: number chips: TempChipData[] [key: string]: unknown }

Status

type Status = 'idle' | 'loading' | 'success' | 'error'

StatusVariant

Status variants for state indication Used for badges, notifications, and status indicators

type StatusVariant = 'success' | 'processing' | 'error' | 'warning' | 'default' | 'idle'

SubsidyFeesLogEntry

type SubsidyFeesLogEntry = { ts: number blockReward: number blockTotalFees: number avgFeesSatsVByte?: number | null }

SubsidyFeesResponse

type SubsidyFeesResponse = FinanceResponse<SubsidyFeesLogEntry, SubsidyFeesTotals>

SubsidyFeesTotals

type SubsidyFeesTotals = { totalBlockReward: number totalBlockTotalFees: number avgBlockReward: number | null avgBlockTotalFees: number | null }

SupplyLiquidBoxContainerSettings

type SupplyLiquidBoxContainerSettings = { thresholds?: Record<string, UnknownRecord> }

SupplyLiquidBoxProps

type SupplyLiquidBoxProps = { data?: Device containerSettings?: SupplyLiquidBoxContainerSettings | null }

SwitchProps

type SwitchProps = { /** * Size variant of the switch * @default 'md' */ size?: ComponentSize /** * Color variant when checked * @default 'default' */ color?: ComponentColor /** * Border radius variant * @default 'none' */ radius?: BorderRadius /** * Custom…

TableColorKey

type TableColorKey = keyof typeof TABLE_COLORS

TagFilterBarProps

type TagFilterBarProps = { filterTags: string[] localFilters: AlertLocalFilters onSearchTagsChange: (tags: string[]) => void onLocalFiltersChange: (filters: AlertLocalFilters) => void /** * Site-specific overrides for the "type" filter children. * If provided, the…

TagInputDropdownProps

type TagInputDropdownProps = { /** Filtered options to display */ filteredOptions: TagInputOption[] /** Current tags (selected values) - use to show selected state in custom dropdown */ selectedTags: string[] /** Index of the currently highlighted option (for keyboard…

TagInputOption

type TagInputOption = string | { value: string; label: string; disabled?: boolean }

TagInputProps

type TagInputProps = { /** * Controlled tags (array of tag values) */ value?: string[] /** * Callback when tags change (add/remove) */ onTagsChange?: (tags: string[]) => void /** * Callback when input value changes (typing). Receives current input value. Usefu…

TagInputRef

type TagInputRef = { /** Clear the input value programmatically */ clearInputValue: VoidFunction /** Focus the input */ focus: VoidFunction /** Blur the input */ blur: VoidFunction /** Get current input value */ getInputValue: () => string }

TagProps

type TagProps = { /** * Color variant of the tag * @default 'dark' */ color?: 'dark' | 'red' | 'green' | 'amber' | 'blue' /** * Custom className for the root element */ className?: string /** * Children content */ children?: ReactNode } & ComponentPropsWi

Tank

type Tank = { cold_temp_c: number enabled: boolean color?: string flash?: boolean tooltip?: string }

TankRowPressure

type TankRowPressure = Partial<{ value: number flash: boolean color: string tooltip: string }>

TankRowProps

type TankRowProps = { label: string temperature: number unit: string oilPumpEnabled: boolean waterPumpEnabled: boolean color: string flash?: boolean tooltip?: string pressure: TankRowPressure }

TanksBoxPressure

type TanksBoxPressure = { value?: number flash?: boolean color?: string tooltip?: string }

TanksBoxProps

type TanksBoxProps = { data?: { oil_pump: Tank[] water_pump: WaterPump[] pressure: TanksBoxPressure[] } }

TempChipData

type TempChipData = { index: number max?: number min?: number avg?: number }

TemperatureColorKey

type TemperatureColorKey = keyof typeof TEMPERATURE_COLORS

TextAlign

Text alignment options Used by Typography component

type TextAlign = 'left' | 'center' | 'right' | 'justify'

TextAreaProps

type TextAreaProps = ComponentProps<'textarea'> & { /** * Optional label displayed above the textarea */ label?: string /** * HTML id for the textarea. Required when using label for accessibility. */ id?: string /** * Validation error message. When provided, d…

Theme

type Theme = 'light' | 'dark' | 'system'

ThemeConfig

type ThemeConfig = { defaultTheme?: Theme storageKey?: string }

ThingActionValue

type ThingActionValue = (typeof THING_ACTIONS)[number]

ThresholdBarChartInput

type ThresholdBarChartInput = { labels: string[] series: Array<{ label: string values: number[] color?: string stack?: string }> }

ThresholdLineChartData

type ThresholdLineChartData = { series: ThresholdLineChartSeries[] thresholds?: ThresholdLineChartThreshold[] }

ThresholdLineChartInput

type ThresholdLineChartInput = { series: Array<{ label: string points: Array<{ ts: number; value: number }> color?: string }> constants?: Array<{ label: string value: number color?: string style?: { borderDash?: number[] } }> }

ThresholdLineChartPoint

type ThresholdLineChartPoint = { value: number timestamp: string | number }

ThresholdLineChartProps

type ThresholdLineChartProps = Partial<{ title: string unit: string height: number /** When true, uses a taller default height (360px). */ isTall: boolean className: string emptyMessage: string isLegendVisible: boolean data: ThresholdLineChartData yTicksFormatter: (valu

ThresholdLineChartSeries

type ThresholdLineChartSeries = { label: string color?: string fill?: boolean points: ThresholdLineChartPoint[] }

ThresholdLineChartThreshold

type ThresholdLineChartThreshold = { label: string value: number color?: string }

TimeFormatType

type TimeFormatType = typeof TIME_FORMAT

TimeframeControlsDateRange

type TimeframeControlsDateRange = { start: number end: number }

TimeframeControlsOnRangeChange

type TimeframeControlsOnRangeChange = ( range: [Date, Date], options: Partial<{ year: number; month: number; period: string }>, ) => void

TimeframeControlsProps

type TimeframeControlsProps = Partial<{ hint: string onReset: VoidFunction showResetButton: boolean isWeekSelectVisible: boolean isMonthSelectVisible: boolean layout: 'horizontal' | 'stacked' dateRange: TimeframeControlsDateRange timeframeType: TimeframeTypeValue | nul

TimeframeTypeKey

type TimeframeTypeKey = keyof typeof TIMEFRAME_TYPE

TimeframeTypeValue

type TimeframeTypeValue = (typeof TIMEFRAME_TYPE)[TimeframeTypeKey]

TimeframeWeekFlatContentProps

type TimeframeWeekFlatContentProps = { visibleWeeks: ReturnType<typeof weeksOfMonth> }

TimeframeWeekTreeContentProps

type TimeframeWeekTreeContentProps = { timezone: string selectedYear: number selectedMonth: number }

TimeInterval

type TimeInterval = { start: number end: number }

TimeKey

type TimeKey = keyof typeof TIME

TimelineChartData

type TimelineChartData = { labels: string[] datasets: TimelineChartDataset[] }

TimelineChartDataPoint

type TimelineChartDataPoint = { x: [number, number] y: string | undefined }

TimelineChartDataset

type TimelineChartDataset = { label: string data: TimelineChartDataPoint[] borderColor?: string[] backgroundColor?: string[] color?: string }

TimelineChartProps

type TimelineChartProps = { initialData: TimelineChartData newData?: TimelineChartData skipUpdates?: boolean range?: ChartRange axisTitleText?: AxisTitleText isLoading?: boolean title?: string height?: number }

TimelineItemData

type TimelineItemData = { item: AlarmItemData dot: ReactNode children: ReactNode }

TimelineOption

type TimelineOption = { value: string label: string disabled?: boolean }

TimelineSelectorProps

type TimelineSelectorProps = { /** Currently selected timeline value (e.g. `'1m'`, `'5m'`). */ value: string /** Called whenever the user picks a new option. */ onChange: (next: string) => void /** * Available options — defaults to {@link getTimelineOptions}. Pass a c…

TimeRangeFormatted

type TimeRangeFormatted = { start: string end: string formatted: string }

TimeRangeType

type TimeRangeType = (typeof TimeRangeTypes)[keyof typeof TimeRangeTypes]

TimeSelection

type TimeSelection = { end: Date start: Date year: number month?: number label?: string }

TIncidentRowProps

type TIncidentRowProps = { id: string title: string body: string subtitle: string severity: TIncidentSeverity onClick?: (id: string) => void }

ToastPosition

type ToastPosition = | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center'

ToastVariant

type ToastVariant = NotificationVariant

TransactionEntry

type TransactionEntry = { changed_balance?: number satoshis_net_earned?: number fees_colected_satoshis?: number mining_extra?: { tx_fee?: number } }

TransactionSum

type TransactionSum = { revenueBTC: number feesBTC: number }

TypographyColor

Typography color options (includes muted variant)

type TypographyColor = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'muted'

TypographyProps

type TypographyProps = { /** * Typography variant * @default 'body' */ variant?: 'heading1' | 'heading2' | 'heading3' | 'body' | 'secondary' | 'caption' /** * Text size * @default undefined (uses variant default) */ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl

UnitData

type UnitData = { last?: UnitLast type?: string info?: UnitInfo [key: string]: unknown }

UnitKey

type UnitKey = keyof typeof UNITS

UnitLabel

type UnitLabel = 'decimal' | 'k' | 'M' | 'G' | 'T' | 'P'

UnitValue

type UnitValue = (typeof UNITS)[UnitKey]

UpdateExistedActionsParams

type UpdateExistedActionsParams = { actionType: string pendingSubmissions: PendingSubmission[] selectedDevices: Device[] }

UseCabinetDetailResult

type UseCabinetDetailResult = { /** Whether a cabinet is selected at all. */ hasSelection: boolean /** Cabinet display title (`LV Cabinet 1` / transformer title). */ title: string /** The non-root powermeter reading rows. */ powerMeters: CabinetReadingRow[] /** The cab…

UseContainerThresholdsProps

type UseContainerThresholdsProps = { data: UnknownRecord onSave?: (params: { data: UnknownRecord }) => Promise<void> }

UseContainerThresholdsReturn

type UseContainerThresholdsReturn = { // State thresholds: UnknownRecord parameters: UnknownRecord isEditing: boolean isSaving: boolean isSiteLoading: boolean isSettingsLoading: boolean // Methods handleThresholdChange: (thresholdType: string, key: string, value: string | nu…

UseContainerWidgetsDataOptions

type UseContainerWidgetsDataOptions = UseContainerWidgetsOptions

UseContainerWidgetsDataResult

type UseContainerWidgetsDataResult = { /** Card-ready data for every container, one entry per widget card. */ containers: ContainerWidgetItem[] isLoading: boolean /** Human-readable message when either underlying query errors, else undefined. */ errorMessage?: string /** True…

UseCostSummaryOptions

type UseCostSummaryOptions = UseFinancialDateRangeOptions & { query?: CostSummaryQueryResult }

UseDeviceAlarmsResult

type UseDeviceAlarmsResult = { /** Timeline items ready for the detail panel's "Active Alarms" box. */ alarmsDataItems: TimelineItemData[] /** Total number of alarms across the selected devices. */ alarmsCount: number }

UseEbitdaOptions

type UseEbitdaOptions = UseFinancialDateRangeOptions & { ebitda?: EbitdaResponse | undefined isLoading?: boolean fetchErrors?: string[] }

UseEnergyBalanceOptions

type UseEnergyBalanceOptions = { data?: EnergyBalanceResponse isLoading?: boolean fetchErrors?: string[] dateRange: FinancialDateRange | null availablePowerMW: number }

UseEnergyReportSiteInput

type UseEnergyReportSiteInput = { consumptionError?: unknown tailLogLoading?: boolean containersLoading?: boolean consumptionLoading?: boolean consumptionFetching?: boolean nominalConfigLoading?: boolean dateRange: EnergyReportDateRange containers?: EnergyReportContainer

UseEnergyReportSiteResult

type UseEnergyReportSiteResult = { isLoading: boolean powerModeData: PowerModeTableRow[] refetchSnapshotData?: VoidFunction containers: EnergyReportContainer[] tailLogData: EnergyReportTailLogItem[][] tailLogHead: EnergyReportTailLogItem | undefined miningUnitCards: Energ

UseExplorerDataOptions

type UseExplorerDataOptions = { /** Which tab's things to fetch and shape. */ deviceType: DeviceExplorerDeviceType /** Free-text search chips from the toolbar (OR-matched against each row). */ searchTags?: string[] /** Active filter selections from the toolbar cascader…

UseExplorerDataResult

type UseExplorerDataResult = { /** Rows for the active tab, after search + filter, ready for `<DeviceExplorer>`. */ data: DeviceExplorerDeviceData[] /** Autocomplete options for the search box, derived from the fetched rows. */ searchOptions: DeviceExplorerSearchOptio

UseExplorerSelectionParams

type UseExplorerSelectionParams = { /** The active Explorer tab — decides which `devicesStore` setters fire. */ deviceType: DeviceExplorerDeviceType /** All rows currently shown for the tab (the search/filter output). */ rows: DeviceExplorerDeviceData[] /** The table's row…

UseExplorerSelectionResult

type UseExplorerSelectionResult = { /** The resolved selected rows (post search/filter). */ selectedRows: DeviceExplorerDeviceData[] /** Whether the container detail snapshots are still loading. */ isLoading: boolean }

UseExplorerThingDetailResult

type UseExplorerThingDetailResult = { /** Whether an id was provided at all — drives the "select a row" empty state. */ hasSelection: boolean /** Display name of the selected thing (container name / pos / id fallback). */ title: string /** Raw status string, or `offline`. Em…

UseFinancialDateRangeOptions

type UseFinancialDateRangeOptions = { defaultPeriod?: PeriodValue timezone?: string }

UseFinancialDateRangeResult

type UseFinancialDateRangeResult = { dateRange: FinancialDateRange | null handleRangeChange: ( dates: [Date, Date] | null, rangeOptions?: FinancialRangeChangeOptions, ) => void onDateRangeReset: () => void datePicker: ReactElement }

UseFormFieldReturn

Hook to access the current form field's state and generated IDs. Must be used inside a &lt;FormField&gt; and &lt;FormItem&gt;.

type UseFormFieldReturn = ReturnType<UseFormGetFieldState<FieldValues>> & { id: string name: string formItemId: string formDescriptionId: string formMessageId: string }

UseFormResetOptions

type UseFormResetOptions = { /** * The form instance from useForm() */ form: UseFormReturn<TFieldValues> /** * Optional callback called before reset */ onBeforeReset?: VoidFunction /** * Optional callback called after reset */ onAfterReset?: VoidFunction }

UseFormResetReturn

type UseFormResetReturn = { /** * Reset the form to default values */ resetForm: VoidFunction /** * Whether the form has been modified from its default values */ isDirty: boolean }

UseHashBalanceDerived

type UseHashBalanceDerived = { isEmpty: boolean periodType: PeriodType showCombinedCostChart: boolean isNetworkHashrateEmpty: boolean costMetrics: HashBalanceMetric[] showWeeklyCostDisclaimer: boolean filteredLog: HashRevenueLogEntry[] revenueMetrics: HashBalanceMetri

UseHashBalanceInput

type UseHashBalanceInput = { log?: HashRevenueLogEntry[] currency: HashBalanceCurrency dateRange: FinancialDateRange data?: HashRevenueResponse | null timeframeType?: TimeframeTypeValue | null }

UseHashrateOptions

type UseHashrateOptions = { /** * Result of fetching the v2 `/auth/metrics/hashrate?groupBy=...` endpoint. * * Wire whichever data layer you use (RTK Query, TanStack Query, fixtures) * and pass the result here - this hook never fetches itself. */ query?: HashrateQu

UseHashrateResult

type UseHashrateResult = { log: HashrateGroupedLog | undefined isLoading: boolean error: unknown }

UseListViewFiltersParams

type UseListViewFiltersParams = { site?: string selectedType?: string availableDevices: AvailableDevices typeFiltersForSite: CascaderOption[] }

UseMinerDetailResult

type UseMinerDetailResult = { /** The selected miners (post bridge dispatch). */ miners: Device[] /** The first selected miner — drives the info / chips cards. */ headMiner?: Device /** Label/value rows for {@link MinerInfoCard}. */ infoItems: InfoItem[] /** The head…

UseOperationsDashboardInput

Aggregate DI input for useOperationsDashboard.

type UseOperationsDashboardInput = Partial<{ hashrate: OperationsTrendInput consumption: OperationsTrendInput efficiency: OperationsTrendInput miners: OperationsMinersInput }>

UseOperationsDashboardResult

Full view-model returned by useOperationsDashboard.

type UseOperationsDashboardResult = { hashrate: OperationsTrendViewModel consumption: OperationsTrendViewModel efficiency: OperationsTrendViewModel miners: OperationsMinersViewModel }

UsePoolConfigsResult

type UsePoolConfigsResult = { pools: PoolSummary[] poolIdMap: Record<string, PoolSummary> isLoading: boolean error: unknown }

UseSiteOverviewDetailsDataResult

type UseSiteOverviewDetailsDataResult = { actualMinersCount: number containerHashRate: string pdus: Pdu[] segregatedPduSections: Record<string, Pdu[]> minersHashmap: Record<string, MinerData> connectedMiners: ListThingsDevice[] | undefined containerInfo: ContainerInfo connectedM

UseSubsidyFeesInput

type UseSubsidyFeesInput = { log?: SubsidyFeesLogEntry[] data?: SubsidyFeesResponse | null dateRange: FinancialDateRange | null }

UseTimeframeControlsParams

type UseTimeframeControlsParams = Pick< TimeframeControlsProps, 'dateRange' | 'timeframeType' | 'onRangeChange' | 'onTimeframeTypeChange' > & { isWeekSelectVisible: boolean /** Both month + week selects visible → week nested tree. */ weekTree: boolean }

ValidateCSVRecordsOptions

type ValidateCSVRecordsOptions = { checkDuplicateDelegate: (params: { rackId: string; serialNum: string[]; macAddress?: string[]; }) => Promise<unknown[]>; rackIds: Record<string, string>; validLocations?: string[]; subPartTypes?: Record<string, Set<string>>; minerModels?

ValueUnit

Shared type definitions for utility functions

type ValueUnit = { value: number | string | null unit: string realValue: number }

WaterPump

type WaterPump = { enabled: boolean }

WebappUrlsKey

type WebappUrlsKey = keyof typeof WEBAPP_URLS

WebappUrlsValue

type WebappUrlsValue = (typeof WEBAPP_URLS)[WebappUrlsKey]

WeekData

type WeekData = { start: Date end: Date label?: string bucketYear?: number bucketMonth?: number disabled?: boolean }

WeekRangeCacheEntry

type WeekRangeCacheEntry = { start: Date end: Date disabled?: boolean }

WeightedAverageResult

type WeightedAverageResult = { avg: number totalWeight: number weightedValue: number }

WeightedDataPoint

type WeightedDataPoint = { value: number weight: number }

WidgetTopRowProps

type WidgetTopRowProps = { title: string power?: number unit?: string statsErrorMessage?: string | ErrorWithTimestamp[] | null alarms?: AlarmsMap className?: string }

On this page

PackageTypesActionButtonConfirmationActionButtonPropsActionNameKeyActionNameValueActionStatusTypeKeyActionStatusTypeValueActionTypeKeyActionTypeValueActiveIncidentsCardPartialPropsActiveTimeframeActualEbitdaCardPropsAddSparePartFormValuesAddSparePartModalPropsAddUserModalPropsAlarmItemDataAlarmsBellButtonCountsAlarmsBellButtonPropsAlertAlertActionsAlertConfirmationModalPropsAlertLocalFiltersAlertSeverityAlertsPropsAlertsTableTitlePropsAlertTableRecordApiErrorKeyApiErrorValueApiResponseAppHeaderPropsAreaChartPropsArrowIconPropsAssignPoolModalPropsAttentionLevelColorKeyAuthCapKeyAuthCapValueAverageDowntimeChartDataAverageDowntimeChartPropsAvgAllInCostChartPropsAvgAllInCostDataPointAvgHistoryRangeKeyAvgHistoryRangeValueAxisTitleTextBadgeColorsBadgePropsBadgeStatusBarChartConstantBarChartInputBarChartItemBorderColorKeyBarChartLineBarChartPropsBarChartSeriesBatchActionTypeKeyBatchActionTypeValueBatchMoveSparePartBatchMoveSparePartsModalPropsBitcoinPriceCardPropsBitcoinProducedCardPropsBitcoinProducedChartPropsBitcoinProductionCostCardPropsBitMainControlsTabPropsBitMainHydroSettingsPropsBitMainImmersionSummaryBoxContainerSettingsBitMainImmersionSummaryBoxPropsBorderRadiusBreadcrumbItemBreadcrumbsPropsBtcAveragePricePropsBtcPriceTimeSeriesEntryBuildAvgAllInCostInputArgsBuildBarChartOptionsInputBuildProductionCostInputArgsBulkAddSparePartsModalPropsButtonIconPositionButtonPropsButtonSizeButtonVariantCabinetDetailCardPropsCabinetReadingRowCardBodyPropsCardComponentCardFooterPropsCardHeaderPropsCardPropsCascaderOptionCascaderPropsCascaderValueChangeConfirmationModalPropsChartColorKeyChartContainerPropsChartDataByDeviceChartDataPointChartEntryChartExpandActionPropsChartLabelKeyChartLabelValueChartLegendOpacityKeyChartLegendOpacityValueChartLegendPositionChartPerformanceKeyChartRangeChartStatsFooterItemChartStatsFooterPropsChartTitleKeyChartTitleValueChartTooltipConfigChartTypeKeyChartTypeValueCheckboxPropsCheckboxSizeChipDataColorKeyColorValueColorVariantComponentColorComponentSizeConfirmDeleteSparePartModalPropsConfirmDeleteSparePartModalSparePartConsumptionNominalValueTypeContainerContainerActionValueContainerActivityDataContainerActivityErrorContainerChartCombinationOptionContainerChartsDatasetBorderColorResolverContainerChartsPropsContainerControlsBoxPropsContainerDetailPlaceholderPropsContainerDetailPropsContainerDetailTabContainerInfoContainerLastContainerPduDataContainerPosInfoContainerSnapContainerSpecificContainerStatsContainerWidgetCardPropsContainerWidgetItemContainerWidgetsPropsCostChartsPropsCostChromePropsCostContentPropsCostMetricsPropsCostPropsCostQueryStatePropsCostSummaryDisplayMetricsCostSummaryLogEntryCostSummaryMetricCostSummaryMonetaryTotalsCostSummaryQueryParamsCostSummaryQueryResultCostSummaryResponseCostSummaryTotalsCostSummaryViewModelCostTimeSeriesEntryCostViewModelPropsCreateIconOptionsCrossThingTypeKeyCrossThingTypeValueCSVRecordCurrencyKeyCurrencyUnitCurrencyValueCurrentAlertsPropsCurtailmentResultDashboardDateRangeDashboardDateRangePickerPropsDashboardPropsDashboardStatsDataLabelPropsDataTablePropsDateFormatTypeDatePickerPropsDateRangeDateRangeKeyDateRangePickerPropsDateRangeValueDateTimeFormatTypeDetailLegendItemDetailLegendPropsDeviceDeviceAttributeViewDeviceDataDeviceExplorerDeviceDataDeviceExplorerDeviceTypeDeviceExplorerFilterOptionDeviceExplorerPropsDeviceExplorerSearchOptionDeviceInfoDeviceLastDeviceStatusDialogContentPropsDialogHeaderPropsDisplayModeDividerOrientationDividerPropsDividerTypeDoughnutChartDatasetDoughnutChartPropsEbitdaChartsPropsEbitdaDisplayMetricsEbitdaHodlCardPropsEbitdaLogEntryEbitdaMetricsPropsEbitdaPropsEbitdaQueryParamsEbitdaResponseEbitdaSellingCardPropsEbitdaTotalsEbitdaViewModelEfficiencyDateRangeEfficiencyMinerTypeTailLogEfficiencyMinerTypeViewPropsEfficiencyMinerUnitTailLogEfficiencyMinerUnitViewPropsEfficiencySiteViewPropsEfficiencyTabValueEmptyStateImageEmptyStatePropsEmptyStateSizeEnabledDisableTogglePropsEnergyBalanceCostChartsPropsEnergyBalanceCostMetricsPropsEnergyBalanceDataEnergyBalanceLogEntryEnergyBalancePowerChartPropsEnergyBalancePropsEnergyBalanceQueryParamsEnergyBalanceResponseEnergyBalanceRevenueChartsPropsEnergyBalanceRevenueMetricsPropsEnergyBalanceTabEnergyBalanceTotalsEnergyBalanceViewModelEnergyCostChartInputEnergyCostChartPropsEnergyCostMetricsEnergyMetricCardPropsEnergyReportBarChartLegacyEnergyReportBarViewPropsEnergyReportContainerEnergyReportDateRangeEnergyReportGroupedBarViewPropsEnergyReportMinerSliceConfigEnergyReportMinerTypeViewPropsEnergyReportMinerUnitViewPropsEnergyReportMinerViewSliceEnergyReportPropsEnergyReportSiteViewPropsEnergyReportTabValueEnergyReportTailLogItemEnergyReportTailLogNumericBucketEnergyRevenueChartPropsEnergyRevenueMetricsEntryDataErrorBoundaryPropsErrorCardPropsErrorCardVariantErrorWithTimestampExplorerDetailPropsExplorerLayoutPropsExplorerRowSelectionExplorerThingDetailRowExportButtonPropsExportFormatExtraTooltipDataFeatureFlagsSettingsPropsFieldNameFilterSelectionTupleFinancePeriodFinanceQueryParamsFinanceResponseFinanceRevenueLogEntryFinanceRevenueQueryParamsFinanceRevenueResponseFinanceRevenueTotalsFinancialDateRangeFinancialRangeChangeOptionsFlexAlignFormatHashBalanceValueOptionsFormCascaderPropsFormCheckboxPropsFormDatePickerPropsFormInputPropsFormPropsFormRadioGroupPropsFormRadioOptionFormSelectOptionFormSelectPropsFormSwitchPropsFormTagInputPropsFormTextAreaPropsGaugeChartPropsGetAlertsTableColumnsOptionsGetColumnConfigParamsGlobalConfigHashBalanceCostPanelPropsHashBalanceCurrencyHashBalanceMetricHashBalancePanelPropsHashBalancePropsHashBalanceRevenuePanelPropsHashrateBarChartDataHashrateDateRangeHashrateFilterOptionHashrateGroupByHashrateGroupedLogHashrateGroupedLogEntryHashrateGroupedQueryDataHashrateLabelDivisorKeyHashrateLabelDivisorValueHashrateMinerTypeViewPropsHashrateMiningUnitViewPropsHashratePropsHashrateQueryStateHashrateSeriesHashrateSeriesPointHashrateSiteViewChartDataHashrateSiteViewPropsHashrateTabValueHashrateUnitHashRevenueLogEntryHashRevenueResponseHashRevenueTotalsHeaderConsumptionBoxPropsHeaderControlsSettingsPropsHeaderEfficiencyBoxPropsHeaderHashrateBoxPropsHeaderMinersBoxPropsHeaderPreferencesHeaderStatsBarPropsHeatmapCellHeatmapCellContextHeatmapKeyHeatmapLegendPropsHeatmapModeKeyHeatmapModeValueHeatmapPropsHighlightedValuePropsHistoricalAlertsPropsHistoricalAlertsRangeIconPropsImportExportSettingsPropsIndicatorColorIndicatorPropsInputPropsInputSizeLabeledCardNavigateOptionsLabeledCardPropsLabelToIgnoreValueLegendItemLightWeightLineChartPropsLineChartCardDataLineChartCardDatasetLineChartCardPropsLineChartDataLineDataPointLineDatasetLineSeriesApiLoaderPropsLocalFiltersLogActivityIconPropsLogDataLogDotPropsLogFormattedAlertDataLogItemPropsLogPaginationLogRowPropsLogsCardPropsLvCabinetRecordManageUserModalPropsMaxUnitValueKeyMaxUnitValueValueMaybeMdkWordmarkPropsMdkWordmarkSizeMetricsConsumptionGroupByMetricsConsumptionGroupedLogEntryMetricsConsumptionGroupedResponseMetricsConsumptionGroupedSummaryMetricsConsumptionGroupSummaryMetricsConsumptionLogEntryMetricsConsumptionQueryParamsMetricsConsumptionResponseMetricsConsumptionSummaryMetricsEfficiencyLogEntryMetricsEfficiencyResponseMetricsEfficiencySummaryMetricsHashrateGroupByMetricsHashrateGroupedLogEntryMetricsHashrateGroupedResponseMetricsHashrateGroupedSummaryMetricsHashrateLogEntryMetricsHashrateQueryParamsMetricsHashrateResponseMetricsHashrateSummaryMetricsIntervalMetricsMinerStatusLogEntryMetricsMinerStatusResponseMetricsMinerStatusSummaryMetricsPowerModeLogEntryMetricsPowerModeQueryParamsMetricsPowerModeResponseMetricsPowerModeSummaryMetricsPowerModeTimelineLogEntryMetricsPowerModeTimelineQueryParamsMetricsPowerModeTimelineResponseMetricsPowerModeTimelineSegmentMetricsQueryParamsMetricsResponseMetricsTemperatureContainerStatsMetricsTemperatureLogEntryMetricsTemperatureQueryParamsMetricsTemperatureResponseMetricsTemperatureSummaryMetricValuePropsMicroBTWidgetBoxPropsMinerActionValueMinerConfigMinerDataMinerDeviceSnapshotMinerHashrateMinerHashrateMhsMinerInfoMinerPowerModeTimelineMinerRecordMinerRowMinersActivityVariantMinerSpecificStatsMinersStatusChartDataMinersStatusDatasetMinersSummaryBoxPropsMinersSummaryParamMinerStatsMiningPoolsPanelPropsMinMaxAvgFormattedMinMaxAvgPropsMinMaxAvgValuesMonthlyEbitdaChartPropsMovementDataMovementDetailsModalPropsMovementDetailsViewModelMovementDeviceMovementDeviceViewMovementSideViewMoveSparePartModalPropsMoveSparePartModalSparePartMultiLevelSelectRootPropsMultiLevelSelectSectionPropsMultiLevelSelectTriggerPropsMultiSelectOptionMultiSelectPropsMultiSelectSizeMultiSelectVariantNavigationBlockItemNotFoundPagePropsNotificationOptionsNotificationVariantNullableOilTempThresholdsOperationalDashboardChartIdOperationalDashboardMinersInputOperationalDashboardPropsOperationalDashboardTrendInputOperationalMinersStatusChartPropsOperationalTrendChartPropsOperationsEfficiencyMinerTypeInputOperationsEfficiencyMinerTypeResultOperationsEfficiencyMinerUnitInputOperationsEfficiencyMinerUnitResultOperationsEfficiencyPropsOperationsEnergyChartPropsOperationsEnergyCostChartDataOperationsEnergyCostChartPropsOperationsMinersInputOperationsMinersStatusPointOperationsMinersViewModelOperationsTrendInputOperationsTrendPointOperationsTrendViewModelOptionalOsTypeKeyOsTypeValueOverviewChartResultPaginatedResponsePaginationParamsPaginationPropsParameterSettingParameterSettingsParsedAlertEntryPduPduSocketPendingActionLikePendingActionsButtonPropsPendingSubmissionPeriodKeyPeriodValuePollingIntervalTypePoolConfigDataPoolDetailItemPoolDetailsCardPropsPoolEndpointPoolEndpointFormValuesPoolManagerMinerExplorerPropsPoolManagerPoolsPropsPoolManagerPropsPoolManagerSiteOverviewDetailsPropsPoolManagerSitesOverviewPropsPoolManagerViewPoolSummaryPosHistoryEntryPositionPositionChangeDialogFlowKeyPositionChangeDialogFlowValuePowerMeterPowerModeTableRowPowerModeTimelineChartDataPowerModeTimelineChartPropsPowerModeTimelineDatasetPowerModeTimelineEntryPresetItemPressureThresholdsProductionCostChartPropsProfileMenuItemProfileMenuPropsPumpItemRadioGroupPropsRadioPropsRangeKeyRangeSelectorOptionRangeSelectorPropsRangeValueRawCsvRowRBACControlSettingsPropsRepairActionRepairActionParamRepairBatchActionRepairDeviceRepairLogChangesSubRowPropsReportTimeFrameSelectorPropsReportTimeFrameSelectorStateRequireAuthPropsResponseCodeKeyResponseCodeValueRevenueChartPropsRevenueChartViewModelRevenueDataItemRevenueMultiplierKeyRevenueSummaryLogEntryRevenueSummaryResponseRevenueSummaryTotalsRgbColorRouteKeyRouteTitleKeyRouteTitleValueRouteValueSecondaryLabelSelectPropsSelectSizeSelectTriggerPropsSelectVariantSettingsDashboardPropsSeverityColorKeySeverityKeySeverityLevelKeySeverityLevelValueSeverityValueSidebarCallbacksSidebarMenuItemSidebarMenuItemBaseSidebarMenuItemOptionsSidebarOptionsSidebarPropsSignInGoogleButtonPropsSingleStatCardVariantSiteItemSiteOverviewDetailsDataOptionsSitePowerConsumptionSliceSiteStatsBarPropsSkeletonBlockPropsSocketBorderColorKeySocketPropsSparePartDetailsRecordSparePartSubTypesModalPartTypeSparePartSubTypesModalPropsSpinnerPropsStagingEnvTypeStatItemStatItemTypeStatKeyStatsFrequencyMhzStatsTemperatureCStatusStatusVariantSubsidyFeesLogEntrySubsidyFeesResponseSubsidyFeesTotalsSupplyLiquidBoxContainerSettingsSupplyLiquidBoxPropsSwitchPropsTableColorKeyTagFilterBarPropsTagInputDropdownPropsTagInputOptionTagInputPropsTagInputRefTagPropsTankTankRowPressureTankRowPropsTanksBoxPressureTanksBoxPropsTempChipDataTemperatureColorKeyTextAlignTextAreaPropsThemeThemeConfigThingActionValueThresholdBarChartInputThresholdLineChartDataThresholdLineChartInputThresholdLineChartPointThresholdLineChartPropsThresholdLineChartSeriesThresholdLineChartThresholdTimeFormatTypeTimeframeControlsDateRangeTimeframeControlsOnRangeChangeTimeframeControlsPropsTimeframeTypeKeyTimeframeTypeValueTimeframeWeekFlatContentPropsTimeframeWeekTreeContentPropsTimeIntervalTimeKeyTimelineChartDataTimelineChartDataPointTimelineChartDatasetTimelineChartPropsTimelineItemDataTimelineOptionTimelineSelectorPropsTimeRangeFormattedTimeRangeTypeTimeSelectionTIncidentRowPropsToastPositionToastVariantTransactionEntryTransactionSumTypographyColorTypographyPropsUnitDataUnitKeyUnitLabelUnitValueUpdateExistedActionsParamsUseCabinetDetailResultUseContainerThresholdsPropsUseContainerThresholdsReturnUseContainerWidgetsDataOptionsUseContainerWidgetsDataResultUseCostSummaryOptionsUseDeviceAlarmsResultUseEbitdaOptionsUseEnergyBalanceOptionsUseEnergyReportSiteInputUseEnergyReportSiteResultUseExplorerDataOptionsUseExplorerDataResultUseExplorerSelectionParamsUseExplorerSelectionResultUseExplorerThingDetailResultUseFinancialDateRangeOptionsUseFinancialDateRangeResultUseFormFieldReturnUseFormResetOptionsUseFormResetReturnUseHashBalanceDerivedUseHashBalanceInputUseHashrateOptionsUseHashrateResultUseListViewFiltersParamsUseMinerDetailResultUseOperationsDashboardInputUseOperationsDashboardResultUsePoolConfigsResultUseSiteOverviewDetailsDataResultUseSubsidyFeesInputUseTimeframeControlsParamsValidateCSVRecordsOptionsValueUnitWaterPumpWebappUrlsKeyWebappUrlsValueWeekDataWeekRangeCacheEntryWeightedAverageResultWeightedDataPointWidgetTopRowProps