import { ReactNode } from 'react'; interface VariableDisplayProps { content: string; getLabel?: (value?: string) => string | ReactNode; } // This component mimics the VariableNode's decorate function from PromptEditor function VariableNodeDisplay({ label }: { label: ReactNode }) { let content: ReactNode = {label}; return
{content}
; } export function VariableDisplay({ content, getLabel }: VariableDisplayProps) { if (!content) return null; // Regular expression to match content within {} const regex = /{([^}]*)}/g; let match; let lastIndex = 0; const elements: ReactNode[] = []; const findLabelByValue = (value: string) => { if (getLabel) { const label = getLabel(value); return label; } return null; }; while ((match = regex.exec(content)) !== null) { const { 1: variableValue, index, 0: template } = match; // Add the previous text part (if any) if (index > lastIndex) { elements.push( {content.slice(lastIndex, index)}, ); } // Try to find the label const label = findLabelByValue(variableValue); if (label && label !== variableValue) { // If we found a valid label, render as variable node elements.push( , ); } else { // If no label found, keep as original text elements.push({template}); } // Update index lastIndex = regex.lastIndex; } // Add the last part of text (if any) if (lastIndex < content.length) { elements.push( {content.slice(lastIndex)}, ); } return <>{elements.length > 0 ? elements : content}; }