@cdc/chart 4.26.2 → 4.26.4

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.
Files changed (165) hide show
  1. package/CONFIG.md +169 -0
  2. package/README.md +42 -17
  3. package/dist/cdcchart.js +39419 -35180
  4. package/examples/__data__/data-with-metadata.json +10 -0
  5. package/examples/feature/bar/additional-column-tooltip.json +3 -3
  6. package/examples/feature/deviation/planet-deviation-config.json +2 -2
  7. package/examples/feature/paired-bar/paired-bar-example.json +2 -2
  8. package/examples/feature/pie/planet-pie-example-config.json +2 -1
  9. package/examples/feature/tests-case-rate/case-rate-example-config.json +2 -2
  10. package/examples/feature/tests-covid/covid-confidence-example-config.json +2 -2
  11. package/examples/feature/tests-covid/covid-example-config.json +2 -2
  12. package/examples/feature/tests-cutoff/cutoff-example-config.json +2 -2
  13. package/examples/feature/tests-non-numerics/planet-pie-example-config-nonnumeric.json +2 -2
  14. package/examples/metadata-variables.json +58 -0
  15. package/examples/minimal-example.json +24 -0
  16. package/examples/private/test2.json +35012 -0
  17. package/package.json +4 -4
  18. package/src/CdcChart.tsx +8 -4
  19. package/src/CdcChartComponent.tsx +326 -290
  20. package/src/_stories/Chart.CustomColors.smoke.stories.tsx +97 -0
  21. package/src/_stories/Chart.Defaults.smoke.stories.tsx +95 -0
  22. package/src/_stories/{Chart.HTMLInDataTable.stories.tsx → Chart.HTMLInDataTable.smoke.stories.tsx} +10 -0
  23. package/src/_stories/Chart.Minimal.smoke.stories.tsx +25 -0
  24. package/src/_stories/{Chart.SmallMultiples.stories.tsx → Chart.SmallMultiples.smoke.stories.tsx} +17 -1
  25. package/src/_stories/Chart.SmallestLeftAxisMax.smoke.stories.tsx +64 -0
  26. package/src/_stories/{Chart.stories.tsx → Chart.smoke.stories.tsx} +48 -2
  27. package/src/_stories/{Chart.tooltip.stories.tsx → Chart.tooltip.smoke.stories.tsx} +68 -0
  28. package/src/_stories/ChartBar.Editor.stories.tsx +177 -115
  29. package/src/_stories/ChartBrush.Editor.stories.tsx +11 -25
  30. package/src/_stories/ChartEditor.Editor.stories.tsx +24 -1
  31. package/src/_stories/{Chart.CustomColors.stories.tsx → ChartLine.DashedDates.smoke.stories.tsx} +4 -4
  32. package/src/_stories/_mock/line_chart_dashed_dates.json +276 -0
  33. package/src/_stories/_mock/paired-bar-abbr.json +421 -0
  34. package/src/_stories/_mock/paired-bar.json +1 -1
  35. package/src/_stories/_mock/pie_custom_colors.json +268 -0
  36. package/src/_stories/_mock/smallest_left_axis_max.json +104 -0
  37. package/src/components/Annotations/components/AnnotationDraggable.styles.css +10 -10
  38. package/src/components/Annotations/components/AnnotationDraggable.tsx +1 -1
  39. package/src/components/Annotations/components/AnnotationDropdown.styles.css +1 -1
  40. package/src/components/Annotations/components/AnnotationList.styles.css +11 -11
  41. package/src/components/AreaChart/components/AreaChart.Stacked.jsx +10 -2
  42. package/src/components/Axis/BottomAxis.tsx +10 -3
  43. package/src/components/Axis/LeftAxis.tsx +2 -4
  44. package/src/components/Axis/LeftAxisGridlines.tsx +1 -3
  45. package/src/components/Axis/PairedBarAxis.tsx +10 -4
  46. package/src/components/BarChart/components/BarChart.Horizontal.tsx +21 -33
  47. package/src/components/BarChart/components/BarChart.StackedHorizontal.tsx +21 -35
  48. package/src/components/BarChart/components/BarChart.StackedVertical.tsx +21 -36
  49. package/src/components/BarChart/components/BarChart.Vertical.tsx +21 -34
  50. package/src/components/BarChart/components/BarChart.tsx +2 -6
  51. package/src/components/BarChart/helpers/getPatternUrl.ts +94 -0
  52. package/src/components/BarChart/helpers/tests/getPatternUrl.test.ts +134 -0
  53. package/src/components/BarChart/helpers/useBarChart.ts +4 -1
  54. package/src/components/BoxPlot/BoxPlot.Vertical.tsx +3 -3
  55. package/src/components/Brush/BrushSelector.tsx +2 -1
  56. package/src/components/Brush/MiniChartPreview.tsx +21 -26
  57. package/src/components/EditorPanel/EditorPanel.tsx +692 -954
  58. package/src/components/EditorPanel/EditorPanelContext.ts +1 -1
  59. package/src/components/EditorPanel/components/Panels/Panel.Annotate.tsx +218 -167
  60. package/src/components/EditorPanel/components/Panels/Panel.ForestPlotSettings.tsx +0 -78
  61. package/src/components/EditorPanel/components/Panels/Panel.General.tsx +39 -1
  62. package/src/components/EditorPanel/components/Panels/Panel.PatternSettings.tsx +169 -135
  63. package/src/components/EditorPanel/components/Panels/Panel.Regions.tsx +154 -109
  64. package/src/components/EditorPanel/components/Panels/Panel.Sankey.tsx +3 -3
  65. package/src/components/EditorPanel/components/Panels/Panel.Series.tsx +95 -28
  66. package/src/components/EditorPanel/components/Panels/Panel.Visual.tsx +45 -42
  67. package/src/components/EditorPanel/editor-panel.scss +1 -1
  68. package/src/components/EditorPanel/useEditorPermissions.ts +1 -10
  69. package/src/components/Forecasting/Forecasting.tsx +2 -2
  70. package/src/components/ForestPlot/ForestPlot.tsx +26 -22
  71. package/src/components/HorizonChart/HorizonChart.tsx +10 -2
  72. package/src/components/HoverLine/HoverLine.tsx +6 -8
  73. package/src/components/Legend/Legend.Component.tsx +4 -4
  74. package/src/components/Legend/LegendGroup/LegendGroup.styles.css +9 -4
  75. package/src/components/Legend/LegendGroup/LegendGroup.tsx +3 -1
  76. package/src/components/Legend/helpers/createFormatLabels.tsx +3 -2
  77. package/src/components/Legend/helpers/index.ts +0 -2
  78. package/src/components/LineChart/LineChartProps.ts +1 -0
  79. package/src/components/LineChart/components/LineChart.BumpCircle.tsx +3 -2
  80. package/src/components/LineChart/index.tsx +11 -4
  81. package/src/components/LinearChart/VisualizationRenderer.tsx +11 -1
  82. package/src/components/LinearChart/tests/LinearChart.test.tsx +224 -0
  83. package/src/components/LinearChart/tests/mockConfigContext.ts +2 -0
  84. package/src/components/LinearChart.tsx +124 -47
  85. package/src/components/PairedBarChart.jsx +2 -2
  86. package/src/components/PieChart/PieChart.tsx +30 -13
  87. package/src/components/RadarChart/RadarChart.tsx +1 -1
  88. package/src/components/Regions/components/Regions.tsx +36 -26
  89. package/src/components/Sankey/components/Sankey.tsx +3 -3
  90. package/src/components/Sankey/sankey.scss +1 -1
  91. package/src/components/ScatterPlot/ScatterPlot.jsx +19 -17
  92. package/src/components/SmallMultiples/SmallMultipleTile.tsx +1 -0
  93. package/src/components/SmallMultiples/SmallMultiples.css +5 -5
  94. package/src/components/Sparkline/components/SparkLine.tsx +1 -1
  95. package/src/components/Sparkline/index.scss +4 -2
  96. package/src/components/WarmingStripes/WarmingStripes.tsx +5 -3
  97. package/src/components/WarmingStripes/WarmingStripesGradientLegend.css +8 -8
  98. package/src/data/initial-state.js +24 -14
  99. package/src/data/legacy-defaults.ts +18 -0
  100. package/src/helpers/abbreviateNumber.ts +24 -17
  101. package/src/helpers/calculateLeftYAxisWidth.ts +193 -0
  102. package/src/helpers/getChartPatternId.ts +17 -0
  103. package/src/helpers/getMinMax.ts +16 -2
  104. package/src/helpers/seriesColumnSettings.ts +114 -0
  105. package/src/helpers/tests/countNumOfTicks.test.ts +77 -0
  106. package/src/helpers/tests/seriesColumnSettings.test.ts +84 -0
  107. package/src/helpers/tests/tooltipHelpers.test.ts +151 -0
  108. package/src/helpers/tooltipHelpers.ts +176 -0
  109. package/src/hooks/useHighlightedBars.ts +9 -16
  110. package/src/hooks/useProgrammaticTooltip.ts +16 -2
  111. package/src/hooks/useRightAxis.ts +14 -0
  112. package/src/hooks/useScales.ts +92 -56
  113. package/src/hooks/useSmallMultipleSynchronization.ts +3 -4
  114. package/src/hooks/useTooltip.tsx +186 -40
  115. package/src/scss/main.scss +152 -79
  116. package/src/test/CdcChart.test.jsx +26 -2
  117. package/src/types/ChartConfig.ts +5 -0
  118. package/tests/fixtures/chart-config-with-metadata.json +29 -0
  119. package/tests/fixtures/data-with-metadata.json +10 -0
  120. package/examples/chart-regression-2.json +0 -2360
  121. package/examples/feature/__data__/age-adjusted-rates.json +0 -1486
  122. package/examples/feature/__data__/city-temperature.json +0 -2198
  123. package/examples/feature/bar/Barchart_with_negative.json +0 -34
  124. package/examples/feature/boxplot/box-plot-data.json +0 -71
  125. package/examples/feature/boxplot/boxplot-data.json +0 -156
  126. package/examples/feature/combo/combochart-categories_are_numbers .json +0 -18
  127. package/examples/feature/forest-plot/log.json +0 -26
  128. package/examples/feature/tests-date-exclusions/date-exclusions-data.json +0 -162
  129. package/examples/region-issue.json +0 -2065
  130. package/examples/xaxis.json +0 -493
  131. /package/examples/feature/bar/{tall-data.json → __data__/tall-data.json} +0 -0
  132. /package/examples/feature/deviation/{planet-deviation-data.json → __data__/planet-deviation-data.json} +0 -0
  133. /package/examples/feature/paired-bar/{paired-bar-data.json → __data__/paired-bar-data.json} +0 -0
  134. /package/examples/feature/paired-bar/{paired-bar-formatted.json → __data__/paired-bar-formatted.json} +0 -0
  135. /package/examples/feature/tests-case-rate/{case-rate-example-data.json → __data__/case-rate-example-data.json} +0 -0
  136. /package/examples/feature/tests-covid/{covid-example-data-confidence.json → __data__/covid-example-data-confidence.json} +0 -0
  137. /package/examples/feature/tests-covid/{covid-example-data.json → __data__/covid-example-data.json} +0 -0
  138. /package/examples/feature/tests-cutoff/{cutoff-example-data.json → __data__/cutoff-example-data.json} +0 -0
  139. /package/examples/feature/tests-non-numerics/{planet-example-data-nonnumeric.json → __data__/planet-example-data-nonnumeric.json} +0 -0
  140. /package/src/_stories/{Chart.Anchors.stories.tsx → Chart.Anchors.smoke.stories.tsx} +0 -0
  141. /package/src/_stories/{Chart.BoxPlot.stories.tsx → Chart.BoxPlot.smoke.stories.tsx} +0 -0
  142. /package/src/_stories/{Chart.CI.stories.tsx → Chart.CI.smoke.stories.tsx} +0 -0
  143. /package/src/_stories/{Chart.Combo.stories.tsx → Chart.Combo.smoke.stories.tsx} +0 -0
  144. /package/src/_stories/{Chart.DynamicSeries.stories.tsx → Chart.DynamicSeries.smoke.stories.tsx} +0 -0
  145. /package/src/_stories/{Chart.Filters.stories.tsx → Chart.Filters.smoke.stories.tsx} +0 -0
  146. /package/src/_stories/{Chart.Forecast.stories.tsx → Chart.Forecast.smoke.stories.tsx} +0 -0
  147. /package/src/_stories/{Chart.Legend.Gradient.stories.tsx → Chart.Legend.Gradient.smoke.stories.tsx} +0 -0
  148. /package/src/_stories/{Chart.Patterns.stories.tsx → Chart.Patterns.smoke.stories.tsx} +0 -0
  149. /package/src/_stories/{Chart.PreserveDecimals.stories.tsx → Chart.PreserveDecimals.smoke.stories.tsx} +0 -0
  150. /package/src/_stories/{Chart.Regions.Categorical.stories.tsx → Chart.Regions.Categorical.smoke.stories.tsx} +0 -0
  151. /package/src/_stories/{Chart.Regions.DateScale.stories.tsx → Chart.Regions.DateScale.smoke.stories.tsx} +0 -0
  152. /package/src/_stories/{Chart.Regions.DateTimeScale.stories.tsx → Chart.Regions.DateTimeScale.smoke.stories.tsx} +0 -0
  153. /package/src/_stories/{Chart.ScatterPlot.stories.tsx → Chart.ScatterPlot.smoke.stories.tsx} +0 -0
  154. /package/src/_stories/{ChartAnnotation.stories.tsx → ChartAnnotation.smoke.stories.tsx} +0 -0
  155. /package/src/_stories/{ChartAxisLabels.stories.tsx → ChartAxisLabels.smoke.stories.tsx} +0 -0
  156. /package/src/_stories/{ChartAxisTitles.stories.tsx → ChartAxisTitles.smoke.stories.tsx} +0 -0
  157. /package/src/_stories/{ChartBrush.Matrix.Continuous.stories.tsx → ChartBrush.Matrix.Continuous.smoke.stories.tsx} +0 -0
  158. /package/src/_stories/{ChartBrush.Matrix.Date.stories.tsx → ChartBrush.Matrix.Date.smoke.stories.tsx} +0 -0
  159. /package/src/_stories/{ChartBrush.Matrix.DateTime.stories.tsx → ChartBrush.Matrix.DateTime.smoke.stories.tsx} +0 -0
  160. /package/src/_stories/{ChartBrush.stories.tsx → ChartBrush.smoke.stories.tsx} +0 -0
  161. /package/src/_stories/{ChartLine.QuadrantAngles.stories.tsx → ChartLine.QuadrantAngles.smoke.stories.tsx} +0 -0
  162. /package/src/_stories/{ChartLine.Suppression.stories.tsx → ChartLine.Suppression.smoke.stories.tsx} +0 -0
  163. /package/src/_stories/{ChartLine.Symbols.stories.tsx → ChartLine.Symbols.smoke.stories.tsx} +0 -0
  164. /package/src/_stories/{ChartPrefixSuffix.stories.tsx → ChartPrefixSuffix.smoke.stories.tsx} +0 -0
  165. /package/src/_stories/{TechAdoptionWithLinks.stories.tsx → TechAdoptionWithLinks.smoke.stories.tsx} +0 -0
