/** * @file Renderer component for label nodes */ import * as React from "react"; import type { NodeRendererProps } from "../../types/NodeDefinition"; import type { LabelNodeData } from "./types"; import styles from "./label.module.css"; /** * Node renderer for label nodes * Displays title, subtitle, and caption with configurable alignment, wrapping, and text color */ export function LabelNodeRenderer({ node, onStartEdit }: NodeRendererProps): React.ReactElement { const d = node.data; const title = typeof d.labelTitle === "string" ? d.labelTitle : undefined; const subtitle = typeof d.labelSubtitle === "string" ? d.labelSubtitle : undefined; const caption = typeof d.labelCaption === "string" ? d.labelCaption : undefined; const align = d.align === "left" || d.align === "center" || d.align === "right" ? d.align : "center"; const wrap = d.wrap === "nowrap" || d.wrap === "balance" ? d.wrap : "normal"; const ellipsis = d.ellipsis === true; const alignClass = align === "left" ? styles.alignLeft : align === "right" ? styles.alignRight : styles.alignCenter; const textColor = typeof d.textColor === "string" ? d.textColor : undefined; return (
{(title || subtitle) && (
{title && (

{title}

)} {subtitle && ( {subtitle} )}
)} {caption && (

{caption}

)}
); } LabelNodeRenderer.displayName = "LabelNodeRenderer";