'use client'; import type { ReactNode } from 'react'; import { memo, useState } from 'react'; import { IconChevronDown, IconChevronUp, IconX } from '@tabler/icons-react'; import { Badge } from '@kandev/ui/badge'; import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '@kandev/ui/resizable'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@kandev/ui/tabs'; import { getLocalStorage, setLocalStorage } from '@/lib/local-storage'; import { COMMANDS } from '@/components/task/task-data'; import { ShellTerminal } from '@/components/task/shell-terminal'; type TaskRightPanelProps = { topPanel: ReactNode; }; const DEFAULT_RIGHT_LAYOUT: [number, number] = [55, 45]; const TaskRightPanel = memo(function TaskRightPanel({ topPanel }: TaskRightPanelProps) { const [rightLayout, setRightLayout] = useState<[number, number]>(() => getLocalStorage('task-layout-right', DEFAULT_RIGHT_LAYOUT) ); const [activeTerminalId, setActiveTerminalId] = useState(1); const [terminalIds, setTerminalIds] = useState([1]); const [isBottomCollapsed, setIsBottomCollapsed] = useState(false); const addTerminal = () => { setTerminalIds((ids) => { const nextId = Math.max(0, ...ids) + 1; setActiveTerminalId(nextId); return [...ids, nextId]; }); }; const removeTerminal = (id: number) => { setTerminalIds((ids) => { const nextIds = ids.filter((terminalId) => terminalId !== id); if (activeTerminalId === id) { const fallback = nextIds[0] ?? 1; setActiveTerminalId(fallback); } return nextIds.length ? nextIds : [1]; }); }; const terminalTabValue = activeTerminalId === 0 ? 'commands' : `terminal-${activeTerminalId}`; if (isBottomCollapsed) { return (