@cdc/core 4.24.9 → 4.24.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/LICENSE +201 -0
  2. package/assets/icon-combo-chart.svg +1 -0
  3. package/assets/icon-epi-chart.svg +27 -0
  4. package/components/BlurStrokeText.tsx +44 -0
  5. package/components/DataTable/DataTable.tsx +51 -35
  6. package/components/DataTable/DataTableStandAlone.tsx +37 -6
  7. package/components/DataTable/components/ChartHeader.tsx +31 -26
  8. package/components/DataTable/components/MapHeader.tsx +19 -10
  9. package/components/DataTable/components/SortIcon/index.tsx +25 -0
  10. package/components/DataTable/components/SortIcon/sort-icon.css +21 -0
  11. package/{styles/_data-table.scss → components/DataTable/data-table.css} +268 -298
  12. package/components/DataTable/helpers/customSort.ts +11 -15
  13. package/components/DataTable/helpers/getDataSeriesColumns.ts +5 -1
  14. package/components/DataTable/helpers/getNewSortBy.ts +35 -0
  15. package/components/DataTable/helpers/tests/customSort.test.ts +52 -0
  16. package/components/DataTable/helpers/tests/getNewSortBy.test.ts +26 -0
  17. package/components/EditorPanel/DataTableEditor.tsx +132 -26
  18. package/components/EditorPanel/Inputs.tsx +42 -4
  19. package/components/EditorPanel/VizFilterEditor/NestedDropdownEditor.tsx +25 -7
  20. package/components/EditorPanel/VizFilterEditor/VizFilterEditor.tsx +1 -1
  21. package/components/{Filters.tsx → Filters/Filters.tsx} +48 -39
  22. package/components/Filters/helpers/applyQueuedActive.ts +12 -0
  23. package/components/Filters/helpers/getNestedOptions.ts +29 -0
  24. package/components/Filters/helpers/handleSorting.ts +18 -0
  25. package/components/Filters/helpers/tests/applyQueuedActive.test.ts +49 -0
  26. package/components/Filters/helpers/tests/getNestedOptions.test.ts +93 -0
  27. package/components/Filters/helpers/tests/handleSorting.test.ts +68 -0
  28. package/components/Filters/index.ts +5 -0
  29. package/components/Layout/components/Sidebar/components/sidebar.styles.scss +1 -3
  30. package/components/Legend/Legend.Gradient.tsx +2 -9
  31. package/components/Loader/Loader.tsx +33 -0
  32. package/components/Loader/index.ts +1 -0
  33. package/components/Loader/loader.styles.css +13 -0
  34. package/components/NestedDropdown/NestedDropdown.tsx +90 -48
  35. package/components/NestedDropdown/nestedDropdownHelpers.ts +34 -0
  36. package/components/NestedDropdown/nesteddropdown.styles.css +7 -0
  37. package/components/NestedDropdown/tests/nestedDropdownHelpers.test.ts +58 -0
  38. package/components/Table/components/GroupRow.tsx +1 -1
  39. package/components/_stories/BlurStrokeTest.stories.tsx +27 -0
  40. package/components/_stories/NestedDropdown.stories.tsx +22 -46
  41. package/components/_stories/_mocks/nested-dropdown.json +30 -0
  42. package/components/_stories/styles.scss +0 -1
  43. package/components/ui/{Tooltip.jsx → Tooltip.tsx} +38 -14
  44. package/data/colorPalettes.js +107 -10
  45. package/dist/cove-main.css +6114 -0
  46. package/dist/cove-main.css.map +1 -0
  47. package/helpers/addValuesToFilters.ts +8 -3
  48. package/helpers/cove/number.js +46 -25
  49. package/helpers/coveUpdateWorker.ts +6 -7
  50. package/helpers/formatConfigBeforeSave.ts +16 -1
  51. package/helpers/gatherQueryParams.ts +12 -2
  52. package/helpers/pivotData.ts +52 -11
  53. package/helpers/tests/gatherQueryParams.test.ts +34 -0
  54. package/helpers/tests/pivotData.test.ts +50 -0
  55. package/helpers/ver/4.24.10.ts +47 -0
  56. package/helpers/ver/4.24.9.ts +0 -3
  57. package/helpers/ver/tests/4.24.10.test.ts +45 -0
  58. package/helpers/viewports.ts +9 -0
  59. package/package.json +7 -3
  60. package/styles/_button-section.scss +4 -0
  61. package/styles/_global-variables.scss +19 -1
  62. package/styles/_global.scss +1 -8
  63. package/styles/_reset.scss +2 -15
  64. package/styles/base.scss +0 -1
  65. package/styles/cove-main.scss +6 -0
  66. package/styles/filters.scss +6 -4
  67. package/styles/v2/components/ui/tooltip.scss +42 -40
  68. package/styles/v2/layout/_component.scss +0 -6
  69. package/styles/v2/layout/index.scss +0 -1
  70. package/types/Axis.ts +2 -0
  71. package/types/General.ts +1 -0
  72. package/types/Table.ts +2 -1
  73. package/types/Visualization.ts +13 -1
  74. package/types/VizFilter.ts +2 -1
  75. package/components/DataTable/components/Icons.tsx +0 -10
  76. package/components/_stories/EditorPanel.stories.tsx +0 -54
  77. package/components/_stories/Layout.Debug.stories.tsx +0 -91
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../styles/_reset.scss","../styles/_global-variables.scss","../styles/filters.scss","../styles/base.scss","../styles/_variables.scss","../styles/_global.scss","../styles/_button-section.scss","../styles/_series-list.scss","../styles/_typography.scss","../styles/heading-colors.scss","../styles/v2/themes/_color-definitions.scss","../styles/v2/components/ui/tooltip.scss","../styles/v2/utils/_align.scss","../styles/v2/utils/_animations.scss","../styles/v2/utils/_grid.scss","../styles/v2/utils/_spacers.scss","../styles/v2/main.scss","../styles/v2/base/_general.scss","../styles/v2/base/_heading.scss","../styles/v2/base/_file-selector.scss","../styles/v2/layout/_alert.scss","../styles/v2/layout/_component.scss","../styles/v2/layout/_progression.scss","../styles/v2/utils/_mixins.scss","../styles/v2/layout/_tooltip.scss","../styles/v2/utils/_breakpoints.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;;AAGA;AAAA;EAEE;;AAGF;EACE;;;AAIF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAwEE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AACA;EACE;;AAIJ;EACE;;AAGF;AAAA;AAEE;AAAA;EAEA;AAEA;AAAA;EAEA;AAEA;AAAA;EAEA;AAEA;AAAA;EAEA;;AAGF;AACE;EACA;;AAGF;AACE;AAAA;EAEA;;;ACzEF;EAEI;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;;;AAON;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;IACE;;;ACxFF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;;AACA;EACE;;;AAON;EAGE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIA;EACE;EACA;;;AAKN;EACE;EACA;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;;;ACnEN;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA,OCnEU;EDoEV;EACA;EAcA;EACA;EACA;;AAhDE;EAkCA;;AEvEJ;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEF;EACE;EACA;EAIA;EACA;;AAJA;EAHF;IAII;;;AAIF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;;AAGJ;EACE,kBD3EE;EC4EF;EACA;EACA;EACA;;AACA;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;AAGJ;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA,YDrJG;ECsJH;EACA;EACA;EACA;;AAEF;EACE,YD3JW;EC4JX;EACA;;AAEF;EACE;;AAEF;EACE;EACA,ODrKG;ECsKH;;AACA;EACE;;AAGJ;EACE;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;ACjMF;EACE;EACA;EACA;;AAEA;EACE;;AAEF;EACE;;AAKJ;EACE;EACA;EACA;EAUA;;AATA;EACE;;AAEF;EAC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F;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;;AC9KR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAOA;AAAA;EACE;;AAKA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAKJ;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;;AAGE;AAAA;AAAA;AAAA;EACE;;AAIJ;AAAA;AAAA;AAAA;EACE;;AAEA;AAAA;AAAA;AAAA;EACE;;AAIF;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAIF;AAAA;AAAA;AAAA;EACE;EACA;;AAIJ;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAKN;EACE;EACA;EACA;;;AAGF;EACE;EACA;;AAGE;EACE;EACA;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;EACE;;;AChJJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ACJN;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;IACE;IACA;;EAGF;IACE;IACA;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AAIJ;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AC1BJ;EACE;EACA;;;AA5BE;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAQF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAeJ;EAnCE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAyBJ;EAnCE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAyBJ;EAnCE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAyBJ;EAnCE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAyBJ;EAnCE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAVF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;ACXF;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;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E;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AAvCF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEF;EACE;;AO7KR;EACE;EACA;EACA;EACA;EACA;EACA,OP6KU;EO5KV;EACA;;AAEA;EACE;EACA;EACA;EACA,OPyKS;;AOtKX;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AC9BJ;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AClBF;EACE;EACA;EACA;EACA,OTqLW;ESpLX;EACA;EACA;EACA;;AAEA;EACE,kBT4KW;;ASzKb;EACE;EACA,OTsKG;ESrKH;;AHRF;AAAA;EAEE;;AAWF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AIxDJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AClCJ;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE,YXyKW;;AWrKf;EACE;;AClBF;ECAE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EDRA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAEA;EACE;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAGE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AEzER;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA,OAhBmB;EAiBnB,kBAlBgB;EAmBhB;EACA;EACA;EACA;;AAGE;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;EACE;;AAMJ;EACE;;AAIJ;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;IACE;IACA;;EAGF;IACE;IACA;;;AAIJ;EACE;IACE;IACA;;EAGF;IACE;IACA;;;AAIJ;EACE;IACE;IACA;;EAGF;IACE;IACA;;;AAIJ;EACE;IACE;IACA;;EAGF;IACE;IACA;;;ACxFA;ETqBA","file":"cove-main.css"}
@@ -72,9 +72,9 @@ const handleVizParents = (filter: VizFilter, data: any[] | MapData, filtersLooku
72
72
  let filteredData = Array.isArray(data) ? data : Object.values(data).flat(1)
73
73
  filter.parents.forEach(parentKey => {
74
74
  const parent = filtersLookup[parentKey]
75
- if (parent.filterStyle === 'nested-dropdown') {
75
+ if (parent?.filterStyle === 'nested-dropdown') {
76
76
  const { subGrouping } = parent as VizFilter
77
- if (subGrouping.active) {
77
+ if (subGrouping?.active) {
78
78
  filteredData = filteredData.filter(d => {
79
79
  const matchingParentGroup = parent.active == d[parent.columnName]
80
80
  const matchingSubGroup = subGrouping.active == d[subGrouping.columnName]
@@ -122,7 +122,12 @@ export const addValuesToFilters = (filters: VizFilter[], data: any[] | MapData):
122
122
  }
123
123
  }
124
124
  if (filterCopy.subGrouping) {
125
- const queryStringFilterValue = getQueryStringFilterValue(filterCopy.subGrouping)
125
+ const groupName = filterCopy.active as string
126
+ const subGroupingFilter = {
127
+ ...filterCopy.subGrouping,
128
+ values: filterCopy.subGrouping.valuesLookup[groupName].values
129
+ }
130
+ const queryStringFilterValue = getQueryStringFilterValue(subGroupingFilter)
126
131
  const groupActive = filterCopy.active || filterCopy.values[0]
127
132
  const defaultValue = filterCopy.subGrouping.valuesLookup[groupActive as string].values[0]
128
133
  // if the value doesn't exist in the subGrouping then return the default
@@ -30,10 +30,24 @@ const formatNumber = (num, axis, shouldAbbreviate = false, config = null, addCol
30
30
  if (isNegative) {
31
31
  num = Math.abs(num)
32
32
  }
33
-
33
+
34
34
  // destructure dataFormat values
35
35
  let {
36
- dataFormat: { commas, abbreviated, roundTo, prefix, suffix, rightRoundTo, bottomRoundTo, rightPrefix, rightSuffix, bottomPrefix, bottomSuffix, bottomAbbreviated }
36
+ dataFormat: {
37
+ commas,
38
+ abbreviated,
39
+ roundTo,
40
+ prefix,
41
+ suffix,
42
+ rightRoundTo,
43
+ bottomRoundTo,
44
+ rightPrefix,
45
+ rightSuffix,
46
+ bottomPrefix,
47
+ bottomSuffix,
48
+ bottomAbbreviated,
49
+ onlyShowTopPrefixSuffix
50
+ }
37
51
  } = config
38
52
 
39
53
  // destructure Additional Col dataformat values
@@ -108,7 +122,10 @@ const formatNumber = (num, axis, shouldAbbreviate = false, config = null, addCol
108
122
  // Edge case for small numbers with decimals
109
123
  // - if roundTo undefined which means it is blank, then do not round
110
124
 
111
- if ((axis === 'left' && commas && abbreviated && shouldAbbreviate) || (axis === 'bottom' && commas && abbreviated && shouldAbbreviate)) {
125
+ if (
126
+ (axis === 'left' && commas && abbreviated && shouldAbbreviate) ||
127
+ (axis === 'bottom' && commas && abbreviated && shouldAbbreviate)
128
+ ) {
112
129
  num = num // eslint-disable-line
113
130
  } else {
114
131
  num = num.toLocaleString('en-US', stringFormattingOptions)
@@ -123,38 +140,42 @@ const formatNumber = (num, axis, shouldAbbreviate = false, config = null, addCol
123
140
  num = abbreviateNumber(parseFloat(num))
124
141
  }
125
142
 
126
- if (addColPrefix !== undefined && axis === 'left') {
127
- result = addColPrefix + result
128
- } else {
129
- if (prefix && axis === 'left') {
130
- result = prefix + result
143
+ if (!onlyShowTopPrefixSuffix) {
144
+ if (addColPrefix !== undefined && axis === 'left') {
145
+ result = addColPrefix + result
146
+ } else {
147
+ if (prefix && axis === 'left') {
148
+ result = prefix + result
149
+ }
131
150
  }
132
- }
133
151
 
134
- if (rightPrefix && axis === 'right') {
135
- result += rightPrefix
136
- }
152
+ if (rightPrefix && axis === 'right') {
153
+ result += rightPrefix
154
+ }
137
155
 
138
- if (bottomPrefix && axis === 'bottom') {
139
- result += bottomPrefix
156
+ if (bottomPrefix && axis === 'bottom') {
157
+ result += bottomPrefix
158
+ }
140
159
  }
141
160
 
142
161
  result += num
143
162
 
144
- if (addColSuffix !== undefined && axis === 'left') {
145
- result += addColSuffix
146
- } else {
147
- if (suffix && axis === 'left') {
148
- result += suffix
163
+ if (!onlyShowTopPrefixSuffix) {
164
+ if (addColSuffix !== undefined && axis === 'left') {
165
+ result += addColSuffix
166
+ } else {
167
+ if (suffix && axis === 'left') {
168
+ result += suffix
169
+ }
149
170
  }
150
- }
151
171
 
152
- if (rightSuffix && axis === 'right') {
153
- result += rightSuffix
154
- }
172
+ if (rightSuffix && axis === 'right') {
173
+ result += rightSuffix
174
+ }
155
175
 
156
- if (bottomSuffix && axis === 'bottom') {
157
- result += bottomSuffix
176
+ if (bottomSuffix && axis === 'bottom') {
177
+ result += bottomSuffix
178
+ }
158
179
  }
159
180
  if (isNegative) {
160
181
  result = '-' + result
@@ -1,19 +1,17 @@
1
1
  // If config key names or position in the config have been changed with a version change,
2
2
  // process those config entries and format old values into new
3
+
4
+ import { UpdateFunction } from 'json-edit-react'
5
+
3
6
  import update_4_24_4 from './ver/4.24.4'
4
7
  import update_4_24_3 from './ver/4.24.3'
5
8
  import update_4_24_5 from './ver/4.24.5'
6
9
  import update_4_24_7 from './ver/4.24.7'
7
10
  import update_4_24_9 from './ver/4.24.9'
8
11
  import versionNeedsUpdate from './ver/versionNeedsUpdate'
9
- import { UpdateFunction } from 'json-edit-react'
12
+ import update_4_24_10 from './ver/4.24.10'
10
13
 
11
14
  export const coveUpdateWorker = config => {
12
- if (config.multiDashboards) {
13
- config.multiDashboards.forEach((dashboard, index) => {
14
- config.multiDashboards[index] = coveUpdateWorker(dashboard)
15
- })
16
- }
17
15
  let genConfig = config
18
16
 
19
17
  const versions = [
@@ -21,7 +19,8 @@ export const coveUpdateWorker = config => {
21
19
  ['4.24.4', update_4_24_4],
22
20
  ['4.24.5', update_4_24_5],
23
21
  ['4.24.7', update_4_24_7, true],
24
- ['4.24.9', update_4_24_9]
22
+ ['4.24.9', update_4_24_9],
23
+ ['4.24.10', update_4_24_10]
25
24
  ]
26
25
 
27
26
  versions.forEach(([version, updateFunction, alwaysRun]: [string, UpdateFunction, boolean?]) => {
@@ -42,7 +42,13 @@ const cleanDashboardData = (config: DashboardConfig) => {
42
42
  }
43
43
  if (config.visualizations) {
44
44
  Object.keys(config.visualizations).forEach(vizKey => {
45
- config.visualizations[vizKey] = _.omit(config.visualizations[vizKey], ['runtime', 'formattedData', 'data', 'editing', 'originalFormattedData'])
45
+ config.visualizations[vizKey] = _.omit(config.visualizations[vizKey], [
46
+ 'runtime',
47
+ 'formattedData',
48
+ 'data',
49
+ 'editing',
50
+ 'originalFormattedData'
51
+ ])
46
52
  })
47
53
  }
48
54
  if (config.rows) {
@@ -65,6 +71,14 @@ const cleanSharedFilters = (config: DashboardConfig) => {
65
71
  }
66
72
  }
67
73
 
74
+ const removeRuntimeDataURLs = (config: DashboardConfig) => {
75
+ if (config.datasets) {
76
+ Object.keys(config.datasets).forEach(datasetKey => {
77
+ delete config.datasets[datasetKey].runtimeDataUrl
78
+ })
79
+ }
80
+ }
81
+
68
82
  export const formatConfigBeforeSave = configToStrip => {
69
83
  const strippedConfig = _.cloneDeep(configToStrip)
70
84
  if (strippedConfig.type === 'dashboard') {
@@ -83,6 +97,7 @@ export const formatConfigBeforeSave = configToStrip => {
83
97
  cleanDashboardData(strippedConfig)
84
98
  cleanSharedFilters(strippedConfig)
85
99
  cleanDashboardFootnotes(strippedConfig)
100
+ removeRuntimeDataURLs(strippedConfig)
86
101
  } else {
87
102
  delete strippedConfig.runtime
88
103
  delete strippedConfig.formattedData
@@ -1,5 +1,15 @@
1
1
  import _ from 'lodash'
2
2
 
3
+ const strip = (paramVal: string) => {
4
+ return paramVal.replace(/"/g, '')
5
+ }
6
+
7
+ const isNumber = (value: string) => {
8
+ const hasLetters = value.match(/[a-zA-Z]/)
9
+ if (hasLetters) return false
10
+ return !isNaN(parseInt(value))
11
+ }
12
+
3
13
  export const gatherQueryParams = (baseEndpoint: string, params: { key: string; value: string }[]) => {
4
14
  const baseEndpointHasQueryParams = baseEndpoint.includes('?')
5
15
  return params
@@ -7,8 +17,8 @@ export const gatherQueryParams = (baseEndpoint: string, params: { key: string; v
7
17
  .map(({ key, value }, i) => {
8
18
  const leadingCharacter = i === 0 && !baseEndpointHasQueryParams ? '?' : '&'
9
19
  const isStatementParam = key.match(/\$.*/)
10
- if (!_.isNaN(parseInt(value)) || isStatementParam) return leadingCharacter + key + '=' + value
11
- return leadingCharacter + key + '=' + `"${value}"`
20
+ if (isNumber(value) || isStatementParam) return leadingCharacter + key + '=' + value
21
+ return leadingCharacter + key + '=' + `"${strip(value)}"`
12
22
  })
13
23
  .join('')
14
24
  }
@@ -1,18 +1,59 @@
1
1
  import _ from 'lodash'
2
2
 
3
+ const getKeyFromRow = (row: Record<string, any>, columns: string[]) => {
4
+ return columns.map(column => row[column] || '').join(':')
5
+ }
6
+
7
+ const getColumns = (data: Record<string, any>[], columnName: string, pivot: string[]) => {
8
+ const excludedColumns = [columnName, ...pivot]
9
+ return _.uniq(data.flatMap(row => Object.keys(row))).filter(col => !excludedColumns.includes(col))
10
+ }
11
+
3
12
  /** columnName is the column you'd like to select data values from to show as column headers.
4
13
  * Pivot is the value column who's data you'd like to show under those respective columns*/
5
- export const pivotData = (data: Record<string, any>[], columnName: string, pivot: string) => {
6
- const grouped = _.groupBy(data, val => val[columnName])
7
- const newData = []
8
- for (const key in grouped) {
9
- const group = grouped[key]
10
- group.forEach((val, index) => {
11
- const row = newData[index] || {}
12
- row[key] = val[pivot]
13
- const toAdd = _.omit(val, [columnName, pivot])
14
- newData[index] = { ...toAdd, ...row }
14
+ export const pivotData = (data: Record<string, any>[], columnName: string, pivot: string[]): Record<string, any>[] => {
15
+ const columns = getColumns(data, columnName, pivot)
16
+ const newColumns = {}
17
+ // there should be one row for every aggregate row
18
+ const aggregateRows = data.reduce((acc, row) => {
19
+ const key = getKeyFromRow(row, columns)
20
+ if (!acc[key]) {
21
+ acc[key] = {}
22
+ }
23
+ return acc
24
+ }, {})
25
+
26
+ data.forEach(row => {
27
+ const key = getKeyFromRow(row, columns)
28
+ if (pivot.length > 1) {
29
+ pivot.forEach(pivotColumn => {
30
+ const toAdd = _.omit(row, [columnName, ...pivot])
31
+ aggregateRows[key][pivotColumn] = {
32
+ ...aggregateRows[key][pivotColumn],
33
+ ...toAdd,
34
+ [row[columnName]]: row[pivotColumn]
35
+ }
36
+ })
37
+ } else {
38
+ const _pivot = pivot[0]
39
+ const toAdd = _.omit(row, [columnName, ...pivot])
40
+ aggregateRows[key] = {
41
+ ...aggregateRows[key],
42
+ ...toAdd,
43
+ [row[columnName]]: row[_pivot]
44
+ }
45
+ }
46
+
47
+ newColumns[row[columnName]] = ''
48
+ })
49
+
50
+ if (pivot.length > 1) {
51
+ return Object.keys(aggregateRows).flatMap(aggregateKey => {
52
+ return Object.keys(aggregateRows[aggregateKey]).map(pivotColumn => ({
53
+ pivotColumn,
54
+ ...aggregateRows[aggregateKey][pivotColumn]
55
+ }))
15
56
  })
16
57
  }
17
- return newData
58
+ return Object.values(aggregateRows).map(row => ({ ...newColumns, ...row }))
18
59
  }
@@ -0,0 +1,34 @@
1
+ import { gatherQueryParams } from '../gatherQueryParams'
2
+ import { expect, describe, it } from 'vitest'
3
+
4
+ describe('invertValue', () => {
5
+ it('should return the inverted value if xScale has an invert function', () => {
6
+ const _params = [
7
+ { key: 'YearQuarter', value: '2020-Q3' },
8
+ { key: 'abc', value: 'def' }
9
+ ]
10
+
11
+ const result = gatherQueryParams('', _params)
12
+ expect(result).toBe('?YearQuarter="2020-Q3"&abc="def"')
13
+ })
14
+ })
15
+
16
+ describe('gatherQueryParams', () => {
17
+ it('should return a string of query params', () => {
18
+ const baseEndpoint = 'https://example.com'
19
+ const params = [
20
+ { key: 'key1', value: 'value1' },
21
+ { key: 'key2', value: 'value2' }
22
+ ]
23
+ expect(gatherQueryParams(baseEndpoint, params)).toEqual('?key1="value1"&key2="value2"')
24
+ })
25
+
26
+ it('should not wrap strings in extra Quotes', () => {
27
+ const baseEndpoint = 'https://example.com'
28
+ const params = [
29
+ { key: 'key1', value: 'value1' },
30
+ { key: 'key2', value: '"value2"' }
31
+ ]
32
+ expect(gatherQueryParams(baseEndpoint, params)).toEqual('?key1="value1"&key2="value2"')
33
+ })
34
+ })
@@ -0,0 +1,50 @@
1
+ import { describe, it, expect } from 'vitest'
2
+
3
+ import { pivotData } from '../pivotData'
4
+
5
+ describe('pivotData', () => {
6
+ const data = [
7
+ { name: 'John', age: 25, city: 'New York' },
8
+ { name: 'Jane', age: 30, city: 'San Francisco' },
9
+ { name: 'Jane', age: 27, city: 'New York' },
10
+ { name: 'John', age: 31, city: 'San Francisco' }
11
+ ]
12
+ it('should pivot data correctly', () => {
13
+ const result = pivotData(data, 'name', ['age'])
14
+ expect(result).toEqual([
15
+ { city: 'New York', John: 25, Jane: 27 },
16
+ { city: 'San Francisco', Jane: 30, John: 31 }
17
+ ])
18
+ })
19
+ it('should fill in columns with no data with empty strings', () => {
20
+ const data2 = [data[0], data[1]]
21
+ const result = pivotData(data2, 'name', ['age'])
22
+
23
+ expect(result).toEqual([
24
+ { city: 'New York', John: 25, Jane: '' },
25
+ { city: 'San Francisco', Jane: 30, John: '' }
26
+ ])
27
+
28
+ const data3 = [data[0], data[1], data[2]]
29
+ const result2 = pivotData(data3, 'name', ['age'])
30
+ expect(result2).toEqual([
31
+ { city: 'New York', John: 25, Jane: 27 },
32
+ { city: 'San Francisco', Jane: 30, John: '' }
33
+ ])
34
+ })
35
+ it('should be able to pivot more than one column', () => {
36
+ const data = [
37
+ { name: 'John', age: 25, color: 'blue', city: 'New York' },
38
+ { name: 'Jane', age: 27, color: 'red', city: 'New York' },
39
+ { name: 'Jane', age: 30, color: 'yellow', city: 'San Francisco' },
40
+ { name: 'John', age: 31, color: 'green', city: 'San Francisco' }
41
+ ]
42
+ const result = pivotData(data, 'name', ['age', 'color'])
43
+ expect(result).toEqual([
44
+ { city: 'New York', John: 25, Jane: 27, pivotColumn: 'age' },
45
+ { city: 'New York', John: 'blue', Jane: 'red', pivotColumn: 'color' },
46
+ { city: 'San Francisco', Jane: 30, John: 31, pivotColumn: 'age' },
47
+ { city: 'San Francisco', Jane: 'yellow', John: 'green', pivotColumn: 'color' }
48
+ ])
49
+ })
50
+ })
@@ -0,0 +1,47 @@
1
+ import _ from 'lodash'
2
+
3
+ export const removeMultiSelectPropFromMultiselect = newConfig => {
4
+ if (newConfig.type === 'dashboard') {
5
+ newConfig.dashboard?.sharedFilters.forEach((filter, index) => {
6
+ if (filter.multiSelect) {
7
+ newConfig.dashboard.sharedFilters[index].filterStyle = 'multi-select'
8
+ delete newConfig.dashboard.sharedFilters[index].multiSelect
9
+ }
10
+ })
11
+ }
12
+ }
13
+
14
+ export const changePivotColumns = newConfig => {
15
+ if (newConfig.type === 'dashboard') {
16
+ Object.keys(newConfig.visualizations).forEach(key => {
17
+ const currentViz = newConfig.visualizations[key]
18
+ if (currentViz.table?.pivot?.valueColumn) {
19
+ newConfig.visualizations[key].table.pivot.valueColumns = [currentViz.table.pivot.valueColumn]
20
+ delete newConfig.visualizations[key].table.pivot.valueColumn
21
+ }
22
+ })
23
+ }
24
+ if (newConfig.table?.pivot?.valueColumn) {
25
+ newConfig.table.pivot.valueColumns = [newConfig.table.pivot.valueColumn]
26
+ delete newConfig.table.pivot.valueColumn
27
+ }
28
+
29
+ return newConfig
30
+ }
31
+
32
+ export const setXAxisLabelOffsetToZero = newConfig => {
33
+ if (!newConfig.xAxis?.labelOffset) return
34
+ newConfig.xAxis.labelOffset = 0
35
+ }
36
+
37
+ const update_4_24_10 = config => {
38
+ const ver = '4.24.10'
39
+ const newConfig = _.cloneDeep(config)
40
+ setXAxisLabelOffsetToZero(newConfig)
41
+ changePivotColumns(newConfig)
42
+ removeMultiSelectPropFromMultiselect(newConfig)
43
+ newConfig.version = ver
44
+ return newConfig
45
+ }
46
+
47
+ export default update_4_24_10
@@ -1,9 +1,6 @@
1
- import { Legend } from './../../types/Legend'
2
1
  import _ from 'lodash'
3
2
  import { AnyVisualization } from '../../types/Visualization'
4
3
  import { VizFilter } from '../../types/VizFilter'
5
- import { AnyVisualization } from '../../types/Visualization'
6
- import { VizFilter } from '../../types/VizFilter'
7
4
  import versionNeedsUpdate from './versionNeedsUpdate'
8
5
 
9
6
  /**
@@ -0,0 +1,45 @@
1
+ import { ChartConfig } from '@cdc/chart/src/types/ChartConfig'
2
+ import { changePivotColumns, removeMultiSelectPropFromMultiselect, setXAxisLabelOffsetToZero } from '../4.24.10'
3
+ import { expect, describe, it } from 'vitest'
4
+
5
+ describe('removeMultiSelectPropFromMultiSelect() ', () => {
6
+ it('replaces multiSelect boolean with filterStyle = multiSelect', () => {
7
+ const mockConfig = { type: 'dashboard', dashboard: { sharedFilters: [{ multiSelect: true }] } } as any
8
+ removeMultiSelectPropFromMultiselect(mockConfig)
9
+ expect(mockConfig.dashboard.sharedFilters[0].filterStyle).toBe('multi-select')
10
+ expect(mockConfig.dashboard.sharedFilters[0].multiSelect).toBeUndefined()
11
+ })
12
+ })
13
+
14
+ describe('changePivotColumns() ', () => {
15
+ it('works with dashboards', () => {
16
+ const config = {
17
+ type: 'dashboard',
18
+ visualizations: { a: { table: { pivot: { valueColumn: 'value' } } } }
19
+ }
20
+ const expectedConfig = {
21
+ type: 'dashboard',
22
+ visualizations: { a: { table: { pivot: { valueColumns: ['value'] } } } }
23
+ }
24
+ expect(changePivotColumns(config)).toEqual(expectedConfig)
25
+ })
26
+ it('works with regularVisualizations', () => {
27
+ const config = {
28
+ type: 'chart',
29
+ table: { pivot: { valueColumn: 'value' } }
30
+ }
31
+ const expectedConfig = {
32
+ type: 'chart',
33
+ table: { pivot: { valueColumns: ['value'] } }
34
+ }
35
+ expect(changePivotColumns(config)).toEqual(expectedConfig)
36
+ })
37
+ })
38
+
39
+ describe('setXAxisLabelOffsetToZero(config) ', () => {
40
+ it('sets the x-axis label offset to 0', () => {
41
+ const mockConfig = { xAxis: { labelOffset: 5 } } as Partial<ChartConfig>
42
+ setXAxisLabelOffsetToZero(mockConfig)
43
+ expect(mockConfig.xAxis?.labelOffset).toBe(0)
44
+ })
45
+ })
@@ -0,0 +1,9 @@
1
+ function isLegendWrapViewport(currentViewport) {
2
+ return ['xs', 'xxs'].includes(currentViewport)
3
+ }
4
+
5
+ function isMobileHeightViewport(currentViewport) {
6
+ return ['xs', 'xxs'].includes(currentViewport)
7
+ }
8
+
9
+ export { isLegendWrapViewport, isMobileHeightViewport }
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@cdc/core",
3
- "version": "4.24.9",
3
+ "version": "4.24.10",
4
4
  "description": "Core components, styles, hooks, and helpers, for the CDC Open Visualization project",
5
5
  "moduleName": "CdcCore",
6
6
  "main": "dist/cdccore",
7
7
  "scripts": {
8
8
  "test": "vitest run --environment jsdom --reporter verbose",
9
9
  "test-watch": "vitest watch --reporter verbose",
10
- "test-watch:ui": "vitest --ui"
10
+ "test-watch:ui": "vitest --ui",
11
+ "build": "sass styles/cove-main.scss dist/cove-main.css"
11
12
  },
12
13
  "repository": {
13
14
  "type": "git",
@@ -33,5 +34,8 @@
33
34
  "react": "^18.2.0",
34
35
  "react-dom": "^18.2.0"
35
36
  },
36
- "gitHead": "c4b0402afe6ed209a85b7078711549b9fd7dae7d"
37
+ "gitHead": "a4d88d1bc91f596e1b0307d8e25c57ad8c668b75",
38
+ "devDependencies": {
39
+ "sass": "^1.79.4"
40
+ }
37
41
  }
@@ -26,6 +26,10 @@
26
26
  & a {
27
27
  font-size: 16px;
28
28
  }
29
+ margin-top: 20px;
30
+ &.below-table {
31
+ margin-top: 5px;
32
+ }
29
33
  }
30
34
 
31
35
  // odd wrapper thats different on dashboards
@@ -72,4 +72,22 @@ $colors: (
72
72
  }
73
73
  }
74
74
 
75
- @include theme();
75
+ @include theme();
76
+
77
+ :root {
78
+ --editorWidth: 350px;
79
+ --breakpoint-xs: 480px;
80
+ --breakpoint-sm: 768px;
81
+ --breakpoint-md: 960px;
82
+ --breakpoint-lg: 1170px;
83
+ --breakpoint-xl: 1280px;
84
+ --font-size: 17px;
85
+ }
86
+
87
+
88
+ @media (max-width: 768px) {
89
+ :root {
90
+ --font-size: 0.9em;
91
+ }
92
+ }
93
+
@@ -2,10 +2,6 @@ strong {
2
2
  font-weight: 600;
3
3
  }
4
4
 
5
- .subtext {
6
- margin-top: 1em;
7
- }
8
-
9
5
  .error-box {
10
6
  background: #ffc2c2;
11
7
  display: flex;
@@ -183,9 +179,6 @@ select {
183
179
  section.introText {
184
180
  width: 100%;
185
181
  margin-bottom: 25px;
186
- &.legend_visible_top {
187
- margin-bottom: 0;
188
- }
189
182
  }
190
183
 
191
184
  section.footnotes {
@@ -195,7 +188,7 @@ section.footnotes {
195
188
  }
196
189
 
197
190
  .cdc-chart-inner-container .subtext {
198
- padding: 15px 0;
191
+ margin-top: 20px;
199
192
  }
200
193
 
201
194
  .margin-left-href {