/** * @file Inspector panel renderer for label nodes */ import * as React from "react"; import type { InspectorRenderProps } from "../../types/NodeDefinition"; import type { LabelNodeData } from "./types"; import { PropertySection } from "../../components/inspector/parts/PropertySection"; import { InspectorInput } from "../../components/inspector/parts/InspectorInput"; import { InspectorTextarea } from "../../components/inspector/parts/InspectorTextarea"; import { InspectorDefinitionList, InspectorDefinitionItem, } from "../../components/inspector/parts/InspectorDefinitionList"; import editorStyles from "../../NodeEditorContent.module.css"; import { useI18n } from "../../i18n/context"; /** * Inspector panel renderer for label nodes * Provides UI controls for editing label properties like title, subtitle, caption, alignment, and text color */ export function LabelInspectorRenderer({ node, onUpdateNode, }: InspectorRenderProps): React.ReactElement { const { t } = useI18n(); const data: LabelNodeData = node.data || {}; const updateField = (key: "labelTitle" | "labelSubtitle" | "labelCaption") => (value: string) => { const next: LabelNodeData = { ...data, [key]: value }; onUpdateNode({ data: next }); }; return ( <> updateField("labelTitle")(e.target.value)} /> updateField("labelSubtitle")(e.target.value)} /> updateField("labelCaption")(e.target.value)} /> onUpdateNode({ data: { ...data, ellipsis: e.target.checked } })} /> onUpdateNode({ data: { ...data, textColor: e.target.value } })} className={editorStyles.inspectorInput} style={{ width: 40, padding: 0, height: 24 }} aria-label="Label text color" /> ); } LabelInspectorRenderer.displayName = "LabelInspectorRenderer";