diff --git a/ui/src/components/ChatPanel.tsx b/ui/src/components/ChatPanel.tsx new file mode 100644 index 00000000..e0f2d646 --- /dev/null +++ b/ui/src/components/ChatPanel.tsx @@ -0,0 +1,63 @@ +import { X } from "lucide-react"; +import { useChatPanel } from "../context/ChatPanelContext"; +import { ChatInput } from "./ChatInput"; +import { Button } from "@/components/ui/button"; +import { ScrollArea } from "@/components/ui/scroll-area"; + +export function ChatPanel() { + const { chatOpen, setChatOpen } = useChatPanel(); + + return ( + + ); +} diff --git a/ui/src/components/Layout.tsx b/ui/src/components/Layout.tsx index 2651acc0..10057054 100644 --- a/ui/src/components/Layout.tsx +++ b/ui/src/components/Layout.tsx @@ -1,11 +1,12 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useQuery } from "@tanstack/react-query"; -import { BookOpen, Moon, Settings, Sun } from "lucide-react"; +import { BookOpen, MessageSquare, Moon, Settings, Sun } from "lucide-react"; import { Link, Outlet, useLocation, useNavigate, useParams } from "@/lib/router"; import { CompanyRail } from "./CompanyRail"; import { Sidebar } from "./Sidebar"; import { InstanceSidebar } from "./InstanceSidebar"; import { BreadcrumbBar } from "./BreadcrumbBar"; +import { ChatPanel } from "./ChatPanel"; import { PropertiesPanel } from "./PropertiesPanel"; import { CommandPalette } from "./CommandPalette"; import { NewIssueDialog } from "./NewIssueDialog"; @@ -19,6 +20,7 @@ import { DevRestartBanner } from "./DevRestartBanner"; import { useDialog } from "../context/DialogContext"; import { GeneralSettingsProvider } from "../context/GeneralSettingsContext"; import { usePanel } from "../context/PanelContext"; +import { useChatPanel } from "../context/ChatPanelContext"; import { useCompany } from "../context/CompanyContext"; import { useSidebar } from "../context/SidebarContext"; import { useTheme, THEME_META } from "../context/ThemeContext"; @@ -51,7 +53,8 @@ function readRememberedInstanceSettingsPath(): string { export function Layout() { const { sidebarOpen, setSidebarOpen, toggleSidebar, isMobile } = useSidebar(); const { openNewIssue, openOnboarding } = useDialog(); - const { togglePanelVisible } = usePanel(); + const { togglePanelVisible, setPanelVisible } = usePanel(); + const { chatOpen, toggleChat } = useChatPanel(); const { companies, loading: companiesLoading, @@ -150,6 +153,13 @@ export function Layout() { const togglePanel = togglePanelVisible; + // Close PropertiesPanel when chat panel opens + useEffect(() => { + if (chatOpen) { + setPanelVisible(false); + } + }, [chatOpen, setPanelVisible]); + useCompanyPageMemory(); useKeyboardShortcuts({ @@ -397,6 +407,21 @@ export function Layout() { + + + + + {chatOpen ? "Close chat" : "Open chat"} +