diff --git a/components/layout/Header.tsx b/components/layout/Header.tsx new file mode 100644 index 0000000..b7c2813 --- /dev/null +++ b/components/layout/Header.tsx @@ -0,0 +1,103 @@ +import Link from "next/link" +import { Button } from "@/components/ui/button" +import { Badge } from "@/components/ui/badge" +import { Shield, ArrowLeft } from "lucide-react" + +interface HeaderProps { + variant?: 'default' | 'dark' | 'dashboard' + showAuth?: boolean + showBackButton?: boolean + backHref?: string + backText?: string + onAuthClick?: () => void +} + +export default function Header({ + variant = 'default', + showAuth = true, + showBackButton = false, + backHref = "/", + backText = "Retour à l'accueil", + onAuthClick +}: HeaderProps) { + const getHeaderStyles = () => { + switch (variant) { + case 'dark': + return "border-b border-gray-700 bg-gray-800/80 backdrop-blur-sm" + case 'dashboard': + return "border-b border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900" + default: + return "border-b bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm sticky top-0 z-50 transition-colors duration-300" + } + } + + const getLogoStyles = () => { + switch (variant) { + case 'dark': + return { + shield: "h-8 w-8 text-blue-400", + text: "text-2xl font-bold text-gray-100", + badge: "ml-2 bg-gray-700 text-gray-200" + } + case 'dashboard': + return { + shield: "h-8 w-8 text-blue-600 dark:text-blue-400", + text: "text-xl font-bold text-gray-900 dark:text-gray-100", + badge: "ml-2" + } + default: + return { + shield: "h-8 w-8 text-blue-600 dark:text-blue-400", + text: "text-2xl font-bold text-gray-900 dark:text-gray-100", + badge: "ml-2" + } + } + } + + const logoStyles = getLogoStyles() + + return ( +
+
+ + + DocV + + By 4NK + + + +
+ {showBackButton && ( + + + {backText} + + )} + + {showAuth && variant === 'default' && ( + + )} +
+
+
+ ) +}