diff --git a/.gitignore b/.gitignore index e66fee60..08e66091 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ docs/.vitepress/cache docs/components .DS_Store /.vitepress +.env +.env.local diff --git a/CHANGELOG.md b/CHANGELOG.md index 60bec72f..66e2c538 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -## [v1.4.1](https://github.com/alan-wu/flatmapvuer/compare/v1.4.0...v1.4.1) +## [v1.4.4](https://github.com/alan-wu/flatmapvuer/compare/v1.4.3...v1.4.4) + +### Commits + +- Update flatmap-viewer which fixes an issue on the minimap. [`4b763b9`](https://github.com/alan-wu/flatmapvuer/commit/4b763b928c54e6a46c7b4b538bfaeb38f87e6f34) + +## [v1.4.3](https://github.com/alan-wu/flatmapvuer/compare/v1.4.2...v1.4.3) - 2024-09-03 + +### Merged + +- Update flatmap-viewer which fixes an issue with geojson related call. [`#191`](https://github.com/alan-wu/flatmapvuer/pull/191) + +### Commits + +- Update flatmap-viewer which fixes an issue with selectGeoJSONFeatures call. [`0745f7e`](https://github.com/alan-wu/flatmapvuer/commit/0745f7e5b318c483b18720398ef88d829d893f05) + +## [v1.4.2](https://github.com/alan-wu/flatmapvuer/compare/v1.4.1...v1.4.2) - 2024-09-02 + +### Merged + +- Help mode bugfix [`#190`](https://github.com/alan-wu/flatmapvuer/pull/190) +- Remove error log from abortController [`#189`](https://github.com/alan-wu/flatmapvuer/pull/189) + +### Commits + +- Fix help mode svg icon highlight for Safari [`524f589`](https://github.com/alan-wu/flatmapvuer/commit/524f5897de2a80335e010981c02b93c0c14c9d60) +- Update README.md [`71e3072`](https://github.com/alan-wu/flatmapvuer/commit/71e3072438dc0c5b48eec3d43fd5db29f71ad78f) +- Fix help-mode index [`f77a321`](https://github.com/alan-wu/flatmapvuer/commit/f77a321120b8f96a298e3052a80fffbad2f75261) + +## [v1.4.1](https://github.com/alan-wu/flatmapvuer/compare/v1.4.0...v1.4.1) - 2024-08-22 ### Merged diff --git a/package-lock.json b/package-lock.json index 6c804078..1e18d45f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@abi-software/flatmapvuer", - "version": "1.4.1", + "version": "1.4.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@abi-software/flatmapvuer", - "version": "1.4.1", + "version": "1.4.4", "license": "Apache-2.0", "dependencies": { - "@abi-software/flatmap-viewer": "3.1.4", - "@abi-software/map-utilities": "1.1.0", + "@abi-software/flatmap-viewer": "3.1.8", + "@abi-software/map-utilities": "^1.1.0-beta.2", "@abi-software/sparc-annotation": "0.3.1", "@abi-software/svg-sprite": "1.0.0", "@element-plus/icons-vue": "^2.3.1", @@ -25,7 +25,7 @@ "@cypress/webpack-dev-server": "^3.6.1", "@vitejs/plugin-vue": "^4.6.2", "@vuese/markdown-render": "^2.11.3", - "@vuese/parser": "^2.10.3", + "@vuese/parser": "^2.9.1", "auto-changelog": "^2.4.0", "babel-eslint": "^10.1.0", "chokidar": "^3.6.0", @@ -40,12 +40,15 @@ "sass": "^1.69.5", "vite": "^5.0.10", "vitepress": "^1.0.0-rc.44" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.21.1" } }, "node_modules/@abi-software/flatmap-viewer": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@abi-software/flatmap-viewer/-/flatmap-viewer-3.1.4.tgz", - "integrity": "sha512-TufhMTpMMbPSI/VxsYgjsBIQ10fwCqruO1m+aHapYdioKQcsBSdhIuib+86Hj6ZKF6dSdkA37NWaMY3YlBV/qw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@abi-software/flatmap-viewer/-/flatmap-viewer-3.1.8.tgz", + "integrity": "sha512-X1bRBgrDZFR98Qg28C3jrK5qUmHndNX56RHJnAqXGVElPueeWSMcdrRh/AMmw0gxrpTzZBWJf9ilI774F+tbwQ==", "dependencies": { "@deck.gl/core": "^9.0.17", "@deck.gl/geo-layers": "^9.0.18", @@ -71,11 +74,23 @@ "polylabel": "^1.1.0" } }, + "node_modules/@abi-software/gallery": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@abi-software/gallery/-/gallery-1.1.1.tgz", + "integrity": "sha512-EOnKEQpL/6R7UZQpjiaBn5g4KPxc8RHrIfyTf4ukA+WJ2SU5T+R5GIYzi8Kuzgh797NehPpe/iFzPa21FvN+HQ==", + "dependencies": { + "axios": "^1.6.5", + "element-plus": "^2.4.4", + "unplugin-vue-components": "^0.26.0", + "vue": "^3.3.13" + } + }, "node_modules/@abi-software/map-utilities": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@abi-software/map-utilities/-/map-utilities-1.1.0.tgz", - "integrity": "sha512-icRE0/VTa4RollDDHSqKsK63gwUAxAepDoAYPJCljgsnW6TxVyXOt9Olacwd3k2u0jfKOaUt1QfdTlpVxY4QpQ==", + "version": "1.1.0-beta.2", + "resolved": "https://registry.npmjs.org/@abi-software/map-utilities/-/map-utilities-1.1.0-beta.2.tgz", + "integrity": "sha512-pDK6H8eciFgYl2XGVJIVuXmm+zvPI9VsM2NoN0mOX3kC1sMD7yL+dIO9VJe1xARg8zSZidAf1ra55je6Z31yTA==", "dependencies": { + "@abi-software/gallery": "^1.1.1", "@abi-software/svg-sprite": "^1.0.0", "@element-plus/icons-vue": "^2.3.1", "element-plus": "^2.7.3", @@ -781,70 +796,6 @@ "vue": "^3.2.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", @@ -861,294 +812,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -1656,14 +1319,14 @@ } }, "node_modules/@luma.gl/constants": { - "version": "9.0.24", - "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-9.0.24.tgz", - "integrity": "sha512-lq8irv1r6g9We/+Hufuw2aFbSo/ulUJ6awhpKKCgYTUr4AuPd/t13+GaNqyHfge9SOhhqaErbkKNoW1C59IPow==" + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-9.0.23.tgz", + "integrity": "sha512-s/ZhIyEQMisXYj8HCMywcSyem5b8XbVzGPeiftG0k52Nm8+I6Z7cSrF8B88B7GoHVJylwaKyPMXGSXy19STz4w==" }, "node_modules/@luma.gl/core": { - "version": "9.0.24", - "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-9.0.24.tgz", - "integrity": "sha512-zUJTInY/1dfl61K+oiSy8a9wOv7R6OJUsVfiZYFOHDjMQx6vHY1CYL9r+Wr0jdn2doEsSN2jCCGuBLLX+z4Y6Q==", + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-9.0.23.tgz", + "integrity": "sha512-7ZU5lKaIfpkqIIL/fF4vLqfeAo1VyFCdHz9MdcKmKFKig7QE6B97BygiVUOwRgOCgrxIpdMZS16JeKIiZFVdwQ==", "dependencies": { "@math.gl/types": "^4.0.0", "@probe.gl/env": "^4.0.2", @@ -1673,11 +1336,11 @@ } }, "node_modules/@luma.gl/engine": { - "version": "9.0.24", - "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-9.0.24.tgz", - "integrity": "sha512-tnYaabQAUHIg4gNidX4tzHOrwy7yHZcekIo43un1BeD4396JvqdojU4Q3W9Rhy/h1ViLYo7LOJ6aEFgoFgEuew==", + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-9.0.23.tgz", + "integrity": "sha512-npv8VUlaWbJOPrAtBqJGqWqR0BZZvoVqB3vB90MPi6b0s4BaETP3x4QEthxqQb386+Z2HgjCbPcNRFnUdSErcg==", "dependencies": { - "@luma.gl/shadertools": "9.0.24", + "@luma.gl/shadertools": "9.0.23", "@math.gl/core": "^4.0.0", "@probe.gl/log": "^4.0.2", "@probe.gl/stats": "^4.0.2" @@ -1687,12 +1350,12 @@ } }, "node_modules/@luma.gl/gltf": { - "version": "9.0.24", - "resolved": "https://registry.npmjs.org/@luma.gl/gltf/-/gltf-9.0.24.tgz", - "integrity": "sha512-BGVF3Oatsjod2d2Q6Aoc7To9rHfEINyWnel1lYu/DDe0G0zcJHFXVbK0KZ7J+ibd4d6vL1U6NdFTJ+FRhQ5/uQ==", + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@luma.gl/gltf/-/gltf-9.0.23.tgz", + "integrity": "sha512-FVYa/Umn68OJNLbX3NZT/t3LO4RDd0mdtxyJe9+59sGTEOIyU2scEhMj8mua8RnNnOcF2u4zr9eZ/AQFWGF7Xg==", "dependencies": { "@loaders.gl/textures": "^4.2.0", - "@luma.gl/shadertools": "9.0.24", + "@luma.gl/shadertools": "9.0.23", "@math.gl/core": "^4.0.0" }, "peerDependencies": { @@ -1702,9 +1365,9 @@ } }, "node_modules/@luma.gl/shadertools": { - "version": "9.0.24", - "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-9.0.24.tgz", - "integrity": "sha512-qdzHFlfELx7OCKwyq7OKZ9sVYDN6GJPcrquqLmqEIthiRxHRn9f7y3eZUJeIviSMiQmNrZcFx+c+YlIlDBfFVA==", + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-9.0.23.tgz", + "integrity": "sha512-qgSHxl+6nEEvAFSa09QiMesPVOxPdttH/UiTld++VkVHEQPE0tau4tBcBHbDCZNn9KeybA31TCkcbovH/zTcRQ==", "dependencies": { "@math.gl/core": "^4.0.0", "@math.gl/types": "^4.0.0", @@ -1715,11 +1378,11 @@ } }, "node_modules/@luma.gl/webgl": { - "version": "9.0.24", - "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-9.0.24.tgz", - "integrity": "sha512-fs5HWM24pSuSzSGSPnmB0TeIc15hoXwkXA8wKaa3/zIUEGbqbvOFUQIuTs+xEki6Yo5fuXMZbwBqPizEHj+MVQ==", + "version": "9.0.23", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-9.0.23.tgz", + "integrity": "sha512-ZicCtMbzOPq/1dEPF/0blZ6tVh14nBeZQ3LP2QUT76PjyM5rdwlLTVeAvgL235lla/fKcizMOqY0uT81h3Cbaw==", "dependencies": { - "@luma.gl/constants": "9.0.24", + "@luma.gl/constants": "9.0.23", "@probe.gl/env": "^4.0.2" }, "peerDependencies": { @@ -1852,9 +1515,9 @@ } }, "node_modules/@maplibre/maplibre-gl-style-spec": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.1.tgz", - "integrity": "sha512-5ueL4UDitzVtceQ8J4kY+Px3WK+eZTsmGwha3MBKHKqiHvKrjWWwBCIl1K8BuJSc5OFh83uI8IFNoFvQxX2uUw==", + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.0.tgz", + "integrity": "sha512-eSiQ3E5LUSxAOY9ABXGyfNhout2iEa6mUxKeaQ9nJ8NL1NuaQYU7zKqzx/LEYcXe1neT4uYAgM1wYZj3fTSXtA==", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.1", @@ -1863,7 +1526,7 @@ "quickselect": "^2.0.0", "rw": "^1.3.3", "sort-object": "^3.0.3", - "tinyqueue": "^3.0.0" + "tinyqueue": "^2.0.3" }, "bin": { "gl-style-format": "dist/gl-style-format.mjs", @@ -1881,11 +1544,6 @@ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, - "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/tinyqueue": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", - "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==" - }, "node_modules/@math.gl/core": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-4.0.1.tgz", @@ -2158,13 +1816,12 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.1.tgz", + "integrity": "sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==", "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2287,6 +1944,19 @@ "url": "https://opencollective.com/turf" } }, + "node_modules/@turf/bearing/node_modules/@turf/invariant": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.1.0.tgz", + "integrity": "sha512-OCLNqkItBYIP1nE9lJGuIUatWGtQ4rhBKAyTfFu0z8npVzGEYzvguEeof8/6LkKmTTEHW53tCjoEhSSzdRh08Q==", + "dependencies": { + "@turf/helpers": "^7.1.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.6.2" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, "node_modules/@turf/boolean-clockwise": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-5.1.5.tgz", @@ -2301,14 +1971,6 @@ "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-5.1.5.tgz", "integrity": "sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==" }, - "node_modules/@turf/boolean-clockwise/node_modules/@turf/invariant": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-5.2.0.tgz", - "integrity": "sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==", - "dependencies": { - "@turf/helpers": "^5.1.5" - } - }, "node_modules/@turf/clone": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-6.5.0.tgz", @@ -2346,6 +2008,19 @@ "url": "https://opencollective.com/turf" } }, + "node_modules/@turf/destination/node_modules/@turf/invariant": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.1.0.tgz", + "integrity": "sha512-OCLNqkItBYIP1nE9lJGuIUatWGtQ4rhBKAyTfFu0z8npVzGEYzvguEeof8/6LkKmTTEHW53tCjoEhSSzdRh08Q==", + "dependencies": { + "@turf/helpers": "^7.1.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.6.2" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, "node_modules/@turf/distance": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-7.1.0.tgz", @@ -2372,15 +2047,7 @@ "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/helpers": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", - "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/invariant": { + "node_modules/@turf/distance/node_modules/@turf/invariant": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.1.0.tgz", "integrity": "sha512-OCLNqkItBYIP1nE9lJGuIUatWGtQ4rhBKAyTfFu0z8npVzGEYzvguEeof8/6LkKmTTEHW53tCjoEhSSzdRh08Q==", @@ -2393,18 +2060,27 @@ "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/invariant/node_modules/@turf/helpers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.1.0.tgz", - "integrity": "sha512-dTeILEUVeNbaEeoZUOhxH5auv7WWlOShbx7QSd4s0T4Z0/iz90z9yaVCtZOLbU89umKotwKaJQltBNO9CzVgaQ==", - "dependencies": { - "@types/geojson": "^7946.0.10", - "tslib": "^2.6.2" - }, + "node_modules/@turf/helpers": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", + "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", "funding": { "url": "https://opencollective.com/turf" } }, + "node_modules/@turf/invariant": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-5.2.0.tgz", + "integrity": "sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==", + "dependencies": { + "@turf/helpers": "^5.1.5" + } + }, + "node_modules/@turf/invariant/node_modules/@turf/helpers": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-5.1.5.tgz", + "integrity": "sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==" + }, "node_modules/@turf/length": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/length/-/length-7.1.0.tgz", @@ -2512,6 +2188,19 @@ "url": "https://opencollective.com/turf" } }, + "node_modules/@turf/nearest-point-on-line/node_modules/@turf/invariant": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.1.0.tgz", + "integrity": "sha512-OCLNqkItBYIP1nE9lJGuIUatWGtQ4rhBKAyTfFu0z8npVzGEYzvguEeof8/6LkKmTTEHW53tCjoEhSSzdRh08Q==", + "dependencies": { + "@turf/helpers": "^7.1.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.6.2" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, "node_modules/@turf/nearest-point-on-line/node_modules/@turf/meta": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.1.0.tgz", @@ -2562,14 +2251,6 @@ "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-5.1.5.tgz", "integrity": "sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==" }, - "node_modules/@turf/rewind/node_modules/@turf/invariant": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-5.2.0.tgz", - "integrity": "sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==", - "dependencies": { - "@turf/helpers": "^5.1.5" - } - }, "node_modules/@turf/rewind/node_modules/@turf/meta": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-5.2.0.tgz", @@ -2629,28 +2310,6 @@ "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==" }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -3135,17 +2794,10 @@ "dev": true }, "node_modules/@vuese/parser": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@vuese/parser/-/parser-2.10.3.tgz", - "integrity": "sha512-Vcn++EJps0KS8fs9aBllFC6CKx6ttVPXtbbZCyXXWtoQC5VyDaydU0UFVaDciznUNGqwSzjNNVvxQqOPdmV0vQ==", - "dev": true, - "dependencies": { - "@babel/generator": "^7.12.10", - "@babel/parser": "^7.12.0", - "@babel/traverse": "^7.12.0", - "@babel/types": "^7.3.4", - "vue-template-compiler": "^2.6.11" - } + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@vuese/parser/-/parser-2.9.1.tgz", + "integrity": "sha512-5XVgmg9TviosbQEzo0Et1n/WX6s+fmK2l3DKEX8tGaPJLKN+Qh5GEosjHVYw1E4nZllPv2kDa7HqKwqR+0QUUw==", + "dev": true }, "node_modules/@vueuse/core": { "version": "9.13.0", @@ -3587,10 +3239,10 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "peer": true, "peerDependencies": { @@ -4035,8 +3687,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -4095,6 +3746,34 @@ "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==", "dev": true }, + "node_modules/axios": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/babel-eslint": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", @@ -4197,9 +3876,9 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -4210,7 +3889,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -4245,12 +3924,12 @@ "dev": true }, "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -4716,7 +4395,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5332,12 +5010,6 @@ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true - }, "node_modules/debug": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", @@ -5484,7 +5156,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -5712,9 +5383,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "peer": true, "dependencies": { @@ -6814,37 +6485,37 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.20.0.tgz", + "integrity": "sha512-pLdae7I6QqShF5PnNTCVn4hI91Dx0Grkn2+IAsMTgMIKuQVte2dN9PeGSSAME2FR8anOhVA62QDIUaWVfEXVLw==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "1.2.0", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -6864,6 +6535,15 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7164,7 +6844,6 @@ "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, "funding": [ { "type": "individual", @@ -9650,10 +9329,13 @@ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -9684,9 +9366,9 @@ "integrity": "sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==" }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -9711,7 +9393,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -9720,7 +9401,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -10861,9 +10541,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "dev": true }, "node_modules/pbf": { @@ -11655,6 +11335,19 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -11823,9 +11516,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "dependencies": { "debug": "2.6.9", @@ -11956,9 +11649,9 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.0.tgz", + "integrity": "sha512-pDLK8zwl2eKaYrs8mrPZBJua4hMplRWJ1tIFksVC3FtBEBnl8dxgeHtsaMS8DhS9i4fLObaon6ABoc4/hQGdPA==", "dev": true, "dependencies": { "encodeurl": "~1.0.2", @@ -11970,6 +11663,51 @@ "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-static/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-static/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serve-static/node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -13695,16 +13433,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/vue-template-compiler": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", - "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", - "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, "node_modules/watchpack": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", @@ -13742,22 +13470,21 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.91.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", - "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "peer": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", + "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.16.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/package.json b/package.json index 15a30fe7..441564e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@abi-software/flatmapvuer", - "version": "1.4.1", + "version": "1.4.4", "license": "Apache-2.0", "files": [ "dist/*", @@ -43,8 +43,8 @@ "./src/*": "./src/*" }, "dependencies": { - "@abi-software/flatmap-viewer": "3.1.4", - "@abi-software/map-utilities": "1.1.0", + "@abi-software/flatmap-viewer": "3.1.8", + "@abi-software/map-utilities": "^1.1.0-beta.2", "@abi-software/sparc-annotation": "0.3.1", "@abi-software/svg-sprite": "1.0.0", "@element-plus/icons-vue": "^2.3.1", @@ -59,7 +59,7 @@ "@cypress/webpack-dev-server": "^3.6.1", "@vitejs/plugin-vue": "^4.6.2", "@vuese/markdown-render": "^2.11.3", - "@vuese/parser": "^2.10.3", + "@vuese/parser": "^2.9.1", "auto-changelog": "^2.4.0", "babel-eslint": "^10.1.0", "chokidar": "^3.6.0", @@ -92,5 +92,8 @@ "browserslist": [ "> 1%", "last 2 versions" - ] + ], + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.21.1" + } } diff --git a/src/App.vue b/src/App.vue index 1713a030..9d699e68 100644 --- a/src/App.vue +++ b/src/App.vue @@ -77,6 +77,7 @@ :displayMinimap="true" :enableOpenMapUI="true" :flatmapAPI="flatmapAPI" + :sparcAPI="sparcAPI" :disableUI="disableUI" @open-pubmed-url="onOpenPubmedUrl" @pathway-selection-changed="onPathwaySelectionChanged" @@ -109,6 +110,9 @@ import './icons/mapicon-species-style.css' import MultiFlatmapVuer from './components/MultiFlatmapVuer.vue' import { HelpModeDialog } from '@abi-software/map-utilities' import '@abi-software/map-utilities/dist/style.css' +import { mapStores } from 'pinia'; +import { useSettingsStore } from './stores/settings'; +import { getOrganCuries } from './services/scicrunchQueries' export default { name: 'app', @@ -145,6 +149,7 @@ export default { if (this.consoleOn) console.log(component) let taxon = component.mapImp.describes let id = component.mapImp.addMarker('UBERON:0000948') + window.flatmapImp = component.mapImp component.enablePanZoomEvents(true) //component.showPathwaysDrawer(false); @@ -285,6 +290,7 @@ export default { useHelpModeDialog: true, multiflatmapRef: null, mapSettings: [], + sparcAPI: import.meta.env.VITE_SPARC_API, //flatmapAPI: "https://mapcore-demo.org/current/flatmap/v2/" //flatmapAPI: "https://mapcore-demo.org/devel/flatmap/v3/" flatmapAPI: "https://mapcore-demo.org/current/flatmap/v3/", @@ -293,11 +299,17 @@ export default { //flatmapAPI: "https://mapcore-demo.org/fccb/flatmap/" //flatmapAPI: "https://mapcore-demo.org/staging/flatmap/v1/" // flatmapAPI: "https://mapcore-demo.org/devel/flatmap/v1/", - ElIconSetting: shallowRef(ElIconSetting) + ElIconSetting: shallowRef(ElIconSetting), } }, mounted: function () { this.multiflatmapRef = this.$refs.multi; + if (this.sparcAPI) { + getOrganCuries(this.sparcAPI).then((organCuries) => this.settingsStore.updateOrganCuries(organCuries)) + } + }, + computed: { + ...mapStores(useSettingsStore), }, watch: { helpMode: function (newVal) { diff --git a/src/components/FlatmapVuer.vue b/src/components/FlatmapVuer.vue index db2e17f0..8bd2b1dc 100644 --- a/src/components/FlatmapVuer.vue +++ b/src/components/FlatmapVuer.vue @@ -176,13 +176,17 @@ Please use `const` to assign meaningful names to them... ref="zoomInPopover" > @@ -285,7 +297,7 @@ Please use `const` to assign meaningful names to them... width="200" trigger="manual" popper-class="flatmap-popper flatmap-marker-popper" - :visible="hoverVisibilities[5].value" + :visible="hoverVisibilities[0].value" ref="markerPopover" > @@ -264,6 +267,12 @@ export default { onConnectivityInfoOpen: function (entryData) { this.$emit('connectivity-info-open', entryData); }, + onImageThumbnailDisplay: function (payload) { + this.$emit('imageThumbnailDisplay', payload); + }, + onImageThumbnailOpen: function (payload) { + this.$emit('image-thumbnail-open', payload); + }, onSelectionsDataChanged: function (data) { this.$emit('pathway-selection-changed', data); }, @@ -700,7 +709,7 @@ export default { */ sparcAPI: { type: String, - default: 'https://api.sparc.science/', + default: '', }, /** * Flag to disable UIs on Map @@ -716,6 +725,13 @@ export default { type: Boolean, default: false, }, + /** + * The option to show image thumbnail in sidebar + */ + imageThumbnailSidebar: { + type: Boolean, + default: false, + }, }, data: function () { return { diff --git a/src/main.js b/src/main.js index c7585f1b..99b5d454 100644 --- a/src/main.js +++ b/src/main.js @@ -1,7 +1,7 @@ import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' -import { useMainStore } from '@/store/index' +import { useMainStore } from '@/stores/index' const pinia = createPinia() const app = createApp(App) diff --git a/src/mixins/imageMixin.js b/src/mixins/imageMixin.js new file mode 100644 index 00000000..73617815 --- /dev/null +++ b/src/mixins/imageMixin.js @@ -0,0 +1,116 @@ +export default { + methods: { + populateMapWithImages: function (mapImp, images, type) { + this.downloadImageKeys = []; // to count downloaded images + for (const [key, list] of Object.entries(images)) { + // Exclude empty list + if (list.length) { + this.downloadImageThumbnail(mapImp, key, list, type); + } + } + }, + downloadImageThumbnail: function (mapImp, key, list, type) { + // This inner list count will be updated by failed download + const count = list.length; + + if (!this.downloadImageKeys.includes(key)) { + this.downloadImageKeys.push(key); + } + + if (count > 0) { + //Pick a random image + const index = Math.floor(Math.random() * count); + const thumbnail = list[index].thumbnail; + this.getThumbnail(thumbnail, type) + .then((wrapperElement) => { + this.downloadImageKeys = this.downloadImageKeys.filter((item) => item !== key); + this.addImageThumbnailMarker(mapImp, key, wrapperElement); + + // All images are downloaded + if (!this.downloadImageKeys.length) { + this.imagesDownloading = false; + } + }) + .catch(() => { + //Failed to download, pick another one + list.splice(index); + this.downloadImageThumbnail(mapImp, key, list, type); + }); + } else { + if (this.downloadImageKeys.includes(key)) { + this.downloadImageKeys = this.downloadImageKeys.filter((item) => item !== key); + + // Failed to download, the last item + if (!this.downloadImageKeys.length) { + this.imagesDownloading = false; + } + } + } + }, + getThumbnail: async function (url, type) { + return new Promise((resolve, reject) => { + if (type === "Image" || type === "Segmentation") { + this.getBinaryThumbnail(url) + .then((response) => resolve(response)) + .catch((response) => reject(response)); + } else { + this.getGenericThumbnail(url) + .then((response) => resolve(response)) + .catch((response) => reject(response)); + } + }); + }, + getBinaryThumbnail: async function (url) { + return new Promise((resolve, reject) => { + fetch(url) + .then((response) => { + if (response.status >= 200 && response.status < 300) { + return response.text(); + } else { + reject(); + } + }) + .then((data) => { + if (data) { + let img = new Image(); + let wrapperElement = document.createElement("div"); + img.style = "height: auto;width: 50px;margin-right: 80px;"; + img.onload = function () { + wrapperElement.appendChild(img); + resolve(wrapperElement); + }; + img.onerror = function () { + reject(new Error("Failed to load image at " + url)); + }; + img.src = `data:'image/png';base64,${data}`; + } else { + reject(new Error("Failed to load image at " + url)); + } + }); + }); + }, + getGenericThumbnail: async function (url) { + return new Promise((resolve, reject) => { + let img = new Image(); + let wrapperElement = document.createElement("div"); + img.style = "height: auto;width: 50px;margin-right: 80px;"; + img.onload = function () { + wrapperElement.appendChild(img); + resolve(wrapperElement); + }; + img.onerror = function () { + reject(new Error("Failed to load image at " + url)); + }; + img.src = url; + }); + }, + addImageThumbnailMarker: function (mapImp, id, wrapperElement) { + const markerIdentifier = mapImp.addMarker(id, { + element: wrapperElement, + className: "highlight-marker", + cluster: false, + type: "image", + }); + }, + }, +}; diff --git a/src/services/scicrunchQueries.js b/src/services/scicrunchQueries.js new file mode 100644 index 00000000..a0ad1561 --- /dev/null +++ b/src/services/scicrunchQueries.js @@ -0,0 +1,281 @@ +const getOrganCuries = async (sparcApi, filetypes = [], species = []) => { + let params = new URLSearchParams(); + filetypes.forEach((type) => { + params.append("filetypes", type); + }); + species.forEach((name) => { + params.append("species", name); + }); + + const response = await fetch(`${sparcApi}/get-organ-curies/?${params}`); + const data = await response.json(); + + let organCuries = []; + data.uberon.array.forEach((pair) => { + const organCurie = { + id: pair.id.toUpperCase(), + name: pair.name, + }; + organCuries.push(organCurie); + }); + + return organCuries; +}; + +const getFilesInfoForCuries = async (sparcApi, organCuries, filetypes) => { + const response = await fetch(`${sparcApi}/get-files-info-for-curies`, { + method: "POST", + body: JSON.stringify({ + curies: organCuries.map((item) => item.id), + filetypes: filetypes, + }), + headers: { + "Content-Type": "application/json", + }, + }); + const data = await response.json(); + + return data; +}; + +const getFileNameFromPath = (filePath) => { + return filePath.substring(filePath.lastIndexOf("/") + 1); +}; + +const getBiolucidaThumbnailURL = (sparcApi, biolucidaId) => { + return `${sparcApi}/thumbnail/${biolucidaId}`; +}; + +const getBiolucidaThumbnails = async (sparcApi, organCuries, type) => { + try { + const data = await getFilesInfoForCuries(sparcApi, organCuries, [ + "biolucida-2d", + "biolucida-3d", + ]); + + if (data["files_info"]) { + let images = {}; + for (const [key, value] of Object.entries(data["files_info"])) { + if (value.length > 0) { + let list = []; + value.forEach((entry) => { + const thumbnailURL = getBiolucidaThumbnailURL( + sparcApi, + entry.biolucida_id + ); + if (entry.biolucida_id) { + let image = { + thumbnail: thumbnailURL, + resource: entry.file_path, + biolucida_id: entry.biolucida_id, + id: entry.id, + title: getFileNameFromPath(entry.file_path), + type: type, + link: thumbnailURL, + mimetype: entry.mimetype, + species: entry.species, + version: entry.version, + }; + list.push(image); + } + }); + images[key] = list; + } + } + return images; + } + } catch (error) { + console.error("Error:", error); + } + return {}; +}; + +const getSegmentationThumbnailURL = ( + sparcApi, + datasetId, + datasetVersion, + filePath +) => { + return `${sparcApi}/thumbnail/neurolucida?datasetId=${datasetId}&version=${datasetVersion}&path=files/${filePath}`; +}; + +const getSegmentationThumbnails = async (sparcApi, organCuries, type) => { + try { + const data = await getFilesInfoForCuries(sparcApi, organCuries, [ + "mbf-segmentation", + ]); + + if (data["files_info"]) { + let images = {}; + for (const [key, value] of Object.entries(data["files_info"])) { + if (value.length > 0) { + let list = []; + value.forEach((entry) => { + const thumbnailURL = getSegmentationThumbnailURL( + sparcApi, + entry.id, + entry.version, + entry.file_path + ); + let image = { + thumbnail: thumbnailURL, + resource: entry.file_path, + id: entry.id, + title: getFileNameFromPath(entry.file_path), + type: type, + link: thumbnailURL, + mimetype: entry.mimetype, + species: entry.species, + version: entry.version, + }; + list.push(image); + }); + images[key] = list; + } + } + return images; + } + } catch (error) { + console.error("Error:", error); + } + return {}; +}; + +const findEntryWithPathInArray = (entry, list, type) => { + if (entry && list) { + for (let i = 0; i < entry.isSourceOf.length; i++) { + for (let l = 0; l < list.length; l++) { + const item = list[l]; + if ( + entry.id === item.id && + (!type || item.type === type) && + entry.isSourceOf[i] === item.file_path + ) { + return item; + } + } + } + } + return undefined; +}; + +const getScaffoldThumbnailURL = (sparcApi, entry, list) => { + const viewEntry = findEntryWithPathInArray( + entry, + list, + "abi-scaffold-view-file" + ); + const thumbnailEntry = findEntryWithPathInArray( + viewEntry, + list, + "abi-thumbnail" + ); + if (thumbnailEntry) { + return `${sparcApi}/s3-resource/${thumbnailEntry.id}/files/${thumbnailEntry.file_path}`; + } + return undefined; +}; + +const getScaffoldThumbnails = async (sparcApi, organCuries, type) => { + try { + const data = await getFilesInfoForCuries(sparcApi, organCuries, [ + "abi-thumbnail", + "abi-scaffold-metadata-file", + "abi-scaffold-view-file", + ]); + + if (data["files_info"]) { + let images = {}; + for (const [key, value] of Object.entries(data["files_info"])) { + if (value.length > 0) { + let list = []; + value.forEach((entry) => { + if (entry.type === "abi-scaffold-metadata-file") { + const thumbnailURL = getScaffoldThumbnailURL( + sparcApi, + entry, + value + ); + if (thumbnailURL) { + let image = { + thumbnail: thumbnailURL, + resource: entry.file_path, + id: entry.id, + title: getFileNameFromPath(entry.file_path), + type: type, + link: thumbnailURL, + species: entry.species, + version: entry.version, + }; + list.push(image); + } + } + }); + images[key] = list; + } + } + return images; + } + } catch (error) { + console.error("Error:", error); + } + return {}; +}; + +const getPlotThumbnailURL = (sparcApi, entry) => { + //None of the thumbnail for plot is properly annotated. + //We will use the first in is source of for testing. + if (entry.isSourceOf.length > 0) { + return `${sparcApi}/s3-resource/${entry.id}/files/${entry.isSourceOf[0]}`; + } + return undefined; +}; + +const getPlotThumbnails = async (sparcApi, organCuries, type) => { + try { + const data = await getFilesInfoForCuries(sparcApi, organCuries, [ + "abi-plot", + "abi-thumbnail", + ]); + + if (data["files_info"]) { + let images = {}; + for (const [key, value] of Object.entries(data["files_info"])) { + if (value.length > 0) { + let list = []; + value.forEach((entry) => { + if (entry.type === "abi-plot") { + const thumbnailURL = getPlotThumbnailURL(sparcApi, entry); + if (thumbnailURL) { + let image = { + thumbnail: thumbnailURL, + resource: entry.file_path, + id: entry.id, + title: getFileNameFromPath(entry.file_path), + type: type, + link: thumbnailURL, + species: entry.species, + version: entry.version, + }; + list.push(image); + } + } + }); + images[key] = list; + } + } + return images; + } + } catch (error) { + console.error("Error:", error); + } + return {}; +}; + +export { + getOrganCuries, + getBiolucidaThumbnails, + getSegmentationThumbnails, + getScaffoldThumbnails, + getPlotThumbnails, +}; diff --git a/src/store/index.js b/src/stores/index.js similarity index 100% rename from src/store/index.js rename to src/stores/index.js diff --git a/src/stores/settings.js b/src/stores/settings.js new file mode 100644 index 00000000..67bc5a73 --- /dev/null +++ b/src/stores/settings.js @@ -0,0 +1,46 @@ +import { defineStore } from "pinia"; + +/* eslint-disable no-alert, no-console */ + +export const useSettingsStore = defineStore("settings", { + state: () => { + return { + organCuries: [], + imageTypes: [], + imageThumbnails: {}, + }; + }, + getters: { + imageTypeCached: (state) => (imageType) => { + return state.imageTypes.includes(imageType); + }, + getImageThumbnails: + (state) => + (imageType, uberonIds = undefined) => { + if (uberonIds) { + let thumbnails = {}; + Object.entries(state.imageThumbnails).forEach(([key, value]) => { + if (uberonIds.includes(key)) { + thumbnails[key] = value.filter((item) => item.type === imageType); + } + }); + return thumbnails; + } + return state.imageThumbnails; + }, + }, + actions: { + updateOrganCuries(organCuries) { + this.organCuries = organCuries; + }, + updateImageThumbnails(imageType, imageThumbnails) { + this.imageTypes.push(imageType); + Object.keys(imageThumbnails).forEach((key) => { + if (!(key in this.imageThumbnails)) { + this.imageThumbnails[key] = []; + } + this.imageThumbnails[key].push(...imageThumbnails[key]); + }); + }, + }, +});