"use client"; import clsx from "clsx"; import type { PresenceState, User } from "@lynkd/messaging-inbox-sdk"; /* ------------------------------ presence ------------------------------ */ const presenceColor: Record = { active: "var(--c-success)", away: "var(--c-warning)", dnd: "var(--c-danger)", offline: "var(--c-dim)", }; export function PresenceDot({ state, size = 10, ring = "var(--c-surface)", }: { state: PresenceState; size?: number; ring?: string; }) { const filled = state === "active" || state === "dnd"; return ( ); } /* ------------------------------- avatar ------------------------------- */ export function Avatar({ user, size = 36, showPresence = true, rounded = "var(--r-control)", }: { user: Pick & { avatarUrl?: string }; size?: number; showPresence?: boolean; rounded?: string; }) { return ( {user.avatarUrl ? ( // eslint-disable-next-line @next/next/no-img-element {user.name} ) : ( {user.avatarText} )} {showPresence && ( )} ); } /* ------------------------------- badges ------------------------------- */ export function CountBadge({ count, tone = "accent" }: { count: number; tone?: "accent" | "danger" }) { if (!count) return null; return ( {count > 99 ? "99+" : count} ); } export function Chip({ children, tone = "neutral", className, }: { children: React.ReactNode; tone?: "neutral" | "accent" | "success" | "warning" | "danger" | "info"; className?: string; }) { const tones: Record = { neutral: "bg-hover text-muted", accent: "bg-accent-soft text-accent", success: "text-success", warning: "text-warning", danger: "text-danger", info: "text-info", }; const bg: Record = { success: "rgba(62,207,142,0.12)", warning: "rgba(245,181,68,0.12)", danger: "rgba(242,85,90,0.12)", info: "rgba(91,157,255,0.12)", neutral: "", accent: "", }; return ( {children} ); } /* ---------------------------- icon button ----------------------------- */ export function IconButton({ children, label, active, onClick, className, badge, }: { children: React.ReactNode; label: string; active?: boolean; onClick?: () => void; className?: string; badge?: number; }) { return ( ); } /* ------------------------------ tooltip-ish --------------------------- */ export function SectionLabel({ children }: { children: React.ReactNode }) { return (
{children}
); }