UNPKG

@gv-sh/specgen-user

Version:

[![Version](https://img.shields.io/badge/version-0.14.1-blue.svg)](https://github.com/gv-sh/specgen-user)

98 lines (89 loc) 3.31 kB
// src/components/layout/Header.jsx import React, { useState } from 'react'; import { Button } from '../ui/button'; import { Menu, X, Sliders, Home, Info, Library } from 'lucide-react'; import { ThemeToggle } from '../theme/theme-toggle'; import { Tooltip } from '../ui/tooltip'; import { Link, useLocation } from 'react-router-dom'; import { cn } from '../../lib/utils'; const Header = ({ onShowTour }) => { const location = useLocation(); const [isMenuOpen, setIsMenuOpen] = useState(false); const toggleMenu = () => { setIsMenuOpen(!isMenuOpen); }; const closeMenu = () => { setIsMenuOpen(false); }; const menuItems = [ { name: 'Home', path: '/', icon: <Home className="h-4 w-4 mr-2" /> }, { name: 'Story Library', path: '/library', icon: <Library className="h-4 w-4 mr-2" /> }, { name: 'Create Story', path: '/parameters', icon: <Sliders className="h-4 w-4 mr-2" /> }, { name: 'About', path: '/about', icon: <Info className="h-4 w-4 mr-2" /> }, ]; return ( <header className="fixed top-0 left-0 right-0 z-50 w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60"> <div className="container flex h-14 max-w-screen-2xl items-center"> <div className="flex items-center w-full"> {/* Logo with Tooltip */} <Tooltip content="Kannada for “Infinite Futures” yet to unfold." position="right" > <Link to="/" className="font-semibold text-lg"> Anantabhavi </Link> </Tooltip> <div className="ml-auto flex items-center"> <ThemeToggle className="mr-4" /> {/* Hamburger Menu Button */} <Button variant="ghost" size="icon" onClick={toggleMenu} > {isMenuOpen ? <X className="h-5 w-5" /> : <Menu className="h-5 w-5" />} </Button> </div> </div> </div> {/* Slide-out Menu */} {isMenuOpen && ( <div className="fixed inset-0 top-14 z-40 bg-transparent" onClick={closeMenu} > <div className={cn( "absolute top-0 right-0 w-64 h-auto max-h-[calc(100vh-4rem)] overflow-auto", "bg-card border rounded-b-lg shadow-lg p-2", "transform transition-transform duration-300 ease-in-out", "origin-top-right" )} onClick={(e) => e.stopPropagation()} > <div className="space-y-1"> {menuItems.map((item) => ( <Link key={item.path} to={item.path} onClick={closeMenu} className={cn( "flex items-center w-full p-2 rounded-md text-sm", location.pathname === item.path ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:bg-accent/50" )} > {item.icon} {item.name} </Link> ))} </div> </div> </div> )} </header> ); }; export default Header;