import { ArrowDown, ArrowUp, ChevronDown, ChevronRight, GitBranch, Pencil } from "lucide-react"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import type { MobileWorkflowNodeSummary, WorkflowNodeReorderDirection } from "./workflow-mobile-graph"; import "./MobileWorkflowGraphView.css"; interface MobileWorkflowGraphViewProps { rows: MobileWorkflowNodeSummary[]; selectedNodeId?: string | null; selectedEdgeId?: string | null; onSelectNode: (id: string) => void; onSelectEdge: (id: string) => void; onCreateConnection?: (source: string, target: string) => void; canReorder?: boolean; onMoveNode?: (id: string, direction: WorkflowNodeReorderDirection) => void; } function reorderAvailability(rows: MobileWorkflowNodeSummary[], index: number) { const row = rows[index]; if (!row?.editable) return { up: false, down: false }; return { up: rows[index - 1]?.editable === true, down: rows[index + 1]?.editable === true, }; } function NodeRow({ row, depth, selectedNodeId, selectedEdgeId, onSelectNode, onSelectEdge, onCreateConnection, canReorder, onMoveNode, canMoveUp, canMoveDown, }: { row: MobileWorkflowNodeSummary; depth: number; selectedNodeId?: string | null; selectedEdgeId?: string | null; onSelectNode: (id: string) => void; onSelectEdge: (id: string) => void; onCreateConnection?: (source: string, target: string) => void; canReorder?: boolean; onMoveNode?: (id: string, direction: WorkflowNodeReorderDirection) => void; canMoveUp: boolean; canMoveDown: boolean; }) { const { t } = useTranslation("app"); const hasChildren = row.children.length > 0; const [expanded, setExpanded] = useState(depth === 0); const [connectPickerOpen, setConnectPickerOpen] = useState(false); const selected = selectedNodeId === row.id; const connectionTargets = row.connectionTargets ?? []; const canCreateConnection = !!onCreateConnection && row.editable && connectionTargets.length > 0; const showReorderControls = !!canReorder && !!onMoveNode && row.editable; return (