| import { useState } from "react"; |
| import { Link } from "react-router-dom"; |
| import { Menu, Terminal, X, Home, BookOpen, Coffee, BadgeAlert, ChevronRight } from "lucide-react"; |
| import { Button } from "@/components/ui/button"; |
| import { useCategories } from "@/client/hooks/usePlugin"; |
| import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet"; |
|
|
| interface NavbarProps { |
| onCategorySelect?: (category: string | null) => void; |
| selectedCategory?: string | null; |
| } |
|
|
| export function Navbar({ onCategorySelect, selectedCategory }: NavbarProps) { |
| const [isOpen, setIsOpen] = useState(false); |
| const { categories } = useCategories(); |
|
|
| const handleCategoryClick = (category: string) => { |
| onCategorySelect?.(category); |
| setIsOpen(false); |
| }; |
|
|
| return ( |
| <nav className="border-b border-white/10 bg-black/50 backdrop-blur-xl sticky top-0 z-50"> |
| <div className="max-w-7xl mx-auto px-4 py-4"> |
| <div className="flex items-center justify-between"> |
| {/* Logo */} |
| <Link to="/" className="text-xl font-bold text-white flex items-center gap-2"> |
| <Terminal className="w-5 h-5 text-primary" /> |
| DitzzyAPI |
| </Link> |
| |
| {/* Desktop Navigation */} |
| <div className="hidden md:flex items-center gap-6"> |
| <Link |
| to="/" |
| className="text-gray-400 hover:text-white transition flex items-center gap-2" |
| > |
| <Home className="w-4 h-4" /> |
| Home |
| </Link> |
| <Link to="/docs" className="text-purple-400 font-medium flex items-center gap-2"> |
| <BookOpen className="w-4 h-4" /> |
| Documentation |
| </Link> |
| </div> |
| |
| {/* Hamburger Menu - Categories */} |
| <Sheet open={isOpen} onOpenChange={setIsOpen}> |
| <SheetTrigger asChild> |
| <Button variant="ghost" size="icon" className="text-white"> |
| {isOpen ? <X className="w-6 h-6" /> : <Menu className="w-6 h-6" />} |
| </Button> |
| </SheetTrigger> |
| <SheetContent side="right" className="w-80 bg-background border-white/10"> |
| <SheetHeader> |
| <SheetTitle className="text-white">Categories</SheetTitle> |
| </SheetHeader> |
| |
| <div className="mt-6 space-y-2"> |
| {/* All Endpoints */} |
| <button |
| onClick={() => handleCategoryClick("")} |
| className={`w-full flex items-center justify-between px-4 py-3 rounded-lg text-left transition ${ |
| !selectedCategory |
| ? "bg-purple-500/20 text-purple-400 border border-purple-500/50" |
| : "bg-white/5 text-gray-300 hover:bg-white/10" |
| }`} |
| > |
| <span className="font-medium">All Endpoints</span> |
| <ChevronRight className="w-4 h-4" /> |
| </button> |
| |
| {/* Categories */} |
| {categories.map((cat) => ( |
| <button |
| key={cat.name} |
| onClick={() => handleCategoryClick(cat.name)} |
| className={`w-full flex items-center justify-between px-4 py-3 rounded-lg text-left transition ${ |
| selectedCategory === cat.name |
| ? "bg-purple-500/20 text-purple-400 border border-purple-500/50" |
| : "bg-white/5 text-gray-300 hover:bg-white/10" |
| }`} |
| > |
| <span className="capitalize">{cat.name}</span> |
| <div className="flex items-center gap-2"> |
| <span className="text-xs bg-white/10 px-2 py-1 rounded">{cat.count}</span> |
| <ChevronRight className="w-4 h-4" /> |
| </div> |
| </button> |
| ))} |
| </div> |
| |
| {/* Mobile Navigation Links */} |
| <div className="md:hidden mt-8 space-y-2 pt-6 border-t border-white/10"> |
| <Link |
| to="/" |
| onClick={() => setIsOpen(false)} |
| className="flex items-center gap-2 px-4 py-3 rounded-lg text-gray-300 hover:bg-white/10 transition" |
| > |
| <Home className="w-4 h-4" /> |
| Home |
| </Link> |
| <Link |
| to="/docs" |
| onClick={() => setIsOpen(false)} |
| className="flex items-center gap-2 px-4 py-3 rounded-lg text-purple-400 hover:bg-white/10 transition" |
| > |
| <BookOpen className="w-4 h-4" /> |
| Documentation |
| </Link> |
| <a |
| href="https://github.com/OhMyDitzzy/DitzzyAPI/issues" |
| className="flex items-center gap-2 px-4 py-3 rounded-lg text-purple-400 hover:bg-white/10 transition" |
| > |
| <BadgeAlert className="w-4 h-4" /> |
| Having an issue? Report here! |
| </a> |
| <a |
| href="https://saweria.co/DitzzDev" |
| className="flex items-center gap-2 px-4 py-3 rounded-lg text-purple-400 hover:bg-white/10 transition" |
| > |
| <Coffee className="w-4 h-4" /> |
| Treat me to coffee |
| </a> |
| </div> |
| </SheetContent> |
| </Sheet> |
| </div> |
| </div> |
| </nav> |
| ); |
| } |