"use client" import type { MouseEvent, ReactNode } from "react" import { useEffect, useState } from "react" import { HoverCard, HoverCardContent, HoverCardTrigger, } from "@/components/ui/hover-card" import { Button } from "@/components/ui/button" import { cn } from "@/lib/utils" import { avatarColor, cleanSenderName, resolveSenderEmail, senderInitial, } from "@/lib/sender-display" import { Calendar, ExternalLink, Mail, MessageSquare, UserPlus, Video, } from "lucide-react" import { useCompose } from "@/lib/compose-context" export interface ContactHoverCardProps { /** Champ expéditeur brut (liste, conversation, etc.) */ displayName: string email?: string children: ReactNode className?: string onTriggerClick?: (e: MouseEvent) => void align?: "start" | "center" | "end" side?: "top" | "right" | "bottom" | "left" } export function ContactHoverCard({ displayName, email: emailOverride, children, className, onTriggerClick, align = "start", side = "bottom", }: ContactHoverCardProps) { const { openComposeWithInitial } = useCompose() const [open, setOpen] = useState(false) const name = cleanSenderName(displayName) const email = resolveSenderEmail(displayName, emailOverride) const color = avatarColor(name) useEffect(() => { if (!open) return const close = () => setOpen(false) const opts: AddEventListenerOptions = { capture: true, passive: true } window.addEventListener("scroll", close, opts) window.addEventListener("wheel", close, opts) window.addEventListener("touchmove", close, opts) return () => { window.removeEventListener("scroll", close, opts) window.removeEventListener("wheel", close, opts) window.removeEventListener("touchmove", close, opts) } }, [open]) return ( { onTriggerClick?.(e) }} > {children}
{senderInitial(name)}

{name}

{email}

) }