/** * @file Code Editor Node - A code editor with syntax highlighting and compilation */ import * as React from "react"; import type { NodeDefinition, NodeRendererProps, InspectorRenderProps, ExternalDataReference, } from "../../../../../types/NodeDefinition"; import { Button } from "../../../../../components/elements/Button"; import { Textarea } from "../../../../../components/elements/Textarea"; import { getLanguageColor, getTextColor } from "./colorUtils"; export type CodeData = { id: string; language: string; code: string; compiled?: boolean; errors?: string[]; }; export const CodeEditorRenderer = ({ node, isSelected, isDragging, externalData, onUpdateNode }: NodeRendererProps) => { const codeData = externalData as CodeData | undefined; const [isEditing, setIsEditing] = React.useState(false); const [localCode, setLocalCode] = React.useState(codeData?.code || ""); React.useEffect(() => { setLocalCode(codeData?.code || ""); }, [codeData?.code]); const handleSave = () => { onUpdateNode({ data: { ...node.data, lastModified: new Date().toISOString(), }, }); setIsEditing(false); }; const languageColor = getLanguageColor(codeData?.language); const textColor = getTextColor(languageColor); return (
{codeData?.code || "// Click to edit code"}
{codeData?.errors && codeData.errors.length > 0 && (