techprotrade's picture
download
raw
1.59 kB
import { motion } from "framer-motion";
import { Shield, Plus, Command } from "lucide-react";
import { ModelSwitcher, ModelType } from "./ModelSwitcher";
interface ChatHeaderProps {
onNewChat: () => void;
selectedModel: ModelType;
onModelChange: (model: ModelType) => void;
onOpenCommand?: () => void;
}
export const ChatHeader = ({ onNewChat, selectedModel, onModelChange, onOpenCommand }: ChatHeaderProps) => {
return (
<motion.header
initial={{ opacity: 0, y: -10 }}
animate={{ opacity: 1, y: 0 }}
className="flex items-center justify-between px-4 py-2.5 border-b border-border bg-glass-cyber sticky top-0 z-10"
>
<div className="flex items-center gap-3">
<div className="w-8 h-8 rounded-lg bg-gradient-cyber flex items-center justify-center glow-cyan animate-pulse-cyan">
<Shield size={16} className="text-primary-foreground" />
</div>
<div>
<h1 className="font-heading font-bold text-sm text-gradient-cyber tracking-wide">
NEXUS-AI
</h1>
<p className="text-[9px] text-muted-foreground font-mono tracking-widest">CHAT MODE</p>
</div>
</div>
<div className="flex items-center gap-1.5">
<ModelSwitcher selectedModel={selectedModel} onModelChange={onModelChange} />
<button
onClick={onNewChat}
className="p-2 rounded-lg bg-secondary hover:bg-secondary/80 text-foreground transition-colors"
title="New Chat"
>
<Plus size={16} />
</button>
</div>
</motion.header>
);
};

Xet Storage Details

Size:
1.59 kB
·
Xet hash:
e9db267601db087a6236fe1023047cab7a9e2fa8b9f7c35ec0b802cd83992be7

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.