"use client"; import { useCallback, useEffect, useId, useState } from "react"; import { formatRelativeTime } from "../lib/format"; import { BrainIcon } from "../lib/icons"; import type { SessionContext } from "../lib/sessionStorage"; interface ContextPanelProps { isOpen: boolean; onClose: () => void; sessionContext: SessionContext | null; initialContext?: string; onInitialContextChange?: (value: string) => void; isLocked?: boolean; } export default function ContextPanel({ isOpen, onClose, sessionContext, initialContext = "", onInitialContextChange, isLocked = false, }: ContextPanelProps) { const titleId = useId(); const [localValue, setLocalValue] = useState(initialContext); useEffect(() => { if (isOpen) { setLocalValue(initialContext); } }, [isOpen, initialContext]); const handleKeyDown = useCallback( (e: React.KeyboardEvent) => { if (e.key === "Escape") { onClose(); } }, [onClose], ); const handleSave = useCallback(() => { onInitialContextChange?.(localValue); onClose(); }, [localValue, onInitialContextChange, onClose]); if (!isOpen) { return null; } const hasSessionContext = sessionContext?.summary?.trim(); // Show edit mode when: not locked AND no session context yet const isEditMode = !isLocked && !hasSessionContext; return (
{/* biome-ignore lint/a11y/noStaticElementInteractions: modal content wrapper */}
e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()} >

{isEditMode ? "Initial Context" : "Session Context"}

{isEditMode ? "Set background context to guide the conversation. This will be locked after you send your first message." : "This is what the assistant has learned from your conversation so far. It uses this context to provide more relevant answers."}

{isEditMode ? (