"use client" import { Logo } from "@ui/assets/Logo" import { useAuth } from "@lib/auth-context" import { Plus, SearchIcon, Settings, Home, Code2, Sun, ExternalLink, MenuIcon, MessageCircleIcon, LifeBuoy, LayoutGrid, ChevronRight, } from "lucide-react" import { Button } from "@ui/components/button" import { cn } from "@lib/utils" import { dmSansClassName } from "@/lib/fonts" import { GraphIcon, IntegrationsIcon } from "@/components/integration-icons" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@ui/components/dropdown-menu" import { Tooltip, TooltipContent, TooltipTrigger } from "@ui/components/tooltip" 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 { useLocalStorageUsername } from "@hooks/use-local-storage-username" import { UserProfileMenu } from "@/components/user-profile-menu" 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 onOpenSearch?: () => void } export function Header({ onAddMemory, onOpenSearch }: HeaderProps) { const { user, isRestoring } = useAuth() const { selectedProjects, setSelectedProjects } = useProject() const router = useRouter() const isMobile = useIsMobile() const [feedbackOpen, setFeedbackOpen] = useQueryState( "feedback", feedbackParam, ) const { viewMode, setViewMode } = useViewMode() const handleFeedback = () => setFeedbackOpen(true) const localStorageUsername = useLocalStorageUsername() const displayName = user?.displayUsername || (isRestoring ? localStorageUsername : "") || user?.name || user?.email?.split("@")[0] || "" const userName = displayName ? `${displayName.split(" ")[0]}'s` : "My" return (
Home Developer console supermemory.ai {!isMobile && ( <> )}
{!isMobile && (
Home
{( [ { mode: "integrations" as const, label: "Integrations", icon: IntegrationsIcon, }, { mode: "graph" as const, label: "Graph", icon: GraphIcon }, { mode: "list" as const, label: "Memories", icon: LayoutGrid, }, ] as const ).map(({ mode, label, icon: Icon }) => ( ))}
Chat
)}
{isMobile ? ( <> Add memory void setViewMode("dashboard")} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > Home 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 void setViewMode("graph")} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > Graph onOpenSearch?.()} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > Search void setViewMode("list")} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > Memories void setViewMode("chat")} className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2" > 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 ) : ( <> Add memory (C) Search (⌘K) )}
setFeedbackOpen(false)} />
) } export function PublicHeader() { return (

Your AI

supermemory

Connect your tools, search everything.

) }