"use client" import * as React from "react" import { BadgeCheck, Bell, ChevronsUpDown, CreditCard, LogOut, Sparkles, } from "lucide-react" import { Avatar, AvatarFallback, AvatarImage, } from "@/components/ui/avatar" import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from "@/components/ui/sidebar" import { useAuthActions } from "@convex-dev/auth/react" export function NavUser({ user, }: { user: { name: string email: string avatar: string } }) { const { isMobile } = useSidebar() const { signOut } = useAuthActions() const seed = React.useMemo(() => { const base = user.email || user.name || ""; return base.trim() || "user"; }, [user.email, user.name]); const avatarUrl = user.avatar || `https://api.dicebear.com/7.x/bottts/svg?seed=${encodeURIComponent(seed)}`; const fallbackText = React.useMemo(() => { const base = user.name || user.email || ""; const trimmed = base.trim(); if (!trimmed) return ""; const parts = trimmed.split(/\s+/); if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase(); return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase(); }, [user.name, user.email]) return ( {fallbackText}
{user.name} {user.email}
{fallbackText}
{user.name} {user.email}
Upgrade to Pro Account Billing Notifications signOut()}> Log out
) }