@cdc/chart 4.26.7 → 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 +502 -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 -97406
- 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/overlay-legend.json +485 -0
- package/examples/private/pie-test.json +469 -0
- package/examples/vega-remote.json +22 -0
- package/package.json +11 -5
- package/src/CdcChartComponent.tsx +405 -208
- 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 +4 -2
- 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/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/_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 +38 -6
- package/src/components/BarChart/components/BarChart.StackedHorizontal.tsx +12 -3
- package/src/components/BarChart/components/BarChart.StackedVertical.test.ts +28 -0
- package/src/components/BarChart/components/BarChart.StackedVertical.tsx +29 -25
- package/src/components/BarChart/components/BarChart.Vertical.tsx +37 -26
- package/src/components/BarChart/components/PortionPatternOverlay.tsx +61 -0
- package/src/components/BarChart/components/context.tsx +6 -0
- 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 +104 -0
- package/src/components/BarChart/helpers/useBarChart.ts +60 -59
- 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/helpers/index.ts +11 -82
- package/src/components/Brush/BrushSelector.tsx +9 -23
- 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 +1005 -760
- 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 +88 -54
- 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 +233 -33
- 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 +2 -2
- 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 +2 -1
- package/src/components/EditorPanel/useEditorPermissions.test.tsx +62 -0
- package/src/components/EditorPanel/useEditorPermissions.ts +70 -24
- package/src/components/Forecasting/Forecasting.tsx +15 -6
- 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 +110 -90
- package/src/components/Legend/LegendGroup/LegendGroup.styles.css +7 -0
- package/src/components/Legend/LegendGroup/LegendGroup.tsx +47 -34
- 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 -4
- package/src/components/LineChart/index.tsx +69 -24
- 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 +81 -51
- 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 +9 -8
- 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 -4
- 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 +77 -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/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 +18 -37
- package/src/helpers/getChartTypeDefaultPalette.ts +29 -0
- package/src/helpers/getColorCodeCategoryColorMap.ts +26 -0
- package/src/helpers/getColorScale.ts +31 -22
- package/src/helpers/getDynamicYAxisCategories.ts +69 -0
- package/src/helpers/getMinMax.ts +9 -7
- package/src/helpers/getNewRuntime.ts +5 -2
- package/src/helpers/getStackedSeriesMax.ts +51 -0
- package/src/helpers/getV21ChartDistributionColors.ts +57 -0
- package/src/helpers/handleRankByValue.ts +15 -15
- package/src/helpers/seriesColumnSettings.ts +10 -0
- package/src/helpers/sizeHelpers.ts +4 -3
- 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/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 +23 -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/useTooltip.test.tsx +353 -1
- package/src/hooks/usePrefersReducedMotion.ts +22 -0
- package/src/hooks/useReduceData.ts +4 -36
- package/src/hooks/useScales.ts +15 -0
- package/src/hooks/useTooltip.tsx +95 -64
- package/src/scss/main.scss +74 -2
- package/src/store/chart.reducer.ts +4 -3
- package/src/test/CdcChart.dataTable.test.tsx +490 -16
- 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
|
@@ -8,6 +8,7 @@ import { hasVisibleVizFilters } from '@cdc/core/helpers/filterVisibility'
|
|
|
8
8
|
export const useEditorPermissions = () => {
|
|
9
9
|
const { config, isDashboard } = useContext(ConfigContext)
|
|
10
10
|
const { visualizationType, series, orientation, visualizationSubType } = config
|
|
11
|
+
const isBarRace = visualizationType === 'Bar' && visualizationSubType === 'racing'
|
|
11
12
|
|
|
12
13
|
// Overall support for the chart types
|
|
13
14
|
// prettier-ignore
|
|
@@ -29,11 +30,13 @@ export const useEditorPermissions = () => {
|
|
|
29
30
|
'Scatter Plot',
|
|
30
31
|
'Spark Line',
|
|
31
32
|
'Sankey',
|
|
33
|
+
'Network',
|
|
34
|
+
'Dendrogram',
|
|
32
35
|
'Warming Stripes'
|
|
33
36
|
]
|
|
34
37
|
|
|
35
38
|
const visSupportsDateCategoryAxis = () => {
|
|
36
|
-
const disabledCharts = ['Forest Plot', 'Radar', 'Sankey']
|
|
39
|
+
const disabledCharts = ['Forest Plot', 'Radar', 'Sankey', 'Network', 'Dendrogram']
|
|
37
40
|
if (disabledCharts.includes(visualizationType)) return false
|
|
38
41
|
return true
|
|
39
42
|
}
|
|
@@ -84,6 +87,8 @@ export const useEditorPermissions = () => {
|
|
|
84
87
|
'Horizon Chart',
|
|
85
88
|
'Radar',
|
|
86
89
|
'Sankey',
|
|
90
|
+
'Network',
|
|
91
|
+
'Dendrogram',
|
|
87
92
|
'Scatter Plot',
|
|
88
93
|
'Spark Line',
|
|
89
94
|
'Warming Stripes'
|
|
@@ -101,6 +106,8 @@ export const useEditorPermissions = () => {
|
|
|
101
106
|
'HeatMap',
|
|
102
107
|
'Radar',
|
|
103
108
|
'Sankey',
|
|
109
|
+
'Network',
|
|
110
|
+
'Dendrogram',
|
|
104
111
|
'Scatter Plot',
|
|
105
112
|
'Spark Line',
|
|
106
113
|
'Warming Stripes'
|
|
@@ -110,6 +117,7 @@ export const useEditorPermissions = () => {
|
|
|
110
117
|
}
|
|
111
118
|
|
|
112
119
|
const visHasLegend = () => {
|
|
120
|
+
if (isBarRace) return false
|
|
113
121
|
switch (visualizationType) {
|
|
114
122
|
case 'Box Plot':
|
|
115
123
|
return true
|
|
@@ -120,7 +128,10 @@ export const useEditorPermissions = () => {
|
|
|
120
128
|
case 'Spark Line':
|
|
121
129
|
return false
|
|
122
130
|
case 'Sankey':
|
|
131
|
+
case 'Dendrogram':
|
|
123
132
|
return false
|
|
133
|
+
case 'Network':
|
|
134
|
+
return true
|
|
124
135
|
case 'Warming Stripes':
|
|
125
136
|
return true
|
|
126
137
|
default:
|
|
@@ -130,10 +141,13 @@ export const useEditorPermissions = () => {
|
|
|
130
141
|
|
|
131
142
|
const visHasNumbersOnBars = () => {
|
|
132
143
|
if (visualizationType === 'Forest Plot') return false
|
|
144
|
+
const barRaceUsesDefaultLabelPlacement =
|
|
145
|
+
visualizationType === 'Bar' && config.visualizationSubType === 'racing' && !config.yAxis.labelPlacement
|
|
133
146
|
if (
|
|
134
147
|
config.orientation === 'horizontal' &&
|
|
135
148
|
(config.yAxis.labelPlacement === 'Below Bar' ||
|
|
136
149
|
config.yAxis.labelPlacement === 'On Date/Category Axis' ||
|
|
150
|
+
barRaceUsesDefaultLabelPlacement ||
|
|
137
151
|
config.visualizationType === 'Paired Bar' ||
|
|
138
152
|
config.visualizationType === 'Deviation Bar')
|
|
139
153
|
)
|
|
@@ -147,6 +161,7 @@ export const useEditorPermissions = () => {
|
|
|
147
161
|
}
|
|
148
162
|
|
|
149
163
|
const visHasAnchors = () => {
|
|
164
|
+
if (isBarRace) return false
|
|
150
165
|
switch (visualizationType) {
|
|
151
166
|
case 'Area Chart':
|
|
152
167
|
return true
|
|
@@ -179,6 +194,7 @@ export const useEditorPermissions = () => {
|
|
|
179
194
|
}
|
|
180
195
|
|
|
181
196
|
const visHasBarBorders = () => {
|
|
197
|
+
if (isBarRace) return false
|
|
182
198
|
const disabledCharts = ['Box Plot', 'Scatter Plot', 'Pie', 'Line']
|
|
183
199
|
if (disabledCharts.includes(visualizationType)) return false
|
|
184
200
|
return series?.some(
|
|
@@ -191,6 +207,8 @@ export const useEditorPermissions = () => {
|
|
|
191
207
|
case 'Warming Stripes':
|
|
192
208
|
return false
|
|
193
209
|
case 'Sankey':
|
|
210
|
+
case 'Network':
|
|
211
|
+
case 'Dendrogram':
|
|
194
212
|
return false
|
|
195
213
|
case 'Forest Plot':
|
|
196
214
|
return false
|
|
@@ -210,7 +228,9 @@ export const useEditorPermissions = () => {
|
|
|
210
228
|
'Forest Plot',
|
|
211
229
|
'HeatMap',
|
|
212
230
|
'Spark Line',
|
|
213
|
-
'Warming Stripes'
|
|
231
|
+
'Warming Stripes',
|
|
232
|
+
'Network',
|
|
233
|
+
'Dendrogram'
|
|
214
234
|
].includes(visualizationType)
|
|
215
235
|
const visHasLegendAxisAlign = () => {
|
|
216
236
|
return visualizationType === 'Bar' && visualizationSubType === 'stacked' && config.legend.behavior === 'isolate'
|
|
@@ -220,7 +240,7 @@ export const useEditorPermissions = () => {
|
|
|
220
240
|
}
|
|
221
241
|
|
|
222
242
|
const visSupportsTooltipOpacity = () => {
|
|
223
|
-
const disabledCharts = ['HeatMap', 'Spark Line', 'Sankey', 'Warming Stripes']
|
|
243
|
+
const disabledCharts = ['HeatMap', 'Spark Line', 'Sankey', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
224
244
|
if (disabledCharts.includes(visualizationType)) return false
|
|
225
245
|
return true
|
|
226
246
|
}
|
|
@@ -232,60 +252,84 @@ export const useEditorPermissions = () => {
|
|
|
232
252
|
}
|
|
233
253
|
|
|
234
254
|
const visSupportsSequentialPallete = () => {
|
|
235
|
-
const disabledCharts = ['
|
|
255
|
+
const disabledCharts = ['Paired Bar', 'Deviation Bar', 'Forest Plot', 'Forecasting', 'Network', 'Dendrogram']
|
|
236
256
|
if (disabledCharts.includes(visualizationType)) return false
|
|
237
257
|
return true
|
|
238
258
|
}
|
|
239
259
|
|
|
240
260
|
const visSupportsNonSequentialPallete = () => {
|
|
241
|
-
const disabledCharts = [
|
|
261
|
+
const disabledCharts = [
|
|
262
|
+
'HeatMap',
|
|
263
|
+
'Paired Bar',
|
|
264
|
+
'Deviation Bar',
|
|
265
|
+
'Forest Plot',
|
|
266
|
+
'Forecasting',
|
|
267
|
+
'Sankey',
|
|
268
|
+
'Network',
|
|
269
|
+
'Dendrogram'
|
|
270
|
+
]
|
|
242
271
|
if (disabledCharts.includes(visualizationType)) return false
|
|
243
272
|
return true
|
|
244
273
|
}
|
|
245
274
|
|
|
246
275
|
const visSupportsReverseColorPalette = () => {
|
|
247
|
-
const disabledCharts = ['Forest Plot', 'Paired Bar', 'Deviation Bar', 'Sankey']
|
|
276
|
+
const disabledCharts = ['Forest Plot', 'Paired Bar', 'Deviation Bar', 'Sankey', 'Network', 'Dendrogram']
|
|
248
277
|
if (disabledCharts.includes(visualizationType)) return false
|
|
249
278
|
return true
|
|
250
279
|
}
|
|
251
280
|
|
|
252
281
|
const visSupportsDateCategoryAxisLabel = () => {
|
|
253
|
-
|
|
282
|
+
if (isBarRace) return false
|
|
283
|
+
const disabledCharts = [
|
|
284
|
+
'Forest Plot',
|
|
285
|
+
'HeatMap',
|
|
286
|
+
'Spark Line',
|
|
287
|
+
'Bump Chart',
|
|
288
|
+
'Network',
|
|
289
|
+
'Dendrogram',
|
|
290
|
+
'Warming Stripes'
|
|
291
|
+
]
|
|
254
292
|
if (disabledCharts.includes(visualizationType)) return false
|
|
255
293
|
return true
|
|
256
294
|
}
|
|
257
295
|
|
|
258
296
|
const visSupportsDateCategoryAxisLine = () => {
|
|
259
|
-
|
|
297
|
+
if (isBarRace) return false
|
|
298
|
+
const disabledCharts = ['Forest Plot', 'Spark Line', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
260
299
|
if (disabledCharts.includes(visualizationType)) return false
|
|
261
300
|
return true
|
|
262
301
|
}
|
|
263
302
|
|
|
264
303
|
const visSupportsDateCategoryAxisTicks = () => {
|
|
265
|
-
|
|
304
|
+
if (isBarRace) return false
|
|
305
|
+
const disabledCharts = ['Forest Plot', 'Spark Line', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
266
306
|
if (disabledCharts.includes(visualizationType)) return false
|
|
267
307
|
return true
|
|
268
308
|
}
|
|
269
309
|
|
|
270
310
|
const visSupportsDateCategoryTickRotation = () => {
|
|
271
|
-
|
|
311
|
+
if (isBarRace) return false
|
|
312
|
+
const disabledCharts = ['Spark Line', 'Network', 'Dendrogram']
|
|
272
313
|
if (disabledCharts.includes(visualizationType)) return false
|
|
273
314
|
return true
|
|
274
315
|
}
|
|
275
316
|
|
|
276
317
|
const visSupportsDateCategoryNumTicks = () => {
|
|
277
|
-
|
|
318
|
+
if (isBarRace) return false
|
|
319
|
+
const disabledCharts = ['Spark Line', 'Network', 'Dendrogram']
|
|
278
320
|
if (disabledCharts.includes(visualizationType)) return false
|
|
279
321
|
return true
|
|
280
322
|
}
|
|
281
323
|
|
|
282
324
|
const visSupportsResponsiveTicks = () => {
|
|
283
|
-
|
|
325
|
+
if (isBarRace) return false
|
|
326
|
+
const disabledCharts = ['HeatMap', 'Spark Line', 'Network', 'Dendrogram']
|
|
284
327
|
if (disabledCharts.includes(visualizationType)) return false
|
|
285
328
|
return true
|
|
286
329
|
}
|
|
287
330
|
|
|
288
331
|
const visSupportsRegions = () => {
|
|
332
|
+
if (isBarRace) return false
|
|
289
333
|
const disabledCharts = [
|
|
290
334
|
'Forest Plot',
|
|
291
335
|
'Horizon Chart',
|
|
@@ -295,6 +339,8 @@ export const useEditorPermissions = () => {
|
|
|
295
339
|
'Radar',
|
|
296
340
|
'Spark Line',
|
|
297
341
|
'Sankey',
|
|
342
|
+
'Network',
|
|
343
|
+
'Dendrogram',
|
|
298
344
|
'Warming Stripes'
|
|
299
345
|
]
|
|
300
346
|
if (disabledCharts.includes(visualizationType)) return false
|
|
@@ -302,13 +348,13 @@ export const useEditorPermissions = () => {
|
|
|
302
348
|
}
|
|
303
349
|
|
|
304
350
|
const visSupportsValueAxisMax = () => {
|
|
305
|
-
const disabledCharts = ['Forest Plot', 'HeatMap']
|
|
351
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram']
|
|
306
352
|
if (disabledCharts.includes(visualizationType)) return false
|
|
307
353
|
return true
|
|
308
354
|
}
|
|
309
355
|
|
|
310
356
|
const visSupportsValueAxisMin = () => {
|
|
311
|
-
const disabledCharts = ['Forest Plot', 'HeatMap']
|
|
357
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram']
|
|
312
358
|
if (disabledCharts.includes(visualizationType)) return false
|
|
313
359
|
return true
|
|
314
360
|
}
|
|
@@ -341,47 +387,47 @@ export const useEditorPermissions = () => {
|
|
|
341
387
|
}
|
|
342
388
|
|
|
343
389
|
const visSupportsValueAxisGridLines = () => {
|
|
344
|
-
const disabledCharts = ['Forest Plot', 'HeatMap']
|
|
390
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram']
|
|
345
391
|
if (disabledCharts.includes(visualizationType)) return false
|
|
346
392
|
return true
|
|
347
393
|
}
|
|
348
394
|
|
|
349
395
|
// implement later
|
|
350
396
|
const visSupportsValueAxisTicks = () => {
|
|
351
|
-
const disabledCharts = ['Forest Plot', 'HeatMap']
|
|
397
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram']
|
|
352
398
|
if (disabledCharts.includes(visualizationType)) return false
|
|
353
399
|
return true
|
|
354
400
|
}
|
|
355
401
|
|
|
356
402
|
// implement later
|
|
357
403
|
const visSupportsValueAxisLine = () => {
|
|
358
|
-
const disabledCharts = ['Forest Plot']
|
|
404
|
+
const disabledCharts = ['Forest Plot', 'Network', 'Dendrogram']
|
|
359
405
|
if (disabledCharts.includes(visualizationType)) return false
|
|
360
406
|
return true
|
|
361
407
|
}
|
|
362
408
|
|
|
363
409
|
// implement later
|
|
364
410
|
const visSupportsValueAxisLabels = () => {
|
|
365
|
-
const disabledCharts = ['Forest Plot', 'HeatMap', 'Bump Chart']
|
|
411
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Bump Chart', 'Network', 'Dendrogram']
|
|
366
412
|
if (disabledCharts.includes(visualizationType)) return false
|
|
367
413
|
return true
|
|
368
414
|
}
|
|
369
415
|
|
|
370
416
|
const visSupportsBarSpace = () => {
|
|
371
|
-
const disabledCharts = ['Forest Plot']
|
|
417
|
+
const disabledCharts = ['Forest Plot', 'Network', 'Dendrogram']
|
|
372
418
|
if (disabledCharts.includes(visualizationType)) return false
|
|
373
419
|
if (orientation === 'horizontal' || visualizationType === 'Paired Bar') return true
|
|
374
420
|
return false
|
|
375
421
|
}
|
|
376
422
|
|
|
377
423
|
const visSupportsBarThickness = () => {
|
|
378
|
-
const disabledCharts = ['Forest Plot', 'HeatMap', 'Warming Stripes']
|
|
424
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
379
425
|
if (disabledCharts.includes(visualizationType)) return false
|
|
380
426
|
return true
|
|
381
427
|
}
|
|
382
428
|
|
|
383
429
|
const visSupportsChartHeight = () => {
|
|
384
|
-
const disabledCharts = ['Spark Line', 'Warming Stripes']
|
|
430
|
+
const disabledCharts = ['Spark Line', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
385
431
|
if (disabledCharts.includes(visualizationType)) return false
|
|
386
432
|
return true
|
|
387
433
|
}
|
|
@@ -393,7 +439,7 @@ export const useEditorPermissions = () => {
|
|
|
393
439
|
}
|
|
394
440
|
|
|
395
441
|
const visSupportsLeftValueAxis = () => {
|
|
396
|
-
const disabledCharts = ['Radar', 'Spark Line', 'Sankey', 'Warming Stripes']
|
|
442
|
+
const disabledCharts = ['Radar', 'Spark Line', 'Sankey', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
397
443
|
if (disabledCharts.includes(visualizationType)) return false
|
|
398
444
|
return true
|
|
399
445
|
}
|
|
@@ -403,13 +449,13 @@ export const useEditorPermissions = () => {
|
|
|
403
449
|
}
|
|
404
450
|
|
|
405
451
|
const visSupportsRankByValue = () => {
|
|
406
|
-
const disabledCharts = ['HeatMap', 'Spark Line']
|
|
452
|
+
const disabledCharts = ['HeatMap', 'Spark Line', 'Network', 'Dendrogram']
|
|
407
453
|
if (disabledCharts.includes(visualizationType)) return false
|
|
408
454
|
return true
|
|
409
455
|
}
|
|
410
456
|
|
|
411
457
|
const visSupportsDateCategoryHeight = () => {
|
|
412
|
-
const disabledCharts = ['HeatMap', 'Spark Line', 'Sankey', 'Bump Chart']
|
|
458
|
+
const disabledCharts = ['HeatMap', 'Spark Line', 'Sankey', 'Network', 'Dendrogram', 'Bump Chart']
|
|
413
459
|
if (disabledCharts.includes(visualizationType)) return false
|
|
414
460
|
if (config.orientation !== 'horizontal') return false
|
|
415
461
|
if (config.orientation === 'horizontal' && visualizationType === 'Bar' && !config.isLollipopChart) return false
|
|
@@ -5,9 +5,14 @@ import ConfigContext from '../../ConfigContext'
|
|
|
5
5
|
import ErrorBoundary from '@cdc/core/components/ErrorBoundary'
|
|
6
6
|
import { colorPalettesChartV2, sequentialPalettes } from '@cdc/core/data/colorPalettes'
|
|
7
7
|
import { updatePaletteNames } from '@cdc/core/helpers/updatePaletteNames'
|
|
8
|
-
import {
|
|
8
|
+
import { getColorPaletteMajorVersion } from '@cdc/core/helpers/getColorPaletteMajorVersion'
|
|
9
9
|
import { getBridgedData } from '../../helpers/getBridgedData'
|
|
10
10
|
import { buildForecastPaletteMappings } from '../../helpers/buildForecastPaletteMappings'
|
|
11
|
+
import {
|
|
12
|
+
getForecastConfidenceIntervalKey,
|
|
13
|
+
getForecastLegendKey,
|
|
14
|
+
isForecastLegendSelectionActive
|
|
15
|
+
} from '../../helpers/forecastLegend'
|
|
11
16
|
|
|
12
17
|
// visx & d3
|
|
13
18
|
import { curveMonotoneX } from '@visx/curve'
|
|
@@ -119,7 +124,7 @@ const Forecasting = ({ xScale, yScale, height, width, yAxisWidth, handleTooltipM
|
|
|
119
124
|
const forecastingPalettes = useMemo(() => {
|
|
120
125
|
// Determine palette version from config
|
|
121
126
|
// Forecasting charts use sequentialPalettes for v1, sequential-only palettes for v2
|
|
122
|
-
const paletteVersion =
|
|
127
|
+
const paletteVersion = getColorPaletteMajorVersion(config)
|
|
123
128
|
|
|
124
129
|
let forecastPalettes
|
|
125
130
|
if (paletteVersion === 1) {
|
|
@@ -148,10 +153,6 @@ const Forecasting = ({ xScale, yScale, height, width, yAxisWidth, handleTooltipM
|
|
|
148
153
|
if (!group || !group.stages) return false
|
|
149
154
|
return group.stages.map((stage, stageIndex) => {
|
|
150
155
|
const { behavior } = legend
|
|
151
|
-
let transparentArea =
|
|
152
|
-
behavior === 'highlight' && seriesHighlight.length > 0 && seriesHighlight.indexOf(stage.key) === -1
|
|
153
|
-
let displayArea =
|
|
154
|
-
behavior === 'highlight' || seriesHighlight.length === 0 || seriesHighlight.indexOf(stage.key) !== -1
|
|
155
156
|
const bridgedData = getBridgedData(stage.key, group.stageColumn, rawData)
|
|
156
157
|
|
|
157
158
|
return (
|
|
@@ -162,6 +163,10 @@ const Forecasting = ({ xScale, yScale, height, width, yAxisWidth, handleTooltipM
|
|
|
162
163
|
{group.confidenceIntervals?.map((ciGroup, ciGroupIndex) => {
|
|
163
164
|
const palette = forecastingPalettes[stage.color] || false
|
|
164
165
|
const isReversed = stage.color?.toLowerCase().includes('reverse')
|
|
166
|
+
const intervalKey = getForecastConfidenceIntervalKey(group.confidenceIntervals, ciGroupIndex)
|
|
167
|
+
const isActive = isForecastLegendSelectionActive(seriesHighlight, stage.key, intervalKey)
|
|
168
|
+
const transparentArea = behavior === 'highlight' && seriesHighlight.length > 0 && !isActive
|
|
169
|
+
const displayArea = behavior === 'highlight' || isActive
|
|
165
170
|
|
|
166
171
|
const getFill = () => {
|
|
167
172
|
if (displayArea) return palette?.[2] || 'transparent'
|
|
@@ -186,6 +191,10 @@ const Forecasting = ({ xScale, yScale, height, width, yAxisWidth, handleTooltipM
|
|
|
186
191
|
/ /g,
|
|
187
192
|
'—'
|
|
188
193
|
)}--group-${stageIndex}-${ciGroupIndex}`}
|
|
194
|
+
data-forecast-legend-key={
|
|
195
|
+
intervalKey ? getForecastLegendKey(stage.key, intervalKey) : stage.key
|
|
196
|
+
}
|
|
197
|
+
data-forecast-active={isActive ? 'true' : 'false'}
|
|
189
198
|
>
|
|
190
199
|
{dataSegments.map((segment, segmentIndex) => (
|
|
191
200
|
<Group key={`segment-${segmentIndex}`}>
|