import { Button, StatusBadge, type StatusTone } from "@nodedc/ui-react"; import type { DevicePluginConnectionProps } from "@mission-core/plugin-sdk"; import { K1AcquisitionPipeline } from "./components/K1AcquisitionPipeline"; import { K1Diagnostics } from "./components/K1Diagnostics"; import { K1Metrics } from "./components/K1Metrics"; import { K1ProvisioningPipeline } from "./components/K1ProvisioningPipeline"; import { isConfirmedLiveState, isSourceRuntimeBusy, recoverableAcquisition, sourceStatusLabel, } from "./lifecycle"; import { localizeRuntimeMessage } from "./messages"; import { phaseLabel, phaseTone } from "./presentation"; import { useXgridsK1Controller } from "./runtimeContext"; export function XgridsK1Connection({ model, host }: DevicePluginConnectionProps) { const controller = useXgridsK1Controller(); const { state, error, refresh, clearError } = controller; const confirmedLive = isConfirmedLiveState(state); const sourceRuntimeBusy = isSourceRuntimeBusy(state); const preparedAcquisition = recoverableAcquisition(state)?.state === "prepared"; const sourceLabel = sourceStatusLabel(state); const relevantAcquisitionFailed = state?.source_mode !== "replay" && state?.acquisition?.state === "failed"; const sourceTone: StatusTone = state?.phase === "error" || relevantAcquisitionFailed ? "danger" : confirmedLive || state?.source_mode === "replay" ? "success" : sourceRuntimeBusy || preparedAcquisition ? "warning" : "neutral"; const connectionPhaseLabel = sourceRuntimeBusy || preparedAcquisition ? sourceLabel : phaseLabel(state?.phase); const connectionPhaseTone = sourceRuntimeBusy || preparedAcquisition ? sourceTone : phaseTone(state?.phase); return (
{error ? ( ) : null}
XGRIDS K1 · PLUGIN UI

Подключение {model.displayName}

BLE/Wi‑Fi provisioning и acquisition pipeline принадлежат этому device plugin; Control Station предоставляет только host slot и переход в пространственную сцену.

{connectionPhaseLabel} {localizeRuntimeMessage(state?.message) || "Ожидаем состояние локального контура."}
); }