- Create lib/tools.tsx as single source of truth for all tool metadata (title, shortTitle, navTitle, description, summary, icon, etc.) - Update AppSidebar to render nav from centralized tools list with descriptions, remove collapse footer button - Update AppHeader with sidebar collapse toggle, tool short title, and app logo; remove breadcrumbs - Update AppPage to auto-resolve tool icon from pathname - Update ToolsGrid/ToolCard to use shared tools data, remove per-card gradients for uniform styling - Add per-tool HTML title via metadata exports (title template in root layout) - Style landing page and 404 headings with primary theme color - Add Toolbox icon to hero CTA, GitFork icon link in footer - Remove footer from error page and "View on Dev" buttons - Extract ColorPage client component for RSC metadata compatibility Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
'use client';
|
|
|
|
import Link from 'next/link';
|
|
import { Menu, X, PanelLeftClose, PanelLeftOpen } from 'lucide-react';
|
|
import { Button } from '@/components/ui/button';
|
|
import { useSidebar } from './SidebarProvider';
|
|
import Logo from '@/components/Logo';
|
|
|
|
export function AppHeader() {
|
|
const { toggle, isOpen, isCollapsed, toggleCollapse } = useSidebar();
|
|
|
|
return (
|
|
<header className="h-16 border-b border-border bg-background/10 backdrop-blur-xl sticky top-0 z-40 flex items-center justify-between px-6 shadow-[0_1px_3px_0_rgb(0_0_0/0.05)]">
|
|
<div className="flex items-center gap-2">
|
|
<Button
|
|
variant="ghost"
|
|
size="icon"
|
|
className="hidden lg:inline-flex text-muted-foreground hover:text-foreground"
|
|
onClick={toggleCollapse}
|
|
>
|
|
{isCollapsed ? (
|
|
<PanelLeftOpen className="h-5 w-5" />
|
|
) : (
|
|
<PanelLeftClose className="h-5 w-5" />
|
|
)}
|
|
</Button>
|
|
<Link href="/" className="lg:hidden shrink-0 ml-2">
|
|
<Logo size={24} />
|
|
</Link>
|
|
</div>
|
|
|
|
<Button
|
|
variant="ghost"
|
|
size="icon"
|
|
className="lg:hidden text-muted-foreground hover:text-foreground"
|
|
onClick={toggle}
|
|
>
|
|
{isOpen ? <X className="h-5 w-5" /> : <Menu className="h-5 w-5" />}
|
|
</Button>
|
|
</header>
|
|
);
|
|
}
|