@cdc/dashboard 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 (109) hide show
  1. package/CONFIG.md +172 -0
  2. package/README.md +60 -20
  3. package/dist/cdcdashboard-CY9IcPSi.es.js +6 -0
  4. package/dist/cdcdashboard-DlpiY3fQ.es.js +4 -0
  5. package/dist/cdcdashboard.js +56686 -50281
  6. package/examples/__data__/data-2.json +6 -0
  7. package/examples/__data__/data-with-metadata.json +18 -0
  8. package/examples/__data__/data.json +6 -0
  9. package/examples/default.json +7 -36
  10. package/examples/legend-issue.json +1 -1
  11. package/examples/minimal-example.json +34 -0
  12. package/examples/private/dengue.json +4640 -0
  13. package/examples/private/inline-markup.json +775 -0
  14. package/examples/private/link_to_file.json +16662 -0
  15. package/examples/private/recent-update.json +1456 -0
  16. package/examples/private/toggle.json +10137 -0
  17. package/examples/sankey.json +3 -3
  18. package/examples/test-api-filter-reset.json +4 -4
  19. package/examples/tp5-test.json +86 -4
  20. package/package.json +9 -9
  21. package/src/CdcDashboard.tsx +2 -1
  22. package/src/CdcDashboardComponent.tsx +48 -28
  23. package/src/_stories/Dashboard.DataSetup.stories.tsx +6 -1
  24. package/src/_stories/Dashboard.Pages.smoke.stories.tsx +22 -0
  25. package/src/_stories/Dashboard.smoke.stories.tsx +33 -0
  26. package/src/_stories/Dashboard.stories.tsx +4523 -83
  27. package/src/_stories/_mock/dashboard-data-driven-colors.json +171 -0
  28. package/src/_stories/_mock/tab-simple-filter.json +153 -0
  29. package/src/_stories/_mock/tp5-test.json +86 -5
  30. package/src/components/DashboardEditors.tsx +15 -0
  31. package/src/components/DashboardFilters/DashboardFilters.test.tsx +129 -0
  32. package/src/components/DashboardFilters/DashboardFilters.tsx +29 -10
  33. package/src/components/DashboardFilters/DashboardFiltersEditor/DashboardFiltersEditor.tsx +12 -8
  34. package/src/components/DashboardFilters/DashboardFiltersEditor/components/APIModal.tsx +6 -4
  35. package/src/components/DashboardFilters/DashboardFiltersEditor/components/DeleteFilterModal.tsx +59 -58
  36. package/src/components/DashboardFilters/DashboardFiltersEditor/components/FilterEditor.test.tsx +127 -0
  37. package/src/components/DashboardFilters/DashboardFiltersEditor/components/FilterEditor.tsx +29 -6
  38. package/src/components/DashboardFilters/DashboardFiltersEditor/components/NestedDropDownDashboard.tsx +10 -9
  39. package/src/components/DashboardFilters/DashboardFiltersWrapper.tsx +8 -8
  40. package/src/components/DashboardFilters/_stories/DashboardFilters.stories.tsx +1 -1
  41. package/src/components/DashboardFilters/dashboardfilter.styles.css +3 -3
  42. package/src/components/DataDesignerModal.tsx +2 -2
  43. package/src/components/ExpandCollapseButtons.tsx +6 -4
  44. package/src/components/Grid.tsx +4 -3
  45. package/src/components/Header/Header.tsx +27 -5
  46. package/src/components/Header/index.scss +1 -1
  47. package/src/components/MultiConfigTabs/MultiConfigTabs.tsx +141 -140
  48. package/src/components/MultiConfigTabs/multiconfigtabs.styles.css +6 -6
  49. package/src/components/Row.tsx +30 -8
  50. package/src/components/Toggle/toggle-style.css +7 -7
  51. package/src/components/VisualizationRow.tsx +81 -22
  52. package/src/components/VisualizationsPanel/VisualizationsPanel.tsx +2 -55
  53. package/src/components/VisualizationsPanel/visualizations-panel-styles.css +2 -2
  54. package/src/components/Widget/Widget.tsx +7 -6
  55. package/src/components/Widget/widget.styles.css +48 -17
  56. package/src/data/initial-state.js +2 -1
  57. package/src/helpers/addVisualization.ts +73 -0
  58. package/src/helpers/formatConfigBeforeSave.ts +1 -1
  59. package/src/helpers/getVizConfig.ts +13 -3
  60. package/src/helpers/iconHash.tsx +45 -36
  61. package/src/helpers/processDataLegacy.ts +19 -14
  62. package/src/helpers/tests/addVisualization.test.ts +52 -0
  63. package/src/helpers/tests/formatConfigBeforeSave.test.ts +81 -1
  64. package/src/scss/editor-panel.scss +1 -1
  65. package/src/scss/grid.scss +38 -8
  66. package/src/scss/main.scss +237 -40
  67. package/src/store/dashboard.reducer.ts +2 -1
  68. package/src/test/CdcDashboard.test.jsx +26 -2
  69. package/src/test/CdcDashboardComponent.test.tsx +74 -0
  70. package/src/types/FilterStyles.ts +2 -1
  71. package/src/types/SharedFilter.ts +1 -0
  72. package/tests/fixtures/dashboard-config-with-metadata.json +89 -0
  73. package/vite.config.js +2 -2
  74. package/dist/cdcdashboard-Cf9_fbQf.es.js +0 -6
  75. package/examples/DEV-6574.json +0 -2224
  76. package/examples/api-dashboard-data.json +0 -272
  77. package/examples/api-dashboard-years.json +0 -11
  78. package/examples/api-geographies-data.json +0 -11
  79. package/examples/chart-data.json +0 -5409
  80. package/examples/custom/css/respiratory.css +0 -236
  81. package/examples/custom/js/respiratory.js +0 -242
  82. package/examples/default-data.json +0 -368
  83. package/examples/default-filter-control.json +0 -209
  84. package/examples/default-multi-dataset-shared-filter.json +0 -1729
  85. package/examples/default-multi-dataset.json +0 -506
  86. package/examples/ed-visits-county-file.json +0 -402
  87. package/examples/filters/Alabama.json +0 -72
  88. package/examples/filters/Alaska.json +0 -1737
  89. package/examples/filters/Arkansas.json +0 -4713
  90. package/examples/filters/California.json +0 -212
  91. package/examples/filters/Colorado.json +0 -1500
  92. package/examples/filters/Connecticut.json +0 -559
  93. package/examples/filters/Delaware.json +0 -63
  94. package/examples/filters/DistrictofColumbia.json +0 -63
  95. package/examples/filters/Florida.json +0 -4217
  96. package/examples/filters/States.json +0 -146
  97. package/examples/state-level.json +0 -90136
  98. package/examples/state-points.json +0 -10474
  99. package/examples/temp-example-data.json +0 -130
  100. package/examples/test-dashboard-simple.json +0 -503
  101. package/examples/test-example.json +0 -752
  102. package/examples/test-file.json +0 -147
  103. package/examples/test.json +0 -752
  104. package/examples/testing.json +0 -94456
  105. /package/examples/{legend-issue-data.json → __data__/legend-issue-data.json} +0 -0
  106. /package/examples/api-test/{categories.json → __data__/categories.json} +0 -0
  107. /package/examples/api-test/{chart-data.json → __data__/chart-data.json} +0 -0
  108. /package/examples/api-test/{topics.json → __data__/topics.json} +0 -0
  109. /package/examples/api-test/{years.json → __data__/years.json} +0 -0
@@ -1,6 +1,11 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-vite'
2
2
  import { faker } from '@faker-js/faker'
3
- import { waitForOptionsToPopulate, performAndAssert } from '@cdc/core/helpers/testing'
3
+ import {
4
+ waitForOptionsToPopulate,
5
+ performAndAssert,
6
+ assertVisualizationRendered,
7
+ waitForPresence
8
+ } from '@cdc/core/helpers/testing'
4
9
  import APIFiltersMapData from './_mock/api-filter-map.json'
5
10
  import APIFiltersChartData from './_mock/api-filter-chart.json'
6
11
  import APIFilterErrorConfig from './_mock/api-filter-error.json'
@@ -18,7 +23,8 @@ import PivotFitlerConfig from './_mock/pivot-filter.json'
18
23
  import { type DashboardConfig as Config } from '../types/DashboardConfig'
19
24
  import { userEvent, within, expect } from 'storybook/test'
20
25
  import ToggleExampleConfig from './_mock/toggle-example.json'
21
- import _ from 'lodash'
26
+ import cloneDeep from 'lodash/cloneDeep'
27
+ import times from 'lodash/times'
22
28
  import { footnotesSymbols } from '@cdc/core/helpers/footnoteSymbols'
23
29
  import FootnotesConfig from '@cdc/core/types/Footnotes'
24
30
  import { ConfigRow } from '../types/ConfigRow'
@@ -37,13 +43,17 @@ import NestedParentChildFilters from './_mock/nested-parent-child-filters.json'
37
43
  import GalleryDataBiteDashboard from './_mock/gallery-data-bite-dashboard.json'
38
44
  import TP5TestConfig from './_mock/tp5-test.json'
39
45
  import LineChartAnglesConfig from './_mock/dashboard-line-chart-angles.json'
46
+ import TabSimpleFilterConfig from './_mock/tab-simple-filter.json'
47
+ import DataDrivenColorsConfig from './_mock/dashboard-data-driven-colors.json'
40
48
 
41
49
  // Dashboard Filter Updates for Ascending, Descending, and Custom Order
42
50
  import DashboardFilterAsc from './_mock/dashboard-filter-asc.json'
43
- const DashboardFilterDesc = _.cloneDeep(DashboardFilterAsc)
44
- const DashboardFilterCust = _.cloneDeep(DashboardFilterAsc)
51
+ const DashboardFilterDesc = cloneDeep(DashboardFilterAsc)
52
+ const DashboardFilterCust = cloneDeep(DashboardFilterAsc)
53
+ const NestedParentChildFiltersSubgroupOnly = cloneDeep(NestedParentChildFilters)
45
54
  DashboardFilterDesc.dashboard.sharedFilters[0].order = 'desc'
46
55
  DashboardFilterCust.dashboard.sharedFilters[0].order = 'cust'
56
+ NestedParentChildFiltersSubgroupOnly.dashboard.sharedFilters[1].displaySubgroupingOnly = true
47
57
 
48
58
  // On DashboardFilterCust change the sharedFilters[0].values and orderedValues to be in a custom order
49
59
  const customOrder = ['American Samoa', 'Alaska', 'Alabama', 'Arizona', 'Arkansas']
@@ -112,6 +122,20 @@ export const TP5_Test_Dashboard: Story = {
112
122
  }
113
123
  }
114
124
 
