@cdc/dashboard 4.26.2 → 4.26.3

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