"use client" import { Logo } from "@ui/assets/Logo" import { Avatar, AvatarFallback, AvatarImage } from "@ui/components/avatar" import { useAuth } from "@lib/auth-context" import { LayoutGridIcon, Plus, SearchIcon, LogOut, Settings, Home, Code2, Sun, ExternalLink, HelpCircle, MenuIcon, MessageCircleIcon, RotateCcw, } from "lucide-react" import { Button } from "@ui/components/button" import { cn } from "@lib/utils" import { dmSansClassName } from "@/lib/fonts" import { Tabs, TabsList, TabsTrigger } from "@ui/components/tabs" import { GraphIcon, IntegrationsIcon } from "@/components/integration-icons" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@ui/components/dropdown-menu" import { authClient } from "@lib/auth" import { useProject } from "@/stores" import { useRouter } from "next/navigation" import Link from "next/link" import { SpaceSelector } from "./space-selector" import { useIsMobile } from "@hooks/use-mobile" import { useOrgOnboarding } from "@hooks/use-org-onboarding" import { FeedbackModal } from "./feedback-modal" import { useViewMode } from "@/lib/view-mode-context" import { useQueryState } from "nuqs" import { feedbackParam } from "@/lib/search-params" interface HeaderProps { onAddMemory?: () => void onOpenChat?: () => void onOpenSearch?: () => void } export function Header({ onAddMemory, onOpenChat, onOpenSearch }: HeaderProps) { const { user } = useAuth() const { selectedProjects, setSelectedProjects } = useProject() const router = useRouter() const isMobile = useIsMobile() const { resetOrgOnboarded } = useOrgOnboarding() const [feedbackOpen, setFeedbackOpen] = useQueryState( "feedback", feedbackParam, ) const isFeedbackOpen = feedbackOpen ?? false const { viewMode, setViewMode } = useViewMode() const handleTryOnboarding = () => { resetOrgOnboarded() router.push("/onboarding?step=input&flow=welcome") } const handleFeedback = () => setFeedbackOpen(true) const displayName = user?.displayUsername || (typeof window !== "undefined" && localStorage.getItem("username")) || (typeof window !== "undefined" && localStorage.getItem("userName")) || "" const userName = displayName ? `${displayName.split(" ")[0]}'s` : "My" return (
Home Developer console supermemory.ai
{!isMobile && ( )}
{!isMobile && ( setViewMode(v === "grid" ? "list" : (v as "graph" | "integrations")) } > Grid Graph Integrations )}
{isMobile ? ( <> Add memory setViewMode("integrations")} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > Integrations Chat with Nova Feedback router.push("/settings")} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > Settings ) : ( <> )} {user && (

{user?.name}

{user?.email}

router.push("/settings")} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > Settings Restart Onboarding Help & Support Discord Discord { authClient.signOut() router.push("/login/new") }} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > Logout
)}
setFeedbackOpen(false)} />
) }