@cdc/chart 4.26.6 → 4.26.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONFIG.md +504 -368
- package/dist/cdcchart-CYc-Kayd.es.js +22488 -0
- package/dist/cdcchart-DCKn8NmI.es.js +20695 -0
- package/dist/cdcchart-Dyui9nk_.es.js +45828 -0
- package/dist/cdcchart.js +4 -96498
- package/examples/__data__/vega-remote-data.json +6 -0
- package/examples/dendrogram.json +18 -0
- package/examples/feature/bar/bar-chart-race-annual-change.json +68 -0
- package/examples/feature/heatmap/average-age-categorical.json +2 -2
- package/examples/feature/heatmap/calendar-heatmap.json +2 -2
- package/examples/feature/heatmap/cell-values-bottom-axis.json +2 -2
- package/examples/feature/heatmap/sparse-aggregation.json +2 -2
- package/examples/feature/line/line-chart-race.json +50 -0
- package/examples/feature/sankey/sankey-example-data.json +40 -1441
- package/examples/feature/sankey/sankey_chart_data.csv +9 -20
- package/examples/network.json +31 -0
- package/examples/private/box-plot.json +573 -0
- package/examples/private/custom-color-issue.json +625 -0
- package/examples/private/custom-colors.json +522 -0
- package/examples/private/cutoff.json +10750 -0
- package/examples/private/flueview.json +22051 -0
- package/examples/private/overlay-legend.json +485 -0
- package/examples/private/pie-test.json +469 -0
- package/examples/vega-remote.json +22 -0
- package/package.json +11 -13
- package/src/CdcChart.tsx +2 -2
- package/src/CdcChartComponent.tsx +444 -217
- package/src/_stories/Chart.BarRace.stories.tsx +443 -0
- package/src/_stories/Chart.BoxPlotNumericSort.stories.tsx +189 -0
- package/src/_stories/Chart.BoxPlotStatsParity.stories.tsx +207 -0
- package/src/_stories/Chart.ColorDistribution.stories.tsx +299 -0
- package/src/_stories/Chart.DataCutoff.stories.tsx +147 -0
- package/src/_stories/Chart.DataTableDownloadFilename.stories.tsx +60 -0
- package/src/_stories/Chart.Dendrogram.stories.tsx +373 -0
- package/src/_stories/Chart.Forecast.CILegend.stories.tsx +236 -0
- package/src/_stories/Chart.HeatMap.stories.tsx +170 -4
- package/src/_stories/Chart.Legend.AxisAlign.stories.tsx +119 -0
- package/src/_stories/Chart.LineRace.stories.tsx +149 -0
- package/src/_stories/Chart.Network.stories.tsx +432 -0
- package/src/_stories/Chart.PaletteConversion.Editor.stories.tsx +208 -0
- package/src/_stories/Chart.Patterns.smoke.stories.tsx +31 -0
- package/src/_stories/Chart.PercentageValue.stories.tsx +311 -0
- package/src/_stories/Chart.PieLabels.stories.tsx +49 -0
- package/src/_stories/Chart.RankByValueMutation.stories.tsx +206 -0
- package/src/_stories/Chart.RequiredFields.stories.tsx +681 -0
- package/src/_stories/Chart.Sankey.stories.tsx +417 -0
- package/src/_stories/Chart.SeriesColorAssignments.stories.tsx +47 -0
- package/src/_stories/Chart.SmallMultiplesNumericTileOrder.stories.tsx +137 -0
- package/src/_stories/Chart.TooltipSeriesLabels.stories.tsx +43 -0
- package/src/_stories/Chart.VegaRemoteData.stories.tsx +31 -0
- package/src/_stories/Chart.smoke.stories.tsx +14 -1
- package/src/_stories/ChartAnnotation.Editor.stories.tsx +78 -0
- package/src/_stories/ChartAxisTitles.smoke.stories.tsx +48 -0
- package/src/_stories/ChartBar.Editor.stories.tsx +499 -57
- package/src/_stories/ChartBrush.Editor.stories.tsx +46 -67
- package/src/_stories/ChartBrush.Regression.stories.tsx +135 -0
- package/src/_stories/ChartEditor.Editor.stories.tsx +33 -3
- package/src/_stories/ChartLine.EffectCompatibility.stories.tsx +120 -0
- package/src/_stories/ChartPrefixSuffix.smoke.stories.tsx +28 -1
- package/src/_stories/_mock/annotation_event-line_mock.json +2 -2
- package/src/_stories/_mock/editor-test-configs.json +20 -10
- package/src/_stories/_mock/editor-test-datasets.json +38 -42
- package/src/_stories/_mock/heatmap-average-age-categorical.json +2 -2
- package/src/_stories/_mock/heatmap.json +2 -2
- package/src/_stories/_mock/legend-axis-align-stacked-bar.json +125 -0
- package/src/_stories/_mock/sankey_mock.json +23 -27
- package/src/components/Annotations/components/AnnotationDraggable.styles.css +52 -0
- package/src/components/Annotations/components/AnnotationDraggable.tsx +639 -139
- package/src/components/Annotations/components/AnnotationDropdown.styles.css +44 -4
- package/src/components/Annotations/components/AnnotationDropdown.tsx +10 -32
- package/src/components/Annotations/helpers/resolveAnnotationLayout.ts +212 -0
- package/src/components/Annotations/tests/AnnotationDraggable.test.tsx +612 -19
- package/src/components/Annotations/tests/AnnotationDropdown.test.tsx +50 -0
- package/src/components/Annotations/tests/resolveAnnotationLayout.test.ts +203 -0
- package/src/components/Axis/BottomAxis.tsx +1 -1
- package/src/components/Axis/Categorical.Axis.tsx +3 -3
- package/src/components/Axis/RightAxis.tsx +21 -13
- package/src/components/BarChart/components/BarChart.Horizontal.tsx +39 -8
- package/src/components/BarChart/components/BarChart.StackedHorizontal.tsx +13 -4
- package/src/components/BarChart/components/BarChart.StackedVertical.test.ts +28 -0
- package/src/components/BarChart/components/BarChart.StackedVertical.tsx +30 -26
- package/src/components/BarChart/components/BarChart.Vertical.tsx +38 -28
- package/src/components/BarChart/components/PortionPatternOverlay.tsx +61 -0
- package/src/components/BarChart/components/context.tsx +6 -0
- package/src/components/BarChart/helpers/getBarData.ts +28 -28
- package/src/components/BarChart/helpers/getBarHeights.ts +2 -2
- package/src/components/BarChart/helpers/getPatternUrl.ts +2 -5
- package/src/components/BarChart/helpers/index.ts +8 -0
- package/src/components/BarChart/helpers/portionPattern.ts +243 -0
- package/src/components/BarChart/helpers/tests/addMinimumBarHeights.test.ts +42 -0
- package/src/components/BarChart/helpers/tests/getPatternUrl.test.ts +13 -0
- package/src/components/BarChart/helpers/tests/portionPattern.test.ts +280 -0
- package/src/components/BarChart/helpers/tests/useBarChart.test.tsx +202 -0
- package/src/components/BarChart/helpers/useBarChart.ts +60 -60
- package/src/components/BarChartRace/BarChartRace.test.tsx +199 -0
- package/src/components/BarChartRace/BarChartRace.tsx +230 -0
- package/src/components/BarChartRace/BarChartRaceFallback.test.tsx +61 -0
- package/src/components/BarChartRace/BarChartRaceFallback.tsx +48 -0
- package/src/components/BarChartRace/bar-chart-race.css +160 -0
- package/src/components/BarChartRace/helpers.test.ts +114 -0
- package/src/components/BarChartRace/helpers.ts +185 -0
- package/src/components/BarChartRace/index.ts +3 -0
- package/src/components/BoxPlot/BoxPlot.Horizontal.tsx +7 -6
- package/src/components/BoxPlot/BoxPlot.Vertical.tsx +9 -7
- package/src/components/BoxPlot/helpers/index.ts +13 -83
- package/src/components/Brush/BrushSelector.tsx +10 -24
- package/src/components/Brush/MiniChartPreview.tsx +33 -1
- package/src/components/Dendrogram/components/Dendrogram.tsx +374 -0
- package/src/components/Dendrogram/dendrogram.css +113 -0
- package/src/components/Dendrogram/helpers/layoutDendrogram.test.ts +95 -0
- package/src/components/Dendrogram/helpers/layoutDendrogram.ts +56 -0
- package/src/components/Dendrogram/helpers/prepareDendrogramData.test.ts +135 -0
- package/src/components/Dendrogram/helpers/prepareDendrogramData.ts +166 -0
- package/src/components/Dendrogram/helpers/resolveDendrogramLabels.test.ts +196 -0
- package/src/components/Dendrogram/helpers/resolveDendrogramLabels.ts +418 -0
- package/src/components/Dendrogram/index.tsx +1 -0
- package/src/components/Dendrogram/types/index.ts +66 -0
- package/src/components/EditorPanel/EditorPanel.tsx +1111 -805
- package/src/components/EditorPanel/components/Panels/Panel.Annotate.tsx +50 -5
- package/src/components/EditorPanel/components/Panels/Panel.Dendrogram.css +10 -0
- package/src/components/EditorPanel/components/Panels/Panel.Dendrogram.tsx +211 -0
- package/src/components/EditorPanel/components/Panels/Panel.ForestPlotSettings.tsx +19 -8
- package/src/components/EditorPanel/components/Panels/Panel.General.tsx +104 -61
- package/src/components/EditorPanel/components/Panels/Panel.Network.css +9 -0
- package/src/components/EditorPanel/components/Panels/Panel.Network.tsx +202 -0
- package/src/components/EditorPanel/components/Panels/Panel.PatternSettings.tsx +236 -36
- package/src/components/EditorPanel/components/Panels/Panel.Radar.tsx +6 -1
- package/src/components/EditorPanel/components/Panels/Panel.Sankey.tsx +89 -105
- package/src/components/EditorPanel/components/Panels/Panel.Series.tsx +21 -6
- package/src/components/EditorPanel/components/Panels/Panel.SmallMultiples.tsx +1 -1
- package/src/components/EditorPanel/components/Panels/Panel.Visual.tsx +8 -66
- package/src/components/EditorPanel/components/Panels/RacingControls.test.tsx +131 -0
- package/src/components/EditorPanel/components/Panels/RacingControls.tsx +185 -0
- package/src/components/EditorPanel/components/Panels/SeriesColorAssignments.tsx +2 -2
- package/src/components/EditorPanel/components/Panels/index.tsx +4 -0
- package/src/components/EditorPanel/helpers/getVisualizationTypeConfigUpdate.ts +20 -7
- package/src/components/EditorPanel/helpers/tests/getVisualizationTypeConfigUpdate.test.ts +25 -2
- package/src/components/EditorPanel/helpers/updateFieldRankByValue.ts +5 -4
- package/src/components/EditorPanel/useEditorPermissions.test.tsx +94 -0
- package/src/components/EditorPanel/useEditorPermissions.ts +75 -25
- package/src/components/Forecasting/Forecasting.tsx +16 -7
- package/src/components/HeatMap/components/HeatMap.tsx +511 -178
- package/src/components/HeatMap/heatmap.constants.ts +7 -3
- package/src/components/HeatMap/heatmap.css +101 -2
- package/src/components/HeatMap/helpers/layout.ts +80 -0
- package/src/components/HeatMap/tests/HeatMap.test.tsx +339 -16
- package/src/components/HeatMap/tests/helpers.test.ts +79 -0
- package/src/components/Legend/Legend.Component.tsx +163 -148
- package/src/components/Legend/Legend.Suppression.tsx +3 -3
- package/src/components/Legend/LegendGroup/LegendGroup.styles.css +7 -0
- package/src/components/Legend/LegendGroup/LegendGroup.tsx +47 -35
- package/src/components/Legend/helpers/createFormatLabels.test.ts +226 -0
- package/src/components/Legend/helpers/createFormatLabels.tsx +45 -51
- package/src/components/LineChart/components/LineChart.Circle.tsx +3 -3
- package/src/components/LineChart/helpers.test.ts +126 -38
- package/src/components/LineChart/helpers.ts +9 -6
- package/src/components/LineChart/index.tsx +71 -27
- package/src/components/LineChart/tests/LineChart.test.tsx +630 -0
- package/src/components/LineChartRace/LineChartRace.test.tsx +275 -0
- package/src/components/LineChartRace/LineChartRace.tsx +134 -0
- package/src/components/LineChartRace/LineChartRaceFallback.tsx +28 -0
- package/src/components/LineChartRace/helpers.test.ts +88 -0
- package/src/components/LineChartRace/helpers.ts +157 -0
- package/src/components/LineChartRace/index.ts +3 -0
- package/src/components/LineChartRace/line-chart-race.css +16 -0
- package/src/components/LinearChart/ValueAxisAnchors.tsx +58 -0
- package/src/components/LinearChart/VisualizationRenderer.tsx +18 -23
- package/src/components/LinearChart/tests/LinearChart.test.tsx +412 -13
- package/src/components/LinearChart/tests/VisualizationRenderer.test.tsx +141 -0
- package/src/components/LinearChart/tests/mockConfigContext.ts +2 -1
- package/src/components/LinearChart.tsx +85 -54
- package/src/components/Network/components/Network.tsx +372 -0
- package/src/components/Network/helpers/layoutNetwork.test.ts +68 -0
- package/src/components/Network/helpers/layoutNetwork.ts +87 -0
- package/src/components/Network/helpers/prepareNetworkData.test.ts +116 -0
- package/src/components/Network/helpers/prepareNetworkData.ts +101 -0
- package/src/components/Network/helpers/resolveNetworkLabels.test.ts +112 -0
- package/src/components/Network/helpers/resolveNetworkLabels.ts +206 -0
- package/src/components/Network/index.tsx +3 -0
- package/src/components/Network/network.css +107 -0
- package/src/components/Network/types/index.ts +56 -0
- package/src/components/PairedBarChart.jsx +5 -10
- package/src/components/PairedBarChart.test.tsx +71 -0
- package/src/components/PieChart/PieChart.tsx +121 -13
- package/src/components/PieChart/helpers/labelPlacement.test.ts +88 -0
- package/src/components/PieChart/helpers/labelPlacement.ts +95 -0
- package/src/components/RacingChartRenderer.tsx +44 -0
- package/src/components/Regions/components/Regions.test.tsx +179 -0
- package/src/components/Regions/components/Regions.tsx +104 -69
- package/src/components/Regions/index.tsx +2 -3
- package/src/components/Sankey/components/Sankey.tsx +264 -437
- package/src/components/Sankey/helpers/getSankeyTooltip.ts +12 -0
- package/src/components/Sankey/helpers/prepareSankeyData.test.ts +71 -0
- package/src/components/Sankey/helpers/prepareSankeyData.ts +90 -0
- package/src/components/Sankey/sankey.scss +57 -116
- package/src/components/Sankey/types/index.ts +41 -4
- package/src/components/ScatterPlot/ScatterPlot.jsx +28 -12
- package/src/components/ScatterPlot/ScatterPlot.test.tsx +60 -0
- package/src/components/SmallMultiples/SmallMultiples.tsx +12 -12
- package/src/components/SmallMultiples/tests/SmallMultipleTile.test.tsx +7 -5
- package/src/components/raceTiming.ts +18 -0
- package/src/data/initial-state.js +79 -31
- package/src/helpers/applyChartTypeContract.ts +71 -0
- package/src/helpers/axisLabelFontSize.ts +2 -2
- package/src/helpers/boxPlotStats.ts +60 -0
- package/src/helpers/bumpChartTooltip.ts +2 -1
- package/src/helpers/calculateHorizontalBarCategoryLabelWidth.test.ts +37 -0
- package/src/helpers/calculateHorizontalBarCategoryLabelWidth.ts +3 -2
- package/src/helpers/calculateRightYAxisWidth.ts +60 -0
- package/src/helpers/categoryOrder.ts +60 -0
- package/src/helpers/colorAssignmentHelpers.ts +2 -2
- package/src/helpers/createNewChartConfig.ts +56 -0
- package/src/helpers/dataDrivenYAxisCategories.ts +18 -0
- package/src/helpers/forecastLegend.ts +88 -0
- package/src/helpers/getBoxPlotConfig.ts +26 -38
- package/src/helpers/getChartTypeDefaultPalette.ts +29 -0
- package/src/helpers/getColorCodeCategoryColorMap.ts +26 -0
- package/src/helpers/getColorScale.ts +31 -22
- package/src/helpers/getComboChartConfig.ts +0 -1
- package/src/helpers/getDynamicYAxisCategories.ts +69 -0
- package/src/helpers/getExcludedData.ts +0 -1
- package/src/helpers/getHasBoundarySuppression.ts +4 -3
- package/src/helpers/getMinMax.ts +11 -8
- package/src/helpers/getNewRuntime.ts +4 -3
- package/src/helpers/getPiePercent.ts +3 -3
- package/src/helpers/getStackedSeriesMax.ts +51 -0
- package/src/helpers/getV21ChartDistributionColors.ts +57 -0
- package/src/helpers/handleRankByValue.ts +15 -15
- package/src/helpers/isConvertLineToBarGraph.ts +2 -2
- package/src/helpers/seriesColumnSettings.ts +31 -3
- package/src/helpers/sizeHelpers.ts +4 -5
- package/src/helpers/smallMultiplesHelpers.ts +10 -13
- package/src/helpers/tests/applyChartTypeContract.test.ts +37 -0
- package/src/helpers/tests/boxPlotStats.test.ts +31 -0
- package/src/helpers/tests/bumpChartTooltip.test.ts +29 -0
- package/src/helpers/tests/calculateRightYAxisWidth.test.ts +105 -0
- package/src/helpers/tests/categoryOrder.test.ts +57 -0
- package/src/helpers/tests/countNumOfTicks.test.ts +11 -0
- package/src/helpers/tests/createNewChartConfig.test.ts +182 -0
- package/src/helpers/tests/getBoxPlotConfig.test.ts +70 -0
- package/src/helpers/tests/getColorCodeCategoryColorMap.test.ts +113 -0
- package/src/helpers/tests/getColorScale.test.ts +226 -1
- package/src/helpers/tests/getDynamicYAxisCategories.test.ts +61 -0
- package/src/helpers/tests/getMinMax.test.ts +41 -0
- package/src/helpers/tests/getStackedSeriesMax.test.ts +26 -0
- package/src/helpers/tests/handleRankByValue.test.ts +55 -37
- package/src/helpers/tests/seriesColumnSettings.test.ts +83 -0
- package/src/helpers/tests/smallMultiplesHelpers.test.ts +37 -1
- package/src/helpers/tests/tooltipHelpers.test.ts +80 -0
- package/src/helpers/tooltipHelpers.ts +16 -0
- package/src/hooks/tests/useRightAxis.test.tsx +143 -2
- package/src/hooks/tests/useScales.test.tsx +3 -6
- package/src/hooks/tests/useTooltip.test.tsx +484 -0
- package/src/hooks/usePrefersReducedMotion.ts +22 -0
- package/src/hooks/useReduceData.ts +4 -36
- package/src/hooks/useRightAxis.ts +19 -26
- package/src/hooks/useScales.ts +15 -0
- package/src/hooks/useTooltip.tsx +106 -71
- package/src/scss/main.scss +74 -2
- package/src/store/chart.reducer.ts +4 -4
- package/src/test/CdcChart.dataTable.test.tsx +582 -14
- package/src/test/CdcChart.dendrogram.test.tsx +277 -0
- package/src/test/CdcChart.finalization.test.tsx +143 -0
- package/src/test/CdcChart.network.test.tsx +271 -0
- package/src/types/ChartConfig.ts +91 -54
- package/src/types/ChartContext.ts +5 -0
- package/src/types/Horizon.ts +1 -1
- package/LICENSE +0 -201
- package/dist/cdcchart-BWVIUcAF.es.js +0 -4802
- package/src/_stories/Chart.Sankey.smoke.stories.tsx +0 -62
- package/src/components/Sankey/components/ColumnList.tsx +0 -19
- package/src/components/Sankey/helpers/getSankeyTooltip.tsx +0 -34
- package/src/components/Sankey/useSankeyAlert.tsx +0 -60
- package/src/data/legacy-defaults.ts +0 -18
- package/src/helpers/ensureSpecialChartAxisTypes.ts +0 -11
- package/src/helpers/tests/ensureSpecialChartAxisTypes.test.ts +0 -30
package/CONFIG.md
CHANGED
|
@@ -10,14 +10,14 @@ To follow those shared types locally, use `packages/core/CONFIG.md` in this mono
|
|
|
10
10
|
|
|
11
11
|
The chart config is documented in the order the package typically evaluates it:
|
|
12
12
|
|
|
13
|
-
| Section
|
|
14
|
-
|
|
|
15
|
-
| Identity and data source
|
|
16
|
-
| Chart setup
|
|
17
|
-
| Copy and authored content
|
|
18
|
-
| Layout and appearance
|
|
13
|
+
| Section | Covers |
|
|
14
|
+
| ----------------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| Identity and data source | Package identity, versioning, and input data |
|
|
16
|
+
| Chart setup | Visualization type, axes, series, and data shaping |
|
|
17
|
+
| Copy and authored content | Titles, descriptions, footnotes, and markup variables |
|
|
18
|
+
| Layout and appearance | Theme, sizing, formatting, palette, and shell options |
|
|
19
19
|
| Feature-specific enhancements | Annotations, regions, heatmaps, small multiples, forest plots, radar, Sankey, and similar chart variants |
|
|
20
|
-
| Fields You Can Ignore
|
|
20
|
+
| Fields You Can Ignore | Runtime state, editor artifacts, and legacy migration leftovers |
|
|
21
21
|
|
|
22
22
|
## Minimum Working Config
|
|
23
23
|
|
|
@@ -25,185 +25,215 @@ For a copy-pasteable minimum config, use the example in [README.md](./README.md)
|
|
|
25
25
|
|
|
26
26
|
For standalone chart configs, the minimum working path is usually:
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
- `type`
|
|
29
|
+
- `version`
|
|
30
|
+
- `visualizationType`
|
|
31
|
+
- a data source via `data` or `dataUrl`
|
|
32
|
+
- chart-family mappings such as `xAxis.dataKey`, or `dendrogram.columns.node` and `.parent`
|
|
33
|
+
- `series` for chart families that render data series (not Pie, Sankey, Network, or Dendrogram)
|
|
34
34
|
|
|
35
35
|
Dashboard flows can also select data from `datasets` with `dataKey`.
|
|
36
36
|
|
|
37
37
|
## Identity and Data Source
|
|
38
38
|
|
|
39
|
-
| Field
|
|
40
|
-
|
|
|
41
|
-
| `type`
|
|
42
|
-
| `version`
|
|
43
|
-
| `dataKey`
|
|
44
|
-
| `data`
|
|
45
|
-
| `dataUrl`
|
|
46
|
-
| `dataDescription` | [`DataDescription`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#datadescription) | No
|
|
47
|
-
| `dataMetadata`
|
|
48
|
-
| `locale`
|
|
39
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
40
|
+
| ----------------- | ------------------------------------------------------------------------------------------------------------- | ------------- | ----------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
41
|
+
| `type` | `string` | Yes | None | Identifies the visualization package. | Must be `chart` for standalone chart configs. |
|
|
42
|
+
| `version` | [`Version`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#version) | No | None | Saved config version used by migration logic. | Use a semantic COVE version for authored configs so migrations can reason about saved-version order. Missing versions are treated as legacy configs that need migration. |
|
|
43
|
+
| `dataKey` | `string` | Conditionally | None | Selects a named dataset when the chart is rendered from `datasets`. | Required in dashboard flows that load data from the `datasets` prop instead of inline `data`. |
|
|
44
|
+
| `data` | `object[]` | Conditionally | `[]` | Inline dataset rendered by the chart. | Required when `dataUrl` and `datasets` are not used. |
|
|
45
|
+
| `dataUrl` | `string` | Conditionally | None | Remote JSON or CSV URL fetched at load time. | If both `data` and `dataUrl` are present, the fetched data wins. |
|
|
46
|
+
| `dataDescription` | [`DataDescription`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#datadescription) | No | None | Shared data-normalization metadata for loaded data. | Used when the chart standardizes developer-provided data. |
|
|
47
|
+
| `dataMetadata` | `Record<string, string>` | No | None | Metadata dictionary exposed to markup variables and editor flows. | Usually populated automatically from remote data fetches. |
|
|
48
|
+
| `locale` | `string` | No | Browser/runtime default | Locale used for number and date formatting. | Any valid `Intl` locale is accepted. |
|
|
49
49
|
|
|
50
50
|
## Chart Setup
|
|
51
51
|
|
|
52
|
-
| Field
|
|
53
|
-
|
|
|
54
|
-
| `visualizationType`
|
|
55
|
-
| `visualizationSubType`
|
|
56
|
-
| `orientation`
|
|
57
|
-
| `xAxis`
|
|
58
|
-
| `yAxis`
|
|
59
|
-
| `series`
|
|
60
|
-
| `columns`
|
|
61
|
-
| `dynamicSeries`
|
|
62
|
-
| `dynamicSeriesType`
|
|
63
|
-
| `dynamicSeriesLineType` | `string`
|
|
64
|
-
| `sortData`
|
|
65
|
-
| `rankByValue`
|
|
66
|
-
| `filters`
|
|
67
|
-
| `filterBehavior`
|
|
68
|
-
| `exclusions`
|
|
69
|
-
| `confidenceKeys`
|
|
70
|
-
| `highlightedBarValues`
|
|
71
|
-
| `allowLineToBarGraph`
|
|
72
|
-
| `useLogScale`
|
|
73
|
-
| `dataCutoff`
|
|
52
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
53
|
+
| ----------------------- | ----------------------------------------------------------------------------------------------------------- | ------------- | ------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
54
|
+
| `visualizationType` | `string` | Yes | None | Chooses the chart family and which renderer mounts. | Exact values: `Area Chart`, `Bar`, `Box Plot`, `Bump Chart`, `Combo`, `Deviation Bar`, `Forest Plot`, `HeatMap`, `Horizon Chart`, `Line`, `Network`, `Paired Bar`, `Pie`, `Radar`, `Scatter Plot`, `Spark Line`, `Sankey`, `Forecasting`, `Warming Stripes`. |
|
|
55
|
+
| `visualizationSubType` | `string` | No | `regular`; new Area Charts author `stacked` | Selects the sub-mode within a chart family. | Current authorable values are `regular`, `stacked`, and `racing`; `stacked` is used by bar, combo, and stacked area flows, while `racing` is supported by horizontal Bar and Line charts. New Area Charts explicitly use `stacked`. Older saved configs may contain `horizontal`; use `orientation: "horizontal"` for current horizontal charts. |
|
|
56
|
+
| `orientation` | `vertical \| horizontal` | No | `vertical` | Controls the primary chart orientation. | `Bar` and `Box Plot` support both directions; `Deviation Bar` is horizontal only. |
|
|
57
|
+
| `xAxis` | `object` | Conditionally | Package-initialized defaults | X-axis / category-axis configuration. | Required for most chart types and for pie category wiring. See `Axis: xAxis and yAxis` below. |
|
|
58
|
+
| `yAxis` | `object` | Conditionally | Package-initialized defaults | Y-axis / measure-axis configuration. | Required for `Pie` charts and shared with multi-axis chart flows. See `Axis: xAxis and yAxis` below. In charts, `yAxis.titlePlacement` controls whether the title stays on the side or moves above the plot. |
|
|
59
|
+
| `series` | `Series[]` | Conditionally | Package-initialized defaults | Measure series to render. | Required for most non-pie charts. See `Series: series[]` below. Dynamic-category series still start from an authored `series[]` entry. For HeatMap, each selected series becomes one heatmap row. |
|
|
60
|
+
| `columns` | `Record<string, Column>` | No | `{}` | Column-level display and formatting overrides. | For standard series charts, a customized `label` controls the series label shown in tooltips and chart data tables. It does not control legends. HeatMap uses the precedence documented below. Column configs also drive prefixes, suffixes, and table visibility. |
|
|
61
|
+
| `dynamicSeries` | `boolean` | No | `false` | Legacy/paused dynamic-series flag. | Current runtime can regenerate generated series during filter updates, but initial rendering still depends on authored `series[]` or `series[].dynamicCategory`. |
|
|
62
|
+
| `dynamicSeriesType` | `string` | No | None | Type assigned to generated series. | Used only when `dynamicSeries` is enabled. |
|
|
63
|
+
| `dynamicSeriesLineType` | `string` | No | None | Line style assigned to generated series. | Used for dynamic line and combo charts. |
|
|
64
|
+
| `sortData` | `ascending \| descending` | No | None | Sort order for the rendered dataset. | Sorting only runs when `sortData` is present. Current runtime treats `ascending` as descending numeric order and `descending` as ascending numeric order for the configured sort key; treat the names as legacy until the comparator changes. |
|
|
65
|
+
| `rankByValue` | `asc \| desc` | No | None | Controls value-based ranking when explicitly set. | Mostly relevant to bar-style charts. When omitted, ranking by value is not applied. |
|
|
66
|
+
| `filters` | [`VizFilter[]`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#vizfilter) | No | `[]` | Interactive filters that narrow the active dataset. | Shared filter contract from `@cdc/core`. |
|
|
67
|
+
| `filterBehavior` | [`FilterBehavior`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#filterbehavior) | No | `Filter Change` | Chooses whether filters apply immediately or through a button. | `Filter Change`, `Apply Button`. |
|
|
68
|
+
| `exclusions` | `object` | No | `{ active: false, keys: [] }` | Narrows the data before filters and rendering. | For categorical axes, `keys` hides matching x-axis values. For date axes, `dateStart` and `dateEnd` keep rows within the selected date range; they do not hide that range. |
|
|
69
|
+
| `confidenceKeys` | `Record<'lower' \| 'upper', string>` | No | `{}` | Names the lower and upper confidence interval columns. | Used by chart families that support confidence intervals. |
|
|
70
|
+
| `highlightedBarValues` | `{ value: any; color: string; borderWidth: number; legendLabel: string }[]` | No | `[]` | Explicit value-to-style overrides for selected bars. | Used by highlight and comparison scenarios. |
|
|
71
|
+
| `allowLineToBarGraph` | `boolean` | No | `undefined` | Lets a line chart switch to a bar graph when the dataset is too small. | Used when `visualizationType` is `Line`; runtime also applies it for some dynamic-series cases. |
|
|
72
|
+
| `useLogScale` | `boolean` | No | `false` | Legacy log-scale flag retained in older configs. | Current authored configs should use `yAxis.type: "logarithmic"`; setting `useLogScale` alone is not the current scale-selection path. |
|
|
73
|
+
| `dataCutoff` | `number \| string` | No | None | Display threshold for values below a cutoff. | Runtime coerces the value with `numberFromString`, so saved configs often serialize it as a string. Values below the threshold display as `<{cutoff}` with the active prefix/suffix, such as `<1%`; values equal to or above the threshold keep their normal formatted value. |
|
|
74
74
|
|
|
75
75
|
### Axis: `xAxis` and `yAxis`
|
|
76
76
|
|
|
77
|
+
For a vertical chart with `yAxis.type: "categorical"`, category bands can be derived from cumulative thresholds stored on the current chart data rows. Configure `yAxis.dataDrivenCategories` with ordered upper-bound columns. The current filtered rows provide the threshold values, so the bands update when filters change. The final category may omit `upperBoundKey`; when it does, its band remains open-ended and fills the remaining rendered Y-axis space. Manual `yAxis.categories` remain available as an alternative axis mode.
|
|
78
|
+
|
|
79
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
80
|
+
| --------------------------------------- | ------------------------------------------------------------- | -------- | -------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
81
|
+
| `yAxis.dataDrivenCategories.categories` | `{ label: string; upperBoundKey?: string; color?: string }[]` | Yes | None | Ordered category labels, colors, and cumulative upper-bound columns. | Order must match the vertical axis from lowest to highest. Every category except the final one requires `upperBoundKey`. If the final key is omitted, the final category fills the remaining rendered Y-axis space. |
|
|
82
|
+
| `yAxis.categoryMode` | `'manual' \| 'data-driven'` | No | `manual` | Selects whether categorical bands use manual heights or current-row threshold columns. | The editor sets this when `Categorical` or `Categorical (Data-Driven)` is selected. |
|
|
83
|
+
|
|
77
84
|
Axis settings are chart-owned because their meaning depends on chart family, orientation, and renderer. Runtime layout fields such as `axisBBox`, `maxValue`, and `tickWidthMax` are listed in `Fields You Can Ignore`.
|
|
78
85
|
|
|
79
|
-
| Field
|
|
80
|
-
|
|
|
81
|
-
| `xAxis.dataKey`, `yAxis.dataKey`
|
|
82
|
-
| `xAxis.type`, `yAxis.type`
|
|
83
|
-
| `xAxis.
|
|
84
|
-
| `
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
| `yAxis.
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
| `*.
|
|
93
|
-
| `*.
|
|
94
|
-
| `*.
|
|
95
|
-
| `*.
|
|
96
|
-
| `*.
|
|
97
|
-
| `*.
|
|
98
|
-
| `
|
|
99
|
-
| `
|
|
100
|
-
| `yAxis.
|
|
101
|
-
| `yAxis.
|
|
102
|
-
| `yAxis.
|
|
103
|
-
| `yAxis.
|
|
104
|
-
| `
|
|
86
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
87
|
+
| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | ------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
88
|
+
| `xAxis.dataKey`, `yAxis.dataKey` | `string` | Conditionally | `''` | Source field used by the axis. | Required for visible/category axes and most value-axis chart wiring. |
|
|
89
|
+
| `xAxis.type`, `yAxis.type` | `string` | No | Package defaults | Axis scale mode. | Category/date axes commonly use `categorical`, `date`, or `date-time`; Forecasting defaults a missing/categorical x-axis to `date`, Bump Chart uses `date-time`, and HeatMap uses a categorical y-axis. Scatter Plot x-axes can use `continuous`; current numeric value axes use `linear` or `logarithmic`. |
|
|
90
|
+
| `xAxis.categoryOrderType` | `data \| custom` | No | `data` | Chooses how categorical x-axis values are ordered. | Only applies when `xAxis.type` is `categorical`. `data` preserves source-data order. `custom` uses `xAxis.categoryOrder` for the rendered chart and chart-owned data table. |
|
|
91
|
+
| `xAxis.categoryOrder` | `string[]` | No | `[]` | Custom categorical x-axis value order. | Used only when `xAxis.categoryOrderType` is `custom`. Values missing from the custom list are appended in source-data order. |
|
|
92
|
+
| `xAxis.label`, `yAxis.label` | `string` | No | `''` | Axis title shown near the axis. | Optional display label. |
|
|
93
|
+
| `yAxis.titlePlacement` | `side \| top` | No | `top` for new configs; older configs missing this field migrate to `side` | Chooses where the y-axis title renders. | `top` renders the title above the plot. |
|
|
94
|
+
| `*.hideAxis`, `*.hideTicks`, `*.hideLabel` | `boolean` | No | `false` | Hides axis line, tick marks, or label. | Supported per axis where the renderer exposes these controls. |
|
|
95
|
+
| `*.labelColor`, `*.tickLabelColor`, `*.tickColor` | CSS color string | No | Package defaults | Axis label, tick-label, and tick-mark colors. | Preserved in saved configs and used by the rendered axes. |
|
|
96
|
+
| `yAxis.gridLines`, `yAxis.enablePadding`, `yAxis.scalePadding`, `yAxis.displayNumbersOnBar`, `xAxis.showYearsOnce` | `boolean`, `number` | No | Package defaults | Axis grid, padding, bar-label, and date-label display controls. | Supported where the chart family and orientation use the related rendering behavior. |
|
|
97
|
+
| `yAxis.filterDomainBehavior` | `dynamic \| stable` | No | `dynamic` when omitted | Controls which rows automatic value-axis domains use when filters are active. | `dynamic` rescales to the currently filtered rows. `stable` uses the full eligible chart dataset while rendering filtered rows; it still respects hard exclusions and chart dataset scope. Applies to the horizontal value axis for horizontal charts and to the right axis for Combo charts. Brush behavior remains controlled by `xAxis.brushDynamicYAxis`. |
|
|
98
|
+
| `yAxis.autoMaxStrategy` | `default \| clean-top-tick` | No | `default` when omitted; new chart configs default to `clean-top-tick` | Controls how automatic value-axis maximums are chosen before padding. | Applies only when the relevant value-axis max is not explicitly set (`yAxis.max` for vertical charts, `xAxis.max` for horizontal charts, `yAxis.rightMax` for Combo right axes). `clean-top-tick` rounds automatic max values up to a cleaner mantissa step such as `1.2`, `1.5`, `2`, `2.5`, `3`, `4`, `5`, `6`, `8`, or `10` times the current order-of-magnitude step. After tick count is known, runtime may finalize the automatic max to the highest generated tick or the next tick interval so the visible top tick clears the data. |
|
|
99
|
+
| `*.dateParseFormat`, `*.dateDisplayFormat` | `string` | No | Package defaults | Input and output date formatting hints. | Used by date-based axes and table/tooltip formatting. |
|
|
100
|
+
| `*.numTicks`, `*.tickRotation`, `*.maxTickRotation` | `number` | No | Package defaults | Tick density and tick-label rotation controls. | Runtime may still adjust ticks for available space. |
|
|
101
|
+
| `*.max`, `*.min` | `string` | No | None | Explicit axis bounds. | Stored as strings in saved configs. |
|
|
102
|
+
| `*.manual`, `*.manualStep`, `*.viewportNumTicks`, `xAxis.viewportStepCount` | `boolean`, `number`, `Record<string, number>` | No | Package defaults | Manual and viewport-specific tick controls. | Mostly used by date/time x-axis editor flows. |
|
|
103
|
+
| `*.padding`, `*.paddingPercent`, `*.size` | `number` | No | Package defaults | Axis spacing and reserved-size controls. | Runtime can still adjust final layout for available space. |
|
|
104
|
+
| `*.sortKey`, `xAxis.sortByRecentDate` | `string`, `boolean` | No | None | Sort helpers for categorical/date axes. | Current configs should use the axis type plus `sortByRecentDate` for recent-date ordering. Legacy `xAxis.sortDates` is migrated to date-axis metadata and removed. |
|
|
105
|
+
| `*.categories` | `object[]` | No | `[]` | Category metadata for specialized axis rendering. | Mostly used by advanced chart flows. |
|
|
106
|
+
| `*.anchors` | `object[]` | No | `[]` | Target-line or anchor metadata. | Each anchor stores `value`, `color`, and `lineStyle`. |
|
|
107
|
+
| `yAxis.rightAnchors` | `object[]` | No | `[]` when omitted or in new chart state | Target-line metadata for the Combo right value axis. | Optional. Uses the same `{ value, color, lineStyle }` shape as `*.anchors`; rendered only when a right-axis Combo series creates a right value axis. |
|
|
108
|
+
| `xAxis.target`, `xAxis.targetLabel`, `xAxis.showTargetLabel`, `yAxis.target`, `yAxis.targetLabel`, `yAxis.showTargetLabel` | `number \| string`, `string`, `boolean` | No | Package defaults | Target line and label controls. | Deviation Bar uses the x-axis target fields; renderer support varies by chart family. |
|
|
109
|
+
| `yAxis.inlineLabel`, `yAxis.labelPlacement`, `yAxis.labelsAboveGridlines` | `string`, `string`, `boolean` | No | None, `On Date/Category Axis` for horizontal bars, `false` | Inline suffix/label controls for the left Y axis. | Horizontal bar configs saved without `labelPlacement` before 4.26.8 migrate to `Below Bar`; new horizontal bars default to `On Date/Category Axis`. For non-Combo charts, when `inlineLabel` contains a space, runtime treats the primary automatic Y-axis max as effectively clean-top-tick even if `autoMaxStrategy` is `default`; if the raw max is within one quarter of a tick interval from the top generated tick, runtime adds one more interval for label headroom. Valid explicit max values bypass this automatic finalization. Combo charts do not use this automatic inline-label headroom, so manual Y-axis padding remains available. |
|
|
110
|
+
| `yAxis.rightLabel`, `yAxis.rightNumTicks` | `string`, `number` | No | `''`, package defaults | Right-axis label and tick controls. | Used by combo and line-capable dual-axis charts. When right-axis content is visible, runtime measures the required gutter so right-axis ticks and side titles do not overlap side legends or spill past top/bottom legend layouts. |
|
|
111
|
+
| `yAxis.rightTitlePlacement` | `side \| top` | No | `top` for new configs; older configs missing this field migrate to `side` | Chooses where the right y-axis title renders. | `side` preserves the rotated right-side title. `top` renders the right title above the plot; when the left title is also top-positioned, both titles share a two-column top row. Runtime treats missing values as `side` for legacy compatibility. |
|
|
112
|
+
| `yAxis.rightAxisLabelColor`, `yAxis.rightAxisTickLabelColor`, `yAxis.rightAxisTickColor` | CSS color string | No | Package defaults | Right-axis label, tick-label, and tick-mark colors. | Only meaningful when right-axis series are configured. |
|
|
113
|
+
| `yAxis.rightHideAxis`, `yAxis.rightHideLabel`, `yAxis.rightHideTicks` | `boolean` | No | `false` | Hides the right-axis line, label, or ticks. | Only meaningful when right-axis series are configured. |
|
|
114
|
+
| `yAxis.rightMin`, `yAxis.rightMax`, `yAxis.smallestLeftAxisMax`, `yAxis.smallestRightAxisMax` | `string \| number` | No | None | Explicit or minimum bounds for left/right axes. | Runtime coerces numeric-like values when calculating scales. For Combo right axes, `rightMin` is honored only when finite and less than or equal to the right-axis data minimum; without a valid `rightMin`, positive right-axis domains start at `0`. `rightMax` is honored only when finite and greater than or equal to the right-axis data maximum. |
|
|
115
|
+
| `xAxis.brushActive`, `xAxis.brushDefaultRecentDateCount`, `xAxis.brushDynamicYAxis`, `xAxis.brushHideHatching` | `boolean`, `number`, `boolean`, `boolean` | No | `false`, None, `false`, `false` | Enables and configures the x-axis brush range selector. | Supported on vertical Line, Bar, Area Chart, and Combo charts with a non-categorical x-axis. Diagonal selection hatching is hidden only when `brushHideHatching` is explicitly `true`; missing and false values preserve it. |
|
|
105
116
|
|
|
106
117
|
### Series: `series[]`
|
|
107
118
|
|
|
108
119
|
`series` is chart-owned and defines which value columns the chart renders.
|
|
109
120
|
|
|
110
|
-
| Field
|
|
111
|
-
|
|
|
112
|
-
| `series[].dataKey`
|
|
113
|
-
| `series[].name`
|
|
114
|
-
| `series[].axis`
|
|
115
|
-
| `series[].type`
|
|
116
|
-
| `series[].lineType`
|
|
117
|
-
| `series[].weight`
|
|
118
|
-
| `series[].tooltip`
|
|
119
|
-
| `series[].dynamicCategory`
|
|
120
|
-
| `series[].stageColumn`
|
|
121
|
-
| `series[].stages[].key`, `series[].stages[].color` | `string`
|
|
122
|
-
| `series[].confidenceIntervals`
|
|
121
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
122
|
+
| -------------------------------------------------- | ------------------------- | -------- | -------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
123
|
+
| `series[].dataKey` | `string` | Yes | None | Source value column for the series. | Must exist in the active dataset unless `dynamicSeries` is generating series. |
|
|
124
|
+
| `series[].name` | `string` | No | Inferred | Authored display name for the series. | Canonical standard-series label used by legends. When omitted or blank, runtime labels and then `series[].dataKey` provide the fallback. Tooltips and chart data tables use a customized matching `columns.*.label` first. |
|
|
125
|
+
| `series[].axis` | `Left \| Right \| string` | No | `Left` | Axis assignment for the series. | Used by dual-axis charts. |
|
|
126
|
+
| `series[].type` | `string` | No | Chart-family default | Series renderer type. | Common values include line, bar, area, `HeatMap`, and point-like variants. |
|
|
127
|
+
| `series[].lineType` | `string` | No | `curveLinear` | Line curve style for line-capable series. | Values come from the shared line curve helper, such as `curveLinear`; primarily used by Line and Combo charts. |
|
|
128
|
+
| `series[].weight` | `number` | No | `2` | Stroke width for line-capable series. | Editor limits this to 1-9. |
|
|
129
|
+
| `series[].tooltip` | `boolean` | No | `true` | Includes the series in tooltip output. | `true`, `false` |
|
|
130
|
+
| `series[].dynamicCategory` | `string` | No | None | Category key used by dynamic-series flows. | Optional. |
|
|
131
|
+
| `series[].stageColumn` | `string` | No | None | Stage/category metadata for specialized chart families. | Optional. |
|
|
132
|
+
| `series[].stages[].key`, `series[].stages[].color` | `string` | No | None | Forecasting-stage key and color metadata. | Only meaningful for `visualizationType: "Forecasting"`. |
|
|
133
|
+
| `series[].confidenceIntervals` | `object[]` | No | `[]` | Per-series confidence interval metadata. | Each entry uses `high`, `low`, and optional `showInTooltip`; see `Confidence Intervals` below. |
|
|
134
|
+
|
|
135
|
+
For charts using the shared series legend, tooltip, and data-table paths, labels resolve as follows:
|
|
136
|
+
|
|
137
|
+
| Surface | Label precedence |
|
|
138
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
139
|
+
| Legend | `series[].name`, then a legacy or generated runtime series label, then `series[].dataKey`. |
|
|
140
|
+
| Tooltip series row | Customized matching `columns.*.label`, then the canonical series name. A blank label or one equal to `series[].dataKey` is not customized and therefore falls back to the series name. Additional non-series tooltip columns continue to use their own `columns.*.label`. |
|
|
141
|
+
| Chart data table | Customized matching `columns.*.label`, then the canonical series name. The label appears as a column header in vertical tables and a row label in horizontal tables. |
|
|
142
|
+
|
|
143
|
+
This tooltip precedence applies to Line, Area Chart, Combo, Bar, Scatter Plot, Bump Chart, and Paired Bar. Deviation Bar does not expose per-series Label in its Data Series editor and continues to use its axis labels. HeatMap uses its own row-label precedence under `HeatMap: heatmap.* + HeatMap series` below.
|
|
123
144
|
|
|
124
145
|
### Confidence Intervals
|
|
125
146
|
|
|
126
|
-
| Field
|
|
127
|
-
|
|
|
128
|
-
| `confidenceKeys.lower`, `confidenceKeys.upper`
|
|
129
|
-
| `series[].confidenceIntervals[].low`, `series[].confidenceIntervals[].high` | `number \| string` | Conditionally | None
|
|
130
|
-
| `series[].confidenceIntervals[].showInTooltip`
|
|
147
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
148
|
+
| --------------------------------------------------------------------------- | ------------------ | ------------- | ------- | ------------------------------------------------------ | ---------------------------------------------------------------------------- |
|
|
149
|
+
| `confidenceKeys.lower`, `confidenceKeys.upper` | `string` | No | None | Column names for lower and upper confidence bounds. | Used by chart families that render confidence intervals from shared columns. |
|
|
150
|
+
| `series[].confidenceIntervals[].low`, `series[].confidenceIntervals[].high` | `number \| string` | Conditionally | None | Lower and upper bounds for a series-specific interval. | Can be column names or numeric values depending on the chart flow. |
|
|
151
|
+
| `series[].confidenceIntervals[].showInTooltip` | `boolean` | No | `false` | Includes confidence interval values in tooltip output. | Only meaningful when interval bounds are configured. |
|
|
131
152
|
|
|
132
153
|
### Preliminary and Suppression Markers
|
|
133
154
|
|
|
134
155
|
`preliminaryData` is chart-owned marker metadata for suppression and effect styling in supported Line, Bar, and Combo flows. Older saved configs may also contain `suppressedData`; that legacy array is listed in `Fields You Can Ignore`.
|
|
135
156
|
|
|
136
|
-
| Field
|
|
137
|
-
|
|
|
138
|
-
| `preliminaryData[]`
|
|
139
|
-
| `preliminaryData[].type`
|
|
140
|
-
| `preliminaryData[].column`, `preliminaryData[].value`
|
|
141
|
-
| `preliminaryData[].label`
|
|
142
|
-
| `preliminaryData[].style`, `preliminaryData[].symbol`, `preliminaryData[].iconCode`, `preliminaryData[].lineCode` | `string`
|
|
143
|
-
| `preliminaryData[].seriesKeys`
|
|
144
|
-
| `preliminaryData[].displayTooltip`, `preliminaryData[].displayLegend`, `preliminaryData[].displayTable`
|
|
145
|
-
| `preliminaryData[].hideBarSymbol`, `preliminaryData[].hideLineStyle`
|
|
146
|
-
| `preliminaryData[].circleSize`
|
|
147
|
-
| `preliminaryData[].displayGray`
|
|
157
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
158
|
+
| ----------------------------------------------------------------------------------------------------------------- | ----------------------- | ------------- | ----------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
159
|
+
| `preliminaryData[]` | `object[]` | No | `[]` | Marker rules for suppression or effect values. | Runtime uses these entries for chart marks, legend entries, tooltips, and table behavior in supported chart families. |
|
|
160
|
+
| `preliminaryData[].type` | `suppression \| effect` | Yes | None | Chooses the marker behavior. | Suppression entries match specific source values; effect entries mark effects in supported line/bar flows. |
|
|
161
|
+
| `preliminaryData[].column`, `preliminaryData[].value` | `string` | Conditionally | None | Source column and value that trigger the marker. | Required for suppression matching. |
|
|
162
|
+
| `preliminaryData[].label` | `string` | No | `''` | Label shown in legend/tooltip contexts. | Optional but needed for visible legend copy. |
|
|
163
|
+
| `preliminaryData[].style`, `preliminaryData[].symbol`, `preliminaryData[].iconCode`, `preliminaryData[].lineCode` | `string` | No | Package/editor defaults | Visual styling metadata for the marker. | Editor-authored values drive the rendered symbol, line, or filled-circle treatment. |
|
|
164
|
+
| `preliminaryData[].seriesKeys` | `string[]` | No | `[]` | Series keys affected by the marker. | Empty or omitted values can apply broadly depending on the marker type and chart family. |
|
|
165
|
+
| `preliminaryData[].displayTooltip`, `preliminaryData[].displayLegend`, `preliminaryData[].displayTable` | `boolean` | No | Editor defaults | Controls whether the marker appears in tooltips, legend output, and table output. | Used by suppression/effect rendering in supported chart families. |
|
|
166
|
+
| `preliminaryData[].hideBarSymbol`, `preliminaryData[].hideLineStyle` | `boolean` | No | Editor defaults | Suppresses the bar symbol or line styling for the marker. | Only meaningful where the selected chart family renders that marker treatment. |
|
|
167
|
+
| `preliminaryData[].circleSize` | `number` | No | Editor defaults | Circle marker size for supported effect/suppression displays. | Pixel-like display value. |
|
|
168
|
+
| `preliminaryData[].displayGray` | `boolean` | No | Editor defaults | Applies gray styling for supported marked values. | Mainly used by suppression/effect visual treatments. |
|
|
169
|
+
| `preliminaryData[].lineEffectScope` | `string` | No | Both adjacent segments when omitted | Chooses which line segments receive a matching non-circle effect. | `"outgoing"`: segment after point. Omit for both adjacent segments. New editor rules default to `"outgoing"`. |
|
|
170
|
+
|
|
171
|
+
For Line charts and line series in Combo charts, the special-line editor offers **Apply style to** for non-circle effects. **Segment after point** (`lineEffectScope: "outgoing"`) styles only the outgoing segment beginning at the matching row; a final-row-only match produces no visible line effect. **Both adjacent segments** (omit `lineEffectScope`) styles the incoming and outgoing segments, including the incoming segment of a matching final row. New rules default to **Segment after point**; existing rules without the field retain **Both adjacent segments** when edited or resaved. This applies to standard multi-column and dynamic-category data; circle markers and suppression rules are unchanged.
|
|
148
172
|
|
|
149
173
|
## Copy and Authored Content
|
|
150
174
|
|
|
151
|
-
| Field
|
|
152
|
-
|
|
|
153
|
-
| `title`
|
|
154
|
-
| `superTitle`
|
|
155
|
-
| `introText`
|
|
156
|
-
| `description`
|
|
157
|
-
| `legacyFootnotes`
|
|
158
|
-
| `footnotes`
|
|
159
|
-
| `chartMessage.noData`
|
|
160
|
-
| `enableMarkupVariables`
|
|
161
|
-
| `markupVariables`
|
|
162
|
-
| `altText`
|
|
163
|
-
| `general.showAnnotationDropdown`
|
|
164
|
-
| `general.mobileAnnotationDisplay` | `'symbol' \| 'text'`
|
|
165
|
-
| `general.annotationDropdownText`
|
|
175
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
176
|
+
| --------------------------------- | ------------------------------------------------------------------------------------------------------------- | -------- | ------------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
177
|
+
| `title` | `string` | No | `''` | Main chart title. | Hidden when empty or when `showTitle` is `false`. |
|
|
178
|
+
| `superTitle` | `string` | No | `''` | Supporting title rendered above the main title. | Commonly used for short context labels. |
|
|
179
|
+
| `introText` | `string` | No | `''` | Introductory text rendered above the chart body. | Supports markup variables when enabled. |
|
|
180
|
+
| `description` | `string` | No | `''` | Description or subtext rendered with the chart. | Often used for source notes and context. |
|
|
181
|
+
| `legacyFootnotes` | `string` | No | `''` | Legacy footnote field retained for backward compatibility. | Still rendered in addition to the structured `footnotes` block. |
|
|
182
|
+
| `footnotes` | [`Footnotes`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#footnotes) | No | Shared core default | Structured footnotes rendered in the chart footer. | Shared `@cdc/core` footnotes contract. |
|
|
183
|
+
| `chartMessage.noData` | `string` | No | `No Data Available` | Message shown when the chart has no renderable data. | Usually only visible after filtering or data loading failures. |
|
|
184
|
+
| `enableMarkupVariables` | `boolean` | No | `false` | Enables placeholder replacement in supported text fields. | Shared behavior with markup variables documented in core. |
|
|
185
|
+
| `markupVariables` | [`MarkupVariable[]`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#markupvariable) | No | `[]` | Defines placeholder tags available to authored text. | Shared markup-variable contract from `@cdc/core`. |
|
|
186
|
+
| `altText` | [`AltTextConfig`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#alttextconfig) | No | None | Optional human-authored accessibility description for the chart SVG. | Chart first builds its generated `aria-label` from chart context, then appends the resolved static or metadata-backed alt text from the shared core shape. |
|
|
187
|
+
| `general.showAnnotationDropdown` | `boolean` | No | `false` | Shows the annotation dropdown and numbered badges beside chart annotation text labels. | The dropdown appears in desktop layouts when enabled. Callout and event-line text labels show numbers matching the dropdown; mobile symbol mode already uses numbered circles. |
|
|
188
|
+
| `general.mobileAnnotationDisplay` | `'symbol' \| 'text'` | No | `'symbol'` | Selects how annotations render on mobile: numbered-circle symbol on the chart, or full HTML text labels. | `'symbol'` (default): mobile shows numbered circles on the chart and auto-forces the annotation dropdown below the chart. `'text'`: mobile renders the same HTML labels as desktop and the dropdown is no longer auto-forced (it follows `general.showAnnotationDropdown`). Author opt-in for `'text'`: labels may overflow narrow viewports. |
|
|
189
|
+
| `general.annotationDropdownText` | `string` | No | `Annotations` | Label shown for the annotation dropdown. | Used when annotation dropdowns are enabled. |
|
|
166
190
|
|
|
167
191
|
## Layout and Appearance
|
|
168
192
|
|
|
169
|
-
| Field
|
|
170
|
-
|
|
|
171
|
-
| `theme`
|
|
172
|
-
| `showTitle`
|
|
173
|
-
| `titleStyle`
|
|
174
|
-
| `animate`
|
|
175
|
-
| `heights.vertical`
|
|
176
|
-
| `heights.horizontal`
|
|
177
|
-
| `heights.mobileVertical`
|
|
178
|
-
| `barHeight`
|
|
179
|
-
| `barSpace`
|
|
180
|
-
| `barThickness`
|
|
181
|
-
| `barStyle`
|
|
182
|
-
| `barHasBorder`
|
|
183
|
-
| `isLollipopChart`
|
|
184
|
-
| `lollipopShape`
|
|
185
|
-
| `lollipopColorStyle`
|
|
186
|
-
| `lollipopSize`
|
|
187
|
-
| `lineDatapointStyle`
|
|
188
|
-
| `lineDatapointColor`
|
|
189
|
-
| `isolatedDotsSameSize`
|
|
190
|
-
| `labels`
|
|
191
|
-
| `isResponsiveTicks`
|
|
192
|
-
| `roundingStyle`
|
|
193
|
-
| `tipRounding`
|
|
194
|
-
| `dataFormat`
|
|
195
|
-
| `tooltips`
|
|
196
|
-
| `topAxis.hasLine`
|
|
197
|
-
| `general`
|
|
198
|
-
| `general.useIntelligentLineChartLabels` | `boolean`
|
|
199
|
-
| `visual`
|
|
200
|
-
| `legend`
|
|
201
|
-
| `table`
|
|
202
|
-
| `twoColor.palette`
|
|
203
|
-
| `twoColor.isPaletteReversed`
|
|
204
|
-
| `general.palette.isReversed`
|
|
205
|
-
| `general.palette.
|
|
206
|
-
| `general.palette.
|
|
193
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
194
|
+
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
195
|
+
| `theme` | [`ComponentThemes`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#componentthemes) | No | `theme-blue` | Shared shell theme token. | Controls shell classes and some chart accents. |
|
|
196
|
+
| `showTitle` | `boolean` | No | `true` | Shows or hides the main title area. | `true`, `false`. |
|
|
197
|
+
| `titleStyle` | `legacy \| large \| small` | No | `small` | Chooses the title treatment. | `legacy`, `large`, `small`. |
|
|
198
|
+
| `animate` | `boolean` | No | `false` | Enables chart animation when the chart enters view. | Disabled for chart types that do not animate. |
|
|
199
|
+
| `heights.vertical` | `number` | No | `300` | Default vertical chart height. | Used when the chart is rendered vertically. |
|
|
200
|
+
| `heights.horizontal` | `number` | No | `750` | Default horizontal chart height. | Used when the chart is rendered horizontally. |
|
|
201
|
+
| `heights.mobileVertical` | `number` | No | None | Optional mobile height for vertical layouts. | Not seeded in the package initial state. When omitted, mobile vertical rendering falls back to `heights.vertical`. |
|
|
202
|
+
| `barHeight` | `number` | No | `25` | Base bar height in bar and combo charts. | Affects row spacing and label placement. |
|
|
203
|
+
| `barSpace` | `number` | No | `15` | Space between bars. | Mostly used in bar and combo charts. |
|
|
204
|
+
| `barThickness` | `number` | No | `0.8` | Relative bar thickness. | Current chart defaults author `0.8`. Configs migrated from before `4.26.8` materialize the historical `0.35` value when it was omitted; current-version omissions use `0.8`. Versionless configs are treated as legacy. |
|
|
205
|
+
| `barStyle` | `lollipop \| rounded \| flat` | No | `''` | Chooses the bar shape treatment. | A blank value behaves like `flat` until the editor sets it explicitly. |
|
|
206
|
+
| `barHasBorder` | `'true' \| 'false'` | No | `'true'` | Toggles bar borders. | Stored as a string for backward compatibility. |
|
|
207
|
+
| `isLollipopChart` | `boolean` | No | `false` | Renders bars as lollipop charts. | Often pairs with `lollipopShape` and `lollipopColorStyle`. |
|
|
208
|
+
| `lollipopShape` | `circle \| square` | No | `circle` | Shape used for lollipop heads. | The editor currently exposes `circle` and `square`. |
|
|
209
|
+
| `lollipopColorStyle` | `regular \| two-tone` | No | `two-tone` | Chooses lollipop color treatment. | Changes how the head and stick colors are resolved. |
|
|
210
|
+
| `lollipopSize` | `small \| medium \| large` | No | `small` | Controls lollipop head and stem sizing. | Mainly used when `barStyle` is `lollipop` or `isLollipopChart` is true. |
|
|
211
|
+
| `lineDatapointStyle` | `hidden \| always show \| hover` | No | `hover` | Controls line chart point visibility. | Affects line and combo charts. |
|
|
212
|
+
| `lineDatapointColor` | `Same as Line \| Lighter than Line` | No | `Same as Line` | Chooses the point color relative to the line. | Affects line markers and hover styles. |
|
|
213
|
+
| `isolatedDotsSameSize` | `boolean` | No | `false` | Keeps isolated line dots the same size as normal dots. | Only used by line-chart variants. |
|
|
214
|
+
| `labels` | `boolean` | No | `false` | Shows value labels on supported chart types. | For `Pie`, enables category and percentage labels. Regular pie labels that fit render inside slices; labels that do not fit, and donut labels, render outside without connector lines. |
|
|
215
|
+
| `isResponsiveTicks` | `boolean` | No | `false` | Enables responsive tick handling. | Helpful for dense x-axis labels. |
|
|
216
|
+
| `roundingStyle` | `standard \| shallow \| finger` | No | `standard` | Chooses the numeric rounding strategy. | Matches the editor options. |
|
|
217
|
+
| `tipRounding` | `top \| full` | No | `top` | Controls tooltip rounding behavior. | Legacy-friendly display option. |
|
|
218
|
+
| `dataFormat` | `object` | No | Package-initialized defaults | Controls chart-owned number formatting. | See `dataFormat.*` below. Column-level overrides in `columns` can override some left-axis/table formatting. |
|
|
219
|
+
| `tooltips` | `object` | No | `{ opacity: 90, singleSeries: false, dateDisplayFormat: '%B %-d, %Y' }` | Tooltip display settings. | Controls opacity, single-series mode, and tooltip date formatting. |
|
|
220
|
+
| `topAxis.hasLine` | `boolean` | No | `false` | Draws a top axis line in supported chart types. | Mostly used by bar and line layouts. |
|
|
221
|
+
| `general` | [`General`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#general) | No | Shared core default | Shared chart-wide settings such as missing-data labels and palette selection. | Chart-specific runtime also reads `general.useIntelligentLineChartLabels`; see core for shared fields like `showMissingDataLabel`, `showSuppressedSymbol`, `showZeroValueData`, `hideNullValue`, and `palette`. |
|
|
222
|
+
| `general.useIntelligentLineChartLabels` | `boolean` | No | `false` | Enables smarter line-end label placement for line-capable charts. | Chart-specific extension stored under the legacy `general` block. |
|
|
223
|
+
| `visual` | `object` | No | `{ border: false, borderColorTheme: false, accent: false, background: false, hideBackgroundColor: false, tp5Treatment: false, tp5Background: false, verticalHoverLine: false, horizontalHoverLine: false, lineDatapointSymbol: 'none', maximumShapeAmount: 7 }` | Shared chart shell styling flags. | Includes border/accent toggles, hover lines, and line-datapoint symbol control. `visual.background` and `visual.hideBackgroundColor` currently affect Spark Line charts only; chart TP5 treatment flags may be present in saved configs but are feature-gated. |
|
|
224
|
+
| `legend` | [`Legend`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#legend) plus chart extensions | No | Package-initialized defaults | Controls chart legend display, layout, and interaction. | See `legend.*` below for chart-owned extensions. |
|
|
225
|
+
| `table` | [`Table`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#table) plus chart behavior | No | Package-initialized defaults | Controls the built-in data table and chart download buttons. | See `table.*` below for chart-specific behavior and common shared fields. |
|
|
226
|
+
| `twoColor.palette` | `string` | No | `monochrome-1` | Palette used for two-color chart variants. | Used when the chart switches to a paired/deviation bar color treatment. |
|
|
227
|
+
| `twoColor.isPaletteReversed` | `boolean` | No | `false` | Reverses the two-color palette variant. | Current active reversal flag for two-color palettes. |
|
|
228
|
+
| `general.palette.isReversed` | `boolean` | No | Depends on creation or loading path | Reverses the active palette order. | New charts default to `false`, except Sankey (`true`). Palette-less loaded charts use the stable fallback reversal described below. The top-level `isPaletteReversed` field is legacy. |
|
|
229
|
+
| `general.palette.version` | `1.0 \| 2.0 \| 2.1` | No | `2.1` for new charts; `2.0` compatibility fallback when omitted on load | Selects the palette catalog and chart sampling behavior. | `1.0` uses legacy palettes. `2.0` preserves released V2 colors. `2.1` uses the V2 catalog with improved sequential, divergent, and qualitative sampling for supported charts. |
|
|
230
|
+
| `general.palette.colorAssignmentMode` | `ordered \| by-value` | No | `ordered` when omitted | Enables authored by-series color assignment. | `by-value` is required before `colorAssignments` affects chart colors; assignment presence alone does not activate it. |
|
|
231
|
+
| `general.palette.colorAssignments` | `{ key: string; color: string }[]` | No | `[]` | Assigns colors to stable authored chart series keys. | Supported for regular Line, Bar, Combo, Area Chart, Scatter Plot, and by-series Small Multiples. `key` should match `series[].dataKey`; stale keys are ignored and may be removed by editor updates. |
|
|
232
|
+
|
|
233
|
+
For chart rendering, invalid entries in `general.palette.customColors` or `general.palette.customColorsOrdered` render as black (`#000000`). Empty custom color arrays still use the selected named palette. Unknown palette names render as black.
|
|
234
|
+
|
|
235
|
+
Palette omission is supported for minimal and hand-authored configs. Compatibility migrations through `4.26.8-2` materialize the stable pre-2.1 fallback for older saved configs: ordinary charts and Sankey use `sequential_bluereverse` (`2.0`, reversed), Line uses `divergent_blue_cyan` (`2.0`, not reversed), and HeatMap/Horizon Chart use `sequential_blue` (`2.0`, not reversed). This compatibility fallback is separate from new-chart creation: `createNewChartConfig()` explicitly authors current `2.1` defaults (`sequential_blue` for Bar, `qualitative_standard` for Line, `sequential_blue` for HeatMap/Horizon Chart, and `sequential_bluereverse` for Sankey). Nonempty custom colors still take precedence, and Paired/Deviation charts continue to render from `twoColor.palette`.
|
|
236
|
+
|
|
207
237
|
| `pieType` | `Regular \| Donut` | No | `Regular` | Chooses between a full pie and a donut chart. | Only meaningful for `Pie` charts. |
|
|
208
238
|
| `showAreaUnderLine` | `boolean` | No | `false` | Fills the area below line series. | Primarily used by line and small-multiple line charts. |
|
|
209
239
|
| `showLineSeriesLabels` | `boolean` | No | `false` | Appends the series name at the end of line and combo series. | Only meaningful for line-capable charts. |
|
|
@@ -212,128 +242,174 @@ Axis settings are chart-owned because their meaning depends on chart family, ori
|
|
|
212
242
|
| `hideXAxisLabel` | `boolean` | No | `false` | Hides the rendered x-axis label. | Mostly used by small multiples and compact layouts. |
|
|
213
243
|
| `hideYAxisLabel` | `boolean` | No | `false` | Hides the rendered y-axis label. | Mostly used by small multiples and compact layouts. In small multiples, the leading tile in each row keeps the y-axis title visible while the other tiles hide it, including when `yAxis.titlePlacement` is `top`. |
|
|
214
244
|
|
|
245
|
+
Palette version `2.1` sampling applies to named nine-color palettes with 1–9 items in Area Chart, Bar, Box Plot, Bump Chart, Combo, Line, Pie, Radar, Scatter Plot, and Spark Line. It also applies to categories in Bars using `legend.colorCode`. Non-empty `customColors` or `customColorsOrdered` bypass sampling, and unsupported chart types or item counts retain their existing behavior. Reverse palette names use the same selected colors in reverse order. Paired Bar and Deviation Bar continue to use `twoColor.palette`; Forecast controls continue to use stage palette names and do not independently upgrade an existing `2.0` chart.
|
|
246
|
+
|
|
215
247
|
### Number Formatting: `dataFormat.*`
|
|
216
248
|
|
|
217
|
-
These fields are chart-owned. They are applied by chart number-format helpers for axes, labels, tooltips, and generated table values unless a column-specific formatter overrides the value.
|
|
218
|
-
|
|
219
|
-
| Field
|
|
220
|
-
|
|
|
221
|
-
| `dataFormat.commas`
|
|
222
|
-
| `dataFormat.abbreviated`
|
|
223
|
-
| `dataFormat.roundTo`
|
|
224
|
-
| `dataFormat.preserveOriginalDecimals`
|
|
225
|
-
| `dataFormat.prefix`, `dataFormat.suffix`
|
|
226
|
-
| `dataFormat.rightCommas`
|
|
227
|
-
| `dataFormat.rightRoundTo`
|
|
228
|
-
| `dataFormat.rightPrefix`, `dataFormat.rightSuffix`
|
|
229
|
-
| `dataFormat.bottomCommas`
|
|
230
|
-
| `dataFormat.bottomRoundTo`
|
|
231
|
-
| `dataFormat.bottomPrefix`, `dataFormat.bottomSuffix` | `string`
|
|
232
|
-
| `dataFormat.bottomAbbreviated`
|
|
233
|
-
| `dataFormat.showPiePercent`
|
|
249
|
+
These fields are chart-owned. They are applied by chart number-format helpers for axes, labels, tooltips, and generated table values unless a column-specific formatter overrides the value. Missing or blank column rounding inherits these settings; numeric column rounding, including `0`, is an explicit override.
|
|
250
|
+
|
|
251
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
252
|
+
| ---------------------------------------------------- | --------- | -------- | ----------------------------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
253
|
+
| `dataFormat.commas` | `boolean` | No | `true` when the whole `dataFormat` block is omitted | Adds locale-aware grouping to left/value-axis numbers, tooltips, and data table output. | Missing `commas` inside a partial `dataFormat` object can be backfilled as legacy `false`; author this field explicitly when adding only some number-format options. |
|
|
254
|
+
| `dataFormat.abbreviated` | `boolean` | No | `false` | Abbreviates large or small left/value-axis numbers. | Only applied when the formatter decides the value should be abbreviated. |
|
|
255
|
+
| `dataFormat.roundTo` | `number` | No | `0` when omitted | Decimal precision for left/value-axis numbers and many chart values. | Ignored for a value when `preserveOriginalDecimals` is true. Missing or blank series-column `roundToPlace` values inherit this precision. |
|
|
256
|
+
| `dataFormat.preserveOriginalDecimals` | `boolean` | No | `false` | Preserves each value's original decimal places. | Bypasses the configured decimal precision for left, right, and bottom formatting. |
|
|
257
|
+
| `dataFormat.prefix`, `dataFormat.suffix` | `string` | No | `''` | Text added before or after left/value-axis series numbers. | Examples: `$`, `%`. Series-column formatting may override these fields; blank series-column affixes inherit them. Additional tooltip/table columns use their own `columns.*.prefix` and `columns.*.suffix`; blank additional-column affixes do not inherit these global value-axis affixes. |
|
|
258
|
+
| `dataFormat.rightCommas` | `boolean` | No | `false` | Adds grouping to right-axis numbers. | Used by dual-axis charts. |
|
|
259
|
+
| `dataFormat.rightRoundTo` | `number` | No | `0` when omitted | Decimal precision for right-axis numbers. | Used by dual-axis charts. |
|
|
260
|
+
| `dataFormat.rightPrefix`, `dataFormat.rightSuffix` | `string` | No | `''` | Text added before or after right-axis numbers. | Used by dual-axis charts. |
|
|
261
|
+
| `dataFormat.bottomCommas` | `boolean` | No | `false` | Adds grouping to bottom-axis numbers. | Used for continuous x-axes and logarithmic forest plots. |
|
|
262
|
+
| `dataFormat.bottomRoundTo` | `number` | No | `0`; logarithmic forest plots fall back to `2` when omitted | Decimal precision for bottom-axis numbers. | Used for continuous x-axes and logarithmic forest plots. |
|
|
263
|
+
| `dataFormat.bottomPrefix`, `dataFormat.bottomSuffix` | `string` | No | `''` | Text added before or after bottom-axis numbers. | Used for continuous x-axes and logarithmic forest plots. |
|
|
264
|
+
| `dataFormat.bottomAbbreviated` | `boolean` | No | `false` | Abbreviates bottom-axis values. | Only applied when the formatter decides the value should be abbreviated. |
|
|
265
|
+
| `dataFormat.showPiePercent` | `boolean` | No | `false` | Treats pie values as already-authored percentages. | When disabled, pie output uses the chart's computed slice percentages. |
|
|
234
266
|
|
|
235
267
|
### Legend: `legend.*`
|
|
236
268
|
|
|
237
269
|
`legend` extends the shared [`Legend`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#legend) shape with chart-specific rendering and interaction fields.
|
|
238
270
|
|
|
239
|
-
| Field
|
|
240
|
-
|
|
|
241
|
-
| `legend.hide`
|
|
242
|
-
| `legend.position`
|
|
243
|
-
| `legend.behavior`
|
|
244
|
-
| `legend.label`, `legend.description`
|
|
245
|
-
| `legend.singleRow`
|
|
246
|
-
| `legend.unified`
|
|
247
|
-
| `legend.
|
|
248
|
-
| `legend.
|
|
249
|
-
| `legend.
|
|
250
|
-
| `legend.
|
|
251
|
-
| `legend.
|
|
252
|
-
| `legend.
|
|
253
|
-
| `legend.
|
|
254
|
-
| `legend.
|
|
255
|
-
| `legend.
|
|
256
|
-
| `legend.
|
|
257
|
-
| `legend.
|
|
258
|
-
| `legend.
|
|
259
|
-
| `legend.
|
|
260
|
-
| `legend.
|
|
261
|
-
| `legend.
|
|
262
|
-
| `legend.
|
|
263
|
-
| `legend.
|
|
264
|
-
| `legend.
|
|
271
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
272
|
+
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -------- | ------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
273
|
+
| `legend.hide` | `boolean` | No | `false` | Hides the chart legend. | Shared field; charts may still render specialized legends such as warming-stripes gradients separately. |
|
|
274
|
+
| `legend.position` | `left \| bottom \| top \| right \| side` | No | `top` | Places the legend relative to the chart. | Small viewports may force bottom placement. |
|
|
275
|
+
| `legend.behavior` | `highlight \| isolate` | No | `isolate` | Controls click behavior for series legends. | `highlight` emphasizes clicked series; `isolate` narrows display to selected legend entries where supported. |
|
|
276
|
+
| `legend.label`, `legend.description` | `string` | No | `''` | Legend heading and supporting description. | Supports HTML parsing and markup-variable processing when `enableMarkupVariables` is `true`. Standard chart legends support this behavior; HeatMap and Warming Stripes gradient legends render these fields as authored copy. |
|
|
277
|
+
| `legend.singleRow` | `boolean` | No | `true` | Requests a single-row legend layout. | Runtime may wrap when space is limited. |
|
|
278
|
+
| `legend.unified` | `boolean` | No | `true` for new charts | Combines legend handling for supported chart families. | New-chart creation explicitly authors `true`; an explicit `false` is preserved. |
|
|
279
|
+
| `legend.expandForecastConfidenceIntervals` | `boolean` | No | `true` for new charts; otherwise legacy behavior | Expands multi-interval forecast legends by interval and stage. | Only explicit `true` enables expansion. Existing charts with this field missing or set to `false` retain stage-only forecast legend entries. |
|
|
280
|
+
| `legend.axisAlign` | `boolean` | No | `true` | Aligns the legend with the plot/axis area. | For stacked Bar charts using `legend.behavior: "isolate"`, selected series are restacked from the axis baseline instead of retaining their full-stack offset. |
|
|
281
|
+
| `legend.colorCode` | `string` | No | `''` | Optional color-code metadata used by some legend modes. | Usually editor-managed. |
|
|
282
|
+
| `legend.reverseLabelOrder` | `boolean` | No | `false` | Reverses the legend item order. | Useful when visual stacking order should match the legend. |
|
|
283
|
+
| `legend.verticalSorted` | `boolean` | No | `false` | Sorts vertical legend items. | Chart-specific layout option. |
|
|
284
|
+
| `legend.highlightOnHover` | `boolean` | No | `false` | Highlights legend items and related marks on hover. | `true`, `false` |
|
|
285
|
+
| `legend.seriesHighlight` | `string[]` | No | `[]` | Initial series keys to highlight. | Runtime also updates this during legend interaction. |
|
|
286
|
+
| `legend.style` | `circles \| boxes \| gradient \| lines` | No | `circles` | Chooses marker style for legend items. | `gradient` is used by gradient/warming-stripes-style legends. |
|
|
287
|
+
| `legend.subStyle` | `linear blocks \| smooth` | No | `linear blocks` | Chooses gradient legend treatment. | Only meaningful for gradient-style legends. |
|
|
288
|
+
| `legend.shape`, `legend.hasShape` | `string`, `boolean` | No | `circle`, package defaults | Shape metadata for shape-based legend entries. | Used by pattern and specialized legend rendering. |
|
|
289
|
+
| `legend.tickRotation` | `number \| string` | No | `''` | Rotates gradient legend tick labels. | Saved configs may store a numeric string. Ignored by HeatMap block gradient legends. |
|
|
290
|
+
| `legend.groupBy` | `string` | No | `''` | Groups legend items by a source field. | Advanced legend layout option. |
|
|
291
|
+
| `legend.order` | `dataColumn \| asc \| desc` | No | `dataColumn` | Controls legend item ordering. | `dataColumn` follows the data/config order. |
|
|
292
|
+
| `legend.orderedValues` | `{ label?: string; value?: string }[]` | No | `[]` | Explicit legend order/labels. | Used when custom ordering is needed. |
|
|
293
|
+
| `legend.patterns`, `legend.patternField` | `object`, `string` | No | `{}`, `''` | Data-driven pattern configuration for legend marks. | Pattern entries can match an exact data value or cover a quantitative portion of an eligible bar. Missing pattern sizes render as medium (`10`). |
|
|
294
|
+
| `legend.dynamicLegend`, `legend.dynamicLegendDefaultText`, `legend.dynamicLegendItemLimit`, `legend.dynamicLegendItemLimitMessage`, `legend.dynamicLegendChartMessage` | mixed | No | Package defaults | Dynamic legend controls and messages. | Used when legend selections drive chart state or empty-selection copy. |
|
|
295
|
+
| `legend.warmingStripesIntervals` | `object[]` | No | None | Warming-stripes interval metadata. | Used by warming-stripes-style line chart rendering. |
|
|
296
|
+
| `legend.hideSuppressedLabels`, `legend.hideSuppressionLink`, `legend.tooltipLegendVisible` | `boolean` | No | `false`, `false`, inferred from legend visibility | Suppression and tooltip legend controls. | Used by suppression-aware legend and tooltip flows. |
|
|
297
|
+
| `legend.hideBorder.side`, `legend.hideBorder.topBottom` | `boolean` | No | `false`, `true` | Hides side or top/bottom legend borders. | Chart-specific styling option. |
|
|
298
|
+
|
|
299
|
+
Each `legend.patterns` entry supports the shared visual fields `label`, `color`, `shape`, `patternSize`, and `contrastCheck`, plus the application fields below. New patterns created in the editor default to `diagonalLines`, color `#1c1d1f`, and pattern size `10`.
|
|
300
|
+
|
|
301
|
+
| Pattern entry field | Type | Required | Default | Description | Allowed values / Notes |
|
|
302
|
+
| ------------------- | ------------------ | ------------- | ------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
303
|
+
| `application` | `value \| portion` | No | `value` | Chooses exact-value matching or a quantitative overlay. | An omitted value preserves the existing exact-value behavior. |
|
|
304
|
+
| `dataKey` | `string` | Conditional | None | Identifies the field used for value matching or the target bar series for a portion overlay. | In `portion` mode, use an eligible Bar or Combo bar-series key. Only one portion pattern is supported per target series; when duplicates are manually authored, the first configured entry wins. |
|
|
305
|
+
| `dataValue` | `string \| number` | For `value` | None | Selects the exact value that receives the pattern. | Used only when `application` is omitted or is `value`. |
|
|
306
|
+
| `patternValueKey` | `string` | For `portion` | None | Identifies the data column containing the absolute quantity to pattern. | Values are quantities, not percentages. In the editor, selecting this field creates a standard column configuration when one does not already exist, with tooltip and data-table display and comma formatting enabled. Changing or removing the pattern removes the former column configuration unless another portion pattern, chart series, or axis still uses it. Further label, formatting, visibility, and ordering changes are managed in the Columns section. |
|
|
307
|
+
| `placement` | `start \| end` | No | `end` | Places a portion overlay at the beginning or end of its bar. | `end` means top for vertical bars and right for horizontal bars; `start` means bottom or left. |
|
|
308
|
+
|
|
309
|
+
Portion overlays are supported for regular, positive-value vertical and horizontal Bar charts and vertical Combo bar series on linear axes. A solid divider in the pattern color marks an internal portion boundary; no divider is added when the portion equals the total. They are not applied to stacked bars, lollipops, logarithmic axes, or negative totals. The brush preview uses the same proportional geometry. A row receives no overlay when its total or portion is missing, nonnumeric, zero, or negative, or when the portion exceeds the total. These row-level values are handled silently without clamping, alerts, errors, or warnings, and the underlying solid bar continues to render. Tooltip and data-table presentation remain controlled by the standard `columns` configuration created for the pattern value column.
|
|
265
310
|
|
|
266
311
|
### Data Table: `table.*`
|
|
267
312
|
|
|
268
313
|
`table` uses the shared [`Table`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#table) structure. The fields below are the chart-facing table controls consumers are most likely to author or encounter; shared label, caption, collapse, height, and download label fields follow the core table contract.
|
|
269
314
|
|
|
270
|
-
| Field
|
|
271
|
-
|
|
|
272
|
-
| `table.show`
|
|
273
|
-
| `table.showDataTableLink`
|
|
274
|
-
| `table.showVertical`
|
|
275
|
-
| `table.dateDisplayFormat`
|
|
276
|
-
| `table.defaultSort`
|
|
277
|
-
| `table.download`, `table.showDownloadImgButton`, `table.showDownloadPdfButton`, `table.showDownloadUrl` | `boolean`
|
|
278
|
-
| `table.includeContextInDownload`
|
|
279
|
-
| `table.customTableConfig`
|
|
315
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
316
|
+
| ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------ | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
317
|
+
| `table.show` | `boolean` | No | `true` outside dashboards; otherwise context-dependent | Shows the built-in chart data table. | Hiding the table does not suppress an enabled `table.download` CSV control. Chart runtime also ensures a missing/blank `table.label` becomes `Data Table`. |
|
|
318
|
+
| `table.showDataTableLink` | `boolean` | No | `false` | Shows a skip/link target to the table in dashboard-style layouts. | The link is opt-in. It can render only when the chart's built-in table is also shown. |
|
|
319
|
+
| `table.showVertical` | `boolean` | No | `true` | Uses vertical table output when supported. | Chart runtime honors the authored/default value when rendering the shared table. |
|
|
320
|
+
| `table.dateDisplayFormat` | `string` | No | `%B %-d, %Y` | Date format for table output. | Uses the chart date-format helper conventions. |
|
|
321
|
+
| `table.defaultSort` | `object` | No | Auto-filled for date-axis charts when possible | Initial table sort. | Shared object with `column`, `sortDirection`, and optional `customOrder`; chart can seed the x-axis date column when omitted. |
|
|
322
|
+
| `table.download`, `table.showDownloadImgButton`, `table.showDownloadPdfButton`, `table.showDownloadUrl` | `boolean` | No | `false` | Enables table data, image/PDF, and URL download controls. | New standalone charts explicitly author `table.download: true`; new dashboard charts and current-version configs that omit it use `false`. An explicit value is preserved. `table.download` can render without the built-in table. See shared `Table` for related labels and download flags. |
|
|
323
|
+
| `table.includeContextInDownload` | `boolean` | No | `false` | Includes chart context in supported downloads. | Used by image/PDF download controls. |
|
|
324
|
+
| `table.customTableConfig` | [`Table`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#table) | No | None | Legacy custom-table marker. | Current chart runtime does not pass this as a nested table config; when truthy for non-Sankey tables, it switches the raw table data source to filtered config data. |
|
|
280
325
|
|
|
281
326
|
## Feature-Specific Enhancements
|
|
282
327
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
328
|
+
### Bar and Line racing mode
|
|
329
|
+
|
|
330
|
+
Set `visualizationSubType: "racing"` explicitly on a Bar or Line chart. Racing starts paused, preserves the rendered frame order, displays the current frame, and stops at the final frame with a Replay action. Invalid saved configs render as an ordinary chart of the same family.
|
|
331
|
+
|
|
332
|
+
Bar racing uses a horizontal ranked presentation. The preferred wide-data shape uses a categorical `xAxis.dataKey` for frames and at least two ordinary numeric `series[]` entries as competitors. Long-form data remains supported through exactly one numeric series with `dynamicCategory`. Both shapes require flat bars, at least two frames, and at least two competitors with finite nonnegative values.
|
|
333
|
+
|
|
334
|
+
Bar races honor the horizontal-bar `yAxis.labelPlacement` options. Values remain visible after each bar when `yAxis.displayNumbersOnBar` is `false`; when it is `true`, values move inside bars where they fit and remain after bars that are too short.
|
|
335
|
+
|
|
336
|
+
Bar races require `xAxis.type: "categorical"`. Their dedicated renderer supports the date/category data key, category ordering and exclusions, value number formatting, colors, and tooltip opacity; unsupported ordinary-chart settings (axes and ticks, regions, legends, local filters, bar borders, patterns, and text annotations) are preserved in config but are not applied while Racing is selected.
|
|
337
|
+
|
|
338
|
+
Line racing accepts ordinary wide series or exactly one dynamic-category series over categorical, date, or date-time frames. It retains the ordinary Line chart's full axes and progressively reveals each complete path from left to right in the displayed x-axis order, including when dates are shown newest to oldest, without exposing future segments. Supported `series[].type` values (`Line`, `dashed-sm`, `dashed-md`, and `dashed-lg`) retain their solid or dashed pattern during playback, and `series[].weight` remains the visible stroke width. The current frame label and tooltip rows advance with the drawn portion; future points, labels, and tooltip targets remain unavailable. Reduced-motion preferences complete the path immediately without changing its authored styling. Areas, confidence bands, preliminary styling, negative values, small multiples, brushes, automatic Line-to-Bar conversion, duplicate frame/series rows, malformed date frames, and fewer than two valid frames are not supported.
|
|
339
|
+
|
|
340
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
341
|
+
| -------------------------- | -------- | -------- | ------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
342
|
+
| `barRace.maxBars` | `number` | No | `10` | Limits the number of ranked bars shown per frame. | Clamped from `1` through the number of valid competitors. Playback state is not saved. |
|
|
343
|
+
| `barRace.secondsPerFrame` | `number` | No | `0.5` | Sets the number of seconds allocated to each Bar frame. | Normalized to `0`, `0.5`, `1`, or `1.5`; `0` completes immediately. The live timing readout requires `?isCoveDeveloper=true`. |
|
|
344
|
+
| `lineRace.secondsPerFrame` | `number` | No | `0.5` | Sets the number of seconds allocated to each Line frame. | Normalized to `0`, `0.5`, `1`, or `1.5`; `0` completes immediately. The live timing readout requires `?isCoveDeveloper=true`; live elapsed time and playback position are runtime-only. |
|
|
345
|
+
|
|
346
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
347
|
+
| ---------------- | ----------------------------------------------------------------------------------------------------- | -------- | ------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------- |
|
|
348
|
+
| `smallMultiples` | `object` | No | Package-initialized defaults | Splits one chart into multiple tiles. | See `smallMultiples.*` below. |
|
|
349
|
+
| `forestPlot` | `object` | No | Package-initialized defaults | Forest plot-specific rendering settings. | See `forestPlot.*` below. |
|
|
350
|
+
| `heatmap` | `object` | No | Package-initialized defaults | HeatMap layout and label settings. | See `heatmap.*` below. |
|
|
351
|
+
| `horizon` | `object` | No | `HORIZON_DEFAULTS` merged with config | Horizon chart settings. | See `horizon.*` below. |
|
|
352
|
+
| `radar` | `object` | No | Package-initialized defaults | Radar chart display settings. | See `radar.*` below. |
|
|
353
|
+
| `sankey` | `object` | No | Package-initialized defaults | Sankey layout, sizing, and color settings. | See `sankey.*` below. |
|
|
354
|
+
| `boxplot` | `object` | No | Package-initialized defaults | Box plot labels and plot metadata. | See `boxplot.*` below. Runtime-derived plot arrays are listed in `Fields You Can Ignore`. |
|
|
355
|
+
| `annotations` | [`Annotation[]`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#annotation) | No | `[]` | Overlay annotations on the chart canvas. | Shared annotation contract from `@cdc/core`. |
|
|
356
|
+
| `regions` | `object[]` | No | `[]` | Shaded date or category regions. | See `Regions: regions[]` below. |
|
|
357
|
+
|
|
358
|
+
### Chart annotations: `annotations[]`
|
|
359
|
+
|
|
360
|
+
Chart annotations use the shared [`Annotation`](https://github.com/CDCgov/cdc-open-viz/blob/main/packages/core/CONFIG.md#annotation) fields plus these chart-only label controls. New and legacy annotations may omit these fields and retain automatic width and placement.
|
|
361
|
+
|
|
362
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
363
|
+
| ----------------------------- | ----------------------------------------- | -------- | ----------------------------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
364
|
+
| `annotations[].labelWidthEm` | `number` | No | Fit content | Sets the annotation-label width relative to its responsive font size. | Minimum supported value is `6` for callouts and `4` for event lines. When omitted, event lines retain their legacy intrinsic sizing with the existing 186px maximum; callouts start from fit-content sizing with the existing 150/186px maximums and may narrow to fit the plot. |
|
|
365
|
+
| `annotations[].labelPosition` | `auto \| left \| right \| above \| below` | No | `auto` | Selects the label side relative to the connector endpoint. | Automatic and explicit placement retain the same side at every viewport size. Event-line authoring supports `auto`, `left`, and `right`; callouts support all values. Mobile symbols ignore this field, while mobile full-text labels honor it. |
|
|
366
|
+
| `annotations[].autoSide` | `left \| right \| above \| below` | No | Derived from scaled `dx`/`dy` | Stores the last side chosen while dragging an automatically positioned callout. | When present, responsive rendering never changes this side. Existing annotations without this field retain the legacy behavior of deriving their side from viewport-scaled offsets. New editor-created annotations initialize it to `right`. |
|
|
294
367
|
|
|
295
368
|
### HeatMap: `heatmap.*`
|
|
296
369
|
|
|
297
370
|
`heatmap` is chart-owned and only meaningful when `visualizationType` is `HeatMap`. HeatMap uses `xAxis.dataKey` as the column bucket and `series[]` as row definitions. `yAxis.label` labels the row axis, but row values come from the matching `columns` label when customized, then `series[].name`, then `series[].dataKey`; they do not come from `yAxis.dataKey`.
|
|
298
371
|
|
|
299
|
-
| Field
|
|
300
|
-
|
|
|
301
|
-
| `xAxis.dataKey`
|
|
302
|
-
| `series[]`
|
|
303
|
-
| `series[].name`
|
|
304
|
-
| `heatmap.cellPadding`
|
|
305
|
-
| `heatmap.rowLabelGap`
|
|
306
|
-
| `heatmap.columnLabelGap`
|
|
307
|
-
| `heatmap.colorBucketCount` | `number`
|
|
308
|
-
| `heatmap.xAxisPosition`
|
|
309
|
-
| `heatmap.showCellValues`
|
|
372
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
373
|
+
| -------------------------- | --------------- | ---------------- | ------------------ | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
374
|
+
| `xAxis.dataKey` | `string` | Yes for heatmaps | None | Source column used to create heatmap columns. | Date and date-time x-axis values are sorted chronologically with the chart date parser; categorical values preserve data order. |
|
|
375
|
+
| `series[]` | `Series[]` | Yes for heatmaps | `[]` | Source value columns used to create heatmap rows. | Each selected series becomes one row. Non-numeric series values are skipped; missing x/series combinations render as empty cells. |
|
|
376
|
+
| `series[].name` | `string` | No | `series[].dataKey` | Display label for the heatmap row when the matching `columns` label is not customized. | Also used in cell accessibility labels and tooltips. |
|
|
377
|
+
| `heatmap.cellPadding` | `number` | No | `1` | Gap between adjacent heatmap cells. | Values below 0 are treated as 0; runtime clamps the effective gap so cells do not render with negative dimensions. |
|
|
378
|
+
| `heatmap.rowLabelGap` | `number` | No | `0` | Additional horizontal gap between row labels and Y-axis tick marks. | Values below 0 are treated as 0. The Y-axis remains against the grid; extreme gaps are bounded by the available label margin. Ignored visually when `yAxis.hideLabel` hides row labels. |
|
|
379
|
+
| `heatmap.columnLabelGap` | `number` | No | `20` | Gap between x-axis tick labels and the heatmap grid. | Applies to top and bottom x-axis placement and contributes to reserved axis margin. |
|
|
380
|
+
| `heatmap.colorBucketCount` | `number` | No | `9` | Sets the Data Grouping control for discrete heatmap value groups. | Values below 1 are treated as 1; values above 9 are treated as 9. |
|
|
381
|
+
| `heatmap.xAxisPosition` | `top \| bottom` | No | `top` | Places the heatmap x-axis above or below the grid. | Invalid or omitted values fall back to `top`; the editor exposes this under `Date/Category Axis` for HeatMap only. |
|
|
382
|
+
| `heatmap.showCellValues` | `boolean` | No | `false` | Shows formatted numeric values inside cells. | Text uses 50% of cell height, clamped to 9-16px. Values that exceed the cell width are hidden; empty cells do not show labels. |
|
|
383
|
+
| `heatmap.horizontalScroll` | `boolean` | No | `false` | Allows wide heatmaps to scroll horizontally instead of shrinking every column to fit. | Scrolling activates only when the configured minimum column widths exceed the visible grid width; the initial view starts at the first column. |
|
|
384
|
+
| `heatmap.minColumnWidth` | `number` | No | `44` | Minimum width in pixels for each column when horizontal scrolling is enabled. | Values are clamped to 1-400. For exceptionally large domains, the total grid width is capped at 1,000,000px and effective column widths may be smaller. Has no visual effect while scrolling is disabled. |
|
|
310
385
|
|
|
311
386
|
HeatMap-specific behavior:
|
|
312
387
|
|
|
313
|
-
| Behavior
|
|
314
|
-
|
|
|
315
|
-
| Aggregation
|
|
316
|
-
| Tooltips
|
|
317
|
-
| Palette and legend | HeatMap colors come from `general.palette` or the chart fallback palette. `heatmap.colorBucketCount` quantizes the scale into 1-9 colors. `legend.style: "gradient"` or an omitted style renders a block-based gradient legend with one value-range label per block; HeatMap normalizes `legend.subStyle: "smooth"` to `linear blocks` and ignores `legend.tickRotation`. Non-gradient legend styles render generated value ranges.
|
|
318
|
-
| Axis labels
|
|
388
|
+
| Behavior | Details |
|
|
389
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
390
|
+
| Aggregation | If multiple source rows share the same x-axis value and series key, their numeric values are summed into one cell. |
|
|
391
|
+
| Tooltips | HeatMap cells use the shared chart tooltip markup. `series[].tooltip: false` hides that series row/value from cell tooltips. Column configs with `tooltips: true` can add extra rows unless they refer to the x-axis column or one of the heatmap series columns. Aggregated cells show an aggregated-row count and show `Multiple values` for extra tooltip columns that disagree across source rows. |
|
|
392
|
+
| Palette and legend | HeatMap colors come from `general.palette` or the chart fallback palette. `heatmap.colorBucketCount` quantizes the scale into 1-9 colors. `legend.style: "gradient"` or an omitted style renders a block-based gradient legend with one value-range label per block; HeatMap normalizes `legend.subStyle: "smooth"` to `linear blocks` and ignores `legend.tickRotation`. Non-gradient legend styles render generated value ranges. |
|
|
393
|
+
| Axis labels | New HeatMaps default `xAxis.numTicks` to `Auto` with no viewport overrides. A positive `xAxis.numTicks` or active `xAxis.viewportNumTicks` override samples labels and tick marks evenly without removing cells; HeatMap does not use the separate manual step-count mode. When no count is supplied, HeatMap estimates label density from the available width and rotation. `xAxis.tickRotation` or `xAxis.maxTickRotation` rotates column labels and contributes to x-axis title spacing. `yAxis.tickRotation` rotates row labels. A saved HeatMap with an authored Y-axis but no placement keeps the legacy `side` placement; a wholly omitted Y-axis receives the current `top` default. `yAxis.titlePlacement: "top"` renders the row-axis title above the row labels, aligned with the top x-axis title when one is visible; side placement renders the rotated side title centered beside the row labels. `xAxis.hideAxis` and `xAxis.hideTicks` hide the Date/Category axis line and tick marks. `hideXAxisLabel` and `hideYAxisLabel` hide the axis titles; `xAxis.hideLabel` and `yAxis.hideLabel` hide tick labels. |
|
|
394
|
+
| Grid layout | Cell width and height are calculated independently so the full matrix fills the available plot area. Use General > Chart Height to adjust cell height. `heatmap.rowLabelGap` moves row labels away from the tick marks while the row axis stays against the grid. When `heatmap.horizontalScroll` is enabled and the columns need more than the available width, the row axis and axis titles remain fixed while the column axis and cells scroll from the first column. |
|
|
319
395
|
|
|
320
396
|
### Small Multiples: `smallMultiples.*`
|
|
321
397
|
|
|
322
398
|
Small multiples are chart-owned. They are supported by chart types allowed by the editor/runtime permissions.
|
|
323
399
|
|
|
324
|
-
| Field
|
|
325
|
-
|
|
|
326
|
-
| `smallMultiples.mode`
|
|
327
|
-
| `smallMultiples.tileColumn`
|
|
328
|
-
| `smallMultiples.tilesPerRowDesktop`
|
|
329
|
-
| `smallMultiples.tilesPerRowMobile`
|
|
330
|
-
| `smallMultiples.tileOrderType`
|
|
331
|
-
| `smallMultiples.tileOrder`
|
|
332
|
-
| `smallMultiples.tileTitles`
|
|
333
|
-
| `smallMultiples.independentYAxis`
|
|
334
|
-
| `smallMultiples.colorMode`
|
|
335
|
-
| `smallMultiples.synchronizedTooltips` | `boolean`
|
|
336
|
-
| `smallMultiples.showAreaUnderLine`
|
|
400
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
401
|
+
| ------------------------------------- | ------------------------------ | ------------- | ------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
402
|
+
| `smallMultiples.mode` | `by-column \| by-series \| ''` | No | `''` | Enables tiling and chooses how tiles are created. | `by-series` creates one tile per configured series; `by-column` creates one tile per unique value in `tileColumn`. Blank disables small multiples. |
|
|
403
|
+
| `smallMultiples.tileColumn` | `string` | Conditionally | `''` | Source column used to create tiles in `by-column` mode. | Required when `mode` is `by-column`. |
|
|
404
|
+
| `smallMultiples.tilesPerRowDesktop` | `number` | No | `3` | Desktop tile count per row. | Editor constrains this to 1-3. |
|
|
405
|
+
| `smallMultiples.tilesPerRowMobile` | `number` | No | `1` | Mobile tile count per row. | Current editor keeps mobile at one tile per row. |
|
|
406
|
+
| `smallMultiples.tileOrderType` | `asc \| desc \| custom` | No | `asc` | Sorts tile order by title or uses `tileOrder`. | `asc` and `desc` use numeric-aware natural sorting; `custom` uses the explicit `tileOrder` array. |
|
|
407
|
+
| `smallMultiples.tileOrder` | `string[]` | No | `[]` | Explicit tile order for custom ordering. | Values should match series keys or `tileColumn` values depending on mode. |
|
|
408
|
+
| `smallMultiples.tileTitles` | `Record<string, string>` | No | `{}` | Custom display titles keyed by tile value. | Empty or same-as-key titles can be omitted. |
|
|
409
|
+
| `smallMultiples.independentYAxis` | `boolean` | No | `false` | Gives each tile its own y-axis scale. | Chart-level y-axis min/max overrides this behavior. |
|
|
410
|
+
| `smallMultiples.colorMode` | `same \| different` | No | `same` | Chooses whether tiles reuse the same color or step through the palette. | Editor defaults to `different` when the control is first shown, but initial state is `same`. |
|
|
411
|
+
| `smallMultiples.synchronizedTooltips` | `boolean` | No | `true` | Shows matching tooltips across tiles at the same data point. | `true`, `false` |
|
|
412
|
+
| `smallMultiples.showAreaUnderLine` | `boolean` | No | `true` | Shades the area below line tiles. | Only meaningful for line small multiples. |
|
|
337
413
|
|
|
338
414
|
When `yAxis.titlePlacement` is `top`, the leading tile in each row renders that y-axis title in the tile header instead of inside the SVG plot area.
|
|
339
415
|
|
|
@@ -341,153 +417,213 @@ When `yAxis.titlePlacement` is `top`, the leading tile in each row renders that
|
|
|
341
417
|
|
|
342
418
|
`forestPlot` is chart-owned and only meaningful when `visualizationType` is `Forest Plot`.
|
|
343
419
|
|
|
344
|
-
| Field
|
|
345
|
-
|
|
|
346
|
-
| `forestPlot.type`
|
|
347
|
-
| `forestPlot.title`
|
|
348
|
-
| `forestPlot.estimateField`
|
|
349
|
-
| `forestPlot.estimateRadius`
|
|
350
|
-
| `forestPlot.lower`, `forestPlot.upper`
|
|
351
|
-
| `forestPlot.shape`
|
|
352
|
-
| `forestPlot.hideDateCategoryCol`
|
|
353
|
-
| `forestPlot.lineOfNoEffect.show`
|
|
354
|
-
| `forestPlot.startAt`
|
|
355
|
-
| `forestPlot.pooledResult.column`
|
|
356
|
-
| `forestPlot.pooledResult.diamondHeight`
|
|
357
|
-
| `forestPlot.rowHeight`
|
|
358
|
-
| `forestPlot.leftLabel`, `forestPlot.rightLabel`
|
|
359
|
-
| `forestPlot.radius.scalingColumn`
|
|
360
|
-
| `forestPlot.radius.min`, `forestPlot.radius.max`
|
|
361
|
-
| `forestPlot.colors.line`, `forestPlot.colors.shape` | CSS color string
|
|
362
|
-
| `forestPlot.regression.showDiamond`
|
|
363
|
-
| `forestPlot.regression.description`
|
|
364
|
-
| `forestPlot.regression.baseLineColor`
|
|
420
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
421
|
+
| --------------------------------------------------- | ----------------------------- | -------------------- | ---------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
|
422
|
+
| `forestPlot.type` | `Linear \| Logarithmic \| ''` | Yes for forest plots | `''` | Chooses the forest plot scale. | `Linear` places the line of no effect at 0; `Logarithmic` places it at 1. |
|
|
423
|
+
| `forestPlot.title` | `string` | No | `''` | Title centered above the forest plot body. | Optional. |
|
|
424
|
+
| `forestPlot.estimateField` | `string` | Yes for forest plots | `''` | Column containing the point estimate. | Must exist in the active dataset. |
|
|
425
|
+
| `forestPlot.estimateRadius` | `string` | No | `''` | Legacy/source column used by older estimate-radius flows. | Prefer `forestPlot.radius.scalingColumn` for current radius scaling. |
|
|
426
|
+
| `forestPlot.lower`, `forestPlot.upper` | `string` | Yes for forest plots | `''` | Columns containing lower and upper confidence interval bounds. | Must exist in the active dataset. |
|
|
427
|
+
| `forestPlot.shape` | `text \| circle \| square` | No | `square` | Shape used for point estimates. | Editor exposes `text`, `circle`, and `square`. |
|
|
428
|
+
| `forestPlot.hideDateCategoryCol` | `boolean` | No | Package defaults | Hides the date/category column in supported forest plot layouts. | Only meaningful for forest plot side/table output. |
|
|
429
|
+
| `forestPlot.lineOfNoEffect.show` | `boolean` | No | `true` | Shows the line of no effect. | Position depends on `forestPlot.type`. |
|
|
430
|
+
| `forestPlot.startAt` | `number` | No | `0` | Starting value metadata for forest plot layout/scaling. | Advanced forest plot behavior. |
|
|
431
|
+
| `forestPlot.pooledResult.column` | `string` | No | `''` | Column/value used to identify pooled result rows. | Used with diamond pooled-result rendering. |
|
|
432
|
+
| `forestPlot.pooledResult.diamondHeight` | `number` | No | `5` | Height of pooled-result diamonds. | Pixel-like display value. |
|
|
433
|
+
| `forestPlot.rowHeight` | `number` | No | `20` | Height for each study row. | Editor constrains this roughly to 20-45. |
|
|
434
|
+
| `forestPlot.leftLabel`, `forestPlot.rightLabel` | `string` | No | `''` | Labels shown under the plot to describe directionality. | Example: favors treatment / favors control. |
|
|
435
|
+
| `forestPlot.radius.scalingColumn` | `string` | No | `''` | Column used to scale point estimate radius. | Leave blank for fixed-size points. |
|
|
436
|
+
| `forestPlot.radius.min`, `forestPlot.radius.max` | `number` | No | `2`, `10` | Minimum and maximum point radius. | Used when `radius.scalingColumn` is set. |
|
|
437
|
+
| `forestPlot.colors.line`, `forestPlot.colors.shape` | CSS color string | No | `''` | Custom colors for the no-effect line and point estimate shape. | Blank values use renderer defaults. |
|
|
438
|
+
| `forestPlot.regression.showDiamond` | `boolean` | No | Package defaults | Shows a regression diamond when supported. | Only meaningful for regression-style forest plot flows. |
|
|
439
|
+
| `forestPlot.regression.description` | `string` | No | Package defaults | Text label rendered with the regression/diamond summary when present. | Only meaningful for regression-style forest plot flows. |
|
|
440
|
+
| `forestPlot.regression.baseLineColor` | CSS color string | No | Package defaults | Color for the regression baseline and diamond when supported. | Blank values use renderer defaults. |
|
|
365
441
|
|
|
366
442
|
Forest plots also use normal chart `xAxis`, `columns`, `table`, and `dataFormat.bottom*` settings. Column configs can mark forest-plot table columns with the chart-owned column extensions below.
|
|
367
443
|
|
|
368
|
-
| Field
|
|
369
|
-
|
|
|
370
|
-
| `columns.*.forestPlot`
|
|
371
|
-
| `columns.*.forestPlotAlignRight`
|
|
372
|
-
| `columns.*.forestPlotStartingPoint` | `number`
|
|
444
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
445
|
+
| ----------------------------------- | --------- | -------- | ------- | ------------------------------------------------------------- | ------------------------------------------------------- |
|
|
446
|
+
| `columns.*.forestPlot` | `boolean` | No | `false` | Marks the column for forest plot table/sidebar display. | Only meaningful for `visualizationType: "Forest Plot"`. |
|
|
447
|
+
| `columns.*.forestPlotAlignRight` | `boolean` | No | `false` | Right-aligns the forest plot column value. | Only meaningful for forest plot column output. |
|
|
448
|
+
| `columns.*.forestPlotStartingPoint` | `number` | No | None | Forest plot baseline/starting point metadata for that column. | Advanced forest plot table behavior. |
|
|
373
449
|
|
|
374
450
|
### Regions: `regions[]`
|
|
375
451
|
|
|
376
452
|
Regions are chart-owned shaded ranges or markers.
|
|
377
453
|
|
|
378
|
-
| Field
|
|
379
|
-
|
|
|
380
|
-
| `regions[].from`, `regions[].to`
|
|
381
|
-
| `regions[].label`
|
|
382
|
-
| `regions[].color`
|
|
383
|
-
| `regions[].background`
|
|
384
|
-
| `regions[].range`
|
|
385
|
-
| `regions[].fromType`, `regions[].toType` | `string` | No
|
|
454
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
455
|
+
| ---------------------------------------- | -------- | -------- | --------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
456
|
+
| `regions[].from`, `regions[].to` | `string` | Yes | None | Start and end values for the region. | May represent dates, categories, or numeric thresholds. |
|
|
457
|
+
| `regions[].label` | `string` | No | `''` | Region label shown in supported UIs. | Optional. |
|
|
458
|
+
| `regions[].color` | `string` | No | App font color (`--cool-gray-90`) | Label text color. | CSS color string. Legacy configs migrated to `red` when this was omitted before `4.26.5`. |
|
|
459
|
+
| `regions[].background` | `string` | No | `--cool-gray-50` | Fill color for the shaded region. | CSS color string. Rendered at 30% opacity above gridlines and behind data marks. Legacy configs migrated to `red` when this was omitted before `4.26.5`. |
|
|
460
|
+
| `regions[].range` | `string` | No | `Custom` in editor flows | Region mode metadata. | Package-defined values such as `Custom`. |
|
|
461
|
+
| `regions[].fromType`, `regions[].toType` | `string` | No | `Fixed` | Interpretation of the start/end values. | Examples include `Fixed`, `Previous Days`, and `Last Date`. |
|
|
386
462
|
|
|
387
463
|
### Radar: `radar.*`
|
|
388
464
|
|
|
389
465
|
`radar` is chart-owned and only meaningful when `visualizationType` is `Radar`.
|
|
390
466
|
|
|
391
|
-
| Field
|
|
392
|
-
|
|
|
393
|
-
| `xAxis.dataKey`
|
|
394
|
-
| `radar.gridRings`
|
|
395
|
-
| `radar.showGridRings`
|
|
396
|
-
| `radar.gridRingStyle`
|
|
397
|
-
| `radar.scaleMin`
|
|
398
|
-
| `radar.scaleMax`
|
|
399
|
-
| `radar.showFill`
|
|
400
|
-
| `radar.fillOpacity`
|
|
401
|
-
| `radar.strokeWidth`
|
|
402
|
-
| `radar.showPoints`
|
|
403
|
-
| `radar.pointRadius`
|
|
404
|
-
| `radar.axisLabelOffset` | `number`
|
|
467
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
468
|
+
| ----------------------- | --------------------- | ------------- | -------------------- | ----------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
469
|
+
| `xAxis.dataKey` | `string` | Yes for radar | None | Category column used for radar axes. | Required by the radar renderer. |
|
|
470
|
+
| `radar.gridRings` | `number` | No | `5` | Number of concentric grid rings. | Editor constrains this to 3-10. |
|
|
471
|
+
| `radar.showGridRings` | `boolean` | No | `true` | Shows the radar grid rings. | `true`, `false` |
|
|
472
|
+
| `radar.gridRingStyle` | `polygons \| circles` | No | `polygons` | Shape of the grid rings. | `polygons` follows the axis count; `circles` renders rounded rings. |
|
|
473
|
+
| `radar.scaleMin` | `number` | No | `0` | Minimum radar scale value at the center. | Numeric. |
|
|
474
|
+
| `radar.scaleMax` | `number \| string` | No | `''` | Maximum radar scale value. | Blank means auto-calculate from data. |
|
|
475
|
+
| `radar.showFill` | `boolean` | No | `false` when omitted | Fills the polygon area. | The initial state does not seed this field; renderer/editor treat missing as false. |
|
|
476
|
+
| `radar.fillOpacity` | `number` | No | `0.3` | Opacity for polygon fill. | Used when `showFill` is true; expected range is 0-1. |
|
|
477
|
+
| `radar.strokeWidth` | `number` | No | `2` | Width of the polygon outline. | Editor constrains this to 1-5. |
|
|
478
|
+
| `radar.showPoints` | `boolean` | No | `true` | Shows point markers at polygon vertices. | `true`, `false` |
|
|
479
|
+
| `radar.pointRadius` | `number` | No | `4` | Radius of point markers. | Used when `showPoints` is true. |
|
|
480
|
+
| `radar.axisLabelOffset` | `number` | No | `15` | Distance between axis endpoint and label. | Pixel-like offset. |
|
|
405
481
|
|
|
406
482
|
### Sankey: `sankey.*`
|
|
407
483
|
|
|
408
|
-
`sankey` is chart-owned and only meaningful when `visualizationType` is `Sankey`. Sankey configs
|
|
409
|
-
|
|
410
|
-
| Field
|
|
411
|
-
|
|
|
412
|
-
| `sankey.iterations`
|
|
413
|
-
| `sankey.nodePadding`
|
|
414
|
-
| `sankey.nodeSize.nodeWidth`
|
|
415
|
-
| `sankey.margin.margin_x`, `sankey.margin.margin_y`
|
|
416
|
-
| `sankey.
|
|
417
|
-
| `sankey.
|
|
418
|
-
| `sankey.
|
|
419
|
-
| `sankey.
|
|
420
|
-
| `sankey.
|
|
421
|
-
| `sankey.
|
|
422
|
-
| `sankey.
|
|
423
|
-
| `
|
|
424
|
-
| `
|
|
425
|
-
| `
|
|
426
|
-
| `data[
|
|
427
|
-
|
|
484
|
+
`sankey` is chart-owned and only meaningful when `visualizationType` is `Sankey`. Sankey configs use tabular `data` rows. Selected source, target, and value columns come from `sankey.columns`; when a selected column is missing, the renderer falls back to common `source`/`target`/`value` aliases.
|
|
485
|
+
|
|
486
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
487
|
+
| ------------------------------------------------------------------------- | --------------------------- | -------------- | --------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
488
|
+
| `sankey.iterations` | `number` | No | `1` | Layout iteration count. | Higher values can adjust node placement. |
|
|
489
|
+
| `sankey.nodePadding` | `number` | No | `55` | Vertical spacing between nodes. | Pixel-like layout value. |
|
|
490
|
+
| `sankey.nodeSize.nodeWidth` | `number` | No | `26` | Width of each node. | Initial state also contains `nodeHeight`, but the public width control is the meaningful renderer field. |
|
|
491
|
+
| `sankey.margin.margin_x`, `sankey.margin.margin_y` | `number` | No | `0`, `25` | Horizontal and vertical layout margins. | Pixel-like layout values. |
|
|
492
|
+
| `sankey.horizontalScrollWidth` | `number` | No | `900` | Width used for the scrollable Sankey layout when the chart container is narrower than this value. | New Sankey configs default to `900` for medium and small screen scrolling. When omitted, blank, or non-positive, Sankey uses the full container width. |
|
|
493
|
+
| `sankey.columns.source`, `sankey.columns.target`, `sankey.columns.value` | `string` | No | `source`, `target`, `value` | Selected imported data columns for source nodes, target nodes, and link values. | If a selected column is omitted or missing from a row, Sankey falls back to case-insensitive aliases: `source`/`from`, `target`/`to`, and `value`/`weight`/`count`. |
|
|
494
|
+
| `sankey.rxValue` | `number` | No | `0.9` | Node corner radius. | SVG rectangle radius value. |
|
|
495
|
+
| `sankey.nodeColor.default`, `sankey.nodeColor.inactive` | CSS color string | No | `#ff8500`, `#808080` | Node fallback and inactive colors. | Active nodes use the first color from `general.palette`; `default` is used only when no palette color is available. |
|
|
496
|
+
| `sankey.linkColor.default`, `sankey.linkColor.inactive` | CSS color string | No | `#ffc900`, `#D3D3D3` | Link fallback and inactive colors. | Active links use the second color from `general.palette`, falling back to the first color and then `linkColor.default`. |
|
|
497
|
+
| `sankey.opacity.nodeOpacityDefault`, `sankey.opacity.nodeOpacityInactive` | `number` | No | `1.0`, `0.1` | Node opacity for default and inactive states. | Expected range is 0-1. |
|
|
498
|
+
| `sankey.opacity.LinkOpacityDefault`, `sankey.opacity.LinkOpacityInactive` | `number` | No | `1.0`, `0.1` | Link opacity for default and inactive states. | Field names preserve legacy capitalization. |
|
|
499
|
+
| `sankey.nodeFontColor` | CSS color string | No | `black` | Text color for node labels. | CSS color string. |
|
|
500
|
+
| `sankey.nodeValueStyle.textBefore`, `sankey.nodeValueStyle.textAfter` | `string` | No | `(`, `)` | Text wrapped around node values. | Useful for units or punctuation around displayed values. |
|
|
501
|
+
| `enableTooltips` | `boolean` | No | `false` | Enables simple Sankey node and link tooltips. | Node tooltips display the node and formatted value. Link tooltips display the complete source-to-target flow and formatted link value. |
|
|
502
|
+
| `data[]` | `Record<string, unknown>[]` | Yes for Sankey | None | Tabular Sankey link definitions. | Source, target, and value are read from `sankey.columns` first, then from aliases. Rows with missing labels, invalid values, zero values, or negative values are ignored. Duplicate source/target pairs are combined. |
|
|
503
|
+
|
|
504
|
+
### Network: `network.*`
|
|
505
|
+
|
|
506
|
+
`network` is chart-owned and only meaningful when `visualizationType` is `Network`. Network charts consume edge-list rows; each unique source or target value becomes a node. Node labels are always displayed at 16px and are placed around nodes to avoid nodes, links, and previously placed labels when possible. See [`examples/network.json`](./examples/network.json) for a minimum usable configuration.
|
|
507
|
+
|
|
508
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
509
|
+
| --------------------------- | --------------------------- | --------------- | --------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
510
|
+
| `network.columns.source` | `string` | Yes for Network | `source` | Column containing the starting node label. | Blank and missing endpoints are rejected. |
|
|
511
|
+
| `network.columns.target` | `string` | Yes for Network | `target` | Column containing the ending node label. | Self-links are rejected. |
|
|
512
|
+
| `network.columns.weight` | `string` | No | `''` | Optional positive numeric link-weight column. | Comma-formatted numbers are accepted. Invalid, zero, and negative selected weights are rejected; omitted weights render uniformly. Hidden from the supporting data table by default. |
|
|
513
|
+
| `network.columns.style` | `string` | No | `''` | Optional column controlling each link's stroke style. | Case-insensitive `dashed` values render dashed; all other values render solid. Aggregated duplicate links are dashed if any contributing row is dashed. Hidden from the supporting data table by default. |
|
|
514
|
+
| `network.columns.nodeColor` | `string` | No | `''` | Optional color column for source nodes. | Values must be Chroma-compatible literal CSS colors. The first valid value for a repeated source node wins; target-only nodes and invalid or blank values use `network.nodeColor`. Hidden from the supporting data table by default. |
|
|
515
|
+
| `network.directed` | `boolean` | No | `false` | Keeps reverse links distinct and displays arrowheads. | When false, reverse pairs are merged before layout. |
|
|
516
|
+
| `network.height` | `number` | No | `500` | Height of the responsive SVG. | Minimum runtime height is 160 pixels. |
|
|
517
|
+
| `network.nodeRadius` | `number` | No | `8` | Radius of each node. | Values below 2 use the minimum; oversized values are clamped to fit the viewport. |
|
|
518
|
+
| `network.nodeColor` | CSS color string | No | `#005eaa` | Default fill color for nodes without a mapped valid color. | A valid `network.columns.nodeColor` value overrides this value per source node. Config-only; not shown in the visual editor. |
|
|
519
|
+
| `network.linkColor` | CSS color string | No | `#333333` | Stroke and arrowhead color for links. | Weighted links scale width within a bounded range. Config-only; not shown in the visual editor. |
|
|
520
|
+
| `network.linkStyleLabels.solid` | `string` | No | `Solid` | Caption for solid links in the link-style key. | Runtime trims the value; blank or omitted values use `Solid`. |
|
|
521
|
+
| `network.linkStyleLabels.dashed` | `string` | No | `Dashed` | Caption for dashed links in the link-style key. | Runtime trims the value; blank or omitted values use `Dashed`. |
|
|
522
|
+
| `network.linkDistance` | `number` | No | `90` | Preferred force-layout distance between connected nodes. | The editor slider ranges from `20` through `300` in steps of `5`; config values below 20 use the runtime minimum. |
|
|
523
|
+
| `network.chargeStrength` | `number` | No | `-240` | Force-layout repulsion strength. | The editor slider ranges from `-1000` through `0` in steps of `10`; negative values spread nodes apart and positive config values are clamped to zero. |
|
|
524
|
+
| `network.rotation` | `number` | No | `0` | Initial clockwise rotation in degrees. | Config-only; not shown in the visual editor. The runtime toolbar does not change rotation. |
|
|
525
|
+
| `network.scale` | `number` | No | `1` | Initial zoom scale. | Config-only; not shown in the visual editor. Runtime values are clamped from `0.25` through `4`. |
|
|
526
|
+
| `network.offsetX` | `number` | No | `0` | Initial horizontal pan offset in SVG units. | Config-only; not shown in the visual editor. Runtime panning is constrained to the chart viewport. |
|
|
527
|
+
| `network.offsetY` | `number` | No | `0` | Initial vertical pan offset in SVG units. | Config-only; not shown in the visual editor. Runtime panning is constrained to the chart viewport. |
|
|
528
|
+
| `enableTooltips` | `boolean` | No | `false` | Enables node and link hover/focus tooltips. | Config-only; not shown in the visual editor. Nodes report label and connection count; links report endpoints and aggregated weight when configured. |
|
|
529
|
+
| `data[]` | `Record<string, unknown>[]` | Yes for Network | None | Tabular edge-list rows. | Duplicate pairs aggregate; invalid rows are excluded and reported. Filters and dashboard datasets operate on these source rows before aggregation. |
|
|
530
|
+
|
|
531
|
+
Canonical Network metadata fields (`weight`, `style`, `linkStyle`, and `nodeColor`) and selected weight, link-style, and node-color mapping columns are hidden from the supporting data table by default when they are distinct from source and target. Add a matching `columns` entry with `dataTable: true` to show one explicitly.
|
|
532
|
+
|
|
533
|
+
When `network.columns.style` is mapped and rendered links are present, Network displays an accessible key for the observed styles. Authors can customize the `Solid` and `Dashed` captions in the Network accordion. `legend.hide` controls whether this key is shown and remains the only Network control exposed in the editor's Legend accordion.
|
|
534
|
+
|
|
535
|
+
At runtime, users can drag to pan within the complete node-and-label bounds, use the toolbar buttons to zoom, and choose **Reset** to restore the configured rotation, scale, and offsets. The buttons support mouse activation and standard keyboard activation with Enter or Space. Page scrolling does not zoom the graph. These interactions are local to the rendered chart and are not saved.
|
|
536
|
+
|
|
537
|
+
### Dendrogram: `dendrogram.*`
|
|
538
|
+
|
|
539
|
+
`dendrogram` is chart-owned and only meaningful when `visualizationType` is `Dendrogram`. Each source row describes one node; exactly one row must have a blank parent. Node labels are always displayed at 16px, and the complete node, link, and resolved-label bounds are centered horizontally and vertically on initial render and Reset. See [`examples/dendrogram.json`](./examples/dendrogram.json).
|
|
540
|
+
|
|
541
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
542
|
+
| ------------------------------ | --------------------------- | ------------------ | ------------ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
543
|
+
| `dendrogram.columns.node` | `string` | Yes for Dendrogram | `node` | Column containing the unique node ID. | Blank/non-scalar and duplicate IDs are invalid. |
|
|
544
|
+
| `dendrogram.columns.parent` | `string` | Yes for Dendrogram | `parent` | Column containing the parent node ID. | Exactly one row must be blank. Missing parents, self-parenting, cycles, multiple roots, and disconnected trees are rejected. |
|
|
545
|
+
| `dendrogram.columns.style` | `string` | No | `linkStyle` | Styles the node's incoming link. | Case-insensitive `dashed` renders dashed; other values render solid. Hidden from the table by default. |
|
|
546
|
+
| `dendrogram.columns.nodeColor` | `string` | No | `nodeColor` | Optional literal color for each node. | Invalid/blank colors use `dendrogram.nodeColor`. Hidden from the table by default. |
|
|
547
|
+
| `dendrogram.linkStyleLabels.solid` | `string` | No | `Solid` | Caption for solid links in the link-style key. | Runtime trims the value; blank or omitted values use `Solid`. |
|
|
548
|
+
| `dendrogram.linkStyleLabels.dashed` | `string` | No | `Dashed` | Caption for dashed links in the link-style key. | Runtime trims the value; blank or omitted values use `Dashed`. |
|
|
549
|
+
| `dendrogram.connectionType` | `curve \| line \| elbow` | No | `curve` | Shape of links between parent and child nodes. | Curved uses smooth Bézier paths, line uses a direct segment, and elbow uses orthogonal segments. |
|
|
550
|
+
| `dendrogram.orientation` | `horizontal \| vertical` | No | `horizontal` | Direction in which hierarchy depth grows. | Horizontal grows left-to-right; vertical grows top-to-bottom. |
|
|
551
|
+
| `dendrogram.height` | `number` | No | `500` | Height of the responsive SVG. | Minimum runtime height is 160 pixels. |
|
|
552
|
+
| `dendrogram.nodeRadius` | `number` | No | `6` | Radius of each node. | Values below 2 use the runtime minimum. |
|
|
553
|
+
| `dendrogram.leafSpacing` | `number` | No | `40` | Space between leaves on the cross axis. | Editor slider range is 20–120 in steps of 5; runtime minimum is 12. |
|
|
554
|
+
| `dendrogram.depthSpacing` | `number` | No | `140` | Space between hierarchy levels. | Editor slider range is 60–300 in steps of 10; runtime minimum is 24. |
|
|
555
|
+
| `dendrogram.nodeColor` | CSS color string | No | `#005eaa` | Fallback node fill. | Config-only; valid mapped node colors override it. |
|
|
556
|
+
| `dendrogram.linkColor` | CSS color string | No | `#333333` | Link stroke color. | Config-only. |
|
|
557
|
+
| `enableTooltips` | `boolean` | No | `false` | Enables node and link hover/focus details. | Config-only; not shown in the visual editor. Tooltips use the light visual style and remain available from focused SVG nodes and links. |
|
|
558
|
+
| `data[]` | `Record<string, unknown>[]` | Yes for Dendrogram | None | One-row-per-node hierarchy data. | Filters, dashboard datasets, tables, and downloads retain these original rows. |
|
|
559
|
+
|
|
560
|
+
When `dendrogram.columns.style` is mapped and rendered links are present, the chart displays an accessible key for the observed solid and dashed link styles in reserved space above the plot. Labels are placed deterministically around nodes to avoid nodes, connectors, and previously placed labels when a conflict-free position is available; labels are never hidden or truncated.
|
|
561
|
+
|
|
562
|
+
End users can drag to pan within the chart bounds and activate the COVE Zoom In, Zoom Out, and Reset buttons by mouse or keyboard. Reset restores centered placement. Mouse-wheel scrolling is not intercepted.
|
|
428
563
|
|
|
429
564
|
### Box Plot: `boxplot.*`
|
|
430
565
|
|
|
431
566
|
`boxplot` is chart-owned. Chart runtime derives `plots`, `categories`, and `tableData` from the active dataset for `visualizationType: "Box Plot"`; consumers usually only author labels and display toggles.
|
|
432
567
|
|
|
433
|
-
| Field
|
|
434
|
-
|
|
|
435
|
-
| `boxplot.labels.q1`, `boxplot.labels.q3` | `string`
|
|
436
|
-
| `boxplot.labels.median`
|
|
437
|
-
| `boxplot.labels.iqr`
|
|
438
|
-
| `boxplot.plotOutlierValues`
|
|
439
|
-
| `boxplot.plotNonOutlierValues`
|
|
440
|
-
| `boxplot.hideOutliers`
|
|
441
|
-
| `boxplot.borders`
|
|
568
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
569
|
+
| ---------------------------------------- | --------- | -------- | ---------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
570
|
+
| `boxplot.labels.q1`, `boxplot.labels.q3` | `string` | No | `Lower Quartile`, `Upper Quartile` | Labels for the lower and upper quartile values in box plot tooltips. | Current runtime renders these labels in tooltip output. |
|
|
571
|
+
| `boxplot.labels.median` | `string` | No | `Median` | Label for the median value in box plot tooltips. | Current runtime renders this label in tooltip output. |
|
|
572
|
+
| `boxplot.labels.iqr` | `string` | No | `Interquartile Range` | Label for the interquartile range in box plot tooltips. | Current runtime renders this label in tooltip output. |
|
|
573
|
+
| `boxplot.plotOutlierValues` | `boolean` | No | `false` | Plots outlier values. | Box plot display toggle. |
|
|
574
|
+
| `boxplot.plotNonOutlierValues` | `boolean` | No | `true` | Plots non-outlier values. | Box plot display toggle. |
|
|
575
|
+
| `boxplot.hideOutliers` | `boolean` | No | `false` | Excludes outlier values from the box plot scale/domain calculation. | Runtime-read advanced setting; this is separate from whether outlier points are drawn. |
|
|
576
|
+
| `boxplot.borders` | `string` | No | `'true'` | Border metadata for box plot rendering. | Stored as a string for compatibility. |
|
|
442
577
|
|
|
443
578
|
### Horizon Chart: `horizon.*`
|
|
444
579
|
|
|
445
|
-
`horizon` is chart-owned and only meaningful when `visualizationType` is `Horizon Chart`.
|
|
580
|
+
`horizon` is chart-owned and only meaningful when `visualizationType` is `Horizon Chart`. Current authoring and compatibility migration materialize the defaults below; explicit values, including `0` and `null`, are preserved.
|
|
446
581
|
|
|
447
|
-
| Field
|
|
448
|
-
|
|
|
449
|
-
| `horizon.numLayers`
|
|
450
|
-
| `horizon.bandGap`
|
|
451
|
-
| `horizon.bottomPadding` | `number` | No
|
|
582
|
+
| Field | Type | Required | Default | Description | Allowed values / Notes |
|
|
583
|
+
| ----------------------- | -------- | -------- | ------- | ----------------------------------------------- | ------------------------------------------------------ |
|
|
584
|
+
| `horizon.numLayers` | `number` | No | `4` | Number of horizon layers/bands per series. | More layers provide finer gradations but denser rows. |
|
|
585
|
+
| `horizon.bandGap` | `number` | No | `15` | Gap between series bands. | Pixel-like value subtracted from available row height. |
|
|
586
|
+
| `horizon.bottomPadding` | `number` | No | `15` | Padding below the bottom band above the x-axis. | Pixel-like value. |
|
|
452
587
|
|
|
453
588
|
## Fields You Can Ignore
|
|
454
589
|
|
|
455
590
|
These fields sometimes appear in saved configs, copied editor state, or migration output, but consumers generally do not need to author or maintain them:
|
|
456
591
|
|
|
457
|
-
| Field or group
|
|
458
|
-
|
|
|
459
|
-
| `runtime.*`
|
|
460
|
-
| `formattedData`
|
|
461
|
-
| `runtimeDataUrl`
|
|
462
|
-
| `suppressedData`
|
|
463
|
-
| `xAxis.sortDates`
|
|
464
|
-
| `uid`
|
|
465
|
-
| `newViz`
|
|
466
|
-
| `debugSvg`
|
|
467
|
-
| `showDownloadMediaButton`
|
|
468
|
-
| `showSidebar`
|
|
469
|
-
| `legend.lineMode`
|
|
470
|
-
| `visual.tp5Treatment`, `visual.tp5Background`
|
|
471
|
-
| `padding`
|
|
472
|
-
| `area`
|
|
473
|
-
| `brush`
|
|
474
|
-
| `xAxis.axisBBox`, `xAxis.maxValue`, `xAxis.tickWidthMax`, `yAxis.axisBBox`, `yAxis.maxValue`, `yAxis.tickWidthMax`
|
|
475
|
-
| `
|
|
476
|
-
| `
|
|
477
|
-
| `
|
|
478
|
-
| `boxplot.
|
|
479
|
-
| `
|
|
480
|
-
| `forestPlot.
|
|
481
|
-
| `
|
|
482
|
-
| `
|
|
483
|
-
| `
|
|
484
|
-
| `
|
|
485
|
-
| `
|
|
486
|
-
| `
|
|
487
|
-
| `
|
|
488
|
-
| `
|
|
489
|
-
| `
|
|
490
|
-
| `
|
|
491
|
-
| `
|
|
492
|
-
| `
|
|
493
|
-
| `
|
|
592
|
+
| Field or group | Why you can ignore it |
|
|
593
|
+
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
594
|
+
| `runtime.*` | Internal runtime state created while the chart is loading and transforming data. |
|
|
595
|
+
| `formattedData` | Runtime-transformed data snapshot, not part of the authoring contract. |
|
|
596
|
+
| `runtimeDataUrl` | Runtime-managed URL after filters are applied. |
|
|
597
|
+
| `suppressedData` | Legacy suppression metadata from older saved configs. Current suppression/effect markers use `preliminaryData`, documented above, but regular Bar/Combo legend labels can still read this field for legacy suppression labels. |
|
|
598
|
+
| `xAxis.sortDates` | Legacy date-sort flag migrated to `xAxis.type: "date-time"` and then removed. Current configs should use axis type/date fields and `xAxis.sortByRecentDate` where relevant. |
|
|
599
|
+
| `uid` | Generated identifier used for shared filters and internal wiring. |
|
|
600
|
+
| `newViz` | Editor confirmation flag. |
|
|
601
|
+
| `debugSvg` | Debug-only renderer flag. |
|
|
602
|
+
| `showDownloadMediaButton` | Legacy editor/export artifact. |
|
|
603
|
+
| `showSidebar` | Stale chart-sidebar artifact retained by broad legacy types but not used by current chart rendering. |
|
|
604
|
+
| `legend.lineMode` | Legacy/editor-exported legend style flag. Author `legend.style: "lines"` for current configs. |
|
|
605
|
+
| `visual.tp5Treatment`, `visual.tp5Background` | Feature-gated chart shell flags that may appear in saved/editor configs, but current chart rendering removes TP5 treatment classes while chart/map TP5 treatment is disabled. |
|
|
606
|
+
| `padding` | Internal layout padding object preserved for compatibility. |
|
|
607
|
+
| `area` | Legacy area-chart metadata. |
|
|
608
|
+
| `brush` | Internal brush selection state managed by the renderer. Consumer-facing brush settings (`brushActive`, `brushDefaultRecentDateCount`, `brushDynamicYAxis`) live on `xAxis` and are documented in the local axis section above. |
|
|
609
|
+
| `xAxis.axisBBox`, `xAxis.maxValue`, `xAxis.tickWidthMax`, `yAxis.axisBBox`, `yAxis.maxValue`, `yAxis.tickWidthMax` | Runtime axis layout measurements and scale snapshots. |
|
|
610
|
+
| `yAxis.rightAxisSize`, `yAxis.rightLabelOffsetSize` | Legacy right-axis layout settings. Current right-axis layout measures the needed gutter and ignores these saved values. |
|
|
611
|
+
| `runtime.series[].originalDataKey` | Original series key retained on generated runtime series during dynamic-category rendering. |
|
|
612
|
+
| `boxplot.plots`, `boxplot.categories`, `boxplot.tableData` | Runtime-derived box plot structures generated from the active dataset. |
|
|
613
|
+
| `boxplot.labels.maximum`, `boxplot.labels.minimum`, `boxplot.labels.q2`, `boxplot.labels.q4`, `boxplot.labels.mean`, `boxplot.labels.sd`, `boxplot.labels.count`, `boxplot.labels.outliers`, `boxplot.labels.values`, `boxplot.labels.lowerBounds`, `boxplot.labels.upperBounds` | Persisted box plot label defaults that current chart/table output does not render. |
|
|
614
|
+
| `forestPlot.description.*`, `forestPlot.result.*` | Legacy saved defaults for older forest plot side-column labels. Current side-column rendering uses `columns.*.forestPlot` fields instead. |
|
|
615
|
+
| `forestPlot.leftWidthOffset`, `forestPlot.rightWidthOffset`, `forestPlot.leftWidthOffsetMobile`, `forestPlot.rightWidthOffsetMobile` | Legacy saved/editor layout offsets. Current forest plot layout reserves left/right space from measured text and forest-plot column settings. |
|
|
616
|
+
| `horizon.mode`, `horizon.negativePalette` | Scaffolded horizon metadata not used by the current renderer. Current Horizon rendering treats values as positive magnitudes. |
|
|
617
|
+
| `network.showLabels` | Legacy Network authoring field. Current rendering ignores it and always displays node labels. |
|
|
618
|
+
| `dendrogram.alignment`, `dendrogram.verticalAlignment`, `dendrogram.showLabels` | Legacy Dendrogram authoring fields. Current rendering ignores them, always centers complete content bounds, and always displays node labels. |
|
|
619
|
+
| `color` | Legacy top-level palette token kept for backward compatibility. |
|
|
620
|
+
| `palette` | Legacy top-level palette token superseded by `general.palette`. |
|
|
621
|
+
| `isPaletteReversed` | Legacy top-level palette reversal flag. Current palette reversal is controlled by `general.palette.isReversed`; two-color charts use `twoColor.isPaletteReversed`. |
|
|
622
|
+
| `visualizationSubType: "horizontal"` | Legacy horizontal-bar subtype. Current configs should use `orientation: "horizontal"` and keep `visualizationSubType` as `regular` or `stacked`. |
|
|
623
|
+
| `isLegendValue` | Legacy legend-display flag from older saved configs; current legend behavior is configured under `legend.*`. |
|
|
624
|
+
| `dataFormat.onlyShowTopPrefixSuffix` | Legacy/editor-export number-formatting artifact; current prefix/suffix behavior is controlled by the axis-specific `dataFormat.*Prefix` and `dataFormat.*Suffix` fields documented above. |
|
|
625
|
+
| `datasets` | Dashboard-only data container passed into the component, not authored inside a standalone chart config. |
|
|
626
|
+
| `migrations` | Editor/migration bookkeeping. |
|
|
627
|
+
| `dynamicMarginTop` | Editor/export artifact used by older saved configs. |
|
|
628
|
+
| `fontSize` | Legacy typography setting from older saved exports. |
|
|
629
|
+
| `xScale`, `yScale` | Runtime scale functions, not authored config. |
|