@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
|
@@ -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
|
}
|
|
@@ -82,9 +85,10 @@ export const useEditorPermissions = () => {
|
|
|
82
85
|
'Forest Plot',
|
|
83
86
|
'HeatMap',
|
|
84
87
|
'Horizon Chart',
|
|
85
|
-
'Pie',
|
|
86
88
|
'Radar',
|
|
87
89
|
'Sankey',
|
|
90
|
+
'Network',
|
|
91
|
+
'Dendrogram',
|
|
88
92
|
'Scatter Plot',
|
|
89
93
|
'Spark Line',
|
|
90
94
|
'Warming Stripes'
|
|
@@ -102,6 +106,8 @@ export const useEditorPermissions = () => {
|
|
|
102
106
|
'HeatMap',
|
|
103
107
|
'Radar',
|
|
104
108
|
'Sankey',
|
|
109
|
+
'Network',
|
|
110
|
+
'Dendrogram',
|
|
105
111
|
'Scatter Plot',
|
|
106
112
|
'Spark Line',
|
|
107
113
|
'Warming Stripes'
|
|
@@ -111,6 +117,7 @@ export const useEditorPermissions = () => {
|
|
|
111
117
|
}
|
|
112
118
|
|
|
113
119
|
const visHasLegend = () => {
|
|
120
|
+
if (isBarRace) return false
|
|
114
121
|
switch (visualizationType) {
|
|
115
122
|
case 'Box Plot':
|
|
116
123
|
return true
|
|
@@ -121,7 +128,10 @@ export const useEditorPermissions = () => {
|
|
|
121
128
|
case 'Spark Line':
|
|
122
129
|
return false
|
|
123
130
|
case 'Sankey':
|
|
131
|
+
case 'Dendrogram':
|
|
124
132
|
return false
|
|
133
|
+
case 'Network':
|
|
134
|
+
return true
|
|
125
135
|
case 'Warming Stripes':
|
|
126
136
|
return true
|
|
127
137
|
default:
|
|
@@ -131,10 +141,13 @@ export const useEditorPermissions = () => {
|
|
|
131
141
|
|
|
132
142
|
const visHasNumbersOnBars = () => {
|
|
133
143
|
if (visualizationType === 'Forest Plot') return false
|
|
144
|
+
const barRaceUsesDefaultLabelPlacement =
|
|
145
|
+
visualizationType === 'Bar' && config.visualizationSubType === 'racing' && !config.yAxis.labelPlacement
|
|
134
146
|
if (
|
|
135
147
|
config.orientation === 'horizontal' &&
|
|
136
148
|
(config.yAxis.labelPlacement === 'Below Bar' ||
|
|
137
149
|
config.yAxis.labelPlacement === 'On Date/Category Axis' ||
|
|
150
|
+
barRaceUsesDefaultLabelPlacement ||
|
|
138
151
|
config.visualizationType === 'Paired Bar' ||
|
|
139
152
|
config.visualizationType === 'Deviation Bar')
|
|
140
153
|
)
|
|
@@ -148,6 +161,7 @@ export const useEditorPermissions = () => {
|
|
|
148
161
|
}
|
|
149
162
|
|
|
150
163
|
const visHasAnchors = () => {
|
|
164
|
+
if (isBarRace) return false
|
|
151
165
|
switch (visualizationType) {
|
|
152
166
|
case 'Area Chart':
|
|
153
167
|
return true
|
|
@@ -180,6 +194,7 @@ export const useEditorPermissions = () => {
|
|
|
180
194
|
}
|
|
181
195
|
|
|
182
196
|
const visHasBarBorders = () => {
|
|
197
|
+
if (isBarRace) return false
|
|
183
198
|
const disabledCharts = ['Box Plot', 'Scatter Plot', 'Pie', 'Line']
|
|
184
199
|
if (disabledCharts.includes(visualizationType)) return false
|
|
185
200
|
return series?.some(
|
|
@@ -192,6 +207,8 @@ export const useEditorPermissions = () => {
|
|
|
192
207
|
case 'Warming Stripes':
|
|
193
208
|
return false
|
|
194
209
|
case 'Sankey':
|
|
210
|
+
case 'Network':
|
|
211
|
+
case 'Dendrogram':
|
|
195
212
|
return false
|
|
196
213
|
case 'Forest Plot':
|
|
197
214
|
return false
|
|
@@ -211,7 +228,9 @@ export const useEditorPermissions = () => {
|
|
|
211
228
|
'Forest Plot',
|
|
212
229
|
'HeatMap',
|
|
213
230
|
'Spark Line',
|
|
214
|
-
'Warming Stripes'
|
|
231
|
+
'Warming Stripes',
|
|
232
|
+
'Network',
|
|
233
|
+
'Dendrogram'
|
|
215
234
|
].includes(visualizationType)
|
|
216
235
|
const visHasLegendAxisAlign = () => {
|
|
217
236
|
return visualizationType === 'Bar' && visualizationSubType === 'stacked' && config.legend.behavior === 'isolate'
|
|
@@ -221,7 +240,7 @@ export const useEditorPermissions = () => {
|
|
|
221
240
|
}
|
|
222
241
|
|
|
223
242
|
const visSupportsTooltipOpacity = () => {
|
|
224
|
-
const disabledCharts = ['HeatMap', 'Spark Line', 'Sankey', 'Warming Stripes']
|
|
243
|
+
const disabledCharts = ['HeatMap', 'Spark Line', 'Sankey', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
225
244
|
if (disabledCharts.includes(visualizationType)) return false
|
|
226
245
|
return true
|
|
227
246
|
}
|
|
@@ -233,60 +252,84 @@ export const useEditorPermissions = () => {
|
|
|
233
252
|
}
|
|
234
253
|
|
|
235
254
|
const visSupportsSequentialPallete = () => {
|
|
236
|
-
const disabledCharts = ['
|
|
255
|
+
const disabledCharts = ['Paired Bar', 'Deviation Bar', 'Forest Plot', 'Forecasting', 'Network', 'Dendrogram']
|
|
237
256
|
if (disabledCharts.includes(visualizationType)) return false
|
|
238
257
|
return true
|
|
239
258
|
}
|
|
240
259
|
|
|
241
260
|
const visSupportsNonSequentialPallete = () => {
|
|
242
|
-
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
|
+
]
|
|
243
271
|
if (disabledCharts.includes(visualizationType)) return false
|
|
244
272
|
return true
|
|
245
273
|
}
|
|
246
274
|
|
|
247
275
|
const visSupportsReverseColorPalette = () => {
|
|
248
|
-
const disabledCharts = ['Forest Plot', 'Paired Bar', 'Deviation Bar', 'Sankey']
|
|
276
|
+
const disabledCharts = ['Forest Plot', 'Paired Bar', 'Deviation Bar', 'Sankey', 'Network', 'Dendrogram']
|
|
249
277
|
if (disabledCharts.includes(visualizationType)) return false
|
|
250
278
|
return true
|
|
251
279
|
}
|
|
252
280
|
|
|
253
281
|
const visSupportsDateCategoryAxisLabel = () => {
|
|
254
|
-
|
|
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
|
+
]
|
|
255
292
|
if (disabledCharts.includes(visualizationType)) return false
|
|
256
293
|
return true
|
|
257
294
|
}
|
|
258
295
|
|
|
259
296
|
const visSupportsDateCategoryAxisLine = () => {
|
|
260
|
-
|
|
297
|
+
if (isBarRace) return false
|
|
298
|
+
const disabledCharts = ['Forest Plot', 'Spark Line', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
261
299
|
if (disabledCharts.includes(visualizationType)) return false
|
|
262
300
|
return true
|
|
263
301
|
}
|
|
264
302
|
|
|
265
303
|
const visSupportsDateCategoryAxisTicks = () => {
|
|
266
|
-
|
|
304
|
+
if (isBarRace) return false
|
|
305
|
+
const disabledCharts = ['Forest Plot', 'Spark Line', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
267
306
|
if (disabledCharts.includes(visualizationType)) return false
|
|
268
307
|
return true
|
|
269
308
|
}
|
|
270
309
|
|
|
271
310
|
const visSupportsDateCategoryTickRotation = () => {
|
|
272
|
-
|
|
311
|
+
if (isBarRace) return false
|
|
312
|
+
const disabledCharts = ['Spark Line', 'Network', 'Dendrogram']
|
|
273
313
|
if (disabledCharts.includes(visualizationType)) return false
|
|
274
314
|
return true
|
|
275
315
|
}
|
|
276
316
|
|
|
277
317
|
const visSupportsDateCategoryNumTicks = () => {
|
|
278
|
-
|
|
318
|
+
if (isBarRace) return false
|
|
319
|
+
const disabledCharts = ['Spark Line', 'Network', 'Dendrogram']
|
|
279
320
|
if (disabledCharts.includes(visualizationType)) return false
|
|
280
321
|
return true
|
|
281
322
|
}
|
|
282
323
|
|
|
283
324
|
const visSupportsResponsiveTicks = () => {
|
|
284
|
-
|
|
325
|
+
if (isBarRace) return false
|
|
326
|
+
const disabledCharts = ['HeatMap', 'Spark Line', 'Network', 'Dendrogram']
|
|
285
327
|
if (disabledCharts.includes(visualizationType)) return false
|
|
286
328
|
return true
|
|
287
329
|
}
|
|
288
330
|
|
|
289
331
|
const visSupportsRegions = () => {
|
|
332
|
+
if (isBarRace) return false
|
|
290
333
|
const disabledCharts = [
|
|
291
334
|
'Forest Plot',
|
|
292
335
|
'Horizon Chart',
|
|
@@ -296,6 +339,8 @@ export const useEditorPermissions = () => {
|
|
|
296
339
|
'Radar',
|
|
297
340
|
'Spark Line',
|
|
298
341
|
'Sankey',
|
|
342
|
+
'Network',
|
|
343
|
+
'Dendrogram',
|
|
299
344
|
'Warming Stripes'
|
|
300
345
|
]
|
|
301
346
|
if (disabledCharts.includes(visualizationType)) return false
|
|
@@ -303,13 +348,13 @@ export const useEditorPermissions = () => {
|
|
|
303
348
|
}
|
|
304
349
|
|
|
305
350
|
const visSupportsValueAxisMax = () => {
|
|
306
|
-
const disabledCharts = ['Forest Plot', 'HeatMap']
|
|
351
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram']
|
|
307
352
|
if (disabledCharts.includes(visualizationType)) return false
|
|
308
353
|
return true
|
|
309
354
|
}
|
|
310
355
|
|
|
311
356
|
const visSupportsValueAxisMin = () => {
|
|
312
|
-
const disabledCharts = ['Forest Plot', 'HeatMap']
|
|
357
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram']
|
|
313
358
|
if (disabledCharts.includes(visualizationType)) return false
|
|
314
359
|
return true
|
|
315
360
|
}
|
|
@@ -342,47 +387,47 @@ export const useEditorPermissions = () => {
|
|
|
342
387
|
}
|
|
343
388
|
|
|
344
389
|
const visSupportsValueAxisGridLines = () => {
|
|
345
|
-
const disabledCharts = ['Forest Plot', 'HeatMap']
|
|
390
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram']
|
|
346
391
|
if (disabledCharts.includes(visualizationType)) return false
|
|
347
392
|
return true
|
|
348
393
|
}
|
|
349
394
|
|
|
350
395
|
// implement later
|
|
351
396
|
const visSupportsValueAxisTicks = () => {
|
|
352
|
-
const disabledCharts = ['Forest Plot', 'HeatMap']
|
|
397
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram']
|
|
353
398
|
if (disabledCharts.includes(visualizationType)) return false
|
|
354
399
|
return true
|
|
355
400
|
}
|
|
356
401
|
|
|
357
402
|
// implement later
|
|
358
403
|
const visSupportsValueAxisLine = () => {
|
|
359
|
-
const disabledCharts = ['Forest Plot']
|
|
404
|
+
const disabledCharts = ['Forest Plot', 'Network', 'Dendrogram']
|
|
360
405
|
if (disabledCharts.includes(visualizationType)) return false
|
|
361
406
|
return true
|
|
362
407
|
}
|
|
363
408
|
|
|
364
409
|
// implement later
|
|
365
410
|
const visSupportsValueAxisLabels = () => {
|
|
366
|
-
const disabledCharts = ['Forest Plot', 'HeatMap', 'Bump Chart']
|
|
411
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Bump Chart', 'Network', 'Dendrogram']
|
|
367
412
|
if (disabledCharts.includes(visualizationType)) return false
|
|
368
413
|
return true
|
|
369
414
|
}
|
|
370
415
|
|
|
371
416
|
const visSupportsBarSpace = () => {
|
|
372
|
-
const disabledCharts = ['Forest Plot']
|
|
417
|
+
const disabledCharts = ['Forest Plot', 'Network', 'Dendrogram']
|
|
373
418
|
if (disabledCharts.includes(visualizationType)) return false
|
|
374
419
|
if (orientation === 'horizontal' || visualizationType === 'Paired Bar') return true
|
|
375
420
|
return false
|
|
376
421
|
}
|
|
377
422
|
|
|
378
423
|
const visSupportsBarThickness = () => {
|
|
379
|
-
const disabledCharts = ['Forest Plot', 'HeatMap', 'Warming Stripes']
|
|
424
|
+
const disabledCharts = ['Forest Plot', 'HeatMap', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
380
425
|
if (disabledCharts.includes(visualizationType)) return false
|
|
381
426
|
return true
|
|
382
427
|
}
|
|
383
428
|
|
|
384
429
|
const visSupportsChartHeight = () => {
|
|
385
|
-
const disabledCharts = ['Spark Line', 'Warming Stripes']
|
|
430
|
+
const disabledCharts = ['Spark Line', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
386
431
|
if (disabledCharts.includes(visualizationType)) return false
|
|
387
432
|
return true
|
|
388
433
|
}
|
|
@@ -394,19 +439,23 @@ export const useEditorPermissions = () => {
|
|
|
394
439
|
}
|
|
395
440
|
|
|
396
441
|
const visSupportsLeftValueAxis = () => {
|
|
397
|
-
const disabledCharts = ['Radar', 'Spark Line', 'Sankey', 'Warming Stripes']
|
|
442
|
+
const disabledCharts = ['Radar', 'Spark Line', 'Sankey', 'Network', 'Dendrogram', 'Warming Stripes']
|
|
398
443
|
if (disabledCharts.includes(visualizationType)) return false
|
|
399
444
|
return true
|
|
400
445
|
}
|
|
401
446
|
|
|
447
|
+
const visSupportsRightValueAxis = () => {
|
|
448
|
+
return visualizationType === 'Combo' && orientation === 'vertical'
|
|
449
|
+
}
|
|
450
|
+
|
|
402
451
|
const visSupportsRankByValue = () => {
|
|
403
|
-
const disabledCharts = ['HeatMap', 'Spark Line']
|
|
452
|
+
const disabledCharts = ['HeatMap', 'Spark Line', 'Network', 'Dendrogram']
|
|
404
453
|
if (disabledCharts.includes(visualizationType)) return false
|
|
405
454
|
return true
|
|
406
455
|
}
|
|
407
456
|
|
|
408
457
|
const visSupportsDateCategoryHeight = () => {
|
|
409
|
-
const disabledCharts = ['HeatMap', 'Spark Line', 'Sankey', 'Bump Chart']
|
|
458
|
+
const disabledCharts = ['HeatMap', 'Spark Line', 'Sankey', 'Network', 'Dendrogram', 'Bump Chart']
|
|
410
459
|
if (disabledCharts.includes(visualizationType)) return false
|
|
411
460
|
if (config.orientation !== 'horizontal') return false
|
|
412
461
|
if (config.orientation === 'horizontal' && visualizationType === 'Bar' && !config.isLollipopChart) return false
|
|
@@ -530,6 +579,7 @@ export const useEditorPermissions = () => {
|
|
|
530
579
|
visSupportsReactTooltip,
|
|
531
580
|
visSupportsRegions,
|
|
532
581
|
visSupportsResponsiveTicks,
|
|
582
|
+
visSupportsRightValueAxis,
|
|
533
583
|
visSupportsReverseColorPalette,
|
|
534
584
|
visSupportsSequentialPallete,
|
|
535
585
|
visSupportsSeriesColorAssignments,
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import React, { useContext, useMemo } from 'react'
|
|
2
|
-
import
|
|
2
|
+
import replace from 'lodash/replace'
|
|
3
3
|
// cdc
|
|
4
4
|
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}`}>
|