chrome.title.text (three levels deep: EchartsControls -> chrome -> title ->
text) rendered as a bare "Chrome" header with nothing inside it — verified
live and reproduced with a probe schema. JsonForms' generated control panel
only expands one level of nested-object properties (the same depth
DataBinding/Customization already rely on); a second level of nesting
produces an empty group.
Flattens EchartsChrome to direct scalar fields (titleText, legendShow,
legendPosition, tooltipTrigger, xAxisName/Rotate/Format, yAxisName/Rotate/
Format) at the same one-level depth as the working fields, and updates the
frontend merge module, widgetLabel's title precedence, and all tests to
match. Adds a regression test asserting the flat shape actually renders its
fields in the panel, not just that the schema declares them.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Extends the echarts widget's structured layer with a second, independent
"chrome" group — title text, legend show/position, tooltip trigger, and
axis name/rotation/label-format — alongside the existing chartType/customize
series layer. Each leaf is optional and applies (or not) on its own,
regardless of chartType: a leaf left at its default never touches
echartsOptions, and a leaf that is set merges only its own managed keys onto
the matching echartsOptions section, so unmanaged sibling properties (e.g. a
hand-authored legend.orient) survive.
widgetLabel's echarts title resolution now prefers chrome.title.text over
the raw echartsOptions title, matching the same merge precedence, so the
widget's header name reflects whichever one actually wins in the rendered
option.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>