"use client"; import Image from "next/image"; import React from "react"; import { motion } from "framer-motion"; import { Avatar, Box, IconButton, Stack, TextField, Tooltip, Typography, alpha, useTheme, } from "@mui/material"; import CheckRounded from "@mui/icons-material/CheckRounded"; import CloseRounded from "@mui/icons-material/CloseRounded"; import EditRounded from "@mui/icons-material/EditRounded"; import EditNoteRounded from "@mui/icons-material/EditNoteRounded"; import HistoryRounded from "@mui/icons-material/HistoryRounded"; type AgentHeaderProps = { sessionTitle?: string; canRenameSessionTitle?: boolean; isHydrating?: boolean; isStreaming: boolean; isHistoryOpen: boolean; onHistoryToggle: () => void; onRenameSessionTitle?: (title: string) => void; onNewConversation: () => void; onClose: () => void; }; export const AgentHeader = ({ sessionTitle, canRenameSessionTitle = false, isHydrating = false, isStreaming, isHistoryOpen, onHistoryToggle, onRenameSessionTitle, onNewConversation, onClose, }: AgentHeaderProps) => { const theme = useTheme(); const displayTitle = sessionTitle?.trim() || "新对话"; const [isEditingTitle, setIsEditingTitle] = React.useState(false); const [draftTitle, setDraftTitle] = React.useState(sessionTitle?.trim() || ""); React.useEffect(() => { if (!isEditingTitle) { setDraftTitle(sessionTitle?.trim() || ""); } }, [isEditingTitle, sessionTitle]); const handleStartEditing = () => { if (!canRenameSessionTitle || isHydrating || isStreaming) return; setDraftTitle(sessionTitle?.trim() || ""); setIsEditingTitle(true); }; const handleCancelEditing = () => { setDraftTitle(sessionTitle?.trim() || ""); setIsEditingTitle(false); }; const handleConfirmEditing = () => { const normalizedTitle = draftTitle.trim(); if (!normalizedTitle) return; onRenameSessionTitle?.(normalizedTitle); setIsEditingTitle(false); }; return ( TJWater Agent {isEditingTitle ? ( setDraftTitle(event.target.value)} size="small" autoFocus placeholder="请输入对话标题" onKeyDown={(event) => { if (event.key === "Enter") { event.preventDefault(); handleConfirmEditing(); } else if (event.key === "Escape") { event.preventDefault(); handleCancelEditing(); } }} sx={{ flex: 1, minWidth: 0, "& .MuiOutlinedInput-root": { padding: "6px 8px", bgcolor: "transparent", borderRadius: 1.5, transition: "all 0.2s ease-in-out", "&.Mui-focused": { bgcolor: alpha("#fff", 0.6), boxShadow: `0 2px 10px ${alpha("#000", 0.05)}`, }, "& fieldset": { borderColor: "transparent", }, "&:hover fieldset": { borderColor: alpha(theme.palette.primary.main, 0.2), }, "&.Mui-focused fieldset": { borderColor: alpha(theme.palette.primary.main, 0.5), borderWidth: "1px", }, }, "& .MuiInputBase-input": { padding: 0, height: "auto", fontSize: "1.25rem", fontWeight: 800, letterSpacing: -0.3, lineHeight: "1.2", background: `linear-gradient(90deg, #01579b, #00838f)`, WebkitBackgroundClip: "text", WebkitTextFillColor: "transparent", } }} /> ) : ( {displayTitle} {canRenameSessionTitle ? ( ) : null} )} ); };