David Pomerenke
commited on
Commit
·
867080c
1
Parent(s):
51a302e
Simple Plot map
Browse files- frontend/package-lock.json +516 -0
- frontend/package.json +2 -0
- frontend/public/LICENSE +1 -0
- frontend/public/countries-110m.json +0 -0
- frontend/public/un.topo.json +0 -0
- frontend/src/App.js +5 -22
- frontend/src/components/WorldMap.js +40 -53
frontend/package-lock.json
CHANGED
@@ -8,6 +8,7 @@
|
|
8 |
"name": "frontend",
|
9 |
"version": "0.1.0",
|
10 |
"dependencies": {
|
|
|
11 |
"@testing-library/dom": "^10.4.0",
|
12 |
"@testing-library/jest-dom": "^6.6.3",
|
13 |
"@testing-library/react": "^16.2.0",
|
@@ -17,6 +18,7 @@
|
|
17 |
"react": "^19.0.0",
|
18 |
"react-dom": "^19.0.0",
|
19 |
"react-scripts": "5.0.1",
|
|
|
20 |
"web-vitals": "^2.1.4"
|
21 |
}
|
22 |
},
|
@@ -3034,6 +3036,20 @@
|
|
3034 |
"node": ">= 8"
|
3035 |
}
|
3036 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3037 |
"node_modules/@pkgjs/parseargs": {
|
3038 |
"version": "0.11.0",
|
3039 |
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
@@ -5228,6 +5244,12 @@
|
|
5228 |
"url": "https://github.com/sponsors/sindresorhus"
|
5229 |
}
|
5230 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
5231 |
"node_modules/bluebird": {
|
5232 |
"version": "3.7.2",
|
5233 |
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
@@ -6390,6 +6412,416 @@
|
|
6390 |
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
6391 |
"license": "MIT"
|
6392 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6393 |
"node_modules/damerau-levenshtein": {
|
6394 |
"version": "1.0.8",
|
6395 |
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
|
@@ -6560,6 +6992,15 @@
|
|
6560 |
"url": "https://github.com/sponsors/ljharb"
|
6561 |
}
|
6562 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6563 |
"node_modules/delayed-stream": {
|
6564 |
"version": "1.0.0",
|
6565 |
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
@@ -9304,6 +9745,24 @@
|
|
9304 |
"node": ">= 0.4"
|
9305 |
}
|
9306 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9307 |
"node_modules/ipaddr.js": {
|
9308 |
"version": "2.2.0",
|
9309 |
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
|
@@ -9820,6 +10279,12 @@
|
|
9820 |
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
9821 |
"license": "ISC"
|
9822 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
9823 |
"node_modules/istanbul-lib-coverage": {
|
9824 |
"version": "3.2.2",
|
9825 |
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
|
@@ -14463,6 +14928,12 @@
|
|
14463 |
"url": "https://github.com/sponsors/isaacs"
|
14464 |
}
|
14465 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
14466 |
"node_modules/rollup": {
|
14467 |
"version": "2.79.2",
|
14468 |
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
|
@@ -14540,6 +15011,12 @@
|
|
14540 |
"queue-microtask": "^1.2.2"
|
14541 |
}
|
14542 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
14543 |
"node_modules/safe-array-concat": {
|
14544 |
"version": "1.1.3",
|
14545 |
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
|
@@ -16190,6 +16667,45 @@
|
|
16190 |
"node": ">=0.6"
|
16191 |
}
|
16192 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16193 |
"node_modules/tough-cookie": {
|
16194 |
"version": "4.1.4",
|
16195 |
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
|
|
|
8 |
"name": "frontend",
|
9 |
"version": "0.1.0",
|
10 |
"dependencies": {
|
11 |
+
"@observablehq/plot": "^0.6.17",
|
12 |
"@testing-library/dom": "^10.4.0",
|
13 |
"@testing-library/jest-dom": "^6.6.3",
|
14 |
"@testing-library/react": "^16.2.0",
|
|
|
18 |
"react": "^19.0.0",
|
19 |
"react-dom": "^19.0.0",
|
20 |
"react-scripts": "5.0.1",
|
21 |
+
"topojson-simplify": "^3.0.3",
|
22 |
"web-vitals": "^2.1.4"
|
23 |
}
|
24 |
},
|
|
|
3036 |
"node": ">= 8"
|
3037 |
}
|
3038 |
},
|
3039 |
+
"node_modules/@observablehq/plot": {
|
3040 |
+
"version": "0.6.17",
|
3041 |
+
"resolved": "https://registry.npmjs.org/@observablehq/plot/-/plot-0.6.17.tgz",
|
3042 |
+
"integrity": "sha512-/qaXP/7mc4MUS0s4cPPFASDRjtsWp85/TbfsciqDgU1HwYixbSbbytNuInD8AcTYC3xaxACgVX06agdfQy9W+g==",
|
3043 |
+
"license": "ISC",
|
3044 |
+
"dependencies": {
|
3045 |
+
"d3": "^7.9.0",
|
3046 |
+
"interval-tree-1d": "^1.0.0",
|
3047 |
+
"isoformat": "^0.2.0"
|
3048 |
+
},
|
3049 |
+
"engines": {
|
3050 |
+
"node": ">=12"
|
3051 |
+
}
|
3052 |
+
},
|
3053 |
"node_modules/@pkgjs/parseargs": {
|
3054 |
"version": "0.11.0",
|
3055 |
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
|
|
5244 |
"url": "https://github.com/sponsors/sindresorhus"
|
5245 |
}
|
5246 |
},
|
5247 |
+
"node_modules/binary-search-bounds": {
|
5248 |
+
"version": "2.0.5",
|
5249 |
+
"resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz",
|
5250 |
+
"integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==",
|
5251 |
+
"license": "MIT"
|
5252 |
+
},
|
5253 |
"node_modules/bluebird": {
|
5254 |
"version": "3.7.2",
|
5255 |
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
|
|
|
6412 |
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
6413 |
"license": "MIT"
|
6414 |
},
|
6415 |
+
"node_modules/d3": {
|
6416 |
+
"version": "7.9.0",
|
6417 |
+
"resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
|
6418 |
+
"integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
|
6419 |
+
"license": "ISC",
|
6420 |
+
"dependencies": {
|
6421 |
+
"d3-array": "3",
|
6422 |
+
"d3-axis": "3",
|
6423 |
+
"d3-brush": "3",
|
6424 |
+
"d3-chord": "3",
|
6425 |
+
"d3-color": "3",
|
6426 |
+
"d3-contour": "4",
|
6427 |
+
"d3-delaunay": "6",
|
6428 |
+
"d3-dispatch": "3",
|
6429 |
+
"d3-drag": "3",
|
6430 |
+
"d3-dsv": "3",
|
6431 |
+
"d3-ease": "3",
|
6432 |
+
"d3-fetch": "3",
|
6433 |
+
"d3-force": "3",
|
6434 |
+
"d3-format": "3",
|
6435 |
+
"d3-geo": "3",
|
6436 |
+
"d3-hierarchy": "3",
|
6437 |
+
"d3-interpolate": "3",
|
6438 |
+
"d3-path": "3",
|
6439 |
+
"d3-polygon": "3",
|
6440 |
+
"d3-quadtree": "3",
|
6441 |
+
"d3-random": "3",
|
6442 |
+
"d3-scale": "4",
|
6443 |
+
"d3-scale-chromatic": "3",
|
6444 |
+
"d3-selection": "3",
|
6445 |
+
"d3-shape": "3",
|
6446 |
+
"d3-time": "3",
|
6447 |
+
"d3-time-format": "4",
|
6448 |
+
"d3-timer": "3",
|
6449 |
+
"d3-transition": "3",
|
6450 |
+
"d3-zoom": "3"
|
6451 |
+
},
|
6452 |
+
"engines": {
|
6453 |
+
"node": ">=12"
|
6454 |
+
}
|
6455 |
+
},
|
6456 |
+
"node_modules/d3-array": {
|
6457 |
+
"version": "3.2.4",
|
6458 |
+
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
|
6459 |
+
"integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
|
6460 |
+
"license": "ISC",
|
6461 |
+
"dependencies": {
|
6462 |
+
"internmap": "1 - 2"
|
6463 |
+
},
|
6464 |
+
"engines": {
|
6465 |
+
"node": ">=12"
|
6466 |
+
}
|
6467 |
+
},
|
6468 |
+
"node_modules/d3-axis": {
|
6469 |
+
"version": "3.0.0",
|
6470 |
+
"resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
|
6471 |
+
"integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
|
6472 |
+
"license": "ISC",
|
6473 |
+
"engines": {
|
6474 |
+
"node": ">=12"
|
6475 |
+
}
|
6476 |
+
},
|
6477 |
+
"node_modules/d3-brush": {
|
6478 |
+
"version": "3.0.0",
|
6479 |
+
"resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
|
6480 |
+
"integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
|
6481 |
+
"license": "ISC",
|
6482 |
+
"dependencies": {
|
6483 |
+
"d3-dispatch": "1 - 3",
|
6484 |
+
"d3-drag": "2 - 3",
|
6485 |
+
"d3-interpolate": "1 - 3",
|
6486 |
+
"d3-selection": "3",
|
6487 |
+
"d3-transition": "3"
|
6488 |
+
},
|
6489 |
+
"engines": {
|
6490 |
+
"node": ">=12"
|
6491 |
+
}
|
6492 |
+
},
|
6493 |
+
"node_modules/d3-chord": {
|
6494 |
+
"version": "3.0.1",
|
6495 |
+
"resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
|
6496 |
+
"integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
|
6497 |
+
"license": "ISC",
|
6498 |
+
"dependencies": {
|
6499 |
+
"d3-path": "1 - 3"
|
6500 |
+
},
|
6501 |
+
"engines": {
|
6502 |
+
"node": ">=12"
|
6503 |
+
}
|
6504 |
+
},
|
6505 |
+
"node_modules/d3-color": {
|
6506 |
+
"version": "3.1.0",
|
6507 |
+
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
|
6508 |
+
"integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
|
6509 |
+
"license": "ISC",
|
6510 |
+
"engines": {
|
6511 |
+
"node": ">=12"
|
6512 |
+
}
|
6513 |
+
},
|
6514 |
+
"node_modules/d3-contour": {
|
6515 |
+
"version": "4.0.2",
|
6516 |
+
"resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
|
6517 |
+
"integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
|
6518 |
+
"license": "ISC",
|
6519 |
+
"dependencies": {
|
6520 |
+
"d3-array": "^3.2.0"
|
6521 |
+
},
|
6522 |
+
"engines": {
|
6523 |
+
"node": ">=12"
|
6524 |
+
}
|
6525 |
+
},
|
6526 |
+
"node_modules/d3-delaunay": {
|
6527 |
+
"version": "6.0.4",
|
6528 |
+
"resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
|
6529 |
+
"integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
|
6530 |
+
"license": "ISC",
|
6531 |
+
"dependencies": {
|
6532 |
+
"delaunator": "5"
|
6533 |
+
},
|
6534 |
+
"engines": {
|
6535 |
+
"node": ">=12"
|
6536 |
+
}
|
6537 |
+
},
|
6538 |
+
"node_modules/d3-dispatch": {
|
6539 |
+
"version": "3.0.1",
|
6540 |
+
"resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
|
6541 |
+
"integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
|
6542 |
+
"license": "ISC",
|
6543 |
+
"engines": {
|
6544 |
+
"node": ">=12"
|
6545 |
+
}
|
6546 |
+
},
|
6547 |
+
"node_modules/d3-drag": {
|
6548 |
+
"version": "3.0.0",
|
6549 |
+
"resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
|
6550 |
+
"integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
|
6551 |
+
"license": "ISC",
|
6552 |
+
"dependencies": {
|
6553 |
+
"d3-dispatch": "1 - 3",
|
6554 |
+
"d3-selection": "3"
|
6555 |
+
},
|
6556 |
+
"engines": {
|
6557 |
+
"node": ">=12"
|
6558 |
+
}
|
6559 |
+
},
|
6560 |
+
"node_modules/d3-dsv": {
|
6561 |
+
"version": "3.0.1",
|
6562 |
+
"resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
|
6563 |
+
"integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
|
6564 |
+
"license": "ISC",
|
6565 |
+
"dependencies": {
|
6566 |
+
"commander": "7",
|
6567 |
+
"iconv-lite": "0.6",
|
6568 |
+
"rw": "1"
|
6569 |
+
},
|
6570 |
+
"bin": {
|
6571 |
+
"csv2json": "bin/dsv2json.js",
|
6572 |
+
"csv2tsv": "bin/dsv2dsv.js",
|
6573 |
+
"dsv2dsv": "bin/dsv2dsv.js",
|
6574 |
+
"dsv2json": "bin/dsv2json.js",
|
6575 |
+
"json2csv": "bin/json2dsv.js",
|
6576 |
+
"json2dsv": "bin/json2dsv.js",
|
6577 |
+
"json2tsv": "bin/json2dsv.js",
|
6578 |
+
"tsv2csv": "bin/dsv2dsv.js",
|
6579 |
+
"tsv2json": "bin/dsv2json.js"
|
6580 |
+
},
|
6581 |
+
"engines": {
|
6582 |
+
"node": ">=12"
|
6583 |
+
}
|
6584 |
+
},
|
6585 |
+
"node_modules/d3-dsv/node_modules/commander": {
|
6586 |
+
"version": "7.2.0",
|
6587 |
+
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
|
6588 |
+
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
|
6589 |
+
"license": "MIT",
|
6590 |
+
"engines": {
|
6591 |
+
"node": ">= 10"
|
6592 |
+
}
|
6593 |
+
},
|
6594 |
+
"node_modules/d3-ease": {
|
6595 |
+
"version": "3.0.1",
|
6596 |
+
"resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
|
6597 |
+
"integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
|
6598 |
+
"license": "BSD-3-Clause",
|
6599 |
+
"engines": {
|
6600 |
+
"node": ">=12"
|
6601 |
+
}
|
6602 |
+
},
|
6603 |
+
"node_modules/d3-fetch": {
|
6604 |
+
"version": "3.0.1",
|
6605 |
+
"resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
|
6606 |
+
"integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
|
6607 |
+
"license": "ISC",
|
6608 |
+
"dependencies": {
|
6609 |
+
"d3-dsv": "1 - 3"
|
6610 |
+
},
|
6611 |
+
"engines": {
|
6612 |
+
"node": ">=12"
|
6613 |
+
}
|
6614 |
+
},
|
6615 |
+
"node_modules/d3-force": {
|
6616 |
+
"version": "3.0.0",
|
6617 |
+
"resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
|
6618 |
+
"integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
|
6619 |
+
"license": "ISC",
|
6620 |
+
"dependencies": {
|
6621 |
+
"d3-dispatch": "1 - 3",
|
6622 |
+
"d3-quadtree": "1 - 3",
|
6623 |
+
"d3-timer": "1 - 3"
|
6624 |
+
},
|
6625 |
+
"engines": {
|
6626 |
+
"node": ">=12"
|
6627 |
+
}
|
6628 |
+
},
|
6629 |
+
"node_modules/d3-format": {
|
6630 |
+
"version": "3.1.0",
|
6631 |
+
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
|
6632 |
+
"integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
|
6633 |
+
"license": "ISC",
|
6634 |
+
"engines": {
|
6635 |
+
"node": ">=12"
|
6636 |
+
}
|
6637 |
+
},
|
6638 |
+
"node_modules/d3-geo": {
|
6639 |
+
"version": "3.1.1",
|
6640 |
+
"resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
|
6641 |
+
"integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
|
6642 |
+
"license": "ISC",
|
6643 |
+
"dependencies": {
|
6644 |
+
"d3-array": "2.5.0 - 3"
|
6645 |
+
},
|
6646 |
+
"engines": {
|
6647 |
+
"node": ">=12"
|
6648 |
+
}
|
6649 |
+
},
|
6650 |
+
"node_modules/d3-hierarchy": {
|
6651 |
+
"version": "3.1.2",
|
6652 |
+
"resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
|
6653 |
+
"integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
|
6654 |
+
"license": "ISC",
|
6655 |
+
"engines": {
|
6656 |
+
"node": ">=12"
|
6657 |
+
}
|
6658 |
+
},
|
6659 |
+
"node_modules/d3-interpolate": {
|
6660 |
+
"version": "3.0.1",
|
6661 |
+
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
|
6662 |
+
"integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
|
6663 |
+
"license": "ISC",
|
6664 |
+
"dependencies": {
|
6665 |
+
"d3-color": "1 - 3"
|
6666 |
+
},
|
6667 |
+
"engines": {
|
6668 |
+
"node": ">=12"
|
6669 |
+
}
|
6670 |
+
},
|
6671 |
+
"node_modules/d3-path": {
|
6672 |
+
"version": "3.1.0",
|
6673 |
+
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
|
6674 |
+
"integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
|
6675 |
+
"license": "ISC",
|
6676 |
+
"engines": {
|
6677 |
+
"node": ">=12"
|
6678 |
+
}
|
6679 |
+
},
|
6680 |
+
"node_modules/d3-polygon": {
|
6681 |
+
"version": "3.0.1",
|
6682 |
+
"resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
|
6683 |
+
"integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
|
6684 |
+
"license": "ISC",
|
6685 |
+
"engines": {
|
6686 |
+
"node": ">=12"
|
6687 |
+
}
|
6688 |
+
},
|
6689 |
+
"node_modules/d3-quadtree": {
|
6690 |
+
"version": "3.0.1",
|
6691 |
+
"resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
|
6692 |
+
"integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
|
6693 |
+
"license": "ISC",
|
6694 |
+
"engines": {
|
6695 |
+
"node": ">=12"
|
6696 |
+
}
|
6697 |
+
},
|
6698 |
+
"node_modules/d3-random": {
|
6699 |
+
"version": "3.0.1",
|
6700 |
+
"resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
|
6701 |
+
"integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
|
6702 |
+
"license": "ISC",
|
6703 |
+
"engines": {
|
6704 |
+
"node": ">=12"
|
6705 |
+
}
|
6706 |
+
},
|
6707 |
+
"node_modules/d3-scale": {
|
6708 |
+
"version": "4.0.2",
|
6709 |
+
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
|
6710 |
+
"integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
|
6711 |
+
"license": "ISC",
|
6712 |
+
"dependencies": {
|
6713 |
+
"d3-array": "2.10.0 - 3",
|
6714 |
+
"d3-format": "1 - 3",
|
6715 |
+
"d3-interpolate": "1.2.0 - 3",
|
6716 |
+
"d3-time": "2.1.1 - 3",
|
6717 |
+
"d3-time-format": "2 - 4"
|
6718 |
+
},
|
6719 |
+
"engines": {
|
6720 |
+
"node": ">=12"
|
6721 |
+
}
|
6722 |
+
},
|
6723 |
+
"node_modules/d3-scale-chromatic": {
|
6724 |
+
"version": "3.1.0",
|
6725 |
+
"resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
|
6726 |
+
"integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
|
6727 |
+
"license": "ISC",
|
6728 |
+
"dependencies": {
|
6729 |
+
"d3-color": "1 - 3",
|
6730 |
+
"d3-interpolate": "1 - 3"
|
6731 |
+
},
|
6732 |
+
"engines": {
|
6733 |
+
"node": ">=12"
|
6734 |
+
}
|
6735 |
+
},
|
6736 |
+
"node_modules/d3-selection": {
|
6737 |
+
"version": "3.0.0",
|
6738 |
+
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
|
6739 |
+
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
|
6740 |
+
"license": "ISC",
|
6741 |
+
"engines": {
|
6742 |
+
"node": ">=12"
|
6743 |
+
}
|
6744 |
+
},
|
6745 |
+
"node_modules/d3-shape": {
|
6746 |
+
"version": "3.2.0",
|
6747 |
+
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
|
6748 |
+
"integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
|
6749 |
+
"license": "ISC",
|
6750 |
+
"dependencies": {
|
6751 |
+
"d3-path": "^3.1.0"
|
6752 |
+
},
|
6753 |
+
"engines": {
|
6754 |
+
"node": ">=12"
|
6755 |
+
}
|
6756 |
+
},
|
6757 |
+
"node_modules/d3-time": {
|
6758 |
+
"version": "3.1.0",
|
6759 |
+
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
|
6760 |
+
"integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
|
6761 |
+
"license": "ISC",
|
6762 |
+
"dependencies": {
|
6763 |
+
"d3-array": "2 - 3"
|
6764 |
+
},
|
6765 |
+
"engines": {
|
6766 |
+
"node": ">=12"
|
6767 |
+
}
|
6768 |
+
},
|
6769 |
+
"node_modules/d3-time-format": {
|
6770 |
+
"version": "4.1.0",
|
6771 |
+
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
|
6772 |
+
"integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
|
6773 |
+
"license": "ISC",
|
6774 |
+
"dependencies": {
|
6775 |
+
"d3-time": "1 - 3"
|
6776 |
+
},
|
6777 |
+
"engines": {
|
6778 |
+
"node": ">=12"
|
6779 |
+
}
|
6780 |
+
},
|
6781 |
+
"node_modules/d3-timer": {
|
6782 |
+
"version": "3.0.1",
|
6783 |
+
"resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
|
6784 |
+
"integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
|
6785 |
+
"license": "ISC",
|
6786 |
+
"engines": {
|
6787 |
+
"node": ">=12"
|
6788 |
+
}
|
6789 |
+
},
|
6790 |
+
"node_modules/d3-transition": {
|
6791 |
+
"version": "3.0.1",
|
6792 |
+
"resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
|
6793 |
+
"integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
|
6794 |
+
"license": "ISC",
|
6795 |
+
"dependencies": {
|
6796 |
+
"d3-color": "1 - 3",
|
6797 |
+
"d3-dispatch": "1 - 3",
|
6798 |
+
"d3-ease": "1 - 3",
|
6799 |
+
"d3-interpolate": "1 - 3",
|
6800 |
+
"d3-timer": "1 - 3"
|
6801 |
+
},
|
6802 |
+
"engines": {
|
6803 |
+
"node": ">=12"
|
6804 |
+
},
|
6805 |
+
"peerDependencies": {
|
6806 |
+
"d3-selection": "2 - 3"
|
6807 |
+
}
|
6808 |
+
},
|
6809 |
+
"node_modules/d3-zoom": {
|
6810 |
+
"version": "3.0.0",
|
6811 |
+
"resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
|
6812 |
+
"integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
|
6813 |
+
"license": "ISC",
|
6814 |
+
"dependencies": {
|
6815 |
+
"d3-dispatch": "1 - 3",
|
6816 |
+
"d3-drag": "2 - 3",
|
6817 |
+
"d3-interpolate": "1 - 3",
|
6818 |
+
"d3-selection": "2 - 3",
|
6819 |
+
"d3-transition": "2 - 3"
|
6820 |
+
},
|
6821 |
+
"engines": {
|
6822 |
+
"node": ">=12"
|
6823 |
+
}
|
6824 |
+
},
|
6825 |
"node_modules/damerau-levenshtein": {
|
6826 |
"version": "1.0.8",
|
6827 |
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
|
|
|
6992 |
"url": "https://github.com/sponsors/ljharb"
|
6993 |
}
|
6994 |
},
|
6995 |
+
"node_modules/delaunator": {
|
6996 |
+
"version": "5.0.1",
|
6997 |
+
"resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz",
|
6998 |
+
"integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==",
|
6999 |
+
"license": "ISC",
|
7000 |
+
"dependencies": {
|
7001 |
+
"robust-predicates": "^3.0.2"
|
7002 |
+
}
|
7003 |
+
},
|
7004 |
"node_modules/delayed-stream": {
|
7005 |
"version": "1.0.0",
|
7006 |
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
|
|
9745 |
"node": ">= 0.4"
|
9746 |
}
|
9747 |
},
|
9748 |
+
"node_modules/internmap": {
|
9749 |
+
"version": "2.0.3",
|
9750 |
+
"resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
|
9751 |
+
"integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
|
9752 |
+
"license": "ISC",
|
9753 |
+
"engines": {
|
9754 |
+
"node": ">=12"
|
9755 |
+
}
|
9756 |
+
},
|
9757 |
+
"node_modules/interval-tree-1d": {
|
9758 |
+
"version": "1.0.4",
|
9759 |
+
"resolved": "https://registry.npmjs.org/interval-tree-1d/-/interval-tree-1d-1.0.4.tgz",
|
9760 |
+
"integrity": "sha512-wY8QJH+6wNI0uh4pDQzMvl+478Qh7Rl4qLmqiluxALlNvl+I+o5x38Pw3/z7mDPTPS1dQalZJXsmbvxx5gclhQ==",
|
9761 |
+
"license": "MIT",
|
9762 |
+
"dependencies": {
|
9763 |
+
"binary-search-bounds": "^2.0.0"
|
9764 |
+
}
|
9765 |
+
},
|
9766 |
"node_modules/ipaddr.js": {
|
9767 |
"version": "2.2.0",
|
9768 |
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
|
|
|
10279 |
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
10280 |
"license": "ISC"
|
10281 |
},
|
10282 |
+
"node_modules/isoformat": {
|
10283 |
+
"version": "0.2.1",
|
10284 |
+
"resolved": "https://registry.npmjs.org/isoformat/-/isoformat-0.2.1.tgz",
|
10285 |
+
"integrity": "sha512-tFLRAygk9NqrRPhJSnNGh7g7oaVWDwR0wKh/GM2LgmPa50Eg4UfyaCO4I8k6EqJHl1/uh2RAD6g06n5ygEnrjQ==",
|
10286 |
+
"license": "ISC"
|
10287 |
+
},
|
10288 |
"node_modules/istanbul-lib-coverage": {
|
10289 |
"version": "3.2.2",
|
10290 |
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
|
|
|
14928 |
"url": "https://github.com/sponsors/isaacs"
|
14929 |
}
|
14930 |
},
|
14931 |
+
"node_modules/robust-predicates": {
|
14932 |
+
"version": "3.0.2",
|
14933 |
+
"resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
|
14934 |
+
"integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==",
|
14935 |
+
"license": "Unlicense"
|
14936 |
+
},
|
14937 |
"node_modules/rollup": {
|
14938 |
"version": "2.79.2",
|
14939 |
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
|
|
|
15011 |
"queue-microtask": "^1.2.2"
|
15012 |
}
|
15013 |
},
|
15014 |
+
"node_modules/rw": {
|
15015 |
+
"version": "1.3.3",
|
15016 |
+
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
|
15017 |
+
"integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
|
15018 |
+
"license": "BSD-3-Clause"
|
15019 |
+
},
|
15020 |
"node_modules/safe-array-concat": {
|
15021 |
"version": "1.1.3",
|
15022 |
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
|
|
|
16667 |
"node": ">=0.6"
|
16668 |
}
|
16669 |
},
|
16670 |
+
"node_modules/topojson-client": {
|
16671 |
+
"version": "3.1.0",
|
16672 |
+
"resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz",
|
16673 |
+
"integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
|
16674 |
+
"license": "ISC",
|
16675 |
+
"dependencies": {
|
16676 |
+
"commander": "2"
|
16677 |
+
},
|
16678 |
+
"bin": {
|
16679 |
+
"topo2geo": "bin/topo2geo",
|
16680 |
+
"topomerge": "bin/topomerge",
|
16681 |
+
"topoquantize": "bin/topoquantize"
|
16682 |
+
}
|
16683 |
+
},
|
16684 |
+
"node_modules/topojson-client/node_modules/commander": {
|
16685 |
+
"version": "2.20.3",
|
16686 |
+
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
16687 |
+
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
16688 |
+
"license": "MIT"
|
16689 |
+
},
|
16690 |
+
"node_modules/topojson-simplify": {
|
16691 |
+
"version": "3.0.3",
|
16692 |
+
"resolved": "https://registry.npmjs.org/topojson-simplify/-/topojson-simplify-3.0.3.tgz",
|
16693 |
+
"integrity": "sha512-V+pBjLVzSQ3+hSOxBiV01OVXgFiCmMO8ia3huxKEyIMTC1ApQHBcdXdOqcQ6U2JJJD31TZduwY6KyF15R8sUgg==",
|
16694 |
+
"license": "ISC",
|
16695 |
+
"dependencies": {
|
16696 |
+
"commander": "2",
|
16697 |
+
"topojson-client": "3"
|
16698 |
+
},
|
16699 |
+
"bin": {
|
16700 |
+
"toposimplify": "bin/toposimplify"
|
16701 |
+
}
|
16702 |
+
},
|
16703 |
+
"node_modules/topojson-simplify/node_modules/commander": {
|
16704 |
+
"version": "2.20.3",
|
16705 |
+
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
16706 |
+
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
16707 |
+
"license": "MIT"
|
16708 |
+
},
|
16709 |
"node_modules/tough-cookie": {
|
16710 |
"version": "4.1.4",
|
16711 |
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
|
frontend/package.json
CHANGED
@@ -3,6 +3,7 @@
|
|
3 |
"version": "0.1.0",
|
4 |
"private": true,
|
5 |
"dependencies": {
|
|
|
6 |
"@testing-library/dom": "^10.4.0",
|
7 |
"@testing-library/jest-dom": "^6.6.3",
|
8 |
"@testing-library/react": "^16.2.0",
|
@@ -12,6 +13,7 @@
|
|
12 |
"react": "^19.0.0",
|
13 |
"react-dom": "^19.0.0",
|
14 |
"react-scripts": "5.0.1",
|
|
|
15 |
"web-vitals": "^2.1.4"
|
16 |
},
|
17 |
"scripts": {
|
|
|
3 |
"version": "0.1.0",
|
4 |
"private": true,
|
5 |
"dependencies": {
|
6 |
+
"@observablehq/plot": "^0.6.17",
|
7 |
"@testing-library/dom": "^10.4.0",
|
8 |
"@testing-library/jest-dom": "^6.6.3",
|
9 |
"@testing-library/react": "^16.2.0",
|
|
|
13 |
"react": "^19.0.0",
|
14 |
"react-dom": "^19.0.0",
|
15 |
"react-scripts": "5.0.1",
|
16 |
+
"topojson-simplify": "^3.0.3",
|
17 |
"web-vitals": "^2.1.4"
|
18 |
},
|
19 |
"scripts": {
|
frontend/public/LICENSE
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
un.*.json: https://geoportal.un.org/arcgis/apps/sites/#/geohub/datasets/d7caaff3ef4b4f7c82689b7c4694ad92/about
|
frontend/public/countries-110m.json
DELETED
The diff for this file is too large to render.
See raw diff
|
|
frontend/public/un.topo.json
ADDED
The diff for this file is too large to render.
See raw diff
|
|
frontend/src/App.js
CHANGED
@@ -13,7 +13,6 @@ function App () {
|
|
13 |
const [error, setError] = useState(null)
|
14 |
const [allSuggestions, setAllSuggestions] = useState([])
|
15 |
const [filters, setFilters] = useState([])
|
16 |
-
const [topology, setTopology] = useState(null)
|
17 |
useEffect(() => {
|
18 |
fetch('/results.json')
|
19 |
.then(response => {
|
@@ -32,22 +31,6 @@ function App () {
|
|
32 |
})
|
33 |
}, [])
|
34 |
|
35 |
-
useEffect(() => {
|
36 |
-
fetch('/countries-110m.json')
|
37 |
-
.then(response => {
|
38 |
-
if (!response.ok) {
|
39 |
-
throw new Error('Network response was not ok')
|
40 |
-
}
|
41 |
-
return response.json()
|
42 |
-
})
|
43 |
-
.then(jsonData => {
|
44 |
-
setTopology(jsonData)
|
45 |
-
})
|
46 |
-
.catch(err => {
|
47 |
-
setError(err.message)
|
48 |
-
setLoading(false)
|
49 |
-
})
|
50 |
-
}, [])
|
51 |
useEffect(() => {
|
52 |
if (data) {
|
53 |
const models = data.model_table.map(item => ({ type: 'Model', value: item.model, detail: item.provider, searchText: item.provider.toLowerCase() + ' ' + item.model.toLowerCase() }))
|
@@ -105,15 +88,15 @@ function App () {
|
|
105 |
{data && (
|
106 |
<>
|
107 |
<div
|
|
|
108 |
style={{
|
109 |
flex: '100vw 100vw 100vw',
|
110 |
-
maxWidth: 'min(100vw,
|
111 |
-
|
|
|
112 |
}}
|
113 |
>
|
114 |
-
|
115 |
-
<WorldMap data={data} topology={topology} />
|
116 |
-
</div>
|
117 |
</div>
|
118 |
<div
|
119 |
style={{
|
|
|
13 |
const [error, setError] = useState(null)
|
14 |
const [allSuggestions, setAllSuggestions] = useState([])
|
15 |
const [filters, setFilters] = useState([])
|
|
|
16 |
useEffect(() => {
|
17 |
fetch('/results.json')
|
18 |
.then(response => {
|
|
|
31 |
})
|
32 |
}, [])
|
33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
useEffect(() => {
|
35 |
if (data) {
|
36 |
const models = data.model_table.map(item => ({ type: 'Model', value: item.model, detail: item.provider, searchText: item.provider.toLowerCase() + ' ' + item.model.toLowerCase() }))
|
|
|
88 |
{data && (
|
89 |
<>
|
90 |
<div
|
91 |
+
id='figure'
|
92 |
style={{
|
93 |
flex: '100vw 100vw 100vw',
|
94 |
+
maxWidth: 'min(100vw, 800px)',
|
95 |
+
alignItems: 'center',
|
96 |
+
justifyContent: 'center',
|
97 |
}}
|
98 |
>
|
99 |
+
<WorldMap data={data} />
|
|
|
|
|
100 |
</div>
|
101 |
<div
|
102 |
style={{
|
frontend/src/components/WorldMap.js
CHANGED
@@ -1,58 +1,45 @@
|
|
1 |
-
import { useRef, useEffect } from 'react'
|
2 |
-
import * as
|
3 |
-
import
|
4 |
|
5 |
-
const WorldMap = (
|
6 |
-
const
|
|
|
7 |
|
8 |
useEffect(() => {
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
// Set dimensions
|
14 |
-
const width = 800;
|
15 |
-
const height = 450;
|
16 |
-
|
17 |
-
// Create SVG
|
18 |
-
const svg = d3.select(svgRef.current)
|
19 |
-
.attr("width", width)
|
20 |
-
.attr("height", height)
|
21 |
-
.attr("viewBox", [0, 0, width, height])
|
22 |
-
.attr("style", "max-width: 100%; height: auto;");
|
23 |
-
|
24 |
-
// Create a projection
|
25 |
-
const projection = d3.geoNaturalEarth1()
|
26 |
-
.scale(width / 2 / Math.PI)
|
27 |
-
.translate([width / 2, height / 2]);
|
28 |
-
|
29 |
-
// Create a path generator
|
30 |
-
const path = d3.geoPath()
|
31 |
-
.projection(projection);
|
32 |
-
|
33 |
-
// Convert TopoJSON to GeoJSON
|
34 |
-
const countries = feature(topology, topology.objects.countries);
|
35 |
-
|
36 |
-
// Draw the map
|
37 |
-
svg.append("g")
|
38 |
-
.selectAll("path")
|
39 |
-
.data(countries.features)
|
40 |
-
.join("path")
|
41 |
-
.attr("fill", "#ccc") // Grey background
|
42 |
-
.attr("d", path)
|
43 |
-
.attr("stroke", "#fff")
|
44 |
-
.attr("stroke-width", 0.5);
|
45 |
-
};
|
46 |
-
|
47 |
-
createMap();
|
48 |
-
}, [data, topology]);
|
49 |
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
-
export default WorldMap
|
|
|
1 |
+
import { useRef, useEffect, useState } from 'react'
|
2 |
+
import * as topojson from 'topojson-client'
|
3 |
+
import * as Plot from '@observablehq/plot'
|
4 |
|
5 |
+
const WorldMap = () => {
|
6 |
+
const containerRef = useRef()
|
7 |
+
const [data, setData] = useState()
|
8 |
|
9 |
useEffect(() => {
|
10 |
+
fetch('/un.topo.json')
|
11 |
+
.then(res => res.json())
|
12 |
+
.then(setData)
|
13 |
+
}, [])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
15 |
+
useEffect(() => {
|
16 |
+
if (data === undefined) return
|
17 |
+
// const plot = Plot.plot({
|
18 |
+
// y: {grid: true},
|
19 |
+
// color: {scheme: "burd"},
|
20 |
+
// marks: [
|
21 |
+
// Plot.ruleY([0]),
|
22 |
+
// Plot.dot(data, {x: "Date", y: "Anomaly", stroke: "Anomaly"})
|
23 |
+
// ]
|
24 |
+
// });
|
25 |
+
const countries = topojson.feature(data, data.objects.un)
|
26 |
+
const plot = Plot.plot({
|
27 |
+
width: 750,
|
28 |
+
height: 400,
|
29 |
+
projection: 'equal-earth',
|
30 |
+
marks: [
|
31 |
+
Plot.geo(countries, {
|
32 |
+
// fill: d => console.log(d.properties?.iso2cd),
|
33 |
+
// title: d => d.properties?.iso2cd
|
34 |
+
// tip: true
|
35 |
+
})
|
36 |
+
]
|
37 |
+
})
|
38 |
+
containerRef.current.append(plot)
|
39 |
+
return () => plot.remove()
|
40 |
+
}, [data])
|
41 |
+
|
42 |
+
return <svg ref={containerRef} style={{ width: '100%', height: '100%' }} />
|
43 |
+
}
|
44 |
|
45 |
+
export default WorldMap
|