@@ -121,7 +121,12 @@ export const BrushDefaultSelectionTests: Story = {
121
121
  const getBrushSelectionState = () => {
122
122
  // The brush selection is represented by the visx-brush extent rect
123
123
  const brushExtent = canvasElement.querySelector('.visx-brush rect[class*="selection"]') as SVGRectElement
124
- const brushSvg = canvasElement.querySelector('svg[style*="border: 1px solid"]') as SVGSVGElement
124
+ const brushSvg =
125
+ (brushExtent?.closest('svg') as SVGSVGElement) ||
126
+ (canvasElement.querySelector('.visx-brush svg') as SVGSVGElement)
127
+ const brushWidthAttr = brushSvg ? parseFloat(brushSvg.getAttribute('width') || '0') : 0
128
+ const totalBrushWidth = brushSvg ? brushSvg.clientWidth || brushWidthAttr : 0
129
+ const countInput = canvasElement.querySelector('input[id*="brushDefaultRecentDateCount"]') as HTMLInputElement
125
130
 
126
131
  // Get the visible data points in the main chart (lines or bars)
127
132
  const chartSvg = canvasElement.querySelector('.linear-chart svg, .cove-chart svg') as SVGSVGElement
@@ -130,11 +135,12 @@ export const BrushDefaultSelectionTests: Story = {
130
135
  return {
131
136
  brushWidth: brushExtent ? parseFloat(brushExtent.getAttribute('width') || '0') : 0,
132
137
  brushX: brushExtent ? parseFloat(brushExtent.getAttribute('x') || '0') : 0,
133
- totalBrushWidth: brushSvg ? brushSvg.clientWidth : 0,
138
+ totalBrushWidth,
134
139
  visibleDataPoints: dataPointsInChart,
140
+ defaultRecentDateCountValue: countInput?.value || '',
135
141
  selectionPercentage:
136
- brushExtent && brushSvg
137
- ? (parseFloat(brushExtent.getAttribute('width') || '0') / brushSvg.clientWidth) * 100
142
+ brushExtent && totalBrushWidth > 0
143
+ ? (parseFloat(brushExtent.getAttribute('width') || '0') / totalBrushWidth) * 100
138
144
  : 0
139
145
  }
140
146
  }
@@ -176,7 +182,7 @@ export const BrushDefaultSelectionTests: Story = {
176
182
  },
177
183
  (before, after) => {
178
184
  // Changing from 30 to 50 should expand the brush width
179
- return after.brushWidth > before.brushWidth
185
+ return after.defaultRecentDateCountValue === '50' && after.brushWidth > before.brushWidth
180
186
  }
181
187
  )
182
188
 
@@ -226,26 +232,6 @@ export const BrushDefaultSelectionTests: Story = {
226
232
  expect(afterSettingCount.dataPointCount).toBeGreaterThan(0)
227
233
  expect(afterSettingCount.dataPointCount).toBeLessThanOrEqual(35) // 30 + tolerance
228
234
  }
229
-
230
- // ============================================================================
231
- // TEST: Clear Recent Date Count Returns to Default 35%
232
- // Verifies: When the count is cleared, brush returns to percentage-based default
233
- // ============================================================================
234
-
235
- await performAndAssert(
236
- 'Clear Default Recent Date Count (return to 35%)',
237
- getBrushSelectionState,
238
- async () => {
239
- await userEvent.clear(recentDateCountInput)
240
- await userEvent.tab()
241
- },
242
- (before, after) => {
243
- // The selection should return to approximately 35% of the total width
244
- // Since we had set it to 30 points (~9% with 329 data points),
245
- // clearing should expand it back to ~35%
246
- return after.brushWidth > before.brushWidth || after.selectionPercentage > before.selectionPercentage
247
- }
248
- )
249
235
  }
