64b4c39c92
Restructures the application to integrate prompt management directly into the agent details view. Removes the separate "Prompts" page and its associated components. Agents are now the root route, and clicking an agent navigates to a detail page where its system prompt, AI model, and version history can be managed.
74 lines
2.6 KiB
TypeScript
74 lines
2.6 KiB
TypeScript
import { useState } from "react";
|
|
import { NavLink } from "react-router-dom";
|
|
import { Bot, TestTube, Menu, X } from "lucide-react";
|
|
import { Button } from "@/components/ui/button";
|
|
import { ThemeToggle } from "./ThemeToggle";
|
|
|
|
const menuItems = [
|
|
{ title: "Agentes", url: "/", icon: Bot },
|
|
{ title: "Testar Prompt", url: "/test", icon: TestTube },
|
|
];
|
|
|
|
export function MobileNav() {
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
|
|
return (
|
|
<>
|
|
{/* Mobile Header */}
|
|
<header className="md:hidden fixed top-0 left-0 right-0 z-50 bg-background border-b border-border px-4 py-3 flex items-center justify-between">
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-8 h-8 rounded-lg bg-gradient-to-br from-primary to-secondary flex items-center justify-center">
|
|
<span className="text-xs font-bold text-white">HX</span>
|
|
</div>
|
|
<h1 className="text-lg font-bold gradient-text">HGTX PromptLab</h1>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<ThemeToggle />
|
|
<Button
|
|
variant="ghost"
|
|
size="icon"
|
|
onClick={() => setIsOpen(!isOpen)}
|
|
>
|
|
{isOpen ? <X className="h-5 w-5" /> : <Menu className="h-5 w-5" />}
|
|
</Button>
|
|
</div>
|
|
</header>
|
|
|
|
{/* Mobile Menu Overlay */}
|
|
{isOpen && (
|
|
<>
|
|
<div
|
|
className="md:hidden fixed inset-0 bg-background/80 backdrop-blur-sm z-40"
|
|
onClick={() => setIsOpen(false)}
|
|
/>
|
|
<nav className="md:hidden fixed top-[57px] left-0 right-0 bg-background border-b border-border z-40 animate-fade-in">
|
|
<div className="px-4 py-2 space-y-1">
|
|
{menuItems.map((item) => {
|
|
const Icon = item.icon;
|
|
return (
|
|
<NavLink
|
|
key={item.title}
|
|
to={item.url}
|
|
end
|
|
onClick={() => setIsOpen(false)}
|
|
className={({ isActive }) =>
|
|
`flex items-center gap-3 px-4 py-3 rounded-lg transition-all ${
|
|
isActive
|
|
? "bg-sidebar-accent text-sidebar-accent-foreground"
|
|
: "text-foreground hover:bg-accent"
|
|
}`
|
|
}
|
|
>
|
|
<Icon className="w-5 h-5" />
|
|
<span className="font-medium">{item.title}</span>
|
|
</NavLink>
|
|
);
|
|
})}
|
|
</div>
|
|
</nav>
|
|
</>
|
|
)}
|
|
</>
|
|
);
|
|
}
|