jim800121chen c54f16fca0 Initial commit: visionA monorepo with local-tool subproject
local-tool/: visionA-local desktop app
- M1: Wails shell + Go server + Next.js UI + Mock mode (macOS dmg ready)
- M2: i18n (zh-TW/en) + Settings 4-tab refactor
- M3: Embedded Python 3.12 runtime (python-build-standalone) + KneronPLUS wheels
- M4: Windows Inno Setup script (build on Windows runner)
- M5: Linux AppImage script + udev rule (build on Linux runner)
- M6: ffmpeg (GPL, pending legal review) + yt-dlp bundled
- Lifecycle: watchServer health check, fatal native dialog,
            Wails IPC raise endpoint, stale process cleanup

.autoflow/: full PRD / Design Spec / Architecture / Testing docs
            (4 rounds tri-party discussion + cross review)
.github/workflows/: macOS / Windows / Linux build CI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:10:38 +08:00

39 lines
1.2 KiB
TypeScript

'use client';
import { cn } from '@/lib/utils';
import { useTranslation } from '@/lib/i18n';
import type { DeviceStatus } from '@/types/device';
const statusColors: Record<string, string> = {
detected: 'bg-gray-400',
connecting: 'bg-yellow-400',
connected: 'bg-green-500',
flashing: 'bg-yellow-500',
inferencing: 'bg-blue-500',
error: 'bg-red-500',
disconnected: 'bg-gray-400',
};
export function DeviceStatusBadge({ status }: { status: DeviceStatus }) {
const { t } = useTranslation();
const statusLabels: Record<string, string> = {
detected: t('devices.status.detected'),
connecting: t('devices.status.connecting'),
connected: t('devices.status.connected'),
flashing: t('devices.status.flashing'),
inferencing: t('devices.status.inferencing'),
error: t('devices.status.error'),
disconnected: t('devices.status.disconnected'),
};
const color = statusColors[status] || statusColors.disconnected;
const label = statusLabels[status] || statusLabels.disconnected;
return (
<div className="flex items-center gap-2">
<div className={cn('h-2.5 w-2.5 rounded-full', color)} />
<span className="text-sm">{label}</span>
</div>
);
}