diff --git a/chainforge/react-server/src/BaseNode.tsx b/chainforge/react-server/src/BaseNode.tsx index 8d2e370..f91b90a 100644 --- a/chainforge/react-server/src/BaseNode.tsx +++ b/chainforge/react-server/src/BaseNode.tsx @@ -15,6 +15,12 @@ interface BaseNodeProps { nodeId: string; classNames?: string; style?: React.CSSProperties; // Optional prop for inline styles + contextMenuItems?: { + key: string; + icon: JSX.Element; + text: string; + onClick: () => void; + }[]; } export const BaseNode: React.FC = ({ @@ -22,6 +28,7 @@ export const BaseNode: React.FC = ({ classNames, nodeId, style, + contextMenuItems, }) => { const removeNode = useStore((state) => state.removeNode); const duplicateNode = useStore((state) => state.duplicateNode); @@ -105,6 +112,12 @@ export const BaseNode: React.FC = ({ > {children} + {contextMenuItems && + contextMenuItems.map(({ key, icon, text, onClick }) => ( + + {icon} {text} + + ))}  Duplicate Node diff --git a/chainforge/react-server/src/TextFieldsNode.tsx b/chainforge/react-server/src/TextFieldsNode.tsx index d729890..00ce8f3 100644 --- a/chainforge/react-server/src/TextFieldsNode.tsx +++ b/chainforge/react-server/src/TextFieldsNode.tsx @@ -8,7 +8,12 @@ import React, { } from "react"; import { Handle, Position } from "reactflow"; import { Textarea, Tooltip, Skeleton } from "@mantine/core"; -import { IconTextPlus, IconEye, IconEyeOff } from "@tabler/icons-react"; +import { + IconTextPlus, + IconEye, + IconEyeOff, + IconTransform, +} from "@tabler/icons-react"; import useStore from "./store"; import NodeLabel from "./NodeLabelComponent"; import TemplateHooks, { @@ -417,10 +422,26 @@ const TextFieldsNode: React.FC = ({ data, id }) => { [textfieldsValues, placeholders, fieldVisibility], ); + const customContextMenuItems = [ + { + key: "to_item_node", + icon: , + text: "To Items Node", + onClick: () => { + console.log("TODO: Convert to items node."); + }, + sadsd + }, + ]; + return ( - + } customButtons={