Tracking issue: #2179 Release: Chart Builder
3.5.0· PRC Platform1.5Work 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:
- From the "Create New Chart" modal, choose the AI step
- Provide any combination of: a text description of the chart you want, an uploaded PNG/screenshot of an existing chart, or pasted CSV data
- The AI generates a complete block markup for the chart — including chart type, data, colors, titles, and labels
- A live
BlockPreviewrenders immediately so you can review the result before accepting - 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:
| Element | What you can customize |
|---|---|
| Data labels | Text 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 segments | Stroke color, stroke width, opacity, line style (solid / dashed / dotted / long dash / dash-dot) |
| Axis tick labels | Color, font, position offset |
| Annotations | Text, position, styling |
| Regression lines | Color, stroke width, style, grouping |
| Legend items | Custom label text, color overrides |
| Map regions | Fill 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::columnlookup 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.phpto the chart builder plugin, registering a custom markdown callback so that chart blocks render as Markdown tables (rather than raw HTML/SVG) when processed byprc-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
| Issue | Title | Section |
|---|---|---|
| #1400 | Build new chart admin UI with DataViews | 1, 2 |
| #2178 | Treemap chart | 5 |
| #2185 | Label WYSIWYG key collision bug | 12 |
| #2187 | US Block map and map improvements | 7 |
| #2200 | Missing countries on world map | 7 |
| #2203 | Enable dark mode | 3 |
| #2215 | Sankey chart | 4 |
| #2324 | Scatter plot grouping and regression lines | 6 |
| #2346 | Pre-launch cleanup (legend labels, AI models) | 11 |
Summary of New Chart Types
| Chart Type | Issue | Notes |
|---|---|---|
| Sankey | #2215 | Flow/allocation visualization |
| Treemap | #2178 | Hierarchical part-to-whole |
Summary of Enhanced Chart Types
| Chart Type | What Changed |
|---|---|
| Scatter | Grouping by secondary variable, regression lines |
| Bar (all variants) | Element popover, axis controls, custom tick labels |
| Line | Draggable labels, element popover for segments and nodes, axis controls |
| Stacked Area | Fixed interactivity/tooltip behavior |
| Pie | Element popover for slices |
| Dot Plot | Axis controls, element popover |
| Diverging Bar | Axis controls, element popover |
| US Block Map | Responsive scaling fix, custom stroke/opacity, element popover |
| World Map | Missing territories added (Somaliland, Western Sahara + non-standard ISO codes) |
| All maps | Element popover support, dark mode excluded from linear scales |
| All chart types | Dark 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.