Guide

Chart Builder 3.5.0 — Release Notes

Tracking issue: #2179 Release: Chart Builder 3.5.0 · PRC Platform 1.5 Work period: February 9, 2026 – March 2026 Scope: prc-chart-builder, prc-charting-library, @prc/charting-utilities


Overview

Chart Builder 3.5.0 is a major feature release. It introduces a completely rebuilt admin dashboard, AI-powered chart generation, a new click-to-style element popover system, two new chart types (Sankey and Treemap), dark mode support across all standard chart types, scatter plot grouping and regression lines, significant map enhancements, and a comprehensive set of axis, label, and annotation improvements.


What's New

1. Chart Library Admin Dashboard (Issue #1400)

The chart admin experience has been rebuilt from the ground up using WordPress's @wordpress/dataviews component — the same interface used by the Site Editor's pages, patterns, and media views.

Key features:

  • DataViews gallery — browse all charts as a filterable, searchable grid with live block previews rendered in-context for each chart post
  • Visual chart type picker — a card-based picker groups chart types by category, shows a preview thumbnail for each type, and surfaces how many saved patterns exist per type
  • Pattern-based creation — new charts are seeded from pre-built variation templates that set correct defaults for each chart type, rather than starting from a blank slate
  • Drag-and-drop CSV import — drop a CSV file anywhere on the chart library page to immediately start a new chart pre-loaded with that data
  • Quick-create dropdown — a persistent "Create New Chart" button in the page header opens the full creation flow from any state
  • WP-CLI tooling — a rewritten CLI command handles bulk operations and chart type backfills

2. AI Chart Generation (Issue #1400, #2346)

An experimental AI assistant is now available inside the chart creation flow for users with the feature enabled.

How it works:

  1. From the "Create New Chart" modal, choose the AI step
  2. Provide any combination of: a text description of the chart you want, an uploaded PNG/screenshot of an existing chart, or pasted CSV data
  3. The AI generates a complete block markup for the chart — including chart type, data, colors, titles, and labels
  4. A live BlockPreview renders immediately so you can review the result before accepting
  5. Use Accept to insert the chart or Regenerate to try again with revised input

Controls:

  • Model selector lets power users choose between available Claude models (default: Sonnet)
  • A confirmation gate and warning language clarify that AI output should always be reviewed before publishing
  • AI prompt updated to detect and suggest annotations from data descriptions

3. Dark Mode Support (Issue #2203)

All standard chart types now automatically respond to the OS/browser dark mode preference — no editor action required.

How it works: The getColor function was updated to check whether a resolved palette color is a plain hex value. If it is, it looks up that color in theme.json's color palette and returns the full CSS light-dark(light-value, dark-value) string, so the chart switches colors automatically alongside the rest of the page.

Scope: Applies to all chart types that use the standard PRC color palette. Linear map color scales are explicitly excluded — continuous gradient scales don't translate cleanly to the light-dark swap approach, so those remain in their fixed palette regardless of color scheme preference.


4. Sankey Chart (Issue #2215)

A new Sankey (flow) chart type is now available. Sankey charts visualize the flow of quantities between categories — how survey respondents moved from one answer to another, or how a population distributes across segments.

  • Configure via the Sankey Controls panel in the editor sidebar
  • Supports node width, padding between nodes, and link opacity
  • Fully integrated with the existing color palette and label customization systems
  • Available in the chart type picker in the admin gallery

Also shipped as part of #2215:

  • Draggable text labels — the text component was replaced with a draggable label component across all outstanding chart types, enabling WYSIWYG label positioning
  • Stacked area interactivity — fixed interactive hover/tooltip behavior for stacked area charts
  • Radar chart — work-in-progress; not yet exposed in the chart type picker

5. Treemap Chart (Issue #2178)

A Treemap chart type has been added for displaying hierarchical part-to-whole data as nested rectangles sized by value.

  • Uses standardized label props consistent with all other chart types
  • Supports the same color palette and label customization controls
  • Available as a selection in the chart type picker

6. Scatter Plot Enhancements (Issue #2324)

Scatter plots received a major capability upgrade:

Data grouping — points can now be assigned to groups based on a secondary data column (e.g., region, party). Groups get distinct colors automatically, and the legend updates to show group names rather than individual data point labels.

Regression lines — one or more regression lines can be overlaid on a scatter plot. Supported types:

  • Linear, Exponential, Polynomial, Logarithmic, Power, Quadratic

Regression lines are clickable in the editor and open the element popover for per-line styling. They can also be assigned to groups.

Centralized chart type definitions — chart type constants are now defined in a shared chart-types utility used consistently across the editor, charting library, and admin.


7. Map Improvements (Issues #2187, #2200)

US Block map responsiveness (#2187) — the block-style US map now scales correctly on smaller viewports. Previously it only scrolled on the x-axis; responsive scaling now works properly across all breakpoints.

Label cutoff (#2187) — improved label rendering for states/regions with small areas, with a configurable cutoff threshold below which labels are suppressed.

Custom stroke and opacity for maps (#2187) — map region stroke color and opacity are now independently configurable via the sidebar.

Skills/popover support for maps (#2187) — map elements now participate in the element popover system (see section 8), supporting per-region color and label overrides.

Missing countries on world map (#2200) — Somaliland, Western Sahara, and other territories using non-standard ISO codes were missing from the world map choropleth. The geographical data in the charting library builds has been updated to include these territories.


8. Element-Level Click-to-Style Popover System (Issue #2106 / cross-issue)

The biggest editing experience improvement in this release. Previously, the only way to restyle individual data points was through bulk panel controls. Now you can click directly on any chart element in the editor to open a contextual popover with per-element controls.

Supported element types and their controls:

ElementWhat you can customize
Data labelsText override, visibility toggle, color, font family, font weight, font style
Shapes (bars, circles, pie slices, scatter dots)Fill color, stroke color, opacity, stroke width
Line segmentsStroke color, stroke width, opacity, line style (solid / dashed / dotted / long dash / dash-dot)
Axis tick labelsColor, font, position offset
AnnotationsText, position, styling
Regression linesColor, stroke width, style, grouping
Legend itemsCustom label text, color overrides
Map regionsFill color, stroke, opacity

Clicking outside the popover dismisses it. All customizations are stored in block attributes using a {x}::{category} key format and are preserved across saves.

Viewport awareness: All element-level customizations are viewport-specific — desktop, tablet, and mobile can carry different values.


9. Axis & Tick Label Customization (Cross-issue work)

A substantial body of cross-issue work landed that extends axis and label customization uniformly across all chart types with axes:

  • Custom tick labels — override the automatically formatted axis tick text with custom strings, applied per-tick
  • Tick axis controls — set color, font family, and font size per axis with live preview
  • Axis stroke and grid stroke — independent color controls for the axis line itself vs. the background grid rules
  • Click-to-edit axes — axis tick labels are now clickable in the editor to open the element popover for per-tick customization
  • Text outline for labels/annotations — labels and annotations now support a configurable text outline/stroke for legibility against complex chart backgrounds

These controls are surfaced in the Independent Axis and Dependent Axis sidebar panels and apply to bar, line, scatter, dot-plot, and diverging-bar chart types.


10. Annotations (Cross-issue work)

An Annotation button has been rolled out across all chart types (previously only available on select types). Annotations allow editors to add callout text tied to a specific data point or chart region.

  • The annotation popup UI provides text, position offset, and styling controls
  • Annotations are stored in block attributes and rendered on the frontend
  • Text outline support added so annotation text remains legible over complex backgrounds
  • The AI prompt has been updated to detect and suggest annotations from data descriptions

11. Customizable Legend Labels (Issue #2346)

Legend items across all chart types now support custom label text. Previously, legend labels were always derived automatically from the data series name. Now editors can override any legend item label to use friendlier or more descriptive text.

Note: dark mode was removed from linear map color scales as part of this cleanup pass.


12. Bug Fixes & Stability

  • #2185 — Fixed a bug where custom label WYSIWYG positioning was not functioning independently for data points that shared the same x-value. Key collisions in the row::column lookup were resolved by improving key specificity.
  • #2179 — Fixed tooltip bounds and axis rendering for line and scatter charts
  • Freeform chart data pollution — removed syncedTableData (identified as the root cause of intermittent data bleed between freeform chart instances); added a hotfix for synced data handling within freeform charts
  • Pointer events — fixed pointer events being blocked on chart components when the tooltip was disabled
  • CSV sanitization — replaced the generic sanitizer with a custom sanitizer for CSV data that correctly preserves angle brackets (< >) which appear legitimately in data values (e.g., <5%) but were previously being stripped

13. Developer & Infrastructure

  • Visual regression testing framework — a visual regression testing setup has been added to catch unintended rendering changes across chart types
  • PRC Markdown for Agents integration — added class-markdown-for-agents-integration.php to the chart builder plugin, registering a custom markdown callback so that chart blocks render as Markdown tables (rather than raw HTML/SVG) when processed by prc-markdown-for-agents. The bulk of this work lives in that plugin; this is the chart-builder-side registration hook
  • Centralized chart type registry — chart type constants moved to src/chart/utils/chart-types.js; import from there rather than defining locally
  • Security preflight (#2179) — a pre-launch security audit pass was completed across all PHP rendering paths

Issue Index

IssueTitleSection
#1400Build new chart admin UI with DataViews1, 2
#2178Treemap chart5
#2185Label WYSIWYG key collision bug12
#2187US Block map and map improvements7
#2200Missing countries on world map7
#2203Enable dark mode3
#2215Sankey chart4
#2324Scatter plot grouping and regression lines6
#2346Pre-launch cleanup (legend labels, AI models)11

Summary of New Chart Types

Chart TypeIssueNotes
Sankey#2215Flow/allocation visualization
Treemap#2178Hierarchical part-to-whole

Summary of Enhanced Chart Types

Chart TypeWhat Changed
ScatterGrouping by secondary variable, regression lines
Bar (all variants)Element popover, axis controls, custom tick labels
LineDraggable labels, element popover for segments and nodes, axis controls
Stacked AreaFixed interactivity/tooltip behavior
PieElement popover for slices
Dot PlotAxis controls, element popover
Diverging BarAxis controls, element popover
US Block MapResponsive scaling fix, custom stroke/opacity, element popover
World MapMissing territories added (Somaliland, Western Sahara + non-standard ISO codes)
All mapsElement popover support, dark mode excluded from linear scales
All chart typesDark mode, annotations, draggable labels, text outline, viewport-aware customizations

Known Limitations

  • AI chart generation is experimental and gated behind a feature flag. Output should always be reviewed before publishing.
  • The Radar chart type is a work in progress and is not yet available in the chart type picker.
  • Dark mode does not apply to linear (continuous gradient) map color scales.
  • Treemap label rendering suppresses labels for very small rectangles by design.

Was this helpful?