Relay firehose browser tools: https://compare.hose.cam

event rate bars

+978 -30
package-lock.json
··· 8 8 "name": "firehose-diff", 9 9 "version": "0.0.0", 10 10 "dependencies": { 11 + "@emotion/react": "^11.14.0", 12 + "@emotion/styled": "^11.14.0", 13 + "@mui/material": "^7.1.0", 14 + "@mui/x-charts": "^8.3.1", 11 15 "@skyware/firehose": "^0.5.1", 12 16 "react": "^19.1.0", 13 17 "react-dom": "^19.1.0" ··· 97 101 "version": "7.27.1", 98 102 "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", 99 103 "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", 100 - "dev": true, 101 104 "license": "MIT", 102 105 "dependencies": { 103 106 "@babel/helper-validator-identifier": "^7.27.1", ··· 153 156 "version": "7.27.1", 154 157 "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", 155 158 "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", 156 - "dev": true, 157 159 "license": "MIT", 158 160 "dependencies": { 159 161 "@babel/parser": "^7.27.1", ··· 187 189 "version": "7.27.1", 188 190 "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", 189 191 "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", 190 - "dev": true, 191 192 "license": "MIT", 192 193 "dependencies": { 193 194 "@babel/traverse": "^7.27.1", ··· 229 230 "version": "7.27.1", 230 231 "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", 231 232 "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", 232 - "dev": true, 233 233 "license": "MIT", 234 234 "engines": { 235 235 "node": ">=6.9.0" ··· 239 239 "version": "7.27.1", 240 240 "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", 241 241 "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", 242 - "dev": true, 243 242 "license": "MIT", 244 243 "engines": { 245 244 "node": ">=6.9.0" ··· 273 272 "version": "7.27.2", 274 273 "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", 275 274 "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", 276 - "dev": true, 277 275 "license": "MIT", 278 276 "dependencies": { 279 277 "@babel/types": "^7.27.1" ··· 317 315 "@babel/core": "^7.0.0-0" 318 316 } 319 317 }, 318 + "node_modules/@babel/runtime": { 319 + "version": "7.27.1", 320 + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", 321 + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", 322 + "license": "MIT", 323 + "engines": { 324 + "node": ">=6.9.0" 325 + } 326 + }, 320 327 "node_modules/@babel/template": { 321 328 "version": "7.27.2", 322 329 "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", 323 330 "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", 324 - "dev": true, 325 331 "license": "MIT", 326 332 "dependencies": { 327 333 "@babel/code-frame": "^7.27.1", ··· 336 342 "version": "7.27.1", 337 343 "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", 338 344 "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", 339 - "dev": true, 340 345 "license": "MIT", 341 346 "dependencies": { 342 347 "@babel/code-frame": "^7.27.1", ··· 355 360 "version": "11.12.0", 356 361 "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 357 362 "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 358 - "dev": true, 359 363 "license": "MIT", 360 364 "engines": { 361 365 "node": ">=4" ··· 365 369 "version": "7.27.1", 366 370 "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", 367 371 "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", 368 - "dev": true, 369 372 "license": "MIT", 370 373 "dependencies": { 371 374 "@babel/helper-string-parser": "^7.27.1", ··· 375 378 "node": ">=6.9.0" 376 379 } 377 380 }, 381 + "node_modules/@emotion/babel-plugin": { 382 + "version": "11.13.5", 383 + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", 384 + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", 385 + "license": "MIT", 386 + "dependencies": { 387 + "@babel/helper-module-imports": "^7.16.7", 388 + "@babel/runtime": "^7.18.3", 389 + "@emotion/hash": "^0.9.2", 390 + "@emotion/memoize": "^0.9.0", 391 + "@emotion/serialize": "^1.3.3", 392 + "babel-plugin-macros": "^3.1.0", 393 + "convert-source-map": "^1.5.0", 394 + "escape-string-regexp": "^4.0.0", 395 + "find-root": "^1.1.0", 396 + "source-map": "^0.5.7", 397 + "stylis": "4.2.0" 398 + } 399 + }, 400 + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { 401 + "version": "1.9.0", 402 + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 403 + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 404 + "license": "MIT" 405 + }, 406 + "node_modules/@emotion/cache": { 407 + "version": "11.14.0", 408 + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", 409 + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", 410 + "license": "MIT", 411 + "dependencies": { 412 + "@emotion/memoize": "^0.9.0", 413 + "@emotion/sheet": "^1.4.0", 414 + "@emotion/utils": "^1.4.2", 415 + "@emotion/weak-memoize": "^0.4.0", 416 + "stylis": "4.2.0" 417 + } 418 + }, 419 + "node_modules/@emotion/hash": { 420 + "version": "0.9.2", 421 + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", 422 + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", 423 + "license": "MIT" 424 + }, 425 + "node_modules/@emotion/is-prop-valid": { 426 + "version": "1.3.1", 427 + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", 428 + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", 429 + "license": "MIT", 430 + "dependencies": { 431 + "@emotion/memoize": "^0.9.0" 432 + } 433 + }, 434 + "node_modules/@emotion/memoize": { 435 + "version": "0.9.0", 436 + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", 437 + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", 438 + "license": "MIT" 439 + }, 440 + "node_modules/@emotion/react": { 441 + "version": "11.14.0", 442 + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", 443 + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", 444 + "license": "MIT", 445 + "dependencies": { 446 + "@babel/runtime": "^7.18.3", 447 + "@emotion/babel-plugin": "^11.13.5", 448 + "@emotion/cache": "^11.14.0", 449 + "@emotion/serialize": "^1.3.3", 450 + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", 451 + "@emotion/utils": "^1.4.2", 452 + "@emotion/weak-memoize": "^0.4.0", 453 + "hoist-non-react-statics": "^3.3.1" 454 + }, 455 + "peerDependencies": { 456 + "react": ">=16.8.0" 457 + }, 458 + "peerDependenciesMeta": { 459 + "@types/react": { 460 + "optional": true 461 + } 462 + } 463 + }, 464 + "node_modules/@emotion/serialize": { 465 + "version": "1.3.3", 466 + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", 467 + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", 468 + "license": "MIT", 469 + "dependencies": { 470 + "@emotion/hash": "^0.9.2", 471 + "@emotion/memoize": "^0.9.0", 472 + "@emotion/unitless": "^0.10.0", 473 + "@emotion/utils": "^1.4.2", 474 + "csstype": "^3.0.2" 475 + } 476 + }, 477 + "node_modules/@emotion/sheet": { 478 + "version": "1.4.0", 479 + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", 480 + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", 481 + "license": "MIT" 482 + }, 483 + "node_modules/@emotion/styled": { 484 + "version": "11.14.0", 485 + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", 486 + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", 487 + "license": "MIT", 488 + "dependencies": { 489 + "@babel/runtime": "^7.18.3", 490 + "@emotion/babel-plugin": "^11.13.5", 491 + "@emotion/is-prop-valid": "^1.3.0", 492 + "@emotion/serialize": "^1.3.3", 493 + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", 494 + "@emotion/utils": "^1.4.2" 495 + }, 496 + "peerDependencies": { 497 + "@emotion/react": "^11.0.0-rc.0", 498 + "react": ">=16.8.0" 499 + }, 500 + "peerDependenciesMeta": { 501 + "@types/react": { 502 + "optional": true 503 + } 504 + } 505 + }, 506 + "node_modules/@emotion/unitless": { 507 + "version": "0.10.0", 508 + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", 509 + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", 510 + "license": "MIT" 511 + }, 512 + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { 513 + "version": "1.2.0", 514 + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", 515 + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", 516 + "license": "MIT", 517 + "peerDependencies": { 518 + "react": ">=16.8.0" 519 + } 520 + }, 521 + "node_modules/@emotion/utils": { 522 + "version": "1.4.2", 523 + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", 524 + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", 525 + "license": "MIT" 526 + }, 527 + "node_modules/@emotion/weak-memoize": { 528 + "version": "0.4.0", 529 + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", 530 + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", 531 + "license": "MIT" 532 + }, 378 533 "node_modules/@esbuild/aix-ppc64": { 379 534 "version": "0.25.4", 380 535 "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", ··· 1021 1176 "version": "0.3.8", 1022 1177 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 1023 1178 "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 1024 - "dev": true, 1025 1179 "license": "MIT", 1026 1180 "dependencies": { 1027 1181 "@jridgewell/set-array": "^1.2.1", ··· 1036 1190 "version": "3.1.2", 1037 1191 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 1038 1192 "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 1039 - "dev": true, 1040 1193 "license": "MIT", 1041 1194 "engines": { 1042 1195 "node": ">=6.0.0" ··· 1046 1199 "version": "1.2.1", 1047 1200 "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 1048 1201 "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 1049 - "dev": true, 1050 1202 "license": "MIT", 1051 1203 "engines": { 1052 1204 "node": ">=6.0.0" ··· 1056 1208 "version": "1.5.0", 1057 1209 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 1058 1210 "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 1059 - "dev": true, 1060 1211 "license": "MIT" 1061 1212 }, 1062 1213 "node_modules/@jridgewell/trace-mapping": { 1063 1214 "version": "0.3.25", 1064 1215 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 1065 1216 "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 1066 - "dev": true, 1067 1217 "license": "MIT", 1068 1218 "dependencies": { 1069 1219 "@jridgewell/resolve-uri": "^3.1.0", ··· 1092 1242 "node": ">=18" 1093 1243 } 1094 1244 }, 1245 + "node_modules/@mui/core-downloads-tracker": { 1246 + "version": "7.1.0", 1247 + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.1.0.tgz", 1248 + "integrity": "sha512-E0OqhZv548Qdc0PwWhLVA2zmjJZSTvaL4ZhoswmI8NJEC1tpW2js6LLP827jrW9MEiXYdz3QS6+hask83w74yQ==", 1249 + "license": "MIT", 1250 + "funding": { 1251 + "type": "opencollective", 1252 + "url": "https://opencollective.com/mui-org" 1253 + } 1254 + }, 1255 + "node_modules/@mui/material": { 1256 + "version": "7.1.0", 1257 + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.1.0.tgz", 1258 + "integrity": "sha512-ahUJdrhEv+mCp4XHW+tHIEYzZMSRLg8z4AjUOsj44QpD1ZaMxQoVOG2xiHvLFdcsIPbgSRx1bg1eQSheHBgvtg==", 1259 + "license": "MIT", 1260 + "dependencies": { 1261 + "@babel/runtime": "^7.27.1", 1262 + "@mui/core-downloads-tracker": "^7.1.0", 1263 + "@mui/system": "^7.1.0", 1264 + "@mui/types": "^7.4.2", 1265 + "@mui/utils": "^7.1.0", 1266 + "@popperjs/core": "^2.11.8", 1267 + "@types/react-transition-group": "^4.4.12", 1268 + "clsx": "^2.1.1", 1269 + "csstype": "^3.1.3", 1270 + "prop-types": "^15.8.1", 1271 + "react-is": "^19.1.0", 1272 + "react-transition-group": "^4.4.5" 1273 + }, 1274 + "engines": { 1275 + "node": ">=14.0.0" 1276 + }, 1277 + "funding": { 1278 + "type": "opencollective", 1279 + "url": "https://opencollective.com/mui-org" 1280 + }, 1281 + "peerDependencies": { 1282 + "@emotion/react": "^11.5.0", 1283 + "@emotion/styled": "^11.3.0", 1284 + "@mui/material-pigment-css": "^7.1.0", 1285 + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", 1286 + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", 1287 + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" 1288 + }, 1289 + "peerDependenciesMeta": { 1290 + "@emotion/react": { 1291 + "optional": true 1292 + }, 1293 + "@emotion/styled": { 1294 + "optional": true 1295 + }, 1296 + "@mui/material-pigment-css": { 1297 + "optional": true 1298 + }, 1299 + "@types/react": { 1300 + "optional": true 1301 + } 1302 + } 1303 + }, 1304 + "node_modules/@mui/private-theming": { 1305 + "version": "7.1.0", 1306 + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.1.0.tgz", 1307 + "integrity": "sha512-4Kck4jxhqF6YxNwJdSae1WgDfXVg0lIH6JVJ7gtuFfuKcQCgomJxPvUEOySTFRPz1IZzwz5OAcToskRdffElDA==", 1308 + "license": "MIT", 1309 + "dependencies": { 1310 + "@babel/runtime": "^7.27.1", 1311 + "@mui/utils": "^7.1.0", 1312 + "prop-types": "^15.8.1" 1313 + }, 1314 + "engines": { 1315 + "node": ">=14.0.0" 1316 + }, 1317 + "funding": { 1318 + "type": "opencollective", 1319 + "url": "https://opencollective.com/mui-org" 1320 + }, 1321 + "peerDependencies": { 1322 + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", 1323 + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" 1324 + }, 1325 + "peerDependenciesMeta": { 1326 + "@types/react": { 1327 + "optional": true 1328 + } 1329 + } 1330 + }, 1331 + "node_modules/@mui/styled-engine": { 1332 + "version": "7.1.0", 1333 + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.1.0.tgz", 1334 + "integrity": "sha512-m0mJ0c6iRC+f9hMeRe0W7zZX1wme3oUX0+XTVHjPG7DJz6OdQ6K/ggEOq7ZdwilcpdsDUwwMfOmvO71qDkYd2w==", 1335 + "license": "MIT", 1336 + "dependencies": { 1337 + "@babel/runtime": "^7.27.1", 1338 + "@emotion/cache": "^11.13.5", 1339 + "@emotion/serialize": "^1.3.3", 1340 + "@emotion/sheet": "^1.4.0", 1341 + "csstype": "^3.1.3", 1342 + "prop-types": "^15.8.1" 1343 + }, 1344 + "engines": { 1345 + "node": ">=14.0.0" 1346 + }, 1347 + "funding": { 1348 + "type": "opencollective", 1349 + "url": "https://opencollective.com/mui-org" 1350 + }, 1351 + "peerDependencies": { 1352 + "@emotion/react": "^11.4.1", 1353 + "@emotion/styled": "^11.3.0", 1354 + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" 1355 + }, 1356 + "peerDependenciesMeta": { 1357 + "@emotion/react": { 1358 + "optional": true 1359 + }, 1360 + "@emotion/styled": { 1361 + "optional": true 1362 + } 1363 + } 1364 + }, 1365 + "node_modules/@mui/system": { 1366 + "version": "7.1.0", 1367 + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.1.0.tgz", 1368 + "integrity": "sha512-iedAWgRJMCxeMHvkEhsDlbvkK+qKf9me6ofsf7twk/jfT4P1ImVf7Rwb5VubEA0sikrVL+1SkoZM41M4+LNAVA==", 1369 + "license": "MIT", 1370 + "dependencies": { 1371 + "@babel/runtime": "^7.27.1", 1372 + "@mui/private-theming": "^7.1.0", 1373 + "@mui/styled-engine": "^7.1.0", 1374 + "@mui/types": "^7.4.2", 1375 + "@mui/utils": "^7.1.0", 1376 + "clsx": "^2.1.1", 1377 + "csstype": "^3.1.3", 1378 + "prop-types": "^15.8.1" 1379 + }, 1380 + "engines": { 1381 + "node": ">=14.0.0" 1382 + }, 1383 + "funding": { 1384 + "type": "opencollective", 1385 + "url": "https://opencollective.com/mui-org" 1386 + }, 1387 + "peerDependencies": { 1388 + "@emotion/react": "^11.5.0", 1389 + "@emotion/styled": "^11.3.0", 1390 + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", 1391 + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" 1392 + }, 1393 + "peerDependenciesMeta": { 1394 + "@emotion/react": { 1395 + "optional": true 1396 + }, 1397 + "@emotion/styled": { 1398 + "optional": true 1399 + }, 1400 + "@types/react": { 1401 + "optional": true 1402 + } 1403 + } 1404 + }, 1405 + "node_modules/@mui/types": { 1406 + "version": "7.4.2", 1407 + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.2.tgz", 1408 + "integrity": "sha512-edRc5JcLPsrlNFYyTPxds+d5oUovuUxnnDtpJUbP6WMeV4+6eaX/mqai1ZIWT62lCOe0nlrON0s9HDiv5en5bA==", 1409 + "license": "MIT", 1410 + "dependencies": { 1411 + "@babel/runtime": "^7.27.1" 1412 + }, 1413 + "peerDependencies": { 1414 + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" 1415 + }, 1416 + "peerDependenciesMeta": { 1417 + "@types/react": { 1418 + "optional": true 1419 + } 1420 + } 1421 + }, 1422 + "node_modules/@mui/utils": { 1423 + "version": "7.1.0", 1424 + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.1.0.tgz", 1425 + "integrity": "sha512-/OM3S8kSHHmWNOP+NH9xEtpYSG10upXeQ0wLZnfDgmgadTAk5F4MQfFLyZ5FCRJENB3eRzltMmaNl6UtDnPovw==", 1426 + "license": "MIT", 1427 + "dependencies": { 1428 + "@babel/runtime": "^7.27.1", 1429 + "@mui/types": "^7.4.2", 1430 + "@types/prop-types": "^15.7.14", 1431 + "clsx": "^2.1.1", 1432 + "prop-types": "^15.8.1", 1433 + "react-is": "^19.1.0" 1434 + }, 1435 + "engines": { 1436 + "node": ">=14.0.0" 1437 + }, 1438 + "funding": { 1439 + "type": "opencollective", 1440 + "url": "https://opencollective.com/mui-org" 1441 + }, 1442 + "peerDependencies": { 1443 + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", 1444 + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" 1445 + }, 1446 + "peerDependenciesMeta": { 1447 + "@types/react": { 1448 + "optional": true 1449 + } 1450 + } 1451 + }, 1452 + "node_modules/@mui/x-charts": { 1453 + "version": "8.3.1", 1454 + "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-8.3.1.tgz", 1455 + "integrity": "sha512-jZClK40++ftcMwCeHKudGKmazd0MsgnrIP6RhYi2lH1kg0jK2upueokyxVIIxqquwWsQYE3WsflJBP61DvYXOQ==", 1456 + "license": "MIT", 1457 + "dependencies": { 1458 + "@babel/runtime": "^7.27.1", 1459 + "@mui/utils": "^7.0.2", 1460 + "@mui/x-charts-vendor": "8.3.1", 1461 + "@mui/x-internals": "8.3.1", 1462 + "bezier-easing": "^2.1.0", 1463 + "clsx": "^2.1.1", 1464 + "prop-types": "^15.8.1", 1465 + "reselect": "^5.1.1", 1466 + "use-sync-external-store": "^1.5.0" 1467 + }, 1468 + "engines": { 1469 + "node": ">=14.0.0" 1470 + }, 1471 + "peerDependencies": { 1472 + "@emotion/react": "^11.9.0", 1473 + "@emotion/styled": "^11.8.1", 1474 + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", 1475 + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", 1476 + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", 1477 + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" 1478 + }, 1479 + "peerDependenciesMeta": { 1480 + "@emotion/react": { 1481 + "optional": true 1482 + }, 1483 + "@emotion/styled": { 1484 + "optional": true 1485 + } 1486 + } 1487 + }, 1488 + "node_modules/@mui/x-charts-vendor": { 1489 + "version": "8.3.1", 1490 + "resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-8.3.1.tgz", 1491 + "integrity": "sha512-UcUa7HDIpSfeVBYgeHewWoVALcB4Gg9we53l78j2cyadYBZOWdtLj8fezo9zAhxfZ5s9T+1yIyuD+CCnYJnUpQ==", 1492 + "license": "MIT AND ISC", 1493 + "dependencies": { 1494 + "@babel/runtime": "^7.27.1", 1495 + "@types/d3-color": "^3.1.3", 1496 + "@types/d3-delaunay": "^6.0.4", 1497 + "@types/d3-interpolate": "^3.0.4", 1498 + "@types/d3-scale": "^4.0.9", 1499 + "@types/d3-shape": "^3.1.7", 1500 + "@types/d3-time": "^3.0.4", 1501 + "@types/d3-timer": "^3.0.2", 1502 + "d3-color": "^3.1.0", 1503 + "d3-delaunay": "^6.0.4", 1504 + "d3-interpolate": "^3.0.1", 1505 + "d3-scale": "^4.0.2", 1506 + "d3-shape": "^3.2.0", 1507 + "d3-time": "^3.1.0", 1508 + "d3-timer": "^3.0.1", 1509 + "delaunator": "^5.0.1", 1510 + "robust-predicates": "^3.0.2" 1511 + } 1512 + }, 1513 + "node_modules/@mui/x-internals": { 1514 + "version": "8.3.1", 1515 + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.3.1.tgz", 1516 + "integrity": "sha512-8kIxT66cea63iEseEIHSWzKju2Wzl7MsWFoAUQEyRvYqOFa2j9Un2Vn/EH2vy9nm/MtMAYpwOE/nt68/KTIA2w==", 1517 + "license": "MIT", 1518 + "dependencies": { 1519 + "@babel/runtime": "^7.27.1", 1520 + "@mui/utils": "^7.0.2" 1521 + }, 1522 + "engines": { 1523 + "node": ">=14.0.0" 1524 + }, 1525 + "funding": { 1526 + "type": "opencollective", 1527 + "url": "https://opencollective.com/mui-org" 1528 + }, 1529 + "peerDependencies": { 1530 + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" 1531 + } 1532 + }, 1095 1533 "node_modules/@nodelib/fs.scandir": { 1096 1534 "version": "2.1.5", 1097 1535 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", ··· 1128 1566 }, 1129 1567 "engines": { 1130 1568 "node": ">= 8" 1569 + } 1570 + }, 1571 + "node_modules/@popperjs/core": { 1572 + "version": "2.11.8", 1573 + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", 1574 + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", 1575 + "license": "MIT", 1576 + "funding": { 1577 + "type": "opencollective", 1578 + "url": "https://opencollective.com/popperjs" 1131 1579 } 1132 1580 }, 1133 1581 "node_modules/@rollup/rollup-android-arm-eabi": { ··· 1466 1914 "@babel/types": "^7.20.7" 1467 1915 } 1468 1916 }, 1917 + "node_modules/@types/d3-color": { 1918 + "version": "3.1.3", 1919 + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", 1920 + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", 1921 + "license": "MIT" 1922 + }, 1923 + "node_modules/@types/d3-delaunay": { 1924 + "version": "6.0.4", 1925 + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", 1926 + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", 1927 + "license": "MIT" 1928 + }, 1929 + "node_modules/@types/d3-interpolate": { 1930 + "version": "3.0.4", 1931 + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", 1932 + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", 1933 + "license": "MIT", 1934 + "dependencies": { 1935 + "@types/d3-color": "*" 1936 + } 1937 + }, 1938 + "node_modules/@types/d3-path": { 1939 + "version": "3.1.1", 1940 + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", 1941 + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", 1942 + "license": "MIT" 1943 + }, 1944 + "node_modules/@types/d3-scale": { 1945 + "version": "4.0.9", 1946 + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", 1947 + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", 1948 + "license": "MIT", 1949 + "dependencies": { 1950 + "@types/d3-time": "*" 1951 + } 1952 + }, 1953 + "node_modules/@types/d3-shape": { 1954 + "version": "3.1.7", 1955 + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", 1956 + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", 1957 + "license": "MIT", 1958 + "dependencies": { 1959 + "@types/d3-path": "*" 1960 + } 1961 + }, 1962 + "node_modules/@types/d3-time": { 1963 + "version": "3.0.4", 1964 + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", 1965 + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", 1966 + "license": "MIT" 1967 + }, 1968 + "node_modules/@types/d3-timer": { 1969 + "version": "3.0.2", 1970 + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", 1971 + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", 1972 + "license": "MIT" 1973 + }, 1469 1974 "node_modules/@types/estree": { 1470 1975 "version": "1.0.7", 1471 1976 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", ··· 1480 1985 "dev": true, 1481 1986 "license": "MIT" 1482 1987 }, 1988 + "node_modules/@types/parse-json": { 1989 + "version": "4.0.2", 1990 + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", 1991 + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", 1992 + "license": "MIT" 1993 + }, 1994 + "node_modules/@types/prop-types": { 1995 + "version": "15.7.14", 1996 + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", 1997 + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", 1998 + "license": "MIT" 1999 + }, 1483 2000 "node_modules/@types/react": { 1484 2001 "version": "19.1.4", 1485 2002 "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", 1486 2003 "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", 1487 - "dev": true, 1488 2004 "license": "MIT", 1489 2005 "dependencies": { 1490 2006 "csstype": "^3.0.2" ··· 1498 2014 "license": "MIT", 1499 2015 "peerDependencies": { 1500 2016 "@types/react": "^19.0.0" 2017 + } 2018 + }, 2019 + "node_modules/@types/react-transition-group": { 2020 + "version": "4.4.12", 2021 + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", 2022 + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", 2023 + "license": "MIT", 2024 + "peerDependencies": { 2025 + "@types/react": "*" 1501 2026 } 1502 2027 }, 1503 2028 "node_modules/@typescript-eslint/eslint-plugin": { ··· 1826 2351 "dev": true, 1827 2352 "license": "Python-2.0" 1828 2353 }, 2354 + "node_modules/babel-plugin-macros": { 2355 + "version": "3.1.0", 2356 + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", 2357 + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", 2358 + "license": "MIT", 2359 + "dependencies": { 2360 + "@babel/runtime": "^7.12.5", 2361 + "cosmiconfig": "^7.0.0", 2362 + "resolve": "^1.19.0" 2363 + }, 2364 + "engines": { 2365 + "node": ">=10", 2366 + "npm": ">=6" 2367 + } 2368 + }, 1829 2369 "node_modules/balanced-match": { 1830 2370 "version": "1.0.2", 1831 2371 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1832 2372 "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1833 2373 "dev": true, 2374 + "license": "MIT" 2375 + }, 2376 + "node_modules/bezier-easing": { 2377 + "version": "2.1.0", 2378 + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", 2379 + "integrity": "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==", 1834 2380 "license": "MIT" 1835 2381 }, 1836 2382 "node_modules/body-parser": { ··· 1956 2502 "version": "3.1.0", 1957 2503 "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1958 2504 "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1959 - "dev": true, 1960 2505 "license": "MIT", 1961 2506 "engines": { 1962 2507 "node": ">=6" ··· 2000 2545 "url": "https://github.com/chalk/chalk?sponsor=1" 2001 2546 } 2002 2547 }, 2548 + "node_modules/clsx": { 2549 + "version": "2.1.1", 2550 + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 2551 + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 2552 + "license": "MIT", 2553 + "engines": { 2554 + "node": ">=6" 2555 + } 2556 + }, 2003 2557 "node_modules/color-convert": { 2004 2558 "version": "2.0.1", 2005 2559 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", ··· 2091 2645 "node": ">= 0.10" 2092 2646 } 2093 2647 }, 2648 + "node_modules/cosmiconfig": { 2649 + "version": "7.1.0", 2650 + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", 2651 + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", 2652 + "license": "MIT", 2653 + "dependencies": { 2654 + "@types/parse-json": "^4.0.0", 2655 + "import-fresh": "^3.2.1", 2656 + "parse-json": "^5.0.0", 2657 + "path-type": "^4.0.0", 2658 + "yaml": "^1.10.0" 2659 + }, 2660 + "engines": { 2661 + "node": ">=10" 2662 + } 2663 + }, 2664 + "node_modules/cosmiconfig/node_modules/yaml": { 2665 + "version": "1.10.2", 2666 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 2667 + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 2668 + "license": "ISC", 2669 + "engines": { 2670 + "node": ">= 6" 2671 + } 2672 + }, 2094 2673 "node_modules/cross-spawn": { 2095 2674 "version": "7.0.6", 2096 2675 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", ··· 2110 2689 "version": "3.1.3", 2111 2690 "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 2112 2691 "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 2113 - "dev": true, 2114 2692 "license": "MIT" 2115 2693 }, 2694 + "node_modules/d3-array": { 2695 + "version": "3.2.4", 2696 + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", 2697 + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", 2698 + "license": "ISC", 2699 + "dependencies": { 2700 + "internmap": "1 - 2" 2701 + }, 2702 + "engines": { 2703 + "node": ">=12" 2704 + } 2705 + }, 2706 + "node_modules/d3-color": { 2707 + "version": "3.1.0", 2708 + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", 2709 + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", 2710 + "license": "ISC", 2711 + "engines": { 2712 + "node": ">=12" 2713 + } 2714 + }, 2715 + "node_modules/d3-delaunay": { 2716 + "version": "6.0.4", 2717 + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", 2718 + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", 2719 + "license": "ISC", 2720 + "dependencies": { 2721 + "delaunator": "5" 2722 + }, 2723 + "engines": { 2724 + "node": ">=12" 2725 + } 2726 + }, 2727 + "node_modules/d3-format": { 2728 + "version": "3.1.0", 2729 + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", 2730 + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", 2731 + "license": "ISC", 2732 + "engines": { 2733 + "node": ">=12" 2734 + } 2735 + }, 2736 + "node_modules/d3-interpolate": { 2737 + "version": "3.0.1", 2738 + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", 2739 + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", 2740 + "license": "ISC", 2741 + "dependencies": { 2742 + "d3-color": "1 - 3" 2743 + }, 2744 + "engines": { 2745 + "node": ">=12" 2746 + } 2747 + }, 2748 + "node_modules/d3-path": { 2749 + "version": "3.1.0", 2750 + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", 2751 + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", 2752 + "license": "ISC", 2753 + "engines": { 2754 + "node": ">=12" 2755 + } 2756 + }, 2757 + "node_modules/d3-scale": { 2758 + "version": "4.0.2", 2759 + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", 2760 + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", 2761 + "license": "ISC", 2762 + "dependencies": { 2763 + "d3-array": "2.10.0 - 3", 2764 + "d3-format": "1 - 3", 2765 + "d3-interpolate": "1.2.0 - 3", 2766 + "d3-time": "2.1.1 - 3", 2767 + "d3-time-format": "2 - 4" 2768 + }, 2769 + "engines": { 2770 + "node": ">=12" 2771 + } 2772 + }, 2773 + "node_modules/d3-shape": { 2774 + "version": "3.2.0", 2775 + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", 2776 + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", 2777 + "license": "ISC", 2778 + "dependencies": { 2779 + "d3-path": "^3.1.0" 2780 + }, 2781 + "engines": { 2782 + "node": ">=12" 2783 + } 2784 + }, 2785 + "node_modules/d3-time": { 2786 + "version": "3.1.0", 2787 + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", 2788 + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", 2789 + "license": "ISC", 2790 + "dependencies": { 2791 + "d3-array": "2 - 3" 2792 + }, 2793 + "engines": { 2794 + "node": ">=12" 2795 + } 2796 + }, 2797 + "node_modules/d3-time-format": { 2798 + "version": "4.1.0", 2799 + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", 2800 + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", 2801 + "license": "ISC", 2802 + "dependencies": { 2803 + "d3-time": "1 - 3" 2804 + }, 2805 + "engines": { 2806 + "node": ">=12" 2807 + } 2808 + }, 2809 + "node_modules/d3-timer": { 2810 + "version": "3.0.1", 2811 + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", 2812 + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", 2813 + "license": "ISC", 2814 + "engines": { 2815 + "node": ">=12" 2816 + } 2817 + }, 2116 2818 "node_modules/debug": { 2117 2819 "version": "4.4.1", 2118 2820 "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 2119 2821 "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 2120 - "dev": true, 2121 2822 "license": "MIT", 2122 2823 "dependencies": { 2123 2824 "ms": "^2.1.3" ··· 2138 2839 "dev": true, 2139 2840 "license": "MIT" 2140 2841 }, 2842 + "node_modules/delaunator": { 2843 + "version": "5.0.1", 2844 + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", 2845 + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", 2846 + "license": "ISC", 2847 + "dependencies": { 2848 + "robust-predicates": "^3.0.2" 2849 + } 2850 + }, 2141 2851 "node_modules/depd": { 2142 2852 "version": "2.0.0", 2143 2853 "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", ··· 2148 2858 "node": ">= 0.8" 2149 2859 } 2150 2860 }, 2861 + "node_modules/dom-helpers": { 2862 + "version": "5.2.1", 2863 + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", 2864 + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", 2865 + "license": "MIT", 2866 + "dependencies": { 2867 + "@babel/runtime": "^7.8.7", 2868 + "csstype": "^3.0.2" 2869 + } 2870 + }, 2151 2871 "node_modules/dunder-proto": { 2152 2872 "version": "1.0.1", 2153 2873 "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", ··· 2185 2905 "license": "MIT", 2186 2906 "engines": { 2187 2907 "node": ">= 0.8" 2908 + } 2909 + }, 2910 + "node_modules/error-ex": { 2911 + "version": "1.3.2", 2912 + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 2913 + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 2914 + "license": "MIT", 2915 + "dependencies": { 2916 + "is-arrayish": "^0.2.1" 2188 2917 } 2189 2918 }, 2190 2919 "node_modules/es-define-property": { ··· 2282 3011 "version": "4.0.0", 2283 3012 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2284 3013 "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2285 - "dev": true, 2286 3014 "license": "MIT", 2287 3015 "engines": { 2288 3016 "node": ">=10" ··· 2668 3396 "node": ">= 0.8" 2669 3397 } 2670 3398 }, 3399 + "node_modules/find-root": { 3400 + "version": "1.1.0", 3401 + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", 3402 + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", 3403 + "license": "MIT" 3404 + }, 2671 3405 "node_modules/find-up": { 2672 3406 "version": "5.0.0", 2673 3407 "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", ··· 2745 3479 "version": "1.1.2", 2746 3480 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2747 3481 "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2748 - "dev": true, 2749 3482 "license": "MIT", 2750 3483 "funding": { 2751 3484 "url": "https://github.com/sponsors/ljharb" ··· 2873 3606 "version": "2.0.2", 2874 3607 "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2875 3608 "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2876 - "dev": true, 2877 3609 "license": "MIT", 2878 3610 "dependencies": { 2879 3611 "function-bind": "^1.1.2" ··· 2882 3614 "node": ">= 0.4" 2883 3615 } 2884 3616 }, 3617 + "node_modules/hoist-non-react-statics": { 3618 + "version": "3.3.2", 3619 + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", 3620 + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", 3621 + "license": "BSD-3-Clause", 3622 + "dependencies": { 3623 + "react-is": "^16.7.0" 3624 + } 3625 + }, 3626 + "node_modules/hoist-non-react-statics/node_modules/react-is": { 3627 + "version": "16.13.1", 3628 + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 3629 + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", 3630 + "license": "MIT" 3631 + }, 2885 3632 "node_modules/http-errors": { 2886 3633 "version": "2.0.0", 2887 3634 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", ··· 2926 3673 "version": "3.3.1", 2927 3674 "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 2928 3675 "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 2929 - "dev": true, 2930 3676 "license": "MIT", 2931 3677 "dependencies": { 2932 3678 "parent-module": "^1.0.0", ··· 2956 3702 "dev": true, 2957 3703 "license": "ISC" 2958 3704 }, 3705 + "node_modules/internmap": { 3706 + "version": "2.0.3", 3707 + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", 3708 + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", 3709 + "license": "ISC", 3710 + "engines": { 3711 + "node": ">=12" 3712 + } 3713 + }, 2959 3714 "node_modules/ipaddr.js": { 2960 3715 "version": "1.9.1", 2961 3716 "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", ··· 2966 3721 "node": ">= 0.10" 2967 3722 } 2968 3723 }, 3724 + "node_modules/is-arrayish": { 3725 + "version": "0.2.1", 3726 + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 3727 + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 3728 + "license": "MIT" 3729 + }, 3730 + "node_modules/is-core-module": { 3731 + "version": "2.16.1", 3732 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 3733 + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 3734 + "license": "MIT", 3735 + "dependencies": { 3736 + "hasown": "^2.0.2" 3737 + }, 3738 + "engines": { 3739 + "node": ">= 0.4" 3740 + }, 3741 + "funding": { 3742 + "url": "https://github.com/sponsors/ljharb" 3743 + } 3744 + }, 2969 3745 "node_modules/is-extglob": { 2970 3746 "version": "2.1.1", 2971 3747 "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", ··· 3017 3793 "version": "4.0.0", 3018 3794 "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3019 3795 "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 3020 - "dev": true, 3021 3796 "license": "MIT" 3022 3797 }, 3023 3798 "node_modules/js-yaml": { ··· 3037 3812 "version": "3.1.0", 3038 3813 "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 3039 3814 "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 3040 - "dev": true, 3041 3815 "license": "MIT", 3042 3816 "bin": { 3043 3817 "jsesc": "bin/jsesc" ··· 3053 3827 "dev": true, 3054 3828 "license": "MIT" 3055 3829 }, 3830 + "node_modules/json-parse-even-better-errors": { 3831 + "version": "2.3.1", 3832 + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 3833 + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 3834 + "license": "MIT" 3835 + }, 3056 3836 "node_modules/json-schema-traverse": { 3057 3837 "version": "0.4.1", 3058 3838 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", ··· 3104 3884 "node": ">= 0.8.0" 3105 3885 } 3106 3886 }, 3887 + "node_modules/lines-and-columns": { 3888 + "version": "1.2.4", 3889 + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 3890 + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 3891 + "license": "MIT" 3892 + }, 3107 3893 "node_modules/locate-path": { 3108 3894 "version": "6.0.0", 3109 3895 "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", ··· 3127 3913 "dev": true, 3128 3914 "license": "MIT" 3129 3915 }, 3916 + "node_modules/loose-envify": { 3917 + "version": "1.4.0", 3918 + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 3919 + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 3920 + "license": "MIT", 3921 + "dependencies": { 3922 + "js-tokens": "^3.0.0 || ^4.0.0" 3923 + }, 3924 + "bin": { 3925 + "loose-envify": "cli.js" 3926 + } 3927 + }, 3130 3928 "node_modules/lru-cache": { 3131 3929 "version": "5.1.1", 3132 3930 "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", ··· 3234 4032 "version": "2.1.3", 3235 4033 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3236 4034 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3237 - "dev": true, 3238 4035 "license": "MIT" 3239 4036 }, 3240 4037 "node_modules/nanoevents": { ··· 3293 4090 "version": "4.1.1", 3294 4091 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 3295 4092 "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 3296 - "dev": true, 3297 4093 "license": "MIT", 3298 4094 "engines": { 3299 4095 "node": ">=0.10.0" ··· 3389 4185 "version": "1.0.1", 3390 4186 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3391 4187 "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3392 - "dev": true, 3393 4188 "license": "MIT", 3394 4189 "dependencies": { 3395 4190 "callsites": "^3.0.0" ··· 3398 4193 "node": ">=6" 3399 4194 } 3400 4195 }, 4196 + "node_modules/parse-json": { 4197 + "version": "5.2.0", 4198 + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 4199 + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 4200 + "license": "MIT", 4201 + "dependencies": { 4202 + "@babel/code-frame": "^7.0.0", 4203 + "error-ex": "^1.3.1", 4204 + "json-parse-even-better-errors": "^2.3.0", 4205 + "lines-and-columns": "^1.1.6" 4206 + }, 4207 + "engines": { 4208 + "node": ">=8" 4209 + }, 4210 + "funding": { 4211 + "url": "https://github.com/sponsors/sindresorhus" 4212 + } 4213 + }, 3401 4214 "node_modules/parseurl": { 3402 4215 "version": "1.3.3", 3403 4216 "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", ··· 3428 4241 "node": ">=8" 3429 4242 } 3430 4243 }, 4244 + "node_modules/path-parse": { 4245 + "version": "1.0.7", 4246 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 4247 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 4248 + "license": "MIT" 4249 + }, 3431 4250 "node_modules/path-to-regexp": { 3432 4251 "version": "8.2.0", 3433 4252 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", ··· 3438 4257 "node": ">=16" 3439 4258 } 3440 4259 }, 4260 + "node_modules/path-type": { 4261 + "version": "4.0.0", 4262 + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 4263 + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 4264 + "license": "MIT", 4265 + "engines": { 4266 + "node": ">=8" 4267 + } 4268 + }, 3441 4269 "node_modules/picocolors": { 3442 4270 "version": "1.1.1", 3443 4271 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 3444 4272 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 3445 - "dev": true, 3446 4273 "license": "ISC" 3447 4274 }, 3448 4275 "node_modules/picomatch": { ··· 3506 4333 "engines": { 3507 4334 "node": ">= 0.8.0" 3508 4335 } 4336 + }, 4337 + "node_modules/prop-types": { 4338 + "version": "15.8.1", 4339 + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 4340 + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 4341 + "license": "MIT", 4342 + "dependencies": { 4343 + "loose-envify": "^1.4.0", 4344 + "object-assign": "^4.1.1", 4345 + "react-is": "^16.13.1" 4346 + } 4347 + }, 4348 + "node_modules/prop-types/node_modules/react-is": { 4349 + "version": "16.13.1", 4350 + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 4351 + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", 4352 + "license": "MIT" 3509 4353 }, 3510 4354 "node_modules/proxy-addr": { 3511 4355 "version": "2.0.7", ··· 3615 4459 "react": "^19.1.0" 3616 4460 } 3617 4461 }, 4462 + "node_modules/react-is": { 4463 + "version": "19.1.0", 4464 + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", 4465 + "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==", 4466 + "license": "MIT" 4467 + }, 3618 4468 "node_modules/react-refresh": { 3619 4469 "version": "0.17.0", 3620 4470 "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", ··· 3625 4475 "node": ">=0.10.0" 3626 4476 } 3627 4477 }, 4478 + "node_modules/react-transition-group": { 4479 + "version": "4.4.5", 4480 + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", 4481 + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", 4482 + "license": "BSD-3-Clause", 4483 + "dependencies": { 4484 + "@babel/runtime": "^7.5.5", 4485 + "dom-helpers": "^5.0.1", 4486 + "loose-envify": "^1.4.0", 4487 + "prop-types": "^15.6.2" 4488 + }, 4489 + "peerDependencies": { 4490 + "react": ">=16.6.0", 4491 + "react-dom": ">=16.6.0" 4492 + } 4493 + }, 4494 + "node_modules/reselect": { 4495 + "version": "5.1.1", 4496 + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", 4497 + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", 4498 + "license": "MIT" 4499 + }, 4500 + "node_modules/resolve": { 4501 + "version": "1.22.10", 4502 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 4503 + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 4504 + "license": "MIT", 4505 + "dependencies": { 4506 + "is-core-module": "^2.16.0", 4507 + "path-parse": "^1.0.7", 4508 + "supports-preserve-symlinks-flag": "^1.0.0" 4509 + }, 4510 + "bin": { 4511 + "resolve": "bin/resolve" 4512 + }, 4513 + "engines": { 4514 + "node": ">= 0.4" 4515 + }, 4516 + "funding": { 4517 + "url": "https://github.com/sponsors/ljharb" 4518 + } 4519 + }, 3628 4520 "node_modules/resolve-from": { 3629 4521 "version": "4.0.0", 3630 4522 "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3631 4523 "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3632 - "dev": true, 3633 4524 "license": "MIT", 3634 4525 "engines": { 3635 4526 "node": ">=4" ··· 3645 4536 "iojs": ">=1.0.0", 3646 4537 "node": ">=0.10.0" 3647 4538 } 4539 + }, 4540 + "node_modules/robust-predicates": { 4541 + "version": "3.0.2", 4542 + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", 4543 + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", 4544 + "license": "Unlicense" 3648 4545 }, 3649 4546 "node_modules/rollup": { 3650 4547 "version": "4.40.2", ··· 3916 4813 "url": "https://github.com/sponsors/ljharb" 3917 4814 } 3918 4815 }, 4816 + "node_modules/source-map": { 4817 + "version": "0.5.7", 4818 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 4819 + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", 4820 + "license": "BSD-3-Clause", 4821 + "engines": { 4822 + "node": ">=0.10.0" 4823 + } 4824 + }, 3919 4825 "node_modules/source-map-js": { 3920 4826 "version": "1.2.1", 3921 4827 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", ··· 3949 4855 "url": "https://github.com/sponsors/sindresorhus" 3950 4856 } 3951 4857 }, 4858 + "node_modules/stylis": { 4859 + "version": "4.2.0", 4860 + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", 4861 + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", 4862 + "license": "MIT" 4863 + }, 3952 4864 "node_modules/supports-color": { 3953 4865 "version": "7.2.0", 3954 4866 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", ··· 3962 4874 "node": ">=8" 3963 4875 } 3964 4876 }, 4877 + "node_modules/supports-preserve-symlinks-flag": { 4878 + "version": "1.0.0", 4879 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 4880 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 4881 + "license": "MIT", 4882 + "engines": { 4883 + "node": ">= 0.4" 4884 + }, 4885 + "funding": { 4886 + "url": "https://github.com/sponsors/ljharb" 4887 + } 4888 + }, 3965 4889 "node_modules/tinyglobby": { 3966 4890 "version": "0.2.13", 3967 4891 "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", ··· 4159 5083 "punycode": "^2.1.0" 4160 5084 } 4161 5085 }, 5086 + "node_modules/use-sync-external-store": { 5087 + "version": "1.5.0", 5088 + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", 5089 + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", 5090 + "license": "MIT", 5091 + "peerDependencies": { 5092 + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 5093 + } 5094 + }, 4162 5095 "node_modules/vary": { 4163 5096 "version": "1.1.2", 4164 5097 "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", ··· 4311 5244 "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 4312 5245 "dev": true, 4313 5246 "license": "ISC" 5247 + }, 5248 + "node_modules/yaml": { 5249 + "version": "2.8.0", 5250 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", 5251 + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", 5252 + "dev": true, 5253 + "license": "ISC", 5254 + "optional": true, 5255 + "peer": true, 5256 + "bin": { 5257 + "yaml": "bin.mjs" 5258 + }, 5259 + "engines": { 5260 + "node": ">= 14.6" 5261 + } 4314 5262 }, 4315 5263 "node_modules/yocto-queue": { 4316 5264 "version": "0.1.0",
+4
package.json
··· 10 10 "preview": "vite preview" 11 11 }, 12 12 "dependencies": { 13 + "@emotion/react": "^11.14.0", 14 + "@emotion/styled": "^11.14.0", 15 + "@mui/material": "^7.1.0", 16 + "@mui/x-charts": "^8.3.1", 13 17 "@skyware/firehose": "^0.5.1", 14 18 "react": "^19.1.0", 15 19 "react-dom": "^19.1.0"
+2 -34
src/App.css
··· 4 4 text-align: center; 5 5 } 6 6 7 - .logo { 8 - height: 6em; 9 - padding: 1.5em; 10 - will-change: filter; 11 - transition: filter 300ms; 12 - } 13 - .logo:hover { 14 - filter: drop-shadow(0 0 2em #646cffaa); 15 - } 16 - .logo.react:hover { 17 - filter: drop-shadow(0 0 2em #61dafbaa); 18 - } 19 - 20 - @keyframes logo-spin { 21 - from { 22 - transform: rotate(0deg); 23 - } 24 - to { 25 - transform: rotate(360deg); 26 - } 27 - } 28 - 29 - @media (prefers-reduced-motion: no-preference) { 30 - a:nth-of-type(2) .logo { 31 - animation: logo-spin infinite 20s linear; 32 - } 33 - } 34 - 35 - .card { 36 - padding: 2em; 37 - } 38 - 39 - .read-the-docs { 40 - color: #888; 7 + h1 { 8 + color: #fcf8c9; 41 9 }
+70 -3
src/App.tsx
··· 1 - import { useState } from 'react' 1 + import { useEffect, useState } from 'react' 2 + import { BarChart } from '@mui/x-charts/BarChart'; 2 3 import './App.css' 4 + import '@mui/x-charts-vendor/d3-scale' 3 5 import Relay from './Relay' 4 6 import knownRelays from './knownRelays' 5 7 8 + const INTERVAL = 1600; 9 + const SERIES_LEN = 6; 10 + 6 11 function App() { 7 12 const [relays, setRelays] = useState([]); 13 + const [receiver, setReceiver] = useState(() => () => null); 14 + const [rateBars, setRateBars] = useState({ series: [] }); 15 + 16 + useEffect(() => { 17 + let lastChangeover = performance.now(); 18 + let currentCounts = {}; 19 + let series = []; 20 + 21 + setReceiver(() => (url, type, event) => { 22 + if (!currentCounts[url]) currentCounts[url] = 0; 23 + currentCounts[url] += 1; 24 + }); 25 + 26 + const nextBlock = setInterval(() => { 27 + let now = performance.now(); 28 + let dt = now - lastChangeover; 29 + if (series.length >= SERIES_LEN - 1) series.shift(); 30 + series.push({ 31 + t: now, 32 + dt, 33 + counts: currentCounts, 34 + }); 35 + lastChangeover = now; 36 + currentCounts = {}; 37 + }, INTERVAL); 38 + 39 + const update = () => { 40 + let now = performance.now(); 41 + let dt = (now - lastChangeover) / 1000; 42 + const relays = Object.keys(series.at(-1)?.counts || {}).toSorted(); 8 43 9 - const recieveEvent = () => null; 44 + setRateBars({ 45 + xAxis: [{ 46 + data: series.map(({ t }) => (-(now - t) / 1000).toFixed(1)) 47 + }], 48 + series: relays.map(r => ({ 49 + label: r, 50 + data: series.map(({ dt, counts }) => { 51 + if (!counts[r]) return null; 52 + return (counts[r] / (dt / 1000)).toFixed(1); 53 + }), 54 + })), 55 + }); 56 + 57 + raf = requestAnimationFrame(update); 58 + }; 59 + let raf = requestAnimationFrame(update); 60 + 61 + return () => { 62 + setReceiver(() => () => null); 63 + clearInterval(nextBlock); 64 + cancelAnimationFrame(raf); 65 + }; 66 + }, []); 10 67 11 68 return ( 12 69 <> ··· 36 93 const { desc } = knownRelays.find(e => e.url === url); 37 94 return ( 38 95 <div key={url}> 39 - <Relay url={url} desc={desc} onRecievedEvent={(type, event) => recieveEvent(url, type, event)} /> 96 + <Relay 97 + url={url} 98 + desc={desc} 99 + onRecieveEvent={(type, event) => receiver(url, type, event)} 100 + /> 40 101 </div> 41 102 ); 42 103 })} 104 + </div> 105 + <div className=".throughputs"> 106 + <BarChart 107 + height={300} 108 + {...rateBars} 109 + /> 43 110 </div> 44 111 </> 45 112 )
+3 -3
src/Relay.tsx
··· 4 4 5 5 type firehoseState = 'connecting' | 'connected' | 'errored' | 'closed'; 6 6 7 - function Relay({ url, desc, onRecievedEvent }) { 7 + function Relay({ url, desc, onRecieveEvent }) { 8 8 const [state, setState] = useState('connecting'); 9 9 const [commits, setCommits] = useState(0); 10 10 11 11 useEffect(() => { 12 12 const sendIt = (type, event) => { 13 - onRecievedEvent(type, event); 13 + onRecieveEvent(type, event); 14 14 setCommits(n => n + 1); 15 15 }; 16 16 const firehose = new Firehose({ relay: url }); 17 17 firehose.on('open', () => setState('connected')); 18 18 firehose.on('close', () => setState('closed')); 19 19 firehose.on('reconnect', (...args) => console.info('reconnect', ...args)); 20 - firehose.on('error', () => setState('errored')); 20 + firehose.on('error', e => console.error(e) || setState('errored')); 21 21 firehose.on('websocketError', () => setState('errored')); 22 22 firehose.on('commit', (ev) => sendIt('commit', ev)); 23 23 firehose.on('sync', (ev) => sendIt('sync', ev));
+1 -1
src/index.css
··· 5 5 6 6 color-scheme: light dark; 7 7 color: rgba(255, 255, 255, 0.87); 8 - background-color: #242424; 8 + background-color: #121212; 9 9 10 10 font-synthesis: none; 11 11 text-rendering: optimizeLegibility;
+15 -1
src/main.tsx
··· 1 1 import { createRoot } from 'react-dom/client' 2 + import { StyledEngineProvider } from '@mui/material/styles'; 3 + import { ThemeProvider, createTheme } from '@mui/material/styles'; 2 4 import './index.css' 3 5 import App from './App.tsx' 4 6 5 - createRoot(document.getElementById('root')!).render(<App />) 7 + const theme = createTheme({ 8 + colorSchemes: { 9 + dark: true, 10 + }, 11 + }); 12 + 13 + createRoot(document.getElementById('root')!).render( 14 + <StyledEngineProvider injectFirst> 15 + <ThemeProvider theme={theme}> 16 + <App /> 17 + </ThemeProvider> 18 + </StyledEngineProvider> 19 + )