From 2ecce20e48f30284fa893e8c46beeaafc6818daa Mon Sep 17 00:00:00 2001 From: Evan Rusackas Date: Thu, 6 Aug 2026 13:22:15 -0700 Subject: [PATCH] chore(viz): remove legacy explore_json + viz.py pipeline (#41714) Co-authored-by: Claude Code --- .github/CODEOWNERS | 2 +- .gitignore | 1 + UPDATING.md | 86 +- .../configuration/country-map-tools.mdx | 8 +- superset-frontend/package-lock.json | 519 +-- superset-frontend/package.json | 20 +- .../src/utils/buildSortMetricOrderby.ts | 87 + .../src/utils/index.ts | 1 + .../test/utils/buildSortMetricOrderby.test.ts | 96 + .../src/chart/clients/ChartClient.ts | 31 +- .../chart/components/StatefulChart.test.tsx | 52 +- .../src/chart/components/StatefulChart.tsx | 43 +- .../src/chart/models/ChartMetadata.ts | 5 - .../src/chart/models/ChartProps.ts | 1 - .../src/utils/mapStyles.test.ts | 12 + .../superset-ui-core/src/utils/mapStyles.ts | 13 + .../test/chart/clients/ChartClient.test.ts | 66 +- .../embedded/pivot-collapse-state.spec.ts | 39 + .../src/PairedTTest.tsx | 143 - .../legacy-plugin-chart-rose/CHANGELOG.md | 61 - .../legacy-plugin-chart-rose/README.md | 52 - .../legacy-plugin-chart-rose/package.json | 40 - .../src/ReactRose.tsx | 87 - .../legacy-plugin-chart-rose/src/Rose.ts | 697 ---- .../src/images/thumbnail-dark.png | Bin 83147 -> 0 bytes .../src/images/thumbnail.png | Bin 27928 -> 0 bytes .../src/stories/Rose.stories.tsx | 95 - .../src/stories/data.ts | 950 ------ .../tsconfig.json | 25 - .../legacy-preset-chart-nvd3/CHANGELOG.md | 113 - .../legacy-preset-chart-nvd3/README.md | 64 - .../legacy-preset-chart-nvd3/package.json | 49 - .../BoxPlot/stories/NVD3BoxPlot.stories.tsx | 81 - .../src/BoxPlot/stories/data.ts | 78 - .../src/Bubble/controlPanel.ts | 140 - .../src/Bubble/images/example-dark.jpg | Bin 56660 -> 0 bytes .../src/Bubble/images/example.jpg | Bin 61529 -> 0 bytes .../src/Bubble/images/thumbnail-dark.png | Bin 60642 -> 0 bytes .../src/Bubble/images/thumbnail.png | Bin 20423 -> 0 bytes .../src/Bubble/images/thumbnailLarge.png | Bin 45424 -> 0 bytes .../src/Bubble/stories/NVD3Bubble.stories.tsx | 103 - .../src/Bubble/stories/data.ts | 357 -- .../src/Bullet/index.ts | 51 - .../src/Bullet/stories/NVD3Bullet.stories.tsx | 87 - .../src/Compare/controlPanel.ts | 76 - .../src/Compare/images/example-dark.jpg | Bin 63894 -> 0 bytes .../src/Compare/images/example.jpg | Bin 66360 -> 0 bytes .../src/Compare/images/thumbnail-dark.png | Bin 89728 -> 0 bytes .../src/Compare/images/thumbnail.png | Bin 32162 -> 0 bytes .../src/Compare/images/thumbnailLarge.png | Bin 90272 -> 0 bytes .../src/Compare/index.ts | 62 - .../Compare/stories/NVD3Compare.stories.tsx | 208 -- .../src/Compare/stories/data.ts | 927 ----- .../src/NVD3Controls.tsx | 549 --- .../legacy-preset-chart-nvd3/src/NVD3Vis.ts | 1059 ------ .../legacy-preset-chart-nvd3/src/PropTypes.ts | 82 - .../src/ReactNVD3.tsx | 189 -- .../src/TimePivot/controlPanel.ts | 134 - .../src/TimePivot/index.ts | 51 - .../legacy-preset-chart-nvd3/src/preset.ts | 37 - .../src/transformProps.ts | 206 -- .../legacy-preset-chart-nvd3/src/utils.ts | 354 -- .../src/vendor/superset/AnnotationTypes.ts | 86 - .../test/TimePivot/controlPanel.test.ts | 57 - .../test/utils.test.ts | 358 -- .../test/utils/isTruthy.test.ts | 57 - .../test/utils/tokenize.test.ts | 76 - .../legacy-preset-chart-nvd3/tsconfig.json | 21 - .../CHANGELOG.md | 0 .../README.md | 8 +- .../package.json | 8 +- .../src/Calendar.ts | 0 .../src/ReactCalendar.tsx | 0 .../plugin-chart-calendar/src/buildQuery.ts | 53 + .../src/controlPanel.ts | 0 .../src/images/example-dark.jpg | Bin .../src/images/example.jpg | Bin .../src/images/thumbnail-dark.png | Bin .../src/images/thumbnail.png | Bin .../src/images/thumbnailLarge.png | Bin .../src/index.ts | 2 +- .../LegacyPluginChartCalendar.stories.tsx | 4 +- .../src/stories/data.ts | 0 .../src/transformData.ts | 121 + .../src/transformProps.ts | 31 +- .../src/utils.ts | 0 .../src/vendor/cal-heatmap.ts | 0 .../test/buildQuery.test.ts | 53 + .../test/controlPanel.test.ts} | 13 +- .../test/index.test.ts} | 13 +- .../test/transformData.test.ts | 92 + .../test/transformProps.test.ts | 88 + .../test/utils.test.ts | 0 .../tsconfig.json | 0 .../types/external.d.ts | 0 .../CHANGELOG.md | 0 .../README.md | 8 +- .../package.json | 8 +- .../src/Chord.ts | 0 .../src/ReactChord.tsx | 0 .../plugin-chart-chord/src/buildQuery.ts | 47 + .../src/controlPanel.ts | 0 .../src/images/chord-dark.jpg | Bin .../src/images/chord.jpg | Bin .../src/images/thumbnail-dark.png | Bin .../src/images/thumbnail.png | Bin .../src/images/thumbnailLarge.png | Bin .../src/index.ts | 4 +- .../LegacyPluginChartChord.stories.tsx | 4 +- .../src/stories/data.ts | 0 .../plugin-chart-chord/src/transformProps.ts | 89 + .../test/buildQuery.test.ts | 56 + .../test/index.test.ts} | 15 +- .../test/transformProps.test.ts | 94 + .../test/tsconfig.json | 3 +- .../tsconfig.json | 0 .../types/external.d.ts | 0 .../CHANGELOG.md | 0 .../README.md | 8 +- .../package.json | 8 +- .../Country Map GeoJSON Generator.ipynb | 0 .../src/CountryMap.ts | 0 .../src/ReactCountryMap.tsx | 0 .../src/buildQuery.ts | 34 + .../src/controlPanel.ts | 0 .../src/countries.ts | 0 .../src/countries/afghanistan.geojson | 0 .../src/countries/aland.geojson | 0 .../src/countries/albania.geojson | 0 .../src/countries/algeria.geojson | 0 .../src/countries/american_samoa.geojson | 0 .../src/countries/andorra.geojson | 0 .../src/countries/angola.geojson | 0 .../src/countries/anguilla.geojson | 0 .../src/countries/antarctica.geojson | 0 .../src/countries/antigua_and_barbuda.geojson | 0 .../src/countries/argentina.geojson | 0 .../src/countries/armenia.geojson | 0 .../src/countries/australia.geojson | 0 .../src/countries/austria.geojson | 0 .../src/countries/azerbaijan.geojson | 0 .../src/countries/bahrain.geojson | 0 .../src/countries/bangladesh.geojson | 0 .../src/countries/barbados.geojson | 0 .../src/countries/belarus.geojson | 0 .../src/countries/belgium.geojson | 0 .../src/countries/belize.geojson | 0 .../src/countries/benin.geojson | 0 .../src/countries/bermuda.geojson | 0 .../src/countries/bhutan.geojson | 0 .../src/countries/bolivia.geojson | 0 .../countries/bosnia_and_herzegovina.geojson | 0 .../src/countries/botswana.geojson | 0 .../src/countries/brazil.geojson | 0 .../src/countries/brunei.geojson | 0 .../src/countries/bulgaria.geojson | 0 .../src/countries/burkina_faso.geojson | 0 .../src/countries/burundi.geojson | 0 .../src/countries/cambodia.geojson | 0 .../src/countries/cameroon.geojson | 0 .../src/countries/canada.geojson | 0 .../src/countries/cape_verde.geojson | 0 .../central_african_republic.geojson | 0 .../src/countries/chad.geojson | 0 .../src/countries/chile.geojson | 0 .../src/countries/china.geojson | 0 .../src/countries/colombia.geojson | 0 .../src/countries/comoros.geojson | 0 .../src/countries/cook_islands.geojson | 0 .../src/countries/costa_rica.geojson | 0 .../src/countries/croatia.geojson | 0 .../src/countries/cuba.geojson | 0 .../src/countries/cyprus.geojson | 0 .../src/countries/czech_republic.geojson | 0 .../democratic_republic_of_the_congo.geojson | 0 .../src/countries/denmark.geojson | 0 .../src/countries/djibouti.geojson | 0 .../src/countries/dominica.geojson | 0 .../src/countries/dominican_republic.geojson | 0 .../src/countries/ecuador.geojson | 0 .../src/countries/egypt.geojson | 0 .../src/countries/el_salvador.geojson | 0 .../src/countries/equatorial_guinea.geojson | 0 .../src/countries/eritrea.geojson | 0 .../src/countries/estonia.geojson | 0 .../src/countries/ethiopia.geojson | 0 .../src/countries/fiji.geojson | 0 .../src/countries/finland.geojson | 0 .../src/countries/france.geojson | 0 .../src/countries/france_overseas.geojson | 0 .../src/countries/france_regions.geojson | 0 .../src/countries/french_polynesia.geojson | 0 .../src/countries/gabon.geojson | 0 .../src/countries/gambia.geojson | 0 .../src/countries/germany.geojson | 0 .../src/countries/ghana.geojson | 0 .../src/countries/greece.geojson | 0 .../src/countries/greenland.geojson | 0 .../src/countries/grenada.geojson | 0 .../src/countries/guatemala.geojson | 0 .../src/countries/guinea.geojson | 0 .../src/countries/guyana.geojson | 0 .../src/countries/haiti.geojson | 0 .../src/countries/honduras.geojson | 0 .../src/countries/hungary.geojson | 0 .../src/countries/iceland.geojson | 0 .../src/countries/india.geojson | 0 .../src/countries/indonesia.geojson | 0 .../src/countries/iran.geojson | 0 .../src/countries/israel.geojson | 0 .../src/countries/italy.geojson | 0 .../src/countries/italy_regions.geojson | 0 .../src/countries/ivory_coast.geojson | 0 .../src/countries/japan.geojson | 0 .../src/countries/jordan.geojson | 0 .../src/countries/kazakhstan.geojson | 0 .../src/countries/kenya.geojson | 0 .../src/countries/korea.geojson | 0 .../src/countries/kuwait.geojson | 0 .../src/countries/kyrgyzstan.geojson | 0 .../src/countries/laos.geojson | 0 .../src/countries/latvia.geojson | 0 .../src/countries/lebanon.geojson | 0 .../src/countries/lesotho.geojson | 0 .../src/countries/liberia.geojson | 0 .../src/countries/libya.geojson | 0 .../src/countries/liechtenstein.geojson | 0 .../src/countries/lithuania.geojson | 0 .../src/countries/luxembourg.geojson | 0 .../src/countries/macedonia.geojson | 0 .../src/countries/madagascar.geojson | 0 .../src/countries/malawi.geojson | 0 .../src/countries/malaysia.geojson | 0 .../src/countries/maldives.geojson | 0 .../src/countries/mali.geojson | 0 .../src/countries/malta.geojson | 0 .../src/countries/marshall_islands.geojson | 0 .../src/countries/mauritania.geojson | 0 .../src/countries/mauritius.geojson | 0 .../src/countries/mexico.geojson | 0 .../src/countries/moldova.geojson | 0 .../src/countries/mongolia.geojson | 0 .../src/countries/montenegro.geojson | 0 .../src/countries/montserrat.geojson | 0 .../src/countries/morocco.geojson | 0 .../src/countries/mozambique.geojson | 0 .../src/countries/myanmar.geojson | 0 .../src/countries/namibia.geojson | 0 .../src/countries/nauru.geojson | 0 .../src/countries/nepal.geojson | 0 .../src/countries/netherlands.geojson | 0 .../src/countries/new_caledonia.geojson | 0 .../src/countries/new_zealand.geojson | 0 .../src/countries/nicaragua.geojson | 0 .../src/countries/niger.geojson | 0 .../src/countries/nigeria.geojson | 0 .../northern_mariana_islands.geojson | 0 .../src/countries/norway.geojson | 0 .../src/countries/oman.geojson | 0 .../src/countries/pakistan.geojson | 0 .../src/countries/palau.geojson | 0 .../src/countries/panama.geojson | 0 .../src/countries/papua_new_guinea.geojson | 0 .../src/countries/paraguay.geojson | 0 .../src/countries/peru.geojson | 0 .../src/countries/philippines.geojson | 0 .../src/countries/philippines_regions.geojson | 0 .../src/countries/poland.geojson | 0 .../src/countries/portugal.geojson | 0 .../src/countries/qatar.geojson | 0 .../src/countries/republic_of_serbia.geojson | 0 .../src/countries/romania.geojson | 0 .../src/countries/russia.geojson | 0 .../src/countries/rwanda.geojson | 0 .../src/countries/saint_lucia.geojson | 0 .../saint_pierre_and_miquelon.geojson | 0 .../saint_vincent_and_the_grenadines.geojson | 0 .../src/countries/samoa.geojson | 0 .../src/countries/san_marino.geojson | 0 .../countries/sao_tome_and_principe.geojson | 0 .../src/countries/saudi_arabia.geojson | 0 .../src/countries/senegal.geojson | 0 .../src/countries/seychelles.geojson | 0 .../src/countries/sierra_leone.geojson | 0 .../src/countries/singapore.geojson | 0 .../src/countries/slovakia.geojson | 0 .../src/countries/slovenia.geojson | 0 .../src/countries/solomon_islands.geojson | 0 .../src/countries/somalia.geojson | 0 .../src/countries/south_africa.geojson | 0 .../src/countries/spain.geojson | 0 .../src/countries/sri_lanka.geojson | 0 .../src/countries/sudan.geojson | 0 .../src/countries/suriname.geojson | 0 .../src/countries/sweden.geojson | 0 .../src/countries/switzerland.geojson | 0 .../src/countries/syria.geojson | 0 .../src/countries/taiwan.geojson | 0 .../src/countries/tajikistan.geojson | 0 .../src/countries/tanzania.geojson | 0 .../src/countries/thailand.geojson | 0 .../src/countries/the_bahamas.geojson | 0 .../src/countries/timorleste.geojson | 0 .../src/countries/togo.geojson | 0 .../src/countries/tonga.geojson | 0 .../src/countries/trinidad_and_tobago.geojson | 0 .../src/countries/tunisia.geojson | 0 .../src/countries/turkey.geojson | 0 .../src/countries/turkey_regions.geojson | 0 .../src/countries/turkmenistan.geojson | 0 .../turks_and_caicos_islands.geojson | 0 .../src/countries/uganda.geojson | 0 .../src/countries/uk.geojson | 0 .../src/countries/ukraine.geojson | 0 .../countries/united_arab_emirates.geojson | 0 ...ited_states_minor_outlying_islands.geojson | 0 .../united_states_virgin_islands.geojson | 0 .../src/countries/uruguay.geojson | 0 .../src/countries/usa.geojson | 0 .../src/countries/uzbekistan.geojson | 0 .../src/countries/vanuatu.geojson | 0 .../src/countries/venezuela.geojson | 0 .../src/countries/vietnam.geojson | 0 .../src/countries/wallis_and_futuna.geojson | 0 .../src/countries/yemen.geojson | 0 .../src/countries/zambia.geojson | 0 .../src/countries/zimbabwe.geojson | 0 .../src/geojson.d.ts | 0 .../src/images/exampleGermany-dark.jpg | Bin .../src/images/exampleGermany.jpg | Bin .../src/images/exampleUsa-dark.jpg | Bin .../src/images/exampleUsa.jpg | Bin .../src/images/thumbnail-dark.png | Bin .../src/images/thumbnail.png | Bin .../src/images/thumbnailLarge.png | Bin .../src/index.ts | 2 +- .../src/stories/CountryMap.stories.tsx | 4 +- .../src/transformProps.ts | 24 +- .../test/CountryMap.test.tsx | 0 .../test/buildQuery.test.ts | 52 + .../test/index.test.ts | 25 + .../test/transformProps.test.ts | 53 + .../test/tsconfig.json | 8 + .../tsconfig.json | 0 .../types/external.d.ts | 0 .../src/Bullet/EchartsBullet.tsx} | 43 +- .../src/Bullet/buildQuery.ts | 38 + .../src/Bullet/controlPanel.tsx} | 67 +- .../src/Bullet/images/example-dark.jpg | Bin .../src/Bullet/images/example.jpg | Bin .../src/Bullet/images/thumbnail-dark.png | Bin .../src/Bullet/images/thumbnail.png | Bin .../src/Bullet/images/thumbnailLarge.png | Bin .../src/Bullet}/index.ts | 62 +- .../src/Bullet/transformProps.ts | 332 ++ .../plugin-chart-echarts/src/Bullet/types.ts | 53 + .../src/Bullet/utils.ts} | 20 +- .../src/Rose/EchartsRose.tsx | 138 + .../src/Rose/buildQuery.ts | 92 + .../src/Rose}/controlPanel.tsx | 0 .../src/Rose}/images/example1-dark.jpg | Bin .../src/Rose}/images/example1.jpg | Bin .../src/Rose}/images/example2-dark.jpg | Bin .../src/Rose}/images/example2.jpg | Bin .../src/Rose/images/thumbnail-dark.png | Bin 0 -> 49918 bytes .../src/Rose/images/thumbnail.png | Bin 0 -> 48636 bytes .../src/Rose}/images/thumbnailLarge.png | Bin .../src/Rose}/index.ts | 65 +- .../src/Rose/transformData.ts | 142 + .../src/Rose/transformProps.ts | 228 ++ .../plugin-chart-echarts/src/Rose/types.ts | 73 + .../src/TimePivot/EchartsTimePivot.tsx} | 41 +- .../src/TimePivot/buildQuery.ts | 34 + .../src/TimePivot/controlPanel.ts | 210 ++ .../src/TimePivot/images/example-dark.jpg | Bin .../src/TimePivot/images/example.jpg | Bin .../src/TimePivot/images/thumbnail-dark.png | Bin .../src/TimePivot/images/thumbnail.png | Bin .../src/TimePivot/images/thumbnailLarge.png | Bin .../src/TimePivot/index.ts | 55 + .../src/TimePivot/transformData.ts | 187 + .../src/TimePivot/transformProps.ts | 215 ++ .../src/TimePivot/types.ts | 48 + .../src/Timeseries/EchartsTimeseries.tsx | 164 + .../Timeseries/Regular/Line/controlPanel.tsx | 16 + .../src/Timeseries/percentChange.ts | 113 + .../src/Timeseries/transformProps.ts | 20 +- .../plugins/plugin-chart-echarts/src/index.ts | 3 + .../src/utils/legendLayout.test.ts | 77 + .../src/utils/legendLayout.ts | 40 + .../test/Bullet/buildQuery.test.ts | 48 + .../test/Bullet/transformProps.test.ts | 258 ++ .../test/Rose/EchartsRose.test.tsx | 186 + .../test/Rose/buildQuery.test.ts | 95 + .../test/Rose/controlPanel.test.ts | 26 + .../test/Rose/transformData.test.ts | 98 + .../test/Rose/transformProps.test.ts | 195 ++ .../test/TimePivot/transformData.test.ts | 108 + .../test/TimePivot/transformProps.test.ts | 165 + .../Timeseries/EchartsTimeseries.test.tsx | 247 ++ .../test/Timeseries/percentChange.test.ts | 98 + .../test/Timeseries/transformProps.test.ts | 65 + .../CHANGELOG.md | 0 .../README.md | 8 +- .../package.json | 8 +- .../src/HorizonChart.tsx | 0 .../src/HorizonRow.tsx | 0 .../plugin-chart-horizon/src/buildQuery.ts | 43 + .../src/controlPanel.ts | 0 .../src/images/Horizon_Chart-dark.jpg | Bin .../src/images/Horizon_Chart.jpg | Bin .../src/images/thumbnail-dark.png | Bin .../src/images/thumbnail.png | Bin .../src/images/thumbnailLarge.png | Bin .../src/index.ts | 4 +- .../src/stories/Horizon.stories.tsx | 4 +- .../src/stories/data.ts | 0 .../plugin-chart-horizon/src/transformData.ts | Bin 0 -> 4607 bytes .../src/transformProps.ts | 28 +- .../test/HorizonChart.test.tsx | 0 .../test/HorizonRow.test.tsx | 0 .../test/buildQuery.test.ts | 47 + .../test/controlPanel.test.ts} | 16 +- .../test/transformData.test.ts | 100 + .../tsconfig.json | 0 .../types/external.d.ts | 0 .../CHANGELOG.md | 0 .../README.md | 8 +- .../package.json | 13 +- .../src/PairedTTest.tsx | 86 + .../src/TTestTable.tsx | 321 +- .../src/buildQuery.ts | 50 + .../src/controlPanel.ts | 6 +- .../src/images/example-dark.jpg | Bin .../src/images/example.jpg | Bin .../src/images/thumbnail-dark.png | Bin .../src/images/thumbnail.png | Bin .../src/index.ts | 4 +- .../src/statistics.ts | 109 + .../src/stories/TTest.stories.tsx | 4 +- .../src/stories/data.ts | 0 .../src/transformData.ts | 102 + .../src/transformProps.ts | 30 +- .../test/TTestTable.test.tsx | 197 +- .../test/buildQuery.test.ts | 68 + .../test/controlPanel.test.ts | 27 + .../test/pipeline.test.tsx | 98 + .../test/statistics.test.ts | 34 + .../test/transformData.test.ts | 112 + .../test/tsconfig.json | 0 .../tsconfig.json | 0 .../types/external.d.ts | 0 .../CHANGELOG.md | 0 .../README.md | 8 +- .../package.json | 8 +- .../src/ParallelCoordinates.ts | 0 .../src/ReactParallelCoordinates.tsx | 0 .../src/buildQuery.ts | 53 + .../src/controlPanel.ts | 0 .../src/images/example1-dark.jpg | Bin .../src/images/example1.jpg | Bin .../src/images/example2-dark.jpg | Bin .../src/images/example2.jpg | Bin .../src/images/thumbnail-dark.png | Bin .../src/images/thumbnail.png | Bin .../src/images/thumbnailLarge.png | Bin .../src/index.ts | 4 +- .../stories/ParallelCoordinates.stories.tsx | 4 +- .../src/stories/data.ts | 0 .../src/transformProps.ts | 0 .../src/vendor/parcoords/d3.parcoords.ts | 0 .../src/vendor/parcoords/divgrid.ts | 0 .../test/buildQuery.test.ts | 101 + .../test/tsconfig.json | 8 + .../tsconfig.json | 0 .../types/d3-parcoords.d.ts | 0 .../types/d3.d.ts | 0 .../types/external.d.ts | 0 .../CHANGELOG.md | 0 .../README.md | 8 +- .../package.json | 8 +- .../src/OptionDescription.tsx | 0 .../src/Partition.ts | 0 .../src/ReactPartition.tsx | 0 .../plugin-chart-partition/src/buildQuery.ts | 52 + .../src/controlPanel.tsx | 5 + .../src/images/example-dark.jpg | Bin .../src/images/example.jpg | Bin .../src/images/thumbnail-dark.png | Bin .../src/images/thumbnail.png | Bin .../src/images/thumbnailLarge.png | Bin .../src/index.ts | 4 +- .../src/stories/Partition.stories.tsx | 4 +- .../src/stories/data.ts | 0 .../src/transformData.ts | 402 +++ .../src/transformProps.ts | 32 +- .../test/OptionDescription.test.tsx | 0 .../test/buildQuery.test.ts | 65 + .../test/controlPanel.test.ts | 26 + .../test/transformData.test.ts | 150 + .../test/transformProps.test.ts | 78 + .../test/tsconfig.json | 0 .../tsconfig.json | 0 .../types/external.d.ts | 0 .../CHANGELOG.md | 0 .../README.md | 8 +- .../package.json | 8 +- .../src/ReactWorldMap.tsx | 0 .../src/WorldMap.ts | 0 .../plugin-chart-world-map/src/buildQuery.ts | 49 + .../src/controlPanel.ts | 0 .../plugin-chart-world-map/src/countries.ts | 2030 +++++++++++ .../src/images/WorldMap1-dark.jpg | Bin .../src/images/WorldMap1.jpg | Bin .../src/images/WorldMap2-dark.jpg | Bin .../src/images/WorldMap2.jpg | Bin .../src/images/thumbnail-dark.png | Bin .../src/images/thumbnail.png | Bin .../src/images/thumbnailLarge.png | Bin .../src/index.ts | 3 +- .../src/stories/WorldMap.stories.tsx | 4 +- .../src/stories/data.ts | 0 .../src/transformData.ts | 80 + .../src/transformProps.ts | 29 +- .../src/utils.ts | 0 .../test/WorldMap.test.ts | 0 .../test/buildQuery.test.ts | 63 + .../test/transformData.test.ts | 83 + .../test/transformProps.test.ts | 80 + .../plugin-chart-world-map/test/tsconfig.json | 8 + .../tsconfig.json | 0 .../types/external.d.ts | 0 .../src/Multi/Multi.color.test.tsx | 163 +- .../src/Multi/Multi.test.tsx | 852 +++-- .../preset-chart-deckgl/src/Multi/Multi.tsx | 377 ++- .../src/Multi/MultiV1.test.tsx | 227 ++ .../src/Multi/buildQuery.test.ts | 37 + .../src/Multi/buildQuery.ts} | 21 +- .../src/Multi/index.test.ts | 27 + .../preset-chart-deckgl/src/Multi/index.ts | 7 +- .../src/layers/Arc/Arc.test.ts | 76 + .../src/layers/Arc/Arc.tsx | 10 +- .../src/layers/Arc/buildQuery.test.ts} | 34 +- .../src/layers/Polygon/Polygon.tsx | 7 +- .../preset-chart-deckgl/src/utils/explore.ts | 68 - .../preset-chart-deckgl/src/utils/mapbox.ts | 5 + .../scripts/check-custom-rules.js | 4 +- .../scripts/check-storybook-coverage.js | 4 +- .../components/Chart/ChartRenderer.test.tsx | 28 +- .../src/components/Chart/ChartRenderer.tsx | 17 +- .../components/Chart/DrillBy/DrillByModal.tsx | 13 +- .../Chart/DrillBy/DrillBySubmenu.test.tsx | 1 - .../src/components/Chart/chartAction.ts | 96 +- .../src/components/Chart/chartActions.test.ts | 222 +- .../ExploreChartPanel.test.tsx | 1 - .../components/ExploreChartPanel/index.tsx | 56 - .../ExploreViewContainer.test.tsx | 2 - .../AnnotationLayer.tsx | 2 - .../controls/SelectAsyncControl/index.tsx | 3 + .../exploreUtils/exploreUtils.test.tsx | 57 +- .../explore/exploreUtils/exportChart.test.ts | 133 - .../exploreUtils/getExploreUrl.test.ts | 28 +- .../exploreUtils/getURIDirectory.test.ts | 14 +- .../src/explore/exploreUtils/index.ts | 77 +- .../exploreUtils/shouldUseLegacyApi.test.ts | 59 - .../ChartVersionPreview.test.tsx | 4 - .../versionHistory/ChartVersionPreview.tsx | 8 +- .../TimeTable/config/buildQuery.test.ts | 57 + .../TimeTable/config/buildQuery.ts | 49 + .../transformProps/transformData.test.ts | 110 + .../config/transformProps/transformData.ts | 106 + .../config/transformProps/transformProps.ts | 22 +- .../src/visualizations/TimeTable/index.ts | 3 +- .../src/visualizations/presets/MainPreset.ts | 34 +- superset-frontend/tsconfig.json | 22 +- superset-frontend/webpack.config.js | 4 +- superset/async_events/async_query_manager.py | 36 +- superset/charts/api.py | 113 +- superset/cli/viz_migrations.py | 24 +- superset/commands/chart/warm_up_cache.py | 38 +- superset/common/query_context_processor.py | 25 - superset/config.py | 1 - superset/datasets/api.py | 2 +- superset/examples/world_bank.py | 6 +- superset/middleware/legacy_prefix_redirect.py | 8 +- .../migrations/shared/migrate_viz/base.py | 73 +- .../shared/migrate_viz/processors.py | 12 + ...6a7b8c9_migrate_bubble_chart_to_echarts.py | 55 + ...fb61ed_migrate_compare_chart_to_echarts.py | 55 + ...981_merge_compare_chart_migration_with_.py | 35 + ...76740_merge_report_retry_state_columns_.py | 35 + ...merge_report_retry_state_columns_merge_.py | 35 + ...b583_merge_restore_pivot_table_percent_.py | 35 + superset/models/slice.py | 18 +- superset/security/manager.py | 9 +- superset/tasks/async_queries.py | 79 +- superset/views/base.py | 1 + superset/views/core.py | 258 +- superset/views/utils.py | 103 +- superset/viz.py | 2995 ----------------- tests/integration_tests/charts/api_tests.py | 141 +- tests/integration_tests/core_tests.py | 103 +- .../security/guest_token_security_tests.py | 28 +- tests/integration_tests/security_tests.py | 27 +- .../tasks/async_queries_tests.py | 118 - tests/integration_tests/utils_tests.py | 33 +- tests/integration_tests/viz_tests.py | 2456 -------------- .../async_events/async_query_manager_tests.py | 55 - .../charts/data/test_empty_query_context.py | 43 + .../commands/chart/warm_up_cache_test.py | 332 +- .../middleware/test_legacy_prefix_redirect.py | 8 - .../migrations/viz/downgrade_scope_test.py | 56 + .../viz/nvd3_compare_chart_to_echarts_test.py | 41 + .../upgrade_malformed_query_context_test.py | 147 + tests/unit_tests/security/manager_test.py | 3 - tests/unit_tests/tasks/test_async_queries.py | 236 -- tests/unit_tests/test_subdirectory_url_for.py | 13 - tests/unit_tests/test_viz_cache_key.py | 111 - tests/unit_tests/test_viz_get_df_payload.py | 244 -- tests/unit_tests/test_viz_query_obj.py | 57 - 620 files changed, 12961 insertions(+), 17622 deletions(-) create mode 100644 superset-frontend/packages/superset-ui-chart-controls/src/utils/buildSortMetricOrderby.ts create mode 100644 superset-frontend/packages/superset-ui-chart-controls/test/utils/buildSortMetricOrderby.test.ts delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/PairedTTest.tsx delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/CHANGELOG.md delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/README.md delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/package.json delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/ReactRose.tsx delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/Rose.ts delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/images/thumbnail-dark.png delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/images/thumbnail.png delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/Rose.stories.tsx delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/data.ts delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-world-map/tsconfig.json delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/CHANGELOG.md delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/README.md delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/package.json delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/NVD3BoxPlot.stories.tsx delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/data.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/controlPanel.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/example-dark.jpg delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/example.jpg delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnail-dark.png delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnail.png delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnailLarge.png delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/stories/NVD3Bubble.stories.tsx delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/stories/data.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/index.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/stories/NVD3Bullet.stories.tsx delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/controlPanel.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/example-dark.jpg delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/example.jpg delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/thumbnail-dark.png delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/thumbnail.png delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/thumbnailLarge.png delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/index.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/NVD3Compare.stories.tsx delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/data.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Controls.tsx delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Vis.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/PropTypes.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/ReactNVD3.tsx delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/controlPanel.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/index.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/preset.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/transformProps.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/utils.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/src/vendor/superset/AnnotationTypes.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/test/TimePivot/controlPanel.test.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/test/utils.test.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/test/utils/isTruthy.test.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/test/utils/tokenize.test.ts delete mode 100644 superset-frontend/plugins/legacy-preset-chart-nvd3/tsconfig.json rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/CHANGELOG.md (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/README.md (76%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/package.json (76%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/Calendar.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/ReactCalendar.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-calendar/src/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/controlPanel.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/images/example-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/images/example.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/index.ts (97%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/stories/LegacyPluginChartCalendar.stories.tsx (96%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/stories/data.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-calendar/src/transformData.ts rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/transformProps.ts (71%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/utils.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/src/vendor/cal-heatmap.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-calendar/test/buildQuery.test.ts rename superset-frontend/plugins/{legacy-plugin-chart-world-map/types/external.d.ts => plugin-chart-calendar/test/controlPanel.test.ts} (79%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3/src/index.ts => plugin-chart-calendar/test/index.test.ts} (73%) create mode 100644 superset-frontend/plugins/plugin-chart-calendar/test/transformData.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-calendar/test/transformProps.test.ts rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/test/utils.test.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-calendar => plugin-chart-calendar}/types/external.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/CHANGELOG.md (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/README.md (77%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/package.json (75%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/Chord.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/ReactChord.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-chord/src/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/controlPanel.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/images/chord-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/images/chord.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/index.ts (94%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/stories/LegacyPluginChartChord.stories.tsx (94%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/src/stories/data.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-chord/src/transformProps.ts create mode 100644 superset-frontend/plugins/plugin-chart-chord/test/buildQuery.test.ts rename superset-frontend/plugins/{legacy-preset-chart-nvd3/src/utils/isTruthy.ts => plugin-chart-chord/test/index.test.ts} (74%) create mode 100644 superset-frontend/plugins/plugin-chart-chord/test/transformProps.test.ts rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-chord}/test/tsconfig.json (74%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-chord => plugin-chart-chord}/types/external.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/CHANGELOG.md (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/README.md (78%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/package.json (74%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/scripts/Country Map GeoJSON Generator.ipynb (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/CountryMap.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/ReactCountryMap.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-country-map/src/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/controlPanel.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/afghanistan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/aland.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/albania.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/algeria.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/american_samoa.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/andorra.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/angola.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/anguilla.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/antarctica.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/antigua_and_barbuda.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/argentina.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/armenia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/australia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/austria.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/azerbaijan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/bahrain.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/bangladesh.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/barbados.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/belarus.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/belgium.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/belize.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/benin.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/bermuda.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/bhutan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/bolivia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/bosnia_and_herzegovina.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/botswana.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/brazil.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/brunei.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/bulgaria.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/burkina_faso.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/burundi.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/cambodia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/cameroon.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/canada.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/cape_verde.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/central_african_republic.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/chad.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/chile.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/china.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/colombia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/comoros.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/cook_islands.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/costa_rica.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/croatia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/cuba.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/cyprus.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/czech_republic.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/democratic_republic_of_the_congo.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/denmark.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/djibouti.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/dominica.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/dominican_republic.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/ecuador.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/egypt.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/el_salvador.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/equatorial_guinea.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/eritrea.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/estonia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/ethiopia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/fiji.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/finland.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/france.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/france_overseas.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/france_regions.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/french_polynesia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/gabon.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/gambia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/germany.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/ghana.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/greece.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/greenland.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/grenada.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/guatemala.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/guinea.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/guyana.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/haiti.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/honduras.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/hungary.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/iceland.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/india.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/indonesia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/iran.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/israel.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/italy.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/italy_regions.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/ivory_coast.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/japan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/jordan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/kazakhstan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/kenya.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/korea.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/kuwait.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/kyrgyzstan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/laos.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/latvia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/lebanon.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/lesotho.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/liberia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/libya.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/liechtenstein.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/lithuania.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/luxembourg.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/macedonia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/madagascar.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/malawi.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/malaysia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/maldives.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/mali.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/malta.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/marshall_islands.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/mauritania.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/mauritius.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/mexico.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/moldova.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/mongolia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/montenegro.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/montserrat.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/morocco.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/mozambique.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/myanmar.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/namibia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/nauru.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/nepal.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/netherlands.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/new_caledonia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/new_zealand.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/nicaragua.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/niger.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/nigeria.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/northern_mariana_islands.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/norway.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/oman.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/pakistan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/palau.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/panama.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/papua_new_guinea.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/paraguay.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/peru.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/philippines.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/philippines_regions.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/poland.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/portugal.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/qatar.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/republic_of_serbia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/romania.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/russia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/rwanda.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/saint_lucia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/saint_pierre_and_miquelon.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/saint_vincent_and_the_grenadines.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/samoa.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/san_marino.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/sao_tome_and_principe.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/saudi_arabia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/senegal.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/seychelles.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/sierra_leone.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/singapore.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/slovakia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/slovenia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/solomon_islands.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/somalia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/south_africa.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/spain.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/sri_lanka.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/sudan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/suriname.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/sweden.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/switzerland.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/syria.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/taiwan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/tajikistan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/tanzania.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/thailand.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/the_bahamas.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/timorleste.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/togo.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/tonga.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/trinidad_and_tobago.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/tunisia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/turkey.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/turkey_regions.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/turkmenistan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/turks_and_caicos_islands.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/uganda.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/uk.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/ukraine.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/united_arab_emirates.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/united_states_minor_outlying_islands.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/united_states_virgin_islands.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/uruguay.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/usa.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/uzbekistan.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/vanuatu.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/venezuela.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/vietnam.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/wallis_and_futuna.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/yemen.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/zambia.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/countries/zimbabwe.geojson (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/geojson.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/images/exampleGermany-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/images/exampleGermany.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/images/exampleUsa-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/images/exampleUsa.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/index.ts (97%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/stories/CountryMap.stories.tsx (96%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/src/transformProps.ts (69%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/test/CountryMap.test.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/buildQuery.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/index.test.ts rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/test/transformProps.test.ts (66%) create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/tsconfig.json rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-country-map => plugin-chart-country-map}/types/external.d.ts (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3/types/external.d.ts => plugin-chart-echarts/src/Bullet/EchartsBullet.tsx} (59%) create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Bullet/buildQuery.ts rename superset-frontend/plugins/{legacy-preset-chart-nvd3/src/Bullet/controlPanel.ts => plugin-chart-echarts/src/Bullet/controlPanel.tsx} (51%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/Bullet/images/example-dark.jpg (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/Bullet/images/example.jpg (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/Bullet/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/Bullet/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/Bullet/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3/src/Bubble => plugin-chart-echarts/src/Bullet}/index.ts (56%) create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Bullet/transformProps.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Bullet/types.ts rename superset-frontend/plugins/{legacy-preset-chart-nvd3/src/utils/tokenize.ts => plugin-chart-echarts/src/Bullet/utils.ts} (66%) create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Rose/EchartsRose.tsx create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Rose/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-rose/src => plugin-chart-echarts/src/Rose}/controlPanel.tsx (100%) rename superset-frontend/plugins/{legacy-plugin-chart-rose/src => plugin-chart-echarts/src/Rose}/images/example1-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-rose/src => plugin-chart-echarts/src/Rose}/images/example1.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-rose/src => plugin-chart-echarts/src/Rose}/images/example2-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-rose/src => plugin-chart-echarts/src/Rose}/images/example2.jpg (100%) create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Rose/images/thumbnail-dark.png create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Rose/images/thumbnail.png rename superset-frontend/plugins/{legacy-plugin-chart-rose/src => plugin-chart-echarts/src/Rose}/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-rose/src => plugin-chart-echarts/src/Rose}/index.ts (52%) create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Rose/transformData.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Rose/transformProps.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Rose/types.ts rename superset-frontend/plugins/{legacy-plugin-chart-rose/src/transformProps.ts => plugin-chart-echarts/src/TimePivot/EchartsTimePivot.tsx} (59%) create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/TimePivot/buildQuery.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/TimePivot/controlPanel.ts rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/TimePivot/images/example-dark.jpg (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/TimePivot/images/example.jpg (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/TimePivot/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/TimePivot/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-preset-chart-nvd3 => plugin-chart-echarts}/src/TimePivot/images/thumbnailLarge.png (100%) create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/TimePivot/index.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/TimePivot/transformData.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/TimePivot/transformProps.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/TimePivot/types.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/percentChange.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/utils/legendLayout.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Bullet/buildQuery.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Bullet/transformProps.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Rose/EchartsRose.test.tsx create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Rose/buildQuery.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Rose/controlPanel.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Rose/transformData.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Rose/transformProps.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/TimePivot/transformData.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/TimePivot/transformProps.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/EchartsTimeseries.test.tsx create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/percentChange.test.ts rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/CHANGELOG.md (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/README.md (76%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/package.json (75%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/HorizonChart.tsx (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/HorizonRow.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-horizon/src/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/controlPanel.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/images/Horizon_Chart-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/images/Horizon_Chart.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/index.ts (96%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/stories/Horizon.stories.tsx (93%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/stories/data.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-horizon/src/transformData.ts rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/src/transformProps.ts (63%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/test/HorizonChart.test.tsx (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/test/HorizonRow.test.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-horizon/test/buildQuery.test.ts rename superset-frontend/plugins/{legacy-preset-chart-nvd3/src/Bullet/stories/data.ts => plugin-chart-horizon/test/controlPanel.test.ts} (78%) create mode 100644 superset-frontend/plugins/plugin-chart-horizon/test/transformData.test.ts rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-horizon => plugin-chart-horizon}/types/external.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/CHANGELOG.md (100%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/README.md (75%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/package.json (63%) create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/src/PairedTTest.tsx rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/TTestTable.tsx (53%) create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/src/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/controlPanel.ts (89%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/images/example-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/images/example.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/index.ts (94%) create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/src/statistics.ts rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/stories/TTest.stories.tsx (93%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/stories/data.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/src/transformData.ts rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/src/transformProps.ts (63%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/test/TTestTable.test.tsx (53%) create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/test/buildQuery.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/test/controlPanel.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/test/pipeline.test.tsx create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/test/statistics.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-paired-t-test/test/transformData.test.ts rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-paired-t-test}/test/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-paired-t-test => plugin-chart-paired-t-test}/types/external.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/CHANGELOG.md (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/README.md (74%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/package.json (72%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/ParallelCoordinates.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/ReactParallelCoordinates.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-parallel-coordinates/src/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/controlPanel.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/images/example1-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/images/example1.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/images/example2-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/images/example2.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/index.ts (95%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/stories/ParallelCoordinates.stories.tsx (92%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/stories/data.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/transformProps.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/vendor/parcoords/d3.parcoords.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/src/vendor/parcoords/divgrid.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-parallel-coordinates/test/buildQuery.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-parallel-coordinates/test/tsconfig.json rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/types/d3-parcoords.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/types/d3.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-parallel-coordinates => plugin-chart-parallel-coordinates}/types/external.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/CHANGELOG.md (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/README.md (76%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/package.json (77%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/OptionDescription.tsx (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/Partition.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/ReactPartition.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-partition/src/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/controlPanel.tsx (98%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/images/example-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/images/example.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/index.ts (93%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/stories/Partition.stories.tsx (95%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/stories/data.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-partition/src/transformData.ts rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/src/transformProps.ts (65%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/test/OptionDescription.test.tsx (100%) create mode 100644 superset-frontend/plugins/plugin-chart-partition/test/buildQuery.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-partition/test/controlPanel.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-partition/test/transformData.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-partition/test/transformProps.test.ts rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/test/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-partition => plugin-chart-partition}/types/external.d.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/CHANGELOG.md (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/README.md (76%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/package.json (77%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/ReactWorldMap.tsx (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/WorldMap.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-world-map/src/buildQuery.ts rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/controlPanel.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-world-map/src/countries.ts rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/images/WorldMap1-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/images/WorldMap1.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/images/WorldMap2-dark.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/images/WorldMap2.jpg (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/images/thumbnail-dark.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/images/thumbnail.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/images/thumbnailLarge.png (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/index.ts (97%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/stories/WorldMap.stories.tsx (92%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/stories/data.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-world-map/src/transformData.ts rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/transformProps.ts (71%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/src/utils.ts (100%) rename superset-frontend/plugins/{legacy-plugin-chart-world-map => plugin-chart-world-map}/test/WorldMap.test.ts (100%) create mode 100644 superset-frontend/plugins/plugin-chart-world-map/test/buildQuery.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-world-map/test/transformData.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-world-map/test/transformProps.test.ts create mode 100644 superset-frontend/plugins/plugin-chart-world-map/test/tsconfig.json rename superset-frontend/plugins/{legacy-plugin-chart-rose => plugin-chart-world-map}/tsconfig.json (100%) rename superset-frontend/plugins/{legacy-plugin-chart-rose => plugin-chart-world-map}/types/external.d.ts (100%) create mode 100644 superset-frontend/plugins/preset-chart-deckgl/src/Multi/MultiV1.test.tsx create mode 100644 superset-frontend/plugins/preset-chart-deckgl/src/Multi/buildQuery.test.ts rename superset-frontend/plugins/{legacy-plugin-chart-chord/src/transformProps.ts => preset-chart-deckgl/src/Multi/buildQuery.ts} (67%) create mode 100644 superset-frontend/plugins/preset-chart-deckgl/src/Multi/index.test.ts create mode 100644 superset-frontend/plugins/preset-chart-deckgl/src/layers/Arc/Arc.test.ts rename superset-frontend/{src/explore/exploreUtils/getLegacyEndpointType.test.ts => plugins/preset-chart-deckgl/src/layers/Arc/buildQuery.test.ts} (55%) delete mode 100644 superset-frontend/plugins/preset-chart-deckgl/src/utils/explore.ts delete mode 100644 superset-frontend/src/explore/exploreUtils/shouldUseLegacyApi.test.ts create mode 100644 superset-frontend/src/visualizations/TimeTable/config/buildQuery.test.ts create mode 100644 superset-frontend/src/visualizations/TimeTable/config/buildQuery.ts create mode 100644 superset-frontend/src/visualizations/TimeTable/config/transformProps/transformData.test.ts create mode 100644 superset-frontend/src/visualizations/TimeTable/config/transformProps/transformData.ts create mode 100644 superset/migrations/versions/2026-07-02_21-00_d4e5f6a7b8c9_migrate_bubble_chart_to_echarts.py create mode 100644 superset/migrations/versions/2026-07-02_21-30_88360afb61ed_migrate_compare_chart_to_echarts.py create mode 100644 superset/migrations/versions/2026-07-31_12-52_9d744c5dd981_merge_compare_chart_migration_with_.py create mode 100644 superset/migrations/versions/2026-08-04_10-17_0b99fc576740_merge_report_retry_state_columns_.py create mode 100644 superset/migrations/versions/2026-08-05_20-00_0be4b8f436f2_merge_report_retry_state_columns_merge_.py create mode 100644 superset/migrations/versions/2026-08-05_23-03_4f145192b583_merge_restore_pivot_table_percent_.py delete mode 100644 superset/viz.py delete mode 100644 tests/integration_tests/viz_tests.py create mode 100644 tests/unit_tests/charts/data/test_empty_query_context.py create mode 100644 tests/unit_tests/migrations/viz/downgrade_scope_test.py create mode 100644 tests/unit_tests/migrations/viz/nvd3_compare_chart_to_echarts_test.py create mode 100644 tests/unit_tests/migrations/viz/upgrade_malformed_query_context_test.py delete mode 100644 tests/unit_tests/test_viz_cache_key.py delete mode 100644 tests/unit_tests/test_viz_get_df_payload.py delete mode 100644 tests/unit_tests/test_viz_query_obj.py diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bbfada4582d..34512702bc7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -34,7 +34,7 @@ **/*.geojson @villebro @rusackas **/*.ipynb @villebro @rusackas -/superset-frontend/plugins/legacy-plugin-chart-country-map/ @villebro @rusackas +/superset-frontend/plugins/plugin-chart-country-map/ @villebro @rusackas # Notify translation maintainers of changes to translations diff --git a/.gitignore b/.gitignore index 2c721332df7..94b6b7c0f7a 100644 --- a/.gitignore +++ b/.gitignore @@ -138,6 +138,7 @@ PROJECT.md .aider* .claude_rc* .claude/settings.local.json +.claude/worktrees/ .env.local oxc-custom-build/ *.code-workspace diff --git a/UPDATING.md b/UPDATING.md index 9ce53e4306a..28617c43c5c 100644 --- a/UPDATING.md +++ b/UPDATING.md @@ -289,6 +289,10 @@ are the intended model going forward; deprecating and removing implicit viewersh in a later major version. - [41044](https://github.com/apache/superset/issues/41044): Removes the deprecated `AVOID_COLORS_COLLISION` feature flag (it defaulted to `True`). Color-collision avoidance is now permanently enabled; any config override setting it to `False` is ignored. +- [41714](https://github.com/apache/superset/pull/41714): **Breaking — the legacy `explore_json` chart-data pipeline is removed** at its long-declared `5.0.0` EOL. The `/superset/explore_json/` and `/superset/explore_json/data/` endpoints, `superset/viz.py`, the `Slice.viz` property, the `get_viz` factory, the `load_explore_json_into_cache` celery task and the `viz=` overload of `security_manager.raise_for_access` are gone. Anything importing `superset.viz` must migrate to the QueryContext / `pandas_postprocessing` pipeline behind `/api/v1/chart/data`. All 15 remaining legacy charts were migrated first: most keep their `viz_type` and renderer (no action needed for saved charts), while saved nvd3 Bubble charts are auto-migrated to the ECharts Bubble Chart (`bubble_v2`) and saved "Time-series Percent Change" (`compare`) charts to the ECharts Line Chart, which restores the nvd3 renderer's interactive percent re-basing via a draggable baseline. The deck.gl Multiple Layers chart now fetches its layers entirely client-side, refitting the viewport as each layer's data arrives, and caps the number of sub-slices fanned out per chart at `DECK_MULTI_MAX_SLICES` (default 50, configurable); dashboard filter badges no longer aggregate child-layer filter metadata. + +- [41714](https://github.com/apache/superset/pull/41714): Charts migrated in place keep a `NULL` saved query context until they are next opened in Explore (which regenerates it automatically) or re-saved. Until then, cache warm-up and annotation layers referencing such a chart report an actionable error rather than warming/rendering; opening the chart once resolves it. +- [41714](https://github.com/apache/superset/pull/41714): **Breaking for third-party viz plugins** — the `useLegacyApi` field of `ChartMetadata` in `@superset-ui/core` is removed. Plugins that set it must provide a `buildQuery` and consume `/api/v1/chart/data`. The migrated first-party packages also drop their `legacy-` prefix: `@superset-ui/legacy-plugin-chart-{calendar,chord,country-map,horizon,paired-t-test,parallel-coordinates,partition,rose,world-map}` → `@superset-ui/plugin-chart-*`, and `@superset-ui/legacy-preset-chart-nvd3` → `@superset-ui/preset-chart-nvd3`. The `can_explore_json` permission is no longer created or granted; custom roles referencing it should switch to the `can_read` permissions on `Chart`. - [41813](https://github.com/apache/superset/pull/41813): `redis` (the Python client, `redis-py`) is bumped from 5.3.1 to 8.0.1. redis-py 8 changes several connection defaults; Superset's own Redis-backed features (`GLOBAL_ASYNC_QUERIES_CACHE_BACKEND`, `DISTRIBUTED_COORDINATION_CONFIG`, and the MCP Redis store) explicitly pin the pre-upgrade behavior so this bump is a no-op for them: the wire protocol stays RESP2 (not the new RESP3 default, which requires Redis/Sentinel 6+ to speak `HELLO`) and there is still no socket timeout by default (redis-py 8 defaults to 5s, which could otherwise newly time out large cached payloads or slow networks). The no-timeout default can now be overridden via two new config keys, `CACHE_REDIS_SOCKET_TIMEOUT` / `CACHE_REDIS_SOCKET_CONNECT_TIMEOUT`, on any `CacheConfig` dict using `CACHE_TYPE: RedisCache` or `RedisSentinelCache`. Separately, redis-py 6+ changed the default for `ssl_check_hostname` from `False` to `True` for SSL connections using `ssl_cert_reqs="required"` (the default) — this is a security improvement, so it has **not** been reverted; deployments with `CACHE_REDIS_SSL=True` whose certificates lack a hostname matching the connection address should set `CACHE_REDIS_SSL_CERT_REQS="none"` (disables cert verification entirely, matching hostname-check bypass) or replace the certificate. General-purpose cache/results backends configured via `CACHE_CONFIG` / `DATA_CACHE_CONFIG` / `RESULTS_BACKEND` with `CACHE_TYPE: RedisCache` go through `flask-caching`'s own Redis backend (outside Superset's code) and are subject to the same new defaults; pass `socket_timeout` / `protocol` via `CACHE_OPTIONS` there if needed. Celery broker and result-backend connections (built by `kombu`, also outside Superset's code) keep their no-socket-timeout behavior (`kombu` passes `socket_timeout=None` explicitly) but do **not** pin the wire protocol, so they follow redis-py's RESP3 default — which requires a Redis server new enough to speak `HELLO` (Redis 6+). Deployments using a pre-6.0 Redis server (EOL) as a Celery broker should upgrade the server before taking this bump. @@ -308,7 +312,7 @@ in a later major version. - **`SqlaTable.sql_url` query-string format.** `SqlaTable.sql_url` now URL-encodes `table_name` and joins it as a query parameter rather than concatenating a second `?`. Previously, with `Database.sql_url` returning `/sqllab/?dbid=`, the concatenation produced `/sqllab/?dbid=?table_name=` — a malformed second `?` that broke the query parser. External code that parsed the legacy `?table_name=` shape now sees properly percent-encoded values (e.g. `/` → `%2F`, ` ` → `+` or `%20`); decode with `urllib.parse.parse_qsl`. -- **New config flag `EMBEDDED_DISABLE_PERMALINK_ORIGIN_REWRITE` (default `False`).** Share/permalink URLs now substitute `window.location.origin` for the backend-supplied origin so a proxied or subdirectory-deployed Superset never hands the user an unreachable internal hostname. Operators whose reverse proxy correctly forwards `X-Forwarded-Host` *and* who want permalinks to carry the backend's literal origin can opt out by setting `EMBEDDED_DISABLE_PERMALINK_ORIGIN_REWRITE = True` in `superset_config.py`. Default `False` (rewrite is on); flipping the default would regress the dominant proxied/subdir deployment to an unreachable host. +- **New config flag `EMBEDDED_DISABLE_PERMALINK_ORIGIN_REWRITE` (default `False`).** Share/permalink URLs now substitute `window.location.origin` for the backend-supplied origin so a proxied or subdirectory-deployed Superset never hands the user an unreachable internal hostname. Operators whose reverse proxy correctly forwards `X-Forwarded-Host` _and_ who want permalinks to carry the backend's literal origin can opt out by setting `EMBEDDED_DISABLE_PERMALINK_ORIGIN_REWRITE = True` in `superset_config.py`. Default `False` (rewrite is on); flipping the default would regress the dominant proxied/subdir deployment to an unreachable host. - [41651](https://github.com/apache/superset/pull/41651): **New do-not-translate standard for translation catalogs.** Strings that must stay identical to the source — icon names (e.g. `bolt`), enum/option values (`step-after`), SQL keywords, API field names (`error_message`), code constants, and example placeholders — are now marked with a `#. do-not-translate` extracted comment. The list lives in the `superset/translations/do-not-translate.txt` registry; `scripts/translations/apply_do_not_translate.py` stamps the marker onto `messages.pot` during `babel_update.sh`, and `pybabel update` propagates it to every `.po`, so the status is consistent across all languages. The AI backfill (`backfill_po.py`) and translators leave these entries untranslated (source fallback). The legacy per-catalog convention (a `# Не переводить` translator comment in the `ru` catalog) is still honored for back-compat but is superseded by this standard; contributors adding new machine-read strings should add the msgid to the registry rather than annotating individual catalogs. @@ -345,7 +349,7 @@ Theme tokens are unaffected — antd 6 removed none of the tokens Superset expos ### Guest-token RLS rules reject unknown fields -The `rls` rules passed to `POST /api/v1/security/guest_token/` are now validated strictly: a rule may only contain `dataset` and `clause`. Previously unknown fields were silently dropped, so a mistyped or legacy scope key (most commonly `datasource` instead of `dataset`) produced a rule with no `dataset`, which is treated as a *global* rule applied to every dataset the embedded resource can reach. Such a request now returns HTTP 400 identifying the offending field instead of issuing a token with an unintended global rule. Integrators that were sending extra fields in RLS rules must remove them; valid dataset-scoped (`{"dataset": 41, "clause": "..."}`) and global (`{"clause": "..."}`) rules are unaffected. +The `rls` rules passed to `POST /api/v1/security/guest_token/` are now validated strictly: a rule may only contain `dataset` and `clause`. Previously unknown fields were silently dropped, so a mistyped or legacy scope key (most commonly `datasource` instead of `dataset`) produced a rule with no `dataset`, which is treated as a _global_ rule applied to every dataset the embedded resource can reach. Such a request now returns HTTP 400 identifying the offending field instead of issuing a token with an unintended global rule. Integrators that were sending extra fields in RLS rules must remove them; valid dataset-scoped (`{"dataset": 41, "clause": "..."}`) and global (`{"clause": "..."}`) rules are unaffected. ### MCP service requires `MCP_JWT_AUDIENCE` when JWT auth is enabled @@ -443,6 +447,7 @@ ALTER TABLE tagged_object DROP CONSTRAINT ; -- MySQL: find names via `SHOW CREATE TABLE tagged_object;` ALTER TABLE tagged_object DROP FOREIGN KEY ; ``` + ### Entity version-history infrastructure (gated off by default) Introduces the schema and SQLAlchemy-Continuum wiring that captures version history for charts, dashboards, and datasets, plus read-only `GET /api/v1/{chart,dashboard,dataset}//versions/` endpoints. This ships **inert**: a new config flag `ENABLE_VERSIONING_CAPTURE` defaults to `False`, so no save writes any version rows and the endpoints return empty. It is an operational kill-switch (a release toggle that becomes a permanent ops switch), not a feature flag — set it to `True` to enable capture once validated. The migration is additive; existing entity `PUT` responses gain `old_version_uuid` / `new_version_uuid` body fields and an `ETag` header (both null/absent when capture is off). @@ -459,12 +464,12 @@ These are behavior changes that take effect on upgrade regardless of `ENABLE_VER A read-only companion to the version-history endpoints: each entity type gains a `GET /api/v1/{chart,dashboard,dataset}//activity/` endpoint returning a chronological, access-filtered stream of edits — the entity's own edits plus, for charts and dashboards, transitive edits to related entities during their association windows. Datasets have no related layer in V2, so `include=related` returns an empty stream for a dataset and `include=all` reduces to the dataset's own edits. -| Param | Type | Default | Purpose | -|---|---|---|---| -| `since` / `until` | ISO 8601 | — | Bound `issued_at` | -| `include` | `self` \| `related` \| `all` | `all` | Own edits, related edits, or both | -| `q` | string | — | Case-insensitive search over the full history, applied before pagination (so `count` reflects matches) | -| `page` / `page_size` | integer | `0` / `25` | Pagination (`page_size` clamped to 200) | +| Param | Type | Default | Purpose | +| -------------------- | ---------------------------- | ---------- | ------------------------------------------------------------------------------------------------------ | +| `since` / `until` | ISO 8601 | — | Bound `issued_at` | +| `include` | `self` \| `related` \| `all` | `all` | Own edits, related edits, or both | +| `q` | string | — | Case-insensitive search over the full history, applied before pagination (so `count` reflects matches) | +| `page` / `page_size` | integer | `0` / `25` | Pagination (`page_size` clamped to 200) | Authorization reuses the resource's `can_read` permission and per-object `raise_for_access`; related-entity rows are visibility-filtered to what the caller may see. The stream is empty unless version capture is on (`ENABLE_VERSIONING_CAPTURE`). @@ -548,6 +553,7 @@ Operators can tune or disable the policy via config: ### Data uploads bounded by UPLOAD_MAX_FILE_SIZE_BYTES Single data-file uploads (CSV, Excel, columnar) are now bounded by the `UPLOAD_MAX_FILE_SIZE_BYTES` config option, which defaults to `100 * 1024 * 1024` (100 MB). Files larger than this are rejected with a `413` before their contents are buffered into memory. Set `UPLOAD_MAX_FILE_SIZE_BYTES = None` to disable the check and restore unbounded uploads. + ### Currency symbol position follows the locale when unset When a chart's currency control leaves the **Prefix or suffix** field empty, the currency symbol position is now derived from the deployment locale's own convention via `Intl.NumberFormat` instead of always defaulting to a suffix. For example, under the default `en-US` locale `USD`, `GBP`, and `EUR` render as a prefix (`$ 1,000`), while eurozone locales such as `fr-FR` render `EUR` as a suffix (`1 000 €`). An explicit Prefix/Suffix selection is always honored and is unaffected. @@ -673,7 +679,7 @@ SQLALCHEMY_ENCRYPTED_FIELD_ENGINE = "aes" ```bash superset re-encrypt-secrets --engine aes-gcm ``` - A live instance keeps writing *new* secrets as AES-CBC during the window between step 2 and the restart in step 4; this second pass sweeps those up (it is idempotent, so already-migrated values are skipped). + A live instance keeps writing _new_ secrets as AES-CBC during the window between step 2 and the restart in step 4; this second pass sweeps those up (it is idempotent, so already-migrated values are skipped). Schedule the cutover in a quiet window. Runtime reads use only the single configured engine, so in a multi-worker deployment there is an unavoidable brief decrypt-outage between the migration commit and the last worker restarting with the new config — each migrator run is transactional, but the fleet-wide cutover is not zero-downtime. @@ -701,11 +707,11 @@ With the flag enabled: `DELETE /api/v1/dataset/` no longer hard-deletes the **Schema migration:** the migration adds a nullable `deleted_at` column and an index on it (`ix_tables_deleted_at`) to the `tables` table. The column add is instant; the index build runs inline (no `CONCURRENTLY`) and may briefly block writes on the `tables` table (INSERT/UPDATE/DELETE are queued while the index builds; reads are unaffected) on large Postgres deployments. MySQL InnoDB builds the index online (no blocking). Production deployments with many thousands of datasets should run this migration during a maintenance window. -**Rollback note:** if the application code is rolled back after datasets have been soft-deleted, the older code path's visibility filter no longer applies and previously hidden rows become visible to the older code. Pair the rollback with a data decision (restore the rows, hard-delete them, or also downgrade the migration) rather than assuming the old hard-delete semantics still hold. **Downgrading the migration destroys the deletion markers**: `downgrade()` drops the `deleted_at` column, so any not-yet-restored soft-deleted datasets silently become live, active datasets with no record they were ever deleted. Reconcile the trash (restore or hard-delete each row) *before* downgrading, and disable the `SOFT_DELETE` flag first so no new soft deletes land mid-rollback. +**Rollback note:** if the application code is rolled back after datasets have been soft-deleted, the older code path's visibility filter no longer applies and previously hidden rows become visible to the older code. Pair the rollback with a data decision (restore the rows, hard-delete them, or also downgrade the migration) rather than assuming the old hard-delete semantics still hold. **Downgrading the migration destroys the deletion markers**: `downgrade()` drops the `deleted_at` column, so any not-yet-restored soft-deleted datasets silently become live, active datasets with no record they were ever deleted. Reconcile the trash (restore or hard-delete each row) _before_ downgrading, and disable the `SOFT_DELETE` flag first so no new soft deletes land mid-rollback. **SQL Lab / dataset-creation flows:** creating a dataset over a table whose dataset sits in the trash is refused. The SQL Lab "save as dataset" flow (`get_or_create_dataset`) and file uploads return a **422 naming the hidden twin and the restore endpoint**; the plain create, update, and duplicate paths currently fail with the generic "already exists" 422. In all cases the remediation is the same: restore the hidden dataset (or use a different table name). Perm-string maintenance also covers hidden rows: renaming a database rewrites `perm`/`schema_perm`/`catalog_perm` on soft-deleted datasets and their charts, so a later restore does not resurrect stale permission strings. -**Importer behavior:** importing a dataset YAML whose UUID matches an existing **soft-deleted** dataset is treated as an implicit restore-with-update — **and this happens even when `overwrite` is not set**. This is a deliberate asymmetry with active rows: an active dataset imported without `overwrite=true` is returned unchanged, but a soft-deleted UUID match is restored *and* has the upload's contents applied regardless of the `overwrite` argument, on the reasoning that re-importing a deleted dataset's exact UUID is an explicit request to bring it back. The restore preserves the original PK, the chart back-reference, `table_columns`, and `sql_metrics`. Non-editors get `ImportFailedError`. Callers without `can_write` get `ImportFailedError` instead of silently receiving the soft-deleted row. +**Importer behavior:** importing a dataset YAML whose UUID matches an existing **soft-deleted** dataset is treated as an implicit restore-with-update — **and this happens even when `overwrite` is not set**. This is a deliberate asymmetry with active rows: an active dataset imported without `overwrite=true` is returned unchanged, but a soft-deleted UUID match is restored _and_ has the upload's contents applied regardless of the `overwrite` argument, on the reasoning that re-importing a deleted dataset's exact UUID is an explicit request to bring it back. The restore preserves the original PK, the chart back-reference, `table_columns`, and `sql_metrics`. Non-editors get `ImportFailedError`. Callers without `can_write` get `ImportFailedError` instead of silently receiving the soft-deleted row. **Uniqueness-validation changes that apply regardless of the feature flag:** two dataset uniqueness checks were tightened alongside this work and are active even with `SOFT_DELETE` off. (1) Create/update uniqueness treats a dataset whose `catalog` is `NULL` as belonging to the database's default catalog, so a legacy twin pair (`catalog=NULL` vs. `catalog=`, same database/schema/name) that older versions allowed now fails validation with "already exists" when either row is edited — resolve by renaming or removing one of the twins. (2) Duplicating a dataset now checks name collisions scoped to the target (database, catalog, schema) instead of globally by name alone: duplicates into other databases that were previously blocked are now allowed. @@ -725,9 +731,9 @@ With the flag enabled: `DELETE /api/v1/chart/` no longer hard-deletes the ch **Schema migration:** the migration adds a nullable `deleted_at` column and an index on it (`ix_slices_deleted_at`) to the `slices` table. The column add is instant; the index build runs inline (no `CONCURRENTLY`) and may briefly block writes on the `slices` table (INSERT/UPDATE/DELETE are queued while the index builds; reads are unaffected) on large Postgres deployments. MySQL InnoDB builds the index online (no blocking). -**Rollback note:** if the application code is rolled back after charts have been soft-deleted, the older code path's visibility filter no longer applies and previously hidden rows become visible to the older code. Pair the rollback with a data decision (restore the rows, hard-delete them, or also downgrade the migration) rather than assuming the old hard-delete semantics still hold. **Downgrading the migration destroys the deletion markers**: `downgrade()` drops the `deleted_at` column, so any not-yet-restored soft-deleted charts silently become live, active charts with no record they were ever deleted. Reconcile the trash (restore or hard-delete each row) *before* downgrading, and disable the `SOFT_DELETE` flag first so no new soft deletes land mid-rollback. +**Rollback note:** if the application code is rolled back after charts have been soft-deleted, the older code path's visibility filter no longer applies and previously hidden rows become visible to the older code. Pair the rollback with a data decision (restore the rows, hard-delete them, or also downgrade the migration) rather than assuming the old hard-delete semantics still hold. **Downgrading the migration destroys the deletion markers**: `downgrade()` drops the `deleted_at` column, so any not-yet-restored soft-deleted charts silently become live, active charts with no record they were ever deleted. Reconcile the trash (restore or hard-delete each row) _before_ downgrading, and disable the `SOFT_DELETE` flag first so no new soft deletes land mid-rollback. -**Importer behavior:** importing a chart YAML whose UUID matches an existing **soft-deleted** chart is treated as an implicit restore-with-update — **and this happens even when `overwrite` is not set**. This is a deliberate asymmetry with active rows: an active chart imported without `overwrite=true` is returned unchanged, but a soft-deleted UUID match is restored *and* has the upload's contents applied regardless of the `overwrite` argument, on the reasoning that re-importing a deleted chart's exact UUID is an explicit request to bring it back. The restore preserves the original PK and all out-of-archive references (`dashboard_slices` junctions, `report.chart_id`, tag rows). The operation is permission-gated: non-editors get `ImportFailedError`, and callers without `can_write` get `ImportFailedError` instead of silently receiving the soft-deleted row. +**Importer behavior:** importing a chart YAML whose UUID matches an existing **soft-deleted** chart is treated as an implicit restore-with-update — **and this happens even when `overwrite` is not set**. This is a deliberate asymmetry with active rows: an active chart imported without `overwrite=true` is returned unchanged, but a soft-deleted UUID match is restored _and_ has the upload's contents applied regardless of the `overwrite` argument, on the reasoning that re-importing a deleted chart's exact UUID is an explicit request to bring it back. The restore preserves the original PK and all out-of-archive references (`dashboard_slices` junctions, `report.chart_id`, tag rows). The operation is permission-gated: non-editors get `ImportFailedError`, and callers without `can_write` get `ImportFailedError` instead of silently receiving the soft-deleted row. - [39914](https://github.com/apache/superset/pull/39914) `ALERT_REPORT_SLACK_V2` now defaults to `True` and the legacy Slack v1 integration (`Slack` recipient type, `files.upload` API) is deprecated for removal in the next major. Slack blocked new apps from `files.upload` in May 2024 and fully retired the method for all apps on November 12, 2025; because the v1 path sends files through `files.upload`, v1 file-bearing sends now fail at the API level — only text-only `chat_postMessage` still works via the legacy path. Grant your Slack bot the `channels:read` and `groups:read` scopes so existing `Slack` recipients can be auto-upgraded to `SlackV2` on next send. Operators who explicitly override the flag to `False`, or whose Slack bot is missing those scopes, will see deprecation warnings while text-only sends continue through the legacy path. @@ -751,7 +757,7 @@ The partial-index replacement is dialect-dependent: PostgreSQL uses a native `WH **Slug semantics:** on PostgreSQL and MySQL 8.0.13+, the slug of a soft-deleted dashboard is **free for reuse**. A new active dashboard can claim it immediately. Restoring a soft-deleted dashboard whose slug has since been claimed returns **422 with a clean error** (`DashboardSlugConflictError`) — rename one of the dashboards and retry; the restore is not silently rejected by a database-level constraint violation. -**Importer behavior:** importing a dashboard YAML whose UUID matches an existing **soft-deleted** dashboard is treated as an implicit restore-with-update — **and this happens even when `overwrite` is not set**. This is a deliberate asymmetry with active rows: an active dashboard imported without `overwrite=true` is returned unchanged (the import never mutates it), but a soft-deleted UUID match is restored *and* has the upload's contents applied regardless of the `overwrite` argument, on the reasoning that re-importing a deleted dashboard's exact UUID is an explicit request to bring it back. The restore preserves the original PK and all pre-deletion relationship rows (`dashboard_slices` junctions, editor/viewer subjects, tags). Callers whose imports must never mutate existing state should treat bundles that may contain previously deleted UUIDs accordingly. The operation is permission-gated: it requires `can_write` and editorship of the deleted row (or admin) — non-editors get `ImportFailedError`, and callers without `can_write` get `ImportFailedError` instead of silently receiving the soft-deleted row. +**Importer behavior:** importing a dashboard YAML whose UUID matches an existing **soft-deleted** dashboard is treated as an implicit restore-with-update — **and this happens even when `overwrite` is not set**. This is a deliberate asymmetry with active rows: an active dashboard imported without `overwrite=true` is returned unchanged (the import never mutates it), but a soft-deleted UUID match is restored _and_ has the upload's contents applied regardless of the `overwrite` argument, on the reasoning that re-importing a deleted dashboard's exact UUID is an explicit request to bring it back. The restore preserves the original PK and all pre-deletion relationship rows (`dashboard_slices` junctions, editor/viewer subjects, tags). Callers whose imports must never mutate existing state should treat bundles that may contain previously deleted UUIDs accordingly. The operation is permission-gated: it requires `can_write` and editorship of the deleted row (or admin) — non-editors get `ImportFailedError`, and callers without `can_write` get `ImportFailedError` instead of silently receiving the soft-deleted row. ### Engine spec capability flag: `supports_offset` @@ -763,10 +769,10 @@ A new `BaseEngineSpec.supports_offset` attribute (default `True`) indicates whet A new feature flag `GRANULAR_EXPORT_CONTROLS` introduces three fine-grained permissions that replace the legacy `can_csv` permission: -| Permission | Controls | -|---|---| -| `can_export_data` | CSV, Excel, JSON exports | -| `can_export_image` | Screenshot/PDF exports | +| Permission | Controls | +| -------------------- | ---------------------------- | +| `can_export_data` | CSV, Excel, JSON exports | +| `can_export_image` | Screenshot/PDF exports | | `can_copy_clipboard` | Copy-to-clipboard operations | When the feature flag is enabled, these permissions are enforced on both the frontend (disabled buttons with tooltips) and backend (403 responses from API endpoints). When disabled, legacy `can_csv` behavior is preserved. @@ -810,14 +816,17 @@ The Kenya country map has been updated to reflect the 47 counties established un MCP (Model Context Protocol) tools now include enhanced observability instrumentation for monitoring and debugging: **Two-layer instrumentation:** + 1. **Middleware layer** (`LoggingMiddleware`): Automatically logs all MCP tool calls with `duration_ms` and `success` status in the audit log (Action Log UI, logs table) 2. **Sub-operation tracking**: All 19 MCP tools include granular `event_logger.log_context()` blocks for tracking individual operations like validation, database writes, and query execution **Action naming convention:** + - Tool-level logs: `mcp_tool_call` (via middleware) - Sub-operation logs: `mcp.{tool_name}.{operation}` (e.g., `mcp.generate_chart.validation`, `mcp.execute_sql.query_execution`) **Querying MCP logs:** + ```sql -- Top slowest MCP operations SELECT action, COUNT(*) as calls, AVG(duration_ms) as avg_ms @@ -852,6 +861,7 @@ A new `DISTRIBUTED_COORDINATION_CONFIG` configuration provides a unified Redis-b The distributed coordination is used by the Global Task Framework (GTF) for abort notifications and task completion signaling, and will eventually replace `GLOBAL_ASYNC_QUERIES_CACHE_BACKEND` as the standard signaling backend. Configuring this is recommended for Redis enabled production deployments. Example configuration in `superset_config.py`: + ```python DISTRIBUTED_COORDINATION_CONFIG = { "CACHE_TYPE": "RedisCache", @@ -866,9 +876,11 @@ See `superset/config.py` for complete configuration options. ### WebSocket config for GAQ with Docker [35896](https://github.com/apache/superset/pull/35896) and [37624](https://github.com/apache/superset/pull/37624) updated documentation on how to run and configure Superset with Docker. Specifically for the WebSocket configuration, a new `docker/superset-websocket/config.example.json` was added to the repo, so that users could copy it to create a `docker/superset-websocket/config.json` file. The existing `docker/superset-websocket/config.json` was removed and git-ignored, so if you're using GAQ / WebSocket make sure to: + - Stash/backup your existing `config.json` file, to re-apply it after (will get git-ignored going forward) - Update the `volumes` configuration for the `superset-websocket` service in your `docker-compose.override.yml` file, to include the `docker/superset-websocket/config.json` file. For example: -``` yaml + +```yaml services: superset-websocket: volumes: @@ -881,7 +893,9 @@ services: ### Example Data Loading Improvements #### New Directory Structure + Examples are now organized by name with data and configs co-located: + ``` superset/examples/ ├── _shared/ # Shared database & metadata configs @@ -894,12 +908,14 @@ superset/examples/ ``` #### Simplified Parquet-based Loading + - Auto-discovery: create `superset/examples/my_dataset/data.parquet` to add a new example - Parquet is an Apache project format: compressed (~27% smaller), self-describing schema - YAML configs define datasets, charts, and dashboards declaratively - Removed Python-based data generation from individual example files #### Test Data Reorganization + - Moved `big_data.py` to `superset/cli/test_loaders.py` - better reflects its purpose as a test utility - Fixed inverted logic for `--load-test-data` flag (now correctly includes .test.yaml files when flag is set) - Clarified CLI flags: @@ -909,6 +925,7 @@ superset/examples/ - `--load-big-data` / `-b`: Generate synthetic stress-test data #### Bug Fixes + - Fixed numpy array serialization for PostgreSQL (converts complex types to JSON strings) - Fixed KeyError for `allow_csv_upload` field in database configs (now optional with default) - Fixed test data loading logic that was incorrectly filtering files @@ -918,6 +935,7 @@ superset/examples/ The MCP (Model Context Protocol) service enables AI assistants and automation tools to interact programmatically with Superset. #### New Features + - MCP service infrastructure with FastMCP framework - Tools for dashboards, charts, datasets, SQL Lab, and instance metadata - Optional dependency: install with `pip install apache-superset[fastmcp]` @@ -927,6 +945,7 @@ The MCP (Model Context Protocol) service enables AI assistants and automation to #### New Configuration Options **Development** (single-user, local testing): + ```python # superset_config.py MCP_DEV_USERNAME = "admin" # User for MCP authentication @@ -935,6 +954,7 @@ MCP_SERVICE_PORT = 5008 ``` **Production** (JWT-based, multi-user): + ```python # superset_config.py MCP_AUTH_ENABLED = True @@ -980,12 +1000,14 @@ superset mcp run --port 5008 --use-factory-config The MCP service runs as a **separate process** from the Superset web server. **Important**: + - Requires same Python environment and configuration as Superset - Shares database connections with main Superset app - Can be scaled independently from web server - Requires `fastmcp` package (optional dependency) **Installation**: + ```bash # Install with MCP support pip install apache-superset[fastmcp] @@ -999,6 +1021,7 @@ Use systemd, supervisord, or Kubernetes to manage the MCP service process. See `superset/mcp_service/PRODUCTION.md` for deployment guides. **Security**: + - Development: Uses `MCP_DEV_USERNAME` for single-user access - Production: **MUST** configure JWT authentication - See `superset/mcp_service/SECURITY.md` for details @@ -1018,8 +1041,10 @@ See `superset/mcp_service/PRODUCTION.md` for deployment guides. - [35062](https://github.com/apache/superset/pull/35062): Changed the function signature of `setupExtensions` to `setupCodeOverrides` with options as arguments. ### Breaking Changes + - [37370](https://github.com/apache/superset/pull/37370): The `APP_NAME` configuration variable no longer controls the browser window/tab title or other frontend branding. Application names should now be configured using the theme system with the `brandAppName` token. The `APP_NAME` config is still used for backend contexts (MCP service, logs, etc.) and serves as a fallback if `brandAppName` is not set. - **Migration:** + ```python # Before (Superset 5.x) APP_NAME = "My Custom App" @@ -1063,16 +1088,16 @@ See `superset/mcp_service/PRODUCTION.md` for deployment guides. Eight M:N association tables move from a synthetic `id INTEGER PRIMARY KEY` to a composite `PRIMARY KEY (fk1, fk2)` on their two foreign-key columns. The surrogate `id` is dropped, and the redundant `UNIQUE (fk1, fk2)` on the two tables that carried one is removed (now subsumed by the PK). -| Table | Composite PK | -|---|---| -| `dashboard_roles` | `(dashboard_id, role_id)` | -| `dashboard_slices` | `(dashboard_id, slice_id)` | -| `dashboard_user` | `(user_id, dashboard_id)` | +| Table | Composite PK | +| ---------------------- | ------------------------------- | +| `dashboard_roles` | `(dashboard_id, role_id)` | +| `dashboard_slices` | `(dashboard_id, slice_id)` | +| `dashboard_user` | `(user_id, dashboard_id)` | | `report_schedule_user` | `(user_id, report_schedule_id)` | -| `rls_filter_roles` | `(role_id, rls_filter_id)` | -| `rls_filter_tables` | `(table_id, rls_filter_id)` | -| `slice_user` | `(user_id, slice_id)` | -| `sqlatable_user` | `(user_id, table_id)` | +| `rls_filter_roles` | `(role_id, rls_filter_id)` | +| `rls_filter_tables` | `(table_id, rls_filter_id)` | +| `slice_user` | `(user_id, slice_id)` | +| `sqlatable_user` | `(user_id, table_id)` | **Before upgrading:** @@ -1083,6 +1108,7 @@ Eight M:N association tables move from a synthetic `id INTEGER PRIMARY KEY` to a For large `dashboard_slices` / `report_schedule_user` tables, see the operator runbook in [#39859](https://github.com/apache/superset/pull/39859) — pre-flight inventory queries, per-dialect lock-window sizing, and the duplicate / NULL-FK roll-up — to plan the maintenance window. ## 6.0.0 + - [33055](https://github.com/apache/superset/pull/33055): Upgrades Flask-AppBuilder to 5.0.0. The AUTH_OID authentication type has been deprecated and is no longer available as an option in Flask-AppBuilder. OpenID (OID) is considered a deprecated authentication protocol - if you are using AUTH_OID, you will need to migrate to an alternative authentication method such as OAuth, LDAP, or database authentication before upgrading. - [34871](https://github.com/apache/superset/pull/34871): Fixed Jest test hanging issue from Ant Design v5 upgrade. MessageChannel is now mocked in test environment to prevent rc-overflow from causing Jest to hang. Test environment only - no production impact. - [34782](https://github.com/apache/superset/pull/34782): Dataset exports now include the dataset ID in their file name (similar to charts and dashboards). If managing assets as code, make sure to rename existing dataset YAMLs to include the ID (and avoid duplicated files). @@ -1091,8 +1117,8 @@ For large `dashboard_slices` / `report_schedule_user` tables, see the operator r - Change any hex color values to one of: `"success"`, `"processing"`, `"error"`, `"warning"`, `"default"` - Custom colors are no longer supported to maintain consistency with Ant Design components - [34561](https://github.com/apache/superset/pull/34561) Added tiled screenshot functionality for Playwright-based reports to handle large dashboards more efficiently. When enabled (default: `SCREENSHOT_TILED_ENABLED = True`), dashboards with 20+ charts or height exceeding 5000px will be captured using multiple viewport-sized tiles and combined into a single image. This improves report generation performance and reliability for large dashboards. -Note: Pillow is now a required dependency (previously optional) to support image processing for tiled screenshots. -`thumbnails` optional dependency is now deprecated and will be removed in the next major release (7.0). + Note: Pillow is now a required dependency (previously optional) to support image processing for tiled screenshots. + `thumbnails` optional dependency is now deprecated and will be removed in the next major release (7.0). - [33084](https://github.com/apache/superset/pull/33084) The DISALLOWED_SQL_FUNCTIONS configuration now includes additional potentially sensitive database functions across PostgreSQL, MySQL, SQLite, MS SQL Server, and ClickHouse. Existing queries using these functions may now be blocked. Review your SQL Lab queries and dashboards if you encounter "disallowed function" errors after upgrading - [34235](https://github.com/apache/superset/pull/34235) CSV exports now use `utf-8-sig` encoding by default to include a UTF-8 BOM, improving compatibility with Excel. - [34258](https://github.com/apache/superset/pull/34258) changing the default in Dockerfile to INCLUDE_CHROMIUM="false" (from "true") in the past. This ensures the `lean` layer is lean by default, and people can opt-in to the `chromium` layer by setting the build arg `INCLUDE_CHROMIUM=true`. This is a breaking change for anyone using the `lean` layer, as it will no longer include Chromium by default. diff --git a/docs/admin_docs/configuration/country-map-tools.mdx b/docs/admin_docs/configuration/country-map-tools.mdx index c01e3e6ee7f..e8f7881aecf 100644 --- a/docs/admin_docs/configuration/country-map-tools.mdx +++ b/docs/admin_docs/configuration/country-map-tools.mdx @@ -18,7 +18,7 @@ code is less ambiguous and is unique to all regions in the world. ## Included Maps The current list of countries can be found in the src -[legacy-plugin-chart-country-map/src/countries.ts](https://github.com/apache/superset/blob/master/superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries.ts) +[plugin-chart-country-map/src/countries.ts](https://github.com/apache/superset/blob/master/superset-frontend/plugins/plugin-chart-country-map/src/countries.ts) The Country Maps visualization already ships with the maps for the following countries: @@ -31,10 +31,10 @@ The Country Maps visualization already ships with the maps for the following cou ## Adding a New Country To add a new country to the list, you'd have to edit files in -[@superset-ui/legacy-plugin-chart-country-map](https://github.com/apache/superset/tree/master/superset-frontend/plugins/legacy-plugin-chart-country-map). +[@superset-ui/plugin-chart-country-map](https://github.com/apache/superset/tree/master/superset-frontend/plugins/plugin-chart-country-map). -1. Generate a new GeoJSON file for your country following the guide in [this Jupyter notebook](https://github.com/apache/superset/blob/master/superset-frontend/plugins/legacy-plugin-chart-country-map/scripts/Country%20Map%20GeoJSON%20Generator.ipynb). -2. Edit the countries list in [legacy-plugin-chart-country-map/src/countries.ts](https://github.com/apache/superset/blob/master/superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries.ts). +1. Generate a new GeoJSON file for your country following the guide in [this Jupyter notebook](https://github.com/apache/superset/blob/master/superset-frontend/plugins/plugin-chart-country-map/scripts/Country%20Map%20GeoJSON%20Generator.ipynb). +2. Edit the countries list in [plugin-chart-country-map/src/countries.ts](https://github.com/apache/superset/blob/master/superset-frontend/plugins/plugin-chart-country-map/src/countries.ts). 3. Install superset-frontend dependencies: `cd superset-frontend && npm install` 4. Verify your countries in Superset plugins storybook: `npm run plugins:storybook`. 5. Build and install Superset from source code. diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json index f6bedb9712b..fee14014c15 100644 --- a/superset-frontend/package-lock.json +++ b/superset-frontend/package-lock.json @@ -51,24 +51,22 @@ "@scarf/scarf": "^1.4.0", "@superset-ui/chart-controls": "file:./packages/superset-ui-chart-controls", "@superset-ui/core": "file:./packages/superset-ui-core", - "@superset-ui/legacy-plugin-chart-calendar": "file:./plugins/legacy-plugin-chart-calendar", - "@superset-ui/legacy-plugin-chart-chord": "file:./plugins/legacy-plugin-chart-chord", - "@superset-ui/legacy-plugin-chart-country-map": "file:./plugins/legacy-plugin-chart-country-map", - "@superset-ui/legacy-plugin-chart-horizon": "file:./plugins/legacy-plugin-chart-horizon", - "@superset-ui/legacy-plugin-chart-paired-t-test": "file:./plugins/legacy-plugin-chart-paired-t-test", - "@superset-ui/legacy-plugin-chart-parallel-coordinates": "file:./plugins/legacy-plugin-chart-parallel-coordinates", - "@superset-ui/legacy-plugin-chart-partition": "file:./plugins/legacy-plugin-chart-partition", - "@superset-ui/legacy-plugin-chart-rose": "file:./plugins/legacy-plugin-chart-rose", - "@superset-ui/legacy-plugin-chart-world-map": "file:./plugins/legacy-plugin-chart-world-map", - "@superset-ui/legacy-preset-chart-nvd3": "file:./plugins/legacy-preset-chart-nvd3", "@superset-ui/plugin-chart-ag-grid-table": "file:./plugins/plugin-chart-ag-grid-table", + "@superset-ui/plugin-chart-calendar": "file:./plugins/plugin-chart-calendar", "@superset-ui/plugin-chart-cartodiagram": "file:./plugins/plugin-chart-cartodiagram", + "@superset-ui/plugin-chart-chord": "file:./plugins/plugin-chart-chord", + "@superset-ui/plugin-chart-country-map": "file:./plugins/plugin-chart-country-map", "@superset-ui/plugin-chart-echarts": "file:./plugins/plugin-chart-echarts", "@superset-ui/plugin-chart-handlebars": "file:./plugins/plugin-chart-handlebars", + "@superset-ui/plugin-chart-horizon": "file:./plugins/plugin-chart-horizon", + "@superset-ui/plugin-chart-paired-t-test": "file:./plugins/plugin-chart-paired-t-test", + "@superset-ui/plugin-chart-parallel-coordinates": "file:./plugins/plugin-chart-parallel-coordinates", + "@superset-ui/plugin-chart-partition": "file:./plugins/plugin-chart-partition", "@superset-ui/plugin-chart-pivot-table": "file:./plugins/plugin-chart-pivot-table", "@superset-ui/plugin-chart-point-cluster-map": "file:./plugins/plugin-chart-point-cluster-map", "@superset-ui/plugin-chart-table": "file:./plugins/plugin-chart-table", "@superset-ui/plugin-chart-word-cloud": "file:./plugins/plugin-chart-word-cloud", + "@superset-ui/plugin-chart-world-map": "file:./plugins/plugin-chart-world-map", "@superset-ui/preset-chart-deckgl": "file:./plugins/preset-chart-deckgl", "@superset-ui/switchboard": "file:./packages/superset-ui-switchboard", "@types/d3-format": "^3.0.1", @@ -7643,9 +7641,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -7660,9 +7655,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -7677,9 +7669,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -7694,9 +7683,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8571,9 +8557,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8591,9 +8574,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8611,9 +8591,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8631,9 +8608,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8651,9 +8625,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8671,9 +8642,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8691,9 +8659,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8711,9 +8676,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8918,9 +8880,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8938,9 +8897,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -8958,9 +8914,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8978,9 +8931,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -8998,9 +8948,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -9018,9 +8965,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -9038,9 +8982,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -9058,9 +8999,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -11127,54 +11065,26 @@ "resolved": "packages/generator-superset", "link": true }, - "node_modules/@superset-ui/legacy-plugin-chart-calendar": { - "resolved": "plugins/legacy-plugin-chart-calendar", - "link": true - }, - "node_modules/@superset-ui/legacy-plugin-chart-chord": { - "resolved": "plugins/legacy-plugin-chart-chord", - "link": true - }, - "node_modules/@superset-ui/legacy-plugin-chart-country-map": { - "resolved": "plugins/legacy-plugin-chart-country-map", - "link": true - }, - "node_modules/@superset-ui/legacy-plugin-chart-horizon": { - "resolved": "plugins/legacy-plugin-chart-horizon", - "link": true - }, - "node_modules/@superset-ui/legacy-plugin-chart-paired-t-test": { - "resolved": "plugins/legacy-plugin-chart-paired-t-test", - "link": true - }, - "node_modules/@superset-ui/legacy-plugin-chart-parallel-coordinates": { - "resolved": "plugins/legacy-plugin-chart-parallel-coordinates", - "link": true - }, - "node_modules/@superset-ui/legacy-plugin-chart-partition": { - "resolved": "plugins/legacy-plugin-chart-partition", - "link": true - }, - "node_modules/@superset-ui/legacy-plugin-chart-rose": { - "resolved": "plugins/legacy-plugin-chart-rose", - "link": true - }, - "node_modules/@superset-ui/legacy-plugin-chart-world-map": { - "resolved": "plugins/legacy-plugin-chart-world-map", - "link": true - }, - "node_modules/@superset-ui/legacy-preset-chart-nvd3": { - "resolved": "plugins/legacy-preset-chart-nvd3", - "link": true - }, "node_modules/@superset-ui/plugin-chart-ag-grid-table": { "resolved": "plugins/plugin-chart-ag-grid-table", "link": true }, + "node_modules/@superset-ui/plugin-chart-calendar": { + "resolved": "plugins/plugin-chart-calendar", + "link": true + }, "node_modules/@superset-ui/plugin-chart-cartodiagram": { "resolved": "plugins/plugin-chart-cartodiagram", "link": true }, + "node_modules/@superset-ui/plugin-chart-chord": { + "resolved": "plugins/plugin-chart-chord", + "link": true + }, + "node_modules/@superset-ui/plugin-chart-country-map": { + "resolved": "plugins/plugin-chart-country-map", + "link": true + }, "node_modules/@superset-ui/plugin-chart-echarts": { "resolved": "plugins/plugin-chart-echarts", "link": true @@ -11183,6 +11093,22 @@ "resolved": "plugins/plugin-chart-handlebars", "link": true }, + "node_modules/@superset-ui/plugin-chart-horizon": { + "resolved": "plugins/plugin-chart-horizon", + "link": true + }, + "node_modules/@superset-ui/plugin-chart-paired-t-test": { + "resolved": "plugins/plugin-chart-paired-t-test", + "link": true + }, + "node_modules/@superset-ui/plugin-chart-parallel-coordinates": { + "resolved": "plugins/plugin-chart-parallel-coordinates", + "link": true + }, + "node_modules/@superset-ui/plugin-chart-partition": { + "resolved": "plugins/plugin-chart-partition", + "link": true + }, "node_modules/@superset-ui/plugin-chart-pivot-table": { "resolved": "plugins/plugin-chart-pivot-table", "link": true @@ -11199,6 +11125,10 @@ "resolved": "plugins/plugin-chart-word-cloud", "link": true }, + "node_modules/@superset-ui/plugin-chart-world-map": { + "resolved": "plugins/plugin-chart-world-map", + "link": true + }, "node_modules/@superset-ui/preset-chart-deckgl": { "resolved": "plugins/preset-chart-deckgl", "link": true @@ -11574,9 +11504,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -11593,9 +11520,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -11612,9 +11536,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -11631,9 +11552,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -11650,9 +11568,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -11669,9 +11584,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -16578,12 +16490,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/cephes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cephes/-/cephes-2.0.0.tgz", - "integrity": "sha512-4GMUzkcXHZ0HMZ3gZdBrv8pQs1/zkJh2Q9rQOF8NJZHanM359y3XOSdeqmDBPfxQKYQpJt58R3dUpofrIXJ2mg==", - "license": "BSD-3-Clause" - }, "node_modules/chai": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", @@ -19085,15 +18991,6 @@ "readable-stream": "^3.1.1" } }, - "node_modules/distributions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/distributions/-/distributions-2.2.0.tgz", - "integrity": "sha512-n7ybud+CRAOZlpg+ETuA0PTiSBfyVNt8Okns5gSK4NvHwj7RamQoufptOucvVcTn9CV4DZ38p1k6TgwMexUNkQ==", - "license": "MIT", - "dependencies": { - "cephes": "^2.0.0" - } - }, "node_modules/dnd-core": { "version": "11.1.3", "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-11.1.3.tgz", @@ -20927,12 +20824,6 @@ "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", "license": "(MIT AND Zlib)" }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "license": "MIT" - }, "node_modules/fast-uri": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", @@ -27250,6 +27141,21 @@ } } }, + "node_modules/jsdom/node_modules/@noble/hashes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", + "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/jsdom/node_modules/css-tree": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", @@ -28548,9 +28454,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -28572,9 +28475,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -28596,9 +28496,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -28620,9 +28517,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -31586,15 +31480,6 @@ "fflate": "^0.8.0" } }, - "node_modules/nvd3-fork": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/nvd3-fork/-/nvd3-fork-2.0.5.tgz", - "integrity": "sha512-Sq3q2rvR/9FJ35LVmqdQJAnfmD15BaIHSBg5wZZL/WLcq/nthff8ukabwFdbW0zeE1c/yPq+DKl6MxnUTR45DA==", - "license": "Apache-2.0", - "peerDependencies": { - "d3": "^3.4.4" - } - }, "node_modules/nwsapi": { "version": "2.2.23", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", @@ -36239,15 +36124,6 @@ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", "license": "MIT" }, - "node_modules/reactable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reactable/-/reactable-1.1.0.tgz", - "integrity": "sha512-SnvZ3CXyFFxGotw9cqNiVUGb2oW16UlIypGQZRJGgPiJuFqW22jO7A+Y/Tvv8no8F/bZoLdZ+QJP7eZfcc9kCw==", - "license": "MIT", - "peerDependencies": { - "react": "* || ^0.14.0" - } - }, "node_modules/read": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/read/-/read-4.1.0.tgz", @@ -42921,6 +42797,21 @@ } } }, + "node_modules/whatwg-url/node_modules/@noble/hashes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", + "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/whatwg-url/node_modules/webidl-conversions": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", @@ -44349,6 +44240,7 @@ "plugins/legacy-plugin-chart-calendar": { "name": "@superset-ui/legacy-plugin-chart-calendar", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3-array": "^3.2.4", @@ -44364,30 +44256,10 @@ "react": "^18.3.0" } }, - "plugins/legacy-plugin-chart-calendar/node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "plugins/legacy-plugin-chart-calendar/node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "plugins/legacy-plugin-chart-chord": { "name": "@superset-ui/legacy-plugin-chart-chord", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3": "^3.5.17", @@ -44400,18 +44272,10 @@ "@superset-ui/core": "*" } }, - "plugins/legacy-plugin-chart-chord/node_modules/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", - "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "plugins/legacy-plugin-chart-country-map": { "name": "@superset-ui/legacy-plugin-chart-country-map", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3": "^3.5.17", @@ -44425,21 +44289,10 @@ "react": "^18.3.0" } }, - "plugins/legacy-plugin-chart-country-map/node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "plugins/legacy-plugin-chart-horizon": { "name": "@superset-ui/legacy-plugin-chart-horizon", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3-array": "^3.2.4", @@ -44453,21 +44306,10 @@ "react": "^18.3.0" } }, - "plugins/legacy-plugin-chart-horizon/node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "plugins/legacy-plugin-chart-paired-t-test": { "name": "@superset-ui/legacy-plugin-chart-paired-t-test", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "distributions": "^2.2.0", @@ -44484,6 +44326,7 @@ "plugins/legacy-plugin-chart-parallel-coordinates": { "name": "@superset-ui/legacy-plugin-chart-parallel-coordinates", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3v3": "npm:d3@3.5.17", @@ -44499,6 +44342,7 @@ "plugins/legacy-plugin-chart-partition": { "name": "@superset-ui/legacy-plugin-chart-partition", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3": "^3.5.17", @@ -44518,6 +44362,7 @@ "plugins/legacy-plugin-chart-rose": { "name": "@superset-ui/legacy-plugin-chart-rose", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3": "^3.5.17", @@ -44535,6 +44380,7 @@ "plugins/legacy-plugin-chart-world-map": { "name": "@superset-ui/legacy-plugin-chart-world-map", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3": "^3.5.17", @@ -44550,21 +44396,10 @@ "react": "^18.3.0" } }, - "plugins/legacy-plugin-chart-world-map/node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "plugins/legacy-preset-chart-nvd3": { "name": "@superset-ui/legacy-preset-chart-nvd3", "version": "0.20.3", + "extraneous": true, "license": "Apache-2.0", "dependencies": { "d3": "^3.5.17", @@ -44627,6 +44462,45 @@ "node": ">=12" } }, + "plugins/plugin-chart-calendar": { + "name": "@superset-ui/plugin-chart-calendar", + "version": "0.20.3", + "license": "Apache-2.0", + "dependencies": { + "d3-array": "^3.2.4", + "d3-selection": "^3.0.0", + "d3-tip": "^0.9.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@apache-superset/core": "*", + "@emotion/react": "^11.4.1", + "@superset-ui/chart-controls": "*", + "@superset-ui/core": "*", + "react": "^18.3.0" + } + }, + "plugins/plugin-chart-calendar/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "plugins/plugin-chart-calendar/node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "plugins/plugin-chart-cartodiagram": { "name": "@superset-ui/plugin-chart-cartodiagram", "version": "0.0.1", @@ -44655,6 +44529,58 @@ "react-dom": "^18.3.0" } }, + "plugins/plugin-chart-chord": { + "name": "@superset-ui/plugin-chart-chord", + "version": "0.20.3", + "license": "Apache-2.0", + "dependencies": { + "d3": "^3.5.17", + "prop-types": "^15.8.1", + "react": "^19.2.7" + }, + "peerDependencies": { + "@apache-superset/core": "*", + "@superset-ui/chart-controls": "*", + "@superset-ui/core": "*" + } + }, + "plugins/plugin-chart-chord/node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "plugins/plugin-chart-country-map": { + "name": "@superset-ui/plugin-chart-country-map", + "version": "0.20.3", + "license": "Apache-2.0", + "dependencies": { + "d3": "^3.5.17", + "d3-array": "^3.2.4", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@apache-superset/core": "*", + "@superset-ui/chart-controls": "*", + "@superset-ui/core": "*", + "react": "^18.3.0" + } + }, + "plugins/plugin-chart-country-map/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, "plugins/plugin-chart-echarts": { "name": "@superset-ui/plugin-chart-echarts", "version": "0.20.3", @@ -44742,6 +44668,79 @@ "sprintf-js": ">= 1.1.1 < 2" } }, + "plugins/plugin-chart-horizon": { + "name": "@superset-ui/plugin-chart-horizon", + "version": "0.20.3", + "license": "Apache-2.0", + "dependencies": { + "d3-array": "^3.2.4", + "d3-scale": "^4.0.2", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@apache-superset/core": "*", + "@superset-ui/chart-controls": "*", + "@superset-ui/core": "*", + "react": "^18.3.0" + } + }, + "plugins/plugin-chart-horizon/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "plugins/plugin-chart-paired-t-test": { + "name": "@superset-ui/plugin-chart-paired-t-test", + "version": "0.20.3", + "license": "Apache-2.0", + "peerDependencies": { + "@apache-superset/core": "*", + "@superset-ui/chart-controls": "*", + "@superset-ui/core": "*", + "react": "^18.3.0" + } + }, + "plugins/plugin-chart-parallel-coordinates": { + "name": "@superset-ui/plugin-chart-parallel-coordinates", + "version": "0.20.3", + "license": "Apache-2.0", + "dependencies": { + "d3v3": "npm:d3@3.5.17", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@apache-superset/core": "*", + "@superset-ui/chart-controls": "*", + "@superset-ui/core": "*", + "react": "^18.3.0" + } + }, + "plugins/plugin-chart-partition": { + "name": "@superset-ui/plugin-chart-partition", + "version": "0.20.3", + "license": "Apache-2.0", + "dependencies": { + "d3": "^3.5.17", + "d3-hierarchy": "^3.1.2", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@apache-superset/core": "*", + "@superset-ui/chart-controls": "*", + "@superset-ui/core": "*", + "@testing-library/jest-dom": "*", + "@testing-library/react": "^15.0.0", + "react": "^18.3.0", + "react-dom": "^18.3.0" + } + }, "plugins/plugin-chart-pivot-table": { "name": "@superset-ui/plugin-chart-pivot-table", "version": "0.20.3", @@ -44850,6 +44849,36 @@ "react": "^18.3.0" } }, + "plugins/plugin-chart-world-map": { + "name": "@superset-ui/plugin-chart-world-map", + "version": "0.20.3", + "license": "Apache-2.0", + "dependencies": { + "d3": "^3.5.17", + "d3-array": "^3.2.4", + "datamaps": "^0.5.10", + "prop-types": "^15.8.1", + "tinycolor2": "^1.6.0" + }, + "peerDependencies": { + "@apache-superset/core": "*", + "@superset-ui/chart-controls": "*", + "@superset-ui/core": "*", + "react": "^18.3.0" + } + }, + "plugins/plugin-chart-world-map/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, "plugins/preset-chart-deckgl": { "name": "@superset-ui/preset-chart-deckgl", "version": "1.0.0", diff --git a/superset-frontend/package.json b/superset-frontend/package.json index 160edac95f0..a4486945eaf 100644 --- a/superset-frontend/package.json +++ b/superset-frontend/package.json @@ -87,7 +87,7 @@ "test": "cross-env NODE_ENV=test NODE_OPTIONS=\"--max-old-space-size=8192\" jest --max-workers=80% --silent", "test-loud": "cross-env NODE_ENV=test NODE_OPTIONS=\"--max-old-space-size=8192\" jest --max-workers=80%", "type": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" tsc --noEmit", - "update-maps": "cd plugins/legacy-plugin-chart-country-map/scripts && jupyter nbconvert --to notebook --execute --inplace --allow-errors --ExecutePreprocessor.timeout=1200 'Country Map GeoJSON Generator.ipynb'", + "update-maps": "cd plugins/plugin-chart-country-map/scripts && jupyter nbconvert --to notebook --execute --inplace --allow-errors --ExecutePreprocessor.timeout=1200 'Country Map GeoJSON Generator.ipynb'", "validate-release": "../RELEASING/validate_this_release.sh" }, "dependencies": { @@ -128,24 +128,22 @@ "@scarf/scarf": "^1.4.0", "@superset-ui/chart-controls": "file:./packages/superset-ui-chart-controls", "@superset-ui/core": "file:./packages/superset-ui-core", - "@superset-ui/legacy-plugin-chart-calendar": "file:./plugins/legacy-plugin-chart-calendar", - "@superset-ui/legacy-plugin-chart-chord": "file:./plugins/legacy-plugin-chart-chord", - "@superset-ui/legacy-plugin-chart-country-map": "file:./plugins/legacy-plugin-chart-country-map", - "@superset-ui/legacy-plugin-chart-horizon": "file:./plugins/legacy-plugin-chart-horizon", - "@superset-ui/legacy-plugin-chart-paired-t-test": "file:./plugins/legacy-plugin-chart-paired-t-test", - "@superset-ui/legacy-plugin-chart-parallel-coordinates": "file:./plugins/legacy-plugin-chart-parallel-coordinates", - "@superset-ui/legacy-plugin-chart-partition": "file:./plugins/legacy-plugin-chart-partition", - "@superset-ui/legacy-plugin-chart-rose": "file:./plugins/legacy-plugin-chart-rose", - "@superset-ui/legacy-plugin-chart-world-map": "file:./plugins/legacy-plugin-chart-world-map", - "@superset-ui/legacy-preset-chart-nvd3": "file:./plugins/legacy-preset-chart-nvd3", "@superset-ui/plugin-chart-ag-grid-table": "file:./plugins/plugin-chart-ag-grid-table", + "@superset-ui/plugin-chart-calendar": "file:./plugins/plugin-chart-calendar", "@superset-ui/plugin-chart-cartodiagram": "file:./plugins/plugin-chart-cartodiagram", + "@superset-ui/plugin-chart-chord": "file:./plugins/plugin-chart-chord", + "@superset-ui/plugin-chart-country-map": "file:./plugins/plugin-chart-country-map", "@superset-ui/plugin-chart-echarts": "file:./plugins/plugin-chart-echarts", "@superset-ui/plugin-chart-handlebars": "file:./plugins/plugin-chart-handlebars", + "@superset-ui/plugin-chart-horizon": "file:./plugins/plugin-chart-horizon", + "@superset-ui/plugin-chart-paired-t-test": "file:./plugins/plugin-chart-paired-t-test", + "@superset-ui/plugin-chart-parallel-coordinates": "file:./plugins/plugin-chart-parallel-coordinates", + "@superset-ui/plugin-chart-partition": "file:./plugins/plugin-chart-partition", "@superset-ui/plugin-chart-pivot-table": "file:./plugins/plugin-chart-pivot-table", "@superset-ui/plugin-chart-point-cluster-map": "file:./plugins/plugin-chart-point-cluster-map", "@superset-ui/plugin-chart-table": "file:./plugins/plugin-chart-table", "@superset-ui/plugin-chart-word-cloud": "file:./plugins/plugin-chart-word-cloud", + "@superset-ui/plugin-chart-world-map": "file:./plugins/plugin-chart-world-map", "@superset-ui/preset-chart-deckgl": "file:./plugins/preset-chart-deckgl", "@superset-ui/switchboard": "file:./packages/superset-ui-switchboard", "@types/d3-format": "^3.0.1", diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/utils/buildSortMetricOrderby.ts b/superset-frontend/packages/superset-ui-chart-controls/src/utils/buildSortMetricOrderby.ts new file mode 100644 index 00000000000..c04d7785f2b --- /dev/null +++ b/superset-frontend/packages/superset-ui-chart-controls/src/utils/buildSortMetricOrderby.ts @@ -0,0 +1,87 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { ensureIsArray, getMetricLabel } from '@superset-ui/core'; +import type { QueryFormMetric, QueryFormOrderBy } from '@superset-ui/core'; + +export interface BuildSortMetricOrderbyConfig { + /** The query's already-resolved metrics list. */ + metrics: QueryFormMetric[]; + /** The raw `timeseries_limit_metric` form-data value (single or multi). */ + timeseriesLimitMetric?: QueryFormMetric | QueryFormMetric[] | null; + order_desc?: boolean; + /** + * Falls back to the first selected metric when no sort metric is set. + * Charts ported from a legacy viz whose query_obj always had a sort + * metric (defaulting to the first one) should set this; charts whose + * legacy query_obj left ordering absent without one should not. + */ + fallbackToFirstMetric?: boolean; + /** + * When true, only order when `order_desc` is set (matching legacy vizzes + * whose query_obj left the result unordered unless the operator asked + * for descending). When false, always order (ascending unless + * order_desc), matching legacy vizzes that ordered unconditionally. + */ + orderOnlyWhenDesc?: boolean; +} + +export interface SortMetricOrderby { + /** `metrics`, with the sort metric appended if it wasn't already selected. */ + metrics: QueryFormMetric[]; + orderby: QueryFormOrderBy[]; +} + +/** + * Resolves a chart's sort metric and builds the corresponding query_obj + * `orderby`, appending the sort metric to `metrics` if it isn't already + * selected (so its value is present in the result to sort by). Several + * charts ported from the legacy chart-data pipeline share this exact + * shape with only the fallback/gating policy differing per their own + * legacy `query_obj` behavior -- see `fallbackToFirstMetric` and + * `orderOnlyWhenDesc`. + */ +export function buildSortMetricOrderby({ + metrics, + timeseriesLimitMetric, + order_desc: orderDesc, + fallbackToFirstMetric = false, + orderOnlyWhenDesc = false, +}: BuildSortMetricOrderbyConfig): SortMetricOrderby { + const sortByMetric = + ensureIsArray(timeseriesLimitMetric)[0] ?? + (fallbackToFirstMetric ? metrics[0] : undefined); + + if (!sortByMetric) { + return { metrics, orderby: [] }; + } + + const sortByLabel = getMetricLabel(sortByMetric); + const nextMetrics = metrics.some( + metric => getMetricLabel(metric) === sortByLabel, + ) + ? metrics + : [...metrics, sortByMetric]; + + const shouldOrder = orderOnlyWhenDesc ? Boolean(orderDesc) : true; + + return { + metrics: nextMetrics, + orderby: shouldOrder ? [[sortByMetric, !orderDesc]] : [], + }; +} diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/utils/index.ts b/superset-frontend/packages/superset-ui-chart-controls/src/utils/index.ts index 3a894a4d02d..1ed55852fb3 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/src/utils/index.ts +++ b/superset-frontend/packages/superset-ui-chart-controls/src/utils/index.ts @@ -30,3 +30,4 @@ export * from './getTemporalColumns'; export * from './displayTimeRelatedControls'; export * from './colorControls'; export * from './metricColumnFilter'; +export * from './buildSortMetricOrderby'; diff --git a/superset-frontend/packages/superset-ui-chart-controls/test/utils/buildSortMetricOrderby.test.ts b/superset-frontend/packages/superset-ui-chart-controls/test/utils/buildSortMetricOrderby.test.ts new file mode 100644 index 00000000000..20c002f1f7a --- /dev/null +++ b/superset-frontend/packages/superset-ui-chart-controls/test/utils/buildSortMetricOrderby.test.ts @@ -0,0 +1,96 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { buildSortMetricOrderby } from '../../src'; + +test('is a no-op when there is no sort metric and no fallback', () => { + const result = buildSortMetricOrderby({ + metrics: ['sum__num'], + timeseriesLimitMetric: undefined, + }); + expect(result).toEqual({ metrics: ['sum__num'], orderby: [] }); +}); + +test('falls back to the first metric when configured to', () => { + const result = buildSortMetricOrderby({ + metrics: ['sum__num', 'avg__num'], + timeseriesLimitMetric: undefined, + fallbackToFirstMetric: true, + }); + expect(result.metrics).toEqual(['sum__num', 'avg__num']); + expect(result.orderby).toEqual([['sum__num', true]]); +}); + +test('appends the sort metric when it is not already selected', () => { + const result = buildSortMetricOrderby({ + metrics: ['sum__num'], + timeseriesLimitMetric: 'count', + }); + expect(result.metrics).toEqual(['sum__num', 'count']); +}); + +test('does not duplicate the sort metric when already selected', () => { + const result = buildSortMetricOrderby({ + metrics: ['sum__num', 'count'], + timeseriesLimitMetric: 'count', + }); + expect(result.metrics).toEqual(['sum__num', 'count']); +}); + +test('unconditional ordering (orderOnlyWhenDesc: false) always orders, flipping direction', () => { + const ascending = buildSortMetricOrderby({ + metrics: ['sum__num'], + timeseriesLimitMetric: 'count', + order_desc: false, + }); + expect(ascending.orderby).toEqual([['count', true]]); + + const descending = buildSortMetricOrderby({ + metrics: ['sum__num'], + timeseriesLimitMetric: 'count', + order_desc: true, + }); + expect(descending.orderby).toEqual([['count', false]]); +}); + +test('gated ordering (orderOnlyWhenDesc: true) only orders when order_desc is set', () => { + const withoutDesc = buildSortMetricOrderby({ + metrics: ['sum__num'], + timeseriesLimitMetric: 'count', + orderOnlyWhenDesc: true, + }); + expect(withoutDesc.metrics).toEqual(['sum__num', 'count']); + expect(withoutDesc.orderby).toEqual([]); + + const withDesc = buildSortMetricOrderby({ + metrics: ['sum__num'], + timeseriesLimitMetric: 'count', + order_desc: true, + orderOnlyWhenDesc: true, + }); + expect(withDesc.orderby).toEqual([['count', false]]); +}); + +test('resolves a multi-value timeseriesLimitMetric to its first entry', () => { + const result = buildSortMetricOrderby({ + metrics: ['sum__num'], + timeseriesLimitMetric: ['count', 'avg__num'], + }); + expect(result.metrics).toEqual(['sum__num', 'count']); + expect(result.orderby).toEqual([['count', true]]); +}); diff --git a/superset-frontend/packages/superset-ui-core/src/chart/clients/ChartClient.ts b/superset-frontend/packages/superset-ui-core/src/chart/clients/ChartClient.ts index 397a854a2a5..ac64c03cecf 100644 --- a/superset-frontend/packages/superset-ui-core/src/chart/clients/ChartClient.ts +++ b/superset-frontend/packages/superset-ui-core/src/chart/clients/ChartClient.ts @@ -104,30 +104,19 @@ export default class ChartClient { const buildQueryRegistry = getChartBuildQueryRegistry(); if (metaDataRegistry.has(visType)) { - const { useLegacyApi } = metaDataRegistry.get(visType)!; const buildQuery = (await buildQueryRegistry.get(visType)) ?? (() => formData); - const requestConfig: RequestConfig = useLegacyApi - ? { - endpoint: '/explore_json/', - postPayload: { - form_data: buildQuery(formData), - }, - ...options, - } - : { - endpoint: '/api/v1/chart/data', - jsonPayload: { - query_context: buildQuery(formData), - }, - ...options, - }; + const requestConfig: RequestConfig = { + endpoint: '/api/v1/chart/data', + jsonPayload: buildQuery(formData), + ...options, + }; - return this.client - .post(requestConfig) - .then(response => - Array.isArray(response.json) ? response.json : [response.json], - ); + return this.client.post(requestConfig).then(response => { + const { result } = response.json as { result?: QueryData[] }; + + return Array.isArray(result) ? result : [response.json as QueryData]; + }); } return Promise.reject(new Error(`Unknown chart type: ${visType}`)); diff --git a/superset-frontend/packages/superset-ui-core/src/chart/components/StatefulChart.test.tsx b/superset-frontend/packages/superset-ui-core/src/chart/components/StatefulChart.test.tsx index e1109a33710..f66ad3a516f 100644 --- a/superset-frontend/packages/superset-ui-core/src/chart/components/StatefulChart.test.tsx +++ b/superset-frontend/packages/superset-ui-core/src/chart/components/StatefulChart.test.tsx @@ -21,7 +21,6 @@ import { render, waitFor, configure, act } from '@testing-library/react'; import '@testing-library/jest-dom'; import StatefulChart from './StatefulChart'; import getChartControlPanelRegistry from '../registries/ChartControlPanelRegistrySingleton'; -import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySingleton'; import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton'; // Configure testing library to use data-test attribute @@ -29,7 +28,6 @@ configure({ testIdAttribute: 'data-test' }); // Mock the registries jest.mock('../registries/ChartControlPanelRegistrySingleton'); -jest.mock('../registries/ChartMetadataRegistrySingleton'); jest.mock('../registries/ChartBuildQueryRegistrySingleton'); jest.mock('../clients/ChartClient'); @@ -67,12 +65,6 @@ beforeEach(() => { jest.clearAllMocks(); // Setup default registry mocks - jest.mocked(getChartMetadataRegistry).mockReturnValue({ - get: jest.fn().mockReturnValue({ - useLegacyApi: false, - }), - } as unknown as ReturnType); - jest.mocked(getChartBuildQueryRegistry).mockReturnValue({ get: jest.fn().mockResolvedValue(null), } as unknown as ReturnType); @@ -746,11 +738,10 @@ test('resolves async (202) responses via the injected handleAsyncChartData hook' await waitFor(() => { expect(handleAsyncChartData).toHaveBeenCalledTimes(1); }); - // Delegates the raw response + job metadata (and useLegacyApi + abort signal) + // Delegates the raw response + job metadata (and abort signal) expect(handleAsyncChartData).toHaveBeenCalledWith( { status: 202 }, asyncJob, - false, expect.any(AbortSignal), ); // Chart renders once the async data resolves @@ -798,43 +789,6 @@ test('renders synchronous (200) responses that include a response object', async expect(mockChartClient.client.post).toHaveBeenCalledTimes(1); }); -test('wraps the legacy async body as { result: [body] } for the async handler', async () => { - const legacyBody = { job_id: 'j1', channel_id: 'c1', status: 'running' }; - mockChartClient.client.post.mockResolvedValue({ - response: { status: 202 } as Response, - json: legacyBody, - }); - // Force the legacy API path for this viz type - jest.mocked(getChartMetadataRegistry).mockReturnValue({ - get: jest.fn().mockReturnValue({ useLegacyApi: true }), - } as unknown as ReturnType); - const handleAsyncChartData = jest - .fn() - .mockResolvedValue([{ data: 'legacy result' }]); - - const { getByTestId } = render( - , - ); - - await waitFor(() => { - expect(handleAsyncChartData).toHaveBeenCalledTimes(1); - }); - // Legacy body must be wrapped to match the V1 response signature - expect(handleAsyncChartData).toHaveBeenCalledWith( - { status: 202 }, - { result: [legacyBody] }, - true, - expect.any(AbortSignal), - ); - await waitFor(() => { - expect(getByTestId('super-chart')).toBeInTheDocument(); - }); -}); - test('does not apply a superseded async response over a newer one', async () => { mockChartClient.client.post.mockResolvedValue({ response: { status: 202 } as Response, @@ -1024,7 +978,7 @@ test('passes an abort signal to the async handler and aborts it on unmount', asy response: { status: 202 } as Response, json: { job_id: 'j', channel_id: 'c' }, }); - // Typed with a rest param so mock.calls is indexable (the 4th arg is the signal) + // Typed with a rest param so mock.calls is indexable (the 3rd arg is the signal) const handleAsyncChartData = jest.fn( (..._args: unknown[]) => new Promise(() => {}), // never resolves ); @@ -1040,7 +994,7 @@ test('passes an abort signal to the async handler and aborts it on unmount', asy await waitFor(() => { expect(handleAsyncChartData).toHaveBeenCalledTimes(1); }); - const signal = handleAsyncChartData.mock.calls[0][3] as AbortSignal; + const signal = handleAsyncChartData.mock.calls[0][2] as AbortSignal; expect(signal).toBeInstanceOf(AbortSignal); expect(signal.aborted).toBe(false); diff --git a/superset-frontend/packages/superset-ui-core/src/chart/components/StatefulChart.tsx b/superset-frontend/packages/superset-ui-core/src/chart/components/StatefulChart.tsx index 05aa3517f3d..593c62ea8f6 100644 --- a/superset-frontend/packages/superset-ui-core/src/chart/components/StatefulChart.tsx +++ b/superset-frontend/packages/superset-ui-core/src/chart/components/StatefulChart.tsx @@ -34,7 +34,6 @@ import { import { Loading } from '../../components/Loading'; import ChartClient from '../clients/ChartClient'; import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton'; -import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySingleton'; import getChartControlPanelRegistry from '../registries/ChartControlPanelRegistrySingleton'; import SuperChart from './SuperChart'; @@ -281,9 +280,6 @@ export default function StatefulChart(props: StatefulChartProps) { } finalFormData.viz_type = vizType; - // Get chart metadata - const { useLegacyApi } = getChartMetadataRegistry().get(vizType) || {}; - // Build query using the chart's buildQuery function const buildQuery = await getChartBuildQueryRegistry().get(vizType); let queryContext; @@ -295,31 +291,20 @@ export default function StatefulChart(props: StatefulChartProps) { queryContext = buildQueryContext(finalFormData); } - // Ensure query_context is properly formatted for new API - if (!useLegacyApi && !queryContext.queries) { + // Ensure query_context is properly formatted for the API + if (!queryContext.queries) { queryContext = { queries: [queryContext] }; } - const endpoint = useLegacyApi ? '/explore_json/' : '/api/v1/chart/data'; const requestConfig: RequestConfig = { - endpoint, + endpoint: '/api/v1/chart/data', signal: controller.signal, ...(timeout && { timeout: timeout * 1000 }), - }; - - if (useLegacyApi) { - requestConfig.postPayload = { - form_data: { - ...finalFormData, - ...(force && { force: true }), - }, - }; - } else { - requestConfig.jsonPayload = { + jsonPayload: { ...queryContext, ...(force && { force: true }), - }; - } + }, + }; const clientResponse = await chartClientRef.current!.client.post(requestConfig); @@ -347,18 +332,10 @@ export default function StatefulChart(props: StatefulChartProps) { 'the async handler or disable GLOBAL_ASYNC_QUERIES for this chart.', ); } - // The async handler (handleChartDataResponse) expects the V1 chart data - // response signature. The legacy endpoint returns a flat body, so wrap - // it as { result: [body] } exactly like legacyChartDataRequest does for - // the standard chart path; the V1 body is already correctly shaped. - const asyncPayload = useLegacyApi - ? ({ result: [clientResponse.json] } as JsonObject) - : (clientResponse.json as JsonObject); responseData = ensureIsArray( await hooks.handleAsyncChartData( rawResponse, - asyncPayload, - useLegacyApi, + clientResponse.json as JsonObject, controller.signal, ), ); @@ -374,10 +351,8 @@ export default function StatefulChart(props: StatefulChartProps) { : [clientResponse.json] ) as JsonObject[]; - // Handle the nested result structure from the new API - responseData = ( - !useLegacyApi && rows[0]?.result ? rows[0].result : rows - ) as QueryData[]; + // Handle the nested result structure from the API + responseData = (rows[0]?.result ? rows[0].result : rows) as QueryData[]; } // Don't pair this request's data with newer props or fire a stale onLoad diff --git a/superset-frontend/packages/superset-ui-core/src/chart/models/ChartMetadata.ts b/superset-frontend/packages/superset-ui-core/src/chart/models/ChartMetadata.ts index 3b5073f02b3..f8bd22d4fb2 100644 --- a/superset-frontend/packages/superset-ui-core/src/chart/models/ChartMetadata.ts +++ b/superset-frontend/packages/superset-ui-core/src/chart/models/ChartMetadata.ts @@ -40,7 +40,6 @@ export interface ChartMetadataConfig { supportedAnnotationTypes?: string[]; thumbnail: string; thumbnailDark?: string; - useLegacyApi?: boolean; behaviors?: Behavior[]; exampleGallery?: ExampleImage[]; tags?: string[]; @@ -75,8 +74,6 @@ export default class ChartMetadata { thumbnailDark?: string; - useLegacyApi: boolean; - behaviors: Behavior[]; datasourceCount: number; @@ -112,7 +109,6 @@ export default class ChartMetadata { supportedAnnotationTypes = [], thumbnail, thumbnailDark, - useLegacyApi = false, behaviors = [], datasourceCount = 1, enableNoResults = true, @@ -144,7 +140,6 @@ export default class ChartMetadata { this.supportedAnnotationTypes = supportedAnnotationTypes; this.thumbnail = thumbnail; this.thumbnailDark = thumbnailDark; - this.useLegacyApi = useLegacyApi; this.behaviors = behaviors; this.datasourceCount = datasourceCount; this.enableNoResults = enableNoResults; diff --git a/superset-frontend/packages/superset-ui-core/src/chart/models/ChartProps.ts b/superset-frontend/packages/superset-ui-core/src/chart/models/ChartProps.ts index c372a0cc691..638b5888a90 100644 --- a/superset-frontend/packages/superset-ui-core/src/chart/models/ChartProps.ts +++ b/superset-frontend/packages/superset-ui-core/src/chart/models/ChartProps.ts @@ -75,7 +75,6 @@ type Hooks = { handleAsyncChartData?: ( response: Response, json: JsonObject, - useLegacyApi?: boolean, signal?: AbortSignal, ) => Promise | QueryData[]; } & PlainObject; diff --git a/superset-frontend/packages/superset-ui-core/src/utils/mapStyles.test.ts b/superset-frontend/packages/superset-ui-core/src/utils/mapStyles.test.ts index 170c04370ff..b27242ff87d 100644 --- a/superset-frontend/packages/superset-ui-core/src/utils/mapStyles.test.ts +++ b/superset-frontend/packages/superset-ui-core/src/utils/mapStyles.test.ts @@ -18,7 +18,9 @@ */ import { + DEFAULT_DECK_MULTI_MAX_SLICES, getBootstrapDataFromDocument, + getDeckMultiMaxSlices, getDefaultMapRenderer, getMapProviderMapStyle, getMapboxApiKeyFromBootstrap, @@ -58,6 +60,16 @@ test('Mapbox key helpers report absence and presence from bootstrap data', () => ).toBe(true); }); +test('deck.gl multi-slice cap falls back to the default when unset', () => { + expect(getDeckMultiMaxSlices({ common: { conf: {} } })).toBe( + DEFAULT_DECK_MULTI_MAX_SLICES, + ); + expect(getDeckMultiMaxSlices(undefined)).toBe(DEFAULT_DECK_MULTI_MAX_SLICES); + expect( + getDeckMultiMaxSlices({ common: { conf: { DECK_MULTI_MAX_SLICES: 5 } } }), + ).toBe(5); +}); + test('bootstrap data helper parses document data safely', () => { document.body.innerHTML = `
0; } +export function getDeckMultiMaxSlices( + bootstrapData: unknown = getBootstrapDataFromDocument(), +): number { + const maxSlices = (bootstrapData as BootstrapData | undefined)?.common?.conf + ?.DECK_MULTI_MAX_SLICES; + return typeof maxSlices === 'number' && Number.isFinite(maxSlices) + ? maxSlices + : DEFAULT_DECK_MULTI_MAX_SLICES; +} + export function getDefaultMapRenderer( bootstrapData: unknown = getBootstrapDataFromDocument(), ): MapProvider { diff --git a/superset-frontend/packages/superset-ui-core/test/chart/clients/ChartClient.test.ts b/superset-frontend/packages/superset-ui-core/test/chart/clients/ChartClient.test.ts index 8d11b98d175..d735a595cf4 100644 --- a/superset-frontend/packages/superset-ui-core/test/chart/clients/ChartClient.test.ts +++ b/superset-frontend/packages/superset-ui-core/test/chart/clients/ChartClient.test.ts @@ -122,7 +122,7 @@ describe('ChartClient', () => { }); describe('.loadQueryData(formData, options)', () => { - test('returns a promise of query data for known chart type', () => { + test('returns a promise of query data for known chart type', async () => { getChartMetadataRegistry().registerValue( VizType.WordCloud, new ChartMetadata({ name: 'Word Cloud', thumbnail: '' }), @@ -132,14 +132,18 @@ describe('ChartClient', () => { VizType.WordCloud, (formData: QueryFormData) => buildQueryContext(formData), ); - fetchMock.post('glob:*/api/v1/chart/data', [ - { - field1: 'abc', - field2: 'def', - }, - ]); + // The real /api/v1/chart/data endpoint wraps its results in + // `{ result: [...] }`, not a bare array. + fetchMock.post('glob:*/api/v1/chart/data', { + result: [ + { + field1: 'abc', + field2: 'def', + }, + ], + }); - return expect( + await expect( chartClient.loadQueryData({ granularity: 'minute', viz_type: VizType.WordCloud, @@ -151,6 +155,16 @@ describe('ChartClient', () => { field2: 'def', }, ]); + + // The query context fields must be posted at the top level of the + // request body -- the endpoint's schema does not expect them nested + // under a `query_context` key. + const calls = fetchMock.callHistory.calls('glob:*/api/v1/chart/data'); + const requestBody = JSON.parse( + (calls[0].options as RequestInit).body as string, + ); + expect(requestBody.query_context).toBeUndefined(); + expect(requestBody.datasource).toEqual({ id: 1, type: 'table' }); }); test('returns a promise that rejects for unknown chart type', () => expect( @@ -160,42 +174,6 @@ describe('ChartClient', () => { datasource: '1__table', }), ).rejects.toEqual(new Error('Unknown chart type: rainbow_3d_pie'))); - - test('fetches data from the legacy API if ChartMetadata has useLegacyApi=true,', () => { - // note legacy charts do not register a buildQuery function in the registry - getChartMetadataRegistry().registerValue( - 'word_cloud_legacy', - new ChartMetadata({ - name: 'Legacy Word Cloud', - thumbnail: '.png', - useLegacyApi: true, - }), - ); - - fetchMock.post('glob:*/api/v1/chart/data', () => - Promise.reject(new Error('Unexpected all to v1 API')), - ); - - // post `Superset.route_base = ""`, the legacy endpoint - // collapsed from `/superset/explore_json/` to `/explore_json/`. - fetchMock.post('glob:*/explore_json/', { - field1: 'abc', - field2: 'def', - }); - - return expect( - chartClient.loadQueryData({ - granularity: 'minute', - viz_type: 'word_cloud_legacy', - datasource: '1__table', - }), - ).resolves.toEqual([ - { - field1: 'abc', - field2: 'def', - }, - ]); - }); }); describe('.loadDatasource(datasourceKey, options)', () => { diff --git a/superset-frontend/playwright/tests/embedded/pivot-collapse-state.spec.ts b/superset-frontend/playwright/tests/embedded/pivot-collapse-state.spec.ts index 06fbc244e8e..0e386a53e03 100644 --- a/superset-frontend/playwright/tests/embedded/pivot-collapse-state.spec.ts +++ b/superset-frontend/playwright/tests/embedded/pivot-collapse-state.spec.ts @@ -38,6 +38,14 @@ * * NOTE: the embedded suite only runs when the embedded SDK bundle is built and * INCLUDE_EMBEDDED=true (CI sets both). It is skipped otherwise. + * + * NOTE: the embedded project runs with admin storageState, and the session + * cookie the iframe ends up with is racy: the /embedded/ response + * rotates it to an anonymous session while the SDK's parallel csrf and + * guest-token fetches rewrite the admin one, so chart data requests are + * evaluated as either admin or guest depending on which response lands last. + * Fixture charts must therefore hold up under GUEST evaluation — see the + * query_context note below — or the suite only passes when admin wins. */ import { test, expect, Browser, BrowserContext, Page } from '@playwright/test'; import { createServer, IncomingMessage, ServerResponse, Server } from 'http'; @@ -182,12 +190,43 @@ test.describe('Embedded Pivot Table collapse state (#33406)', () => { row_limit: 1000, order_desc: true, }; + // Charts saved through Explore always persist a query_context alongside + // params. Store one here too: guest (embedded) requests are validated + // against the stored chart, and a params-only chart makes the guest + // payload look tampered (its query `columns` aren't found on the chart), + // failing every chart data request with a 403. + const queryContext = { + datasource: { id: datasetId, type: 'table' }, + force: false, + queries: [ + { + filters: [], + extras: { having: '', where: '' }, + applied_time_extras: {}, + columns: ['state', 'name'], + metrics: ['count'], + orderby: [['count', false]], + annotation_layers: [], + row_limit: 1000, + series_limit: 0, + order_desc: true, + url_params: {}, + custom_params: {}, + custom_form_data: {}, + }, + ], + form_data: params, + result_format: 'json', + result_type: 'full', + }; const chartResp = await apiPost(setupPage, 'api/v1/chart/', { slice_name: `pivot_collapse_repro_${Date.now()}`, viz_type: 'pivot_table_v2', datasource_id: datasetId, datasource_type: 'table', params: JSON.stringify(params), + query_context: JSON.stringify(queryContext), + query_context_generation: true, }); chartId = (await chartResp.json()).id; diff --git a/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/PairedTTest.tsx b/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/PairedTTest.tsx deleted file mode 100644 index fd339dfb164..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-paired-t-test/src/PairedTTest.tsx +++ /dev/null @@ -1,143 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -/* eslint-disable react/no-array-index-key */ -import { memo } from 'react'; -import { styled } from '@apache-superset/core/theme'; -import TTestTable, { DataEntry } from './TTestTable'; - -interface PairedTTestProps { - alpha?: number; - className?: string; - data: Record; - groups: string[]; - liftValPrec?: number; - metrics: string[]; - pValPrec?: number; -} - -const StyledDiv = styled.div` - ${({ theme }) => ` - .superset-legacy-chart-paired-t-test .scrollbar-container { - overflow: auto; - } - - .paired-ttest-table .scrollbar-content { - padding-left: ${theme.sizeUnit}px; - padding-right: ${theme.sizeUnit}px; - margin-bottom: 0; - } - - .paired-ttest-table table { - margin-bottom: 0; - } - - .paired-ttest-table h1 { - margin-left: ${theme.sizeUnit}px; - } - - .reactable-data tr { - font-feature-settings: 'tnum' 1; - } - - .reactable-data tr, - .reactable-header-sortable { - -webkit-transition: ease-in-out 0.1s; - transition: ease-in-out 0.1s; - } - - .reactable-data tr:hover { - background-color: ${theme.colorFillTertiary}; - } - - .reactable-data tr .false { - color: ${theme.colorError}; - } - - .reactable-data tr .true { - color: ${theme.colorSuccess}; - } - - .reactable-data tr .control { - color: ${theme.colorPrimary}; - } - - .reactable-data tr .invalid { - color: ${theme.colorWarning}; - } - - .reactable-data .control td { - background-color: ${theme.colorFillTertiary}; - } - - .reactable-header-sortable:hover, - .reactable-header-sortable:focus, - .reactable-header-sort-asc, - .reactable-header-sort-desc { - background-color: ${theme.colorFillTertiary}; - position: relative; - } - - .reactable-header-sort-asc:after { - content: '\\25bc'; - position: absolute; - right: ${theme.sizeUnit * 3}px; - } - - .reactable-header-sort-desc:after { - content: '\\25b2'; - position: absolute; - right: ${theme.sizeUnit * 3}px; - } - `} -`; - -function PairedTTest({ - alpha = 0.05, - className = '', - data, - groups, - liftValPrec = 4, - metrics, - pValPrec = 6, -}: PairedTTestProps) { - return ( - -
-
-
- {metrics.map((metric, i) => ( - - ))} -
-
-
-
- ); -} - -// memo preserves the shallow-prop render bailout of the PureComponent original -export default memo(PairedTTest); diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/CHANGELOG.md b/superset-frontend/plugins/legacy-plugin-chart-rose/CHANGELOG.md deleted file mode 100644 index 48f7ffb922d..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-rose/CHANGELOG.md +++ /dev/null @@ -1,61 +0,0 @@ - - -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [0.20.0](https://github.com/apache/superset/compare/v2021.41.0...v0.20.0) (2024-09-09) - -### Bug Fixes - -- **Dashboard:** Color inconsistency on refreshes and conflicts ([#27439](https://github.com/apache/superset/issues/27439)) ([313ee59](https://github.com/apache/superset/commit/313ee596f5435894f857d72be7269d5070c8c964)) -- **explore:** make SORT-Descending visible if Sort-by has value ([#17726](https://github.com/apache/superset/issues/17726)) ([d5768ab](https://github.com/apache/superset/commit/d5768ab649a70fd4f541ad4982498f622160b220)) - -### Features - -- apply standardized form data to tier 2 charts ([#20530](https://github.com/apache/superset/issues/20530)) ([de524bc](https://github.com/apache/superset/commit/de524bc59f011fd361dcdb7d35c2cb51f7eba442)) -- **explore:** improve UI in the control panel ([#19748](https://github.com/apache/superset/issues/19748)) ([e3a54aa](https://github.com/apache/superset/commit/e3a54aa3c15bdd0c970aa73f898288a408205c97)) -- improve color consistency (save all labels) ([#19038](https://github.com/apache/superset/issues/19038)) ([dc57508](https://github.com/apache/superset/commit/dc575080d7e43d40b1734bb8f44fdc291cb95b11)) -- update time comparison choices (again) ([#17968](https://github.com/apache/superset/issues/17968)) ([05d9cde](https://github.com/apache/superset/commit/05d9cde203b99f8c63106446f0be58668cc9f0c9)) -- update time comparison choices (again) ([#22458](https://github.com/apache/superset/issues/22458)) ([9e81c3a](https://github.com/apache/superset/commit/9e81c3a1192a18226d505178d16e1e395917a719)) - -# [0.19.0](https://github.com/apache/superset/compare/v2021.41.0...v0.19.0) (2024-09-07) - -### Bug Fixes - -- **Dashboard:** Color inconsistency on refreshes and conflicts ([#27439](https://github.com/apache/superset/issues/27439)) ([313ee59](https://github.com/apache/superset/commit/313ee596f5435894f857d72be7269d5070c8c964)) -- **explore:** make SORT-Descending visible if Sort-by has value ([#17726](https://github.com/apache/superset/issues/17726)) ([d5768ab](https://github.com/apache/superset/commit/d5768ab649a70fd4f541ad4982498f622160b220)) - -### Features - -- apply standardized form data to tier 2 charts ([#20530](https://github.com/apache/superset/issues/20530)) ([de524bc](https://github.com/apache/superset/commit/de524bc59f011fd361dcdb7d35c2cb51f7eba442)) -- **explore:** improve UI in the control panel ([#19748](https://github.com/apache/superset/issues/19748)) ([e3a54aa](https://github.com/apache/superset/commit/e3a54aa3c15bdd0c970aa73f898288a408205c97)) -- improve color consistency (save all labels) ([#19038](https://github.com/apache/superset/issues/19038)) ([dc57508](https://github.com/apache/superset/commit/dc575080d7e43d40b1734bb8f44fdc291cb95b11)) -- update time comparison choices (again) ([#17968](https://github.com/apache/superset/issues/17968)) ([05d9cde](https://github.com/apache/superset/commit/05d9cde203b99f8c63106446f0be58668cc9f0c9)) -- update time comparison choices (again) ([#22458](https://github.com/apache/superset/issues/22458)) ([9e81c3a](https://github.com/apache/superset/commit/9e81c3a1192a18226d505178d16e1e395917a719)) - -# [0.18.0](https://github.com/apache-superset/superset-ui/compare/v0.17.87...v0.18.0) (2021-08-30) - -**Note:** Version bump only for package @superset-ui/legacy-plugin-chart-rose - -## [0.17.61](https://github.com/apache-superset/superset-ui/compare/v0.17.60...v0.17.61) (2021-07-02) - -**Note:** Version bump only for package @superset-ui/legacy-plugin-chart-rose diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/README.md b/superset-frontend/plugins/legacy-plugin-chart-rose/README.md deleted file mode 100644 index c010abbd792..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-rose/README.md +++ /dev/null @@ -1,52 +0,0 @@ - - -## @superset-ui/legacy-plugin-chart-rose - -[![Version](https://img.shields.io/npm/v/@superset-ui/legacy-plugin-chart-rose.svg?style=flat)](https://www.npmjs.com/package/@superset-ui/legacy-plugin-chart-rose) -[![Libraries.io](https://img.shields.io/librariesio/release/npm/%40superset-ui%2Flegacy-plugin-chart-rose?style=flat)](https://libraries.io/npm/@superset-ui%2Flegacy-plugin-chart-rose) - -This plugin provides Nightingale Rose Diagram for Superset. - -### Usage - -Configure `key`, which can be any `string`, and register the plugin. This `key` will be used to -lookup this chart throughout the app. - -```js -import RoseChartPlugin from '@superset-ui/legacy-plugin-chart-rose'; - -new RoseChartPlugin().configure({ key: 'rose' }).register(); -``` - -Then use it via `SuperChart`. See -[storybook](https://apache-superset.github.io/superset-ui-plugins/?selectedKind=plugin-chart-rose) -for more details. - -```js - -``` diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/package.json b/superset-frontend/plugins/legacy-plugin-chart-rose/package.json deleted file mode 100644 index 83eb8e6a495..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-rose/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@superset-ui/legacy-plugin-chart-rose", - "version": "0.20.3", - "description": "Superset Legacy Chart - Nightingale Rose Diagram", - "keywords": [ - "superset" - ], - "homepage": "https://github.com/apache/superset/tree/master/superset-frontend/plugins/legacy-plugin-chart-rose#readme", - "bugs": { - "url": "https://github.com/apache/superset/issues" - }, - "license": "Apache-2.0", - "author": "Superset", - "repository": { - "type": "git", - "url": "https://github.com/apache/superset.git", - "directory": "superset-frontend/plugins/legacy-plugin-chart-rose" - }, - "files": [ - "esm", - "lib" - ], - "main": "lib/index.js", - "module": "esm/index.js", - "publishConfig": { - "access": "public" - }, - "dependencies": { - "d3": "^3.5.17", - "nvd3-fork": "^2.0.5", - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "@apache-superset/core": "*", - "@emotion/react": "^11.4.1", - "@superset-ui/chart-controls": "*", - "@superset-ui/core": "*", - "react": "^18.3.0" - } -} diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/src/ReactRose.tsx b/superset-frontend/plugins/legacy-plugin-chart-rose/src/ReactRose.tsx deleted file mode 100644 index fde642a9b67..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-rose/src/ReactRose.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { reactify } from '@superset-ui/core'; -import { styled, css } from '@apache-superset/core/theme'; -import { Global } from '@emotion/react'; -import Component from './Rose'; - -// Type-erase the render function to allow flexible prop spreading in the wrapper. -// The Rose render function has typed props, but the wrapper passes props via spread -// which TypeScript cannot verify at compile time. Props are validated at runtime. -const ReactComponent = reactify( - Component as unknown as ( - container: HTMLDivElement, - props: Record, - ) => void, -); - -interface RoseWrapperProps { - className?: string; - [key: string]: unknown; -} - -const Rose = ({ className, ...otherProps }: RoseWrapperProps) => ( -
- css` - .tooltip { - line-height: 1; - padding: ${theme.sizeUnit * 3}px; - background: ${theme.colorBgElevated}; - color: ${theme.colorText}; - border-radius: 4px; - pointer-events: none; - z-index: 1000; - font-size: ${theme.fontSizeSM}px; - } - `} - /> - -
-); - -export default styled(Rose)` - ${({ theme }) => ` - .superset-legacy-chart-rose path { - transition: fill-opacity 180ms linear; - stroke: ${theme.colorBorder}; - stroke-width: 1px; - stroke-opacity: 1; - fill-opacity: 0.75; - } - - .superset-legacy-chart-rose text { - font-size: ${theme.fontSizeSM}px; - font-family: ${theme.fontFamily}; - pointer-events: none; - } - - .superset-legacy-chart-rose .clickable path { - cursor: pointer; - } - - .superset-legacy-chart-rose .hover path { - fill-opacity: 1; - } - - .nv-legend .nv-series { - cursor: pointer; - } - `} -`; diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/src/Rose.ts b/superset-frontend/plugins/legacy-plugin-chart-rose/src/Rose.ts deleted file mode 100644 index 974d58a2972..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-rose/src/Rose.ts +++ /dev/null @@ -1,697 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// @ts-nocheck -/* oxlint-disable no-use-before-define: ["error", { "functions": false }] */ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable react/sort-prop-types */ -import d3 from 'd3'; -import PropTypes from 'prop-types'; -import nv from 'nvd3-fork'; -import { - getTimeFormatter, - getNumberFormatter, - CategoricalColorNamespace, - sanitizeHtml, -} from '@superset-ui/core'; - -interface RoseDataEntry { - key: string[]; - name: string; - time: number; - value: number; - id: number; -} - -interface RoseData { - [timestamp: string]: RoseDataEntry[]; -} - -interface ArcDatum { - startAngle: number; - endAngle: number; - innerRadius: number; - outerRadius: number; - name?: string; - arcId?: number; - val?: number; - time?: number; - percent?: number; -} - -interface RoseProps { - data: RoseData; - width: number; - height: number; - colorScheme: string; - dateTimeFormat: string; - numberFormat: string; - useRichTooltip: boolean; - useAreaProportions: boolean; - sliceId: number; -} - -const propTypes = { - // Data is an object hashed by numeric value, perhaps timestamp - data: PropTypes.objectOf( - PropTypes.arrayOf( - PropTypes.shape({ - key: PropTypes.arrayOf(PropTypes.string), - name: PropTypes.arrayOf(PropTypes.string), - time: PropTypes.number, - value: PropTypes.number, - }), - ), - ), - width: PropTypes.number, - height: PropTypes.number, - dateTimeFormat: PropTypes.string, - numberFormat: PropTypes.string, - useRichTooltip: PropTypes.bool, - useAreaProportions: PropTypes.bool, - colorScheme: PropTypes.string, -}; - -function copyArc(d: ArcDatum): ArcDatum { - return { - startAngle: d.startAngle, - endAngle: d.endAngle, - innerRadius: d.innerRadius, - outerRadius: d.outerRadius, - }; -} - -function sortValues(a: RoseDataEntry, b: RoseDataEntry): number { - if (a.value === b.value) { - return a.name > b.name ? 1 : -1; - } - - return b.value - a.value; -} - -function Rose(element: HTMLElement, props: RoseProps): void { - const { - data, - width, - height, - colorScheme, - dateTimeFormat, - numberFormat, - useRichTooltip, - useAreaProportions, - sliceId, - } = props; - - const div = d3.select(element); - div.classed('superset-legacy-chart-rose', true); - - const datum = data; - const times = Object.keys(datum) - .map(t => parseInt(t, 10)) - .sort((a, b) => a - b); - const numGrains = times.length; - const numGroups = datum[times[0]].length; - const format = getNumberFormatter(numberFormat); - const timeFormat = getTimeFormatter(dateTimeFormat); - const colorFn = CategoricalColorNamespace.getScale(colorScheme); - - d3.select('.nvtooltip').remove(); - div.selectAll('*').remove(); - - const arc = d3.svg.arc(); - const legend = nv.models.legend(); - const tooltip = nv.models.tooltip(); - const state = { disabled: datum[times[0]].map(() => false) }; - - const svg = div.append('svg').attr('width', width).attr('height', height); - - const g = svg.append('g').attr('class', 'rose').append('g'); - - const legendWrap = g.append('g').attr('class', 'legendWrap'); - - function legendData(adatum: RoseData) { - return adatum[times[0]].map((v: RoseDataEntry, i: number) => ({ - disabled: state.disabled[i], - // Keep the raw name as `key` so it matches the value used for arc - // fills (colorFn is called with d.name on arcs and d.key on the - // legend). nvd3-fork's legend renders `key` via .text(), so the - // raw value is escaped at the DOM sink. - key: v.name, - })); - } - - function tooltipData(d: ArcDatum, i: number, adatum: RoseData) { - const timeIndex = Math.floor(d.arcId / numGroups); - // nvd3-fork's nv.models.tooltip renders the `key` strings via .html(), - // so any HTML in user-controlled column values would execute. Pass the - // keys through sanitizeHtml to strip dangerous markup while preserving - // legitimate text content. - const series = useRichTooltip - ? adatum[times[timeIndex]] - .filter(v => !state.disabled[v.id % numGroups]) - .map(v => ({ - key: sanitizeHtml(v.name), - value: v.value, - color: colorFn(v.name, sliceId), - highlight: v.id === d.arcId, - })) - : [ - { - key: sanitizeHtml(d.name), - value: d.val, - color: colorFn(d.name, sliceId), - }, - ]; - - return { - key: 'Date', - value: d.time, - series, - }; - } - - legend.width(width).color(d => colorFn(d.key, sliceId)); - legendWrap.datum(legendData(datum)).call(legend); - - tooltip.headerFormatter(timeFormat).valueFormatter(format); - tooltip.classes('tooltip'); - - // Compute max radius, which the largest value will occupy - const roseHeight = height - legend.height(); - const margin = { top: legend.height() }; - const edgeMargin = 35; // space between outermost radius and slice edge - const maxRadius = Math.min(width, roseHeight) / 2 - edgeMargin; - const labelThreshold = 0.05; - const gro = 8; // mouseover radius growth in pixels - const mini = 0.075; - - const centerTranslate = `translate(${width / 2},${ - roseHeight / 2 + margin.top - })`; - const roseWrap = g - .append('g') - .attr('transform', centerTranslate) - .attr('class', 'roseWrap'); - - const labelsWrap = g - .append('g') - .attr('transform', centerTranslate) - .attr('class', 'labelsWrap'); - - const groupLabelsWrap = g - .append('g') - .attr('transform', centerTranslate) - .attr('class', 'groupLabelsWrap'); - - // Compute inner and outer angles for each data point - function computeArcStates(adatum: RoseData) { - // Find the max sum of values across all time - let maxSum = 0; - let grain = 0; - const sums = []; - for (const t of times) { - const sum = datum[t].reduce( - (a, v, i) => a + (state.disabled[i] ? 0 : v.value), - 0, - ); - maxSum = sum > maxSum ? sum : maxSum; - sums[grain] = sum; - grain += 1; - } - - // Compute angle occupied by each time grain - const dtheta = (Math.PI * 2) / numGrains; - const angles = []; - for (let i = 0; i <= numGrains; i += 1) { - angles.push(dtheta * i - Math.PI / 2); - } - - // Compute proportion - const P = maxRadius / maxSum; - const Q = P * maxRadius; - const computeOuterRadius = (value: number, innerRadius: number): number => - useAreaProportions - ? Math.sqrt(Q * value + innerRadius * innerRadius) - : P * value + innerRadius; - - const arcSt = { - data: [], - extend: {}, - push: {}, - pieStart: {}, - pie: {}, - pieOver: {}, - mini: {}, - labels: [], - groupLabels: [], - }; - let arcId = 0; - for (let i = 0; i < numGrains; i += 1) { - const t = times[i]; - const startAngle = angles[i]; - const endAngle = angles[i + 1]; - const G = (2 * Math.PI) / sums[i]; - let innerRadius = 0; - let outerRadius; - let pieStartAngle = 0; - let pieEndAngle; - for (const v of adatum[t]) { - const val = state.disabled[arcId % numGroups] ? 0 : v.value; - const { name, time } = v; - v.id = arcId; - outerRadius = computeOuterRadius(val, innerRadius); - arcSt.data.push({ - startAngle, - endAngle, - innerRadius, - outerRadius, - name, - arcId, - val, - time, - }); - arcSt.extend[arcId] = { - startAngle, - endAngle, - innerRadius, - name, - outerRadius: outerRadius + gro, - }; - arcSt.push[arcId] = { - startAngle, - endAngle, - innerRadius: innerRadius + gro, - outerRadius: outerRadius + gro, - }; - arcSt.pieStart[arcId] = { - startAngle, - endAngle, - innerRadius: mini * maxRadius, - outerRadius: maxRadius, - }; - arcSt.mini[arcId] = { - startAngle, - endAngle, - innerRadius: innerRadius * mini, - outerRadius: outerRadius * mini, - }; - arcId += 1; - innerRadius = outerRadius; - } - const labelArc = { ...arcSt.data[i * numGroups] }; - labelArc.outerRadius = maxRadius + 20; - labelArc.innerRadius = maxRadius + 15; - arcSt.labels.push(labelArc); - for (const v of adatum[t].concat().sort(sortValues)) { - const val = state.disabled[v.id % numGroups] ? 0 : v.value; - pieEndAngle = G * val + pieStartAngle; - arcSt.pie[v.id] = { - startAngle: pieStartAngle, - endAngle: pieEndAngle, - innerRadius: maxRadius * mini, - outerRadius: maxRadius, - percent: v.value / sums[i], - }; - arcSt.pieOver[v.id] = { - startAngle: pieStartAngle, - endAngle: pieEndAngle, - innerRadius: maxRadius * mini, - outerRadius: maxRadius + gro, - }; - pieStartAngle = pieEndAngle; - } - } - arcSt.groupLabels = arcSt.data.slice(0, numGroups); - - return arcSt; - } - - let arcSt = computeArcStates(datum); - - function tween(target: ArcDatum, resFunc: (d: ArcDatum) => string) { - return function doTween(d: ArcDatum) { - const interpolate = d3.interpolate(copyArc(d), copyArc(target)); - - return (t: number) => resFunc(Object.assign(d, interpolate(t))); - }; - } - - function arcTween(target: ArcDatum) { - return tween(target, (d: ArcDatum) => arc(d)); - } - - function translateTween(target: ArcDatum) { - return tween(target, (d: ArcDatum) => `translate(${arc.centroid(d)})`); - } - - // Grab the ID range of segments stand between - // this segment and the edge of the circle - const segmentsToEdgeCache: Record = {}; - function getSegmentsToEdge(arcId: number): [number, number] { - if (segmentsToEdgeCache[arcId]) { - return segmentsToEdgeCache[arcId]; - } - const timeIndex = Math.floor(arcId / numGroups); - segmentsToEdgeCache[arcId] = [arcId + 1, numGroups * (timeIndex + 1) - 1]; - - return segmentsToEdgeCache[arcId]; - } - - // Get the IDs of all segments in a timeIndex - const segmentsInTimeCache: Record = {}; - function getSegmentsInTime(arcId: number): [number, number] { - if (segmentsInTimeCache[arcId]) { - return segmentsInTimeCache[arcId]; - } - const timeIndex = Math.floor(arcId / numGroups); - segmentsInTimeCache[arcId] = [ - timeIndex * numGroups, - (timeIndex + 1) * numGroups - 1, - ]; - - return segmentsInTimeCache[arcId]; - } - - let clickId = -1; - let inTransition = false; - const ae = roseWrap - .selectAll('g') - .data(JSON.parse(JSON.stringify(arcSt.data))) // deep copy data state - .enter() - .append('g') - .attr('class', 'segment') - .classed('clickable', true); - - const labels = labelsWrap - .selectAll('g') - .data(JSON.parse(JSON.stringify(arcSt.labels))) - .enter() - .append('g') - .attr('class', 'roseLabel') - .attr('transform', d => `translate(${arc.centroid(d)})`); - - labels - .append('text') - .style('text-anchor', 'middle') - .style('fill', '#000') - .text(d => timeFormat(d.time)); - - const groupLabels = groupLabelsWrap - .selectAll('g') - .data(JSON.parse(JSON.stringify(arcSt.groupLabels))) - .enter() - .append('g'); - - groupLabels - .style('opacity', 0) - .attr('class', 'roseGroupLabels') - .append('text') - .style('text-anchor', 'middle') - .style('fill', '#000') - .text(d => d.name); - - const arcs = ae - .append('path') - .attr('class', 'arc') - .attr('fill', d => colorFn(d.name, sliceId)) - .attr('d', arc); - - function mousemove(): void { - tooltip(); - } - - function mouseover(this: Element, b: ArcDatum, i: number): void { - tooltip.data(tooltipData(b, i, datum)).hidden(false); - const $this = d3.select(this); - $this.classed('hover', true); - if (clickId < 0 && !inTransition) { - $this - .select('path') - .interrupt() - .transition() - .duration(180) - .attrTween('d', arcTween(arcSt.extend[i])); - const edge = getSegmentsToEdge(i); - arcs - .filter(d => edge[0] <= d.arcId && d.arcId <= edge[1]) - .interrupt() - .transition() - .duration(180) - .attrTween('d', d => arcTween(arcSt.push[d.arcId])(d)); - } else if (!inTransition) { - const segments = getSegmentsInTime(clickId); - if (segments[0] <= b.arcId && b.arcId <= segments[1]) { - $this - .select('path') - .interrupt() - .transition() - .duration(180) - .attrTween('d', arcTween(arcSt.pieOver[i])); - } - } - } - - function mouseout(this: Element, b: ArcDatum, i: number): void { - tooltip.hidden(true); - const $this = d3.select(this); - $this.classed('hover', false); - if (clickId < 0 && !inTransition) { - $this - .select('path') - .interrupt() - .transition() - .duration(180) - .attrTween('d', arcTween(arcSt.data[i])); - const edge = getSegmentsToEdge(i); - arcs - .filter(d => edge[0] <= d.arcId && d.arcId <= edge[1]) - .interrupt() - .transition() - .duration(180) - .attrTween('d', d => arcTween(arcSt.data[d.arcId])(d)); - } else if (!inTransition) { - const segments = getSegmentsInTime(clickId); - if (segments[0] <= b.arcId && b.arcId <= segments[1]) { - $this - .select('path') - .interrupt() - .transition() - .duration(180) - .attrTween('d', arcTween(arcSt.pie[i])); - } - } - } - - function click(b: ArcDatum, i: number): void { - if (inTransition) { - return; - } - const delay = d3.event.altKey ? 3750 : 375; - const segments = getSegmentsInTime(i); - if (clickId < 0) { - inTransition = true; - clickId = i; - labels - .interrupt() - .transition() - .duration(delay) - .attrTween('transform', d => - translateTween({ - outerRadius: 0, - innerRadius: 0, - startAngle: d.startAngle, - endAngle: d.endAngle, - })(d), - ) - .style('opacity', 0); - groupLabels - .attr( - 'transform', - `translate(${arc.centroid({ - outerRadius: maxRadius + 20, - innerRadius: maxRadius + 15, - startAngle: arcSt.data[i].startAngle, - endAngle: arcSt.data[i].endAngle, - })})`, - ) - .interrupt() - .transition() - .delay(delay) - .duration(delay) - .attrTween('transform', d => - translateTween({ - outerRadius: maxRadius + 20, - innerRadius: maxRadius + 15, - startAngle: arcSt.pie[segments[0] + d.arcId].startAngle, - endAngle: arcSt.pie[segments[0] + d.arcId].endAngle, - })(d), - ) - .style('opacity', d => - state.disabled[d.arcId] || - arcSt.pie[segments[0] + d.arcId].percent < labelThreshold - ? 0 - : 1, - ); - ae.classed( - 'clickable', - d => segments[0] > d.arcId || d.arcId > segments[1], - ); - arcs - .filter(d => segments[0] <= d.arcId && d.arcId <= segments[1]) - .interrupt() - .transition() - .duration(delay) - .attrTween('d', d => arcTween(arcSt.pieStart[d.arcId])(d)) - .transition() - .duration(delay) - .attrTween('d', d => arcTween(arcSt.pie[d.arcId])(d)) - .each('end', () => { - inTransition = false; - }); - arcs - .filter(d => segments[0] > d.arcId || d.arcId > segments[1]) - .interrupt() - .transition() - .duration(delay) - .attrTween('d', d => arcTween(arcSt.mini[d.arcId])(d)); - } else if (clickId < segments[0] || segments[1] < clickId) { - inTransition = true; - const clickSegments = getSegmentsInTime(clickId); - labels - .interrupt() - .transition() - .delay(delay) - .duration(delay) - .attrTween('transform', d => - translateTween(arcSt.labels[d.arcId / numGroups])(d), - ) - .style('opacity', 1); - groupLabels - .interrupt() - .transition() - .duration(delay) - .attrTween( - 'transform', - translateTween({ - outerRadius: maxRadius + 20, - innerRadius: maxRadius + 15, - startAngle: arcSt.data[clickId].startAngle, - endAngle: arcSt.data[clickId].endAngle, - }), - ) - .style('opacity', 0); - ae.classed('clickable', true); - arcs - .filter(d => clickSegments[0] <= d.arcId && d.arcId <= clickSegments[1]) - .interrupt() - .transition() - .duration(delay) - .attrTween('d', d => arcTween(arcSt.pieStart[d.arcId])(d)) - .transition() - .duration(delay) - .attrTween('d', d => arcTween(arcSt.data[d.arcId])(d)) - .each('end', () => { - clickId = -1; - inTransition = false; - }); - arcs - .filter(d => clickSegments[0] > d.arcId || d.arcId > clickSegments[1]) - .interrupt() - .transition() - .delay(delay) - .duration(delay) - .attrTween('d', d => arcTween(arcSt.data[d.arcId])(d)); - } - } - - ae.on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('mousemove', mousemove) - .on('click', click); - - function updateActive(): void { - const delay = d3.event.altKey ? 3000 : 300; - legendWrap.datum(legendData(datum)).call(legend); - const nArcSt = computeArcStates(datum); - inTransition = true; - if (clickId < 0) { - arcs - .style('opacity', 1) - .interrupt() - .transition() - .duration(delay) - .attrTween('d', d => arcTween(nArcSt.data[d.arcId])(d)) - .each('end', () => { - inTransition = false; - arcSt = nArcSt; - }) - .transition() - .duration(0) - .style('opacity', d => (state.disabled[d.arcId % numGroups] ? 0 : 1)); - } else { - const segments = getSegmentsInTime(clickId); - arcs - .style('opacity', 1) - .interrupt() - .transition() - .duration(delay) - .attrTween('d', d => - segments[0] <= d.arcId && d.arcId <= segments[1] - ? arcTween(nArcSt.pie[d.arcId])(d) - : arcTween(nArcSt.mini[d.arcId])(d), - ) - .each('end', () => { - inTransition = false; - arcSt = nArcSt; - }) - .transition() - .duration(0) - .style('opacity', d => (state.disabled[d.arcId % numGroups] ? 0 : 1)); - groupLabels - .interrupt() - .transition() - .duration(delay) - .attrTween('transform', d => - translateTween({ - outerRadius: maxRadius + 20, - innerRadius: maxRadius + 15, - startAngle: nArcSt.pie[segments[0] + d.arcId].startAngle, - endAngle: nArcSt.pie[segments[0] + d.arcId].endAngle, - })(d), - ) - .style('opacity', d => - state.disabled[d.arcId] || - arcSt.pie[segments[0] + d.arcId].percent < labelThreshold - ? 0 - : 1, - ); - } - } - - legend.dispatch.on('stateChange', newState => { - if (state.disabled !== newState.disabled) { - state.disabled = newState.disabled; - updateActive(); - } - }); -} - -Rose.displayName = 'Rose'; -Rose.propTypes = propTypes; - -export default Rose; diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/src/images/thumbnail-dark.png b/superset-frontend/plugins/legacy-plugin-chart-rose/src/images/thumbnail-dark.png deleted file mode 100644 index 7e2f237ad3d8e5380f03ffa36e2de89861e459ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83147 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 diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/src/images/thumbnail.png b/superset-frontend/plugins/legacy-plugin-chart-rose/src/images/thumbnail.png deleted file mode 100644 index 9e010369978064dec91a166460c715575b2889cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27928 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 TvR*kEbq0(LEcDBD2{Hc%wj{&$ diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/Rose.stories.tsx b/superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/Rose.stories.tsx deleted file mode 100644 index 3140635752e..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/Rose.stories.tsx +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* eslint-disable no-magic-numbers, sort-keys */ -import { SuperChart, VizType } from '@superset-ui/core'; -import RoseChartPlugin from '@superset-ui/legacy-plugin-chart-rose'; -import data from './data'; -import { withResizableChartDemo } from '@storybook-shared'; - -new RoseChartPlugin().configure({ key: VizType.Rose }).register(); - -export default { - title: 'Legacy Chart Plugins/legacy-plugin-chart-rose', - decorators: [withResizableChartDemo], - args: { - colorScheme: 'd3Category10', - numberFormat: '.3s', - dateTimeFormat: '%Y-%m-%d', - richTooltip: true, - roseAreaProportion: false, - }, - argTypes: { - colorScheme: { - control: 'select', - options: [ - 'supersetColors', - 'd3Category10', - 'bnbColors', - 'googleCategory20c', - ], - }, - numberFormat: { - control: 'select', - options: ['SMART_NUMBER', '.2f', '.0%', '$,.2f', '.3s', ',d'], - }, - dateTimeFormat: { - control: 'select', - options: ['%Y-%m-%d', '%Y-%m-%d %H:%M', '%b %d, %Y', '%d/%m/%Y'], - }, - richTooltip: { control: 'boolean' }, - roseAreaProportion: { - control: 'boolean', - description: - 'When true, area is proportional to value; when false, radius is proportional', - }, - }, -}; - -export const Basic = ({ - width, - height, - colorScheme, - numberFormat, - dateTimeFormat, - richTooltip, - roseAreaProportion, -}: { - width: number; - height: number; - colorScheme: string; - numberFormat: string; - dateTimeFormat: string; - richTooltip: boolean; - roseAreaProportion: boolean; -}) => ( - -); diff --git a/superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/data.ts b/superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/data.ts deleted file mode 100644 index a155f0c6674..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-rose/src/stories/data.ts +++ /dev/null @@ -1,950 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* eslint-disable sort-keys, no-magic-numbers */ -export default { - '-157766400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: -157766400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: -157766400000.0, - }, - { - key: ['David'], - value: 6820.0, - name: ['David'], - time: -157766400000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: -157766400000.0, - }, - { - key: ['Michael'], - value: 7835.0, - name: ['Michael'], - time: -157766400000.0, - }, - ], - '-126230400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: -126230400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: -126230400000.0, - }, - { - key: ['David'], - value: 6757.0, - name: ['David'], - time: -126230400000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: -126230400000.0, - }, - { - key: ['Michael'], - value: 7678.0, - name: ['Michael'], - time: -126230400000.0, - }, - ], - '-94694400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: -94694400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: -94694400000.0, - }, - { - key: ['David'], - value: 6923.0, - name: ['David'], - time: -94694400000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: -94694400000.0, - }, - { - key: ['Michael'], - value: 8132.0, - name: ['Michael'], - time: -94694400000.0, - }, - ], - '-63158400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: -63158400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: -63158400000.0, - }, - { - key: ['David'], - value: 6490.0, - name: ['David'], - time: -63158400000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: -63158400000.0, - }, - { - key: ['Michael'], - value: 8079.0, - name: ['Michael'], - time: -63158400000.0, - }, - ], - '-31536000000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: -31536000000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: -31536000000.0, - }, - { - key: ['David'], - value: 6563.0, - name: ['David'], - time: -31536000000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: -31536000000.0, - }, - { - key: ['Michael'], - value: 8245.0, - name: ['Michael'], - time: -31536000000.0, - }, - ], - '0': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 0.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 0.0, - }, - { - key: ['David'], - value: 6367.0, - name: ['David'], - time: 0.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 0.0, - }, - { - key: ['Michael'], - value: 8186.0, - name: ['Michael'], - time: 0.0, - }, - ], - '31536000000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 31536000000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 31536000000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 31536000000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 31536000000.0, - }, - { - key: ['Michael'], - value: 6825.0, - name: ['Michael'], - time: 31536000000.0, - }, - ], - '63072000000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 63072000000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 63072000000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 63072000000.0, - }, - { - key: ['Jennifer'], - value: 6066.0, - name: ['Jennifer'], - time: 63072000000.0, - }, - { - key: ['Michael'], - value: 6337.0, - name: ['Michael'], - time: 63072000000.0, - }, - ], - '94694400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 94694400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 94694400000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 94694400000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 94694400000.0, - }, - { - key: ['Michael'], - value: 5877.0, - name: ['Michael'], - time: 94694400000.0, - }, - ], - '126230400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 126230400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 126230400000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 126230400000.0, - }, - { - key: ['Jennifer'], - value: 5672.0, - name: ['Jennifer'], - time: 126230400000.0, - }, - { - key: ['Michael'], - value: 6058.0, - name: ['Michael'], - time: 126230400000.0, - }, - ], - '157766400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 157766400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 157766400000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 157766400000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 157766400000.0, - }, - { - key: ['Michael'], - value: 6206.0, - name: ['Michael'], - time: 157766400000.0, - }, - ], - '189302400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 189302400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 189302400000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 189302400000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 189302400000.0, - }, - { - key: ['Michael'], - value: 6178.0, - name: ['Michael'], - time: 189302400000.0, - }, - ], - '220924800000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 220924800000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 220924800000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 220924800000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 220924800000.0, - }, - { - key: ['Michael'], - value: 6313.0, - name: ['Michael'], - time: 220924800000.0, - }, - ], - '252460800000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 252460800000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 252460800000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 252460800000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 252460800000.0, - }, - { - key: ['Michael'], - value: 6489.0, - name: ['Michael'], - time: 252460800000.0, - }, - ], - '283996800000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 283996800000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 283996800000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 283996800000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 283996800000.0, - }, - { - key: ['Michael'], - value: 6580.0, - name: ['Michael'], - time: 283996800000.0, - }, - ], - '315532800000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 315532800000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 315532800000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 315532800000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 315532800000.0, - }, - { - key: ['Michael'], - value: 6896.0, - name: ['Michael'], - time: 315532800000.0, - }, - ], - '347155200000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 347155200000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 347155200000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 347155200000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 347155200000.0, - }, - { - key: ['Michael'], - value: 7142.0, - name: ['Michael'], - time: 347155200000.0, - }, - ], - '378691200000000000': [ - { - key: ['Christopher'], - value: 6093.0, - name: ['Christopher'], - time: 378691200000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 378691200000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 378691200000.0, - }, - { - key: ['Jennifer'], - value: 5811.0, - name: ['Jennifer'], - time: 378691200000.0, - }, - { - key: ['Michael'], - value: 7155.0, - name: ['Michael'], - time: 378691200000.0, - }, - ], - '410227200000000000': [ - { - key: ['Christopher'], - value: 6375.0, - name: ['Christopher'], - time: 410227200000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 410227200000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 410227200000.0, - }, - { - key: ['Jennifer'], - value: 5829.0, - name: ['Jennifer'], - time: 410227200000.0, - }, - { - key: ['Michael'], - value: 7386.0, - name: ['Michael'], - time: 410227200000.0, - }, - ], - '441763200000000000': [ - { - key: ['Christopher'], - value: 6509.0, - name: ['Christopher'], - time: 441763200000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 441763200000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 441763200000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 441763200000.0, - }, - { - key: ['Michael'], - value: 7478.0, - name: ['Michael'], - time: 441763200000.0, - }, - ], - '473385600000000000': [ - { - key: ['Christopher'], - value: 6744.0, - name: ['Christopher'], - time: 473385600000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 473385600000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 473385600000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 473385600000.0, - }, - { - key: ['Michael'], - value: 7210.0, - name: ['Michael'], - time: 473385600000.0, - }, - ], - '504921600000000000': [ - { - key: ['Christopher'], - value: 6497.0, - name: ['Christopher'], - time: 504921600000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 504921600000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 504921600000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 504921600000.0, - }, - { - key: ['Michael'], - value: 7259.0, - name: ['Michael'], - time: 504921600000.0, - }, - ], - '536457600000000000': [ - { - key: ['Christopher'], - value: 6549.0, - name: ['Christopher'], - time: 536457600000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 536457600000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 536457600000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 536457600000.0, - }, - { - key: ['Michael'], - value: 7448.0, - name: ['Michael'], - time: 536457600000.0, - }, - ], - '567993600000000000': [ - { - key: ['Christopher'], - value: 6496.0, - name: ['Christopher'], - time: 567993600000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 567993600000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 567993600000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 567993600000.0, - }, - { - key: ['Michael'], - value: 7748.0, - name: ['Michael'], - time: 567993600000.0, - }, - ], - '599616000000000000': [ - { - key: ['Christopher'], - value: 6526.0, - name: ['Christopher'], - time: 599616000000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 599616000000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 599616000000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 599616000000.0, - }, - { - key: ['Michael'], - value: 7851.0, - name: ['Michael'], - time: 599616000000.0, - }, - ], - '631152000000000000': [ - { - key: ['Christopher'], - value: 6641.0, - name: ['Christopher'], - time: 631152000000.0, - }, - { - key: ['Daniel'], - value: 5760.0, - name: ['Daniel'], - time: 631152000000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 631152000000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 631152000000.0, - }, - { - key: ['Michael'], - value: 8233.0, - name: ['Michael'], - time: 631152000000.0, - }, - ], - '662688000000000000': [ - { - key: ['Christopher'], - value: 5784.0, - name: ['Christopher'], - time: 662688000000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 662688000000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 662688000000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 662688000000.0, - }, - { - key: ['Michael'], - value: 7579.0, - name: ['Michael'], - time: 662688000000.0, - }, - ], - '694224000000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 694224000000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 694224000000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 694224000000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 694224000000.0, - }, - { - key: ['Michael'], - value: 6627.0, - name: ['Michael'], - time: 694224000000.0, - }, - ], - '725846400000000000': [ - { - key: ['Christopher'], - value: 0, - name: ['Christopher'], - time: 725846400000.0, - }, - { - key: ['Daniel'], - value: 0, - name: ['Daniel'], - time: 725846400000.0, - }, - { - key: ['David'], - value: 0, - name: ['David'], - time: 725846400000.0, - }, - { - key: ['Jennifer'], - value: 0, - name: ['Jennifer'], - time: 725846400000.0, - }, - { - key: ['Michael'], - value: 5839.0, - name: ['Michael'], - time: 725846400000.0, - }, - ], -}; diff --git a/superset-frontend/plugins/legacy-plugin-chart-world-map/tsconfig.json b/superset-frontend/plugins/legacy-plugin-chart-world-map/tsconfig.json deleted file mode 100644 index 03190ec5bd4..00000000000 --- a/superset-frontend/plugins/legacy-plugin-chart-world-map/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - // Path Resolution: Override baseUrl to maintain correct path mappings from parent config - // (e.g., "@apache-superset/core" -> "./packages/superset-core/src") - "baseUrl": "../..", - - // Directory Overrides: Parent config paths are relative to frontend root, - // but packages need paths relative to their own directory - "outDir": "lib", - "rootDir": "src", - "declarationDir": "lib" - }, - "include": ["src/**/*.ts", "src/**/*.tsx", "types/**/*"], - "exclude": [ - "src/**/*.js", - "src/**/*.jsx", - "src/**/*.test.*", - "src/**/*.stories.*"], - "references": [ - { "path": "../../packages/superset-core" }, - { "path": "../../packages/superset-ui-core" }, - { "path": "../../packages/superset-ui-chart-controls" } - ] -} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/CHANGELOG.md b/superset-frontend/plugins/legacy-preset-chart-nvd3/CHANGELOG.md deleted file mode 100644 index 16a3d4ced1c..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/CHANGELOG.md +++ /dev/null @@ -1,113 +0,0 @@ - - -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [0.20.0](https://github.com/apache/superset/compare/v2021.41.0...v0.20.0) (2024-09-09) - -### Bug Fixes - -- adding missing examples for bubble chart, bullet chart, calendar heatmap chart and country map chart in the gallery ([#22523](https://github.com/apache/superset/issues/22523)) ([839ec7c](https://github.com/apache/superset/commit/839ec7ceacc66c65928fd0ddead2b014db3d5563)) -- Adds the Deprecated label to Time-series Percent Change chart ([#30148](https://github.com/apache/superset/issues/30148)) ([5e42d7a](https://github.com/apache/superset/commit/5e42d7aed0d11c7aac91ab19088d2632e49da614)) -- **area chart legacy:** tool tip shows actual value rather than y axi… ([#23469](https://github.com/apache/superset/issues/23469)) ([db9ca20](https://github.com/apache/superset/commit/db9ca20737fecda8eee342b34d62d3b700ef3687)) -- **Dashboard:** Color inconsistency on refreshes and conflicts ([#27439](https://github.com/apache/superset/issues/27439)) ([313ee59](https://github.com/apache/superset/commit/313ee596f5435894f857d72be7269d5070c8c964)) -- **explore:** Fix chart standalone URL for report/thumbnail generation ([#20673](https://github.com/apache/superset/issues/20673)) ([84d4302](https://github.com/apache/superset/commit/84d4302628d18aa19c13cc5322e68abbc690ea4d)) -- **explore:** make SORT-Descending visible if Sort-by has value ([#17726](https://github.com/apache/superset/issues/17726)) ([d5768ab](https://github.com/apache/superset/commit/d5768ab649a70fd4f541ad4982498f622160b220)) -- **explore:** Prevent shared controls from checking feature flags outside React render ([#21315](https://github.com/apache/superset/issues/21315)) ([2285ebe](https://github.com/apache/superset/commit/2285ebe72ec4edded6d195052740b7f9f13d1f1b)) -- **legacy-chart:** corrupted raw chart data ([#24850](https://github.com/apache/superset/issues/24850)) ([1c5971d](https://github.com/apache/superset/commit/1c5971d3afb70a338444c41943ff90c3a9c03ec3)) -- Rename legacy line and area charts ([#28113](https://github.com/apache/superset/issues/28113)) ([b4c4ab7](https://github.com/apache/superset/commit/b4c4ab7790cbeb8d65ec7c1084482c21932e755b)) -- Reset sorting bar issue in Barchart ([#19371](https://github.com/apache/superset/issues/19371)) ([94e06c2](https://github.com/apache/superset/commit/94e06c2b6a1f782133bb9ef85a1d46ce7eacf9ba)) -- **storybook:** fix broken Storybook stories during development ([#29587](https://github.com/apache/superset/issues/29587)) ([462cda4](https://github.com/apache/superset/commit/462cda400baa00b3bcc4a7f8aded362ca55e18a5)) -- Tooltip of area chart shows undefined total ([#24916](https://github.com/apache/superset/issues/24916)) ([ec9e9a4](https://github.com/apache/superset/commit/ec9e9a46f2f092ce56d3ed5a8a9a3ea0214db88a)) -- warning of nth-child ([#23638](https://github.com/apache/superset/issues/23638)) ([16cc089](https://github.com/apache/superset/commit/16cc089b198dcdebc2422845aa08d18233c6b3a4)) -- Zero values on Dual Line axis bounds ([#23649](https://github.com/apache/superset/issues/23649)) ([d66e6e6](https://github.com/apache/superset/commit/d66e6e6d400db0fee35d73cd43e610cd1c491f4b)) - -### Features - -- Adds the ECharts Bubble chart ([#22107](https://github.com/apache/superset/issues/22107)) ([c81c60c](https://github.com/apache/superset/commit/c81c60c91fbcb09dd63c05f050e18ee09ceebfd6)) -- apply standardized form data to tier 2 charts ([#20530](https://github.com/apache/superset/issues/20530)) ([de524bc](https://github.com/apache/superset/commit/de524bc59f011fd361dcdb7d35c2cb51f7eba442)) -- **chart & legend:** make to enable show legend by default ([#19927](https://github.com/apache/superset/issues/19927)) ([7b3d0f0](https://github.com/apache/superset/commit/7b3d0f040b050905f7d0901d0227f1cd6b761b56)) -- **explore:** Apply denormalization to tier 2 charts form data ([#20524](https://github.com/apache/superset/issues/20524)) ([e12ee59](https://github.com/apache/superset/commit/e12ee59b13822241dca8d8015f1222c477edd4f3)) -- **explore:** Denormalize form data in echarts, world map and nvd3 bar and line charts ([#20313](https://github.com/apache/superset/issues/20313)) ([354a899](https://github.com/apache/superset/commit/354a89950c4d001da3e107f60788cea873bd6bf6)) -- **explore:** improve UI in the control panel ([#19748](https://github.com/apache/superset/issues/19748)) ([e3a54aa](https://github.com/apache/superset/commit/e3a54aa3c15bdd0c970aa73f898288a408205c97)) -- **explore:** standardized controls for time pivot chart ([#21321](https://github.com/apache/superset/issues/21321)) ([79525df](https://github.com/apache/superset/commit/79525dfaf29b810af668e3b6c5a56cd866370d92)) -- **formatters:** Add custom d3-time-format locale ([#24263](https://github.com/apache/superset/issues/24263)) ([024cfd8](https://github.com/apache/superset/commit/024cfd86e408ec5f7ddf49a9e90908e2fb2e6b70)) -- improve color consistency (save all labels) ([#19038](https://github.com/apache/superset/issues/19038)) ([dc57508](https://github.com/apache/superset/commit/dc575080d7e43d40b1734bb8f44fdc291cb95b11)) -- **legacy-preset-chart-nvd3:** add richtooltip in nvd3 bar chart ([#17615](https://github.com/apache/superset/issues/17615)) ([72f3215](https://github.com/apache/superset/commit/72f3215ffc74ead33dba57196aeaf4e1db63fd6c)) -- Migrates Dual Line Chart to Mixed Chart ([#23910](https://github.com/apache/superset/issues/23910)) ([f5148ef](https://github.com/apache/superset/commit/f5148ef728ce649697c10fb7aa65982d7dd05638)) -- Removes the Multiple Line Charts ([#23933](https://github.com/apache/superset/issues/23933)) ([6ce8592](https://github.com/apache/superset/commit/6ce85921fc103ba0e93b437d473003e6f1b4a42b)) -- update time comparison choices (again) ([#17968](https://github.com/apache/superset/issues/17968)) ([05d9cde](https://github.com/apache/superset/commit/05d9cde203b99f8c63106446f0be58668cc9f0c9)) -- update time comparison choices (again) ([#22458](https://github.com/apache/superset/issues/22458)) ([9e81c3a](https://github.com/apache/superset/commit/9e81c3a1192a18226d505178d16e1e395917a719)) -- **viz picker:** Remove some tags, refactor Recommended section ([#27708](https://github.com/apache/superset/issues/27708)) ([c314999](https://github.com/apache/superset/commit/c3149994ac0d4392e0462421b62cd0c034142082)) - -# [0.19.0](https://github.com/apache/superset/compare/v2021.41.0...v0.19.0) (2024-09-07) - -### Bug Fixes - -- adding missing examples for bubble chart, bullet chart, calendar heatmap chart and country map chart in the gallery ([#22523](https://github.com/apache/superset/issues/22523)) ([839ec7c](https://github.com/apache/superset/commit/839ec7ceacc66c65928fd0ddead2b014db3d5563)) -- Adds the Deprecated label to Time-series Percent Change chart ([#30148](https://github.com/apache/superset/issues/30148)) ([5e42d7a](https://github.com/apache/superset/commit/5e42d7aed0d11c7aac91ab19088d2632e49da614)) -- **area chart legacy:** tool tip shows actual value rather than y axi… ([#23469](https://github.com/apache/superset/issues/23469)) ([db9ca20](https://github.com/apache/superset/commit/db9ca20737fecda8eee342b34d62d3b700ef3687)) -- **Dashboard:** Color inconsistency on refreshes and conflicts ([#27439](https://github.com/apache/superset/issues/27439)) ([313ee59](https://github.com/apache/superset/commit/313ee596f5435894f857d72be7269d5070c8c964)) -- **explore:** Fix chart standalone URL for report/thumbnail generation ([#20673](https://github.com/apache/superset/issues/20673)) ([84d4302](https://github.com/apache/superset/commit/84d4302628d18aa19c13cc5322e68abbc690ea4d)) -- **explore:** make SORT-Descending visible if Sort-by has value ([#17726](https://github.com/apache/superset/issues/17726)) ([d5768ab](https://github.com/apache/superset/commit/d5768ab649a70fd4f541ad4982498f622160b220)) -- **explore:** Prevent shared controls from checking feature flags outside React render ([#21315](https://github.com/apache/superset/issues/21315)) ([2285ebe](https://github.com/apache/superset/commit/2285ebe72ec4edded6d195052740b7f9f13d1f1b)) -- **legacy-chart:** corrupted raw chart data ([#24850](https://github.com/apache/superset/issues/24850)) ([1c5971d](https://github.com/apache/superset/commit/1c5971d3afb70a338444c41943ff90c3a9c03ec3)) -- Rename legacy line and area charts ([#28113](https://github.com/apache/superset/issues/28113)) ([b4c4ab7](https://github.com/apache/superset/commit/b4c4ab7790cbeb8d65ec7c1084482c21932e755b)) -- Reset sorting bar issue in Barchart ([#19371](https://github.com/apache/superset/issues/19371)) ([94e06c2](https://github.com/apache/superset/commit/94e06c2b6a1f782133bb9ef85a1d46ce7eacf9ba)) -- **storybook:** fix broken Storybook stories during development ([#29587](https://github.com/apache/superset/issues/29587)) ([462cda4](https://github.com/apache/superset/commit/462cda400baa00b3bcc4a7f8aded362ca55e18a5)) -- Tooltip of area chart shows undefined total ([#24916](https://github.com/apache/superset/issues/24916)) ([ec9e9a4](https://github.com/apache/superset/commit/ec9e9a46f2f092ce56d3ed5a8a9a3ea0214db88a)) -- warning of nth-child ([#23638](https://github.com/apache/superset/issues/23638)) ([16cc089](https://github.com/apache/superset/commit/16cc089b198dcdebc2422845aa08d18233c6b3a4)) -- Zero values on Dual Line axis bounds ([#23649](https://github.com/apache/superset/issues/23649)) ([d66e6e6](https://github.com/apache/superset/commit/d66e6e6d400db0fee35d73cd43e610cd1c491f4b)) - -### Features - -- Adds the ECharts Bubble chart ([#22107](https://github.com/apache/superset/issues/22107)) ([c81c60c](https://github.com/apache/superset/commit/c81c60c91fbcb09dd63c05f050e18ee09ceebfd6)) -- apply standardized form data to tier 2 charts ([#20530](https://github.com/apache/superset/issues/20530)) ([de524bc](https://github.com/apache/superset/commit/de524bc59f011fd361dcdb7d35c2cb51f7eba442)) -- **chart & legend:** make to enable show legend by default ([#19927](https://github.com/apache/superset/issues/19927)) ([7b3d0f0](https://github.com/apache/superset/commit/7b3d0f040b050905f7d0901d0227f1cd6b761b56)) -- **explore:** Apply denormalization to tier 2 charts form data ([#20524](https://github.com/apache/superset/issues/20524)) ([e12ee59](https://github.com/apache/superset/commit/e12ee59b13822241dca8d8015f1222c477edd4f3)) -- **explore:** Denormalize form data in echarts, world map and nvd3 bar and line charts ([#20313](https://github.com/apache/superset/issues/20313)) ([354a899](https://github.com/apache/superset/commit/354a89950c4d001da3e107f60788cea873bd6bf6)) -- **explore:** improve UI in the control panel ([#19748](https://github.com/apache/superset/issues/19748)) ([e3a54aa](https://github.com/apache/superset/commit/e3a54aa3c15bdd0c970aa73f898288a408205c97)) -- **explore:** standardized controls for time pivot chart ([#21321](https://github.com/apache/superset/issues/21321)) ([79525df](https://github.com/apache/superset/commit/79525dfaf29b810af668e3b6c5a56cd866370d92)) -- **formatters:** Add custom d3-time-format locale ([#24263](https://github.com/apache/superset/issues/24263)) ([024cfd8](https://github.com/apache/superset/commit/024cfd86e408ec5f7ddf49a9e90908e2fb2e6b70)) -- improve color consistency (save all labels) ([#19038](https://github.com/apache/superset/issues/19038)) ([dc57508](https://github.com/apache/superset/commit/dc575080d7e43d40b1734bb8f44fdc291cb95b11)) -- **legacy-preset-chart-nvd3:** add richtooltip in nvd3 bar chart ([#17615](https://github.com/apache/superset/issues/17615)) ([72f3215](https://github.com/apache/superset/commit/72f3215ffc74ead33dba57196aeaf4e1db63fd6c)) -- Migrates Dual Line Chart to Mixed Chart ([#23910](https://github.com/apache/superset/issues/23910)) ([f5148ef](https://github.com/apache/superset/commit/f5148ef728ce649697c10fb7aa65982d7dd05638)) -- Removes the Multiple Line Charts ([#23933](https://github.com/apache/superset/issues/23933)) ([6ce8592](https://github.com/apache/superset/commit/6ce85921fc103ba0e93b437d473003e6f1b4a42b)) -- update time comparison choices (again) ([#17968](https://github.com/apache/superset/issues/17968)) ([05d9cde](https://github.com/apache/superset/commit/05d9cde203b99f8c63106446f0be58668cc9f0c9)) -- update time comparison choices (again) ([#22458](https://github.com/apache/superset/issues/22458)) ([9e81c3a](https://github.com/apache/superset/commit/9e81c3a1192a18226d505178d16e1e395917a719)) -- **viz picker:** Remove some tags, refactor Recommended section ([#27708](https://github.com/apache/superset/issues/27708)) ([c314999](https://github.com/apache/superset/commit/c3149994ac0d4392e0462421b62cd0c034142082)) - -# [0.18.0](https://github.com/apache-superset/superset-ui/compare/v0.17.87...v0.18.0) (2021-08-30) - -**Note:** Version bump only for package @superset-ui/legacy-preset-chart-nvd3 - -## [0.17.63](https://github.com/apache-superset/superset-ui/compare/v0.17.62...v0.17.63) (2021-07-02) - -**Note:** Version bump only for package @superset-ui/legacy-preset-chart-nvd3 - -## [0.17.62](https://github.com/apache-superset/superset-ui/compare/v0.17.61...v0.17.62) (2021-07-02) - -**Note:** Version bump only for package @superset-ui/legacy-preset-chart-nvd3 - -## [0.17.61](https://github.com/apache-superset/superset-ui/compare/v0.17.60...v0.17.61) (2021-07-02) - -**Note:** Version bump only for package @superset-ui/legacy-preset-chart-nvd3 diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/README.md b/superset-frontend/plugins/legacy-preset-chart-nvd3/README.md deleted file mode 100644 index b2cc76eff06..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/README.md +++ /dev/null @@ -1,64 +0,0 @@ - - -## @superset-ui/legacy-preset-chart-nvd3 - -[![Version](https://img.shields.io/npm/v/@superset-ui/legacy-preset-chart-nvd3.svg?style=flat)](https://www.npmjs.com/package/@superset-ui/legacy-preset-chart-nvd3) -[![Libraries.io](https://img.shields.io/librariesio/release/npm/%40superset-ui%2Flegacy-preset-chart-nvd3?style=flat)](https://libraries.io/npm/@superset-ui%2Flegacy-preset-chart-nvd3) - -This plugin provides Big Number for Superset. - -### Usage - -Import the preset and register. This will register all the chart plugins under nvd3. - -```js -import { NVD3ChartPreset } from '@superset-ui/legacy-preset-chart-nvd3'; - -new NVD3ChartPreset().register(); -``` - -or register charts one by one. Configure `key`, which can be any `string`, and register the plugin. -This `key` will be used to lookup this chart throughout the app. - -```js -import { - AreaChartPlugin, - LineChartPlugin, -} from '@superset-ui/legacy-preset-chart-nvd3'; - -new AreaChartPlugin().configure({ key: 'area' }).register(); -new LineChartPlugin().configure({ key: 'line' }).register(); -``` - -Then use it via `SuperChart`. See -[storybook](https://apache-superset.github.io/superset-ui-plugins/?selectedKind=plugin-chart-nvd3) -for more details. - -```js - -``` diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json b/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json deleted file mode 100644 index a369adb7b73..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "@superset-ui/legacy-preset-chart-nvd3", - "version": "0.20.3", - "description": "Superset Legacy Chart - NVD3", - "keywords": [ - "superset" - ], - "homepage": "https://github.com/apache/superset/tree/master/superset-frontend/plugins/legacy-preset-chart-nvd3#readme", - "bugs": { - "url": "https://github.com/apache/superset/issues" - }, - "license": "Apache-2.0", - "author": "Superset", - "repository": { - "type": "git", - "url": "https://github.com/apache/superset.git", - "directory": "superset-frontend/packages/legacy-preset-chart-nvd3" - }, - "files": [ - "esm", - "lib" - ], - "sideEffects": [ - "*.css" - ], - "main": "lib/index.js", - "module": "esm/index.js", - "publishConfig": { - "access": "public" - }, - "dependencies": { - "d3": "^3.5.17", - "d3-tip": "^0.9.1", - "dompurify": "^3.4.12", - "fast-safe-stringify": "^2.1.1", - "lodash": "^4.18.1", - "lodash-es": "^4.18.1", - "nvd3-fork": "^2.0.5", - "prop-types": "^15.8.1", - "urijs": "^1.19.11" - }, - "peerDependencies": { - "@apache-superset/core": "*", - "@superset-ui/chart-controls": "*", - "@superset-ui/core": "*", - "dayjs": "^1.11.21", - "react": "^18.3.0" - } -} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/NVD3BoxPlot.stories.tsx b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/NVD3BoxPlot.stories.tsx deleted file mode 100644 index acf4317cca8..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/NVD3BoxPlot.stories.tsx +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { SuperChart, VizType } from '@superset-ui/core'; -import { EchartsBoxPlotChartPlugin } from '@superset-ui/plugin-chart-echarts'; -import { dummyDatasource, withResizableChartDemo } from '@storybook-shared'; -import data from './data'; - -new EchartsBoxPlotChartPlugin().configure({ key: 'box-plot' }).register(); - -export default { - title: 'Legacy Chart Plugins/legacy-preset-chart-nvd3/BoxPlot', - decorators: [withResizableChartDemo], - args: { - colorScheme: 'd3Category10', - whiskerOptions: 'Min/max (no outliers)', - }, - argTypes: { - colorScheme: { - control: 'select', - options: [ - 'supersetColors', - 'd3Category10', - 'bnbColors', - 'googleCategory20c', - ], - }, - whiskerOptions: { - control: 'select', - options: [ - 'Tukey', - 'Min/max (no outliers)', - '2/98 percentiles', - '9/91 percentiles', - ], - }, - }, -}; - -export const Basic = ({ - colorScheme, - whiskerOptions, - width, - height, -}: { - colorScheme: string; - whiskerOptions: string; - width: number; - height: number; -}) => ( - -); diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/data.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/data.ts deleted file mode 100644 index 02837a59c3e..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/BoxPlot/stories/data.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* eslint-disable sort-keys, no-magic-numbers */ -// Data format for ECharts BoxPlot - requires metric__min, metric__q1, metric__median, etc. -export default [ - { - region: 'East Asia & Pacific', - sum__SP_POP_TOTL__min: 1031863394.0, - sum__SP_POP_TOTL__q1: 1384725172.5, - sum__SP_POP_TOTL__median: 1717904169.0, - sum__SP_POP_TOTL__q3: 2032724922.5, - sum__SP_POP_TOTL__max: 2240687901.0, - sum__SP_POP_TOTL__mean: 1681000000.0, - sum__SP_POP_TOTL__count: 50, - sum__SP_POP_TOTL__outliers: [], - }, - { - region: 'Europe & Central Asia', - sum__SP_POP_TOTL__min: 660881033.0, - sum__SP_POP_TOTL__q1: 751386460.5, - sum__SP_POP_TOTL__median: 820716895.0, - sum__SP_POP_TOTL__q3: 862814192.5, - sum__SP_POP_TOTL__max: 903095786.0, - sum__SP_POP_TOTL__mean: 799778873.0, - sum__SP_POP_TOTL__count: 50, - sum__SP_POP_TOTL__outliers: [], - }, - { - region: 'Latin America & Caribbean', - sum__SP_POP_TOTL__min: 220564224.0, - sum__SP_POP_TOTL__q1: 313690832.5, - sum__SP_POP_TOTL__median: 421490233.0, - sum__SP_POP_TOTL__q3: 529668114.5, - sum__SP_POP_TOTL__max: 626270167.0, - sum__SP_POP_TOTL__mean: 422336714.0, - sum__SP_POP_TOTL__count: 50, - sum__SP_POP_TOTL__outliers: [], - }, - { - region: 'South Asia', - sum__SP_POP_TOTL__min: 572036107.0, - sum__SP_POP_TOTL__q1: 772373036.5, - sum__SP_POP_TOTL__median: 1059570231.0, - sum__SP_POP_TOTL__q3: 1398841234.0, - sum__SP_POP_TOTL__max: 1720976995.0, - sum__SP_POP_TOTL__mean: 1104759521.0, - sum__SP_POP_TOTL__count: 50, - sum__SP_POP_TOTL__outliers: [], - }, - { - region: 'Sub-Saharan Africa', - sum__SP_POP_TOTL__min: 228268752.0, - sum__SP_POP_TOTL__q1: 320037758.0, - sum__SP_POP_TOTL__median: 467337821.0, - sum__SP_POP_TOTL__q3: 676768689.0, - sum__SP_POP_TOTL__max: 974315323.0, - sum__SP_POP_TOTL__mean: 533345669.0, - sum__SP_POP_TOTL__count: 50, - sum__SP_POP_TOTL__outliers: [1100000000, 1200000000], - }, -]; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/controlPanel.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/controlPanel.ts deleted file mode 100644 index f6073a37095..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/controlPanel.ts +++ /dev/null @@ -1,140 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { t } from '@apache-superset/core/translation'; -import { - ControlPanelConfig, - formatSelectOptions, - D3_FORMAT_OPTIONS, - getStandardizedControls, -} from '@superset-ui/chart-controls'; -import { - showLegend, - xAxisLabel, - yAxisLabel, - bottomMargin, - xTicksLayout, - xAxisFormat, - yLogScale, - xAxisShowMinmax, - yAxisShowMinmax, - leftMargin, - yAxisBounds, -} from '../NVD3Controls'; - -const config: ControlPanelConfig = { - controlPanelSections: [ - { - label: t('Query'), - expanded: true, - controlSetRows: [ - ['series'], - ['entity'], - ['x'], - ['y'], - ['adhoc_filters'], - ['size'], - [ - { - name: 'max_bubble_size', - config: { - type: 'SelectControl', - freeForm: true, - label: t('Max Bubble Size'), - default: '25', - choices: formatSelectOptions([ - '5', - '10', - '15', - '25', - '50', - '75', - '100', - ]), - }, - }, - ], - ['limit', null], - ], - }, - { - label: t('Chart Options'), - expanded: true, - tabOverride: 'customize', - controlSetRows: [['color_scheme'], [showLegend, null]], - }, - { - label: t('X Axis'), - expanded: true, - tabOverride: 'customize', - controlSetRows: [ - [xAxisLabel, leftMargin], - [ - { - name: xAxisFormat.name, - config: { - ...xAxisFormat.config, - default: 'SMART_NUMBER', - choices: D3_FORMAT_OPTIONS, - }, - }, - xTicksLayout, - ], - [ - { - name: 'x_log_scale', - config: { - type: 'CheckboxControl', - label: t('X Log Scale'), - default: false, - renderTrigger: true, - description: t('Use a log scale for the X-axis'), - }, - }, - xAxisShowMinmax, - ], - ], - }, - { - label: t('Y Axis'), - expanded: true, - tabOverride: 'customize', - controlSetRows: [ - [yAxisLabel, bottomMargin], - ['y_axis_format', null], - [yLogScale, yAxisShowMinmax], - [yAxisBounds], - ], - }, - ], - controlOverrides: { - color_scheme: { - renderTrigger: false, - }, - }, - formDataOverrides: formData => ({ - ...formData, - series: getStandardizedControls().shiftColumn(), - entity: getStandardizedControls().shiftColumn(), - x: getStandardizedControls().shiftMetric(), - y: getStandardizedControls().shiftMetric(), - size: getStandardizedControls().shiftMetric(), - }), -}; - -export default config; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/example-dark.jpg b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/example-dark.jpg deleted file mode 100644 index 1e35fc3455d3dced649cd08ca37e99230dd1a937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56660 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 z zJ+UDQh&Un!W26GQ_;GJ*s??62(4H`)Ji5%5vVL0 zO7{#&?tG{UY}3QI9T{oJ`qQv9I8{6X6jU>PTuxk)t!kd3IVBlYKA*6h5{Rc4;jhQV z-VB&n*VQu7`BJ2os-d%ALFZ4w*U>`~8pmg_vc71rjsXd|U;ikv|Fir4TXkajf2}6{ z>n|bd{#_+j*5B6~{ErScmH`B~JP+g|8S;&Z7KO$>nec zRfgO%ZR7c(%UzYPT&DEy8J5G} z%fSjuPJ>{Zo#`8Z!S66`h3uQZXGSB4%qVHqB@J>zFIfA<_=QJ){)=iuvsu}xh#u!{ zDN?WdALMW%FV&W8dce2*N5vJk-fM)+U@w$3TS>Y)Cz^LqYczAD`ArJfU#Kqx-?b!82JdAytu2 zb_oU{Lx`c%Lsao{xZ^P>l3E=7cyviI7P$A>Pz;~cjm)h4;4U6vH9@>GVNk1Y2Qw!9 zyxRm&WqZy>c_a0xkmA9jQiNvjBl~F-$MCKsQEP(3{1}gHcvue|faXjzS7fYO)zZd{3OV(^VK$!d%>v@jj)PkE0EiG5R zwC)a6Ll;H~PA>C2qc(t`R5jF_Xv&7!zMu-hcmX zajB;xD*f3KQCazl_mdb6wzbMS7c53nGjEzod93-PgD%17MM_yQ2Rk@P1X{FZB0t2? zk@aJd@eIpjp>~|t=Jn5ys>Jk$?Duk#CkqaA=0R~MJ7;wLH5PUG+5TgTwG)foyex>> z}5^pUTL$lOtuS=h{rTST^?`Zkdh2QvH%L-?y;5=1&QA z;|-|XOr8xClFv;z2w}*J|J29kZsQ>vsO!!Dp7VAfHIcJ8Tx2MJw1xgx(F6!6!RI4@ zZap~jPS<*GUOH|(DD_>knc+@mkUyZYK0f6kGnQT5?nBpi?4-GoGD#mTf>RI6BNi)Z zVCCWK#%)3JK*F66yy+{c0LVeUS;J3lsfg*^x_GE&wzch(AH{@7r=QYlcqU6hLw4N7U{LCP_^xUtj|BKNCGXNC_OFerpcDYE1%2#e2JK>ky+AH4$vj`1< zd4%+pb^0sr2N7$R7vBJ!fFY*~4^f^ZJp(L!O$+e>xan|1<3wk3B%g;X<6Y_G_uqf0 z@^5?xhC(&VvtS0XtO=>-7he*i-j{Sla+mh~=hRKP|8)?WV$1A4(jy01+~wnAYKOk# z;4#Lxp=r@Pk!S7jYFlNV(SdTTVwE~l^p(DX;Y2Z^=-gTrqxtG?)C~al2JmVce4GZR z^B*?5-!fb(PzrCXKrAHD%jSFH1oN_&oX7UjG6wCirxS$p@-iEb0d2~s?K_5zjL<_y zrkmjwdq#^9?#c~mz=emVa?IC9^ivw1h1-&$SpucL-hA~sy`$>Vv4-h=edZe4>cTqo z-7MmH>^et67DG!88{6hZQz;^j-khVCQ`_!5&XK>CA&!?U{y&)>jjj7(chF}Bfulj2 zQ%16RVr!95VWQ+SYt_gversQ-etOhDJ5O85+`V2|3^Y2X2S>t#4m8Hea!1_v9)I3F zp&bwG7QavB&W;z+(Hj!FhV?PCmily!XBi zi=-^vy;vzw+=2#oDNvw5Aw`NdP+SYe-QC?SK?8*J%i7N!)iRg}&$WUuM`=P3eEf#XptY*WgWV1KESJ4{hZT|lA!_NS zaX-ql5APaEGN@O8p4*LHaA+l&SZ{|?*cpzVGZF2J_%lteoRl6o#?+7jx(7kixJGMKd{~VC6Upyh;W)tMOWz z<#~`kWDf7ABNZVCKrhzv_;5JAgYa%K%Mw}~YF=r|L|f`V@7@9&%;>z$Qn| zQy;y!%f75dJ-E$V?!HXNt579J$h0?fP?2@?x)w)PML)mJ9IJXt;_3M)am$4wIX_Dt z=y3l_N3%NYbWOFxG{m2$8W9M~?Vg(s6WYgME}ue56%Sf@IWP*xUMSz=%HQyK5ybyh zb|oFUc1#VbUBihiYqDD(Cf^fZsw`R%>iU9S?~EBO8uu-G1FhbtCd7M~13wdO|9{Av zR}}WrbTEQEvX^iTt_Sl7sQ)4M{GH|SgF|=T`@3^iNFV4?H7@g~`%WYq+UCv&%06Wg z)W-YM)4EjATR<-^Y3<6yj;zTQ++(^(R+p~@oIh5A_f3wyislh4DlZ+&8(nuMRMhOVrtvFb z-*@{7U>o8=)5ge719JYg-zA1eS!&CG(NWis>-lcftN#lW17HF%(+%KOiGz0qx7i#M zr98A^XFmZr`YL-u(2@0v>FEXJvL77E_}4uJIX*7m zm*WS={#d@iaUQrNKZwVMQD}j0WI|%4 zz^^Q;Y_Y)oTzi`YwG2~CF7*YM2(^1z9zC|sFJ^U){~&>;ks7N)eJxBiQ9l@YYp0v; zt;Gi?88g++Eb>MO8k%okj$WDHTgesWp|H1Xi=BUv5cxoKb-?1WnPJ>+*}zy*)#yR< zU$67GSM0kx1KdDMC1q@W0(@%`>c837a`$O(FwQS3wx2x5t{8{rB<^dsfE%rCNNFB^ z%xY!TacpN$=D_Iz*J_7C!w)Ui$!vlz8hdyhaF3-rzX}YfcnxQ;ZZ8XMRF5NV5aACy zA<QmLJ%$on7t@f;5mVw^GRzmW(R(q&*MJcPPZoPT(|I~rrM%jN_u;P@4D zDGd5c?%^-nJcxBN(PZmM++}M6^Es-Fqy2R-%&h_eCYuaCXiq(pHWs-=f4})#1@+ zc(rr3l>LJGR!`FCbM4u1G?QQBwLfMkQ3=4mqPswYY>DmpXh*nsw!5Da49@7yP>Zycayj1L zahV%tIgZmYO$7B|iSzaK-#NF}|`{A1WIQIA78*yS4yS7@TB%Exr zWG2z%qoj7cb*AXKLfCCy0@b%ltK~x5a4Zb_cLOvN-8Ol(_Q|M|GGO#wB6;$t}2p7EPxTX-G0^WuPV73vKceA*hqAk1uhbrlJ~^_x8Kr|E4% zHxwme7M}WJ3iB0AwX=n6=OWu9+Mdg_t~Q1sDYm?hy7%FpvX^H6gF%p#gcO)zwBhUF zoA~dgz5+#WuV2_n^Z1w&??U#`i6X+jS;J5x%&=5OGr9?T<>6E{@)UJbLDU4eIzMtv z8GnD}_{YtB>PTrH@qJLx8YV${R~J#a93A1vJdPUTon#F8w`bWnL5SdvC04jY-rR6h zldNCSl4$$l9+jiuSE49 zX5UDm#>J0Y6~wW(vQn=JCs)#s7In$mUWHmmR$z$YzpBM~4ais0oj~ES3;FCEZ0X|C=g+2jGJ3>j1dH^2iKl?ckz-ubl_FITR;x<&PnrzjRPtjR z0S@(XM`vCMJebyf%3~sZvU9})F2X^IIP1%EC2M7&{ye_Ga1)qUy^oUA(|5@I2;Ua5 z6dOZtf^8e3r*&NJJrr9XewQMH^N*^|e~{t+j$_*&8%MDJCabWe{TmB$1WWKgq0mz} zz8I-4BePA|X=WT}YivkmH;*aA&pnn9xL+7t^oE((0E+#+bFst2!{bnJT(P{B0PL+` zey8w~EkJ6}ha>s(9D+(7O-52uNoGspoU1;t$f)mDBSxOSNS50TY%HO@I5EoJO3p~C zVr|^tiT||rvMgv3bN=h|L}@u(f>5#8-hKj)d2!aLQJVjt`7#w)ex182MX40 z7p@62hD=5_6C&=qb6KHvDWg5BN1uZ>aVE8%gAJB)nzzIlHE~@yIhQ;gkH4eVPxawE zei{W5rQ;_+_LG{H$ZZoIgz1_LoINuMo%A*Ew3a|QRrlLOO}8^=BwFpU#;qw3!97G(vqR=d8cV|tpVFxT`C7~#nh*% zMWNC2afQerI@_j5ekRaNoC4nci2cpWQc_pR4kx^-`lLz*`)x|(OeT-mhK&9j z;s;2BaL=@XM6ov(DR0EsuE%tD>wc-l4h)KY#B029Yr69_zN`GI%OY*UrA&SHHrbux ze>Op5xg}Q<85XXEb+i_&0grE?nMnY zh1137Ii4~)4JaDyyu~Ua$O|II(l$RipcJRC{`}p;ZuI!X{KwW+ilO?eQ2A7APpZ9| zE2t_Jj@U{N9u`Ru?n;mZlP%XsvmnAx=-yj@R)az^Wxkpzb$LwXsw!9bVq2Z-?M|zV zU|7>d%hQ2x0{!KQx!m@ZM_I$yd;Yy2-e^_6!*aeqb}cjuoxbwYN6+#`5A*-o!$M1w zni-~j4WaWO$9CFZE-x<=-_@Y0^^HAFz#ohOq^i#_9tLWa>>Y;w3@HRk~-)n4p z5AEhqXkMZ&#x?bC=lFlUZ!mIZ|DwZt5)xh&@iNu(Qhk1|%jl5}Lr`Jwie*CYT7ZZ& zwJ$4ty7SQL42*5_+?1Ks#CYK5L5(m5GRM2Q}Ea4gvS-$oXrMDPuCPfO2Hj^MIhg%H+Da%3Io(wVAy`1tDE9%cd1iz{;Zwd$$f-Z2=N504H z`-WwCU!jnB(%^>pq7NbBxZZ-%yS~W7+)x${&C;2RAng47AWz3!_Ui5~RTA>`W8MV# z=D*Zo{m)93;b_A&7C8_}7Lo~Jl;0K>%8Gj#n&Rn*^8$%ijW1uFLP8p#HSusdrSywc z^RPAGlMPQ%H3t?DdD09{f*$0;Zj2*Lk>l;d=cO^)6X#g&6xR>&T_h`XmeZDxbYwWz zBPR3*jB1>8uEb1FrzZ)~YMfo-_xQbtG&{ndfOh@OI;|l{iQzC-jF-kPn@aBO;V$G- z&Q6E7(^$@}C4AIo19hV_N!9-gnhl6cG7yUv{Pp4@Z@Gd6o#G7jhaGe;tE~_-=lr6R zDX!sKms_STp5P$skE3!FS5I#~|La!$H(kizpQ~GnknZCaSuG1cSbawD-e_S!0S;uJ zD3G~q>uQ0~o^YPGV4A)t@#P;a2)q=EUYJ=(tZV-|$j7+M)+4Ztby-%jN<|S@2suF& zBK##{mJET=59eqU)6y7y4~|v)+tABxTuCK|)E43<1?wk1ZMz&BcbrcRdy)tkyDu&M z@EG>HOQxGlU22#JePun4v=$7y&G0m&t<&We#C`(uxdgyJ?0W20MZdSM?UpvRgf6yd zo*iMvOx>y69Y&m#paRjoyqC%CpN+omXg>T!sKuIU93$!Ixgw<@P*T=*+NlL-2Gm|8 zuH;NWOpi@Z*NP_}%*AemZq+5{B@e>|=##F}uUuD&qrW1t;kxbqf)l|R%DhI^_22cn z^jGw?dU6-?R}s^b;ui_R!BFG3<2|KQ<5lJ_nZE`wGAOPTQ8UNkGDn@eT+}m_Aw~B5 zmDb2@zxG9^wyhlQWwm^ImCUy6!gRd_KI16d12%8SoDZNmvdYHWKN6;NJGpSH;{&sv zj=zaCYBjU>vo%EN4^k{}>VfBJ-l!rNY^RvIV$J8qbVitTGCh8cMI9@v{EaQoF^zk8o_E&SdfKUe}#TGbvfUwTk?N)-~RqH zihY@Kl|bjOzM#s9*U1!aCHFFlg3GZ#6eI+;_Ac^gIscHnkXA<9Z?S?}P$ax@4X+0M zYcA$;dJ7hk7>@-8j5;#$Xwu9#EEd)UF)j}Oj6{l9p%9N+ktj(Z{$X8^b-S%C;1&s9dQaeJlD8Sa{JvREvE6A;9+$bO6$`C34PW|h zR3KE6Jnixd?o*1gt5k^0viu5`F)d>#2md$KrKBx8wnQX=cR zabMT<-1Xm`e;j#D_-3XD4P2F$SG-z=JrsJgyxJ>+Aqxvszc0ogzGA)R?f@f){a9Xhm&yGRKjgA7lUKtA((yMShalh zh&oK2*HOPnySi$Q3tHCbcVm-Zi_R2ZjqgAI3(ENKY#Yi#r3J>DxQiBS7@6x&+@QMV zi$?Yj55{?3x~_n67qsC+UBm3;x?FPZui@@aq93OU8jwB(8$*)qm@oKShl%xlDv(U_ zP2&?6`#1NX!W(nOp9ur{`hJuY(GcW0^~vM11`*lPo-SkiYEB{9tr>%T>==vkUVeQr zeq_lxb!Fe(^TDzMZ@BNpL$-rqq3PY908$i9gQl`yy<77)QsxVN78fJuMe-Zn zota;5xI0@-Y>A7Ls+%3}S%x?w}k0fp0*?yRGoCO-iedy~@FzJucFeSO<%b%si! zN2thbK)b94jqG(+S4;$fzr_x>{J?t;W7U$Ry)$7U<9aO^246wr)i1N5nrBT^pWBt3k$>13Pma2MvOFZWL zoG9crT?{m?qpw0KxEQQ2X64T8rxNK)Ksj^C`3?| zPO_J8c8hps(!*wn->~4iVAB1>!+OS3xK>z~*v89|jlZkYGD?fH&kt8JSn00;`VU{$ z8!cZ`7&Js&?xM)1Y}T-JhTB)c<|3CiFd$l3$Nd=qgYwyDw>!0^E%q{${f?V6zU(lo zPp!hx0gua*4`M^lhdp)?{MFue46-E${${#?u5<2Qto`hxOZ{8v4OgZU7lu;eV(+%6 z+?7?9mB$XI-BD2A8|E6*i;PCbsOVISfX_)$SL+vHh;DnhW{1a|XP9{wG11!y_}dYq z6(E=NviROJQGIsKCgO%jTC1odQKtLS+(>yuuA~cMy;ERG0b{T_k+a<%qYEz%H>jJ2 zm4@^4C)f0Cu6VNOi~bbO{!{7hu)61Ba@tWHy|18Op|Gx-x$By#)QXA*Mf4+BmtOe$ z2l3C|Kh{p87JrIGA4JSNh6Y_7QA12jRgN*u)Nx%W8**z5(zEhKb`R9vbdfK}qYaiB zKNBZppbh^;@}{?mqM`fJ^b>1SO)|v`GfU5aVS8h5;$HSJuYL&P$HSQ*d*&nBpMRaMewIt8hETj~E8u_FyxEifh06P8w%HlOBhgQWZ3k+x!c zhu8l4=rhsq#W>=|+UK4xJGNk3mm#_)&@ ztt`UZqte=yCv+9eggEVBWS(G&%uf^(k^ok76Dz%}d_UifcROR9LOCSut9-g^L6B7mc$6>D06y}F8*Es;-e zU5-61@&|w@?^?GSP0^}Fc;zq==pWp;<_q=LePR+;?+w*+k0hpd>Y$R+BDB$TXY;<2 z*OnZrY(ztG$i!1{;Ghi?W|g66FsQ#%L$ZV6!keW8`)uF{AI(Vh5HXb(0wEtG^m;e_ zGCH1FL{jP3F8N(m&tL0IQp^--yy|6gR(jn3s6AOjb<+42{gu!-B?AN%#aNmz-r57_ z2M&UV>R6;Cw=)~Paq{PcoAB|6Q7euIyj6{}Zi^~?c6Jf;c^8)?L!|A#t9OV3T9}{9K^b_CO)W=r!RV6l491^O&(%alYV*c z=E`y7xp@?IcBFZAb!`lr4*XGDH!TqfUhM{=86CGpt7Y{AnA+YTm$?1!D7!qo6EHil!*`BmF zT04YZNggAz2;oetROq2C;@G{8xpAC_on&s`z%tBG*ENwOQf;J10j5}}D&dKdzQwf{ zO$WDQ=nUQbAW}p1?V}Kb@S*1mPrQA)GUo-7zW2Dy0d}qag1-FWtKm^&5ITL9%quL)JAArLoS*i6u-2;_6UF z4=AbikEm5V}cyp&O<@5E>-U^>Hd2sNaf$4$Q4ezc~w2d$E+M)7*nF(6`)X|gX z&)-vSkpIJvx>;c2y!2%C{BEONbQ(L^tBt18ZP#)!w(>n-AqFQp9T(h6u{zN;opG6A zl8zoYwMFy1AZXpTSBE=BKy8#8`{3e`r z@WCuxX@y~dcb$-*3(5iS+s$Gd)6X9-(<4ZZ(`|+#& z%H@rVo1cI?)+)SK7N^Bg`^_Rqmg#0(OKH($xsjpN&vF>FkjYg0S39!B&R7%X@RUwAQ_ssNtEC`cRJ`2z2! z)M7Ane1n5+$P^h%tE7wIIanE}q?gtWNnxoRb=zBh`5nA+U;(mT{RxO^vT&GgW*nJ4 zOzsmp94NuAdo9Lj8Nx-fz_Z1e+{p9;a-ZBnB(8~%4MqL(GMwIRf!iY~>#Eb!Anc20 z;Xs9vV%;;+N4d`uI)ZapO7A>6006WoF5N^;xeM-TH9>slkCe{eA;(F&>N{;~^Kx;| zbQ-T}TY6aso8(~a-Hg=L;&IuzkzXeWr{{e4ozV)!Cbgtry|V&c^(YQ&3}TNmMC;4z z-{#RfXij+IOfas%?A{|vR+K5ZpEkL!5h#%#paUuSBi6T|NxWk{u$ zrs^52vlaE$C=0d!(qwXRl$Bbm?U;6KX=EyC!Xoo9rL8`0U(UP`_!`XUhtLDS>>mxIYCi@+u zbIJH**>`StOOd=VHb%k8FZGiJpem>!TSIh*{1v}y>YWXzF$%M!QSBMaLY(m<9^?#j zd2LP9+}Ic|XJ6l}aHk{FrMi!I(gfNJLJYdAzCC&1$Dy3?#7*kE$Amb06ZDFA|HbuLX@VfGBW52e*&fqjbExyj|WdM zevS#^lVuLp-k-0|BvXPaW>M!m$&;=he;D1E}jLyFtih3l+jF9HQo|y z)sMO>c|>iEd4_>z{HAr7Z{-!RoD^7tjjC-L9DA+^mLFy5s|#Lbb3=B})+qew0)zUD zzspj#qIhFU#_h2Ek7bTAFY@<)@ z3~4qa-=wVpvvrBeNFam1RGBH>1$W4xtzIh+vKSj+-9L_JPt`_45fO`a{=)ExX(0)} z7`<-Wi>Vahk*;4ovMi5b`DJ{=4?wN0>(3%?neZ3gV{zImiyeJvub98?2`I52~ zH}tT1+}BrZwWvB){w04m{tG*6vIli_iTdVoqH~JxD`Ur)`w5QYS_ti>iII9!{&cgZ z`&4*eRLUU;#U>%1_`>I%6zOy&kM-x~K(jFpfg5T)9zd2uSLltTul}e%ohbs+&dAq1 z36+#uFT2+g-t@vJyK~#vU|wjkdL&(x0LI>{&ut;C)K4qg^MuoME_W?8Q2L3lMzj{f z%&`>QCY1|vd^J)P-9j$TpmK4K?h#bSCo^s*X34alwDIdx+%+9DYI6WOVe{YNnXEA% zWcDeHm4qO0dD{RG^=D9lsCLEgt0q#RrYQlFL3qmN49jnpMRidW9kRWNY{5U{2a0jj zsRnqO6Ei4VM&9(_GVWoSq58ZKNZ(KXqQ@qI7xieDg#wf)S3~Icv} zj1q~u#%;wm$_Kn26kmgOx)^puI_Y#b%W2G-7}-pJ+oMc8NWs%l{ODmNhI2~p_vceX z8yY`kMbZ}Hzp1wTktYco{kPy8BR`@_97|V(&)NEQAo`Paf zSWBsW@`SFZ>4x>2SpTzVj9ZJ+H%+tinKQ@&CTax+?H5*$4aa_E;3vKRZ4_`#w}MK( z8wgW<9*0q*{ATM|t4V@S32$kNPetWf+yvj@P5Ve9mu)4AYR}OVrrIVj-y2`4zo`Gq zCx%1?F9}YxrDBnpBZ9*Awq_gU&2+P&yERiQ5>vd{B7hv;A*c{sPcfSi-Uvq}Le|dx zEw!{--qkU%$z1m29;V8iq7@7D6oE5xM$6rq6uz=BvtvCnk?`uC($7x*2UNHt11+$J zh8F1BB|iZ?1%Lg*Fw$|-x&lG+HIhTko!d~gJlf-~VnV4QW;5wb@NS)V)cy}K1qNWZ zzZIfU=ErFzXgo_jBIaTvbt!pzEp^~(?^hkYYU`cfMU{*@3QhQkyj_8Rh%s;%Z{?2a z>$}SS@xQvHfg}v0S4%VaGr;)sve^dWrI`0#>JfZ$>qwK$(NF;9FYZ)Kxd*T-EUh z`U;l?Zlu2~$CPgG#=n9;)OLHc&KyHxa$K~}zZW)d6r^T8;dWzJ_z`1FQN0{NDtpEp zb%VOEbycEt=u@(B4DMz6P6DtoAnnnlZMq*~yux=3!f<25>whI*2A z`hB*eA7-pC>Su1Su~6h|Ig43sNgpggje;N=poPT4c#ATkw4w0@b(M6F#`<)WVhzxh zOPMox^y3DqY7S{`%juYEaZQ_%k^iZ-CR>hND}~~3X7h!%h5;}6NISMz1AKfBpOO4! zw)(p*2D;QUvEaNt(`wd7?(pH_LFsI_XB*$%&lgI!zGn0G3ZIyY)rGyuxnv@gl#!%* z(3D|wSkM-qB3GAOgCgmrx;@wR|I4+Re6a6<&N7v(Xi?scid!g0Cj4HzP#=>s((Nu` zncGTTqfkYI$7AXa^yfC&p3yR@kIioF8vfd_oK2bB?_bj1jpo7>q%}%a?dgjwa0jf< z-S-b+JdgG9;Q%ejQY$@%h$so|yR~o(%b=GZA;^{A4le&{pKAf_dNRnhN*K}*AL-A9 z8p*;Oaa+__vZphE)if`$)=V5d`PlxruDWqt&<CeA zaelZHf-N*ZOl$)I_&Tpj>B@$!Yc?j%%T1gQK1WxBOB=KK(%3L5==T)A{`LD#JHSgl z>K=m9vBA?tKRa~kY-L0V9H+A(KExLf{)_)ef*qyn-rR-(_z>gWMJ=s+CK7%noT9FH zblOg42&DP$_((;KvlS3+cE$NWBa?AwD!gO~WTNR3>a6Nl3+mSqF1dC*1asq(~+(I^P~>F;Q6Ttq?2C zh=?QMj*lEy{M(}s3Www z`{?BdI62pg^iLmB-Nw-#23LE+u`f)be_RtRiPpynCr;Mv>YQMpl04+qUZ1}d^*pS0 zo(yxXMrWRgnxsflZ{FJJ0^Ud{^RlpjZce{pIuJAJ`Ci9WZ!JAV``)a_8s6yYxjl>A zoHsBG`ev99oQnc>vuz~m$3FpXl@}R2jc+)Yj2V|~f4y5bn)u$0ZsiWwItW zrL{*bJ-4i(APAun(Ko$Wm-*GCxy6iKhuB?v;+Hv}$D5R3%SP%v;c(Zs6RwzITk!^) zF^oNpvkqA#DnCgbZraX`yKRD~U#&imR+>oFNCxZt3K4GP??Y;bn_Q>YdoJ; ziOfyH)%`r_2>3f#&AHXKaR`RmSzUs(t_)b@gG5I-3)_lg08(7LF7NW8oLNf^)iuUG z#;6G7O%wt`7}4HDM0onp!NzUeM0?p#7^P_ND5v=oa_3)-UH|NJu0y6-$8~N6aUx*T~rKZ7`Y0Fy6g$r%f_n#j2SSJ$w2uBAW6X z>i{R|kIJ$`SXJ=)g5QV^8_`A0o96-05@^sPaCc;nP4aa=YV|wYeswn#S_B*9_6$`N>vv&~Bvmf) zR+<(lYz)6;4$|(z-6N#veQQd0OmNSBeUNSM=rcx<9ADUO{r-bF4HGG?r$^_-(pyRKlI;^4ZeC66#r~PP zgLD*`aDfh+6$p{?>P~^|S3Amij)40nLxbG|LlS}|C)ko#?*_ZnKE;}@dm98(1xX5~ zl#0^EmTqR*rc^W}oH$axF8O`JLibf7kN8bLtQ{0;Z3NHXW{3=68SZ=Np;^hVMa( zk*Wy0oKN#h%XThc0v$fTEV2W1a8R~NrmI>Nq}y;aT##as+C@K9Wxtnklf1m*VA%Qg z{a~@}G{>@Pr7HjRHq+j?=ntlj1AlFkuO0aCV>(a{m{-a{-B{6nbJ#d>R6X<^dqIR)lu9&Xnjz(E+V37m=EMfjDXb8*w1X+#!e6ld+GhHZ)vezbWwb4-D@A zEu{3ng_Qoa01}Y%-*C>q3xq)j>*a z9-~!*bV|<7PB+X|fzHidrU()jelNE7#WZPJRT&=g+9ew8W61^;>QR%m74n1>=ja&u z9+C;+O6r%z?|sDzKPZ1oOZy_mFH=&? zvfN_)b+m(2x$#K<)^yV$0)iO@zlWnzz(X6IezeSu9INy=FNc4jIJb`Sr|@M!gp<8k zBgUS8o9e)qJ{-oavzT+nZQJ-d!S8v*#|vjuDWncUY0WVteb2^wHEL_>kf6b&=q)hl zgxR?s2q?j9X9e_tShGcS+O={^W-cpK9`{$)H>fpn@>cRR$D%D7rEALj(ZuQ@zdyOj z{V~%Cis}{K@FgBZ+8Q=&I9M>OvHoeAmBb`#5PR3IRYHW`h^5uXK(uoNwjlb(x!aCq zD^C=$Q$r2C*_s9nxR%d|XIWQ|l1U*9$d@e>r8TJQ>GqUpdiB-6SCvs(u9aq*}NbzEq8wCesMeQc| z$JJKUp7cW`BfPs!31Q!)X-$w)YZeD7o_S?e)pRd*$><|}OiV7e`+~@$o>G%~D;l|3 zh;n$xD%?%mfL|kew%}K0HLKG<&Q0f#5T**84%Ntu`=Ds;y66{UJm#c^i^d9D%HsFu z^;xhO@&fxQ`o38$Ji_cPEQ8w1yfzKRvm-S{7YXB6VO1AQFnSg-9QUdyG%CpZj*673 z!K(CQR6FA%*ko*1BW&9kH5eKc~|j0fpYv}JaYg?a~4eIKn$HM5T2^^Rf1ENtbNz&qCHg|-8SUH zWqSbj+)DOxcqS2OMRK=?)2T&9%2%6SrtAE0qOeVK=87`vCg^8IQhLS(?Y?-A6Cnf`P_evj15a{HNpI z3I~<2F{Vf+^7o5MtNP3%P?Zv%)U}@g+TC=*(qi*OAtlu+Tg~=+j-JXpOkR;zoOlL1 zEi2jA!u5InGmL!T`vu{Ndlx=F-QjI>naPteCiYdz6|7cl@4IqENs6ujm;mztG)e!z zDF^oKOU}ozu9-k7ud9>*)_-h~kN(J<_xtChl3aN$%wPH~Hd*XLcK@6}c?;5PA4gPn zOfk~bLi+6XlVkJOFM*RA-F}5M@SSRiG5AM06Y`1T#(O@{S^rk#2kR~2vBwMwTGq&t zTApkI73t*12OCLe%>|GQbL-%KE}igB>YDHN**jFzl!=lab5=R?vj!dC^yZm=gppHg zUy5#I9RMZMgYr(GGTWO!0msWf0VeUB<0yYq)GfM7@BaB9*$9$BV(-$@O)E>g0Euk5 zMUyl3M>h??!~N)dRtxGoGx~W%&q>m@gqXq2+gjd@z@i|BcBDM)Y zk(gMU46jkY1_M9|Se@Y)vag{`y80HD4B%$UCL?PmKEMqvI;R~4JKMEb*N_+z@h_^r z(!13SdaBK3qy_?0_H_mqW)6%?RLN2!%a_c;?uW9k|nBFSKu2oqj);Euj(fN zlKK1S=C+=6=Vx+fkl4Ns6c?a^{jJFI17 z@Y}mzg(UCAiK$9EbTA!MR=FEbvc5&iBXK?EtQpTWn~Z<%l+0?9RJB^{mp+YRYLI@E zQ{`)6Z(+4|YtXMWf1&68cx5aI%dQq2J=-1HF)+pMsPSDIMnhwHDC8Yk`gM}Fvup9f!qP%ZCVP8T zeSBtTq|~k5SpNz{umSQB5gzk3lb*$YzbXA_GV!L`zvdw7KW%2-3R}6T_H0nei$;Xk z`g6mVlTqB`*h?3QF%d`W40$nG;tm=;{yIV@s?klnC7_3$2C2c-JClxXCA;=KA@<3q ztS&KHmqszc3$LfA{QuUJr$hW_p2{&DViZ#c45XVRJZa$(VBPg7dmx#mR7rNE>}0W$ zDI{H6yXAKoKGXMYz;>1FlAY1V!=}^!F-0YMfb z9j;Al-FY!!nb-bKGTO?Cq4!Z<0=76!eoYz=_vYJ;*kIP&*G0d=gEmWldp^G%YRuJF zWNKU5GVzC$>DIeLp`Kl77)W z^1rnIU$y@Kl?n52|DbVpNo|~Y1NvyQ^dw)dzE_SoZ>;TjEjE4Rll| z%I`b0b0cSIYH`!!rihmEA&h(wtONTA2uRq5hjf-&7?1AgjFru8N(Ec9U`x%yoG-N_ zI^DI3RANQMW97L#&P=CMHKSrVXQGNTsq29UDYdAE<}mAyLmjDms|O8s->7I0cIllr zHVixVxmp+mI6HDD@Ng_lv<(Xz$Y$x zNf6W2ZT+AD=OJf=PQsb7zr(?8Zn#U470o*v)ph@~@5WVEY^hnd&wn*mzeK8QDkF3!I!xB4zQlk(VgG401q0Ta8f9qh%rd;!eW zv@Wx1wQ%S9lMQ8Uo?x?Hy&PL^?#h)*_7ioObA2GT{)e+wJ5C{<3+q0(15j72KlPh# z5f13A1+@I-+UtuSan4QwLgly}OlB|t1y*2WY=wX9$BQ9EXV%K1^e#oT_iBBarkilC z08J~8TR%v&p;F>;-lX#&gyajDOc*3KdB~8J;D7WkO}1QTZ}1k{OVi0WB{%ey7 z^Ts^!QtzkNe8vH{Tk3FHm(#L~2zmP;swi8C$Ef-N6JpurK zd0Ah5zrbol8ST??|AL~ zKd|f8Z!9(Er)1nh>1_gWxHPCfWn`{ZF*==$$1j=8Ojcmi?K357a(0D3T%)X9Z!B?S z-b)Wj>a=fks*Qjwb`U#7P~cQV?fDD%k6d?m+z7%-L-TkdS9dH)38lpb5*K>}A|0%l zy<+%13h^Vvd0e`O>;^j5Ec6SzE&X#_kz$6ALdr!mIR_2qq_utK_B|HM#$TczmNV0z z9@%e4Ss%{>2{>nWo9TTABvr|R90B8lD8bqkoi3hS?#+B4z>#P@o4p2Os=1+TF!YT) zQH(75+4TsWS+~l}`?-CWo<~bXs1A7?By(8fO=_=}-)LcqyW8hF^W>ESd}C(KG0qk# zw$?A|ZnJ)oH-nQn5#fqkO@Vp2gt~lHZX1vcd9(c%uu7Fw?Pj7NiTV9EaU+juEUGH{ zI{X&%n0p^O1MULAhx2gCWqBBTL3=dU=*4&Q%{Psq9>Uz_VssUr9J|jcm|ZtThq0KF z_AVoRl}Zuq#tm?h$Z9c1-ZJ)69v*hd@}0Xl0001=5B&nTQ#gWw4wrEjTkcBwnZZ3* z&^AxTX6|g$bBvkx*@$%En5`uc>)XT3jJE_FwPC_IDZKRA(G&~bcnrwA$bx~_R?oU| z7X19|)*yjQ3`kQLS?6|#G^1A2w??^eqmiS`(B>}=)FLT2UOHF~K%9XX42IV0+*U}H z?hoFmr*b0UNHeOi<1Yy>8;GNMHHa&Z%%zq7PkY}T*3`D9kAfmdRf>QVL8Ny=?@AY< z^dcYv(m|v{2#5kwBSAnA=?F*(y+i1Th;)!n0O=*61_=1uo;!E$Id?oW=iK|7d1jvH z{*mmG?ES}DYp?yT?|Z-Z9V#Pw1*x^&F)?RdC0l=n@`OcTAcCuOO_=U6*p zZ(exDnkw>Ny1al5~Cqw*m>dK;)?M#FF`q2^X z3qg*3avW#l7MIShbnvCM0t1b~C!QKksxV$>ckJ;TChGeE5x|-np>O$7x6bAW%*YM; zP_H6xF}j_RopY_o`19E;Geu|!%9(kNfc1ti--h3Jyq9bwnyrvf&1(-R#E|hayOeS9 zwUHSFhCP+u?M*kwa8~mSvot;hMm57AS&h{#*X`nO0=&D@G`5dr;OZP8jV2hm^1aOT z81|W~6G`oW`gq-O1J|?xO+cB>q-8 z{(YSysryTB)xG@~?zN3|=;^Jrd;(``A#1O_Hq4ga$j97KK6ts`M;!M`?vrQ#&DFTw zjh)?1B=e@>jfJ$ZR57fhJ85+^PFgl%D#c{_O4+3Ll#NxY@PJyIOvoc;_rb1*>wO8- zR|AT@AC=vmBm_?wWN~%@j;jGpk3j&wvrYJAB9}`la5SOX^hHfSJ<+PM?EUi23#~rH z?0bm=GoPOM;p#g{cjfU|DUY?T1bfhuvjs#Q3(KE;D|>sMsZo^g5EW;fl69(rW9}?j z2)(9A(VkyhHfcyFSFy&uW>{o=wxe}i^)V;34KKsF*YBd00fecVAh( z{nvBmU-!Ao*$7owp1)FDq+fl69l^japUY9iIJS2?(ArgL`OT@qwCXVtOLp(yn$mrV z=0;xE-8W>GZ9mkN?H%sB2^X@3tFXUG&5j!$;>?V-zgZXzU>Zwh>e4yab3XO++D)l+ zX!A(+{RNdlDiz|q$dU0kA^M9XaA7t4n?VXfYrlTkTHM7l9N_n74&k=L<%H^zH(#=n zQhZQmBKj!6O%uoFDy@4x#&67ap8RXuoLu$81TQJ-tprR7>r$IeYzji2|CTU6k>qMB zq3Ah`Gxe4{P2eK|2A})3qfkb3Mz0op$#NSaU;5~-bI^^i_XvAJA3G5s$bKJx{RW#Q zeEPI|zdjN?w8@_8yGTSr(P_N+=n1vLBHW*NPm6pmCN8(N40~u$BYwwbukn`JF44j_ z_)|uaVQOVd*n;jLN?X^D@hfjN-5d1}LIW-{;gIimT76=fjj8gNaKaHnm$1&ZEX+Hj z&MF%p1F4e?<FTjf6x2K|=WAElW$QitEwD}( zZx?$w2dE3$=Otth@FABPqM(O*7_*id$bQVs=+`?)^i`SVGeR>h2$NfQet736zLOF! z%^~mgz~<9}kf+B+B$+AmjmP2YO?7LDnFd3(0=U}1NsCo*Rns%4<$--?;aQ!*ZQaKi zITp9D{JH~SkEEqguXnO3?|#Qi6gY7_<>ubmEb7ZdYK`qMq0*9#STgr zn8tB3>)HbhpP&=N7h^Nl*yJ~bBsTYFG*+7q)(@E@FxnQX{Jr0Zx%=Tdnw5tZeqO&w z$KGE4%_=7T{-Wh|w{nr|+?jCoJv>j*_+bdm(A+STV^!Wxp>@=-QJ+oH-)9CWqU_3| zny<}{ZK8*b3JK=mdIcK4?zxg-y_m!3Z=k1B>_A*uml5WjEm3e!K{m438w;?e=F*Q} zKdc!%e$4xeHpeKuQS`OdC)h~7POcI>SIdOwPQAdo_eh9{F?#eJ=CU@dt!^lSUj>_ry_5|;PGDR6} z9Xs}Gc2n1>*@l@&h3gQ}rK-&Bry556oHa3{-!L=kMV1Ll&@$sD5NR zx+Z_%%wTM)HG(r=68QSv>E(jH?ZcPZ@F#fJ<1Bn21X$2}2rZgd>PnY0fBqAKbczt)^{R7a&^~LsH?Sb5$=?<#UA@sOfQ@81j}a$XeeUZ^jo|gaabUT2Im{ zMxVLOgM-d)4HenkvD=Uvz8j@5iC?%OK?pB>CHryFGoAcJ-mjP`zsLOBcYOh6g0;@j z!aBBs9FprkR=K#>O?(!LPI5mqS23oQg;dVX>ze928dPZU8;ROoWF6YzE4qQ7u9k6! z`Isz_zQFwTqYNfJX!(n_+ZRHjFF7G;M{r*O_KwP;-*RYT*BMh>D~#!6rA38SZNSE^m(k5)Yo9hw%d{19kZ_|544 zPdfBG@Z0}sTEYQr9A*)whc>SUL|B;}hg`qoRXHtmk|gYOF*bI}H?-Do=)p5lT-n$Hv- ztLv#C4EuH@L=)=bx_|jOUwemAOpCr!5H+<@W*$mkkLmnog@q zoOeKgF*YV3sc=>#m6dy7f~VVg*B>bcyo9}fTl#0v6(pn1`~qVC9viwSR9#(fQAI#d z`mD)Vq05~?kZB*LEV{8}uTq$25UsXNlYHdh-;`r@>#aXu6ujWbIRq|t!OSmIM+zuf z+`5#<^BQnyR8%`Ts)gknc_qm2A0-`&!{Ha4S zUEsFFL8-$2X^Pvr$S}{h{szOImv5CL(^9p6)#Al@~%mTOXl%>6nZlyXQnw};I&bQyoof6{e;sV zbAo6toa!16F?g2WeKpbDw|yg2G*n!2MMEVUrfZ~k-`wMET)jL$!o(+Hut0WkG7umx zaMAr9ocVE{0ZAfb{2lKSN4wV5j%_zLDidffN%gJaGfV~vL7pVtR7fJhT(IK0MF!0w zg;{f=L3wtm#1zM90z3#frKlG4}(fvI}`sHU&V>Uv(IC~R&KMeCFTQ2F!827Cq3ZyhsM6&`!KIICL)* zbeVORPT{@JIn9=4qwqNZ;Pi)k=F4c#JA>QH+O3>5b!zH`n2&6iJ`FnI#I4Z9+w)x3VPRL8iwD+qH&sUblSBg z{9JHFRk#Dq#p?YZsHe6s;qQ|}|Jm{X0@1GbLwnO;qXsi+mBC_!i#3o8a<*~W)%cEg zN5N=+gU9WR5~8ElFn~TZ0xHF1vW6CY<+npFAT=C>{n`AC9_ZWnJ$Y)bj{LZ6m(Rb+ zzju<)>$+(TC~rEId=4>V=m(-{jBGT?UO$p7EI$VJpZuH$l~)+>R+R?#*1lBi24KlY zLUcZ7X5>w=$scMw1b3>U&iT?(G0hP`jaG%M3-4HTi&mG-Ah@B zN5jAk<*)gwfQfN;&`kvbXk*aufxF}$sr!}NN1u3laK>}n)L3%UxVBUg^!`#(0L6t( z#6zJ{-GNZ(PV7g(c$XzsSwo)-8E_f@olQ~!V1Zls{;+zY+Fx245;eh@SuXpRMy+Vz znA@hpt{a}UqM^?{^QJFM-}D-wq2!R4i5?W4!+lmd8FRNk;l?Q?2u~m)A#CsEaVOJ` zSGDJk9}g0}IwMnlI@*a6+^JO0KJh$(0S3#DlV13i?Afr-OayH8U}Od(ws5yk#39E0 zPC3Jcd;ZQ(XD*E|C$=R%+Kg3EcjdS&*ME+^p)nmF&J!G?wgeXDqJF(+BT4NcBmueW zs-a;X)kc@NP;&KK`_L1p!`NN`^frJTrxt$pbV!rqL!f{`{Q~&xBN`T6{IHzBxgu3! zIYy93LOI^FhoF?hMHmeFy3SnH*TvIIGX}1x8{)Oq)4i49nj4zn7|Pg=Nw0 zS%=U5-?;U8=MN(r9OwI();5c=T^6;&{BK#*-EJwJ*K}51iG-`^HZD=cp_kJwJ`C65oFbQ#!;52UOPNE+WFAHlu_RmN|&uXR+0Pq?C!@^=6TxcFyumFjd6z`d2yTRg66|Nk!hA3VD9F?CI!M zeZyF_@^?IMC+V=<mO znoIZ`?YmM`RpOiW`p$-~Za(W!R3XpEBJ3Z7cCD;(b|^blZ8Xv5Ac0-ro1?=Py`x-bm%Tc6JW+fNaLme-yNuuXK7J<#zFW zDi0C&sz1gM=}`?Ha6rzb8Us}*L`N(COzQaWuQdn@kr62JnFN?k6zI*|w19lGE@wxk zCztCl(8*G(JT*e&-9+=qHNp-+gH}u&7=Yg(Y%>Uv!5B;J$2cZg1y!G79YcU}NaDfQ zj2aQLeIk-w-|=j|dAe!(6v>)LoEbVS7hu7yO-xuYY7DLVENAArmC>j|dtKr4e2x#z zWRRM=bD>VPx84H{KJa|SaVE;@LJuQsd9Bi6-ch5{SW;VivvKf&8!n;%VeO%9d9?R&(+;| z-&@OWXkShb)Aby*9hS<6L>q>u8*NvtKc|{8by3|aj(%24r)J}_)_hp_;h=AlB2G{OSM|Ox-**QV_Lbc zJh`qc0C^Tk4ibo9;tgx93pgI{`c~PQ0Ug+;Nyt-u%Rf8MLP6~(QpT^c)`D<3O%~1D zkfU>ia!@`BFf`MWwC0eAn4o$$OxBXR#2SFI(Ae3P(JOhwr40!6jeN&TSRO~un39Z% z=c?p3H?I2er-|F_O20I`)9(?2P74-AZcNkPBH%7M&n0DTV}?;k!U2RRq)6F=nMOu3 z*GGOn@gBim6YYN1^Hba~DwnOd+Wd>|F$ zEU&i#pb5K2zlIb)_J5NLR&SonD+A)yVp$-fHGf|+ zsZ>J7lP(^blN2S2^so zI7`wt9;PIn-zK1RF3+*%lzzp#6klk-e*{K1>Nl9-G`JM$)krec*(5&@cmhaMSoy*ZU!;Qdq{E?dW>noN3 zRiPQ`^wxhKMz>ZcAO=bi5fQbF}MnM)Hs#I7@Op+7wE zeLA~xercS##0EZN?R7t9p61=zOUF(g)8_?(MnWuWHl zrYCPyv3-|HHZGA;rv$}6MdM>+0meU;OJeZcCXT=lPAk~8FK zLFTjGwu-@TCfUxKk}$UPCg*=EL?j}jmUFCea)gQ}t*Pa3_KnH+bEudF8A{xl0G zDYsMj+;K@edzj^|^Ei8f^G2a>;AVWWQ#IQA`Gk^fRZ0Eu;!&CIrVg(nID^Zf z2&PKd=wlD~L*vK9H(~_3>JR`$!UQA?4pp^Be!loc4hoX*yfmvRmZS`L(T-~HzxdNzCM_gO)Yu^cNUqH)R}be zdJ|Q^Y8$TP{BAqYkhpo@fZj5KQSA_ z9mbuVi2kkp{FQAz-%nznD-351d%PWZ%c${{0)Cvo1s70>F8Socnu&O3-!Z-go%9$P z!(FTsJ$?_Uvi#elbnIc0T9Bvs-Utvla~JL)CX^Qu!Xy7Y;_wk$i@7*Eckqlq?!veQ zt%FwxZ;_Q#Q=BX7t1%teT#_D!WtHi^>o?81Y7{cEi;Qf}%b z_gk*CTtVGe%Ii~*(k>e&S5Mp{>pEf z@@NI!$=rgxm=WrX^lztMpXE-wSJL4Omx@~S3zk6eU;uH)zUvV1h^`?9`I5cS$7*NO za-y`&k;%P`^A$n3`xh!a^_x5Dh1{I^=0*DUf;}~X9G`OfLNc@XkE;*6tC|#*sSH$0 ze$4aEJ{sMYmnG(TQ_PY2iV&5dpav(K%H%88LhWx&)yxgmkEe^Ubhf z!CC6!lFs}GOVi{T6Wh1sf`X*anQJP$8TLGpNZK6^c5UiImu@_)c`nhjdLl)g46}Wl zm@Q%>N2O2WuE5?9KH=bJo@SFZBGXn!Wpa7CmfpNQy{7Bq2g87gDkV>mY zfBM_X~zcpOBMex8qym@uJOyS14^R(qZ#={fx{01$0)z!Wfb87o?Cw& z-TY5n^FQH7`O^R>0LqwpPiRf19Gh4$v(F&%sFO`_dlNg>K7SQ@wQR^$;{iB;P3f+X z(g%|*^@r*xQ;#;u*H&%}460|uOm!o$&S~;CCJ_vkNn(Ttb7(5vAmkw`_I<_hWe7@M4k$4GC+F| ze52C5?Pu#H)`Z4V<9q*^s7L`@W?6o-XPbZ2b6j(F@iJ<8V-q7XANb7EHC&E9u}y43 zEK(?RXT9BAdQdbJZo!qalOA!lM#rE1HG3n(td7Jch~+xK0sY6r%fGo+=R@&_2k|SuVjPxTm_rd zHE#($Jj!oqiUj_{%u}V1W3bt{heY*ju|*rsE?bY@-h0Dy%c@HK0Ug`5o;(&NM`dps`Epn%>1`AV z^7?I?P2YrJN2dW^AL{hz4v`t`cf01#=koSzLlyH$!o1mSe^ zR+7IYJ*lR5L1bH~JA2x5pN_L82s4Q>CaJNO=cSVuxIoNM+Yxf|n6Wlzo{lEkG$YJ% z^DOadvNm#_oEoSIRL(O7bQ2NzP)RqCh4x?_0cr@@EOUMETYEBkBWA1L8-w_@uzQP?B|Pa zn`2zVJP_A#1U2XjV;vcJ*hy_{z8w5<9GH*0as)Bi_3oz1#dqHJ?11EB*WoEe&-%oyf&B$=J1Yx<Z2OX}2j zGr6I@C(w zD&E|>Z(W^y(}t8)Bc_Of^TxY4io_m zTZF))CiL0sx(5_WU)ZfKplV-V!@o3gSQ`1w8xQN>-b9CC4#p`5qR6jdp(pAi6$RbS zAXx$33Lk!_Ew)GS+q^FLDr?OJJa~!(6qmA;(aSF(>g=D*8T(ybC%$|#?WruQ^u0@i z;a|NKkiHpBo8aCWqfUKnHaGi%CY1;K4kOrC&}enEu460Coiyj* zJ6@@oCO)q>1KHTucFTiQGLh#kh<@^Mc@*IbfI~pln**VU>!AOz4y7|=xQnK3KIQ0y zYofS{_!%`#X3ZuU0%aR2YDZ{4rxMK@O&F29Nd)u+dLr}XE?{ZzqQNh8n8N@&cbtB% zkEx+6iTwchrrYfE>$LPCuiU(aTL;R?E577Dv3Y#KDCmcxvxw^^5EdhjJfp`yqhgK@ zM4g{Z!)hT>H1%g6yV4FIr{z66fn#Uu+u!jDkK_)idmN=`YEhFFC76rR-c~XR{Zp!> z-|Fvdl9U#fs^Q~l$hgE54aC2W3MLIWLRpaFEJtvc9WmvA(g#t4R{8^bKyKdSt^9<1 z83H!s*#46#*#!S5(Wp1!MxR#{`#e;{!p`D~3=sk=e26-H zzWES676iR!wrUc;6&$?1>Avb`R@9y-m7-Q{@5-un6p|yhBB&$8-;GDuF>JUB>u?<( zU1)6*MO)x*As-vzcp*%IeFmSAX$w#bZ?~tWZQ6BFibslbYeC6VAX_(bUIs5U8ZcZpxNwES8^81 z7Ic7_7{Wu_oJIvMmnwZW;6V`Oy2K|81$ ZGz#SBes5;@*ZDt2cKKh{PWa!){~v3;D1ZO} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/example.jpg b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/example.jpg deleted file mode 100644 index b515822fa2c945135da16f4fd7de1462ccbd43a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61529 zcmeFZcU+T6*FPK!VgX&GsMKAGNS6|NS*1w{7?Kb=(j}qy&RRffSUQBJfDjT0QbGrn zDqTwGy+a5^IwJh=-u2$w-F=?>em}qG{pWq3$>+M}c0{oz^ zqNV~ka|Qr7bNT_C%$ylgQ&cp4sH3f-rm6f}!Uw=MBW;?sP02fpSG0Q3p`P5QrMU9z-twKx^pIK4PsP76P+EZr$hXY(6<=PPag z8!h{l_H=V{JC%9(m3D#ZD4x=mr}Q10f1%C)g|={V`6?fADkE!e=l->BS6i1?T`&0r&rSe#cAzKyn8FIQQ!xJo97#pgafwxH<9%kMkt}aP2t&P}cni z?+;9z%v{V)^FIao^g3&84FG(~1puh^0RY;M0KjF#f25t>{)@W(c$&m~S}(`bj}5>M zUg$)Unf&(CvlQpfQCz0HK=}`m|3|lzcL17;XYEM}m)N<)fDkjwrfrnr)Y$NT3+8@EogX8v06xl>I3rQ{3eC@9aKxppuzKy8t$GrhO9qie03Lj^lmL^aka9olJUBm!~nCK=WeP`jZg= z)oE4F(ww6KC;&cJ{87UHEOlm!BiQC@#9rg@a6r8m?Ol9@OVgvO&U?xrE1W-nEWeQ6 zB!7$wX3t&8G&KFm87*-Rgws-<8|g8|{dZfdc< zh;IIlj_x}l$HJ}KV=QtzKrf?(IyXaM2Hn}J?V1Vxfi5|#DqVb3a<$ z381T|iwIYeW1|$LIbyeyO18|JW=q|lnG9L6C8Z@*IwyPEQ(#+F_IWt-Ja-M&747Zi znhf$s9#~cCJ}9kjskMmV&Qux~A6Mxsz-jp2%B^urN_Q5>2tK;^YEz}#(Ye?9PN8gW zzNXe~?h(JL775QM{q5JVkf>!RoU<0f$uj3n$q!}*nvleej}`&)s1{=;zO!N~Le46L`|zdeXc8l-zp#@ov`~YzOm;#~h1O>6w?4?lPg+xHMg?h<$^_b4p67PcBpHdz}Ct` z-tw+i6p#KApES@K%#}`MoTj@%1$Xu*Zq&z&+IDi`UvVxo**in;v#{60*$BSyeG8{wOX}KF z={+>WZ@fD=r|n!%eiii5;T3xQOB@bKGpeO#^7)xDqZG`TAtbK`>E*B~11eiS?(nEo z6%!g#@N745I1s<`yas99Ex#3FTfHzeK`JAsv1F?`zI2yvZ8!luM+v^uVhvCr72ab?DCZ+S%~m<|0NA}DCn#@3VoyVvfbmNI#vAA)q!W23PYkp zTLh#*B;#oly~*str|w&2xy^-0Q8{S7dN zqp$pDfHYfuZV=vn!qsFm$jL*bLXRwN7*Pt{G*~e{A5+K8$Hp|Ydt)soWpD<8&ZVK5B=!C@32=9OVsmNieFv37=v{eWwR~M&w^c&j zuzND5cvWHm#|ZnDPSiO_>Of$UMtoU+}8i z4^mO#R-C%kk9XZ!^H|;WTn3nxpGZnIMa&diVQ1}(T^hZg(N|^ixgwE2CfvD>?k|E8 zvur(PBMm`JeYPx|h<<&MGKZyeDozX2K(h}HSK}(Gj8@-RHK_TBQu6w|ui1D}%K1QlZ(oCyZBU9mCYl>6)6^wKVDnA!~$p`uE9q z@}mbvvXro~C`d1iFK;fonA1g-_5>g;WKiH!`D)~)+wt%UjyP0|Ury5>{k1enz&Dpyr)CtIh0?7m8?i(KNML`1nH8i zuS)KynZJ`2a@xDVtQz!bH)!zlI7N<(vWM%(K)V=3g+u|?n(gT=kEJB?&E+&Wb9$L- zHgBUvI?HPSfKs!<#wn{~#jd}w-Htkx#9u~|Z`5gZOg2O3SeZ+8=`&?T=MjoS!a_T- zB&_WR$x9mv9sH&d3vKy zpx2h$pH>EIJv{b~<(!|nYB;Sv&+#zmpEX2Lm03I%4)`?9wHq1B*K3H-Syfb8w#|J) zxCA}$jC3H%=#k6D$B4ss-DGZTY)%)2-<_cAWV)(1ZAA0J+2sCAhZ!}8a0(vQUkuUt z*sl0+f4-zBoZlf0Y^LU^WrsS|vB3miiuZ=k>ujy-1ghp8T<0kSZ`ByyeVy`yA?}Va zyOF+g`C#^{MXn=5?o7OW3>q4f7AgiJVq52k;8)e}`~3(z_wNP>?c8@5reM1yd&T)B zu3~T+r)vzJTw?JlGZN_E?B;SSU4>yEEV>NdukO6rpPj4A&X0GUezl`kp*F*3T(%P= z$uMM<+o-3$8R9gG*MDm#9+P2lau!y;9xkC4an>VNqa#V_cx6{6 zw)tnJKawme>=)%qp6yIN54bzE^*mqF+E796%l|i@b)-4%W^6t{zGU8jBfnhAxNnXsFy_ndpwLk*WH@&&n z{L0m2(&$YyX3iB>R}Q1DKZEh|a0;t((w}-CD*Ei|$0o4*YfI=r$f9+>eO|h5V@oX% zWYGCKAni+<%#{6eQ5et{4Ghin z6qA2ubK@%WR9?L-t1C&U@Vfr02`qjF_EcSx#7B6sNBe%A2PL?)Y5mC+2raca2`F91YZMV zYn;MKc;lCUk zJ~}9b9|1#V^Xu_d8lGLN?JwWoeDOoe^>PPBCUrwYF5`Apps{9YsW7ltsk5xIZQzCD zy@84fPxB5?y~Eb~mUB~7*P8Fxi$Ht9rmi~DR3K^R+x@Ce8XTDP#SvZA;xwdrIy^hY z08)9AEcF(U-_|)cGv%J>ot6G^)G*Ak!W>;p;=)!3Qmy&Y=ootuq=DTa<^^$1Bs~m+ zS5m!W|M6<6Pwo-lW;w+Xx?DLSrWpMtlr*UZa`Ah7%ys1!fipstJ+qaRG_VpDT8bN2 z5;m<>N$(%SWs8q8v=?k%UAJ-QwU{wZRqXIH`LA!u^U@%!1Xpe5Wu0eJ~DdG|(EO)%6Th!&?hs zM!vs7F-_`nwbIfvLylXav2|N7Ht~TU4d(L=yggm|^bDK0&|4xo9nobE9!GbgFVyz5 z?KQF4kv%Uu47B+ch#C#8JhChzEQQP=(P8N2$;ES$e=Psbmsb=*hOtu(@!O?|lznog zKv*dX6MQQk_vV1zF1ku3s}yD~7dEG?%2l?0p%j$3E`Ejs%vsLk|; zyp_7m-=Ynk{}uQO$KT+f*4DEwA*-H+v_aaqPbe7uj{z8)!_4Qe!8d@gc5e|awz*|c zuvSZy&RIm(a^^?IR=USLmoK1-rG>6H3=TS`?=W9Ex$#b3B%RMGT$v< zknU{@+IC@K(&ZCC$dPb~7fzYcxOtLZSSmC$DJeZUG)k+e*RM(pehz|bxn_X zb({pLnJZ^zFxl{WSz2ioud`Q=HxXBgT@(ykbFl17@3{5O@S52w%%*Bq_PE0cX;$AE zf7j$n6ReC_t|z`csUFT8S9(_$R$1EHdd1ifqJtTxAIV3{Noapp$q$F)4!KVKM9f<_ zJLaKe%-_*wBKvVN*43ttC8p^ZsrrxZE z58_t?-i%rLPGGd*B>Gu|nJt@ea_43%|gy?kYPw9C8661yojZI-;BpYlbFN_H7$Qce=jl?uJQ8^b2fZO^bvDkSc+`=WXk=LiN=J$vi zsP+yuE-0GWnAHBlgL}RLD z9t>uoBSEw_u$_q<3CtwyU7rYCz9g5`P-qCB5Q9K+(MQGzu)OtYvW#`KLb7q9BD*7L z%`gMCld0Ggxy5;*5a^Dn*Kd(`QRJvGqrz~-TS{#sZ=2Q^QwIB~UJE^Cb?0xET(TDb zvH8HJAyMKkp@i0axrn}xa)i9EDtDUxv!^RgTC^TFo*o1ViV5HfoLCQFJ-%)n!a#$m&(|BH_7qt$eeipY9 zJ$hKq>DHMa&$`&k-lqmVghrFte~wbAtakhJMCbnOxntf5z_la7TR-WRMQFjc&iHM8 zJj3Ul&7$n~gHOV%$iYEDye`fciz}259d^*!57LJ1p?-^!@WbUk>5S9Z@m>43zJ1D( z#!?}vEwY;0*$rSP>#1PoBFZ)Z_1kxeMmWiP3(5^N z@YxgzeMNwGL2+^QHO&b9A~G>Otm{2vDv(XDF!*ZaYO8TjqDguYJW% zBQ#ApL}Y$QuvnjuXF&HMKhc#xANqubd!!&jb?pkNGz7NT(6o_xn8?q zLf!E>t!rLDm!fQ-S8s_$%n!x}VFt^;CXbV)t(%y#kkKFd?RpQ1Bg$G*mQ$XIy3C}4 z?#uj;kb$z|O{dDT9xkIRirQd9WeruGrP0a>AnVA3xgJaCgw)!ajOEDhbNKJkIZefP z=QvZI7Iv^5M_9&m!ah7Dq;FO65ZR28}gZ@ zBCV!LMn9G?u};_}wI;Buy+<8sW-* zH=zRbJy5Dr`I&hzi!!4W{LE7L31ImlHCM>~*{Q>k{ml!ei#cXfzJvTG*p>AP-KvRr z7_{6V8=GHV9oeJJ^rOBZQ!=Nf71Xe7Rf`DcE4sJhJH;s5=mE^?s%b68rtrxmuX8{2 zd^EylSvb%oUa0*kxf228R4u~mR$I}~i^FaxnK=0Szon3;T>YRCq;TbO%p zco?viLQEZlABMB@rDFSc+CnpLqh0eV5560qx=S1BO^#k^T`8uuT|QlsxdnR58MEDm z!20zlS#95j%@SDP9u1B5gPCbm+@^&jDt)X31ri9a)lPlUJZ$sSrRx9|Fh0L45_R3I zx`Vz))tFubIY8K`U1n%lp7U9i2ioAxCDK@%YZZj1s1vqqu53x;M2kuXJSLGs+ftrf z^|8M$6~;fTTD9?4f(qsWau1P*V%j+qWLW7K>A+OT0%zP*PSl3Qz<^#2rz9* zx>+@O?^*Hg?9(ZCdgbe_&IDZ@MGzmat^qt}Q?f>cu#v4EWh0*t7xrGe@xhPhx$EU> zQU1N~Oe5rmfAv+lV$kOj14DODtBqMB%sCms(os21qS%Oth`Nt5AoryLXdZ&3#A zD;R7FvS(-3!_il2@n0y6F1h&o3z)+;Lrvb~JNosK*8^{d>~^xVOF;W5UObV9O_StV ziovFv=Q0~4rFVicECSHW%RGWE_YYsRX5R_t)4gEF%V7|LD;;#T{nkx?@2wZ&!+$|B zl$!I&4W3yXu$(ruXQ9qXp)p&P@XpT3X<|;JbJl4!6rwZ0WK@Sq&KdA5>sSMCvCD-P z`%WIQ&Lhd&3{@#<3kcr;voYsz_JkY(u7U#fQuK}G>&Of7F{=bIpU2}SRf5$L->HKs z_caB`i>nfVz>?MqorSUOGAz!o;8?uL|J@c1NDq$mmVYPVcg$UBZZv$a3Zu zZ))N9)%JT|;`2nmzG68p>4mIQuUSG@O535dPf%fufcN&3j`5UFUpU5m{|MKbUkX8)IRv#qYhHY}q9x~^Z!cH13@{$V0yT0p&UW`oF zd{Vq`1iOs1ComjA!n3oA9}V3l@gdgUbi(!NJnuMY;V|(VyzMXn%{$AS#x$cXhy5^B z?l<{UHxlD3TR`ZT1(c+H*^8TMVHhVWIIphWRCT9@91x^c4{;8?ZVgpmY~WlE;xwM+ zupk;$=YId3?jxfs7V|J(E|y7YS4Og9W{GrXZ~>et?QGwWfRPW15GR($Ld(1>qJ9%S z%*!G+O3;;tb65;5RMdv8(2{Bn? z2b>1Bycy~-a+VKhmIfsdf3o`2(o$&zy>Y2-QluwdItzjZrptHR^F>>q+BzL=>h=_< z-c*WD^o6-_#AwZC4J|AfYe^)h=laKr&&L$ra?0%Fh8e$MdV`Y8&rE0q2?~^FVcD(^ z@avYnmW{5tn;JV1>MM;A*Bq?`c0e{w`p#g7JaorVEsrmo$r6a2ejaRsH1WC&L0 z2he;k=nYI{X!p@@;nCdI>`SmFba7?plN%r@kDuo{3!e>u^+l}ThYQ`nd9b~nDQl}< z=@Zc4iH5shE)ct0)ES8u#_QVS48r#0Mk>8k|I{n{Q$_Y~n+4oB0DpN}V{B?y@sa3U z%`zNqziHcpC90M~Medudl z(gs->(gEEgqq}*uagXSJ`5U>vvJ%?YEKT{AdB6gRV;}0^y*e-dkO8tf2gK`395sBo zLS2E7o%zCB?0E3vkb%kR51GGGXMmn%OGmE)3g$V#f$-$PU&a20b18N_=#%B4GH2^r z{eg%-`>%f^^B30ne%9gqPjQE3bg|z+_z#ihD*l{&qwP=~s$sP!A{4(JhxsFOYSmQJ z*Seq+z}*wT{RRidD9N|#`6VcVM^z3#Qw@UYq@9U zmn`s*Lt4%zmv@X6nj*V5+A6%OAP_hvS_s z*(&VffPOaeWO2VFR@iY!-!rtiVW9VP^G^0WAxG^y3R$f zL6M9Dnb=Ag4Glf?@{_CrW(Ai(hPl@&o>mLjn}(hy?|0b=yjX=Mc<78d?%h@|BE;nv zBwQS2P7#cbg{n~@nLNW52w=FGrH9+J(U@T&bp&aak4Gv#-Bb zYiMHEksU2j1dH-zDJgBK#SY$a=KmLc^{W{5qyxxk8V+hB18AC%-eo8;$1n^X0ZC3k9B!X3dFnFcI#T?m2 zGWJX+p4t>uYTWW|e$)=_v{UAEsfo^Gjt+y?^Q}j0^SPy}4#taJHW`oSTgS`Na<$(K zhwEDGMIYeSMJH(oc)A}%s0fR8i#$m(z4rd$NE@G~7=h*l;0aM0Z_Gad@Xhvg9$&U& zF6&-ZenK)YT>y^n@zJ4FxJGi*bDqH5RMqE>cZIGD4vJP`=ZJ<4+SgT?d#ZT!P{?R- zrwbx1d|dgyd@MNdp685hZg4=~vhalbF@(00&-itpLxOczak{j>PfLO505@6g_H8Md zM}xplRp19q9+p?g?GqADB^iU=OYjRfmU)eSZ^}im^d-1vBK0|?3;lI&aX8fOAo7Z| zN-~Myf?jYyQVX38D`Y|*(pq0GK<(>Lw}7tf=n=iOh3eai(Cz?S|Mi#O+wCl3-M;7G z{ujeGHC%1E>im@*$Fu*@OaY+%eM(jPeV+O8_Zjj;S9eU~o$o@f0LyP)30aL|&FSTuBk94qeQ zZg&mswcKl?th0QxE!5nh|8bNnP+9!N+0{2K-pKewL`Qou7j`GynLwh24NG>oN)NTI zwB8O&P-Az^^2-mkP-Bp&lUtZ*nCM3)Iskwd+}@3#=nf>9CU$cwg4`{LI5LCh$C0r_ z$_VHon1lRjndil8Ho>nKXChgY>rP=?lu=A9EmeO5uk9CBqQKKABev3@lyynigWK$MnE(BY*X3$;HARVMKvRDj>1 z&ugwvH&;B3EKA|1pHa?ju+|r2BY!5ZZA>5Rfl7v4HC{;r0(AoH=`~Tr4TYL!sTI8W zo}5cbiVE3z3pHNkspes490AkjId)!_Gdn!nmD60+B#om*^DVNbJIj}DCv9yvurb(> zTL-F3ovj1L(va1fFIEO^>t;w}UNV&R!+3YP<70iDn*p`IK8o zWa}6l!`&*L@q0t`%F;ZyPr7#Lq1hGr-uL&kqO&FsdS$8(SdO`+jOO=^atYGSgRcvf z%STI07eW@-Wf$j@=cZF8sv_GxYB5=#h_Y{&QQ!)pOj z$qfrxMP*xp;gmiO59iHMq>!~8_np{LA;{B1R+TztE;wjBYv%Rm`I7ZJPPYB413TK| zhGM6O7H+vDKJJ0#g>9Pb#sv9YeVRruhy5#h2t1kZT0o9 z2ln7%9@m+nJ<^SEp9A3;QA>yZ-&Bi>5vwp{S(_})k(iF5ylhmL9Btt-?0R`@a$P4U zEdiH~-m1L)1P5YY9y5Q>$eX*EQUTVz|7Ng1_?ut-FYC8yMg8ahdnC9s%j#Fcvh`Qw z?C-PN>TI6?g1gogq*m3wP0VNh+>v+yp#Nq4V@UnaBB5akN-+X~yrX?_8+m`@Ft{lQ z=W|CtMHWmy*)ki!kE8 zdp>R;*HmX2#vqvG2Ssu*-C|VVjy7cNiw29w10h989Ks@}I);BaqmxHx`5 zBNgU^-4~y6O)1mkp%7cVewUFGOW{JT&t|3SIH<&bkAf$MN zo6_7^3M=aM(e%|cw^$iklCW<_CZ`Fs=E_;*YuAbKv zHEh~#eSsO64y@7n*q6E0t^aT+DTAji#D~OSHQ#&(J0odxmp}0qq0d#(J=n%OX&y3W zPzjR-YtD940TKLQ7XhM?GNf1Z)}h=GV58%AY`t93&A5p9`JqB6xGVWtTfUnx}=s^}|a{+@FqW z2!3jKy1Y1=S?1|s8Cww#H1M=?dE5kh(36L)9&!rpw%ymU{=9WIrn0+U_tx#Kcl{mF zo-i6xi9iozCqq6g8hdPaaa>H_axg4Gjv+>@e-n1FNM1fVPTyEFnoU*x82~zcAMTO^ z1KQ^>%rL^WTg}ulBhaquVb>A@W3AM~6|B3oG?7kc;zqmyh24KC`eY=XqDE41zkXBg z*P5U3&=bH&sKLT?jrxZaD#@S%M5VbetxA*LKxU=h_$@wz#UiGxq^`aU9wA+X;rw+S zsD_v}>ha=hY)-rd8tpX}g?gNxx*C1Dv5wbrgDT4`zkBvP&GVvNegc&(zd*C3`RlSH z2s2IAEty@9SNV~7V<@lffY6S??4q3NT9DvuR!+!%*=(ZMr=2M6UjJUZvE(C>v8i)9 zUEllw|B?IT+I2N%aFxDEBoYie^<0F6PC_EvQ->8O9B*r*_if{)mzyU2b5%)G!=wFs z%D6-YE>Zc94W8iKqNs2qNQP9%7o#|~Fa#Dc;sNXF7tzahC~Bqc>2&b|Lz12Wh5B*9k(2E4;wK1?Q?9Rl?`8c;KC^f~*Qi8U87rXT}H7 zY8K5r7%;D8C2uXVCr%18&kJqbvjVW0{Bv;s3-M2P)<3;_|4clnUHQ->aQZfkAZzg? zABj)E>CuW$2tR?|(Vdo;0bhhq;~{z?c?tQ5S_6DfB*;4|o4d;tw!R%#bOP8wIFk54 zlP^vH2X}T8Vgr*StDNPg`*4vgT!Ng%eGr`%=Ew0DqnjI5G9CJAUQ{&jxxSM`^E)T# zJ$-w{^wIIk)(fm|f$dSUc78_5-TGv=7*%Nn=hm60E8g4P+kh znA&#)HeA=^UD^z|SW$)gVvY}+H_x~6V5~4MXT*ArU{eGUTT*xzA(4#7F504G@4?t1 zLy6Uo{9;2H*Lsa+o|u-tS$}00&R9qW8WorZVZnRks)?9+340YDTzT9Hfae%F(ONNB zP$Fh@)W5eCwJ@}+s)IMvdEUIkPBl(s zyn+?o3U$sXOXeiYc~>>TdfryCZn!)gi_74M_dfN~;o^N)u&-myM+;0t`;8+Swb*5B z@;g3TOL=z7C!r}L_Q)zIteZ3<2aQGXVo?yfjt(WIU33n&DDwH#9PzJ!+fHqhzebEK3bS$7fU59zqq;6dt6N{3~$jR z6J6WRxLll4>k(U~$HZh-(^3zWoV;js9Xsy)%v)Qqjo^z#A<;EtSEH~&p!diER!Evf zK-}@1tOfYR=?s+M(ovHU@XEh880c9LR(wM^HVaZ)V=)_$e$%9OP_T-H$Se*>FSbi{^Bend)vdT0tcZCck_o1Fy5%odn+NtOB)-VjY;2ZVEO~S`f%MC1 zYoB@f1$@*~@Xm-i_x%9xGS6DY+Ej;}nwStY<|dcLTz)(@ER3kGm#b1MHtajQIH+X2 z?-ouJY1FQ93VQD)flNFXx?L(3bQnlC(i6jm`ACE}2q38jh}V?UnkXfMXeM zs(g$#K=|-JURwUi&RMC^5?myvLZDSr()z^C_T~!X&ENW+tI1{kXhH3bocg`R{(O%P zIJ;Rm$$bZ}KTc3&&-L%b4Ts8J(&zR}zDnm~)RZu<`cx2(E2~Y>?7Eh(3>d7FY#9{KW}WD ze)CQ1e%rbE3eA5JB(DbAG-Yw#U8NPDDCe8+Sr2Qmu}r!0a5s}LeeZE~gwYl|eb~6UxTMMcI zoO=s!lP=N9wJaIwP&AtNd1+{QN4HvgH1_oMshRa3#9J&a4TJTU!5MGj$bFr!9tzPN zUp7a3D|w*6+s%_mE9cIMQYC2g4Grp~dVWpWFzjh#bs1%LI|+rrk9Xj#OIgAzPFZG55#B zKl?^jhDNoF_%62j&G`7ZqYlRGQpUf$0Mqv=RGt9jLtG?h4UpUl7NSc=|D_y4W)Ux_F4)gPRu{1+Y0c-_LdYNPjimGwV!?2aM#MKrm zO=Y-L`-GB`w0DXhPl>8D-|ejWM8pwS5Pe(Rn~&;Cf}S_Oe6o!l>;wAdF{=;ek`!RN z5-A%;E$(opX4Y0l-WTFAkJEe_Y1p?w%q|=}W-gvX%Q0#&smkT#ab>93le_^0FM45I zGz5jOp6b44Yxnr^7?4gG&ezeG)B(}dVs}Y>v54W0$!_o4HR*)|*sDFT?Roij_p(t>Vm#c=Q5!Xv_@o=wJ)p<`g@GoDU8oTi_8i^sf0!p+<$C)Xc1UQ}+CXQ<8bG7YQ%!|^-1aIaQU38kxE zb7m`%==+6>Kk$e#<*==9sptFe-qY*HDsr#0Hm{ukSmZaBcNR|oz~Q$?Q8>lX^vtaj z0D5)uSe5vS+&&Y`2CmfzLk0-}?8>ZK@v3!wvTw3JSHB>3?FR;vJNl+R9t2vx*J}U@ zTV-*7nn|;2l*AJ52t1C2JrIx9HAr0Uif&+(hZlP1Z(!MMMMlr)xfBYnN?8P%y9y+E zbZXd@6G*t2i|lrqL|;;IKhclNrg1PYoX%ifG$T%_Wm3T^w?Q1SA3s5k2)t1Rpd;3N zd&WP<|7JhxOwPV@@hcafV7;Aj)vy8*B-ho-Qn%dn5M}cPRh#y{%daX*T%>B}7Z#l% zt_q#N%6>U|LkbP%n0xG*u2^wh;gP`S%Y?F=VlPvQfhXJU+a>bpvx-8CeNbT!%gD(} zNV4w|Ca(iy?5E&?-llbs?t^~0%|W}H$iCT(o=;mz={rDX3d@&vEXc=d9xnL3{uwZi zJ<}>e9jj5VdVxzsFh6FR^U!yYCK*@wzHI3Puc@`DF^PJXvzVU{rk2)1HTY@OV-5t^v8!18D`!oMdQ{&_ zE4fs@zmlrtn(=t$Kpa2$g;>!E3%D62l@4Yz&4oJ^S22#*l{A#@aheFTghdmWjK@oZ zLdb!r+}evFr$;tJ(i$m+@p$QlLW!kt@ndSV{i0+@)JuSD@$+vR@BhX518L_5`dHQa z1Ok!q7;=6jAq`%UuZ|1j4Fk3Z`)LhY5I zC^y3OOd)4B(K(Maa;C%6bwNenj$qTwx~*$ALUhksj&xFv(p%s%q;ClmVQCu2ub?o8J*G zJ&c6`QK7I9v=knyTlfxRHiu%U@phteNv}JuHHxj$Jrj4C6%yQsisrFUTiF5wo%y z#Le>uU99Dbj>g@mgx;N_+5lx^TJ*}cuCjMrsb#;)-2483Cx~PxZMRG&3CT#FL)vhe?G*j`Uzm3 zu(5`ZE4dIxJPpvi+y&*6d4&*XBRR)P>>JhbZ$5!kh)sUPx(F&J=S9C_g7 zCLV%h7>{1wxJPe$CYD{Lu2M$Pyl8l%6Pa!iF7XPyR}5C56g4(R;L;$=ZS3rF?CdgKHc0>=dFm_9 zwkXyEDfcepsF0=qrX;br8Hmi=48-svsuyh6$9pvZ=6&vr~HnMV_U&?~@e zQb(+bKn)iy+)&+a@ofi>jnbNx`Qm%)Yd)a#*%x}nJSqjCaODy9Dj#*K#y-hk0X}|T zt4AIA4#%I<*+rL7HJn$TV0VU6V4O7%$70N3N=fef3gA-< z{m)N$QPOoWr`PKfpC?{1Ptc&9iRUgG%Y!k2?>!8`3}?DzW(tO3Fqi^Yn86$rrWpT> z3s=rR7M`$3%fj^xl2epl1WV~}g2HYlrN>@PnN5xD(!^u@;2j*Wfbt@^yMIGmR2u6f zRcXga0=Jh3cvUOVbVAZ%6UB-O;1NI$%U3zu@?_gp?Tgb_8yqpRe5ODRhVq34`XWUa zX`{-x$syYh2@2C+s_-@-4BGY+HeJ?7sR`O8wnA}0Id>_s}K{S@*R&mwiLWiof)K>n;1}QExbl4z7z`tv1x7DkL2)u4kp2-WO zp+!rMVzW53tTPMUVO=H&YLB;G{m8t1uj#Bdna|yUr9KiV+(B+Ka+6V_5`w!}Zzb=I z7Q2Ivj-7}ZCjhnj$5XfPw?lFN#mT@UXdgtkPfb-{tJN$%tkpa|WT6&|=7Zfx218O5 zvB{P15^qhRhu149&I#`7vlbq=LSf>JVXViUoV~mv4~}Tm7wkN*D}!#P;V&=^2uwym z$L*?jr;AL`+gr3CQ#87=PgmMnls1VhEG*n58k&@mK6pAim|+ZLH4-K9qoQzSRLPYA zJM8JUj!JV;tvo{|WLhrx#ykDWD6FCC6Olj~7$1=qWh_u^XnQlGw3rA?0cn3JjrO~U z^_-*OaE#c(B^J+`?nk;#A5-%?`w&I7d)c|abV|H``!wjb&OnZQ$CWhTB7^)5RjU5Y z%F=|2@q?Z|;6$a-+=AQb-#ckpssLfQN&vTExiZ$vHt3qm7@@ih>&}R+z@8e=9w8y~ zG_2tD0ZRbuDV%=}|Bbs5aN)a?bALKf_~(qi`~L5=xSWGP^G%zxL-UPEWt;TWbi5%4 zuZiw1_>cht4QvgzphBRB`G({cOIId)Eo1?O`}d#hT>cEI^5)5>8(Ha0z!G*0JjdBH zmueU6GHr2$CXdC2+(g|h?{N;hzQ(>=cs!W4@AQ0v{FX3tRf}*VGoQ0@GhFn{l#h?P zn`!HS>AcH_?Ts~d=&;ryl3hqa2CQwWT91@mT2ONkPZf2FlzDSc8>}+FFFv3jtWBB3(Z3nvU=NPmvXub$HFldyQU!X;L6b z)jCE?(WZ4Orlu+8<+?4k{*)JUX*#;Nm-sU|`N#Mga&-8Fi;(#i@2jDX$PR1BPRfx{s2E~?i`Cc zi!M3o0~O|XfCu`&{G%0Eb6Fl4{gj+^fBF|^^3(KXo2ov3`fYj;F{UWcBaEo51a;w+ z!YjG(^0H^h@2hTDc9>iyY>nfX^g~1rF!-FNknwrtytE~}00I%Iw4k1oQ@?xw8m*k% ze!Q_OqQdV2WFEYYLgZjD8oeYzTf}@9cYdHh7pmIX$fr)Xum2wW9B-bDW%PqaHy4#T zS0f?_42D#NrETqcUX$<#$)cOxOJ-!Vst2sd1FzO%93rb`TlCwQ^d?^e#$?**+W{>B$L$fn|pl-XeKO z`=NhN&bZqy65yit=}HiYIR(9Td8l5BHrbE`RBU+yfWl6FUhS)?^j_xX`lHm>F070q znQMq%QP&M^XS64N)t1d8Cg+foB0Al^SRB-B5a$(Csf0&Ud>i+%DMBtM0BYh4m6{RJ zKt_OoDIDG#HmNI4r(17lC*+M0Vc;8Y4!l>)7Fa%6!xrmYbVl<6XNK=GU)5*p{y*%! zcU+U%x-ZU*ZN{+-0xH!RP>|511PFB;DI(2~gwRnsp$UZEEF(gIARsL?4G|&fTAT&iUQ@`Q7{e5f&>eZ+V_o-u0C4ci1Nc!tM*N zs^(m+uFmd3QpY#@p@ftg?X{ z^5@ZE4M?LWz*iLC!*rjf1th1^PwI}U72`~D3Ar|_x~j^FT+UZ} z=FmMz{i!aEV0_<4;yRz)uE?r!~aw}mcKtI2h zS2o;=<+Tv?+qf9Y6Elo_i6GI`X{z=Aco{o*aBJ& zs%#Kk7?M9(5Q0fMdXUt5B%YO?S-VcGo$|Oh@f12?zSvdIH#zjkrR2(Cfs4oH+o+rb zGCO-T4eoH25rdZB=4l410Lbm~SvrpT27rFXI9!ZQKGnEcRHmU zcG}WhO!nJZSy)&TAGJ>5V@1_)fbv4b%oYr)ef`Zh{Lw2^*ty{A9+fg;wMRnMOzvtm znesxaDRy31ME)Q=h5A#c7md(^n(te>ze7)D@ z9n_lI^xcmASR40zy31u2i~-<)+@m!ztCo&uJL37iN_h!gdtt9K?T*&pkM=gruRNg z_+fWQ;VTuMYa?d_iO=&xRNJ{MrvlAH?cMX|#$6Gy#2^a{=;GX@CQSi9WsHlezK0!u z5{mb6^Z34<^ex%vmhO20(sjd2yG97p9P30OG}ra(nl9MzA-7!g$w2=hz8@PKT}&GF z+4CcZHExL7l5(l0d7M-ZrZk6o*!w3yI&?j$^Hq(KzlHrKM7VAu%~<_8;?OGm6Ps)J zn5j@OI}I!yCp|Wk=Oy)6InTo%wDP=N?c9!UP}1qlK(QjSN&6NrnN(O*adXiZyr^kh zi|&ENmss-lT+l|KHFg(53r)7UrigNtvzb;UUDX5Z#&|T4n&`HWzks=b%a5w)Uud#& zxHT}gM<7aQg?H|SozevQwp`t9(Z);C^w#J0($88ymR3#R9d~h;Z2)%SD@GPq`iB-w zhm*cHiPzfL;Ua1tio6s{;NXbVV>|IhH*9QwgjeQ#HN3w1SHhvcX_191$P5XsSQ^}Q zsFTVmHJyj?Ua>U8FRJ4i@9BBKxb}OOX5;tSyjjHQPnCRW4C{Q7FSTwH-GI%> zeWMtcpLFWx-241|b03DLT^b(5`vb{$=7nE$)U5#WKwU%MND|%fb!wFn%`4vFZij7z z#5p5*`CN&jca{Lt)(v-;;n-}PzUa7@s|%lg|5dK@7q_--r<2TQ&z~Z;M-R6%1pp0n zd0?{G8KLq9OHJcGFA%Rd2e2cK{VghD$_lBu%)O#^>@~OjZ*GHONdro>Cx!ATW2%{J zl5#Ng8S=J5YRQdL`Yu8?ewaQDLpC0|l3lzc=dS!*!H6I;BE$v80+su<`(&Cq+IT~w z)>f^DAo~xwH^P&Nwd_(R-Q|kY9vZs+vWuMe|8K7{G=&?Jzotc?5u(+fScgI%a zwC0TUNq$(vqM7dL(-Nw@m7YC~{Z2FUSRlLdtS7?xc_A(yjlUdhRAMT`KkN;YgRb*y zPw{-<^(4IVvm^rT(on3xK=BfhZJE5smjv2LD~lpNoRI~wP3Lm`i6fqYo!x5_`CFNg z?bx2l5CxR_f&L=zd=2;$+k%JlQ}#qH)s4}spV&4P$_G_A+__e5#LchspNf6rTdwEE&2|!~$&X%fq zOG}#jWbtksKOp$ri=+;{k?^rQm6n~O!_-47(JXiF*#5hvUpwnpHE8~nIWJoEr3e4L z^85cotIk?BFYLlBTfJPGdgT404~Wai>@OYZ-IuJj2MT;ebCH3~Aun3Q0tKx~vYc3f z<6o+>iv^9e`^qIFjW#JW&QSa2Z5YWY?&3h2hSN_%}yD#(Awoaf_Nt5qQ#m>eP>PmGh^tFeg02>-mk|Ica; zZwYwOC?DuDU8;%Xx?OQ|D?wWj;K!xhWiXNF!^L$nN~8J8_p$%{tEb;Amb%a0Bdx@@ z?H3*6-DxzLxHvf&p^#fzZJ`KcTeZ)-Q`bKsm2d}OVjU&Nv8C$@Twencj>{#QA9wv9$4 z7dkRTj~8TomDpbh@n5UTeqN&{2|szrP3kDji7R^1&Qw9hffhGoLM&UC1HBJRv%z80 zBKP->BO7Q+?Ud@{c6Y`1a1Si6d%Za9u$s|0oG@4g=jz*r z1)5~8s(0^P8;yO%?BDa?4BJa%C{X>gKe6?VQh!pID-8NF#+=6VCt^RbL4x#tgYQ2M zIabSUSD{un3ztJCMIm(vOqVNx+DA_t?A2)l>szcQF4@Qm)mr7*PcY%HT8^}+R=_LJ zXgn%)$W>z)(rm~^ob5x$L1=t*+-tI)%G4PdtgwM%a-!viKv!J>&Has zk%`Bd^1WuF&dw7sG{8X`h016|2y!mAE=#VzaJceHG5M06x#B(@*6DrT{g0E*9TA&~K6k&z9@nUQ32bALni{k#U6Bil6q%9kh1qg{Tn| zS?M{t9B_>tfoSXdn|;9LYTc$n-=K^)_A@t~Bp@A&q5MgbS+z)w<&0NH1E}89fZ9+F zwEF8n{}AVn0~;H)&J)S$ywc~z2`DD!nT|)f^xMPhraZd@<+%hhzQ`{0A_Grc0)c^u zoG~e@G*S9PTVzN2+eOgRq4{k!9-Fk1bU$>xx?JFg z8E@TL&os%Gql(=sMjuYZ`5vva;09=0d(v86%b9sZLOw#wBtNSBX(a-FNRXpJs*}bb z2@gUlashU&H;LaxEe1_5)s27q@dqyGnpVMz7*gRlUxT8@2~+2lQTB!nd4i9ayr`2z zdGy2Y%-`EyjOfpM72!ap45GsP^g8y|4urk80&q>HvyvRIlOJVXcu!3}^|}JlV&M); zC~^?2H#{d}o?(lLLE`&h1GZ-UrHVbUi_Jg^eqnmxKF=*CaoQUONqv?Qfs4Rrb>03sKB_*lG>9{y3+>bS-Yd3*#L9j9mh*Ro0Yzt|Nw+BhcOsRetFE6D!^UywJK7pw2=ywwRsDT& zkxBb^*3LU437kXt3998Z&_y5<31PA~N_(6b{;h>BVpYI$CRf<*Wm zVm#1#KP}3sN|S%z`aM$a~%Y8w28b8*9-Fi-5VUy*XOjl(si%adTJ}Y`u1mC*%P){JLdz(4=J$yDJ}m`Xa#?7^B1MB>DFuUUsFk6{V5ZA)4zdxJpGtm0=rFn zIr3Qv9>_NZSJE!_jCKKAY)b_cX~I@6SP|EF+mseXBbzl>MBqfLFuDA8$I2Aez3tM;Aw&F8ZA0PFru@KqOlR} zle)37yqQwE`%VYS)hsH%4LocBeE~u%ayd>-53g#LHFVHL8|8el`!*d&yzmiS~y3e3v=RDvL%b zJ2M|=sqB~ZY?;Y=*$qRdtAp8bINN?iYF5^H+v#hgyPjE9>X-T}UPF#<|R|l{pkzW7haZmqCt�Fi-UBU>h&liinIa(C#p-C&YO~@c>&T5M&0eFWV z%{b6)(^bKD8WVZjJL63GEtpsd3rWops8dFhZ#!mrwRw@9{dV~W^Mg*y0V=|?Nj)il zI^8FdMX)g47O)oWowJknrXP7;#5BA6Xeh!l>r8+~<0i(toufinhdHd)m))oj=5YUUgjtk@08x{CHzZ&U6PqFB5dm-Qm| zwK}y4Q&$}Tr4~2fJa1db$~9K1;L8Tf(|pxx$7?~I0iI+V!W01rc$ZPRC0OLXnY!kBerVQJ3RDW5QGP*7TRN3ZNoi&z%VC${qi-78Yx6Pi#? zi)0cXqzCl2dE%s^{P|1a*vm6oJ9Z8c8CxWvXYoTUh>NHJh0bcKIRhD;$AXQ;QZ|@+ z`&8=e#VpY$BfdkGOTIHPuqp!m8BBoYvuohI9_dTrev$t;k#nu$<`e=HYfI7=T*qSb ze9rdd?nq9W7LiEY+V@f|4Y`yF;%9P(fi~;>BhWPY|7g$45k@FR(uFc_m8HncUToHYs-SSdBuBY)82*@7amKspE9*GAuCOnS2`|< zSsIUpGN1-NUU=!qu2~?ctH?H#H~n%+lkO+BQZKW6si{Qj$(}6Fc8_} zYjgn%z`IpbTncq#rL8q)?KWG29m_O9L~4RdAL`Ii$t780m?qY4e>{?*@Ei@F=P$0$3#D9%p3 zjPf5&?{Y~*Nb6U6t7{kjyUD<8cXH$B^Sli&)K!ltR(opB^I?cg6Zh2 z90SM2tOUy%n0rPR1i0~@z?4RXjY!8@D1XbQH1yja{q>K+Uv4OV|CZmb13%~

*uK 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 ZVSgUYTg2rk1^9p6iTq!22il(p{}+DG5)1$U diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnail-dark.png b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnail-dark.png deleted file mode 100644 index da9aa70bc1272ea9d35143ad5a4a0686d04ac644..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60642 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 HdGP-Lk2WQf diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnail.png b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnail.png deleted file mode 100644 index c27ba4719719fdf7d79165b383303fc6caf88d4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20423 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 Xsi{c1-#i8(|4r4^G|(thvkv?ZQO_0R diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnailLarge.png b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/images/thumbnailLarge.png deleted file mode 100644 index c1127688efc187fdda54a66b653c3719b83d9475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45424 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 ( - -); diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/stories/data.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/stories/data.ts deleted file mode 100644 index 167f3630395..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bubble/stories/data.ts +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* eslint-disable sort-keys, no-magic-numbers */ -export default [ - { - key: 'East Asia & Pacific', - values: [ - { - country_name: 'China', - region: 'East Asia & Pacific', - sum__SP_POP_TOTL: 1344130000.0, - sum__SP_RUR_TOTL_ZS: 49.427, - sum__SP_DYN_LE00_IN: 75.042, - x: 49.427, - y: 75.042, - size: 1344130000.0, - shape: 'circle', - group: 'East Asia & Pacific', - }, - { - country_name: 'Indonesia', - region: 'East Asia & Pacific', - sum__SP_POP_TOTL: 244808254.0, - sum__SP_RUR_TOTL_ZS: 49.288, - sum__SP_DYN_LE00_IN: 70.3915609756, - x: 49.288, - y: 70.3915609756, - size: 244808254.0, - shape: 'circle', - group: 'East Asia & Pacific', - }, - { - country_name: 'Japan', - region: 'East Asia & Pacific', - sum__SP_POP_TOTL: 127817277.0, - sum__SP_RUR_TOTL_ZS: 8.752, - sum__SP_DYN_LE00_IN: 82.5912195122, - x: 8.752, - y: 82.5912195122, - size: 127817277.0, - shape: 'circle', - group: 'East Asia & Pacific', - }, - { - country_name: 'Philippines', - region: 'East Asia & Pacific', - sum__SP_POP_TOTL: 94501233.0, - sum__SP_RUR_TOTL_ZS: 54.983, - sum__SP_DYN_LE00_IN: 68.3914878049, - x: 54.983, - y: 68.3914878049, - size: 94501233.0, - shape: 'circle', - group: 'East Asia & Pacific', - }, - { - country_name: 'Vietnam', - region: 'East Asia & Pacific', - sum__SP_POP_TOTL: 87840000.0, - sum__SP_RUR_TOTL_ZS: 68.971, - sum__SP_DYN_LE00_IN: 75.457902439, - x: 68.971, - y: 75.457902439, - size: 87840000.0, - shape: 'circle', - group: 'East Asia & Pacific', - }, - { - country_name: 'Thailand', - region: 'East Asia & Pacific', - sum__SP_POP_TOTL: 66902958.0, - sum__SP_RUR_TOTL_ZS: 54.606, - sum__SP_DYN_LE00_IN: 74.008902439, - x: 54.606, - y: 74.008902439, - size: 66902958.0, - shape: 'circle', - group: 'East Asia & Pacific', - }, - { - country_name: 'Myanmar', - region: 'East Asia & Pacific', - sum__SP_POP_TOTL: 52125411.0, - sum__SP_RUR_TOTL_ZS: 68.065, - sum__SP_DYN_LE00_IN: 64.7612439024, - x: 68.065, - y: 64.7612439024, - size: 52125411.0, - shape: 'circle', - group: 'East Asia & Pacific', - }, - ], - }, - { - key: 'South Asia', - values: [ - { - country_name: 'India', - region: 'South Asia', - sum__SP_POP_TOTL: 1247446011.0, - sum__SP_RUR_TOTL_ZS: 68.724, - sum__SP_DYN_LE00_IN: 65.9584878049, - x: 68.724, - y: 65.9584878049, - size: 1247446011.0, - shape: 'circle', - group: 'South Asia', - }, - { - country_name: 'Pakistan', - region: 'South Asia', - sum__SP_POP_TOTL: 173669648.0, - sum__SP_RUR_TOTL_ZS: 62.993, - sum__SP_DYN_LE00_IN: 66.2838780488, - x: 62.993, - y: 66.2838780488, - size: 173669648.0, - shape: 'circle', - group: 'South Asia', - }, - { - country_name: 'Bangladesh', - region: 'South Asia', - sum__SP_POP_TOTL: 153405612.0, - sum__SP_RUR_TOTL_ZS: 68.775, - sum__SP_DYN_LE00_IN: 69.891804878, - x: 68.775, - y: 69.891804878, - size: 153405612.0, - shape: 'circle', - group: 'South Asia', - }, - ], - }, - { - key: 'North America', - values: [ - { - country_name: 'United States', - region: 'North America', - sum__SP_POP_TOTL: 311721632.0, - sum__SP_RUR_TOTL_ZS: 19.06, - sum__SP_DYN_LE00_IN: 78.6414634146, - x: 19.06, - y: 78.6414634146, - size: 311721632.0, - shape: 'circle', - group: 'North America', - }, - ], - }, - { - key: 'Latin America & Caribbean', - values: [ - { - country_name: 'Brazil', - region: 'Latin America & Caribbean', - sum__SP_POP_TOTL: 200517584.0, - sum__SP_RUR_TOTL_ZS: 15.377, - sum__SP_DYN_LE00_IN: 73.3473658537, - x: 15.377, - y: 73.3473658537, - size: 200517584.0, - shape: 'circle', - group: 'Latin America & Caribbean', - }, - { - country_name: 'Mexico', - region: 'Latin America & Caribbean', - sum__SP_POP_TOTL: 120365271.0, - sum__SP_RUR_TOTL_ZS: 21.882, - sum__SP_DYN_LE00_IN: 76.9141707317, - x: 21.882, - y: 76.9141707317, - size: 120365271.0, - shape: 'circle', - group: 'Latin America & Caribbean', - }, - ], - }, - { - key: 'Sub-Saharan Africa', - values: [ - { - country_name: 'Nigeria', - region: 'Sub-Saharan Africa', - sum__SP_POP_TOTL: 163770669.0, - sum__SP_RUR_TOTL_ZS: 55.638, - sum__SP_DYN_LE00_IN: 51.7102439024, - x: 55.638, - y: 51.7102439024, - size: 163770669.0, - shape: 'circle', - group: 'Sub-Saharan Africa', - }, - { - country_name: 'Ethiopia', - region: 'Sub-Saharan Africa', - sum__SP_POP_TOTL: 89858696.0, - sum__SP_RUR_TOTL_ZS: 82.265, - sum__SP_DYN_LE00_IN: 62.2528536585, - x: 82.265, - y: 62.2528536585, - size: 89858696.0, - shape: 'circle', - group: 'Sub-Saharan Africa', - }, - { - country_name: 'Congo, Dem. Rep.', - region: 'Sub-Saharan Africa', - sum__SP_POP_TOTL: 68087376.0, - sum__SP_RUR_TOTL_ZS: 59.558, - sum__SP_DYN_LE00_IN: 49.3007073171, - x: 59.558, - y: 49.3007073171, - size: 68087376.0, - shape: 'circle', - group: 'Sub-Saharan Africa', - }, - { - country_name: 'South Africa', - region: 'Sub-Saharan Africa', - sum__SP_POP_TOTL: 51553479.0, - sum__SP_RUR_TOTL_ZS: 37.254, - sum__SP_DYN_LE00_IN: 55.2956585366, - x: 37.254, - y: 55.2956585366, - size: 51553479.0, - shape: 'circle', - group: 'Sub-Saharan Africa', - }, - ], - }, - { - key: 'Europe & Central Asia', - values: [ - { - country_name: 'Russian Federation', - region: 'Europe & Central Asia', - sum__SP_POP_TOTL: 142960868.0, - sum__SP_RUR_TOTL_ZS: 26.268, - sum__SP_DYN_LE00_IN: 69.6585365854, - x: 26.268, - y: 69.6585365854, - size: 142960868.0, - shape: 'circle', - group: 'Europe & Central Asia', - }, - { - country_name: 'Germany', - region: 'Europe & Central Asia', - sum__SP_POP_TOTL: 81797673.0, - sum__SP_RUR_TOTL_ZS: 25.512, - sum__SP_DYN_LE00_IN: 80.7414634146, - x: 25.512, - y: 80.7414634146, - size: 81797673.0, - shape: 'circle', - group: 'Europe & Central Asia', - }, - { - country_name: 'Turkey', - region: 'Europe & Central Asia', - sum__SP_POP_TOTL: 73199372.0, - sum__SP_RUR_TOTL_ZS: 28.718, - sum__SP_DYN_LE00_IN: 74.5404878049, - x: 28.718, - y: 74.5404878049, - size: 73199372.0, - shape: 'circle', - group: 'Europe & Central Asia', - }, - { - country_name: 'France', - region: 'Europe & Central Asia', - sum__SP_POP_TOTL: 65342776.0, - sum__SP_RUR_TOTL_ZS: 21.416, - sum__SP_DYN_LE00_IN: 82.1146341463, - x: 21.416, - y: 82.1146341463, - size: 65342776.0, - shape: 'circle', - group: 'Europe & Central Asia', - }, - { - country_name: 'United Kingdom', - region: 'Europe & Central Asia', - sum__SP_POP_TOTL: 63258918.0, - sum__SP_RUR_TOTL_ZS: 18.43, - sum__SP_DYN_LE00_IN: 80.9512195122, - x: 18.43, - y: 80.9512195122, - size: 63258918.0, - shape: 'circle', - group: 'Europe & Central Asia', - }, - { - country_name: 'Italy', - region: 'Europe & Central Asia', - sum__SP_POP_TOTL: 59379449.0, - sum__SP_RUR_TOTL_ZS: 31.556, - sum__SP_DYN_LE00_IN: 82.187804878, - x: 31.556, - y: 82.187804878, - size: 59379449.0, - shape: 'circle', - group: 'Europe & Central Asia', - }, - ], - }, - { - key: 'Middle East & North Africa', - values: [ - { - country_name: 'Egypt, Arab Rep.', - region: 'Middle East & North Africa', - sum__SP_POP_TOTL: 83787634.0, - sum__SP_RUR_TOTL_ZS: 57.0, - sum__SP_DYN_LE00_IN: 70.6785609756, - x: 57.0, - y: 70.6785609756, - size: 83787634.0, - shape: 'circle', - group: 'Middle East & North Africa', - }, - { - country_name: 'Iran, Islamic Rep.', - region: 'Middle East & North Africa', - sum__SP_POP_TOTL: 75184322.0, - sum__SP_RUR_TOTL_ZS: 28.8, - sum__SP_DYN_LE00_IN: 73.4493170732, - x: 28.8, - y: 73.4493170732, - size: 75184322.0, - shape: 'circle', - group: 'Middle East & North Africa', - }, - ], - }, -]; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/index.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/index.ts deleted file mode 100644 index a6689705450..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { t } from '@apache-superset/core/translation'; -import { ChartMetadata, ChartPlugin } from '@superset-ui/core'; -import transformProps from '../transformProps'; -import example from './images/example.jpg'; -import exampleDark from './images/example-dark.jpg'; -import thumbnail from './images/thumbnail.png'; -import thumbnailDark from './images/thumbnail-dark.png'; -import controlPanel from './controlPanel'; - -const metadata = new ChartMetadata({ - category: t('KPI'), - credits: ['http://nvd3.org'], - description: t( - 'Showcases the progress of a single metric against a given target. The higher the fill, the closer the metric is to the target.', - ), - exampleGallery: [{ url: example, urlDark: exampleDark }], - name: t('Bullet Chart'), - tags: [t('Business'), t('Legacy'), t('Report'), t('nvd3')], - thumbnail, - thumbnailDark, - useLegacyApi: true, -}); - -export default class BulletChartPlugin extends ChartPlugin { - constructor() { - super({ - loadChart: () => import('../ReactNVD3'), - metadata, - transformProps, - controlPanel, - }); - } -} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/stories/NVD3Bullet.stories.tsx b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/stories/NVD3Bullet.stories.tsx deleted file mode 100644 index 5cdb4a40f5e..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Bullet/stories/NVD3Bullet.stories.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { SuperChart, VizType } from '@superset-ui/core'; -import { BulletChartPlugin } from '@superset-ui/legacy-preset-chart-nvd3'; -import { dummyDatasource, withResizableChartDemo } from '@storybook-shared'; -import data from './data'; - -new BulletChartPlugin().configure({ key: VizType.Bullet }).register(); - -export default { - title: 'Legacy Chart Plugins/legacy-preset-chart-nvd3/Bullet', - decorators: [withResizableChartDemo], - args: { - ranges: '0, 50, 75, 100', - rangeLabels: 'Low, Medium, High', - markers: '65', - markerLabels: 'Target', - }, - argTypes: { - ranges: { - control: 'text', - description: 'Comma-separated range values', - }, - rangeLabels: { - control: 'text', - description: 'Comma-separated range labels', - }, - markers: { - control: 'text', - description: 'Comma-separated marker values', - }, - markerLabels: { - control: 'text', - description: 'Comma-separated marker labels', - }, - }, -}; - -export const Basic = ({ - ranges, - rangeLabels, - markers, - markerLabels, - width, - height, -}: { - ranges: string; - rangeLabels: string; - markers: string; - markerLabels: string; - width: number; - height: number; -}) => ( - -); diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/controlPanel.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/controlPanel.ts deleted file mode 100644 index 5a8f8bfb1a1..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/controlPanel.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { t } from '@apache-superset/core/translation'; -import { - ControlPanelConfig, - getStandardizedControls, - sections, -} from '@superset-ui/chart-controls'; -import { - xAxisLabel, - yAxisLabel, - bottomMargin, - xTicksLayout, - xAxisFormat, - yLogScale, - yAxisBounds, - xAxisShowMinmax, - yAxisShowMinmax, - leftMargin, - timeSeriesSection, -} from '../NVD3Controls'; - -const config: ControlPanelConfig = { - controlPanelSections: [ - sections.legacyTimeseriesTime, - timeSeriesSection[0], - { - label: t('Chart Options'), - expanded: true, - controlSetRows: [['color_scheme']], - }, - { - label: t('X Axis'), - expanded: true, - controlSetRows: [ - [xAxisLabel, bottomMargin], - [xTicksLayout, xAxisFormat], - [xAxisShowMinmax, null], - ], - }, - { - label: t('Y Axis'), - expanded: true, - controlSetRows: [ - [yAxisLabel, leftMargin], - [yAxisShowMinmax, yLogScale], - ['y_axis_format', yAxisBounds], - ], - }, - timeSeriesSection[1], - sections.annotations, - ], - formDataOverrides: formData => ({ - ...formData, - groupby: getStandardizedControls().popAllColumns(), - metrics: getStandardizedControls().popAllMetrics(), - }), -}; - -export default config; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/example-dark.jpg b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/example-dark.jpg deleted file mode 100644 index 658db25a815d08f86c170980ecb1d50d3a4b03c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63894 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

>5!q$iB)X(GZhz+u@It^w8Je#+2-e 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 T?oDYS;GdM3yl9#57r*}nw=Z5! diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/thumbnail.png b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/thumbnail.png deleted file mode 100644 index df29a818d38eb1c16b0f63aa6a18cbe623ee6343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32162 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ȎnWO3{=cO~W8lPJJpcHuG3LH?TK=H~qOB#i+}Z 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 QveyAwNkxeoapR!>0n%oh#Q*>R diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/thumbnailLarge.png b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/thumbnailLarge.png deleted file mode 100644 index 86b38069a9b5c590449463a7ca580a0f78aaf0bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90272 zcmce7RZv|)v-KPxxVuAef_tz)0)*fa+=B%O5?liZh@ipU-6gnl2=4Bh;O;Kx=6m?7 z{+C<#KHaWewRi2>U9)>t&GhtIJ;AEVvRLTk=l}pLxp&g)03iK)L;|RY|8DO(7k>eO z2vij{WZ-c4!@~pI-+y;^_vYs2{QT_j;Baee>)-pQr>Fh>eMI;^g4d7BtINB)JGh>) zH$<)Fu=M!o7(QWndU^`a%7XXwAR!^?>gv9K|9-GDMQfa^#t#u;yn~F4EHP9$Y|Rk| z2M131YwKoh_}P!khjRo2OE{k}{NeWaZXcmKZ(?!+?*EmJj_z4@_0i+Q)zcHa=Gpwh z{O_Y`DJiMi0^5nRzNO2l_4Rf5)!ORQL;p!@ettgO>?0}s0KT$%ak}$#d*tNo+|$zo zzrH=%8r!BjDG+A{l$wHE2}GIWo1x*Xi`!V8~muLxk*e^bbO#tAAaiP zlamXhG=qnPx5HrE+}!YqNf-FJ?I+v$@f!HNe-`|jE;O!jZeeY{Eh{@aj^8CT zH1ugDHoUX%!=(87>Y$2>O2JkPJT5VRc)V&S^G#YlysZsx@8nq1+!jg!-)oACjeBzU zfo~M*F;fYP_YK(mnYMfw9fESmhr>93PEO5;a*Oz!K zHV(rjrL*L}wN-yJGBW(|;lpSS%zj3R$il&A!Laq{K(@Wpb$qNVtm1HKD8N$uT6*Y_z3bb7tEj#W`}rX*1#UAS?DjpfzVS(|10FoRne^k>+2N|g z(j}+((7<5U(tQx~G%M^R!Ir$nM(TCGuzqwEI-3`^y{ZJ{OF^smos(~|E(#Cbq_WEQFRZaY^u z_D%@Y%3B>p4CuZ(c(B}R=3|rlHzEJ841Vpj8TaS24o=B@!HL-&*Q)2Kw|0f^&3%T% zJq7&isy38_%jn+rH5^BC@4{Q#eyQQKUv|5CwBh;V#bt$%kkGM_1c$`Aa(}O~!OGmt za)goh?R?$&KoSo1QuFoN361hDyex?`!v~(HU;pHCRZm7W=$kT2{xT}KSu@^AilyLM z;C4z`Z)hpw;qFo@swAVW>d{Y2D(#wRFvWX*C--V@jt)-HM-UbGs3J%#Et!!gsw_lE+4`emU~H-Rg)v z)scQtnJ4>F@j!@hJmqji6(Rnz`U{UCMWfb5f^v4St!c|eBLUB1<+Ufqyt@O3tbN-> z^-Ty})50&elpXnxmI0Pmf*kN|9kY+c%Mn}x)?dS~_>N>IH~reGYahPhtR_BXNOgJ| zlWlFsPo0Z;lMPpla44lUw=PqV=WhGV3C?006=>a< zBhm_tMlakK63Ucz4?Oa`2bRLwI1Z1Ar>X}R?R(HvLz@?_wvJKX2=XNrm!6B2`&sM^ z>4e6&tlD}Q&0|@4No2{`Qq})rp9m>Aw19ruTdj z?3DX%8x9BO@Co|Tme;;x#GFMp7lml)@A;Qpcbt-4`%+#Os$guICKfzw%krPH_gz@# zuZ$^lbb+ygB%}*p;sSz13JhzgyG`^>%*Lf_P zhh9!PrIBK2wS>-uI?D1(X-Vg8xbT;R8LH?=EGZ(v(k30b&N?->WF#6)=JhDScSc{v ze}AByT%W^g!!P3PZABxRd=k)5Kup7KIB;tit}Qpk&L~1xP-?X?U6cIl;F0Nf(mL9Y z?wl+|4AZ}T;+CO+yVP__v8Pf~c=!jW{>4r1n6u|($P>|}<^a1nk-}sSP%W8!UY8Sc zqNYOP&h}|*=B%{ZG`YdDrf~3yfqbY~Tcex9%4wW8yOFI|BHhy-QPNrz&EAa}6o<){ zE*$gvy$m;L6)|Dg*{0z=d$nI)65WK)JyT|$18%14{jIBdPw(LSIcx8q;s$aRz3P$@ zYU4*GcJBj?WPGH1=c?Lew$dxnr zMcpW(r{Bi=*-9+ORTAV=`8i;zQ}D%=pMiZ;meOK+XfeAXkmB`<6K{?8=EDP_3E9Dx zw~Wnf>C#DBc_VCp2SQYa?DLgp5M~ZPb|J^R=f>iXj>{*wYMVETZ^dX*ZD0ENfuN-b zHistGrWfR{p8csmhY&Mo%zYI?5n;H8Qv$x~J0~<($=)et2{DjLM_V><6L5~GStT<} z-un9Oz!`59^w_S&gnx}b=fEMIN*P(w1(h@fOWZdh>lC1R8p|ig4pgA{uA+%(C)JNVc1?b$kCFb10NJpIYNT!75K;} zP)Q_z!|23wV7Ka1@BFiTa6<7ZK4TUX+KJy42#?{v-V@bS8qD*`W$NcpKQrKySRNBG zoK3-17^odqE0B~D&u#s=$nb#>tX>cI;-qY-rGkk5`j$G&iZ>$a{<=~NW?!oic;v>i z#o90!tS*Ad+$c?dcH-;CZEEUqC7|MfQOd6${4d;FPe=bDaIw8pw0HB+AhA}`WoEfp z7W3gP&TzVRmKZ4h`qMl8O-fcmft%&rbYA35y7~PdqZgNIPLEu^?9>5w=p2^JUsVX~ z-st*;^C*-h`M(uA8&BykNzP10DMLLx=r1 z-l)(UX7Q54PY*Rq>p$L@Do~kjQ822{&+?19a*=^vc;B^&?bcWEY&Byo7skxt4^}6q z=+?`67H0GIlgZH>zPeU(>{43`4%k_qW>2`aH4Ta{DI&wp zRNN7u*CY595jNq^GrsK#9+rn$Rlk@X%3k3~p-P8XJl{;FY7AVJFuzZ<(2y6Dpl7)LtyVrFvm?QiM!j<@! ziAJ}`A5pHi&i5KzyB*OKh_C(QOcX2Py7Ln76FXXKTw|vu8~AIjm*nHap4o8Mq|pTw zZ=o$^mF0Z3*@=+EOv;|%R3r~tmLZW6I%K*ZF~)uOf%s9h=~y`W!TCVDoou3e($u5< z?V0#>>gZ!SjUJ1+Nf7`Z<-ZN7Al#OmGsg#YM^X)L(r!k`p8=GsO}-KtCj4V(0vAXU zpg|&Uh?a)P05C!ReX3{gwoUugeuW*iH#Fl8)_&_HR%it1bRevv2F)@Lu(R3#saNBS z^Uo@rSy0D{Nd~dVU2+#<@t&zLM819nV4_JWeJH2!GcI?4`@1b1Yc8Xy9szLc?4#CU zf=p$yz7IsN=EG4WvHcmF^6d1Tje{z`$6GVWO{`-qCkRp< zGR&9{Y(!Jdr(WK6;QWQ(q7>?JP+#4n)tUp4-)+xb8r&E*3_+44@nPSxkJjP&q48yf z`^)5X!SJ1M{M{NUSZJ9&{vlQfK+D7ZJUNhz^IDUyZVAXcKJSsyq}Dzf!~4|$!-pN6 z-#Y+MssqWQ->+m{umKpH(K@Y$tWndx54yt!XSL=wjEVBkz#Y5MaHUrO*vYmTDBIpJ zzVs+~ol+&uq_OKUB#$q21wa8~P8-&vAE69X{24H<=fT`2+bGr}jLWkEP|F3A*)HXM zArdgIj32p)PFsxYIn?^%j%u(%nkaSxO^x8KbtY?)j*zSv>Xs!Mh#+sZFZla3mYKFd=EZrt&B6W(_}WCx3%47n$WJ(y(*;T z%>X%wB7tsd9bKS8vFEg;DIt}x;U;3x$MZ}QL2GJ-qRf?qRu2M}@Bwe`cf!;cD9}&q zt1oJpg>SWqY4}-qU6enSC2lL=05GyUS{eMnOa#`dIf~Yt#H#QBix|o?AmZkDUgO0F z`P^6m6iez@5tv#E0xGc2&I*gyUB*<&W-k3l>Hg**M51sA*EW;yCV)Pq^v4X}I(x)Q zm){HiJiQpaa2YXITmWR9Yyb(0Zx$nYBpDD@*~OHFI`4V7Y)lE(5UE@}MZTl_ysf!H0_4wtW$F8x zcWz(|J3821MAk1GIdU;KSRv&k-N26RvQno3nOw;+Lf`ro~GaP0c;Q3n! z8qoxSnl3J*dmtj1xY>bs_1K@lv6*{R#Kqs6!y^RP3rME5lf~9+b7FMhUR0|E7|f=# zu~5N|2Wv;$4>v}T8-b$^J+_C8aerlRp0e2wM}<@_AV~6^TbdQnttx`T9$$3a0SYjM zNi1JR+PtK!aV1wmookv*W@3Yb&FLjFC`o-cH40ff@spbCU1=h?q1h_yq14Qs(ouIO zHD_BuE_;5*g!Rvn%?@JJvStZ^{zOA-ZbO=swUmi&<`XzGOqBt<9iufuL@6<)o@A@GL!pnWKO&g3lvc zs-Cbxto7QZve3ke*bc%2bqq!Fr@LZ1oR2Gv2p{TDfb|f5W!&_E$p-n=$v z!Dmugb3|bAtze4V&;Sc++}e_W%D>;_t4QVx6cdA z!sIbCg)PcCULK~LNHON6cNPi-v!ro~;o=Gd^B-i@jEIx>EhKjVvdqo%d%hHF1XP3T zy1vlnbJb9#Ci*S(CNiIdLiTqgy3caps zenBKT)+cp)3}qG&fU>%q%=RBzl$(>1xiTztLOq}HEjM1?4vuS}s(*@^k+Z$~MoZNB z-gpTGrocdhgr40;Fr``##=gD#obgzI1ba=fW@LY^&>>D!N1>cX4^SH$E5DWj#mTmV zb88`?97JFK&P@jZGA7a$#hP6Oz{MA|lj@cnbOiykw<#oZ$9lr?Yg@0tJL8~!hB_3X z8VuT^CuIuS7x9V2kM3VgxflWrx2Lxxi_Gg#iA_XZ^=jl7i*SeC_&!d~El z=5y4_6*={3ev?#JwCbB3cG&p9k=)%>7>VJ*!FOtG6j)SF^ZUq(%3908{Z8kvL3hE9 zcMSJd^*ASj=ujDhw{ZkqdU(F#0fV&KUtzj1Dl3e7kIA~qHr6bFHtjDP^0R&+H)j7Q zH94RwJ4sp8 z=8*S}ucye>KeiQs<%lkx7fin7fW@9AIF(Tz4efH?-4T>OpRI*Iu7tGlVLbf)B>R-< zyR^CCC6i!(qUkyy0$udFN?_>6fu9)R!5zMo@TOOdo<5@8{t5i+3Z?mSb^`yvOxONo zuZwbX7?H90wzIOIv-~NhdH>Ct#IcdP%EeRA{j5jCd-%j-6}Z_8&Dd6`s&BitT81>7 zvp1{OKr%+mjJ*G}AEX^SOui%U6`xY(&(z7j`8+`q&mMy0WcXtC?~v&!y(LfCAri`O z`$CV`fUOvjm09f>TBww@9XI&07uY7I}|E_7PSafw@AHVi6zw3_)Wd5=0 z#di(ASs$A`7i|vP))8&^=8R!xrcJGOzDiMU>m%qli!zf@W~kmK*u_mFiPmVR)02^Z ziDdEdW6bm14#~o{svX?i?Ek^;;IqFdK8~ihx_!Wr517sPa(A&i|E;xTajJW^!g%%7 zFBC@qlzRK+CgEC=xPS-8+?-CX?YW|)r1#qqUxqu-MxN(^+KE4xXaCZ{=;)|~ucP~o z#pBb{?fL2U=<1h+662ZWr_14ujot_cBWw!D`}%UDSI%2Qo5v1VG?2BvUF+OQ<_H{5 z)0^EtkByCu_bMu1T9=@!oCb}&ZWez!gzxl+KFq_HZ_!G>+%r8*q$cTBXuROyu*dgI zxc*K2)6N+-^=WoBy#BKB7F*j!&MX=$!SS3TEktQ+b~~w~f1CX{^v73Y<+@8I!9pL0 zSrswGW#O@zX;R1;b@RQr+r>pke13$>5Z$jD*FtkrejVh6d5gSNrx6LUsfi`UQla=d zkw(li!!n+B?wOgqk!Jc+eW+Vt6N+fo!w1uccLYH|=p8$^p&O-UoVL)xu15YGZ^rzd zNh7sG3(fHkm4Enid2BUF(@vzlw?B>!F40CC7U((&FS$}*AW_}R+QSxtC4FmQhjovu zqGRK&*bwtHitI;vSJccPLcr%X~~gEaxS!zcWU%L_4c$G zRy*s5EhDfL5du-G_3HDkhhP+Lp4U!@Klh@tS+wMo9Qf4&#*h~wpyk9Vp@C?CQqz~p3GiJ zHZX!r{G)XDXVl#Xeg^}L?;w@?O()qFa1KLyY8bk`jc@SAwmH!#jei()eSxnf9&nC) z>}7c+l!BS zFMRWPv&(?n$4O1gOqiyzJK&fg{a<|Fb>)!K7q`dmwwy=+_R;|YI7Wu_3-m3dFCzu~ z)n!l!9%M%Jt~~Y59elz`M=}H^hmxH#WOC32WM=9qb$Wl9y^>RV4iwPV@|GCQlXohfq5km$hBx6biQ511M=``lpO%NLM z<((j{L`6Ady0MdE-PdZ8seQYe7Y%a4IR6~nUu;1n%f6tA;ckRM>5H<(QjC&HcJChJk` z*xKVAe!+X@Pkz|c!4TRa686p*t(Qz3vp#I}bXp;sEmaIeJmBSD2*ZSp$yW>M=F~*N zKqb?|)Qo*(SQgpbDd=N-aI*L+x1SZIeICXd&oBC(hZ{gyhiwW|V!tNWEq&LUJ6faM zAI~ENHBQf6#F^6oquRBa3MVg`9EWbY##*87wM53l93nJ05d}uL5fy9w`uk`wW@*mz zA$gg9wcc;EjvFg(a4`qJ5k-Jn5|b?3Awpd$b0{LQPKKi1b4;!FVcrtS@@;GqB8u1W zS|35ya96V$bO)5T4z)n#=fpn@yyVXccB;FG;vGv|dt!enL~9FV;gVr~yc7`5Xjs62 zI+y}fsf`@|$dZ^iG2#aDnrX(Vw(=SzF}zwcc>}6Uq6n4VZ8&q9og^lpsi*0(i|_ej zmi-;0OGMIS3=JfOALdd2w-Im*ZR{*fX zkt~!K(}M}xJX7n^T?rYJGW-cKiQW*-TLzNH_yEg9s(1dD_Lws}8qda-SD8Y6Cv=)6 z#O2q_zwIPnSJOWKlgp*6nPa)!j_rUSGfD$4Zs9MJ} zM-A&yfL;PzEh^g+1H6Qm5QwB!RQ^Veqju*&Z`-puO7J;{5t>E&!!i%{D_^f{iW~_% zN0$5vKpEycG=Xm)0xfDXukQ2^N)cgb=2!L@z_XUp;?rEHqjMDfER^f7pW_|xNv=QS za}5cwLWBLu^cF;rR922@mZg@gX~zN;C?J3CK^4{Mn>m~shG~m@-AN7myTCYCnO}mx z7bea6K90T$>9bruE^6YVwWi8wd_4xpx43EViU+KWuK|o$E}cO7c&7f}vKdMU0{8Sr znbtz*>VYf2)v254D2YrELB$kfswFXmmO+lL`af%g7dWvt1C;`C3=p-ArVd^KOh9(L zZ>}kW=cqM?r?QU$h7PGgi%dedw}y{~9GO?H%VdLRH_Q1&bsUL9#spd0r82p!etAsLz z^<0~W5IKW>6H7P6FJ9gtV+wXv!nm4^9aAYp<di{;BSI*Qys;}@3w#CcEqOyJ_S=b$^WXncE*wG|MnB>0U!8>?X z^xYOfq$g>o$v%C;Y9zE^p7>iR=kurwBoV7UG&ZWoII$$InfrXCbC4<A3}22J_G8P($O1go$w_ix-d~hv71SEgm9~rXL4%6l#JchC2Q7Bwg51va6mI zaaJlff?|JRMR0Y82kw{@!Sx4^KF$z%>V$#%KOEn6&Oys6kVMe2BU6o8L?~YOV4r41*wlCYuA)HM*KC^a<_}&f^gRE` znM9q=L#K@|JB*o#)s6tQfU)#t6shA6v%N5#3wfXUFZgPhIPbf$-%7NK1H z3)VzrmSSzUAmSFKskDCH%q$I!-gzCQ&vcXsVrcmO4BudTxX}C{S6p%a?4Q}in@zTv zsihh%V$_vk@$OS1E#p5GqU-IEU`sf+aH)4l11wdD3XYB{_PTLZ>V&_MV0-HGY;3w+ zyXxee-#_Vlkga{W=^G0Dnc6F^5tXdfL`VE@-nJs0ghY*&p!IJj;-O|zAY532u(f`9 zBP~zPscY%~*9-8y+A)txr-@V&*eW@;)Era?qM3Ay&;}u5a8$nEAa#o(^iOJHh?}la zH&xdxnpVd*M~CH3L~D0kj^`Fnvuk(%E(|>P+986;(FL-wY0f8`G-PY24SFWzAyo<^ zymTy304O*sB2s6XRZZphjP4WHYdQQcG`&{?oUE;~CRvK>n z-6}A^G@{*2ulR!(V_m4lVcGDeYeZ7~GwUgNsa;~z$BqRZ_D`Nql_A7gv(WbE6cI?1 z>UKMo2<6p0yUju4pU3A(H^~27nNYAyL+kjLu<{V7UM>hdd-=wfTwkM1=AG`E!ICxS z5%Da5ypjkmD==}F#p*p`{MjEz*I;?xWJ5+>H^wcg;KVYl0rj=m4E+|&L{}CL(_n(Y*EXu0V2IcIOd6JvkQ6My$~4-h5TeE34950m1oi( z^eY?hy-|>w+vS1Xdfzv@X%UVe=BXwPu1X=)7b*EzUA3-|)85+(H;1$mlf57Qc8B(E*Ol8n)FyBlKRq1~>xj7cSzB8xMF0Gw z3QZA`@Ns@{Qx^C7SI4>@xne8N;oYntsIpyg<5FyiTLCgKeAq%Fu?+)3g441Hlo&lJ(!Wo(U(H; ztq)x58Q)~ktuqUl+p8BE>k}~y`{^g3^!eKBBf+|p^@$W=)tP+V5z}2&JK@uM8WOx| z#BGpKvXd-Fw`*S_hU;*D?e^-Z4yP>(`_@~Z>JD;x;MXj2^C#!1fXr31h|JaT9G`E| z=;&~*_frSyDREX4kD;LqT}1VT8b{irQ-0u&jt<0UwMst)&FYBsAAcO5NzXHM|KYOA z5$+!MJJ9I~Pw{_KIj$Zker-9qo>WS->npU5HFkQc5J+8mU$L5Yv}R3;hvkz z6*S6?v2y_jL+`ON{heF*#f5e+q9``29)~PxXYi$no=qtOG^o(t%Qid45Z-$u>gXw@ zSXjK^lIxogk-zv!KrN5+RYL^4se;DurO+#cm#3ZOzAcjLOu)t4LBdyT@j3KglGDb} zpSvkc#y1|hK#UDiQ!YkMeyNoRLg<)41wK_AxLW$xgk_BUv&duPtAK0|60Em*B}ni! zSXH`SALkwSph8$PJ!n9KKI&({k01V`&vBavcCx(O%tECt5~KiV%a(pE z;nkPCv`;%ssqR=m6uMtCeI5N{lX&`}!1Z_ibA+1%L3C8wBROfsui@lP;fPM07-v4I zAJEJDQELrGIFl*N0z%=~c(9=__z-@g>>2Gc*e{qp^GhI?~j73GG7x+bF2LHH03ok~d#4K~pJu?f4v{D1QR>;p-1G z9mJTeiQhzfHsw3IB@sLb&)~bqmceNu2iZ`7z9A_%%-IwZl;AUr?2H+b2v{e$7b~0Ap zT$N#8-dVni2?@p2RcYqdCOJ6Nf;lSw0qYw%&hICQYH3tSI~D);FJu%!0Lo!>RjED^ zfjtiwqf>G;Co`p|nu$7Eo;YLCX;5iZ7@M-c`naBYyZ0*`0$8|Eu-SsNPV1p2Hw5N* zI4(_eT@Znmsh9ryly}f-)24(o?>(lr`koSs@(r~#xbK9(E(}#SD;aVyKiVTerZ(i5 zwph!)ZYZ5audn6LeST%_Tb$PGjQa+3i`6kaX0)Dry3&*&+=TZlHQ*%61mzPo@@bRs zejUW*8A3Yvs}N}UZX*6|_Eg;0EJA`p3WW{_GMUKwagmogc)u)=P>>y&MKZ%e$6p%` zwQmT^t?qx?Zf(12_I1}Zk~Ae?XVl%ATUm?J>j{$5cBznQHvaVc4{&Je1R$RBP z^jTpI!N(*Ud%Lx^9#Y_>{) zDM3ljx36rU#VwCugI2oSxB9u930ZM>3S|Q8MP+82eA*-BR*{O+F~H;e;}38%VN8ZV zOD=peh6UCb=4Mo5Ino=nUcAQ8J#UneZ7HJ#>QN>9#SA<*Guigj?PH973~;W;$}33C zdCRPF7db{?x5#DHPt%)`AUzD~-`)K6MWIAyp7_Wj-^O2cLzHWeGk|1rrpkfMZl~pT z`nNoYwCJ?!>^!&5&H__SKjCKeMvQFp-5DBi*}wiN+oGcFWIA>yK1!7aLvud10{$`_ z0xG3^$D4ku7(g~m=F7>ndCtDbQd9nmADJ?Ba)?mI3u!O61 z?LC<99^DiMK#SLO!N zhr!KE6_&u3b6u(ne4Bgy^z>A%ziNwd z?|hF0MZmWrdymo=8>Zo9ZJ;WO3?umjOg2A!6j2YV!uMdR_+~k^pLhPrBF=-m(K;T# z%|`qdP&+vMLq^AYyM}|gM=^vQN2xQ4jGsq<*;Q>N3$fsxo=);##~(Azvf#!X2MCsj z%6e#)etq8|YKHg)xGD{Q#sS0}g1*m3pMgdiP*uTx5`IOSd})3YQfK*ID?pMT!2Y7F zhlc33+(D5g6TUTWi6B6~1=bm#NP$dxZ?#-O2jq!5mwAB=gRLl^N``p~96;;zJ-OXN z6pW>WbaHB`sg^S`+PK#Zp>uOMsYyBz(ca7O1JnC&zYw8OcJ`^zhD^jG-tpHw5i&X{ zK&|DJ?+-3-|JS9V%Rx@Fb0ZK`PCmr=;?}Le4e9FJ$D19;noxrzbOU+ahOan7%s_0# z*OLKGvo0fMgI7ZTx_F%m1W^rZX9sC~6!=Yi2%z6|_gP@VprIFO><;ghsO79O#wtff z*XK{Mp+(hMN`#pZV1;5YKx@y0@>rRWdcSgQMzCgVg%u*$_ZuIpAG&>MZV+?nN&ayL z8&rovGF$vgAuU>nPy^9FZZb9mlEkOE2ZR~H2vZ>qgc$@f8+FQLT_LaMyH^G#nPC68kOvbKVDWpg9_*|gD9uPiaDh)S zhL9ClW8&T&>s^5ET15tTTL2RpYRKAcI1cPUlp;>mK$#zDf&z36Ol7QXyh%CH@kD^F zA1=xQ4~i$jL3PWUXAn_5H};c1Z8Ur?ie+ds+e~h+Ao`zB^(6=fZoy429$4vE@DzXh zrjn`2v}^BowM&>QNSIhgr2YQB_l+Z0)6_sT(VDGH*Sdy4iTManczNPJY`OQTDlXz&U!G+>v|qnP z1iXrMXpIoS0we$6T;PWRD)v6uP9zC^tJQ5pRhET3`D`HhD3b%+yzLWY;1Vq3i6Gqa z44hU2Hn&p%8AHrT-A&5L4UEKVy5QnR@O5Q@)3h|YBV4UJkGHrUA#43n0T};I-CeCt2Z*e@3iz&5%aP`>#eC{*0a&(BMhuoH#z{y-TW>;mBzD zgOe2^f0CpCknGW_6I}Z;de~74H8();Fd_x358M6^@W(O{9NG#g1}!XTIv-BUx5%BD zL<;r_raKNW#B=Or|C6~nc0@of4aE$MwfUk#6NagPE$3fxKwOpby-mXb5=s1?3l-yI z--Iby9wR9wGX$1SgOE9bR1AUU!Q7Q$jRc)Aiy9QkeiS2-uSN6#`LD={>7N?)q;J-` z7o3DWA89DTzt0!`iRt(`mC$uqXVGLAD^V?Rw>pszPaH9 zuZ(Armr(nKOup|ovWJ+KMVT-b%m1{?zBZ5V<3TQYpeu3mf&lDw=Og70u=+q4iJVrIIMCxW(kwBRoWLgaNL!$LS@GqV7H@5Gh8k>P@+W4Z7z(I$kGRnF{pE4V^;Wcg&(G4&{B-wW4fra7Gq}|-0csJ6g$nLdbA(Ce*fo( zBI3+1iyGAGY~D=5cx5&5xTNo&gg(8kQ2fnrph+2&O@Yq2%lgprABR@zf^eM02E3aV ztccE~fp^*_goGp{Z4(G{Z{GLTa1K&5Hq11+?z#E6&7xYNJI@cp6201g#UVA;^fX%$x}=hCZI%Mj>*3+`J#hJB4`uvr((O#kWGX zEwNK3ukAfLcEc{iE3Jl@MbV=fnj_<;Q9e7{m>HLtx}wW;lGvIU!3^JM&y|erTOUvA zj4rPYl7|?)3ZXOHX1Nxb^i9#Zuxyk{H0|&DPw?7HBJUNA*bX+4MK)&RWnb|poP39} zPN)R@yxpzt`4LXpFqDfr!okhhfrnlE;ln4!wLe^LyuZayH9ygv+^e|luEf4_P(t#3 zv~H)T)Vr~yl=y6S^MmH6p-;t+_Fw<#Kf0&&>4ZTQpi zX4(o4Q@Y}bT0*7gtv|5!%&#p*_<0vRM`G98deA5NWV7O*1YIQs(FHRoXUCYU>r!oA@Op+PUcuFO1Y3eeO0V zmYcZ>dL0+Zs|sFzS(~fujfxvENhO1{NHs2g3co&z@JMZbDs@!~ijTIOExT)b2akJR zKs<7A-QenZ`-Z>jO;~8sVj_=`SUZ2+&_s@715EaLMFnY?$L^O$JYmwfe$}t^Jpb~& zMpXUx_1W+Gl+Ei@sQ7!x|27l#^^8aT-=c`Cuj4C{F01m12&4?3*i-hK+ZKl&o``9< zJhqJZwEEuNHu>G(UF{s{gchh0e?>CryJfS)>f;%(aIPx5mune{340#ng;lal=g@!C zZUa|@tOUN6$lZ^(m}gZIsIM*Z-hQi<^f-ZmW+N}io0MsvP{YA$Q8kLptaX^-h{l;m z5&qqVU65RE-qmMurgpc$tVApgnaEY3@*x?0SNWMXiNYURR@L;WdF{4f1ZWEpWz#=h z_|r#m2;Av-leVysnd-%jo|}`p4sEMQJVPk*L9Sy)_U*p z$hbfHtuld5ZLMd}Si%H-N~|h<0mE(clHHv@rII&_Ugh~h^x{IU6~j-moKOthbKVOA zzCq-5owj_@V3t4Rp`OeH_{6fV1^;;C^KbdoM>$<7F8NB}-!YbjXObBh`lAOK1@)bIf4$YI;NIUX&S_d<=ON&jy3k`9V+0-xOu)>~VwOEmKFCf7JrqJ$%)zvu zHH#1_fAV#->S;R3*{oU1(19t(wUxM+0-ubXrgjm2(xwT)#jklTm|11VeGnbJ#ZNpa zpZu;V+v3dT*S10E_2M&=4M%N2g|>N*^~tNb|>q!y=+sFls=)e63i9K10>;4Z1vE+AM#Pxiw?jkBfAN zzZT7p5gh)-RtJo4FI5{3m_s*FgRA595Y|W$oNZqWKC-FO^AwQjHDt2t3{#V_3yC0^ z%n^WY$JEq(ei`1}p92ip^9F*4s zQY=>$Oj5ImHT`%IR=9NAI*VJ;xFWpF1Y^ zh~ks6pa>FzGNXzjJ)-CmtuWNwa$?W+B*oEjF#?bfo~v2GtEv)a%K)TVi1vi1v2aI@ zBj&;lMq=44Dn^`XZ8WJYeOavr*sqN2pQ@FRXg|KO?_@{wjzdQ0XN{Zxtdi`7>SX&P zXe~7UFQ*dkJ|>C01NK<=sWLdVa)?gcgI@ZoT*@TeT`Yc;J8>@vr z%HQdu6a-aaLRC}gYYR*302#Y^xF+T>sy6~~W!9dkc9=$7L;4w{UYgm1w#s6oSB{C0 z>0NZ^s>B-q8ki8##_zZGOj=Sy37~}6p{96yi;)e<@dK*1%5Sl8O*#?GXz|l zSWU)+Ew6K+Sc~5MJ~+K{ZFr9mD)-~E0u=$+%c2cjGN^$_!*s-kIuVq}0xXZud!ONF zXs(Nbp!f#`msAG&*ydWskfotU`}keyV-#N$LnsD&gG z=u)F~_l?(6B{kOs0U=tKeA>*cXZR#atZ!=ygu$Dz5F;}j=USu&(tkvo_Ml@T5fTL2 zK@)HAZ~WJj7DTj}-U1%v7KuIhPC2}PCiL;3D2G>m*jf-W1Kz68?rPT)mbISB|BlO^$JTqY4CJ#ZBZ7cNO?S5*wzsK#&72_*Eq;re)2-6Uf3pyYWlb5w)^hbamyx1Q_aKT*4 z`EaZzXr?dPK{ueHMYQ%iaCSEESKQo^L;12X3%c5ek}oN`novHBW#4fJd-LV!dA(bL zA*DL;Qc;Y`+r{UJc8{G>U;Br^TiI@a8PCqO_!ZYU^=knW2E-==cY{ir zysRmbJHZlCaVWNYYXW_PxH>zA4U1#5qC(kT}8PKNlu zI(ku&{DxhwY)GCYayDK=Q$-52+WePDw94VR?R`G}4aq{GFHVWD!T|0@nsmsmG@mRV z?k+{mgT&Q{Wq~6TMrYhlDUH}ZgmJSuoq^pE}WndA3| zYB`MACUpnRTcD-11-E^#s90|fAGMg23_5(kg?H#TlfL`LaCsxFS)l9)mO^J2H{P@` zGGAVGsM5vU%`+1N%F@8Aj>UdeN)Mi=nO2YbeF)Sj)El9Z;71q5W5lJ~ZIk|e*ZQj3 zDc0-zu|qvVmBE(cm2?6gC8|B-g2EH;3`XhyV%%| z&jQWs1`+H82V?Bb)@TM@y`p~a&nwfD4x@Lp2On%fq!JGJcU%Pc z=m16O-9=AhN-a@lqy5n9?Kpb1CeiKgV-Hb+<3b#02Qw0IO|s-x8W8|>5a<%bq~s-- zv%kB3ELnSYE)3Kc*0swY1DW+6ze^67o*%sb4$=W>{K$a;B0vU+9xD6cD1nPP1t1-L8Hkcp7mpVs{RZmC9(A`}305+O@x0$OVPJKHff))pv$^+F1ebj`-W zC%c`A!XdeiQdnbp06TUNOr3E@NK>Q2q$hi0ZT@@Ni9pdY|2v8!?M<9s$!M|S$3VkN z?gHUj58q2rEEiO8_5V}2u~+5vRtTvTULNAiOu=n-_Zdu-n(bl>g&}R$ugSQb+8YI! z31HS~6(#W36lSW|yAOVQ`pRTOu~A@Jl^XL-(dYZL*HM@50O;5yRxE9(}L)FiX& ze}p{B1M(O-;M~^izj#fW|J{kp|E|D{!?_H_?dLiIa2S6W$ro`cd&MJsno~oOfo5(J zC*C3UvGISH%=Pz$e!Jnn#nAf5rqT`T)t68A0D;VFu@+A4yilQ96d z=mzFt|I+FLP-RyOJ|$DLQX2~aa9`BwyS*SLc@*JcfzO#dq@SNm$zpJFYwkZAl_zih zFP0HLjd}S!=SnCx1uK> z#|WVsA=wTGc&27hbrVH?d;xpPwN(SbL6A922Th`_(`{X|~EV1LKXFiRd!HuzkUE|)1yIAdYLVkJ? z-eEcfB<%VW^Yz=he{U7-}*yVe-3SnZ+; zZO==Um_<+}&sFn@mFKQfMrcT^6Lf)4wYXE7kjbKYN$2nXO8+Onv0VI2P@(&)H|K%Xx;_e5jkpmYmTY>=e>?XUG*ar?B&V#VcsVdtu@?B+bzSL|x#H~qz@9Bam(>+f~5&|_%)*jpY9 z1QQGVn8EOk&w6Vi5jDRDjb8a08f32YNC&x2Mp-ZBc*s1~f7QO5%*d(1P`nFF8tqCm zDVVjq5Tvxb+<6$7Zm4gYt#jnbJiFSP?>=Pyf{NfO<6T2WQ+`%bL>PKI#d7(GiizRY zie9R$c#_&bzFppN=^kI-`oxpDBI_N=f92;`2Xs}V$IOQRbz+Bw(|AP^ST4WTs6C`` z3scxzN{}6|snpARRm`tl>zDr2X`8>5MTINsTzg9SZj?>knNIeBfe+Auppy>ALlMkv zk`Thc`RptHB$xM!)9-?nz6pB#`Upx5g(`Uo{x1N7xmz=y@8yns_dTwhypL0Aw zZo;o5?q{N4XOP%egCW;$_m$Rcn~gQaUq+_?j32HKY?(-oR>!j^UvvJx55mI-?5DVX(PptZM55ZTD#QOpDQj@nb&ii{#0G4eQj-d{vxkzO|%pgsrYzL z)n2pIoF9eCsQyyQD3rdF>tkKin4kTaW5~jbOLI3`wz6TQY{AJyUHX0JDSk;q2W{Pg z6V_TNo<16HI(#lPB7d1pEz6tn(){#V;wk!9DfhZW7yWgf1G!bL`f@xBlndN4Bi0H7 zL@Y9)JFn>YGMeo04rBlF?Q-;zA1Uma{=41{-HZt7^uu1>M{nWKnq%U6FjG!8td+u4 zp}-8yD)QL>o4umFvR}9;?rZ{+PhU@&>$BzQ6Z3vL`X&BXL=8gna+LJO@r2Rw5Jl9Jn)L zis>CGB$~lwOMDos(%Z9XJmO;Za=(`Il3vmFoWyzL>4pAs}AKPcnr8_wb#VIbv3;K#!(2SOVJ9dwG7dAuEtRsrjP!5Yp2lOt&{Z zIx8ixjQC_LEL|eVF$L3NbOar+jgwO9P44lqerpsU8<2huXcoM9zif|;8nhD}lkx^K112_YR?S0~WMoXi2<)_c(( z25cw*8(qEYA#%=o6K#;6mRinH|NKUm*n|*DAzkTQ75}?y8s}h@Z*uc#8 z$O6nP(yg=5`ZA?QKX^REV_XmX_X;a`2dhz(V202CVrQ>v-mO7}T-yv5e=eMX3NCxU zPPNZD-8NBc!cc(ZfpgD3>9u<@zONs+)v&8c#e46M-+9MW7LEJ*Cnc(E*K75?)c3nh zbD9~LNxk~k+2-6Ka<%XC@GGNu^*hI6rax9O)3{m{cX+syA&meo33i*~edGwktrNhD z5YKJuOBx+zL#XR46LfsgCvJ$+q%ia3u9ho(5;Gis5Nk&pu_PCGtXJ8VX5uK?*IP%T zsOk-*5_-JddXhSq%g{Z#$OFTHT z=vy8}+B@HNHU!Qc+JPOp7(PH7B$?N@EI5r09aVg4_`fGDs*At;Z^3|%IgJdF9hIyP zoHN=1eY%eS4c$U-Qt^~FM5xW4_2mnu;b-P{Y}kwueZBkc`y-q9SkTA+@OFMoKcFAa z#Y`KUH2nBZFkwcY%^sl{O%fwmJynpVB5^`{)h@hIYyFv7+q7LmXvcPs0 zD_MjTaIbDNnI;Qd`5grr2+{qJBn`xJxx(4e-Yy(5x`&5A8)&ii#ZNd&qy_V)*7Qj` z7lNDk1BOjrf1a)F^gFy4xP9XfY+5hNn`V_lNOJexzu5&bRL!^~>@?WbJ+ga@+sq!f zGO?t;ff?MT$5@iYPYO<&|2_Px!G8IWGly%QLvncO;;DYW<&@g?-!C4oKOg==3WB!1 z#?$*hfZNYz##ZV5&YNQlqSl{wR94 zG0zN7jP??yCQ_1|;V<`y&o%r`NnE*;DHrc$Dxz8$6M4>WSk9~HD<6Xg8*r{Pbz*m} zqLg>?P#e5}Ft6o9Q{k17jlUXZhjNU@4oaL|+-H60hfk@)+1@$3xj!N=6=9@FVi`x= z=+eP#mUN|nFTPXomv`#h6DxNM5Lq_3%;b^5LK&=V*(!<6YsUM2^OxM@uB zH}b$QZI8F~+3~ZV=ap98$4(`?4$NkrTPxRgkllXD745&n_OIQEc`YSkZP$wEs`2=+ zRP#p8z{No8H&q+m*L?l`S6*g3IXbm*?+xFj%!;*%(a%#1ejHf>Q(vDVnx5b0$GL2f^d=_MBGdML##)L3?@Xs_#0VMO1;Yd zeiq*Y#)YH8TAa!%t9nXX-1=YxcgM@f)JEpQ(N4hyw2Q?;@=Mk zyRJT-Ndz{?%2DW?hxRvVo*V|JiciqNi0S`+GpWv(GJ~pV>~)%lL+j$mnK;lra&dDi zbyw9J!InEjUn*`|c+=DAF%C2)^WtVW`f;C$C2bvM0_bUeB?V9UxhFr104)|eG*y$| z4o3B7Y)>$Om4E@&8&Q0~r%xp7F_1pqr}lvT*41*yW&qFfS!j-sXxw)9@-C7m%v}HL zPg~ij6{0*_Nefhl0U`3H`zkqK9cW{QN1goco%yRrZ8nT>UUkhjBcN%k!&Ik$Vx^ia z3bsO$%fC%`I*d>PTxB7maF2{X%~_FEA+0W`tx^h(Sy)`%WVRnho=u@r1hnq@Lxd{D z7#CpL7@Nv~foQGmREH+t54EfPD$;mT{q?ji8S1nOBV<*ZcsiRIlmzpMd)#@c4f)x@ zH4I3OyOC9eiD0U0t3l*Pg_%uvgT8sud+xUd7yfIjJAOHnfJP+~BxQN2vkQK9)Py{4 z{}_nBZ(dFuGW1pI7}yHzL_h=I#HW+n6(X~3|d7HJL9Dv;FJjN)kF`WQXL=iGd= z7drFloIcG^ma3W5_8OwJ&_8#0$7b4zRV6o_gP-k zV#N)Fv@_U?R7y=lWUOd2{TL^3Uw=--PN$@$3(z8zok+qCOMkdqpiGSefI96W<*kFH zf&w)wkmm;@%7_iXmi0k7 zso3H5bx&NxMmlG)lM0VK)LxGRK|xePRsO%8D@6ji!0r=8XVVfbz^D46gAxHHE6Y<` z$iR7(b#=J=K7*#Pwnzjc8(ljOJh1rR|2pro6lD>j&l`lw!&Z3lLGd&W4QZxD^J8@A zFw0^`7bjeAHl*6*K};TlXGyZi0FyHdY^`(){3P;B;n4-VJ%vcdBRrNmgeZUHR#$v|l1Q z*L(lOMGh>KuQ-Y*=}-I|8Xr;!Z1$3yP{)>^ZVCPR#RSj)5iv=Ug2zsWe+_#R*iJmv zS+@MAMp=CS1UWO;mCeA_<3!nXSA9u;=T#=+H@(9rpp8WCQlqigvZwS{tFc%1=P!mf zPe)s}l}rkAD~xGJ9xOYW;9Ycv@0H&Ol;chm77|FM^!mk7g4C`eg-Mz5y&E4KW_={e zn(xH#^!sXH^P;x#E^BIdSmSZ$pwe^+5N*Fk?iEDqaKERi8KETqRDMgKbFq7&6<1R) zpVxAcbE|rC;DzrGj8qo3>KbF!zB)dC0xRSdHF09D4fBlKGv}Sqd1wDby6668t^4d= z9ekN(W1n1>g~IY*eo~?QK6v8glAO@KDsxtyXt#~{tBKXquCA^@N>x``J*sriOig|7 zdFyqeZh8;fK%06}ptK??F|o~_BRuTR#F@**ILgSrU)r(FRzXhgis$al=&7iz+f4_Y z{`$E?H9&VV<^7tlCC$;pReE5=j?xO zW|BF-7sDg&=sN4{eo{f(LJZPkS%urn=mfIeC89S{Q+XK6}QT? z1GIOLMsnuFC#+*$hEGoX96?Ita?94PlZkgz{dVW~(dW4BjqiDYaL$U( zH0`Rz+yDmVMpzrS4_;)U0jY@^p*qN1MJ0534f!#hBSF;|~)(&A1qr z)b=n%cs9j`q*Ej7O$UY*7ma%E(#jyez)8(3=T?5WuDDo{7PXyos=T%4TNJL~(Gy#e zV%72T_-Qxl1YSpZyy%Pe-$|A$IFfhp1^3*2(7~B~eT_QX$tg#790Ky| z2U4(7z7@<^2>~ip2&(du6ZOHajN>L5sfm{lj&!u3xeHHmTKdjK4eT=nG*rF>jl!Xh z&`h;rRUGMXfripNFm5{j0S1`-%$9F^TG4)V@lyJH!!xP-Dm%z2NUfMGRnxv4V< zJYpiE9no2TZL6zt4&_u|k}0Y*5EhNdc@0-v-72*|+4 z?lh`oBd%fX(adrrNxWCfni@0rtw=%Wa50J!DjF#Z$3M$0|+g zny|}X0dmhQ7fo>K4CwCOZPg-h`r3FBRq4|iND`&GV1OgdS06U##MmRw!`PumteV)8 z-YG3}Z7QKl3?$`PKlC0RjS}?uy-pn{aSG&j9;JUK4<`f5-8LUM&`CzeNrCE5T7L2k zY2$OQ#tL=NQWH0JSpN9JXU7_(HOX-RrXb0}@Hll;o&4qDtpa?KdX*+M<%sYCrSgXe zbFA2<+p)&VP`_$uLJcyd2+1&auszbwAfF%SVfp+Q9eQGW5*<}JogpyWW8nIpUm+Ps z+3}C&1W6ZupC?f{`UwtxQv_3Gg9|o1H}r51Q${LE1ygjaBR!AuakD^2{3%vyWY<@N z@}l=92lH<8smV>;N1~q_S-EGV70VW^X@|kX zqfgixuWD4K3bnr07X_(V6&)&CzvxLeE+MC0l_`~V zHZJQgU+{Etk#{xl(@KZ5mM@G{$B--lUGCCJdwlOtZjq9ltW4w^3$PYrfMhid5h*ID zj`*>jPP(fn4IkpSbw+r^o`ks%EEq!Q8L;wox~nKA-NsGMu-NimpB=`Y<&9Ahk3|L^ zvq?_xeXae9ui;^`SQj*X5wFG=M|tq5xn_oKPK4Ijfv33pbO;j;oLj6|saBu-1&(nb zpKmb3l|}Y+rATn|BE(WnDUp64a!Z{%yW4LeZLKR2Vi2?N`U6Vqh;6{pkCEb!{iUI; z;*R~L>KRGxXW!-SJC>sc)890*DC?db6H{+;TYt9<3`WhS3eR1Y##82Gin%@5-MUx} zPH;1ULOu;I&Nuzhm+3}toYcz5HJA8N(DzkCFo5_ad|z4N_A+~pJ5L`Ylp+Z)Tzir` z+B)E)#vUUHF)y5{f^+T2yOUzb2lE{U!OFo-Pqduv-h{5$t&H8bj>d{TX<3^w4%p#i zmnIn!@d1u6>ZoI?u!aS}pP8Vsxzh6{@= z4SV;OSe_}{D4(i)k#(of^vs&gi?zi+u9gqYY*u|@le^s;F4r06{u{p>vT$-^ZGCM; zq(tehU!QTL4IA_ooefAX6fJYTK>vZO$;C*!%Vm4$#e=}}`TMG|OV&)^H9nyr*>Wc} z0|g!7zKG;f|7Y`sv=m6G&bO33Aw27+Xh7|)YB?J$|EcRrzgi-0^=4VYC@;Z(ab#4o zoMpZ?n;!lt@A^<+y{dmr`T|pfOW_@kYZ|Tbyc`OJ$XPwcw)j5g%lgsWLp`nO2Ojd` zRDT}VI4XcoVnkHg5HA&m*BASuwW1n3WLI4MTLYacmckOE-IEt1ED?~3dYtr_YEhP{_I%xQ<#+jNv+~b)cYFMo-e$5AeU2T- z&u&}k(a`YI*&g^vv8jO$2pa^(>{MO{SRigE2pV-UI8@7`w|y3%x9`g(>)_n>%WJ*z+&bDxd>hyixZ>e(KSENSAUj zc!}HTs0k*Q%1yD&c+AmC!|7qYD}>8`oFPhdFAkc8zR}h0e*Q77AnnL7ppLVT@6jB0 z78G-reR_gRy5z_sktD-duP)J$dHamTl35mK-}!@ioY==bvgiJDQ*L|B`8uEC@24JA z8%9O=8J=mB?`dV7O@9&Y_~4BoWSu&4lbSc|rXzWlD-^vjaMX=Auz&0M<&Xc_c#SS& z%ZMC{A3Mfk1^X|gTlv&ca{-b%LaO7d%CWwz=cQ42J1X$nvIJH|i@{ou#4AxAA!B)O z++be?A1%i2Rz@>(_ma-Nvr77Q0Ik&ts(R_)(z|0nS$nHpEq`O|{`Z`(JJ!MfAi%=$GJa2L6+O0_J;M2 zNi7P~A%N?@`@Xql@<1>{_q{awZoN7qvIA6E|b!eaw<$h`8oy zD5k4jiLicK_+nwklo?Hk7N;3==BF2{_OQU*_)l}v){~8Pw}7bR z`p<$#QqpB+BWR&zS3#Iq=p->aE}Ectm|(-*U$Ke3kXucmFIF@-+#h0vCxN`2pp^v4QtjbHK0wrSVuF6~z&N`eXO!V$Z8Ce%(q zPUfew+TX|n7VPxu8Ml4+W~{(zzVR*w71!cHK7MhL$}-tG^h0JR;Kg*m#S2AT9%U!7hLfU(n7V-GBzXR69mIUB(dPhFg#H-)6B zn>*sG1dFdQqqTnK^``KnKheQ!rtQsJ@SoPL*Y7F1&9i zAf)XzXBiJI$JpUmmqM>bhhL|%z8iErQ`HVAKnLBYg^%K4yXhS{;m}itmsb?zE%5JE zG){}7)b~`t?TFna#%Lrb&de6osh#1a+*DzBtZ?Hhdx>CT7>$-VaJqze) z1ej5UMCUc9at@z|2(eCcxE&>%IGe|lP!{VraSz0P?*X@azKVJ#h8kN5; z>4ntJ15}7uL9&&EE4E2bM^#&P5y)GBn10xr^V=}XaTQC&p79QGFgFIp`#P|I02^WaHqsJu<3A;KJ0T-*M(~HV zbfsRiTb~{SNlx2js!Il;4le~5m05RDR?NSg*+X%pBkzQ{BP{CDaWwUK3`t%|4|`Yz zE;97|STy3O{m9@XM@Qn*QFlIgiJz0^D)z%&dik7F{4GW2(VnH$BrgIfyddecN*q04 z*a*WT5Fb{!(dpRlfA7<-q-IDGq1Tr-=me@)!$X5V;%RG+6u(Zz<^4szV$;S;2aYg! z0;c^F2uYgoIczUo_vw<~O#zf5Jh0(CyxHYu3xctuFgz3j5bgL8sjNyq?B4}Ec;Y?y zm}EQLc4L2HCC-xe*JRd;(Wm>mAjXHVHIShl{Z}2H$YBdyNtiDN#-B`x>1e{AT=VA3 zO{v>+43VTKTX|kiZK3^-hXRtxeBaXpzZ65I4~pb$Lx`{FJe@*1mItVuN8#XEM(Ah@ zn+)HQ|Em}Kesf_Z=FXul1;pN+jDYF9F3f$OYUN^!(Egq*;l5mYJqne$0dN}UaSM5& zSBWzxn?Pz9U*fgNpyRs)ll&@82bHxlpT!9`a-!HKbVSdu`+dVKU#WfBhZ(O&WiM-s zp3=Tpl_Y3m(qb6=lbI5Y>18DQuGD{%Z#Um+Ok7=WUDg)UWs+Yn4>wy1nLasV&k0Fq zaUQ(-)p4uFjkNbZ0Q>jlHJe-X+~if$ce#e^6<1w$S-ycuCWtrxb)j;GjtZY8#8fOt zzs4;aT^4>Ju2Wk`&36B!q+)&hz6$zytK@g;&f2? zoBsR*>8adDNJ^*hLz{A`=uXE#H>&2097P+yx{5|t1 zM#t4uR+Rkg5+mgeP##KryJBo;#7xyyet*W!znULfcE4IJ&6VFT+g3L7=+ye-f#DWF z+cLc)H#l*u{)Tnwht67Z-kt9on0;P7-2ja5hYtX0am*;9r=`eI5{FszeRs2eoy$CH zuFeyG3j>#b9dj=Cx#IowSVrNOnwMvOJXrazb`p{%T)*vK{juR@+fySgeci7@%$&i6 zeZa7C7oOPAMMt&)6KT@QfmhdtLN8%sLUZe;O2p;8oiIK#2EZ5-fUdv3ryv%Z{ z{zd6&D{f(FZy1S z;mcMRQnXa5R?dIwQK8vyK|0D%lls3ap69m7$wq|VbwGafSXOxy)HwG&9jAw@>x1vH zZ_q3r3Me(n*uB6)*G460U@sf&#DN;!dDP8omYIf7Wy1*fBU#Z;0)FvT3f@2Zb~J*R zuq@H#!VY2Uvs!(J)qzwUer+Q=a@uyMmJJp;{GYIY9o}cl12wM!7q0k@g%P87vsKR< z_mYa>FuMROUR0@X)?-HF=5)n@H1>I2!CI}dp!k}{_jDk&-48Owl~<1P91?7~l*i5) zr`E5%vs>ZaAn&suQv1eK-;K`B&bBHdyH$r+BI*iGk+oB;jOY)u`6%?(_?@jzWLZr( zet2Uo|64f#2#+%`dKjjAvp1nyo*ci$c2a9LEx-M^;od;9Y{xU!N-W*TQ^kjXg zLa|I)q7nUKn`rODgj{=|`^{@XN&JZBZ0qAQrmO#uV9M&SuE_w^wN3HxJ7Ei@spPg32<(x9g&JeNMejF}0-m!z z^B+IA$o>7Lo?{lJ3oFcC>!(F{ounO|kv=av@=wkkkm*k4NYKCGB%>o=#C5m#J^O9uzlY)(#m3L? zpWT{KYH%ugt8!{uXt2YeOX*QxGNauYSDiA(Z)(m5d;JgFylh{*GcR_9W5?cT?pqUT zRV&(~-`rbXjWGmnyfeNwADWn+;4%F!aOvYIj>_fsz!#5k#MKKp9^>VpuB`D-l!^); z&1*46*{?}kCr?;w5YWttlVsB&;a=lp-~7XeSnKC}f*oR!wjP0FW-xz6iXSYHxr&!f z>5sL4^sm^Y*+jZ0uC4n2%u8CadGWJ!WyL1QsE8gAWmtJ386t5*vqAc&)bmokZyz`~ zI{T*)|Kj_WqgD`MPfv&6AI6htkL~pvp5z5}ruRT$9!Sli!|ML{hV1v>6H)`;f$TmLZgb$UVh*{=zd2aH%S4b;)&3Q88rv?rAG+iK^l#tqjZNl zYq}Vn`;s|&{z~CCqN!*2VXxb)j;P|i#zo_<#EIEd>;RQ`;I$Z5x+YpUEln8z)IN;3gsw$Q4c@f z%D({>* zU#LX0pv?1+=uqTYxpm&Lp%nL^uXlVc)eds%#~W<;-`n#~z3C4-H|5!&-vlrC?E0v; zO*7^IB&DX88zIF9UplbeMo?Z71KmtryzN~y=1)(zFbh0l^l?Al^y|I$)u0O{!y)KT zye`v1hR1d##qC<0_X?ba-n(55?+!%nnIcc4&*D?J!Tbb8nU4HD#UX{-_*-9M5cM% zlS{`>t4;yBm-JJLgk7>GcWPW`La0PNaOiT~vXKfRKvufd?U|XG+>`n0{9qAB1!>Qd z4?(TA!R0|d$B!H!XyRF>*l{xZF`=BfkZRUK?nOv#pQsF?Z;rDDao?qm_!Iz{EiTVd zCSorA-SW`OoYsp9;^8(aJ&oObRsN6J@Kqf*mbzoZm`m`j-%@(qd;NM!1LeQi(wpR) z;jD**^BKTIHm3N*V)Gi;F-8hzeo4}BH?MV?|F~pCy?xj{egz(ZzGY`-aa`rUzr5;8 zM|ZDlnV-k^+yC6g-AK_U-UMgu6dGtcIwawjsI=}7GFG}>JX#Mzb zVq~rJsQC_Dq`v#sq~~n<)ASp$*87fWLq_~NCG2Z!{&y01A5d}A#;$gJ3OFsPDShBi z(Dc_)(Sq}Tl-_=7yo%O|q=|%lSiGOVBxopNv`>W4R;og*s0Fb{u=*N-lOwMj5wgfN zee7V3IRxU8Zqe}+e+<80T~*0zCY`Wdw%L=J0ZLAC?jAQ*>wOpSH;zRTA(4%PIH8me zDcGx?QKhN02BcGn$q61=xEm<^jXT@omPOBHO-AC^BIK9L*0tjUGLWPx zhK=w2LXJc*&4IE4!J?J<`ju^Gxu1PC?YC0a4_?Lv3!guD?%v4>%lP}g>wBICeaySo z=EH~8=yDl|9HgXZFh9fmA43Qth>&02mZ2#W*#n3m|KVoOgVU-IkCgz!f4F*@$g%Uf z+1IUCH_i|44d8XLc6;JIGwXdXD|Fwaz@;$$4o{Bp&-BTSF1zm~n!pj2HoaynHe{yx*lqi!(7|z&ZGuXjc>e zeVF~Ykdh$tT_C-F@s;F3&W@!UD`C_3XBueVF4{y7CKu)RLthOWQ#Do6b3pv;eO{;9 zB7gGFmAuu=U96Ntck}+FwT3Z+g7=jVQe%5aC5ntZGc|869W)zo0+8A@x-H(d_wAin zP82f%3L8KOdb6#AJM~EDJ43l!vHjc^fHTRbIWL&>-i@)XExWQ8E!aDynVW!M#|yAI zI8#~HqT#-u{n);+1#)aF6+PFwFEWlY59Mzi#}18VA%&GGtnim`1a-gqA?K~rf_|Ty z040Rn;>Ox90S@^Wt|Oq&FuZED(R`=o8O=So?F5Heg0_Od4%~x4^Blwd$?<7lJO$w9 z)Lg6~ovc4So#EPrC9VL$F0PSvAo(jK7?{J&&_81cYJaPYrVaFvWRGg`2;0?^brtEw z`6xXKD;e#cb!bMp_nD z^m)tn6v)^C*yp@YEIe#XlA)w&HCSmdW3yw;8a>4ue8l^BNE1!_Npn4-OjPiF~k-rBfv#F&U#r}79 z9H1GP2oQ3|Hm2|NaKzm3T*_(INMXG*wBGsZ$>f%aguyoTjPOClXRl5{jChxc@Yruo zV?k_xzl-N3dREG=hN=T008S^zWNY5ve9O)xzV;$7RLn_F62VE|uCJ~aZaDsnt&0}` zD}y_Pw;v#qv71LmsU-&0x1R{kiP2(uE)MCygE8cc{cUPo2I#?q0d@(xjn7!I^N(|Gy=T8Gk_E{!P`n~A z?66hxYnLF+@4Y|<9u~6>Un%Y4`nJRI`=E*PqRmZR=b;|cKe2}YPKn;W)gGAP$J4_F z1rmavGOmR-8AKbWttC!ap4!AHOH{M=$ zIMT8A;D_U;RvLjQkEwkKhdFifSneu%-P zaX>NonZ=hQhuFcK_4INtHviP2_T@l%mH!?+8UkD>2vgb<@J5?zshIAjI;vRJ*J zT-LMW!9L2bA}5kzz{IWL=kwt4^H^qr5nuq#PE#upvZ9j+rSEzknK#*jP^K&X`3-yf$J62HlUx)1|gy3EeS_$iUzIN39tc6ijQgr;|Gu zUf%M2owD{?GsB)Ex8G1Tdu_QP2_4+rFxl#FtXxS^-wi+hJU#;DWu+EC z52^6+?S|^e>oG02yi12?StcG|<<>_i>(YPCJl~z_!2d4RmECGJ_4Vi#j%~m{QpIwD zjbZi>DV_&?$d{~S^;G^-BT%sQO=ilV#hbumWj9P4-Yg$q8P+lJKdPZFZL|9aSMAd8 z@Q-^az7tNsICbe&>xR#lt{c}3{wj$Aac9KgIo~7SKAtg?0X&?*81mr_+w-Y({d#0Y zhx-&AEMW`7hIuNC2ZMaa%e|74P06ydoZ+30_ZfAcCVyjku&&~r{1n!a5x!O%Pj?~DH)AL47O!^wj@T@EuuOg*=KUmy+ABSBBy zPEQYHOCyjA;{kQgUyCB_<+dRC8*gljB$)`*%bC9aF>8StO(m`*IJ|p?Oo4d<# zsf+8|QvSN7KG8!pc!a!zAu0r|rr(pg?mK2Yp?n5LSUc-Sxh zlXZ@uSX&qf@CI9$JB+4s{nm2-_O@+{h36HMx5m(jpg2y#}+=EI-phl5JkVR=z2m@OPhWRhNOp z^L#A5KFGp`4o!PUa_G~#OVz=gWNaEk4XL!Ie6wIz8+*QCFeSB*(qIZ{Qm3n?ceua9tAv%uBa zkMWu3RN@;Qzi~37`tb3Jp8KY5+(#(4I=Qr1;)0jn-L!r4OtCF1E$Ecqw!O*Uacy`^ zJlF_$*0FDr-qTB<#3Jx^%#=TZ8-L*;W7iqPMEchCok`yOic~3K+iXQ2?3e0~-S-$V z?fMf@`relBsbD(k*6%zPtfJedF$ou|NOi8Dp=ip-~JGN=I7TA|Ng`yO>uBlu)$nkO~ zi?plx%*DITPNHG!#V(7np=%NBzr-nH+oxXrP!vUE4A|_q0cY*@4UbgGTocXjcNtH+ zH&%mqk{`WC9CV`o84-Mtk&~J6T9^hlDtX82xD5gDUlimcoBHs#@c%Lq0la2 z_QP|}$2o2`#XfY9YOQ_K{jd4*o~J(>F8>Y4bKo0LbQY5cx~kRdll}+WKL|Okb0nF3 z`IJ?N|K}x*-Pn5kiY{M2*8o2TV{sz{v|;sd_Ye{u@pxxt(My^G5g~*S#a5k~x>ts;B=-5q0#Jv(c3Z)j9U#?XAjN&R!k>E(<6oQ|zcUDSJkimBpU zUJC)m;I48JE`%3`93JZ&z_I>5PvsBW19<bFNLZgn#j`d!;Kf zx%=XP8YZp&jNiEWm;MFHb6rP85ywTs zXY9yC0U}LitE*wALp4t_nf!T9qDL1GBLmkQj^rHatlX1j5<;n3D6e6i9AVj&C0$x-7s?~sy`6X5L+-~OJ!17ehviV1Ay z?l*jSAJJSAQcNX(_Dk)@Fr8VKL=$eb6+LYAb9kLUd(3#yuk&e3%Wt{*o{Apdt4<;% zZYyyrc%UR*4y*8;ts-QT2H2ld>fc}0W4hsX^|q$;A7_ijEG)%sV9Zv>8{hvwn!Yk1 zs_y&x&QL>lNH<7GcMaVL(%mf~AdL)-gmg)R64H$zFoJ|MNJ}Z*-Sr=z-}`=I(L!CpO2t;ghcl^XnacIgb7JGn?=P?X%z zd};5qa@1lz`qI#HZ?3TOu#S3)|MI=ND^~Gl7!AEOLek~vx-mOeeN=(yIef+M(dkX$ z$SNbAy)*X9&(e4HE8kx5zVs}FJ4*7Vb=7t$fg!=D=(TwOpa&x|sGytB;}r^{KNyJ& z2#ER@yvCanMDIM;&Xmv$A8=iyQYorw+`dL@ns2$Bmf{Ar_4Wl#F1bR0eS)=DY@|c7 zjc^-LH@wB0$9(NNybW|2gF5n6o_Q}`TFGTo41jKg#p;GVK*82j*kVO>>tQWm7JMt}+9cfge7;lHH-b&kRnx)Nefe!{9`%ncq6+I15hXz8#t7FzIgr@7UR za_10=Q4!u-&wOUsUc{8HJx*7L38$J!a%}E z)Y$WUa+*Whr-jbN4+$gGHG+91)cpSJ!xHrB}Gnvf7O_K?ra zmUMXF>Y~1zFao_~@{bzRGpwOy&hJ^mb>uO;%8B~SUVlLi5HL$qmM;s4Dp5|McaaIm z6YKZsJPW2ljoLz2>9)Rm@h)&|tFvqC=HX_OEB_sN7_0#Oe#@SPx&K4v-?8rDiAFdR3C+elX`{dW@hrNP&O=5S@f9bM}&S@Z&G z>R$zg0&4|XY%9S}0U0_=wzu?H8J(377M`7|-iK9Bx86|2`A6pDajM#;N~G0D0NB-} z1mt>g*oC<@-L-H|X6UNc-=yjqf)RTCnuUcBL#){oVzN zpEoUM9?N`pZt?p@DV}EN#U0DX-afw!ydIcm*?;g1(AgT^P_5zG-k8s4ehe5A?&sm; z`b)WsgWKaf)nQr{DP<$RU``|MdptJ0<;xSMo0CGcF+y}KPppj!3)8)G#%0O`7z9~O z-U@x`WzpFeGcdlWpwaJOX9H9w7AgC+%PEw#LPVj#oGoqR^ZLa{m#q z-Mp@`ez#WZoB1xILSospb5P^$;b#m-X1NjvzcIh3tJ+L;Ie)xee^FqBL@V)3`>}rpIo-}b0BJk_Z*0lVQ{W>e+dMg}m3Wnu z3OPX+p^5pvL3{s!9VK47ZWj2_`;~U<7v<5+r_HY{^BPb=t?$0rt4)STbGCQr{2&~C zeNCyB1KQ{Z-BOTagv!(E)e7_bk|5Fu7J>PX(WbghKjN!W$pJV;_*EmvOVV7`nRG4w zHx7QIABli)#~^m#+w?4pE;>(DZ32cdYTz>fU}S_|`X!&PpwNbsgLaAj2pF!T_5i*? z-XQM<)Jt5Q4$Nq(X_gn%Rpi|Gn<2UGt~m=nUbBT&p%ZRxpo37V=7;PrxJUwkM_F>3 z3Ps{kkQeX~wWF}tffpzkfg2X$fG{v6sgFA08cSWToB$|#fXB~Ny=XA>=l3a*p@um` zQp(qb2+(>rZCCM*;`5b@h-HIINRN3P3McTf`uFRocWfpK>MVlaX`(7#cTH8afPTJt zVNh0tLTy*I#vjA@X=`f`<%|VU`@!el{Os)!^;?&8@96^MT47a$-u6L}&W^WA&t6ZC zmFuY*K@?n178kLNV^}xt<7}M zhtUJWwsXf$z9BY%RtI7AyopvfnHR+%nRziXss^`^Ah%5 zb{(5k;x5h0#-Ul$qU;n)kwV-C^?-Q*&NCVz&>9TFJrn0q(QVESu9u0I%`Njb(V3H8azfqXB7Ya-KB(h;5TAahwtnqOFm-ph5bxh9a3qv8ndUy1OVDen*gD${V* zWCD97%zp?kQ~>}2!abc&Nd8=WEg95lDkmWa#e`d}*S;Y+K%tIOfG#rlrj2xI&as05 z>C%9#<7?qHg{BB!9ZmEfRux(k-`)E-z>dU-Hiyk%jW5x$|K8~exXTGEP~>~loGp%* ze4DGBfO)V0H%RLAR_8;!NU1A!rLJ3sFYbxKu-e^>eGObn)?Y?*W-u_+N*y1O;e=WhN119h!Qm&OlHqqA@KM!L;tLk668jD_qVq*cJ$B|kiwro-; zv~noi-}YZBBjk?$`h01hkAM)<@_zCIJ=92*xJD&fA6Qf z^zebOAyQ7>(8-U%hOB_)rwuL8Qsk}cKOh{T$Qhlz#$Vwx#^+kE*o00C1`_$altd~C ztt^fYwPu;hTP!1jPKT47Z7kk{fSnd=wk4n*UCznLguHHZ;?ZP?tgmzgGYZuF%v5u%NGEIy zA>*1vfUtO3_<=<-mE&`k0@u7eEeoU@q@wRGN1hi$x53TbkK4aZaza%RKtC-XlzQ2E z)Zf+rnImbTn6425Q>z4Gz(AgK-+mV3_Z1oTJH*BS%jDK5 znvl-|t;ald6W#Ul#WERZzzI-+oB?SE)IAeAaSLm4LeZxkNRXTRSC=@-Y&ahk;b ze5Et^D^xLH$F>(uknt9&sG#88{JqC=mX(yB-Ol3P;xRxA`T8ue0}RCpnH04!KFx*x zd&wj#EZ9LFsPTQy+#t6B0G?j7JQ8H%>J;``CbefDozGhX$MxsS6ZAN9x9Vk}jz}=* zyO27Fbc19@2G8ERoYha?HN*Z3V$J|V@N)A(HL9D&91^lX{=-$UknO>YMB$Ps{RjoO z>=?Ub-HWa_WDn@=il%8EVR9|q)oPLf4s~8;u3oP003-a>#+FHsW z0@7Mv`X&qs%8is59IOG*etrul`rn?Qga&}|S6`xF0=R3Pez+P>G>?};Czs#tttjqx z;{ymlWxdcEdc|7hVO%BHqvWjJdEoXPp9GzM)}Q3*3(zm-ObsUnM{`QmqUgmR&R-5-o-y{*Gf!&X%+PoN03q^ zrZ(xfafm>+W}yf1Vhd)(U2V`#chK>};jg@>{H$TMzL&f>P{&hftwCe#V}?!MFN&_f>7cm=DXvbu8WAv+#7KE4wU**n8uBAZv6{ zbDRuqnmGt!Kvq&cyfT_EOn;NK8H)+DTGEc9-ZvLIyGsBhmkWHz=fc&M@MoO)KMRt zH`OB!Eqz%~On?K`9U%t!r%em0t)|H@AxRSZ#)4yLlIU+e!R5Q>VyyPX6YHAOmKMld zBi#L#vP8!oMQ?xmwv?!UrA{m=A$*TxgB9-v#&qxaxe`vZos|`D0fG2&F#`kYAG;i* zk-XAaB5Hjqp2PmlxiAH=D+e-@WJsF|T$VH_*BMk!W{jc#aQ|5??$C)MRewJ$-8d}+ zEg|dN@}tP&z-|$ o*9`^m{k>%D0d3yz$5* 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 import('../ReactNVD3'), - metadata, - transformProps, - controlPanel, - }); - } -} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/NVD3Compare.stories.tsx b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/NVD3Compare.stories.tsx deleted file mode 100644 index 86686c90a6a..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/NVD3Compare.stories.tsx +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { SuperChart, VizType } from '@superset-ui/core'; -import { CompareChartPlugin } from '@superset-ui/legacy-preset-chart-nvd3'; -import { dummyDatasource, withResizableChartDemo } from '@storybook-shared'; -import data from './data'; - -new CompareChartPlugin().configure({ key: VizType.Compare }).register(); - -export default { - title: 'Legacy Chart Plugins/legacy-preset-chart-nvd3/Compare', - decorators: [withResizableChartDemo], - args: { - colorScheme: 'd3Category10', - contribution: false, - yLogScale: false, - }, - argTypes: { - colorScheme: { - control: 'select', - options: [ - 'supersetColors', - 'd3Category10', - 'bnbColors', - 'googleCategory20c', - ], - }, - contribution: { - control: 'boolean', - description: 'Compute contribution to total', - }, - yLogScale: { control: 'boolean' }, - }, -}; - -export const Basic = ({ - colorScheme, - contribution, - yLogScale, - width, - height, -}: { - colorScheme: string; - contribution: boolean; - yLogScale: boolean; - width: number; - height: number; -}) => ( - -); - -/* eslint-disable no-magic-numbers */ -const timeFormatData = [ - { - key: ['Africa and Middle East'], - values: [ - { x: 1606348800000, y: 3985 }, - { x: 1606435200000, y: 5882 }, - { x: 1606521600000, y: 7983 }, - { x: 1606608000000, y: 16462 }, - { x: 1606694400000, y: 5542 }, - { x: 1606780800000, y: 2825 }, - ], - }, - { - key: ['Asia'], - values: [ - { x: 1606348800000, y: 34837 }, - { x: 1606435200000, y: 40718 }, - { x: 1606521600000, y: 58507 }, - { x: 1606608000000, y: 110120 }, - { x: 1606694400000, y: 43443 }, - { x: 1606780800000, y: 33538 }, - ], - }, - { - key: ['Australia'], - values: [ - { x: 1606348800000, y: 12975 }, - { x: 1606435200000, y: 18471 }, - { x: 1606521600000, y: 17880 }, - { x: 1606608000000, y: 52204 }, - { x: 1606694400000, y: 26690 }, - { x: 1606780800000, y: 16423 }, - ], - }, - { - key: ['Europe'], - values: [ - { x: 1606348800000, y: 127029 }, - { x: 1606435200000, y: 177637 }, - { x: 1606521600000, y: 172653 }, - { x: 1606608000000, y: 203654 }, - { x: 1606694400000, y: 79200 }, - { x: 1606780800000, y: 45238 }, - ], - }, - { - key: ['LatAm'], - values: [ - { x: 1606348800000, y: 22513 }, - { x: 1606435200000, y: 24594 }, - { x: 1606521600000, y: 32578 }, - { x: 1606608000000, y: 34733 }, - { x: 1606694400000, y: 71696 }, - { x: 1606780800000, y: 166611 }, - ], - }, - { - key: ['North America'], - values: [ - { x: 1606348800000, y: 104596 }, - { x: 1606435200000, y: 109850 }, - { x: 1606521600000, y: 136873 }, - { x: 1606608000000, y: 133243 }, - { x: 1606694400000, y: 327739 }, - { x: 1606780800000, y: 162711 }, - ], - }, -]; - -export const timeFormat = () => ( - -); diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/data.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/data.ts deleted file mode 100644 index 5d43d8e4bec..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/stories/data.ts +++ /dev/null @@ -1,927 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* eslint-disable sort-keys, no-magic-numbers */ -export default [ - { - key: ['Christopher'], - values: [ - { - x: -157766400000.0, - y: 24703, - }, - { - x: -126230400000.0, - y: 27861, - }, - { - x: -94694400000.0, - y: 29436, - }, - { - x: -63158400000.0, - y: 31463, - }, - { - x: -31536000000.0, - y: 35718, - }, - { - x: 0.0, - y: 41758, - }, - { - x: 31536000000.0, - y: 48172, - }, - { - x: 63072000000.0, - y: 52092, - }, - { - x: 94694400000.0, - y: 48217, - }, - { - x: 126230400000.0, - y: 48476, - }, - { - x: 157766400000.0, - y: 46438, - }, - { - x: 189302400000.0, - y: 45086, - }, - { - x: 220924800000.0, - y: 46610, - }, - { - x: 252460800000.0, - y: 47107, - }, - { - x: 283996800000.0, - y: 50514, - }, - { - x: 315532800000.0, - y: 48969, - }, - { - x: 347155200000.0, - y: 50108, - }, - { - x: 378691200000.0, - y: 59055, - }, - { - x: 410227200000.0, - y: 59188, - }, - { - x: 441763200000.0, - y: 59859, - }, - { - x: 473385600000.0, - y: 59516, - }, - { - x: 504921600000.0, - y: 56633, - }, - { - x: 536457600000.0, - y: 54466, - }, - { - x: 567993600000.0, - y: 52996, - }, - { - x: 599616000000.0, - y: 53205, - }, - { - x: 631152000000.0, - y: 52322, - }, - { - x: 662688000000.0, - y: 47109, - }, - { - x: 694224000000.0, - y: 42470, - }, - { - x: 725846400000.0, - y: 38257, - }, - { - x: 757382400000.0, - y: 34823, - }, - { - x: 788918400000.0, - y: 32728, - }, - { - x: 820454400000.0, - y: 30988, - }, - { - x: 852076800000.0, - y: 29179, - }, - { - x: 883612800000.0, - y: 27083, - }, - { - x: 915148800000.0, - y: 25700, - }, - { - x: 946684800000.0, - y: 24959, - }, - { - x: 978307200000.0, - y: 23180, - }, - { - x: 1009843200000.0, - y: 21731, - }, - { - x: 1041379200000.0, - y: 20793, - }, - { - x: 1072915200000.0, - y: 19739, - }, - { - x: 1104537600000.0, - y: 19190, - }, - { - x: 1136073600000.0, - y: 19674, - }, - { - x: 1167609600000.0, - y: 19986, - }, - { - x: 1199145600000.0, - y: 17771, - }, - ], - }, - { - key: ['David'], - values: [ - { - x: -157766400000.0, - y: 67646, - }, - { - x: -126230400000.0, - y: 66207, - }, - { - x: -94694400000.0, - y: 66581, - }, - { - x: -63158400000.0, - y: 63531, - }, - { - x: -31536000000.0, - y: 63502, - }, - { - x: 0.0, - y: 61570, - }, - { - x: 31536000000.0, - y: 52948, - }, - { - x: 63072000000.0, - y: 46218, - }, - { - x: 94694400000.0, - y: 40968, - }, - { - x: 126230400000.0, - y: 41654, - }, - { - x: 157766400000.0, - y: 39019, - }, - { - x: 189302400000.0, - y: 39165, - }, - { - x: 220924800000.0, - y: 40407, - }, - { - x: 252460800000.0, - y: 40533, - }, - { - x: 283996800000.0, - y: 41898, - }, - { - x: 315532800000.0, - y: 41743, - }, - { - x: 347155200000.0, - y: 40486, - }, - { - x: 378691200000.0, - y: 40283, - }, - { - x: 410227200000.0, - y: 39048, - }, - { - x: 441763200000.0, - y: 38346, - }, - { - x: 473385600000.0, - y: 38395, - }, - { - x: 504921600000.0, - y: 37021, - }, - { - x: 536457600000.0, - y: 36672, - }, - { - x: 567993600000.0, - y: 35214, - }, - { - x: 599616000000.0, - y: 35139, - }, - { - x: 631152000000.0, - y: 33661, - }, - { - x: 662688000000.0, - y: 30347, - }, - { - x: 694224000000.0, - y: 28344, - }, - { - x: 725846400000.0, - y: 26947, - }, - { - x: 757382400000.0, - y: 24784, - }, - { - x: 788918400000.0, - y: 22967, - }, - { - x: 820454400000.0, - y: 22941, - }, - { - x: 852076800000.0, - y: 21824, - }, - { - x: 883612800000.0, - y: 20816, - }, - { - x: 915148800000.0, - y: 20267, - }, - { - x: 946684800000.0, - y: 19695, - }, - { - x: 978307200000.0, - y: 19281, - }, - { - x: 1009843200000.0, - y: 18600, - }, - { - x: 1041379200000.0, - y: 18557, - }, - { - x: 1072915200000.0, - y: 18315, - }, - { - x: 1104537600000.0, - y: 18017, - }, - { - x: 1136073600000.0, - y: 17510, - }, - { - x: 1167609600000.0, - y: 17400, - }, - { - x: 1199145600000.0, - y: 16049, - }, - ], - }, - { - key: ['James'], - values: [ - { - x: -157766400000.0, - y: 67506, - }, - { - x: -126230400000.0, - y: 65036, - }, - { - x: -94694400000.0, - y: 61554, - }, - { - x: -63158400000.0, - y: 60584, - }, - { - x: -31536000000.0, - y: 59824, - }, - { - x: 0.0, - y: 61597, - }, - { - x: 31536000000.0, - y: 54463, - }, - { - x: 63072000000.0, - y: 46960, - }, - { - x: 94694400000.0, - y: 42782, - }, - { - x: 126230400000.0, - y: 41258, - }, - { - x: 157766400000.0, - y: 39471, - }, - { - x: 189302400000.0, - y: 38203, - }, - { - x: 220924800000.0, - y: 39916, - }, - { - x: 252460800000.0, - y: 39783, - }, - { - x: 283996800000.0, - y: 39237, - }, - { - x: 315532800000.0, - y: 39185, - }, - { - x: 347155200000.0, - y: 38176, - }, - { - x: 378691200000.0, - y: 38750, - }, - { - x: 410227200000.0, - y: 36228, - }, - { - x: 441763200000.0, - y: 35728, - }, - { - x: 473385600000.0, - y: 35750, - }, - { - x: 504921600000.0, - y: 33955, - }, - { - x: 536457600000.0, - y: 32552, - }, - { - x: 567993600000.0, - y: 32418, - }, - { - x: 599616000000.0, - y: 32658, - }, - { - x: 631152000000.0, - y: 32288, - }, - { - x: 662688000000.0, - y: 30460, - }, - { - x: 694224000000.0, - y: 28450, - }, - { - x: 725846400000.0, - y: 26193, - }, - { - x: 757382400000.0, - y: 24706, - }, - { - x: 788918400000.0, - y: 22691, - }, - { - x: 820454400000.0, - y: 21122, - }, - { - x: 852076800000.0, - y: 20368, - }, - { - x: 883612800000.0, - y: 19651, - }, - { - x: 915148800000.0, - y: 18508, - }, - { - x: 946684800000.0, - y: 17939, - }, - { - x: 978307200000.0, - y: 17023, - }, - { - x: 1009843200000.0, - y: 16905, - }, - { - x: 1041379200000.0, - y: 16832, - }, - { - x: 1072915200000.0, - y: 16459, - }, - { - x: 1104537600000.0, - y: 16046, - }, - { - x: 1136073600000.0, - y: 16139, - }, - { - x: 1167609600000.0, - y: 15821, - }, - { - x: 1199145600000.0, - y: 14920, - }, - ], - }, - { - key: ['John'], - values: [ - { - x: -157766400000.0, - y: 71390, - }, - { - x: -126230400000.0, - y: 64858, - }, - { - x: -94694400000.0, - y: 61480, - }, - { - x: -63158400000.0, - y: 60754, - }, - { - x: -31536000000.0, - y: 58644, - }, - { - x: 0.0, - y: 58348, - }, - { - x: 31536000000.0, - y: 51382, - }, - { - x: 63072000000.0, - y: 43028, - }, - { - x: 94694400000.0, - y: 39061, - }, - { - x: 126230400000.0, - y: 37553, - }, - { - x: 157766400000.0, - y: 34970, - }, - { - x: 189302400000.0, - y: 33876, - }, - { - x: 220924800000.0, - y: 34103, - }, - { - x: 252460800000.0, - y: 33895, - }, - { - x: 283996800000.0, - y: 35305, - }, - { - x: 315532800000.0, - y: 35131, - }, - { - x: 347155200000.0, - y: 34761, - }, - { - x: 378691200000.0, - y: 34560, - }, - { - x: 410227200000.0, - y: 33047, - }, - { - x: 441763200000.0, - y: 32484, - }, - { - x: 473385600000.0, - y: 31397, - }, - { - x: 504921600000.0, - y: 30103, - }, - { - x: 536457600000.0, - y: 29462, - }, - { - x: 567993600000.0, - y: 29301, - }, - { - x: 599616000000.0, - y: 29751, - }, - { - x: 631152000000.0, - y: 29011, - }, - { - x: 662688000000.0, - y: 27727, - }, - { - x: 694224000000.0, - y: 26156, - }, - { - x: 725846400000.0, - y: 24918, - }, - { - x: 757382400000.0, - y: 24119, - }, - { - x: 788918400000.0, - y: 23174, - }, - { - x: 820454400000.0, - y: 22104, - }, - { - x: 852076800000.0, - y: 21330, - }, - { - x: 883612800000.0, - y: 20556, - }, - { - x: 915148800000.0, - y: 20280, - }, - { - x: 946684800000.0, - y: 20032, - }, - { - x: 978307200000.0, - y: 18839, - }, - { - x: 1009843200000.0, - y: 17400, - }, - { - x: 1041379200000.0, - y: 17170, - }, - { - x: 1072915200000.0, - y: 16381, - }, - { - x: 1104537600000.0, - y: 15692, - }, - { - x: 1136073600000.0, - y: 15083, - }, - { - x: 1167609600000.0, - y: 14348, - }, - { - x: 1199145600000.0, - y: 13110, - }, - ], - }, - { - key: ['Michael'], - values: [ - { - x: -157766400000.0, - y: 80812, - }, - { - x: -126230400000.0, - y: 79709, - }, - { - x: -94694400000.0, - y: 82204, - }, - { - x: -63158400000.0, - y: 81785, - }, - { - x: -31536000000.0, - y: 84893, - }, - { - x: 0.0, - y: 85015, - }, - { - x: 31536000000.0, - y: 77321, - }, - { - x: 63072000000.0, - y: 71197, - }, - { - x: 94694400000.0, - y: 67598, - }, - { - x: 126230400000.0, - y: 67304, - }, - { - x: 157766400000.0, - y: 68149, - }, - { - x: 189302400000.0, - y: 66686, - }, - { - x: 220924800000.0, - y: 67344, - }, - { - x: 252460800000.0, - y: 66875, - }, - { - x: 283996800000.0, - y: 67473, - }, - { - x: 315532800000.0, - y: 68375, - }, - { - x: 347155200000.0, - y: 68467, - }, - { - x: 378691200000.0, - y: 67904, - }, - { - x: 410227200000.0, - y: 67708, - }, - { - x: 441763200000.0, - y: 67457, - }, - { - x: 473385600000.0, - y: 64667, - }, - { - x: 504921600000.0, - y: 63959, - }, - { - x: 536457600000.0, - y: 63442, - }, - { - x: 567993600000.0, - y: 63924, - }, - { - x: 599616000000.0, - y: 65233, - }, - { - x: 631152000000.0, - y: 65138, - }, - { - x: 662688000000.0, - y: 60646, - }, - { - x: 694224000000.0, - y: 54216, - }, - { - x: 725846400000.0, - y: 49443, - }, - { - x: 757382400000.0, - y: 44361, - }, - { - x: 788918400000.0, - y: 41311, - }, - { - x: 820454400000.0, - y: 38284, - }, - { - x: 852076800000.0, - y: 37459, - }, - { - x: 883612800000.0, - y: 36525, - }, - { - x: 915148800000.0, - y: 33820, - }, - { - x: 946684800000.0, - y: 31956, - }, - { - x: 978307200000.0, - y: 29612, - }, - { - x: 1009843200000.0, - y: 28156, - }, - { - x: 1041379200000.0, - y: 27031, - }, - { - x: 1072915200000.0, - y: 25418, - }, - { - x: 1104537600000.0, - y: 23678, - }, - { - x: 1136073600000.0, - y: 22498, - }, - { - x: 1167609600000.0, - y: 21805, - }, - { - x: 1199145600000.0, - y: 20271, - }, - ], - }, -]; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Controls.tsx b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Controls.tsx deleted file mode 100644 index 9c45ba8d847..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Controls.tsx +++ /dev/null @@ -1,549 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -/* eslint-disable react/jsx-key */ - -import { t } from '@apache-superset/core/translation'; -import { - ControlPanelSectionConfig, - ControlSubSectionHeader, - CustomControlItem, - D3_TIME_FORMAT_OPTIONS, - D3_FORMAT_DOCS, - D3_FORMAT_OPTIONS, - DEFAULT_TIME_FORMAT, -} from '@superset-ui/chart-controls'; - -/* - Plugins in question: - - AreaChartPlugin, - BarChartPlugin, - BubbleChartPlugin, - BulletChartPlugin, - CompareChartPlugin, - DistBarChartPlugin, - DualLineChartPlugin, - LineChartPlugin, - LineMultiChartPlugin, - PieChartPlugin, - TimePivotChartPlugin, -*/ - -export const yAxis2Format: CustomControlItem = { - name: 'y_axis_2_format', - config: { - type: 'SelectControl', - freeForm: true, - label: t('Right Axis Format'), - default: 'SMART_NUMBER', - choices: D3_FORMAT_OPTIONS, - description: D3_FORMAT_DOCS, - }, -}; - -export const showMarkers: CustomControlItem = { - name: 'show_markers', - config: { - type: 'CheckboxControl', - label: t('Show Markers'), - renderTrigger: true, - default: false, - description: t('Show data points as circle markers on the lines'), - }, -}; - -export const leftMargin: CustomControlItem = { - name: 'left_margin', - config: { - type: 'SelectControl', - freeForm: true, - clearable: false, - label: t('Left Margin'), - choices: [ - ['auto', t('auto')], - [50, '50'], - [75, '75'], - [100, '100'], - [125, '125'], - [150, '150'], - [200, '200'], - ], - default: 'auto', - renderTrigger: true, - description: t( - 'Left margin, in pixels, allowing for more room for axis labels', - ), - }, -}; - -export const yAxisShowMinmax: CustomControlItem = { - name: 'y_axis_showminmax', - config: { - type: 'CheckboxControl', - label: t('Y bounds'), - renderTrigger: true, - default: false, - description: t('Whether to display the min and max values of the Y-axis'), - }, -}; - -export const yAxis2ShowMinmax: CustomControlItem = { - name: 'y_axis_2_showminmax', - config: { - type: 'CheckboxControl', - label: t('Y 2 bounds'), - renderTrigger: true, - default: false, - description: t('Whether to display the min and max values of the Y-axis'), - }, -}; - -export const lineInterpolation: CustomControlItem = { - name: 'line_interpolation', - config: { - type: 'SelectControl', - label: t('Line Style'), - renderTrigger: true, - choices: [ - ['linear', t('linear')], - ['basis', t('basis')], - ['cardinal', t('cardinal')], - ['monotone', t('monotone')], - ['step-before', t('step-before')], - ['step-after', t('step-after')], - ], - default: 'linear', - description: t('Line interpolation as defined by d3.js'), - }, -}; - -export const showBrush: CustomControlItem = { - name: 'show_brush', - config: { - type: 'SelectControl', - label: t('Show Range Filter'), - renderTrigger: true, - clearable: false, - default: 'auto', - choices: [ - ['yes', t('Yes')], - ['no', t('No')], - ['auto', t('Auto')], - ], - description: t('Whether to display the time range interactive selector'), - }, -}; - -export const showLegend: CustomControlItem = { - name: 'show_legend', - config: { - type: 'CheckboxControl', - label: t('Legend'), - renderTrigger: true, - default: true, - description: t('Whether to display the legend (toggles)'), - }, -}; - -export const showControls: CustomControlItem = { - name: 'show_controls', - config: { - type: 'CheckboxControl', - label: t('Extra Controls'), - renderTrigger: true, - default: false, - description: t( - 'Whether to show extra controls or not. Extra controls ' + - 'include things like making multiBar charts stacked ' + - 'or side by side.', - ), - }, -}; - -export const xAxisLabel: CustomControlItem = { - name: 'x_axis_label', - config: { - type: 'TextControl', - label: t('X Axis Label'), - renderTrigger: true, - default: '', - }, -}; - -export const bottomMargin: CustomControlItem = { - name: 'bottom_margin', - config: { - type: 'SelectControl', - clearable: false, - freeForm: true, - label: t('Bottom Margin'), - choices: [ - ['auto', t('auto')], - [50, '50'], - [75, '75'], - [100, '100'], - [125, '125'], - [150, '150'], - [200, '200'], - ], - default: 'auto', - renderTrigger: true, - description: t( - 'Bottom margin, in pixels, allowing for more room for axis labels', - ), - }, -}; - -export const xTicksLayout: CustomControlItem = { - name: 'x_ticks_layout', - config: { - type: 'SelectControl', - label: t('X Tick Layout'), - choices: [ - ['auto', t('auto')], - ['flat', t('flat')], - ['45°', '45°'], - ['staggered', t('staggered')], - ], - default: 'auto', - clearable: false, - renderTrigger: true, - description: t('The way the ticks are laid out on the X-axis'), - }, -}; - -export const xAxisFormat: CustomControlItem = { - name: 'x_axis_format', - config: { - type: 'SelectControl', - freeForm: true, - label: t('X Axis Format'), - renderTrigger: true, - choices: D3_TIME_FORMAT_OPTIONS, - default: DEFAULT_TIME_FORMAT, - description: D3_FORMAT_DOCS, - }, -}; - -export const yLogScale: CustomControlItem = { - name: 'y_log_scale', - config: { - type: 'CheckboxControl', - label: t('Y Log Scale'), - default: false, - renderTrigger: true, - description: t('Use a log scale for the Y-axis'), - }, -}; - -export const yAxisBounds: CustomControlItem = { - name: 'y_axis_bounds', - config: { - type: 'BoundsControl', - label: t('Y Axis Bounds'), - renderTrigger: true, - default: [null, null], - description: t( - 'Bounds for the Y-axis. When left empty, the bounds are ' + - 'dynamically defined based on the min/max of the data. Note that ' + - "this feature will only expand the axis range. It won't " + - "narrow the data's extent.", - ), - }, -}; - -export const yAxis2Bounds: CustomControlItem = { - name: 'y_axis_2_bounds', - config: { - type: 'BoundsControl', - label: t('Y Axis 2 Bounds'), - renderTrigger: true, - default: [null, null], - description: t( - 'Bounds for the Y-axis. When left empty, the bounds are ' + - 'dynamically defined based on the min/max of the data. Note that ' + - "this feature will only expand the axis range. It won't " + - "narrow the data's extent.", - ), - }, -}; - -export const xAxisShowMinmax: CustomControlItem = { - name: 'x_axis_showminmax', - config: { - type: 'CheckboxControl', - label: t('X bounds'), - renderTrigger: true, - default: false, - description: t('Whether to display the min and max values of the X-axis'), - }, -}; - -export const richTooltip: CustomControlItem = { - name: 'rich_tooltip', - config: { - type: 'CheckboxControl', - label: t('Rich Tooltip'), - renderTrigger: true, - default: true, - description: t( - 'The rich tooltip shows a list of all series for that point in time', - ), - }, -}; - -export const showBarValue: CustomControlItem = { - name: 'show_bar_value', - config: { - type: 'CheckboxControl', - label: t('Bar Values'), - default: false, - renderTrigger: true, - description: t('Show the value on top of the bar'), - }, -}; - -export const barStacked: CustomControlItem = { - name: 'bar_stacked', - config: { - type: 'CheckboxControl', - label: t('Stacked Bars'), - renderTrigger: true, - default: false, - description: null, - }, -}; - -export const reduceXTicks: CustomControlItem = { - name: 'reduce_x_ticks', - config: { - type: 'CheckboxControl', - label: t('Reduce X ticks'), - renderTrigger: true, - default: false, - description: t( - 'Reduces the number of X-axis ticks to be rendered. ' + - 'If true, the x-axis will not overflow and labels may be ' + - 'missing. If false, a minimum width will be applied ' + - 'to columns and the width may overflow into an ' + - 'horizontal scroll.', - ), - }, -}; - -export const yAxisLabel: CustomControlItem = { - name: 'y_axis_label', - config: { - type: 'TextControl', - label: t('Y Axis Label'), - renderTrigger: true, - default: '', - }, -}; - -export const timeSeriesSection: ControlPanelSectionConfig[] = [ - { - label: t('Query'), - expanded: true, - controlSetRows: [ - ['metrics'], - ['adhoc_filters'], - ['groupby'], - ['limit'], - ['timeseries_limit_metric'], - ['order_desc'], - [ - { - name: 'contribution', - config: { - type: 'CheckboxControl', - label: t('Contribution'), - default: false, - description: t('Compute the contribution to the total'), - }, - }, - ], - ['row_limit', null], - ], - }, - { - label: t('Advanced Analytics'), - tabOverride: 'data', - description: t( - 'This section contains options ' + - 'that allow for advanced analytical post processing ' + - 'of query results', - ), - controlSetRows: [ - [ - - {t('Rolling Window')} - , - ], - [ - { - name: 'rolling_type', - config: { - type: 'SelectControl', - label: t('Rolling Function'), - default: 'None', - choices: [ - ['None', t('None')], - ['mean', t('mean')], - ['sum', t('sum')], - ['std', t('std')], - ['cumsum', t('cumsum')], - ], - description: t( - 'Defines a rolling window function to apply, works along ' + - 'with the [Periods] text box', - ), - }, - }, - ], - [ - { - name: 'rolling_periods', - config: { - type: 'TextControl', - label: t('Periods'), - isInt: true, - description: t( - 'Defines the size of the rolling window function, ' + - 'relative to the time granularity selected', - ), - }, - }, - ], - [ - { - name: 'min_periods', - config: { - type: 'TextControl', - label: t('Min Periods'), - isInt: true, - description: t( - 'The minimum number of rolling periods required to show ' + - 'a value. For instance if you do a cumulative sum on 7 days ' + - 'you may want your "Min Period" to be 7, so that all data points ' + - 'shown are the total of 7 periods. This will hide the "ramp up" ' + - 'taking place over the first 7 periods', - ), - }, - }, - ], - [ - - {t('Time Comparison')} - , - ], - [ - { - name: 'time_compare', - config: { - type: 'SelectControl', - multi: true, - freeForm: true, - label: t('Time Shift'), - choices: [ - ['1 day', t('1 day')], - ['1 week', t('1 week')], - ['28 days', t('28 days')], - ['30 days', t('30 days')], - ['52 weeks', t('52 weeks')], - ['1 year', t('1 year')], - ['104 weeks', t('104 weeks')], - ['2 years', t('2 years')], - ['156 weeks', t('156 weeks')], - ['3 years', t('3 years')], - ], - description: t( - 'Overlay one or more timeseries from a ' + - 'relative time period. Expects relative time deltas ' + - 'in natural language (example: 24 hours, 7 days, ' + - '52 weeks, 365 days). Free text is supported.', - ), - }, - }, - ], - [ - { - name: 'comparison_type', - config: { - type: 'SelectControl', - label: t('Calculation type'), - default: 'values', - choices: [ - ['values', t('Actual Values')], - ['absolute', t('Difference')], - ['percentage', t('Percentage change')], - ['ratio', t('Ratio')], - ], - description: t( - 'How to display time shifts: as individual lines; as the ' + - 'difference between the main time series and each time shift; ' + - 'as the percentage change; or as the ratio between series and time shifts.', - ), - }, - }, - ], - [{t('Resample')}], - [ - { - name: 'resample_rule', - config: { - type: 'SelectControl', - freeForm: true, - label: t('Rule'), - default: null, - choices: [ - ['1T', t('1T')], - ['1H', t('1H')], - ['1D', t('1D')], - ['7D', t('7D')], - ['1M', t('1M')], - ['1AS', t('1AS')], - ], - description: t('Pandas resample rule'), - }, - }, - ], - [ - { - name: 'resample_method', - config: { - type: 'SelectControl', - freeForm: true, - label: t('Method'), - default: null, - choices: [ - ['asfreq', t('asfreq')], - ['bfill', t('bfill')], - ['ffill', t('ffill')], - ['median', t('median')], - ['mean', t('mean')], - ['sum', t('sum')], - ], - description: t('Pandas resample method'), - }, - }, - ], - ], - }, -]; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Vis.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Vis.ts deleted file mode 100644 index a34e61e68f3..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/NVD3Vis.ts +++ /dev/null @@ -1,1059 +0,0 @@ -// @ts-nocheck -- legacy file heavily dependent on untyped d3 v3 and nvd3 APIs -/* eslint-disable react/sort-prop-types */ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { kebabCase, throttle } from 'lodash-es'; -import d3 from 'd3'; -import utc from 'dayjs/plugin/utc'; -import nv from 'nvd3-fork'; -import PropTypes from 'prop-types'; -import { - CategoricalColorNamespace, - evalExpression, - getNumberFormatter, - getTimeFormatter, - isDefined, - NumberFormats, - SMART_DATE_VERBOSE_ID, - VizType, -} from '@superset-ui/core'; -import { t } from '@apache-superset/core/translation'; -import { extendedDayjs as dayjs } from '@superset-ui/core/utils/dates'; - -import 'nvd3-fork/build/nv.d3.css'; - -/* eslint-disable-next-line */ -import ANNOTATION_TYPES, { - applyNativeColumns, -} from './vendor/superset/AnnotationTypes'; -import isTruthy from './utils/isTruthy'; -import { - cleanColorInput, - computeYDomain, - drawBarValues, - generateBubbleTooltipContent, - generateCompareTooltipContent, - generateTimePivotTooltip, - generateTooltipClassName, - getMaxLabelSize, - getTimeOrNumberFormatter, - hideTooltips, - tipFactory, - removeTooltip, - setAxisShowMaxMin, - stringifyTimeRange, - wrapTooltip, -} from './utils'; -import { - annotationLayerType, - boxPlotValueType, - bulletDataType, - categoryAndValueXYType, - rgbObjectType, - numericXYType, - numberOrAutoType, - stringOrObjectWithLabelType, -} from './PropTypes'; - -const NO_DATA_RENDER_DATA = [ - { text: 'No data', dy: '-.75em', class: 'header' }, - { - text: 'Adjust filters or check the Datasource.', - dy: '.75em', - class: 'body', - }, -]; - -dayjs.extend(utc); - -const smartDateVerboseFormatter = getTimeFormatter(SMART_DATE_VERBOSE_ID); - -// Override the noData render function to make a prettier UX -// Code adapted from https://github.com/novus/nvd3/blob/master/src/utils.js#L653 -nv.utils.noData = function noData(chart, container) { - const opt = chart.options(); - const margin = opt.margin(); - const height = nv.utils.availableHeight(null, container, margin); - const width = nv.utils.availableWidth(null, container, margin); - const x = margin.left + width / 2; - const y = margin.top + height / 2; - - // Remove any previously created chart components - container.selectAll('g').remove(); - - const noDataText = container - .selectAll('.nv-noData') - .data(NO_DATA_RENDER_DATA); - - noDataText - .enter() - .append('text') - .attr('class', d => `nvd3 nv-noData ${d.class}`) - .attr('dy', d => d.dy) - .style('text-anchor', 'middle'); - - noDataText - .attr('x', x) - .attr('y', y) - .text(d => d.text); -}; - -const { getColor, getScale } = CategoricalColorNamespace; - -// Limit on how large axes margins can grow as the chart window is resized -const MAX_MARGIN_PAD = 30; -const MIN_HEIGHT_FOR_BRUSH = 480; -const MAX_NO_CHARACTERS_IN_LABEL = 40; - -const BREAKPOINTS = { - small: 340, -}; - -const TIMESERIES_VIZ_TYPES = [VizType.Compare, VizType.TimePivot]; - -const CHART_ID_PREFIX = 'chart-id-'; - -const propTypes = { - data: PropTypes.oneOfType([ - PropTypes.arrayOf( - PropTypes.oneOfType([ - // pie - categoryAndValueXYType, - // dist-bar - PropTypes.shape({ - key: PropTypes.string, - values: PropTypes.arrayOf(categoryAndValueXYType), - }), - // area, line, compare, bar - PropTypes.shape({ - key: PropTypes.arrayOf(PropTypes.string), - values: PropTypes.arrayOf(numericXYType), - }), - // dual-line - PropTypes.shape({ - classed: PropTypes.string, - key: PropTypes.string, - type: PropTypes.string, - values: PropTypes.arrayOf(numericXYType), - yAxis: PropTypes.number, - }), - // box-plot - PropTypes.shape({ - label: PropTypes.string, - values: PropTypes.arrayOf(boxPlotValueType), - }), - // bubble - PropTypes.shape({ - key: PropTypes.string, - values: PropTypes.arrayOf(PropTypes.object), - }), - ]), - ), - bulletDataType, - ]), - width: PropTypes.number, - height: PropTypes.number, - annotationData: PropTypes.object, - annotationLayers: PropTypes.arrayOf(annotationLayerType), - bottomMargin: numberOrAutoType, - colorScheme: PropTypes.string, - comparisonType: PropTypes.string, - contribution: PropTypes.bool, - leftMargin: numberOrAutoType, - onError: PropTypes.func, - showLegend: PropTypes.bool, - showMarkers: PropTypes.bool, - vizType: PropTypes.oneOf([ - VizType.BoxPlot, - 'bubble', - VizType.Bullet, - VizType.Compare, - 'column', - VizType.TimePivot, - 'pie', - ]), - xAxisFormat: PropTypes.string, - numberFormat: PropTypes.string, - xAxisLabel: PropTypes.string, - xAxisShowMinMax: PropTypes.bool, - xIsLogScale: PropTypes.bool, - xTicksLayout: PropTypes.oneOf(['auto', 'staggered', '45°']), - yAxisFormat: PropTypes.string, - yAxisBounds: PropTypes.arrayOf(PropTypes.number), - yAxisLabel: PropTypes.string, - yAxisShowMinMax: PropTypes.bool, - yIsLogScale: PropTypes.bool, - // 'bar' or 'dist-bar' - isBarStacked: PropTypes.bool, - showBarValue: PropTypes.bool, - // 'line' only - showBrush: PropTypes.oneOf([true, 'yes', false, 'no', 'auto']), - onBrushEnd: PropTypes.func, - // 'line-multi' or 'dual-line' - yAxis2Format: PropTypes.string, - // 'line', 'time-pivot', 'dual-line' or 'line-multi' - lineInterpolation: PropTypes.string, - // 'pie' only - isDonut: PropTypes.bool, - isPieLabelOutside: PropTypes.bool, - pieLabelType: PropTypes.oneOf([ - 'key', - 'value', - 'percent', - 'key_value', - 'key_percent', - 'key_value_percent', - ]), - showLabels: PropTypes.bool, - // 'bubble' only - entity: PropTypes.string, - maxBubbleSize: PropTypes.number, - xField: stringOrObjectWithLabelType, - yField: stringOrObjectWithLabelType, - sizeField: stringOrObjectWithLabelType, - // time-pivot only - baseColor: rgbObjectType, -}; - -const NOOP = () => {}; -const formatter = getNumberFormatter(); - -function nvd3Vis(element, props) { - const { - data, - width: maxWidth, - height: maxHeight, - annotationData, - annotationLayers = [], - baseColor, - bottomMargin, - colorScheme, - comparisonType, - contribution, - entity, - isBarStacked, - isDonut, - isPieLabelOutside, - leftMargin, - lineInterpolation = 'linear', - markerLabels, - markerLines, - markerLineLabels, - markers, - maxBubbleSize, - onBrushEnd = NOOP, - onError = NOOP, - pieLabelType, - rangeLabels, - ranges, - showBarValue, - showBrush, - showLabels, - showLegend, - showMarkers, - sizeField, - vizType, - xAxisFormat, - numberFormat, - xAxisLabel, - xAxisShowMinMax = false, - xField, - xIsLogScale, - xTicksLayout, - yAxisFormat, - yAxisBounds, - yAxisLabel, - yAxisShowMinMax = false, - yAxis2ShowMinMax = false, - yField, - yIsLogScale, - sliceId, - } = props; - - const isExplore = document.querySelector('#explorer-container') !== null; - const container = element; - container.innerHTML = ''; - const activeAnnotationLayers = annotationLayers.filter(layer => layer.show); - - // Search for the chart id in a parent div from the nvd3 chart - let chartContainer = container; - let chartId = null; - while (chartContainer.parentElement) { - if (chartContainer.parentElement.id.startsWith(CHART_ID_PREFIX)) { - chartId = chartContainer.parentElement.id; - break; - } - - chartContainer = chartContainer.parentElement; - } - - let chart; - const width = maxWidth; - let colorKey = 'key'; - - container.style.width = `${maxWidth}px`; - container.style.height = `${maxHeight}px`; - - function isVizTypes(types) { - return types.includes(vizType); - } - - const drawGraph = function drawGraph() { - const d3Element = d3.select(element); - d3Element.classed('superset-legacy-chart-nvd3', true); - d3Element.classed(`superset-legacy-chart-nvd3-${kebabCase(vizType)}`, true); - let svg = d3Element.select('svg'); - if (svg.empty()) { - svg = d3Element.append('svg'); - } - const height = - vizType === VizType.Bullet ? Math.min(maxHeight, 50) : maxHeight; - const isTimeSeries = isVizTypes(TIMESERIES_VIZ_TYPES); - - // Handling xAxis ticks settings - const staggerLabels = xTicksLayout === 'staggered'; - const xLabelRotation = xTicksLayout === '45°' ? 45 : 0; - if (xLabelRotation === 45 && isTruthy(showBrush)) { - onError( - t('You cannot use 45° tick layout along with the time range filter'), - ); - - return null; - } - - const canShowBrush = - isTruthy(showBrush) || - (showBrush === 'auto' && - maxHeight >= MIN_HEIGHT_FOR_BRUSH && - xTicksLayout !== '45°'); - const numberFormatter = getNumberFormatter(numberFormat); - - switch (vizType) { - case VizType.TimePivot: - chart = nv.models.lineChart(); - chart.xScale(d3.time.scale.utc()); - chart.interpolate(lineInterpolation); - break; - - case VizType.Pie: - chart = nv.models.pieChart(); - colorKey = 'x'; - chart.valueFormat(numberFormatter); - if (isDonut) { - chart.donut(true); - } - chart.showLabels(showLabels); - chart.labelsOutside(isPieLabelOutside); - // Configure the minimum slice size for labels to show up - chart.labelThreshold(0.05); - chart.cornerRadius(true); - - if (['key', 'value', 'percent'].includes(pieLabelType)) { - chart.labelType(pieLabelType); - } else if (pieLabelType === 'key_value') { - chart.labelType(d => `${d.data.x}: ${numberFormatter(d.data.y)}`); - } else { - // pieLabelType in ['key_percent', 'key_value_percent'] - const total = d3.sum(data, d => d.y); - const percentFormatter = getNumberFormatter( - NumberFormats.PERCENT_2_POINT, - ); - if (pieLabelType === 'key_percent') { - chart.tooltip.valueFormatter(d => percentFormatter(d)); - chart.labelType( - d => `${d.data.x}: ${percentFormatter(d.data.y / total)}`, - ); - } else { - // pieLabelType === 'key_value_percent' - chart.tooltip.valueFormatter( - d => `${numberFormatter(d)} (${percentFormatter(d / total)})`, - ); - chart.labelType( - d => - `${d.data.x}: ${numberFormatter(d.data.y)} (${percentFormatter( - d.data.y / total, - )})`, - ); - } - } - // Pie chart does not need top margin - chart.margin({ top: 0 }); - break; - - case 'column': - chart = nv.models.multiBarChart().reduceXTicks(false); - break; - - case VizType.Compare: - chart = nv.models.cumulativeLineChart(); - chart.xScale(d3.time.scale.utc()); - chart.useInteractiveGuideline(true); - chart.xAxis.showMaxMin(false); - break; - - case VizType.LegacyBubble: - chart = nv.models.scatterChart(); - chart.showDistX(false); - chart.showDistY(false); - chart.tooltip.contentGenerator(d => - generateBubbleTooltipContent({ - point: d.point, - entity, - xField, - yField, - sizeField, - xFormatter: getTimeOrNumberFormatter(xAxisFormat), - yFormatter: getTimeOrNumberFormatter(yAxisFormat), - sizeFormatter: formatter, - }), - ); - chart.pointRange([5, maxBubbleSize ** 2]); - chart.pointDomain([ - 0, - d3.max(data, d => d3.max(d.values, v => v.size)), - ]); - break; - - case VizType.BoxPlot: - colorKey = 'label'; - chart = nv.models.boxPlotChart(); - chart.x(d => d.label); - chart.maxBoxWidth(75); // prevent boxes from being incredibly wide - break; - - case VizType.Bullet: - chart = nv.models.bulletChart(); - data.rangeLabels = rangeLabels; - data.ranges = ranges; - data.markerLabels = markerLabels; - data.markerLines = markerLines; - data.markerLineLabels = markerLineLabels; - data.markers = markers; - break; - - default: - throw new Error(`Unrecognized visualization for nvd3${vizType}`); - } - // Assuming the container has padding already other than for top margin - chart.margin({ left: 0, bottom: 0 }); - - if (showBarValue) { - drawBarValues(svg, data, isBarStacked, yAxisFormat); - chart.dispatch.on('stateChange.drawBarValues', () => { - drawBarValues(svg, data, isBarStacked, yAxisFormat); - }); - } - - if (canShowBrush && onBrushEnd !== NOOP) { - if (chart.focus) { - chart.focus.dispatch.on('brush', event => { - const timeRange = stringifyTimeRange(event.extent); - if (timeRange) { - event.brush.on('brushend', () => { - onBrushEnd(timeRange); - }); - } - }); - } - } - - if (chart.xAxis && chart.xAxis.staggerLabels) { - chart.xAxis.staggerLabels(staggerLabels); - } - if (chart.xAxis && chart.xAxis.rotateLabels) { - chart.xAxis.rotateLabels(xLabelRotation); - } - if (chart.x2Axis && chart.x2Axis.staggerLabels) { - chart.x2Axis.staggerLabels(staggerLabels); - } - if (chart.x2Axis && chart.x2Axis.rotateLabels) { - chart.x2Axis.rotateLabels(xLabelRotation); - } - - if ('showLegend' in chart && typeof showLegend !== 'undefined') { - if (width < BREAKPOINTS.small && vizType !== VizType.Pie) { - chart.showLegend(false); - } else { - chart.showLegend(showLegend); - } - } - - if (yIsLogScale) { - chart.yScale(d3.scale.log()); - } - if (xIsLogScale) { - chart.xScale(d3.scale.log()); - } - - let xAxisFormatter; - if (isTimeSeries) { - xAxisFormatter = getTimeFormatter(xAxisFormat); - // In tooltips, always use the verbose time format - chart.interactiveLayer.tooltip.headerFormatter(smartDateVerboseFormatter); - } else { - xAxisFormatter = getTimeOrNumberFormatter(xAxisFormat); - } - if (chart.x2Axis && chart.x2Axis.tickFormat) { - chart.x2Axis.tickFormat(xAxisFormatter); - } - if (chart.xAxis && chart.xAxis.tickFormat) { - const isXAxisString = isVizTypes([VizType.BoxPlot]); - if (isXAxisString) { - chart.xAxis.tickFormat(d => - d.length > MAX_NO_CHARACTERS_IN_LABEL - ? `${d.slice(0, Math.max(0, MAX_NO_CHARACTERS_IN_LABEL))}…` - : d, - ); - } else { - chart.xAxis.tickFormat(xAxisFormatter); - } - } - - let yAxisFormatter = getTimeOrNumberFormatter(yAxisFormat); - if (chart.yAxis && chart.yAxis.tickFormat) { - if ( - (contribution || comparisonType === 'percentage') && - (!yAxisFormat || - yAxisFormat === NumberFormats.SMART_NUMBER || - yAxisFormat === NumberFormats.SMART_NUMBER_SIGNED) - ) { - // When computing a "Percentage" or "Contribution" selected, - // force a percentage format if no custom formatting set - yAxisFormatter = getNumberFormatter(NumberFormats.PERCENT_1_POINT); - } - chart.yAxis.tickFormat(yAxisFormatter); - } - if (chart.y2Axis && chart.y2Axis.tickFormat) { - chart.y2Axis.tickFormat(yAxisFormatter); - } - - if (chart.yAxis) { - chart.yAxis.ticks(5); - } - if (chart.y2Axis) { - chart.y2Axis.ticks(5); - } - - // Set showMaxMin for all axis - setAxisShowMaxMin(chart.xAxis, xAxisShowMinMax); - setAxisShowMaxMin(chart.x2Axis, xAxisShowMinMax); - setAxisShowMaxMin(chart.yAxis, yAxisShowMinMax); - setAxisShowMaxMin(chart.y2Axis, yAxis2ShowMinMax || yAxisShowMinMax); - - if (vizType === VizType.TimePivot) { - if (baseColor) { - const { r, g, b } = baseColor; - chart.color(d => { - const alpha = d.rank > 0 ? d.perc * 0.5 : 1; - - return `rgba(${r}, ${g}, ${b}, ${alpha})`; - }); - } - - chart.useInteractiveGuideline(true); - chart.interactiveLayer.tooltip.contentGenerator(d => - generateTimePivotTooltip(d, xAxisFormatter, yAxisFormatter), - ); - } else if (vizType !== VizType.Bullet) { - const colorFn = getScale(colorScheme); - chart.color( - d => d.color || colorFn(cleanColorInput(d[colorKey]), sliceId), - ); - } - - if (isVizTypes([VizType.Compare])) { - chart.interactiveLayer.tooltip.contentGenerator(d => - generateCompareTooltipContent(d, yAxisFormatter), - ); - } - - // This is needed for correct chart dimensions if a chart is rendered in a hidden container - chart.width(width); - chart.height(height); - - svg - .datum(data) - .transition() - .duration(500) - .attr('height', height) - .attr('width', width) - .call(chart); - - // For log scale, only show 1, 10, 100, 1000, ... - if (yIsLogScale) { - chart.yAxis.tickFormat(d => - d !== 0 && Math.log10(d) % 1 === 0 ? yAxisFormatter(d) : '', - ); - } - - if (xLabelRotation > 0) { - // shift labels to the left so they look better - const xTicks = svg.select('.nv-x.nv-axis > g').selectAll('g'); - xTicks.selectAll('text').attr('dx', -6.5); - } - - const applyYAxisBounds = () => { - if ( - chart.yDomain && - Array.isArray(yAxisBounds) && - yAxisBounds.length === 2 - ) { - const [customMin, customMax] = yAxisBounds; - const hasCustomMin = isDefined(customMin) && !Number.isNaN(customMin); - const hasCustomMax = isDefined(customMax) && !Number.isNaN(customMax); - - if (hasCustomMin && hasCustomMax) { - // Override the y domain if there's both a custom min and max - chart.yDomain([customMin, customMax]); - chart.clipEdge(true); - } else if (hasCustomMin || hasCustomMax) { - // Only one of the bounds has been set, so we need to manually calculate the other one - const [trueMin, trueMax] = computeYDomain(data); - const min = hasCustomMin ? customMin : trueMin; - const max = hasCustomMax ? customMax : trueMax; - chart.yDomain([min, max]); - chart.clipEdge(true); - } - } - }; - applyYAxisBounds(); - - // Also reapply on each state change to account for enabled/disabled series - if (chart.dispatch && chart.dispatch.stateChange) { - chart.dispatch.on('stateChange.applyYAxisBounds', applyYAxisBounds); - } - - if (showMarkers) { - svg - .selectAll('.nv-point') - .style('stroke-opacity', 1) - .style('fill-opacity', 1); - - // redo on legend toggle; nvd3 calls the callback *before* the line is - // drawn, so we need to add a small delay here - chart.dispatch.on('stateChange.showMarkers', () => { - setTimeout(() => { - svg - .selectAll('.nv-point') - .style('stroke-opacity', 1) - .style('fill-opacity', 1); - }, 10); - }); - } - - if (chart.yAxis !== undefined || chart.yAxis2 !== undefined) { - // Hack to adjust y axis left margin to accommodate long numbers - const marginPad = Math.ceil( - Math.min(maxWidth * (isExplore ? 0.01 : 0.03), MAX_MARGIN_PAD), - ); - // Hack to adjust margins to accommodate long axis tick labels. - // - has to be done only after the chart has been rendered once - // - measure the width or height of the labels - // ---- (x axis labels are rotated 45 degrees so we use height), - // - adjust margins based on these measures and render again - const margins = chart.margin(); - if (chart.xAxis) { - margins.bottom = 28; - } - const maxYAxisLabelWidth = getMaxLabelSize( - svg, - chart.yAxis2 ? 'nv-y1' : 'nv-y', - ); - const maxXAxisLabelHeight = getMaxLabelSize(svg, 'nv-x'); - margins.left = maxYAxisLabelWidth + marginPad; - - if (yAxisLabel && yAxisLabel !== '') { - margins.left += 25; - } - if (showBarValue) { - // Add more margin to avoid label colliding with legend. - margins.top += 24; - } - if (xAxisShowMinMax) { - // If x bounds are shown, we need a right margin - margins.right = Math.max(20, maxXAxisLabelHeight / 2) + marginPad; - } - if (xLabelRotation === 45) { - margins.bottom = - maxXAxisLabelHeight * Math.sin((Math.PI * xLabelRotation) / 180) + - marginPad + - 30; - margins.right = - maxXAxisLabelHeight * Math.cos((Math.PI * xLabelRotation) / 180) + - marginPad; - } else if (staggerLabels) { - margins.bottom = 40; - } - - if (bottomMargin && bottomMargin !== 'auto') { - margins.bottom = parseInt(bottomMargin, 10); - } - if (leftMargin && leftMargin !== 'auto') { - margins.left = leftMargin; - } - - if (xAxisLabel && xAxisLabel !== '' && chart.xAxis) { - margins.bottom += 25; - let distance = 0; - if (margins.bottom && !Number.isNaN(margins.bottom)) { - distance = margins.bottom - 45; - } - // nvd3 bug axisLabelDistance is disregarded on xAxis - // https://github.com/krispo/angular-nvd3/issues/90 - chart.xAxis.axisLabel(xAxisLabel).axisLabelDistance(distance); - } - - if (yAxisLabel && yAxisLabel !== '' && chart.yAxis) { - let distance = 0; - if (margins.left && !Number.isNaN(margins.left)) { - distance = margins.left - 70; - } - chart.yAxis.axisLabel(yAxisLabel).axisLabelDistance(distance); - } - if (isTimeSeries && annotationData && activeAnnotationLayers.length > 0) { - // Time series annotations add additional data - const timeSeriesAnnotations = activeAnnotationLayers - .filter( - layer => layer.annotationType === ANNOTATION_TYPES.TIME_SERIES, - ) - .reduce( - (bushel, a) => - bushel.concat( - (annotationData[a.name] || []).map(series => { - if (!series) { - return {}; - } - const key = Array.isArray(series.key) - ? `${a.name}, ${series.key.join(', ')}` - : `${a.name}, ${series.key}`; - - return { - ...series, - key, - color: a.color, - strokeWidth: a.width, - classed: `${a.opacity} ${a.style} nv-timeseries-annotation-layer showMarkers${a.showMarkers} hideLine${a.hideLine}`, - }; - }), - ), - [], - ); - data.push(...timeSeriesAnnotations); - } - - // Uniquely identify tooltips based on chartId so this chart instance only - // controls its own tooltips - if (chartId) { - if (chart && chart.interactiveLayer && chart.interactiveLayer.tooltip) { - chart.interactiveLayer.tooltip.classes([ - generateTooltipClassName(chartId), - ]); - } - - if (chart && chart.tooltip) { - chart.tooltip.classes([generateTooltipClassName(chartId)]); - } - } - - // render chart - chart.margin(margins); - svg - .datum(data) - .transition() - .duration(500) - .attr('width', width) - .attr('height', height) - .call(chart); - - // On scroll, hide (not remove) tooltips so they can reappear on hover. - // Throttle to only 4x/second. - window.addEventListener( - 'scroll', - throttle(() => hideTooltips(false), 250), - ); - - // The below code should be run AFTER rendering because chart is updated in call() - if (isTimeSeries && activeAnnotationLayers.length > 0) { - // Formula annotations - const formulas = activeAnnotationLayers.filter( - a => a.annotationType === ANNOTATION_TYPES.FORMULA, - ); - - const xMax = chart.xAxis.scale().domain()[1].valueOf(); - const xMin = chart.xAxis.scale().domain()[0].valueOf(); - let xScale; - if (chart.xScale) { - xScale = chart.xScale(); - } else if (chart.xAxis.scale) { - xScale = chart.xAxis.scale(); - } else { - xScale = d3.scale.linear(); - } - if (xScale && xScale.clamp) { - xScale.clamp(true); - } - - if (formulas.length > 0) { - const xValues = []; - let period = Math.min( - ...data.map(d => - Math.min(...d.values.slice(1).map((v, i) => v.x - d.values[i].x)), - ), - ); - const dataPoints = (xMax - xMin) / (period || 1); - // make sure that there are enough data points and not too many - period = dataPoints < 100 ? (xMax - xMin) / 100 : period; - period = dataPoints > 500 ? (xMax - xMin) / 500 : period; - xValues.push(xMin); - for (let x = xMin; x < xMax; x += period) { - xValues.push(x); - } - xValues.push(xMax); - - const formulaData = formulas.map(fo => { - const { value: expression } = fo; - return { - key: fo.name, - values: xValues.map(x => ({ - x, - y: evalExpression(expression, x), - })), - color: fo.color, - strokeWidth: fo.width, - classed: `${fo.opacity} ${fo.style}`, - }; - }); - data.push(...formulaData); - } - const xAxis = chart.xAxis1 ? chart.xAxis1 : chart.xAxis; - const yAxis = chart.yAxis1 ? chart.yAxis1 : chart.yAxis; - const chartWidth = xAxis.scale().range()[1]; - const annotationHeight = yAxis.scale().range()[0]; - - if (annotationData) { - // Event annotations - activeAnnotationLayers - .filter( - x => - x.annotationType === ANNOTATION_TYPES.EVENT && - annotationData && - annotationData[x.name], - ) - .forEach((config, index) => { - const e = applyNativeColumns(config); - // Add event annotation layer - const annotations = d3 - .select(element) - .select('.nv-wrap') - .append('g') - .attr('class', `nv-event-annotation-layer-${index}`); - const aColor = - e.color || getColor(cleanColorInput(e.name), colorScheme); - - const tip = tipFactory({ - ...e, - annotationTipClass: `arrow-down nv-event-annotation-layer-${config.sourceType}`, - }); - const records = (annotationData[e.name].records || []) - .map(r => { - const timeValue = new Date(dayjs.utc(r[e.timeColumn])); - - return { - ...r, - [e.timeColumn]: timeValue, - }; - }) - .filter( - record => - !Number.isNaN(record[e.timeColumn].getMilliseconds()), - ); - - if (records.length > 0) { - annotations - .selectAll('line') - .data(records) - .enter() - .append('line') - .attr({ - x1: d => xScale(new Date(d[e.timeColumn])), - y1: 0, - x2: d => xScale(new Date(d[e.timeColumn])), - y2: annotationHeight, - }) - .attr('class', `${e.opacity} ${e.style}`) - .style('stroke', aColor) - .style('stroke-width', e.width) - .on('mouseover', tip.show) - .on('mouseout', tip.hide) - .call(tip); - } - - // update annotation positions on brush event - if (chart.focus) { - chart.focus.dispatch.on('onBrush.event-annotation', () => { - annotations - .selectAll('line') - .data(records) - .attr({ - x1: d => xScale(new Date(d[e.timeColumn])), - y1: 0, - x2: d => xScale(new Date(d[e.timeColumn])), - y2: annotationHeight, - opacity: d => { - const x = xScale(new Date(d[e.timeColumn])); - - return x > 0 && x < chartWidth ? 1 : 0; - }, - }); - }); - } - }); - - // Interval annotations - activeAnnotationLayers - .filter( - x => - x.annotationType === ANNOTATION_TYPES.INTERVAL && - annotationData && - annotationData[x.name], - ) - .forEach((config, index) => { - const e = applyNativeColumns(config); - // Add interval annotation layer - const annotations = d3 - .select(element) - .select('.nv-wrap') - .append('g') - .attr('class', `nv-interval-annotation-layer-${index}`); - - const aColor = - e.color || getColor(cleanColorInput(e.name), colorScheme); - const tip = tipFactory(e); - - const records = (annotationData[e.name].records || []) - .map(r => { - const timeValue = new Date(dayjs.utc(r[e.timeColumn])); - const intervalEndValue = new Date( - dayjs.utc(r[e.intervalEndColumn]), - ); - - return { - ...r, - [e.timeColumn]: timeValue, - [e.intervalEndColumn]: intervalEndValue, - }; - }) - .filter( - record => - !Number.isNaN(record[e.timeColumn].getMilliseconds()) && - !Number.isNaN( - record[e.intervalEndColumn].getMilliseconds(), - ), - ); - - if (records.length > 0) { - annotations - .selectAll('rect') - .data(records) - .enter() - .append('rect') - .attr({ - x: d => - Math.min( - xScale(new Date(d[e.timeColumn])), - xScale(new Date(d[e.intervalEndColumn])), - ), - y: 0, - width: d => - Math.max( - Math.abs( - xScale(new Date(d[e.intervalEndColumn])) - - xScale(new Date(d[e.timeColumn])), - ), - 1, - ), - height: annotationHeight, - }) - .attr('class', `${e.opacity} ${e.style}`) - .style('stroke-width', e.width) - .style('stroke', aColor) - .style('fill', aColor) - .style('fill-opacity', 0.2) - .on('mouseover', tip.show) - .on('mouseout', tip.hide) - .call(tip); - } - - // update annotation positions on brush event - if (chart.focus) { - chart.focus.dispatch.on('onBrush.interval-annotation', () => { - annotations - .selectAll('rect') - .data(records) - .attr({ - x: d => xScale(new Date(d[e.timeColumn])), - width: d => { - const x1 = xScale(new Date(d[e.timeColumn])); - const x2 = xScale(new Date(d[e.intervalEndColumn])); - - return x2 - x1; - }, - }); - }); - } - }); - } - - // rerender chart appended with annotation layer - svg.datum(data).attr('height', height).attr('width', width).call(chart); - - // Display styles for Time Series Annotations - chart.dispatch.on('renderEnd.timeseries-annotation', () => { - d3.selectAll( - '.slice_container .nv-timeseries-annotation-layer.showMarkerstrue .nv-point', - ) - .style('stroke-opacity', 1) - .style('fill-opacity', 1); - d3.selectAll( - '.slice_container .nv-timeseries-annotation-layer.hideLinetrue', - ).style('stroke-width', 0); - }); - } - } - - wrapTooltip(chart); - - return chart; - }; - - // Remove tooltips before rendering chart, if the chart is being re-rendered sometimes - // there are left over tooltips in the dom, - // this will clear them before rendering the chart again. - if (chartId) { - removeTooltip(chartId); - } else { - hideTooltips(true); - } - - nv.addGraph(drawGraph); -} - -nvd3Vis.displayName = 'NVD3'; -nvd3Vis.propTypes = propTypes; -export default nvd3Vis; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/PropTypes.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/PropTypes.ts deleted file mode 100644 index 99bf998f402..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/PropTypes.ts +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -/* eslint-disable react/sort-prop-types */ -import PropTypes from 'prop-types'; -import { ANNOTATION_TYPES } from './vendor/superset/AnnotationTypes'; - -export const numberOrAutoType = PropTypes.oneOfType([ - PropTypes.number, - PropTypes.oneOf(['auto']), -]); - -export const stringOrObjectWithLabelType = PropTypes.oneOfType([ - PropTypes.string, - PropTypes.shape({ - label: PropTypes.string, - }), -]); - -export const rgbObjectType = PropTypes.shape({ - r: PropTypes.number.isRequired, - g: PropTypes.number.isRequired, - b: PropTypes.number.isRequired, -}); - -export const numericXYType = PropTypes.shape({ - x: PropTypes.number, - y: PropTypes.number, -}); - -export const categoryAndValueXYType = PropTypes.shape({ - x: PropTypes.string, - y: PropTypes.number, -}); - -export const boxPlotValueType = PropTypes.shape({ - outliers: PropTypes.arrayOf(PropTypes.number), - Q1: PropTypes.number, - Q2: PropTypes.number, - Q3: PropTypes.number, - whisker_high: PropTypes.number, - whisker_low: PropTypes.number, -}); - -export const bulletDataType = PropTypes.shape({ - markerLabels: PropTypes.arrayOf(PropTypes.string), - markerLineLabels: PropTypes.arrayOf(PropTypes.string), - markerLines: PropTypes.arrayOf(PropTypes.number), - markers: PropTypes.arrayOf(PropTypes.number), - measures: PropTypes.arrayOf(PropTypes.number), - rangeLabels: PropTypes.arrayOf(PropTypes.string), - ranges: PropTypes.arrayOf(PropTypes.number), -}); - -export const annotationLayerType = PropTypes.shape({ - annotationType: PropTypes.oneOf(Object.keys(ANNOTATION_TYPES)), - color: PropTypes.string, - hideLine: PropTypes.bool, - name: PropTypes.string, - opacity: PropTypes.string, - show: PropTypes.bool, - showMarkers: PropTypes.bool, - sourceType: PropTypes.string, - style: PropTypes.string, - value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), - width: PropTypes.number, -}); diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/ReactNVD3.tsx b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/ReactNVD3.tsx deleted file mode 100644 index f472ac24528..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/ReactNVD3.tsx +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// @ts-nocheck -- legacy reactified component with untyped `this` context from reactify callbacks -import { reactify } from '@superset-ui/core'; -import { styled } from '@apache-superset/core/theme'; -import PropTypes from 'prop-types'; -import Component from './NVD3Vis'; -import { hideTooltips, removeTooltip } from './utils'; - -function componentWillUnmount() { - const { id } = this.props; - if (id !== null && id !== undefined) { - removeTooltip(id); - } else { - hideTooltips(true); - } -} - -const ReactNVD3 = reactify(Component, { componentWillUnmount }); - -const NVD3 = ({ className, ...otherProps }) => ( -

-); - -NVD3.propTypes = { - className: PropTypes.string.isRequired, -}; - -export default styled(NVD3)` - .superset-legacy-chart-nvd3-dist-bar, - .superset-legacy-chart-nvd3-bar { - overflow-x: auto !important; - svg { - &.nvd3-svg { - width: auto; - font-size: ${({ theme }) => theme.fontSize}; - } - } - } - .superset-legacy-chart-nvd3 { - nv-x text { - font-size: ${({ theme }) => theme.fontSize}; - } - g.superset path { - stroke-dasharray: 5, 5; - } - .nvtooltip { - table td { - font-size: @font-size-s !important; - } - } - .nvtooltip tr.highlight td { - font-weight: ${({ theme }) => theme.fontWeightStrong}; - font-size: ${({ theme }) => theme.fontSize}px !important; - } - text.nv-axislabel { - font-size: ${({ theme }) => theme.fontSize} !important; - } - g.nv-axis text { - fill: ${({ theme }) => theme.colorText}; - } - g.nv-series text { - fill: ${({ theme }) => theme.colorText}; - } - g.solid path, - line.solid { - stroke-dasharray: unset; - } - g.dashed path, - line.dashed { - stroke-dasharray: 5, 5; - } - g.longDashed path, - line.dotted { - stroke-dasharray: 1, 1; - } - - g.opacityLow path, - line.opacityLow { - stroke-opacity: 0.2; - } - - g.opacityMedium path, - line.opacityMedium { - stroke-opacity: 0.5; - } - g.opacityHigh path, - line.opacityHigh { - stroke-opacity: 0.8; - } - g.time-shift-0 path, - line.time-shift-0 { - stroke-dasharray: 5, 5; - } - g.time-shift-1 path, - line.time-shift-1 { - stroke-dasharray: 1, 5; - } - g.time-shift-2 path, - line.time-shift-3 { - stroke-dasharray: 5, 1; - } - g.time-shift-3 path, - line.time-shift-3 { - stroke-dasharray: 5, 1; - } - g.time-shift-4 path, - line.time-shift-4 { - stroke-dasharray: 5, 10; - } - g.time-shift-5 path, - line.time-shift-5 { - stroke-dasharray: 0.9; - } - g.time-shift-6 path, - line.time-shift-6 { - stroke-dasharray: 15, 10, 5; - } - g.time-shift-7 path, - line.time-shift-7 { - stroke-dasharray: 15, 10, 5, 10; - } - g.time-shift-8 path, - line.time-shift-8 { - stroke-dasharray: 15, 10, 5, 10, 15; - } - g.time-shift-9 path, - line.time-shift-9 { - stroke-dasharray: 5, 5, 1, 5; - } - .nv-noData.body { - font-size: ${({ theme }) => theme.fontSize}; - font-weight: ${({ theme }) => theme.fontWeightNormal}; - } - } - .superset-legacy-chart-nvd3-tr-highlight { - border-top: 1px solid; - border-bottom: 1px solid; - font-weight: ${({ theme }) => theme.fontWeightStrong}; - } - .superset-legacy-chart-nvd3-tr-total { - font-weight: ${({ theme }) => theme.fontWeightStrong}; - } - .nvtooltip { - .tooltip-header { - white-space: nowrap; - font-weight: ${({ theme }) => theme.fontWeightStrong}; - } - tbody tr:not(.tooltip-header) td:nth-of-type(2) { - word-break: break-word; - } - } - .d3-tip.nv-event-annotation-layer-table, - .d3-tip.nv-event-annotation-layer-NATIVE { - width: 200px; - border-radius: 2px; - background-color: ${({ theme }) => theme.colorBgContainer}; - fill-opacity: 0.6; - margin: ${({ theme }) => theme.sizeUnit * 2}px; - padding: ${({ theme }) => theme.sizeUnit * 2}px; - color: ${({ theme }) => theme.colorTextLightSolid}; - &:after { - content: '\\25BC'; - font-size: ${({ theme }) => theme.fontSize}; - color: ${({ theme }) => theme.colorText}; - position: absolute; - bottom: -14px; - left: 94px; - } - } -`; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/controlPanel.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/controlPanel.ts deleted file mode 100644 index 1a338a91e63..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/controlPanel.ts +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { t } from '@apache-superset/core/translation'; -import { QueryFormData } from '@superset-ui/core'; -import { - ControlPanelConfig, - D3_FORMAT_OPTIONS, - getStandardizedControls, - sections, -} from '@superset-ui/chart-controls'; -import { - lineInterpolation, - showLegend, - xAxisLabel, - bottomMargin, - xAxisFormat, - yLogScale, - yAxisBounds, - xAxisShowMinmax, - yAxisShowMinmax, - yAxisLabel, - leftMargin, -} from '../NVD3Controls'; - -const config: ControlPanelConfig = { - controlPanelSections: [ - sections.legacyTimeseriesTime, - { - label: t('Query'), - expanded: true, - controlSetRows: [ - ['metric'], - ['adhoc_filters'], - [ - { - name: 'freq', - config: { - type: 'SelectControl', - label: t('Frequency'), - default: 'W-MON', - freeForm: true, - clearable: false, - choices: [ - ['AS', t('Year (freq=AS)')], - ['52W-MON', t('52 weeks starting Monday (freq=52W-MON)')], - ['W-SUN', t('1 week starting Sunday (freq=W-SUN)')], - ['W-MON', t('1 week starting Monday (freq=W-MON)')], - ['D', t('Day (freq=D)')], - ['4W-MON', t('4 weeks (freq=4W-MON)')], - ], - description: t( - `The periodicity over which to pivot time. Users can provide - "Pandas" offset alias. - Click on the info bubble for more details on accepted "freq" expressions.`, - ), - tooltipOnClick: () => { - window.open( - 'https://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases', - ); - }, - }, - }, - ], - ], - }, - { - label: t('Chart Options'), - expanded: true, - controlSetRows: [ - [showLegend], - [lineInterpolation], - ['color_picker', null], - ], - }, - { - label: t('X Axis'), - expanded: true, - controlSetRows: [ - [xAxisLabel], - [bottomMargin], - [xAxisShowMinmax], - [ - { - name: xAxisFormat.name, - config: { - ...xAxisFormat.config, - default: 'SMART_NUMBER', - choices: D3_FORMAT_OPTIONS, - }, - }, - ], - ], - }, - { - label: t('Y Axis'), - expanded: true, - controlSetRows: [ - [yAxisLabel], - [leftMargin], - [yAxisShowMinmax], - [yLogScale], - ['y_axis_format'], - [yAxisBounds], - ], - }, - ], - controlOverrides: { - metric: { - clearable: false, - }, - }, - formDataOverrides: (formData: QueryFormData) => ({ - ...formData, - metric: getStandardizedControls().shiftMetric(), - }), -}; - -export default config; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/index.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/index.ts deleted file mode 100644 index bf98ec9a44e..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/TimePivot/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { t } from '@apache-superset/core/translation'; -import { ChartMetadata, ChartPlugin } from '@superset-ui/core'; -import transformProps from '../transformProps'; -import thumbnail from './images/thumbnail.png'; -import thumbnailDark from './images/thumbnail-dark.png'; -import example from './images/example.jpg'; -import exampleDark from './images/example-dark.jpg'; -import controlPanel from './controlPanel'; - -const metadata = new ChartMetadata({ - category: t('Evolution'), - credits: ['http://nvd3.org'], - description: t( - 'Compares metrics between different time periods. Displays time series data across multiple periods (like weeks or months) to show period-over-period trends and patterns.', - ), - exampleGallery: [{ url: example, urlDark: exampleDark }], - name: t('Time-series Period Pivot'), - tags: [t('Legacy'), t('Time'), t('nvd3')], - thumbnail, - thumbnailDark, - useLegacyApi: true, -}); - -export default class TimePivotChartPlugin extends ChartPlugin { - constructor() { - super({ - loadChart: () => import('../ReactNVD3'), - metadata, - transformProps, - controlPanel, - }); - } -} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/preset.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/preset.ts deleted file mode 100644 index 09a636b3934..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/preset.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { Preset, VizType } from '@superset-ui/core'; -import BubbleChartPlugin from './Bubble'; -import BulletChartPlugin from './Bullet'; -import CompareChartPlugin from './Compare'; -import TimePivotChartPlugin from './TimePivot'; - -export default class NVD3ChartPreset extends Preset { - constructor() { - super({ - name: 'NVD3 charts', - plugins: [ - new BubbleChartPlugin().configure({ key: VizType.LegacyBubble }), - new BulletChartPlugin().configure({ key: VizType.Bullet }), - new CompareChartPlugin().configure({ key: VizType.Compare }), - new TimePivotChartPlugin().configure({ key: VizType.TimePivot }), - ], - }); - } -} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/transformProps.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/transformProps.ts deleted file mode 100644 index edcc82a7e18..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/transformProps.ts +++ /dev/null @@ -1,206 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// @ts-nocheck -- legacy transformProps with loosely-typed formData from ChartProps -import { ChartProps, VizType } from '@superset-ui/core'; -import isTruthy from './utils/isTruthy'; -import { - tokenizeToNumericArray, - tokenizeToStringArray, -} from './utils/tokenize'; -import { formatLabel } from './utils'; - -const NOOP = () => {}; - -interface DatasourceMetric { - d3format?: string; - metric_name?: string; -} - -interface NVD3Datasource { - metrics?: DatasourceMetric[]; - verboseMap?: Record; -} - -const grabD3Format = ( - datasource: NVD3Datasource | undefined, - targetMetric: string, -): string | undefined => { - let foundFormatter: string | undefined; - const { metrics = [] } = datasource || {}; - metrics.forEach(metric => { - if (metric.d3format && metric.metric_name === targetMetric) { - foundFormatter = metric.d3format; - } - }); - - return foundFormatter; -}; - -export default function transformProps(chartProps: ChartProps) { - const { - width, - height, - annotationData, - datasource, - formData, - hooks, - queriesData, - } = chartProps; - - const { onAddFilter = NOOP, onError = NOOP } = hooks; - - const { - annotationLayers, - barStacked, - bottomMargin, - colorPicker, - colorScheme, - comparisonType, - contribution, - donut, - entity, - labelsOutside, - leftMargin, - lineInterpolation, - maxBubbleSize, - metric, - orderBars, - pieLabelType, - reduceXTicks, - richTooltip, - sendTimeRange, - showBarValue, - showBrush, - showControls, - showLabels, - showLegend, - showMarkers, - size, - stackedStyle, - vizType, - x, - xAxisFormat, - xAxisLabel, - xAxisShowminmax, - xLogScale, - xTicksLayout, - y, - yAxisBounds, - yAxis2Bounds, - yAxisLabel, - yAxisFormat, - yAxisShowminmax, - yAxis2Showminmax, - yLogScale, - sliceId, - } = formData; - - let { - markerLabels, - markerLines, - markerLineLabels, - markers, - numberFormat, - rangeLabels, - ranges, - } = formData; - - const rawData = queriesData[0].data || []; - const data = Array.isArray(rawData) - ? rawData.map(row => ({ - ...row, - values: Array.isArray(row.values) - ? row.values.map(value => ({ ...value })) - : row.values, - key: formatLabel(row.key, datasource.verboseMap), - })) - : rawData; - - if (vizType === VizType.Pie) { - numberFormat = numberFormat || grabD3Format(datasource, metric); - } else if (vizType === VizType.Bullet) { - ranges = tokenizeToNumericArray(ranges) || [0, data.measures * 1.1]; - rangeLabels = tokenizeToStringArray(rangeLabels); - markerLabels = tokenizeToStringArray(markerLabels); - markerLines = tokenizeToNumericArray(markerLines); - markerLineLabels = tokenizeToStringArray(markerLineLabels); - markers = tokenizeToNumericArray(markers); - } - - return { - width, - height, - data, - annotationData, - annotationLayers, - areaStackedStyle: stackedStyle, - baseColor: colorPicker, - bottomMargin, - colorScheme, - comparisonType, - contribution, - entity, - isBarStacked: barStacked, - isDonut: donut, - isPieLabelOutside: labelsOutside, - leftMargin, - lineInterpolation, - markerLabels, - markerLines, - markerLineLabels, - markers, - maxBubbleSize: parseInt(maxBubbleSize, 10), - numberFormat, - onBrushEnd: isTruthy(sendTimeRange) - ? timeRange => { - onAddFilter('__time_range', timeRange, false, true); - } - : undefined, - onError, - orderBars, - pieLabelType, - rangeLabels, - ranges, - reduceXTicks, - showBarValue, - showBrush, - showControls, - showLabels, - showLegend, - showMarkers, - sizeField: size, - useRichTooltip: richTooltip, - vizType, - xAxisFormat, - xAxisLabel, - xAxisShowMinMax: xAxisShowminmax, - xField: x, - xIsLogScale: xLogScale, - xTicksLayout, - yAxisFormat, - yAxisBounds, - yAxis2Bounds, - yAxisLabel, - yAxisShowMinMax: yAxisShowminmax, - yAxis2ShowMinMax: yAxis2Showminmax, - yField: y, - yIsLogScale: yLogScale, - sliceId, - }; -} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/utils.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/utils.ts deleted file mode 100644 index 04e235e01da..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/utils.ts +++ /dev/null @@ -1,354 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// @ts-nocheck -- legacy file heavily dependent on untyped d3 v3 and nvd3 APIs -import d3 from 'd3'; -import d3tip from 'd3-tip'; -import dompurify from 'dompurify'; -import { - SMART_DATE_ID, - getTimeFormatter, - getNumberFormatter, -} from '@superset-ui/core'; -// Regexp for the label added to time shifted series -// (1 hour offset, 2 days offset, etc.) -const TIME_SHIFT_PATTERN = /\d+ \w+ offset/; - -const ANIMATION_TIME = 1000; - -export function cleanColorInput(value) { - // for superset series that should have the same color - return String(value) - .trim() - .replace(' (right axis)', '') - .split(', ') - .filter(k => !TIME_SHIFT_PATTERN.test(k)) - .join(', '); -} - -/** - * If format is smart_date, format date - * Otherwise, format number with the given format name - * @param {*} format - */ -export function getTimeOrNumberFormatter(format) { - return format === SMART_DATE_ID - ? getTimeFormatter(SMART_DATE_ID) - : getNumberFormatter(format); -} - -export function drawBarValues(svg, data, stacked, axisFormat) { - const format = getNumberFormatter(axisFormat); - const countSeriesDisplayed = data.filter(d => !d.disabled).length; - const totalStackedValues = - stacked && data.length !== 0 - ? data[0].values.map((bar, iBar) => { - const bars = data - .filter(series => !series.disabled) - .map(series => series.values[iBar]); - - return d3.sum(bars, d => d.y); - }) - : []; - svg.selectAll('.bar-chart-label-group').remove(); - setTimeout(() => { - svg.selectAll('.bar-chart-label-group').remove(); - const groupLabels = svg - .select('g.nv-barsWrap') - .append('g') - .attr('class', 'bar-chart-label-group'); - svg - .selectAll('g.nv-group') - .filter((d, i) => !stacked || i === countSeriesDisplayed - 1) - .selectAll('rect') - .each(function each(d, index) { - const rectObj = d3.select(this); - const transformAttr = rectObj.attr('transform'); - const xPos = parseFloat(rectObj.attr('x')); - const yPos = parseFloat(rectObj.attr('y')); - const rectWidth = parseFloat(rectObj.attr('width')); - const rectHeight = parseFloat(rectObj.attr('height')); - const textEls = groupLabels - .append('text') - .text(format(stacked ? totalStackedValues[index] : d.y)) - .attr('transform', transformAttr) - .attr('class', 'bar-chart-label'); - - // fine tune text position - const bbox = textEls.node().getBBox(); - const labelWidth = bbox.width; - const labelHeight = bbox.height; - textEls.attr('x', xPos + rectWidth / 2 - labelWidth / 2); - if (rectObj.attr('class').includes('positive')) { - textEls.attr('y', yPos - 5); - } else { - textEls.attr('y', yPos + rectHeight + labelHeight); - } - }); - }, ANIMATION_TIME); -} - -// Formats the series key to account for a possible NULL value -function getFormattedKey(seriesKey, shouldDompurify) { - if (seriesKey === '') { - return `<${seriesKey.slice(1, -1)}>`; - } - - return shouldDompurify ? dompurify.sanitize(seriesKey) : seriesKey; -} - -export function generateCompareTooltipContent(d, valueFormatter) { - let tooltip = ''; - tooltip += - "'; - d.series.sort((a, b) => (a.value >= b.value ? -1 : 1)); - d.series.forEach(series => { - const key = getFormattedKey(series.key, true); - tooltip += - `` + - `' + - `` + - `` + - ''; - }); - tooltip += '
" + - `${d.value}` + - '
` + - '
' + - '
${key}${valueFormatter(series.value)}
'; - - return dompurify.sanitize(tooltip); -} - -export function generateMultiLineTooltipContent(d, xFormatter, yFormatters) { - const tooltipTitle = xFormatter(d.value); - let tooltip = ''; - - tooltip += - "'; - - d.series.forEach((series, i) => { - const yFormatter = yFormatters[i]; - const key = getFormattedKey(series.key, true); - tooltip += - "` + - `` + - ``; - }); - - tooltip += '
" + - `${tooltipTitle}` + - '
" + - `
${key}${yFormatter(series.value)}
'; - - return dompurify.sanitize(tooltip); -} - -export function generateTimePivotTooltip(d, xFormatter, yFormatter) { - const tooltipTitle = xFormatter(d.value); - let tooltip = ''; - - tooltip += - "'; - - d.series.forEach(series => { - if (series.highlight) { - let label = ''; - if (series.key === 'current') { - label = series.key; - } else { - label = `${series.key} of the selected frequency:`; - } - tooltip += - "` + - `` + - ``; - } - }); - - tooltip += '
" + - `${tooltipTitle}` + - '
" + - `
${label}${yFormatter(series.value)}
'; - - return dompurify.sanitize(tooltip); -} - -function getLabel(stringOrObjectWithLabel) { - return stringOrObjectWithLabel.label || stringOrObjectWithLabel; -} - -function createHTMLRow(col1, col2) { - return `${col1}${col2}`; -} - -export function generateBubbleTooltipContent({ - point, - entity, - xField, - yField, - sizeField, - xFormatter, - yFormatter, - sizeFormatter, -}) { - let s = ''; - s += - `'; - s += createHTMLRow(getLabel(xField), xFormatter(point.x)); - s += createHTMLRow(getLabel(yField), yFormatter(point.y)); - s += createHTMLRow(getLabel(sizeField), sizeFormatter(point.size)); - s += '
` + - `${point[entity]} (${point.group})` + - '
'; - - return dompurify.sanitize(s); -} - -// shouldRemove indicates whether the nvtooltips should be removed from the DOM -export function hideTooltips(shouldRemove) { - const targets = document.querySelectorAll('.nvtooltip'); - if (targets.length > 0) { - // Only set opacity to 0 when hiding tooltips so they would reappear - // on hover, which sets the opacity to 1 - targets.forEach(t => { - if (shouldRemove) { - t.remove(); - } else { - // eslint-disable-next-line no-param-reassign - t.style.opacity = 0; - } - }); - } -} - -export function generateTooltipClassName(uuid) { - return `tooltip-${uuid}`; -} - -export function removeTooltip(uuid) { - const classSelector = `.${generateTooltipClassName(uuid)}`; - const target = document.querySelector(classSelector); - if (target) { - target.remove(); - } -} - -export function wrapTooltip(chart) { - const tooltipLayer = - chart.useInteractiveGuideline && chart.useInteractiveGuideline() - ? chart.interactiveLayer - : chart; - const tooltipGeneratorFunc = tooltipLayer.tooltip.contentGenerator(); - tooltipLayer.tooltip.contentGenerator(d => { - // The nvd3-fork default contentGenerator builds tooltip HTML with - // unescaped series keys (and feeds them into the tooltip's `.html()` - // sink at render time). Run the final string through DOMPurify so - // charts that do NOT install a custom contentGenerator (Line, Bar, - // Area, Pie, BoxPlot, etc.) cannot execute stored payloads in - // column or series names. Custom contentGenerators set elsewhere in - // this module already return sanitized output, making this a - // belt-and-braces wrap. - const tooltip = `
${tooltipGeneratorFunc(d)}
`; - return dompurify.sanitize(tooltip); - }); -} - -// Builds the sanitized HTML for an annotation layer's tooltip. Title and -// description values come from the annotation data source, so the output is -// run through dompurify before being inserted into the DOM by d3-tip. -export function generateAnnotationTooltipContent(layer, d) { - const title = - d[layer.titleColumn] && d[layer.titleColumn].length > 0 - ? `${d[layer.titleColumn]} - ${layer.name}` - : layer.name; - const body = Array.isArray(layer.descriptionColumns) - ? layer.descriptionColumns.map(c => d[c]) - : Object.values(d); - - return dompurify.sanitize( - `
${title}

${body.join(', ')}
`, - ); -} - -export function tipFactory(layer) { - return d3tip() - .attr('class', `d3-tip ${layer.annotationTipClass || ''}`) - .direction('n') - .offset([-5, 0]) - .html(d => (d ? generateAnnotationTooltipContent(layer, d) : '')); -} - -export function getMaxLabelSize(svg, axisClass) { - // axis class = .nv-y2 // second y axis on dual line chart - // axis class = .nv-x // x axis on time series line chart - const tickTexts = svg.selectAll(`.${axisClass} g.tick text`); - if (tickTexts.length > 0) { - const lengths = tickTexts[0].map(text => text.getComputedTextLength()); - - return Math.ceil(Math.max(0, ...lengths)); - } - - return 0; -} - -export function formatLabel(input, verboseMap = {}) { - // The input for label may be a string or an array of string - // When using the time shift feature, the label contains a '---' in the array - const verboseLookup = s => verboseMap[s] || s; - - return Array.isArray(input) && input.length > 0 - ? input - .map(l => (TIME_SHIFT_PATTERN.test(l) ? l : verboseLookup(l))) - .join(', ') - : verboseLookup(input); -} - -export function stringifyTimeRange(extent) { - if (extent.some(d => d.toISOString === undefined)) { - return null; - } - - return extent.map(d => d.toISOString().slice(0, -1)).join(' : '); -} - -export function setAxisShowMaxMin(axis, showminmax) { - if (axis && axis.showMaxMin && showminmax !== undefined) { - axis.showMaxMin(showminmax); - } -} - -export function computeYDomain(data) { - if (Array.isArray(data) && data.length > 0 && Array.isArray(data[0].values)) { - const extents = data - .filter(d => !d.disabled) - .map(row => d3.extent(row.values, v => v.y)); - const minOfMin = d3.min(extents, ([min]) => min); - const maxOfMax = d3.max(extents, ([, max]) => max); - - return [minOfMin, maxOfMax]; - } - - return [0, 1]; -} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/vendor/superset/AnnotationTypes.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/vendor/superset/AnnotationTypes.ts deleted file mode 100644 index bafea70f29b..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/vendor/superset/AnnotationTypes.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// @ts-nocheck -- vendor file; not fully typed -import { t } from '@apache-superset/core/translation'; - -function extractTypes(metadata) { - return Object.keys(metadata).reduce((prev, key) => { - const result = prev; - result[key] = key; - - return result; - }, {}); -} - -export const ANNOTATION_TYPES_METADATA = { - FORMULA: { - value: 'FORMULA', - label: t('Formula'), - }, - EVENT: { - value: 'EVENT', - label: t('Event'), - supportNativeSource: true, - }, - INTERVAL: { - value: 'INTERVAL', - label: t('Interval'), - supportNativeSource: true, - }, - TIME_SERIES: { - value: 'TIME_SERIES', - label: t('Time Series'), - }, -}; - -export const ANNOTATION_TYPES = extractTypes(ANNOTATION_TYPES_METADATA); - -export const DEFAULT_ANNOTATION_TYPE = ANNOTATION_TYPES.FORMULA; - -export const ANNOTATION_SOURCE_TYPES_METADATA = { - NATIVE: { - value: 'NATIVE', - label: 'Superset annotation', - }, -}; - -export const ANNOTATION_SOURCE_TYPES = extractTypes( - ANNOTATION_SOURCE_TYPES_METADATA, -); - -export function requiresQuery(annotationSourceType) { - return !!annotationSourceType; -} - -const NATIVE_COLUMN_NAMES = { - descriptionColumns: ['long_descr'], - intervalEndColumn: 'end_dttm', - timeColumn: 'start_dttm', - titleColumn: 'short_descr', -}; - -export function applyNativeColumns(annotation) { - if (annotation.sourceType === ANNOTATION_SOURCE_TYPES.NATIVE) { - return { ...annotation, ...NATIVE_COLUMN_NAMES }; - } - - return annotation; -} - -export default ANNOTATION_TYPES; diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/test/TimePivot/controlPanel.test.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/test/TimePivot/controlPanel.test.ts deleted file mode 100644 index 1830601713a..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/test/TimePivot/controlPanel.test.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { SqlaFormData } from '@superset-ui/core'; -import * as ChartControls from '@superset-ui/chart-controls'; -import controlPanel from '../../src/TimePivot/controlPanel'; - -const { __mockShiftMetric } = ChartControls as typeof ChartControls & { - __mockShiftMetric: jest.Mock; -}; - -jest.mock('@superset-ui/core', () => ({ - ...jest.requireActual('@superset-ui/core'), - t: (str: string) => str, -})); - -jest.mock('@superset-ui/chart-controls', () => { - const original = jest.requireActual('@superset-ui/chart-controls'); - const mockShiftMetric = jest.fn(() => 'shiftedMetric'); - return { - ...original, - getStandardizedControls: () => ({ - shiftMetric: mockShiftMetric, - }), - __mockShiftMetric: mockShiftMetric, - }; -}); - -describe('TimePivot Control Panel Config', () => { - test('should override formData metric using getStandardizedControls', () => { - const dummyFormData = { someProp: 'test' } as unknown as SqlaFormData; - const newFormData = controlPanel.formDataOverrides!(dummyFormData); - - // The original properties are spread correctly. - expect(newFormData.someProp).toBe('test'); - // The metric property should be replaced by the output of shiftMetric. - expect(newFormData.metric).toBe('shiftedMetric'); - - // Ensure that the mockShiftMetric function was called. - expect(__mockShiftMetric).toHaveBeenCalled(); - }); -}); diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/test/utils.test.ts b/superset-frontend/plugins/legacy-preset-chart-nvd3/test/utils.test.ts deleted file mode 100644 index 04c3f799787..00000000000 --- a/superset-frontend/plugins/legacy-preset-chart-nvd3/test/utils.test.ts +++ /dev/null @@ -1,358 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { - getTimeFormatterRegistry, - SMART_DATE_ID, - createSmartDateFormatter, -} from '@superset-ui/core'; - -import { - computeYDomain, - generateAnnotationTooltipContent, - generateBubbleTooltipContent, - generateMultiLineTooltipContent, - getTimeOrNumberFormatter, - formatLabel, - tipFactory, -} from '../src/utils'; - -const DATA = [ - { - key: ['East Asia & Pacific'], - values: [ - { - x: -315619200000.0, - y: 1031863394.0, - }, - { - x: -283996800000.0, - y: 1034767718.0, - }, - ], - }, - { - key: ['South Asia'], - values: [ - { - x: -315619200000.0, - y: 572036107.0, - }, - { - x: -283996800000.0, - y: 584143236.0, - }, - ], - }, - { - key: ['Europe & Central Asia'], - values: [ - { - x: -315619200000.0, - y: 660881033.0, - }, - { - x: -283996800000.0, - y: 668526708.0, - }, - ], - }, -]; - -const DATA_WITH_DISABLED_SERIES = [ - { - disabled: true, - key: ['East Asia & Pacific'], - values: [ - { - x: -315619200000.0, - y: 1031863394.0, - }, - { - x: -283996800000.0, - y: 1034767718.0, - }, - ], - }, - { - disabled: true, - key: ['South Asia'], - values: [ - { - x: -315619200000.0, - y: 572036107.0, - }, - { - x: -283996800000.0, - y: 584143236.0, - }, - ], - }, - { - key: ['Europe & Central Asia'], - values: [ - { - x: -315619200000.0, - y: 660881033.0, - }, - { - x: -283996800000.0, - y: 668526708.0, - }, - ], - }, -]; - -describe('nvd3/utils', () => { - beforeEach(() => { - getTimeFormatterRegistry().registerValue( - SMART_DATE_ID, - createSmartDateFormatter(), - ); - }); - - describe('generateMultiLineTooltipContent()', () => { - const identity = (value: any) => value; - - test('renders the series key in the tooltip markup', () => { - const tooltip = generateMultiLineTooltipContent( - { - value: 'x-value', - series: [{ key: 'Region A', color: '#fff', value: 1 }], - }, - identity, - [identity], - ); - expect(tooltip).toContain('Region A'); - }); - - test('strips a script payload from a malicious series key', () => { - const tooltip = generateMultiLineTooltipContent( - { - value: 'x-value', - series: [ - { - key: '', - color: '#fff', - value: 1, - }, - ], - }, - identity, - [identity], - ); - // DOMPurify removes the event handler that would execute on render. - expect(tooltip).not.toContain('onerror'); - expect(tooltip).not.toContain('alert(1)'); - }); - }); - - describe('getTimeOrNumberFormatter(format)', () => { - test('is a function', () => { - expect(typeof getTimeOrNumberFormatter).toBe('function'); - }); - test('returns a date formatter if format is smart_date', () => { - const time = new Date(Date.UTC(2018, 10, 21, 22, 11)); - // @ts-expect-error -- getTimeOrNumberFormatter doesn't distinguish return types; accepts Date at runtime - expect(getTimeOrNumberFormatter('smart_date')(time)).toBe('10:11'); - }); - test('returns a number formatter otherwise', () => { - expect(getTimeOrNumberFormatter('.3s')(3000000)).toBe('3.00M'); - expect(getTimeOrNumberFormatter(undefined)(3000100)).toBe('3M'); - }); - }); - - describe('formatLabel()', () => { - const verboseMap = { - foo: 'Foo', - bar: 'Bar', - }; - - test('formats simple labels', () => { - expect(formatLabel('foo')).toBe('foo'); - expect(formatLabel(['foo'])).toBe('foo'); - expect(formatLabel(['foo', 'bar'])).toBe('foo, bar'); - }); - test('formats simple labels with lookups', () => { - expect(formatLabel('foo', verboseMap)).toBe('Foo'); - expect(formatLabel('baz', verboseMap)).toBe('baz'); - expect(formatLabel(['foo'], verboseMap)).toBe('Foo'); - expect(formatLabel(['foo', 'bar', 'baz'], verboseMap)).toBe( - 'Foo, Bar, baz', - ); - }); - test('deals with time shift properly', () => { - expect(formatLabel(['foo', '1 hour offset'], verboseMap)).toBe( - 'Foo, 1 hour offset', - ); - expect( - formatLabel(['foo', 'bar', 'baz', '2 hours offset'], verboseMap), - ).toBe('Foo, Bar, baz, 2 hours offset'); - }); - }); - - describe('computeYDomain()', () => { - test('works with invalid data', () => { - expect(computeYDomain('foo')).toEqual([0, 1]); - }); - - test('works with all series enabled', () => { - expect(computeYDomain(DATA)).toEqual([572036107.0, 1034767718.0]); - }); - - test('works with some series disabled', () => { - expect(computeYDomain(DATA_WITH_DISABLED_SERIES)).toEqual([ - 660881033.0, 668526708.0, - ]); - }); - }); - - // ------------------------------------------------------------------ - // Tooltip HTML sanitisation (XSS regression). - // Each helper below feeds user-controlled column values into a - // d3 / nvd3 .html() sink; the sanitised return must strip dangerous - // markup so a stored payload cannot execute on hover. - // ------------------------------------------------------------------ - - describe('generateBubbleTooltipContent() sanitises user input', () => { - test('strips ', - x: 1, - y: 2, - size: 3, - }, - entity: 'entity', - xField: 'x', - yField: 'y', - sizeField: 'size', - xFormatter: (v: number) => String(v), - yFormatter: (v: number) => String(v), - sizeFormatter: (v: number) => String(v), - }); - expect(html).not.toMatch(/', - color: 'red', - value: 1, - }, - ], - }, - (v: number) => String(v), - [(v: number) => String(v)], - ); - expect(html).not.toMatch(/payload', - }; - const html = tip.html()(datum); - expect(html).not.toMatch(/', - }); - expect(html).not.toContain('

9BKD~dP>!Ie-wY6=LCxmlYVu&k-3Kbe4U40(!-8}k2Z{)-06OhI$ znMnun&j%k;JNJ~H-Os(4f zHjHU|7CWH$iPD zB4w+BqAA|72ZP>wTo?3zJEkc3y6{$q{6>R8K2CwUn2GwboMdXt@i-z_eehuX-RET< zN?w=lR>7tP`c(}x!;Vd=AC2ensW}rcsLwzpQ-tAHvk)2!uSWPK|5xJ3Ro1;CgNh6t z>0D)pyidWBG+-`45B_>ns5dkPt;A>$@|Og#pwkicGZLho1J$F&< zzsSMyU{d4!v*#%!H?C*?13o)$-#_@;&CW#pjiu`*;s09-6!_*s)A&3?=f4Z!lYn|8 z#Y)cq3%GHkp{E<0MQl_;vdN<}#;m+ZpEEJ#b(RDA8VujAD&#f%XVl2}BR$b4c4CH- zKi-)6dU_ZYIJ%8oU%N+~4@ANDid_8d#jgGbAX2{9O`vm`DI?1*;zv?;t5QF*F=o3p zw)2lJz?5f{&~M$&eOQ5U9Gn@4h_fygL&r_T4PTE36qlJnS9~vU(2f@CnetIsH1Dnvh0b-XoDvUTpF!4;IGxS|cU zc=LsD{+66M-LNN*H`cyw>)gz@`rZWJpxSWhiw4#{;6E!bT73b{e>q$l>f?MP^zB|uQ4y3TpXk*1H>fb z6N{Nbr$gos)GmHt*BR3#efOA^#3{fg(*L-dviL@NNpVP!Rmz~LbS<&&Y2O;NVi9FU z>>K{f^gV|i|HKgwDT4JJiV3cO1 zCY?Bz@aAeke_i~CBaPa1{)|;huD>!#pvls4^VyJX(E!-kuC9{MVel7IrH5%D% zaA>Qo91A6=`8s)W-d@~r-k@UmuF1>nwKNizw^LGK#&%V0M$6!+8bzSx*%mhGcs%u? z@XUm`S$YLjvAE6=AWFuPG}hc{YCUQ|`2S z=Y%0Gu`W7a*FTOclul)yg$oaVS6zp@W+_H;-E)lIDeJKmz^d=< zKLG2rt-Zc;u~m5mFr=kqbSgPTV1?X~WYNCWK`7Q4&(-*NMu0|zWu!0n;{X814+rQ>B>N0Pf! zS0fD-a)}*j!FfvX0=RrbtWAg~ZM7}Kg-Y(TD;5zV z02*bRGX8SmdCgm^n{Ct-2Aug(qm{je?Iy>YVfDKCQ|9(;QD4Rk$HpXB;xU-peSK?g z#_ziLQZf_w{51=S;DC0o!>J%EoJw>4LRqcbO}|tc=)HU7VK)%vP}PBF*Yz6AyM>r2 z)a~7T8@P+LV#j?~^fwA%W`HW(CFiYG4pzG$nA0PE9rR!$CM{O^Y@WoI`yi&}0ItD; zfK#>x(DPu+tXB7Vn%m@`u-+lgmQ#ryDjW6*F)7D$LA5arA*4=Bt9e(2%(bj%i4@*n zH=7>WL?t4OzVK_xu6?sv(4 zak^}qnv9z@Vdxv{oDSLY>x3{L$JB2qo^BJ`D&_Cq7-%o$vN2G5-vFe@kmZ91i%HWC& zY|;LV&ZYofggF$z(*FxH{=|*HYeo6!+4idhmh5R5aJwFx!_4^+KH7YklaD&7fJ2fG zh0MOtgwoNh=hijDxb(6@1@Lk`4q4M|{vXqN#i*t$9kr zr*H#(q*$D}LPuG!EC2ZZ4^bYl+?ET>T0rntQA9iRT)pf(&ABCvbJLF^?)#OIY8dXb z4>iBf{NRjyUL$K@wey~)>lGhpA=-8{H#j!P#$zvGS+u|3W}#pGBXh8|=4f-ircieZ zO7`4pzG-K#y^HiO)G__w-Sf)mxM2O~pLs{Ke<|^;oPxdN+hV-R|5h+Bmp|+}h@^`T z3tG|iLJGgr4l3yv7jlDv`M=8O>i>6AY8JrL?3uU zqD_w9cpGq0E5)~TEAcy5hDiv|fgk0SNGkdY-^3+i#Kgorg;t}qbn0U<-&Zhd8%39& z)|b_>cnb`d3gC(;h(nRpdOgccL%wtOOl{ornz;pfb$| z^VfvbKRVI^j~pwniQei)r=?IDs9r|0XT+#lyQa)NQ>iJM+N5@-xGB^bEoW98za_iI>%m zBj|xz*5&k~W_u@MAL0y{GvBT@p|d#J5zI|ne-&)!O(trY+Q#-G@awWc@A3Xw6BX92 zbOZOksVxX=z%^LUe0CdEe`tVAO~g72$>WN$3S>{!P@yHeMMX7IpeLA*gvsYRD_<$! z4zwbnlam`$RB3_c4xS+WVGhD(x|zV_Z$0VBe0nQ>!;Ny>UE^xsoSUEgXJ$x z6TsEW3#i`Rqgt9hzKR&0H|6h18IWzcq`T5TQp-}?d%4jR?MHsItnI=xj5zYBj_32H zs`uFd?*z{6#sl8_l-AB-6B8T-nGt;w}-^PdN<4|a^&;T-m z$rzCypME!f^Y$>;l-b>y=nXD5cAzAsF8;EbVQL-En2`BAF4_+n4LmqT;000cj`*ih zFeQf~6)y25`{uq7>;Ei9B%nroFXHp@qC zooSk=<}?%fx_O56t0Fz#t7o32oknirNO$-W3l|C2|Lf;EP^5iz#IOl3A`kh(W&UDl zvppKFgyHmVpV(arhim8mr0W^p6+1hbib;ih>Hy6Fj|{x>^Ra;%m{}HlcIOOVJuW25 z^OGm14$)F%diVoPCqUe^@H}JEbIHrgcy2sgvcrFRW!O9ED0Zzr0kbR9IiF@g-)b=? za%HWyYxjNqtkRxAM7}lPWo_dBif#VUk;$)xcm>BD2v)HJ;55amH=9$o#U($DNyFAO zUNSm2PE~Zwa|4cRyx|#2SCu8BGK-?F>gV20&%Ljy_H;Cg>$Pk!SQ>ZmWVDfWnK=;> zMdqfJ3%mTa!0WJa;M0awyT}&Gz)vd|d65qOP02?p)vCNaRwLncSNL$Qp^t_m{iDcW zk)RIA6!H7PcI(;EE29`y>u{x5*0fg{9V@pC3@!*ZJ-fvbNW!!_!-U_TQ`_LjXU%U? zR?O1vXq-P3Ep}owU6qB=w@NSE1c~wp^KTo58Aue!<}q()@4n|S`S^Z*z*B1%8oq7n zH=LDV!^Bv6UN6sl3-LrFzih&5xuQM=&&{!jY%a0m236FBra-88H8EGy?~7J`ii2;R zyJ7S|q;~hH%y%qRr%QOdd!NOSRthK`8B%o{l; zVi(^sYiBq(VHTtV&@XQuOMZK$s?Z@ACvU&j# zp*U?6&?`%zes3e)qGw@WJIt7J1kukRXqJP8uffK3U(|cJ`p@&jh%|tgFr)aNP~qPV z6|N2_32zn9DfewOYty?Kr93!m1*QeM9yB&@x*3j_1wx{j^BD)1lRCIZ7q>{s=h(aKBTSrq%Ys6%QljBn`7`m zv~W+woQm9(6FNRLl<%y>Snar@K|D3Qi~M%FwIzUK>@s(SbbDp>GevH21*)|_V5q#hfW^%qwE+9)3;0x2q!@CNn+V^br zVX7H|w{t#s05>)!Lg^YW;Zrflu-Wz$LD+dHkGzA3Vh2QY=zax~husubtHNmS0`N}p zH=aE9hwgm{*NOxPgZfKHkH$YgsUJzxqJiHO;D2pa_S`@|UZ8lQpiKgM%{qMU`==`p z-U}VsqZliI$H7@OY8Z}Wdd`=6m_hQ;qPd-3`$`VE*Pqqce2LeL)q+n>1W z@3#NCSLdI*FZ%Bpe{aOOyXN9}eavR?IdsvQC6vk5wM1Y)K7Y|XZ$8#!P!msDSW<#ApDruzRQ@4cg%OxN|{P?RP` zdI#xMM0$;=G!c+4T|~O{4uL2r9U>qgAViw<-g^fT0qMO3kPZnV1PSqb-RI2NGqY#U zp8ebBkF(atT95?t2YJi$-1l`~C4_FZy(h@7^M<+q2_SCSqm$tssd3}3PvkAzvXC4p zHevxUKHeZpI87-VIfhCG(kFc@d7tFnD!Dy4y7U10UH3Rj=KD__4DsVQkPzDeNLAs- zKRTfQ|IwrgE-6wtnDFk^BMKWx121Khy=TnXwDG}MMYFR6>lIZJd@ z4h}kXr9W58Q9XM{rq1;Yw4P{@VY6aM2qCD0^?;dv-eQES-sy+Ki1+;hgQwMXcIZ@7h*B`M3KVju{8@==a}c zd^B=>%w4__pOnuW9gHLJm$)txYj@G?b?783W>&V$E%NKrJ(7D*#@|)~qCakH?kuah z!?({Z1oa%gzdT8VUM|jCQg`)qzB%aXPLkx8t4mxJ|AGCP(n(p`tCLqw2j8}^Uk9{4 zY0L`_Ngg@N>C_}IA(jl|{CHxD`v5@lqdz`{5A%PW5#bT?5{gFnU^U04N-57kbK+SonWj0?#Rc$uJqUR*nhW? znD`ak@bAm71)EVA=QZ*dKogKmqdEMVtt)MOW&I2%zv5|TW1TXw;=TZvV4B4r_>OMV$H`Y+u-W=m3QgLv>3PVn>2Qq*UcSZrV$h=?l_1oBXqw{8t!fpuwM@317uk%Zz|2Wj;1H_2ex9Z!f^uM>i2r^axF!?fhL z@$PlF*F2ieSXfwGHXkZ*1pJE@7VbR(jM!6i6O0s$Ga_vj*QZ%f(yir$zUP2&Bi<60 zwd=7lYuW2K*$f?QXqP&f+iP8x^lGQT3IV**%PDj(vZ`u7w}?6LT*!6J@!9XQyBw*h zFM5jd@))agtvsu3L~(p^jRF%LyTO~tHYG_b-wVdXmWGq6`;+3)>f7Gr*3>D#*#R&mvwt)9-jM4%3@(6cH zA#>*%L$zhCy5b#QB;02rtx%pVj(JS2IU*I)cN0hF_v+kV8>Ylyu9acHD4+ZlOR6r; z39sns+7^Q?bL}N&cv2Vxbk@qac9}@UT{rF%vRJq9c1huc;cHV(|99C@0x?~`?;n0O zX#A^UoU+rE{O}e*=ltDex;9P+(Pev9hT0=Ntu*K8B1a>_0au5lvuAi-C4(VF&yFSH zI9l9}-!8SL7%mM2WV~UfF$?C_3DxkKpXDxg9T3(cj@pMPA^X))mm|H`4xf)N?KBzW z-Zr=FPPwI6npLiQK>Y)hH%~TwHRc)FH+(9yd%sBiDrE2jMpas6Q7yiv`Ay%HVmhWf zHTick$4vS(nxNz6%E0W*I_B3jgkPTjU-UnqS-{|4EYKgYy*9^#BC0^&Uw!?p?o7B!5*Ph%3h`n=_P2sCHA@X z7FXk=hq=!tztbSg4-l7l)7#~JJXEY^eHA zZuX#Q;Tu5>k)VQ{4ds5gj&Xi}=#uzV=7K>_gt{ZQrb7k!T3bxkC5#BxJftC5kOp zYpWdMNgeE*91l-IjMId1zd9nF4}GQ!5%@&4pwOtK{uFr>j&tnJg?WaiDO|cl5-+0x2j%t?_okN8x`P7Ie=h4 zbOlZZyopM+vv`VAV_ThrfQ#7-xy0?2RuNr2Srj=#+{Y21ey=AQdW zpmWt?ElVm_Z#I&S%B@U}Fc#=7eP$B5$*&>M zd6_Gf*7ZqdvA!mW%4@LMqd`N_%?HTK6>~w|u7i>(1)|Ax3hG2Yi7K+z`^2)38%#Dj z2b$y)0(y_ylSjUkVD0kW>cOTiT4-_%_{#>OtNrM;P{@3s>zP04GNXsG}XyyU5(NG!vUT z^Izut@YI`$g7`knOjlo5ji9F^I-gu4D%b|1bVr@q+_gallSIV9T2T*s1z+jp=BU92O;6inm|d zYB$I9MtnL{UPV@(czxgX*T8s;VWURPn}F8V-0n5?ZxE}z>}NB_mTWTUJS0pNUCS~! zSd6xMgxriig{9e_Kzo|b8nJwn`?F0ouR@n$vSr;Xt})`4B!08UFovP(ZbhETL=}{b zFpOtTm)IOB|}v6$NuQL&MiUdNQ=nFAZD znY8PIK{CsJOAzbsIxzo$x!(K%a_-ja7l}Lvw1Jc+Qdqv-FB36MKrafT_+^{<;3)c3|sqwuWl*~ z&Z~?3d*(UJS1q1uh>0~yHks=PI8)kOX)Bid(u077a}4~9_q3gJAqB&0 zBi|0ptIC0S6?DbJ=s4=Y^fN@M+|TG?J&Nw-x8e-B2i33DodWIn)j6yduAWhN5OPr{ zaWsc(UxxVcJY3d5ro?esWh`%fmx|!x%@m6!NtW5XxRcB!nW7&vDt1-p1;c zYM!epIb)SxbWQS5uy)hYdE9+gD|vBq{$8#0C6TY%euG1haTD5ai&Un_x>ny+S8Drd zS)Y6>k(5BIK%%&ZrVI=O1)Q(C+2fQril*JOF?ypA^=wl=y0xUFgTnW7`H4B`upU9j zG)f9T6<73G9RdD)oBK$z{u%?EBACtzO1@Sz*f+Jz^-2d` z6VZ(wrIqImy+Ze2UnJQ$cWCY#G`PV@7M6RyCK*bn`vnsTV?z%M=ClueSMO{=du5HHhQV}hft!Qpi61YR>h z$iYiEqE#UqHTnIe4{|A8fI>VX{jJ&k*rtt?13@lMxEL#e?$Xkdqfx?+Z0tfk9UWy& z;)wXmB~|NWTWi2t44_Rpyi%5!oRE}!r7qF?X^^J2MKmSBfqqqo`bjla#{(kXJn1rJ zpT5Mm2~kYury*D>bf7k}hmA&2W+x>;HT*h`Gn+=W&P6^#$U54<^_!cAlvx`!F7A4T zRUX?5d8%{pTz?6~a9pTGY0b@0Lj+H)%T$;>zL95QR*O54>7fb#8cej!sy-A|9*Z$Y zG4-5U+(b=BxJYPf?Y9Scd#K!w*;h8e(V^ode8)GimT0DxXJ);TyH8fNgUR^;8VFh( z@wTdHl-=y*mR;mOhP|EJy%@m|&ns9)f@!@+A_{G?mEX^8WipRZzYkqC=c1{uu<%&; zD*lORS!`pWn(eiy$wonTGrw-W3NeMDYJ61hW6`7xld&&}*pg=MQDF+8ugx0%mAd>7 ztg|d;kxl+sN$lVfADYSINyC&piBP5p(lLUhqGpE5sE!;%Y;79&P8xr%flVw1o#AbX zuPC?+#S0d;XQLG-kr1gi@srNg6|l% z{PZ5yg_IdXgl&wkNXWJyleS*U~ zYk)BG#bihn-}_%QOMm+K=ghC)*CT)7HOt7}nZJ$q+JGX^$)rw5jh* zGguHajZFw7o+(K!uT?Pue13S_7rEMzVo|^1QT;}0z9;YYU-iXK3my{IV<9tcgRM=%GfvNhuTo>713Q+CD;tL&I&rZR&Q{Il_Ib;saocSa#de$7zWktV06AqRJ zt{>h>1wyYT4ztF^2l>lf%AQ=EH<`aXrXiLY74a_FI_?>j#j{`*G}X%fKqGn;BH`@A z&N{z}g#}jhxDjH<8tm!(ywXFb0 zzboYrO-e2H1LK1=_G=f<+wN}#vqK)B!g~r!^?Hol?pWpXYqH%LXQw@3^s+-+J=dC) z-r2nF;nAPxd8}jZwLPA9iC&QNW6xtJ#7bjW6*JcAsQ9nb(JhxeKq>|2`_l5CVeS@*)TH;4e8}Mv~WS3Upcw){ixYet?XE)sAm|;u3vRtnZUg zy}>&t2u+{$uhB!FB1lQSi^*TI5>Du@buSUsC2G|+Mp(I)M<2AcNUxkF;ufhgaom=T zH)G-8PzjNq5Gd#>pa$1_;fYdcqV*ld}lY7&%Uh4JUmiS$^Kn;Z@IElul;dEY87_475*mh9J2`m6@;T0`5I$x;x?Kl*yCub)p`;hxqc z)&1CMRZyVDW{~^BbV#w-);F!Z8%%~?R&GF*cR=gRx*e!AOZ{$t*STJp%gY-8oNL&; zRfzlq({$`^w}PA6uUY7ZUKy4~NNlldxgXT9p`yL|jfP#I1HbyCS6((&pMQXEsL9|* z9V$;hSCsvvRV|sis?B7k*5QaN>YBSdcJ=7u9pAi-M?XwLHR;-UC(-3bnO!S!cq`e3 zQMvbKd+=uQUPWqMjc&f_S@0+LsVUkNYm{$WC%+Tbi~y7Qg?G+<8+qAcnziWAl$3s{ zsj4L+=e>&3v5i8ix*>CjvToVTN3mGM0gN$E;I*T)zNWfMW-M@H+<*4pm(Xv0BqlGc zyIFZZ3kw~3132}vu~N|0K!&otCGG|-vUOXKbT|Kpkt+(y4}ME&{5|aS2e1EghY6o$ zTr9;P(4UMCm5jJstvX+xKflu_yC+)6=p9l)*6mL`)_BGNlSxo9c%a_vR+n8ilDn|o zZU@k&DQf^-%sw}2xTpO&M$UbGc3YS~PMd0{*;hILt}2IU_Xyue3I)4OhO%2b4G^O- zzNQKj!E*YY>zKx>Tui%#U1Pp+w}@8yajah)*R6sAX@duXz9-MnBX%fji^?&1hIi^& zeq!B*Vf~$0W+#}~p3g?Td{sTJM&#R6?!>~!)R2g0HW(SSW)b?!)Ml?qUm=il$DjAH zxCEV}Q|}W(=>~c8;L*au4bG?PBb;1M>{5rt^-7KB>rT$mG%DjdHzjNw$FDLrdf> z+6Pl4_0JFWM0t}2O`s(9B0DXbADOAV%Onf7psds{T4R&2vG;;OWuQmkpbmnO(FK$x*hax% zSQk*NM*gK)!~fQt;b-3|*n&K+LQk*Iwy!$8Q4d^MysZG$AYf{*-V~j;e5a7aY;r#U zO4sV87T9xr><>E4j}G44r!iIZ8whk?;AQB#UX zXI^K;<*7S1G!EVLg%fB2ULwmUdDTFjVxD&-<1R>O0=mo)O0~=hUeheKr1#S>KtmBh zb{!V%n$zDUi@B3}I{mDfWDicrBpX;?7#eu}vVVQA$p?VyA>-bfiwFAOEs~0No08fh z-#JK0olbj1lnOmvy{RD|p3M=bE-{AYT;<6_#DdVLJ!u#DVJ-aB&DLP&ZH8OCVu$4R(!R!`n z_cY$Dx>sgs{9Pm5Xf&V=t6_O(JSSNtgWHnnx|%}Dd7@po;T`#kU+?fgpZ~Uh7N*A8%9P|qz&aNN5niT%)QgM# zv%Ibb=4ckEV5aSOGht7A)+=MlgCPe^K#q_UV4At6M;9Xn?UE~>ZG$1)o~;|-zx7p# zg^_OdhSi6o5A+L8Z2cCbQ*A7M(}qa8hVy?er4wNnvQYbJ; zB1`WdJ!sQL+MiUDtW~_~7e0Og*b*cs02fMj+wrF&04LF={&}7L^8IgNBzQ(0ZKP9J z4)nMNk}jNrY2O0nyg!>F$f{%;-vo(>8eZNjENzct7605~zQ*ST!~d|^g{7@zlzREP z@?yWmIrTcMctNx6v9_Esf#VFa3sC*$pala_m-RN#q5b@du+5XP(?o)*fj%27evg z6AYySK5QV#Pd4u=0B8NzfbBOWCcphVvgK|#O^vfgcU?Pqu$Y6CNn5ymDQjxc>?>~t zQqu(I+4kw%n_n1giM`+ zF1EPN!XJ01!GNf|F4rhFns4HxZ45w29Y)EUD_a5>C2%)ft1u;aoY8`-<^GIlOK@JE z{QL&S6iw@TAz$)5eU6zMQi>>H0be8SWmXW_pZ_{e$)jnIiOO*riMi@zp#8v$HbH!l5 z&4LWWQX4wwcq*$t?JW&6A9ODi|BxFKlk3pU?9*3M34f@m7u~d|AiO($py~fs`Ynx_ zaGtQW;GBj7_oVZwoZ=RujUjjlT0_vMTaIjA*^HU&gZ@OGoI(I=Ic2$*Q_~2m{ z_-HRqCXQz0au`SE50L$X9I5(c`v%fyL{Gd1acA(~qFbpK=`|43)2_{~9cDvM1HQzc zy9Q5uzdtsBAdg{8iQ4n#q1=&Wi#^#jq?6`$J2}n1%Yeu9S`gw6 zhasAPkQO#Po;&PjS`#jApjnF7f+TNMBEP5zR`4_J=It;k zk525tGTx}M?zRxC(KP(XEpY2dcSW?0J)<+re)!gAEo~`Xj;22_-yj9!GqPGM2j0z; zzKFpJp55tZBbI0nYbvQ$bMbb?S4VrR~~DT7^#y&WcE7xdy?HUEH9XZ;$v+3Pt=)r!gm(+lw&f z>~g=vZdPujOTGJQIUPFS{N98!o6Quw&_tf9YkARc;j-SIvQFvUUs}ySd;E)%BIl%} zFM0m78Tlp}?(Xga{rD7p=IcJv1_sOtKc@*i&7wa*ha&$VIU+58xlAf=j*9O8ZrQDk zyN%e?pFDU$`{A&bs#%@WOKnui$GWR1A;9PzBnX|q3MclvzItr_2z z9Cx<)?0jP9H4KtcR$6@_BliRkX3p8!UL7gLDmuQ`qJg?3neIy75(zXv{hikii4(4u zr4&5ZP7c2mDb3ka92u2X-?H45d^mJs5$HWRa~?xxsz<}1|N1rmPu`6G^`jul=}~Hk zAhNu>jqlr!Q*uZw-SW*92=`lYuO1Hep_NZWw zpk`(JmZhwp8i}?4*%5%9;a^)r8r5NxW>JGDTFArRhkBn-9x@R@TZ`=Pn_{z_tYOh|VnRRX zhJ08k6mXNe*0XPlfcG}Nh z*()+~l0FNm=-a?2IGSL7+56}>1%m$sGU?1*=H6%RyEV>Un#USW!sqZi5kqcTPE_|Y zcEuatmLPI#oUfP8ohCdPLB`1^Epp z#KRUVy7biyk1=!JUbln3r@TxS55VnI_^H}vz5OO@eYYV|C3LN%K}H5&En{J(e5Km+ z8l=W^83rGh?OJS(0?#Dlw4$a^hanQ>VQmtV@^}aWN^?MVfj1nw(V)dBlX8*D$MbTHMJrU0cpppq$ixsZ5&kx)17w7~wI6>F_W{w1a9k4=E7wCL zwqq`>*I6hj)68P1(d28u5cAto{K{lyZSA;F=2w$xiS)_Z@#8@NcS%m6Y9FK*e#x+2 z2_kE#8#A(#>C>@T6zOD}rCVLUgyq9dd7z`t9uGROU1<>&p1aIWGqka5+W$P$r`VVI zYLqWVTxzcuiDF$|Y2OQczhgvF-Z1c=?p3{BN%zKB(q~1gUVgy0hd)4%+T+r= za|81GGQlwxQRnpf(4J(gF@26<)xD#~@Y?11rp!<{OI_P2zDCsspO!$JF ziuvSYZ$VrWtz4~)-Au8qJhVI=G)i1vUUp2W+A+!4tCyns@FWxAPtp>nr6II6?l;qMVBAN#z;FmC-uS8;8OXNk? zWXNVPN*g7zwvD`20Y#!ta$e`RNn_l<2z)D70OXrtv4*)d3A3euX0V*c_t974H~QNH z{Nu@}K(NH@iIZh=7$D=|M_A(Renp%1e&_n`ll7D)ueL!aqvU2;u8le2*3P}mo~a<8 zU>bC4p81w!JDK8j`!OdAmRdt|$u9&X1zS%xH>;BxW;5#!&+AwuSv5rfvUEE#4DO0p zWHJafN48>~iyvOyMpZ<7fNs3(k{WVyBfreAP*)x2$dBM=DDqCq8$AxrfG3`r&9zx- zmGWBRFTAVQMuZocmLCes&2D*$|Fp-}`4=G?_ewr=jz+MrQ}|y_hys0skz(iIEH#Ua z?=ml}=Smokx9|E!sXZpVDoK2UH%n2Y%wBdgOv1Q^jdH6# z!24VCrG~1uI(wUlSAiR5j%lHEfi?8WJM#Na7%nh@5~tuJ=rj8f z*6h~u!Hcjq;Rb%GsNk!P9+c+h+7Vusj|h(r*%>x@_wlcM>ld$Go=IOb3!qt!QDlf^ zLeNIqe32N=UtzIOP|mvRqsLV@82v^M&u24IWePujn6Z?+HopuWH?rO}lC>_bUw=Y3 zXTI0ul5Zni+e1meS)U1b-G%~Qx4>k}QD8#p_nwD;drfm})Cr!wv+5fc%w%5|tdQP2 z=NpY>N4xfzv_JEH7^CBG;|J(Tw|of0J3kZC-sXgnb~9pD`5XM5xn%evYQEw>mr(dPKbm+~c^MCE>Z0N;Fk3(cAJ zNyCC6Ds>a1==_Nf~)}Sl{hOEU|tts6CiwW~?=#W`d>H`rm0ed!yCq1#2rP^3$%kW}r* z2_5C9?7zphe*gNf*(m?cSK)Vu=N}H&e-zuLK;Fxa(LwXSM`Jm^I9U)-*avg4SOncv zaos!5nScw|&x`IreKh?yyrGxnJ#+o&`iXd>IUHJKisuG%(eG!W8}H$Yw1#Z^D!1>q zp56uR8n;tmh)OUwP<@3fqyb9Y!zo^m&+m~Ze7T9IDvSC!z{DBj6R_GHjA$uPXyf~? zFg<`JWnHquE{5dCSyI;UV!2vpq4T4b5aU>&<#7MIr2PJ0iriECRFJp$?5Ac7_n9p0 z1(<9vm!Y-Ow zEZ@Q(Wk;Q8heL5%XjZf@ZNpiAfE@kHOE7YUV(P1KLWlj0olIV$;cr6V(WjATChH+u z?u?aZDOH{^wC%n|TYe5^gJ|+|=^+%SRwIxfFVdsF3JwpD&vjDdYtd;!+>#24>XYnj zYIc)W{$Lj7k;9-U7CfqsSSBy;JPci8aV3JtR5eo0p@aEP7aa9Oa8GsK0K*#AcWjG2 zH!6#sC&EyJYs)cha!z&i0qe9)wy@m!bW2h{OSPEZ{H>|Rkwkod>4A;68;gyPwY6BY zZ@h+!V>Rl}+QH4A+JTSu2fRyXKZ5?HYiQ3RGs~@;cZBP*2;xf|q(=Rx0$xi4BOrO+ zaMqX`JGTTnri5u|_`6E{ZOdZqjY`7`igXiWQuKYB!n>ErA@?iOd%<|6?@d2giR~=m zH>3}>)EJx}&4Nv52nbx{*V+7}JIgK^o7vD`O}I(!t~+aC;ZXm1C%}2VZd!7TNVv>- zgP-fV?9H3648jX!%FZzAE6cG_*68qpS#)6UhH46;n?9=F$jy!Ng8DIo8hcQYXb5zQ zm#H}6n_K$QgTrQv*6GZPgMgMd_or8CWf$vSET^ zt|aK?J3+Eo>FzVKk6mg5h=+?FReg&F6R(um?tLozphd%xN9Q%dQ_I*8P?n)q%iRNzlL0BoK&VI%E=swfJlvpO%=^CS6L=Ax|KOX2&HY+Fj33vkP)6{Wm0~;)xTHIrhPPzWE0y7fc2Em zk|0jI;Y8*T^%`gLUPY>!CsgR-&Za%tmv5C8I2dkU6>hM-rkcUX{7M#OVXiyBylkSR zP+GcIsq9T3_eFYLpql;B>O=AtJb^lLZ-Rn?VzolQa z;n0-dRldJW?dPj9>9q`UGHL>#aJ#MILastjcZulv#->bBahS`XIRBO2Cw^Z9YtW_C zILH0_8CQ~8p%`rEtl#4Jzq;l zsWQItLlS|7tc3EvpZ|r!VDP#aq(sktTCR$s4oBp76qD2Aa!dxAeP>{sAb+^TzFy z+~hH0@!P7U`PG*9+c=G~_7zyjF_;cLY_8WAqKxbh6B@2WL{dXb>SEh8YxH=>AQL(LeCoe_snQd2H_c|L@FdxvSud&6HVc8)XD23tjVvG1qbF+#weYeW&7$Nt9Rh?S~ zcp#jIDJdxdvFmeTS>9Zy01LEwL@e2#B~s{9|9^4FC%oPAKc3|kA7U+3e!8TY5dJbp z{QV>U|6I}leOykP1fmy54kVm^Ma0EQwy%2Kp1MKQwY06>3QM&C@Nz>L_OA2nr#LTn z4KTjQqQh`RW__}J-7reUf%gZCO@L%&J$Nt==DK~)TG zMDnTJ8>o^=Fahc?3LtrCmZ4R3DKvx>H5Xe@M9$^chVP4YEenmp4=UEULdYfhh2*!@ zhr?nIn!rcFPG4Xa$%@GW#Bs9w-1b8doqa6dnSzl@o!_xh7CD}u$l4XxAf)Z6S2?Bg z*Xs}*g&BTnJfZJTsvdn5`vJOsFh3DA){WbOefU1asJWP~4Em!gLhB!td zgd3{qyqJ%3TOTmpS8zS)_{GQjF@s8NAn&Fl>wL5eQpt#APT_vfMzpk9K((}Nk?w>KiI)? z)jP%FV&}}odJP@LPGWDa;J>wQ<{bod5%t8AmXX0Y6K!QlxHJ`nsEI(t5P99W)+VN_^=p8F7IN^^a=39&=3Pm;{ImzwVtTbtzQ4c*Af>ZmDN@sgwpG0bZbB! zh6s=AwuGn%)K9-WnKj1yoN5bt<$KB=sBQKm48PU@{NVH`qD{-2zDWX1x3y*4- z?rKJpceZzPL)4|C9OVyWV<~-OP9f;YbJgu79;6o=o+6>24u%(bsNM8+TFc>d*~v2o z$G`Ai1JzKU0W~3Fc!C+v!jRFUM?cB_;8;65YW~Y z8Xb$**XW&_7f5S@TtOq1e}W0RO`KQNv$Ma~;UYoH8XIMzQPI^MrM?43FO;MsB7 zlFgZowtI-|4ZYsSMtUpSQFE{t;;9%0gfOiLrJvT3<<0YMx}zimFT)gdSM1zBcF z#YdiL%?S95??L@x2W{MtYt!$iTcn=iIX*DsD9g{L4BlAh@9Ugf6=PuWIqj2<98Jr& z)Y!ic!@!dlQ>TqYa-!ewKDs_O^&sG*!W`EAtklS00%4!4s!pNK6lTZ(90{0-$-X?$ z$^Bgk_D`PwpUBiE0HPWYsu5TUh{`C?^=qvSPKayXmMexlGdO{#NnRlo7)*MkgfEKE z2!QsE&@e`}ZtbXY_Z64~h940m3phNNJrM+Sfk9b`JaB8~qqVG-gsRw3I z+JPUxiSzZRJg8TUKqWYhI2E83Pz0K2=e0N9nkpYB$9^~qdw z=YSpdWF`$n=kqJ+hxfAlETv5XGRyQV-U{A(Y3Jx|Bp6hCY6E1`H-k0G@|>h>^<`#n~BZlkf9cGV?EUyu2^r zuUk;cR|hWw`o@x;f5pu5x-sN_({#RPOl^(an6ak!WW6^EEl0M^oxq`9-lM%0$ntnpLV*KuCA|4 z`K(`{-#0WrJD)P_YI9`q_1Jva?j+rs}W66YCWI<>q5&9!b!4(A^_LRjeCbe`)i7zWXZy|ANW5Pa`&uhfKw=AMV6hCbl3 z7T09=tW9C$i=PJzxQkUXsV#^mPfa{1Kx^Oele?YUA|ypok9l8kpp4+*Xf2$~@l=rw zMVshuRbYJoF<@I6ky|0XQ$k)zpg_nTqI9{ai7Uc7{*K@kVAiJ`a5)KOeGAnFb6RnQ z)up7I)Kw6Q!{}xN+DdZ@=!tvV*N&E_c)7!o%xlbMwG{zfN8v8T<4s4))mwoAW#m#m zC6lttLp9u3?h{k2P0mj8CXTY#G6j~#FLZUmC!nVOB%m$4h!)$2;(7H&LvH1=8&in~ z&S@4zb_IEB!9Q&`-!Q|TzjKjQi| zC)k=Fah#wvq@j^KSamYy;7`En3i=q&Gd3=S+`4f_I&^eJ+{C2!xksT~f7;?&|vQNj_i{i?wUrk=dX}WRB^G50fl88t@%9<^7}?+sWee}O`Pb^RfV~&?=uEH ziS|Yw)w5d5*9pV6-#>esaH+SU{~pS5_;vcr%w5$B{{tD}+W=$vpE8yHG<4?AR_A~6 zxBnFfID&VMS2a*~Rx~r4Db=qxBG>!hFF(6EZ9+YQjTSLWbQZk-GYAl_cEqWX&?593|Ev#YTehE%2iZMENCa zmD)f`8!SxJvQ`=hvM5yys-*Gb--ep$gWWCk1Hb{`qBDgcw)p+E!2oB8l_#;=lI+-T(fOJb zV_PXyI;8tv9a{im$LGu{@)j@<>Z2Cz$m8cLZhbEJhLsfQ8Wnuauc*6|mGHBRx2CCn zqiGOWyE>vJ@k2k(Ew;if5Z4OvDHN@SWeV=fMs%-YYpoH7G51QZV0mguB$HN7H_U}j zub3~v-Y|SPLV$NpUzrs6t*ybIx7$I<9og`qPh#&5d3uwW__ZVQQ>splSy-3)Tl12Y zHndZ3fGSB|mS06qhkL{5{b1TiShzFf;*Nex+*BW~+OptVkQxDAqx1@{Hg1K-X7uah zD2x%@X5;ik;-!pM_6wTzW5dJs0P?OyZ3AQ(yc|1$6`9CwofJN>=u9ObD8;-?K+Syc55i+hj>Mc*|*&WcL zVk)c*;v`Ew<6?GB3if7ygo@hohQDZIMlHd-f$Yp3jomHhP>o_g+3!j``S02LESN#A z&i%Xrp&T&;x*n682G;76-(ciB$=?sdzd1#doXgy;^Q}vGolHcaV#q@N15|)?iYsII z+EimH)K0L|4oE~er@L)+ypow1SOYX%zrfyFx*oK$B~BDmk80B=6B$e#KY1FeRjwIi zy}I0gdKdNb0`>ypF7`_PRz*ZjsmqdpMuVKphU!A**>IX8j(CFj#`Q0rfLH7TZCRD*w)X1)!b7sG0bocI6~PG3DBnor;? zyV;ZcH2;sFhpYby^zh5c43OGuMu9cZ4ye1P=-N(Xf8_D@F*$A52V+z1CL9(d3z7X> zRawmL*N&E`FKt2?2^4wfNMyif*C7o@^aY7-@|bVT2KQXBF~zB>d0Bo_g~W(aEyU3e zQ09&-QD0;^-%2z^&ULSnvs!z~hw;7H_AOHb?+WJx`aE8!eIfZ;MLBH&s<+mqnqX8#yzuHH4(+<0n;-=77T;aDf z_15qC4bYBPt3L1Q6-XRwIcWmFXj7;}+pIN1sds5feDgH%lPx%_1b=|o(w=_QMR4|M zf9Rcn22r1snVInlIJ%*8iY|;qB_0v?oYO<`G-KVoVPQ!bkJF0MDd-Jod()^;k4 z2x{^N==sJ(@(GiXvH0#c8Mt5 zg25<~O+J_N)cwjO{MgA@)b2?lD!*U7q()uH*^8XW{#pMj?2`SveyhCR4<9V5K6Pwt zLO!e~sL|sM?@EuqUeDKCZxZW+I9s$>a#d~jb;P6Uj~9w}mF-+@Bq~wO zeN9p^@^-B0E7P3atW1@foLz;@a{Ja?wS%mO@_8H96JfXfO*VU>H3o4k&MmEU+UXc7 zg_i1za8h|ly~REl)e6{-y9h&a5$;=&jD%|sigJkGJ;KpYrdjg)IpzCH(B;3iX8*k1 zX%^5Th{b4o3WylGH)jaJMsnM9?-Dmal6tDTT$TEKuB}4R+U4?P!LaPg^68$XZzCu0AguQUCwS`|hZw(stjdC`d;@nh-kDMJWoH*k~f6pmd0WNC)XHCQ6kq zARr*1(rcvmgpM?kE*%0$4J4otAjG?!^UZut`DW(ab=JDG&iw=T4rH+~`+cAHDZjFj zu6<|ZVTJW7nvWz>gO3jZw}7cv-+6^Kj<`5f5V&LPPkzuoxf9Kd9=<<7w^;$v6XA7{ ztHNf7{pf^z zj%P*DWu*W!JeJ>e-v4L<_!lN@)5nqTW1w>YoGm*KcseF({okL_Z@>N;CjDcIsb7R> zpAz_3M6$_)QxYn&Dv~H$CeK(aD8w=?e1dW4Y0|V&@CZ~JH1kkJYFuEQcgyQ8;4tu` zzf75_qVC$*zPHKQmjKtEt#@if3k|~gu%;Jra*|?ub{DSvjLoVGi%-Ho3B(}0F^ioV6 zJoX{;4t*bj{;>|>KQm+lq5H^3OKbFL618!MmHr5sOO-E;k`D4zIlI&Rg51 z4-D)@^qrksI(1<;2MUF%s;c5F{HO$^HkD3^Pm>AzPzlpmUCAL;)m&hIv%EuvD|Nc0kWn|FHXdSD*;I|P$w(ASBsN%ixux{)wr0`ihkK*)H=+{Zeun+0W#X7r4 zrK8$x+v)4t^FVGsoLY?0Jv%UqYD)Xm*#p)K{IWLromxU$iYSINL=F6vjkY2`D3ce#Q8tC*RfwcpfS7cV z+LbK*QO67s2)0=N^)`Xn9R43K2*v13PWJoRXJ*)Y~}(&H3q zQ>Hgt&V+c~^_IIBTxV$4113bASntX2k29EEsvXFv)=!=SXmORP=y=n^Kn_>h`5#k~ zAM&}M-y>Y}4RqV-8^}bP95h7tmriA(eOhvLxy}yC(HdOGA`LQ5FEz}ceYc>l?04Z< zvI?DWL0fWIjZzvr+^7#B>Sc?Ch4OI3&$SNsHOZn*+QbN+HOq0=3%;dQl}2TdktFJne@UkPl~f%WLq4c2 z0{{=Ei%7$3F-^ozoeP&cqYVHCAL<1LN)+GR68G8z zpfCRkBJn>;5dqHaA6)u!e}wkQ{>KjTZyxMV@6*o)@Zm}BsE{$q#a8esJ52x?mLxuB zOb8@#Jx8CFbPy2InjCO5cusg#t@61Ba}4o;=O|HfmJ1LvuW(}@o>LkJv9mr^%LiN;}w}3;T{KXNZy1k!}5d{@WTN&En#pe(Wxm(8F4cueLOO{ zk#UBZq;sk^)gV>I|J90;?s)z;kTmpSLTam_vAs&KB^Xx{4BOhcATK&Dkf zXMFV20L|C@_Qlz#D0?{UV(_^AEe(f4n@{i21D~&Q_f&K5sP;TP_UDJ&5XLt~8 z2Q0n`J(OBigq&q)?gEFH$%m;C=*Eq#Ps;bNn2BOIT8olFljk1LbD#|p4s!MKNLs|F zo&@c7pWrCRHI=thC53UJMMqOIY){ZUQlgrpu6v{|!XaF3hb%K^<%urK1Z=)g82zQ% z)FK8l^X9GvxLv7%I7iX`7LM>&um6e4q(4`@KVSb`Uh0n~DW;f) zs7SIXkpY`n?jYPbey3kf)4~etM7v^Z)@4{?v32<@B5&@q>Y*2Y;?Lg3YUH1}=rotz zFiq7s8vp=C_LXhf6j9Cl`*A_*WAp3v_}01bFs=!A$}}~V@^K67sA)7?ma7XtcrY6%~ z%(toyq`&NEZ%M<&eVX|@*Pd<(+^*E{fCA2KP_9s zk&luN5vJP#u!9L;lI_dI#Vy~1lG|Xi(}!9Ol!e`0mFsR{40{DSV;BNDqEXK3!S!my zzm6N5_RLK59bU~(mMcY9Z%9gSs;TM2*-b409u|hrKA_|057)0NIRzl!rK`yoTfKo_ zCN|P0qnrA}>KPh0Md!N3H(^t`WX2mZ3OZ{5Rp##gWv?SMY=K2&MnwC_S&fUhQe&@d zY++Ag0EGI>)6_?u3}3zGd`vmXKJS+eNO2LcrXPY@OH4W6x&0#b_~)x0M~ z_u;AX)cm@9CH?V>CzXmo)Z)F|>5&2wF*!$sN}S8+7b~Dmm1K7KRWNm(v*n!kmxcP$ zC(4Sg{;ATkyLZ}M53PA#GX~+=Mc2eD`q77%%-D(5IflfyhEk*>v%Z&6J-H$>D@j)+ zTnyEC5L*)oK_`@AdC8oc2W4kiMUKOzHly;V#6RqzU;@h){<*2Q)AiEYk^%q|$?)lz zP#etpezX z9etRgQpYZ!8zG*vb>%O{{6PNpD+Qn9e>V32F=zQZ_y3F*-p>Jzb%exD9KcTd@rcI4 z@YwOm(P^WL@%3+PsUDOLt)(4U7B)R_ROO~>765hLeZlnpyWp(e{o<8rb_BJT(OhHt z_S1v3bw?)>v$M;)l`+eK5a~Kmk9k~Kt-wah#52c7CvQcXZ}aqtlfT(r9Vi%hLCT&#o;?#eVn?${qb@H30MOt!;jkIIRiz4?hVMTn#X$)|INGHi?^=?nj+T5NxH9twU zjR%yUKUGsI##w0h0P^CpMXu1J-#`x|6wL5QlC*XdSvg5)9H7m0uf6Jv~5!`asg_2(-FW;(>392j@+2f7BTfEZk3 zO;WCBEI_|z9jn%D;A^b%fY5(UckHR*fIMz(q}w3;@q z$9EqFsmwm#XS@n(t|AuVk&S>qD}YWe(_dS#IgOuic}vW1a=G!a79ZDzXZ=JP7*(?B ztlnYj22gYS-udQrj*bZr!iiReILeN$|kn<4ZcL(@(WM@-G*0dUJR znJsN4hH8p?wK3;G^KNOZ02KoeU?w6PE2lx$2mZIu}2oafIV;T{T}mi4C=jFn*Ds=f+H2oK;xUU|zydN`KklAnB`*UA)@f z7cHMKTTRs%rK!hWRb_U$?tZ!UUhz==;-somFe)SO+1qL ztV*mTa;`UkB;%cVso!8paUm5YG*!|hf1kV5@RRo8VlhUpko%?|s_)gl1i85Bk4=|9 z-Y(219VfQVycAA005tq}ux!B+WY+1`+hQ7T<%SB!HEhg-U|;T3`$Pq_KsF4PAWHGri_!#Q=zAen+lBfznqluvjZ@ zvDRkJfJJdv=h>(8l;Hh`$c{|%hv{vp7397pOjf@?t>Us1@j=>XxBU#!PWOYxd*~9R z4$#PngO8a00^mrRWrIilSA#hVhzHK#>p!3UKVE+EAU+U84i+94J;7MT4#sXZ;MAm@$|W;*xpG*Yf<1s?$uVhk4x4O&WKB# z6%~6wO5t;g^NUkx+Oaw&0<>WSQx>(>Wp3Utc^Dc2r?#|lBuSo&p)HQ>-t$$MNZwGZ z5`4*f?!l|vuDF#{zkV`qYQcC-Ud`flW1SWywHPzA&(q2EV z+Mn(-qwk)|dtXFJka~nXBlbFR zzqdUdm{uC)rz}1b1|Fl_MiD5+6apP5r<=(v#pj3NcW%u*V+l7Ncic5vCbIJ#kzsvf zSw!xJmE>hE2DT*=T-*EFB6!k$t$6XnVG7-vD$KZ8ooIv!$8A0e=5oCFd-7?x9?&w* zZu5jO0t|?f4a1=gsuPow9Vt1GHS6?+$e%jK=}(TDPhPK)WJ93(+`b|`b;?wC+E8QS zZ7`1erTDH-2G$VfzQt&g(kvbI(7lp@=6jCk4`sj1%duII6tIY2WNo;u;=rDh&kvmc zzZX#c0dJCHt2VlQ9*p0Zx(cRS6U4S5P8 zXUho-k_GHW!pNsnyBc+rQ|U^RTi7H|`mL?34XeXWX4D8UGn%~69i*1+jRbR+!Gbsw z8YRJi0z{~TGDpD_O+Bnheu}p`N)ugmOrBZGwunD&i&n%{^g_smUDXRdr~eVa+dp2? zz~OEx-2@FwRU(4tYN5~4=)WRMY)>Xf$E&wIpS&_>|6Gd;UedA}_rQ?~QYF`OTO(uW zCC@0qbyoW+T7r0XV>{*`$?d95wy_u{vW|`=NTW_h=@iE-<>y#!kNp@Ia}kTV1(BB3 z45AjnsvSx}a<(B*&TbcO8}FOG2Xt)tY661KVeyU8=HhtE=SQCI% zRL=PS60oajVd0xQ)tt3l;qqT}Dklm{KxjVj?(Gi2=b%$bU!(&trB)#bejAbYRA~aB z4TCw_B&fh6O<<39n3pM`3>}u$6#~p4>P%El#P)XIc@SB9>mUmah93{wXa*O&^mmneuzKsb$ zmEg42mvIo(-=PQN_5x|3o#@qDj<`CdJ{%bRaOCll2Gz{r0{G1uhCslQUD+A$)V2*{ zBy+Du-On?)Ak)dBs2)yTrz3EEK4I$W3NJi`z+MN@t725MzWYtv=P z9@~yS95|->QBaVf!f0J6V_@E5TGFvaASRQ2KJ&D8{C_nW)J7b3JhXVu{Yl|b{_dIe zAAAUZ^&x%#`QHE;#obNuHUT{vk5`zJ5pCnz7_aKDUWCyim`SR{9&8SY6_06B@M+8B=b$~= zdAODHVA(SInR>d}=7qav^ZI$*&~3YegeT;2MW@y@o@R`^UgeD`w*CiAxGnCxushK= zU2-~(c}bpT?IvA6$WhkBB5AeosM(;W4l}UB9b&a!uq)5k>n%+v(KWo9@B{6Qo2?@A z*G}obyyG&MOR%nW-^KJjUXwNEwrZV@1hbHpyaJUq2x_f6im%?OEf^S|QggV^0J`dQ z_z-v9J4S{e)(I>#IIieK!SbqZ$Cd_6@2-Wt!C)qmB|f=L9-)jsS+cDd7t4I=&DD%&4f(D7XT${^ zGx7xv7ZhBk;B5Xmm1k(iP?7BMZJC7WnPUMJXO{_b(~+d3_Q%{VT@R`+;gFO{?QR!4 zWM{^@87K(Rup_^nBUeQo(AnwEF1A29NTP(4;1-79y)R=AQCU5ojZB;U!~F^XxhOYF zAwzanOY;IMLH%5>;MvHCeT`3Mq?-rH%DneRP7JNr-N#RBlt0`DUFF&DI@%>WT-0sQ z1o3sDCiMkcM4ijPNe5$`ME0PV50%O{L*0rsC?aV4N)%=ERoTVVZmHQiII92ADD*GB z_a{(p)^a>xMbsXJ7WYa5A0x@(J<^M8WBvL*EyqX5K2<%t#sbf&?ozrBGz3`ek4gHl zHGxMRUeZpye+-L?O1$P02{V;d^ zZxOcZN{m0L-Um2{Tn{SV_0Nd#(->R(wNqF;4dgga5#wE8lC5BE4cNKGkP~wCG+jSt z5V!E@+dkpT&=S26x%ImIiaBgrs2h>HsJCd|BQsYk4}O^&@5%4+(u^~DVQ~GHs|Dk=z2=*t#-n1 ziXXwk*3#!tR9+5%&I4q~9_~H!$`PRR+$k#_r#(69edw?q$Kmj}L>8p`OII^fQ?_P? zFc=e=)+-Cx{bvXc!%;bHk*V(0dWKAK(J|^1EYZ}Zhl{8#EF0uGGE8`w*1&6#M)W%q zi`FRj;FjrYpZ|C5fTspHlU%N{ z$%`L8U5}xjF!7GDbjhVxFIdp&jThV40~&GKC7h<$5nKleIA!kFTn8|jkV9UaQ3@{txC<&*KR19n6N}qu$(v;%Op^4Csozpd)k|NpPDfQH<-~^U1j|m znc}fIy=wFPs;#~ioy%p4XASDQu1CYI(v%3$P`Kut6Qd~+)du0MA9B~+4X><;Om`X3 zR!YNqx)?@P%Uy}dnyAj&*hQKlpToX;59j#(jScxr68iV$F8`!7|G7l}e*JZs{^K$J zp9}Q=kj4E&(4K#BGJ*c0(ll*v0*^6cMH;gbZuSY44#|pF)2tv^2uCZ&zSM4SPMzr= zFFx`}-(E4!y_Z%z_-*X<>)j0Q!Lz+<1N$05u`}qJG`hO`yq!dmR-?2;05Ng`q{*#% zh4Yv)maAYs?(oA!9&G~KECBEcFcV8_1T)uh=UDrcR~^&jzCN1nlJT6|wfRkBbJ5*k z-lQhf9is34U9U7%d}~4zCY+NN%BW0ZDIixFC6penw$O+gd*Wjp*J2by zfAc=SiG|EzyHo0D5hpOJ1z3n-DmlsUB`#?L5e8=_=BU#p@XN{4Q36yPu|3CZ+^bA!{+H)7Sq|D53rViaA1}ckXnND z2m=~#+PoMG6fvDJ00iW=+9(`2kQ#f#%?E!OeYOYRUTWo3Z84`@1X6wpdZor-csQCWey7cQUmhf7`Qb|97#?7gkY&A z*fXj|8xcn|Wv*g11@Bm@*d^#l&zX*Ht{=D0X~|I}7P2yDb8KL+vTHumkx)yz+i+2D zfM_lfv4-IHy7K-Q2Hk((T8>WC&@ZR{-SgddmXSxY6Pd=;pFcIzFd`o#>_nhByxxwq zVHlM4bF6F1W7o?EWxKM140@fb)!z&FF;F~URPiZqZ=HUMDYM5LBR(S7EAUPsnXznO zraHb%EDb99-OkIdw=pp_Lis?Dx$(>S z7g|5tOG}JxQyk>s0yu`Ka#PjiZKF>%6;a9q3UA*Y?tc6PWfr`xI)Gp=SwWVkwMIxc z5ZZ%cn=0sQ(w=2+EQFmmw#>Dpq;nU%bmF{Y+=*N&B?Z*n4xMl>GfIQ#x-SYh1qia= zK*XCxIN1#vqRDwfW&JsB71>qV7y5_gV;8H04Al)zsPY9-%6*(f^rcZDSUOlSYo++> zG)i4IC$AAuQP+$r^43{{mS)7am2T0zI&>=Hh3fQkna@y0v@q!!u^g+R3?o3>_KGlh z*X8TCQShzzY=QwtJI2zLPd9Ks$<@i1j7tE5xC_vYe{LOhoefjG*yt_9iAc+Zn+?y= zZ2RVKD5-tqN4VS&59@lDsn3=A>5S`(UDb70tTs-QkdE~X=EqBAV%6Q!XpJjYkF1__KZ_^*jdsi5C`#V`>plNF ziW5K)>R%2Dt^osvf=;Bbm@i+NfDYlgCE(v*!K1z}*8ian;m^&n|CUzJ5fo90FoLye zNI__M&Q78EG;``wbT#XqN=dk%KEC_9y7D>u=kUEV=U1qBnU-V>5nY(FSoSZy#UwD{ zRi3=@q?v|7;8#)Kz~~*V%+eEQ1a0mex@mSs#p^NatK6*hvc~|Xs4Z~_ZbTFUqKwru z=4K>I9Tz~wlSNp**aU6w6hFFFvBf9T%R#|ND3umSS^$OwClCYZi^Th{JMcSt#RDY6 znf$~X3217e%!C*!r#rAQ=Yn)s*A`LQ~@NzA+J+#lP-E#i~Ne{o~ zG1iMa`Zyad(YF})!i+ej7PO*rsrxe*`%qDKgU+!}+wo$xPvtBTf{2c^qu5k%Ae4F? z!EYBLJdR|BUk&aUcyox6gTH^)MNo*;kFky$q)Se>h}OCrj;4DozrTH;^04we3YZQ= zwWURn-A9@+hfPhEhy6X?6q%kKTOJlqHS(^e%daLo&>3q-+ORL04!yyW8Lv0US`XQIph#I(RSEP~(Bc zmP+RbzRhmob9L(UlNfpD9&ZO<$zW3YxZXEVNl!LF?8w?irw~2&h2cE-k;w8WF2o>` z-mOQZfwMQ9bVxqL>XAd)@UX0LOT5Oqz2m7C{?g~q-o!5phqBsy19|hmkY=P@#2J!X zhoQwlw~U|MQBCgM*B(Vr&MU+&I!rEXv`y}NkH4Br+AAef2jlme8*dSX7fp$}`9$4T zeSOX**!U`#@(c7(2P8H2>b8z-gcNzEMxxLw?6HJ%Sm3QNLGo30z+jeH`-E5JHWa@T zKvK(<`w*K>(q>#9GpGvsFvS|v0q;K!6H|z_-AHK^u}zR*xkX7yVA%F0?&8Cm$F#%H z5^x4WaNw5|#KpanxmamBQ$ynw@nV?U2`$coW(#r4XTSbjH?nV61)j> z?P(>Gi;WmAuc&tB3F|4Ib1V8xc4HKTx)8*Gt%B4;8O8P!+E%ALVkIKV`8WHF7mR*c zem^h8kv`=^bG^*Aitbp>!0BhGquIeYd$&=`Slz0#R4wu=c{kP{SZd|QRzGRG zDRu$QHpede_-e~JqPDIURAbP5;H&ZCyXRM}JjJ^Ej5~?rr-~#O#lo+i@w;;9)2Hp} z(dM?AiV%Fv9QI}~wnt5K1j00JW;;foZsT~o%y-|dvT|H3N``u}ovY|(i|2ce=$F1} z4W{#m$f@^gP8eRXxg6`G?Q* zqqhlwC9$S9aU9Esx7fA{Ga+Kw8ppXl!I|b5{PySqyCy5%npdHtnmj5!J%&d#vuPfl z>^&YGw@|y!BWN7A8?`;23Z*8G?0tUorZuC~h+FLQ`THT#62rIe+X<-ZJxmn2wX3Hu z73D`Y=JAm-aS2I>5b#QC8PoTxlbfM)x;^YZ%kl9`7`K>BQ8|+^yp%#c^Yf&C<-H5- ztop4}3PD5_V@>s;wFeb7WpRivF0H%_T=XjqOt5=!CBjY^ zU`+X;*<@JK9m?*7GCN4oYghZIdplKB`Rb!3esUN8nEJY4sPWzS>9ygan7RilOgH?L z)wZ$t$JtNOG6qB+X{rgLIZjz9vn$_AY7rKD3m{BCB+M|#zY4PQF6@^#S1DNE8sFH= zeCTF=N!jH$hxKv$0+gKi`!bwjzj0Vth~9bLptBnS#Z7rR01X;MuOYVr5jzM#Ix-wy zI!DZJn=VGRI&f*0k8c+Oeumz;yKvpwFtys>i4Sj4s#=_#nJ8 zZO=96iL!-$zZ{HVrP7GLKFh=qW@vJ;9v3$ud8%SFoz-iS{cv~zmDnYKOskKocaP9) zgqB6&=sYcQ;YaW(uWSedtu^|=ZgF^Aef>d`si8@SgN3K8^X^#6`x^DSHy2{A$_B}b z6*0mm_YFu~L*(N`%~_FPW#d_@GANTN98yz7;7JjBURfWsjQPH_a|$jg zcmC$-9?mQ&0eF}E17)ik-+7k?Gk)w{0Pm7IFFi(s7j!{z@a{*rkY)!&jA$vlj18Tw zyZnGR-a7nQ)M8eDCx<4;`8kKisR!<_=@Fq5Bg!)AL>TsD<_r#LRDCk(VYaJ{n5K)n4W_fh#a7I4JOKu$j zA_PCHv%p{7_P`@U(PHDvN&3NL`Bgomn{Tjp>>?DJhc_z%T?L~UKn*3m5}T(5JQh1R z=F$%^ByIw@0l=Jn1Nqm9&us+xY&3r@BPL?QYPF9MR}{1yv6{6GrzdPfs@hW^hJ};- z*DCLXymjB#nk%il2Nvl2y)xUOkqL5d8qXS#;fMN{&tj53 z;*6WYG3`BiQHRi*aVu0sdcWfhTl~lyj)nQI@-P#h5_}sJgWIJ;V28^$XuC4tREnm- z?b_5Z71tR$n09$z%vk>iUsKi5*T&03x;Mq`ypN1ezwGv~bEipP1?+%moye>tMm#c7 z4jSmg6YH8mjBQMSu*H&Dq!KJLVIkXzj`r@!%by3~YRnmV1G@yd0+(K%$*}EPm!Ob3 zO<%0(RnzLUHa5?J6+4jxue}$M1Hsy{b_u&BwH`BH+LZKq{n5waR>Y9GVtnOyBSvZF zRkVnVtbcP7>(<1kC`K>af2jZKyp4U_#3EvF|6)xA<<|08Ud0x zr#U)5uwEx_=fIt@sub4~c7-qM6eIc;Xl71%}t{|g<@7*e<9e}cSbWvf?uow%sw>=$hgNWk40pBm(4D7 zZIrbHWU~Q=|9f6PDrG-0v2E$`&#O%d;BwE9LO6G}(YW#Q_MT&!PlZtptX1fsBE`YU zS4^9$MzMa-wdzwV=w5yU>s;Ayd6kC>y=SDkZOC*b#0ca}y%7V0t$xYq^4OO#w|q-? zXGXnv_C@jH`AbWNEHQ6_F1^oHw!)8NrJLjWVOX{&?u8U~W3rs+Aomn8yW2U-TUH%) z{ylfMUOz6ZxYH>=;O7i8Mf4&l27#C~JqnxMS$maKSkhQzLJTtvbR=El)ubF)FBGn+ zW4d0*d3L$!8)#8wOOQ%m$o$j6PSCot<-Q(q130xC%}w0H9{@hie_5@``4C&&MSCKHDAnM(jNN?m&0cO%FCE1b)vIy80p4I-Ic2i zd%C!?m>x$N3ke%pdEU-~eFUt_Z!GTi(z&oie!&KHuTaJ1FdF!+YU1H(j`fFwYR&2x zD;g(;EEFWiQFc_00jK`HZzy)hdv{i-nP<= z2LG@yzx9oci>=Q@l39vm)AF`@XO#Pe2<^{6$CW52IvXWKjQiE`P7y0-GfqrB*aJprK#ZJt!ulK2> zBwWRMKt04Ws|PE|qm%>dn$N%XK_-Z!?QV^Jm6zRY_7gIPwUNS_9U;Fh=^`*v`T~ta zA5UnD8C!iMpLPzWQlMNY*IK_~jN2Ejj9AnRlo6hJpp$&($c&Hp7yA9nP&%nXgdq9T zbcvHc97;IZ)tCy2hO>I&r+Tkd#B|cw-F^$}$h>U*yrhscvdrC~XBSZMX-!Yab#oEN zER6b&LqyOJ)Pme3MQ#u%L+ZrS&6Lg9`f###4+l?q+X?DzJ2yMox4dOucuP0xx^+$l zG>Z@-u@XD*W}ln7=GdBG%w9Jg^xm7Q{AxY#rt@0>Qp&3l8 z46Mjjot2Z2a|vdEh+>`Vj5f4+2hDqiVxK-$jtij3N1h%cEsuAHuHRt)*i7NtyD(je zi2y7l!P|i_u-8sYWl~#tffsXAf=_C8&dmo&pRMrZRKv+A!PwYdRMzPuZ9k{*KVQWM z;Y|Ash_N(gWpT?nR4}-NvK7o|?ejuaOUbYg0$$PgNKj|bwf-D>QjLScQiFrS10{vZ zKu{q&r4dlT+)xeAKn@$pIr4c$94Bc3$lyfzljNtF5TYcmvJyN)7$By*WQ`W}8=g8X zqLYN&uB*_e*-Z4$z)!re^qPOU+o}l~M9yS>12Mp9W}HAodmAJTO4fH&`F2k08{4s{ zrb&S&2H!Usj}B7q`!(xU$Lf{SdaC4WQQ7QNDV&QFXQb@j0T?0Z3pPmVLWtrD;OJuL zFcWdb^=NQ-HXhe$qklHot5eNGx5H!lRM?Z2^@!lR=aDVY(T%yqCTRv6h!n9H4{hUN z>vt#aEE#1#tCMrLbjm4eef&{F*0z)`yzqrc5ak=zbu%!Ld0!t6I!GYhCiu2MOEE2U zH`}q=Pu9MC9d;xM9G12*R|t!vcg%-x^?T z1R^qD9GS2A?Nkv%83@;Qx3J7J_HrR>I$YmfD_ecGHqq|x;&&F`)^LCRw#2o!^HFkV zA@`G5zkt`$4-u@Iq*=6)Z&R*I2Pz=($&Hj_6}Z4R@};!yDhkliv^tZB&b*b`7q2Np zR)GX&G02_UN{t}m=l&S7(Oelc&~mbJ%)VG7%j7uiL#{x}W0WVvg-04EGAsmGqhU5) zY$kZCmJLoXHXR~iPP4WP8IBgN7$)7%ThUvX8xk2P5ccm(=uTxQV;khg(?+*#Dp5XS zGO9s_z^IgEoC&4sefDIE6=%|2?Lfe#ZFZV|6@2uIG{dA_&4j{uq25MQMdiq&YfU|l z@>ho6kC>l_t@R%VTtxBfl`{-HUUvHL0C3AQ5_A6Y&R%9p;Z&lfZ&nw}h{w+9662l| zXM>`J)bt`=Fs?M@@`f(M@9s+gZLy<-&r$eNfJ;^y6(#G$ObiBp;yE=0=ks+!=30hE zm5z5X#@N3T-xQr^GMnD_UdFJaB@iP}x;lY$qIv&FyH7&%G^KTg5jZgQe9W|t@p%V< z@@Ll;_}rrP&OQx}U+KK!ASR2rNIG;-gy8T}YQPlVnLbqK?d*|Si}UIIfaw1lCRTcLTo0%=z>;?4lFJu}+u^aTDnah59Aj~?snKU}xb z0y#xs2yoAjq9c}GuJ8ZKbwS?rldU|80xy5AysyFXynvt5NC^=9$hYh9C~}uVB=XD1 ztkIs6?jV|nWI&wGC8}X5o58_04zs=CW<2lu-QDrq36|%^R}^pN^p8(WUcaGmTX}nX z13b2n$S0P|l>rq6kv5B>T9A}vNupAtqCyLX4K7LGiJR?Z+5pa4-xkjJ5a*+jx$kDl zy-KemAJ=cowEKJkkHKctA`piFVw(GGZzzm*5swO$!hJO?cQ|*a*w{gX4R`5^6qZ+$ z*}nPh4c2fS)fIX5@To?E`1S*0BcSKh8_%iVo^q}&K7!zX8-FkzP8P7^;YL^EdxP9c z_g7{2&5b*qHpUc~p`(cbjJcJ!WlMUvt0+6zQcn@+)83AH#e4%@uJ^w=n0jXb^|{>L zZ~3j5kikSm(XEY>bSnbZ`RiX#AB+tEB6n?VA5i^OW`9U`-!z%f=|>b}3P0HjSu-IEUz( zW>OYNfBZ%gh*l)+ndE&MnA}zcRNgC2;nXQ9mq(AqpAKN=`6v%OV4ua;p<~qFK--oh z(3vs?PT^#{QVSbf*Z!>!spq0v(b6SDvJo!QxHjgdcmd78*P(ioo0@VBRIT&?RQnQy zH~Gpi?u&u41|-5Q$$hB1V!Lv~vFUhL$nA^>lZb+)k`}|uogs{`966TCH=azNs*}X` zY7vL9NPixQ0XSE|hj%tSk{CR$Tha1MhWeGOZcF@e&q8$$7ei~2>#uy+a17Y@Xb}=M zexx#xyR*f#%DEiO(o`))H4Uk zP;1QS$hOIlvKm2cCOd+p=1I6d(wqd8bA~xyW^?-t&0_+ZbgczW1*T2rTB@GD*Q``G z3(YNP>PmVf6dl44bD!l>R@RR_dWrtHCID8Ml3T!`BcH)PX rjYV`NhTkl1i5+d{&gc?wP_HY~+tvHsbN*X%=ieSF|DV2wejEKiMaiX} diff --git a/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/example.jpg b/superset-frontend/plugins/legacy-preset-chart-nvd3/src/Compare/images/example.jpg deleted file mode 100644 index 375ef57a6aab9c58792cb2fbc32934be63bcd9f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66360 zcmeEucU+T8(`W!eMJz}!HhM=&=tZRl2uKN`BOOBT9TY|BN|(?i^n@ZM^di!`l+cTG z>0O%0jqj23>Uq!m-S3v~{&9cb@=IoTW}kU>=b4?Iot@3u$k}JW4Fy?{EC2@w0Kmci z0nTP|MnF(CGG0Kfp}-_ZYOmoA%{Ih$ZBZDBtQPS}TI8%v7CNiF`sS$^Qgf8b(2aCa967i^u! zKX4}vH7P7^ip5zhe!-1@!A%^Te$)@c))BL{asBbEALU1jiOlRE>R5OQ`=JFm1JnR= zfJguAzdZr~5ZVU-@ZS9MnsEXEP#y>XP>%ic8pAsP;Q9*ypse?w*ZwIJ2O}pVEPt$! zu^(J>a{yo`8vwYf4FHgQ0sshg|3Slk{hPMk#gb^T?Xt)ISpaMRW`Mf@5Wo�^q`8 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 PcOF1Q>`-CV|Gx(w_}{+M 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 z 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