From 93dbe11014cf967690727c25e89d9d1075008c24 Mon Sep 17 00:00:00 2001 From: blackhao <13851610112@163.com> Date: Sat, 6 Dec 2025 01:30:57 -0600 Subject: UX --- frontend/src/components/LeftSidebar.tsx | 134 ++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 frontend/src/components/LeftSidebar.tsx (limited to 'frontend/src/components/LeftSidebar.tsx') diff --git a/frontend/src/components/LeftSidebar.tsx b/frontend/src/components/LeftSidebar.tsx new file mode 100644 index 0000000..fa8b471 --- /dev/null +++ b/frontend/src/components/LeftSidebar.tsx @@ -0,0 +1,134 @@ +import React, { useState } from 'react'; +import { Folder, FileText, Archive, ChevronLeft, ChevronRight, Trash2, MessageSquare } from 'lucide-react'; +import useFlowStore from '../store/flowStore'; + +interface LeftSidebarProps { + isOpen: boolean; + onToggle: () => void; +} + +const LeftSidebar: React.FC = ({ isOpen, onToggle }) => { + const [activeTab, setActiveTab] = useState<'project' | 'files' | 'archive'>('project'); + const { archivedNodes, removeFromArchive, createNodeFromArchive } = useFlowStore(); + + const handleDragStart = (e: React.DragEvent, archiveId: string) => { + e.dataTransfer.setData('archiveId', archiveId); + e.dataTransfer.effectAllowed = 'copy'; + }; + + if (!isOpen) { + return ( +
+ + {/* Icons when collapsed */} +
+ + + +
+
+ ); + } + + return ( +
+ {/* Header */} +
+

Workspace

+ +
+ + {/* Tabs */} +
+ + + +
+ + {/* Content Area */} +
+ {activeTab === 'project' && ( +
+ +

Project settings coming soon

+
+ )} + {activeTab === 'files' && ( +
+ +

File manager coming soon

+
+ )} + {activeTab === 'archive' && ( +
+ {archivedNodes.length === 0 ? ( +
+ +

+ No archived nodes.
+ Right-click a node → "Add to Archive" +

+
+ ) : ( + <> +

Drag to canvas to create a copy

+ {archivedNodes.map((archived) => ( +
handleDragStart(e, archived.id)} + className="p-2 bg-gray-50 border border-gray-200 rounded-md cursor-grab hover:bg-gray-100 hover:border-gray-300 transition-colors group" + > +
+
+ + {archived.label} +
+ +
+
{archived.model}
+
+ ))} + + )} +
+ )} +
+
+ ); +}; + +export default LeftSidebar; + -- cgit v1.2.3