import { type CSSProperties } from 'react'; import type { ActiveBuff } from '../game/types'; import { BUFF_META } from './buffMeta'; interface BuffStatusStripProps { buffs: ActiveBuff[]; nowMs: number; } const rowStyle: CSSProperties = { display: 'flex', gap: 4, flexWrap: 'wrap', alignItems: 'center', width: '100%', maxWidth: '100%', minWidth: 0, pointerEvents: 'none', }; const chipStyle: CSSProperties = { display: 'inline-flex', alignItems: 'center', gap: 3, padding: '2px 6px', borderRadius: 6, fontSize: 10, fontWeight: 700, color: '#fff', textShadow: '0 1px 2px rgba(0,0,0,0.85)', flexShrink: 0, }; function liveRemainingMs(buff: ActiveBuff, nowMs: number): number { if (buff.expiresAtMs != null) { return Math.max(0, buff.expiresAtMs - nowMs); } return Math.max(0, buff.remainingMs); } /** Read-only active buff indicators (no activation controls). */ export function BuffStatusStrip({ buffs, nowMs }: BuffStatusStripProps) { const live = buffs .map((b) => ({ ...b, remainingMs: liveRemainingMs(b, nowMs) })) .filter((b) => b.remainingMs > 0); if (live.length === 0) return null; return (