From da27bfa8c66d089c61146919924a740294084bfc Mon Sep 17 00:00:00 2001 From: ingalls Date: Tue, 26 Nov 2024 16:27:31 -0700 Subject: [PATCH 1/5] Create Sensor CoT Link --- api/web/package-lock.json | 5 +-- api/web/package.json | 5 ++- api/web/src/stores/base/cot.ts | 73 ++++++++++++++++++++++++++++++++-- 3 files changed, 73 insertions(+), 10 deletions(-) diff --git a/api/web/package-lock.json b/api/web/package-lock.json index b4ca0c412..3230952b8 100644 --- a/api/web/package-lock.json +++ b/api/web/package-lock.json @@ -18,6 +18,7 @@ "@turf/boolean-within": "^7.1.0", "@turf/envelope": "^7.1.0", "@turf/point-on-feature": "^7.0.0", + "@turf/sector": "^7.1.0", "apexcharts": "^3.0.0", "core-js": "^3.6.4", "cronstrue": "^2.19.0", @@ -3610,7 +3611,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-7.1.0.tgz", "integrity": "sha512-6qhF1drjwH0Dg3ZB9om1JkWTJfAqBcbtIrAj5UPlrAeHP87hGoCO2ZEsFEAL9Q18vntpivT89Uho/nqQUjJhYw==", - "dev": true, "license": "MIT", "dependencies": { "@turf/destination": "^7.1.0", @@ -3640,7 +3640,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-7.1.0.tgz", "integrity": "sha512-97XuvB0iaAiMg86hrnZ529WwP44TQAA9mmI5PMlchACiA4LFrEtWjjDzvO6234coieoqhrw6dZYcJvd5O2PwrQ==", - "dev": true, "license": "MIT", "dependencies": { "@turf/helpers": "^7.1.0", @@ -3747,7 +3746,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/line-arc/-/line-arc-7.1.0.tgz", "integrity": "sha512-9/bM34PozTyJ5FXXPAzl/j0RpcTImgMFJZ0WhH0pZZEZRum6P0rJnENt2E2qI441zeozQ9H6X5DCiJogDmRUEw==", - "dev": true, "license": "MIT", "dependencies": { "@turf/circle": "^7.1.0", @@ -3860,7 +3858,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-7.1.0.tgz", "integrity": "sha512-2FI2rg//eXpa/l+WJtFfvHaf1NJ7ie2MoJ+RH5dKANtrfoof1Ed+y9dXSyuhem2tp/Srq2GhrjaSofFN5/g5vA==", - "dev": true, "license": "MIT", "dependencies": { "@turf/circle": "^7.1.0", diff --git a/api/web/package.json b/api/web/package.json index 953bc9834..d81be2b4f 100644 --- a/api/web/package.json +++ b/api/web/package.json @@ -21,6 +21,7 @@ "@turf/boolean-within": "^7.1.0", "@turf/envelope": "^7.1.0", "@turf/point-on-feature": "^7.0.0", + "@turf/sector": "^7.1.0", "apexcharts": "^3.0.0", "core-js": "^3.6.4", "cronstrue": "^2.19.0", @@ -54,12 +55,12 @@ "eslint": "^9.0.0", "eslint-plugin-vue": "^9.0.0", "openapi-typescript": "^7.0.0", + "typescript": "5.6.2", "typescript-eslint": "^8.3.0", "vite": "^5.0.0", "vite-plugin-babel": "^1.2.0", "vite-plugin-pwa": "^0.21.0", - "vue-tsc": "2.0.29", - "typescript": "5.6.2" + "vue-tsc": "2.0.29" }, "browserslist": [ "> 1%", diff --git a/api/web/src/stores/base/cot.ts b/api/web/src/stores/base/cot.ts index 2c595080b..ff25e37c0 100644 --- a/api/web/src/stores/base/cot.ts +++ b/api/web/src/stores/base/cot.ts @@ -1,4 +1,5 @@ import { std } from '../../std.ts'; +import { sector } from '@turf/sector'; import { bbox } from '@turf/bbox' import { useCOTStore } from '../cots.ts' import { useMapStore } from '../map.ts'; @@ -45,7 +46,9 @@ export default class COT { _geometry: Feature["geometry"]; _store: ReturnType; - origin: Origin + origin: Origin; + + links: Set; constructor(feat: Feature, origin?: Origin) { feat.properties = COT.style(feat.geometry.type, feat.properties); @@ -58,6 +61,8 @@ export default class COT { this._store = useCOTStore(); this.origin = origin || { mode: OriginMode.CONNECTION }; + this.links = new Set(); + if (!this._properties.archived) { this._properties.archived = false } @@ -69,6 +74,10 @@ export default class COT { if (this.origin.mode === OriginMode.CONNECTION) { this._store.pending.set(this.id, this); } + + if (this._properties.sensor) { + this.link(); + } } set properties(properties: Feature["properties"]) { @@ -82,18 +91,66 @@ export default class COT { set geometry(geometry: Feature["geometry"]) { this.update({ geometry }) } - get geometry() { return this._geometry; } + link(): void { + if (this._properties.sensor) { + const id = `${this.id}-sensor` + + let updated = false; + + console.error('SENSOR RANGE', this._properties.sensor.range) + + if (this.links.has(id)) { + const cot = this._store.get(id); + if (cot) { + updated = true; + + cot.geometry = sector( + this._properties.center, + (this._properties.sensor.range || 10) / 1000, + this._properties.sensor.azimuth, + this._properties.sensor.azimuth + this._properties.sensor.fov, + ).geometry + } + } + + if (!updated) { + // TODO Use NodeCoT & Respect Sensor Style if present + new COT({ + id, + type: 'Feature', + properties: { + callsign: '', + type: 'u-d-p', + stroke: '#ffffff', + 'stroke-width': 1, + 'stroke-opacity': 1, + fill: '#ffffff', + 'fill-opacity': 0.2 + }, + geometry: sector( + this._properties.center, + (this._properties.sensor.range || 10) / 1000, + this._properties.sensor.azimuth, + this._properties.sensor.azimuth + this._properties.sensor.fov, + ).geometry + }); + + this.links.add(id) + } + } + } + /** * Update the COT and return a boolean as to whether the COT needs to be re-rendered */ - async update(update: { + update(update: { properties?: Feature["properties"], geometry?: Feature["geometry"] - }): Promise { + }): boolean { let changed = false; if (update.geometry) { //TODO Detect Geometry changes, use centroid?! @@ -110,6 +167,14 @@ export default class COT { break; } } + + if (update.properties.sensor) { + this.link(); + } else if (this._properties.sensor && !update.properties.sensor) { + // TODO Unlink & cleanup + } + + this._properties = update.properties; } if (!this._properties.center) { From 8872763ee2d25d8054f1eaa54e8bccff73c2fab5 Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 3 Apr 2025 15:39:27 -0600 Subject: [PATCH 2/5] Fix cot.update --- api/web/src/base/cot.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/web/src/base/cot.ts b/api/web/src/base/cot.ts index cb6637b3d..d26cf5e7d 100644 --- a/api/web/src/base/cot.ts +++ b/api/web/src/base/cot.ts @@ -198,7 +198,7 @@ export default class COT { /** * Update the COT and return a boolean as to whether the COT needs to be re-rendered */ - update(update: { + async update(update: { properties?: Feature["properties"], geometry?: Feature["geometry"] }, opts?: { From 34f812a2cd4886ae3aeaff035bfe98b1d60ea859 Mon Sep 17 00:00:00 2001 From: ingalls Date: Thu, 3 Apr 2025 16:15:11 -0600 Subject: [PATCH 3/5] Get sensor display working --- api/web/package-lock.json | 410 +++++++++++++++++++------------------- api/web/src/base/cot.ts | 82 +++++--- 2 files changed, 254 insertions(+), 238 deletions(-) diff --git a/api/web/package-lock.json b/api/web/package-lock.json index e104dde2f..5dc81c0d2 100644 --- a/api/web/package-lock.json +++ b/api/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "@tak-ps/CloudTAK.web", - "version": "7.29.0", + "version": "7.30.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@tak-ps/CloudTAK.web", - "version": "7.29.0", + "version": "7.30.2", "dependencies": { "@react-hookz/deep-equal": "^3.0.3", "@tabler/core": "1.0.0", @@ -2820,9 +2820,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz", - "integrity": "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", + "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", "cpu": [ "arm" ], @@ -2834,9 +2834,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz", - "integrity": "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", + "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", "cpu": [ "arm64" ], @@ -2848,9 +2848,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz", - "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", + "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", "cpu": [ "arm64" ], @@ -2862,9 +2862,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz", - "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", + "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", "cpu": [ "x64" ], @@ -2876,9 +2876,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz", - "integrity": "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", + "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", "cpu": [ "arm64" ], @@ -2890,9 +2890,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz", - "integrity": "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", + "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", "cpu": [ "x64" ], @@ -2904,9 +2904,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz", - "integrity": "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", + "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", "cpu": [ "arm" ], @@ -2918,9 +2918,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz", - "integrity": "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", + "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", "cpu": [ "arm" ], @@ -2932,9 +2932,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz", - "integrity": "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", + "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", "cpu": [ "arm64" ], @@ -2946,9 +2946,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz", - "integrity": "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", + "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", "cpu": [ "arm64" ], @@ -2960,9 +2960,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz", - "integrity": "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", + "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", "cpu": [ "loong64" ], @@ -2974,9 +2974,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz", - "integrity": "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", + "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", "cpu": [ "ppc64" ], @@ -2988,9 +2988,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz", - "integrity": "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", + "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", "cpu": [ "riscv64" ], @@ -3002,9 +3002,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz", - "integrity": "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", + "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", "cpu": [ "riscv64" ], @@ -3016,9 +3016,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz", - "integrity": "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", + "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", "cpu": [ "s390x" ], @@ -3030,9 +3030,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz", - "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", + "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", "cpu": [ "x64" ], @@ -3044,9 +3044,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz", - "integrity": "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", + "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", "cpu": [ "x64" ], @@ -3058,9 +3058,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz", - "integrity": "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", + "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", "cpu": [ "arm64" ], @@ -3072,9 +3072,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz", - "integrity": "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", + "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", "cpu": [ "ia32" ], @@ -3086,9 +3086,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz", - "integrity": "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", + "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", "cpu": [ "x64" ], @@ -3100,9 +3100,9 @@ ] }, "node_modules/@sinclair/typebox": { - "version": "0.34.31", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.31.tgz", - "integrity": "sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==", + "version": "0.34.33", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.33.tgz", + "integrity": "sha512-5HAV9exOMcXRUxo+9iYB5n09XxzCXnfy4VTNW4xnDv+FgjzAGY989C28BIdljKqmF+ZltUwujE3aossvcVtq6g==", "license": "MIT" }, "node_modules/@surma/rollup-plugin-off-main-thread": { @@ -3687,9 +3687,9 @@ } }, "node_modules/@turf/sector": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-7.1.0.tgz", - "integrity": "sha512-2FI2rg//eXpa/l+WJtFfvHaf1NJ7ie2MoJ+RH5dKANtrfoof1Ed+y9dXSyuhem2tp/Srq2GhrjaSofFN5/g5vA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-7.2.0.tgz", + "integrity": "sha512-zL06MjbbMG4DdpiNz+Q9Ax8jsCekt3R76uxeWShulAGkyDB5smdBOUDoRwxn05UX7l4kKv4Ucq2imQXhxKFd1w==", "license": "MIT", "dependencies": { "@turf/circle": "^7.2.0", @@ -3764,9 +3764,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "license": "MIT", "dependencies": { @@ -3895,12 +3895,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.17.tgz", - "integrity": "sha512-nAJuQXoyPj04uLgu+obZcSmsfOenUg6DxPKogeUy6yNCFwWaj5sBF8/G/pNo8EtBJjAfSVgfIlugR/BCOleO+g==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/pbf": { @@ -5125,9 +5125,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001707", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", - "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "version": "1.0.30001709", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001709.tgz", + "integrity": "sha512-NgL3vUTnDrPCZ3zTahp4fsugQ4dc7EKTSzwQDPEel6DMoMnfH2jhry9n2Zm8onbSR+f/QtKHFOA+iAQu4kbtWA==", "dev": true, "funding": [ { @@ -5616,9 +5616,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.129", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.129.tgz", - "integrity": "sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA==", + "version": "1.5.131", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.131.tgz", + "integrity": "sha512-fJFRYXVEJgDCiqFOgRGJm8XR97hZ13tw7FXI9k2yC5hgY+nyzC2tMO8baq1cQR7Ur58iCkASx2zrkZPZUnfzPg==", "dev": true, "license": "ISC" }, @@ -7437,9 +7437,9 @@ "license": "MIT" }, "node_modules/json-diff-ts": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/json-diff-ts/-/json-diff-ts-4.2.0.tgz", - "integrity": "sha512-w3hyjjFhJwPcq8W+ERMCx3n6vKGBe4jyotGHUlYnGVImeY0CpTVKEUqOArqTPq8TlzUhHpZOPCt67ff5Tg9qrQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/json-diff-ts/-/json-diff-ts-4.2.1.tgz", + "integrity": "sha512-uvzPGLCMHlxDW3gnVS3BxfV3Vh0QCyT/5iMXYRny/znzl4gv4fvjh8lUEcZ+RDXDVe3bDYIP42xGzLkMWggvmw==", "license": "MIT", "dependencies": { "lodash": "4.x" @@ -8854,9 +8854,9 @@ "license": "Unlicense" }, "node_modules/rollup": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz", - "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", + "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", "dev": true, "license": "MIT", "dependencies": { @@ -8870,26 +8870,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.38.0", - "@rollup/rollup-android-arm64": "4.38.0", - "@rollup/rollup-darwin-arm64": "4.38.0", - "@rollup/rollup-darwin-x64": "4.38.0", - "@rollup/rollup-freebsd-arm64": "4.38.0", - "@rollup/rollup-freebsd-x64": "4.38.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", - "@rollup/rollup-linux-arm-musleabihf": "4.38.0", - "@rollup/rollup-linux-arm64-gnu": "4.38.0", - "@rollup/rollup-linux-arm64-musl": "4.38.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", - "@rollup/rollup-linux-riscv64-gnu": "4.38.0", - "@rollup/rollup-linux-riscv64-musl": "4.38.0", - "@rollup/rollup-linux-s390x-gnu": "4.38.0", - "@rollup/rollup-linux-x64-gnu": "4.38.0", - "@rollup/rollup-linux-x64-musl": "4.38.0", - "@rollup/rollup-win32-arm64-msvc": "4.38.0", - "@rollup/rollup-win32-ia32-msvc": "4.38.0", - "@rollup/rollup-win32-x64-msvc": "4.38.0", + "@rollup/rollup-android-arm-eabi": "4.39.0", + "@rollup/rollup-android-arm64": "4.39.0", + "@rollup/rollup-darwin-arm64": "4.39.0", + "@rollup/rollup-darwin-x64": "4.39.0", + "@rollup/rollup-freebsd-arm64": "4.39.0", + "@rollup/rollup-freebsd-x64": "4.39.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", + "@rollup/rollup-linux-arm-musleabihf": "4.39.0", + "@rollup/rollup-linux-arm64-gnu": "4.39.0", + "@rollup/rollup-linux-arm64-musl": "4.39.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", + "@rollup/rollup-linux-riscv64-gnu": "4.39.0", + "@rollup/rollup-linux-riscv64-musl": "4.39.0", + "@rollup/rollup-linux-s390x-gnu": "4.39.0", + "@rollup/rollup-linux-x64-gnu": "4.39.0", + "@rollup/rollup-linux-x64-musl": "4.39.0", + "@rollup/rollup-win32-arm64-msvc": "4.39.0", + "@rollup/rollup-win32-ia32-msvc": "4.39.0", + "@rollup/rollup-win32-x64-msvc": "4.39.0", "fsevents": "~2.3.2" } }, @@ -9008,9 +9008,9 @@ } }, "node_modules/sass-embedded": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.86.1.tgz", - "integrity": "sha512-LMJvytHh7lIUtmjGCqpM4cRdIDvPllLJKznNIK4L7EZJ77BLeUFoOSRXEOHq4G4gqy5CVhHUKlHslzCANkDOhQ==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.86.2.tgz", + "integrity": "sha512-ER9yUk71007a+6azLBR0RzA4Vd4VtXpaRpI+HXqpEIARhleTKYUxXrh6nY+272q91xAzoXqBKVlTizOvNmb5yQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9030,32 +9030,32 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.86.1", - "sass-embedded-android-arm64": "1.86.1", - "sass-embedded-android-ia32": "1.86.1", - "sass-embedded-android-riscv64": "1.86.1", - "sass-embedded-android-x64": "1.86.1", - "sass-embedded-darwin-arm64": "1.86.1", - "sass-embedded-darwin-x64": "1.86.1", - "sass-embedded-linux-arm": "1.86.1", - "sass-embedded-linux-arm64": "1.86.1", - "sass-embedded-linux-ia32": "1.86.1", - "sass-embedded-linux-musl-arm": "1.86.1", - "sass-embedded-linux-musl-arm64": "1.86.1", - "sass-embedded-linux-musl-ia32": "1.86.1", - "sass-embedded-linux-musl-riscv64": "1.86.1", - "sass-embedded-linux-musl-x64": "1.86.1", - "sass-embedded-linux-riscv64": "1.86.1", - "sass-embedded-linux-x64": "1.86.1", - "sass-embedded-win32-arm64": "1.86.1", - "sass-embedded-win32-ia32": "1.86.1", - "sass-embedded-win32-x64": "1.86.1" + "sass-embedded-android-arm": "1.86.2", + "sass-embedded-android-arm64": "1.86.2", + "sass-embedded-android-ia32": "1.86.2", + "sass-embedded-android-riscv64": "1.86.2", + "sass-embedded-android-x64": "1.86.2", + "sass-embedded-darwin-arm64": "1.86.2", + "sass-embedded-darwin-x64": "1.86.2", + "sass-embedded-linux-arm": "1.86.2", + "sass-embedded-linux-arm64": "1.86.2", + "sass-embedded-linux-ia32": "1.86.2", + "sass-embedded-linux-musl-arm": "1.86.2", + "sass-embedded-linux-musl-arm64": "1.86.2", + "sass-embedded-linux-musl-ia32": "1.86.2", + "sass-embedded-linux-musl-riscv64": "1.86.2", + "sass-embedded-linux-musl-x64": "1.86.2", + "sass-embedded-linux-riscv64": "1.86.2", + "sass-embedded-linux-x64": "1.86.2", + "sass-embedded-win32-arm64": "1.86.2", + "sass-embedded-win32-ia32": "1.86.2", + "sass-embedded-win32-x64": "1.86.2" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.86.1.tgz", - "integrity": "sha512-bcmKB67uCb9znune+QsE6cWIiKAHE9P+24/9vDPHwwN3BmmH1B/4mznNKKakdYMuxpgbeLrPcEScHEpQbdrIpA==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.86.2.tgz", + "integrity": "sha512-gjve+jvwUUdY96VxfhNWyJ0BCHFcMiLuESNWYVuntSGPsuSiTZJFMVZxtb7oEXl5HDn9NL5IbPMbox8R8A4Gew==", "cpu": [ "arm" ], @@ -9070,9 +9070,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.86.1.tgz", - "integrity": "sha512-SMY79YhNfq/gdz8MHqwEsnf/IjSnQFAmSEGDDv0vjL0yy9VZC/zhsxpsho8vbFEvTSEGFFlkGgPdzDuoozRrOg==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.86.2.tgz", + "integrity": "sha512-q3d3SW5JWv3U4Fxf01Ho0Ij7iSmA9528J8hRQW/qiPq/rNLpaX+YNTQfaWgSQcuKsrHiqJwWwqN7nTL3rdmNGQ==", "cpu": [ "arm64" ], @@ -9087,9 +9087,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.86.1.tgz", - "integrity": "sha512-AX6I5qS8GbgcbBJ1o3uKVI5/7tq6evg/BO/wa0XaNqnzP4i/PojBaGh7EcZrg/spl//SfpS55eA18a0/AOi71w==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.86.2.tgz", + "integrity": "sha512-AbWxVmiZxKC4O5AH1X1rypngu+Mc5/Jl8ZcO7X3RBL3MDSH87MNoSjYHtYeC/j9BFzFK+5h9uluRq+86DoRX0Q==", "cpu": [ "ia32" ], @@ -9104,9 +9104,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.86.1.tgz", - "integrity": "sha512-Af6ZzRTRfIfx6KICJZ19je6OjOXhxo+v6z/lf/SXm5/1EaHGpGC5xIw4ivtj4nNINNoqkykfIDCjpzm1qWEPPQ==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.86.2.tgz", + "integrity": "sha512-5IFIRPyWtTUBHV1kWJfJCTr9gYeF9yA8bkuvUJ6cCMrj58CiWnGODeqzz8SWpR6TIOwJMl6cT8lKGWQbMMtdUA==", "cpu": [ "riscv64" ], @@ -9121,9 +9121,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.86.1.tgz", - "integrity": "sha512-GW47z1AH8gXB7IG6EUbC5aDBDtiITeP5nUfEenE6vaaN0H17mBjIwSnEcKPPA1IdxzDpj+4bE/SGfiF0W/At4g==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.86.2.tgz", + "integrity": "sha512-DzcDdmYwMmyFu/d5YXH2/qYQ0sJh3XoLma4ktzptmQnhgyTo4ajqC313TBCSrUThBxJPcfzy5ji+mZRWJpGHEg==", "cpu": [ "x64" ], @@ -9138,9 +9138,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.86.1.tgz", - "integrity": "sha512-grBnDW5Rg+mEmZM7I9hJySS4MMXDwLMd+RyegQnr+SIJ3WA807Cw830+raALxgDY+UKKKhVEoq3FgbTo40Awgw==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.86.2.tgz", + "integrity": "sha512-wmcrNCdhdod9n67g+G/lm3pwv5kNqHSsfBwq6oTgpKUtoecc44UhKMaZ7P5foTTTRybVVj7w5qVPGh8H25Tlgg==", "cpu": [ "arm64" ], @@ -9155,9 +9155,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.86.1.tgz", - "integrity": "sha512-XxSCMcmeADNouiJAr8G1oRnEhkivHKVLV5DRpfFnUK5FqtFCuSk3K18I+xIfpQDeZnjRL3t2VjsmEJuFiBYV8w==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.86.2.tgz", + "integrity": "sha512-dHfnCfimKklYanqlubidA3Kyk9g7Ltcs7btfzrrWzvyfRAFKkg826aDHfnnDw8ihBYlmNrHa4jqxPSP5L88m3w==", "cpu": [ "x64" ], @@ -9172,9 +9172,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.86.1.tgz", - "integrity": "sha512-Z57ZUcWPuoOHpnl3TiUf/x9wWF2dFtkjdv7hZQpFXYwK5eudHFeBErK6KNCos6jkif1KyeFELXT/HWOznitU/w==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.86.2.tgz", + "integrity": "sha512-ZTUvotjO/+CIXs3/fFpFWHLmUnEtvilIgiTHilx8yS2eReJWBzlgXneHQf6ZSNMqCNF/lbiJbJokBEDhW77drg==", "cpu": [ "arm" ], @@ -9189,9 +9189,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.86.1.tgz", - "integrity": "sha512-zchms0BtaOrkvfvjRnl1PDWK931DxAeYEY2yKQceO/0OFtcBz1r480Kh/RjIffTNreJqIr9Mx4wFdP+icKwLpg==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.86.2.tgz", + "integrity": "sha512-K7sw2w2TMboorrIRM5EQIU7FAvERyfOc227dLkGx7mhInBq5bUX9ixI8sN0AGdvmFmBipE4RAlmfYkjjavroxQ==", "cpu": [ "arm64" ], @@ -9206,9 +9206,9 @@ } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.86.1.tgz", - "integrity": "sha512-WHntVnCgpiJPCmTeQrn5rtl1zJdd693TwpNGAFPzKD4FILPcVBKtWutl7COL6bKe/mKTf9OW0t6GBJ6mav2hAA==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.86.2.tgz", + "integrity": "sha512-+OHfCDU3S86oHlKWolp1mtk/6HAcsvBw7wqff5ze3Gp62jSfe4KKojhKhCtBs2ZK7W/O7U/7WM58sSWdoJ8Tow==", "cpu": [ "ia32" ], @@ -9223,9 +9223,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.86.1.tgz", - "integrity": "sha512-DlPpyp3bIL8YMtxR22hkWBtuZY6ch3KAmQvqIONippPv96WTHi1iq5jclbE1YXpDtI8Wcus0x6apoDSKq8o95g==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.86.2.tgz", + "integrity": "sha512-8DZRt9ipTeyTXe+Hpck3lmQBCXgFza4kbqkyByT1tleGx95hNxSNFBdrK6oYHLIxDz2HXr46PyapP2QlHODBcA==", "cpu": [ "arm" ], @@ -9240,9 +9240,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.86.1.tgz", - "integrity": "sha512-CwuHMRWSJFByHpgqcVtCSt29dMWhr0lpUTjaBCh9xOl0Oyz89dIqOxA0aMq+XU+thaDtOziJtMIfW6l35ZeykQ==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.86.2.tgz", + "integrity": "sha512-j9GVzPLaPmXQJroq+Dw1loH+EB3mQcP4RtIumIWzJh1HvfQG9QEoevG2oiofXS1Wd8705N6Cp3rCFrg1eIUtfw==", "cpu": [ "arm64" ], @@ -9257,9 +9257,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.86.1.tgz", - "integrity": "sha512-yjvVpAW1YS0VQNnIUtZTf0IrRDMa0wRjFWUtsLthVIxuXyjLy44+YULlfduxqcZe3rvI4+EqT7GorvviWo9NfQ==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.86.2.tgz", + "integrity": "sha512-ZfOmohK3bNKQifJs9DULS4HjBmVy2K8BOi1p7JvWik+SSnpXi9MK1mEJi7w71ktZZ+NvFgpDbeIvCpxyaZJsKg==", "cpu": [ "ia32" ], @@ -9274,9 +9274,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.86.1.tgz", - "integrity": "sha512-0zCUOMwX/hwPV1zimxM46dq/MdATSqbw6G646DwQ3/2V2Db1t9lfXBZqSavx8p/cqRp1JYTUPbJQV1gT4J7NYw==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.86.2.tgz", + "integrity": "sha512-MdT2L1sMSv7ytOCAj8OAf4srm7jDiAmpiHH+0cxMJPwu8uo1oa1aMjcXBW0vfC+SB8ugoBapW0Fnfu/QjVgmjw==", "cpu": [ "riscv64" ], @@ -9291,9 +9291,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.86.1.tgz", - "integrity": "sha512-8KJ6kEj1N16V9E0g5PDSd4aVe1LwcVKROJcVqnzTKPMa/4j2VuNWep7D81OYchdQMm9Egn1RqV0jCwm0b2aSHQ==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.86.2.tgz", + "integrity": "sha512-huV+hy3UDRDQwwcECXZL2J4+yxRnOYCGET4y/eyJoLprlpRzl41z+byikXDsz8/f0HsttZ1DOcUmPcJwts9rJw==", "cpu": [ "x64" ], @@ -9308,9 +9308,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.86.1.tgz", - "integrity": "sha512-rNJ1EfIkQpvBfMS1fBdyb+Gsji4yK0AwsV1T7NEcy21yDxDt7mdCgkAJiaN9qf7UEXuCuueQoed7WZoDaSpjww==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.86.2.tgz", + "integrity": "sha512-SwMgxIcsiMqOrM9Ki+kDULHRPBvwnGoVyX0MNKPeTADTMm2ISD9sK7p5L7UyDmz+DE4Zgf0qx5pT1K1KP1pn8A==", "cpu": [ "riscv64" ], @@ -9325,9 +9325,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.86.1.tgz", - "integrity": "sha512-DGCdUoYRRUKzRZz/q7plbB5Nean2+Uk4CqKF4RWAU0v1tHnDKKWmYfETryhWdB2WJM8QSn7O8qRebe6FCobB5g==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.86.2.tgz", + "integrity": "sha512-Tw3w6KGp5YNBaVpRj1F5xhUS6ol+bVlVo+tvMKYoH2pDy5BHb+vMftviCaJDtTsZiYKFXWHAaygmXF8YGOwvPg==", "cpu": [ "x64" ], @@ -9342,9 +9342,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.86.1.tgz", - "integrity": "sha512-qRLZR3yLuk/3y64YhcltkwGclhPoK6EdiLP1e5SVw5+kughcs+mNUZ3rdvSAmCSA4vDv+XOiOjRpjxmpeon95Q==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.86.2.tgz", + "integrity": "sha512-P45xUyLQ4F8s89yZNMWqkQGWHKx8J/ALS/Jl8JJeZcSVRFPQCaldZ/Zx8K2kAdVh5dg4OiFne8/YqpXBfWlHtw==", "cpu": [ "arm64" ], @@ -9359,9 +9359,9 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.86.1.tgz", - "integrity": "sha512-o860a7/YGHZnGeY3l/e6yt3+ZMeDdDHmthTaKnw2wpJNEq0nmytYLTJQmjWPxEMz7O8AQ0LtcbDDrhivSog+KQ==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.86.2.tgz", + "integrity": "sha512-AsvPpk3dmJRXCoZu9UKL7CXtWmXb4/CMQwo6wRe4SzwHpwHOy+Hj30lh5SRvcr9+J/knA7Aje2xMPxFPYgE4uQ==", "cpu": [ "ia32" ], @@ -9376,9 +9376,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.86.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.86.1.tgz", - "integrity": "sha512-7Z3wsVKfseJodmv689dDEV/JrXJH5TAclWNvHrEYW5BtoViOTU2pIDxRgLYzdKU9teIw5g6R0nJZb9M105oIKA==", + "version": "1.86.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.86.2.tgz", + "integrity": "sha512-Nvhyr2BxZN/Rh9YnBDc0iGboLA5lAx8h0/Dvut2iGdxVZ2eVqcV/uLXfsPJ9KHf+QNW5CIo2zOjQKqUQJjh2sw==", "cpu": [ "x64" ], @@ -10058,15 +10058,15 @@ } }, "node_modules/terra-draw": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/terra-draw/-/terra-draw-1.4.0.tgz", - "integrity": "sha512-TQ0mHaB/ixslflbjaRnoAmFlMPkrhStwZOe5+2/Etg/Lw0ZI09kOfDrMho/KGs1Bh+OMkiLovf5Tb6OE3latDw==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/terra-draw/-/terra-draw-1.4.2.tgz", + "integrity": "sha512-Vp+swRc5eaFAe+WtwfMvdaapzMiknbNT30NCFHdL9QATgDqUfA2st6L/LeJq26x6I38UYzRAvuH3GYejtrvPuA==", "license": "MIT" }, "node_modules/terra-draw-maplibre-gl-adapter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/terra-draw-maplibre-gl-adapter/-/terra-draw-maplibre-gl-adapter-1.0.2.tgz", - "integrity": "sha512-Zp6nXRnENQvFmJfazZzyX1kwHPFsgOSNuxwMe5wLD4F9uspGwEv8vsQPW/6CPrQCV2k4rGtQT2jQagNd5l2ILg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/terra-draw-maplibre-gl-adapter/-/terra-draw-maplibre-gl-adapter-1.0.3.tgz", + "integrity": "sha512-Qd9xtV5Fa7JSJsKA5vJwvJZ40waiI9neDDvKUqCTcEjsrZCLVZQuiabcDhOO/Xv/vONk7io5MSPnlF6Mp1dwEA==", "license": "MIT", "peerDependencies": { "maplibre-gl": ">=4", @@ -10221,9 +10221,9 @@ } }, "node_modules/type-fest": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.0.tgz", - "integrity": "sha512-w2IGJU1tIgcrepg9ZJ82d8UmItNQtOFJG0HCUE3SzMokKkTsruVDALl2fAdiEzJlfduoU+VyXJWIIUZ+6jV+nw==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -10375,9 +10375,9 @@ } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -10571,9 +10571,9 @@ } }, "node_modules/vite": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", - "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", + "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/api/web/src/base/cot.ts b/api/web/src/base/cot.ts index d26cf5e7d..beeb9c281 100644 --- a/api/web/src/base/cot.ts +++ b/api/web/src/base/cot.ts @@ -106,6 +106,10 @@ export default class COT { atlas.db.cots.set(this.id, this); } + if (!this._remote && this._properties.sensor) { + this.link(); + } + if (!opts || (opts && opts.skipSave !== true)) { this.save(); } @@ -125,10 +129,6 @@ export default class COT { } }; } - - if (this._properties.sensor) { - this.link(); - } } set properties(properties: Feature["properties"]) { @@ -147,15 +147,21 @@ export default class COT { } link(): void { - if (this._properties.sensor) { + if (this._remote) throw new Error('Cannot Link Remotely'); + + const atlas = this._atlas as Atlas; + + if ( + this._properties.sensor + && this._properties.sensor.fov !== undefined + && this._properties.sensor.azimuth !== undefined + ) { const id = `${this.id}-sensor` let updated = false; - console.error('SENSOR RANGE', this._properties.sensor.range) - if (this.links.has(id)) { - const cot = this._store.get(id); + const cot = atlas.db.cots.get(id); if (cot) { updated = true; @@ -170,25 +176,35 @@ export default class COT { if (!updated) { // TODO Use NodeCoT & Respect Sensor Style if present - new COT({ - id, - type: 'Feature', - properties: { - callsign: '', - type: 'u-d-p', - stroke: '#ffffff', - 'stroke-width': 1, - 'stroke-opacity': 1, - fill: '#ffffff', - 'fill-opacity': 0.2 - }, - geometry: sector( - this._properties.center, - (this._properties.sensor.range || 10) / 1000, - this._properties.sensor.azimuth, - this._properties.sensor.azimuth + this._properties.sensor.fov, - ).geometry - }); + new COT( + atlas, + { + id, + path: '/', + type: 'Feature', + properties: { + id, + callsign: '', + type: 'u-d-p', + how: this._properties.how, + center: this._properties.center, + stroke: '#ffffff', + time: this._properties.time, + start: this._properties.start, + stale: this._properties.stale, + 'stroke-width': 1, + 'stroke-opacity': 1, + fill: '#ffffff', + 'fill-opacity': 0.2 + }, + geometry: sector( + this._properties.center, + (this._properties.sensor.range || 10) / 1000, + this._properties.sensor.azimuth, + this._properties.sensor.azimuth + this._properties.sensor.fov, + ).geometry + } + ); this.links.add(id) } @@ -222,15 +238,15 @@ export default class COT { } } - if (update.properties.sensor) { - this.link(); - } else if (this._properties.sensor && !update.properties.sensor) { - // TODO Unlink & cleanup - } - this._properties = update.properties; if (update.properties) { + if (update.properties.sensor) { + this.link(); + } else if (this._properties.sensor && !update.properties.sensor) { + // TODO Unlink & cleanup + } + update.properties = COT.style(atlas, this._geometry.type, update.properties); if (isEqual(this.properties, update.properties)) { From 6279bf2124939cf5158317ec36035d04a893fe41 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 4 Apr 2025 15:25:25 -0600 Subject: [PATCH 4/5] Fix prop update --- api/web/src/base/cot.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/web/src/base/cot.ts b/api/web/src/base/cot.ts index beeb9c281..34b3bea3c 100644 --- a/api/web/src/base/cot.ts +++ b/api/web/src/base/cot.ts @@ -238,8 +238,6 @@ export default class COT { } } - this._properties = update.properties; - if (update.properties) { if (update.properties.sensor) { this.link(); From 0cd117ce041321243f2c7f8c6a82f58438aef4b9 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 4 Apr 2025 15:27:45 -0600 Subject: [PATCH 5/5] Fix conflicts --- api/web/src/base/cot.ts | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/api/web/src/base/cot.ts b/api/web/src/base/cot.ts index 34b3bea3c..73fdbd676 100644 --- a/api/web/src/base/cot.ts +++ b/api/web/src/base/cot.ts @@ -158,23 +158,17 @@ export default class COT { ) { const id = `${this.id}-sensor` - let updated = false; - - if (this.links.has(id)) { - const cot = atlas.db.cots.get(id); - if (cot) { - updated = true; - - cot.geometry = sector( + const cot = atlas.db.cots.get(id); + if (cot) { + cot.update({ + geometry: sector( this._properties.center, (this._properties.sensor.range || 10) / 1000, this._properties.sensor.azimuth, this._properties.sensor.azimuth + this._properties.sensor.fov, ).geometry - } - } - - if (!updated) { + }); + } else { // TODO Use NodeCoT & Respect Sensor Style if present new COT( atlas,