diff --git a/package-lock.json b/package-lock.json
index f0081c6..53870a5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,7 @@
"name": "triggerfrontend",
"version": "1.2.0",
"dependencies": {
- "@gfazioli/mantine-text-animate": "^4.0.6",
+ "@gfazioli/mantine-text-animate": "^4.0.7",
"@hello-pangea/dnd": "^18.0.1",
"@mantine/core": "^9.4.1",
"@mantine/dates": "^9.4.1",
@@ -21,6 +21,7 @@
"@tanstack/react-table": "^8.21.3",
"idb-keyval": "^6.3.0",
"jotai": "^2.20.1",
+ "openmeteo": "^1.2.3",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-fontpicker-ts": "^1.3.0",
@@ -43,32 +44,30 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
- "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
+ "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.29.0"
+ "@babel/types": "^7.29.7"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -78,25 +77,21 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
- "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
- "license": "MIT",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
+ "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
- "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
+ "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
@@ -116,7 +111,6 @@
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
"integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==",
"dev": true,
- "license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/wasi-threads": "1.2.2",
@@ -128,7 +122,6 @@
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz",
"integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==",
"dev": true,
- "license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
@@ -139,39 +132,35 @@
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz",
"integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==",
"dev": true,
- "license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@floating-ui/core": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
- "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==",
- "license": "MIT",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz",
+ "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==",
"dependencies": {
- "@floating-ui/utils": "^0.2.11"
+ "@floating-ui/utils": "^0.2.12"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz",
- "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==",
- "license": "MIT",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz",
+ "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==",
"dependencies": {
- "@floating-ui/core": "^1.7.5",
- "@floating-ui/utils": "^0.2.11"
+ "@floating-ui/core": "^1.8.0",
+ "@floating-ui/utils": "^0.2.12"
}
},
"node_modules/@floating-ui/react": {
- "version": "0.27.19",
- "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.19.tgz",
- "integrity": "sha512-31B8h5mm8YxotlE7/AU/PhNAl8eWxAmjL/v2QOxroDNkTFLk3Uu82u63N3b6TXa4EGJeeZLVcd/9AlNlVqzeog==",
- "license": "MIT",
+ "version": "0.27.20",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.20.tgz",
+ "integrity": "sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==",
"dependencies": {
- "@floating-ui/react-dom": "^2.1.8",
- "@floating-ui/utils": "^0.2.11",
+ "@floating-ui/react-dom": "^2.1.9",
+ "@floating-ui/utils": "^0.2.12",
"tabbable": "^6.0.0"
},
"peerDependencies": {
@@ -180,12 +169,11 @@
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz",
- "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==",
- "license": "MIT",
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz",
+ "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==",
"dependencies": {
- "@floating-ui/dom": "^1.7.6"
+ "@floating-ui/dom": "^1.8.0"
},
"peerDependencies": {
"react": ">=16.8.0",
@@ -193,16 +181,14 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.11",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz",
- "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
- "license": "MIT"
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz",
+ "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww=="
},
"node_modules/@gfazioli/mantine-text-animate": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@gfazioli/mantine-text-animate/-/mantine-text-animate-4.0.6.tgz",
- "integrity": "sha512-tdoZc06dT1hwOjb1V0r9v0Bp7Q5RS/xdhyU70p2DPcJ3QL43a7dRmaGPfXemx+WpsD0/Zu+GiD4g1EnXs/Qwcg==",
- "license": "MIT",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@gfazioli/mantine-text-animate/-/mantine-text-animate-4.0.7.tgz",
+ "integrity": "sha512-vU8/T3J4T+ZvVgu162ORea7WsLH2y/uiIIgkmKTMbcu4viTe4orHIxecXVVZ4RsiNNlL1pIUC5uZRvBPWKJpZw==",
"peerDependencies": {
"@mantine/core": ">=9.0.0",
"@mantine/hooks": ">=9.0.0",
@@ -214,7 +200,6 @@
"version": "18.0.1",
"resolved": "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-18.0.1.tgz",
"integrity": "sha512-xojVWG8s/TGrKT1fC8K2tIWeejJYTAeJuj36zM//yEm/ZrnZUSFGS15BpO+jGZT1ybWvyXmeDJwPYb4dhWlbZQ==",
- "license": "Apache-2.0",
"dependencies": {
"@babel/runtime": "^7.26.7",
"css-box-model": "^1.2.1",
@@ -232,7 +217,6 @@
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0",
"@jridgewell/trace-mapping": "^0.3.24"
@@ -243,7 +227,6 @@
"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
@@ -262,8 +245,7 @@
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.31",
@@ -279,7 +261,6 @@
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/@mantine/core/-/core-9.4.1.tgz",
"integrity": "sha512-lZWEICrum4+vwKxzh/mk4RB1N6BqZ0Cshdl6lhm7OYLiQzmOaxKtOgyaWz+vr65G8mqTXjalZalB+wmMVBYK2Q==",
- "license": "MIT",
"dependencies": {
"@floating-ui/react": "^0.27.19",
"clsx": "^2.1.1",
@@ -297,7 +278,6 @@
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-9.4.1.tgz",
"integrity": "sha512-DoQDvQMAlIw6ohwhUwYuTYQevG9y5AQmYWkhOHUuavABFEZmtBglkwziBoATvxT09I/6I56UMPhproXcS6XUfg==",
- "license": "MIT",
"dependencies": {
"clsx": "^2.1.1"
},
@@ -313,7 +293,6 @@
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/@mantine/form/-/form-9.4.1.tgz",
"integrity": "sha512-e4tqC/D8ii7maPySWIWY306MNljPRprHPhu0/jaZrX7sRyJy+C8V9aU+ZFKYliM1CeiH1UX88+q4hWFUWVEdQw==",
- "license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.1.0",
"fast-deep-equal": "^3.1.3",
@@ -327,7 +306,6 @@
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-9.4.1.tgz",
"integrity": "sha512-eTI8wmzPx3r98zgKIEuvukmoGTHBhmtI6+9E6o2DbTmEU2eM1bCdjE2vFdf0op2AlRO0KEYEcZhNQi4T/SJk0A==",
- "license": "MIT",
"peerDependencies": {
"react": "^19.2.0"
}
@@ -336,7 +314,6 @@
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-9.4.1.tgz",
"integrity": "sha512-Sm1g8E8RkFmesxpNz9zFvOjkTVxOa7dJJjMGoHNIXH+9/wO0s9kInny4mVnxTbLJJsD6nTqIQlk1v8tq2C4Ftw==",
- "license": "MIT",
"dependencies": {
"@mantine/store": "9.4.1",
"react-transition-group": "4.4.5"
@@ -352,7 +329,6 @@
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/@mantine/store/-/store-9.4.1.tgz",
"integrity": "sha512-/DCZq0aqqIdm03J0RJ7pbzoau2cwY8ndSOjskHOKHhTeWMnOBdCKXA3oMO5aIDldDqJ9T7Io4Boh4Pt461zNQw==",
- "license": "MIT",
"peerDependencies": {
"react": "^19.2.0"
}
@@ -362,7 +338,6 @@
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
"integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
"dev": true,
- "license": "MIT",
"optional": true,
"dependencies": {
"@tybys/wasm-util": "^0.10.3"
@@ -376,12 +351,22 @@
"@emnapi/runtime": "^1.7.1"
}
},
+ "node_modules/@openmeteo/sdk": {
+ "version": "1.27.2",
+ "resolved": "https://registry.npmjs.org/@openmeteo/sdk/-/sdk-1.27.2.tgz",
+ "integrity": "sha512-aCDyWjDqdT6kf73chJJ//kWlqwh8fZgMwtU9sO14ElRn++Yte/MuX6rnPPhFK+1KSP78vx/aGBlwh9o6Mrs1Jg==",
+ "dependencies": {
+ "flatbuffers": "^25.9.23"
+ },
+ "engines": {
+ "node": ">=12.0"
+ }
+ },
"node_modules/@oxc-project/types": {
"version": "0.139.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz",
"integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==",
"dev": true,
- "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/Boshen"
}
@@ -390,18 +375,16 @@
"version": "1.0.0-next.29",
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
"integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@reduxjs/toolkit": {
- "version": "2.8.2",
- "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.8.2.tgz",
- "integrity": "sha512-MYlOhQ0sLdw4ud48FoC5w0dH9VfWQjtCjreKwYTT3l+r427qYC5Y8PihNutepr8XrNaBUDQo9khWUwQxZaqt5A==",
- "license": "MIT",
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.12.0.tgz",
+ "integrity": "sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
"@standard-schema/utils": "^0.3.0",
- "immer": "^10.0.3",
+ "immer": "^11.0.0",
"redux": "^5.0.1",
"redux-thunk": "^3.1.0",
"reselect": "^5.1.0"
@@ -427,7 +410,6 @@
"arm64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"android"
@@ -444,7 +426,6 @@
"arm64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -461,7 +442,6 @@
"x64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -478,7 +458,6 @@
"x64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"freebsd"
@@ -495,7 +474,6 @@
"arm"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -512,7 +490,6 @@
"arm64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -529,7 +506,6 @@
"arm64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -546,7 +522,6 @@
"ppc64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -563,7 +538,6 @@
"s390x"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -580,7 +554,6 @@
"x64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -597,7 +570,6 @@
"x64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"linux"
@@ -614,7 +586,6 @@
"arm64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"openharmony"
@@ -631,7 +602,6 @@
"wasm32"
],
"dev": true,
- "license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/core": "1.11.1",
@@ -650,7 +620,6 @@
"arm64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"win32"
@@ -667,7 +636,6 @@
"x64"
],
"dev": true,
- "license": "MIT",
"optional": true,
"os": [
"win32"
@@ -680,15 +648,13 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
"integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@rollup/pluginutils": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz",
"integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"estree-walker": "^2.0.2",
@@ -706,6 +672,12 @@
}
}
},
+ "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
"node_modules/@standard-schema/spec": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
@@ -714,14 +686,12 @@
"node_modules/@standard-schema/utils": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
- "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
- "license": "MIT"
+ "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="
},
"node_modules/@tanstack/query-core": {
"version": "5.101.2",
"resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.101.2.tgz",
"integrity": "sha512-hH5MLoJhF7KaIGd7q3xTXGXvslI+GYlM1Z/35aSHHWaCJWB7XvTSHYuV3eM7tw+aE0mT/xMro4M4Q9rCGHT0lw==",
- "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/tannerlinsley"
@@ -731,7 +701,6 @@
"version": "5.101.2",
"resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.101.2.tgz",
"integrity": "sha512-o+wHcqgN7Pp0s8v1i0UGq/ZrrEKrxdIiMQmKRdYb2w7NPtylYSJ4+wg/tIn71m9DLstwUwdEGAvROdly6HXP6w==",
- "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/tannerlinsley"
@@ -741,7 +710,6 @@
"version": "5.101.2",
"resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-5.101.2.tgz",
"integrity": "sha512-rgMsbvBVpSPDUsprC9FYxojdG0Q1LH6yq1i3DXz2aps4VEqv2l4Msj3YDqIifU3xkl/DrYe9YWntZAJLrM6xTg==",
- "license": "MIT",
"dependencies": {
"@tanstack/query-core": "5.101.2"
},
@@ -754,7 +722,6 @@
"version": "5.101.2",
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.101.2.tgz",
"integrity": "sha512-seDkr6kzGzX1okaaTtZPtgA688CDPlXUz1C6xSg0ESqn04Vuc8tlrYms1s3de+znBqhPVxFRfpAfUf+6XvfPWg==",
- "license": "MIT",
"dependencies": {
"@tanstack/query-core": "5.101.2"
},
@@ -770,7 +737,6 @@
"version": "5.101.2",
"resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.101.2.tgz",
"integrity": "sha512-eU7HctdA9gDjqoERoEdzLbw9DiqnBDfh5+Hu0u26gjqoHJezOpQAuiesDL2VvkU+2cPV76zgv0tMZsOrI4LjnQ==",
- "license": "MIT",
"dependencies": {
"@tanstack/query-devtools": "5.101.2"
},
@@ -787,7 +753,6 @@
"version": "5.101.2",
"resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.101.2.tgz",
"integrity": "sha512-19UpaRtf0lvB2QAJ2MoixxtGf3osMOd508g99EsttUj4+3eLs+ulnNgYjB7AkQMHrRlcbVXqpVNqWkB4a7g8Zw==",
- "license": "MIT",
"dependencies": {
"@tanstack/query-persist-client-core": "5.101.2"
},
@@ -804,7 +769,6 @@
"version": "8.21.3",
"resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz",
"integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==",
- "license": "MIT",
"dependencies": {
"@tanstack/table-core": "8.21.3"
},
@@ -824,7 +788,6 @@
"version": "8.21.3",
"resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz",
"integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==",
- "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -838,7 +801,6 @@
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
"integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
"dev": true,
- "license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
@@ -849,35 +811,30 @@
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
"integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@types/deep-eql": "*",
"assertion-error": "^2.0.1"
}
},
"node_modules/@types/d3-array": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
- "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==",
- "license": "MIT"
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+ "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="
},
"node_modules/@types/d3-color": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
- "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
- "license": "MIT"
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
},
"node_modules/@types/d3-ease": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
- "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
- "license": "MIT"
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
},
"node_modules/@types/d3-interpolate": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
"integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
- "license": "MIT",
"dependencies": {
"@types/d3-color": "*"
}
@@ -885,23 +842,20 @@
"node_modules/@types/d3-path": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
- "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
- "license": "MIT"
+ "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="
},
"node_modules/@types/d3-scale": {
"version": "4.0.9",
"resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
"integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
- "license": "MIT",
"dependencies": {
"@types/d3-time": "*"
}
},
"node_modules/@types/d3-shape": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
- "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
- "license": "MIT",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz",
+ "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
"dependencies": {
"@types/d3-path": "*"
}
@@ -909,35 +863,30 @@
"node_modules/@types/d3-time": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
- "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
- "license": "MIT"
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="
},
"node_modules/@types/d3-timer": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
- "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
- "license": "MIT"
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
},
"node_modules/@types/deep-eql": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
"integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+ "dev": true
},
"node_modules/@types/node": {
"version": "26.1.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz",
"integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"undici-types": "~8.3.0"
}
@@ -947,7 +896,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz",
"integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==",
"devOptional": true,
- "license": "MIT",
"dependencies": {
"csstype": "^3.2.2"
}
@@ -957,7 +905,6 @@
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
"dev": true,
- "license": "MIT",
"peerDependencies": {
"@types/react": "^19.2.0"
}
@@ -965,8 +912,7 @@
"node_modules/@types/use-sync-external-store": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
- "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
- "license": "MIT"
+ "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="
},
"node_modules/@typescript/typescript-aix-ppc64": {
"version": "7.0.2",
@@ -976,7 +922,6 @@
"ppc64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"aix"
@@ -993,7 +938,6 @@
"arm64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
@@ -1010,7 +954,6 @@
"x64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"darwin"
@@ -1027,7 +970,6 @@
"arm64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"freebsd"
@@ -1044,7 +986,6 @@
"x64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"freebsd"
@@ -1061,7 +1002,6 @@
"arm"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1078,7 +1018,6 @@
"arm64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1095,7 +1034,6 @@
"loong64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1112,7 +1050,6 @@
"mips64el"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1129,7 +1066,6 @@
"ppc64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1146,7 +1082,6 @@
"riscv64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1163,7 +1098,6 @@
"s390x"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1180,7 +1114,6 @@
"x64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
@@ -1197,7 +1130,6 @@
"arm64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"netbsd"
@@ -1214,7 +1146,6 @@
"x64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"netbsd"
@@ -1231,7 +1162,6 @@
"arm64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"openbsd"
@@ -1248,7 +1178,6 @@
"x64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"openbsd"
@@ -1265,7 +1194,6 @@
"x64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"sunos"
@@ -1282,7 +1210,6 @@
"arm64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"win32"
@@ -1299,7 +1226,6 @@
"x64"
],
"dev": true,
- "license": "Apache-2.0",
"optional": true,
"os": [
"win32"
@@ -1313,7 +1239,6 @@
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.3.tgz",
"integrity": "sha512-vmFvco5/QuC2f9Oj+wTk0+9XeDFkHxSamwZKYc7MxYwKICfvUvlMhqKI0VuICPltGqh1neqBKDvO4kes1ya8vg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@rolldown/pluginutils": "^1.0.1"
},
@@ -1339,7 +1264,6 @@
"resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.10.tgz",
"integrity": "sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@bcoe/v8-coverage": "^1.0.2",
"@vitest/utils": "4.1.10",
@@ -1370,7 +1294,6 @@
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz",
"integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.1.0",
"@types/chai": "^5.2.2",
@@ -1388,7 +1311,6 @@
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz",
"integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@vitest/spy": "4.1.10",
"estree-walker": "^3.0.3",
@@ -1410,22 +1332,11 @@
}
}
},
- "node_modules/@vitest/mocker/node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
"node_modules/@vitest/pretty-format": {
"version": "4.1.10",
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz",
"integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==",
"dev": true,
- "license": "MIT",
"dependencies": {
"tinyrainbow": "^3.1.0"
},
@@ -1438,7 +1349,6 @@
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz",
"integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@vitest/utils": "4.1.10",
"pathe": "^2.0.3"
@@ -1452,7 +1362,6 @@
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz",
"integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@vitest/pretty-format": "4.1.10",
"@vitest/utils": "4.1.10",
@@ -1468,7 +1377,6 @@
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz",
"integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==",
"dev": true,
- "license": "MIT",
"funding": {
"url": "https://opencollective.com/vitest"
}
@@ -1478,7 +1386,6 @@
"resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.10.tgz",
"integrity": "sha512-EOUqfXHTXtpSHsyLHH40ts3Ue+hRhSGwzwzMlK0dTEOLSDYyOXLyr5JDGmHQWhN2DYI30gw6dVx3cdgM9FZl+Q==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@vitest/utils": "4.1.10",
"fflate": "^0.8.2",
@@ -1500,7 +1407,6 @@
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz",
"integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@vitest/pretty-format": "4.1.10",
"convert-source-map": "^2.0.0",
@@ -1515,7 +1421,6 @@
"resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz",
"integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@volar/source-map": "2.4.28"
}
@@ -1524,15 +1429,13 @@
"version": "2.4.28",
"resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz",
"integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/@volar/typescript": {
"version": "2.4.28",
"resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz",
"integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@volar/language-core": "2.4.28",
"path-browserify": "^1.0.1",
@@ -1544,7 +1447,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
"integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==",
"dev": true,
- "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -1557,15 +1459,14 @@
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
"integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=12"
}
},
"node_modules/ast-v8-to-istanbul": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.0.tgz",
- "integrity": "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.4.tgz",
+ "integrity": "sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.31",
@@ -1573,27 +1474,11 @@
"js-tokens": "^10.0.0"
}
},
- "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
- "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz",
- "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==",
- "dev": true
- },
"node_modules/chai": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
"integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
}
@@ -1610,28 +1495,24 @@
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz",
"integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/confbox": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz",
"integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/convert-source-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/cookie": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
"integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
- "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -1644,7 +1525,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz",
"integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==",
- "license": "MIT",
"dependencies": {
"tiny-invariant": "^1.0.6"
}
@@ -1658,7 +1538,6 @@
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
"integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
- "license": "ISC",
"dependencies": {
"internmap": "1 - 2"
},
@@ -1670,7 +1549,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
"integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
- "license": "ISC",
"engines": {
"node": ">=12"
}
@@ -1679,16 +1557,14 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
"integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
- "license": "BSD-3-Clause",
"engines": {
"node": ">=12"
}
},
"node_modules/d3-format": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
- "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
- "license": "ISC",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
+ "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
"engines": {
"node": ">=12"
}
@@ -1697,7 +1573,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
"integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
- "license": "ISC",
"dependencies": {
"d3-color": "1 - 3"
},
@@ -1709,7 +1584,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
"integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
- "license": "ISC",
"engines": {
"node": ">=12"
}
@@ -1718,7 +1592,6 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
"integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
- "license": "ISC",
"dependencies": {
"d3-array": "2.10.0 - 3",
"d3-format": "1 - 3",
@@ -1734,7 +1607,6 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
"integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
- "license": "ISC",
"dependencies": {
"d3-path": "^3.1.0"
},
@@ -1746,7 +1618,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
"integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
- "license": "ISC",
"dependencies": {
"d3-array": "2 - 3"
},
@@ -1758,7 +1629,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
"integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
- "license": "ISC",
"dependencies": {
"d3-time": "1 - 3"
},
@@ -1770,15 +1640,14 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
"integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
- "license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/dayjs": {
- "version": "1.11.20",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz",
- "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==",
+ "version": "1.11.21",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz",
+ "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==",
"peer": true
},
"node_modules/debug": {
@@ -1786,7 +1655,6 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
@@ -1802,8 +1670,7 @@
"node_modules/decimal.js-light": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
- "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
- "license": "MIT"
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
},
"node_modules/detect-libc": {
"version": "2.1.2",
@@ -1817,8 +1684,7 @@
"node_modules/detect-node-es": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
- "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
- "license": "MIT"
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
},
"node_modules/dom-helpers": {
"version": "5.2.1",
@@ -1830,41 +1696,35 @@
}
},
"node_modules/es-module-lexer": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.0.tgz",
- "integrity": "sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==",
- "dev": true,
- "license": "MIT"
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz",
+ "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==",
+ "dev": true
},
"node_modules/es-toolkit": {
- "version": "1.39.5",
- "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.39.5.tgz",
- "integrity": "sha512-z9V0qU4lx1TBXDNFWfAASWk6RNU6c6+TJBKE+FLIg8u0XJ6Yw58Hi0yX8ftEouj6p1QARRlXLFfHbIli93BdQQ==",
- "license": "MIT",
- "workspaces": [
- "docs",
- "benchmarks"
- ]
+ "version": "1.49.0",
+ "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.49.0.tgz",
+ "integrity": "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g=="
},
"node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
"dev": true,
- "license": "MIT"
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
},
"node_modules/eventemitter3": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
- "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
- "license": "MIT"
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
+ "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="
},
"node_modules/expect-type": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
"integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
"dev": true,
- "license": "Apache-2.0",
"engines": {
"node": ">=12.0.0"
}
@@ -1873,8 +1733,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.1.0.tgz",
"integrity": "sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
@@ -1886,7 +1745,6 @@
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=12.0.0"
},
@@ -1903,15 +1761,18 @@
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
"integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==",
- "dev": true,
- "license": "MIT"
+ "dev": true
+ },
+ "node_modules/flatbuffers": {
+ "version": "25.9.23",
+ "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-25.9.23.tgz",
+ "integrity": "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ=="
},
"node_modules/flatted": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
"integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
- "dev": true,
- "license": "ISC"
+ "dev": true
},
"node_modules/fsevents": {
"version": "2.3.3",
@@ -1931,7 +1792,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
"integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
- "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -1955,20 +1815,17 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/idb-keyval": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.3.0.tgz",
- "integrity": "sha512-um+2dgAWmYsu615EXpWVwSmapJhON0G43t3Ka/EVaohzPQXSMqKEqeDK/oIW3Ow+BXaF2PvSc+oBTFp793A5Ow==",
- "license": "Apache-2.0"
+ "integrity": "sha512-um+2dgAWmYsu615EXpWVwSmapJhON0G43t3Ka/EVaohzPQXSMqKEqeDK/oIW3Ow+BXaF2PvSc+oBTFp793A5Ow=="
},
"node_modules/immer": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz",
- "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==",
- "license": "MIT",
+ "version": "11.1.11",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.11.tgz",
+ "integrity": "sha512-qzXuyXAkPySAGYkfsAwodDPWT8Zm7/Uo5BNt4BjhMhG5WlWyZZ4wQqnWwdS8kjlQ1Cwu6gjw3A6+0gTQwlyYtw==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/immer"
@@ -1978,7 +1835,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
"integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
- "license": "ISC",
"engines": {
"node": ">=12"
}
@@ -1997,7 +1853,6 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
"integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
- "license": "BSD-3-Clause",
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^4.0.0",
@@ -2007,25 +1862,11 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-report/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/istanbul-reports": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
"integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
- "license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
@@ -2038,7 +1879,6 @@
"version": "2.20.1",
"resolved": "https://registry.npmjs.org/jotai/-/jotai-2.20.1.tgz",
"integrity": "sha512-dnuKfU/GLi8B28RRMjQ3AfoN7kfzP8o41+AX2FmITZqEMY8PHnjABq+VkEooomLwYaGjda+pgy0yFSjaHX/ZPg==",
- "license": "MIT",
"engines": {
"node": ">=12.20.0"
},
@@ -2064,15 +1904,15 @@
}
},
"node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz",
+ "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==",
+ "dev": true
},
"node_modules/klona": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
- "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -2081,8 +1921,7 @@
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
"integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/lightningcss": {
"version": "1.32.0",
@@ -2338,7 +2177,6 @@
"resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.2.1.tgz",
"integrity": "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==",
"dev": true,
- "license": "MIT",
"dependencies": {
"mlly": "^1.7.4",
"pkg-types": "^2.3.0",
@@ -2362,23 +2200,27 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/loose-envify/node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
"node_modules/magic-string": {
"version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
"node_modules/magicast": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz",
- "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==",
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz",
+ "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==",
"dev": true,
"dependencies": {
- "@babel/parser": "^7.29.0",
+ "@babel/parser": "^7.29.3",
"@babel/types": "^7.29.0",
"source-map-js": "^1.2.1"
}
@@ -2388,7 +2230,6 @@
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
"integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"semver": "^7.5.3"
},
@@ -2404,7 +2245,6 @@
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz",
"integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"acorn": "^8.16.0",
"pathe": "^2.0.3",
@@ -2416,15 +2256,13 @@
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
"integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/mlly/node_modules/pkg-types": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
"integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"confbox": "^0.1.8",
"mlly": "^1.7.4",
@@ -2436,7 +2274,6 @@
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
"integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=10"
}
@@ -2448,9 +2285,9 @@
"dev": true
},
"node_modules/nanoid": {
- "version": "3.3.15",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz",
- "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==",
+ "version": "3.3.16",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz",
+ "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
"dev": true,
"funding": [
{
@@ -2458,7 +2295,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -2483,17 +2319,27 @@
"https://github.com/sponsors/sxzz",
"https://opencollective.com/debug"
],
- "license": "MIT",
"engines": {
"node": ">=12.20.0"
}
},
+ "node_modules/openmeteo": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/openmeteo/-/openmeteo-1.2.3.tgz",
+ "integrity": "sha512-3updmgCMnCAAjAgV3RfhMdIBPi/43RtbjQ4CizHGn52RP9SpgmVCDRpun+Ex75NG3jTF3pZp+d1BPlP9DWMHiQ==",
+ "dependencies": {
+ "@openmeteo/sdk": "^1.23.0",
+ "flatbuffers": "^25.9.23"
+ },
+ "engines": {
+ "node": ">=12.0"
+ }
+ },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/pathe": {
"version": "2.0.3",
@@ -2505,15 +2351,13 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
+ "dev": true
},
"node_modules/picomatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
"integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -2526,7 +2370,6 @@
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz",
"integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"confbox": "^0.2.4",
"exsolve": "^1.0.8",
@@ -2534,9 +2377,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.16",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz",
- "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==",
+ "version": "8.5.19",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.19.tgz",
+ "integrity": "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==",
"dev": true,
"funding": [
{
@@ -2552,7 +2395,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "license": "MIT",
"dependencies": {
"nanoid": "^3.3.12",
"picocolors": "^1.1.1",
@@ -2572,6 +2414,11 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
"node_modules/quansync": {
"version": "0.2.11",
"resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz",
@@ -2586,20 +2433,17 @@
"type": "individual",
"url": "https://github.com/sponsors/sxzz"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/raf-schd": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz",
- "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==",
- "license": "MIT"
+ "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ=="
},
"node_modules/react": {
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz",
"integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==",
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2608,7 +2452,6 @@
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz",
"integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==",
- "license": "MIT",
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -2628,31 +2471,29 @@
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.7.0.tgz",
"integrity": "sha512-LBLy340Rzqy6+/yVhZKT3B/QpP1BZaesGqasf09HPOBzRarcDIFH0WwXlXQfE7q7ipxK4MSiC5DIBWURCny6fw==",
- "license": "MIT",
"peerDependencies": {
"react": "*"
}
},
"node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ "version": "19.2.7",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz",
+ "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==",
+ "peer": true
},
"node_modules/react-number-format": {
"version": "5.4.5",
"resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.5.tgz",
"integrity": "sha512-y8O2yHHj3w0aE9XO8d2BCcUOOdQTRSVq+WIuMlLVucAm5XNjJAy+BoOJiuQMldVYVOKTMyvVNfnbl2Oqp+YxGw==",
- "license": "MIT",
"peerDependencies": {
"react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
"node_modules/react-redux": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
- "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
- "license": "MIT",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.3.0.tgz",
+ "integrity": "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==",
"dependencies": {
"@types/use-sync-external-store": "^0.0.6",
"use-sync-external-store": "^1.4.0"
@@ -2675,7 +2516,6 @@
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz",
"integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==",
- "license": "MIT",
"dependencies": {
"react-remove-scroll-bar": "^2.3.7",
"react-style-singleton": "^2.2.3",
@@ -2700,7 +2540,6 @@
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
"integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
- "license": "MIT",
"dependencies": {
"react-style-singleton": "^2.2.2",
"tslib": "^2.0.0"
@@ -2722,7 +2561,6 @@
"version": "7.18.1",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.1.tgz",
"integrity": "sha512-GDLgg3i3uM0aeJO3Fm+TCS+sDQ7gu12T6x0qdTEzcwqEfleci7JwugVNIF3U//0FWKnJT7ptG+20B2jfDqnZAg==",
- "license": "MIT",
"dependencies": {
"cookie": "^1.0.1",
"set-cookie-parser": "^2.6.0"
@@ -2744,7 +2582,6 @@
"version": "7.18.1",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.1.tgz",
"integrity": "sha512-KaZh+X/6UtEp28x51AUYZDMg9NGoz2ja3dNHa+ta/tk40vCzKhQ/RypCWBMLbmDr6//E24Vv5uPsrqXFozdkAg==",
- "license": "MIT",
"dependencies": {
"react-router": "7.18.1"
},
@@ -2760,7 +2597,6 @@
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
"integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
- "license": "MIT",
"dependencies": {
"get-nonce": "^1.0.0",
"tslib": "^2.0.0"
@@ -2797,10 +2633,6 @@
"version": "3.9.2",
"resolved": "https://registry.npmjs.org/recharts/-/recharts-3.9.2.tgz",
"integrity": "sha512-G4fy+Pk46RaXgwWMh+Nzhyo/lbFAVqXo9gtetlyehe6Ehge9CsgDuOTwQDD+i1+llaLktNBiNq4bhnGlDRXFtw==",
- "license": "MIT",
- "workspaces": [
- "www"
- ],
"dependencies": {
"@reduxjs/toolkit": "^1.9.0 || 2.x.x",
"clsx": "^2.1.1",
@@ -2823,48 +2655,29 @@
"react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/recharts/node_modules/immer": {
- "version": "11.1.11",
- "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.11.tgz",
- "integrity": "sha512-qzXuyXAkPySAGYkfsAwodDPWT8Zm7/Uo5BNt4BjhMhG5WlWyZZ4wQqnWwdS8kjlQ1Cwu6gjw3A6+0gTQwlyYtw==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/immer"
- }
- },
"node_modules/redux": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
- "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
- "license": "MIT"
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="
},
"node_modules/redux-thunk": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
"integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
- "license": "MIT",
"peerDependencies": {
"redux": "^5.0.0"
}
},
- "node_modules/regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
"node_modules/reselect": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/reselect/-/reselect-5.2.0.tgz",
- "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==",
- "license": "MIT"
+ "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw=="
},
"node_modules/rolldown": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz",
"integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@oxc-project/types": "=0.139.0",
"@rolldown/pluginutils": "^1.0.0"
@@ -2896,15 +2709,13 @@
"node_modules/scheduler": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
- "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
- "license": "MIT"
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="
},
"node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
"dev": true,
- "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -2915,22 +2726,19 @@
"node_modules/set-cookie-parser": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
- "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
- "license": "MIT"
+ "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="
},
"node_modules/siginfo": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
"integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
- "dev": true,
- "license": "ISC"
+ "dev": true
},
"node_modules/sirv": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
"integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@polka/url": "^1.0.0-next.24",
"mrmime": "^2.0.0",
@@ -2953,27 +2761,35 @@
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
"integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/std-env": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz",
"integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==",
+ "dev": true
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "license": "MIT"
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/tabbable": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz",
- "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==",
- "license": "MIT"
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz",
+ "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA=="
},
"node_modules/tagged-tag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz",
"integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==",
- "license": "MIT",
"engines": {
"node": ">=20"
},
@@ -2990,15 +2806,13 @@
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
"integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/tinyexec": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz",
"integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=18"
}
@@ -3008,7 +2822,6 @@
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
"integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"fdir": "^6.5.0",
"picomatch": "^4.0.4"
@@ -3025,7 +2838,6 @@
"resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz",
"integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=14.0.0"
}
@@ -3035,7 +2847,6 @@
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
"integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -3043,14 +2854,12 @@
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD"
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
},
"node_modules/type-fest": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz",
"integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==",
- "license": "(MIT OR CC0-1.0)",
"dependencies": {
"tagged-tag": "^1.0.0"
},
@@ -3066,7 +2875,6 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz",
"integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
"dev": true,
- "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc"
},
@@ -3100,22 +2908,19 @@
"version": "1.6.4",
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz",
"integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/undici-types": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
"integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/unplugin": {
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz",
"integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@jridgewell/remapping": "^2.3.5",
"acorn": "^8.15.0",
@@ -3131,7 +2936,6 @@
"resolved": "https://registry.npmjs.org/unplugin-dts/-/unplugin-dts-1.0.3.tgz",
"integrity": "sha512-/GR887wfG4r1cWyt1UZsLRuMIjsmEbGkS9yJrz+0dsToHAYUD5CTyP3JMGVLv25j9K0mJcwAVvZno/aTuSUvNg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.1.4",
"@volar/typescript": "^2.4.26",
@@ -3184,7 +2988,6 @@
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
"integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
- "license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -3205,7 +3008,6 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
"integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
- "license": "MIT",
"dependencies": {
"detect-node-es": "^1.1.0",
"tslib": "^2.0.0"
@@ -3224,10 +3026,9 @@
}
},
"node_modules/use-sync-external-store": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz",
- "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==",
- "license": "MIT",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
@@ -3236,7 +3037,6 @@
"version": "37.3.6",
"resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
"integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
- "license": "MIT AND ISC",
"dependencies": {
"@types/d3-array": "^3.0.3",
"@types/d3-ease": "^3.0.0",
@@ -3259,7 +3059,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-8.1.4.tgz",
"integrity": "sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"lightningcss": "^1.32.0",
"picomatch": "^4.0.5",
@@ -3337,7 +3136,6 @@
"resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-5.0.3.tgz",
"integrity": "sha512-gIth6NdCEHWPiiRMCK3N6C8WjvdsrtEQrmsiG8h6Ov+lFP+b07Y+wcs9H0H7n146l0PDTYK4cQN1vgeG1pMdRQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"unplugin-dts": "1.0.3"
},
@@ -3376,8 +3174,8 @@
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
"integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
+ "deprecated": "unmaintained",
"dev": true,
- "license": "MIT",
"bin": {
"tsconfck": "bin/tsconfck.js"
},
@@ -3413,7 +3211,6 @@
"resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz",
"integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@vitest/expect": "4.1.10",
"@vitest/mocker": "4.1.10",
@@ -3502,22 +3299,19 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
"integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/webpack-virtual-modules": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
"integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
- "dev": true,
- "license": "MIT"
+ "dev": true
},
"node_modules/why-is-node-running": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
"integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
"dev": true,
- "license": "MIT",
"dependencies": {
"siginfo": "^2.0.0",
"stackback": "0.0.2"
diff --git a/package.json b/package.json
index 3fc34c4..e8da8d7 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
"preview": "vite preview"
},
"dependencies": {
- "@gfazioli/mantine-text-animate": "^4.0.6",
+ "@gfazioli/mantine-text-animate": "^4.0.7",
"@hello-pangea/dnd": "^18.0.1",
"@mantine/core": "^9.4.1",
"@mantine/dates": "^9.4.1",
@@ -23,6 +23,7 @@
"@tanstack/react-table": "^8.21.3",
"idb-keyval": "^6.3.0",
"jotai": "^2.20.1",
+ "openmeteo": "^1.2.3",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-fontpicker-ts": "^1.3.0",
diff --git a/src/components/WeatherModal/CurrentWeather.tsx b/src/components/WeatherModal/CurrentWeather.tsx
index 38b9c78..08656c6 100644
--- a/src/components/WeatherModal/CurrentWeather.tsx
+++ b/src/components/WeatherModal/CurrentWeather.tsx
@@ -1,27 +1,63 @@
import { Box, Card, Group, Stack, Text } from '@mantine/core';
-import { useCommonHooks, useSunStateAPI } from 'hooks';
+import { useCommonHooks } from 'hooks';
import { FaLongArrowAltDown, FaLongArrowAltUp, FaWind } from 'react-icons/fa';
import { WiBarometer, WiHumidity, WiSunrise, WiSunset } from 'react-icons/wi';
import { textClasses } from 'styles';
-import type { CurrentWeather as CW, SunState } from 'types';
+import type { MeteoWeather } from 'types';
import WeatherFeaturePill from './WeatherFeaturePill';
import WeatherIcon from './WeatherIcon';
-export default function CurrentWeather({ current }: { current: CW }) {
- const { currentLocation, isMobile, theme, textShadowStyle } = useCommonHooks();
- const { data: sunStateData } = useSunStateAPI({
- lat: currentLocation.lat,
- lon: currentLocation.lon,
- });
+const WeatherCodes: { [key: number]: string } = {
+ 0: 'Clear sky',
- const sunStates: SunState[] =
- sunStateData?.results.map((item: SunState) => {
- return {
- date: item.date,
- sunrise: item.sunrise,
- sunset: item.sunset,
- };
- }) || [];
+ 1: 'Mainly clear',
+ 2: 'Partly cloudy',
+ 3: 'Overcast',
+
+ 45: 'Fog',
+ 48: 'Depositing rime fog',
+
+ 51: 'Drizzle: Light',
+ 53: 'Drizzle: Moderate',
+ 55: 'Drizzle: Dense',
+
+ 56: 'Freezing Drizzle: Light',
+ 57: 'Freezing Drizzle: Dense',
+
+ 61: 'Rain: Slight',
+ 63: 'Rain: Moderate',
+ 65: 'Rain: Heavy',
+
+ 66: 'Freezing Rain: Light',
+ 67: 'Freezing Rain: Heavy',
+
+ 71: 'Snowfall: Slight',
+ 73: 'Snowfall: Moderate',
+ 75: 'Snowfall: Heavy',
+
+ 77: 'Snow grains',
+
+ 80: 'Rain showers: Slight',
+ 81: 'Rain showers: Moderate',
+ 82: 'Rain showers: Violent',
+
+ 85: 'Snow showers: Slight',
+ 86: 'Snow showers: Heavy',
+
+ 95: 'Thunderstorm: Slight or moderate',
+ 96: 'Thunderstorm with slight hail',
+ 99: 'Thunderstorm with heavy hail',
+} as const;
+
+export default function CurrentWeather({
+ current,
+}: {
+ current: MeteoWeather | undefined;
+}) {
+ const { isMobile, theme, textShadowStyle } = useCommonHooks();
+
+ const sunrise = new Date(current?.daily.sunrise[0] || 0).toLocaleTimeString();
+ const sunset = new Date(current?.daily.sunset[0] || 0).toLocaleTimeString();
return (
<>
@@ -71,25 +107,11 @@ export default function CurrentWeather({ current }: { current: CW }) {
opacity: 0.5,
}}
>
-
+
- {current.temperature}°F
+ {current.current.temperature_2m?.toFixed(0)}°
+ F
25 ? 'flex-start' : 'center'}
+ justify={
+ WeatherCodes[Number(current.current.weather_code)].length > 25
+ ? 'flex-start'
+ : 'center'
+ }
style={{
width: '100%',
maxWidth: '180px',
@@ -120,13 +146,15 @@ export default function CurrentWeather({ current }: { current: CW }) {
>
25
+ WeatherCodes[Number(current.current.weather_code)].length > 25
? textClasses.autoScrollText
: undefined
}
classNames={textClasses}
>
- {current.temperature === 69 ? 'Nice' : current.textDescription}
+ {current.current.temperature_2m?.toFixed(0) === '69'
+ ? 'Nice'
+ : WeatherCodes[Number(current.current.weather_code)]}
@@ -134,8 +162,9 @@ export default function CurrentWeather({ current }: { current: CW }) {
leftSide={Feels like }
rightSide={
- {current.heatIndex ?? current.windChill ?? current.temperature}°
- F
+ {current.current.apparent_temperature?.toFixed(0) ??
+ current.current.temperature_2m?.toFixed(0)}
+ °F
}
highlight='right'
@@ -164,7 +193,7 @@ export default function CurrentWeather({ current }: { current: CW }) {
}
rightSide={
- {current.highTemp}°F
+ {current.daily.temperature_2m_max?.[0].toFixed(0)}°F
}
highlight='right'
@@ -178,7 +207,7 @@ export default function CurrentWeather({ current }: { current: CW }) {
}
rightSide={
- {current.lowTemp}°F
+ {current.daily.temperature_2m_min?.[0].toFixed(0)}°F
}
highlight='right'
@@ -205,7 +234,7 @@ export default function CurrentWeather({ current }: { current: CW }) {
Humidity
}
- rightSide={{current.humidity}%}
+ rightSide={{current.current.relative_humidity_2m}%}
highlight='right'
/>
}
- rightSide={{current.windSpeed}mph}
+ rightSide={
+ {current.current.wind_speed_10m?.toFixed(0)}mph
+ }
highlight='right'
/>
}
- rightSide={{current.pressure} in}
+ rightSide={
+ {current.current.surface_pressure?.toFixed(0)} mbar
+ }
highlight='right'
/>
@@ -257,7 +290,7 @@ export default function CurrentWeather({ current }: { current: CW }) {
/>
}
- rightSide={{sunStates[0]?.sunrise}}
+ rightSide={{sunrise}}
highlight='left'
/>
}
- rightSide={{sunStates[0]?.sunset}}
+ rightSide={{sunset}}
highlight='left'
/>
diff --git a/src/components/WeatherModal/ExtendedForecastCard.tsx b/src/components/WeatherModal/ExtendedForecastCard.tsx
index db55233..3defff5 100644
--- a/src/components/WeatherModal/ExtendedForecastCard.tsx
+++ b/src/components/WeatherModal/ExtendedForecastCard.tsx
@@ -1,17 +1,78 @@
import { Card, Group, SimpleGrid, Stack, Text } from '@mantine/core';
import { useCommonHooks } from 'hooks';
import { textClasses } from 'styles';
-import type { ExtendedForecast } from 'types';
+import type { Daily } from 'types';
import WeatherIcon from './WeatherIcon';
-export default function ExtendedForecastCard({
- forecast,
-}: {
- forecast: ExtendedForecast[];
-}) {
+const WeatherCodes: { [key: number]: string } = {
+ 0: 'Clear sky',
+
+ 1: 'Mainly clear',
+ 2: 'Partly cloudy',
+ 3: 'Overcast',
+
+ 45: 'Fog',
+ 48: 'Depositing rime fog',
+
+ 51: 'Drizzle: Light',
+ 53: 'Drizzle: Moderate',
+ 55: 'Drizzle: Dense',
+
+ 56: 'Freezing Drizzle: Light',
+ 57: 'Freezing Drizzle: Dense',
+
+ 61: 'Rain: Slight',
+ 63: 'Rain: Moderate',
+ 65: 'Rain: Heavy',
+
+ 66: 'Freezing Rain: Light',
+ 67: 'Freezing Rain: Heavy',
+
+ 71: 'Snowfall: Slight',
+ 73: 'Snowfall: Moderate',
+ 75: 'Snowfall: Heavy',
+
+ 77: 'Snow grains',
+
+ 80: 'Rain showers: Slight',
+ 81: 'Rain showers: Moderate',
+ 82: 'Rain showers: Violent',
+
+ 85: 'Snow showers: Slight',
+ 86: 'Snow showers: Heavy',
+
+ 95: 'Thunderstorm: Slight or moderate',
+ 96: 'Thunderstorm with slight hail',
+ 99: 'Thunderstorm with heavy hail',
+} as const;
+
+export default function ExtendedForecastCard({ daily }: { daily: Daily | undefined }) {
const { isMobile, theme } = useCommonHooks();
- const day = forecast.slice(2, 14).filter((item: ExtendedForecast) => item.isDaytime);
- const night = forecast.slice(2, 14).filter((item: ExtendedForecast) => !item.isDaytime);
+ const forecast = daily?.time.map((_: any, index: number) => {
+ const time = new Date(daily.time[index]);
+ time.setMinutes(daily.time[index].getTimezoneOffset() + time.getMinutes());
+
+ return {
+ apparentTemperatureMax: daily.apparent_temperature_max?.[index],
+ apparentTemperatureMin: daily.apparent_temperature_min?.[index],
+ daylightDuration: daily.daylight_duration?.[index],
+ precipitationHours: daily.precipitation_hours?.[index],
+ precipitationProbability: daily.precipitation_probability_max?.[index],
+ precipitationSum: daily.precipitation_sum?.[index],
+ sunrise: daily.sunrise[index],
+ sunset: daily.sunset[index],
+ sunshineDuration: daily.sunshine_duration?.[index],
+ temperatureMax: daily.temperature_2m_max?.[index],
+ temperatureMin: daily.temperature_2m_min?.[index],
+ time: time,
+ unIndexClearSkyMax: daily.uv_index_clear_sky_max?.[index],
+ uvIndexMax: daily.uv_index_max?.[index],
+ weatherCode: daily.weather_code?.[index],
+ windDirection: daily.wind_direction_10m_dominant?.[index],
+ windGusts: daily.wind_gusts_10m_max?.[index],
+ windSpeed: daily.wind_speed_10m_max?.[index],
+ };
+ });
return (
- {day.map((item: ExtendedForecast, index: number) => {
- const short = item.shortForecast.includes('And')
- ? item.shortForecast.substring(0, item.shortForecast.indexOf('And'))
- : item.shortForecast.includes('then')
- ? item.shortForecast.substring(0, item.shortForecast.indexOf('then'))
- : item.shortForecast;
-
+ {forecast?.slice(1, 7).map((item: any) => {
return (
15 ? 'flex-start' : 'center'}
+ justify={
+ item.time.toLocaleDateString('en-US', { weekday: 'long' }).length > 15
+ ? 'flex-start'
+ : 'center'
+ }
style={{
width: '100%',
whiteSpace: 'nowrap',
@@ -66,16 +125,20 @@ export default function ExtendedForecastCard({
>
15 ? textClasses.autoScrollText : undefined
+ item.time.toLocaleDateString('en-US', { weekday: 'long' }).length > 15
+ ? textClasses.autoScrollText
+ : undefined
}
classNames={textClasses}
>
- {item.name}
+ {item.time.toLocaleDateString('en-US', { weekday: 'long' })}
-
+
15 ? 'flex-start' : 'center'}
+ justify={
+ WeatherCodes[item.weatherCode].length > 15 ? 'flex-start' : 'center'
+ }
style={{
width: '100%',
whiteSpace: 'nowrap',
@@ -85,15 +148,18 @@ export default function ExtendedForecastCard({
}}
>
15 ? textClasses.autoScrollText : undefined}
+ className={
+ WeatherCodes[item.weatherCode].length > 15
+ ? textClasses.autoScrollText
+ : undefined
+ }
classNames={textClasses}
>
- {short}
+ {WeatherCodes[item.weatherCode]}
- {item.temperature}°{item.temperatureUnit}/{night[index].temperature}°
- {item.temperatureUnit}
+ {item.temperatureMax.toFixed(0)}°F/{item.temperatureMin.toFixed(0)}°F
);
diff --git a/src/components/WeatherModal/WeatherGraphs.tsx b/src/components/WeatherModal/WeatherGraphs.tsx
index 83c2b92..19f0819 100644
--- a/src/components/WeatherModal/WeatherGraphs.tsx
+++ b/src/components/WeatherModal/WeatherGraphs.tsx
@@ -11,16 +11,31 @@ import {
XAxis,
YAxis,
} from 'recharts';
-import type { HourlyForecast } from 'types';
+import type { Hourly } from 'types';
import WeatherTooltip from './WeatherTooltip';
-export default function WeatherGraphs({
- hourlyForecast,
-}: {
- hourlyForecast: HourlyForecast[];
-}) {
+export default function WeatherGraphs({ hourly }: { hourly: Hourly | undefined }) {
const colorPrecipitation = 'colorPrecipitation';
const colorHumidity = 'colorHumidity';
+
+ const later = new Date();
+ const now = new Date();
+ later.setDate(now.getDate() + 1);
+ const hourlyForecast = hourly?.time
+ ?.map((_: any, index: number) => {
+ return {
+ dewpoint: hourly.dew_point_2m?.[index].toFixed(0),
+ isDaytime: hourly.is_day?.[index],
+ name: hourly.time[index],
+ startTime: hourly.time[index],
+ endTime: hourly.time[index + 1],
+ probabilityOfPrecipitation: hourly.precipitation_probability?.[index],
+ temperature: hourly.temperature_2m?.[index].toFixed(0),
+ relativeHumidity: hourly.relative_humidity_2m?.[index].toFixed(0),
+ };
+ })
+ .filter((hour: any) => hour.startTime > now && hour.startTime < later);
+
return (
{
+ dataKey={(data) => {
return new Date(data.startTime).toLocaleTimeString('en-US', {
hour: 'numeric',
minute: 'numeric',
@@ -49,7 +64,7 @@ export default function WeatherGraphs({
}}
/>
- } />
+ } />
{
- return (data.dewpoint.value * 9) / 5 + 32;
- }}
+ dataKey='dewpoint'
stroke={'var(--mantine-color-accent-0)'}
strokeWidth={2}
dot={{
@@ -78,7 +91,7 @@ export default function WeatherGraphs({
fill: 'var(--mantine-color-accent-0)',
}}
/>
-
+
@@ -112,7 +125,7 @@ export default function WeatherGraphs({
{
+ dataKey={(data) => {
return new Date(data.startTime).toLocaleTimeString('en-US', {
hour: 'numeric',
minute: 'numeric',
@@ -121,14 +134,12 @@ export default function WeatherGraphs({
/>
- } />
+ } />
{
- return data.relativeHumidity.value;
- }}
+ dataKey={'relativeHumidity'}
stroke={'var(--mantine-color-primary-0)'}
strokeWidth={2}
fill={`url(#${colorPrecipitation})`}
@@ -142,9 +153,7 @@ export default function WeatherGraphs({
unit={'%'}
type='monotone'
name='Precipitation'
- dataKey={(data: HourlyForecast) => {
- return data.probabilityOfPrecipitation.value;
- }}
+ dataKey={'probabilityOfPrecipitation'}
stroke={'var(--mantine-color-accent-0)'}
strokeWidth={2}
fill={`url(#${colorHumidity})`}
@@ -154,7 +163,7 @@ export default function WeatherGraphs({
fill: 'var(--mantine-color-accent-0)',
}}
/>
-
+
diff --git a/src/components/WeatherModal/WeatherIcon.tsx b/src/components/WeatherModal/WeatherIcon.tsx
index 4515618..cf1e23f 100644
--- a/src/components/WeatherModal/WeatherIcon.tsx
+++ b/src/components/WeatherModal/WeatherIcon.tsx
@@ -1,5 +1,4 @@
-import { Group, Image } from '@mantine/core';
-import { FaArrowRight } from 'react-icons/fa';
+import { Image } from '@mantine/core';
import CloudyIcon from '../../assets/weather/cloudy.svg';
import HazeIcon from '../../assets/weather/haze.svg';
import HeavyRainIcon from '../../assets/weather/heavy-rain.svg';
@@ -9,168 +8,166 @@ import SleetIcon from '../../assets/weather/sleet.svg';
import SnowIcon from '../../assets/weather/snow.svg';
import SunnyIcon from '../../assets/weather/sunny.svg';
import ThunderstormIcon from '../../assets/weather/thunderstorm.svg';
-import WindyIcon from '../../assets/weather/windy.svg';
export default function WeatherIcon({
size,
- textDescription,
+ code,
}: {
size: string;
- textDescription: string;
+ code: number | undefined;
}) {
- const icon = textDescription.includes('then')
- ? [
- textDescription.substring(0, textDescription.trim().indexOf('then')),
- textDescription.substring(textDescription.trim().indexOf('then') + 4).trim(),
- ]
- : [textDescription.trim()];
-
- const lookupSource = (icon: any) => {
- switch (icon.trim()) {
- case 'Ash':
+ const lookupSource = (code: any) => {
+ switch (code) {
+ case 0:
return {
- src: HazeIcon,
- alt: 'HazeIcon',
+ src: SunnyIcon,
+ alt: 'SunnyIcon',
};
- case 'Broken Clouds':
+
+ case 1:
return {
src: PartlyCloudyIcon,
alt: 'PartlyCloudyIcon',
};
- case 'Chance Rain Showers':
+ case 2:
return {
- src: RainIcon,
- alt: 'RainIcon',
+ src: PartlyCloudyIcon,
+ alt: 'PartlyCloudyIcon',
};
- case 'Chance Showers':
- return {
- src: RainIcon,
- alt: 'RainIcon',
- };
- case 'Slight Chance Showers':
- return {
- src: RainIcon,
- alt: 'RainIcon',
- };
- case 'Cloudy':
+ case 3:
return {
src: CloudyIcon,
alt: 'CloudyIcon',
};
- case 'Dust':
+
+ case 45:
return {
src: HazeIcon,
alt: 'HazeIcon',
};
- case 'Drizzle':
+ case 48:
+ return {
+ src: HazeIcon,
+ alt: 'HazeIcon',
+ };
+
+ case 51:
return {
src: RainIcon,
alt: 'RainIcon',
};
- case 'Fog':
+ case 53:
return {
- src: HazeIcon,
- alt: 'HazeIcon',
+ src: RainIcon,
+ alt: 'RainIcon',
};
- case 'Freezing Rain':
+ case 55:
+ return {
+ src: RainIcon,
+ alt: 'RainIcon',
+ };
+
+ case 56:
return {
src: SleetIcon,
alt: 'SleetIcon',
};
- case 'Haze':
+ case 57:
return {
- src: HazeIcon,
- alt: 'HazeIcon',
+ src: SleetIcon,
+ alt: 'SleetIcon',
};
- case 'Heavy Rain':
+
+ case 61:
+ return {
+ src: RainIcon,
+ alt: 'RainIcon',
+ };
+ case 63:
+ return {
+ src: RainIcon,
+ alt: 'RainIcon',
+ };
+ case 65:
+ return {
+ src: RainIcon,
+ alt: 'RainIcon',
+ };
+
+ case 66:
+ return {
+ src: SleetIcon,
+ alt: 'SleetIcon',
+ };
+ case 67:
+ return {
+ src: SleetIcon,
+ alt: 'SleetIcon',
+ };
+
+ case 71:
+ return {
+ src: SnowIcon,
+ alt: 'SnowIcon',
+ };
+ case 73:
+ return {
+ src: SnowIcon,
+ alt: 'SnowIcon',
+ };
+ case 75:
+ return {
+ src: SnowIcon,
+ alt: 'SnowIcon',
+ };
+
+ case 77:
+ return {
+ src: SnowIcon,
+ alt: 'SnowIcon',
+ };
+
+ case 80:
return {
src: HeavyRainIcon,
alt: 'HeavyRainIcon',
};
- case 'Heavy Snow':
+ case 81:
+ return {
+ src: HeavyRainIcon,
+ alt: 'HeavyRainIcon',
+ };
+ case 82:
+ return {
+ src: HeavyRainIcon,
+ alt: 'HeavyRainIcon',
+ };
+
+ case 85:
return {
src: SnowIcon,
alt: 'SnowIcon',
};
- case 'Light Rain':
- return {
- src: RainIcon,
- alt: 'RainIcon',
- };
- case 'Mist':
- return {
- src: HazeIcon,
- alt: 'HazeIcon',
- };
- case 'Moderate Rain':
- return {
- src: RainIcon,
- alt: 'RainIcon',
- };
- case 'Mostly Cloudy':
- return {
- src: CloudyIcon,
- alt: 'CloudyIcon',
- };
- case 'Overcast Clouds':
- return {
- src: PartlyCloudyIcon,
- alt: 'PartlyCloudyIcon',
- };
- case 'Patchy Fog':
- return {
- src: HazeIcon,
- alt: 'HazeIcon',
- };
- case 'Partly Sunny':
- return {
- src: PartlyCloudyIcon,
- alt: 'PartlyCloudyIcon',
- };
- case 'Rain':
- return {
- src: RainIcon,
- alt: 'RainIcon',
- };
- case 'Scattered Clouds':
- return {
- src: PartlyCloudyIcon,
- alt: 'PartlyCloudyIcon',
- };
- case 'Showers':
- return {
- src: RainIcon,
- alt: 'RainIcon',
- };
- case 'Sleet':
- return {
- src: SleetIcon,
- alt: 'SleetIcon',
- };
- case 'Smoke':
- return {
- src: HazeIcon,
- alt: 'HazeIcon',
- };
- case 'Snow':
+ case 86:
return {
src: SnowIcon,
alt: 'SnowIcon',
};
- case 'Squall':
- return {
- src: WindyIcon,
- alt: 'WindyIcon',
- };
- case 'Thunderstorm':
+
+ case 95:
return {
src: ThunderstormIcon,
alt: 'ThunderstormIcon',
};
- case 'Tornado':
+ case 96:
return {
- src: WindyIcon,
- alt: 'WindyIcon',
+ src: ThunderstormIcon,
+ alt: 'ThunderstormIcon',
+ };
+ case 99:
+ return {
+ src: ThunderstormIcon,
+ alt: 'ThunderstormIcon',
};
default:
@@ -182,61 +179,14 @@ export default function WeatherIcon({
};
return (
- <>
- {icon.length === 1 ? (
-
- ) : (
-
-
-
-
-
- )}
- >
+
);
}
diff --git a/src/components/WeatherModal/WeatherModal.tsx b/src/components/WeatherModal/WeatherModal.tsx
index 1b250f1..b3ce868 100644
--- a/src/components/WeatherModal/WeatherModal.tsx
+++ b/src/components/WeatherModal/WeatherModal.tsx
@@ -1,34 +1,23 @@
import { Center, Group, Modal, Stack, Text } from '@mantine/core';
-import { useCommonHooks, useWeatherAPI } from 'hooks';
+import { useCommonHooks } from 'hooks';
import { modalClasses } from 'styles';
-
-import type { CurrentWeather as CW, ExtendedForecast, HourlyForecast } from 'types';
+import type { MeteoWeather } from 'types';
import CurrentWeather from './CurrentWeather';
import ExtendedForecastCard from './ExtendedForecastCard';
import WeatherGraphs from './WeatherGraphs';
export function WeatherModal({
current,
- extendedForecast,
weatherModalOpened,
handleResetSearch,
closeWeatherModal,
}: {
- current: CW;
- extendedForecast: ExtendedForecast[];
+ current: MeteoWeather | undefined;
weatherModalOpened: boolean;
handleResetSearch: () => void;
closeWeatherModal: () => void;
}) {
- const { isMobile, currentUser, currentLocation } = useCommonHooks();
- const { data: hourly } = useWeatherAPI({
- endpoint: 'hourly',
- office: currentLocation.office,
- x: currentLocation.x,
- y: currentLocation.y,
- });
- const hourlyForecast: HourlyForecast[] =
- hourly?.properties?.periods?.slice(1, 25) || [];
+ const { isMobile, currentUser } = useCommonHooks();
return (
-
-
+
+
diff --git a/src/components/WeatherModal/WeatherTooltip.tsx b/src/components/WeatherModal/WeatherTooltip.tsx
index 37a38f8..6622570 100644
--- a/src/components/WeatherModal/WeatherTooltip.tsx
+++ b/src/components/WeatherModal/WeatherTooltip.tsx
@@ -10,6 +10,9 @@ function WeatherTooltip({ payload, active }: any) {
borderRadius: '8px',
}}
>
+
+ {payload[0]?.payload.startTime?.toLocaleString()}
+
{payload.map((item: any) => (
{
- const response = await fetch(url);
- if (!response.ok) {
- throw new Error(`${response.status} ${response.statusText}`);
- }
- return await response.json();
+
+const callWeatherEndpoint = async (lat: number, lon: number) => {
+ const weatherParams = {
+ latitude: lat,
+ longitude: lon,
+ daily: [
+ 'sunrise',
+ 'sunset',
+ 'daylight_duration',
+ 'sunshine_duration',
+ 'uv_index_max',
+ 'uv_index_clear_sky_max',
+ 'temperature_2m_max',
+ 'temperature_2m_min',
+ 'apparent_temperature_max',
+ 'apparent_temperature_min',
+ 'wind_speed_10m_max',
+ 'wind_gusts_10m_max',
+ 'wind_direction_10m_dominant',
+ 'precipitation_sum',
+ 'precipitation_hours',
+ 'precipitation_probability_max',
+ 'weather_code',
+ ],
+ hourly: [
+ 'temperature_2m',
+ 'relative_humidity_2m',
+ 'dew_point_2m',
+ 'apparent_temperature',
+ 'precipitation_probability',
+ 'precipitation',
+ 'rain',
+ 'showers',
+ 'snowfall',
+ 'snow_depth',
+ 'weather_code',
+ 'pressure_msl',
+ 'surface_pressure',
+ 'cloud_cover',
+ 'cloud_cover_low',
+ 'cloud_cover_mid',
+ 'cloud_cover_high',
+ 'visibility',
+ 'evapotranspiration',
+ 'et0_fao_evapotranspiration',
+ 'vapour_pressure_deficit',
+ 'wind_speed_10m',
+ 'wind_direction_10m',
+ 'wind_gusts_10m',
+ 'uv_index',
+ 'uv_index_clear_sky',
+ 'is_day',
+ 'sunshine_duration',
+ ],
+ current: [
+ 'temperature_2m',
+ 'relative_humidity_2m',
+ 'apparent_temperature',
+ 'is_day',
+ 'wind_speed_10m',
+ 'wind_direction_10m',
+ 'wind_gusts_10m',
+ 'precipitation',
+ 'rain',
+ 'showers',
+ 'snowfall',
+ 'surface_pressure',
+ 'pressure_msl',
+ 'cloud_cover',
+ 'weather_code',
+ ],
+ wind_speed_unit: 'mph',
+ temperature_unit: 'fahrenheit',
+ precipitation_unit: 'inch',
+ };
+
+ const url = 'https://api.open-meteo.com/v1/forecast';
+ const responses = await fetchWeatherApi(url, weatherParams);
+
+ const response = responses[0];
+
+ const current = response ? response.current() : null;
+ const hourly = response ? response.hourly() : null;
+ const daily = response ? response.daily() : null;
+
+ const sunrise = daily?.variables(0);
+ const sunset = daily?.variables(1);
+ const utcOffsetSeconds = response.utcOffsetSeconds();
+ const weatherData = {
+ current: {
+ time: new Date((Number(current?.time()) + utcOffsetSeconds) * 1000),
+ temperature_2m: current?.variables(0)?.value(),
+ relative_humidity_2m: current?.variables(1)?.value(),
+ apparent_temperature: current?.variables(2)?.value(),
+ is_day: current?.variables(3)?.value(),
+ wind_speed_10m: current?.variables(4)?.value(),
+ wind_direction_10m: current?.variables(5)?.value(),
+ wind_gusts_10m: current?.variables(6)?.value(),
+ precipitation: current?.variables(7)?.value(),
+ rain: current?.variables(8)?.value(),
+ showers: current?.variables(9)?.value(),
+ snowfall: current?.variables(10)?.value(),
+ surface_pressure: current?.variables(11)?.value(),
+ pressure_msl: current?.variables(12)?.value(),
+ cloud_cover: current?.variables(13)?.value(),
+ weather_code: current?.variables(14)?.value(),
+ },
+ hourly: {
+ time: Array.from(
+ {
+ length:
+ (Number(hourly?.timeEnd()) - Number(hourly?.time())) /
+ Number(hourly?.interval()),
+ },
+ (_, i) =>
+ new Date(
+ (Number(hourly?.time()) + i * Number(hourly?.interval()) + utcOffsetSeconds) *
+ 1000,
+ ),
+ ),
+ temperature_2m: hourly?.variables(0)?.valuesArray(),
+ relative_humidity_2m: hourly?.variables(1)?.valuesArray(),
+ dew_point_2m: hourly?.variables(2)?.valuesArray(),
+ apparent_temperature: hourly?.variables(3)?.valuesArray(),
+ precipitation_probability: hourly?.variables(4)?.valuesArray(),
+ precipitation: hourly?.variables(5)?.valuesArray(),
+ rain: hourly?.variables(6)?.valuesArray(),
+ showers: hourly?.variables(7)?.valuesArray(),
+ snowfall: hourly?.variables(8)?.valuesArray(),
+ snow_depth: hourly?.variables(9)?.valuesArray(),
+ weather_code: hourly?.variables(10)?.valuesArray(),
+ pressure_msl: hourly?.variables(11)?.valuesArray(),
+ surface_pressure: hourly?.variables(12)?.valuesArray(),
+ cloud_cover: hourly?.variables(13)?.valuesArray(),
+ cloud_cover_low: hourly?.variables(14)?.valuesArray(),
+ cloud_cover_mid: hourly?.variables(15)?.valuesArray(),
+ cloud_cover_high: hourly?.variables(16)?.valuesArray(),
+ visibility: hourly?.variables(17)?.valuesArray(),
+ evapotranspiration: hourly?.variables(18)?.valuesArray(),
+ et0_fao_evapotranspiration: hourly?.variables(19)?.valuesArray(),
+ vapour_pressure_deficit: hourly?.variables(20)?.valuesArray(),
+ wind_speed_10m: hourly?.variables(21)?.valuesArray(),
+ wind_direction_10m: hourly?.variables(22)?.valuesArray(),
+ wind_gusts_10m: hourly?.variables(23)?.valuesArray(),
+ uv_index: hourly?.variables(24)?.valuesArray(),
+ uv_index_clear_sky: hourly?.variables(25)?.valuesArray(),
+ is_day: hourly?.variables(26)?.valuesArray(),
+ sunshine_duration: hourly?.variables(27)?.valuesArray(),
+ },
+ daily: {
+ time: Array.from(
+ {
+ length:
+ (Number(daily?.timeEnd()) - Number(daily?.time())) /
+ Number(daily?.interval()),
+ },
+ (_, i) =>
+ new Date(
+ (Number(daily?.time()) + i * Number(daily?.interval()) + utcOffsetSeconds) *
+ 1000,
+ ),
+ ),
+ // Map Int64 values to according structure
+ sunrise: [new Array(sunrise?.valuesInt64Length())].map(
+ (_, i) => new Date((Number(sunrise?.valuesInt64(i)) + utcOffsetSeconds) * 1000),
+ ),
+ // Map Int64 values to according structure
+ sunset: [new Array(sunset?.valuesInt64Length())].map(
+ (_, i) => new Date((Number(sunset?.valuesInt64(i)) + utcOffsetSeconds) * 1000),
+ ),
+ daylight_duration: daily?.variables(2)?.valuesArray(),
+ sunshine_duration: daily?.variables(3)?.valuesArray(),
+ uv_index_max: daily?.variables(4)?.valuesArray(),
+ uv_index_clear_sky_max: daily?.variables(5)?.valuesArray(),
+ temperature_2m_max: daily?.variables(6)?.valuesArray(),
+ temperature_2m_min: daily?.variables(7)?.valuesArray(),
+ apparent_temperature_max: daily?.variables(8)?.valuesArray(),
+ apparent_temperature_min: daily?.variables(9)?.valuesArray(),
+ wind_speed_10m_max: daily?.variables(10)?.valuesArray(),
+ wind_gusts_10m_max: daily?.variables(11)?.valuesArray(),
+ wind_direction_10m_dominant: daily?.variables(12)?.valuesArray(),
+ precipitation_sum: daily?.variables(13)?.valuesArray(),
+ precipitation_hours: daily?.variables(14)?.valuesArray(),
+ precipitation_probability_max: daily?.variables(15)?.valuesArray(),
+ weather_code: daily?.variables(16)?.valuesArray(),
+ },
+ };
+
+ return weatherData;
};
export function useQueryAPI({ endpoint }: { endpoint: string }) {
const callEndpoint = async (endpoint: string) => {
@@ -143,54 +327,10 @@ export function useMutationAPI() {
});
}
-export function useWeatherAPI({
- endpoint,
- lat,
- lon,
- office,
- station,
- x,
- y,
-}: {
- endpoint: string;
- lat?: number;
- lon?: number;
- office?: string;
- station?: string;
- x?: number;
- y?: number;
-}) {
- let url = '';
- if (endpoint === 'baseline') {
- url = `https://api.weather.gov/gridpoints/${office}/${x},${y}`;
- } else if (endpoint === 'current') {
- url = `https://api.weather.gov/stations/${station}/observations`;
- } else if (endpoint === 'forecast') {
- url = `https://api.weather.gov/gridpoints/${office}/${x},${y}/forecast`;
- } else if (endpoint === 'hourly') {
- url = `https://api.weather.gov/gridpoints/${office}/${x},${y}/forecast/hourly`;
- } else if (endpoint === 'points') {
- url = `https://api.weather.gov/points/${lat},${lon}`;
- } else if (endpoint === 'stations') {
- url = `https://api.weather.gov/gridpoints/${office}/${x},${y}/stations`;
- }
-
+export function useOpenMeteoAPI({ lat, lon }: { lat: number; lon: number }) {
return useQuery({
- queryKey: ['GET', url],
- queryFn: () => callEndpoint(url),
- });
-}
-
-export function useSunStateAPI({ lat, lon }: { lat: number; lon: number }) {
- const date = new Date();
- const today = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
- date.setDate(date.getDate() + 1);
- const tomorrow = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
- const url = `https://api.sunrisesunset.io/json?lat=${lat}&lng=${lon}&date_start=${today}&date_end=${tomorrow}`;
-
- return useQuery({
- queryKey: ['GET', url],
- queryFn: () => callEndpoint(url),
+ queryKey: ['GET', 'weather'],
+ queryFn: () => callWeatherEndpoint(lat, lon),
});
}
diff --git a/src/hooks/useCommonHooks.ts b/src/hooks/useCommonHooks.ts
index b3d1b45..ec99fcf 100644
--- a/src/hooks/useCommonHooks.ts
+++ b/src/hooks/useCommonHooks.ts
@@ -108,10 +108,6 @@ export function useCommonHooks() {
const [currentLocation, setCurrentLocation] = useLocalStorage({
key: 'location',
defaultValue: {
- office: 'HGX',
- station: 'KHOU',
- x: 65,
- y: 96,
lat: 29.750950134386066,
lon: -95.36220654860034,
},
diff --git a/src/pages/homepage/Homepage.tsx b/src/pages/homepage/Homepage.tsx
index 0b0d299..54c23b1 100644
--- a/src/pages/homepage/Homepage.tsx
+++ b/src/pages/homepage/Homepage.tsx
@@ -1,15 +1,10 @@
import { Box, Grid, Stack } from '@mantine/core';
import { useDisclosure } from '@mantine/hooks';
-import CurrentWeather from 'components/WeatherModal/CurrentWeather';
-import { useCommonHooks, useOSMAPI, useQueryAPI, useWeatherAPI } from 'hooks';
+import { useCommonHooks, useOpenMeteoAPI, useOSMAPI, useQueryAPI } from 'hooks';
import { useEffect, useState } from 'react';
import { stackClasses } from 'styles';
-import type {
- CurrentWeather as CW,
- ExtendedForecast,
- Message,
- PersonalData,
-} from 'types';
+import type { Message, MeteoWeather, PersonalData } from 'types';
+import CurrentWeather from '../../components/WeatherModal/CurrentWeather';
import {
Applications,
Bookmarks,
@@ -48,73 +43,19 @@ export function Homepage() {
const { data: weatherMetadata } = useOSMAPI({
address: personalData?.[0]?.physicalAddress,
});
- const { data: points } = useWeatherAPI({
- endpoint: 'points',
+ const { data: meteoWeather } = useOpenMeteoAPI({
lat: weatherMetadata?.[0].lat ?? currentLocation.lat,
lon: weatherMetadata?.[0].lon ?? currentLocation.lon,
});
- const { data: basicWeather } = useWeatherAPI({
- endpoint: 'baseline',
- office: points?.properties.gridId ?? currentLocation.office,
- x: points?.properties.gridX ?? currentLocation.x,
- y: points?.properties.gridY ?? currentLocation.y,
- });
- const { data: stations } = useWeatherAPI({
- endpoint: 'stations',
- office: points?.properties.gridId ?? currentLocation.office,
- x: points?.properties.gridX ?? currentLocation.x,
- y: points?.properties.gridY ?? currentLocation.y,
- });
- const { data: weather } = useWeatherAPI({
- endpoint: 'current',
- station:
- stations?.features[0].properties.stationIdentifier ?? currentLocation.station,
- });
- const { data: forecast } = useWeatherAPI({
- endpoint: 'forecast',
- office: points?.properties.gridId ?? currentLocation.office,
- x: points?.properties.gridX ?? currentLocation.x,
- y: points?.properties.gridY ?? currentLocation.y,
- });
const personal: PersonalData = personalData?.[0];
const message: Message = messageData?.[0] || {};
const [displayedGreeting, setDisplayedGreeting] = useState('');
- const [current, setCurrent] = useState({
- icon: '',
- textDescription: '',
- temperature: 0,
- highTemp: 0,
- lowTemp: 0,
- precipitation: 'N/A',
- humidity: 0,
- heatIndex: null,
- windChill: null,
- windSpeed: 0,
- windDirection: 0,
- pressure: 0,
- });
+
+ const [meteoCurrent, setMeteoCurrent] = useState();
const [providerModalOpened, { open: openProviderModal, close: closeProviderModal }] =
useDisclosure(false);
- const extendedForecast = forecast?.properties?.periods.map(
- (item: ExtendedForecast) => ({
- detailedForecast: item.detailedForecast,
- isDaytime: item.isDaytime,
- name: item.name,
- shortForecast: item.shortForecast,
- temperature: item.temperature,
- temperatureUnit: item.temperatureUnit,
- }),
- ) || [
- {
- detailedForecast: '',
- isDaytime: true,
- name: '',
- shortForecast: '',
- temperature: 0,
- temperatureUnit: 'F',
- },
- ];
+
const [weatherModalOpened, { open: openWeatherModal, close: closeWeatherModal }] =
useDisclosure(false);
@@ -142,59 +83,16 @@ export function Homepage() {
});
}
}, [message, personal]);
+
useEffect(() => {
- if (weather !== undefined && basicWeather !== undefined) {
- setCurrent({
- icon: weather.features[0]?.properties.icon?.replace('medium', 'large') ?? '',
- textDescription: weather.features[0]?.properties.textDescription,
- temperature: Math.round(
- (weather.features?.find((feature: any) => feature.properties.temperature.value)
- .properties.temperature.value *
- 9) /
- 5 +
- 32,
- ),
- highTemp: Math.round(
- (basicWeather.properties.maxTemperature.values[0].value * 9) / 5 + 32,
- ),
- lowTemp: Math.round(
- (basicWeather.properties.minTemperature.values[0].value * 9) / 5 + 32,
- ),
- precipitation:
- weather.features[0]?.properties?.precipitationLastHour?.value ?? 'N/A',
- humidity: Math.round(weather.features[0]?.properties?.relativeHumidity?.value),
- heatIndex:
- basicWeather.properties.heatIndex?.values[0].value === null
- ? null
- : Math.round(
- (basicWeather.properties.heatIndex.values[0].value * 9) / 5 + 32,
- ),
- windChill:
- basicWeather.properties.windChill?.values[0].value === null
- ? null
- : Math.round(
- (basicWeather.properties.windChill.values[0].value * 9) / 5 + 32,
- ),
- windSpeed: Math.round(weather.features[0]?.properties.windSpeed.value / 1.60934),
- windDirection: weather.features[0]?.properties.windDirection.value,
- pressure: Math.round(
- weather.features[0]?.properties.barometricPressure.value / 3386.38,
- ),
- });
- }
- }, [weather, basicWeather]);
- useEffect(() => {
- if (forecast) {
+ if (meteoWeather) {
+ setMeteoCurrent(meteoWeather);
setCurrentLocation({
- office: points?.properties.gridId,
- station: stations?.features[0].properties.stationIdentifier,
- x: points?.properties.gridX,
- y: points?.properties.gridY,
lat: weatherMetadata?.[0].lat,
lon: weatherMetadata?.[0].lon,
});
}
- }, [forecast]);
+ }, [meteoWeather]);
return (
0 || bookmarkFilter.length > 0 ? (
<>
@@ -231,12 +128,11 @@ export function Homepage() {
-
+ {meteoCurrent && }
void;
}) {
const [time, setTime] = useState(new Date());
@@ -101,7 +101,7 @@ export function Header({
textShadow: theme.textShadowsEnabled ? textShadowStyle : undefined,
}}
>
- {current.temperature}°F
+ {current?.current.temperature_2m?.toFixed(0)}°F
- {current.highTemp}°F/{current.lowTemp}°F
+ {current?.daily.temperature_2m_max?.[0].toFixed(0)}°F/
+ {current?.daily.temperature_2m_min?.[0].toFixed(0)}°F
void;
openWeatherModal: () => void;
@@ -647,7 +644,6 @@ export function Search({
{weatherModalOpened && (
| null | undefined;
+ cloud_cover: Float32Array | null | undefined;
+ cloud_cover_high: Float32Array | null | undefined;
+ cloud_cover_mid: Float32Array | null | undefined;
+ cloud_cover_low: Float32Array | null | undefined;
+ dew_point_2m: Float32Array | null | undefined;
+ et0_fao_evapotranspiration: Float32Array | null | undefined;
+ evapotranspiration: Float32Array | null | undefined;
+ is_day: Float32Array | null | undefined;
+ precipitation: Float32Array | null | undefined;
+ precipitation_probability: Float32Array | null | undefined;
+ pressure_msl: Float32Array | null | undefined;
+ rain: Float32Array | null | undefined;
+ relative_humidity_2m: Float32Array | null | undefined;
+ showers: Float32Array | null | undefined;
+ snow_depth: Float32Array | null | undefined;
+ snowfall: Float32Array | null | undefined;
+ sunshine_duration: Float32Array | null | undefined;
+ surface_pressure: Float32Array | null | undefined;
+ temperature_2m: Float32Array | null | undefined;
+ time: Date[];
+ uv_index_clear_sky: Float32Array | null | undefined;
+ uv_index: Float32Array | null | undefined;
+ vapour_pressure_deficit: Float32Array | null | undefined;
+ visibility: Float32Array | null | undefined;
+ weather_code: Float32Array | null | undefined;
+ wind_direction_10m: Float32Array | null | undefined;
+ wind_gusts_10m: Float32Array | null | undefined;
+ wind_speed_10m: Float32Array | null | undefined;
+}
+
+export interface Daily {
+ apparent_temperature_max: Float32Array | null | undefined;
+ apparent_temperature_min: Float32Array | null | undefined;
+ daylight_duration: Float32Array | null | undefined;
+ precipitation_hours: Float32Array | null | undefined;
+ precipitation_probability_max: Float32Array | null | undefined;
+ precipitation_sum: Float32Array | null | undefined;
+ sunrise: Date[];
+ sunset: Date[];
+ sunshine_duration: Float32Array | null | undefined;
+ temperature_2m_max: Float32Array | null | undefined;
+ temperature_2m_min: Float32Array | null | undefined;
+ time: Date[];
+ uv_index_clear_sky_max: Float32Array | null | undefined;
+ uv_index_max: Float32Array | null | undefined;
+ weather_code: Float32Array | null | undefined;
+ wind_direction_10m_dominant: Float32Array | null | undefined;
+ wind_gusts_10m_max: Float32Array | null | undefined;
+ wind_speed_10m_max: Float32Array | null | undefined;
+}
diff --git a/tsconfig.app.json b/tsconfig.app.json
deleted file mode 100644
index 4c7ac8c..0000000
--- a/tsconfig.app.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "compilerOptions": {
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
- "target": "es2023",
- "lib": ["ES2023", "DOM"],
- "module": "esnext",
- "types": ["vite/client"],
- "skipLibCheck": true,
- "composite": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": false,
- "verbatimModuleSyntax": true,
- "moduleDetection": "force",
- "noEmit": false,
- "jsx": "react-jsx",
-
- /* Linting */
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "erasableSyntaxOnly": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": ["src"]
-}
diff --git a/tsconfig.json b/tsconfig.json
index 0a486c8..f037d76 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,17 +1,16 @@
{
"compilerOptions": {
- "target": "ES2020",
+ "target": "ES2022",
"useDefineForClassFields": true,
- "module": "nodenext",
+ "module": "ES2022",
"skipLibCheck": true,
- "rootDir": "./src",
"allowJs": false,
"lib": ["ESNext", "DOM"],
"allowSyntheticDefaultImports": true,
"types": ["vite/client", "vitest"],
/* Bundler mode */
- "moduleResolution": "nodenext",
+ "moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
@@ -25,17 +24,13 @@
"noFallthroughCasesInSwitch": true,
"paths": {
- "components": ["./components/index.ts"],
- "contexts": ["./contexts/index.ts"],
- "hooks": ["./hooks/index.ts"],
- "pages": ["./pages/index.ts"],
- "styles": ["./styles/index.ts"],
- "types": ["./types/index.ts"]
+ "components": ["./src/components/index.ts"],
+ "contexts": ["./src/contexts/index.ts"],
+ "hooks": ["./src/hooks/index.ts"],
+ "pages": ["./src/pages/index.ts"],
+ "styles": ["./src/styles/index.ts"],
+ "types": ["./src/types/index.ts"]
}
},
"include": ["src"],
- "references": [
- { "path": "./tsconfig.node.json" },
- { "path": "./tsconfig.app.json" }
- ]
}
diff --git a/tsconfig.node.json b/tsconfig.node.json
deleted file mode 100644
index 7242f5d..0000000
--- a/tsconfig.node.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "compilerOptions": {
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
- "target": "es2023",
- "lib": ["ES2023"],
- "module": "esnext",
- "types": ["node"],
- "skipLibCheck": true,
- "composite": true,
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": false,
- "verbatimModuleSyntax": true,
- "moduleDetection": "force",
- "noEmit": false,
-
- /* Linting */
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "erasableSyntaxOnly": true,
- "noFallthroughCasesInSwitch": true
- },
- "include": ["vite.config.ts"]
-}