Files
knowledge-graph-agent/frontend/src/components/Toolbar/index.tsx
T

70 lines
2.2 KiB
TypeScript
Raw Normal View History

2026-04-17 14:41:21 +08:00
import { useGraphStore } from '../../store/graphStore';
export function Toolbar() {
const {
startCreatingNode,
loading,
refresh,
setLayoutType,
layoutType,
} = useGraphStore();
const layouts = [
{ type: 'force' as const, label: '力导向', icon: '🕸️' },
{ type: 'circular' as const, label: '圆形', icon: '⭕' },
{ type: 'grid' as const, label: '网格', icon: '▦' },
];
return (
<div className="bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-4 py-2 flex items-center gap-2">
<button
type="button"
onClick={startCreatingNode}
className="flex items-center gap-1.5 px-3 py-1.5 text-sm bg-blue-500 text-white rounded hover:bg-blue-600 disabled:opacity-50"
disabled={loading}
>
<span>➕</span>
<span>添加节点</span>
</button>
<div className="w-px h-6 bg-gray-300 dark:bg-gray-600" />
<button
type="button"
onClick={refresh}
className="flex items-center gap-1.5 px-3 py-1.5 text-sm bg-gray-100 dark:bg-gray-700 rounded hover:bg-gray-200 dark:hover:bg-gray-600 disabled:opacity-50"
disabled={loading}
>
<span>🔄</span>
<span>刷新</span>
</button>
<div className="ml-2 flex items-center gap-1">
{layouts.map((layout) => (
<button
key={layout.type}
type="button"
onClick={() => setLayoutType(layout.type)}
className={`flex items-center gap-1.5 px-3 py-1.5 text-sm rounded transition-colors ${
layoutType === layout.type
? 'bg-blue-500 text-white'
: 'bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600'
}`}
>
<span>{layout.icon}</span>
<span>{layout.label}</span>
</button>
))}
</div>
<div className="w-px h-6 bg-gray-300 dark:bg-gray-600 ml-2" />
<div className="text-xs text-gray-500 dark:text-gray-400 flex gap-3">
<span>Ctrl+N 创建节点</span>
<span>Ctrl+E 编辑节点</span>
<span>Delete 删除</span>
</div>
</div>
);
}