{/* Header */}
{isZh ? '突破监控' : 'Breakout Monitor'}
{isZh ? 'ETH · LINK · 5 分钟扫描' : 'ETH · LINK · 5m scan'}
{/* Backend offline warning */}
{backendOk === false && (
⚠️ {isZh ? '后端离线,开关暂时不可用' : "Backend offline — toggle won't work"}
)}
{/* Status row: BTC trend + last scan */}
BTC
{btcTrend ? (
{btcTrend}
) : (
—
)}
{lastScan
? (isZh ? `最近信号 ${timeAgo(lastScan.toISOString())}` : `Last signal ${timeAgo(lastScan.toISOString())}`)
: enabled ? (isZh ? '扫描中…' : 'Scanning…') : (isZh ? '已暂停' : 'Paused')
}
{/* Signal list */}
{signals.length === 0 ? (
{enabled
? (isZh ? '· 正在等待信号…' : '· Watching for signals…')
: (isZh ? '· 打开开关后开始监控' : '· Enable the toggle to start watching')}
) : (
{signals.map((s) => (
{/* Top row */}
{symbolLabel(s.symbol)}
{!s.enabled && (
silent
)}
{timeAgo(s.time)}
{/* Metrics grid */}
{[
{ label: isZh ? '价格' : 'Price', value: `$${s.close.toLocaleString(undefined, { maximumFractionDigits: 2 })}`, color: 'var(--ink)' },
{ label: isZh ? '主动买入' : 'Taker Buy', value: `${(s.tbr * 100).toFixed(1)}%`, color: '#22c55e' },
{ label: isZh ? '成交量倍数' : 'Vol ×', value: `${s.vol_mult}×`, color: '#22c55e' },
].map(m => (
))}
{/* Footer */}
{isZh ? `BB squeeze 处于第 ${s.bb_pct} 分位` : `BB squeeze ${s.bb_pct}th pct`} · {s.btc_trend}
))}
)}
)
}