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"
>
@@ -426,7 +438,7 @@ Please use `const` to assign meaningful names to them...
ref="backgroundPopover"
:virtual-ref="backgroundIconRef"
placement="top-start"
- width="320"
+ width="330"
:teleported="false"
trigger="click"
popper-class="background-popper h-auto"
@@ -453,13 +465,14 @@ Please use `const` to assign meaningful names to them...
+
Drawn By*
@@ -475,13 +488,14 @@ Please use `const` to assign meaningful names to them...
+
Annotated By*
@@ -498,18 +512,59 @@ Please use `const` to assign meaningful names to them...
-
- Flight path display
-
-
- 2D
- 3D
-
-
+
+
+ Markers display
+
+
+
+ Standard
+ Image
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+ Flight path display
+
+
+ 2D
+ 3D
+
+
+
Organs display
@@ -565,14 +620,18 @@ Please use `const` to assign meaningful names to them...
ref="openMapPopover"
>
-
+ >
+
+
@@ -587,13 +646,17 @@ Please use `const` to assign meaningful names to them...
ref="settingsPopover"
>
-
+ >
+
+
@@ -602,9 +665,10 @@ Please use `const` to assign meaningful names to them...
ref="tooltip"
class="tooltip"
v-show="tooltipDisplay"
+ :tooltipType="tooltipType"
+ :provenanceEntry="provenanceEntry"
:annotationEntry="annotationEntry"
- :tooltipEntry="tooltipEntry"
- :annotationDisplay="viewingMode === 'Annotation'"
+ :imageEntry="imageEntry"
@annotation="commitAnnotationEvent"
/>
@@ -643,10 +707,18 @@ import yellowstar from '../icons/yellowstar'
import ResizeSensor from 'css-element-queries/src/ResizeSensor'
import * as flatmap from '@abi-software/flatmap-viewer'
import { AnnotationService } from '@abi-software/sparc-annotation'
-import { mapState } from 'pinia'
-import { useMainStore } from '@/store/index'
+import { mapState, mapStores } from 'pinia'
+import { useMainStore } from '@/stores/index'
+import { useSettingsStore } from '@/stores/settings'
import { DrawToolbar, Tooltip, TreeControls } from '@abi-software/map-utilities'
import '@abi-software/map-utilities/dist/style.css'
+import {
+ getBiolucidaThumbnails,
+ getSegmentationThumbnails,
+ getScaffoldThumbnails,
+ getPlotThumbnails
+} from '../services/scicrunchQueries'
+import imageMixin from '../mixins/imageMixin'
const centroid = (geometry) => {
let featureGeometry = { lng: 0, lat: 0, }
@@ -735,6 +807,7 @@ const createUnfilledTooltipData = function () {
*/
export default {
name: 'FlatmapVuer',
+ mixins:[imageMixin],
components: {
Button,
Col,
@@ -767,6 +840,71 @@ export default {
return { annotator }
},
methods: {
+ /**
+ * @vuese
+ * Function to add image thumbnails to the map.
+ */
+ populateImageThumbnails: async function (type) {
+ if (this.mapImp) {
+ this.closeTooltip()
+ this.mapImp.clearMarkers();
+ const identifiers = this.mapImp.anatomicalIdentifiers
+ const imageThumbnails = this.settingsStore.getImageThumbnails(type, identifiers)
+ this.populateMapWithImages(this.mapImp, imageThumbnails, type)
+ }
+ },
+ /**
+ * @vuese
+ * Function to fetching image thumbnails.
+ */
+ fetchImageThumbnails: async function (type) {
+ let thumbnails = {}
+ const organCuries = this.settingsStore.organCuries
+ if (type === 'Image') {
+ thumbnails = await getBiolucidaThumbnails(this.sparcAPI, organCuries, type)
+ } else if (type === 'Segmentation') {
+ thumbnails = await getSegmentationThumbnails(this.sparcAPI, organCuries, type)
+ } else if (type === 'Scaffold') {
+ thumbnails = await getScaffoldThumbnails(this.sparcAPI, organCuries, type)
+ } else if (type === 'Plot') {
+ thumbnails = await getPlotThumbnails(this.sparcAPI, organCuries, type)
+ }
+ this.settingsStore.updateImageThumbnails(type, thumbnails)
+ },
+ /**
+ * @vuese
+ * Function to switch the type of displayed image.
+ * @arg type
+ */
+ setImageType: async function (type) {
+ this.imageType = type
+ if (this.mapImp) {
+ this.imagesDownloading = true;
+ if (!this.settingsStore.imageTypeCached(type)) {
+ this.loading = true
+ await this.fetchImageThumbnails(type)
+ this.loading = false
+ }
+ this.populateImageThumbnails(type)
+ }
+ },
+ /**
+ * @vuese
+ * Function to switch show or hide images.
+ * @arg flag
+ */
+ setImage: function (flag) {
+ this.imageRadio = flag
+ if (this.mapImp) {
+ if (flag) {
+ this.setImageType(this.imageType)
+ } else {
+ this.mapImp.clearMarkers();
+ this.closeTooltip();
+ }
+ this.$emit('imageThumbnailDisplay', flag)
+ }
+ },
/**
* @vuese
* Function to initialise drawing.
@@ -1494,7 +1632,7 @@ export default {
this.mapImp.zoomToGeoJSONFeatures(gid, {noZoomIn: true})
} else {
// reset visibility of paths
- this.mapImp.selectGeoJSONFeatures("-1")
+ this.mapImp.unselectGeoJSONFeatures()
payload.selections.forEach((item) => {
let show = payload.checked.includes(item.taxon)
this.mapImp.enableConnectivityByTaxonIds(item.taxon, show)
@@ -1635,6 +1773,7 @@ export default {
userData: args,
eventType: eventType,
provenanceTaxonomy: taxons,
+ markerType: this.imageRadio ? this.imageType : "Standard",
}
if (eventType === 'click') {
this.featuresAlert = data.alert
@@ -1669,7 +1808,6 @@ export default {
}
if (
data &&
- data.type !== 'marker' &&
eventType === 'click' &&
!(this.viewingMode === 'Neuron Connection') &&
// Disable popup when drawing
@@ -1703,6 +1841,16 @@ export default {
* @arg data
*/
checkAndCreatePopups: async function (data) {
+ this.imageEntry = []
+ this.provenanceEntry = {}
+ if (data.feature.type === 'marker' && this.imageRadio) {
+ this.tooltipType = 'image'
+ const imageThumbnails = this.settingsStore.getImageThumbnails(this.imageType, [data.resource[0]])
+ if (data.resource[0] in imageThumbnails) {
+ this.imageEntry = markRaw(imageThumbnails[data.resource[0]])
+ }
+ this.displayTooltip(data.feature.models)
+ } else {
// Call flatmap database to get the connection data
if (this.viewingMode === 'Annotation') {
if (data.feature) {
@@ -1710,6 +1858,7 @@ export default {
...data.feature,
resourceId: this.serverURL,
}
+ this.tooltipType = 'annotation'
if (data.feature.featureId && data.feature.models) {
this.displayTooltip(data.feature.models)
} else if (data.feature.feature) {
@@ -1743,9 +1892,11 @@ export default {
results[1] ||
(data.feature.hyperlinks && data.feature.hyperlinks.length > 0)
) {
+ this.tooltipType = 'provenance'
this.resourceForTooltip = data.resource[0]
data.resourceForTooltip = this.resourceForTooltip
this.createTooltipFromNeuronCuration(data)
+ }
}
}
},
@@ -1784,7 +1935,7 @@ export default {
* @arg data
*/
createTooltipFromNeuronCuration: async function (data) {
- this.tooltipEntry = await this.flatmapQueries.createTooltipData(data)
+ this.provenanceEntry = await this.flatmapQueries.createTooltipData(data)
this.displayTooltip(data.resource[0])
},
/**
@@ -1985,7 +2136,7 @@ export default {
options.annotationFeatureGeometry = geometry
} else {
featureId = this.mapImp.modelFeatureIds(feature)[0]
- if (!this.activeDrawTool) {
+ if (!this.activeDrawTool && !this.imageEntry.length) {
options.positionAtLastClick = true
}
}
@@ -1997,9 +2148,12 @@ export default {
// const featureIds = [feature];
// this.moveMap(featureIds);
if (this.featuresAlert) {
- this.tooltipEntry['featuresAlert'] = this.featuresAlert;
+ this.provenanceEntry['featuresAlert'] = this.featuresAlert;
}
- this.$emit('connectivity-info-open', this.tooltipEntry);
+ this.$emit('connectivity-info-open', this.provenanceEntry);
+ }
+ if (this.imageThumbnailSidebar && this.imageEntry.length && this.viewingMode === 'Exploration') {
+ this.$emit('image-thumbnail-open', this.imageEntry)
}
// If UI is not disabled,
// And connectivityInfoSidebar is not set (default) or set to `false`
@@ -2010,8 +2164,10 @@ export default {
this.viewingMode === 'Annotation' ||
(
this.viewingMode === 'Exploration' &&
- !this.connectivityInfoSidebar &&
- this.hasTooltipEntry()
+ (
+ (!this.connectivityInfoSidebar && this.hasTooltipEntry()) ||
+ (!this.imageThumbnailSidebar && this.imageEntry.length)
+ )
)
)
) {
@@ -2030,7 +2186,7 @@ export default {
origins,
provenanceTaxonomy,
provenanceTaxonomyLabel
- } = this.tooltipEntry;
+ } = this.provenanceEntry;
return Boolean(
components?.length ||
@@ -2334,9 +2490,9 @@ export default {
this.addResizeButtonToMinimap()
this.loading = false
this.computePathControlsMaximumHeight()
- this.drawerOpen = !this.isCentreLine
+ this.drawerOpen = !this.isCentreLine
this.mapResize()
- this.handleMapClick();
+ this.handleMapClick()
/**
* This is ``onFlatmapReady`` event.
* @arg ``this`` (Component Vue Instance)
@@ -2353,7 +2509,8 @@ export default {
if (_map) {
_map.on('click', (e) => {
- if (this.tooltipEntry.featureId) {
+ // Tmeporary add imageEntry length
+ if (this.provenanceEntry.featureId || this.imageEntry.length) {
this.$emit('connectivity-info-close');
}
});
@@ -2600,12 +2757,12 @@ export default {
*/
sparcAPI: {
type: String,
- default: 'https://api.sparc.science/',
+ default: '',
},
/**
* Flag to disable UIs on Map
*/
- disableUI: {
+ disableUI: {
type: Boolean,
default: false,
},
@@ -2616,11 +2773,17 @@ export default {
type: Boolean,
default: false,
},
+ /**
+ * The option to show image thumbnail in sidebar
+ */
+ imageThumbnailSidebar: {
+ type: Boolean,
+ default: false,
+ },
},
provide() {
return {
flatmapAPI: this.flatmapAPI,
- sparcAPI: this.sparcAPI,
$annotator: this.annotator,
getFeaturesAlert: () => this.featuresAlert,
userApiKey: this.userToken,
@@ -2639,6 +2802,8 @@ export default {
serverURL: undefined,
layers: [],
pathways: [],
+ imageEntry: markRaw([]),
+ tooltipType: 'provenance',
sckanDisplay: [
{
label: 'Display Path with SCKAN',
@@ -2682,8 +2847,9 @@ export default {
currentBackground: 'white',
availableBackground: ['white', 'lightskyblue', 'black'],
loading: false,
+ imagesDownloading: false,
flatmapMarker: flatmapMarker,
- tooltipEntry: createUnfilledTooltipData(),
+ provenanceEntry: createUnfilledTooltipData(),
connectivityTooltipVisible: false,
drawerOpen: false,
featuresAlert: undefined,
@@ -2706,6 +2872,9 @@ export default {
drawnTypes: ['All tools', 'Point', 'LineString', 'Polygon', 'None'],
annotatedType: 'Anyone',
annotatedTypes: ['Anyone', 'Me', 'Others'],
+ imageRadio: false,
+ imageType: 'Image',
+ imageTypes: ['Image', 'Segmentation', 'Scaffold', 'Plot'],
openMapRef: undefined,
backgroundIconRef: undefined,
toolbarOptions: [
@@ -2743,11 +2912,12 @@ export default {
with: true,
without: true,
}
- })
+ }),
}
},
computed: {
...mapState(useMainStore, ['userToken']),
+ ...mapStores(useSettingsStore),
isValidDrawnCreated: function () {
return Object.keys(this.drawnCreatedEvent).length > 0
},
@@ -3251,6 +3421,10 @@ export default {
}
}
+.icon-button-container {
+ display: inline-block;
+}
+
.icon-button {
height: 24px !important;
width: 24px !important;
@@ -3585,7 +3759,12 @@ export default {
background-color: var(--white);
font-weight: 500;
color: rgb(48, 49, 51);
- width: 150px!important;
+ &.annotationSelector {
+ width: 150px!important;
+ }
+ &.imageSelector {
+ width: 125px!important;
+ }
}
:deep(.flatmap_dropdown) {
diff --git a/src/components/MultiFlatmapVuer.vue b/src/components/MultiFlatmapVuer.vue
index 5393cfda..5db24d02 100644
--- a/src/components/MultiFlatmapVuer.vue
+++ b/src/components/MultiFlatmapVuer.vue
@@ -81,6 +81,9 @@
style="height: 100%"
:flatmapAPI="flatmapAPI"
:sparcAPI="sparcAPI"
+ @imageThumbnailDisplay="onImageThumbnailDisplay"
+ :imageThumbnailSidebar="imageThumbnailSidebar"
+ @image-thumbnail-open="onImageThumbnailOpen"
/>
@@ -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]);
+ });
+ },
+ },
+});