125
+ export const DataDrivenColors: Story = {
126
+ args: {
127
+ config: DataDrivenColorsConfig as unknown as Config,
128
+ isEditor: false
129
+ }
130
+ }
131
+
132
+ export const DataDrivenColors_Editor: Story = {
133
+ args: {
134
+ config: DataDrivenColorsConfig as unknown as Config,
135
+ isEditor: true
136
+ }
137
+ }
138
+
115
139
  export const Line_Chart_Angles: Story = {
116
140
  args: {
117
141
  config: LineChartAnglesConfig,
@@ -119,106 +143,4050 @@ export const Line_Chart_Angles: Story = {
119
143
  }
120
144
  }
121
145
 
122
- export const Bump_Chart_Dashboard: Story = {
123
- args: {
124
- config: BumpChartConfig,
125
- isEditor: false
146
+ export const Bump_Chart_Dashboard: Story = {
147
+ args: {
148
+ config: BumpChartConfig,
149
+ isEditor: false
150
+ }
151
+ }
152
+
153
+ export const Dashboard_Filters: Story = {
154
+ args: {
155
+ config: Dashboard_Filter,
156
+ isEditor: false
157
+ }
158
+ }
159
+
160
+ export const API_Filter_Error: Story = {
161
+ args: {
162
+ config: APIFilterErrorConfig,
163
+ isEditor: false
164
+ }
165
+ }
166
+
167
+ export const StandAloneTable: Story = {
168
+ args: {
169
+ config: StandaloneTable,
170
+ isEditor: false
171
+ }
172
+ }
173
+
174
+ export const ToggleExample: Story = {
175
+ args: {
176
+ config: ToggleExampleConfig,
177
+ isEditor: false
178
+ }
179
+ }
180
+
181
+ export const PivotFilter: Story = {
182
+ args: {
183
+ config: PivotFitlerConfig,
184
+ isEditor: false
185
+ }
186
+ }
187
+
188
+ export const GroupPivotFilter: Story = {
189
+ args: {
190
+ config: GroupPivotConfig,
191
+ isEditor: false
192
+ }
193
+ }
194
+
195
+ export const SingleStateDashboardWithFilters: Story = {
196
+ args: {
197
+ config: SingleStateDashboardFilters,
198
+ isEditor: false
199
+ }
200
+ }
201
+
202
+ faker.seed(123)
203
+
204
+ const countries = times(5, faker.location.country)
205
+ const categories = times(3, val => `category-${val + 1}`)
206
+
207
+ const data = []
208
+ countries.forEach((country, i) => {
209
+ categories.forEach((category, j) => {
210
+ if ((i + j) % 3 === 0) return
211
+ data.push({
212
+ Country: country,
213
+ 'Sample Categories': category,
214
+ Data: faker.number.int({ min: 5, max: 50 })
215
+ })
216
+ })
217
+ })
218
+
219
+ const footnoteData = countries.map((country, i) => {
220
+ return { Country: country, symbol: footnotesSymbols[i][0], text: faker.lorem.sentence() }
221
+ })
222
+
223
+ const multiVizData = {
224
+ 'valid-world-data.json': { data },
225
+ 'footnote-data.json': { data: footnoteData }
226
+ }
227
+
228
+ export const MultiDashboard: Story = {
229
+ args: {
230
+ config: MultiDashboardConfig,
231
+ isEditor: false
232
+ }
233
+ }
234
+
235
+ const FNrows: ConfigRow[] = [{ ...MultiVizConfig.rows[0], footnotesId: 'footnote123' }]
236
+ const footnoteConfig: Partial<FootnotesConfig> = {
237
+ dataKey: 'footnote-data.json',
238
+ dynamicFootnotes: { symbolColumn: 'symbol', textColumn: 'text' },
239
+ staticFootnotes: [{ symbol: '**', text: 'This is a static Footnote' }]
240
+ }
241
+ const FNViz = { ...MultiVizConfig.visualizations, footnote123: footnoteConfig }
242
+ export const Footnotes: Story = {
243
+ args: {
244
+ config: { ...MultiVizConfig, datasets: multiVizData, rows: FNrows, visualizations: FNViz },
245
+ isEditor: false
246
+ }
247
+ }
248
+
249
+ const EqualHeightMixedVizConfig = {
250
+ dashboard: {
251
+ theme: 'theme-blue',
252
+ sharedFilters: [
253
+ {
254
+ key: 'Year',
255
+ type: 'datafilter',
256
+ columnName: 'Year',
257
+ showDropdown: true,
258
+ setBy: 'chart1699383531543',
259
+ usedBy: ['map1699383540561'],
260
+ resetLabel: 'Reset',
261
+ values: ['2019', '2020', '2021'],
262
+ tier: 1,
263
+ orderedValues: ['2019', '2020', '2021']
264
+ }
265
+ ],
266
+ titleStyle: 'small'
267
+ },
268
+ rows: [
269
+ {
270
+ columns: [
271
+ {
272
+ width: 12,
273
+ widget: 'legacySharedFilters'
274
+ }
275
+ ]
276
+ },
277
+ {
278
+ equalHeight: true,
279
+ columns: [
280
+ {
281
+ width: 4,
282
+ widget: 'chart1699383531543'
283
+ },
284
+ {
285
+ width: 4,
286
+ widget: 'map1699383540561'
287
+ },
288
+ {
289
+ width: 4,
290
+ widget: 'equal-height-data-bite-story'
291
+ }
292
+ ]
293
+ }
294
+ ],
295
+ visualizations: {
296
+ chart1699383531543: {
297
+ annotations: [],
298
+ allowLineToBarGraph: '__​undefined__',
299
+ type: 'chart',
300
+ debugSvg: false,
301
+ chartMessage: {
302
+ noData: 'No Data Available'
303
+ },
304
+ title: '',
305
+ titleStyle: 'small',
306
+ showTitle: true,
307
+ showDownloadMediaButton: false,
308
+ theme: 'theme-blue',
309
+ animate: false,
310
+ lineDatapointStyle: 'hover',
311
+ lineDatapointColor: 'Same as Line',
312
+ barHasBorder: 'false',
313
+ isLollipopChart: false,
314
+ lollipopShape: 'circle',
315
+ lollipopColorStyle: 'two-tone',
316
+ visualizationSubType: 'regular',
317
+ barStyle: '',
318
+ roundingStyle: 'standard',
319
+ tipRounding: 'top',
320
+ isResponsiveTicks: false,
321
+ general: {
322
+ annotationDropdownText: 'Annotations',
323
+ showMissingDataLabel: true,
324
+ showSuppressedSymbol: true,
325
+ showZeroValueData: true,
326
+ hideNullValue: true,
327
+ palette: {
328
+ name: 'qualitative_bold',
329
+ version: '1.0'
330
+ },
331
+ useIntelligentLineChartLabels: false
332
+ },
333
+ padding: {
334
+ left: 5,
335
+ right: 5
336
+ },
337
+ preliminaryData: [],
338
+ yAxis: {
339
+ hideAxis: false,
340
+ displayNumbersOnBar: false,
341
+ hideLabel: false,
342
+ hideTicks: false,
343
+ size: 50,
344
+ gridLines: false,
345
+ enablePadding: false,
346
+ min: '',
347
+ max: '',
348
+ labelColor: '#1c1d1f',
349
+ tickLabelColor: '#1c1d1f',
350
+ tickColor: '#1c1d1f',
351
+ rightHideAxis: true,
352
+ rightAxisSize: 0,
353
+ rightLabel: '',
354
+ rightLabelOffsetSize: 0,
355
+ rightAxisLabelColor: '#1c1d1f',
356
+ rightAxisTickLabelColor: '#1c1d1f',
357
+ rightAxisTickColor: '#1c1d1f',
358
+ numTicks: '',
359
+ axisPadding: 0,
360
+ scalePadding: 10,
361
+ tickRotation: 0,
362
+ anchors: [],
363
+ shoMissingDataLabel: true,
364
+ showMissingDataLine: true,
365
+ categories: []
366
+ },
367
+ boxplot: {
368
+ plots: [],
369
+ borders: 'true',
370
+ plotOutlierValues: false,
371
+ plotNonOutlierValues: true,
372
+ labels: {
373
+ q1: 'Lower Quartile',
374
+ q2: 'q2',
375
+ q3: 'Upper Quartile',
376
+ q4: 'q4',
377
+ minimum: 'Minimum',
378
+ maximum: 'Maximum',
379
+ mean: 'Mean',
380
+ median: 'Median',
381
+ sd: 'Standard Deviation',
382
+ iqr: 'Interquartile Range',
383
+ total: 'Total',
384
+ outliers: 'Outliers',
385
+ values: 'Values',
386
+ lowerBounds: 'Lower Bounds',
387
+ upperBounds: 'Upper Bounds'
388
+ },
389
+ firstQuartilePercentage: 25,
390
+ thirdQuartilePercentage: 75,
391
+ boxWidthPercentage: 40,
392
+ legend: {
393
+ showHowToReadText: false,
394
+ howToReadText: ''
395
+ }
396
+ },
397
+ topAxis: {
398
+ hasLine: false
399
+ },
400
+ isLegendValue: false,
401
+ barThickness: 0.35,
402
+ barHeight: 25,
403
+ barSpace: 15,
404
+ heights: {
405
+ vertical: 300,
406
+ horizontal: 750
407
+ },
408
+ xAxis: {
409
+ sortDates: false,
410
+ anchors: [],
411
+ type: 'categorical',
412
+ showTargetLabel: true,
413
+ targetLabel: 'Target',
414
+ hideAxis: false,
415
+ hideLabel: false,
416
+ hideTicks: false,
417
+ size: 75,
418
+ tickRotation: 0,
419
+ min: '',
420
+ max: '',
421
+ labelColor: '#1c1d1f',
422
+ tickLabelColor: '#1c1d1f',
423
+ tickColor: '#1c1d1f',
424
+ numTicks: '',
425
+ labelOffset: 65,
426
+ axisPadding: 0,
427
+ target: 0,
428
+ maxTickRotation: 0,
429
+ padding: 5,
430
+ showYearsOnce: false,
431
+ sortByRecentDate: false,
432
+ brushActive: false,
433
+ brushDefaultRecentDateCount: '__​undefined__',
434
+ dataKey: 'Year',
435
+ axisBBox: 29.360000610351562,
436
+ tickWidthMax: 39
437
+ },
438
+ table: {
439
+ label: 'Data Table',
440
+ expanded: true,
441
+ limitHeight: false,
442
+ height: '',
443
+ caption: '',
444
+ showDownloadUrl: false,
445
+ showDataTableLink: true,
446
+ showDownloadLinkBelow: true,
447
+ indexLabel: '',
448
+ download: false,
449
+ showVertical: true,
450
+ dateDisplayFormat: '',
451
+ showMissingDataLabel: true,
452
+ showSuppressedSymbol: true,
453
+ collapsible: true,
454
+ show: false,
455
+ sharedFilterColumns: []
456
+ },
457
+ orientation: 'vertical',
458
+ color: 'qualitative-bold',
459
+ columns: {},
460
+ legend: {
461
+ hide: false,
462
+ behavior: 'isolate',
463
+ axisAlign: true,
464
+ singleRow: false,
465
+ colorCode: '',
466
+ reverseLabelOrder: false,
467
+ description: '',
468
+ dynamicLegend: false,
469
+ dynamicLegendDefaultText: 'Show All',
470
+ dynamicLegendItemLimit: 5,
471
+ dynamicLegendItemLimitMessage: 'Dynamic Legend Item Limit Hit.',
472
+ dynamicLegendChartMessage: 'Select Options from the Legend',
473
+ label: '',
474
+ lineMode: false,
475
+ verticalSorted: false,
476
+ highlightOnHover: false,
477
+ hideSuppressedLabels: false,
478
+ hideSuppressionLink: false,
479
+ seriesHighlight: [],
480
+ style: 'circles',
481
+ subStyle: 'linear blocks',
482
+ groupBy: '',
483
+ shape: 'circle',
484
+ tickRotation: '',
485
+ order: 'dataColumn',
486
+ hideBorder: {
487
+ side: false,
488
+ topBottom: true
489
+ },
490
+ position: 'right',
491
+ orderedValues: [],
492
+ patterns: {},
493
+ patternField: '',
494
+ unified: true
495
+ },
496
+ smallMultiples: {
497
+ mode: '',
498
+ tileColumn: '',
499
+ tilesPerRowDesktop: 3,
500
+ tilesPerRowMobile: 1,
501
+ tileOrder: [],
502
+ tileOrderType: 'asc',
503
+ tileTitles: {},
504
+ independentYAxis: false,
505
+ colorMode: 'same',
506
+ synchronizedTooltips: true,
507
+ showAreaUnderLine: true
508
+ },
509
+ exclusions: {
510
+ active: false,
511
+ keys: []
512
+ },
513
+ twoColor: {
514
+ palette: 'monochrome-1',
515
+ isPaletteReversed: false
516
+ },
517
+ labels: false,
518
+ dataFormat: {
519
+ commas: false,
520
+ prefix: '',
521
+ suffix: '',
522
+ abbreviated: false,
523
+ bottomSuffix: '',
524
+ bottomPrefix: '',
525
+ bottomAbbreviated: false
526
+ },
527
+ filters: [
528
+ {
529
+ filterStyle: 'dropdown',
530
+ columnName: 'Location',
531
+ label: 'Location',
532
+ order: 'asc',
533
+ id: 1772475767610
534
+ },
535
+ {
536
+ filterStyle: 'dropdown',
537
+ columnName: 'Type',
538
+ label: 'Type',
539
+ order: 'asc',
540
+ id: 1772475767611
541
+ }
542
+ ],
543
+ confidenceKeys: {},
544
+ visual: {
545
+ border: false,
546
+ borderColorTheme: false,
547
+ accent: false,
548
+ background: false,
549
+ hideBackgroundColor: false,
550
+ verticalHoverLine: false,
551
+ horizontalHoverLine: false,
552
+ lineDatapointSymbol: 'none',
553
+ maximumShapeAmount: 7
554
+ },
555
+ useLogScale: false,
556
+ filterBehavior: 'Filter Change',
557
+ highlightedBarValues: [],
558
+ series: [
559
+ {
560
+ dataKey: 'Amount',
561
+ type: 'Bar',
562
+ axis: 'Left',
563
+ tooltip: true
564
+ }
565
+ ],
566
+ tooltips: {
567
+ opacity: 90,
568
+ singleSeries: false,
569
+ dateDisplayFormat: ''
570
+ },
571
+ forestPlot: {
572
+ startAt: 0,
573
+ colors: {
574
+ line: '',
575
+ shape: ''
576
+ },
577
+ lineOfNoEffect: {
578
+ show: true
579
+ },
580
+ type: '',
581
+ pooledResult: {
582
+ diamondHeight: 5,
583
+ column: ''
584
+ },
585
+ estimateField: '',
586
+ estimateRadius: '',
587
+ shape: '',
588
+ rowHeight: 20,
589
+ description: {
590
+ show: true,
591
+ text: 'description',
592
+ location: 0
593
+ },
594
+ result: {
595
+ show: true,
596
+ text: 'result',
597
+ location: 100
598
+ },
599
+ radius: {
600
+ min: 1,
601
+ max: 8,
602
+ scalingColumn: ''
603
+ },
604
+ regression: {
605
+ lower: 0,
606
+ upper: 0,
607
+ estimateField: 0
608
+ },
609
+ leftWidthOffset: 0,
610
+ rightWidthOffset: 0,
611
+ showZeroLine: false,
612
+ leftLabel: '',
613
+ rightLabel: '',
614
+ width: 'auto',
615
+ lowerCiField: '',
616
+ upperCiField: ''
617
+ },
618
+ area: {
619
+ isStacked: false
620
+ },
621
+ radar: {
622
+ gridRings: 5,
623
+ showGridRings: true,
624
+ gridRingStyle: 'polygons',
625
+ scaleMin: 0,
626
+ scaleMax: '',
627
+ fillOpacity: 0.3,
628
+ showPoints: true,
629
+ pointRadius: 4,
630
+ strokeWidth: 2,
631
+ axisLabelOffset: 15
632
+ },
633
+ sankey: {
634
+ title: {
635
+ defaultColor: 'black'
636
+ },
637
+ iterations: 1,
638
+ rxValue: 0.9,
639
+ overallSize: {
640
+ width: 900,
641
+ height: 700
642
+ },
643
+ margin: {
644
+ margin_y: 25,
645
+ margin_x: 0
646
+ },
647
+ nodeSize: {
648
+ nodeWidth: 26,
649
+ nodeHeight: 40
650
+ },
651
+ nodePadding: 55,
652
+ nodeFontColor: 'black',
653
+ nodeColor: {
654
+ default: '#ff8500',
655
+ inactive: '#808080'
656
+ },
657
+ linkColor: {
658
+ default: '#ffc900',
659
+ inactive: '#D3D3D3'
660
+ },
661
+ opacity: {
662
+ nodeOpacityDefault: 1,
663
+ nodeOpacityInactive: 0.1,
664
+ LinkOpacityDefault: 1,
665
+ LinkOpacityInactive: 0.1
666
+ },
667
+ storyNodeFontColor: '#006778',
668
+ storyNodeText: [],
669
+ nodeValueStyle: {
670
+ textBefore: '(',
671
+ textAfter: ')'
672
+ },
673
+ data: []
674
+ },
675
+ markupVariables: [],
676
+ enableMarkupVariables: false,
677
+ showChartBrush: false,
678
+ fontSize: 'medium',
679
+ isPaletteReversed: false,
680
+ openModal: false,
681
+ uid: 'chart1699383531543',
682
+ visualizationType: 'Bar',
683
+ dataKey: 'dashboard_aggregate_example_state_type (1).csv',
684
+ dataDescription: {
685
+ horizontal: false,
686
+ series: false
687
+ },
688
+ validated: 4.23,
689
+ dynamicMarginTop: 0,
690
+ locale: 'en-US',
691
+ showEditorPanel: false,
692
+ dashboardFilters: [
693
+ {
694
+ columnName: 'Year',
695
+ active: '2021',
696
+ values: ['2019', '2020', '2021']
697
+ }
698
+ ]
699
+ },
700
+ map1699383540561: {
701
+ general: {
702
+ geoType: 'us',
703
+ geoBorderColor: 'darkGray',
704
+ headerColor: 'theme-blue',
705
+ title: '',
706
+ showTitle: true,
707
+ showSidebar: true,
708
+ showDownloadMediaButton: false,
709
+ displayAsHex: false,
710
+ displayStateLabels: false,
711
+ territoriesLabel: 'Territories',
712
+ territoriesAlwaysShow: false,
713
+ language: 'en',
714
+ geoLabelOverride: '',
715
+ hasRegions: false,
716
+ fullBorder: false,
717
+ type: 'data',
718
+ convertFipsCodes: true,
719
+ palette: {
720
+ isReversed: false,
721
+ name: 'sequential_pink_purple',
722
+ version: '1.0'
723
+ },
724
+ allowMapZoom: true,
725
+ hideGeoColumnInTooltip: false,
726
+ hidePrimaryColumnInTooltip: false,
727
+ statesPicked: [
728
+ {
729
+ fipsCode: '01',
730
+ stateName: 'Alabama'
731
+ }
732
+ ],
733
+ noDataMessage: '__​undefined__',
734
+ titleStyle: 'small'
735
+ },
736
+ type: 'map',
737
+ columns: {
738
+ geo: {
739
+ name: 'Location',
740
+ label: 'Location',
741
+ tooltip: false,
742
+ dataTable: true
743
+ },
744
+ primary: {
745
+ dataTable: true,
746
+ tooltip: true,
747
+ prefix: '',
748
+ suffix: '',
749
+ name: 'Amount',
750
+ label: ''
751
+ },
752
+ navigate: {
753
+ name: ''
754
+ },
755
+ latitude: {
756
+ name: ''
757
+ },
758
+ longitude: {
759
+ name: ''
760
+ }
761
+ },
762
+ legend: {
763
+ descriptions: {},
764
+ specialClasses: [],
765
+ unified: false,
766
+ singleColumn: false,
767
+ singleRow: false,
768
+ verticalSorted: false,
769
+ showSpecialClassesLast: false,
770
+ dynamicDescription: false,
771
+ type: 'equalnumber',
772
+ numberOfItems: 3,
773
+ position: 'side',
774
+ title: 'Legend'
775
+ },
776
+ filters: [
777
+ {
778
+ label: 'Type',
779
+ columnName: 'Type',
780
+ id: 1772475767610
781
+ }
782
+ ],
783
+ table: {
784
+ label: 'Data Table',
785
+ expanded: false,
786
+ limitHeight: false,
787
+ height: '',
788
+ caption: '',
789
+ showDownloadUrl: false,
790
+ showDataTableLink: true,
791
+ showFullGeoNameInCSV: false,
792
+ forceDisplay: true,
793
+ download: false,
794
+ indexLabel: ''
795
+ },
796
+ tooltips: {
797
+ appearanceType: 'hover',
798
+ linkLabel: 'Learn More',
799
+ capitalizeLabels: true,
800
+ opacity: 90
801
+ },
802
+ visual: {
803
+ minBubbleSize: 1,
804
+ maxBubbleSize: 20,
805
+ extraBubbleBorder: false,
806
+ cityStyle: 'circle',
807
+ geoCodeCircleSize: 2,
808
+ showBubbleZeros: false
809
+ },
810
+ mapPosition: {
811
+ coordinates: [0, 30],
812
+ zoom: 1
813
+ },
814
+ map: {
815
+ layers: []
816
+ },
817
+ hexMap: {
818
+ type: '',
819
+ shapeGroups: [
820
+ {
821
+ legendTitle: '',
822
+ legendDescription: '',
823
+ items: [
824
+ {
825
+ key: '',
826
+ shape: 'Arrow up',
827
+ column: '',
828
+ operator: '=',
829
+ value: ''
830
+ }
831
+ ]
832
+ }
833
+ ]
834
+ },
835
+ filterBehavior: 'Filter Change',
836
+ openModal: false,
837
+ uid: 'map1699383540561',
838
+ dataKey: 'dashboard_aggregate_example_state_type (1).csv',
839
+ dataDescription: {
840
+ horizontal: false,
841
+ series: false
842
+ },
843
+ validated: 4.23,
844
+ locale: 'en-US'
845
+ },
846
+ runtime: {
847
+ editorErrorMessage: ['No data'],
848
+ locale: 'en-US'
849
+ },
850
+ 'equal-height-data-bite-story': {
851
+ type: 'data-bite',
852
+ dataBite: '',
853
+ dataFunction: 'Mean (Average)',
854
+ dataColumn: 'Amount',
855
+ bitePosition: 'Top',
856
+ biteFontSize: 24,
857
+ fontSize: 'medium',
858
+ imageUrl: '',
859
+ biteBody:
860
+ '<span style="font-size: 20px;">Long-form data bite content for equal-height validation.</span><br>This intentionally verbose text creates a taller card so the row can demonstrate that chart, map, and data bite containers normalize to the same height when equal height is enabled.',
861
+ prefix: '',
862
+ suffix: '',
863
+ dataFormat: {
864
+ roundToPlace: 0,
865
+ commas: true,
866
+ prefix: '',
867
+ suffix: ''
868
+ },
869
+ biteStyle: 'title',
870
+ filters: [],
871
+ subtext: 'Citation for Source ',
872
+ title: '',
873
+ theme: 'theme-blue',
874
+ shadow: true,
875
+ uid: 'equal-height-data-bite-story',
876
+ visualizationType: 'data-bite',
877
+ locale: 'en-US',
878
+ showEditorPanel: false
879
+ },
880
+ legacySharedFilters: {
881
+ type: 'dashboardFilters',
882
+ visualizationType: 'dashboardFilters',
883
+ sharedFilterIndexes: [0],
884
+ filterBehavior: 'Filter Change',
885
+ titleStyle: 'small',
886
+ locale: 'en-US',
887
+ uid: 'legacySharedFilters'
888
+ }
889
+ },
890
+ table: {
891
+ label: 'Data Table',
892
+ show: true,
893
+ showDownloadUrl: false,
894
+ showVertical: true
895
+ },
896
+ type: 'dashboard',
897
+ uuid: 1699383537668,
898
+ runtime: {},
899
+ version: '4.26.3',
900
+ migrations: {
901
+ addColorMigration: true
902
+ },
903
+ general: {
904
+ palette: {
905
+ version: '1.0',
906
+ backups: [
907
+ {
908
+ name: '__​undefined__',
909
+ version: '1.0',
910
+ isReversed: '__​undefined__'
911
+ }
912
+ ]
913
+ }
914
+ },
915
+ locale: 'en-US',
916
+ datasets: {
917
+ 'dashboard_aggregate_example_state_type (1).csv': {
918
+ data: [
919
+ {
920
+ Location: 'Alaska',
921
+ Year: '2019',
922
+ Type: 'Federal',
923
+ Amount: 1377
924
+ },
925
+ {
926
+ Location: 'Alaska',
927
+ Year: '2019',
928
+ Type: 'Local',
929
+ Amount: 1613
930
+ },
931
+ {
932
+ Location: 'Alaska',
933
+ Year: '2019',
934
+ Type: 'State',
935
+ Amount: 1495
936
+ },
937
+ {
938
+ Location: 'Alaska',
939
+ Year: '2020',
940
+ Type: 'Federal',
941
+ Amount: 1377
942
+ },
943
+ {
944
+ Location: 'Alaska',
945
+ Year: '2020',
946
+ Type: 'Local',
947
+ Amount: 1613
948
+ },
949
+ {
950
+ Location: 'Alaska',
951
+ Year: '2020',
952
+ Type: 'State',
953
+ Amount: 1495
954
+ },
955
+ {
956
+ Location: 'Alaska',
957
+ Year: '2021',
958
+ Type: 'Federal',
959
+ Amount: 1436
960
+ },
961
+ {
962
+ Location: 'Alaska',
963
+ Year: '2021',
964
+ Type: 'Local',
965
+ Amount: 1672
966
+ },
967
+ {
968
+ Location: 'Alaska',
969
+ Year: '2021',
970
+ Type: 'State',
971
+ Amount: 1554
972
+ },
973
+ {
974
+ Location: 'Alabama',
975
+ Year: '2019',
976
+ Type: 'Federal',
977
+ Amount: 1375
978
+ },
979
+ {
980
+ Location: 'Alabama',
981
+ Year: '2019',
982
+ Type: 'Local',
983
+ Amount: 1611
984
+ },
985
+ {
986
+ Location: 'Alabama',
987
+ Year: '2019',
988
+ Type: 'State',
989
+ Amount: 1493
990
+ },
991
+ {
992
+ Location: 'Alabama',
993
+ Year: '2020',
994
+ Type: 'Federal',
995
+ Amount: 1375
996
+ },
997
+ {
998
+ Location: 'Alabama',
999
+ Year: '2020',
1000
+ Type: 'Local',
1001
+ Amount: 1611
1002
+ },
1003
+ {
1004
+ Location: 'Alabama',
1005
+ Year: '2020',
1006
+ Type: 'State',
1007
+ Amount: 1493
1008
+ },
1009
+ {
1010
+ Location: 'Alabama',
1011
+ Year: '2021',
1012
+ Type: 'Federal',
1013
+ Amount: 1434
1014
+ },
1015
+ {
1016
+ Location: 'Alabama',
1017
+ Year: '2021',
1018
+ Type: 'Local',
1019
+ Amount: 1670
1020
+ },
1021
+ {
1022
+ Location: 'Alabama',
1023
+ Year: '2021',
1024
+ Type: 'State',
1025
+ Amount: 1552
1026
+ },
1027
+ {
1028
+ Location: 'Arkansas',
1029
+ Year: '2019',
1030
+ Type: 'Federal',
1031
+ Amount: 1398
1032
+ },
1033
+ {
1034
+ Location: 'Arkansas',
1035
+ Year: '2019',
1036
+ Type: 'Local',
1037
+ Amount: 1634
1038
+ },
1039
+ {
1040
+ Location: 'Arkansas',
1041
+ Year: '2019',
1042
+ Type: 'State',
1043
+ Amount: 1516
1044
+ },
1045
+ {
1046
+ Location: 'Arkansas',
1047
+ Year: '2020',
1048
+ Type: 'Federal',
1049
+ Amount: 1398
1050
+ },
1051
+ {
1052
+ Location: 'Arkansas',
1053
+ Year: '2020',
1054
+ Type: 'Local',
1055
+ Amount: 1634
1056
+ },
1057
+ {
1058
+ Location: 'Arkansas',
1059
+ Year: '2020',
1060
+ Type: 'State',
1061
+ Amount: 1516
1062
+ },
1063
+ {
1064
+ Location: 'Arkansas',
1065
+ Year: '2021',
1066
+ Type: 'Federal',
1067
+ Amount: 1457
1068
+ },
1069
+ {
1070
+ Location: 'Arkansas',
1071
+ Year: '2021',
1072
+ Type: 'Local',
1073
+ Amount: 1693
1074
+ },
1075
+ {
1076
+ Location: 'Arkansas',
1077
+ Year: '2021',
1078
+ Type: 'State',
1079
+ Amount: 1575
1080
+ },
1081
+ {
1082
+ Location: 'American Samoa',
1083
+ Year: '2019',
1084
+ Type: 'Federal',
1085
+ Amount: 1388
1086
+ },
1087
+ {
1088
+ Location: 'American Samoa',
1089
+ Year: '2019',
1090
+ Type: 'Local',
1091
+ Amount: 1624
1092
+ },
1093
+ {
1094
+ Location: 'American Samoa',
1095
+ Year: '2019',
1096
+ Type: 'State',
1097
+ Amount: 1506
1098
+ },
1099
+ {
1100
+ Location: 'American Samoa',
1101
+ Year: '2020',
1102
+ Type: 'Federal',
1103
+ Amount: 1388
1104
+ },
1105
+ {
1106
+ Location: 'American Samoa',
1107
+ Year: '2020',
1108
+ Type: 'Local',
1109
+ Amount: 1624
1110
+ },
1111
+ {
1112
+ Location: 'American Samoa',
1113
+ Year: '2020',
1114
+ Type: 'State',
1115
+ Amount: 1506
1116
+ },
1117
+ {
1118
+ Location: 'American Samoa',
1119
+ Year: '2021',
1120
+ Type: 'Federal',
1121
+ Amount: 1447
1122
+ },
1123
+ {
1124
+ Location: 'American Samoa',
1125
+ Year: '2021',
1126
+ Type: 'Local',
1127
+ Amount: 1683
1128
+ },
1129
+ {
1130
+ Location: 'American Samoa',
1131
+ Year: '2021',
1132
+ Type: 'State',
1133
+ Amount: 1565
1134
+ },
1135
+ {
1136
+ Location: 'Arizona',
1137
+ Year: '2019',
1138
+ Type: 'Federal',
1139
+ Amount: 1401
1140
+ },
1141
+ {
1142
+ Location: 'Arizona',
1143
+ Year: '2019',
1144
+ Type: 'Local',
1145
+ Amount: 1637
1146
+ },
1147
+ {
1148
+ Location: 'Arizona',
1149
+ Year: '2019',
1150
+ Type: 'State',
1151
+ Amount: 1519
1152
+ },
1153
+ {
1154
+ Location: 'Arizona',
1155
+ Year: '2020',
1156
+ Type: 'Federal',
1157
+ Amount: 1401
1158
+ },
1159
+ {
1160
+ Location: 'Arizona',
1161
+ Year: '2020',
1162
+ Type: 'Local',
1163
+ Amount: 1637
1164
+ },
1165
+ {
1166
+ Location: 'Arizona',
1167
+ Year: '2020',
1168
+ Type: 'State',
1169
+ Amount: 1519
1170
+ },
1171
+ {
1172
+ Location: 'Arizona',
1173
+ Year: '2021',
1174
+ Type: 'Federal',
1175
+ Amount: 1460
1176
+ },
1177
+ {
1178
+ Location: 'Arizona',
1179
+ Year: '2021',
1180
+ Type: 'Local',
1181
+ Amount: 1696
1182
+ },
1183
+ {
1184
+ Location: 'Arizona',
1185
+ Year: '2021',
1186
+ Type: 'State',
1187
+ Amount: 1578
1188
+ },
1189
+ {
1190
+ Location: 'California',
1191
+ Year: '2019',
1192
+ Type: 'Federal',
1193
+ Amount: 1381
1194
+ },
1195
+ {
1196
+ Location: 'California',
1197
+ Year: '2019',
1198
+ Type: 'Local',
1199
+ Amount: 1617
1200
+ },
1201
+ {
1202
+ Location: 'California',
1203
+ Year: '2019',
1204
+ Type: 'State',
1205
+ Amount: 1499
1206
+ },
1207
+ {
1208
+ Location: 'California',
1209
+ Year: '2020',
1210
+ Type: 'Federal',
1211
+ Amount: 1381
1212
+ },
1213
+ {
1214
+ Location: 'California',
1215
+ Year: '2020',
1216
+ Type: 'Local',
1217
+ Amount: 1617
1218
+ },
1219
+ {
1220
+ Location: 'California',
1221
+ Year: '2020',
1222
+ Type: 'State',
1223
+ Amount: 1499
1224
+ },
1225
+ {
1226
+ Location: 'California',
1227
+ Year: '2021',
1228
+ Type: 'Federal',
1229
+ Amount: 1440
1230
+ },
1231
+ {
1232
+ Location: 'California',
1233
+ Year: '2021',
1234
+ Type: 'Local',
1235
+ Amount: 1676
1236
+ },
1237
+ {
1238
+ Location: 'California',
1239
+ Year: '2021',
1240
+ Type: 'State',
1241
+ Amount: 1558
1242
+ },
1243
+ {
1244
+ Location: 'Colorado',
1245
+ Year: '2019',
1246
+ Type: 'Federal',
1247
+ Amount: 1369
1248
+ },
1249
+ {
1250
+ Location: 'Colorado',
1251
+ Year: '2019',
1252
+ Type: 'Local',
1253
+ Amount: 1605
1254
+ },
1255
+ {
1256
+ Location: 'Colorado',
1257
+ Year: '2019',
1258
+ Type: 'State',
1259
+ Amount: 1487
1260
+ },
1261
+ {
1262
+ Location: 'Colorado',
1263
+ Year: '2020',
1264
+ Type: 'Federal',
1265
+ Amount: 1369
1266
+ },
1267
+ {
1268
+ Location: 'Colorado',
1269
+ Year: '2020',
1270
+ Type: 'Local',
1271
+ Amount: 1605
1272
+ },
1273
+ {
1274
+ Location: 'Colorado',
1275
+ Year: '2020',
1276
+ Type: 'State',
1277
+ Amount: 1487
1278
+ },
1279
+ {
1280
+ Location: 'Colorado',
1281
+ Year: '2021',
1282
+ Type: 'Federal',
1283
+ Amount: 1428
1284
+ },
1285
+ {
1286
+ Location: 'Colorado',
1287
+ Year: '2021',
1288
+ Type: 'Local',
1289
+ Amount: 1664
1290
+ },
1291
+ {
1292
+ Location: 'Colorado',
1293
+ Year: '2021',
1294
+ Type: 'State',
1295
+ Amount: 1546
1296
+ },
1297
+ {
1298
+ Location: 'Connecticut',
1299
+ Year: '2019',
1300
+ Type: 'Federal',
1301
+ Amount: 1403
1302
+ },
1303
+ {
1304
+ Location: 'Connecticut',
1305
+ Year: '2019',
1306
+ Type: 'Local',
1307
+ Amount: 1639
1308
+ },
1309
+ {
1310
+ Location: 'Connecticut',
1311
+ Year: '2019',
1312
+ Type: 'State',
1313
+ Amount: 1521
1314
+ },
1315
+ {
1316
+ Location: 'Connecticut',
1317
+ Year: '2020',
1318
+ Type: 'Federal',
1319
+ Amount: 1403
1320
+ },
1321
+ {
1322
+ Location: 'Connecticut',
1323
+ Year: '2020',
1324
+ Type: 'Local',
1325
+ Amount: 1639
1326
+ },
1327
+ {
1328
+ Location: 'Connecticut',
1329
+ Year: '2020',
1330
+ Type: 'State',
1331
+ Amount: 1521
1332
+ },
1333
+ {
1334
+ Location: 'Connecticut',
1335
+ Year: '2021',
1336
+ Type: 'Federal',
1337
+ Amount: 1462
1338
+ },
1339
+ {
1340
+ Location: 'Connecticut',
1341
+ Year: '2021',
1342
+ Type: 'Local',
1343
+ Amount: 1698
1344
+ },
1345
+ {
1346
+ Location: 'Connecticut',
1347
+ Year: '2021',
1348
+ Type: 'State',
1349
+ Amount: 1580
1350
+ },
1351
+ {
1352
+ Location: 'District of Columbia',
1353
+ Year: '2019',
1354
+ Type: 'Federal',
1355
+ Amount: 1400
1356
+ },
1357
+ {
1358
+ Location: 'District of Columbia',
1359
+ Year: '2019',
1360
+ Type: 'Local',
1361
+ Amount: 1636
1362
+ },
1363
+ {
1364
+ Location: 'District of Columbia',
1365
+ Year: '2019',
1366
+ Type: 'State',
1367
+ Amount: 1518
1368
+ },
1369
+ {
1370
+ Location: 'District of Columbia',
1371
+ Year: '2020',
1372
+ Type: 'Federal',
1373
+ Amount: 1400
1374
+ },
1375
+ {
1376
+ Location: 'District of Columbia',
1377
+ Year: '2020',
1378
+ Type: 'Local',
1379
+ Amount: 1636
1380
+ },
1381
+ {
1382
+ Location: 'District of Columbia',
1383
+ Year: '2020',
1384
+ Type: 'State',
1385
+ Amount: 1518
1386
+ },
1387
+ {
1388
+ Location: 'District of Columbia',
1389
+ Year: '2021',
1390
+ Type: 'Federal',
1391
+ Amount: 1459
1392
+ },
1393
+ {
1394
+ Location: 'District of Columbia',
1395
+ Year: '2021',
1396
+ Type: 'Local',
1397
+ Amount: 1695
1398
+ },
1399
+ {
1400
+ Location: 'District of Columbia',
1401
+ Year: '2021',
1402
+ Type: 'State',
1403
+ Amount: 1577
1404
+ },
1405
+ {
1406
+ Location: 'Delaware\t',
1407
+ Year: '2019',
1408
+ Type: 'Federal',
1409
+ Amount: '1384'
1410
+ },
1411
+ {
1412
+ Location: 'Delaware\t',
1413
+ Year: '2019',
1414
+ Type: 'Local',
1415
+ Amount: '1620'
1416
+ },
1417
+ {
1418
+ Location: 'Delaware\t',
1419
+ Year: '2019',
1420
+ Type: 'State',
1421
+ Amount: '1502'
1422
+ },
1423
+ {
1424
+ Location: 'Delaware\t',
1425
+ Year: '2020',
1426
+ Type: 'Federal',
1427
+ Amount: '1384'
1428
+ },
1429
+ {
1430
+ Location: 'Delaware\t',
1431
+ Year: '2020',
1432
+ Type: 'Local',
1433
+ Amount: '1620'
1434
+ },
1435
+ {
1436
+ Location: 'Delaware\t',
1437
+ Year: '2020',
1438
+ Type: 'State',
1439
+ Amount: '1502'
1440
+ },
1441
+ {
1442
+ Location: 'Delaware\t',
1443
+ Year: '2021',
1444
+ Type: 'Federal',
1445
+ Amount: '1443'
1446
+ },
1447
+ {
1448
+ Location: 'Delaware\t',
1449
+ Year: '2021',
1450
+ Type: 'Local',
1451
+ Amount: '1679'
1452
+ },
1453
+ {
1454
+ Location: 'Delaware\t',
1455
+ Year: '2021',
1456
+ Type: 'State',
1457
+ Amount: '1561'
1458
+ },
1459
+ {
1460
+ Location: 'Florida\t',
1461
+ Year: '2019',
1462
+ Type: 'Federal',
1463
+ Amount: '1387'
1464
+ },
1465
+ {
1466
+ Location: 'Florida\t',
1467
+ Year: '2019',
1468
+ Type: 'Local',
1469
+ Amount: '1623'
1470
+ },
1471
+ {
1472
+ Location: 'Florida\t',
1473
+ Year: '2019',
1474
+ Type: 'State',
1475
+ Amount: '1505'
1476
+ },
1477
+ {
1478
+ Location: 'Florida\t',
1479
+ Year: '2020',
1480
+ Type: 'Federal',
1481
+ Amount: '1387'
1482
+ },
1483
+ {
1484
+ Location: 'Florida\t',
1485
+ Year: '2020',
1486
+ Type: 'Local',
1487
+ Amount: '1623'
1488
+ },
1489
+ {
1490
+ Location: 'Florida\t',
1491
+ Year: '2020',
1492
+ Type: 'State',
1493
+ Amount: '1505'
1494
+ },
1495
+ {
1496
+ Location: 'Florida\t',
1497
+ Year: '2021',
1498
+ Type: 'Federal',
1499
+ Amount: '1446'
1500
+ },
1501
+ {
1502
+ Location: 'Florida\t',
1503
+ Year: '2021',
1504
+ Type: 'Local',
1505
+ Amount: '1682'
1506
+ },
1507
+ {
1508
+ Location: 'Florida\t',
1509
+ Year: '2021',
1510
+ Type: 'State',
1511
+ Amount: '1564'
1512
+ },
1513
+ {
1514
+ Location: 'Georgia\t',
1515
+ Year: '2019',
1516
+ Type: 'Federal',
1517
+ Amount: '1365'
1518
+ },
1519
+ {
1520
+ Location: 'Georgia\t',
1521
+ Year: '2019',
1522
+ Type: 'Local',
1523
+ Amount: '1601'
1524
+ },
1525
+ {
1526
+ Location: 'Georgia\t',
1527
+ Year: '2019',
1528
+ Type: 'State',
1529
+ Amount: '1483'
1530
+ },
1531
+ {
1532
+ Location: 'Georgia\t',
1533
+ Year: '2020',
1534
+ Type: 'Federal',
1535
+ Amount: '1365'
1536
+ },
1537
+ {
1538
+ Location: 'Georgia\t',
1539
+ Year: '2020',
1540
+ Type: 'Local',
1541
+ Amount: '1601'
1542
+ },
1543
+ {
1544
+ Location: 'Georgia\t',
1545
+ Year: '2020',
1546
+ Type: 'State',
1547
+ Amount: '1483'
1548
+ },
1549
+ {
1550
+ Location: 'Georgia\t',
1551
+ Year: '2021',
1552
+ Type: 'Federal',
1553
+ Amount: '1424'
1554
+ },
1555
+ {
1556
+ Location: 'Georgia\t',
1557
+ Year: '2021',
1558
+ Type: 'Local',
1559
+ Amount: '1660'
1560
+ },
1561
+ {
1562
+ Location: 'Georgia\t',
1563
+ Year: '2021',
1564
+ Type: 'State',
1565
+ Amount: '1542'
1566
+ },
1567
+ {
1568
+ Location: 'Guam',
1569
+ Year: '2019',
1570
+ Type: 'Federal',
1571
+ Amount: 1356
1572
+ },
1573
+ {
1574
+ Location: 'Guam',
1575
+ Year: '2019',
1576
+ Type: 'Local',
1577
+ Amount: 1592
1578
+ },
1579
+ {
1580
+ Location: 'Guam',
1581
+ Year: '2019',
1582
+ Type: 'State',
1583
+ Amount: 1474
1584
+ },
1585
+ {
1586
+ Location: 'Guam',
1587
+ Year: '2020',
1588
+ Type: 'Federal',
1589
+ Amount: 1356
1590
+ },
1591
+ {
1592
+ Location: 'Guam',
1593
+ Year: '2020',
1594
+ Type: 'Local',
1595
+ Amount: 1592
1596
+ },
1597
+ {
1598
+ Location: 'Guam',
1599
+ Year: '2020',
1600
+ Type: 'State',
1601
+ Amount: 1474
1602
+ },
1603
+ {
1604
+ Location: 'Guam',
1605
+ Year: '2021',
1606
+ Type: 'Federal',
1607
+ Amount: 1415
1608
+ },
1609
+ {
1610
+ Location: 'Guam',
1611
+ Year: '2021',
1612
+ Type: 'Local',
1613
+ Amount: 1651
1614
+ },
1615
+ {
1616
+ Location: 'Guam',
1617
+ Year: '2021',
1618
+ Type: 'State',
1619
+ Amount: 1533
1620
+ },
1621
+ {
1622
+ Location: 'Hawaii\t',
1623
+ Year: '2019',
1624
+ Type: 'Federal',
1625
+ Amount: '1362'
1626
+ },
1627
+ {
1628
+ Location: 'Hawaii\t',
1629
+ Year: '2019',
1630
+ Type: 'Local',
1631
+ Amount: '1598'
1632
+ },
1633
+ {
1634
+ Location: 'Hawaii\t',
1635
+ Year: '2019',
1636
+ Type: 'State',
1637
+ Amount: '1480'
1638
+ },
1639
+ {
1640
+ Location: 'Hawaii\t',
1641
+ Year: '2020',
1642
+ Type: 'Federal',
1643
+ Amount: '1362'
1644
+ },
1645
+ {
1646
+ Location: 'Hawaii\t',
1647
+ Year: '2020',
1648
+ Type: 'Local',
1649
+ Amount: '1598'
1650
+ },
1651
+ {
1652
+ Location: 'Hawaii\t',
1653
+ Year: '2020',
1654
+ Type: 'State',
1655
+ Amount: '1480'
1656
+ },
1657
+ {
1658
+ Location: 'Hawaii\t',
1659
+ Year: '2021',
1660
+ Type: 'Federal',
1661
+ Amount: '1421'
1662
+ },
1663
+ {
1664
+ Location: 'Hawaii\t',
1665
+ Year: '2021',
1666
+ Type: 'Local',
1667
+ Amount: '1657'
1668
+ },
1669
+ {
1670
+ Location: 'Hawaii\t',
1671
+ Year: '2021',
1672
+ Type: 'State',
1673
+ Amount: '1539'
1674
+ },
1675
+ {
1676
+ Location: 'Iowa',
1677
+ Year: '2019',
1678
+ Type: 'Federal',
1679
+ Amount: 1394
1680
+ },
1681
+ {
1682
+ Location: 'Iowa',
1683
+ Year: '2019',
1684
+ Type: 'Local',
1685
+ Amount: 1630
1686
+ },
1687
+ {
1688
+ Location: 'Iowa',
1689
+ Year: '2019',
1690
+ Type: 'State',
1691
+ Amount: 1512
1692
+ },
1693
+ {
1694
+ Location: 'Iowa',
1695
+ Year: '2020',
1696
+ Type: 'Federal',
1697
+ Amount: 1394
1698
+ },
1699
+ {
1700
+ Location: 'Iowa',
1701
+ Year: '2020',
1702
+ Type: 'Local',
1703
+ Amount: 1630
1704
+ },
1705
+ {
1706
+ Location: 'Iowa',
1707
+ Year: '2020',
1708
+ Type: 'State',
1709
+ Amount: 1512
1710
+ },
1711
+ {
1712
+ Location: 'Iowa',
1713
+ Year: '2021',
1714
+ Type: 'Federal',
1715
+ Amount: 1453
1716
+ },
1717
+ {
1718
+ Location: 'Iowa',
1719
+ Year: '2021',
1720
+ Type: 'Local',
1721
+ Amount: 1689
1722
+ },
1723
+ {
1724
+ Location: 'Iowa',
1725
+ Year: '2021',
1726
+ Type: 'State',
1727
+ Amount: 1571
1728
+ },
1729
+ {
1730
+ Location: 'Idaho',
1731
+ Year: '2019',
1732
+ Type: 'Federal',
1733
+ Amount: 1374
1734
+ },
1735
+ {
1736
+ Location: 'Idaho',
1737
+ Year: '2019',
1738
+ Type: 'Local',
1739
+ Amount: 1610
1740
+ },
1741
+ {
1742
+ Location: 'Idaho',
1743
+ Year: '2019',
1744
+ Type: 'State',
1745
+ Amount: 1492
1746
+ },
1747
+ {
1748
+ Location: 'Idaho',
1749
+ Year: '2020',
1750
+ Type: 'Federal',
1751
+ Amount: 1374
1752
+ },
1753
+ {
1754
+ Location: 'Idaho',
1755
+ Year: '2020',
1756
+ Type: 'Local',
1757
+ Amount: 1610
1758
+ },
1759
+ {
1760
+ Location: 'Idaho',
1761
+ Year: '2020',
1762
+ Type: 'State',
1763
+ Amount: 1492
1764
+ },
1765
+ {
1766
+ Location: 'Idaho',
1767
+ Year: '2021',
1768
+ Type: 'Federal',
1769
+ Amount: 1433
1770
+ },
1771
+ {
1772
+ Location: 'Idaho',
1773
+ Year: '2021',
1774
+ Type: 'Local',
1775
+ Amount: 1669
1776
+ },
1777
+ {
1778
+ Location: 'Idaho',
1779
+ Year: '2021',
1780
+ Type: 'State',
1781
+ Amount: 1551
1782
+ },
1783
+ {
1784
+ Location: 'Illinois\t',
1785
+ Year: '2019',
1786
+ Type: 'Federal',
1787
+ Amount: '1402'
1788
+ },
1789
+ {
1790
+ Location: 'Illinois\t',
1791
+ Year: '2019',
1792
+ Type: 'Local',
1793
+ Amount: '1638'
1794
+ },
1795
+ {
1796
+ Location: 'Illinois\t',
1797
+ Year: '2019',
1798
+ Type: 'State',
1799
+ Amount: '1520'
1800
+ },
1801
+ {
1802
+ Location: 'Illinois\t',
1803
+ Year: '2020',
1804
+ Type: 'Federal',
1805
+ Amount: '1402'
1806
+ },
1807
+ {
1808
+ Location: 'Illinois\t',
1809
+ Year: '2020',
1810
+ Type: 'Local',
1811
+ Amount: '1638'
1812
+ },
1813
+ {
1814
+ Location: 'Illinois\t',
1815
+ Year: '2020',
1816
+ Type: 'State',
1817
+ Amount: '1520'
1818
+ },
1819
+ {
1820
+ Location: 'Illinois\t',
1821
+ Year: '2021',
1822
+ Type: 'Federal',
1823
+ Amount: '1461'
1824
+ },
1825
+ {
1826
+ Location: 'Illinois\t',
1827
+ Year: '2021',
1828
+ Type: 'Local',
1829
+ Amount: '1697'
1830
+ },
1831
+ {
1832
+ Location: 'Illinois\t',
1833
+ Year: '2021',
1834
+ Type: 'State',
1835
+ Amount: '1579'
1836
+ },
1837
+ {
1838
+ Location: 'Indiana\t',
1839
+ Year: '2019',
1840
+ Type: 'Federal',
1841
+ Amount: '1404'
1842
+ },
1843
+ {
1844
+ Location: 'Indiana\t',
1845
+ Year: '2019',
1846
+ Type: 'Local',
1847
+ Amount: '1640'
1848
+ },
1849
+ {
1850
+ Location: 'Indiana\t',
1851
+ Year: '2019',
1852
+ Type: 'State',
1853
+ Amount: '1522'
1854
+ },
1855
+ {
1856
+ Location: 'Indiana\t',
1857
+ Year: '2020',
1858
+ Type: 'Federal',
1859
+ Amount: '1404'
1860
+ },
1861
+ {
1862
+ Location: 'Indiana\t',
1863
+ Year: '2020',
1864
+ Type: 'Local',
1865
+ Amount: '1640'
1866
+ },
1867
+ {
1868
+ Location: 'Indiana\t',
1869
+ Year: '2020',
1870
+ Type: 'State',
1871
+ Amount: '1522'
1872
+ },
1873
+ {
1874
+ Location: 'Indiana\t',
1875
+ Year: '2021',
1876
+ Type: 'Federal',
1877
+ Amount: '1463'
1878
+ },
1879
+ {
1880
+ Location: 'Indiana\t',
1881
+ Year: '2021',
1882
+ Type: 'Local',
1883
+ Amount: '1699'
1884
+ },
1885
+ {
1886
+ Location: 'Indiana\t',
1887
+ Year: '2021',
1888
+ Type: 'State',
1889
+ Amount: '1581'
1890
+ },
1891
+ {
1892
+ Location: 'Kansas\t',
1893
+ Year: '2019',
1894
+ Type: 'Federal',
1895
+ Amount: '1367'
1896
+ },
1897
+ {
1898
+ Location: 'Kansas\t',
1899
+ Year: '2019',
1900
+ Type: 'Local',
1901
+ Amount: '1603'
1902
+ },
1903
+ {
1904
+ Location: 'Kansas\t',
1905
+ Year: '2019',
1906
+ Type: 'State',
1907
+ Amount: '1485'
1908
+ },
1909
+ {
1910
+ Location: 'Kansas\t',
1911
+ Year: '2020',
1912
+ Type: 'Federal',
1913
+ Amount: '1367'
1914
+ },
1915
+ {
1916
+ Location: 'Kansas\t',
1917
+ Year: '2020',
1918
+ Type: 'Local',
1919
+ Amount: '1603'
1920
+ },
1921
+ {
1922
+ Location: 'Kansas\t',
1923
+ Year: '2020',
1924
+ Type: 'State',
1925
+ Amount: '1485'
1926
+ },
1927
+ {
1928
+ Location: 'Kansas',
1929
+ Year: '2021',
1930
+ Type: 'Federal',
1931
+ Amount: 1426
1932
+ },
1933
+ {
1934
+ Location: 'Kansas',
1935
+ Year: '2021',
1936
+ Type: 'Local',
1937
+ Amount: 1662
1938
+ },
1939
+ {
1940
+ Location: 'Kansas',
1941
+ Year: '2021',
1942
+ Type: 'State',
1943
+ Amount: 1544
1944
+ },
1945
+ {
1946
+ Location: 'Kentucky',
1947
+ Year: '2019',
1948
+ Type: 'Federal',
1949
+ Amount: 1359
1950
+ },
1951
+ {
1952
+ Location: 'Kentucky',
1953
+ Year: '2019',
1954
+ Type: 'Local',
1955
+ Amount: 1595
1956
+ },
1957
+ {
1958
+ Location: 'Kentucky',
1959
+ Year: '2019',
1960
+ Type: 'State',
1961
+ Amount: 1477
1962
+ },
1963
+ {
1964
+ Location: 'Kentucky',
1965
+ Year: '2020',
1966
+ Type: 'Federal',
1967
+ Amount: 1359
1968
+ },
1969
+ {
1970
+ Location: 'Kentucky',
1971
+ Year: '2020',
1972
+ Type: 'Local',
1973
+ Amount: 1595
1974
+ },
1975
+ {
1976
+ Location: 'Kentucky',
1977
+ Year: '2020',
1978
+ Type: 'State',
1979
+ Amount: 1477
1980
+ },
1981
+ {
1982
+ Location: 'Kentucky',
1983
+ Year: '2021',
1984
+ Type: 'Federal',
1985
+ Amount: 1418
1986
+ },
1987
+ {
1988
+ Location: 'Kentucky',
1989
+ Year: '2021',
1990
+ Type: 'Local',
1991
+ Amount: 1654
1992
+ },
1993
+ {
1994
+ Location: 'Kentucky',
1995
+ Year: '2021',
1996
+ Type: 'State',
1997
+ Amount: 1536
1998
+ },
1999
+ {
2000
+ Location: 'Louisiana',
2001
+ Year: '2019',
2002
+ Type: 'Federal',
2003
+ Amount: 1409
2004
+ },
2005
+ {
2006
+ Location: 'Louisiana',
2007
+ Year: '2019',
2008
+ Type: 'Local',
2009
+ Amount: 1645
2010
+ },
2011
+ {
2012
+ Location: 'Louisiana',
2013
+ Year: '2019',
2014
+ Type: 'State',
2015
+ Amount: 1527
2016
+ },
2017
+ {
2018
+ Location: 'Louisiana',
2019
+ Year: '2020',
2020
+ Type: 'Federal',
2021
+ Amount: 1409
2022
+ },
2023
+ {
2024
+ Location: 'Louisiana',
2025
+ Year: '2020',
2026
+ Type: 'Local',
2027
+ Amount: 1645
2028
+ },
2029
+ {
2030
+ Location: 'Louisiana',
2031
+ Year: '2020',
2032
+ Type: 'State',
2033
+ Amount: 1527
2034
+ },
2035
+ {
2036
+ Location: 'Louisiana',
2037
+ Year: '2021',
2038
+ Type: 'Federal',
2039
+ Amount: 1468
2040
+ },
2041
+ {
2042
+ Location: 'Louisiana',
2043
+ Year: '2021',
2044
+ Type: 'Local',
2045
+ Amount: 1704
2046
+ },
2047
+ {
2048
+ Location: 'Louisiana',
2049
+ Year: '2021',
2050
+ Type: 'State',
2051
+ Amount: 1586
2052
+ },
2053
+ {
2054
+ Location: 'Massachusetts',
2055
+ Year: '2019',
2056
+ Type: 'Federal',
2057
+ Amount: 1366
2058
+ },
2059
+ {
2060
+ Location: 'Massachusetts',
2061
+ Year: '2019',
2062
+ Type: 'Local',
2063
+ Amount: 1602
2064
+ },
2065
+ {
2066
+ Location: 'Massachusetts',
2067
+ Year: '2019',
2068
+ Type: 'State',
2069
+ Amount: 1484
2070
+ },
2071
+ {
2072
+ Location: 'Massachusetts',
2073
+ Year: '2020',
2074
+ Type: 'Federal',
2075
+ Amount: 1366
2076
+ },
2077
+ {
2078
+ Location: 'Massachusetts',
2079
+ Year: '2020',
2080
+ Type: 'Local',
2081
+ Amount: 1602
2082
+ },
2083
+ {
2084
+ Location: 'Massachusetts',
2085
+ Year: '2020',
2086
+ Type: 'State',
2087
+ Amount: 1484
2088
+ },
2089
+ {
2090
+ Location: 'Massachusetts',
2091
+ Year: '2021',
2092
+ Type: 'Federal',
2093
+ Amount: 1425
2094
+ },
2095
+ {
2096
+ Location: 'Massachusetts',
2097
+ Year: '2021',
2098
+ Type: 'Local',
2099
+ Amount: 1661
2100
+ },
2101
+ {
2102
+ Location: 'Massachusetts',
2103
+ Year: '2021',
2104
+ Type: 'State',
2105
+ Amount: 1543
2106
+ },
2107
+ {
2108
+ Location: 'Maryland',
2109
+ Year: '2019',
2110
+ Type: 'Federal',
2111
+ Amount: 1386
2112
+ },
2113
+ {
2114
+ Location: 'Maryland',
2115
+ Year: '2019',
2116
+ Type: 'Local',
2117
+ Amount: 1622
2118
+ },
2119
+ {
2120
+ Location: 'Maryland',
2121
+ Year: '2019',
2122
+ Type: 'State',
2123
+ Amount: 1504
2124
+ },
2125
+ {
2126
+ Location: 'Maryland',
2127
+ Year: '2020',
2128
+ Type: 'Federal',
2129
+ Amount: 1386
2130
+ },
2131
+ {
2132
+ Location: 'Maryland',
2133
+ Year: '2020',
2134
+ Type: 'Local',
2135
+ Amount: 1622
2136
+ },
2137
+ {
2138
+ Location: 'Maryland',
2139
+ Year: '2020',
2140
+ Type: 'State',
2141
+ Amount: 1504
2142
+ },
2143
+ {
2144
+ Location: 'Maryland',
2145
+ Year: '2021',
2146
+ Type: 'Federal',
2147
+ Amount: 1445
2148
+ },
2149
+ {
2150
+ Location: 'Maryland',
2151
+ Year: '2021',
2152
+ Type: 'Local',
2153
+ Amount: 1681
2154
+ },
2155
+ {
2156
+ Location: 'Maryland',
2157
+ Year: '2021',
2158
+ Type: 'State',
2159
+ Amount: 1563
2160
+ },
2161
+ {
2162
+ Location: 'Maine\t',
2163
+ Year: '2019',
2164
+ Type: 'Federal',
2165
+ Amount: '1385'
2166
+ },
2167
+ {
2168
+ Location: 'Maine\t',
2169
+ Year: '2019',
2170
+ Type: 'Local',
2171
+ Amount: '1621'
2172
+ },
2173
+ {
2174
+ Location: 'Maine\t',
2175
+ Year: '2019',
2176
+ Type: 'State',
2177
+ Amount: '1503'
2178
+ },
2179
+ {
2180
+ Location: 'Maine\t',
2181
+ Year: '2020',
2182
+ Type: 'Federal',
2183
+ Amount: '1385'
2184
+ },
2185
+ {
2186
+ Location: 'Maine\t',
2187
+ Year: '2020',
2188
+ Type: 'Local',
2189
+ Amount: '1621'
2190
+ },
2191
+ {
2192
+ Location: 'Maine\t',
2193
+ Year: '2020',
2194
+ Type: 'State',
2195
+ Amount: '1503'
2196
+ },
2197
+ {
2198
+ Location: 'Maine\t',
2199
+ Year: '2021',
2200
+ Type: 'Federal',
2201
+ Amount: '1444'
2202
+ },
2203
+ {
2204
+ Location: 'Maine\t',
2205
+ Year: '2021',
2206
+ Type: 'Local',
2207
+ Amount: '1680'
2208
+ },
2209
+ {
2210
+ Location: 'Maine\t',
2211
+ Year: '2021',
2212
+ Type: 'State',
2213
+ Amount: '1562'
2214
+ },
2215
+ {
2216
+ Location: 'Marshall Islands',
2217
+ Year: '2019',
2218
+ Type: 'Federal',
2219
+ Amount: 1408
2220
+ },
2221
+ {
2222
+ Location: 'Marshall Islands',
2223
+ Year: '2019',
2224
+ Type: 'Local',
2225
+ Amount: 1644
2226
+ },
2227
+ {
2228
+ Location: 'Marshall Islands',
2229
+ Year: '2019',
2230
+ Type: 'State',
2231
+ Amount: 1526
2232
+ },
2233
+ {
2234
+ Location: 'Marshall Islands',
2235
+ Year: '2020',
2236
+ Type: 'Federal',
2237
+ Amount: 1408
2238
+ },
2239
+ {
2240
+ Location: 'Marshall Islands',
2241
+ Year: '2020',
2242
+ Type: 'Local',
2243
+ Amount: 1644
2244
+ },
2245
+ {
2246
+ Location: 'Marshall Islands',
2247
+ Year: '2020',
2248
+ Type: 'State',
2249
+ Amount: 1526
2250
+ },
2251
+ {
2252
+ Location: 'Marshall Islands',
2253
+ Year: '2021',
2254
+ Type: 'Federal',
2255
+ Amount: 1467
2256
+ },
2257
+ {
2258
+ Location: 'Marshall Islands',
2259
+ Year: '2021',
2260
+ Type: 'Local',
2261
+ Amount: 1703
2262
+ },
2263
+ {
2264
+ Location: 'Marshall Islands',
2265
+ Year: '2021',
2266
+ Type: 'State',
2267
+ Amount: 1585
2268
+ },
2269
+ {
2270
+ Location: 'Michigan',
2271
+ Year: '2019',
2272
+ Type: 'Federal',
2273
+ Amount: 1390
2274
+ },
2275
+ {
2276
+ Location: 'Michigan',
2277
+ Year: '2019',
2278
+ Type: 'Local',
2279
+ Amount: 4011
2280
+ },
2281
+ {
2282
+ Location: 'Michigan',
2283
+ Year: '2019',
2284
+ Type: 'State',
2285
+ Amount: 1508
2286
+ },
2287
+ {
2288
+ Location: 'Michigan',
2289
+ Year: '2020',
2290
+ Type: 'Federal',
2291
+ Amount: 1390
2292
+ },
2293
+ {
2294
+ Location: 'Michigan',
2295
+ Year: '2020',
2296
+ Type: 'Local',
2297
+ Amount: 4111
2298
+ },
2299
+ {
2300
+ Location: 'Michigan',
2301
+ Year: '2020',
2302
+ Type: 'State',
2303
+ Amount: 1508
2304
+ },
2305
+ {
2306
+ Location: 'Michigan',
2307
+ Year: '2021',
2308
+ Type: 'Federal',
2309
+ Amount: 1449
2310
+ },
2311
+ {
2312
+ Location: 'Michigan',
2313
+ Year: '2021',
2314
+ Type: 'Local',
2315
+ Amount: 1685
2316
+ },
2317
+ {
2318
+ Location: 'Michigan',
2319
+ Year: '2021',
2320
+ Type: 'State',
2321
+ Amount: 1567
2322
+ },
2323
+ {
2324
+ Location: 'Minnesota',
2325
+ Year: '2019',
2326
+ Type: 'Federal',
2327
+ Amount: 1392
2328
+ },
2329
+ {
2330
+ Location: 'Minnesota',
2331
+ Year: '2019',
2332
+ Type: 'Local',
2333
+ Amount: 1628
2334
+ },
2335
+ {
2336
+ Location: 'Minnesota',
2337
+ Year: '2019',
2338
+ Type: 'State',
2339
+ Amount: 1510
2340
+ },
2341
+ {
2342
+ Location: 'Minnesota',
2343
+ Year: '2020',
2344
+ Type: 'Federal',
2345
+ Amount: 1392
2346
+ },
2347
+ {
2348
+ Location: 'Minnesota',
2349
+ Year: '2020',
2350
+ Type: 'Local',
2351
+ Amount: 1628
2352
+ },
2353
+ {
2354
+ Location: 'Minnesota',
2355
+ Year: '2020',
2356
+ Type: 'State',
2357
+ Amount: 1510
2358
+ },
2359
+ {
2360
+ Location: 'Minnesota',
2361
+ Year: '2021',
2362
+ Type: 'Federal',
2363
+ Amount: 1451
2364
+ },
2365
+ {
2366
+ Location: 'Minnesota',
2367
+ Year: '2021',
2368
+ Type: 'Local',
2369
+ Amount: 1687
2370
+ },
2371
+ {
2372
+ Location: 'Minnesota',
2373
+ Year: '2021',
2374
+ Type: 'State',
2375
+ Amount: 1569
2376
+ },
2377
+ {
2378
+ Location: 'Missouri',
2379
+ Year: '2019',
2380
+ Type: 'Federal',
2381
+ Amount: 1378
2382
+ },
2383
+ {
2384
+ Location: 'Missouri',
2385
+ Year: '2019',
2386
+ Type: 'Local',
2387
+ Amount: 1614
2388
+ },
2389
+ {
2390
+ Location: 'Missouri',
2391
+ Year: '2019',
2392
+ Type: 'State',
2393
+ Amount: 1496
2394
+ },
2395
+ {
2396
+ Location: 'Missouri',
2397
+ Year: '2020',
2398
+ Type: 'Federal',
2399
+ Amount: 1378
2400
+ },
2401
+ {
2402
+ Location: 'Missouri',
2403
+ Year: '2020',
2404
+ Type: 'Local',
2405
+ Amount: 1614
2406
+ },
2407
+ {
2408
+ Location: 'Missouri',
2409
+ Year: '2020',
2410
+ Type: 'State',
2411
+ Amount: 1496
2412
+ },
2413
+ {
2414
+ Location: 'Missouri',
2415
+ Year: '2021',
2416
+ Type: 'Federal',
2417
+ Amount: 1437
2418
+ },
2419
+ {
2420
+ Location: 'Missouri',
2421
+ Year: '2021',
2422
+ Type: 'Local',
2423
+ Amount: 1673
2424
+ },
2425
+ {
2426
+ Location: 'Missouri',
2427
+ Year: '2021',
2428
+ Type: 'State',
2429
+ Amount: 1555
2430
+ },
2431
+ {
2432
+ Location: 'Northern Mariana Islands',
2433
+ Year: '2019',
2434
+ Type: 'Federal',
2435
+ Amount: '1368'
2436
+ },
2437
+ {
2438
+ Location: 'Northern Mariana Islands',
2439
+ Year: '2019',
2440
+ Type: 'Local',
2441
+ Amount: '1604'
2442
+ },
2443
+ {
2444
+ Location: 'Northern Mariana Islands',
2445
+ Year: '2019',
2446
+ Type: 'State',
2447
+ Amount: '1486'
2448
+ },
2449
+ {
2450
+ Location: 'Northern Mariana Islands',
2451
+ Year: '2020',
2452
+ Type: 'Federal',
2453
+ Amount: '1368'
2454
+ },
2455
+ {
2456
+ Location: 'Northern Mariana Islands',
2457
+ Year: '2020',
2458
+ Type: 'Local',
2459
+ Amount: '1604'
2460
+ },
2461
+ {
2462
+ Location: 'Northern Mariana Islands',
2463
+ Year: '2020',
2464
+ Type: 'State',
2465
+ Amount: '1486'
2466
+ },
2467
+ {
2468
+ Location: 'Northern Mariana Islands',
2469
+ Year: '2021',
2470
+ Type: 'Federal',
2471
+ Amount: 1427
2472
+ },
2473
+ {
2474
+ Location: 'Northern Mariana Islands',
2475
+ Year: '2021',
2476
+ Type: 'Local',
2477
+ Amount: 1663
2478
+ },
2479
+ {
2480
+ Location: 'Northern Mariana Islands',
2481
+ Year: '2021',
2482
+ Type: 'State',
2483
+ Amount: 1545
2484
+ },
2485
+ {
2486
+ Location: 'Mississippi',
2487
+ Year: '2019',
2488
+ Type: 'Federal',
2489
+ Amount: 1406
2490
+ },
2491
+ {
2492
+ Location: 'Mississippi',
2493
+ Year: '2019',
2494
+ Type: 'Local',
2495
+ Amount: 1642
2496
+ },
2497
+ {
2498
+ Location: 'Mississippi',
2499
+ Year: '2019',
2500
+ Type: 'State',
2501
+ Amount: 1524
2502
+ },
2503
+ {
2504
+ Location: 'Mississippi',
2505
+ Year: '2020',
2506
+ Type: 'Federal',
2507
+ Amount: 1406
2508
+ },
2509
+ {
2510
+ Location: 'Mississippi',
2511
+ Year: '2020',
2512
+ Type: 'Local',
2513
+ Amount: 1642
2514
+ },
2515
+ {
2516
+ Location: 'Mississippi',
2517
+ Year: '2020',
2518
+ Type: 'State',
2519
+ Amount: 1524
2520
+ },
2521
+ {
2522
+ Location: 'Mississippi',
2523
+ Year: '2021',
2524
+ Type: 'Federal',
2525
+ Amount: 1465
2526
+ },
2527
+ {
2528
+ Location: 'Mississippi',
2529
+ Year: '2021',
2530
+ Type: 'Local',
2531
+ Amount: 1701
2532
+ },
2533
+ {
2534
+ Location: 'Mississippi',
2535
+ Year: '2021',
2536
+ Type: 'State',
2537
+ Amount: 1583
2538
+ },
2539
+ {
2540
+ Location: 'Montana',
2541
+ Year: '2019',
2542
+ Type: 'Federal',
2543
+ Amount: 1364
2544
+ },
2545
+ {
2546
+ Location: 'Montana',
2547
+ Year: '2019',
2548
+ Type: 'Local',
2549
+ Amount: 1600
2550
+ },
2551
+ {
2552
+ Location: 'Montana',
2553
+ Year: '2019',
2554
+ Type: 'State',
2555
+ Amount: 1482
2556
+ },
2557
+ {
2558
+ Location: 'Montana',
2559
+ Year: '2020',
2560
+ Type: 'Federal',
2561
+ Amount: 1364
2562
+ },
2563
+ {
2564
+ Location: 'Montana',
2565
+ Year: '2020',
2566
+ Type: 'Local',
2567
+ Amount: 1600
2568
+ },
2569
+ {
2570
+ Location: 'Montana',
2571
+ Year: '2020',
2572
+ Type: 'State',
2573
+ Amount: 1482
2574
+ },
2575
+ {
2576
+ Location: 'Montana',
2577
+ Year: '2021',
2578
+ Type: 'Federal',
2579
+ Amount: 1423
2580
+ },
2581
+ {
2582
+ Location: 'Montana',
2583
+ Year: '2021',
2584
+ Type: 'Local',
2585
+ Amount: 1659
2586
+ },
2587
+ {
2588
+ Location: 'Montana',
2589
+ Year: '2021',
2590
+ Type: 'State',
2591
+ Amount: 1541
2592
+ },
2593
+ {
2594
+ Location: 'North Carolina',
2595
+ Year: '2019',
2596
+ Type: 'Federal',
2597
+ Amount: 1358
2598
+ },
2599
+ {
2600
+ Location: 'North Carolina',
2601
+ Year: '2019',
2602
+ Type: 'Local',
2603
+ Amount: 1594
2604
+ },
2605
+ {
2606
+ Location: 'North Carolina',
2607
+ Year: '2019',
2608
+ Type: 'State',
2609
+ Amount: 1476
2610
+ },
2611
+ {
2612
+ Location: 'North Carolina',
2613
+ Year: '2020',
2614
+ Type: 'Federal',
2615
+ Amount: 1358
2616
+ },
2617
+ {
2618
+ Location: 'North Carolina',
2619
+ Year: '2020',
2620
+ Type: 'Local',
2621
+ Amount: 1594
2622
+ },
2623
+ {
2624
+ Location: 'North Carolina',
2625
+ Year: '2020',
2626
+ Type: 'State',
2627
+ Amount: 1476
2628
+ },
2629
+ {
2630
+ Location: 'North Carolina',
2631
+ Year: '2021',
2632
+ Type: 'Federal',
2633
+ Amount: 1417
2634
+ },
2635
+ {
2636
+ Location: 'North Carolina',
2637
+ Year: '2021',
2638
+ Type: 'Local',
2639
+ Amount: 1653
2640
+ },
2641
+ {
2642
+ Location: 'North Carolina',
2643
+ Year: '2021',
2644
+ Type: 'State',
2645
+ Amount: 1535
2646
+ },
2647
+ {
2648
+ Location: 'North Dakota',
2649
+ Year: '2019',
2650
+ Type: 'Federal',
2651
+ Amount: 1355
2652
+ },
2653
+ {
2654
+ Location: 'North Dakota',
2655
+ Year: '2019',
2656
+ Type: 'Local',
2657
+ Amount: 1591
2658
+ },
2659
+ {
2660
+ Location: 'North Dakota',
2661
+ Year: '2019',
2662
+ Type: 'State',
2663
+ Amount: 1473
2664
+ },
2665
+ {
2666
+ Location: 'North Dakota',
2667
+ Year: '2020',
2668
+ Type: 'Federal',
2669
+ Amount: 1355
2670
+ },
2671
+ {
2672
+ Location: 'North Dakota',
2673
+ Year: '2020',
2674
+ Type: 'Local',
2675
+ Amount: 1591
2676
+ },
2677
+ {
2678
+ Location: 'North Dakota',
2679
+ Year: '2020',
2680
+ Type: 'State',
2681
+ Amount: 1473
2682
+ },
2683
+ {
2684
+ Location: 'North Dakota',
2685
+ Year: '2021',
2686
+ Type: 'Federal',
2687
+ Amount: 1414
2688
+ },
2689
+ {
2690
+ Location: 'North Dakota',
2691
+ Year: '2021',
2692
+ Type: 'Local',
2693
+ Amount: 1650
2694
+ },
2695
+ {
2696
+ Location: 'North Dakota',
2697
+ Year: '2021',
2698
+ Type: 'State',
2699
+ Amount: 1532
2700
+ },
2701
+ {
2702
+ Location: 'Nebraska',
2703
+ Year: '2019',
2704
+ Type: 'Federal',
2705
+ Amount: 1391
2706
+ },
2707
+ {
2708
+ Location: 'Nebraska',
2709
+ Year: '2019',
2710
+ Type: 'Local',
2711
+ Amount: 1627
2712
+ },
2713
+ {
2714
+ Location: 'Nebraska',
2715
+ Year: '2019',
2716
+ Type: 'State',
2717
+ Amount: 1509
2718
+ },
2719
+ {
2720
+ Location: 'Nebraska',
2721
+ Year: '2020',
2722
+ Type: 'Federal',
2723
+ Amount: 1391
2724
+ },
2725
+ {
2726
+ Location: 'Nebraska',
2727
+ Year: '2020',
2728
+ Type: 'Local',
2729
+ Amount: 1627
2730
+ },
2731
+ {
2732
+ Location: 'Nebraska',
2733
+ Year: '2020',
2734
+ Type: 'State',
2735
+ Amount: 1509
2736
+ },
2737
+ {
2738
+ Location: 'Nebraska',
2739
+ Year: '2021',
2740
+ Type: 'Federal',
2741
+ Amount: 1450
2742
+ },
2743
+ {
2744
+ Location: 'Nebraska',
2745
+ Year: '2021',
2746
+ Type: 'Local',
2747
+ Amount: 1686
2748
+ },
2749
+ {
2750
+ Location: 'Nebraska',
2751
+ Year: '2021',
2752
+ Type: 'State',
2753
+ Amount: 1568
2754
+ },
2755
+ {
2756
+ Location: 'New Hampshire',
2757
+ Year: '2019',
2758
+ Type: 'Federal',
2759
+ Amount: 1405
2760
+ },
2761
+ {
2762
+ Location: 'New Hampshire',
2763
+ Year: '2019',
2764
+ Type: 'Local',
2765
+ Amount: 1641
2766
+ },
2767
+ {
2768
+ Location: 'New Hampshire',
2769
+ Year: '2019',
2770
+ Type: 'State',
2771
+ Amount: 1523
2772
+ },
2773
+ {
2774
+ Location: 'New Hampshire',
2775
+ Year: '2020',
2776
+ Type: 'Federal',
2777
+ Amount: 1405
2778
+ },
2779
+ {
2780
+ Location: 'New Hampshire',
2781
+ Year: '2020',
2782
+ Type: 'Local',
2783
+ Amount: 1641
2784
+ },
2785
+ {
2786
+ Location: 'New Hampshire',
2787
+ Year: '2020',
2788
+ Type: 'State',
2789
+ Amount: 1523
2790
+ },
2791
+ {
2792
+ Location: 'New Hampshire',
2793
+ Year: '2021',
2794
+ Type: 'Federal',
2795
+ Amount: 1464
2796
+ },
2797
+ {
2798
+ Location: 'New Hampshire',
2799
+ Year: '2021',
2800
+ Type: 'Local',
2801
+ Amount: 1700
2802
+ },
2803
+ {
2804
+ Location: 'New Hampshire',
2805
+ Year: '2021',
2806
+ Type: 'State',
2807
+ Amount: 1582
2808
+ },
2809
+ {
2810
+ Location: 'New Jersey',
2811
+ Year: '2019',
2812
+ Type: 'Federal',
2813
+ Amount: 1410
2814
+ },
2815
+ {
2816
+ Location: 'New Jersey',
2817
+ Year: '2019',
2818
+ Type: 'Local',
2819
+ Amount: 1646
2820
+ },
2821
+ {
2822
+ Location: 'New Jersey',
2823
+ Year: '2019',
2824
+ Type: 'State',
2825
+ Amount: 1528
2826
+ },
2827
+ {
2828
+ Location: 'New Jersey',
2829
+ Year: '2020',
2830
+ Type: 'Federal',
2831
+ Amount: 1410
2832
+ },
2833
+ {
2834
+ Location: 'New Jersey',
2835
+ Year: '2020',
2836
+ Type: 'Local',
2837
+ Amount: 1646
2838
+ },
2839
+ {
2840
+ Location: 'New Jersey',
2841
+ Year: '2020',
2842
+ Type: 'State',
2843
+ Amount: 1528
2844
+ },
2845
+ {
2846
+ Location: 'New Jersey',
2847
+ Year: '2021',
2848
+ Type: 'Federal',
2849
+ Amount: 1469
2850
+ },
2851
+ {
2852
+ Location: 'New Jersey',
2853
+ Year: '2021',
2854
+ Type: 'Local',
2855
+ Amount: 1705
2856
+ },
2857
+ {
2858
+ Location: 'New Jersey',
2859
+ Year: '2021',
2860
+ Type: 'State',
2861
+ Amount: 1587
2862
+ },
2863
+ {
2864
+ Location: 'New Mexico',
2865
+ Year: '2019',
2866
+ Type: 'Federal',
2867
+ Amount: 1399
2868
+ },
2869
+ {
2870
+ Location: 'New Mexico',
2871
+ Year: '2019',
2872
+ Type: 'Local',
2873
+ Amount: 1635
2874
+ },
2875
+ {
2876
+ Location: 'New Mexico',
2877
+ Year: '2019',
2878
+ Type: 'State',
2879
+ Amount: 1517
2880
+ },
2881
+ {
2882
+ Location: 'New Mexico',
2883
+ Year: '2020',
2884
+ Type: 'Federal',
2885
+ Amount: 1399
2886
+ },
2887
+ {
2888
+ Location: 'New Mexico',
2889
+ Year: '2020',
2890
+ Type: 'Local',
2891
+ Amount: 1635
2892
+ },
2893
+ {
2894
+ Location: 'New Mexico',
2895
+ Year: '2020',
2896
+ Type: 'State',
2897
+ Amount: 1517
2898
+ },
2899
+ {
2900
+ Location: 'New Mexico',
2901
+ Year: '2021',
2902
+ Type: 'Federal',
2903
+ Amount: 1458
2904
+ },
2905
+ {
2906
+ Location: 'New Mexico',
2907
+ Year: '2021',
2908
+ Type: 'Local',
2909
+ Amount: 1694
2910
+ },
2911
+ {
2912
+ Location: 'New Mexico',
2913
+ Year: '2021',
2914
+ Type: 'State',
2915
+ Amount: 1576
2916
+ },
2917
+ {
2918
+ Location: 'Nevada',
2919
+ Year: '2019',
2920
+ Type: 'Federal',
2921
+ Amount: 1357
2922
+ },
2923
+ {
2924
+ Location: 'Nevada',
2925
+ Year: '2019',
2926
+ Type: 'Local',
2927
+ Amount: 1593
2928
+ },
2929
+ {
2930
+ Location: 'Nevada',
2931
+ Year: '2019',
2932
+ Type: 'State',
2933
+ Amount: 1475
2934
+ },
2935
+ {
2936
+ Location: 'Nevada',
2937
+ Year: '2020',
2938
+ Type: 'Federal',
2939
+ Amount: 1357
2940
+ },
2941
+ {
2942
+ Location: 'Nevada',
2943
+ Year: '2020',
2944
+ Type: 'Local',
2945
+ Amount: 1593
2946
+ },
2947
+ {
2948
+ Location: 'Nevada',
2949
+ Year: '2020',
2950
+ Type: 'State',
2951
+ Amount: 1475
2952
+ },
2953
+ {
2954
+ Location: 'Nevada',
2955
+ Year: '2021',
2956
+ Type: 'Federal',
2957
+ Amount: 1416
2958
+ },
2959
+ {
2960
+ Location: 'Nevada',
2961
+ Year: '2021',
2962
+ Type: 'Local',
2963
+ Amount: 1652
2964
+ },
2965
+ {
2966
+ Location: 'Nevada',
2967
+ Year: '2021',
2968
+ Type: 'State',
2969
+ Amount: 1534
2970
+ },
2971
+ {
2972
+ Location: 'New York',
2973
+ Year: '2019',
2974
+ Type: 'Federal',
2975
+ Amount: 1360
2976
+ },
2977
+ {
2978
+ Location: 'New York',
2979
+ Year: '2019',
2980
+ Type: 'Local',
2981
+ Amount: 1596
2982
+ },
2983
+ {
2984
+ Location: 'New York',
2985
+ Year: '2019',
2986
+ Type: 'State',
2987
+ Amount: 1478
2988
+ },
2989
+ {
2990
+ Location: 'New York',
2991
+ Year: '2020',
2992
+ Type: 'Federal',
2993
+ Amount: 1360
2994
+ },
2995
+ {
2996
+ Location: 'New York',
2997
+ Year: '2020',
2998
+ Type: 'Local',
2999
+ Amount: 1596
3000
+ },
3001
+ {
3002
+ Location: 'New York',
3003
+ Year: '2020',
3004
+ Type: 'State',
3005
+ Amount: 1478
3006
+ },
3007
+ {
3008
+ Location: 'New York',
3009
+ Year: '2021',
3010
+ Type: 'Federal',
3011
+ Amount: 1419
3012
+ },
3013
+ {
3014
+ Location: 'New York',
3015
+ Year: '2021',
3016
+ Type: 'Local',
3017
+ Amount: 1655
3018
+ },
3019
+ {
3020
+ Location: 'New York',
3021
+ Year: '2021',
3022
+ Type: 'State',
3023
+ Amount: 1537
3024
+ },
3025
+ {
3026
+ Location: 'Ohio',
3027
+ Year: '2019',
3028
+ Type: 'Federal',
3029
+ Amount: 1407
3030
+ },
3031
+ {
3032
+ Location: 'Ohio',
3033
+ Year: '2019',
3034
+ Type: 'Local',
3035
+ Amount: 1643
3036
+ },
3037
+ {
3038
+ Location: 'Ohio',
3039
+ Year: '2019',
3040
+ Type: 'State',
3041
+ Amount: 1525
3042
+ },
3043
+ {
3044
+ Location: 'Ohio',
3045
+ Year: '2020',
3046
+ Type: 'Federal',
3047
+ Amount: 1407
3048
+ },
3049
+ {
3050
+ Location: 'Ohio',
3051
+ Year: '2020',
3052
+ Type: 'Local',
3053
+ Amount: 1643
3054
+ },
3055
+ {
3056
+ Location: 'Ohio',
3057
+ Year: '2020',
3058
+ Type: 'State',
3059
+ Amount: 1525
3060
+ },
3061
+ {
3062
+ Location: 'Ohio',
3063
+ Year: '2021',
3064
+ Type: 'Federal',
3065
+ Amount: 1466
3066
+ },
3067
+ {
3068
+ Location: 'Ohio',
3069
+ Year: '2021',
3070
+ Type: 'Local',
3071
+ Amount: 1702
3072
+ },
3073
+ {
3074
+ Location: 'Ohio',
3075
+ Year: '2021',
3076
+ Type: 'State',
3077
+ Amount: 1584
3078
+ },
3079
+ {
3080
+ Location: 'Oklahoma',
3081
+ Year: '2019',
3082
+ Type: 'Federal',
3083
+ Amount: 1372
3084
+ },
3085
+ {
3086
+ Location: 'Oklahoma',
3087
+ Year: '2019',
3088
+ Type: 'Local',
3089
+ Amount: 1608
3090
+ },
3091
+ {
3092
+ Location: 'Oklahoma',
3093
+ Year: '2019',
3094
+ Type: 'State',
3095
+ Amount: 1490
3096
+ },
3097
+ {
3098
+ Location: 'Oklahoma',
3099
+ Year: '2020',
3100
+ Type: 'Federal',
3101
+ Amount: 1372
3102
+ },
3103
+ {
3104
+ Location: 'Oklahoma',
3105
+ Year: '2020',
3106
+ Type: 'Local',
3107
+ Amount: 1608
3108
+ },
3109
+ {
3110
+ Location: 'Oklahoma',
3111
+ Year: '2020',
3112
+ Type: 'State',
3113
+ Amount: 1490
3114
+ },
3115
+ {
3116
+ Location: 'Oklahoma',
3117
+ Year: '2021',
3118
+ Type: 'Federal',
3119
+ Amount: 1431
3120
+ },
3121
+ {
3122
+ Location: 'Oklahoma',
3123
+ Year: '2021',
3124
+ Type: 'Local',
3125
+ Amount: 1667
3126
+ },
3127
+ {
3128
+ Location: 'Oklahoma',
3129
+ Year: '2021',
3130
+ Type: 'State',
3131
+ Amount: 1549
3132
+ },
3133
+ {
3134
+ Location: 'Oregon',
3135
+ Year: '2019',
3136
+ Type: 'Federal',
3137
+ Amount: 1379
3138
+ },
3139
+ {
3140
+ Location: 'Oregon',
3141
+ Year: '2019',
3142
+ Type: 'Local',
3143
+ Amount: 1615
3144
+ },
3145
+ {
3146
+ Location: 'Oregon',
3147
+ Year: '2019',
3148
+ Type: 'State',
3149
+ Amount: 1497
3150
+ },
3151
+ {
3152
+ Location: 'Oregon',
3153
+ Year: '2020',
3154
+ Type: 'Federal',
3155
+ Amount: 1379
3156
+ },
3157
+ {
3158
+ Location: 'Oregon',
3159
+ Year: '2020',
3160
+ Type: 'Local',
3161
+ Amount: 1615
3162
+ },
3163
+ {
3164
+ Location: 'Oregon',
3165
+ Year: '2020',
3166
+ Type: 'State',
3167
+ Amount: 1497
3168
+ },
3169
+ {
3170
+ Location: 'Oregon',
3171
+ Year: '2021',
3172
+ Type: 'Federal',
3173
+ Amount: 1438
3174
+ },
3175
+ {
3176
+ Location: 'Oregon',
3177
+ Year: '2021',
3178
+ Type: 'Local',
3179
+ Amount: 1674
3180
+ },
3181
+ {
3182
+ Location: 'Oregon',
3183
+ Year: '2021',
3184
+ Type: 'State',
3185
+ Amount: 1556
3186
+ },
3187
+ {
3188
+ Location: 'Pennsylvania',
3189
+ Year: '2019',
3190
+ Type: 'Federal',
3191
+ Amount: 1354
3192
+ },
3193
+ {
3194
+ Location: 'Pennsylvania',
3195
+ Year: '2019',
3196
+ Type: 'Local',
3197
+ Amount: 1590
3198
+ },
3199
+ {
3200
+ Location: 'Pennsylvania',
3201
+ Year: '2019',
3202
+ Type: 'State',
3203
+ Amount: 1472
3204
+ },
3205
+ {
3206
+ Location: 'Pennsylvania',
3207
+ Year: '2020',
3208
+ Type: 'Federal',
3209
+ Amount: 1354
3210
+ },
3211
+ {
3212
+ Location: 'Pennsylvania',
3213
+ Year: '2020',
3214
+ Type: 'Local',
3215
+ Amount: 1590
3216
+ },
3217
+ {
3218
+ Location: 'Pennsylvania',
3219
+ Year: '2020',
3220
+ Type: 'State',
3221
+ Amount: 1472
3222
+ },
3223
+ {
3224
+ Location: 'Pennsylvania',
3225
+ Year: '2021',
3226
+ Type: 'Federal',
3227
+ Amount: 1413
3228
+ },
3229
+ {
3230
+ Location: 'Pennsylvania',
3231
+ Year: '2021',
3232
+ Type: 'Local',
3233
+ Amount: 1649
3234
+ },
3235
+ {
3236
+ Location: 'Pennsylvania',
3237
+ Year: '2021',
3238
+ Type: 'State',
3239
+ Amount: 1531
3240
+ },
3241
+ {
3242
+ Location: 'Puerto Rico',
3243
+ Year: '2019',
3244
+ Type: 'Federal',
3245
+ Amount: 1363
3246
+ },
3247
+ {
3248
+ Location: 'Puerto Rico',
3249
+ Year: '2019',
3250
+ Type: 'Local',
3251
+ Amount: 1599
3252
+ },
3253
+ {
3254
+ Location: 'Puerto Rico',
3255
+ Year: '2019',
3256
+ Type: 'State',
3257
+ Amount: 1481
3258
+ },
3259
+ {
3260
+ Location: 'Puerto Rico',
3261
+ Year: '2020',
3262
+ Type: 'Federal',
3263
+ Amount: 1363
3264
+ },
3265
+ {
3266
+ Location: 'Puerto Rico',
3267
+ Year: '2020',
3268
+ Type: 'Local',
3269
+ Amount: 1599
3270
+ },
3271
+ {
3272
+ Location: 'Puerto Rico',
3273
+ Year: '2020',
3274
+ Type: 'State',
3275
+ Amount: 1481
3276
+ },
3277
+ {
3278
+ Location: 'Puerto Rico',
3279
+ Year: '2021',
3280
+ Type: 'Federal',
3281
+ Amount: 1422
3282
+ },
3283
+ {
3284
+ Location: 'Puerto Rico',
3285
+ Year: '2021',
3286
+ Type: 'Local',
3287
+ Amount: 1658
3288
+ },
3289
+ {
3290
+ Location: 'Puerto Rico',
3291
+ Year: '2021',
3292
+ Type: 'State',
3293
+ Amount: 1540
3294
+ },
3295
+ {
3296
+ Location: 'Rhode Island',
3297
+ Year: '2019',
3298
+ Type: 'Federal',
3299
+ Amount: 1411
3300
+ },
3301
+ {
3302
+ Location: 'Rhode Island',
3303
+ Year: '2019',
3304
+ Type: 'Local',
3305
+ Amount: 1647
3306
+ },
3307
+ {
3308
+ Location: 'Rhode Island',
3309
+ Year: '2019',
3310
+ Type: 'State',
3311
+ Amount: 1529
3312
+ },
3313
+ {
3314
+ Location: 'Rhode Island',
3315
+ Year: '2020',
3316
+ Type: 'Federal',
3317
+ Amount: 1411
3318
+ },
3319
+ {
3320
+ Location: 'Rhode Island',
3321
+ Year: '2020',
3322
+ Type: 'Local',
3323
+ Amount: 1647
3324
+ },
3325
+ {
3326
+ Location: 'Rhode Island',
3327
+ Year: '2020',
3328
+ Type: 'State',
3329
+ Amount: 1529
3330
+ },
3331
+ {
3332
+ Location: 'Rhode Island',
3333
+ Year: '2021',
3334
+ Type: 'Federal',
3335
+ Amount: 1470
3336
+ },
3337
+ {
3338
+ Location: 'Rhode Island',
3339
+ Year: '2021',
3340
+ Type: 'Local',
3341
+ Amount: 1706
3342
+ },
3343
+ {
3344
+ Location: 'Rhode Island',
3345
+ Year: '2021',
3346
+ Type: 'State',
3347
+ Amount: 1588
3348
+ },
3349
+ {
3350
+ Location: 'Republic of Palau',
3351
+ Year: '2019',
3352
+ Type: 'Federal',
3353
+ Amount: '1412'
3354
+ },
3355
+ {
3356
+ Location: 'Republic of Palau',
3357
+ Year: '2019',
3358
+ Type: 'Local',
3359
+ Amount: '1648'
3360
+ },
3361
+ {
3362
+ Location: 'Republic of Palau',
3363
+ Year: '2019',
3364
+ Type: 'State',
3365
+ Amount: '1530'
3366
+ },
3367
+ {
3368
+ Location: 'Republic of Palau',
3369
+ Year: '2020',
3370
+ Type: 'Federal',
3371
+ Amount: '1412'
3372
+ },
3373
+ {
3374
+ Location: 'Republic of Palau',
3375
+ Year: '2020',
3376
+ Type: 'Local',
3377
+ Amount: '1648'
3378
+ },
3379
+ {
3380
+ Location: 'Republic of Palau',
3381
+ Year: '2020',
3382
+ Type: 'State',
3383
+ Amount: '1530'
3384
+ },
3385
+ {
3386
+ Location: 'Republic of Palau',
3387
+ Year: '2021',
3388
+ Type: 'Federal',
3389
+ Amount: '1471'
3390
+ },
3391
+ {
3392
+ Location: 'Republic of Palau',
3393
+ Year: '2021',
3394
+ Type: 'Local',
3395
+ Amount: '1707'
3396
+ },
3397
+ {
3398
+ Location: 'Republic of Palau',
3399
+ Year: '2021',
3400
+ Type: 'State',
3401
+ Amount: '1589'
3402
+ },
3403
+ {
3404
+ Location: 'South Carolina',
3405
+ Year: '2019',
3406
+ Type: 'Federal',
3407
+ Amount: 1389
3408
+ },
3409
+ {
3410
+ Location: 'South Carolina',
3411
+ Year: '2019',
3412
+ Type: 'Local',
3413
+ Amount: 1625
3414
+ },
3415
+ {
3416
+ Location: 'South Carolina',
3417
+ Year: '2019',
3418
+ Type: 'State',
3419
+ Amount: 1507
3420
+ },
3421
+ {
3422
+ Location: 'South Carolina',
3423
+ Year: '2020',
3424
+ Type: 'Federal',
3425
+ Amount: 1389
3426
+ },
3427
+ {
3428
+ Location: 'South Carolina',
3429
+ Year: '2020',
3430
+ Type: 'Local',
3431
+ Amount: 1625
3432
+ },
3433
+ {
3434
+ Location: 'South Carolina',
3435
+ Year: '2020',
3436
+ Type: 'State',
3437
+ Amount: 1507
3438
+ },
3439
+ {
3440
+ Location: 'South Carolina',
3441
+ Year: '2021',
3442
+ Type: 'Federal',
3443
+ Amount: 1448
3444
+ },
3445
+ {
3446
+ Location: 'South Carolina',
3447
+ Year: '2021',
3448
+ Type: 'Local',
3449
+ Amount: 1684
3450
+ },
3451
+ {
3452
+ Location: 'South Carolina',
3453
+ Year: '2021',
3454
+ Type: 'State',
3455
+ Amount: 1566
3456
+ },
3457
+ {
3458
+ Location: 'South Dakota',
3459
+ Year: '2019',
3460
+ Type: 'Federal',
3461
+ Amount: 1373
3462
+ },
3463
+ {
3464
+ Location: 'South Dakota',
3465
+ Year: '2019',
3466
+ Type: 'Local',
3467
+ Amount: 1609
3468
+ },
3469
+ {
3470
+ Location: 'South Dakota',
3471
+ Year: '2019',
3472
+ Type: 'State',
3473
+ Amount: 1491
3474
+ },
3475
+ {
3476
+ Location: 'South Dakota',
3477
+ Year: '2020',
3478
+ Type: 'Federal',
3479
+ Amount: 1373
3480
+ },
3481
+ {
3482
+ Location: 'South Dakota',
3483
+ Year: '2020',
3484
+ Type: 'Local',
3485
+ Amount: 1609
3486
+ },
3487
+ {
3488
+ Location: 'South Dakota',
3489
+ Year: '2020',
3490
+ Type: 'State',
3491
+ Amount: 1491
3492
+ },
3493
+ {
3494
+ Location: 'South Dakota',
3495
+ Year: '2021',
3496
+ Type: 'Federal',
3497
+ Amount: 1432
3498
+ },
3499
+ {
3500
+ Location: 'South Dakota',
3501
+ Year: '2021',
3502
+ Type: 'Local',
3503
+ Amount: 1668
3504
+ },
3505
+ {
3506
+ Location: 'South Dakota',
3507
+ Year: '2021',
3508
+ Type: 'State',
3509
+ Amount: 1550
3510
+ },
3511
+ {
3512
+ Location: 'Tennessee',
3513
+ Year: '2019',
3514
+ Type: 'Federal',
3515
+ Amount: 1376
3516
+ },
3517
+ {
3518
+ Location: 'Tennessee',
3519
+ Year: '2019',
3520
+ Type: 'Local',
3521
+ Amount: 1612
3522
+ },
3523
+ {
3524
+ Location: 'Tennessee',
3525
+ Year: '2019',
3526
+ Type: 'State',
3527
+ Amount: 1494
3528
+ },
3529
+ {
3530
+ Location: 'Tennessee',
3531
+ Year: '2020',
3532
+ Type: 'Federal',
3533
+ Amount: 1376
3534
+ },
3535
+ {
3536
+ Location: 'Tennessee',
3537
+ Year: '2020',
3538
+ Type: 'Local',
3539
+ Amount: 1612
3540
+ },
3541
+ {
3542
+ Location: 'Tennessee',
3543
+ Year: '2020',
3544
+ Type: 'State',
3545
+ Amount: 1494
3546
+ },
3547
+ {
3548
+ Location: 'Tennessee',
3549
+ Year: '2021',
3550
+ Type: 'Federal',
3551
+ Amount: 1435
3552
+ },
3553
+ {
3554
+ Location: 'Tennessee',
3555
+ Year: '2021',
3556
+ Type: 'Local',
3557
+ Amount: 1671
3558
+ },
3559
+ {
3560
+ Location: 'Tennessee',
3561
+ Year: '2021',
3562
+ Type: 'State',
3563
+ Amount: 1553
3564
+ },
3565
+ {
3566
+ Location: 'Texas',
3567
+ Year: '2019',
3568
+ Type: 'Federal',
3569
+ Amount: 1361
3570
+ },
3571
+ {
3572
+ Location: 'Texas',
3573
+ Year: '2019',
3574
+ Type: 'Local',
3575
+ Amount: 1597
3576
+ },
3577
+ {
3578
+ Location: 'Texas',
3579
+ Year: '2019',
3580
+ Type: 'State',
3581
+ Amount: 1479
3582
+ },
3583
+ {
3584
+ Location: 'Texas',
3585
+ Year: '2020',
3586
+ Type: 'Federal',
3587
+ Amount: 1361
3588
+ },
3589
+ {
3590
+ Location: 'Texas',
3591
+ Year: '2020',
3592
+ Type: 'Local',
3593
+ Amount: 1597
3594
+ },
3595
+ {
3596
+ Location: 'Texas',
3597
+ Year: '2020',
3598
+ Type: 'State',
3599
+ Amount: 1479
3600
+ },
3601
+ {
3602
+ Location: 'Texas',
3603
+ Year: '2021',
3604
+ Type: 'Federal',
3605
+ Amount: 1420
3606
+ },
3607
+ {
3608
+ Location: 'Texas',
3609
+ Year: '2021',
3610
+ Type: 'Local',
3611
+ Amount: 1656
3612
+ },
3613
+ {
3614
+ Location: 'Texas',
3615
+ Year: '2021',
3616
+ Type: 'State',
3617
+ Amount: 1538
3618
+ },
3619
+ {
3620
+ Location: 'Utah',
3621
+ Year: '2019',
3622
+ Type: 'Federal',
3623
+ Amount: 1380
3624
+ },
3625
+ {
3626
+ Location: 'Utah',
3627
+ Year: '2019',
3628
+ Type: 'Local',
3629
+ Amount: 1616
3630
+ },
3631
+ {
3632
+ Location: 'Utah',
3633
+ Year: '2019',
3634
+ Type: 'State',
3635
+ Amount: 1498
3636
+ },
3637
+ {
3638
+ Location: 'Utah',
3639
+ Year: '2020',
3640
+ Type: 'Federal',
3641
+ Amount: 1380
3642
+ },
3643
+ {
3644
+ Location: 'Utah',
3645
+ Year: '2020',
3646
+ Type: 'Local',
3647
+ Amount: 1616
3648
+ },
3649
+ {
3650
+ Location: 'Utah',
3651
+ Year: '2020',
3652
+ Type: 'State',
3653
+ Amount: 1498
3654
+ },
3655
+ {
3656
+ Location: 'Utah',
3657
+ Year: '2021',
3658
+ Type: 'Federal',
3659
+ Amount: 1439
3660
+ },
3661
+ {
3662
+ Location: 'Utah',
3663
+ Year: '2021',
3664
+ Type: 'Local',
3665
+ Amount: 1675
3666
+ },
3667
+ {
3668
+ Location: 'Utah',
3669
+ Year: '2021',
3670
+ Type: 'State',
3671
+ Amount: 1557
3672
+ },
3673
+ {
3674
+ Location: 'Virginia',
3675
+ Year: '2019',
3676
+ Type: 'Federal',
3677
+ Amount: 1382
3678
+ },
3679
+ {
3680
+ Location: 'Virginia',
3681
+ Year: '2019',
3682
+ Type: 'Local',
3683
+ Amount: 1618
3684
+ },
3685
+ {
3686
+ Location: 'Virginia',
3687
+ Year: '2019',
3688
+ Type: 'State',
3689
+ Amount: 1500
3690
+ },
3691
+ {
3692
+ Location: 'Virginia',
3693
+ Year: '2020',
3694
+ Type: 'Federal',
3695
+ Amount: 1382
3696
+ },
3697
+ {
3698
+ Location: 'Virginia',
3699
+ Year: '2020',
3700
+ Type: 'Local',
3701
+ Amount: 1618
3702
+ },
3703
+ {
3704
+ Location: 'Virginia',
3705
+ Year: '2020',
3706
+ Type: 'State',
3707
+ Amount: 1500
3708
+ },
3709
+ {
3710
+ Location: 'Virginia',
3711
+ Year: '2021',
3712
+ Type: 'Federal',
3713
+ Amount: 1441
3714
+ },
3715
+ {
3716
+ Location: 'Virginia',
3717
+ Year: '2021',
3718
+ Type: 'Local',
3719
+ Amount: 1677
3720
+ },
3721
+ {
3722
+ Location: 'Virginia',
3723
+ Year: '2021',
3724
+ Type: 'State',
3725
+ Amount: 1559
3726
+ },
3727
+ {
3728
+ Location: 'U.S. Virgin Islands',
3729
+ Year: '2019',
3730
+ Type: 'Federal',
3731
+ Amount: '1383'
3732
+ },
3733
+ {
3734
+ Location: 'U.S. Virgin Islands',
3735
+ Year: '2019',
3736
+ Type: 'Local',
3737
+ Amount: '1619'
3738
+ },
3739
+ {
3740
+ Location: 'U.S. Virgin Islands',
3741
+ Year: '2019',
3742
+ Type: 'State',
3743
+ Amount: '1501'
3744
+ },
3745
+ {
3746
+ Location: 'U.S. Virgin Islands',
3747
+ Year: '2020',
3748
+ Type: 'Federal',
3749
+ Amount: '1383'
3750
+ },
3751
+ {
3752
+ Location: 'U.S. Virgin Islands',
3753
+ Year: '2020',
3754
+ Type: 'Local',
3755
+ Amount: '1619'
3756
+ },
3757
+ {
3758
+ Location: 'U.S. Virgin Islands',
3759
+ Year: '2020',
3760
+ Type: 'State',
3761
+ Amount: '1501'
3762
+ },
3763
+ {
3764
+ Location: 'U.S. Virgin Islands',
3765
+ Year: '2021',
3766
+ Type: 'Federal',
3767
+ Amount: 1442
3768
+ },
3769
+ {
3770
+ Location: 'U.S. Virgin Islands',
3771
+ Year: '2021',
3772
+ Type: 'Local',
3773
+ Amount: 1678
3774
+ },
3775
+ {
3776
+ Location: 'U.S. Virgin Islands',
3777
+ Year: '2021',
3778
+ Type: 'State',
3779
+ Amount: 1560
3780
+ },
3781
+ {
3782
+ Location: 'Vermont',
3783
+ Year: '2019',
3784
+ Type: 'Federal',
3785
+ Amount: 1370
3786
+ },
3787
+ {
3788
+ Location: 'Vermont',
3789
+ Year: '2019',
3790
+ Type: 'Local',
3791
+ Amount: 1606
3792
+ },
3793
+ {
3794
+ Location: 'Vermont',
3795
+ Year: '2019',
3796
+ Type: 'State',
3797
+ Amount: 1488
3798
+ },
3799
+ {
3800
+ Location: 'Vermont',
3801
+ Year: '2020',
3802
+ Type: 'Federal',
3803
+ Amount: 1370
3804
+ },
3805
+ {
3806
+ Location: 'Vermont',
3807
+ Year: '2020',
3808
+ Type: 'Local',
3809
+ Amount: 1606
3810
+ },
3811
+ {
3812
+ Location: 'Vermont',
3813
+ Year: '2020',
3814
+ Type: 'State',
3815
+ Amount: 1488
3816
+ },
3817
+ {
3818
+ Location: 'Vermont',
3819
+ Year: '2021',
3820
+ Type: 'Federal',
3821
+ Amount: 1429
3822
+ },
3823
+ {
3824
+ Location: 'Vermont',
3825
+ Year: '2021',
3826
+ Type: 'Local',
3827
+ Amount: 1665
3828
+ },
3829
+ {
3830
+ Location: 'Vermont',
3831
+ Year: '2021',
3832
+ Type: 'State',
3833
+ Amount: 1547
3834
+ },
3835
+ {
3836
+ Location: 'Washington',
3837
+ Year: '2019',
3838
+ Type: 'Federal',
3839
+ Amount: 1393
3840
+ },
3841
+ {
3842
+ Location: 'Washington',
3843
+ Year: '2019',
3844
+ Type: 'Local',
3845
+ Amount: 1629
3846
+ },
3847
+ {
3848
+ Location: 'Washington',
3849
+ Year: '2019',
3850
+ Type: 'State',
3851
+ Amount: 1511
3852
+ },
3853
+ {
3854
+ Location: 'Washington',
3855
+ Year: '2020',
3856
+ Type: 'Federal',
3857
+ Amount: 1393
3858
+ },
3859
+ {
3860
+ Location: 'Washington',
3861
+ Year: '2020',
3862
+ Type: 'Local',
3863
+ Amount: 1629
3864
+ },
3865
+ {
3866
+ Location: 'Washington',
3867
+ Year: '2020',
3868
+ Type: 'State',
3869
+ Amount: 1511
3870
+ },
3871
+ {
3872
+ Location: 'Washington',
3873
+ Year: '2021',
3874
+ Type: 'Federal',
3875
+ Amount: 1452
3876
+ },
3877
+ {
3878
+ Location: 'Washington',
3879
+ Year: '2021',
3880
+ Type: 'Local',
3881
+ Amount: 1688
3882
+ },
3883
+ {
3884
+ Location: 'Washington',
3885
+ Year: '2021',
3886
+ Type: 'State',
3887
+ Amount: 1570
3888
+ },
3889
+ {
3890
+ Location: 'Wisconsin',
3891
+ Year: '2019',
3892
+ Type: 'Federal',
3893
+ Amount: 1371
3894
+ },
3895
+ {
3896
+ Location: 'Wisconsin',
3897
+ Year: '2019',
3898
+ Type: 'Local',
3899
+ Amount: 1607
3900
+ },
3901
+ {
3902
+ Location: 'Wisconsin',
3903
+ Year: '2019',
3904
+ Type: 'State',
3905
+ Amount: 1489
3906
+ },
3907
+ {
3908
+ Location: 'Wisconsin',
3909
+ Year: '2020',
3910
+ Type: 'Federal',
3911
+ Amount: 1371
3912
+ },
3913
+ {
3914
+ Location: 'Wisconsin',
3915
+ Year: '2020',
3916
+ Type: 'Local',
3917
+ Amount: 1607
3918
+ },
3919
+ {
3920
+ Location: 'Wisconsin',
3921
+ Year: '2020',
3922
+ Type: 'State',
3923
+ Amount: 1489
3924
+ },
3925
+ {
3926
+ Location: 'Wisconsin',
3927
+ Year: '2021',
3928
+ Type: 'Federal',
3929
+ Amount: 1430
3930
+ },
3931
+ {
3932
+ Location: 'Wisconsin',
3933
+ Year: '2021',
3934
+ Type: 'Local',
3935
+ Amount: 1666
3936
+ },
3937
+ {
3938
+ Location: 'Wisconsin',
3939
+ Year: '2021',
3940
+ Type: 'State',
3941
+ Amount: 1548
3942
+ },
3943
+ {
3944
+ Location: 'West Virginia',
3945
+ Year: '2019',
3946
+ Type: 'Federal',
3947
+ Amount: 1397
3948
+ },
3949
+ {
3950
+ Location: 'West Virginia',
3951
+ Year: '2019',
3952
+ Type: 'Local',
3953
+ Amount: 1633
3954
+ },
3955
+ {
3956
+ Location: 'West Virginia',
3957
+ Year: '2019',
3958
+ Type: 'State',
3959
+ Amount: 1515
3960
+ },
3961
+ {
3962
+ Location: 'West Virginia',
3963
+ Year: '2020',
3964
+ Type: 'Federal',
3965
+ Amount: 1397
3966
+ },
3967
+ {
3968
+ Location: 'West Virginia',
3969
+ Year: '2020',
3970
+ Type: 'Local',
3971
+ Amount: 1633
3972
+ },
3973
+ {
3974
+ Location: 'West Virginia',
3975
+ Year: '2020',
3976
+ Type: 'State',
3977
+ Amount: 1515
3978
+ },
3979
+ {
3980
+ Location: 'West Virginia',
3981
+ Year: '2021',
3982
+ Type: 'Federal',
3983
+ Amount: 1456
3984
+ },
3985
+ {
3986
+ Location: 'West Virginia',
3987
+ Year: '2021',
3988
+ Type: 'Local',
3989
+ Amount: 1692
3990
+ },
3991
+ {
3992
+ Location: 'West Virginia',
3993
+ Year: '2021',
3994
+ Type: 'State',
3995
+ Amount: 1574
3996
+ },
3997
+ {
3998
+ Location: 'Wyoming',
3999
+ Year: '2019',
4000
+ Type: 'Federal',
4001
+ Amount: 1395
4002
+ },
4003
+ {
4004
+ Location: 'Wyoming',
4005
+ Year: '2019',
4006
+ Type: 'Local',
4007
+ Amount: 1631
4008
+ },
4009
+ {
4010
+ Location: 'Wyoming',
4011
+ Year: '2019',
4012
+ Type: 'State',
4013
+ Amount: 1513
4014
+ },
4015
+ {
4016
+ Location: 'Wyoming',
4017
+ Year: '2020',
4018
+ Type: 'Federal',
4019
+ Amount: 1395
4020
+ },
4021
+ {
4022
+ Location: 'Wyoming',
4023
+ Year: '2020',
4024
+ Type: 'Local',
4025
+ Amount: 1631
4026
+ },
4027
+ {
4028
+ Location: 'Wyoming',
4029
+ Year: '2020',
4030
+ Type: 'State',
4031
+ Amount: 1513
4032
+ },
4033
+ {
4034
+ Location: 'Wyoming',
4035
+ Year: '2021',
4036
+ Type: 'Federal',
4037
+ Amount: 1454
4038
+ },
4039
+ {
4040
+ Location: 'Wyoming',
4041
+ Year: '2021',
4042
+ Type: 'Local',
4043
+ Amount: 1690
4044
+ },
4045
+ {
4046
+ Location: 'Wyoming',
4047
+ Year: '2021',
4048
+ Type: 'State',
4049
+ Amount: 1572
4050
+ }
4051
+ ],
4052
+ dataFileSize: 14901,
4053
+ dataFileName: 'dashboard_aggregate_example_state_type (1).csv',
4054
+ dataFileSourceType: 'file',
4055
+ dataFileFormat: 'CSV',
4056
+ preview: true
4057
+ }
4058
+ }
4059
+ }
4060
+ const equalHeightDataBiteKey = 'equal-height-data-bite-story'
4061
+ const equalHeightDataBiteTemplate = Object.values(ExampleConfig_1.visualizations).find(v => v?.type === 'data-bite')
4062
+
4063
+ if (equalHeightDataBiteTemplate) {
4064
+ EqualHeightMixedVizConfig.visualizations[equalHeightDataBiteKey] = {
4065
+ ...cloneDeep(equalHeightDataBiteTemplate),
4066
+ uid: equalHeightDataBiteKey,
4067
+ theme: 'theme-blue',
4068
+ bitePosition: 'Top',
4069
+ biteStyle: 'title',
4070
+ biteBody:
4071
+ '<span style="font-size: 20px;">Long-form data bite content for equal-height validation.</span><br>This intentionally verbose text creates a taller card so the row can demonstrate that chart, map, and data bite containers normalize to the same height when equal height is enabled.',
4072
+ visualizationType: 'data-bite',
4073
+ type: 'data-bite'
126
4074
  }
127
4075
  }
128
4076
 
129
- export const Dashboard_Filters: Story = {
130
- args: {
131
- config: Dashboard_Filter,
132
- isEditor: false
4077
+ EqualHeightMixedVizConfig.rows = [
4078
+ {
4079
+ equalHeight: true,
4080
+ columns: [
4081
+ { width: 4, widget: 'chart1699383531543' },
4082
+ { width: 4, widget: 'map1699383540561' },
4083
+ { width: 4, widget: equalHeightDataBiteKey }
4084
+ ]
133
4085
  }
134
- }
4086
+ ]
135
4087
 
136
- export const API_Filter_Error: Story = {
4088
+ export const Equal_Height_Mixed_Viz_Row: Story = {
137
4089
  args: {
138
- config: APIFilterErrorConfig,
4090
+ config: EqualHeightMixedVizConfig,
139
4091
  isEditor: false
4092
+ },
4093
+ parameters: {
4094
+ docs: {
4095
+ description: {
4096
+ story:
4097
+ 'Demonstrates equal-height row normalization across different visualization types (chart, map, and data-bite) with intentionally uneven content lengths.'
4098
+ }
4099
+ }
140
4100
  }
141
4101
  }
142
4102
 
143
- export const StandAloneTable: Story = {
144
- args: {
145
- config: StandaloneTable,
146
- isEditor: false
147
- }
148
- }
4103
+ const mixedHeightMarkupIncludeKey = 'mixed-height-markup-include-story'
4104
+ const Mixed_Height_Content_Row_Config = cloneDeep(TP5TestConfig)
149
4105
 
150
- export const ToggleExample: Story = {
151
- args: {
152
- config: ToggleExampleConfig,
153
- isEditor: false
154
- }
4106
+ Mixed_Height_Content_Row_Config.dashboard = {
4107
+ theme: 'theme-blue',
4108
+ sharedFilters: []
155
4109
  }
156
4110
 
157
- export const PivotFilter: Story = {
158
- args: {
159
- config: PivotFitlerConfig,
160
- isEditor: false
161
- }
4111
+ Mixed_Height_Content_Row_Config.visualizations.bite1 = {
4112
+ ...Mixed_Height_Content_Row_Config.visualizations.bite1,
4113
+ title: 'Short data bite',
4114
+ biteBody: 'Adults met the sample prevention target.',
4115
+ subtext: 'Brief note.'
162
4116
  }
163
4117
 
164
- export const GroupPivotFilter: Story = {
165
- args: {
166
- config: GroupPivotConfig,
167
- isEditor: false
168
- }
4118
+ Mixed_Height_Content_Row_Config.visualizations.waffle2 = {
4119
+ ...Mixed_Height_Content_Row_Config.visualizations.waffle2,
4120
+ title: 'Medium waffle chart',
4121
+ content: 'completed the sample prevention checklist across the reporting period',
4122
+ subtext: 'Adds a second line of explanatory context without matching the markup include height.'
169
4123
  }
170
4124
 
171
- export const SingleStateDashboardWithFilters: Story = {
172
- args: {
173
- config: SingleStateDashboardFilters,
174
- isEditor: false
4125
+ Mixed_Height_Content_Row_Config.visualizations[mixedHeightMarkupIncludeKey] = {
4126
+ uid: mixedHeightMarkupIncludeKey,
4127
+ type: 'markup-include',
4128
+ visualizationType: 'markup-include',
4129
+ filters: [],
4130
+ filterBehavior: 'Filter Change',
4131
+ openModal: false,
4132
+ showEditorPanel: false,
4133
+ theme: 'theme-orange',
4134
+ contentEditor: {
4135
+ title: 'Long markup include',
4136
+ titleStyle: 'small',
4137
+ showHeader: true,
4138
+ srcUrl: '#example',
4139
+ useInlineHTML: true,
4140
+ allowHideSection: false,
4141
+ showNoDataMessage: false,
4142
+ inlineHTML: `
4143
+ <p>This markup include is intentionally longer than the neighboring data bite and waffle chart.</p>
4144
+ <p>Use it to validate mixed dashboard rows where cards should keep their natural heights instead of being normalized.</p>
4145
+ <ul>
4146
+ <li>Short card: data bite</li>
4147
+ <li>Medium card: waffle chart</li>
4148
+ <li>Long card: markup include</li>
4149
+ </ul>
4150
+ `
4151
+ },
4152
+ visual: {
4153
+ border: true,
4154
+ accent: true,
4155
+ background: true,
4156
+ hideBackgroundColor: false,
4157
+ borderColorTheme: true
175
4158
  }
176
4159
  }
177
4160
 
178
- faker.seed(123)
179
-
180
- const countries = _.times(5, faker.location.country)
181
- const categories = _.times(3, val => `category-${val + 1}`)
182
-
183
- const data = []
184
- countries.forEach((country, i) => {
185
- categories.forEach((category, j) => {
186
- if ((i + j) % 3 === 0) return
187
- data.push({
188
- Country: country,
189
- 'Sample Categories': category,
190
- Data: faker.number.int({ min: 5, max: 50 })
191
- })
192
- })
193
- })
194
-
195
- const footnoteData = countries.map((country, i) => {
196
- return { Country: country, symbol: footnotesSymbols[i][0], text: faker.lorem.sentence() }
197
- })
198
-
199
- const multiVizData = {
200
- 'valid-world-data.json': { data },
201
- 'footnote-data.json': { data: footnoteData }
202
- }
203
-
204
- export const MultiDashboard: Story = {
205
- args: {
206
- config: MultiDashboardConfig,
207
- isEditor: false
4161
+ Mixed_Height_Content_Row_Config.rows = [
4162
+ {
4163
+ equalHeight: false,
4164
+ columns: [
4165
+ { width: 4, widget: 'bite1' },
4166
+ { width: 4, widget: 'waffle2' },
4167
+ { width: 4, widget: mixedHeightMarkupIncludeKey }
4168
+ ]
208
4169
  }
209
- }
4170
+ ]
210
4171
 
211
- const FNrows: ConfigRow[] = [{ ...MultiVizConfig.rows[0], footnotesId: 'footnote123' }]
212
- const footnoteConfig: Partial<FootnotesConfig> = {
213
- dataKey: 'footnote-data.json',
214
- dynamicFootnotes: { symbolColumn: 'symbol', textColumn: 'text' },
215
- staticFootnotes: [{ symbol: '**', text: 'This is a static Footnote' }]
216
- }
217
- const FNViz = { ...MultiVizConfig.visualizations, footnote123: footnoteConfig }
218
- export const Footnotes: Story = {
4172
+ export const Mixed_Viz_Different_Heights_Row: Story = {
219
4173
  args: {
220
- config: { ...MultiVizConfig, datasets: multiVizData, rows: FNrows, visualizations: FNViz },
4174
+ config: Mixed_Height_Content_Row_Config,
221
4175
  isEditor: false
4176
+ },
4177
+ parameters: {
4178
+ docs: {
4179
+ description: {
4180
+ story:
4181
+ 'Demonstrates a dashboard row with intentionally uneven data-bite, waffle-chart, and markup-include content heights.'
4182
+ }
4183
+ }
4184
+ },
4185
+ play: async ({ canvasElement }) => {
4186
+ await assertVisualizationRendered(canvasElement)
4187
+ await waitForPresence('.cove-visualization.type-markup-include', canvasElement)
4188
+ await waitForPresence('.cove-visualization.type-waffle-chart', canvasElement)
4189
+ await waitForPresence('.cove-visualization.type-data-bite', canvasElement)
222
4190
  }
223
4191
  }
224
4192
 
@@ -257,7 +4225,7 @@ const fetchMock = {
257
4225
  },
258
4226
  response: {
259
4227
  status: 200,
260
- body: _.times(5, i => ({ [filter]: `Some ${filter} ${i}` }))
4228
+ body: times(5, i => ({ [filter]: `Some ${filter} ${i}` }))
261
4229
  }
262
4230
  }
263
4231
  }),
@@ -837,8 +4805,7 @@ export const Nested_Dropdown_With_Parent_Child: Story = {
837
4805
 
838
4806
  // Verify defaultValue is applied on initial load (North region, 2023 Q2)
839
4807
  expect(initialState.regionSelected).toBe('North')
840
- expect(initialState.yearQuarterSelected).toContain('2023')
841
- expect(initialState.yearQuarterSelected).toContain('Q2')
4808
+ expect(initialState.yearQuarterSelected).toBe('2023 - Q2')
842
4809
  expect(initialState.chartRendered).toBe(true)
843
4810
 
844
4811
  // Test 1: Change region to South → year options should update based on available data
@@ -895,4 +4862,477 @@ export const Nested_Dropdown_With_Parent_Child: Story = {
895
4862
  }
896
4863
  }
897
4864
 
4865
+ export const Nested_Dropdown_With_Parent_Child_Subgroup_Only: Story = {
4866
+ args: {
4867
+ config: NestedParentChildFiltersSubgroupOnly as unknown as Config,
4868
+ isEditor: false
4869
+ },
4870
+ parameters: {
4871
+ docs: {
4872
+ description: {
4873
+ story:
4874
+ 'Displays only the selected subgroup in the closed nested dropdown input while preserving the same filter behavior.'
4875
+ }
4876
+ }
4877
+ },
4878
+ play: async ({ canvasElement }) => {
4879
+ const canvas = within(canvasElement)
4880
+ const regionFilter = (await canvas.findByLabelText('Region', { selector: 'select' })) as HTMLSelectElement
4881
+ const yearQuarterInput = canvasElement.querySelector('.nested-dropdown input') as HTMLInputElement
4882
+
4883
+ await waitForOptionsToPopulate(regionFilter, 4)
4884
+
4885
+ expect(regionFilter.value).toBe('North')
4886
+ expect(yearQuarterInput.value).toBe('Q2')
4887
+ }
4888
+ }
4889
+
4890
+ export const Metadata_In_Dashboard: Story = {
4891
+ args: {
4892
+ configUrl: '/packages/dashboard/tests/fixtures/dashboard-config-with-metadata.json'
4893
+ },
4894
+ play: async ({ canvasElement }) => {
4895
+ await assertVisualizationRendered(canvasElement)
4896
+ const subtext = await waitForPresence('.subtext', canvasElement)
4897
+ expect(subtext?.textContent).toContain('January 15, 2026')
4898
+ const biteSubtext = await waitForPresence('.bite-subtext', canvasElement)
4899
+ expect(biteSubtext?.textContent).toContain('CDC NREVSS')
4900
+ }
4901
+ }
4902
+
4903
+ export const Tab_Simple_Filter: Story = {
4904
+ args: {
4905
+ config: TabSimpleFilterConfig as unknown as Config,
4906
+ isEditor: false
4907
+ },
4908
+ parameters: {
4909
+ docs: {
4910
+ description: {
4911
+ story:
4912
+ 'Demonstrates the tab-simple filter style on a dashboard. Uses tab buttons instead of a dropdown to switch between filter values.'
4913
+ }
4914
+ }
4915
+ },
4916
+ play: async ({ canvasElement }) => {
4917
+ const canvas = within(canvasElement)
4918
+
4919
+ await canvas.findByText('Sales by Category')
4920
+ const tabContainer = canvasElement.querySelector('.tab-simple-container')
4921
+ await expect(tabContainer).toBeTruthy()
4922
+ }
4923
+ }
4924
+
4925
+ const EqualHeightThreeRowsConfig = {
4926
+ type: 'dashboard',
4927
+ data: [
4928
+ {
4929
+ Category: 'Adults',
4930
+ Rate: '68.5',
4931
+ Target: '80.0',
4932
+ Screened: '72.8',
4933
+ Location: 'Alabama',
4934
+ Year: '2021',
4935
+ Type: 'State',
4936
+ Amount: 1454
4937
+ },
4938
+ {
4939
+ Category: 'Seniors',
4940
+ Rate: '82.3',
4941
+ Target: '90.0',
4942
+ Screened: '84.6',
4943
+ Location: 'Alaska',
4944
+ Year: '2021',
4945
+ Type: 'State',
4946
+ Amount: 1690
4947
+ },
4948
+ {
4949
+ Category: 'Youth',
4950
+ Rate: '54.2',
4951
+ Target: '70.0',
4952
+ Screened: '65.3',
4953
+ Location: 'Arizona',
4954
+ Year: '2021',
4955
+ Type: 'State',
4956
+ Amount: 1572
4957
+ }
4958
+ ],
4959
+ dashboard: { theme: 'theme-blue', sharedFilters: [] },
4960
+ rows: [
4961
+ {
4962
+ equalHeight: true,
4963
+ columns: [
4964
+ { width: 4, widget: 'row1-bite' },
4965
+ { width: 4, widget: 'row1-markup' },
4966
+ { width: 4, widget: 'row1-waffle' }
4967
+ ]
4968
+ },
4969
+ {
4970
+ equalHeight: true,
4971
+ columns: [
4972
+ { width: 4, widget: 'row2-waffle' },
4973
+ { width: 4, widget: 'row2-bite' },
4974
+ { width: 4, widget: 'row2-markup' }
4975
+ ]
4976
+ },
4977
+ {
4978
+ equalHeight: true,
4979
+ columns: [
4980
+ { width: 4, widget: 'row3-markup' },
4981
+ { width: 4, widget: 'row3-waffle' },
4982
+ { width: 4, widget: 'row3-bite' }
4983
+ ]
4984
+ },
4985
+ {
4986
+ equalHeight: true,
4987
+ columns: [
4988
+ { width: 4, widget: 'row4-chart' },
4989
+ { width: 4, widget: 'row4-map' },
4990
+ { width: 4, widget: 'row4-bite' }
4991
+ ]
4992
+ },
4993
+ {
4994
+ equalHeight: true,
4995
+ columns: [
4996
+ { width: 4, widget: 'row5-bite' },
4997
+ { width: 4, widget: 'row5-waffle' },
4998
+ { width: 4, widget: 'row5-markup' }
4999
+ ]
5000
+ }
5001
+ ],
5002
+ table: { label: 'Data Table', show: false },
5003
+ visualizations: {
5004
+ 'row1-bite': {
5005
+ uid: 'row1-bite',
5006
+ type: 'data-bite',
5007
+ title: 'Vaccination Coverage',
5008
+ biteStyle: 'tp5',
5009
+ dataColumn: 'Rate',
5010
+ dataFunction: 'Mean (Average)',
5011
+ biteBody: 'of adults received the seasonal flu vaccine.',
5012
+ subtext: 'Based on 2024 CDC surveillance data.',
5013
+ dataFormat: { roundToPlace: 1, commas: true, prefix: '', suffix: '%' },
5014
+ theme: 'theme-blue',
5015
+ visual: { hideBackgroundColor: false }
5016
+ },
5017
+ 'row1-markup': {
5018
+ uid: 'row1-markup',
5019
+ type: 'markup-include',
5020
+ visualizationType: 'markup-include',
5021
+ filters: [],
5022
+ filterBehavior: 'Filter Change',
5023
+ openModal: false,
5024
+ showEditorPanel: false,
5025
+ theme: 'theme-blue',
5026
+ contentEditor: {
5027
+ title: 'About Vaccination Data',
5028
+ titleStyle: 'small',
5029
+ showHeader: true,
5030
+ srcUrl: '#example',
5031
+ useInlineHTML: true,
5032
+ allowHideSection: false,
5033
+ showNoDataMessage: false,
5034
+ inlineHTML: `
5035
+ <p>This section provides context for the vaccination coverage metrics shown in this row.</p>
5036
+ <p>Data is collected annually from a nationally representative household survey. Results are weighted to reflect the U.S. adult population aged 18 and older.</p>
5037
+ `
5038
+ },
5039
+ visual: { border: true, accent: true, background: true, hideBackgroundColor: false, borderColorTheme: false }
5040
+ },
5041
+ 'row1-waffle': {
5042
+ uid: 'row1-waffle',
5043
+ type: 'waffle-chart',
5044
+ title: 'Flu Vaccination Rate',
5045
+ visualizationType: 'TP5 Waffle',
5046
+ visualizationSubType: 'linear',
5047
+ showPercent: true,
5048
+ showDenominator: false,
5049
+ content: 'of adults vaccinated.',
5050
+ subtext: '',
5051
+ dataColumn: 'Rate',
5052
+ dataFunction: 'Mean (Average)',
5053
+ customDenom: false,
5054
+ dataDenom: '100',
5055
+ suffix: '%',
5056
+ roundToPlace: '1',
5057
+ theme: 'theme-blue',
5058
+ shape: 'square',
5059
+ visual: { whiteBackground: false },
5060
+ showTitle: true,
5061
+ overallFontSize: 'medium'
5062
+ },
5063
+ 'row2-waffle': {
5064
+ uid: 'row2-waffle',
5065
+ type: 'waffle-chart',
5066
+ title: 'Health Insurance Coverage',
5067
+ visualizationType: 'TP5 Waffle',
5068
+ visualizationSubType: 'linear',
5069
+ showPercent: true,
5070
+ showDenominator: false,
5071
+ content: 'of seniors have health insurance coverage through Medicare, Medicaid, or a private insurer.',
5072
+ subtext: 'Includes all government and private plan types reported in the survey.',
5073
+ dataColumn: 'Target',
5074
+ dataFunction: 'Mean (Average)',
5075
+ customDenom: false,
5076
+ dataDenom: '100',
5077
+ suffix: '%',
5078
+ roundToPlace: '1',
5079
+ theme: 'theme-teal',
5080
+ shape: 'person',
5081
+ visual: { whiteBackground: false },
5082
+ showTitle: true,
5083
+ overallFontSize: 'medium'
5084
+ },
5085
+ 'row2-bite': {
5086
+ uid: 'row2-bite',
5087
+ type: 'data-bite',
5088
+ title: 'Insurance Target Met',
5089
+ biteStyle: 'tp5',
5090
+ dataColumn: 'Target',
5091
+ dataFunction: 'Mean (Average)',
5092
+ biteBody:
5093
+ 'average insurance coverage target across all age groups, exceeding the Healthy People 2030 benchmark of 92.5%. Results reflect multi-year trend data collected from the National Health Interview Survey.',
5094
+ subtext: 'Source: NHIS 2024.',
5095
+ dataFormat: { roundToPlace: 1, commas: true, prefix: '', suffix: '%' },
5096
+ theme: 'theme-teal',
5097
+ visual: { hideBackgroundColor: false }
5098
+ },
5099
+ 'row2-markup': {
5100
+ uid: 'row2-markup',
5101
+ type: 'markup-include',
5102
+ visualizationType: 'markup-include',
5103
+ filters: [],
5104
+ filterBehavior: 'Filter Change',
5105
+ openModal: false,
5106
+ showEditorPanel: false,
5107
+ theme: 'theme-teal',
5108
+ contentEditor: {
5109
+ title: 'Coverage Notes',
5110
+ titleStyle: 'small',
5111
+ showHeader: true,
5112
+ srcUrl: '#example',
5113
+ useInlineHTML: true,
5114
+ allowHideSection: false,
5115
+ showNoDataMessage: false,
5116
+ inlineHTML: `<p>Short note about coverage methodology.</p>`
5117
+ },
5118
+ visual: { border: true, accent: true, background: true, hideBackgroundColor: false, borderColorTheme: false }
5119
+ },
5120
+ 'row3-markup': {
5121
+ uid: 'row3-markup',
5122
+ type: 'markup-include',
5123
+ visualizationType: 'markup-include',
5124
+ filters: [],
5125
+ filterBehavior: 'Filter Change',
5126
+ openModal: false,
5127
+ showEditorPanel: false,
5128
+ theme: 'theme-purple',
5129
+ contentEditor: {
5130
+ title: 'Cancer Screening Background',
5131
+ titleStyle: 'small',
5132
+ showHeader: true,
5133
+ srcUrl: '#example',
5134
+ useInlineHTML: true,
5135
+ allowHideSection: false,
5136
+ showNoDataMessage: false,
5137
+ inlineHTML: `
5138
+ <p>Cancer screening completion rates reflect the percentage of eligible adults who completed recommended preventive screenings during the reporting period.</p>
5139
+ <p>Recommended screenings tracked in this dashboard include:</p>
5140
+ <ul>
5141
+ <li>Mammography (women aged 40–74)</li>
5142
+ <li>Colonoscopy or FOBT (adults aged 45–75)</li>
5143
+ <li>Cervical cancer screening via Pap smear or HPV co-test (women aged 21–65)</li>
5144
+ <li>Lung cancer low-dose CT (high-risk adults aged 50–80)</li>
5145
+ </ul>
5146
+ <p>All rates are age-adjusted to the 2000 U.S. standard population.</p>
5147
+ `
5148
+ },
5149
+ visual: { border: true, accent: true, background: true, hideBackgroundColor: false, borderColorTheme: false }
5150
+ },
5151
+ 'row3-waffle': {
5152
+ uid: 'row3-waffle',
5153
+ type: 'waffle-chart',
5154
+ title: 'Cancer Screening Completion',
5155
+ visualizationType: 'TP5 Waffle',
5156
+ visualizationSubType: 'linear',
5157
+ showPercent: true,
5158
+ showDenominator: false,
5159
+ content: 'completed at least one recommended cancer screening in the past 12 months.',
5160
+ subtext: 'Data from NHIS 2024.',
5161
+ dataColumn: 'Screened',
5162
+ dataFunction: 'Mean (Average)',
5163
+ customDenom: false,
5164
+ dataDenom: '100',
5165
+ suffix: '%',
5166
+ roundToPlace: '1',
5167
+ theme: 'theme-purple',
5168
+ shape: 'circle',
5169
+ visual: { whiteBackground: false },
5170
+ showTitle: true,
5171
+ overallFontSize: 'medium'
5172
+ },
5173
+ 'row3-bite': {
5174
+ uid: 'row3-bite',
5175
+ type: 'data-bite',
5176
+ title: 'Screening Rate',
5177
+ biteStyle: 'tp5',
5178
+ dataColumn: 'Screened',
5179
+ dataFunction: 'Mean (Average)',
5180
+ biteBody: '',
5181
+ subtext: '',
5182
+ dataFormat: { roundToPlace: 1, commas: true, prefix: '', suffix: '%' },
5183
+ theme: 'theme-purple',
5184
+ visual: { hideBackgroundColor: false }
5185
+ },
5186
+ 'row4-bite': {
5187
+ uid: 'row4-bite',
5188
+ type: 'data-bite',
5189
+ title: 'Average Amount',
5190
+ biteStyle: 'tp5',
5191
+ dataColumn: 'Amount',
5192
+ dataFunction: 'Mean (Average)',
5193
+ biteBody:
5194
+ 'average value across the three-state comparison set used to validate equal-height behavior with chart and map cards in the same row.',
5195
+ subtext: 'Synthetic dashboard story data.',
5196
+ dataFormat: { roundToPlace: 0, commas: true, prefix: '', suffix: '' },
5197
+ theme: 'theme-blue',
5198
+ visual: { hideBackgroundColor: false }
5199
+ },
5200
+ 'row5-bite': {
5201
+ uid: 'row5-bite',
5202
+ type: 'data-bite',
5203
+ title: 'Legacy Screening Summary',
5204
+ biteStyle: 'title',
5205
+ bitePosition: 'Top',
5206
+ dataColumn: 'Screened',
5207
+ dataFunction: 'Mean (Average)',
5208
+ biteBody:
5209
+ 'of respondents completed at least one recommended screening, with a longer explanatory sentence to make this legacy card taller than its neighbors before equal-height normalization.',
5210
+ subtext: 'Legacy data bite layout.',
5211
+ dataFormat: { roundToPlace: 1, commas: true, prefix: '', suffix: '%' },
5212
+ theme: 'theme-purple',
5213
+ visual: {
5214
+ border: true,
5215
+ accent: true,
5216
+ background: true,
5217
+ hideBackgroundColor: false,
5218
+ borderColorTheme: false
5219
+ }
5220
+ },
5221
+ 'row5-waffle': {
5222
+ uid: 'row5-waffle',
5223
+ type: 'waffle-chart',
5224
+ title: 'Legacy Waffle',
5225
+ visualizationType: 'Waffle',
5226
+ visualizationSubType: 'linear',
5227
+ showPercent: true,
5228
+ showDenominator: false,
5229
+ content: 'of adults completed the standard prevention checklist.',
5230
+ subtext: 'Standard waffle layout for equal-height validation.',
5231
+ dataColumn: 'Rate',
5232
+ dataFunction: 'Mean (Average)',
5233
+ customDenom: false,
5234
+ dataDenom: '100',
5235
+ suffix: '%',
5236
+ roundToPlace: '1',
5237
+ theme: 'theme-purple',
5238
+ shape: 'square',
5239
+ visual: {
5240
+ border: true,
5241
+ accent: true,
5242
+ background: true,
5243
+ hideBackgroundColor: false,
5244
+ borderColorTheme: false
5245
+ },
5246
+ showTitle: true,
5247
+ overallFontSize: 'medium'
5248
+ },
5249
+ 'row5-markup': {
5250
+ uid: 'row5-markup',
5251
+ type: 'markup-include',
5252
+ visualizationType: 'markup-include',
5253
+ filters: [],
5254
+ filterBehavior: 'Filter Change',
5255
+ openModal: false,
5256
+ showEditorPanel: false,
5257
+ theme: 'theme-purple',
5258
+ contentEditor: {
5259
+ title: 'Legacy Markup Include',
5260
+ titleStyle: 'small',
5261
+ showHeader: true,
5262
+ srcUrl: '#example',
5263
+ useInlineHTML: true,
5264
+ allowHideSection: false,
5265
+ showNoDataMessage: false,
5266
+ inlineHTML: `
5267
+ <p>This legacy markup include is paired with a non-TP5 data bite and a standard waffle chart.</p>
5268
+ <p>Its content length is intentionally different so the equal-height row has to normalize three legacy card layouts in the same row.</p>
5269
+ `
5270
+ },
5271
+ visual: { border: true, accent: true, background: true, hideBackgroundColor: false, borderColorTheme: false }
5272
+ }
5273
+ }
5274
+ }
5275
+
5276
+ const equalHeightChartTemplate = cloneDeep(EqualHeightMixedVizConfig.visualizations.chart1699383531543)
5277
+ const equalHeightMapTemplate = cloneDeep(EqualHeightMixedVizConfig.visualizations.map1699383540561)
5278
+
5279
+ if (equalHeightChartTemplate) {
5280
+ EqualHeightThreeRowsConfig.visualizations['row4-chart'] = {
5281
+ ...equalHeightChartTemplate,
5282
+ uid: 'row4-chart',
5283
+ title: 'Average Amount by State',
5284
+ showTitle: true,
5285
+ theme: 'theme-blue',
5286
+ filters: [],
5287
+ dashboardFilters: [],
5288
+ xAxis: {
5289
+ ...equalHeightChartTemplate.xAxis,
5290
+ dataKey: 'Location'
5291
+ },
5292
+ series: [
5293
+ {
5294
+ dataKey: 'Amount',
5295
+ type: 'Bar',
5296
+ axis: 'Left',
5297
+ tooltip: true
5298
+ }
5299
+ ]
5300
+ }
5301
+ }
5302
+
5303
+ if (equalHeightMapTemplate) {
5304
+ EqualHeightThreeRowsConfig.visualizations['row4-map'] = {
5305
+ ...equalHeightMapTemplate,
5306
+ uid: 'row4-map',
5307
+ filters: [],
5308
+ theme: 'theme-blue',
5309
+ general: {
5310
+ ...equalHeightMapTemplate.general,
5311
+ title: 'State Amount Map',
5312
+ showTitle: true
5313
+ }
5314
+ }
5315
+ }
5316
+
5317
+ export const Equal_Height_Data_Bite_Markup_Waffle: Story = {
5318
+ args: {
5319
+ config: EqualHeightThreeRowsConfig as unknown as Config,
5320
+ isEditor: false
5321
+ },
5322
+ parameters: {
5323
+ docs: {
5324
+ description: {
5325
+ story:
5326
+ 'Five equal-height rows mixing TP5 and non-TP5 data-bite, markup-include, waffle-chart, chart, and map. Tests that equal-height normalization works across multiple visualization types with intentionally uneven content lengths.'
5327
+ }
5328
+ }
5329
+ },
5330
+ play: async ({ canvasElement }) => {
5331
+ await assertVisualizationRendered(canvasElement)
5332
+ await waitForPresence('.cove-visualization.type-markup-include', canvasElement)
5333
+ await waitForPresence('.cove-visualization.type-waffle-chart', canvasElement)
5334
+ await waitForPresence('.cove-visualization.type-data-bite', canvasElement)
5335
+ }
5336
+ }
5337
+
898
5338
  export default meta