import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import type { HumanPresence } from "@/hooks/use-presence-positions"; const MAX_VISIBLE_AVATARS = 3; interface PlaybackPageIndicatorProps { total: number; current: number; progress: number; onGoTo: (index: number) => void; presenceBySegment?: Map; /** Render only avatars or only tracks. Omit to render both. */ layer?: "avatars" | "tracks"; } export function PlaybackPageIndicator({ total, current, progress, onGoTo, presenceBySegment, layer, }: PlaybackPageIndicatorProps) { if (total === 0) return null; const showAvatars = layer !== "tracks"; const showTracks = layer !== "avatars"; return (
{Array.from({ length: total }, (_, i) => { const presence = presenceBySegment?.get(i); return (
{showAvatars && presence && presence.length > 0 && ( )} {showTracks && ( )}
); })}
); } function SegmentPresenceAvatars({ presence, }: { presence: HumanPresence[]; }) { const visible = presence.slice(0, MAX_VISIBLE_AVATARS); const overflow = presence.length - MAX_VISIBLE_AVATARS; return (
{visible.map((human) => ( {human.emailPrefix.slice(0, 2).toUpperCase()} {human.email} ))} {overflow > 0 && ( +{overflow} )}
); }