diff --git a/package-lock.json b/package-lock.json index 7f6f0f1..1915d07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1426,6 +1426,33 @@ "loader-utils": "^1.2.3" } }, + "@turf/boolean-point-in-polygon": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.0.1.tgz", + "integrity": "sha512-FKLOZ124vkJhjzNSDcqpwp2NvfnsbYoUOt5iAE7uskt4svix5hcjIEgX9sELFTJpbLGsD1mUbKdfns8tZxcMNg==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/helpers": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.1.4.tgz", + "integrity": "sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g==" + }, + "@turf/invariant": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.1.2.tgz", + "integrity": "sha512-WU08Ph8j0J2jVGlQCKChXoCtI50BB3yEH21V++V0T4cR1T27HKCxkehV2sYMwTierfMBgjwSwDIsxnR4/2mWXg==", + "requires": { + "@turf/helpers": "6.x" + } + }, + "@tweenjs/tween.js": { + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.0.tgz", + "integrity": "sha512-z45HU0G0e/SenbvGdAlTpUR5Hur5zwZXQcqfI+f7EnVHdeb2oMI2rQghEePu7uXuvBC0nuKWG5YtZ1nWbuvqzQ==" + }, "@types/babel__core": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", @@ -1468,18 +1495,265 @@ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, + "@types/d3": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-5.7.2.tgz", + "integrity": "sha512-7/wClB8ycneWGy3jdvLfXKTd5SoTg9hji7IdJ0RuO9xTY54YpJ8zlcFADcXhY1J3kCBwxp+/1jeN6a5OMwgYOw==", + "dev": true, + "requires": { + "@types/d3-array": "^1", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-collection": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-voronoi": "*", + "@types/d3-zoom": "*" + } + }, + "@types/d3-array": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.7.tgz", + "integrity": "sha512-51vHWuUyDOi+8XuwPrTw3cFqyh2Slg9y8COYkRfjCPG9TfYqY0hoNPzv/8BrcAy0FeQBzqEo/D/8Nk2caOQJnA==", + "dev": true + }, + "@types/d3-axis": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-BZISgSD5M8TgURyNtcPAmUB9sk490CO1Thb6/gIn0WZTt3Y50IssX+2Z0vTccoqZksUDTep0b+o4ofXslvNbqg==", + "dev": true, + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-brush": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.1.1.tgz", + "integrity": "sha512-Exx14trm/q2cskHyMjCrdDllOQ35r1/pmZXaOIt8bBHwYNk722vWY3VxHvN0jdFFX7p2iL3+gD+cGny/aEmhlw==", + "dev": true, + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-chord": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.9.tgz", + "integrity": "sha512-UA6lI9CVW5cT5Ku/RV4hxoFn4mKySHm7HEgodtfRthAj1lt9rKZEPon58vyYfk+HIAm33DtJJgZwMXy2QgyPXw==", + "dev": true + }, + "@types/d3-collection": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.8.tgz", + "integrity": "sha512-y5lGlazdc0HNO0F3UUX2DPE7OmYvd9Kcym4hXwrJcNUkDaypR5pX+apuMikl9LfTxKItJsY9KYvzBulpCKyvuQ==", + "dev": true + }, + "@types/d3-color": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.2.2.tgz", + "integrity": "sha512-6pBxzJ8ZP3dYEQ4YjQ+NVbQaOflfgXq/JbDiS99oLobM2o72uAST4q6yPxHv6FOTCRC/n35ktuo8pvw/S4M7sw==", + "dev": true + }, + "@types/d3-contour": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-1.3.0.tgz", + "integrity": "sha512-AUCUIjEnC5lCGBM9hS+MryRaFLIrPls4Rbv6ktqbd+TK/RXZPwOy9rtBWmGpbeXcSOYCJTUDwNJuEnmYPJRxHQ==", + "dev": true, + "requires": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "@types/d3-dispatch": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.8.tgz", + "integrity": "sha512-lCDtqoYez0TgFN3FljBXrz2icqeSzD0gufGook6DPBia+NOh2TBfogjHIsmNa/a+ZOewlHtq4cgLY80O1uLymw==", + "dev": true + }, + "@types/d3-drag": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.3.tgz", + "integrity": "sha512-rWB5SPvkYVxW3sqUxHOJUZwifD0KqvKwvt1bhNqcLpW6Azsd0BJgRNcyVW8GAferaAk5r8dzeZnf9zKlg9+xMQ==", + "dev": true, + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-dsv": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.0.36.tgz", + "integrity": "sha512-jbIWQ27QJcBNMZbQv0NSQMHnBDCmxghAxePxgyiPH1XPCRkOsTBei7jcdi3fDrUCGpCV3lKrSZFSlOkhUQVClA==", + "dev": true + }, + "@types/d3-ease": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.9.tgz", + "integrity": "sha512-U5ADevQ+W6fy32FVZZC9EXallcV/Mi12A5Tkd0My5MrC7T8soMQEhlDAg88XUWm0zoCQlB4XV0en/24LvuDB4Q==", + "dev": true + }, + "@types/d3-fetch": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-1.1.5.tgz", + "integrity": "sha512-o9c0ItT5/Gl3wbNuVpzRnYX1t3RghzeWAjHUVLuyZJudiTxC4f/fC0ZPFWLQ2lVY8pAMmxpV8TJ6ETYCgPeI3A==", + "dev": true, + "requires": { + "@types/d3-dsv": "*" + } + }, + "@types/d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-jqK+I36uz4kTBjyk39meed5y31Ab+tXYN/x1dn3nZEus9yOHCLc+VrcIYLc/aSQ0Y7tMPRlIhLetulME76EiiA==", + "dev": true + }, + "@types/d3-format": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.3.1.tgz", + "integrity": "sha512-KAWvReOKMDreaAwOjdfQMm0HjcUMlQG47GwqdVKgmm20vTd2pucj0a70c3gUSHrnsmo6H2AMrkBsZU2UhJLq8A==", + "dev": true + }, + "@types/d3-geo": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.11.1.tgz", + "integrity": "sha512-Ox8WWOG3igDRoep/dNsGbOiSJYdUG3ew/6z0ETvHyAtXZVBjOE0S96zSSmzgl0gqQ3RdZjn2eeJOj9oRcMZPkQ==", + "dev": true, + "requires": { + "@types/geojson": "*" + } + }, + "@types/d3-hierarchy": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.6.tgz", + "integrity": "sha512-vvSaIDf/Ov0o3KwMT+1M8+WbnnlRiGjlGD5uvk83a1mPCTd/E5x12bUJ/oP55+wUY/4Kb5kc67rVpVGJ2KUHxg==", + "dev": true + }, + "@types/d3-interpolate": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.3.1.tgz", + "integrity": "sha512-z8Zmi08XVwe8e62vP6wcA+CNuRhpuUU5XPEfqpG0hRypDE5BWNthQHB1UNWWDB7ojCbGaN4qBdsWp5kWxhT1IQ==", + "dev": true, + "requires": { + "@types/d3-color": "*" + } + }, + "@types/d3-path": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.8.tgz", + "integrity": "sha512-AZGHWslq/oApTAHu9+yH/Bnk63y9oFOMROtqPAtxl5uB6qm1x2lueWdVEjsjjV3Qc2+QfuzKIwIR5MvVBakfzA==", + "dev": true + }, + "@types/d3-polygon": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.7.tgz", + "integrity": "sha512-Xuw0eSjQQKs8jTiNbntWH0S+Xp+JyhqxmQ0YAQ3rDu6c3kKMFfgsaGN7Jv5u3zG6yVX/AsLP/Xs/QRjmi9g43Q==", + "dev": true + }, + "@types/d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-0ajFawWicfjsaCLh6NzxOyVDYhQAmMFbsiI3MPGLInorauHFEh9/Cl6UHNf+kt/J1jfoxKY/ZJaKAoDpbvde5Q==", + "dev": true + }, + "@types/d3-random": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-Jui+Zn28pQw/3EayPKaN4c/PqTvqNbIPjHkgIIFnxne1FdwNjfHtAIsZIBMKlquQNrrMjFzCrlF2gPs3xckqaA==", + "dev": true + }, "@types/d3-scale": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-2.2.0.tgz", "integrity": "sha512-oQFanN0/PiR2oySHfj+zAAkK1/p4LD32Nt1TMVmzk+bYHk7vgIg/iTXQWitp1cIkDw4LMdcgvO63wL+mNs47YA==", + "dev": true, "requires": { "@types/d3-time": "*" } }, + "@types/d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-9/D7cOBKdZdTCPc6re0HeSUFBM0aFzdNdmYggUWT9SRRiYSOa6Ys2xdTwHKgc1WS3gGfwTMatBOdWCS863REsg==", + "dev": true + }, + "@types/d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-ksY8UxvTXpzD91Dy3D9zZg98yF2ZEPMKJd8ZQJlZt1QH3Xxr08s6fESEdC2l0Kbe6Xd9VhaoJX06cRaMR1lEnA==", + "dev": true + }, + "@types/d3-shape": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.2.tgz", + "integrity": "sha512-LtD8EaNYCaBRzHzaAiIPrfcL3DdIysc81dkGlQvv7WQP3+YXV7b0JJTtR1U3bzeRieS603KF4wUo+ZkJVenh8w==", + "dev": true, + "requires": { + "@types/d3-path": "*" + } + }, "@types/d3-time": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.0.10.tgz", - "integrity": "sha512-aKf62rRQafDQmSiv1NylKhIMmznsjRN+MnXRXTqHoqm0U/UZzVpdrtRnSIfdiLS616OuC1soYeX1dBg2n1u8Xw==" + "integrity": "sha512-aKf62rRQafDQmSiv1NylKhIMmznsjRN+MnXRXTqHoqm0U/UZzVpdrtRnSIfdiLS616OuC1soYeX1dBg2n1u8Xw==", + "dev": true + }, + "@types/d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-tJSyXta8ZyJ52wDDHA96JEsvkbL6jl7wowGmuf45+fAkj5Y+SQOnz0N7/H68OWmPshPsAaWMQh+GAws44IzH3g==", + "dev": true + }, + "@types/d3-timer": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.9.tgz", + "integrity": "sha512-WvfJ3LFxBbWjqRGz9n7GJt08RrTHPJDVsIwwoCMROlqF+iDacYiAFjf9oqnq0mXpb2juA2N/qjKP+MKdal3YNQ==", + "dev": true + }, + "@types/d3-transition": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.1.6.tgz", + "integrity": "sha512-/F+O2r4oz4G9ATIH3cuSCMGphAnl7VDx7SbENEK0NlI/FE8Jx2oiIrv0uTrpg7yF/AmuWbqp7AGdEHAPIh24Gg==", + "dev": true, + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-voronoi": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.9.tgz", + "integrity": "sha512-DExNQkaHd1F3dFPvGA/Aw2NGyjMln6E9QzsiqOcBgnE+VInYnFBHBBySbZQts6z6xD+5jTfKCP7M4OqMyVjdwQ==", + "dev": true + }, + "@types/d3-zoom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.7.4.tgz", + "integrity": "sha512-5jnFo/itYhJeB2khO/lKe730kW/h2EbKMOvY0uNp3+7NdPm4w63DwPEMxifQZ7n902xGYK5DdU67FmToSoy4VA==", + "dev": true, + "requires": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } }, "@types/eslint-visitor-keys": { "version": "1.0.0", @@ -1491,6 +1765,12 @@ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" }, + "@types/geojson": { + "version": "7946.0.7", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz", + "integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==", + "dev": true + }, "@types/glob": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", @@ -1820,6 +2100,11 @@ "negotiator": "0.6.2" } }, + "accessor-fn": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/accessor-fn/-/accessor-fn-1.3.0.tgz", + "integrity": "sha512-NC5BYjrfBonksWxXrZ1WsPnh70sTQC2Uas9IL0RHQN5OETP4dO/bviPxZ7zTOahhRQ7o6avJg3ImJvRbuyHASg==" + }, "acorn": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", @@ -3919,21 +4204,159 @@ "type": "^1.0.1" } }, + "d3": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", + "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", + "requires": { + "d3-array": "1", + "d3-axis": "1", + "d3-brush": "1", + "d3-chord": "1", + "d3-collection": "1", + "d3-color": "1", + "d3-contour": "1", + "d3-dispatch": "1", + "d3-drag": "1", + "d3-dsv": "1", + "d3-ease": "1", + "d3-fetch": "1", + "d3-force": "1", + "d3-format": "1", + "d3-geo": "1", + "d3-hierarchy": "1", + "d3-interpolate": "1", + "d3-path": "1", + "d3-polygon": "1", + "d3-quadtree": "1", + "d3-random": "1", + "d3-scale": "2", + "d3-scale-chromatic": "1", + "d3-selection": "1", + "d3-shape": "1", + "d3-time": "1", + "d3-time-format": "2", + "d3-timer": "1", + "d3-transition": "1", + "d3-voronoi": "1", + "d3-zoom": "1" + } + }, "d3-array": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.4.0.tgz", - "integrity": "sha512-KQ41bAF2BMakf/HdKT865ALd4cgND6VcIztVQZUTt0+BH3RWy6ZYnHghVXf6NFjt2ritLr8H1T8LreAAlfiNcw==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-axis": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" + }, + "d3-brush": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.5.tgz", + "integrity": "sha512-rEaJ5gHlgLxXugWjIkolTA0OyMvw8UWU1imYXy1v642XyyswmI1ybKOv05Ft+ewq+TFmdliD3VuK0pRp1VT/5A==", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "d3-chord": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", + "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "requires": { + "d3-array": "1", + "d3-path": "1" + } + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" }, "d3-color": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" }, + "d3-contour": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "requires": { + "d3-array": "^1.1.1" + } + }, + "d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + }, + "d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-dsv": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", + "requires": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + } + }, + "d3-ease": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz", + "integrity": "sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ==" + }, + "d3-fetch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", + "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", + "requires": { + "d3-dsv": "1" + } + }, + "d3-force": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", + "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, "d3-format": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz", "integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw==" }, + "d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "requires": { + "d3-array": "1" + } + }, + "d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" + }, "d3-interpolate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", @@ -3942,18 +4365,61 @@ "d3-color": "1" } }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-polygon": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", + "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" + }, + "d3-quadtree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" + }, + "d3-random": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" + }, "d3-scale": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.1.tgz", - "integrity": "sha512-huz5byJO/6MPpz6Q8d4lg7GgSpTjIZW/l+1MQkzKfu2u8P6hjaXaStOpmyrD6ymKoW87d2QVFCKvSjLwjzx/rA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", "requires": { - "d3-array": "1.2.0 - 2", + "d3-array": "^1.2.0", + "d3-collection": "1", "d3-format": "1", - "d3-interpolate": "^1.2.0", + "d3-interpolate": "1", "d3-time": "1", "d3-time-format": "2" } }, + "d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "requires": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, "d3-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", @@ -3967,6 +4433,41 @@ "d3-time": "1" } }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "d3-transition": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", + "requires": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "d3-voronoi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" + }, + "d3-zoom": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -3980,6 +4481,14 @@ "assert-plus": "^1.0.0" } }, + "data-joint": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/data-joint/-/data-joint-1.2.3.tgz", + "integrity": "sha512-un7896FtODs3x2v55w7aoXLcNYR47z6LcpAsUdWhbQ6tDVeZti0MZusMM+pzbXJ4Qn1A9WeGSGZgCf7GM65pQQ==", + "requires": { + "index-array-by": "^1.3.0" + } + }, "data-urls": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", @@ -4002,6 +4511,16 @@ } } }, + "dayjs": { + "version": "1.8.30", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.30.tgz", + "integrity": "sha512-5s5IGuP5bVvIbOWkEDcfmXsUj24fZW1NMHVVSdSFF/kW8d+alZcI9SpBKC+baEyBe+z3fUp17y75ulstv5swUw==" + }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -4142,6 +4661,11 @@ } } }, + "delaunator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz", + "integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==" + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -4387,6 +4911,11 @@ } } }, + "earcut": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz", + "integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ==" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -4577,11 +5106,6 @@ "ext": "^1.1.2" } }, - "es6-tween": { - "version": "5.5.11", - "resolved": "https://registry.npmjs.org/es6-tween/-/es6-tween-5.5.11.tgz", - "integrity": "sha512-pRog/aPrGkPnblRJvuGcVTxlLqIu1TivB39zc6lw7jgOqIyOkqTBlTVr7ynlLjVGviezfYc3CZJWVAtOU3aoXQ==" - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -5635,6 +6159,14 @@ "map-cache": "^0.2.2" } }, + "frame-ticker": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/frame-ticker/-/frame-ticker-1.0.3.tgz", + "integrity": "sha1-LJnT/rtJP9HTYhNRzQAxiXlKEkU=", + "requires": { + "simplesignal": "^2.1.6" + } + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -5900,6 +6432,19 @@ } } }, + "globe.gl": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/globe.gl/-/globe.gl-2.14.0.tgz", + "integrity": "sha512-tl6Eq2mtFR49qImnAQ8tH3yrNULAFgmXAenogZLYTCp0nQ5Qw7yXD+QFgLou026aQCvNVBaDZ6LYZnLJZD4WfA==", + "requires": { + "@tweenjs/tween.js": "^18.6.0", + "accessor-fn": "^1.3.0", + "kapsule": "^1.13.3", + "three": "^0.118.3", + "three-globe": "^2.8.7", + "three-render-objects": "^1.24.0" + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -5926,6 +6471,11 @@ } } }, + "h3-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/h3-js/-/h3-js-3.6.4.tgz", + "integrity": "sha512-wMu0Y+vdh4xx2WT1jqy4QDBgJupjBfHsGaMtMsFocdZdIsfxLFufzjGcmReOSfKQ+twRO2XjXAmDY9h1nq99EA==" + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -6359,6 +6909,11 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, + "index-array-by": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/index-array-by/-/index-array-by-1.3.0.tgz", + "integrity": "sha512-INSV8BJwW/IF9wj/hzq6tDQhc3AYBnQ/wY9mNIGiPEvxDI1sR0OaL1VQg74ZIZqg3fbmW5zQgf2Bxc51zDwRZg==" + }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -7505,6 +8060,14 @@ "object.assign": "^4.1.0" } }, + "kapsule": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/kapsule/-/kapsule-1.13.3.tgz", + "integrity": "sha512-Qgzn1p0ywJsXJ3NBjIGst/EGvH2VF+YeVsVfWHZ1ZFX1v7AJfz215OWf3mRFy6NZBbN67yc1qUxAuJU+vuTtAA==", + "requires": { + "debounce": "^1.2.0" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -8971,10 +9534,13 @@ "ts-pnp": "^1.1.6" } }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + "polished": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/polished/-/polished-3.6.5.tgz", + "integrity": "sha512-VwhC9MlhW7O5dg/z7k32dabcAFW1VI2+7fSe8cE/kXcfL7mVdoa5UxciYGW2sJU78ldDLT6+ROEKIZKFNTnUXQ==", + "requires": { + "@babel/runtime": "^7.9.2" + } }, "portfinder": { "version": "1.0.26", @@ -10453,21 +11019,6 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" }, - "react-globe": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-globe/-/react-globe-4.0.0.tgz", - "integrity": "sha512-p62sQ357CsXmGBMO/jZPC5hQ5XhRmWDwnOnnuiv5948U/7NNWgWr8Eio0+QJ+rixezphupPDP1GzgywC327JGA==", - "requires": { - "@types/d3-scale": "^2.1.1", - "d3-scale": "^3.0.0", - "es6-tween": "^5.5.10", - "resize-observer-polyfill": "^1.5.1", - "three-glow-mesh": "^0.1.1", - "three-orbitcontrols": "^2.108.1", - "three.interaction": "^0.2.2", - "tippy.js": "^4.3.5" - } - }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -10846,11 +11397,6 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, "resolve": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", @@ -11027,6 +11573,11 @@ "aproba": "^1.1.1" } }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, "rxjs": { "version": "6.5.5", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", @@ -11396,6 +11947,11 @@ } } }, + "simplesignal": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/simplesignal/-/simplesignal-2.1.7.tgz", + "integrity": "sha1-jhWXix+LRNVb19cIHcN7cUfPEp8=" + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -12285,24 +12841,94 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "three": { - "version": "0.116.1", - "resolved": "https://registry.npmjs.org/three/-/three-0.116.1.tgz", - "integrity": "sha512-l2JCMiA/lVZAuSrLWRYMalvpR+0j8hbIhCpfs4V6JFnw2+JQEQJ5HltNpfFr+9TDpQts1BhtcISehWf/xBGPvQ==" + "version": "0.118.3", + "resolved": "https://registry.npmjs.org/three/-/three-0.118.3.tgz", + "integrity": "sha512-ijECXrNzDkHieoeh2H69kgawTGH8DiamhR4uBN8jEM7VHSKvfTdEvOoHsA8Aq7dh7PHAxhlqBsN5arBI3KixSw==" }, - "three-glow-mesh": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/three-glow-mesh/-/three-glow-mesh-0.1.1.tgz", - "integrity": "sha512-1PfgG0HdDG3XrkrK/OzAeu7Pw8d9cGNfupKIUS93DYCboXAVAl7/5TMNWsHy/h6x47rZwiQYVd04WOfIsKtY7Q==" + "three-conic-polygon-geometry": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/three-conic-polygon-geometry/-/three-conic-polygon-geometry-1.3.7.tgz", + "integrity": "sha512-ChHkYfKTRy/0t06L5SlAVJAl9fX0q7vRKnRIRHBWF1flFLnobjODKhww9yyV+SRR1KegH+DX8M6uSvPovBXLtQ==", + "requires": { + "@turf/boolean-point-in-polygon": "^6.0.1", + "d3-array": "^2.4.0", + "d3-geo": "^1.12.1", + "delaunator": "^4.0.1", + "earcut": "^2.2.2" + }, + "dependencies": { + "d3-array": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.4.0.tgz", + "integrity": "sha512-KQ41bAF2BMakf/HdKT865ALd4cgND6VcIztVQZUTt0+BH3RWy6ZYnHghVXf6NFjt2ritLr8H1T8LreAAlfiNcw==" + } + } }, - "three-orbitcontrols": { - "version": "2.110.3", - "resolved": "https://registry.npmjs.org/three-orbitcontrols/-/three-orbitcontrols-2.110.3.tgz", - "integrity": "sha512-BNNbksJwbN3/MmT0X/gjz5ZCchm7bjk26SUdtJYRxfEYjDfkb/0PeUTHE/KuyJ5vb/owK3mojyy3vcqDx99sRA==" + "three-fatline": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/three-fatline/-/three-fatline-0.3.0.tgz", + "integrity": "sha512-nqh0LjuG8cYBZFYL/U2ZGCAPVcKKaQZ3l+PP7WjGn8AKc7xHAYl4znuqDAQ+33ZdR/b9twVyTNlmUQBUSdLjMQ==" }, - "three.interaction": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/three.interaction/-/three.interaction-0.2.2.tgz", - "integrity": "sha512-yWQ5L0SUl+TzxVGFRNZAf4hpRF84zYZVpcyGstzhO0vbRdUDobPiPV6QmUh0JZVS5gEUguAd09ONyNJEczMOyA==" + "three-geojson-geometry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/three-geojson-geometry/-/three-geojson-geometry-1.1.0.tgz", + "integrity": "sha512-x/2FIuF+AG9s411HmNtQZ5JhWl3ig+I+mtAmX4ecEEt+STk0bPt8NzFRUaeJldrn/99v1UGzE7NdTtelp7gxUQ==", + "requires": { + "earcut": "^2.2.2" + } + }, + "three-globe": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/three-globe/-/three-globe-2.8.7.tgz", + "integrity": "sha512-HQTur+nTgBSlFnqaRUwzzDGjM2OqcljwBDMNDd6me3/ckiE7w5JS/jvzgVfpHYvthjDwWX7e/R+79OotjkYeVw==", + "requires": { + "@tweenjs/tween.js": "^18.6.0", + "accessor-fn": "^1.3.0", + "d3-geo": "^1.12.1", + "d3-interpolate": "^1.4.0", + "d3-scale": "^3.2.1", + "data-joint": "^1.2.3", + "earcut": "^2.2.2", + "frame-ticker": "^1.0.3", + "h3-js": "^3.6.4", + "index-array-by": "^1.3.0", + "kapsule": "^1.13.3", + "three-conic-polygon-geometry": "^1.3.7", + "three-fatline": "^0.3.0", + "three-geojson-geometry": "^1.1.0", + "three-glow-mesh": "^0.1.1", + "tinycolor2": "^1.4.1" + }, + "dependencies": { + "d3-scale": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.1.tgz", + "integrity": "sha512-huz5byJO/6MPpz6Q8d4lg7GgSpTjIZW/l+1MQkzKfu2u8P6hjaXaStOpmyrD6ymKoW87d2QVFCKvSjLwjzx/rA==", + "requires": { + "d3-array": "1.2.0 - 2", + "d3-format": "1", + "d3-interpolate": "^1.2.0", + "d3-time": "1", + "d3-time-format": "2" + } + } + } + }, + "three-glow-mesh": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/three-glow-mesh/-/three-glow-mesh-0.1.2.tgz", + "integrity": "sha512-sjiRl8PdRuc5xzZtaAusumx4sS/zRAYiFSQ1bNefRrJOXgu+ZHxq4/vYwRoa85PwPKLkp2SCo3Lu4JfJrphngw==" + }, + "three-render-objects": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/three-render-objects/-/three-render-objects-1.24.1.tgz", + "integrity": "sha512-mnN5x5RSF8oISunCtCeuJTFq+Zf4pJbq3i6yMCYBsDKstaE07aUjarCbooOFHlXczNPKSz8r0q7hKCIALHnn5A==", + "requires": { + "@tweenjs/tween.js": "^18.6.0", + "accessor-fn": "^1.3.0", + "kapsule": "^1.13.3", + "polished": "^3.6.5" + } }, "throat": { "version": "4.1.0", @@ -12365,13 +12991,10 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, - "tippy.js": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-4.3.5.tgz", - "integrity": "sha512-NDq3efte8nGK6BOJ1dDN1/WelAwfmh3UtIYXXck6+SxLzbIQNZE/cmRSnwScZ/FyiKdIcvFHvYUgqmoGx8CcyA==", - "requires": { - "popper.js": "^1.14.7" - } + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" }, "tmp": { "version": "0.0.33", diff --git a/package.json b/package.json index 8893f70..2848ee2 100755 --- a/package.json +++ b/package.json @@ -13,18 +13,19 @@ ], "main": "src/index.tsx", "dependencies": { - "es6-tween": "5.5.11", "react": "16.13.1", "react-dom": "16.13.1", - "react-globe": "4.0.0", "react-scripts": "3.4.1", - "three": "0.116.1" + "d3": "^5.16.0", + "dayjs": "^1.8.29", + "globe.gl": "^2.12.2" }, "devDependencies": { + "@types/d3": "^5.7.2", "@types/react": "16.8.8", "@types/react-dom": "16.8.2", - "typescript": "3.3.3", - "gh-pages": "^2.2.0" + "gh-pages": "^2.2.0", + "typescript": "3.3.3" }, "scripts": { "predeploy": "npm run build", diff --git a/src/App.tsx b/src/App.tsx index 3b9b644..9a49e20 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,122 +1,77 @@ import * as React from "react"; -import ReactGlobe, { Marker } from "react-globe"; - -import markers from "./markers"; -import markerRenderer from "./markerRenderer"; -import worldTexture from "./assets/world.jpg"; import "./styles.css"; import { useState, useEffect } from "react"; -import { Object3D } from "three"; +import { initGlobe } from "./Globe"; +import { GlobalCounts } from "./GlobalCounts"; +import { Counter } from "./Counter"; import { Spinner } from "./Spinner"; -import globalData from "./assets/global.json"; - -function getWindowDimensions() { - const { innerWidth: width, innerHeight: height } = window; - return { - width, - height, - }; -} export default function App() { - const [details, setDetails] = useState(null); - const [isLoaded, onTextureLoaded] = useState(false); - const [cameraOptions, setCameraOptions] = useState({ - maxDistanceRadiusScale: 100, - autoRotateSpeed: 0.1, - distanceRadiusScale: 100, - }); - - const [windowDimensions, setWindowDimensions] = useState( - getWindowDimensions() - ); + const [totals, setTotals] = useState([]); - function getTooltipContent(marker: Marker) { - return `Location: ${marker.Country} (Active Cases: ${marker.activeCases})`; - } - - function onClickMarker( - marker: Marker, - markerObject?: Object3D, - event?: PointerEvent - ) { - zoomOut(); - setDetails(getTooltipContent(marker)); - } - - function onDefocus(previousCoordinates: any, event?: PointerEvent) { - setDetails(null); - } - - const zoomOut = () => { + useEffect(() => initGlobe(), []); + useEffect(() => { setTimeout(() => { - if (windowDimensions.width <= 500) { - setDetails(null); - } + let total: number[] = []; + total.push(GlobalCounts.totalConfirmed); + total.push(GlobalCounts.totalDeaths); + total.push(GlobalCounts.totalRecoveries); + total.push(GlobalCounts.totalActive); + setTotals(total); }, 3000); - }; - + }, [GlobalCounts.set]); return ( - -
COVID19 Globe Tracker
-
Active Cases
-
- setDetails(null)} - cameraOptions={{ - maxDistanceRadiusScale: 100, - autoRotateSpeed: 1.0, - distanceRadiusScale: 100, - }} - focusOptions={{ - distanceRadiusScale: 30, - enableDefocus: true, - }} - globeOptions={{ - texture: worldTexture, - glowColor: "red", - enableClouds: false, - }} - onTextureLoaded={() => onTextureLoaded(true)} - /> - {details && ( -
-

{details}

-
- )} +
+
+
COVID-19
+
+ Loading countries affected by the virus... +
- {isLoaded ? ( -
- +
+ + {GlobalCounts.set ? ( + <> +
+ Total Counts +
+
+ + INFECTED: + + + + {" "} + • DEATHS: + + + + {" "} + • RECOVERED: + + + + {" "} + • ACTIVE: + + +
+ + ) : null} + - ) : null} +
); } - -function Counter() { - const [total, setTotal] = useState(globalData.totalCount); - const [counter, setCounter] = useState(0); - useEffect(() => { - setTimeout(() => null, 5000); - }, []); - useEffect(() => { - if (counter != total) { - if (total - counter <= 1000) setCounter(counter + 1); - else if (counter < 10000) setCounter(counter + 1000); - else setCounter(counter + 500); - } - }, [counter]); - - function numberWithCommas(x: number) { - return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } - - return

{numberWithCommas(counter)}

; -} diff --git a/src/Constants.tsx b/src/Constants.tsx new file mode 100644 index 0000000..8e4c256 --- /dev/null +++ b/src/Constants.tsx @@ -0,0 +1,9 @@ +export const GLOBE_IMAGE_URL = + "//cdn.jsdelivr.net/npm/three-globe/example/img/earth-dark.jpg"; +export const BACKGROUND_IMAGE_URL = + "//cdn.jsdelivr.net/npm/three-globe/example/img/night-sky.png"; +export const GEOJSON_URL = + "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_110m_admin_0_countries.geojson"; +export const CASES_API = "https://covid3d-backend.now.sh"; + +export const FLAG_ENDPOINT = "https://corona.lmao.ninja/assets/img/flags"; diff --git a/src/Counter.tsx b/src/Counter.tsx new file mode 100644 index 0000000..143a33f --- /dev/null +++ b/src/Counter.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { useEffect, useState } from "react"; + +interface CounterProps { + count: number; +} + +export function Counter({ count }: CounterProps) { + const [counter, setCounter] = useState(0); + + useEffect(() => { + if (counter != count) { + if (count - counter <= 1000) setCounter(counter + 1); + else if (counter < 10000) setCounter(counter + 1000); + else setCounter(counter + 10000); + } + }, [counter]); + + function numberWithCommas(x: number) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + } + + return <>{numberWithCommas(counter)}; +} diff --git a/src/Country.tsx b/src/Country.tsx new file mode 100644 index 0000000..205d8be --- /dev/null +++ b/src/Country.tsx @@ -0,0 +1,11 @@ +export interface Countries { + [country: string]: { + [date: string]: Country; + }; +} + +export interface Country { + confirmed: number; + recoveries: number; + deaths: number; +} diff --git a/src/GlobalCounts.tsx b/src/GlobalCounts.tsx new file mode 100644 index 0000000..224a6d5 --- /dev/null +++ b/src/GlobalCounts.tsx @@ -0,0 +1,8 @@ +export class GlobalCounts { + static totalConfirmed: number = 0; + static totalDeaths: number = 0; + static totalRecoveries: number = 0; + static totalActive: number = 0; + static set: boolean; + private constructor() {} +} diff --git a/src/Globe.tsx b/src/Globe.tsx new file mode 100644 index 0000000..472562b --- /dev/null +++ b/src/Globe.tsx @@ -0,0 +1,145 @@ +import Globe, { GlobeInstance } from "globe.gl"; +import { request, getCoordinates, getPolygonLabel } from "./utils"; +import { + GLOBE_IMAGE_URL, + BACKGROUND_IMAGE_URL, + GEOJSON_URL, + CASES_API, +} from "./Constants"; +import { interpolateReds, scaleSequential } from "d3"; +import { Countries, Country } from "./Country"; +import { GlobalCounts } from "./GlobalCounts"; + +const getVal = (feat: any) => { + return Math.pow(feat.covidData.confirmed / feat.properties.POP_EST, 1 / 4); +}; + +interface Feature { + properties: { + NAME: string; + POP_EST: number; + }; + covidData: Country; +} + +let world: GlobeInstance; +const colorScale = scaleSequential(interpolateReds); + +export function initGlobe() { + // Globe container + const globeContainer: HTMLElement = document.getElementById("globeViz")!; + world = Globe()(globeContainer) + .globeImageUrl(GLOBE_IMAGE_URL) + .backgroundImageUrl(BACKGROUND_IMAGE_URL) + .showGraticules(false) + .polygonAltitude(0.06) + .showAtmosphere(false) + .polygonCapColor((feat: any) => colorScale(getVal(feat))) + .polygonSideColor(() => "rgba(100, 100, 100, 0.05)") + .polygonStrokeColor(() => "#ffff") + .polygonLabel(({ properties: d, covidData: c }: any) => { + const flagName = d.ADMIN === "France" ? "fr" : d.ISO_A2.toLowerCase(); + + return getPolygonLabel(flagName, d, c); + }) + .onPolygonHover((hoverD: any) => + world + .polygonAltitude((d: any) => (d === hoverD ? 0.1 : 0.06)) + .polygonCapColor((d: any) => + d === hoverD ? "yellow" : colorScale(getVal(d)) + ) + ) + .polygonsTransitionDuration(200); + + getCases(); + window.addEventListener("resize", (event: UIEvent) => { + world.width(window.innerWidth); + world.height(window.innerHeight); + }); +} + +let dates: string[] = []; +let countries: Countries; +let featureCollection: Feature[]; + +async function getCases() { + countries = await request(CASES_API); + featureCollection = (await request(GEOJSON_URL)).features; + + // world.polygonsData(countriesWithCovid); + document.querySelector(".title-desc")!.innerHTML = + "Hover on a country or territory to see cases, deaths, and recoveries."; + + dates = Object.keys(countries.China); + + updateCounters(); + updatePolygonsData(); + + updatePointOfView(); +} + +//const infectedEl = document.querySelector("#infected")!; +//const deathsEl = document.querySelector("#deaths")!; +//const recoveriesEl = document.querySelector("#recovered")!; +//const updatedEl = document.querySelector(".updated")!; + +function updateCounters() { + let totalConfirmed = 0; + let totalDeaths = 0; + let totalRecoveries = 0; + const date = dates.length - 1; + Object.keys(countries).forEach((item: string) => { + if (countries[item][dates[date]]) { + const countryDate = countries[item][dates[date]]; + totalConfirmed += +countryDate.confirmed; + totalDeaths += +countryDate.deaths; + totalRecoveries += countryDate.recoveries ? +countryDate.recoveries : 0; + } + }); + GlobalCounts.totalConfirmed = totalConfirmed; + GlobalCounts.totalDeaths = totalDeaths; + GlobalCounts.totalRecoveries = totalRecoveries; + GlobalCounts.totalActive = totalConfirmed - totalRecoveries - totalDeaths; + GlobalCounts.set = true; +} + +function updatePolygonsData() { + const date = dates.length - 1; + for (let x = 0; x < featureCollection.length; x++) { + const country = featureCollection[x].properties.NAME; + if (countries[country]) { + featureCollection[x].covidData = { + confirmed: countries[country][dates[date]].confirmed, + deaths: countries[country][dates[date]].deaths, + recoveries: countries[country][dates[date]].recoveries, + }; + } else { + featureCollection[x].covidData = { + confirmed: 0, + deaths: 0, + recoveries: 0, + }; + } + } + + const maxVal = Math.max(...featureCollection.map(getVal)); + colorScale.domain([0, maxVal]); + world.polygonsData(featureCollection); +} + +async function updatePointOfView() { + // Get coordinates + try { + const { latitude, longitude } = await getCoordinates(); + + world.pointOfView( + { + lat: latitude, + lng: longitude, + }, + 1000 + ); + } catch (e) { + console.log("Unable to set point of view."); + } +} diff --git a/src/Spinner.css b/src/Spinner.css index 303996b..24dbb9b 100644 --- a/src/Spinner.css +++ b/src/Spinner.css @@ -13,7 +13,7 @@ .spinner { border: 16px solid rgba(0, 0, 0, 0.8); /* Light grey */ - border-top: 16px solid red; /* Blue */ + border-top: 16px solid rgb(253, 80, 0); /* Blue */ border-radius: 50%; width: 120px; height: 120px; diff --git a/src/assets/export.json b/src/assets/export.json deleted file mode 100644 index 9b8398b..0000000 --- a/src/assets/export.json +++ /dev/null @@ -1,1493 +0,0 @@ -[ - { - "Country": "Spain", - "Active Cases": "65,410", - "coordinates": [39.3262345, -4.8380649], - "activeCases": 65410, - "value": 363.8355981511 - }, - { - "Country": "Italy", - "Active Cases": "87,961", - "coordinates": [42.6384261, 12.674297], - "activeCases": 87961, - "value": 489.272940666 - }, - { - "Country": "UK", - "Active Cases": "179,779", - "coordinates": [54.7023545, -3.2765753], - "activeCases": 179779, - "value": 1000.0 - }, - { - "Country": "Russia", - "Active Cases": "164,933", - "coordinates": [64.6863136, 97.7453061], - "activeCases": 164933, - "value": 917.4208333565 - }, - { - "Country": "France", - "Active Cases": "94,067", - "coordinates": [46.603354, 1.8883335], - "activeCases": 94067, - "value": 523.2368630374 - }, - { - "Country": "Germany", - "Active Cases": "19,778", - "coordinates": [51.0834196, 10.4234469], - "activeCases": 19778, - "value": 110.0128491092 - }, - { - "Country": "Brazil", - "Active Cases": "77,580", - "coordinates": [-10.3333333, -53.2], - "activeCases": 77580, - "value": 431.5298227268 - }, - { - "Country": "Turkey", - "Active Cases": "45,484", - "coordinates": [38.9597594, 34.9249653], - "activeCases": 45484, - "value": 252.9995160725 - }, - { - "Country": "Iran", - "Active Cases": "14,313", - "coordinates": [32.6475314, 54.5643516], - "activeCases": 14313, - "value": 79.6144154768 - }, - { - "Country": "Canada", - "Active Cases": "31,459", - "coordinates": [61.0666922, -107.9917071], - "activeCases": 31459, - "value": 174.987067455 - }, - { - "Country": "Peru", - "Active Cases": "41,121", - "coordinates": [-6.8699697, -75.0458515], - "activeCases": 41121, - "value": 228.7308306309 - }, - { - "Country": "India", - "Active Cases": "39,882", - "coordinates": [22.3511148, 78.6677428], - "activeCases": 39882, - "value": 221.8390357049 - }, - { - "Country": "Belgium", - "Active Cases": "30,289", - "coordinates": [50.6402809, 4.6667145], - "activeCases": 30289, - "value": 168.4790770891 - }, - { - "Country": "Netherlands", - "Active Cases": "36,484", - "coordinates": [52.5001698, 5.7480821], - "activeCases": 36484, - "value": 202.9380517191 - }, - { - "Country": "Saudi Arabia", - "Active Cases": "26,083", - "coordinates": [25.6242618, 42.3528328], - "activeCases": 26083, - "value": 145.0836860812 - }, - { - "Country": "Mexico", - "Active Cases": "8,048", - "coordinates": [19.4326296, -99.1331785], - "activeCases": 8048, - "value": 44.7660739018 - }, - { - "Country": "Switzerland", - "Active Cases": "2,284", - "coordinates": [46.7985624, 8.2319736], - "activeCases": 2284, - "value": 12.7044871759 - }, - { - "Country": "Ecuador", - "Active Cases": "23,681", - "coordinates": [-1.3397668, -79.3666965], - "activeCases": 23681, - "value": 131.7228374838 - }, - { - "Country": "Pakistan", - "Active Cases": "19,100", - "coordinates": [30.3308401, 71.247499], - "activeCases": 19100, - "value": 106.2415521279 - }, - { - "Country": "Portugal", - "Active Cases": "23,732", - "coordinates": [40.0332629, -7.8896263], - "activeCases": 23732, - "value": 132.0065191151 - }, - { - "Country": "Chile", - "Active Cases": "13,518", - "coordinates": [-31.7613365, -71.3187697], - "activeCases": 13518, - "value": 75.1923194589 - }, - { - "Country": "Sweden", - "Active Cases": "17,119", - "coordinates": [59.6749712, 14.5208584], - "activeCases": 17119, - "value": 95.2224675852 - }, - { - "Country": "Ireland", - "Active Cases": "4,002", - "coordinates": [52.865196, -7.9794599], - "activeCases": 4002, - "value": 22.2606644825 - }, - { - "Country": "Singapore", - "Active Cases": "20,400", - "coordinates": [1.340863, 103.8303918], - "activeCases": 20400, - "value": 113.4726525345 - }, - { - "Country": "Belarus", - "Active Cases": "15,496", - "coordinates": [53.4250605, 27.6971358], - "activeCases": 15496, - "value": 86.1947168468 - }, - { - "Country": "Qatar", - "Active Cases": "17,819", - "coordinates": [25.3336984, 51.2295295], - "activeCases": 17819, - "value": 99.1161370349 - }, - { - "Country": "UAE", - "Active Cases": "12,782", - "coordinates": [49.4871968, 31.2718321], - "activeCases": 12782, - "value": 71.0984041518 - }, - { - "Country": "Israel", - "Active Cases": "4,886", - "coordinates": [31.5313113, 34.8667654], - "activeCases": 4886, - "value": 27.177812759 - }, - { - "Country": "Austria", - "Active Cases": "1,290", - "coordinates": [47.2000338, 13.199959], - "activeCases": 1290, - "value": 7.1754765573 - }, - { - "Country": "Japan", - "Active Cases": "9,839", - "coordinates": [36.5748441, 139.2394179], - "activeCases": 9839, - "value": 54.7283053082 - }, - { - "Country": "Poland", - "Active Cases": "9,296", - "coordinates": [52.215933, 19.134422], - "activeCases": 9296, - "value": 51.7079302922 - }, - { - "Country": "Romania", - "Active Cases": "7,465", - "coordinates": [45.9852129, 24.6859225], - "activeCases": 7465, - "value": 41.5232034887 - }, - { - "Country": "Ukraine", - "Active Cases": "11,425", - "coordinates": [49.4871968, 31.2718321], - "activeCases": 11425, - "value": 63.5502478042 - }, - { - "Country": "Bangladesh", - "Active Cases": "11,142", - "coordinates": [24.4768783, 90.2932426], - "activeCases": 11142, - "value": 61.9760928696 - }, - { - "Country": "Indonesia", - "Active Cases": "10,079", - "coordinates": [-2.4833826, 117.8902853], - "activeCases": 10079, - "value": 56.0632776909 - }, - { - "Country": "S. Korea", - "Active Cases": "1,016", - "coordinates": [36.638392, 127.6961188], - "activeCases": 1016, - "value": 5.651383087 - }, - { - "Country": "Philippines", - "Active Cases": "8,064", - "coordinates": [12.7503486, 122.7312101], - "activeCases": 8064, - "value": 44.8550720607 - }, - { - "Country": "Denmark", - "Active Cases": "1,769", - "coordinates": [55.670249, 10.3333283], - "activeCases": 1769, - "value": 9.8398589379 - }, - { - "Country": "Colombia", - "Active Cases": "7,199", - "coordinates": [2.8894434, -73.783892], - "activeCases": 7199, - "value": 40.0436090978 - }, - { - "Country": "Serbia", - "Active Cases": "7,281", - "coordinates": [44.0243228, 21.0765743], - "activeCases": 7281, - "value": 40.4997246619 - }, - { - "Country": "Dominican Republic", - "Active Cases": "6,710", - "coordinates": [19.0974031, -70.3028026], - "activeCases": 6710, - "value": 37.323602868 - }, - { - "Country": "South Africa", - "Active Cases": "5,564", - "coordinates": [-28.8166236, 24.991639], - "activeCases": 5564, - "value": 30.9491097403 - }, - { - "Country": "Egypt", - "Active Cases": "6,028", - "coordinates": [26.2540493, 29.2675469], - "activeCases": 6028, - "value": 33.530056347 - }, - { - "Country": "Czechia", - "Active Cases": "3,391", - "coordinates": [49.8167003, 15.4749544], - "activeCases": 3391, - "value": 18.8620472914 - }, - { - "Country": "Panama", - "Active Cases": "6,953", - "coordinates": [8.559559, -81.1308434], - "activeCases": 6953, - "value": 38.6752624055 - }, - { - "Country": "Norway", - "Active Cases": "7,820", - "coordinates": [64.5731537, 11.5280364], - "activeCases": 7820, - "value": 43.4978501382 - }, - { - "Country": "Kuwait", - "Active Cases": "4,695", - "coordinates": [29.2733964, 47.4979476], - "activeCases": 4695, - "value": 26.1153972377 - }, - { - "Country": "Australia", - "Active Cases": "706", - "coordinates": [-24.7761086, 134.755], - "activeCases": 706, - "value": 3.9270437593 - }, - { - "Country": "Malaysia", - "Active Cases": "1,564", - "coordinates": [4.5693754, 102.2656823], - "activeCases": 1564, - "value": 8.6995700276 - }, - { - "Country": "Finland", - "Active Cases": "1,478", - "coordinates": [63.2467777, 25.9209164], - "activeCases": 1478, - "value": 8.2212049238 - }, - { - "Country": "Morocco", - "Active Cases": "3,201", - "coordinates": [31.1728205, -7.3362482], - "activeCases": 3201, - "value": 17.805194155 - }, - { - "Country": "Argentina", - "Active Cases": "3,659", - "coordinates": [-34.9964963, -64.9672817], - "activeCases": 3659, - "value": 20.3527664521 - }, - { - "Country": "Algeria", - "Active Cases": "2,414", - "coordinates": [28.0000272, 2.9999825], - "activeCases": 2414, - "value": 13.4275972166 - }, - { - "Country": "Kazakhstan", - "Active Cases": "3,260", - "coordinates": [47.2286086, 65.2093197], - "activeCases": 3260, - "value": 18.1333748658 - }, - { - "Country": "Moldova", - "Active Cases": "2,752", - "coordinates": [47.2879608, 28.5670941], - "activeCases": 2752, - "value": 15.3076833223 - }, - { - "Country": "Bahrain", - "Active Cases": "2,408", - "coordinates": [26.1551249, 50.5344606], - "activeCases": 2408, - "value": 13.394222907 - }, - { - "Country": "Ghana", - "Active Cases": "3,671", - "coordinates": [8.0300284, -1.0800271], - "activeCases": 3671, - "value": 20.4195150713 - }, - { - "Country": "Nigeria", - "Active Cases": "3,116", - "coordinates": [9.6000359, 7.9999721], - "activeCases": 3116, - "value": 17.3323914362 - }, - { - "Country": "Luxembourg", - "Active Cases": "245", - "coordinates": [49.8158683, 6.1296751], - "activeCases": 245, - "value": 1.3627843074 - }, - { - "Country": "Afghanistan", - "Active Cases": "3,197", - "coordinates": [33.7680065, 66.2385139], - "activeCases": 3197, - "value": 17.7829446153 - }, - { - "Country": "Oman", - "Active Cases": "2,139", - "coordinates": [21.0000287, 57.0036901], - "activeCases": 2139, - "value": 11.8979413613 - }, - { - "Country": "Hungary", - "Active Cases": "1,904", - "coordinates": [47.1817585, 19.5060937], - "activeCases": 1904, - "value": 10.5907809032 - }, - { - "Country": "Armenia", - "Active Cases": "1,864", - "coordinates": [40.7696272, 44.6736646], - "activeCases": 1864, - "value": 10.3682855061 - }, - { - "Country": "Thailand", - "Active Cases": "161", - "coordinates": [14.8971921, 100.83273], - "activeCases": 161, - "value": 0.8955439734 - }, - { - "Country": "Greece", - "Active Cases": "1,167", - "coordinates": [38.9953683, 21.9877132], - "activeCases": 1167, - "value": 6.4913032112 - }, - { - "Country": "Iraq", - "Active Cases": "838", - "coordinates": [33.0955793, 44.1749775], - "activeCases": 838, - "value": 4.6612785698 - }, - { - "Country": "Uzbekistan", - "Active Cases": "551", - "coordinates": [41.32373, 63.9528098], - "activeCases": 551, - "value": 3.0648740954 - }, - { - "Country": "Azerbaijan", - "Active Cases": "675", - "coordinates": [40.3936294, 47.7872508], - "activeCases": 675, - "value": 3.7546098265 - }, - { - "Country": "Cameroon", - "Active Cases": "1,157", - "coordinates": [4.6125522, 13.1535811], - "activeCases": 1157, - "value": 6.4356793619 - }, - { - "Country": "Bolivia", - "Active Cases": "1,923", - "coordinates": [-17.0568696, -64.9912286], - "activeCases": 1923, - "value": 10.6964662169 - }, - { - "Country": "Croatia", - "Active Cases": "386", - "coordinates": [45.5643442, 17.0118954], - "activeCases": 386, - "value": 2.1470805823 - }, - { - "Country": "Bosnia and Herzegovina", - "Active Cases": "1,012", - "coordinates": [44.3053476, 17.5961467], - "activeCases": 1012, - "value": 5.6291335473 - }, - { - "Country": "Guinea", - "Active Cases": "1,335", - "coordinates": [10.7226226, -10.7083587], - "activeCases": 1335, - "value": 7.4257838791 - }, - { - "Country": "Bulgaria", - "Active Cases": "1,401", - "coordinates": [42.6073975, 25.4856617], - "activeCases": 1401, - "value": 7.7929012844 - }, - { - "Country": "Iceland", - "Active Cases": "26", - "coordinates": [64.9841821, -18.1059013], - "activeCases": 26, - "value": 0.1446220081 - }, - { - "Country": "Honduras", - "Active Cases": "1,472", - "coordinates": [15.2572432, -86.0755145], - "activeCases": 1472, - "value": 8.1878306143 - }, - { - "Country": "Cuba", - "Active Cases": "589", - "coordinates": [23.0131338, -80.8328748], - "activeCases": 589, - "value": 3.2762447227 - }, - { - "Country": "Estonia", - "Active Cases": "926", - "coordinates": [58.7523778, 25.3319078], - "activeCases": 926, - "value": 5.1507684435 - }, - { - "Country": "Ivory Coast", - "Active Cases": "828", - "coordinates": [7.9897371, -5.5679458], - "activeCases": 828, - "value": 4.6056547205 - }, - { - "Country": "North Macedonia", - "Active Cases": "397", - "coordinates": [41.6171214, 21.7168387], - "activeCases": 397, - "value": 2.2082668165 - }, - { - "Country": "Senegal", - "Active Cases": "927", - "coordinates": [14.4750607, -14.4529612], - "activeCases": 927, - "value": 5.1563308284 - }, - { - "Country": "New Zealand", - "Active Cases": "103", - "coordinates": [-41.5000831, 172.8344077], - "activeCases": 103, - "value": 0.5729256476 - }, - { - "Country": "Slovakia", - "Active Cases": "510", - "coordinates": [48.7411522, 19.4528646], - "activeCases": 510, - "value": 2.8368163134 - }, - { - "Country": "Slovenia", - "Active Cases": "1,098", - "coordinates": [45.8133113, 14.4808369], - "activeCases": 1098, - "value": 6.1074986511 - }, - { - "Country": "Lithuania", - "Active Cases": "567", - "coordinates": [55.3500003, 23.7499997], - "activeCases": 567, - "value": 3.1538722543 - }, - { - "Country": "Djibouti", - "Active Cases": "308", - "coordinates": [11.8145966, 42.8453061], - "activeCases": 308, - "value": 1.7132145579 - }, - { - "Country": "Sudan", - "Active Cases": "950", - "coordinates": [14.5844444, 29.4917691], - "activeCases": 950, - "value": 5.2842656818 - }, - { - "Country": "Hong Kong", - "Active Cases": "74", - "coordinates": [22.2793278, 114.1628131], - "activeCases": 74, - "value": 0.4116164847 - }, - { - "Country": "Tunisia", - "Active Cases": "347", - "coordinates": [33.8439408, 9.400138], - "activeCases": 347, - "value": 1.9301475701 - }, - { - "Country": "DRC", - "Active Cases": "768", - "coordinates": [-4.0324901, 22.4574787], - "activeCases": 768, - "value": 4.2719116248 - }, - { - "Country": "Kyrgyzstan", - "Active Cases": "261", - "coordinates": [41.5089324, 74.724091], - "activeCases": 261, - "value": 1.4517824663 - }, - { - "Country": "Latvia", - "Active Cases": "448", - "coordinates": [56.8406494, 24.7537645], - "activeCases": 448, - "value": 2.4919484478 - }, - { - "Country": "Somalia", - "Active Cases": "778", - "coordinates": [8.3676771, 49.083416], - "activeCases": 778, - "value": 4.3275354741 - }, - { - "Country": "Guatemala", - "Active Cases": "775", - "coordinates": [15.6356088, -89.8988087], - "activeCases": 775, - "value": 4.3108483193 - }, - { - "Country": "Cyprus", - "Active Cases": "476", - "coordinates": [34.9823018, 33.1451285], - "activeCases": 476, - "value": 2.6476952258 - }, - { - "Country": "Mayotte", - "Active Cases": "492", - "coordinates": [-12.823048, 45.1520755], - "activeCases": 492, - "value": 2.7366933847 - }, - { - "Country": "Albania", - "Active Cases": "199", - "coordinates": [41.000028, 19.9999619], - "activeCases": 199, - "value": 1.1069146007 - }, - { - "Country": "Sri Lanka", - "Active Cases": "571", - "coordinates": [7.5554942, 80.7137847], - "activeCases": 571, - "value": 3.176121794 - }, - { - "Country": "Lebanon", - "Active Cases": "547", - "coordinates": [33.8750629, 35.843409], - "activeCases": 547, - "value": 3.0426245557 - }, - { - "Country": "Niger", - "Active Cases": "151", - "coordinates": [17.7356214, 9.3238432], - "activeCases": 151, - "value": 0.8399201242 - }, - { - "Country": "El Salvador", - "Active Cases": "492", - "coordinates": [13.8000382, -88.9140683], - "activeCases": 492, - "value": 2.7366933847 - }, - { - "Country": "Costa Rica", - "Active Cases": "306", - "coordinates": [10.2735633, -84.0739102], - "activeCases": 306, - "value": 1.702089788 - }, - { - "Country": "Andorra", - "Active Cases": "168", - "coordinates": [42.5407167, 1.5732033], - "activeCases": 168, - "value": 0.9344806679 - }, - { - "Country": "Burkina Faso", - "Active Cases": "130", - "coordinates": [12.0753083, -1.6880314], - "activeCases": 130, - "value": 0.7231100407 - }, - { - "Country": "Maldives", - "Active Cases": "721", - "coordinates": [4.7064352, 73.3287853], - "activeCases": 721, - "value": 4.0104795332 - }, - { - "Country": "Diamond Princess", - "Active Cases": "54", - "coordinates": [53.8953584, 27.5554078], - "activeCases": 54, - "value": 0.3003687861 - }, - { - "Country": "Uruguay", - "Active Cases": "170", - "coordinates": [-32.8755548, -56.0201525], - "activeCases": 170, - "value": 0.9456054378 - }, - { - "Country": "Mali", - "Active Cases": "348", - "coordinates": [16.3700359, -2.2900239], - "activeCases": 348, - "value": 1.935709955 - }, - { - "Country": "Georgia", - "Active Cases": "319", - "coordinates": [41.6809707, 44.0287382], - "activeCases": 319, - "value": 1.7744007921 - }, - { - "Country": "San Marino", - "Active Cases": "468", - "coordinates": [43.9458623, 12.458306], - "activeCases": 468, - "value": 2.6031961464 - }, - { - "Country": "Kenya", - "Active Cases": "390", - "coordinates": [1.4419683, 38.4313975], - "activeCases": 390, - "value": 2.169330122 - }, - { - "Country": "Gabon", - "Active Cases": "502", - "coordinates": [-0.8999695, 11.6899699], - "activeCases": 502, - "value": 2.7923172339 - }, - { - "Country": "Guinea-Bissau", - "Active Cases": "567", - "coordinates": [12.100035, -14.9000214], - "activeCases": 567, - "value": 3.1538722543 - }, - { - "Country": "Paraguay", - "Active Cases": "401", - "coordinates": [-23.3165935, -58.1693445], - "activeCases": 401, - "value": 2.2305163562 - }, - { - "Country": "Channel Islands", - "Active Cases": "57", - "coordinates": [60.6167942, -145.7996671], - "activeCases": 57, - "value": 0.3170559409 - }, - { - "Country": "Tajikistan", - "Active Cases": "510", - "coordinates": [38.6281733, 70.8156541], - "activeCases": 510, - "value": 2.8368163134 - }, - { - "Country": "Tanzania", - "Active Cases": "305", - "coordinates": [-6.5247123, 35.7878438], - "activeCases": 305, - "value": 1.6965274031 - }, - { - "Country": "Jordan", - "Active Cases": "114", - "coordinates": [31.1667049, 36.941628], - "activeCases": 114, - "value": 0.6341118818 - }, - { - "Country": "Jamaica", - "Active Cases": "419", - "coordinates": [18.1152958, -77.1598455], - "activeCases": 419, - "value": 2.3306392849 - }, - { - "Country": "Malta", - "Active Cases": "65", - "coordinates": [35.8885993, 14.4476911], - "activeCases": 65, - "value": 0.3615550203 - }, - { - "Country": "Taiwan", - "Active Cases": "73", - "coordinates": [23.9739374, 120.9820179], - "activeCases": 73, - "value": 0.4060540998 - }, - { - "Country": "Equatorial Guinea", - "Active Cases": "422", - "coordinates": [1.613172, 10.5170357], - "activeCases": 422, - "value": 2.3473264397 - }, - { - "Country": "R\u00e9union", - "Active Cases": "72", - "coordinates": [-21.130738, 55.5364801], - "activeCases": 72, - "value": 0.4004917148 - }, - { - "Country": "Venezuela", - "Active Cases": "188", - "coordinates": [8.0018709, -66.1109318], - "activeCases": 188, - "value": 1.0457283665 - }, - { - "Country": "Palestine", - "Active Cases": "145", - "coordinates": [31.9469665, 35.2738655], - "activeCases": 145, - "value": 0.8065458146 - }, - { - "Country": "Mauritius", - "Active Cases": "2", - "coordinates": [-20.2759451, 57.5703566], - "activeCases": 2, - "value": 0.0111247699 - }, - { - "Country": "Isle of Man", - "Active Cases": "35", - "coordinates": [54.2358167, -4.5145987], - "activeCases": 35, - "value": 0.1946834725 - }, - { - "Country": "Montenegro", - "Active Cases": "49", - "coordinates": [42.9868853, 19.5180992], - "activeCases": 49, - "value": 0.2725568615 - }, - { - "Country": "Vietnam", - "Active Cases": "47", - "coordinates": [13.2904027, 108.4265113], - "activeCases": 47, - "value": 0.2614320916 - }, - { - "Country": "Congo", - "Active Cases": "231", - "coordinates": [-0.7264327, 15.6419155], - "activeCases": 231, - "value": 1.2849109184 - }, - { - "Country": "Rwanda", - "Active Cases": "137", - "coordinates": [-1.9646631, 30.0644358], - "activeCases": 137, - "value": 0.7620467352 - }, - { - "Country": "Chad", - "Active Cases": "182", - "coordinates": [15.6134137, 19.0156172], - "activeCases": 182, - "value": 1.0123540569 - }, - { - "Country": "Sierra Leone", - "Active Cases": "186", - "coordinates": [8.6400349, -11.8400269], - "activeCases": 186, - "value": 1.0346035966 - }, - { - "Country": "Benin", - "Active Cases": "178", - "coordinates": [9.5293472, 2.2584408], - "activeCases": 178, - "value": 0.9901045172 - }, - { - "Country": "Cabo Verde", - "Active Cases": "184", - "coordinates": [16.0000552, -24.0083947], - "activeCases": 184, - "value": 1.0234788268 - }, - { - "Country": "Sao Tome and Principe", - "Active Cases": "199", - "coordinates": [0.8875498, 6.9648718], - "activeCases": 199, - "value": 1.1069146007 - }, - { - "Country": "Liberia", - "Active Cases": "100", - "coordinates": [5.7499721, -9.3658524], - "activeCases": 100, - "value": 0.5562384928 - }, - { - "Country": "Ethiopia", - "Active Cases": "95", - "coordinates": [10.2116702, 38.6521203], - "activeCases": 95, - "value": 0.5284265682 - }, - { - "Country": "Madagascar", - "Active Cases": "92", - "coordinates": [-18.9249604, 46.4416422], - "activeCases": 92, - "value": 0.5117394134 - }, - { - "Country": "Faeroe Islands", - "Active Cases": "0", - "coordinates": [62.1985004, -6.8174124], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "Martinique", - "Active Cases": "89", - "coordinates": [14.6367927, -61.0158269], - "activeCases": 89, - "value": 0.4950522586 - }, - { - "Country": "Myanmar", - "Active Cases": "104", - "coordinates": [17.1750495, 95.9999652], - "activeCases": 104, - "value": 0.5784880325 - }, - { - "Country": "Zambia", - "Active Cases": "52", - "coordinates": [-14.5186239, 27.5599164], - "activeCases": 52, - "value": 0.2892440163 - }, - { - "Country": "Eswatini", - "Active Cases": "145", - "coordinates": [-26.5624806, 31.3991317], - "activeCases": 145, - "value": 0.8065458146 - }, - { - "Country": "Guadeloupe", - "Active Cases": "37", - "coordinates": [16.2490067, -61.5650444], - "activeCases": 37, - "value": 0.2058082423 - }, - { - "Country": "Haiti", - "Active Cases": "117", - "coordinates": [19.1399952, -72.3570972], - "activeCases": 117, - "value": 0.6507990366 - }, - { - "Country": "Gibraltar", - "Active Cases": "4", - "coordinates": [36.106747, -5.3352772], - "activeCases": 4, - "value": 0.0222495397 - }, - { - "Country": "Togo", - "Active Cases": "50", - "coordinates": [8.7800265, 1.0199765], - "activeCases": 50, - "value": 0.2781192464 - }, - { - "Country": "CAR", - "Active Cases": "133", - "coordinates": [40.5250362, -81.0927234], - "activeCases": 133, - "value": 0.7397971954 - }, - { - "Country": "Brunei ", - "Active Cases": "8", - "coordinates": [4.4137155, 114.5653908], - "activeCases": 8, - "value": 0.0444990794 - }, - { - "Country": "French Guiana", - "Active Cases": "21", - "coordinates": [4.0039882, -52.999998], - "activeCases": 21, - "value": 0.1168100835 - }, - { - "Country": "Cambodia", - "Active Cases": "2", - "coordinates": [13.5066394, 104.869423], - "activeCases": 2, - "value": 0.0111247699 - }, - { - "Country": "South Sudan", - "Active Cases": "118", - "coordinates": [7.8699431, 29.6667897], - "activeCases": 118, - "value": 0.6563614215 - }, - { - "Country": "Bermuda", - "Active Cases": "50", - "coordinates": [32.3018217, -64.7603583], - "activeCases": 50, - "value": 0.2781192464 - }, - { - "Country": "Trinidad and Tobago", - "Active Cases": "5", - "coordinates": [10.8677845, -60.9821067], - "activeCases": 5, - "value": 0.0278119246 - }, - { - "Country": "Uganda", - "Active Cases": "59", - "coordinates": [1.5333554, 32.2166578], - "activeCases": 59, - "value": 0.3281807108 - }, - { - "Country": "Nepal", - "Active Cases": "79", - "coordinates": [28.1083929, 84.0917139], - "activeCases": 79, - "value": 0.4394284093 - }, - { - "Country": "Aruba", - "Active Cases": "9", - "coordinates": [12.4902998, -69.9609842], - "activeCases": 9, - "value": 0.0500614644 - }, - { - "Country": "Monaco", - "Active Cases": "9", - "coordinates": [43.738449, 7.4242241], - "activeCases": 9, - "value": 0.0500614644 - }, - { - "Country": "Guyana", - "Active Cases": "49", - "coordinates": [4.8417097, -58.6416891], - "activeCases": 49, - "value": 0.2725568615 - }, - { - "Country": "Bahamas", - "Active Cases": "50", - "coordinates": [24.7736546, -78.0000547], - "activeCases": 50, - "value": 0.2781192464 - }, - { - "Country": "Barbados", - "Active Cases": "23", - "coordinates": [13.1500331, -59.5250305], - "activeCases": 23, - "value": 0.1279348533 - }, - { - "Country": "Liechtenstein", - "Active Cases": "26", - "coordinates": [47.1416307, 9.5531527], - "activeCases": 26, - "value": 0.1446220081 - }, - { - "Country": "Mozambique", - "Active Cases": "55", - "coordinates": [-19.302233, 34.9144977], - "activeCases": 55, - "value": 0.305931171 - }, - { - "Country": "Cayman Islands", - "Active Cases": "39", - "coordinates": [19.5417212, -80.5667132], - "activeCases": 39, - "value": 0.2169330122 - }, - { - "Country": "Sint Maarten", - "Active Cases": "18", - "coordinates": [52.7559345, 4.7505476], - "activeCases": 18, - "value": 0.1001229287 - }, - { - "Country": "Libya", - "Active Cases": "37", - "coordinates": [26.8234472, 18.1236723], - "activeCases": 37, - "value": 0.2058082423 - }, - { - "Country": "French Polynesia", - "Active Cases": "4", - "coordinates": [-16.0344249, -146.0490931], - "activeCases": 4, - "value": 0.0222495397 - }, - { - "Country": "Syria", - "Active Cases": "15", - "coordinates": [34.6401861, 39.0494106], - "activeCases": 15, - "value": 0.0834357739 - }, - { - "Country": "Macao", - "Active Cases": "5", - "coordinates": [22.1757605, 113.5514142], - "activeCases": 5, - "value": 0.0278119246 - }, - { - "Country": "Malawi", - "Active Cases": "26", - "coordinates": [-13.2687204, 33.9301963], - "activeCases": 26, - "value": 0.1446220081 - }, - { - "Country": "Angola", - "Active Cases": "30", - "coordinates": [-11.8775768, 17.5691241], - "activeCases": 30, - "value": 0.1668715478 - }, - { - "Country": "Mongolia", - "Active Cases": "28", - "coordinates": [46.8250388, 103.8499736], - "activeCases": 28, - "value": 0.155746778 - }, - { - "Country": "Eritrea", - "Active Cases": "2", - "coordinates": [15.9500319, 37.9999668], - "activeCases": 2, - "value": 0.0111247699 - }, - { - "Country": "Saint Martin", - "Active Cases": "5", - "coordinates": [48.5683066, 6.7539988], - "activeCases": 5, - "value": 0.0278119246 - }, - { - "Country": "Yemen", - "Active Cases": "26", - "coordinates": [16.3471243, 47.8915271], - "activeCases": 26, - "value": 0.1446220081 - }, - { - "Country": "Zimbabwe", - "Active Cases": "21", - "coordinates": [-18.4554963, 29.7468414], - "activeCases": 21, - "value": 0.1168100835 - }, - { - "Country": "Antigua and Barbuda", - "Active Cases": "6", - "coordinates": [17.2234721, -61.9554608], - "activeCases": 6, - "value": 0.0333743096 - }, - { - "Country": "Timor-Leste", - "Active Cases": "3", - "coordinates": [-8.5151979, 125.8375756], - "activeCases": 3, - "value": 0.0166871548 - }, - { - "Country": "Botswana", - "Active Cases": "13", - "coordinates": [-23.1681782, 24.5928742], - "activeCases": 13, - "value": 0.0723110041 - }, - { - "Country": "Grenada", - "Active Cases": "8", - "coordinates": [12.1360374, -61.6904045], - "activeCases": 8, - "value": 0.0444990794 - }, - { - "Country": "Gambia", - "Active Cases": "10", - "coordinates": [13.470062, -15.4900464], - "activeCases": 10, - "value": 0.0556238493 - }, - { - "Country": "Laos", - "Active Cases": "10", - "coordinates": [20.0171109, 103.378253], - "activeCases": 10, - "value": 0.0556238493 - }, - { - "Country": "Belize", - "Active Cases": "0", - "coordinates": [16.8259793, -88.7600927], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "Fiji", - "Active Cases": "4", - "coordinates": [-18.1239696, 179.0122737], - "activeCases": 4, - "value": 0.0222495397 - }, - { - "Country": "New Caledonia", - "Active Cases": "0", - "coordinates": [-20.4542886, 164.5566058], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "Saint Lucia", - "Active Cases": "1", - "coordinates": [13.8250489, -60.975036], - "activeCases": 1, - "value": 0.0055623849 - }, - { - "Country": "St. Vincent Grenadines", - "Active Cases": "8", - "coordinates": [12.90447, -61.2765569], - "activeCases": 8, - "value": 0.0444990794 - }, - { - "Country": "Nicaragua", - "Active Cases": "4", - "coordinates": [12.6090157, -85.2936911], - "activeCases": 4, - "value": 0.0222495397 - }, - { - "Country": "Cura\u00e7ao", - "Active Cases": "1", - "coordinates": [12.1845, -68.9640875], - "activeCases": 1, - "value": 0.0055623849 - }, - { - "Country": "Dominica", - "Active Cases": "2", - "coordinates": [19.0974031, -70.3028026], - "activeCases": 2, - "value": 0.0111247699 - }, - { - "Country": "Namibia", - "Active Cases": "6", - "coordinates": [-23.2335499, 17.3231107], - "activeCases": 6, - "value": 0.0333743096 - }, - { - "Country": "Burundi", - "Active Cases": "7", - "coordinates": [-3.3634357, 29.8870575], - "activeCases": 7, - "value": 0.0389366945 - }, - { - "Country": "Saint Kitts and Nevis", - "Active Cases": "2", - "coordinates": [17.250512, -62.6725973], - "activeCases": 2, - "value": 0.0111247699 - }, - { - "Country": "Falkland Islands", - "Active Cases": "0", - "coordinates": [-51.9666424, -59.5500387], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "Turks and Caicos", - "Active Cases": "3", - "coordinates": [21.7214683, -71.6201783], - "activeCases": 3, - "value": 0.0166871548 - }, - { - "Country": "Vatican City", - "Active Cases": "10", - "coordinates": [41.9038149, 12.4531527], - "activeCases": 10, - "value": 0.0556238493 - }, - { - "Country": "Montserrat", - "Active Cases": "2", - "coordinates": [16.7417041, -62.1916844], - "activeCases": 2, - "value": 0.0111247699 - }, - { - "Country": "Greenland", - "Active Cases": "0", - "coordinates": [77.6192349, -42.8125967], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "Seychelles", - "Active Cases": "3", - "coordinates": [-4.6574977, 55.4540146], - "activeCases": 3, - "value": 0.0166871548 - }, - { - "Country": "Suriname", - "Active Cases": "0", - "coordinates": [4.1413025, -56.0771187], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "MS Zaandam", - "Active Cases": "7", - "coordinates": [52.4387696, 4.8185293], - "activeCases": 7, - "value": 0.0389366945 - }, - { - "Country": "Comoros", - "Active Cases": "7", - "coordinates": [-12.2045176, 44.2832964], - "activeCases": 7, - "value": 0.0389366945 - }, - { - "Country": "Mauritania", - "Active Cases": "1", - "coordinates": [20.2540382, -9.2399263], - "activeCases": 1, - "value": 0.0055623849 - }, - { - "Country": "Papua New Guinea", - "Active Cases": "0", - "coordinates": [-5.6816069, 144.2489081], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "British Virgin Islands", - "Active Cases": "2", - "coordinates": [18.4024395, -64.5661642], - "activeCases": 2, - "value": 0.0111247699 - }, - { - "Country": "Bhutan", - "Active Cases": "2", - "coordinates": [27.549511, 90.5119273], - "activeCases": 2, - "value": 0.0111247699 - }, - { - "Country": "Caribbean Netherlands", - "Active Cases": "6", - "coordinates": [17.566, -63.1432387], - "activeCases": 6, - "value": 0.0333743096 - }, - { - "Country": "St. Barth", - "Active Cases": "0", - "coordinates": [17.9036287, -62.8115688], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "Western Sahara", - "Active Cases": "1", - "coordinates": [24.1188663, -13.9508923], - "activeCases": 1, - "value": 0.0055623849 - }, - { - "Country": "Anguilla", - "Active Cases": "0", - "coordinates": [18.1954947, -63.0750234], - "activeCases": 0, - "value": 0.0 - }, - { - "Country": "Saint Pierre Miquelon", - "Active Cases": "1", - "coordinates": [46.7832469, -56.1951589], - "activeCases": 1, - "value": 0.0055623849 - }, - { - "Country": "China", - "Active Cases": "208", - "coordinates": [35.000074, 104.999927], - "activeCases": 208, - "value": 1.1569760651 - } -] diff --git a/src/assets/global.json b/src/assets/global.json deleted file mode 100644 index f27f5c8..0000000 --- a/src/assets/global.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "totalCount": 2406984 -} diff --git a/src/assets/usExport.json b/src/assets/usExport.json deleted file mode 100644 index 571f2bf..0000000 --- a/src/assets/usExport.json +++ /dev/null @@ -1,387 +0,0 @@ -[ - { - "Country": "New York ", - "Active Cases": "260,189 ", - "coordinates": [40.7127281, -74.0060152], - "activeCases": 260189, - "value": 1000.0 - }, - { - "Country": "New Jersey ", - "Active Cases": "127,943 ", - "coordinates": [40.0757384, -74.4041622], - "activeCases": 127943, - "value": 491.731010919 - }, - { - "Country": "Massachusetts ", - "Active Cases": "62,513 ", - "coordinates": [42.3788774, -72.032366], - "activeCases": 62513, - "value": 240.2599648717 - }, - { - "Country": "Illinois ", - "Active Cases": "69,874 ", - "coordinates": [40.0796606, -89.4337288], - "activeCases": 69874, - "value": 268.550937972 - }, - { - "Country": "California ", - "Active Cases": "51,833 ", - "coordinates": [36.7014631, -118.7559974], - "activeCases": 51833, - "value": 199.2128798681 - }, - { - "Country": "Pennsylvania ", - "Active Cases": "53,345 ", - "coordinates": [40.9699889, -77.7278831], - "activeCases": 53345, - "value": 205.0240402169 - }, - { - "Country": "Michigan ", - "Active Cases": "26,259 ", - "coordinates": [43.6211955, -84.6824346], - "activeCases": 26259, - "value": 100.9227907406 - }, - { - "Country": "Florida ", - "Active Cases": "37,599 ", - "coordinates": [27.7567667, -81.4639835], - "activeCases": 37599, - "value": 144.5064933568 - }, - { - "Country": "Texas ", - "Active Cases": "17,177 ", - "coordinates": [31.8160381, -99.5120986], - "activeCases": 17177, - "value": 66.0173950474 - }, - { - "Country": "Georgia ", - "Active Cases": "30,783 ", - "coordinates": [41.6809707, 44.0287382], - "activeCases": 30783, - "value": 118.3101514668 - }, - { - "Country": "Connecticut ", - "Active Cases": "29,472 ", - "coordinates": [41.6500201, -72.7342163], - "activeCases": 29472, - "value": 113.2715064818 - }, - { - "Country": "Maryland ", - "Active Cases": "27,879 ", - "coordinates": [39.5162234, -76.9382069], - "activeCases": 27879, - "value": 107.1490339715 - }, - { - "Country": "Louisiana ", - "Active Cases": " 8,834 ", - "coordinates": [30.8703881, -92.007126], - "activeCases": 8834, - "value": 33.9522424084 - }, - { - "Country": "Indiana ", - "Active Cases": "20,683 ", - "coordinates": [40.3270127, -86.1746933], - "activeCases": 20683, - "value": 79.4922152743 - }, - { - "Country": "Ohio ", - "Active Cases": "21,918 ", - "coordinates": [40.2253569, -82.6881395], - "activeCases": 21918, - "value": 84.2387648978 - }, - { - "Country": "Virginia ", - "Active Cases": "19,245 ", - "coordinates": [37.1232245, -78.4927721], - "activeCases": 19245, - "value": 73.9654635669 - }, - { - "Country": "Colorado ", - "Active Cases": "17,308 ", - "coordinates": [38.7251776, -105.6077167], - "activeCases": 17308, - "value": 66.5208752099 - }, - { - "Country": "Washington ", - "Active Cases": "13,535 ", - "coordinates": [38.8949855, -77.0365708], - "activeCases": 13535, - "value": 52.019877858 - }, - { - "Country": "North Carolina ", - "Active Cases": "12,107 ", - "coordinates": [35.6729639, -79.0392919], - "activeCases": 12107, - "value": 46.5315597508 - }, - { - "Country": "Tennessee ", - "Active Cases": "7,189 ", - "coordinates": [35.7730076, -86.2820081], - "activeCases": 7189, - "value": 27.629915177 - }, - { - "Country": "Iowa ", - "Active Cases": "6,734 ", - "coordinates": [41.9216734, -93.3122705], - "activeCases": 6734, - "value": 25.8811863684 - }, - { - "Country": "Rhode Island ", - "Active Cases": "9,841 ", - "coordinates": [41.7962409, -71.5992372], - "activeCases": 9841, - "value": 37.8225059476 - }, - { - "Country": "Arizona ", - "Active Cases": "10,358 ", - "coordinates": [34.395342, -111.7632755], - "activeCases": 10358, - "value": 39.8095230775 - }, - { - "Country": "Minnesota ", - "Active Cases": "3,910 ", - "coordinates": [45.9896587, -94.6113288], - "activeCases": 3910, - "value": 15.0275376745 - }, - { - "Country": "Missouri ", - "Active Cases": "7,189 ", - "coordinates": [38.7604815, -92.5617875], - "activeCases": 7189, - "value": 27.629915177 - }, - { - "Country": "Wisconsin ", - "Active Cases": "4,858 ", - "coordinates": [44.4308975, -89.6884637], - "activeCases": 4858, - "value": 18.6710429726 - }, - { - "Country": "Alabama ", - "Active Cases": "9,078 ", - "coordinates": [33.2588817, -86.8295337], - "activeCases": 9078, - "value": 34.8900222531 - }, - { - "Country": "Mississippi ", - "Active Cases": "4,536 ", - "coordinates": [32.9715645, -89.7348497], - "activeCases": 4536, - "value": 17.4334810465 - }, - { - "Country": "Nebraska ", - "Active Cases": "7,717 ", - "coordinates": [41.7370229, -99.5873816], - "activeCases": 7717, - "value": 29.6592092671 - }, - { - "Country": "South Carolina ", - "Active Cases": "2,166 ", - "coordinates": [33.6874388, -80.4363743], - "activeCases": 2166, - "value": 8.3247178013 - }, - { - "Country": "Kansas ", - "Active Cases": "4,934 ", - "coordinates": [38.27312, -98.5821872], - "activeCases": 4934, - "value": 18.9631383341 - }, - { - "Country": "Kentucky ", - "Active Cases": "3,724 ", - "coordinates": [37.5726028, -85.1551411], - "activeCases": 3724, - "value": 14.312672711 - }, - { - "Country": "Delaware ", - "Active Cases": "3,828 ", - "coordinates": [38.6920451, -75.4013315], - "activeCases": 3828, - "value": 14.712382153 - }, - { - "Country": "District Of Columbia ", - "Active Cases": "4,912 ", - "coordinates": [38.8936613, -76.9878833], - "activeCases": 4912, - "value": 18.8785844136 - }, - { - "Country": "Nevada ", - "Active Cases": "1,530 ", - "coordinates": [39.5158825, -116.8537227], - "activeCases": 1530, - "value": 5.8803408292 - }, - { - "Country": "Utah ", - "Active Cases": "3,673 ", - "coordinates": [39.4225192, -111.7143584], - "activeCases": 3673, - "value": 14.11666135 - }, - { - "Country": "New Mexico ", - "Active Cases": "3,367 ", - "coordinates": [34.5708167, -105.993007], - "activeCases": 3367, - "value": 12.9405931842 - }, - { - "Country": "Oklahoma ", - "Active Cases": " 1,156 ", - "coordinates": [34.9550817, -97.2684063], - "activeCases": 1156, - "value": 4.442924182 - }, - { - "Country": "Arkansas ", - "Active Cases": "691 ", - "coordinates": [35.2048883, -92.4479108], - "activeCases": 691, - "value": 2.6557617732 - }, - { - "Country": "South Dakota ", - "Active Cases": "1,044 ", - "coordinates": [44.6471761, -100.348761], - "activeCases": 1044, - "value": 4.0124678599 - }, - { - "Country": "Oregon ", - "Active Cases": "1,819 ", - "coordinates": [43.9792797, -120.737257], - "activeCases": 1819, - "value": 6.9910718747 - }, - { - "Country": "New Hampshire ", - "Active Cases": "1,616 ", - "coordinates": [43.4849133, -71.6553992], - "activeCases": 1616, - "value": 6.2108697908 - }, - { - "Country": "Idaho ", - "Active Cases": "759 ", - "coordinates": [43.6447642, -114.0154071], - "activeCases": 759, - "value": 2.9171102545 - }, - { - "Country": "North Dakota ", - "Active Cases": "667 ", - "coordinates": [47.6201461, -100.540737], - "activeCases": 667, - "value": 2.5635211327 - }, - { - "Country": "Maine ", - "Active Cases": "487 ", - "coordinates": [45.709097, -68.8590201], - "activeCases": 487, - "value": 1.8717163293 - }, - { - "Country": "West Virginia ", - "Active Cases": "544 ", - "coordinates": [38.4758406, -80.8408415], - "activeCases": 544, - "value": 2.0907878504 - }, - { - "Country": "Vermont ", - "Active Cases": "124 ", - "coordinates": [44.5990718, -72.5002608], - "activeCases": 124, - "value": 0.4765766424 - }, - { - "Country": "Wyoming ", - "Active Cases": "209 ", - "coordinates": [43.1700264, -107.5685348], - "activeCases": 209, - "value": 0.803262244 - }, - { - "Country": "Hawaii ", - "Active Cases": "47 ", - "coordinates": [21.2160437, -157.975203], - "activeCases": 47, - "value": 0.1806379209 - }, - { - "Country": "Montana ", - "Active Cases": "20 ", - "coordinates": [47.3752671, -109.6387579], - "activeCases": 20, - "value": 0.0768672004 - }, - { - "Country": "Alaska ", - "Active Cases": "62 ", - "coordinates": [64.4459613, -149.680909], - "activeCases": 62, - "value": 0.2382883212 - }, - { - "Country": "Guam ", - "Active Cases": "15 ", - "coordinates": [13.4501257, 144.757551], - "activeCases": 15, - "value": 0.0576504003 - }, - { - "Country": "Northern Mariana Islands ", - "Active Cases": "2 ", - "coordinates": [14.1490205, 145.2134525], - "activeCases": 2, - "value": 0.00768672 - }, - { - "Country": "Puerto Rico ", - "Active Cases": "1,319 ", - "coordinates": [18.2214149, -66.4132818], - "activeCases": 1319, - "value": 5.0693918651 - }, - { - "Country": "United States Virgin Islands ", - "Active Cases": "7 ", - "coordinates": [17.789187, -64.7080574], - "activeCases": 7, - "value": 0.0269035201 - } -] diff --git a/src/assets/world.jpg b/src/assets/world.jpg deleted file mode 100644 index 222bd93..0000000 Binary files a/src/assets/world.jpg and /dev/null differ diff --git a/src/markerRenderer.ts b/src/markerRenderer.ts deleted file mode 100755 index 480be60..0000000 --- a/src/markerRenderer.ts +++ /dev/null @@ -1,34 +0,0 @@ -//@ts-ignore -import * as TWEEN from "es6-tween"; -import * as THREE from "three"; - -import { Marker } from "react-globe"; - -function random(scaleFactor: number): number { - return Math.random() > 0.5 - ? scaleFactor * Math.random() - : -scaleFactor * Math.random(); -} - -//const MARKER_COLOR = "#fcffbe"; -const MARKER_COMPANION_COLOR = "#fff9e6"; - -export default function markerRenderer(marker: Marker): THREE.Object3D { - const size = Math.max(marker.value / 20, 1); - const geometry = new THREE.BoxGeometry(5, 5, marker.value / 2); - - const material = new THREE.MeshPhongMaterial({ - color: new THREE.Color("red"), - transparent: true, - opacity: 0.8, - }); - - // add light - const mesh = new THREE.Mesh(geometry, material); - mesh.rotation.y = Math.PI; - /*const light = new THREE.PointLight("#fcffbe", 0, 1, marker.value); - mesh.children = []; - mesh.add(light); -*/ - return mesh; -} diff --git a/src/markers.ts b/src/markers.ts deleted file mode 100755 index ec8eaa9..0000000 --- a/src/markers.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Marker } from "react-globe"; -import data from "./assets/export.json"; -import usData from "./assets/usExport.json"; -//@ts-ignore -const markers: Marker[] = data; -//@ts-ignore -const usMarkers: Marker[] = usData; - -for (let i = 0; i < usMarkers.length; i++) { - markers.push(usMarkers[i]); -} -export default markers; diff --git a/src/styles.css b/src/styles.css index 55f0dfc..2a1974d 100755 --- a/src/styles.css +++ b/src/styles.css @@ -1,90 +1,107 @@ -body { - background-color: black; - font-size: 16px; +* { + margin: 0; + padding: 0; } -.globe { - font-family: sans-serif; - position: relative; - z-index: 0; - height: 80vh; + +body { + font-family: "Space Mono", monospace; + overflow: hidden; + background: black; } -.header1 { - font-family: sans-serif; + +.top-info-container { + z-index: 1; + top: 20px; + position: absolute; + color: white; text-align: center; - font-size: 4em; - color: red; - position: relative; - z-index: 2; + width: 100%; } -.header2 { - font-family: sans-serif; + +.bottom-info-container { + z-index: 1; + bottom: 20px; + position: absolute; + color: white; text-align: center; - font-size: 1em; - color: red; - z-index: 2; - position: relative; + width: 100%; } -.footer { - font-family: sans-serif; - font-size: 5em; - color: red; + +.title { + font-size: 35px; + color: #e6f1ff; +} + +.title-desc { + margin-top: 5px; + color: #ccd6f6; + padding: 0 5px; +} + +#infected { + color: goldenrod; +} + +#deaths { + color: #ff4848; +} + +#recovered { + color: #1ae021; +} + +.card { + font-family: "Space Mono", monospace; + transition: 0.3s; + background-color: black; + width: 190px; + border: 2px solid steelblue; + border-radius: 10px; z-index: 2; - position: fixed; - left: 0; - bottom: 0; +} + +.container { + /* padding: 3px 16px; */ + padding-top: 1px; + padding-bottom: 8px; + padding-left: 12px; + padding-right: 12px; + text-align: left; +} + +.card-img { + object-fit: contain; width: 100%; - text-align: center; + border-top-left-radius: 10px; + border-top-right-radius: 10px; } -.details { - background: gainsboro; - opacity: 0.5; - position: absolute; - top: 5em; - right: 1em; - padding: 12; - margin-top: 5em; + +.card-title { + font-weight: bold; } -.details p { - font-family: sans-serif; - font-size: 1em; - margin: 1em; + +.card-spacer { + height: 5px; } -@media only screen and (min-device-width: 320px) and (max-device-width: 750px) { - body { - font-size: 6px; - } - .header1 { - font-size: 5em; - color: red; - } - .header2 { - font-family: sans-serif; - text-align: center; - font-size: 4em; - color: red; - z-index: 2; - position: relative; - } - .details { - background: gainsboro; - opacity: 1; - z-index: 3; - position: fixed; - bottom: 15em; - left: 0em; - width: 100%; - text-align: center; +.bottom-info { + display: flex; + flex-direction: column; + font-size: 11px; +} - top: unset; - right: unset; - padding: unset; - margin-top: unset; - } +.scene-tooltip { + z-index: 2; +} - .details p { - font-family: sans-serif; - font-size: 5em; - margin: 1em; +@media only screen and (max-width: 768px) { + .bottom-info-container { + z-index: 1; + bottom: 20px; + position: absolute; + color: white; + text-align: center; + + width: 100%; } } diff --git a/src/utils/index.tsx b/src/utils/index.tsx new file mode 100644 index 0000000..db07c22 --- /dev/null +++ b/src/utils/index.tsx @@ -0,0 +1,66 @@ +import dayjs from "dayjs"; +import { format } from "d3"; +import { FLAG_ENDPOINT } from "../Constants"; + +export async function request(url: string) { + try { + const res = await fetch(url); + const data = await res.json(); + return data; + } catch (e) { + throw e; + } +} + +export async function getCoordinates() { + try { + const { latitude, longitude } = await request( + "https://geolocation-db.com/json/" + ); + + return { + latitude, + longitude, + }; + } catch (e) { + throw e; + } +} + +export function numberWithCommas(x: number) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + +export function formatDate(date: string, format = "MMMM D, YYYY") { + return dayjs(date).format(format); +} + +export const isMobile = (function (a) { + return ( + /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test( + a + ) || + /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test( + a.substr(0, 4) + ) + ); + // @ts-ignore +})(navigator.userAgent || navigator.vendor || window.opera); + +export function getPolygonLabel(flagName: any, d: any, c: any): string { + return ` +
+ flag +
+ ${d.NAME}
+
+
+
+ Cases: ${numberWithCommas(c.confirmed)}
+ Deaths: ${numberWithCommas(c.deaths)}
+ Recovered: ${numberWithCommas(c.recoveries)}
+ Population: ${format(".3s")(d.POP_EST)} +
+
+ `; +}