"use client"; import type React from "react"; import { useState } from "react"; import { User, MessageSquare, Filter, Clock, Plus, MenuSquare, Layers, MoveRight, } from "lucide-react"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { cn } from "@/lib/utils"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { useDnD } from "@/contexts/DnDContext"; export function NodePanel() { const [activeTab, setActiveTab] = useState("content"); const { setType } = useDnD(); const nodeTypes = { content: [ { id: "agent-node", name: "Agent", icon: User, color: "text-blue-400", bgColor: "bg-blue-950/40", borderColor: "border-blue-500/30", hoverColor: "group-hover:bg-blue-900/50", glowColor: "group-hover:shadow-blue-500/20", description: "Add an AI agent to process messages and execute tasks", }, { id: "message-node", name: "Message", icon: MessageSquare, color: "text-orange-400", bgColor: "bg-orange-950/40", borderColor: "border-orange-500/30", hoverColor: "group-hover:bg-orange-900/50", glowColor: "group-hover:shadow-orange-500/20", description: "Send a message to users or other nodes in the workflow", }, ], logic: [ { id: "condition-node", name: "Condition", icon: Filter, color: "text-purple-400", bgColor: "bg-purple-950/40", borderColor: "border-purple-500/30", hoverColor: "group-hover:bg-purple-900/50", glowColor: "group-hover:shadow-purple-500/20", description: "Create a decision point with multiple outcomes based on conditions", }, { id: "delay-node", name: "Delay", icon: Clock, color: "text-yellow-400", bgColor: "bg-yellow-950/40", borderColor: "border-yellow-500/30", hoverColor: "group-hover:bg-yellow-900/50", glowColor: "group-hover:shadow-yellow-500/20", description: "Add a time delay between workflow operations", }, ], }; const onDragStart = (event: React.DragEvent, nodeType: string) => { event.dataTransfer.setData("application/reactflow", nodeType); event.dataTransfer.effectAllowed = "move"; setType(nodeType); }; const handleNodeAdd = (nodeType: string) => { setType(nodeType); }; return (

Workflow Nodes

Drag nodes to the canvas or click to add

Content Logic
{nodeTypes.content.map((node) => (
onDragStart(event, node.id)} className={cn( "group flex items-center gap-3 p-3.5 border rounded-lg cursor-grab transition-all duration-300", "backdrop-blur-sm hover:shadow-lg", node.borderColor, node.bgColor, node.glowColor )} >
{node.name} {node.description}
handleNodeAdd(node.id)} className={cn( "flex items-center justify-center h-7 w-7 rounded-md bg-slate-800/60 text-slate-400", "hover:bg-gradient-to-r hover:text-white transition-all", node.id === "agent-node" ? "hover:from-blue-800 hover:to-blue-600" : "hover:from-orange-800 hover:to-orange-600" )} >

{node.name} Node

{node.description}

Drag to canvas or click + to add
))}
{nodeTypes.logic.map((node) => (
onDragStart(event, node.id)} className={cn( "group flex items-center gap-3 p-3.5 border rounded-lg cursor-grab transition-all duration-300", "backdrop-blur-sm hover:shadow-lg", node.borderColor, node.bgColor, node.glowColor )} >
{node.name} {node.description}
handleNodeAdd(node.id)} className={cn( "flex items-center justify-center h-7 w-7 rounded-md bg-slate-800/60 text-slate-400", "hover:bg-gradient-to-r hover:text-white transition-all", node.id === "condition-node" ? "hover:from-purple-800 hover:to-purple-600" : "hover:from-yellow-800 hover:to-yellow-600" )} >

{node.name} Node

{node.description}

Drag to canvas or click + to add
))}
); }