250
236
  }
251
237
 
@@ -3,6 +3,7 @@ import { within, userEvent, expect } from 'storybook/test'
3
3
  import { performAndAssert, waitForEditor, openAccordion, MIN_ANIMATION_DELAY_MS } from '@cdc/core/helpers/testing'
4
4
 
5
5
  import Chart from '../CdcChartComponent'
6
+ import comboConfig from './_mock/combo.json'
6
7
  import mockScatterPlot from './_mock/scatterplot_mock.json'
7
8
  import smallMultiplesLinesColorsConfig from './_mock/small_multiples/small_multiples_lines_colors.json'
8
9
 
@@ -472,7 +473,7 @@ export const SmallMultiplesSectionTests: Story = {
472
473
  // ============================================================================
473
474
 
474
475
  const getChartCounts = () => {
475
- const chartContainer = canvasElement.querySelector('.cove-component__content, .chart-container, .visualization')
476
+ const chartContainer = canvasElement.querySelector('.cove-visualization__body, .chart-container, .visualization')
476
477
  const tiles = canvasElement.querySelectorAll('.small-multiple-tile, [class*="tile"]')
477
478
  const svgElements = chartContainer?.querySelectorAll('svg[role="img"], svg.chart') || []
478
479
 
@@ -653,4 +654,26 @@ export const SmallMultiplesSectionTests: Story = {
653
654
  }
654
655
  }
655
656
 
657
+ export const ComboRightValueAxisSectionTests: Story = {
658
+ name: 'Combo Right Value Axis Section Tests',
659
+ args: {
660
+ config: {
661
+ ...comboConfig,
662
+ visualizationType: 'Combo',
663
+ orientation: 'vertical'
664
+ },
665
+ isEditor: true
666
+ },
667
+ play: async ({ canvasElement }) => {
668
+ const canvas = within(canvasElement)
669
+
670
+ await waitForEditor(canvas)
671
+ await openAccordion(canvas, 'Right Value Axis')
672
+
673
+ const rightAxisLabelOffsetInput = canvas.getByLabelText(/^label offset$/i) as HTMLInputElement
674
+ expect(rightAxisLabelOffsetInput).toBeTruthy()
675
+ expect(rightAxisLabelOffsetInput.name).toContain('rightLabelOffsetSize')
676
+ }
677
+ }
678
+
656
679
  export default meta
@@ -1,18 +1,18 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite'
2
2
  import Chart from '../CdcChartComponent'
3
- import scatterPlotCustomColorConfig from './_mock/scatterplot_mock.json'
3
+ import config from './_mock/line_chart_dashed_dates.json'
4
4
  import { assertVisualizationRendered } from '@cdc/core/helpers/testing'
5
5
 
6
6
  const meta: Meta<typeof Chart> = {
7
- title: 'Components/Templates/Chart/Custom Colors',
7
+ title: 'Components/Templates/Chart/Special Lines - Dashed on Date Axis',
8
8
  component: Chart
9
9
  }
10
10
 
11
11
  type Story = StoryObj<typeof Chart>
12
12
 
13
- export const ScatterPlot: Story = {
13
+ export const DashedSpecialLineWithDates: Story = {
14
14
  args: {
15
- config: scatterPlotCustomColorConfig,
15
+ config: config,
16
16
  isEditor: false
17
17
  },
18
18
  play: async ({ canvasElement }) => {
@@ -0,0 +1,276 @@
1
+ {
2
+ "type": "chart",
3
+ "title": "Special Lines - Dashed Effect on Date Axis",
4
+ "theme": "theme-blue",
5
+ "animate": false,
6
+ "fontSize": "medium",
7
+ "lineDatapointStyle": "hover",
8
+ "lineDatapointColor": "Same as Line",
9
+ "visualizationSubType": "regular",
10
+ "visualizationType": "Line",
11
+ "isLollipopChart": false,
12
+ "lollipopShape": "circle",
13
+ "lollipopColorStyle": "two-tone",
14
+ "barStyle": "flat",
15
+ "roundingStyle": "standard",
16
+ "tipRounding": "top",
17
+ "isResponsiveTicks": false,
18
+ "general": {
19
+ "annotationDropdownText": "Annotations",
20
+ "showDownloadButton": false,
21
+ "showMissingDataLabel": true,
22
+ "showSuppressedSymbol": true,
23
+ "showZeroValueData": true,
24
+ "hideNullValue": true
25
+ },
26
+ "padding": { "left": 5, "right": 5 },
27
+ "preliminaryData": [
28
+ {
29
+ "type": "effect",
30
+ "seriesKeys": ["Value"],
31
+ "label": "Preliminary",
32
+ "column": "Status",
33
+ "value": "preliminary",
34
+ "style": "Dashed Small",
35
+ "displayTooltip": true,
36
+ "displayLegend": true,
37
+ "displayTable": true,
38
+ "symbol": "",
39
+ "iconCode": "",
40
+ "lineCode": "- - -",
41
+ "hideBarSymbol": false,
42
+ "hideLineStyle": false,
43
+ "circleSize": 6,
44
+ "displayGray": false
45
+ }
46
+ ],
47
+ "yAxis": {
48
+ "hideAxis": false,
49
+ "displayNumbersOnBar": false,
50
+ "hideLabel": false,
51
+ "hideTicks": false,
52
+ "size": 50,
53
+ "gridLines": true,
54
+ "enablePadding": false,
55
+ "min": "",
56
+ "max": "",
57
+ "labelColor": "#333",
58
+ "tickLabelColor": "#333",
59
+ "tickColor": "#333",
60
+ "rightHideAxis": true,
61
+ "rightAxisSize": 0,
62
+ "rightLabel": "",
63
+ "rightLabelOffsetSize": 0,
64
+ "rightAxisLabelColor": "#333",
65
+ "rightAxisTickLabelColor": "#333",
66
+ "rightAxisTickColor": "#333",
67
+ "numTicks": "",
68
+ "axisPadding": 0,
69
+ "scalePadding": 10,
70
+ "tickRotation": 0,
71
+ "anchors": [],
72
+ "shoMissingDataLabel": true,
73
+ "showMissingDataLine": true,
74
+ "categories": [],
75
+ "label": "Count"
76
+ },
77
+ "boxplot": {
78
+ "plots": [],
79
+ "borders": "true",
80
+ "plotOutlierValues": false,
81
+ "plotNonOutlierValues": true,
82
+ "labels": {
83
+ "q1": "Lower Quartile",
84
+ "q2": "q2",
85
+ "q3": "Upper Quartile",
86
+ "q4": "q4",
87
+ "minimum": "Minimum",
88
+ "maximum": "Maximum",
89
+ "mean": "Mean",
90
+ "median": "Median",
91
+ "sd": "Standard Deviation",
92
+ "iqr": "Interquartile Range",
93
+ "outliers": "Outliers",
94
+ "values": "Values",
95
+ "lowerBounds": "Lower Bounds",
96
+ "upperBounds": "Upper Bounds"
97
+ }
98
+ },
99
+ "topAxis": { "hasLine": false },
100
+ "isLegendValue": false,
101
+ "barThickness": 0.35,
102
+ "barHeight": 25,
103
+ "barSpace": 15,
104
+ "heights": { "vertical": 300, "horizontal": 750 },
105
+ "xAxis": {
106
+ "sortDates": false,
107
+ "anchors": [],
108
+ "type": "date",
109
+ "showTargetLabel": false,
110
+ "targetLabel": "Target",
111
+ "hideAxis": false,
112
+ "hideLabel": false,
113
+ "hideTicks": false,
114
+ "size": 75,
115
+ "tickRotation": 0,
116
+ "min": "",
117
+ "max": "",
118
+ "labelColor": "#333",
119
+ "tickLabelColor": "#333",
120
+ "tickColor": "#333",
121
+ "numTicks": "",
122
+ "labelOffset": 0,
123
+ "axisPadding": 0,
124
+ "target": 0,
125
+ "maxTickRotation": 0,
126
+ "padding": 6,
127
+ "showYearsOnce": false,
128
+ "dataKey": "date",
129
+ "label": "",
130
+ "dateParseFormat": "%Y-%m-%d",
131
+ "dateDisplayFormat": "%b %Y"
132
+ },
133
+ "table": {
134
+ "label": "Data Table",
135
+ "expanded": false,
136
+ "limitHeight": false,
137
+ "height": "",
138
+ "caption": "",
139
+ "showDownloadUrl": false,
140
+ "showDataTableLink": true,
141
+ "showDownloadLinkBelow": true,
142
+ "indexLabel": "",
143
+ "download": false,
144
+ "showVertical": true,
145
+ "dateDisplayFormat": "",
146
+ "showMissingDataLabel": true,
147
+ "showSuppressedSymbol": true,
148
+ "show": true
149
+ },
150
+ "orientation": "vertical",
151
+ "color": "pinkpurple",
152
+ "columns": {},
153
+ "legend": {
154
+ "hide": false,
155
+ "behavior": "highlight",
156
+ "axisAlign": true,
157
+ "singleRow": true,
158
+ "colorCode": "",
159
+ "reverseLabelOrder": false,
160
+ "description": "",
161
+ "dynamicLegend": false,
162
+ "dynamicLegendDefaultText": "Show All",
163
+ "dynamicLegendItemLimit": 5,
164
+ "dynamicLegendItemLimitMessage": "Dynamic Legend Item Limit Hit.",
165
+ "dynamicLegendChartMessage": "Select Options from the Legend",
166
+ "label": "",
167
+ "lineMode": false,
168
+ "verticalSorted": false,
169
+ "highlightOnHover": false,
170
+ "hideSuppressedLabels": false,
171
+ "hideSuppressionLink": false,
172
+ "seriesHighlight": [],
173
+ "style": "lines",
174
+ "subStyle": "linear blocks",
175
+ "tickRotation": "",
176
+ "hideBorder": { "side": false, "topBottom": true }
177
+ },
178
+ "brush": { "height": 25, "active": false },
179
+ "exclusions": { "active": false, "keys": [] },
180
+ "palette": "qualitative-bold",
181
+ "isPaletteReversed": false,
182
+ "twoColor": { "palette": "monochrome-1", "isPaletteReversed": false },
183
+ "labels": false,
184
+ "dataFormat": {
185
+ "commas": false,
186
+ "prefix": "",
187
+ "suffix": "",
188
+ "abbreviated": false,
189
+ "bottomSuffix": "",
190
+ "bottomPrefix": "",
191
+ "bottomAbbreviated": false
192
+ },
193
+ "confidenceKeys": {},
194
+ "visual": {
195
+ "border": true,
196
+ "accent": true,
197
+ "background": true,
198
+ "verticalHoverLine": true,
199
+ "horizontalHoverLine": false
200
+ },
201
+ "useLogScale": false,
202
+ "filterBehavior": "Filter Change",
203
+ "highlightedBarValues": [],
204
+ "series": [
205
+ {
206
+ "dataKey": "Value",
207
+ "type": "Line",
208
+ "lineType": "curveLinear",
209
+ "axis": "Left",
210
+ "tooltip": true
211
+ }
212
+ ],
213
+ "tooltips": { "opacity": 90, "singleSeries": false, "dateDisplayFormat": "" },
214
+ "annotations": [],
215
+ "debugSvg": false,
216
+ "chartMessage": { "noData": "No Data Available" },
217
+ "showTitle": true,
218
+ "showDownloadMediaButton": false,
219
+ "isResponsiveTicks": false,
220
+ "forestPlot": {
221
+ "startAt": 0,
222
+ "colors": { "line": "", "shape": "" },
223
+ "lineOfNoEffect": { "show": true },
224
+ "type": "",
225
+ "pooledResult": { "diamondHeight": 5, "column": "" },
226
+ "estimateField": "",
227
+ "estimateRadius": "",
228
+ "shape": "square",
229
+ "rowHeight": 20,
230
+ "description": { "show": true, "text": "description", "location": 0 },
231
+ "result": { "show": true, "text": "result", "location": 100 },
232
+ "radius": { "min": 2, "max": 10, "scalingColumn": "" },
233
+ "regression": { "lower": 0, "upper": 0, "estimateField": 0 },
234
+ "leftWidthOffset": 0,
235
+ "rightWidthOffset": 0,
236
+ "showZeroLine": false,
237
+ "leftLabel": "",
238
+ "rightLabel": ""
239
+ },
240
+ "area": { "isStacked": false },
241
+ "sankey": {
242
+ "title": { "defaultColor": "black" },
243
+ "iterations": 1,
244
+ "rxValue": 0.9,
245
+ "overallSize": { "width": 900, "height": 700 },
246
+ "margin": { "margin_y": 25, "margin_x": 0 },
247
+ "nodeSize": { "nodeWidth": 26, "nodeHeight": 40 },
248
+ "nodePadding": 55,
249
+ "nodeFontColor": "black",
250
+ "nodeColor": { "default": "#ff8500", "inactive": "#808080" },
251
+ "linkColor": { "default": "#ffc900", "inactive": "#D3D3D3" },
252
+ "opacity": {
253
+ "nodeOpacityDefault": 1,
254
+ "nodeOpacityInactive": 0.1,
255
+ "LinkOpacityDefault": 1,
256
+ "LinkOpacityInactive": 0.1
257
+ },
258
+ "storyNodeFontColor": "#006778",
259
+ "storyNodeText": [],
260
+ "nodeValueStyle": { "textBefore": "(", "textAfter": ")" },
261
+ "data": []
262
+ },
263
+ "version": "4.25.1",
264
+ "dynamicMarginTop": 0,
265
+ "data": [
266
+ { "date": "2024-07-01", "Value": "42", "Status": "final" },
267
+ { "date": "2024-08-01", "Value": "55", "Status": "final" },
268
+ { "date": "2024-09-01", "Value": "61", "Status": "final" },
269
+ { "date": "2024-10-01", "Value": "48", "Status": "final" },
270
+ { "date": "2024-11-01", "Value": "53", "Status": "final" },
271
+ { "date": "2024-12-01", "Value": "67", "Status": "final" },
272
+ { "date": "2025-01-01", "Value": "72", "Status": "preliminary" },
273
+ { "date": "2025-02-01", "Value": "78", "Status": "preliminary" },
274
+ { "date": "2025-03-01", "Value": "85", "Status": "preliminary" }
275
+ ]
276
+ }