From b2f71dd80825fda1c66e21eb050de1b727755c81 Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Fri, 9 Jan 2026 11:01:32 +0100 Subject: [PATCH 1/9] Typescript migration of line creation Signed-off-by: Franck LECUYER --- package-lock.json | 452 ++++++------------ ....js => line-characteristics-pane-utils.ts} | 38 +- ...pane.jsx => line-characteristics-pane.tsx} | 2 +- ...utils.js => line-creation-dialog-utils.ts} | 9 +- ...on-dialog.jsx => line-creation-dialog.tsx} | 255 ++++++---- ...e-dialog-tabs.jsx => line-dialog-tabs.tsx} | 31 +- .../modification/line-modification-type.ts | 21 +- src/services/network-modification-types.ts | 7 +- src/services/study/network-modifications.ts | 2 +- 9 files changed, 410 insertions(+), 407 deletions(-) rename src/components/dialogs/network-modifications/line/characteristics-pane/{line-characteristics-pane-utils.js => line-characteristics-pane-utils.ts} (68%) rename src/components/dialogs/network-modifications/line/characteristics-pane/{line-characteristics-pane.jsx => line-characteristics-pane.tsx} (99%) rename src/components/dialogs/network-modifications/line/creation/{line-creation-dialog-utils.js => line-creation-dialog-utils.ts} (80%) rename src/components/dialogs/network-modifications/line/creation/{line-creation-dialog.jsx => line-creation-dialog.tsx} (69%) rename src/components/dialogs/network-modifications/line/{line-dialog-tabs.jsx => line-dialog-tabs.tsx} (65%) diff --git a/package-lock.json b/package-lock.json index b41872d7f6..cfb08f138d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -171,6 +171,7 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -2108,7 +2109,6 @@ "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", "license": "MIT", - "peer": true, "dependencies": { "commander": "^2.15.1" }, @@ -2228,6 +2228,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2251,6 +2252,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2260,6 +2262,7 @@ "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-9.0.41.tgz", "integrity": "sha512-GWZJ0tiLN6b4OsH299yoKv16BUfOydB9d3lDTYE+AHKXXfH/gL+T9dpDj2aUM+chkrzdoqy0F2iC6rbpZQk7ag==", "license": "MIT", + "peer": true, "dependencies": { "@loaders.gl/core": "^4.2.0", "@loaders.gl/images": "^4.2.0", @@ -2284,6 +2287,7 @@ "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-9.0.41.tgz", "integrity": "sha512-rvPAlKwv4seED1v+n+O+ACGjC9UI7nx/WF5PiSNFUcLqHsiC1QbAoiJ0t/SC2ox2BrrJgYOlPxdll892sC6eFg==", "license": "MIT", + "peer": true, "dependencies": { "@luma.gl/constants": "~9.0.27", "@luma.gl/shadertools": "~9.0.27", @@ -2300,6 +2304,7 @@ "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-9.0.41.tgz", "integrity": "sha512-r+IR/ga+p2NZJeEvmKJch5BAHOJAcGnizZkFzvJh9MoEbkZm72ZxeFcGGslW4XXvmZ79h8cixDwMZJmmOYRcWw==", "license": "MIT", + "peer": true, "dependencies": { "@loaders.gl/images": "^4.2.0", "@loaders.gl/schema": "^4.2.0", @@ -2428,6 +2433,7 @@ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -2471,6 +2477,7 @@ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -3354,6 +3361,7 @@ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-4.1.3.tgz", "integrity": "sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==", "license": "MIT", + "peer": true, "dependencies": { "@standard-schema/utils": "^0.3.0" }, @@ -3998,6 +4006,7 @@ "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-4.3.4.tgz", "integrity": "sha512-cG0C5fMZ1jyW6WCsf4LoHGvaIAJCEVA/ioqKoYRwoSfXkOf+17KupK1OUQyUCw5XoRn+oWA1FulJQOYlXnb9Gw==", "license": "MIT", + "peer": true, "dependencies": { "@loaders.gl/loader-utils": "4.3.4", "@loaders.gl/schema": "4.3.4", @@ -4057,13 +4066,15 @@ "version": "9.0.28", "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-9.0.28.tgz", "integrity": "sha512-mw3YwYfCbpCa8y28nNZGaJemprSkqthsunz0V79qpnMrFD3pOMIh+rw/hjQuqVW9ffmSXx+xY2bI8FT1YC8f7A==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@luma.gl/core": { "version": "9.0.28", "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-9.0.28.tgz", "integrity": "sha512-5PHSEO70o+bze7uax/2e5YTNUAqwcPXrABOvvxm+ihw+guWpqIHGt8wStoY2HKwmQhF8eT4f7nc762E/oyl4NA==", "license": "MIT", + "peer": true, "dependencies": { "@math.gl/types": "^4.0.0", "@probe.gl/env": "^4.0.2", @@ -4077,6 +4088,7 @@ "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-9.0.28.tgz", "integrity": "sha512-EidAG/1Sgq0OeoyrebkcrC5TMvfK8ycIpSAjIRdi8hjwpHIoHFj5P3MWeApTZ1HV0DroxChzrxRCHYylI8svPQ==", "license": "MIT", + "peer": true, "dependencies": { "@luma.gl/shadertools": "9.0.28", "@math.gl/core": "^4.0.0", @@ -4180,8 +4192,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", @@ -4373,6 +4384,7 @@ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.18.0.tgz", "integrity": "sha512-1s0vEZj5XFXDMmz3Arl/R7IncFqJ+WQ95LDp1roHWGDE2oCO3IS4/hmiOv1/8SD9r6B7tv9GLiqVZYHo+6PkTg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9" }, @@ -4399,6 +4411,7 @@ "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.175.tgz", "integrity": "sha512-AvM0Nvnnj7vHc9+pkkQkoE1i+dEbr6gsMdnSfy7X4w3Ljgcj1yrjZhIt3jGTCLzyKVLa6uve5eLluOcGkvMqUA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9", "@mui/base": "5.0.0-beta.40-0", @@ -4440,6 +4453,7 @@ "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.18.0.tgz", "integrity": "sha512-bbH/HaJZpFtXGvWg3TsBWG4eyt3gah3E7nCNU8GLyRjVoWcA91Vm/T+sjHfUcwgJSw9iLtucfHBoq+qW/T30aA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9", "@mui/core-downloads-tracker": "^5.18.0", @@ -4545,6 +4559,7 @@ "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.18.0.tgz", "integrity": "sha512-ojZGVcRWqWhu557cdO3pWHloIGJdzVtxs3rk0F9L+x55LsUjcMUVkEhiF7E4TMxZoF9MmIHGGs0ZX3FDLAf0Xw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9", "@mui/private-theming": "^5.17.1", @@ -4825,6 +4840,7 @@ "resolved": "https://registry.npmjs.org/@mui/x-tree-view/-/x-tree-view-8.22.0.tgz", "integrity": "sha512-g7tAe8hHvpOgJi/DzrMVIX7DKAD4o575isVdRciojR5IGlT+FAVbdUz+8NJJQ5DNkLFhi1MfMXgU22ilkkRpJg==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@base-ui-components/utils": "0.1.2", @@ -4985,15 +5001,13 @@ "version": "3.8.2", "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.2.tgz", "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@plotly/d3-sankey": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz", "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "1", "d3-collection": "1", @@ -5005,7 +5019,6 @@ "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz", "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==", "license": "MIT", - "peer": true, "dependencies": { "d3-array": "^1.2.1", "d3-collection": "^1.0.4", @@ -5017,22 +5030,19 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@plotly/d3-sankey-circular/node_modules/d3-path": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@plotly/d3-sankey-circular/node_modules/d3-shape": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-path": "1" } @@ -5041,22 +5051,19 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@plotly/d3-sankey/node_modules/d3-path": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@plotly/d3-sankey/node_modules/d3-shape": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-path": "1" } @@ -5066,7 +5073,6 @@ "resolved": "https://registry.npmjs.org/@plotly/mapbox-gl/-/mapbox-gl-1.13.4.tgz", "integrity": "sha512-sR3/Pe5LqT/fhYgp4rT4aSFf1rTsxMbGiH6Hojc7PH36ny5Bn17iVFUjpzycafETURuFbLZUfjODO8LvSI+5zQ==", "license": "SEE LICENSE IN LICENSE.txt", - "peer": true, "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/geojson-types": "^1.0.2", @@ -5100,7 +5106,6 @@ "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", "license": "BSD-3-Clause", - "peer": true, "peerDependencies": { "mapbox-gl": ">=0.32.1 <2.0.0" } @@ -5109,29 +5114,25 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==", - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/@plotly/mapbox-gl/node_modules/@mapbox/unitbezier": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/@plotly/mapbox-gl/node_modules/geojson-vt": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@plotly/mapbox-gl/node_modules/kdbush": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@plotly/mapbox-gl/node_modules/mapbox-gl": { "version": "1.13.3", @@ -5171,29 +5172,25 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@plotly/mapbox-gl/node_modules/quickselect": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@plotly/mapbox-gl/node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/@plotly/mapbox-gl/node_modules/supercluster": { "version": "7.1.5", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", "license": "ISC", - "peer": true, "dependencies": { "kdbush": "^3.0.0" } @@ -5202,15 +5199,13 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/@plotly/point-cluster": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz", "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==", "license": "MIT", - "peer": true, "dependencies": { "array-bounds": "^1.0.1", "binary-search-bounds": "^2.0.4", @@ -5228,8 +5223,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz", "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@popperjs/core": { "version": "2.11.8", @@ -6155,7 +6149,6 @@ "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.2.0.tgz", "integrity": "sha512-zuTTdQ4eoTI9nSSjerIy4QwgvxqwJVciQJ8tOPuMHbXJ9N/dNjI7bU8tasjhxas/Cx3NE9NxVHtNpYHL0FSzoA==", "license": "MIT", - "peer": true, "dependencies": { "@turf/helpers": "^7.2.0", "@turf/meta": "^7.2.0", @@ -6171,7 +6164,6 @@ "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.2.0.tgz", "integrity": "sha512-igzTdHsQc8TV1RhPuOLVo74Px/hyPrVgVOTgjWQZzt3J9BVseCdpfY/0cJBdlSRI4S/yTmmHl7gAqjhpYH5Yaw==", "license": "MIT", - "peer": true, "dependencies": { "@turf/helpers": "^7.2.0", "@types/geojson": "^7946.0.10" @@ -6185,7 +6177,6 @@ "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.2.0.tgz", "integrity": "sha512-wzHEjCXlYZiDludDbXkpBSmv8Zu6tPGLmJ1sXQ6qDwpLE1Ew3mcWqt8AaxfTP5QwDNQa3sf2vvgTEzNbPQkCiA==", "license": "MIT", - "peer": true, "dependencies": { "@turf/helpers": "^7.2.0", "@turf/meta": "^7.2.0", @@ -6201,7 +6192,6 @@ "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.2.0.tgz", "integrity": "sha512-igzTdHsQc8TV1RhPuOLVo74Px/hyPrVgVOTgjWQZzt3J9BVseCdpfY/0cJBdlSRI4S/yTmmHl7gAqjhpYH5Yaw==", "license": "MIT", - "peer": true, "dependencies": { "@turf/helpers": "^7.2.0", "@types/geojson": "^7946.0.10" @@ -6231,7 +6221,6 @@ "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.2.0.tgz", "integrity": "sha512-yJqDSw25T7P48au5KjvYqbDVZ7qVnipziVfZ9aSo7P2/jTE7d4BP21w0/XLi3T/9bry/t9PR1GDDDQljN4KfDw==", "license": "MIT", - "peer": true, "dependencies": { "@turf/helpers": "^7.2.0", "@turf/meta": "^7.2.0", @@ -6247,7 +6236,6 @@ "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.2.0.tgz", "integrity": "sha512-igzTdHsQc8TV1RhPuOLVo74Px/hyPrVgVOTgjWQZzt3J9BVseCdpfY/0cJBdlSRI4S/yTmmHl7gAqjhpYH5Yaw==", "license": "MIT", - "peer": true, "dependencies": { "@turf/helpers": "^7.2.0", "@types/geojson": "^7946.0.10" @@ -6461,6 +6449,7 @@ "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -6506,6 +6495,7 @@ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz", "integrity": "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==", "license": "MIT", + "peer": true, "dependencies": { "hoist-non-react-statics": "^3.3.0" }, @@ -6620,6 +6610,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.12.tgz", "integrity": "sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -6686,6 +6677,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -6842,6 +6834,7 @@ "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.2", "@typescript-eslint/types": "8.46.2", @@ -7460,8 +7453,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/acorn": { "version": "8.15.0", @@ -7469,6 +7461,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7510,6 +7503,7 @@ "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-33.3.2.tgz", "integrity": "sha512-9bx0e/+ykOyLvUxHqmdy0cRVANH6JAtv0yZdnBZEXYYqBAwN+G5a4NY+2I1KvoOCYzbk8SnStG7y4hCdVAAWOQ==", "license": "MIT", + "peer": true, "dependencies": { "ag-charts-types": "11.3.2" } @@ -7519,6 +7513,7 @@ "resolved": "https://registry.npmjs.org/ag-grid-react/-/ag-grid-react-33.3.2.tgz", "integrity": "sha512-5bv4JIJvGov23sduIUIyQTqpa/qhoQrRkQm5pFOQb7RMwusfx6xBPrkLwIIlCJiQ8g0OOinxWzZ2kQ2Zml6tLw==", "license": "MIT", + "peer": true, "dependencies": { "ag-grid-community": "33.3.2", "prop-types": "^15.8.1" @@ -7661,8 +7656,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-bounds/-/array-bounds-1.0.1.tgz", "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", @@ -7717,7 +7711,6 @@ "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz", "integrity": "sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==", "license": "MIT", - "peer": true, "dependencies": { "array-bounds": "^1.0.0" } @@ -7726,15 +7719,13 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz", "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/array-rearrange": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/array-rearrange/-/array-rearrange-2.2.2.tgz", "integrity": "sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/array.prototype.findlast": { "version": "1.2.5", @@ -8159,7 +8150,6 @@ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6.0" } @@ -8204,29 +8194,25 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/bit-twiddle": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/bitmap-sdf": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz", "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/bl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", "license": "MIT", - "peer": true, "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -8275,6 +8261,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001741", @@ -8416,7 +8403,6 @@ "resolved": "https://registry.npmjs.org/canvas-fit/-/canvas-fit-1.5.0.tgz", "integrity": "sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==", "license": "MIT", - "peer": true, "dependencies": { "element-size": "^1.1.1" } @@ -8497,8 +8483,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/classcat": { "version": "5.0.5", @@ -8593,7 +8578,6 @@ "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.4.tgz", "integrity": "sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==", "license": "MIT", - "peer": true, "dependencies": { "color-parse": "^1.3.8" } @@ -8603,7 +8587,6 @@ "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", "license": "MIT", - "peer": true, "dependencies": { "color-name": "^1.0.0" } @@ -8626,7 +8609,6 @@ "resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz", "integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==", "license": "MIT", - "peer": true, "dependencies": { "clamp": "^1.0.1" } @@ -8642,7 +8624,6 @@ "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz", "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==", "license": "MIT", - "peer": true, "dependencies": { "clamp": "^1.0.1", "color-rgba": "^2.1.1", @@ -8654,7 +8635,6 @@ "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", "license": "MIT", - "peer": true, "dependencies": { "color-name": "^1.0.0" } @@ -8664,7 +8644,6 @@ "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", "license": "MIT", - "peer": true, "dependencies": { "color-parse": "^1.4.2", "color-space": "^2.0.0" @@ -8675,7 +8654,6 @@ "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.0.tgz", "integrity": "sha512-g2Z+QnWsdHLppAbrpcFWo629kLOnOPtpxYV69GCqm92gqSgyXbzlfyN3MXs0412fPBkFmiuS+rXposgBgBa6Kg==", "license": "MIT", - "peer": true, "dependencies": { "color-name": "^1.0.0" } @@ -8685,7 +8663,6 @@ "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz", "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==", "license": "MIT", - "peer": true, "dependencies": { "color-parse": "^2.0.0", "color-space": "^2.0.0" @@ -8695,15 +8672,13 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.3.2.tgz", "integrity": "sha512-BcKnbOEsOarCwyoLstcoEztwT0IJxqqQkNwDuA3a65sICvvHL2yoeV13psoDFh5IuiOMnIOKdQDwB4Mk3BypiA==", - "license": "Unlicense", - "peer": true + "license": "Unlicense" }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/comment-parser": { "version": "1.4.1", @@ -8743,7 +8718,6 @@ "node >= 0.8" ], "license": "MIT", - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -8803,8 +8777,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "7.1.0", @@ -8835,8 +8808,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/country-regex/-/country-regex-1.1.0.tgz", "integrity": "sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/create-require": { "version": "1.1.1", @@ -8880,7 +8852,6 @@ "resolved": "https://registry.npmjs.org/css-font/-/css-font-1.2.0.tgz", "integrity": "sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==", "license": "MIT", - "peer": true, "dependencies": { "css-font-size-keywords": "^1.0.0", "css-font-stretch-keywords": "^1.0.1", @@ -8897,43 +8868,37 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/css-font-stretch-keywords": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/css-font-style-keywords": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/css-font-weight-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/css-global-keywords": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-global-keywords/-/css-global-keywords-1.0.1.tgz", "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/css-system-font-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/csscolorparser": { "version": "1.0.3", @@ -8959,14 +8924,14 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/d": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "license": "ISC", - "peer": true, "dependencies": { "es5-ext": "^0.10.64", "type": "^2.7.2" @@ -8991,8 +8956,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/d3-color": { "version": "3.1.0", @@ -9036,7 +9000,6 @@ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-collection": "1", "d3-dispatch": "1", @@ -9058,7 +9021,6 @@ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-array": "1" } @@ -9068,7 +9030,6 @@ "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz", "integrity": "sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "commander": "2", "d3-array": "1", @@ -9087,22 +9048,19 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/d3-geo/node_modules/d3-array": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/d3-hierarchy": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/d3-interpolate": { "version": "3.0.1", @@ -9129,8 +9087,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/d3-scale": { "version": "4.0.2", @@ -9153,6 +9110,7 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -9411,7 +9369,6 @@ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9420,8 +9377,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/detect-newline": { "version": "3.1.0", @@ -9507,7 +9463,6 @@ "resolved": "https://registry.npmjs.org/draw-svg-path/-/draw-svg-path-1.0.0.tgz", "integrity": "sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==", "license": "MIT", - "peer": true, "dependencies": { "abs-svg-path": "~0.1.1", "normalize-svg-path": "~0.1.0" @@ -9518,7 +9473,6 @@ "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8.0" } @@ -9541,15 +9495,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz", "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "license": "MIT", - "peer": true, "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -9581,15 +9533,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/element-size/-/element-size-1.1.1.tgz", "integrity": "sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/elementary-circuits-directed-graph": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz", "integrity": "sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==", "license": "MIT", - "peer": true, "dependencies": { "strongly-connected-components": "^1.0.1" } @@ -9619,7 +9569,6 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", - "peer": true, "dependencies": { "once": "^1.4.0" } @@ -9823,7 +9772,6 @@ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, "license": "ISC", - "peer": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -9839,7 +9787,6 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "license": "MIT", - "peer": true, "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -9851,7 +9798,6 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "license": "ISC", - "peer": true, "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" @@ -9865,7 +9811,6 @@ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "license": "ISC", - "peer": true, "dependencies": { "d": "1", "es5-ext": "^0.10.46", @@ -9948,7 +9893,6 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "license": "BSD-2-Clause", - "peer": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -9971,7 +9915,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "optional": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -9982,6 +9925,7 @@ "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -10121,6 +10065,7 @@ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -10162,6 +10107,7 @@ "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "debug": "^4.4.1", "eslint-import-context": "^0.1.8", @@ -10197,6 +10143,7 @@ "integrity": "sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/types": "^8.35.0", "comment-parser": "^1.4.1", @@ -10247,6 +10194,7 @@ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", @@ -10332,6 +10280,7 @@ "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -10365,6 +10314,7 @@ "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", @@ -10516,7 +10466,6 @@ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", "license": "ISC", - "peer": true, "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", @@ -10627,7 +10576,6 @@ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "license": "MIT", - "peer": true, "dependencies": { "d": "1", "es5-ext": "~0.10.14" @@ -10644,7 +10592,6 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.8.x" } @@ -10713,7 +10660,6 @@ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "license": "ISC", - "peer": true, "dependencies": { "type": "^2.7.2" } @@ -10735,7 +10681,6 @@ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", "license": "MIT", - "peer": true, "dependencies": { "acorn": "^7.1.1", "isarray": "^2.0.1" @@ -10749,7 +10694,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -10811,7 +10755,6 @@ "resolved": "https://registry.npmjs.org/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz", "integrity": "sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==", "license": "MIT", - "peer": true, "dependencies": { "is-string-blank": "^1.0.1" } @@ -10937,7 +10880,6 @@ "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", "license": "MIT", - "peer": true, "dependencies": { "dtype": "^2.0.0" } @@ -10947,7 +10889,6 @@ "resolved": "https://registry.npmjs.org/font-atlas/-/font-atlas-2.1.0.tgz", "integrity": "sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==", "license": "MIT", - "peer": true, "dependencies": { "css-font": "^1.0.0" } @@ -10957,7 +10898,6 @@ "resolved": "https://registry.npmjs.org/font-measure/-/font-measure-1.2.2.tgz", "integrity": "sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==", "license": "MIT", - "peer": true, "dependencies": { "css-font": "^1.2.0" } @@ -11012,7 +10952,6 @@ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -11120,8 +11059,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/get-intrinsic": { "version": "1.3.0", @@ -11225,8 +11163,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz", "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==", - "license": "Zlib", - "peer": true + "license": "Zlib" }, "node_modules/gl-matrix": { "version": "3.4.4", @@ -11239,7 +11176,6 @@ "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.4.0.tgz", "integrity": "sha512-o47+XBqLCj1efmuNyCHt7/UEJmB9l66ql7pnobD6p+sgmBUdzfMZXIF0zD2+KRfpd99DJN+QXdvTFAGCKCVSmQ==", "license": "MIT", - "peer": true, "dependencies": { "bit-twiddle": "^1.0.2", "color-normalize": "^1.5.0", @@ -11265,7 +11201,6 @@ "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.3.tgz", "integrity": "sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==", "license": "MIT", - "peer": true, "dependencies": { "is-browser": "^2.0.1", "is-firefox": "^1.0.3", @@ -11389,7 +11324,6 @@ "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", "license": "MIT", - "peer": true, "dependencies": { "glsl-token-inject-block": "^1.0.0", "glsl-token-string": "^1.0.1", @@ -11401,7 +11335,6 @@ "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", "license": "MIT", - "peer": true, "dependencies": { "resolve": "^0.6.1", "xtend": "^2.1.2" @@ -11411,14 +11344,12 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-resolve/node_modules/xtend": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", - "peer": true, "engines": { "node": ">=0.4" } @@ -11427,15 +11358,13 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-token-defines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", "license": "MIT", - "peer": true, "dependencies": { "glsl-tokenizer": "^2.0.0" } @@ -11444,15 +11373,13 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-token-descope": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", "license": "MIT", - "peer": true, "dependencies": { "glsl-token-assignments": "^2.0.0", "glsl-token-depth": "^1.1.0", @@ -11464,43 +11391,37 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-token-properties": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-token-scope": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-token-string": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-token-whitespace-trim": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-tokenizer": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", "license": "MIT", - "peer": true, "dependencies": { "through2": "^0.6.3" } @@ -11509,15 +11430,13 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-tokenizer/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "license": "MIT", - "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -11529,15 +11448,13 @@ "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/glsl-tokenizer/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "license": "MIT", - "peer": true, "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", "xtend": ">=4.0.0 <4.1.0-0" @@ -11548,7 +11465,6 @@ "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", "license": "MIT", - "peer": true, "dependencies": { "bl": "^2.2.1", "concat-stream": "^1.5.2", @@ -11575,7 +11491,6 @@ "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", "license": "MIT", - "peer": true, "dependencies": { "glsl-inject-defines": "^1.0.1", "glsl-token-defines": "^1.0.0", @@ -11594,7 +11509,6 @@ "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", "license": "ISC", - "peer": true, "dependencies": { "@choojs/findup": "^0.2.0", "events": "^3.2.0", @@ -11611,7 +11525,6 @@ "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz", "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==", "license": "MIT", - "peer": true, "peerDependencies": { "csstype": "^3.0.10" } @@ -11690,7 +11603,6 @@ "resolved": "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz", "integrity": "sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==", "license": "MIT", - "peer": true, "dependencies": { "is-browser": "^2.0.1" } @@ -11700,7 +11612,6 @@ "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz", "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==", "license": "MIT", - "peer": true, "dependencies": { "is-browser": "^2.0.1" } @@ -11882,7 +11793,6 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", - "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -12128,8 +12038,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/is-bun-module": { "version": "2.0.0", @@ -12253,7 +12162,6 @@ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" }, @@ -12266,7 +12174,6 @@ "resolved": "https://registry.npmjs.org/is-firefox/-/is-firefox-1.0.3.tgz", "integrity": "sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -12327,7 +12234,6 @@ "resolved": "https://registry.npmjs.org/is-iexplorer/-/is-iexplorer-1.0.0.tgz", "integrity": "sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -12348,8 +12254,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-4.0.0.tgz", "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/is-negative-zero": { "version": "2.0.3", @@ -12394,7 +12299,6 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -12404,7 +12308,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -12506,15 +12409,13 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz", "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/is-svg-path": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-svg-path/-/is-svg-path-1.0.2.tgz", "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/is-symbol": { "version": "1.1.1", @@ -13393,6 +13294,7 @@ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", @@ -13830,7 +13732,6 @@ "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", "license": "MIT", - "peer": true, "dependencies": { "once": "~1.3.0" } @@ -13840,7 +13741,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", "license": "ISC", - "peer": true, "dependencies": { "wrappy": "1" } @@ -13924,6 +13824,7 @@ "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -14003,7 +13904,6 @@ "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz", "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -14139,7 +14039,6 @@ "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz", "integrity": "sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==", "license": "MIT", - "peer": true, "dependencies": { "mouse-event": "^1.0.0" } @@ -14148,22 +14047,19 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz", "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/mouse-event-offset": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz", "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/mouse-wheel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz", "integrity": "sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==", "license": "MIT", - "peer": true, "dependencies": { "right-now": "^1.0.0", "signum": "^1.0.0", @@ -14246,8 +14142,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -14261,7 +14156,6 @@ "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "license": "MIT", - "peer": true, "dependencies": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -14279,7 +14173,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "license": "MIT", - "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -14288,8 +14181,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/no-case": { "version": "3.0.4", @@ -14367,15 +14259,13 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz", "integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/notistack": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/notistack/-/notistack-3.0.2.tgz", "integrity": "sha512-0R+/arLYbK5Hh7mEfR2adt0tyXJcCC9KkA2hc56FeWik2QN6Bm/S4uW+BjzDARsJth5u06nTjelSw/VSnB1YEA==", "license": "MIT", - "peer": true, "dependencies": { "clsx": "^1.1.0", "goober": "^2.0.33" @@ -14398,7 +14288,6 @@ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "license": "MIT", - "peer": true, "engines": { "node": ">=6" } @@ -14428,7 +14317,6 @@ "resolved": "https://registry.npmjs.org/number-is-integer/-/number-is-integer-1.0.1.tgz", "integrity": "sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==", "license": "MIT", - "peer": true, "dependencies": { "is-finite": "^1.0.1" }, @@ -14744,8 +14632,7 @@ "version": "3.1.8", "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/parse-json": { "version": "5.2.0", @@ -14770,7 +14657,6 @@ "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", "integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==", "license": "MIT", - "peer": true, "dependencies": { "pick-by-alias": "^1.2.0" } @@ -14779,15 +14665,13 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/parse-unit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/parse5": { "version": "7.3.0", @@ -14888,15 +14772,13 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/pick-by-alias": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", @@ -15001,7 +14883,6 @@ "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-3.1.0.tgz", "integrity": "sha512-vx+CyzApL9tquFpwoPHOGSIWDbFPsA4om/tXZcnsygGUejXideDF9R5VwkltEIDG7Xuof45quVPyz1otv6Aqjw==", "license": "MIT", - "peer": true, "dependencies": { "@plotly/d3": "3.8.2", "@plotly/d3-sankey": "0.7.2", @@ -15068,22 +14949,19 @@ "version": "1.4.5", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/plotly.js/node_modules/d3-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/plotly.js/node_modules/d3-time-format": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "d3-time": "1" } @@ -15092,8 +14970,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/point-in-polygon-hao": { "version": "1.2.4", @@ -15108,8 +14985,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/polybooljs/-/polybooljs-1.2.2.tgz", "integrity": "sha512-ziHW/02J0XuNuUtmidBc6GXE8YohYydp3DWPWXYsd7O721TjcmN+k6ezjdwkDqep+gnWnFY+yqZHvzElra2oCg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/possible-typed-array-names": { "version": "1.1.0", @@ -15171,6 +15047,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -15247,7 +15124,6 @@ "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", "license": "MIT", - "peer": true, "dependencies": { "lodash.merge": "^4.6.2", "needle": "^2.5.2", @@ -15258,8 +15134,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/prop-types": { "version": "15.8.1", @@ -15364,7 +15239,6 @@ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "license": "MIT", - "peer": true, "dependencies": { "performance-now": "^2.1.0" } @@ -15399,6 +15273,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -15423,6 +15298,7 @@ "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-16.0.1.tgz", "integrity": "sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==", "license": "MIT", + "peer": true, "dependencies": { "@react-dnd/invariant": "^4.0.1", "@react-dnd/shallowequal": "^4.0.1", @@ -15453,6 +15329,7 @@ "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-16.0.1.tgz", "integrity": "sha512-Wu3dw5aDJmOGw8WjH1I1/yTH+vlXEL4vmjk5p+MHxP8HuHJS1lAGeIdG/hze1AvNeXWo/JgULV87LyQOr+r5jw==", "license": "MIT", + "peer": true, "dependencies": { "dnd-core": "^16.0.1" } @@ -15462,6 +15339,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -15506,6 +15384,7 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", "license": "MIT", + "peer": true, "engines": { "node": ">=18.0.0" }, @@ -15522,6 +15401,7 @@ "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-7.1.11.tgz", "integrity": "sha512-tnVoRCWvW5Ie2ikYSdPF7z3+880yCe/9xPmitFeRPw3RYDcCfR4m8ZYa4MBq19W4adt9Z+PQA4FaMBCJ7E+HCQ==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "@formatjs/ecma402-abstract": "2.3.4", "@formatjs/icu-messageformat-parser": "2.11.2", @@ -15577,6 +15457,7 @@ "resolved": "https://registry.npmjs.org/react-papaparse/-/react-papaparse-4.4.0.tgz", "integrity": "sha512-xTEwHZYJ+1dh9mQDQjjwJXmWyX20DdZ52u+ddw75V+Xm5qsjXSvWmC7c8K82vRwMjKAOH2S9uFyGpHEyEztkUQ==", "license": "MIT", + "peer": true, "dependencies": { "@types/papaparse": "^5.3.9", "papaparse": "^5.4.1" @@ -15604,6 +15485,7 @@ "resolved": "https://registry.npmjs.org/react-querybuilder/-/react-querybuilder-8.11.1.tgz", "integrity": "sha512-zHAQLXNg2mFDse34Z0/sOEeafLOqSaH5UHSgWcwSr0t3Xuo+Z+KrvQOlnofwLjfX0CAQh+WZviAeQqEON2Gx4Q==", "license": "MIT", + "peer": true, "dependencies": { "@react-querybuilder/core": "^8.11.1", "@reduxjs/toolkit": "^2.9.1", @@ -15747,6 +15629,7 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.1.tgz", "integrity": "sha512-pfAByjcTpX55mqSDGwGnY9vDCpxqBLASg0BMNAuMmpSGESo/TaOUG6BllhAtAkCGx8Rnohik/XtaqiYUJtgW2g==", "license": "MIT", + "peer": true, "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" @@ -15894,7 +15777,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", - "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15909,8 +15791,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/readdir-scoped-modules": { "version": "1.1.0", @@ -15950,7 +15831,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -16065,15 +15947,13 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/regl/-/regl-2.1.1.tgz", "integrity": "sha512-+IOGrxl3FZ8ZM9ixCWQZzFRiRn7Rzn9bu3iFHwg/yz4tlOUQgbO4PHLgG+1ZT60zcIV8tief6Qrmyl8qcoJP0g==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/regl-error2d": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.12.tgz", "integrity": "sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==", "license": "MIT", - "peer": true, "dependencies": { "array-bounds": "^1.0.1", "color-normalize": "^1.5.0", @@ -16089,7 +15969,6 @@ "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.3.tgz", "integrity": "sha512-fkgzW+tTn4QUQLpFKsUIE0sgWdCmXAM3ctXcCgoGBZTSX5FE2A0M7aynz7nrZT5baaftLrk9te54B+MEq4QcSA==", "license": "MIT", - "peer": true, "dependencies": { "array-bounds": "^1.0.1", "array-find-index": "^1.0.2", @@ -16109,7 +15988,6 @@ "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.3.1.tgz", "integrity": "sha512-seOmMIVwaCwemSYz/y4WE0dbSO9svNFSqtTh5RE57I7PjGo3tcUYKtH0MTSoshcAsreoqN8HoCtnn8wfHXXfKQ==", "license": "MIT", - "peer": true, "dependencies": { "@plotly/point-cluster": "^3.1.9", "array-range": "^1.0.1", @@ -16133,7 +16011,6 @@ "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", "license": "MIT", - "peer": true, "dependencies": { "color-name": "^1.0.0" } @@ -16143,7 +16020,6 @@ "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz", "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==", "license": "MIT", - "peer": true, "dependencies": { "color-parse": "^1.4.2", "color-space": "^2.0.0" @@ -16154,7 +16030,6 @@ "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.14.tgz", "integrity": "sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==", "license": "MIT", - "peer": true, "dependencies": { "array-bounds": "^1.0.1", "array-range": "^1.0.1", @@ -16280,8 +16155,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/robust-predicates": { "version": "3.0.2", @@ -16295,6 +16169,7 @@ "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -16435,8 +16310,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/saxes": { "version": "6.0.0", @@ -16562,8 +16436,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -16677,8 +16550,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/signum/-/signum-1.0.0.tgz", "integrity": "sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", @@ -16917,7 +16789,6 @@ "version": "0.0.9", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==", - "peer": true, "engines": { "node": "*" } @@ -16950,7 +16821,6 @@ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", "license": "MIT", - "peer": true, "dependencies": { "escodegen": "^2.1.0" } @@ -16973,7 +16843,6 @@ "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", "license": "MIT", - "peer": true, "dependencies": { "debug": "2" } @@ -16983,7 +16852,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", - "peer": true, "dependencies": { "ms": "2.0.0" } @@ -16992,22 +16860,19 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -17031,7 +16896,6 @@ "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz", "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", "license": "MIT", - "peer": true, "dependencies": { "parenthesis": "^3.1.5" } @@ -17280,8 +17144,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz", "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/stylis": { "version": "4.2.0", @@ -17302,8 +17165,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/superscript-text/-/superscript-text-1.0.0.tgz", "integrity": "sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/supports-color": { "version": "7.2.0", @@ -17334,8 +17196,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/svg-parser": { "version": "2.0.4", @@ -17349,7 +17210,6 @@ "resolved": "https://registry.npmjs.org/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz", "integrity": "sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==", "license": "MIT", - "peer": true, "dependencies": { "abs-svg-path": "^0.1.1", "is-svg-path": "^1.0.1", @@ -17362,7 +17222,6 @@ "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", "license": "MIT", - "peer": true, "dependencies": { "svg-arc-to-cubic-bezier": "^3.0.0" } @@ -17372,7 +17231,6 @@ "resolved": "https://registry.npmjs.org/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz", "integrity": "sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==", "license": "MIT", - "peer": true, "dependencies": { "bitmap-sdf": "^1.0.0", "draw-svg-path": "^1.0.0", @@ -17470,7 +17328,6 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "license": "MIT", - "peer": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -17498,8 +17355,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", @@ -17542,6 +17398,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -17586,15 +17443,13 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/to-float32/-/to-float32-1.1.0.tgz", "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/to-px": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.0.1.tgz", "integrity": "sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==", "license": "MIT", - "peer": true, "dependencies": { "parse-unit": "^1.0.1" } @@ -17617,7 +17472,6 @@ "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", "license": "ISC", - "peer": true, "dependencies": { "commander": "2" }, @@ -17705,6 +17559,7 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -17774,8 +17629,7 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/type-check": { "version": "0.4.0", @@ -17899,15 +17753,13 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/typedarray-pool": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz", "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==", "license": "MIT", - "peer": true, "dependencies": { "bit-twiddle": "^1.0.0", "dup": "^1.0.0" @@ -17947,6 +17799,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17961,6 +17814,7 @@ "integrity": "sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/eslint-plugin": "8.46.2", "@typescript-eslint/parser": "8.46.2", @@ -18094,8 +17948,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/unrs-resolver": { "version": "1.11.1", @@ -18167,8 +18020,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/uri-js": { "version": "4.4.1", @@ -18193,8 +18045,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/util-extend": { "version": "1.0.3", @@ -18255,6 +18106,7 @@ "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -18527,6 +18379,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -18579,15 +18432,13 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==", - "license": "Apache-2.0", - "peer": true + "license": "Apache-2.0" }, "node_modules/webgl-context": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/webgl-context/-/webgl-context-2.2.0.tgz", "integrity": "sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==", "license": "MIT", - "peer": true, "dependencies": { "get-canvas-context": "^1.0.1" } @@ -18780,7 +18631,6 @@ "resolved": "https://registry.npmjs.org/world-calendars/-/world-calendars-1.0.4.tgz", "integrity": "sha512-VGRnLJS+xJmGDPodgJRnGIDwGu0s+Cr9V2HB3EzlDZ5n0qb8h5SJtGUEkjrphZYAglEiXZ6kiXdmk0H/h/uu/w==", "license": "MIT", - "peer": true, "dependencies": { "object-assign": "^4.1.0" } @@ -19050,6 +18900,7 @@ "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.0.tgz", "integrity": "sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q==", "license": "MIT", + "peer": true, "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", @@ -19075,6 +18926,7 @@ "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.js b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts similarity index 68% rename from src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.js rename to src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts index 639c46d96c..763e47a75c 100644 --- a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.js +++ b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts @@ -21,8 +21,9 @@ import { getConnectivityWithPositionEmptyFormData, getConnectivityWithPositionValidationSchema, } from '../../../connectivity/connectivity-form-utils'; +import { LineCharacteristics } from '../modification/line-modification-type'; -const characteristicsValidationSchema = (id, displayConnectivity, modification) => ({ +const characteristicsValidationSchema = (id: string, displayConnectivity: boolean, modification: boolean) => ({ [id]: yup.object().shape({ [R]: modification ? yup.number().nullable().min(0, 'mustBeGreaterOrEqualToZero') @@ -37,11 +38,15 @@ const characteristicsValidationSchema = (id, displayConnectivity, modification) }), }); -export const getCharacteristicsValidationSchema = (id, displayConnectivity, modification = false) => { +export const getCharacteristicsValidationSchema = ( + id: string, + displayConnectivity: boolean, + modification: boolean = false +) => { return characteristicsValidationSchema(id, displayConnectivity, modification); }; -const characteristicsEmptyFormData = (id, displayConnectivity = true) => ({ +const characteristicsEmptyFormData = (id: string, displayConnectivity: boolean = true) => ({ [id]: { [R]: null, [X]: null, @@ -54,12 +59,30 @@ const characteristicsEmptyFormData = (id, displayConnectivity = true) => ({ }, }); -export const getCharacteristicsEmptyFormData = (id = CHARACTERISTICS, displayConnectivity = true) => { +export const getCharacteristicsEmptyFormData = (id: string = CHARACTERISTICS, displayConnectivity: boolean = true) => { return characteristicsEmptyFormData(id, displayConnectivity); }; export const getCharacteristicsFormData = ( - { r = null, x = null, g1 = null, b1 = null, g2 = null, b2 = null, connectivity1 = null, connectivity2 = null }, + { + r, + x, + g1 = null, + b1 = null, + g2 = null, + b2 = null, + connectivity1 = null, + connectivity2 = null, + }: { + r: number; + x: number; + g1: number | null; + b1: number | null; + g2: number | null; + b2: number | null; + connectivity1: any; + connectivity2: any; + }, id = CHARACTERISTICS ) => ({ [id]: { @@ -74,7 +97,10 @@ export const getCharacteristicsFormData = ( }, }); -export const getCharacteristicsWithOutConnectivityFormData = ({ r, x, g1, b1, g2, b2 }, id = CHARACTERISTICS) => ({ +export const getCharacteristicsWithOutConnectivityFormData = ( + { r, x, g1, b1, g2, b2 }: LineCharacteristics, + id = CHARACTERISTICS +) => ({ [id]: { [R]: r, [X]: x, diff --git a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.jsx b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.tsx similarity index 99% rename from src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.jsx rename to src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.tsx index b744e37b53..62b969fa63 100644 --- a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.jsx +++ b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.tsx @@ -41,7 +41,7 @@ const LineCharacteristicsPane = ({ lineToModify, clearableFields = false, isModification = false, -}) => { +}: any) => { const currentNodeUuid = currentNode.id; const voltageLevelOptions = useVoltageLevelsListInfos(studyUuid, currentNodeUuid, currentRootNetworkUuid); diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.js b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.ts similarity index 80% rename from src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.js rename to src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.ts index 1b9e3d15d9..fb9aeb149b 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.js +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.ts @@ -8,7 +8,7 @@ import { EQUIPMENT_ID, EQUIPMENT_NAME, TAB_HEADER } from 'components/utils/field-constants'; import yup from 'components/utils/yup-config'; -const headerValidationSchema = (id) => ({ +const headerValidationSchema = (id: string) => ({ [id]: yup.object().shape({ [EQUIPMENT_ID]: yup.string().required(), [EQUIPMENT_NAME]: yup.string().nullable(), @@ -19,7 +19,7 @@ export const getHeaderValidationSchema = (id = TAB_HEADER) => { return headerValidationSchema(id); }; -const headerEmptyFormData = (id) => ({ +const headerEmptyFormData = (id: string) => ({ [id]: { [EQUIPMENT_ID]: '', [EQUIPMENT_NAME]: '', @@ -30,7 +30,10 @@ export const getHeaderEmptyFormData = (id = TAB_HEADER) => { return headerEmptyFormData(id); }; -export const getHeaderFormData = ({ equipmentId, equipmentName = '' }, id = TAB_HEADER) => ({ +export const getHeaderFormData = ( + { equipmentId, equipmentName = '' }: { equipmentId: string; equipmentName: string | null }, + id = TAB_HEADER +) => ({ [id]: { [EQUIPMENT_ID]: equipmentId, [EQUIPMENT_NAME]: equipmentName, diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.jsx b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx similarity index 69% rename from src/components/dialogs/network-modifications/line/creation/line-creation-dialog.jsx rename to src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx index b7305fede7..4b9c071fcc 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.jsx +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx @@ -9,6 +9,7 @@ import { convertInputValue, convertOutputValue, CustomFormProvider, + EquipmentType, FieldType, snackWithFallback, TextInput, @@ -17,6 +18,7 @@ import { import { yupResolver } from '@hookform/resolvers/yup'; import { Box, Grid } from '@mui/material'; import { + ADDITIONAL_PROPERTIES, B1, B2, BUS_OR_BUSBAR_SECTION, @@ -45,9 +47,8 @@ import { X, } from 'components/utils/field-constants'; import { EQUIPMENT_TYPES } from 'components/utils/equipment-types'; -import PropTypes from 'prop-types'; import { useCallback, useEffect, useState } from 'react'; -import { useForm } from 'react-hook-form'; +import { FieldErrors, useForm } from 'react-hook-form'; import { FetchStatus } from '../../../../../services/utils'; import { APPLICABILITY, FORM_LOADING_DELAY, UNDEFINED_CONNECTION_DIRECTION } from 'components/network/constants'; import yup from 'components/utils/yup-config'; @@ -66,6 +67,7 @@ import { LineCreationDialogTab, } from './line-creation-dialog-utils'; import { + formatOpLimitGroupsToFormInfos, getAllLimitsFormData, getLimitsEmptyFormData, getLimitsValidationSchema, @@ -83,19 +85,115 @@ import { creationPropertiesSchema, emptyProperties, getPropertiesFromModification, + Property, toModificationProperties, } from '../../common/properties/property-utils'; import GridItem from '../../../commons/grid-item'; import { formatCompleteCurrentLimit } from '../../../../utils/utils'; -import { LimitsPane } from '../../../limits/limits-pane.tsx'; +import { LimitsPane } from '../../../limits/limits-pane'; +import { UUID } from 'node:crypto'; +import { CurrentTreeNode } from '../../../../graph/tree-node.type'; +import { LineCreationInfo, OperationalLimitsGroup } from '../../../../../services/network-modification-types'; +import { LineModificationFormInfos } from '../modification/line-modification-type'; +import { CurrentLimitsInfo } from '../../../line-types-catalog/line-catalog.type'; +import { CurrentLimitsData } from '../../../../../services/study/network-map.type'; +import { DeepNullable } from '../../../../utils/ts-utils'; +import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; -const emptyFormData = { +interface LineCreationFormData { + [TAB_HEADER]: { + equipmentId: string; + equipmentName?: string | null; + }; + [CHARACTERISTICS]: { + r?: number | null; + x?: number | null; + b1?: number | null; + g1?: number | null; + b2?: number | null; + g2?: number | null; + [CONNECTIVITY_1]?: Connectivity; + [CONNECTIVITY_2]?: Connectivity; + }; + [LIMITS]: { + [OPERATIONAL_LIMITS_GROUPS]?: OperationalLimitsGroup[]; + [SELECTED_OPERATIONAL_LIMITS_GROUP_ID1]?: string | null; + [SELECTED_OPERATIONAL_LIMITS_GROUP_ID2]?: string | null; + }; + [ADDITIONAL_PROPERTIES]?: Property[]; + [key: string]: any; +} + +const emptyFormData: Partial = { ...getHeaderEmptyFormData(), ...getCharacteristicsEmptyFormData(), ...getLimitsEmptyFormData(false), ...emptyProperties, }; +interface ConnectablePosition { + connectionName: string | null; + connectionDirection: string | null; + connectionPosition: number | null; +} + +interface Limit { + id: string; + name: string; + applicability: string; + currentLimits: { + id: string; + permanentLimit: number; + temporaryLimits: { + name: string; + acceptableDuration: number; + value: number; + }[]; + }; +} + +interface LineInfo { + id: string; + name: string | null; + voltageLevelId1: string; + voltageLevelId2: string; + terminal1Connected: boolean; + terminal2Connected: boolean; + p1: number; + q1: number; + p2: number; + q2: number; + i1: number; + i2: number; + r: number; + x: number; + g1?: number; + b1?: number; + g2?: number; + b2?: number; + busOrBusbarSectionId1: string; + busOrBusbarSectionId2: string; + selectedOperationalLimitsGroupId1: string; + selectedOperationalLimitsGroupId2: string; + connectablePosition1: ConnectablePosition; + connectablePosition2: ConnectablePosition; + currentLimits: CurrentLimitsData[]; + properties: Record; +} + +interface LineCreationDialogProps { + // contains data when we try to edit an existing hypothesis from the current node's list + editData: LineCreationInfo | null | undefined; + studyUuid: UUID; + currentNode: CurrentTreeNode; + currentRootNetworkUuid: UUID; + onCreateLine: (line: LineCreationInfo) => Promise; + displayConnectivity?: boolean; + isUpdate: boolean; + editDataFetchStatus?: string; + //...dialogProps +} + /** * Dialog to create a line in the network * @param studyUuid the study we are currently working on @@ -118,12 +216,12 @@ const LineCreationDialog = ({ isUpdate, editDataFetchStatus, ...dialogProps -}) => { +}: LineCreationDialogProps) => { const currentNodeUuid = currentNode?.id; const { snackError } = useSnackMessage(); const [tabIndex, setTabIndex] = useState(LineCreationDialogTab.CHARACTERISTICS_TAB); - const [tabIndexesWithError, setTabIndexesWithError] = useState([]); + const [tabIndexesWithError, setTabIndexesWithError] = useState([]); const [isOpenLineTypesCatalogDialog, setIsOpenLineTypesCatalogDialog] = useState(false); @@ -141,62 +239,67 @@ const LineCreationDialog = ({ .concat(creationPropertiesSchema) .required(); - const formMethods = useForm({ + type LineCreationFormSchema = yup.InferType; + + const formMethods = useForm< + Omit, typeof ADDITIONAL_PROPERTIES> & { + [ADDITIONAL_PROPERTIES]?: Property[]; + } + >({ defaultValues: emptyFormData, - resolver: yupResolver(formSchema), + resolver: yupResolver>(formSchema), }); - const { reset, setValue } = formMethods; - const fromSearchCopyToFormValues = (line) => { - reset( - { - ...getHeaderFormData({ - equipmentId: line.id + '(1)', - equipmentName: line.name ?? '', - }), - ...getCharacteristicsFormData({ - r: line.r, - x: line.x, - g1: convertInputValue(FieldType.G1, line.g1), // this form uses and displays microSiemens - b1: convertInputValue(FieldType.B1, line.b1), - g2: convertInputValue(FieldType.G2, line.g2), - b2: convertInputValue(FieldType.B2, line.b2), - ...(displayConnectivity && - getConnectivityFormData( - { - voltageLevelId: line.voltageLevelId1, - busbarSectionId: line.busOrBusbarSectionId1, - connectionDirection: line.connectablePosition1.connectionDirection, - connectionName: line.connectablePosition1.connectionName, - }, - CONNECTIVITY_1 - )), - ...(displayConnectivity && - getConnectivityFormData( - { - voltageLevelId: line.voltageLevelId2, - busbarSectionId: line.busOrBusbarSectionId2, - connectionDirection: line.connectablePosition2.connectionDirection, - connectionName: line.connectablePosition2.connectionName, - }, - CONNECTIVITY_2 - )), - }), - ...getAllLimitsFormData( - formatCompleteCurrentLimit(line.currentLimits), - line.selectedOperationalLimitsGroupId1 ?? null, - line.selectedOperationalLimitsGroupId2 ?? null - ), - ...copyEquipmentPropertiesForCreation(line), - }, - { keepDefaultValues: true } - ); + const fromSearchCopyToFormValues = (line: LineInfo) => { + const formData = { + ...getHeaderFormData({ + equipmentId: line.id + '(1)', + equipmentName: line.name ?? '', + }), + ...getCharacteristicsFormData({ + r: line.r, + x: line.x, + g1: convertInputValue(FieldType.G1, line.g1), // this form uses and displays microSiemens + b1: convertInputValue(FieldType.B1, line.b1), + g2: convertInputValue(FieldType.G2, line.g2), + b2: convertInputValue(FieldType.B2, line.b2), + ...(getConnectivityFormData( + { + voltageLevelId: line.voltageLevelId1, + busbarSectionId: line.busOrBusbarSectionId1, + connectionDirection: line.connectablePosition1.connectionDirection, + connectionName: line.connectablePosition1.connectionName, + connectionPosition: line.connectablePosition1.connectionPosition, + terminalConnected: line.terminal1Connected, + }, + CONNECTIVITY_1 + ) as any), + ...(getConnectivityFormData( + { + voltageLevelId: line.voltageLevelId2, + busbarSectionId: line.busOrBusbarSectionId2, + connectionDirection: line.connectablePosition2.connectionDirection, + connectionName: line.connectablePosition2.connectionName, + connectionPosition: line.connectablePosition2.connectionPosition, + terminalConnected: line.terminal2Connected, + }, + CONNECTIVITY_2 + ) as any), + }), + ...getAllLimitsFormData( + formatCompleteCurrentLimit(line.currentLimits), + line.selectedOperationalLimitsGroupId1 ?? null, + line.selectedOperationalLimitsGroupId2 ?? null + ), + ...copyEquipmentPropertiesForCreation(line), + }; + reset(formData, { keepDefaultValues: true }); }; const fromEditDataToFormValues = useCallback( - (line) => { - reset({ + (line: LineCreationInfo) => { + const formData = { ...getHeaderFormData({ equipmentId: line.equipmentId, equipmentName: line.equipmentName, @@ -208,7 +311,7 @@ const LineCreationDialog = ({ b1: convertInputValue(FieldType.B1, line.b1), g2: convertInputValue(FieldType.G2, line.g2), b2: convertInputValue(FieldType.B2, line.b2), - ...getConnectivityFormData( + ...(getConnectivityFormData( { busbarSectionId: line.busOrBusbarSectionId1, connectionDirection: line.connectionDirection1, @@ -218,8 +321,8 @@ const LineCreationDialog = ({ terminalConnected: line.connected1, }, CONNECTIVITY_1 - ), - ...getConnectivityFormData( + ) as any), + ...(getConnectivityFormData( { busbarSectionId: line.busOrBusbarSectionId2, connectionDirection: line.connectionDirection2, @@ -229,19 +332,16 @@ const LineCreationDialog = ({ terminalConnected: line.connected2, }, CONNECTIVITY_2 - ), + ) as any), }), ...getAllLimitsFormData( - line?.operationalLimitsGroups?.map(({ id, ...baseData }) => ({ - ...baseData, - name: id, - id: id + baseData.applicability, - })), + formatOpLimitGroupsToFormInfos(line.operationalLimitsGroups), line?.selectedOperationalLimitsGroupId1 ?? null, line?.selectedOperationalLimitsGroupId2 ?? null ), ...getPropertiesFromModification(line.properties), - }); + }; + reset(formData, { keepDefaultValues: true }); }, [reset] ); @@ -254,7 +354,7 @@ const LineCreationDialog = ({ } }, [fromEditDataToFormValues, editData]); - const handleLineSegmentsBuildSubmit = (data) => { + const handleLineSegmentsBuildSubmit = (data: any) => { setValue(`${CHARACTERISTICS}.${R}`, data[TOTAL_RESISTANCE], { shouldDirty: true, }); @@ -267,8 +367,8 @@ const LineCreationDialog = ({ setValue(`${CHARACTERISTICS}.${B2}`, data[TOTAL_SUSCEPTANCE] / 2, { shouldDirty: true, }); - const finalLimits = []; - data[FINAL_CURRENT_LIMITS].forEach((item) => { + const finalLimits: Limit[] = []; + data[FINAL_CURRENT_LIMITS].forEach((item: CurrentLimitsInfo) => { const temporaryLimitsList = []; if (item.temporaryLimitValue) { temporaryLimitsList.push({ @@ -292,7 +392,7 @@ const LineCreationDialog = ({ }; const onSubmit = useCallback( - (line) => { + (line: any) => { const header = line[TAB_HEADER]; const characteristics = line[CHARACTERISTICS]; const limits = line[LIMITS]; @@ -311,7 +411,9 @@ const LineCreationDialog = ({ busOrBusbarSectionId1: characteristics[CONNECTIVITY_1]?.[BUS_OR_BUSBAR_SECTION]?.id, voltageLevelId2: characteristics[CONNECTIVITY_2]?.[VOLTAGE_LEVEL]?.id, busOrBusbarSectionId2: characteristics[CONNECTIVITY_2]?.[BUS_OR_BUSBAR_SECTION]?.id, - operationalLimitsGroups: sanitizeLimitsGroups(limits[OPERATIONAL_LIMITS_GROUPS]), + operationalLimitsGroups: sanitizeLimitsGroups( + limits[OPERATIONAL_LIMITS_GROUPS] + ) as OperationalLimitsGroup[], selectedOperationalLimitsGroupId1: limits[SELECTED_OPERATIONAL_LIMITS_GROUP_ID1], selectedOperationalLimitsGroupId2: limits[SELECTED_OPERATIONAL_LIMITS_GROUP_ID2], isUpdate: !!editData, @@ -334,7 +436,7 @@ const LineCreationDialog = ({ [editData, studyUuid, currentNodeUuid, snackError, onCreateLine] ); - const onValidationError = (errors) => { + const onValidationError = (errors: FieldErrors) => { let tabsInError = []; if (errors?.[CHARACTERISTICS] !== undefined) { tabsInError.push(LineCreationDialogTab.CHARACTERISTICS_TAB); @@ -429,7 +531,7 @@ const LineCreationDialog = ({ { - const LineDialogTab = isModification ? LineModificationDialogTab : LineCreationDialogTab; +interface LineDialogTabsProps { + tabIndex: number; + tabIndexesWithError: number[]; + setTabIndex: (index: number) => void; + isModification?: boolean; +} + +const LineDialogTabs = ({ + tabIndex, + tabIndexesWithError, + setTabIndex, + isModification = false, +}: LineDialogTabsProps) => { return ( } - sx={getTabStyle(tabIndexesWithError, LineDialogTab.CONNECTIVITY_TAB)} + sx={getTabStyle(tabIndexesWithError, LineModificationDialogTab.CONNECTIVITY_TAB)} /> )} } - sx={getTabStyle(tabIndexesWithError, LineDialogTab.CHARACTERISTICS_TAB)} + sx={getTabStyle( + tabIndexesWithError, + isModification + ? LineModificationDialogTab.CHARACTERISTICS_TAB + : LineCreationDialogTab.CHARACTERISTICS_TAB + )} /> } - sx={getTabStyle(tabIndexesWithError, LineDialogTab.LIMITS_TAB)} + sx={getTabStyle( + tabIndexesWithError, + isModification ? LineModificationDialogTab.LIMITS_TAB : LineCreationDialogTab.LIMITS_TAB + )} /> {isModification && ( } - sx={getTabStyle(tabIndexesWithError, LineDialogTab.STATE_ESTIMATION_TAB)} + sx={getTabStyle(tabIndexesWithError, LineModificationDialogTab.STATE_ESTIMATION_TAB)} /> )} diff --git a/src/components/dialogs/network-modifications/line/modification/line-modification-type.ts b/src/components/dialogs/network-modifications/line/modification/line-modification-type.ts index 95e2a7c69f..8baf4eaa81 100644 --- a/src/components/dialogs/network-modifications/line/modification/line-modification-type.ts +++ b/src/components/dialogs/network-modifications/line/modification/line-modification-type.ts @@ -10,6 +10,15 @@ import type { UUID } from 'node:crypto'; import { Property } from '../../common/properties/property-utils'; import { OperationalLimitsGroupsFormSchema } from '../../../limits/operational-limits-groups-types'; +export interface LineCharacteristics { + r: number | null; + x: number | null; + g1: number | null; + b1: number | null; + g2: number | null; + b2: number | null; +} + export interface LineModificationFormInfos { equipmentId?: string; equipmentName?: string; @@ -18,12 +27,12 @@ export interface LineModificationFormInfos { modificationUuid: string; lineId: string; lineName: string | null; - r: number; - x: number; - g1: number; - b1: number; - g2: number; - b2: number; + r: number | null; + x: number | null; + g1: number | null; + b1: number | null; + g2: number | null; + b2: number | null; operationalLimitsGroups: OperationalLimitsGroup[]; selectedOperationalLimitsGroupId1: string | null; selectedOperationalLimitsGroupId2: string | null; diff --git a/src/services/network-modification-types.ts b/src/services/network-modification-types.ts index db9dc6c2c6..7927acdd9e 100644 --- a/src/services/network-modification-types.ts +++ b/src/services/network-modification-types.ts @@ -533,6 +533,7 @@ export interface ShuntCompensatorCreationInfo { } export interface LineCreationInfo { + uuid?: string | null; studyUuid: string; nodeUuid: UUID; equipmentId: string; @@ -551,13 +552,13 @@ export interface LineCreationInfo { selectedOperationalLimitsGroupId1: string; selectedOperationalLimitsGroupId2: string; isUpdate: boolean; - modificationUuid: string; + modificationUuid?: string | null; connectionName1: string | null; connectionDirection1: string | null; connectionName2: string | null; connectionDirection2: string | null; - connectionPosition1: string | null; - connectionPosition2: string | null; + connectionPosition1: number | null; + connectionPosition2: number | null; connected1: boolean; connected2: boolean; properties: Property[] | null; diff --git a/src/services/study/network-modifications.ts b/src/services/study/network-modifications.ts index e7dc3a97fa..d53ce96d99 100644 --- a/src/services/study/network-modifications.ts +++ b/src/services/study/network-modifications.ts @@ -791,7 +791,7 @@ export function createLine({ }: LineCreationInfo) { let createLineUrl = getNetworkModificationUrl(studyUuid, nodeUuid); - if (isUpdate) { + if (modificationUuid) { createLineUrl += '/' + encodeURIComponent(modificationUuid); console.info('Updating line creation'); } else { From 6d0f8c8535587376adedd3ef551a3cf3158dfde5 Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Fri, 9 Jan 2026 16:56:03 +0100 Subject: [PATCH 2/9] Add type for connectivity in getCharacteristicsFormData function Signed-off-by: Franck LECUYER --- .../characteristics-pane/line-characteristics-pane-utils.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts index 763e47a75c..0cb8b71281 100644 --- a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts +++ b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts @@ -22,6 +22,7 @@ import { getConnectivityWithPositionValidationSchema, } from '../../../connectivity/connectivity-form-utils'; import { LineCharacteristics } from '../modification/line-modification-type'; +import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; const characteristicsValidationSchema = (id: string, displayConnectivity: boolean, modification: boolean) => ({ [id]: yup.object().shape({ @@ -80,8 +81,8 @@ export const getCharacteristicsFormData = ( b1: number | null; g2: number | null; b2: number | null; - connectivity1: any; - connectivity2: any; + connectivity1: Connectivity | null; + connectivity2: Connectivity | null; }, id = CHARACTERISTICS ) => ({ From ec232c9907b728c2e5fd1672616aeec0cee9f27b Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Mon, 12 Jan 2026 09:37:45 +0100 Subject: [PATCH 3/9] Add interface for LineCharacteristicsPane Signed-off-by: Franck LECUYER --- .../line-characteristics-pane.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.tsx b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.tsx index 62b969fa63..3ee8b049f6 100644 --- a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.tsx +++ b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane.tsx @@ -24,6 +24,8 @@ import PropertiesForm from '../../common/properties/properties-form'; import useVoltageLevelsListInfos from '../../../../../hooks/use-voltage-levels-list-infos'; import GridSection from '../../../commons/grid-section'; import GridItem from '../../../commons/grid-item'; +import { UUID } from 'node:crypto'; +import { CurrentTreeNode } from '../../../../graph/tree-node.type'; const styles = { h3: { @@ -32,6 +34,16 @@ const styles = { }, }; +interface LineCharacteristicsPaneProps { + id?: string; + studyUuid: UUID; + currentNode: CurrentTreeNode; + currentRootNetworkUuid: UUID; + displayConnectivity: boolean; + lineToModify?: any; + clearableFields?: boolean; + isModification?: boolean; +} const LineCharacteristicsPane = ({ id = CHARACTERISTICS, studyUuid, @@ -41,7 +53,7 @@ const LineCharacteristicsPane = ({ lineToModify, clearableFields = false, isModification = false, -}: any) => { +}: LineCharacteristicsPaneProps) => { const currentNodeUuid = currentNode.id; const voltageLevelOptions = useVoltageLevelsListInfos(studyUuid, currentNodeUuid, currentRootNetworkUuid); From 1dc9a8e9d37457d40c4a4e933d8d442269e5e90a Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Tue, 13 Jan 2026 14:40:06 +0100 Subject: [PATCH 4/9] Fix pb with temporary limits not properly displayed Signed-off-by: Franck LECUYER --- .../line/creation/line-creation-dialog.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx index 4b9c071fcc..29d48b588b 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx @@ -67,7 +67,6 @@ import { LineCreationDialogTab, } from './line-creation-dialog-utils'; import { - formatOpLimitGroupsToFormInfos, getAllLimitsFormData, getLimitsEmptyFormData, getLimitsValidationSchema, @@ -99,6 +98,7 @@ import { CurrentLimitsInfo } from '../../../line-types-catalog/line-catalog.type import { CurrentLimitsData } from '../../../../../services/study/network-map.type'; import { DeepNullable } from '../../../../utils/ts-utils'; import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; +import { OperationalLimitsGroupFormSchema } from '../../../limits/operational-limits-groups-types'; interface LineCreationFormData { [TAB_HEADER]: { @@ -335,7 +335,11 @@ const LineCreationDialog = ({ ) as any), }), ...getAllLimitsFormData( - formatOpLimitGroupsToFormInfos(line.operationalLimitsGroups), + line?.operationalLimitsGroups?.map(({ id, ...baseData }) => ({ + ...baseData, + name: id, + id: id + baseData.applicability, + })) as OperationalLimitsGroupFormSchema[], line?.selectedOperationalLimitsGroupId1 ?? null, line?.selectedOperationalLimitsGroupId2 ?? null ), From 2355de8507e1d7f3347c35cafd7461fb5e202a6a Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Tue, 13 Jan 2026 15:12:27 +0100 Subject: [PATCH 5/9] Add interface for onSubmit parameter Signed-off-by: Franck LECUYER --- .../line/creation/line-creation-dialog.tsx | 54 ++++++++++++++++++- src/services/network-modification-types.ts | 4 +- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx index 29d48b588b..8862624c8e 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx @@ -98,7 +98,10 @@ import { CurrentLimitsInfo } from '../../../line-types-catalog/line-catalog.type import { CurrentLimitsData } from '../../../../../services/study/network-map.type'; import { DeepNullable } from '../../../../utils/ts-utils'; import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; -import { OperationalLimitsGroupFormSchema } from '../../../limits/operational-limits-groups-types'; +import { + OperationalLimitsGroupFormSchema, + OperationalLimitsGroupsFormSchema, +} from '../../../limits/operational-limits-groups-types'; interface LineCreationFormData { [TAB_HEADER]: { @@ -181,6 +184,53 @@ interface LineInfo { properties: Record; } +interface LineCreationFormInfos { + tabHeader: { + equipmentId: string; + equipmentName?: string; + }; + studyUuid: string; + nodeUuid: UUID; + modificationUuid: string; + lineId: string; + lineName: string | null; + r: number | null; + x: number | null; + g1: number | null; + b1: number | null; + g2: number | null; + b2: number | null; + operationalLimitsGroups: OperationalLimitsGroup[]; + selectedOperationalLimitsGroupId1: string | null; + selectedOperationalLimitsGroupId2: string | null; + voltageLevelId1: string; + busOrBusbarSectionId1: string; + voltageLevelId2: string; + busOrBusbarSectionId2: string; + connectionName1: string | null; + connectionName2: string | null; + connectionDirection1: string | null; + connectionDirection2: string | null; + connectionPosition1: string | null; + connectionPosition2: string | null; + connected1: boolean; + connected2: boolean; + properties: Property[] | null | undefined; + p1MeasurementValue: number | null; + p1MeasurementValidity: boolean | null; + q1MeasurementValue: number | null; + q1MeasurementValidity: boolean | null; + p2MeasurementValue: number | null; + p2MeasurementValidity: boolean | null; + q2MeasurementValue: number | null; + q2MeasurementValidity: boolean | null; + connectivity: any; + AdditionalProperties: any; + characteristics: any; + stateEstimation: any; + limits: OperationalLimitsGroupsFormSchema; +} + interface LineCreationDialogProps { // contains data when we try to edit an existing hypothesis from the current node's list editData: LineCreationInfo | null | undefined; @@ -396,7 +446,7 @@ const LineCreationDialog = ({ }; const onSubmit = useCallback( - (line: any) => { + (line: LineCreationFormInfos) => { const header = line[TAB_HEADER]; const characteristics = line[CHARACTERISTICS]; const limits = line[LIMITS]; diff --git a/src/services/network-modification-types.ts b/src/services/network-modification-types.ts index 7927acdd9e..292e02388a 100644 --- a/src/services/network-modification-types.ts +++ b/src/services/network-modification-types.ts @@ -549,8 +549,8 @@ export interface LineCreationInfo { voltageLevelId2: string; busOrBusbarSectionId2: string; operationalLimitsGroups: OperationalLimitsGroup[]; - selectedOperationalLimitsGroupId1: string; - selectedOperationalLimitsGroupId2: string; + selectedOperationalLimitsGroupId1?: string; + selectedOperationalLimitsGroupId2?: string; isUpdate: boolean; modificationUuid?: string | null; connectionName1: string | null; From 8ded4e0944d525358687cff845818b6a6122c151 Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Tue, 13 Jan 2026 15:22:47 +0100 Subject: [PATCH 6/9] Remove some casts to any Signed-off-by: Franck LECUYER --- .../line/creation/line-creation-dialog.tsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx index 8862624c8e..2dbaff2741 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx @@ -307,6 +307,7 @@ const LineCreationDialog = ({ equipmentId: line.id + '(1)', equipmentName: line.name ?? '', }), + // @ts-ignore ...getCharacteristicsFormData({ r: line.r, x: line.x, @@ -314,7 +315,7 @@ const LineCreationDialog = ({ b1: convertInputValue(FieldType.B1, line.b1), g2: convertInputValue(FieldType.G2, line.g2), b2: convertInputValue(FieldType.B2, line.b2), - ...(getConnectivityFormData( + ...getConnectivityFormData( { voltageLevelId: line.voltageLevelId1, busbarSectionId: line.busOrBusbarSectionId1, @@ -324,8 +325,8 @@ const LineCreationDialog = ({ terminalConnected: line.terminal1Connected, }, CONNECTIVITY_1 - ) as any), - ...(getConnectivityFormData( + ), + ...getConnectivityFormData( { voltageLevelId: line.voltageLevelId2, busbarSectionId: line.busOrBusbarSectionId2, @@ -335,7 +336,7 @@ const LineCreationDialog = ({ terminalConnected: line.terminal2Connected, }, CONNECTIVITY_2 - ) as any), + ), }), ...getAllLimitsFormData( formatCompleteCurrentLimit(line.currentLimits), @@ -354,6 +355,7 @@ const LineCreationDialog = ({ equipmentId: line.equipmentId, equipmentName: line.equipmentName, }), + // @ts-ignore ...getCharacteristicsFormData({ r: line.r, x: line.x, @@ -361,7 +363,7 @@ const LineCreationDialog = ({ b1: convertInputValue(FieldType.B1, line.b1), g2: convertInputValue(FieldType.G2, line.g2), b2: convertInputValue(FieldType.B2, line.b2), - ...(getConnectivityFormData( + ...getConnectivityFormData( { busbarSectionId: line.busOrBusbarSectionId1, connectionDirection: line.connectionDirection1, @@ -371,8 +373,8 @@ const LineCreationDialog = ({ terminalConnected: line.connected1, }, CONNECTIVITY_1 - ) as any), - ...(getConnectivityFormData( + ), + ...getConnectivityFormData( { busbarSectionId: line.busOrBusbarSectionId2, connectionDirection: line.connectionDirection2, @@ -382,7 +384,7 @@ const LineCreationDialog = ({ terminalConnected: line.connected2, }, CONNECTIVITY_2 - ) as any), + ), }), ...getAllLimitsFormData( line?.operationalLimitsGroups?.map(({ id, ...baseData }) => ({ From fc4bf1449d6c6fbc9fd49a5386121a4194152586 Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Tue, 13 Jan 2026 15:48:52 +0100 Subject: [PATCH 7/9] Fix sonar issue on duplicated lines Signed-off-by: Franck LECUYER --- .../line/creation/line-creation-dialog.tsx | 47 +------------------ 1 file changed, 2 insertions(+), 45 deletions(-) diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx index 2dbaff2741..b91f5b925b 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx @@ -98,10 +98,7 @@ import { CurrentLimitsInfo } from '../../../line-types-catalog/line-catalog.type import { CurrentLimitsData } from '../../../../../services/study/network-map.type'; import { DeepNullable } from '../../../../utils/ts-utils'; import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; -import { - OperationalLimitsGroupFormSchema, - OperationalLimitsGroupsFormSchema, -} from '../../../limits/operational-limits-groups-types'; +import { OperationalLimitsGroupFormSchema } from '../../../limits/operational-limits-groups-types'; interface LineCreationFormData { [TAB_HEADER]: { @@ -184,51 +181,11 @@ interface LineInfo { properties: Record; } -interface LineCreationFormInfos { +interface LineCreationFormInfos extends LineModificationFormInfos { tabHeader: { equipmentId: string; equipmentName?: string; }; - studyUuid: string; - nodeUuid: UUID; - modificationUuid: string; - lineId: string; - lineName: string | null; - r: number | null; - x: number | null; - g1: number | null; - b1: number | null; - g2: number | null; - b2: number | null; - operationalLimitsGroups: OperationalLimitsGroup[]; - selectedOperationalLimitsGroupId1: string | null; - selectedOperationalLimitsGroupId2: string | null; - voltageLevelId1: string; - busOrBusbarSectionId1: string; - voltageLevelId2: string; - busOrBusbarSectionId2: string; - connectionName1: string | null; - connectionName2: string | null; - connectionDirection1: string | null; - connectionDirection2: string | null; - connectionPosition1: string | null; - connectionPosition2: string | null; - connected1: boolean; - connected2: boolean; - properties: Property[] | null | undefined; - p1MeasurementValue: number | null; - p1MeasurementValidity: boolean | null; - q1MeasurementValue: number | null; - q1MeasurementValidity: boolean | null; - p2MeasurementValue: number | null; - p2MeasurementValidity: boolean | null; - q2MeasurementValue: number | null; - q2MeasurementValidity: boolean | null; - connectivity: any; - AdditionalProperties: any; - characteristics: any; - stateEstimation: any; - limits: OperationalLimitsGroupsFormSchema; } interface LineCreationDialogProps { From 71967d72f9d235c0dc4500054ec05400adfa2858 Mon Sep 17 00:00:00 2001 From: Franck LECUYER Date: Mon, 19 Jan 2026 13:24:43 +0100 Subject: [PATCH 8/9] Move interfaces in separate file Signed-off-by: Franck LECUYER --- .../line/creation/line-creation-dialog.tsx | 84 +------------- .../line/creation/line-creation-type.ts | 104 ++++++++++++++++++ 2 files changed, 105 insertions(+), 83 deletions(-) create mode 100644 src/components/dialogs/network-modifications/line/creation/line-creation-type.ts diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx index b91f5b925b..e0ed365269 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx @@ -95,34 +95,9 @@ import { CurrentTreeNode } from '../../../../graph/tree-node.type'; import { LineCreationInfo, OperationalLimitsGroup } from '../../../../../services/network-modification-types'; import { LineModificationFormInfos } from '../modification/line-modification-type'; import { CurrentLimitsInfo } from '../../../line-types-catalog/line-catalog.type'; -import { CurrentLimitsData } from '../../../../../services/study/network-map.type'; import { DeepNullable } from '../../../../utils/ts-utils'; -import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; import { OperationalLimitsGroupFormSchema } from '../../../limits/operational-limits-groups-types'; - -interface LineCreationFormData { - [TAB_HEADER]: { - equipmentId: string; - equipmentName?: string | null; - }; - [CHARACTERISTICS]: { - r?: number | null; - x?: number | null; - b1?: number | null; - g1?: number | null; - b2?: number | null; - g2?: number | null; - [CONNECTIVITY_1]?: Connectivity; - [CONNECTIVITY_2]?: Connectivity; - }; - [LIMITS]: { - [OPERATIONAL_LIMITS_GROUPS]?: OperationalLimitsGroup[]; - [SELECTED_OPERATIONAL_LIMITS_GROUP_ID1]?: string | null; - [SELECTED_OPERATIONAL_LIMITS_GROUP_ID2]?: string | null; - }; - [ADDITIONAL_PROPERTIES]?: Property[]; - [key: string]: any; -} +import { Limit, LineCreationFormData, LineCreationFormInfos, LineInfo } from './line-creation-type'; const emptyFormData: Partial = { ...getHeaderEmptyFormData(), @@ -131,63 +106,6 @@ const emptyFormData: Partial = { ...emptyProperties, }; -interface ConnectablePosition { - connectionName: string | null; - connectionDirection: string | null; - connectionPosition: number | null; -} - -interface Limit { - id: string; - name: string; - applicability: string; - currentLimits: { - id: string; - permanentLimit: number; - temporaryLimits: { - name: string; - acceptableDuration: number; - value: number; - }[]; - }; -} - -interface LineInfo { - id: string; - name: string | null; - voltageLevelId1: string; - voltageLevelId2: string; - terminal1Connected: boolean; - terminal2Connected: boolean; - p1: number; - q1: number; - p2: number; - q2: number; - i1: number; - i2: number; - r: number; - x: number; - g1?: number; - b1?: number; - g2?: number; - b2?: number; - busOrBusbarSectionId1: string; - busOrBusbarSectionId2: string; - selectedOperationalLimitsGroupId1: string; - selectedOperationalLimitsGroupId2: string; - connectablePosition1: ConnectablePosition; - connectablePosition2: ConnectablePosition; - currentLimits: CurrentLimitsData[]; - properties: Record; -} - -interface LineCreationFormInfos extends LineModificationFormInfos { - tabHeader: { - equipmentId: string; - equipmentName?: string; - }; -} - interface LineCreationDialogProps { // contains data when we try to edit an existing hypothesis from the current node's list editData: LineCreationInfo | null | undefined; diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-type.ts b/src/components/dialogs/network-modifications/line/creation/line-creation-type.ts new file mode 100644 index 0000000000..708e6e67bb --- /dev/null +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-type.ts @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +import { OperationalLimitsGroup } from '../../../../../services/network-modification-types'; +import { Property } from '../../common/properties/property-utils'; +import { + ADDITIONAL_PROPERTIES, + CHARACTERISTICS, + CONNECTIVITY_1, + CONNECTIVITY_2, + LIMITS, + OPERATIONAL_LIMITS_GROUPS, + SELECTED_OPERATIONAL_LIMITS_GROUP_ID1, + SELECTED_OPERATIONAL_LIMITS_GROUP_ID2, + TAB_HEADER, +} from 'components/utils/field-constants'; +import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; +import { CurrentLimitsData } from '../../../../../services/study/network-map.type'; +import { LineModificationFormInfos } from '../modification/line-modification-type'; + +export interface LineCreationFormData { + [TAB_HEADER]: { + equipmentId: string; + equipmentName?: string | null; + }; + [CHARACTERISTICS]: { + r?: number | null; + x?: number | null; + b1?: number | null; + g1?: number | null; + b2?: number | null; + g2?: number | null; + [CONNECTIVITY_1]?: Connectivity; + [CONNECTIVITY_2]?: Connectivity; + }; + [LIMITS]: { + [OPERATIONAL_LIMITS_GROUPS]?: OperationalLimitsGroup[]; + [SELECTED_OPERATIONAL_LIMITS_GROUP_ID1]?: string | null; + [SELECTED_OPERATIONAL_LIMITS_GROUP_ID2]?: string | null; + }; + [ADDITIONAL_PROPERTIES]?: Property[]; + [key: string]: any; +} + +export interface ConnectablePosition { + connectionName: string | null; + connectionDirection: string | null; + connectionPosition: number | null; +} + +export interface Limit { + id: string; + name: string; + applicability: string; + currentLimits: { + id: string; + permanentLimit: number; + temporaryLimits: { + name: string; + acceptableDuration: number; + value: number; + }[]; + }; +} + +export interface LineInfo { + id: string; + name: string | null; + voltageLevelId1: string; + voltageLevelId2: string; + terminal1Connected: boolean; + terminal2Connected: boolean; + p1: number; + q1: number; + p2: number; + q2: number; + i1: number; + i2: number; + r: number; + x: number; + g1?: number; + b1?: number; + g2?: number; + b2?: number; + busOrBusbarSectionId1: string; + busOrBusbarSectionId2: string; + selectedOperationalLimitsGroupId1: string; + selectedOperationalLimitsGroupId2: string; + connectablePosition1: ConnectablePosition; + connectablePosition2: ConnectablePosition; + currentLimits: CurrentLimitsData[]; + properties: Record; +} + +export interface LineCreationFormInfos extends LineModificationFormInfos { + tabHeader: { + equipmentId: string; + equipmentName?: string; + }; +} From 42a9ddbe0e3eadfa7f4db8e638a1590ee697ce08 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 19 Jan 2026 17:25:35 +0100 Subject: [PATCH 9/9] TS Migration Line Creation (Thang) Signed-off-by: Thang PHAM --- .../connectivity/connectivity-form-utils.ts | 27 +- .../dialogs/limits/limits-pane-utils.ts | 35 ++- .../limits/operational-limits-groups-types.ts | 2 +- .../line-types-catalog/line-catalog.type.ts | 1 + .../line-attach-to-voltage-level-dialog.jsx | 26 +- .../line-characteristics-pane-utils.ts | 45 +-- .../creation/line-creation-dialog-utils.ts | 30 +- .../line/creation/line-creation-dialog.tsx | 256 +++++++++--------- .../modification/line-modification-dialog.tsx | 3 +- src/services/network-modification-types.ts | 9 +- src/services/study/network-modifications.ts | 65 +---- 11 files changed, 243 insertions(+), 256 deletions(-) diff --git a/src/components/dialogs/connectivity/connectivity-form-utils.ts b/src/components/dialogs/connectivity/connectivity-form-utils.ts index aa6249a42a..a505c50636 100644 --- a/src/components/dialogs/connectivity/connectivity-form-utils.ts +++ b/src/components/dialogs/connectivity/connectivity-form-utils.ts @@ -176,7 +176,7 @@ export const getConnectivityData = ( }; }; -export const getConnectivityFormData = ( +export const getConnectivityFormData = ( { voltageLevelId, busbarSectionId, @@ -194,20 +194,21 @@ export const getConnectivityFormData = ( terminalConnected?: boolean | null; isEquipmentModification?: boolean; }, - id = CONNECTIVITY + id: T = CONNECTIVITY as T ) => { - return { - [id]: { - ...getConnectivityPropertiesData({ - voltageLevelId, - busbarSectionId, - }), - [CONNECTION_DIRECTION]: connectionDirection ?? null, - [CONNECTION_NAME]: connectionName ?? '', - [CONNECTION_POSITION]: connectionPosition ?? null, - [CONNECTED]: terminalConnected ?? (isEquipmentModification ? null : true), - }, + const connectivityData = { + ...getConnectivityPropertiesData({ + voltageLevelId, + busbarSectionId, + }), + [CONNECTION_DIRECTION]: connectionDirection ?? null, + [CONNECTION_NAME]: connectionName ?? '', + [CONNECTION_POSITION]: connectionPosition ?? null, + [CONNECTED]: terminalConnected ?? (isEquipmentModification ? null : true), }; + return { + [id]: connectivityData, + } as Record; }; export const createConnectivityData = (equipmentToModify: any, index: number) => ({ diff --git a/src/components/dialogs/limits/limits-pane-utils.ts b/src/components/dialogs/limits/limits-pane-utils.ts index b550923a1e..fdb0410ee0 100644 --- a/src/components/dialogs/limits/limits-pane-utils.ts +++ b/src/components/dialogs/limits/limits-pane-utils.ts @@ -133,17 +133,21 @@ function hasDuplicateOperationalLimitsGroups(context: TestContext) { return !isDuplicate; } -const limitsValidationSchemaCreation = (id: string) => { - const completeLimitsGroupSchema = { +const limitsValidationSchemaCreation = (id: T) => { + const completeLimitsGroupSchemaShape = { [OPERATIONAL_LIMITS_GROUPS]: yup.array(yup.object().shape(limitsGroupValidationSchema())).required(), [SELECTED_OPERATIONAL_LIMITS_GROUP_ID1]: yup.string().nullable(), [SELECTED_OPERATIONAL_LIMITS_GROUP_ID2]: yup.string().nullable(), [ENABLE_OLG_MODIFICATION]: yup.boolean(), }; - return { [id]: yup.object().shape(completeLimitsGroupSchema) }; + const completeLimitsGroupsSchema = yup.object().shape(completeLimitsGroupSchemaShape); + return { [id]: completeLimitsGroupsSchema } as Record< + T, + yup.ObjectSchema> + >; }; -export const getLimitsValidationSchema = (id: string = LIMITS) => { +export const getLimitsValidationSchema = (id: T = LIMITS as T) => { return limitsValidationSchemaCreation(id); }; @@ -190,21 +194,22 @@ export const formatOpLimitGroupsToFormInfos = ( }); }; -export const getAllLimitsFormData = ( +export const getAllLimitsFormData = ( operationalLimitsGroups: OperationalLimitsGroupFormSchema[] = [], selectedOperationalLimitsGroupId1: string | null = null, selectedOperationalLimitsGroupId2: string | null = null, enableOLGModification: boolean | null = true, - id = LIMITS + id: T = LIMITS as T ) => { - return { - [id]: { - [OPERATIONAL_LIMITS_GROUPS]: operationalLimitsGroups, - [SELECTED_OPERATIONAL_LIMITS_GROUP_ID1]: selectedOperationalLimitsGroupId1, - [SELECTED_OPERATIONAL_LIMITS_GROUP_ID2]: selectedOperationalLimitsGroupId2, - [ENABLE_OLG_MODIFICATION]: !!enableOLGModification, - }, + const allLimitsFormData = { + [OPERATIONAL_LIMITS_GROUPS]: operationalLimitsGroups, + [SELECTED_OPERATIONAL_LIMITS_GROUP_ID1]: selectedOperationalLimitsGroupId1, + [SELECTED_OPERATIONAL_LIMITS_GROUP_ID2]: selectedOperationalLimitsGroupId2, + [ENABLE_OLG_MODIFICATION]: !!enableOLGModification, }; + return { + [id]: allLimitsFormData, + } as Record; }; /** @@ -236,7 +241,9 @@ export const sanitizeLimitsGroups = ( }, })); -export const sanitizeLimitNames = (temporaryLimitList: TemporaryLimitFormSchema[]): TemporaryLimitFormSchema[] => +export const sanitizeLimitNames = ( + temporaryLimitList: TemporaryLimitFormSchema[] | undefined +): TemporaryLimitFormSchema[] => temporaryLimitList ?.filter((limit: TemporaryLimitFormSchema) => limit?.name?.trim()) .map(({ name, ...temporaryLimit }) => ({ diff --git a/src/components/dialogs/limits/operational-limits-groups-types.ts b/src/components/dialogs/limits/operational-limits-groups-types.ts index 3e2bbc93a1..1bcc9c84db 100644 --- a/src/components/dialogs/limits/operational-limits-groups-types.ts +++ b/src/components/dialogs/limits/operational-limits-groups-types.ts @@ -46,7 +46,7 @@ export interface OperationalLimitsGroupFormSchema { export interface CurrentLimitsFormSchema { [PERMANENT_LIMIT]: number | null; - [TEMPORARY_LIMITS]: TemporaryLimitFormSchema[]; + [TEMPORARY_LIMITS]?: TemporaryLimitFormSchema[]; } interface LimitsPropertyFormSchema { diff --git a/src/components/dialogs/line-types-catalog/line-catalog.type.ts b/src/components/dialogs/line-types-catalog/line-catalog.type.ts index 32384bc19c..2fd2a4c5cc 100644 --- a/src/components/dialogs/line-types-catalog/line-catalog.type.ts +++ b/src/components/dialogs/line-types-catalog/line-catalog.type.ts @@ -34,6 +34,7 @@ export type ComputedLineCharacteristics = { totalResistance: number; totalReactance: number; totalSusceptance: number; + finalCurrentLimits: CurrentLimitsInfo[]; }; export type CurrentLimitsInfo = { diff --git a/src/components/dialogs/network-modifications/line-attach-to-voltage-level/line-attach-to-voltage-level-dialog.jsx b/src/components/dialogs/network-modifications/line-attach-to-voltage-level/line-attach-to-voltage-level-dialog.jsx index 6029d847f7..41c350596b 100644 --- a/src/components/dialogs/network-modifications/line-attach-to-voltage-level/line-attach-to-voltage-level-dialog.jsx +++ b/src/components/dialogs/network-modifications/line-attach-to-voltage-level/line-attach-to-voltage-level-dialog.jsx @@ -208,22 +208,22 @@ const LineAttachToVoltageLevelDialog = ({ }, [reset]); const onLineCreationDo = useCallback( - (lineCreationInfo) => { + ({ lineCreationInfos }) => { return new Promise(() => { const preparedLine = { type: MODIFICATION_TYPES.LINE_CREATION.type, - equipmentId: lineCreationInfo.equipmentId, - equipmentName: lineCreationInfo.equipmentName, - r: lineCreationInfo.r, - x: lineCreationInfo.x, - g1: lineCreationInfo.g1, - b1: lineCreationInfo.b1, - g2: lineCreationInfo.g2, - b2: lineCreationInfo.b2, - operationalLimitsGroups: lineCreationInfo.operationalLimitsGroups, - selectedOperationalLimitsGroupId1: lineCreationInfo.selectedOperationalLimitsGroupId1, - selectedOperationalLimitsGroupId2: lineCreationInfo.selectedOperationalLimitsGroupId2, - properties: lineCreationInfo.properties, + equipmentId: lineCreationInfos.equipmentId, + equipmentName: lineCreationInfos.equipmentName, + r: lineCreationInfos.r, + x: lineCreationInfos.x, + g1: lineCreationInfos.g1, + b1: lineCreationInfos.b1, + g2: lineCreationInfos.g2, + b2: lineCreationInfos.b2, + operationalLimitsGroups: lineCreationInfos.operationalLimitsGroups, + selectedOperationalLimitsGroupId1: lineCreationInfos.selectedOperationalLimitsGroupId1, + selectedOperationalLimitsGroupId2: lineCreationInfos.selectedOperationalLimitsGroupId2, + properties: lineCreationInfos.properties, }; setAttachmentLine(preparedLine); setValue(`${ATTACHMENT_LINE_ID}`, preparedLine.equipmentId, { diff --git a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts index 0cb8b71281..55fe065897 100644 --- a/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts +++ b/src/components/dialogs/network-modifications/line/characteristics-pane/line-characteristics-pane-utils.ts @@ -6,14 +6,14 @@ */ import { + B1, + B2, CHARACTERISTICS, CONNECTIVITY_1, CONNECTIVITY_2, - R, G1, G2, - B1, - B2, + R, X, } from 'components/utils/field-constants'; import yup from 'components/utils/yup-config'; @@ -23,9 +23,14 @@ import { } from '../../../connectivity/connectivity-form-utils'; import { LineCharacteristics } from '../modification/line-modification-type'; import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; +import { DeepNullable } from '../../../../utils/ts-utils'; -const characteristicsValidationSchema = (id: string, displayConnectivity: boolean, modification: boolean) => ({ - [id]: yup.object().shape({ +const characteristicsValidationSchema = ( + id: T, + displayConnectivity: boolean, + modification: boolean +) => { + const characteristicsSchema = yup.object().shape({ [R]: modification ? yup.number().nullable().min(0, 'mustBeGreaterOrEqualToZero') : yup.number().nullable().min(0, 'mustBeGreaterOrEqualToZero').required(), @@ -36,11 +41,14 @@ const characteristicsValidationSchema = (id: string, displayConnectivity: boolea [G2]: yup.number().nullable().min(0, 'mustBeGreaterOrEqualToZero'), ...(displayConnectivity && getConnectivityWithPositionValidationSchema(false, CONNECTIVITY_1)), ...(displayConnectivity && getConnectivityWithPositionValidationSchema(false, CONNECTIVITY_2)), - }), -}); + }); + return { + [id]: characteristicsSchema, + } as Record>>; +}; -export const getCharacteristicsValidationSchema = ( - id: string, +export const getCharacteristicsValidationSchema = ( + id: T, displayConnectivity: boolean, modification: boolean = false ) => { @@ -64,7 +72,7 @@ export const getCharacteristicsEmptyFormData = (id: string = CHARACTERISTICS, di return characteristicsEmptyFormData(id, displayConnectivity); }; -export const getCharacteristicsFormData = ( +export const getCharacteristicsFormData = ( { r, x, @@ -81,12 +89,12 @@ export const getCharacteristicsFormData = ( b1: number | null; g2: number | null; b2: number | null; - connectivity1: Connectivity | null; - connectivity2: Connectivity | null; + connectivity1: DeepNullable | null; + connectivity2: DeepNullable | null; }, - id = CHARACTERISTICS -) => ({ - [id]: { + id: T = CHARACTERISTICS as T +) => { + const characteristicsFormData = { [R]: r, [X]: x, [G1]: g1, @@ -95,8 +103,11 @@ export const getCharacteristicsFormData = ( [B2]: b2, [CONNECTIVITY_1]: connectivity1, [CONNECTIVITY_2]: connectivity2, - }, -}); + }; + return { + [id]: characteristicsFormData, + } as Record; +}; export const getCharacteristicsWithOutConnectivityFormData = ( { r, x, g1, b1, g2, b2 }: LineCharacteristics, diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.ts b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.ts index fb9aeb149b..4f4ac0c5a4 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.ts +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog-utils.ts @@ -7,15 +7,18 @@ import { EQUIPMENT_ID, EQUIPMENT_NAME, TAB_HEADER } from 'components/utils/field-constants'; import yup from 'components/utils/yup-config'; +import { ObjectSchema } from 'yup'; -const headerValidationSchema = (id: string) => ({ - [id]: yup.object().shape({ +const headerValidationSchema = (id: T) => { + const headerSchema = yup.object().shape({ [EQUIPMENT_ID]: yup.string().required(), [EQUIPMENT_NAME]: yup.string().nullable(), - }), -}); - -export const getHeaderValidationSchema = (id = TAB_HEADER) => { + }); + return { + [id]: headerSchema, + } as Record>>; +}; +export const getHeaderValidationSchema = (id: T = TAB_HEADER as T) => { return headerValidationSchema(id); }; @@ -30,15 +33,18 @@ export const getHeaderEmptyFormData = (id = TAB_HEADER) => { return headerEmptyFormData(id); }; -export const getHeaderFormData = ( +export const getHeaderFormData = ( { equipmentId, equipmentName = '' }: { equipmentId: string; equipmentName: string | null }, - id = TAB_HEADER -) => ({ - [id]: { + id: T = TAB_HEADER as T +) => { + const headerFormData = { [EQUIPMENT_ID]: equipmentId, [EQUIPMENT_NAME]: equipmentName, - }, -}); + }; + return { + [id]: headerFormData, + } as Record; +}; export const LineCreationDialogTab = { CHARACTERISTICS_TAB: 0, diff --git a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx index b91f5b925b..9f38397ea2 100644 --- a/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx +++ b/src/components/dialogs/network-modifications/line/creation/line-creation-dialog.tsx @@ -11,6 +11,7 @@ import { CustomFormProvider, EquipmentType, FieldType, + ModificationType, snackWithFallback, TextInput, useSnackMessage, @@ -47,7 +48,7 @@ import { X, } from 'components/utils/field-constants'; import { EQUIPMENT_TYPES } from 'components/utils/equipment-types'; -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; import { FieldErrors, useForm } from 'react-hook-form'; import { FetchStatus } from '../../../../../services/utils'; import { APPLICABILITY, FORM_LOADING_DELAY, UNDEFINED_CONNECTION_DIRECTION } from 'components/network/constants'; @@ -90,15 +91,15 @@ import { import GridItem from '../../../commons/grid-item'; import { formatCompleteCurrentLimit } from '../../../../utils/utils'; import { LimitsPane } from '../../../limits/limits-pane'; -import { UUID } from 'node:crypto'; -import { CurrentTreeNode } from '../../../../graph/tree-node.type'; -import { LineCreationInfo, OperationalLimitsGroup } from '../../../../../services/network-modification-types'; +import { LineCreationInfos } from '../../../../../services/network-modification-types'; import { LineModificationFormInfos } from '../modification/line-modification-type'; -import { CurrentLimitsInfo } from '../../../line-types-catalog/line-catalog.type'; +import { ComputedLineCharacteristics, CurrentLimitsInfo } from '../../../line-types-catalog/line-catalog.type'; import { CurrentLimitsData } from '../../../../../services/study/network-map.type'; import { DeepNullable } from '../../../../utils/ts-utils'; import { Connectivity } from 'components/dialogs/connectivity/connectivity.type'; import { OperationalLimitsGroupFormSchema } from '../../../limits/operational-limits-groups-types'; +import { NetworkModificationDialogProps } from '../../../../graph/menus/network-modifications/network-modification-menu.type'; +import { ObjectSchema } from 'yup'; interface LineCreationFormData { [TAB_HEADER]: { @@ -116,12 +117,11 @@ interface LineCreationFormData { [CONNECTIVITY_2]?: Connectivity; }; [LIMITS]: { - [OPERATIONAL_LIMITS_GROUPS]?: OperationalLimitsGroup[]; + [OPERATIONAL_LIMITS_GROUPS]?: OperationalLimitsGroupFormSchema[]; [SELECTED_OPERATIONAL_LIMITS_GROUP_ID1]?: string | null; [SELECTED_OPERATIONAL_LIMITS_GROUP_ID2]?: string | null; }; [ADDITIONAL_PROPERTIES]?: Property[]; - [key: string]: any; } const emptyFormData: Partial = { @@ -152,7 +152,7 @@ interface Limit { }; } -interface LineInfo { +interface LineFormInfos { id: string; name: string | null; voltageLevelId1: string; @@ -188,18 +188,11 @@ interface LineCreationFormInfos extends LineModificationFormInfos { }; } -interface LineCreationDialogProps { - // contains data when we try to edit an existing hypothesis from the current node's list - editData: LineCreationInfo | null | undefined; - studyUuid: UUID; - currentNode: CurrentTreeNode; - currentRootNetworkUuid: UUID; - onCreateLine: (line: LineCreationInfo) => Promise; +type LineCreationDialogProps = NetworkModificationDialogProps & { + editData?: LineCreationInfos; // contains data when we try to edit an existing hypothesis + onCreateLine: typeof createLine; displayConnectivity?: boolean; - isUpdate: boolean; - editDataFetchStatus?: string; - //...dialogProps -} +}; /** * Dialog to create a line in the network @@ -213,7 +206,7 @@ interface LineCreationDialogProps { * @param dialogProps props that are forwarded to the generic ModificationDialog component * @param editDataFetchStatus indicates the status of fetching EditData */ -const LineCreationDialog = ({ +export default function LineCreationDialog({ editData, studyUuid, currentNode, @@ -223,7 +216,7 @@ const LineCreationDialog = ({ isUpdate, editDataFetchStatus, ...dialogProps -}: LineCreationDialogProps) => { +}: Readonly) { const currentNodeUuid = currentNode?.id; const { snackError } = useSnackMessage(); @@ -236,124 +229,133 @@ const LineCreationDialog = ({ setIsOpenLineTypesCatalogDialog(false); }; - const formSchema = yup - .object() - .shape({ - ...getHeaderValidationSchema(), - ...getCharacteristicsValidationSchema(CHARACTERISTICS, displayConnectivity), - ...getLimitsValidationSchema(), - }) - .concat(creationPropertiesSchema) - .required(); - - type LineCreationFormSchema = yup.InferType; - - const formMethods = useForm< - Omit, typeof ADDITIONAL_PROPERTIES> & { - [ADDITIONAL_PROPERTIES]?: Property[]; - } - >({ + const formSchema: ObjectSchema> = useMemo( + () => + yup + .object() + .shape({ + ...getHeaderValidationSchema(), + ...getCharacteristicsValidationSchema(CHARACTERISTICS, displayConnectivity), + ...getLimitsValidationSchema(), + }) + .concat(creationPropertiesSchema) + .required(), + [displayConnectivity] + ); + + const formMethods = useForm>({ defaultValues: emptyFormData, - resolver: yupResolver>(formSchema), + resolver: yupResolver>(formSchema), }); const { reset, setValue } = formMethods; - const fromSearchCopyToFormValues = (line: LineInfo) => { + const fromSearchCopyToFormValues = (line: LineFormInfos) => { + const headerFormData = getHeaderFormData({ + equipmentId: line.id + '(1)', + equipmentName: line.name ?? '', + }); + const characteristicsFormData = getCharacteristicsFormData({ + r: line.r, + x: line.x, + g1: convertInputValue(FieldType.G1, line.g1), // this form uses and displays microSiemens + b1: convertInputValue(FieldType.B1, line.b1), + g2: convertInputValue(FieldType.G2, line.g2), + b2: convertInputValue(FieldType.B2, line.b2), + ...getConnectivityFormData( + { + voltageLevelId: line.voltageLevelId1, + busbarSectionId: line.busOrBusbarSectionId1, + connectionDirection: line.connectablePosition1.connectionDirection, + connectionName: line.connectablePosition1.connectionName, + connectionPosition: line.connectablePosition1.connectionPosition, + terminalConnected: line.terminal1Connected, + }, + CONNECTIVITY_1 + ), + ...getConnectivityFormData( + { + voltageLevelId: line.voltageLevelId2, + busbarSectionId: line.busOrBusbarSectionId2, + connectionDirection: line.connectablePosition2.connectionDirection, + connectionName: line.connectablePosition2.connectionName, + connectionPosition: line.connectablePosition2.connectionPosition, + terminalConnected: line.terminal2Connected, + }, + CONNECTIVITY_2 + ), + }); + const allLimitsFormData = getAllLimitsFormData( + formatCompleteCurrentLimit(line.currentLimits), + line.selectedOperationalLimitsGroupId1 ?? null, + line.selectedOperationalLimitsGroupId2 ?? null + ); + const properties = copyEquipmentPropertiesForCreation(line); + const formData = { - ...getHeaderFormData({ - equipmentId: line.id + '(1)', - equipmentName: line.name ?? '', - }), - // @ts-ignore - ...getCharacteristicsFormData({ + ...headerFormData, + ...characteristicsFormData, + ...allLimitsFormData, + ...properties, + } satisfies DeepNullable; + + reset(formData, { keepDefaultValues: true }); + }; + + const fromEditDataToFormValues = useCallback( + (line: LineCreationInfos) => { + const headerFormData = getHeaderFormData({ + equipmentId: line.equipmentId, + equipmentName: line.equipmentName, + }); + const characteristicsFormData = getCharacteristicsFormData({ r: line.r, x: line.x, - g1: convertInputValue(FieldType.G1, line.g1), // this form uses and displays microSiemens + g1: convertInputValue(FieldType.G1, line.g1), b1: convertInputValue(FieldType.B1, line.b1), g2: convertInputValue(FieldType.G2, line.g2), b2: convertInputValue(FieldType.B2, line.b2), ...getConnectivityFormData( { - voltageLevelId: line.voltageLevelId1, busbarSectionId: line.busOrBusbarSectionId1, - connectionDirection: line.connectablePosition1.connectionDirection, - connectionName: line.connectablePosition1.connectionName, - connectionPosition: line.connectablePosition1.connectionPosition, - terminalConnected: line.terminal1Connected, + connectionDirection: line.connectionDirection1, + connectionName: line.connectionName1, + connectionPosition: line.connectionPosition1, + voltageLevelId: line.voltageLevelId1, + terminalConnected: line.connected1, }, CONNECTIVITY_1 ), ...getConnectivityFormData( { - voltageLevelId: line.voltageLevelId2, busbarSectionId: line.busOrBusbarSectionId2, - connectionDirection: line.connectablePosition2.connectionDirection, - connectionName: line.connectablePosition2.connectionName, - connectionPosition: line.connectablePosition2.connectionPosition, - terminalConnected: line.terminal2Connected, + connectionDirection: line.connectionDirection2, + connectionName: line.connectionName2, + connectionPosition: line.connectionPosition2, + voltageLevelId: line.voltageLevelId2, + terminalConnected: line.connected2, }, CONNECTIVITY_2 ), - }), - ...getAllLimitsFormData( - formatCompleteCurrentLimit(line.currentLimits), - line.selectedOperationalLimitsGroupId1 ?? null, - line.selectedOperationalLimitsGroupId2 ?? null - ), - ...copyEquipmentPropertiesForCreation(line), - }; - reset(formData, { keepDefaultValues: true }); - }; - - const fromEditDataToFormValues = useCallback( - (line: LineCreationInfo) => { - const formData = { - ...getHeaderFormData({ - equipmentId: line.equipmentId, - equipmentName: line.equipmentName, - }), - // @ts-ignore - ...getCharacteristicsFormData({ - r: line.r, - x: line.x, - g1: convertInputValue(FieldType.G1, line.g1), - b1: convertInputValue(FieldType.B1, line.b1), - g2: convertInputValue(FieldType.G2, line.g2), - b2: convertInputValue(FieldType.B2, line.b2), - ...getConnectivityFormData( - { - busbarSectionId: line.busOrBusbarSectionId1, - connectionDirection: line.connectionDirection1, - connectionName: line.connectionName1, - connectionPosition: line.connectionPosition1, - voltageLevelId: line.voltageLevelId1, - terminalConnected: line.connected1, - }, - CONNECTIVITY_1 - ), - ...getConnectivityFormData( - { - busbarSectionId: line.busOrBusbarSectionId2, - connectionDirection: line.connectionDirection2, - connectionName: line.connectionName2, - connectionPosition: line.connectionPosition2, - voltageLevelId: line.voltageLevelId2, - terminalConnected: line.connected2, - }, - CONNECTIVITY_2 - ), - }), - ...getAllLimitsFormData( - line?.operationalLimitsGroups?.map(({ id, ...baseData }) => ({ - ...baseData, - name: id, - id: id + baseData.applicability, - })) as OperationalLimitsGroupFormSchema[], - line?.selectedOperationalLimitsGroupId1 ?? null, - line?.selectedOperationalLimitsGroupId2 ?? null + }); + const allLimitsFormData = getAllLimitsFormData( + line?.operationalLimitsGroups?.map( + ({ id, ...baseData }) => + ({ + ...baseData, + name: id, + id: id + baseData.applicability, + }) satisfies OperationalLimitsGroupFormSchema ), + line?.selectedOperationalLimitsGroupId1 ?? null, + line?.selectedOperationalLimitsGroupId2 ?? null + ); + const formData = { + ...headerFormData, + ...characteristicsFormData, + ...allLimitsFormData, ...getPropertiesFromModification(line.properties), - }; + } satisfies DeepNullable; + reset(formData, { keepDefaultValues: true }); }, [reset] @@ -367,7 +369,7 @@ const LineCreationDialog = ({ } }, [fromEditDataToFormValues, editData]); - const handleLineSegmentsBuildSubmit = (data: any) => { + const handleLineSegmentsBuildSubmit = (data: ComputedLineCharacteristics) => { setValue(`${CHARACTERISTICS}.${R}`, data[TOTAL_RESISTANCE], { shouldDirty: true, }); @@ -409,9 +411,8 @@ const LineCreationDialog = ({ const header = line[TAB_HEADER]; const characteristics = line[CHARACTERISTICS]; const limits = line[LIMITS]; - onCreateLine({ - studyUuid: studyUuid, - nodeUuid: currentNodeUuid, + const lineCreationInfos: LineCreationInfos = { + type: ModificationType.LINE_CREATION, equipmentId: header[EQUIPMENT_ID], equipmentName: sanitizeString(header[EQUIPMENT_NAME]), r: characteristics[R], @@ -424,12 +425,9 @@ const LineCreationDialog = ({ busOrBusbarSectionId1: characteristics[CONNECTIVITY_1]?.[BUS_OR_BUSBAR_SECTION]?.id, voltageLevelId2: characteristics[CONNECTIVITY_2]?.[VOLTAGE_LEVEL]?.id, busOrBusbarSectionId2: characteristics[CONNECTIVITY_2]?.[BUS_OR_BUSBAR_SECTION]?.id, - operationalLimitsGroups: sanitizeLimitsGroups( - limits[OPERATIONAL_LIMITS_GROUPS] - ) as OperationalLimitsGroup[], + operationalLimitsGroups: sanitizeLimitsGroups(limits[OPERATIONAL_LIMITS_GROUPS]), selectedOperationalLimitsGroupId1: limits[SELECTED_OPERATIONAL_LIMITS_GROUP_ID1], selectedOperationalLimitsGroupId2: limits[SELECTED_OPERATIONAL_LIMITS_GROUP_ID2], - isUpdate: !!editData, modificationUuid: editData ? editData.uuid : undefined, connectionName1: sanitizeString(characteristics[CONNECTIVITY_1]?.[CONNECTION_NAME]), connectionDirection1: @@ -442,6 +440,14 @@ const LineCreationDialog = ({ connected1: characteristics[CONNECTIVITY_1]?.[CONNECTED] ?? null, connected2: characteristics[CONNECTIVITY_2]?.[CONNECTED] ?? null, properties: toModificationProperties(line), + } satisfies LineCreationInfos; + + onCreateLine({ + lineCreationInfos, + studyUuid, + nodeUuid: currentNodeUuid, + modificationUuid: editData ? editData.uuid : undefined, + isUpdate: !!editData, }).catch((error) => { snackWithFallback(snackError, error, { headerId: 'LineCreationError' }); }); @@ -557,6 +563,4 @@ const LineCreationDialog = ({ ); -}; - -export default LineCreationDialog; +} diff --git a/src/components/dialogs/network-modifications/line/modification/line-modification-dialog.tsx b/src/components/dialogs/network-modifications/line/modification/line-modification-dialog.tsx index 5769f4f545..e20a29aeca 100644 --- a/src/components/dialogs/network-modifications/line/modification/line-modification-dialog.tsx +++ b/src/components/dialogs/network-modifications/line/modification/line-modification-dialog.tsx @@ -109,6 +109,7 @@ import { LineModificationInfos } from '../../../../../services/network-modificat import { toModificationOperation } from '../../../../utils/utils'; import { useFormWithDirtyTracking } from 'components/dialogs/commons/use-form-with-dirty-tracking'; import { OperationalLimitsGroupsFormSchema } from '../../../limits/operational-limits-groups-types'; +import { ComputedLineCharacteristics } from '../../../line-types-catalog/line-catalog.type'; export interface LineModificationDialogProps { // contains data when we try to edit an existing hypothesis from the current node's list @@ -392,7 +393,7 @@ const LineModificationDialog = ({ setIsOpenLineTypesCatalogDialog(false); }; - const handleLineSegmentsBuildSubmit = (data: any) => { + const handleLineSegmentsBuildSubmit = (data: ComputedLineCharacteristics) => { setValue(`${CHARACTERISTICS}.${R}`, data[TOTAL_RESISTANCE], { shouldDirty: true, }); diff --git a/src/services/network-modification-types.ts b/src/services/network-modification-types.ts index 393b58c4b4..25696bb880 100644 --- a/src/services/network-modification-types.ts +++ b/src/services/network-modification-types.ts @@ -17,6 +17,7 @@ import { ReactiveCapabilityCurvePoints } from '../components/dialogs/reactive-li import { ModificationType } from '@gridsuite/commons-ui'; import { ENABLE_OLG_MODIFICATION } from '../components/utils/field-constants'; import { VARIATION_TYPES } from '../components/network/constants'; +import { OperationalLimitsGroupFormSchema } from '../components/dialogs/limits/operational-limits-groups-types'; export enum OperationType { SET = 'SET', @@ -532,10 +533,9 @@ export interface ShuntCompensatorCreationInfo { properties: Property[] | null; } -export interface LineCreationInfo { +export interface LineCreationInfos { + type: ModificationType; uuid?: string | null; - studyUuid: string; - nodeUuid: UUID; equipmentId: string; equipmentName: string | null; r: number; @@ -548,10 +548,9 @@ export interface LineCreationInfo { busOrBusbarSectionId1: string; voltageLevelId2: string; busOrBusbarSectionId2: string; - operationalLimitsGroups: OperationalLimitsGroup[]; + operationalLimitsGroups: OperationalLimitsGroupFormSchema[]; selectedOperationalLimitsGroupId1?: string; selectedOperationalLimitsGroupId2?: string; - isUpdate: boolean; modificationUuid?: string | null; connectionName1: string | null; connectionDirection1: string | null; diff --git a/src/services/study/network-modifications.ts b/src/services/study/network-modifications.ts index 2c3fde7895..af6d4f4992 100644 --- a/src/services/study/network-modifications.ts +++ b/src/services/study/network-modifications.ts @@ -36,7 +36,7 @@ import { GeneratorModificationInfos, LCCCreationInfo, LccModificationInfos, - LineCreationInfo, + LineCreationInfos, LineModificationInfos, LinesAttachToSplitLinesInfo, LoadCreationInfo, @@ -760,35 +760,18 @@ export function createStaticVarCompensator(staticVarCompensatorCreationParameter } export function createLine({ + lineCreationInfos, studyUuid, nodeUuid, - equipmentId, - equipmentName, - r, - x, - g1, - b1, - g2, - b2, - voltageLevelId1, - busOrBusbarSectionId1, - voltageLevelId2, - busOrBusbarSectionId2, - operationalLimitsGroups, - selectedOperationalLimitsGroupId1, - selectedOperationalLimitsGroupId2, - isUpdate = false, modificationUuid, - connectionName1, - connectionDirection1, - connectionName2, - connectionDirection2, - connectionPosition1, - connectionPosition2, - connected1, - connected2, - properties, -}: LineCreationInfo) { + isUpdate = false, +}: { + lineCreationInfos: LineCreationInfos; + studyUuid: UUID; + nodeUuid: UUID; + modificationUuid?: string | null; + isUpdate: boolean; +}) { let createLineUrl = getNetworkModificationUrl(studyUuid, nodeUuid); if (modificationUuid) { @@ -804,33 +787,7 @@ export function createLine({ Accept: 'application/json', 'Content-Type': 'application/json', }, - body: JSON.stringify({ - type: MODIFICATION_TYPES.LINE_CREATION.type, - equipmentId: equipmentId, - equipmentName: equipmentName, - r: r, - x: x, - g1: g1, - b1: b1, - g2: g2, - b2: b2, - voltageLevelId1: voltageLevelId1, - busOrBusbarSectionId1: busOrBusbarSectionId1, - voltageLevelId2: voltageLevelId2, - busOrBusbarSectionId2: busOrBusbarSectionId2, - operationalLimitsGroups: operationalLimitsGroups, - selectedOperationalLimitsGroupId1: selectedOperationalLimitsGroupId1, - selectedOperationalLimitsGroupId2: selectedOperationalLimitsGroupId2, - connectionName1: connectionName1, - connectionDirection1: connectionDirection1, - connectionName2: connectionName2, - connectionDirection2: connectionDirection2, - connectionPosition1: connectionPosition1, - connectionPosition2: connectionPosition2, - connected1: connected1, - connected2: connected2, - properties, - }), + body: JSON.stringify(lineCreationInfos), }); }