Files
ogrechkoandClaude Sonnet 5 130c5382cd Initial commit: TopSysOps site + admin panel
Multi-page public site (Next.js), Node/Express backend with Postgres,
and Vite admin/account app, restructured from a single-page layout
into dedicated service, promotions, cases, about, FAQ, and blog pages
for SEO.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013otXCiTZsxdZ4SJKZ9wUky
2026-08-25 23:12:16 +03:00

24 lines
747 B
React

function cx(...args) {
return args.filter(Boolean).join(' ');
}
const COLORS = {
ok: 'bg-emerald-500',
warn: 'bg-amber-500',
danger: 'bg-rose-500',
neutral: 'bg-slate-400',
};
export default function StatusDot({ tone = 'neutral', pulse, label, mono }) {
const dot = COLORS[tone] || COLORS.neutral;
return (
<span className="inline-flex items-center gap-2">
<span className="relative flex h-2 w-2">
{pulse && <span className={cx('animate-ping absolute inline-flex h-full w-full rounded-full opacity-60', dot)} />}
<span className={cx('relative inline-flex rounded-full h-2 w-2', dot)} />
</span>
{label && <span className={cx('text-xs', mono && 'font-mono')}>{label}</span>}
</span>
);
}