diff --git a/.github/workflows/feature-branch_cleanup.yml b/.github/workflows/feature-branch_cleanup.yml index 4f02a67f1e..04ce4c13ea 100644 --- a/.github/workflows/feature-branch_cleanup.yml +++ b/.github/workflows/feature-branch_cleanup.yml @@ -8,7 +8,7 @@ on: - '!staging' - '!gtif-demo' - '!gtif_staging' - + - '!polar' jobs: delete_folder: runs-on: ubuntu-latest @@ -24,4 +24,4 @@ jobs: # Delete the folder from the S3 bucket - name: Delete folder from S3 run: | - aws s3 rm s3://${{ secrets.AWS_S3_BUCKET }}/feature-branches/${{ github.event.ref }} --recursive \ No newline at end of file + aws s3 rm s3://${{ secrets.AWS_S3_BUCKET }}/feature-branches/${{ github.event.ref }} --recursive diff --git a/.github/workflows/feature-branch_deploy.yml b/.github/workflows/feature-branch_deploy.yml index a139f42d0c..1b249592f4 100644 --- a/.github/workflows/feature-branch_deploy.yml +++ b/.github/workflows/feature-branch_deploy.yml @@ -2,7 +2,7 @@ name: Feature branch deployment on: push: - branches-ignore: [ master, staging, gtif-demo, gtif_staging ] + branches-ignore: [ master, staging, gtif-demo, gtif_staging, polar ] concurrency: group: ci-tests-${{ github.ref }}-1 @@ -38,7 +38,7 @@ jobs: uses: datamonsters/replace-action@v2 with: files: 'app/dist/shConfig.js' - replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$MAPBOX_ACCESS_TOKEN=${{ secrets.MAPBOX_ACCESS_TOKEN }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' + replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$SH_INSTANCE_ID_POLAR=${{ secrets.SH_INSTANCE_ID_POLAR }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' # Upload build client to S3 - name: sync client s3 diff --git a/.github/workflows/gtif-demo_deploy.yml b/.github/workflows/gtif-demo_deploy.yml index afaeee1f78..b73c55911b 100644 --- a/.github/workflows/gtif-demo_deploy.yml +++ b/.github/workflows/gtif-demo_deploy.yml @@ -37,7 +37,7 @@ jobs: uses: datamonsters/replace-action@v2 with: files: 'app/dist/shConfig.js' - replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$MAPBOX_ACCESS_TOKEN=${{ secrets.MAPBOX_ACCESS_TOKEN }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' + replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$SH_INSTANCE_ID_POLAR=${{ secrets.SH_INSTANCE_ID_POLAR }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' # Upload build client to S3 - name: sync client s3 diff --git a/.github/workflows/gtif-staging_deploy.yml b/.github/workflows/gtif-staging_deploy.yml index de374f8030..8e3a834ff5 100644 --- a/.github/workflows/gtif-staging_deploy.yml +++ b/.github/workflows/gtif-staging_deploy.yml @@ -37,7 +37,7 @@ jobs: uses: datamonsters/replace-action@v2 with: files: 'app/dist/shConfig.js' - replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$MAPBOX_ACCESS_TOKEN=${{ secrets.MAPBOX_ACCESS_TOKEN }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' + replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$SH_INSTANCE_ID_POLAR=${{ secrets.SH_INSTANCE_ID_POLAR }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' # Upload build client to S3 - name: sync client s3 diff --git a/.github/workflows/polar_deploy.yml b/.github/workflows/polar_deploy.yml new file mode 100644 index 0000000000..195d2fa0d1 --- /dev/null +++ b/.github/workflows/polar_deploy.yml @@ -0,0 +1,100 @@ +name: Polar deployment + +on: + push: + branches: [ polar ] + +concurrency: + group: ci-tests-${{ github.ref }}-1 + cancel-in-progress: true + +jobs: + deploy: + runs-on: ubuntu-22.04 + + steps: + # Checkout code + - uses: actions/checkout@v3 + + # Install node + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: '16' + registry-url: 'https://registry.npmjs.org' + cache: 'npm' + cache-dependency-path: app/package-lock.json + + # Build + - name: Build + run: | + cd app/ + npm ci --ignore-scripts + npm run build + + # Inject SH Config file + - name: replace instance ID + uses: datamonsters/replace-action@v2 + with: + files: 'app/dist/shConfig.js' + replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$SH_INSTANCE_ID_POLAR=${{ secrets.SH_INSTANCE_ID_POLAR }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }}' + + # Upload build client to S3 + - name: sync client s3 + uses: jakejarvis/s3-sync-action@v0.5.1 + with: + args: --delete --follow-symlinks --exclude 'data/*' --exclude 'eodash-data/*' + env: + SOURCE_DIR: 'app/dist' + DEST_DIR: 'polar' + AWS_REGION: 'eu-central-1' + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + # Upload data to S3 + - name: sync data s3 + uses: jakejarvis/s3-sync-action@v0.5.1 + with: + args: --delete --follow-symlinks + env: + SOURCE_DIR: 'app/dist/data' + DEST_DIR: 'polar/data' + AWS_REGION: 'eu-central-1' + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + # Upload eodashdata to S3 + - name: sync eodashdata s3 + uses: jakejarvis/s3-sync-action@v0.5.1 + with: + args: --delete --follow-symlinks + env: + SOURCE_DIR: 'app/dist/eodash-data' + DEST_DIR: 'polar/eodash-data' + AWS_REGION: 'eu-central-1' + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + # Invalidate Cloudfront + - name: invalidate + uses: chetan/invalidate-cloudfront-action@v1.2 + env: + DISTRIBUTION: ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID_POLAR }} + PATHS: '/*' + AWS_REGION: 'eu-central-1' + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + # Send notification + - name: action-slack + uses: 8398a7/action-slack@v3.15.1 + with: + status: ${{ job.status }} + author_name: eodash_deploy + fields: repo,message,commit,author,action,eventName,ref,workflow + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required + if: always() diff --git a/.github/workflows/production_deploy.yml b/.github/workflows/production_deploy.yml index b7e5425a39..a1920f44b5 100644 --- a/.github/workflows/production_deploy.yml +++ b/.github/workflows/production_deploy.yml @@ -37,7 +37,7 @@ jobs: uses: datamonsters/replace-action@v2 with: files: 'app/dist/shConfig.js' - replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$MAPBOX_ACCESS_TOKEN=${{ secrets.MAPBOX_ACCESS_TOKEN }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' + replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$SH_INSTANCE_ID_POLAR=${{ secrets.SH_INSTANCE_ID_POLAR }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' # Upload to S3 - name: sync s3 diff --git a/.github/workflows/staging_deploy.yml b/.github/workflows/staging_deploy.yml index 1f5800cd1c..90bb9edae6 100644 --- a/.github/workflows/staging_deploy.yml +++ b/.github/workflows/staging_deploy.yml @@ -37,7 +37,7 @@ jobs: uses: datamonsters/replace-action@v2 with: files: 'app/dist/shConfig.js' - replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$MAPBOX_ACCESS_TOKEN=${{ secrets.MAPBOX_ACCESS_TOKEN }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' + replacements: '$SH_INSTANCE_ID=${{ secrets.SH_INSTANCE_ID }},$SH_INSTANCE_ID_POLAR=${{ secrets.SH_INSTANCE_ID_POLAR }},$GEODB_INSTANCE_ID=${{ secrets.GEODB_INSTANCE_ID }},$LISTMONK_API_KEY=${{ secrets.LISTMONK_API_KEY }},$STAT_API_CLIENT_SECRET=${{ secrets.STAT_API_CLIENT_SECRET }},$STAT_API_CLIENT_ID=${{ secrets.STAT_API_CLIENT_ID }},$SH_INSTANCE_ID_GTIF=${{ secrets.SH_INSTANCE_ID_GTIF }}' # Upload build client to S3 - name: sync client s3 diff --git a/app/package-lock.json b/app/package-lock.json index a74ac49cae..3857e0564f 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -9,9 +9,12 @@ "version": "4.0.0", "dependencies": { "@chenfengyuan/vue-countdown": "^1.1.5", - "@eox/itemfilter": "0.12.1", - "@eox/layercontrol": "^0.12.0", - "@eox/stacinfo": "^0.3.0", + "@eox/itemfilter": "0.14.0", + "@eox/jsonform": "^0.6.1", + "@eox/layercontrol": "^0.17.3", + "@eox/map": "^1.6.1", + "@eox/stacinfo": "^0.3.3", + "@eox/storytelling": "^0.5.0", "@turf/difference": "^6.5.0", "axios": "^0.21.1", "chart.js": "2.9.3", @@ -33,7 +36,7 @@ "luxon": "^1.28.1", "marked": "^4.0.10", "medium-zoom": "^1.0.6", - "ol": "^8.1.0", + "ol": "^9.1.0", "ol-mapbox-style": "^11.0.0", "proj4": "^2.8.0", "regl": "^2.1.0", @@ -106,17 +109,22 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "node_modules/@babel/compat-data": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", @@ -157,14 +165,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -268,22 +276,22 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -436,18 +444,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -490,22 +498,28 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/highlight/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1791,20 +1805,20 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", - "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.17", - "debug": "^4.1.0", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1812,13 +1826,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", - "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1962,9 +1976,9 @@ } }, "node_modules/@eox/itemfilter": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@eox/itemfilter/-/itemfilter-0.12.1.tgz", - "integrity": "sha512-goE844hAKPV+/nj4l5iPVIFR3UHqvzSxrYR2GzwQE0Xo0fLENtefDqsFgpQylmuHMmBujeRmZV0j3DWUvyXvFA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eox/itemfilter/-/itemfilter-0.14.0.tgz", + "integrity": "sha512-C2a6vLKaLbZuYUPV9kFxQaRuWsWhRVIdshdFSz6D3lP9PE9oATHC+mvVoCWucIqyy+UDyUXMvMCHmxcRJqDvOQ==", "dependencies": { "@floating-ui/dom": "^1.5.3", "@turf/boolean-intersects": "^6.5.0", @@ -1979,10 +1993,23 @@ "npm": ">=8.0.0" } }, + "node_modules/@eox/jsonform": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@eox/jsonform/-/jsonform-0.6.1.tgz", + "integrity": "sha512-pBCm0wKCaou+XyArvo07alVqcKr4yhXM4KP3+S9yzimXIs55NJN3N5w3PZLuzf1/JuF8RSovCjk4bu0W2gMAzQ==", + "dependencies": { + "@json-editor/json-editor": "^2.11.0", + "toolcool-range-slider": "^4.0.28" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + } + }, "node_modules/@eox/layercontrol": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eox/layercontrol/-/layercontrol-0.12.0.tgz", - "integrity": "sha512-R8TmkZAMY87ZBdsCkXeHWBdzQ3gUjn6PYWSwhl6XLZqI4TGk7aLy361P+WDWs1Bcw4hi3Yp9uSWSL6LTt2pWdw==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@eox/layercontrol/-/layercontrol-0.17.3.tgz", + "integrity": "sha512-uPRQT8/HflWaSRlVlhblaREpFSQT/MzgSfwKLPXf2lzGXDwMv8uPjiuJcmSdqvFBeIVAYjKim/0hysFE+QhBgg==", "dependencies": { "dayjs": "^1.11.8", "lit": "^3.0.2", @@ -1994,53 +2021,65 @@ "npm": ">=8.0.0" } }, - "node_modules/@eox/stacinfo": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eox/stacinfo/-/stacinfo-0.3.0.tgz", - "integrity": "sha512-2RNSYgy3zsRB0+f64c3+el6wJJVRUkMivT5f9RMYyR2HWWnA0DOQGIIRDzGePtYt1wIjCdkUcXWhvhGYallFGQ==", + "node_modules/@eox/map": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@eox/map/-/map-1.6.1.tgz", + "integrity": "sha512-ynPBR9zqGOh1tnyuKXoy2ECnvRzO6py8cjB/GGCGzdKL4T9krsFlIUBTPK/sRGwO2tOhl0NBthK00gG/CPLPyg==", "dependencies": { - "@radiantearth/stac-fields": "^1.3.2", - "lit": "^3.0.2" + "lit": "^3.0.2", + "ol": "^9.0.0", + "ol-stac": "^1.0.0-beta.10", + "proj4": "^2.9.2" }, "engines": { "node": ">=18.0.0", "npm": ">=8.0.0" } }, - "node_modules/@eox/stacinfo/node_modules/@lit/reactive-element": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.1.tgz", - "integrity": "sha512-eu50SQXHRthFwWJMp0oAFg95Rvm6MTPjxSXWuvAu7It90WVFLFpNBoIno7XOXSDvVgTrtKnUV4OLJqys2Svn4g==", + "node_modules/@eox/stacinfo": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@eox/stacinfo/-/stacinfo-0.3.3.tgz", + "integrity": "sha512-94KHC3Xzoow7ZYOeTECxE7mZ5nStvajlvB4kttSwzYvLvBsazN50YSDVDrcFChXykQf91sRGTr4sdrEy8X1p4g==", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.2" + "@radiantearth/stac-fields": "^1.3.2", + "lit": "^3.0.2" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" } }, - "node_modules/@eox/stacinfo/node_modules/lit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.0.2.tgz", - "integrity": "sha512-ZoVUPGgXOQocP4OvxehEOBmC4rWB4cRYDPaz7aFmH8DFytsCi/NeACbr4C6vNPGDEC07BrhUos7uVNayDKLQ2Q==", + "node_modules/@eox/storytelling": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@eox/storytelling/-/storytelling-0.5.0.tgz", + "integrity": "sha512-SwayHqiHviklP/qqs3BQCL3uzywmtmIS1uNR3+z27QNr8oDAuGl8r/1eaI5qlBXTS/2FqvHhGblYOU7BSn0QaA==", "dependencies": { - "@lit/reactive-element": "^2.0.0", - "lit-element": "^4.0.0", - "lit-html": "^3.0.0" + "@sindresorhus/slugify": "^2.2.1", + "glightbox": "^3.3.0", + "isomorphic-dompurify": "^2.4.0", + "js-yaml": "^4.1.0", + "lit": "^3.0.2", + "markdown-it": "^14.0.0" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" } }, - "node_modules/@eox/stacinfo/node_modules/lit-element": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.1.tgz", - "integrity": "sha512-OxRMJem4HKZt0320HplLkBPoi4KHiEHoPHKd8Lzf07ZQVAOKIjZ32yPLRKRDEolFU1RgrQBfSHQMoxKZ72V3Kw==", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.2", - "@lit/reactive-element": "^2.0.0", - "lit-html": "^3.0.0" - } + "node_modules/@eox/storytelling/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/@eox/stacinfo/node_modules/lit-html": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.0.2.tgz", - "integrity": "sha512-Q1A5lHza3bnmxoWJn6yS6vQZQdExl4fghk8W1G+jnAEdoFNYo5oeBBb/Ol7zSEdKd3TR7+r0zsJQyuWEVguiyQ==", + "node_modules/@eox/storytelling/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "@types/trusted-types": "^2.0.2" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/@flekschas/utils": { @@ -2129,14 +2168,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -2152,9 +2191,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -2167,15 +2206,26 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@json-editor/json-editor": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/@json-editor/json-editor/-/json-editor-2.14.1.tgz", + "integrity": "sha512-Q6ACH6bHYtOCtM8AElkwzLYlTt9wzwzea2+ju40cl+s2IH0nM2r9nq3EX9jxSO9/oWJstJLnyuV95vomtSZYqw==", + "dependencies": { + "core-js": "^3.27.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/@lit-labs/ssr-dom-shim": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", @@ -2313,14 +2363,118 @@ "integrity": "sha512-an2OZ7/6er9Jja8EDUvU/tmtGIutdlb6LwXOwgjzoCjDRAsUd8sRZMBjoPEy78Xa9iOp+Kglk2CHgVwZuZbWbw==" }, "node_modules/@radiantearth/stac-fields": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radiantearth/stac-fields/-/stac-fields-1.3.2.tgz", - "integrity": "sha512-KiQxY4LKX/kFg4qnZ5+gD0EKCoGyuYMku3vkVyPm6QYr5WuHbu3Hx2LBsu7ru2Cp67dYKluKNcDZfvCIkHmLIg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radiantearth/stac-fields/-/stac-fields-1.3.3.tgz", + "integrity": "sha512-r2AjZtUrB4Epu2hwnXeSvX9KeKE4MzjpFgKmDp2ZSWYunMtqKW+wLuNeE2lnU14LGeXzppUmz7ffAELigkYXIw==", "dependencies": { "@musement/iso-duration": "^1.0.0", "commonmark": "^0.29.3", "content-type": "^1.0.4", "multihashes": "^3.1.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/m-mohr" + } + }, + "node_modules/@radiantearth/stac-migrate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@radiantearth/stac-migrate/-/stac-migrate-1.6.0.tgz", + "integrity": "sha512-/Ke5Uyz4gvi0EyhYF3X2ZrMZ96Ikc9LvhgXgo1RbTWzFhD2s9w9KzK1N9V7odGdsBLlqVjvVwQCT73pghfdZzg==", + "dependencies": { + "compare-versions": "^3.6.0", + "multihashes": "^3.1.2", + "yargs": "^17.6.2" + }, + "bin": { + "stac-migrate": "bin/cli.js" + } + }, + "node_modules/@radiantearth/stac-migrate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@radiantearth/stac-migrate/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@radiantearth/stac-migrate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@radiantearth/stac-migrate/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@radiantearth/stac-migrate/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@radiantearth/stac-migrate/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@radiantearth/stac-migrate/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" } }, "node_modules/@samverschueren/stream-to-observable": { @@ -2343,6 +2497,57 @@ } } }, + "node_modules/@sindresorhus/slugify": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", + "dependencies": { + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -2638,6 +2843,14 @@ "@types/node": "*" } }, + "node_modules/@types/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", + "dependencies": { + "@types/trusted-types": "*" + } + }, "node_modules/@types/express": { "version": "4.17.17", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", @@ -4117,9 +4330,9 @@ "peer": true }, "node_modules/@vue/compiler-sfc/node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -4138,9 +4351,9 @@ "optional": true, "peer": true, "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -5000,8 +5213,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", @@ -5271,16 +5483,6 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -5300,13 +5502,13 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -5314,7 +5516,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -6556,6 +6758,36 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-parse": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.2.tgz", + "integrity": "sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==", + "dependencies": { + "color-name": "^2.0.0" + } + }, + "node_modules/color-parse/node_modules/color-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", + "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color-rgba": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz", + "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==", + "dependencies": { + "color-parse": "^2.0.0", + "color-space": "^2.0.0" + } + }, + "node_modules/color-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz", + "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==" + }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", @@ -6578,7 +6810,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" }, @@ -6632,6 +6863,11 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" }, + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -6785,9 +7021,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -7446,6 +7682,17 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, + "node_modules/cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", @@ -7950,6 +8197,18 @@ "node": ">=0.10" } }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/date-fns": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", @@ -8001,6 +8260,11 @@ "node": ">=0.10.0" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, "node_modules/decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", @@ -8446,7 +8710,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" } @@ -8623,6 +8886,11 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.0.tgz", + "integrity": "sha512-yoU4rhgPKCo+p5UrWWWNKiIq+ToGqmVVhk0PmMYBK4kRsR3/qhemNFL8f6CFmBd4gMwm3F4T7HBoydP5uY07fA==" + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -8966,7 +9234,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -9751,17 +10018,17 @@ "dev": true }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -10034,6 +10301,11 @@ "node": ">=0.4.0" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + }, "node_modules/figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -10111,13 +10383,6 @@ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "node_modules/filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -10272,9 +10537,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -10401,20 +10666,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -10502,7 +10753,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -10581,6 +10831,11 @@ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, + "node_modules/glightbox": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/glightbox/-/glightbox-3.3.0.tgz", + "integrity": "sha512-SJukatHBZZ/POMOpLUQ6/dhXf/wJTDx1wZ/FwApjseXw2WrRj3Ze9DzNCFYzca0oU7RjXQhi9o02aIZ9SuCz1A==" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -11039,6 +11294,17 @@ "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", "dev": true }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/html-entities": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", @@ -11215,6 +11481,29 @@ "node": ">=8.0.0" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/http-proxy-middleware": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", @@ -11747,9 +12036,9 @@ } }, "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==", "dev": true }, "node_modules/ip-regex": { @@ -12205,6 +12494,11 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -12389,6 +12683,19 @@ "node": ">=0.10.0" } }, + "node_modules/isomorphic-dompurify": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.7.0.tgz", + "integrity": "sha512-0FTlXP/gEEWW+O/sXaO9yZ4bgegrHnOqzbdCNAMeO2KYIOVMAcqVIo+uTcWYd1+DmI+nV58vUmNW03nauoKn2w==", + "dependencies": { + "@types/dompurify": "^3.0.5", + "dompurify": "^3.1.0", + "jsdom": "^24.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -12438,6 +12745,123 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "node_modules/jsdom": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/jsdom/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/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -12607,6 +13031,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/listr": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", @@ -13289,6 +13721,43 @@ "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.2.tgz", "integrity": "sha512-f+NBjJJY4T3dHtlEz1wCG7YFlkODEjFIYlxDdLIDMNpkSksqTt+l/d4rjuwItxuzkuMFvPyrjzV2lxRM4ePcIA==" }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdown-it/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", @@ -13445,7 +13914,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" } @@ -13454,7 +13922,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" }, @@ -13717,17 +14184,10 @@ "thenify-all": "^1.0.0" } }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true, - "optional": true - }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -13980,6 +14440,11 @@ "node": ">=0.10.0" } }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -14254,10 +14719,12 @@ "dev": true }, "node_modules/ol": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ol/-/ol-8.1.0.tgz", - "integrity": "sha512-cx3SH2plpFS9fM8pp1nCypgQXGJD7Mcb1E3mEySmy5XEw1DUEo+kkNzgtAZz5qupekqi7aU9iBJEjCoMfqvO2Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-9.1.0.tgz", + "integrity": "sha512-nDrkJ2tzZNpo/wzN/PpHV5zdxbnXZaFktoMaD2cFLEc6gCwlgLY21Yd8wnt/4FjaVYwLBnbN9USXSwIBGcyksQ==", "dependencies": { + "color-rgba": "^3.0.0", + "color-space": "^2.0.1", "earcut": "^2.2.3", "geotiff": "^2.0.7", "pbf": "3.2.1", @@ -14280,6 +14747,33 @@ "ol": ">=8.0.0 || >8.0.0-dev.0 < 8.0.0 || >=7.0.0 <=7.5.1" } }, + "node_modules/ol-pmtiles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ol-pmtiles/-/ol-pmtiles-0.2.0.tgz", + "integrity": "sha512-PPDc77kJ+GlDNFjCcoAQ5MTHQTDfxuBN4fL1x/TXnAEPmUT/DAyQsHZZtU3PXnw2NimlgCX7v/Plr9SVivPpAQ==", + "dependencies": { + "pmtiles": "^2.10.0" + }, + "peerDependencies": { + "ol": ">=7.3.0" + } + }, + "node_modules/ol-stac": { + "version": "1.0.0-beta.10", + "resolved": "https://registry.npmjs.org/ol-stac/-/ol-stac-1.0.0-beta.10.tgz", + "integrity": "sha512-dIKUkOdtAIGYsCrh3x5hqOcPBJRzay8GVFRT2ik6Vm6BlOHc5MUYJeR0tpASUmXC7zdJK5dAVa8I2XRNQxCthg==", + "dependencies": { + "ol-pmtiles": "^0.2.0", + "stac-js": "0.0.9" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/m-mohr" + }, + "peerDependencies": { + "ol": ">=7.5.2" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -14877,6 +15371,14 @@ "node": ">=8" } }, + "node_modules/pmtiles": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/pmtiles/-/pmtiles-2.11.0.tgz", + "integrity": "sha512-dU9SzzaqmCGpdEuTnIba6bDHT6j09ZJFIXxwGpvkiEnce3ZnBB1VKt6+EOmJGueriweaZLAMTUmKVElU2CBe0g==", + "dependencies": { + "fflate": "^0.8.0" + } + }, "node_modules/pnp-webpack-plugin": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", @@ -15692,12 +16194,12 @@ } }, "node_modules/proj4": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.9.0.tgz", - "integrity": "sha512-BoDXEzCVnRJVZoOKA0QHTFtYoE8lUxtX1jST38DJ8U+v1ixY70Kpwi0Llu6YqSWEH2xqu4XMEBNGcgeRIEywoA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.11.0.tgz", + "integrity": "sha512-SasuTkAx8HnWQHfIyhkdUNJorSJqINHAN3EyMWYiQRVorftz9DHz650YraFgczwgtHOxqnfuDxSNv3C8MUnHeg==", "dependencies": { "mgrs": "1.0.0", - "wkt-parser": "^1.3.1" + "wkt-parser": "^1.3.3" } }, "node_modules/promise-inflight": { @@ -15745,8 +16247,7 @@ "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/pub-sub-es": { "version": "2.0.2", @@ -15805,9 +16306,17 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "engines": { "node": ">=6" } @@ -15872,8 +16381,7 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -15946,9 +16454,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -16428,7 +16936,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -16442,8 +16949,7 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { "version": "1.22.4", @@ -16581,6 +17087,11 @@ "jquery": ">= 1.10.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -16792,6 +17303,17 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -17518,9 +18040,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -17698,6 +18220,15 @@ "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, + "node_modules/stac-js": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stac-js/-/stac-js-0.0.9.tgz", + "integrity": "sha512-V32QWOtvvcnEDd8SfWUIKKKF4rrgMGMp8oxccZ0hYgadE4KEOy9HSw5ftMEUusD4GdndFWLFdVmGw5WMRB9A1A==", + "dependencies": { + "@radiantearth/stac-migrate": "^1.5.0", + "urijs": "^1.19.11" + } + }, "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", @@ -18155,6 +18686,11 @@ "node": ">=0.10.0" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, "node_modules/table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -18690,7 +19226,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -18705,11 +19240,21 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, "engines": { "node": ">= 4.0.0" } }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -18889,6 +19434,11 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, "node_modules/uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", @@ -19169,6 +19719,11 @@ "punycode": "^2.1.0" } }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + }, "node_modules/urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -19239,7 +19794,6 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -19538,9 +20092,9 @@ "dev": true }, "node_modules/vue-loader": { - "version": "15.10.2", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.2.tgz", - "integrity": "sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==", + "version": "15.11.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", "dev": true, "dependencies": { "@vue/component-compiler-utils": "^3.1.0", @@ -19795,9 +20349,9 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/vue/node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -19813,9 +20367,9 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -19949,6 +20503,17 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/watchpack": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", @@ -20031,25 +20596,6 @@ "fsevents": "^1.2.7" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -20124,6 +20670,14 @@ "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, "node_modules/webpack": { "version": "4.47.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", @@ -20470,25 +21024,6 @@ "node": ">=6" } }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/webpack-dev-server/node_modules/globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -20934,6 +21469,48 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -21108,11 +21685,24 @@ "xml-js": "bin/cli.js" } }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "engines": { + "node": ">=18" + } + }, "node_modules/xml-utils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.7.0.tgz", "integrity": "sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw==" }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "node_modules/xmlhttprequest-ssl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", @@ -21364,12 +21954,19 @@ } }, "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + } } }, "@babel/compat-data": { @@ -21402,14 +21999,14 @@ } }, "@babel/generator": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dev": true, "requires": { - "@babel/types": "^7.22.15", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" } }, @@ -21486,19 +22083,19 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { @@ -21606,15 +22203,15 @@ } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", - "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.22.15", @@ -21645,19 +22242,27 @@ } }, "@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "requires": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + } } }, "@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==" + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.22.15", @@ -22514,31 +23119,31 @@ } }, "@babel/traverse": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.17.tgz", - "integrity": "sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.17", - "debug": "^4.1.0", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.17.tgz", - "integrity": "sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.15", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -22657,9 +23262,9 @@ } }, "@eox/itemfilter": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@eox/itemfilter/-/itemfilter-0.12.1.tgz", - "integrity": "sha512-goE844hAKPV+/nj4l5iPVIFR3UHqvzSxrYR2GzwQE0Xo0fLENtefDqsFgpQylmuHMmBujeRmZV0j3DWUvyXvFA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eox/itemfilter/-/itemfilter-0.14.0.tgz", + "integrity": "sha512-C2a6vLKaLbZuYUPV9kFxQaRuWsWhRVIdshdFSz6D3lP9PE9oATHC+mvVoCWucIqyy+UDyUXMvMCHmxcRJqDvOQ==", "requires": { "@floating-ui/dom": "^1.5.3", "@turf/boolean-intersects": "^6.5.0", @@ -22670,10 +23275,19 @@ "toolcool-range-slider": "^4.0.27" } }, + "@eox/jsonform": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@eox/jsonform/-/jsonform-0.6.1.tgz", + "integrity": "sha512-pBCm0wKCaou+XyArvo07alVqcKr4yhXM4KP3+S9yzimXIs55NJN3N5w3PZLuzf1/JuF8RSovCjk4bu0W2gMAzQ==", + "requires": { + "@json-editor/json-editor": "^2.11.0", + "toolcool-range-slider": "^4.0.28" + } + }, "@eox/layercontrol": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eox/layercontrol/-/layercontrol-0.12.0.tgz", - "integrity": "sha512-R8TmkZAMY87ZBdsCkXeHWBdzQ3gUjn6PYWSwhl6XLZqI4TGk7aLy361P+WDWs1Bcw4hi3Yp9uSWSL6LTt2pWdw==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@eox/layercontrol/-/layercontrol-0.17.3.tgz", + "integrity": "sha512-uPRQT8/HflWaSRlVlhblaREpFSQT/MzgSfwKLPXf2lzGXDwMv8uPjiuJcmSdqvFBeIVAYjKim/0hysFE+QhBgg==", "requires": { "dayjs": "^1.11.8", "lit": "^3.0.2", @@ -22681,49 +23295,50 @@ "wms-capabilities": "^0.6.0" } }, + "@eox/map": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@eox/map/-/map-1.6.1.tgz", + "integrity": "sha512-ynPBR9zqGOh1tnyuKXoy2ECnvRzO6py8cjB/GGCGzdKL4T9krsFlIUBTPK/sRGwO2tOhl0NBthK00gG/CPLPyg==", + "requires": { + "lit": "^3.0.2", + "ol": "^9.0.0", + "ol-stac": "^1.0.0-beta.10", + "proj4": "^2.9.2" + } + }, "@eox/stacinfo": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eox/stacinfo/-/stacinfo-0.3.0.tgz", - "integrity": "sha512-2RNSYgy3zsRB0+f64c3+el6wJJVRUkMivT5f9RMYyR2HWWnA0DOQGIIRDzGePtYt1wIjCdkUcXWhvhGYallFGQ==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@eox/stacinfo/-/stacinfo-0.3.3.tgz", + "integrity": "sha512-94KHC3Xzoow7ZYOeTECxE7mZ5nStvajlvB4kttSwzYvLvBsazN50YSDVDrcFChXykQf91sRGTr4sdrEy8X1p4g==", "requires": { "@radiantearth/stac-fields": "^1.3.2", "lit": "^3.0.2" + } + }, + "@eox/storytelling": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@eox/storytelling/-/storytelling-0.5.0.tgz", + "integrity": "sha512-SwayHqiHviklP/qqs3BQCL3uzywmtmIS1uNR3+z27QNr8oDAuGl8r/1eaI5qlBXTS/2FqvHhGblYOU7BSn0QaA==", + "requires": { + "@sindresorhus/slugify": "^2.2.1", + "glightbox": "^3.3.0", + "isomorphic-dompurify": "^2.4.0", + "js-yaml": "^4.1.0", + "lit": "^3.0.2", + "markdown-it": "^14.0.0" }, "dependencies": { - "@lit/reactive-element": { + "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.1.tgz", - "integrity": "sha512-eu50SQXHRthFwWJMp0oAFg95Rvm6MTPjxSXWuvAu7It90WVFLFpNBoIno7XOXSDvVgTrtKnUV4OLJqys2Svn4g==", - "requires": { - "@lit-labs/ssr-dom-shim": "^1.1.2" - } - }, - "lit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.0.2.tgz", - "integrity": "sha512-ZoVUPGgXOQocP4OvxehEOBmC4rWB4cRYDPaz7aFmH8DFytsCi/NeACbr4C6vNPGDEC07BrhUos7uVNayDKLQ2Q==", - "requires": { - "@lit/reactive-element": "^2.0.0", - "lit-element": "^4.0.0", - "lit-html": "^3.0.0" - } - }, - "lit-element": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.1.tgz", - "integrity": "sha512-OxRMJem4HKZt0320HplLkBPoi4KHiEHoPHKd8Lzf07ZQVAOKIjZ32yPLRKRDEolFU1RgrQBfSHQMoxKZ72V3Kw==", - "requires": { - "@lit-labs/ssr-dom-shim": "^1.1.2", - "@lit/reactive-element": "^2.0.0", - "lit-html": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "lit-html": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.0.2.tgz", - "integrity": "sha512-Q1A5lHza3bnmxoWJn6yS6vQZQdExl4fghk8W1G+jnAEdoFNYo5oeBBb/Ol7zSEdKd3TR7+r0zsJQyuWEVguiyQ==", + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { - "@types/trusted-types": "^2.0.2" + "argparse": "^2.0.1" } } } @@ -22806,14 +23421,14 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { @@ -22823,9 +23438,9 @@ "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/sourcemap-codec": { @@ -22835,15 +23450,23 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@json-editor/json-editor": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/@json-editor/json-editor/-/json-editor-2.14.1.tgz", + "integrity": "sha512-Q6ACH6bHYtOCtM8AElkwzLYlTt9wzwzea2+ju40cl+s2IH0nM2r9nq3EX9jxSO9/oWJstJLnyuV95vomtSZYqw==", + "requires": { + "core-js": "^3.27.2" + } + }, "@lit-labs/ssr-dom-shim": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", @@ -22956,9 +23579,9 @@ "integrity": "sha512-an2OZ7/6er9Jja8EDUvU/tmtGIutdlb6LwXOwgjzoCjDRAsUd8sRZMBjoPEy78Xa9iOp+Kglk2CHgVwZuZbWbw==" }, "@radiantearth/stac-fields": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radiantearth/stac-fields/-/stac-fields-1.3.2.tgz", - "integrity": "sha512-KiQxY4LKX/kFg4qnZ5+gD0EKCoGyuYMku3vkVyPm6QYr5WuHbu3Hx2LBsu7ru2Cp67dYKluKNcDZfvCIkHmLIg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radiantearth/stac-fields/-/stac-fields-1.3.3.tgz", + "integrity": "sha512-r2AjZtUrB4Epu2hwnXeSvX9KeKE4MzjpFgKmDp2ZSWYunMtqKW+wLuNeE2lnU14LGeXzppUmz7ffAELigkYXIw==", "requires": { "@musement/iso-duration": "^1.0.0", "commonmark": "^0.29.3", @@ -22966,6 +23589,78 @@ "multihashes": "^3.1.2" } }, + "@radiantearth/stac-migrate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@radiantearth/stac-migrate/-/stac-migrate-1.6.0.tgz", + "integrity": "sha512-/Ke5Uyz4gvi0EyhYF3X2ZrMZ96Ikc9LvhgXgo1RbTWzFhD2s9w9KzK1N9V7odGdsBLlqVjvVwQCT73pghfdZzg==", + "requires": { + "compare-versions": "^3.6.0", + "multihashes": "^3.1.2", + "yargs": "^17.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, "@samverschueren/stream-to-observable": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", @@ -22975,6 +23670,37 @@ "any-observable": "^0.3.0" } }, + "@sindresorhus/slugify": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", + "requires": { + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + } + } + }, + "@sindresorhus/transliterate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", + "requires": { + "escape-string-regexp": "^5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + } + } + }, "@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -23209,6 +23935,14 @@ "@types/node": "*" } }, + "@types/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", + "requires": { + "@types/trusted-types": "*" + } + }, "@types/express": { "version": "4.17.17", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", @@ -24457,16 +25191,16 @@ "peer": true }, "postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "optional": true, "peer": true, "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } } } @@ -25170,8 +25904,7 @@ "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==" }, "at-least-node": { "version": "1.0.0", @@ -25366,16 +26099,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, "blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -25395,13 +26118,13 @@ "dev": true }, "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -25409,7 +26132,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -26406,6 +27129,35 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-parse": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.2.tgz", + "integrity": "sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==", + "requires": { + "color-name": "^2.0.0" + }, + "dependencies": { + "color-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz", + "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==" + } + } + }, + "color-rgba": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz", + "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==", + "requires": { + "color-parse": "^2.0.0", + "color-space": "^2.0.0" + } + }, + "color-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz", + "integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==" + }, "color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", @@ -26428,7 +27180,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, "requires": { "delayed-stream": "~1.0.0" } @@ -26469,6 +27220,11 @@ } } }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -26599,9 +27355,9 @@ "dev": true }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true }, "cookie-signature": { @@ -27123,6 +27879,14 @@ } } }, + "cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "requires": { + "rrweb-cssom": "^0.6.0" + } + }, "csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", @@ -27512,6 +28276,15 @@ "assert-plus": "^1.0.0" } }, + "data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "requires": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + } + }, "date-fns": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", @@ -27552,6 +28325,11 @@ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, "decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", @@ -27874,8 +28652,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "depd": { "version": "2.0.0", @@ -28016,6 +28793,11 @@ "domelementtype": "^2.2.0" } }, + "dompurify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.0.tgz", + "integrity": "sha512-yoU4rhgPKCo+p5UrWWWNKiIq+ToGqmVVhk0PmMYBK4kRsR3/qhemNFL8f6CFmBd4gMwm3F4T7HBoydP5uY07fA==" + }, "domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -28308,8 +29090,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -28915,17 +29696,17 @@ } }, "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -29150,6 +29931,11 @@ "xml-js": "^1.6.11" } }, + "fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -29211,13 +29997,6 @@ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -29348,9 +30127,9 @@ } }, "follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "for-each": { "version": "0.3.3", @@ -29442,13 +30221,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -29517,8 +30289,7 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.2.1", @@ -29579,6 +30350,11 @@ "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, + "glightbox": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/glightbox/-/glightbox-3.3.0.tgz", + "integrity": "sha512-SJukatHBZZ/POMOpLUQ6/dhXf/wJTDx1wZ/FwApjseXw2WrRj3Ze9DzNCFYzca0oU7RjXQhi9o02aIZ9SuCz1A==" + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -29937,6 +30713,14 @@ "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", "dev": true }, + "html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "requires": { + "whatwg-encoding": "^3.1.1" + } + }, "html-entities": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", @@ -30073,6 +30857,25 @@ "requires-port": "^1.0.0" } }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + } + } + }, "http-proxy-middleware": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", @@ -30467,9 +31270,9 @@ "dev": true }, "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==", "dev": true }, "ip-regex": { @@ -30785,6 +31588,11 @@ "isobject": "^3.0.1" } }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -30918,6 +31726,16 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, + "isomorphic-dompurify": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.7.0.tgz", + "integrity": "sha512-0FTlXP/gEEWW+O/sXaO9yZ4bgegrHnOqzbdCNAMeO2KYIOVMAcqVIo+uTcWYd1+DmI+nV58vUmNW03nauoKn2w==", + "requires": { + "@types/dompurify": "^3.0.5", + "dompurify": "^3.1.0", + "jsdom": "^24.0.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -30961,6 +31779,82 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "jsdom": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", + "requires": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "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==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + }, + "ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "requires": {} + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -31108,6 +32002,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "requires": { + "uc.micro": "^2.0.0" + } + }, "listr": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", @@ -31645,6 +32547,36 @@ "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.2.tgz", "integrity": "sha512-f+NBjJJY4T3dHtlEz1wCG7YFlkODEjFIYlxDdLIDMNpkSksqTt+l/d4rjuwItxuzkuMFvPyrjzV2lxRM4ePcIA==" }, + "markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "requires": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + } + } + }, "marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", @@ -31775,14 +32707,12 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { "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, "requires": { "mime-db": "1.52.0" } @@ -31995,17 +32925,10 @@ "thenify-all": "^1.0.0" } }, - "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true, - "optional": true - }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "nanomatch": { "version": "1.2.13", @@ -32205,6 +33128,11 @@ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true }, + "nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -32408,10 +33336,12 @@ "dev": true }, "ol": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ol/-/ol-8.1.0.tgz", - "integrity": "sha512-cx3SH2plpFS9fM8pp1nCypgQXGJD7Mcb1E3mEySmy5XEw1DUEo+kkNzgtAZz5qupekqi7aU9iBJEjCoMfqvO2Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-9.1.0.tgz", + "integrity": "sha512-nDrkJ2tzZNpo/wzN/PpHV5zdxbnXZaFktoMaD2cFLEc6gCwlgLY21Yd8wnt/4FjaVYwLBnbN9USXSwIBGcyksQ==", "requires": { + "color-rgba": "^3.0.0", + "color-space": "^2.0.1", "earcut": "^2.2.3", "geotiff": "^2.0.7", "pbf": "3.2.1", @@ -32427,6 +33357,23 @@ "mapbox-to-css-font": "^2.4.1" } }, + "ol-pmtiles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ol-pmtiles/-/ol-pmtiles-0.2.0.tgz", + "integrity": "sha512-PPDc77kJ+GlDNFjCcoAQ5MTHQTDfxuBN4fL1x/TXnAEPmUT/DAyQsHZZtU3PXnw2NimlgCX7v/Plr9SVivPpAQ==", + "requires": { + "pmtiles": "^2.10.0" + } + }, + "ol-stac": { + "version": "1.0.0-beta.10", + "resolved": "https://registry.npmjs.org/ol-stac/-/ol-stac-1.0.0-beta.10.tgz", + "integrity": "sha512-dIKUkOdtAIGYsCrh3x5hqOcPBJRzay8GVFRT2ik6Vm6BlOHc5MUYJeR0tpASUmXC7zdJK5dAVa8I2XRNQxCthg==", + "requires": { + "ol-pmtiles": "^0.2.0", + "stac-js": "0.0.9" + } + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -32901,6 +33848,14 @@ "find-up": "^4.0.0" } }, + "pmtiles": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/pmtiles/-/pmtiles-2.11.0.tgz", + "integrity": "sha512-dU9SzzaqmCGpdEuTnIba6bDHT6j09ZJFIXxwGpvkiEnce3ZnBB1VKt6+EOmJGueriweaZLAMTUmKVElU2CBe0g==", + "requires": { + "fflate": "^0.8.0" + } + }, "pnp-webpack-plugin": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", @@ -33597,12 +34552,12 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "proj4": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.9.0.tgz", - "integrity": "sha512-BoDXEzCVnRJVZoOKA0QHTFtYoE8lUxtX1jST38DJ8U+v1ixY70Kpwi0Llu6YqSWEH2xqu4XMEBNGcgeRIEywoA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.11.0.tgz", + "integrity": "sha512-SasuTkAx8HnWQHfIyhkdUNJorSJqINHAN3EyMWYiQRVorftz9DHz650YraFgczwgtHOxqnfuDxSNv3C8MUnHeg==", "requires": { "mgrs": "1.0.0", - "wkt-parser": "^1.3.1" + "wkt-parser": "^1.3.3" } }, "promise-inflight": { @@ -33647,8 +34602,7 @@ "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "pub-sub-es": { "version": "2.0.2", @@ -33711,9 +34665,14 @@ } }, "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, + "punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" }, "q": { "version": "1.5.1", @@ -33755,8 +34714,7 @@ "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "queue-microtask": { "version": "1.2.3", @@ -33806,9 +34764,9 @@ "dev": true }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "requires": { "bytes": "3.1.2", @@ -34187,8 +35145,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-main-filename": { "version": "2.0.0", @@ -34199,8 +35156,7 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { "version": "1.22.4", @@ -34309,6 +35265,11 @@ "jquery": ">= 1.10.2" } }, + "rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" + }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -34445,6 +35406,14 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "requires": { + "xmlchars": "^2.2.0" + } + }, "schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -35038,9 +36007,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" }, "source-map-resolve": { "version": "0.5.3", @@ -35194,6 +36163,15 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stac-js": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/stac-js/-/stac-js-0.0.9.tgz", + "integrity": "sha512-V32QWOtvvcnEDd8SfWUIKKKF4rrgMGMp8oxccZ0hYgadE4KEOy9HSw5ftMEUusD4GdndFWLFdVmGw5WMRB9A1A==", + "requires": { + "@radiantearth/stac-migrate": "^1.5.0", + "urijs": "^1.19.11" + } + }, "stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", @@ -35565,6 +36543,11 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "dev": true }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -35992,7 +36975,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -36003,11 +36985,18 @@ "universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" } } }, + "tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "requires": { + "punycode": "^2.3.1" + } + }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -36145,6 +37134,11 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, + "uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, "uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", @@ -36363,6 +37357,11 @@ "punycode": "^2.1.0" } }, + "urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -36433,7 +37432,6 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -36578,13 +37576,13 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } } } @@ -36681,9 +37679,9 @@ "dev": true }, "vue-loader": { - "version": "15.10.2", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.2.tgz", - "integrity": "sha512-ndeSe/8KQc/nlA7TJ+OBhv2qalmj1s+uBs7yHDRFaAXscFTApBzY9F1jES3bautmgWjDlDct0fw8rPuySDLwxw==", + "version": "15.11.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", @@ -36948,6 +37946,14 @@ } } }, + "w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "requires": { + "xml-name-validator": "^5.0.0" + } + }, "watchpack": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", @@ -37021,17 +38027,6 @@ "upath": "^1.1.1" } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -37102,6 +38097,11 @@ "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, "webpack": { "version": "4.47.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", @@ -37468,17 +38468,6 @@ "locate-path": "^3.0.0" } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -37751,6 +38740,38 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, + "whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==" + }, + "whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "requires": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -37877,11 +38898,21 @@ "sax": "^1.2.4" } }, + "xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==" + }, "xml-utils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.7.0.tgz", "integrity": "sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw==" }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "xmlhttprequest-ssl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", diff --git a/app/package.json b/app/package.json index fe588bc14c..21985ab3d3 100644 --- a/app/package.json +++ b/app/package.json @@ -16,9 +16,12 @@ }, "dependencies": { "@chenfengyuan/vue-countdown": "^1.1.5", - "@eox/itemfilter": "0.12.1", - "@eox/layercontrol": "^0.12.0", - "@eox/stacinfo": "^0.3.0", + "@eox/itemfilter": "0.14.0", + "@eox/jsonform": "^0.6.1", + "@eox/layercontrol": "^0.17.3", + "@eox/stacinfo": "^0.3.3", + "@eox/map": "^1.6.1", + "@eox/storytelling": "^0.5.0", "@turf/difference": "^6.5.0", "axios": "^0.21.1", "chart.js": "2.9.3", @@ -40,7 +43,7 @@ "luxon": "^1.28.1", "marked": "^4.0.10", "medium-zoom": "^1.0.6", - "ol": "^8.1.0", + "ol": "^9.1.0", "ol-mapbox-style": "^11.0.0", "proj4": "^2.8.0", "regl": "^2.1.0", diff --git a/app/public/css/esa.scss b/app/public/css/esa.scss index 93430b241e..9bdb1f1e74 100644 --- a/app/public/css/esa.scss +++ b/app/public/css/esa.scss @@ -37,3 +37,7 @@ font-family: 'NotesESABold', sans-serif !important; } } + +.v-expansion-panel-header { + font-weight: bold; +} diff --git a/app/public/css/gtif.scss b/app/public/css/gtif.scss index d806274408..93a7c3a249 100644 --- a/app/public/css/gtif.scss +++ b/app/public/css/gtif.scss @@ -41,4 +41,8 @@ .chartareapanel { background-color: #dde3ea!important; +} + +.v-expansion-panel-header { + text-transform: uppercase; } \ No newline at end of file diff --git a/app/public/css/trilateral.scss b/app/public/css/trilateral.scss index 23694de82c..5c27946366 100644 --- a/app/public/css/trilateral.scss +++ b/app/public/css/trilateral.scss @@ -5,7 +5,7 @@ } .v-application { - font-family: 'NotesESA', 'Open Sans', sans-serif; + font-family: 'Roboto', 'Open Sans', sans-serif; } .brand-trilateral { @@ -30,3 +30,6 @@ font-family: 'Roboto', sans-serif !important; } } +.v-expansion-panel-header { + font-weight: bold; +} diff --git a/app/public/data/dashboards/225b5c8b3b310cb2.json b/app/public/data/dashboards/225b5c8b3b310cb2.json index 9cc96ebc92..de7cf0e298 100644 --- a/app/public/data/dashboards/225b5c8b3b310cb2.json +++ b/app/public/data/dashboards/225b5c8b3b310cb2.json @@ -36,7 +36,7 @@ "lat": -74.78706020071398 } }, - "id": "S1GRD-ADD@1678712504857", + "id": "World-ADD_West_Antarctica_S1@1678712504857", "title": "Antarctica: West Antarctica (Sentinel-1)" }, { @@ -55,16 +55,16 @@ "lat": -75.53387276342876 } }, - "id": "Meltmap-ADD@1675334888525", + "id": "World-ADD_Meltmap@1675334888525", "title": "Antarctica: Antarctica Meltmap" }, { "width": 4, - "text": "# Multimedia\n\nDiscover more on ESA Multimedia:\n\n- [Thwaites flow animation](https://www.esa.int/ESA_Multimedia/Videos/2023/01/Thwaites_flow#.Y76TvRaQr_4.link)\n- [Thwaites and Pine Island Glaciers in West Antarctica](https://www.esa.int/ESA_Multimedia/Images/2023/01/Thwaites_and_Pine_Island_Glaciers_in_West_Antarctica#.Y76T-w7JZ_g.link)\n- [Thwaites Glacier](https://www.esa.int/ESA_Multimedia/Images/2023/01/Thwaites_Glacier#.Y76TxZj2TFY.link)\n- [Thwaites Ice Tongue from Sentinel-2](https://www.esa.int/ESA_Multimedia/Images/2023/01/Thwaites_Ice_Tongue_from_Sentinel-2#.Y76Tz4U1uWY.link)\n-[Thwaites\u2019 crevasses in motion](https://www.esa.int/ESA_Multimedia/Images/2023/01/Thwaites_crevasses_in_motion#.Y76T-R64Dr4.link)\n- [Ebb and flow of lakes deep below Thwaites glacier](https://www.esa.int/ESA_Multimedia/Videos/2020/12/Ebb_and_flow_of_lakes_deep_below_Thwaites_glacier#.Y76T3Ybmw4k.link)\n- [The fracturing of Antarctica\u2019s Pine Island and Thwaites Glaciers (2014\u20132020)](https://www.esa.int/ESA_Multimedia/Videos/2020/09/The_fracturing_of_Antarctica_s_Pine_Island_and_Thwaites_Glaciers_2014_2020#.Y76T25AYUKg.link)\n- [4D Antarctica Animation](https://www.esa.int/ESA_Multimedia/Videos/2022/11/FutureEO_4DAntarctica#.Y-tcwXG3EBk.link)\n\n  \n# Explore Datasets\n\nThis **EO Dashboard** provides access to several EO products over Antarctica. Visualise these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n- [Antarctica Meltmaps](https://eodashboard.org/explore?poi=Meltmap-ADD)\n- [Antarctica Melt onset](https://eodashboard.org/explore?poi=Onset-ADD) \n- [Antarctica End of melt season](https://eodashboard.org/explore?poi=End-ADD)\n- [Antarctica Melt duration](https://eodashboard.org/explore?poi=Days-ADD)\n- [Sentinel-1 EW Dataset over Thwaites and Pine Island Glaciers](https://eodashboard.org/explore?poi=S1GRD-ADD)\n \n  \n### Map baselayer and geometries\n\nThe Pine Island Glacier and Thwaites Glacier geometries shown on this map are for illustration purposes only. They were produced using [QGIS](http://www.qgis.org) by georeferencing maps made available by [the Polar Geospatial Center](https://data.pgc.umn.edu/maps/antarctica/pgc/19/preview/Thwaites%20Glacier%20Regional.jpg) and the [Quantarctica/Norwegian Polar Institute](https://www.carbonbrief.org/guest-post-how-close-is-the-west-antarctic-ice-sheet-to-a-tipping-point/).\n\nThis map uses the baselayer Antarctic hillshade and bathymetry south of 60\u00b0S. Citation: REMA: Howat, I. M., Porter, C., Smith, B. E., Noh, M.-J., and Morin, P.: The Reference Elevation Model of Antarctica, The Cryosphere, 13, 665-674, [external resource], 2019. GEBCO Compilation Group (2019) GEBCO 2019 Grid (doi:10.5285/836f016a-33be-6ddc-e053-6c86abc0788e) \n\n  \n# Contributors\n\nDatasets provided by 4D Antarctica Project and SentinelHub (Euro Data Cube). Story prepared by Romina Persi (EJR Quarz for ESA), Anca Anghelea (ESA), and Isobel Laurence (ESA). Data preparation and visualisation by Lubomir Dolezal (EOX) and Alessandro Scremin (Rhea Group). Supporting graphics provided by ESA Multimedia.\n", + "text": "# Multimedia\n\nDiscover more on ESA Multimedia:\n\n- [Thwaites flow animation](https://www.esa.int/ESA_Multimedia/Videos/2023/01/Thwaites_flow#.Y76TvRaQr_4.link)\n- [Thwaites and Pine Island Glaciers in West Antarctica](https://www.esa.int/ESA_Multimedia/Images/2023/01/Thwaites_and_Pine_Island_Glaciers_in_West_Antarctica#.Y76T-w7JZ_g.link)\n- [Thwaites Glacier](https://www.esa.int/ESA_Multimedia/Images/2023/01/Thwaites_Glacier#.Y76TxZj2TFY.link)\n- [Thwaites Ice Tongue from Sentinel-2](https://www.esa.int/ESA_Multimedia/Images/2023/01/Thwaites_Ice_Tongue_from_Sentinel-2#.Y76Tz4U1uWY.link)\n-[Thwaites\u2019 crevasses in motion](https://www.esa.int/ESA_Multimedia/Images/2023/01/Thwaites_crevasses_in_motion#.Y76T-R64Dr4.link)\n- [Ebb and flow of lakes deep below Thwaites glacier](https://www.esa.int/ESA_Multimedia/Videos/2020/12/Ebb_and_flow_of_lakes_deep_below_Thwaites_glacier#.Y76T3Ybmw4k.link)\n- [The fracturing of Antarctica\u2019s Pine Island and Thwaites Glaciers (2014\u20132020)](https://www.esa.int/ESA_Multimedia/Videos/2020/09/The_fracturing_of_Antarctica_s_Pine_Island_and_Thwaites_Glaciers_2014_2020#.Y76T25AYUKg.link)\n- [4D Antarctica Animation](https://www.esa.int/ESA_Multimedia/Videos/2022/11/FutureEO_4DAntarctica#.Y-tcwXG3EBk.link)\n\n  \n# Explore Datasets\n\nThis **EO Dashboard** provides access to several EO products over Antarctica. Visualise these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n- [Antarctica Meltmaps](https://eodashboard.org/explore?poi=World-ADD_Meltmap)\n- [Antarctica Melt onset](https://eodashboard.org/explore?poi=Onset-ADD) \n- [Antarctica End of melt season](https://eodashboard.org/explore?poi=End-ADD)\n- [Antarctica Melt duration](https://eodashboard.org/explore?poi=Days-ADD)\n- [Sentinel-1 EW Dataset over Thwaites and Pine Island Glaciers](https://eodashboard.org/explore?poi=World-ADD_West_Antarctica_S1)\n \n  \n### Map baselayer and geometries\n\nThe Pine Island Glacier and Thwaites Glacier geometries shown on this map are for illustration purposes only. They were produced using [QGIS](http://www.qgis.org) by georeferencing maps made available by [the Polar Geospatial Center](https://data.pgc.umn.edu/maps/antarctica/pgc/19/preview/Thwaites%20Glacier%20Regional.jpg) and the [Quantarctica/Norwegian Polar Institute](https://www.carbonbrief.org/guest-post-how-close-is-the-west-antarctic-ice-sheet-to-a-tipping-point/).\n\nThis map uses the baselayer Antarctic hillshade and bathymetry south of 60\u00b0S. Citation: REMA: Howat, I. M., Porter, C., Smith, B. E., Noh, M.-J., and Morin, P.: The Reference Elevation Model of Antarctica, The Cryosphere, 13, 665-674, [external resource], 2019. GEBCO Compilation Group (2019) GEBCO 2019 Grid (doi:10.5285/836f016a-33be-6ddc-e053-6c86abc0788e) \n\n  \n# Contributors\n\nDatasets provided by 4D Antarctica Project and SentinelHub (Euro Data Cube). Story prepared by Romina Persi (EJR Quarz for ESA), Anca Anghelea (ESA), and Isobel Laurence (ESA). Data preparation and visualisation by Lubomir Dolezal (EOX) and Alessandro Scremin (Rhea Group). Supporting graphics provided by ESA Multimedia.\n", "id": " -1675352374890", "title": " ", - "__generatedText__": "

Multimedia

\n

Discover more on ESA Multimedia:

\n\n

 

\n

Explore Datasets

\n

This EO Dashboard provides access to several EO products over Antarctica. Visualise these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n\n

 

\n

Map baselayer and geometries

\n

The Pine Island Glacier and Thwaites Glacier geometries shown on this map are for illustration purposes only. They were produced using QGIS by georeferencing maps made available by the Polar Geospatial Center and the Quantarctica/Norwegian Polar Institute.

\n

This map uses the baselayer Antarctic hillshade and bathymetry south of 60\u00b0S. Citation: REMA: Howat, I. M., Porter, C., Smith, B. E., Noh, M.-J., and Morin, P.: The Reference Elevation Model of Antarctica, The Cryosphere, 13, 665-674, [external resource], 2019. GEBCO Compilation Group (2019) GEBCO 2019 Grid (doi:10.5285/836f016a-33be-6ddc-e053-6c86abc0788e)

\n

 

\n

Contributors

\n

Datasets provided by 4D Antarctica Project and SentinelHub (Euro Data Cube). Story prepared by Romina Persi (EJR Quarz for ESA), Anca Anghelea (ESA), and Isobel Laurence (ESA). Data preparation and visualisation by Lubomir Dolezal (EOX) and Alessandro Scremin (Rhea Group). Supporting graphics provided by ESA Multimedia.

\n" + "__generatedText__": "

Multimedia

\n

Discover more on ESA Multimedia:

\n\n

 

\n

Explore Datasets

\n

This EO Dashboard provides access to several EO products over Antarctica. Visualise these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n\n

 

\n

Map baselayer and geometries

\n

The Pine Island Glacier and Thwaites Glacier geometries shown on this map are for illustration purposes only. They were produced using QGIS by georeferencing maps made available by the Polar Geospatial Center and the Quantarctica/Norwegian Polar Institute.

\n

This map uses the baselayer Antarctic hillshade and bathymetry south of 60\u00b0S. Citation: REMA: Howat, I. M., Porter, C., Smith, B. E., Noh, M.-J., and Morin, P.: The Reference Elevation Model of Antarctica, The Cryosphere, 13, 665-674, [external resource], 2019. GEBCO Compilation Group (2019) GEBCO 2019 Grid (doi:10.5285/836f016a-33be-6ddc-e053-6c86abc0788e)

\n

 

\n

Contributors

\n

Datasets provided by 4D Antarctica Project and SentinelHub (Euro Data Cube). Story prepared by Romina Persi (EJR Quarz for ESA), Anca Anghelea (ESA), and Isobel Laurence (ESA). Data preparation and visualisation by Lubomir Dolezal (EOX) and Alessandro Scremin (Rhea Group). Supporting graphics provided by ESA Multimedia.

\n" } ], "title": "Rapid Retreat of the Thwaites Glacier" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/6be3fcfd33789f76.json b/app/public/data/dashboards/6be3fcfd33789f76.json index f073a9b2bc..53cfe40ce7 100644 --- a/app/public/data/dashboards/6be3fcfd33789f76.json +++ b/app/public/data/dashboards/6be3fcfd33789f76.json @@ -46,10 +46,10 @@ }, { "width": 1, - "text": " ESA has been building radar altimeters since the early 1990s. Radar altimeters use a microwave signal to measure sea ice freeboard. In this frequency band, the signal can penetrate further into snow that lies on sea ice. To better understand how far the microwaves can penetrate the snowpack, complementary field or airborne campaigns are needed to validate the satellite data. Researchers are comparing altimeter signals at different frequencies to calculate how much snow lies on top of the sea ice. This is important as the amount of snow can also impact the freeboard\u2014for instance a heavy snow-load can weigh the sea ice down and may even push it under water.\n \nResearchers can calculate sea ice thickness once the freeboard has been established. The ESA Climate Change Initiative Sea Ice Thickness data set presented here shows the decrease in winter sea ice thickness over the past 15 years using information from ESA\u2019s Envisat and CryoSat-2 satellite missions.\n\n\n## Explore Datasets \n   \nThis **EO Dashboard** provides access to interactive maps of Sea Ice Thickness and Sea Ice Concentration. Access these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[Sea Ice Thickness from Cryosat](https://www.eodashboard.org/explore?poi=W9-SIC)   \n[Sea Ice Thickness from Envisat](https://www.eodashboard.org/explore?poi=W8-SIE)   \n[Sea Ice Thickness from IceSAT-2](https://www.eodashboard.org/explore?poi=W10-SITI)\n  \n[Sea Ice Concentration Antarctic from GCOM-W](https://www.eodashboard.org/explore?poi=World-N12)", + "text": " ESA has been building radar altimeters since the early 1990s. Radar altimeters use a microwave signal to measure sea ice freeboard. In this frequency band, the signal can penetrate further into snow that lies on sea ice. To better understand how far the microwaves can penetrate the snowpack, complementary field or airborne campaigns are needed to validate the satellite data. Researchers are comparing altimeter signals at different frequencies to calculate how much snow lies on top of the sea ice. This is important as the amount of snow can also impact the freeboard\u2014for instance a heavy snow-load can weigh the sea ice down and may even push it under water.\n \nResearchers can calculate sea ice thickness once the freeboard has been established. The ESA Climate Change Initiative Sea Ice Thickness data set presented here shows the decrease in winter sea ice thickness over the past 15 years using information from ESA\u2019s Envisat and CryoSat-2 satellite missions.\n\n\n## Explore Datasets \n   \nThis **EO Dashboard** provides access to interactive maps of Sea Ice Thickness and Sea Ice Concentration. Access these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[Sea Ice Thickness from Cryosat](https://www.eodashboard.org/explore?poi=W9-SIC)   \n[Sea Ice Thickness from Envisat](https://www.eodashboard.org/explore?poi=W8-SIE)   \n[Sea Ice Thickness from IceSAT-2](https://www.eodashboard.org/explore?poi=W10-SITI)\n  \n[Sea Ice Concentration Antarctic from GCOM-W](https://www.eodashboard.org/explore?poi=World-N12_sea_ice_concentration_arctic)", "id": "Envisat-1652251767198", "title": "Envisat", - "__generatedText__": "

ESA has been building radar altimeters since the early 1990s. Radar altimeters use a microwave signal to measure sea ice freeboard. In this frequency band, the signal can penetrate further into snow that lies on sea ice. To better understand how far the microwaves can penetrate the snowpack, complementary field or airborne campaigns are needed to validate the satellite data. Researchers are comparing altimeter signals at different frequencies to calculate how much snow lies on top of the sea ice. This is important as the amount of snow can also impact the freeboard\u2014for instance a heavy snow-load can weigh the sea ice down and may even push it under water.

\n

Researchers can calculate sea ice thickness once the freeboard has been established. The ESA Climate Change Initiative Sea Ice Thickness data set presented here shows the decrease in winter sea ice thickness over the past 15 years using information from ESA\u2019s Envisat and CryoSat-2 satellite missions.

\n

Explore Datasets

\n

 
This EO Dashboard provides access to interactive maps of Sea Ice Thickness and Sea Ice Concentration. Access these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

Sea Ice Thickness from Cryosat  
Sea Ice Thickness from Envisat  
Sea Ice Thickness from IceSAT-2\n 
Sea Ice Concentration Antarctic from GCOM-W

\n" + "__generatedText__": "

ESA has been building radar altimeters since the early 1990s. Radar altimeters use a microwave signal to measure sea ice freeboard. In this frequency band, the signal can penetrate further into snow that lies on sea ice. To better understand how far the microwaves can penetrate the snowpack, complementary field or airborne campaigns are needed to validate the satellite data. Researchers are comparing altimeter signals at different frequencies to calculate how much snow lies on top of the sea ice. This is important as the amount of snow can also impact the freeboard\u2014for instance a heavy snow-load can weigh the sea ice down and may even push it under water.

\n

Researchers can calculate sea ice thickness once the freeboard has been established. The ESA Climate Change Initiative Sea Ice Thickness data set presented here shows the decrease in winter sea ice thickness over the past 15 years using information from ESA\u2019s Envisat and CryoSat-2 satellite missions.

\n

Explore Datasets

\n

 
This EO Dashboard provides access to interactive maps of Sea Ice Thickness and Sea Ice Concentration. Access these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

Sea Ice Thickness from Cryosat  
Sea Ice Thickness from Envisat  
Sea Ice Thickness from IceSAT-2\n 
Sea Ice Concentration Antarctic from GCOM-W

\n" }, { "width": 3, @@ -80,4 +80,4 @@ } ], "title": "Cryo - ESA NASA" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/6ee2de3fc9ef5f56.json b/app/public/data/dashboards/6ee2de3fc9ef5f56.json index ce70faa4ae..cff2b2133b 100644 --- a/app/public/data/dashboards/6ee2de3fc9ef5f56.json +++ b/app/public/data/dashboards/6ee2de3fc9ef5f56.json @@ -21,7 +21,7 @@ "lat": -74.24549347227293 } }, - "id": "ThwaitesLandsat-ADD@1679052330400", + "id": "ADD_L2_Thwaites-ADD_Landsat_L2_Antarctica@1679052330400", "title": "Selected low-cloud-cover Landsat Collection-2 Level-2 Surface Reflectance scenes covering Thwaites Glacier" }, { @@ -40,7 +40,7 @@ "lat": -74.38981095077756 } }, - "id": "PineIslandLandsat-ADD@1679052340151", + "id": "ADD_L2_Pine_Island-ADD_Landsat_L2_Antarctica@1679052340151", "title": "Selected low-cloud-cover Landsat Collection-2 Level-2 Surface Reflectance scenes covering Pine Island Glacier" }, { @@ -52,4 +52,4 @@ } ], "title": "Pine Island and Thwaites Glaciers" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/7c1644ec316b72d6.json b/app/public/data/dashboards/7c1644ec316b72d6.json index a1667c877e..d833772abf 100644 --- a/app/public/data/dashboards/7c1644ec316b72d6.json +++ b/app/public/data/dashboards/7c1644ec316b72d6.json @@ -38,7 +38,7 @@ "lat": 13.66733825965496 } }, - "id": "W8-N9", + "id": "World-N9", "title": "World, Nitrogen Dioxide (Yearly)" }, { @@ -67,4 +67,4 @@ } ], "title": "Emissions" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/a785d7a3c536a452.json b/app/public/data/dashboards/a785d7a3c536a452.json index 9c9ff8f07b..88364c8471 100644 --- a/app/public/data/dashboards/a785d7a3c536a452.json +++ b/app/public/data/dashboards/a785d7a3c536a452.json @@ -35,9 +35,9 @@ "lat": 1.5818302639606454 } }, - "id": "W12-NCEO", + "id": "World-NCEO", "title": "World, NCEO Africa Biomass" } ], "title": "BIOMASS - Joint Story" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/afea38efc80e9846.json b/app/public/data/dashboards/afea38efc80e9846.json index dde60fa34b..1aa13daaf3 100644 --- a/app/public/data/dashboards/afea38efc80e9846.json +++ b/app/public/data/dashboards/afea38efc80e9846.json @@ -43,16 +43,16 @@ "lat": -28.52172449340486 } }, - "id": "WorldCO-N1", + "id": "World-N1_CO", "title": "World, CO" }, { "width": 1, - "text": "## Explore Datasets \n   \nUse the **interactive map** on this page to see how carbon monoxide levels vary globally. The compare feature on this map allows looking at the levels of CO on two different dates.\n\nThis **EO Dashboard** provides access to interactive maps of Carbon Monoxide, Nitrogen Dioxide, and Sulfur Dioxide from TROPOMI. Access these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[TROPOMI CO](https://www.eodashboard.org/?poi=WorldCO-N1)   \n[TROPOMI NO2](https://www.eodashboard.org/?poi=W1-N1)   \n[TROPOMI SO2](https://www.eodashboard.org/?poi=SO2-N1)\n\nThe following Notebook evaluates fire impact on populated areas on a European site\n\n", + "text": "## Explore Datasets \n   \nUse the **interactive map** on this page to see how carbon monoxide levels vary globally. The compare feature on this map allows looking at the levels of CO on two different dates.\n\nThis **EO Dashboard** provides access to interactive maps of Carbon Monoxide, Nitrogen Dioxide, and Sulfur Dioxide from TROPOMI. Access these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[TROPOMI CO](https://www.eodashboard.org/?poi=World-N1_CO)   \n[TROPOMI NO2](https://www.eodashboard.org/?poi=W1-N1)   \n[TROPOMI SO2](https://www.eodashboard.org/?poi=SO2-N1)\n\nThe following Notebook evaluates fire impact on populated areas on a European site\n\n", "id": "Page 3-1652005461104", "title": "Page 3", - "__generatedText__": "

Explore Datasets

\n

 
Use the interactive map on this page to see how carbon monoxide levels vary globally. The compare feature on this map allows looking at the levels of CO on two different dates.

\n

This EO Dashboard provides access to interactive maps of Carbon Monoxide, Nitrogen Dioxide, and Sulfur Dioxide from TROPOMI. Access these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

TROPOMI CO  
TROPOMI NO2  
TROPOMI SO2

\n

The following Notebook evaluates fire impact on populated areas on a European site

\n<iframe width=\"95%\" height=\"95%\" src=\"https://bids2023-nbviewer.hub.eox.at/localfile/bids2023/notebooks/Fire_impact_analysis.ipynb?format=html_plain\" frameborder=\"0\"></iframe>" + "__generatedText__": "

Explore Datasets

\n

 
Use the interactive map on this page to see how carbon monoxide levels vary globally. The compare feature on this map allows looking at the levels of CO on two different dates.

\n

This EO Dashboard provides access to interactive maps of Carbon Monoxide, Nitrogen Dioxide, and Sulfur Dioxide from TROPOMI. Access these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

TROPOMI CO  
TROPOMI NO2  
TROPOMI SO2

\n

The following Notebook evaluates fire impact on populated areas on a European site

\n<iframe width=\"95%\" height=\"95%\" src=\"https://bids2023-nbviewer.hub.eox.at/localfile/bids2023/notebooks/Fire_impact_analysis.ipynb?format=html_plain\" frameborder=\"0\"></iframe>" } ], "title": "Monitoring from Space how Air Pollution affects Climate Change" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/bd6db303fd0fb8e8.json b/app/public/data/dashboards/bd6db303fd0fb8e8.json index 72f29c047b..b9d6d5c5bd 100644 --- a/app/public/data/dashboards/bd6db303fd0fb8e8.json +++ b/app/public/data/dashboards/bd6db303fd0fb8e8.json @@ -72,16 +72,16 @@ }, "dataLayerTime": null }, - "id": "W8-N9", + "id": "World-N9", "title": "World, NO2 OMI Annual" }, { "width": 2, - "text": "## Future Research\n  \nThese observations represent almost two decades of daily air pollution data that show an increasingly clear picture of where the gas comes from and how the amount entering the atmosphere has changed over time and whether changes in air quality control are making a difference.\n\n## Explore Datasets \n   \nUse the **interactive map** on this page to see how yearly nitrogen dioxide levels vary globally. The compare feature on this map allows looking at the levels of NO2 in different years.\n\nThis **EO Dashboard** provides access to interactive maps of Carbon Monoxide, Nitrogen Dioxide, and Sulfur Dioxide from NASA's OMI. Access these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[OMI NO2 - Monthly](https://www.eodashboard.org/?poi=W2-N1)   \n[OMI NO2 - Yearly](https://www.eodashboard.org/?poi=W8-N9)   \n[OMI SO2](https://www.eodashboard.org/?poi=W9-N10)\n\n### Accessing the data from NASA's VEDA EOAPI\n\nThese datasets are provided by NASA's VEDA EOAPI. The following Notebook illustrates how to access and work with the datasets to recreate the graphs illustrated in this story\n\n", + "text": "## Future Research\n  \nThese observations represent almost two decades of daily air pollution data that show an increasingly clear picture of where the gas comes from and how the amount entering the atmosphere has changed over time and whether changes in air quality control are making a difference.\n\n## Explore Datasets \n   \nUse the **interactive map** on this page to see how yearly nitrogen dioxide levels vary globally. The compare feature on this map allows looking at the levels of NO2 in different years.\n\nThis **EO Dashboard** provides access to interactive maps of Carbon Monoxide, Nitrogen Dioxide, and Sulfur Dioxide from NASA's OMI. Access these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[OMI NO2 - Monthly](https://www.eodashboard.org/?poi=W2-N1)   \n[OMI NO2 - Yearly](https://www.eodashboard.org/?poi=World-N9)   \n[OMI SO2](https://www.eodashboard.org/?poi=W9-N10)\n\n### Accessing the data from NASA's VEDA EOAPI\n\nThese datasets are provided by NASA's VEDA EOAPI. The following Notebook illustrates how to access and work with the datasets to recreate the graphs illustrated in this story\n\n", "id": "Future Research-1651503305304", "title": "Future Research", - "__generatedText__": "

Future Research

\n

 
These observations represent almost two decades of daily air pollution data that show an increasingly clear picture of where the gas comes from and how the amount entering the atmosphere has changed over time and whether changes in air quality control are making a difference.

\n

Explore Datasets

\n

 
Use the interactive map on this page to see how yearly nitrogen dioxide levels vary globally. The compare feature on this map allows looking at the levels of NO2 in different years.

\n

This EO Dashboard provides access to interactive maps of Carbon Monoxide, Nitrogen Dioxide, and Sulfur Dioxide from NASA's OMI. Access these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

OMI NO2 - Monthly  
OMI NO2 - Yearly  
OMI SO2

\n

Accessing the data from NASA's VEDA EOAPI

\n

These datasets are provided by NASA's VEDA EOAPI. The following Notebook illustrates how to access and work with the datasets to recreate the graphs illustrated in this story

\n<iframe width=\"90%\" height=\"90%\" src=\"https://bids2023-nbviewer.hub.eox.at/localfile/bids2023/notebooks/veda_api_bids_2023.ipynb?format=html_plain\" frameborder=\"0\"></iframe>" + "__generatedText__": "

Future Research

\n

 
These observations represent almost two decades of daily air pollution data that show an increasingly clear picture of where the gas comes from and how the amount entering the atmosphere has changed over time and whether changes in air quality control are making a difference.

\n

Explore Datasets

\n

 
Use the interactive map on this page to see how yearly nitrogen dioxide levels vary globally. The compare feature on this map allows looking at the levels of NO2 in different years.

\n

This EO Dashboard provides access to interactive maps of Carbon Monoxide, Nitrogen Dioxide, and Sulfur Dioxide from NASA's OMI. Access these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

OMI NO2 - Monthly  
OMI NO2 - Yearly  
OMI SO2

\n

Accessing the data from NASA's VEDA EOAPI

\n

These datasets are provided by NASA's VEDA EOAPI. The following Notebook illustrates how to access and work with the datasets to recreate the graphs illustrated in this story

\n<iframe width=\"90%\" height=\"90%\" src=\"https://bids2023-nbviewer.hub.eox.at/localfile/bids2023/notebooks/veda_api_bids_2023.ipynb?format=html_plain\" frameborder=\"0\"></iframe>" } ], "title": "Nitrogen Dioxide NO2 and Sulfur Dioxide SO2" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/cc21f006274175d0.json b/app/public/data/dashboards/cc21f006274175d0.json index f529930928..88563f953f 100644 --- a/app/public/data/dashboards/cc21f006274175d0.json +++ b/app/public/data/dashboards/cc21f006274175d0.json @@ -40,10 +40,10 @@ }, { "width": 1, - "text": "A study using the Second Global Imager (SGLI) on board the Global Change Observation Mission - Climate \"SHIKISAI\" (GCOM-C), compared the concentration distribution of phytoplankton chlorophyll-a (Chl-a) and the surface temperature around Lake Biwa from 2018 to 2021. GCOM-C observes from the ground with 19 channels from the near-ultraviolet region to the infrared region, allowing to observe various physical quantities such as land, atmosphere, ocean, snow and ice by using channels according to purpose [4]. When comparing SGLI data of May and November of 2019 and 2020, which were warmer winters, against the same period in 2018 and in 2021, one noticeable difference was the change in the circulation process throughout the year. It is conjectured that 2021 seems to show a normal chlorophyll-a concentration (when compared to the two prior years) which could be possible linked to the fact that during this year, overturn was confirmed for the first time in three years [5, 6,7].\n\n
\n\n\n\nMay and November monthly Chl-a concentration from 2018 to 2021. Source: JAXA\n
\n\nLooking at the distribution of Chl-a concentrations in Lake Biwa throughout 2019, the easter coastal area in May presents high concentration values, and it extends northward along the eastern coast as shown in the following figure. According to research by the Goto Laboratory at the University of Shiga Prefecture, this is due to the bloom of the phytoplankton community caused by the supply of nitrogen and phosphorus nutrients from the land (coming from puddling, precipitation, etc.) and the effect of the lake current. In the summer, when the surface layer of Lake Biwa becomes oligotrophic , the concentration of Chl-a is as low as 1 to 3 mg m-3 in most of Lake Biwa. After that, the distribution map in autumn (November), when the depth of the mixed layer becomes deeper, clearly shows that the high-concentration area due to the autumn bloom of phytoplankton spreads throughout Lake Biwa. Especially in the eastern coastal area, with high concentration areas exceeding 20 mg m-3 are continuously distributed in the north-south direction [5, 6,7].\n\n
\n\n\n\nMonthly chlorophyll concentration in 2019. Source: JAXA\n
\n\n\n\nPhenomena thought to be caused by climate change have already occurred in Lake Biwa, so there is an urgent need to further understand the impact of climate change and consider countermeasures. The continuous water quality and temperature data of Lake Biwa, along with new monitoring methods is important to understand the potential tipping point faced by this lake, as prolonged altered conditions such as warmer temperatures and absence of overturn might lead to significant changes in the lake ecological balance. Cases like this highlight the importance of understanding the risk of reaching tipping point where the ecosystem undergoes irreversible transformations impacting important water resources which millions depend on. \n\n### Map\nThe following Map shows Lake Biwa as imaged by NASA's Landsat7-9 satellites. [Access this dataset](https://eodashboard.org/explore?poi=Biwa-NLK&search=Lake+Biwa%3A+Landsat&x=15305861.16017&y=4103996.71911&z=8.96936)", + "text": "A study using the Second Global Imager (SGLI) on board the Global Change Observation Mission - Climate \"SHIKISAI\" (GCOM-C), compared the concentration distribution of phytoplankton chlorophyll-a (Chl-a) and the surface temperature around Lake Biwa from 2018 to 2021. GCOM-C observes from the ground with 19 channels from the near-ultraviolet region to the infrared region, allowing to observe various physical quantities such as land, atmosphere, ocean, snow and ice by using channels according to purpose [4]. When comparing SGLI data of May and November of 2019 and 2020, which were warmer winters, against the same period in 2018 and in 2021, one noticeable difference was the change in the circulation process throughout the year. It is conjectured that 2021 seems to show a normal chlorophyll-a concentration (when compared to the two prior years) which could be possible linked to the fact that during this year, overturn was confirmed for the first time in three years [5, 6,7].\n\n
\n\n\n\nMay and November monthly Chl-a concentration from 2018 to 2021. Source: JAXA\n
\n\nLooking at the distribution of Chl-a concentrations in Lake Biwa throughout 2019, the easter coastal area in May presents high concentration values, and it extends northward along the eastern coast as shown in the following figure. According to research by the Goto Laboratory at the University of Shiga Prefecture, this is due to the bloom of the phytoplankton community caused by the supply of nitrogen and phosphorus nutrients from the land (coming from puddling, precipitation, etc.) and the effect of the lake current. In the summer, when the surface layer of Lake Biwa becomes oligotrophic , the concentration of Chl-a is as low as 1 to 3 mg m-3 in most of Lake Biwa. After that, the distribution map in autumn (November), when the depth of the mixed layer becomes deeper, clearly shows that the high-concentration area due to the autumn bloom of phytoplankton spreads throughout Lake Biwa. Especially in the eastern coastal area, with high concentration areas exceeding 20 mg m-3 are continuously distributed in the north-south direction [5, 6,7].\n\n
\n\n\n\nMonthly chlorophyll concentration in 2019. Source: JAXA\n
\n\n\n\nPhenomena thought to be caused by climate change have already occurred in Lake Biwa, so there is an urgent need to further understand the impact of climate change and consider countermeasures. The continuous water quality and temperature data of Lake Biwa, along with new monitoring methods is important to understand the potential tipping point faced by this lake, as prolonged altered conditions such as warmer temperatures and absence of overturn might lead to significant changes in the lake ecological balance. Cases like this highlight the importance of understanding the risk of reaching tipping point where the ecosystem undergoes irreversible transformations impacting important water resources which millions depend on. \n\n### Map\nThe following Map shows Lake Biwa as imaged by NASA's Landsat7-9 satellites. [Access this dataset](https://eodashboard.org/explore?poi=NLK_lake_biwa-NLK&search=Lake+Biwa%3A+Landsat&x=15305861.16017&y=4103996.71911&z=8.96936)", "id": "page 3-1688481369592", "title": "page 3", - "__generatedText__": "

A study using the Second Global Imager (SGLI) on board the Global Change Observation Mission - Climate "SHIKISAI" (GCOM-C), compared the concentration distribution of phytoplankton chlorophyll-a (Chl-a) and the surface temperature around Lake Biwa from 2018 to 2021. GCOM-C observes from the ground with 19 channels from the near-ultraviolet region to the infrared region, allowing to observe various physical quantities such as land, atmosphere, ocean, snow and ice by using channels according to purpose [4]. When comparing SGLI data of May and November of 2019 and 2020, which were warmer winters, against the same period in 2018 and in 2021, one noticeable difference was the change in the circulation process throughout the year. It is conjectured that 2021 seems to show a normal chlorophyll-a concentration (when compared to the two prior years) which could be possible linked to the fact that during this year, overturn was confirmed for the first time in three years [5, 6,7].

\n
\n\n\n\n

May and November monthly Chl-a concentration from 2018 to 2021. Source: JAXA

\n
\n\n

Looking at the distribution of Chl-a concentrations in Lake Biwa throughout 2019, the easter coastal area in May presents high concentration values, and it extends northward along the eastern coast as shown in the following figure. According to research by the Goto Laboratory at the University of Shiga Prefecture, this is due to the bloom of the phytoplankton community caused by the supply of nitrogen and phosphorus nutrients from the land (coming from puddling, precipitation, etc.) and the effect of the lake current. In the summer, when the surface layer of Lake Biwa becomes oligotrophic , the concentration of Chl-a is as low as 1 to 3 mg m-3 in most of Lake Biwa. After that, the distribution map in autumn (November), when the depth of the mixed layer becomes deeper, clearly shows that the high-concentration area due to the autumn bloom of phytoplankton spreads throughout Lake Biwa. Especially in the eastern coastal area, with high concentration areas exceeding 20 mg m-3 are continuously distributed in the north-south direction [5, 6,7].

\n
\n\n\n\n

Monthly chlorophyll concentration in 2019. Source: JAXA

\n
\n\n\n\n

Phenomena thought to be caused by climate change have already occurred in Lake Biwa, so there is an urgent need to further understand the impact of climate change and consider countermeasures. The continuous water quality and temperature data of Lake Biwa, along with new monitoring methods is important to understand the potential tipping point faced by this lake, as prolonged altered conditions such as warmer temperatures and absence of overturn might lead to significant changes in the lake ecological balance. Cases like this highlight the importance of understanding the risk of reaching tipping point where the ecosystem undergoes irreversible transformations impacting important water resources which millions depend on.

\n

Map

\n

The following Map shows Lake Biwa as imaged by NASA's Landsat7-9 satellites. Access this dataset

\n" + "__generatedText__": "

A study using the Second Global Imager (SGLI) on board the Global Change Observation Mission - Climate "SHIKISAI" (GCOM-C), compared the concentration distribution of phytoplankton chlorophyll-a (Chl-a) and the surface temperature around Lake Biwa from 2018 to 2021. GCOM-C observes from the ground with 19 channels from the near-ultraviolet region to the infrared region, allowing to observe various physical quantities such as land, atmosphere, ocean, snow and ice by using channels according to purpose [4]. When comparing SGLI data of May and November of 2019 and 2020, which were warmer winters, against the same period in 2018 and in 2021, one noticeable difference was the change in the circulation process throughout the year. It is conjectured that 2021 seems to show a normal chlorophyll-a concentration (when compared to the two prior years) which could be possible linked to the fact that during this year, overturn was confirmed for the first time in three years [5, 6,7].

\n
\n\n\n\n

May and November monthly Chl-a concentration from 2018 to 2021. Source: JAXA

\n
\n\n

Looking at the distribution of Chl-a concentrations in Lake Biwa throughout 2019, the easter coastal area in May presents high concentration values, and it extends northward along the eastern coast as shown in the following figure. According to research by the Goto Laboratory at the University of Shiga Prefecture, this is due to the bloom of the phytoplankton community caused by the supply of nitrogen and phosphorus nutrients from the land (coming from puddling, precipitation, etc.) and the effect of the lake current. In the summer, when the surface layer of Lake Biwa becomes oligotrophic , the concentration of Chl-a is as low as 1 to 3 mg m-3 in most of Lake Biwa. After that, the distribution map in autumn (November), when the depth of the mixed layer becomes deeper, clearly shows that the high-concentration area due to the autumn bloom of phytoplankton spreads throughout Lake Biwa. Especially in the eastern coastal area, with high concentration areas exceeding 20 mg m-3 are continuously distributed in the north-south direction [5, 6,7].

\n
\n\n\n\n

Monthly chlorophyll concentration in 2019. Source: JAXA

\n
\n\n\n\n

Phenomena thought to be caused by climate change have already occurred in Lake Biwa, so there is an urgent need to further understand the impact of climate change and consider countermeasures. The continuous water quality and temperature data of Lake Biwa, along with new monitoring methods is important to understand the potential tipping point faced by this lake, as prolonged altered conditions such as warmer temperatures and absence of overturn might lead to significant changes in the lake ecological balance. Cases like this highlight the importance of understanding the risk of reaching tipping point where the ecosystem undergoes irreversible transformations impacting important water resources which millions depend on.

\n

Map

\n

The following Map shows Lake Biwa as imaged by NASA's Landsat7-9 satellites. Access this dataset

\n" }, { "width": 3, @@ -56,7 +56,7 @@ "lat": 35.19310377935969 } }, - "id": "Biwa-NLK@1689236387909", + "id": "NLK_lake_biwa-NLK@1689236387909", "title": "Lake Biwa: Landsat- Biwa Lake cloud free" }, { @@ -68,4 +68,4 @@ } ], "title": "Inland Water Story - Algae Bloom" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/e45036dd512afea1.json b/app/public/data/dashboards/e45036dd512afea1.json index 53b9b8d4b0..cd66426ed3 100644 --- a/app/public/data/dashboards/e45036dd512afea1.json +++ b/app/public/data/dashboards/e45036dd512afea1.json @@ -34,7 +34,7 @@ "up": null, "direction": null }, - "id": "World-N12", + "id": "World-N12_sea_ice_concentration_arctic", "title": "Global, Sea Ice Concentration (GCOM-W)" }, { @@ -67,11 +67,11 @@ }, { "width": 4, - "text": "## Explore Datasets \n   \nThis **EO Dashboard** provides access to interactive maps of Sea Ice Thickness and Sea Ice Concentration. Access these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[Sea Ice Thickness from Cryosat](https://www.eodashboard.org/explore?poi=W9-SIC)   \n[Sea Ice Thickness from Envisat](https://www.eodashboard.org/explore?poi=W8-SIE)   \n[Sea Ice Thickness from IceSAT-2](https://www.eodashboard.org/explore?poi=W10-SITI)\n  \n[Sea Ice Concentration from GCOM-W](https://www.eodashboard.org/explore?poi=World-N12)", + "text": "## Explore Datasets \n   \nThis **EO Dashboard** provides access to interactive maps of Sea Ice Thickness and Sea Ice Concentration. Access these datasets by clicking on the **[EXPLORE DATASETS](https://www.eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[Sea Ice Thickness from Cryosat](https://www.eodashboard.org/explore?poi=W9-SIC)   \n[Sea Ice Thickness from Envisat](https://www.eodashboard.org/explore?poi=W8-SIE)   \n[Sea Ice Thickness from IceSAT-2](https://www.eodashboard.org/explore?poi=W10-SITI)\n  \n[Sea Ice Concentration from GCOM-W](https://www.eodashboard.org/explore?poi=World-N12_sea_ice_concentration_arctic)", "id": " -1652890242032", "title": " ", - "__generatedText__": "

Explore Datasets

\n

 
This EO Dashboard provides access to interactive maps of Sea Ice Thickness and Sea Ice Concentration. Access these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

Sea Ice Thickness from Cryosat  
Sea Ice Thickness from Envisat  
Sea Ice Thickness from IceSAT-2\n 
Sea Ice Concentration from GCOM-W

\n" + "__generatedText__": "

Explore Datasets

\n

 
This EO Dashboard provides access to interactive maps of Sea Ice Thickness and Sea Ice Concentration. Access these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

Sea Ice Thickness from Cryosat  
Sea Ice Thickness from Envisat  
Sea Ice Thickness from IceSAT-2\n 
Sea Ice Concentration from GCOM-W

\n" } ], "title": "Cryo - JAXA 1" -} \ No newline at end of file +} diff --git a/app/public/data/dashboards/fe9c083d830b9f90.json b/app/public/data/dashboards/fe9c083d830b9f90.json index aa91b3eb2d..746e20d807 100644 --- a/app/public/data/dashboards/fe9c083d830b9f90.json +++ b/app/public/data/dashboards/fe9c083d830b9f90.json @@ -43,10 +43,10 @@ }, { "width": 4, - "text": "## Explore Datasets \n  \nUse the **interactive maps** on the next page to see the variations of NO2, SIF and XCO2levels over Cairo. The compare feature on the map allows looking at the levels two different dates. The following products can be explored:\n  \n\n**GOSAT lower tropospheric CO2 enhancement** in daily [ppm]\nGOSAT tropospheric partial column observes global changes of the carbon dioxide (CO2) enhancement; the CO2 density difference between lower atmosphere (0-4 km) influenced by CO2 net flux, i.e., surface emission and uptake, minus upper atmosphere (4-12 km) as background. The report on GOSAT partial column density products was submitted to UNFCCC for the first global stocktake as space-based surface GHG Emission Indicator (GEI) over the city.\n\n*Data source: *\n\n**TROPOMI SIF** in monthly average [mW/m2/sr/nm]\nTROPOMI solar-induced chlorophyll fluorescence (SIF) shows the photosynthetic activity of plant ecosystem. Plant absorbs sunlight but re-emit a small fraction of energy as SIF, which is strongly related to carbon uptake of CO2 through photosynthesis over plant area. \n\n*Data source: Koehler, P., & Frankenberg, C. (2020). Ungridded TROPOMI SIF (at 740nm) (Version 1.0) [Data set]. CaltechDATA. *\n\n**TROPOMI NO2 column density** in daily [mol/m3]\nTROPOMI observes nitrogen dioxide (NO2) column density with a high resolution of 5 km. NO2 is an air pollution trace gas as a result of anthropogenic activities along with fossil fuel combustion such as oil refinery, power plant, steelwork and automobile transportation the same as the CO2 emission. However, NO2 reduction is processed by decomposition different from CO2 uptake.\n\n*Data source: https://data-portal.s5p-pal.com/products/no2.html*\n\n**Windrose in hourly frequency**\n\nWindrose shows the frequency of winds blowing from directions and speed over an hour around GOSAT overpass time in the target city. \n\n*Acknowledgments: The windrose was produced by using wind data from Windergroud.com.*\n\n  \n\nExplore in more details these datasets by clicking on the **[EXPLORE DATASETS](https://eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[GOSAT-2 CO2 on Cairo](https://www.eodashboard.org/?poi=EG01-N2)   \n[OCO-2 CO2 Global](https://www.eodashboard.org/?poi=W4-N2)   \n[TROPOMI NO2](https://www.eodashboard.org/?poi=W1-N1)   \n[TROPOMI SIF](https://www.eodashboard.org/?indicator=SIF&poi=EG01-SIF)\n\n", + "text": "## Explore Datasets \n  \nUse the **interactive maps** on the next page to see the variations of NO2, SIF and XCO2levels over Cairo. The compare feature on the map allows looking at the levels two different dates. The following products can be explored:\n  \n\n**GOSAT lower tropospheric CO2 enhancement** in daily [ppm]\nGOSAT tropospheric partial column observes global changes of the carbon dioxide (CO2) enhancement; the CO2 density difference between lower atmosphere (0-4 km) influenced by CO2 net flux, i.e., surface emission and uptake, minus upper atmosphere (4-12 km) as background. The report on GOSAT partial column density products was submitted to UNFCCC for the first global stocktake as space-based surface GHG Emission Indicator (GEI) over the city.\n\n*Data source: *\n\n**TROPOMI SIF** in monthly average [mW/m2/sr/nm]\nTROPOMI solar-induced chlorophyll fluorescence (SIF) shows the photosynthetic activity of plant ecosystem. Plant absorbs sunlight but re-emit a small fraction of energy as SIF, which is strongly related to carbon uptake of CO2 through photosynthesis over plant area. \n\n*Data source: Koehler, P., & Frankenberg, C. (2020). Ungridded TROPOMI SIF (at 740nm) (Version 1.0) [Data set]. CaltechDATA. *\n\n**TROPOMI NO2 column density** in daily [mol/m3]\nTROPOMI observes nitrogen dioxide (NO2) column density with a high resolution of 5 km. NO2 is an air pollution trace gas as a result of anthropogenic activities along with fossil fuel combustion such as oil refinery, power plant, steelwork and automobile transportation the same as the CO2 emission. However, NO2 reduction is processed by decomposition different from CO2 uptake.\n\n*Data source: https://data-portal.s5p-pal.com/products/no2.html*\n\n**Windrose in hourly frequency**\n\nWindrose shows the frequency of winds blowing from directions and speed over an hour around GOSAT overpass time in the target city. \n\n*Acknowledgments: The windrose was produced by using wind data from Windergroud.com.*\n\n  \n\nExplore in more details these datasets by clicking on the **[EXPLORE DATASETS](https://eodashboard.org/explore)** button at the top of the page or directly from the links below:\n\n[GOSAT-2 CO2 on Cairo](https://www.eodashboard.org/?poi=World-N2_CO2_jaxa_gosat)   \n[OCO-2 CO2 Global](https://www.eodashboard.org/?poi=W4-N2)   \n[TROPOMI NO2](https://www.eodashboard.org/?poi=W1-N1)   \n[TROPOMI SIF](https://www.eodashboard.org/?indicator=SIF&poi=World-SIF)\n\n", "id": "Datasets-1652031338767", "title": "Datasets", - "__generatedText__": "

Explore Datasets

\n

 
Use the interactive maps on the next page to see the variations of NO2, SIF and XCO2levels over Cairo. The compare feature on the map allows looking at the levels two different dates. The following products can be explored:\n 

\n

GOSAT lower tropospheric CO2 enhancement in daily [ppm]\nGOSAT tropospheric partial column observes global changes of the carbon dioxide (CO2) enhancement; the CO2 density difference between lower atmosphere (0-4 km) influenced by CO2 net flux, i.e., surface emission and uptake, minus upper atmosphere (4-12 km) as background. The report on GOSAT partial column density products was submitted to UNFCCC for the first global stocktake as space-based surface GHG Emission Indicator (GEI) over the city.

\n

Data source: https://www.eorc.jaxa.jp/GOSAT/GPCG/index_GOSAT.html

\n

TROPOMI SIF in monthly average [mW/m2/sr/nm]\nTROPOMI solar-induced chlorophyll fluorescence (SIF) shows the photosynthetic activity of plant ecosystem. Plant absorbs sunlight but re-emit a small fraction of energy as SIF, which is strongly related to carbon uptake of CO2 through photosynthesis over plant area.

\n

Data source: Koehler, P., & Frankenberg, C. (2020). Ungridded TROPOMI SIF (at 740nm) (Version 1.0) [Data set]. CaltechDATA. https://doi.org/10.22002/D1.1347

\n

TROPOMI NO2 column density in daily [mol/m3]\nTROPOMI observes nitrogen dioxide (NO2) column density with a high resolution of 5 km. NO2 is an air pollution trace gas as a result of anthropogenic activities along with fossil fuel combustion such as oil refinery, power plant, steelwork and automobile transportation the same as the CO2 emission. However, NO2 reduction is processed by decomposition different from CO2 uptake.

\n

Data source: https://data-portal.s5p-pal.com/products/no2.html

\n

Windrose in hourly frequency

\n

Windrose shows the frequency of winds blowing from directions and speed over an hour around GOSAT overpass time in the target city.

\n

Acknowledgments: The windrose was produced by using wind data from Windergroud.com.

\n

 

\n

Explore in more details these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

GOSAT-2 CO2 on Cairo  
OCO-2 CO2 Global  
TROPOMI NO2  
TROPOMI SIF

\n" + "__generatedText__": "

Explore Datasets

\n

 
Use the interactive maps on the next page to see the variations of NO2, SIF and XCO2levels over Cairo. The compare feature on the map allows looking at the levels two different dates. The following products can be explored:\n 

\n

GOSAT lower tropospheric CO2 enhancement in daily [ppm]\nGOSAT tropospheric partial column observes global changes of the carbon dioxide (CO2) enhancement; the CO2 density difference between lower atmosphere (0-4 km) influenced by CO2 net flux, i.e., surface emission and uptake, minus upper atmosphere (4-12 km) as background. The report on GOSAT partial column density products was submitted to UNFCCC for the first global stocktake as space-based surface GHG Emission Indicator (GEI) over the city.

\n

Data source: https://www.eorc.jaxa.jp/GOSAT/GPCG/index_GOSAT.html

\n

TROPOMI SIF in monthly average [mW/m2/sr/nm]\nTROPOMI solar-induced chlorophyll fluorescence (SIF) shows the photosynthetic activity of plant ecosystem. Plant absorbs sunlight but re-emit a small fraction of energy as SIF, which is strongly related to carbon uptake of CO2 through photosynthesis over plant area.

\n

Data source: Koehler, P., & Frankenberg, C. (2020). Ungridded TROPOMI SIF (at 740nm) (Version 1.0) [Data set]. CaltechDATA. https://doi.org/10.22002/D1.1347

\n

TROPOMI NO2 column density in daily [mol/m3]\nTROPOMI observes nitrogen dioxide (NO2) column density with a high resolution of 5 km. NO2 is an air pollution trace gas as a result of anthropogenic activities along with fossil fuel combustion such as oil refinery, power plant, steelwork and automobile transportation the same as the CO2 emission. However, NO2 reduction is processed by decomposition different from CO2 uptake.

\n

Data source: https://data-portal.s5p-pal.com/products/no2.html

\n

Windrose in hourly frequency

\n

Windrose shows the frequency of winds blowing from directions and speed over an hour around GOSAT overpass time in the target city.

\n

Acknowledgments: The windrose was produced by using wind data from Windergroud.com.

\n

 

\n

Explore in more details these datasets by clicking on the EXPLORE DATASETS button at the top of the page or directly from the links below:

\n

GOSAT-2 CO2 on Cairo  
OCO-2 CO2 Global  
TROPOMI NO2  
TROPOMI SIF

\n" }, { "width": 1, @@ -57,7 +57,7 @@ "lat": 30.041111425470056 } }, - "id": "EG01-N2", + "id": "World-N2_CO2_jaxa_gosat", "title": "Cairo, XCO2" }, { @@ -69,7 +69,7 @@ "lat": 29.786423215863337 } }, - "id": "EG01-N1", + "id": "World-N1_NO2_jaxa", "title": "Cairo, NO2" }, { @@ -81,9 +81,9 @@ "lat": 30.050628658522783 } }, - "id": "EG01-SIF", + "id": "World-SIF", "title": "Cairo, Solar Induced Chlorophyll Fluorescence" } ], "title": "Crops Consume Cairo\u2019s Carbon Dioxide" -} \ No newline at end of file +} diff --git a/app/public/data/esa/globalDataLayerImages/World-E13c_ship_detections.png b/app/public/data/esa/globalDataLayerImages/World-E13c_ship_detections.png new file mode 100644 index 0000000000..1d502405b1 Binary files /dev/null and b/app/public/data/esa/globalDataLayerImages/World-E13c_ship_detections.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-CDS1_temperature.png b/app/public/data/polar/globalDataLayerImages/World-CDS1_temperature.png new file mode 100644 index 0000000000..e07b057733 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-CDS1_temperature.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-CDS3.png b/app/public/data/polar/globalDataLayerImages/World-CDS3.png new file mode 100644 index 0000000000..01db59a588 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-CDS3.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-CDS4.png b/app/public/data/polar/globalDataLayerImages/World-CDS4.png new file mode 100644 index 0000000000..91f815bcb8 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-CDS4.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-N12_1_sea_ice_concentration_arctic.png b/app/public/data/polar/globalDataLayerImages/World-N12_1_sea_ice_concentration_arctic.png new file mode 100644 index 0000000000..32b0e3f69c Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-N12_1_sea_ice_concentration_arctic.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-Polartep_S1_demo.png b/app/public/data/polar/globalDataLayerImages/World-Polartep_S1_demo.png new file mode 100644 index 0000000000..d990a7372d Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-Polartep_S1_demo.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-Polartep_SeaIceDetection_tif_demo.png b/app/public/data/polar/globalDataLayerImages/World-Polartep_SeaIceDetection_tif_demo.png new file mode 100644 index 0000000000..597004ad39 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-Polartep_SeaIceDetection_tif_demo.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-Polartep_SeaIce_demo.png b/app/public/data/polar/globalDataLayerImages/World-Polartep_SeaIce_demo.png new file mode 100644 index 0000000000..a8c5c2b1fa Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-Polartep_SeaIce_demo.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-Polartep_Snow_specific_surface_area_demo.png b/app/public/data/polar/globalDataLayerImages/World-Polartep_Snow_specific_surface_area_demo.png new file mode 100644 index 0000000000..00e6948e32 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-Polartep_Snow_specific_surface_area_demo.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-Polartep_Snowgrain_diameter_demo.png b/app/public/data/polar/globalDataLayerImages/World-Polartep_Snowgrain_diameter_demo.png new file mode 100644 index 0000000000..d3ed153f24 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-Polartep_Snowgrain_diameter_demo.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-SITI.png b/app/public/data/polar/globalDataLayerImages/World-SITI.png new file mode 100644 index 0000000000..b1dae94478 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-SITI.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SICONC.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SICONC.png new file mode 100644 index 0000000000..20594dcba2 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SICONC.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SISNTHICK.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SISNTHICK.png new file mode 100644 index 0000000000..495f45ae68 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SISNTHICK.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SITHICK.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SITHICK.png new file mode 100644 index 0000000000..05c2d2995c Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_SITHICK.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VXO.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VXO.png new file mode 100644 index 0000000000..da795703d0 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VXO.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VXSI.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VXSI.png new file mode 100644 index 0000000000..45d9c3bcbf Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VXSI.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VYO.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VYO.png new file mode 100644 index 0000000000..cdbb9fa9bc Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VYO.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VYSI.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VYSI.png new file mode 100644 index 0000000000..9465361ac6 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-TOPAZ4_P1D_VYSI.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SIAGE.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SIAGE.png new file mode 100644 index 0000000000..49a2df5950 Binary files /dev/null and b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SIAGE.png differ diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SICONC.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SICONC.png new file mode 120000 index 0000000000..905271af33 --- /dev/null +++ b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SICONC.png @@ -0,0 +1 @@ +World-TOPAZ4_P1D_SICONC.png \ No newline at end of file diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SISNTHICK.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SISNTHICK.png new file mode 120000 index 0000000000..90aa7b418e --- /dev/null +++ b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SISNTHICK.png @@ -0,0 +1 @@ +World-TOPAZ4_P1D_SISNTHICK.png \ No newline at end of file diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SITHICK.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SITHICK.png new file mode 120000 index 0000000000..bb26e25d6c --- /dev/null +++ b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_SITHICK.png @@ -0,0 +1 @@ +World-TOPAZ4_P1D_SITHICK.png \ No newline at end of file diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VXO.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VXO.png new file mode 120000 index 0000000000..2e602f3c68 --- /dev/null +++ b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VXO.png @@ -0,0 +1 @@ +World-TOPAZ4_P1D_VXO.png \ No newline at end of file diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VXSI.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VXSI.png new file mode 120000 index 0000000000..4ba4775075 --- /dev/null +++ b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VXSI.png @@ -0,0 +1 @@ +World-TOPAZ4_P1D_VXSI.png \ No newline at end of file diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VYO.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VYO.png new file mode 120000 index 0000000000..d1b3ae8068 --- /dev/null +++ b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VYO.png @@ -0,0 +1 @@ +World-TOPAZ4_P1D_VYO.png \ No newline at end of file diff --git a/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VYSI.png b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VYSI.png new file mode 120000 index 0000000000..857bb54abb --- /dev/null +++ b/app/public/data/polar/globalDataLayerImages/World-TOPAZ5_P1D_VYSI.png @@ -0,0 +1 @@ +World-TOPAZ4_P1D_VYSI.png \ No newline at end of file diff --git a/app/public/data/polar/internal/.gitkeep b/app/public/data/polar/internal/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/public/data/storytelling-md/Earth Observing Dashboard-3.md b/app/public/data/storytelling-md/Earth Observing Dashboard-3.md new file mode 100644 index 0000000000..88e6381e4a --- /dev/null +++ b/app/public/data/storytelling-md/Earth Observing Dashboard-3.md @@ -0,0 +1,203 @@ +## Forest Loss and Degradation worldwide + +Forests cover 31% of the global land area [(1)](https://www.fao.org/3/CA8753EN/CA8753EN.pdf) and are a critical component of the world’s biodiversity. According to the "State of the World’s Forest 2022" report [(2)](https://www.fao.org/publications/home/fao-flagship-publications/the-state-of-the-worlds-forests/2022/en) published by FAO, they host more than 75% of the world’s terrestrial biodiversity, being home to some of the richest ecosystems. Forests are crucial for maintaining ecosystem balance, offering essential ecosystem services. However, deforestation and forest degradation1 continue to take place at alarming rates [(3)](https://www.fao.org/documents/card/en/c/ca8753en). Deforestation, rising temperature, drier conditions and more frequent and severe fires are pushing different forest types to the verge of irreversible tipping points [(4)](https://www.bbc.com/news/science-environment-60650415), and risk to lose their ability to bounce back from damage, with far-reaching consequences. Deforestation is also the leading cause for 15% of carbon emissions [(5)](https://petpedia.co/deforestation-statistics/), can have a large impact on physical processes in the local climate, it disrupts the carbon cycle and energy balance and has been being associated with heat waves in North America and Eurasia [(6)](https://climate.mit.edu/explainers/forests-and-climate-change). +The UN FAO [(1)](https://www.fao.org/3/CA8753EN/CA8753EN.pdf) estimated an annual rate of deforestation of 10 million in the most recent five-year period (2015-2020). However, even if the world’s forest area is decreasing, the rate of loss has slowed. + +At COP26, 100 countries endorsed the "Glasgow Leaders’s Declaration on Forests and Land Use" [(7)](https://webarchive.nationalarchives.gov.uk/ukgwa/20230418175226/https://ukcop26.org/glasgow-leaders-declaration-on-forests-and-land-use/), which aims to halt and reverse forest loss and land degradation by 2030. Satellite technology can play a crucial role in this commitment by providing real-time data on forest cover and land use changes, enabling governments to enforce policies, track progress or hold accountability for forest loss and degradation [(8)](https://www.bbc.com/news/science-environment-59088498). No single method is universally applicable for monitoring forest degradation, largely due to the specific nature and timing of different degradation processes [(9)](https://cbmjournal.biomedcentral.com/articles/10.1186/s13021-017-0078-9). For this reason, multiple and different types of satellites have been used for forest monitoring, working as a tool for conservation management, allowing to track fires and their emissions, detect illegal logging and estimate biomass. + +## + +Animation: Above ground biomass 2020. ESA (Data source: CCI Biomass project) + +_1 While deforestation refers to the entire removal of forest, degradation means that the forest still exists but with reduced functions_ + +## + +### + +Several ESA, JAXA and NASA satellites such as the [Copernicus Sentinel missions](https://sentinels.copernicus.eu/web/sentinel), [ALOS-2](https://www.eorc.jaxa.jp/ALOS-2/en/about/palsar2.htm), [MODIS](https://modis.gsfc.nasa.gov/) or [GEDI](https://gedi.umd.edu/), equiped with optical, synthetic aperture radar (SAR) and LiDAR sensors can detect and map forest degradation, supporting conservation management, helping to track fires and to detect illegal logging. ESA's upcoming forest mission, [BIOMASS](https://earth.esa.int/eogateway/missions/biomass), is a P-band SAR satellite with the main objective to determine the global distribution of forest biomass. This satellite is expected to improve the estimates of carbon stocks and fluxes on land associated with land-use change, forest degradation and forest regrowth. + +*Map information: JAXA's Global PALSAR-2/PALSAR Forest/Non-Forest Map. [View dataset](https://www.eodashboard.org/explore?search=World%3A+Forest%2Fnon-forest+map+PALSAR2&x=5065036.83109&y=-2298331.0934&z=2.64386&poi=World-FNF)* + +### + +Data delivered by these missions provides the essential information used in global forest products such as the global Biomass Essential Climate Variable (ECV) of ESA's [Climate Change Initiative](https://climate.esa.int/en/projects/biomass/) (CCI). This product counts with an annual estimate of global above-ground biomass at 100 m spatial resolution over five years based on ESA’s C-band (Sentinel-1 A and -B) and JAXA’s L-band SAR on board of ALOS-2 PALSAR-2 with additional information from Space borne LIDAR (such as NASA’s Global Ecosystem Dynamics Investigation Lidar GEDI). JAXA also offers global 25m resolution SAR mosaics and forest/non-forest maps, based on ALOS PALSAR, ALOS-2 PALSAR-2 and the JERS-1 SAR. In addition, “[JICA-JAXA Forest Early Warning System in the Tropics](https://www.eorc.jaxa.jp/jjfast/)" (JJ-FAST) is now operating for monitoring early deforestation in tropical forests globally collaboration with the Japan International Cooperation Agency (JICA) and JAXA. + +*Map information: JAXA's Global PALSAR-2/PALSAR Forest/Non-Forest Map. [View dataset](https://www.eodashboard.org/explore?search=World%3A+Forest%2Fnon-forest+map+PALSAR2&x=5065036.83109&y=-2298331.0934&z=2.64386&poi=World-FNF)* + +## Tipping points + +### Tipping points + +## + +### + +#### Boreal forests: from carbon sink to carbon source? + +![BorealForest](https://raw.githubusercontent.com/eurodatacube/eodash-assets/main/stories/forest_story/BorealForest.png) + +Boreal forests comprise 44% of Earth’s remaining intact forest landscapes [(10)](https://intactforests.org/shp/IFL_readme_2021.pdf). The boreal forest biome stretches across including Canada, Scandinavia, Russia, and China. An increase of 1.6 degrees Celsius (associated to climate change) can have significant effects on species growth and survival. The UN’s Intergovernmental Panel on Climate Change (IPCC) expects that the vast areas of the boreal forest could experience warming of up to 6 to 11 degrees Celsius by 2100, with the potential to hit a tipping point [(11)](https://www.sciencedaily.com/releases/2015/08/150820144722.htm). + +*Map information: GCOM-C/SGLI L3 Normalized Difference Vegetation Index (NDVI). [View dataset](https://www.eodashboard.org/explore?search=Global%3A+NDVI&x=5065036.83109&y=-2298331.0934&z=2.64386&poi=World-E10e)* + +### + +In the southern latitudes, the boreal tree cover is declining, whereas at northern latitudes it is turning into a tundra, a biome characterised by lower albedo, less vegetation and lower biomass, which can have significant impacts on the global carbon cycle, accelerating climate change. These shifts of the above-ground biomass in boreal forests (a key biophysical ecosystem variable describing all living biomass above the soil including stem, stump, branches, bark, seeds and foliage) can be measured by radar satellites such as ALOS-PALSAR. + +*Map information: GCOM-C/SGLI L3 Normalized Difference Vegetation Index (NDVI). [View dataset](https://www.eodashboard.org/explore?search=Global%3A+NDVI&x=5065036.83109&y=-2298331.0934&z=2.64386&poi=World-E10e)* + +### + +The northern forests of Canada and Alaska are shifting northwards as a result of climate change, with trees expected to grow in areas previously was too cold for them. At the same time, in the southern parts of the boreal forest, where trees were adapted to colder conditions, the climate is expected to become too warm and dry. As the loss of trees in the southern boreal forest is expected to happen at a faster rate than their gain in northern regions [(12)](https://www.nature.com/articles/s41467-023-39092-2), the boreal forest is on the verge of contracting. + +*Map information: GCOM-C/SGLI L3 Normalized Difference Vegetation Index (NDVI). [View dataset](https://www.eodashboard.org/explore?search=Global%3A+NDVI&x=5065036.83109&y=-2298331.0934&z=2.64386&poi=World-E10e)* + +### + +The shift to tundra along with the more frequent wildfires, contribute to a concerning pattern wherein boreal forests are approaching a critical threshold - more carbon is being released from organic soils in boreal forests than the ecosystems can absorb. This is resulting in a transition of boreal forest from being carbon sinks to becoming significant sources of global emission [(13)][https://climate.nasa.gov/news/2905/boreal-forest-fires-could-release-deep-soil-carbon/], [(14)](https://alaskabeacon.com/2023/03/03/extreme-wildfires-are-turning-worlds-largest-forest-ecosystem-from-carbon-sink-into-net-emitter/). In fact, in 2021 boreal fires emissions accounted for nearly one quarter of global carbon emissions, setting a record-high CO2 emissions from boreal fires. + +*Map information: GCOM-C/SGLI L3 Normalized Difference Vegetation Index (NDVI). [View dataset](https://www.eodashboard.org/explore?search=Global%3A+NDVI&x=5065036.83109&y=-2298331.0934&z=2.64386&poi=World-E10e)* + +### + +To better understanding the vulnerability and resilience of the Arctic and boreal ecosystem to environmental change, NASA created the “Arctic Boreal Vulnerability Experiment (ABoVE)” [(15)](https://above.nasa.gov/index.html?), focusing on linking field-based, process-level studies with geospatial data products derived from airborne and satellite sensors, aiming to improve the capacity to understand and predict ecosystem responses and societal implications. + +![](https://raw.githubusercontent.com/eurodatacube/eodash-assets/main/stories/forest_story/ABoVE_Logo_large_blue.png) + +*Map information: GCOM-C/SGLI L3 Normalized Difference Vegetation Index (NDVI). [View dataset](https://www.eodashboard.org/explore?search=Global%3A+NDVI&x=5065036.83109&y=-2298331.0934&z=2.64386&poi=World-E10e)* + +### + +#### Amazon rainforest: the next Savanna? + +![AmazonForest](https://raw.githubusercontent.com/eurodatacube/eodash-assets/main/stories/forest_story/AmazonForest.png) + +In the Amazon, deforestation and climate change enhance the risk to reach a tipping point [(16)](https://www.esa.int/Applications/Observing_the_Earth/Space_for_our_climate/Forest_degradation_primary_driver_of_carbon_loss_in_the_Brazilian_Amazon). + +This ecosystem, thanks to its trees, has the ability to generate its own rainfall. However, ongoing deforestation is fundamentally changing how the land and atmosphere interact, leading to higher surface temperatures and reduced evapotranspiration leading to the ‘drying out’ of the forest.’ This alteration is particularly pronounced during dry seasons when rainfall in the southern Amazon diminishes significantly. Simultaneously, climate change, spurred by escalating greenhouse gas concentrations, further curtails evapotranspiration due to CO2 fertilisation and the closing of stomata in response to escalating temperatures. Both mechanisms collectively decrease rainfall recycling across the Amazon, intensifying drought stress and elevating the likelihood of fires [(17)](https://www.nature.com/articles/s41558-022-01287-8). + +*Map information: NASA Evapotranspiration - LIS 10km Global DA. [View dataset](https://www.eodashboard.org/explore?search=World%3A+Evapotranspiration%2C+LIS&x=8381574.94156&y=-1001875.41714&z=2.64386&poi=World-LIS_Global_DA_Evap)* + +### + +Less trees mean a diminished release of water vapour in the atmosphere, consequently reducing cloud formation and precipitation, which ultimately lead to droughts and wildfires [(18)](https://www.scientificamerican.com/article/amazon-rain-forest-nears-dangerous-tipping-point/). This cycle forms a positive feedback loop, perpetuating reduced evapotranspiration and carbon stocks. Whether stemming from localised deforestation impacts or broader global climate shifts, scientific consensus asserts a future for the Amazon characterised by increased warmth and aridity. As a result, the Amazon rainforest is gradually losing its unique ability to ‘bounce back’ after disruptive occurrences, like droughts or other extreme events, leading to a downward spiral where rainforest will shift into a savanna [(19)](https://www.nature.com/articles/s41558-022-01287-8). + +*Map information: NASA Evapotranspiration - LIS 10km Global DA. [View dataset](https://www.eodashboard.org/explore?search=World%3A+Evapotranspiration%2C+LIS&x=8381574.94156&y=-1001875.41714&z=2.64386&poi=World-LIS_Global_DA_Evap)* + +### + +Savannas are generally less efficient than tropical forests at sequestering carbon dioxide from the atmosphere, and recent studies indicate that certain areas of the Amazon are now releasing more carbon dioxide than they absorb. However, there remains no definitive agreement on a tipping point leading to widespread rainforest depletion and the proliferation of savanna species (Cerrado) from the biome. Given the intricate interplay between regional land-use alterations and global climate shifts, scientists are working to gain more understanding about this potential 'point of no return' for the Amazon rainforest. The threshold has been estimated to occur when deforestation reaches 20-25%. Currently, the Amazon has already undergone approximately 17% deforestation, which highlights the urgency of conservation efforts to prevent reaching an ecological tiping point. + +*Map information: ESA Deforested Biomass CCI RECCAP-2. [View dataset](https://www.eodashboard.org/explore?search=World%3A+Deforestation+%28CCI+RECCAP2%29&x=-4728884.58935&y=-802462.43364&z=4.52712&poi=World-RECCAP2_6)* + +## Wildfires + +### Wildfires + +## + +### + +#### Wildfires crisis: increased severity + +Wildfires are becoming more destructive due to several factors, which include rising temperatures, land use changes, and drought [(20)](https://www.pbs.org/newshour/science/climate-change-is-causing-more-wildfires-and-governments-are-unprepared-says-u-n), which contribute to considerable alterations in vast forested areas, transforming them into barren lands that struggle to sustain diverse ecosystems. Savannas and boreal forests have opposite trajectories of fire activity. Fires are declining in savannas and grasslands. In fact, global burned area has declined by ~25% over the past 18 years, largely in savannas and grasslands because of agriculture expansion and intensification [(21)](https://www.science.org/doi/10.1126/science.aal4108). On the other hand, fires are increasing in boreal forest ecosystems, albeit with large interannual variability [(22)](https://www.fao.org/3/xii/0207-b3.htm), making it difficult to attribute recent high fire years to an overall positive trend in burned areas. The ESA CCI programme also delivers Global maps of burned area, based on the NASA's Moderate Resolution Imaging Spectroradiometer (MODIS) on board the Terra satellite. + +Find more information about the South American Fires in 2023 on the [NASA Earth Observatory](https://earthobservatory.nasa.gov/images/event/151021/south-american-fires-in-2023). + +*Map information: Carbon Dioxide (CO2) from NASA’s OCO-2. [View dataset](https://www.eodashboard.org/explore?search=World%3A+Carbon+Dioxide+%28daily%29&x=-17393.67044&y=-859057.16368&z=2.86573&indicator=N2_CO2_mean)* + +### + +#### Siberian Boreal forests + +![Siberia](https://raw.githubusercontent.com/eurodatacube/eodash-assets/main/stories/forest_story/Siberia.png) + +In August 2021, wildfires in Siberia produced 800 megatons of carbon dioxide, nearly double the previous year [(23)](https://www.space.com/siberia-wildfires-greenhouse-gas-emissions-satellite-images). According to estimates by the European Copernicus Atmosphere Monitoring Service (CAMS), more carbon dioxide was released in two and half months than the world’s six most polluting countries emit in a year. Climate change is exacerbating both drier and warmer conditions, fueling more frequent and farther-reaching wildfires that release massive amount of carbon into the atmosphere [(24)](https://www.nrdc.org/stories/climate-tipping-points-are-closer-once-thought). Also, there is consistent evidence that the intervals between fires are shortening, meaning that more carbon is being released from organic soils in boreal forests than the ecosystems can reabsorb, adding up to the trend where boreal forests are leading to a tipping point in that they are becoming a source for global emissions from biomass burning [(25)](https://earthsky.org/earth/wildfires-turn-worlds-largest-forests-carbon-sinks-emitters/) [(26)](https://alaskabeacon.com/2023/03/03/extreme-wildfires-are-turning-worlds-largest-forest-ecosystem-from-carbon-sink-into-net-emitter/) [(27)](https://climate.nasa.gov/news/2905/boreal-forest-fires-could-release-deep-soil-carbon/). + +*Map information: Carbon Dioxide (CO2) from NASA’s OCO-2. [View dataset](https://www.eodashboard.org/explore?search=World%3A+Carbon+Dioxide+%28daily%29&x=-17393.67044&y=-859057.16368&z=2.86573&indicator=N2_CO2_mean)* + +### + +#### Grasslands and Savannas + +Some of the world’s most relevant woody biomes, the savannas, might be facing tipping point [(28)](https://www.researchgate.net/publication/257198227_Mega-fires_tipping_points_and_ecosystem_services_Managing_forests_and_woodlands_in_an_uncertain_future). Fires which play a crucial role in the maintenance and stabilisation of savannas in regions where forest is also a viable stable ecosystem state. Across the grasslands of Asia, the tropical forests of South America, and the savannas of Africa, shifting livelihoods are leading to a significant decline in burned area. By using space assets to detect fires and burn scars, researchers found an ongoing transition from nomadic cultures to settled lifestyles and intensifying agriculture, which has led to a steep drop in the use of fire for land clearing and an overall drop in natural and human-caused fires worldwide. In traditional savanna cultures, people often set fires to keep grazing lands productive and free of shrubs and trees. But as many of these communities have shifted to cultivating permanent fields and building more houses, roads, and villages, the use of fire has declined [(29)](https://earthobservatory.nasa.gov/images/90493/researchers-detect-a-global-drop-in-fires). + +Conversely, other activities such as fire suppression have allowed fuel loads to accumulate, resulting in a dramatic increase of wildfire intensity. While much of the evidence comes from Australia and the USA, +additional insights can be gained from other regions as well. + +### + +In Central Africa, the slash-and-burn agriculture practice combined with the seasonal rise in temperature are primarily responsible for wildfires in Central Africa. In 2019, data from NASA's MODIS satellite revealed Central Africa experienced five times the number of wildfires as the Amazon, although the phenomena and impacts in the two regions are not equivalent [(30)](https://www.newsweek.com/nasa-images-show-africa-has-five-times-more-wildfires-burning-amazonheres-why-theyre-1456382) . The changes in savanna, grassland, and tropical forest fire patterns are so large that they have so far offset some of the increased risk of fire caused by global warming. The impact of a warming and drying climate is more obvious at higher latitudes, where fire has increased in Canada and the American West. Regions of China, India, Brazil, and southern Africa also showed increases in burned area. + +### + +#### California's giant sequoias + +![California](https://raw.githubusercontent.com/eurodatacube/eodash-assets/main/stories/forest_story/California.png) + +According to the U.S. Forest Service, recent fires have killed from 13 to 19% of the world’s giant sequoias in 2020 and 2021 alone [(31)](https://insideclimatenews.org/news/23092022/california-sequioa-wildfires/). [(32)](https://www.nps.gov/articles/000/2021-fire-season-impacts-to-giant-sequoias.htm), causing concern in the scientific community that California forests may be nearing a tipping point from wildfires. Giant sequoias evolved to survive and thrive under lightning-ignited wildfires. In fact, the giant trees depend on fire to release the seeds inside their cones and to remove competing trees that would otherwise deprive them of the ample sunlight they need to flourish [(33)](https://150.parks.ca.gov/?page_id=27588). + +*Map information: EPA Methane Emissions [View dataset](https://www.eodashboard.org/explore?indicator=EPA_Field_burning_Monthly&x=-10575351.41304&y=4201451.01648&z=3.34556)* + +### + +However, the increased severity of fires in recent years, fueled by the racing pace of global warming, is threatening the giant sequoias. In 2021 two very large fires, the Kings Canyon National Park “(KNP) Complex Fire ”and the “Windy Fire”, burned in the southern Sierra Nevada mountains of California in 2021. They had a significant impact on the region's giant sequoia groves, killing thousands of trees. On September 15, 2021 the Operational Land Imager (OLI) on Landsat 8 [(34)](https://landsat.gsfc.nasa.gov/satellites/landsat-8/) acquired an imagery of the “KNP Complex fire” - the largest wildfire in California history at the time. The instrument allowed to depict fire fronts beneath the plumes thanks to the thermal signature provided by infrared data [(35)](https://earthobservatory.nasa.gov/images/148840/fire-encroaching-on-giant-sequoias). Satellite images of the KNP Complex and Windy Fire, both within the Sequoia National Park, were captured by the Geostationary Operational Environmental Satellite 17 (GOES-17) [(36)](https://www.goes-r.gov/multimedia/dataAndImageryImagesGoes-17.html), which prompted authorities to issue evacuation orders [(37)](https://earthobservatory.nasa.gov/images/148878/southern-california-under-smoke). + +### + +The following year, 4800 acres burned from 7th to 30th of July causing road closures for multiple weeks. These fires were part of a larger pattern of wildfires in the western United States, where wildland fires occur more frequently and over a longer period each year as the fire season extends. NASA Earth has been spatializing and mapping wildfires since 1950 [(38)](https://appliedsciences.nasa.gov/our-impact/news/washburn-fire-fits-pattern-longer-and-more-frequent-wildfires). + +## Human proximity and resilience + +### Human proximity and resilience + +## + +### + +#### Human Settlements impact resilience of temperate forests + +![temperate](https://raw.githubusercontent.com/eurodatacube/eodash-assets/main/stories/forest_story/temperate.png) + +Due to their moderate climates, fertile soils, and vegetation productivity, temperate forest regions have historically attracted human settlement. Consequently, these forests are often situated in proximity to large human populations and have faced substantial impacts from human activities. These impacts encompass pollution, deforestation for agricultural expansion, and the introduction of invasive pests and diseases, all of which significantly affect the health and sustainability of these ecosystems [(39)](https://www.sciencedirect.com/topics/agricultural-and-biological-sciences/temperate-forest). + +### + +Recent studies [(41)](https://www.nature.com/articles/s41586-022-04959-9) indicate that this type of forest is on the verge of reaching a tipping point. This looming risk stems from several factors, including climate change, land-use alterations, the introduction of invasive species, and other disturbances. These factors can result in a notable decline in forest resilience, characterized by two primary aspects: the forest's ability to recover after a disturbance and its capacity to withstand the highest level of disturbance [(42)](https://besjournals.onlinelibrary.wiley.com/doi/pdf/10.1111/1365-2745.12337). Reductions in forest resilience are statistically associated with abrupt declines in forest primary productivity, occurring as a response to gradual movement toward a critical resilience threshold. + +### + +The biomass of some temperate forests exceeds that of any tropical forest. They provide critical ecosystem services, and recent evidence indicates the global importance of carbon sinks in the temperate forest zone, especially in eastern North America. While temperate forests generally have lower biodiversity compared to tropical forests, they do feature hotspots with high levels of endemism [(43)](https://www.sciencedirect.com/topics/agricultural-and-biological-sciences/temperate-forest). In Europe, the situation is concerning, with less than half of the continent’s original forested areas remaining. Deforestation is accelerating across the developing word, largely driven by human population growth [(44)](https://www.esa.int/Applications/Observing_the_Earth/Space_for_our_climate/Forests). A study published in Nature reported a worrying trend: canopy mortality has doubled in Europe’s temperate forests over the past three decades [(45)](https://www.nature.com/articles/s41467-018-07539-6). + +### + +Another article also published in the same journal estimated a global decline in forest resilience over the past two decades, affecting not just temperate forests but also tropical and arid forests. This decline is likely linked to increased water stress and the broader impacts of climate change [(41)](https://www.nature.com/articles/s41586-022-04959-9). + +## Restoration and conservation + +### Restoration and conservation + +## + +### + +#### Satellite for restoration and conservation and monitoring illegal activities + +One of the main drives of degradation in sub/tropical countries is unsustainable logging [(46)](https://iopscience.iop.org/article/10.1088/1748-9326/7/4/044009). To counter this, many private companies, public institutions and non-governmental organisations (NGOs) are stepping up their forestry conservation pledges. But given the size and accessibility of many locations on Earth, a crucial component in these efforts is the use of satellite-based forest monitoring systems. For instance, such system have been instrumental in slowing down deforestation in Brazil [(47)](https://earthobservatory.nasa.gov/images/145988/tracking-amazon-deforestation-from-above). + +*Map information: Secondary forest growth - CCI RECCAP2 [View dataset](https://www.eodashboard.org/explore?search=World%3A+Secondary+forest+growth+%28CCI+RECCAP2%29&x=-6860063.62014&y=-850287.36643&z=4.35591&indicator=RECCAP2_5)* + +## + +A series of USGS Landsat and Copernicus Sentinel-2 images showing secondary forest regrowth near Rio Capim, in the Brazilian Amazon, from 1985 to 2022. + +[Read full story]( https://www.esa.int/Applications/Observing_the_Earth/Space_for_our_climate/Recovering_forests_regain_a_quarter_of_carbon_lost_from_deforestation) + +### + +One notable example of these technologies in action is the Global Forest Watch. This online platform leverages satellite data to support monitoring and evaluation of conservation projects, playing a vital role in international efforts to reduce deforestation. + +### + +Synthetic aperture radar (SAR), which can observe land surface through clouds, is also useful technology for monitoring deforestation especially in tropical forests. Japan International Cooperation Agency (JICA) and JAXA are operating “the JICA-JAXA Forest Early Warning System in the Tropics” (JJ-FAST), which provides the latest information on deforestation and forest changes in tropical regions globally, on an average of once every 45 days by utilizing ALOS-2 observation data. JJ-FAST is utilized operationally in some countries in the South America and Africa for monitoring deforestation including illegal logging. diff --git a/app/public/data/storytelling-md/new-storytelling-demo.md b/app/public/data/storytelling-md/new-storytelling-demo.md new file mode 100644 index 0000000000..f8cab1e33d --- /dev/null +++ b/app/public/data/storytelling-md/new-storytelling-demo.md @@ -0,0 +1,18 @@ +## Satellite data applications for environmental impacts on world crop (cereal) supply and demand + +**Advances in satellite monitoring** deliver a treasure-trove of data that scientists study and analyze for the betterment of humankind. These discoveries can help identify trends that better predict occurrences such as climate change and global warming. Since 2020, researchers at the European Space Agency, (ESA), the Japanese Space Agency, (JAXA), and NASA have been working together on a joint dashboard to combine their satellite data and openly share findings in an effort to elevate and protect the quality of life for the global population. + +Providing insight into agricultural production, crop conditions, and food supply are among some of the most impactful information afforded by Earth observing satellites. Information derived from the data retrieved can affect the price we pay at grocery stores, policy implementation from regional to global scales, and food security around the world. Not only can satellite data tell us about current and near-future food and commodity crop conditions, but researchers are also studying the long-term trends in climate change and its effects on our food supply in support of agricultural resilience. + +## + +### +As demonstrated by recent global crises including the COVID-19 pandemic and the ongoing Russian war in Ukraine, the globally interconnected nature of the agrifood system has been thrust into the spotlight. These extreme disruptions to the global food supply underscore the importance of global agriculture monitoring, both of major producing countries and those who are major importers and therefore most vulnerable to food insecurity. + +### +A key example of international coordination in support of better food information is the **G20 GEOGLAM Crop Monitor** developed in response to a request from the G20 Agricultural Market Information System (AMIS). The Crop Monitor provides a public good of open, timely, science-driven information on crop conditions in support of market transparency. The GEOGLAM Crop Monitor Initiative are supported by the global agriculture community and national space agencies - including the NASA Harvest Consortium and US-based institutions, JAXA and JASMIN, ESA and several European institutions, ministries of agriculture across the globe and many more. + +### +It reflects an international, multi-source, consensus assessment of crop growing conditions, status, and agro-climatic factors likely to impact global production, focusing on the major producing and trading countries for the four primary crops monitored by AMIS (wheat, maize, rice, and soybean) as well as on the countries most at risk to food insecurity and their primary staple crops. + +## diff --git a/app/public/data/trilateral/Field_burning_Monthly-EPA.md b/app/public/data/trilateral/Field_burning_Monthly-EPA.md new file mode 100644 index 0000000000..7a26aec811 --- /dev/null +++ b/app/public/data/trilateral/Field_burning_Monthly-EPA.md @@ -0,0 +1,17 @@ +## Gridded 2012 EPA Methane Emissions - Field Burning (monthly) + +## Dataset Description: +Dataset represents a gridded inventory of U.S. anthropogenic methane emissions from various sources. The inventory is designed to be consistent with the 2016 U.S. EPA [Inventory of U.S. Greenhouse Gas Emissions and Sinks](https://www.epa.gov/ghgemissions/us-greenhouse-gas-inventory-report-1990-2014) estimates for the year 2012, which presents national totals for different source types. The gridded inventory was developed using a wide range of databases at the state, county, local, and point source level to allocate the spatial and temporal distribution of emissions for individual source types. + +This data can be used by researchers to better compare the national-level inventory with measurement results that may be at other scales. + +- Resolution: 0.1° x 0.1° +- GeographicalCoverage: North America (-128, 23, -72, 52) +- TemporalAvailability: 2012-01-01 - 2012-12-31 +- TemporalResolution: monthly +- Provider: "[EPA](https://www.epa.gov/ghgemissions/gridded-2012-methane-emissions)" +- Host: "[VEDA](https://www.earthdata.nasa.gov/esds/veda)" + +## Data Access + +- "[VEDA Catalog](https://staging-stac.delta-backend.com/collections/EPA-monthly-emissions_4F_Field_Burning)" diff --git a/app/public/data/trilateral/Forest_fire_Methane_Daily-EPA.md b/app/public/data/trilateral/Forest_fire_Methane_Daily-EPA.md new file mode 100644 index 0000000000..26a4086207 --- /dev/null +++ b/app/public/data/trilateral/Forest_fire_Methane_Daily-EPA.md @@ -0,0 +1,17 @@ +## Gridded 2012 EPA Methane Emissions - Forest Fires (daily) + +## Dataset Description: +Dataset represents a gridded inventory of U.S. anthropogenic methane emissions from various sources. The inventory is designed to be consistent with the 2016 U.S. EPA [Inventory of U.S. Greenhouse Gas Emissions and Sinks](https://www.epa.gov/ghgemissions/us-greenhouse-gas-inventory-report-1990-2014) estimates for the year 2012, which presents national totals for different source types. The gridded inventory was developed using a wide range of databases at the state, county, local, and point source level to allocate the spatial and temporal distribution of emissions for individual source types. + +This data can be used by researchers to better compare the national-level inventory with measurement results that may be at other scales. + +- Resolution: 0.1° x 0.1° +- GeographicalCoverage: North America (-128, 23, -72, 52) +- TemporalAvailability: 2012-01-01 - 2012-12-31 +- TemporalResolution: daily +- Provider: "[EPA](https://www.epa.gov/ghgemissions/gridded-2012-methane-emissions)" +- Host: "[VEDA](https://www.earthdata.nasa.gov/esds/veda)" + +## Data Access + +- "[VEDA Catalog](https://staging-stac.delta-backend.com/collections/EPA-daily-emissions_5_Forest_Fires)" diff --git a/app/public/data/trilateral/Forest_fire_Methane_Yearly-EPA.md b/app/public/data/trilateral/Forest_fire_Methane_Yearly-EPA.md new file mode 100644 index 0000000000..280bf55b3d --- /dev/null +++ b/app/public/data/trilateral/Forest_fire_Methane_Yearly-EPA.md @@ -0,0 +1,17 @@ +## Gridded 2012 EPA Methane Emissions - Forest Fires + +## Dataset Description: +Dataset represents a gridded inventory of U.S. anthropogenic methane emissions from various sources. The inventory is designed to be consistent with the 2016 U.S. EPA [Inventory of U.S. Greenhouse Gas Emissions and Sinks](https://www.epa.gov/ghgemissions/us-greenhouse-gas-inventory-report-1990-2014) estimates for the year 2012, which presents national totals for different source types. The gridded inventory was developed using a wide range of databases at the state, county, local, and point source level to allocate the spatial and temporal distribution of emissions for individual source types. + +This data can be used by researchers to better compare the national-level inventory with measurement results that may be at other scales. + +- Resolution: 0.1° x 0.1° +- GeographicalCoverage: North America (-128, 23, -72, 52) +- TemporalAvailability: 2012-01-01 - 2012-12-31 +- TemporalResolution: yearly composite +- Provider: "[EPA](https://www.epa.gov/ghgemissions/gridded-2012-methane-emissions)" +- Host: "[VEDA](https://www.earthdata.nasa.gov/esds/veda)" + +## Data Access + +- "[VEDA Catalog](https://staging-stac.delta-backend.com/collections/EPA-annual-emissions_5_Forest_Fires)" diff --git a/app/public/data/trilateral/HLS_NDVI.md b/app/public/data/trilateral/HLS_NDVI.md new file mode 100644 index 0000000000..72ee65dd0b --- /dev/null +++ b/app/public/data/trilateral/HLS_NDVI.md @@ -0,0 +1,14 @@ +## Normalized difference vegetation index from HLS + +## Dataset Description: + +Dataset represents a NDVI calculated from Harmonized Landsat and Sentinel-2 Data over Punta Gorda, Florida, USA. + +- GeographicalCoverage: [-82.37,26.31,-81.9,27.03] +- TemporalAvailability: 2022-09-05 - 2022-09-30 +- TemporalResolution: individual dates +- Host: "[VEDA](https://www.earthdata.nasa.gov/esds/veda)" + +## Data Access + +- "[VEDA Catalog](https://staging-stac.delta-backend.com/collections/hls-ndvi)" diff --git a/app/public/data/trilateral/LIS_Global_DA_Evap.md b/app/public/data/trilateral/LIS_Global_DA_Evap.md new file mode 100644 index 0000000000..6f67b612a5 --- /dev/null +++ b/app/public/data/trilateral/LIS_Global_DA_Evap.md @@ -0,0 +1,14 @@ +# Evapotranspiration - LIS 10km Global DA + +## Dataset Description: +Dataset represents Gridded total evapotranspiration (in kg m-2 s-1) from 10km global LIS with assimilation. + +- Resolution: 10km +- GeographicalCoverage: Global +- TemporalAvailability: 2002-08-02 - 2021-12-01 +- TemporalResolution: daily +- Host: "[VEDA](https://www.earthdata.nasa.gov/esds/veda)" + +## Data Access + +- "[VEDA Catalog](https://staging-stac.delta-backend.com/collections/lis-global-da-evap)" diff --git a/app/public/data/trilateral/Science-Hub_Challenge-240202_v2.jpg b/app/public/data/trilateral/Science-Hub_Challenge-240202_v2.jpg new file mode 100644 index 0000000000..859e354349 Binary files /dev/null and b/app/public/data/trilateral/Science-Hub_Challenge-240202_v2.jpg differ diff --git a/app/public/data/trilateral/globalDataLayerImages/Field_burning_Monthly-EPA.png b/app/public/data/trilateral/globalDataLayerImages/Field_burning_Monthly-EPA.png new file mode 100644 index 0000000000..bb059484bc Binary files /dev/null and b/app/public/data/trilateral/globalDataLayerImages/Field_burning_Monthly-EPA.png differ diff --git a/app/public/data/trilateral/globalDataLayerImages/Forest_fire_Methane_Daily-EPA.png b/app/public/data/trilateral/globalDataLayerImages/Forest_fire_Methane_Daily-EPA.png new file mode 100644 index 0000000000..1280879ffd Binary files /dev/null and b/app/public/data/trilateral/globalDataLayerImages/Forest_fire_Methane_Daily-EPA.png differ diff --git a/app/public/data/trilateral/globalDataLayerImages/Forest_fire_Methane_Yearly-EPA.png b/app/public/data/trilateral/globalDataLayerImages/Forest_fire_Methane_Yearly-EPA.png new file mode 100644 index 0000000000..ca569483ba Binary files /dev/null and b/app/public/data/trilateral/globalDataLayerImages/Forest_fire_Methane_Yearly-EPA.png differ diff --git a/app/public/data/trilateral/globalDataLayerImages/World-HLS_NDVI.png b/app/public/data/trilateral/globalDataLayerImages/World-HLS_NDVI.png new file mode 100644 index 0000000000..1f4e6e4d2d Binary files /dev/null and b/app/public/data/trilateral/globalDataLayerImages/World-HLS_NDVI.png differ diff --git a/app/public/data/trilateral/globalDataLayerImages/World-LIS_Global_DA_Evap.png b/app/public/data/trilateral/globalDataLayerImages/World-LIS_Global_DA_Evap.png new file mode 100644 index 0000000000..8b7fae7a45 Binary files /dev/null and b/app/public/data/trilateral/globalDataLayerImages/World-LIS_Global_DA_Evap.png differ diff --git a/app/public/data/trilateral/globalDataLayerImages/World-sen4ama.png b/app/public/data/trilateral/globalDataLayerImages/World-sen4ama.png new file mode 100644 index 0000000000..b7cd1a4b18 Binary files /dev/null and b/app/public/data/trilateral/globalDataLayerImages/World-sen4ama.png differ diff --git a/app/public/data/trilateral/sen4ama.md b/app/public/data/trilateral/sen4ama.md new file mode 100644 index 0000000000..0880c277d5 --- /dev/null +++ b/app/public/data/trilateral/sen4ama.md @@ -0,0 +1,14 @@ +## Forest Loss Area from Sentinel-1 + +This product was developed in the frame of the activity "Sentinel-1 for Science Amazonas" funded by the European Space Agency. The dataset covers the Amazon rainforest, showing the observed forest loss visible in red. +The project developed a simple space-time data cube design (referred to as StatCubes), where statistical information relevant to identify deforestation is extracted at each point in the SAR backscatter time-series. The cubes do not rely on decades of historical data, and the effects of seasonality, including rainfall, are inherently masked out. With this approach, the project demonstrates the use of Sentinel-1 data to create a dynamic deforestation product over the Amazon basin. Sentinel-1 satellite observations from 2015 to December 2021, each representing a 20 x 20 m of forest, were harmonised under theStatCubes design, and a simple thresholding approach to detect forest loss wass demonstrated in the first version of the results. + + +### Relevant Links: +* Project website: https://sen4ama.gisat.cz/ +* Data Access: https://drive.google.com/file/d/14nNZqO44M3-dINF4ugqsQ0mvU0gBuooq/view?usp=drive_link +* Documentation: https://drive.google.com/file/d/1WEEpEbnQBfYomVdiyu4mR31psVM07bMR/view?usp=drive_link +* Algorithm: https://github.com/gisat/s14amazonas +* ESA webstory: https://www.esa.int/Applications/Observing_the_Earth/Copernicus/Sentinel-1/Using_a_data_cube_to_monitor_forest_loss_in_the_Amazon + +![image](https://github.com/eurodatacube/eodash/assets/35488732/fef63b14-740e-4ce6-88c2-f0612e5d4444) diff --git a/app/public/eodash-data/general/Polar-TEP-Logo-White-300x135.png b/app/public/eodash-data/general/Polar-TEP-Logo-White-300x135.png new file mode 100644 index 0000000000..8f5e1f6563 Binary files /dev/null and b/app/public/eodash-data/general/Polar-TEP-Logo-White-300x135.png differ diff --git a/app/public/eodash-data/stories/E13c_ship_detections.md b/app/public/eodash-data/stories/E13c_ship_detections.md new file mode 100644 index 0000000000..48cdce8528 --- /dev/null +++ b/app/public/eodash-data/stories/E13c_ship_detections.md @@ -0,0 +1 @@ +placeholder diff --git a/app/public/legends/legends.json b/app/public/legends/legends.json index f1ad252ea5..999c56f7d5 100644 --- a/app/public/legends/legends.json +++ b/app/public/legends/legends.json @@ -364,6 +364,32 @@ "cm": [[0, [56, 56, 148]], [2,[82, 133, 140]], [4,[111, 213, 132]], [6,[136, 210, 111]], [8,[155, 116, 78]], [10,[175, 28, 47]]], "label": "Turbidity [NTU]", "ticks": [0, 2, 4, 6, 8, 10] + }, + "EPA_Forest_fire_Methane_Yearly": { + "range": [0, 2], + "cm": "rainbow", + "label": "*10^10[molec/cm2/s]" + }, + "EPA_Forest_fire_Methane_Daily": { + "range": [0, 2], + "cm": "rainbow", + "label": "*10^12[molec/cm2/s]" + }, + "EPA_Field_burning_Monthly": { + "range": [0, 4.5], + "cm": "rainbow", + "label": "*10^9[molec/cm2/s]" + }, + "LIS_Global_DA_Evap": { + "range": [0, 100], + "cm": "viridis", + "label": "mg/m2/s" + }, + "HLS_NDVI": { + "range": [-1, 1], + "cm": "cfastie", + "label": "NDVI", + "ticks": [-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1] } }, "gtif": { diff --git a/app/public/legends/trilateral/EPA_Field_burning_Monthly.png b/app/public/legends/trilateral/EPA_Field_burning_Monthly.png new file mode 100644 index 0000000000..a71fe4377d Binary files /dev/null and b/app/public/legends/trilateral/EPA_Field_burning_Monthly.png differ diff --git a/app/public/legends/trilateral/EPA_Forest_fire_Methane_Daily.png b/app/public/legends/trilateral/EPA_Forest_fire_Methane_Daily.png new file mode 100644 index 0000000000..130e386162 Binary files /dev/null and b/app/public/legends/trilateral/EPA_Forest_fire_Methane_Daily.png differ diff --git a/app/public/legends/trilateral/EPA_Forest_fire_Methane_Yearly.png b/app/public/legends/trilateral/EPA_Forest_fire_Methane_Yearly.png new file mode 100644 index 0000000000..7fc81566be Binary files /dev/null and b/app/public/legends/trilateral/EPA_Forest_fire_Methane_Yearly.png differ diff --git a/app/public/legends/trilateral/HLS_NDVI.png b/app/public/legends/trilateral/HLS_NDVI.png new file mode 100644 index 0000000000..819f172c26 Binary files /dev/null and b/app/public/legends/trilateral/HLS_NDVI.png differ diff --git a/app/public/legends/trilateral/LIS_Global_DA_Evap.png b/app/public/legends/trilateral/LIS_Global_DA_Evap.png new file mode 100644 index 0000000000..69418698f6 Binary files /dev/null and b/app/public/legends/trilateral/LIS_Global_DA_Evap.png differ diff --git a/app/public/shConfig.js b/app/public/shConfig.js index 231d920285..4f6d7344cb 100644 --- a/app/public/shConfig.js +++ b/app/public/shConfig.js @@ -1,7 +1,6 @@ const shConfig = { shInstanceId: '$SH_INSTANCE_ID', - shInstanceIdGtif: '$SH_INSTANCE_ID_GTIF', - mbAccessToken: '$MAPBOX_ACCESS_TOKEN', + shInstanceIdPolar: '$SH_INSTANCE_ID_POLAR', geodbInstanceId: '$GEODB_INSTANCE_ID', listmonkApiKey: '$LISTMONK_API_KEY', statApiClientId: '$STAT_API_CLIENT_ID', diff --git a/app/src/App.vue b/app/src/App.vue index cc89b3f3e2..adfb38d0fc 100644 --- a/app/src/App.vue +++ b/app/src/App.vue @@ -148,7 +148,7 @@ export default { // Listen for initial loading of indicators and set possible indicator from url this.$store.subscribe((mutation) => { if (mutation.type === 'features/SET_FEATURES') { - if (mutation.payload && this.startupFeatureSelection !== null) { + if (mutation.payload?.length && this.startupFeatureSelection !== null) { const features = mutation.payload; const selectedFeature = features.find((ft) => { const indObj = ft.properties.indicatorObject; @@ -168,7 +168,7 @@ export default { if (mutation.type === 'indicators/SET_INDICATORS') { // Read route query and set selected indicator, once indicator loaded set selected feature - if (mutation.payload) { + if (mutation.payload?.length) { const { poi, indicator } = this.$route.query; // For legacy support we need to consider indicator not being set, only poi, // then we need to extract the information from the poi diff --git a/app/src/appConfig.js b/app/src/appConfig.js index 6c921e0999..8d1156429c 100644 --- a/app/src/appConfig.js +++ b/app/src/appConfig.js @@ -1,7 +1,6 @@ module.exports = [ { id: 'esa', - catalogUrl: 'https://raw.githubusercontent.com/eurodatacube/eodash-catalog/collection_definition/build/RACE/catalog.json', mailingList: { development: 2, staging: 2, @@ -54,6 +53,9 @@ module.exports = [ '#22aa99', '#a37', '#47a', '#a67', '#283', '#302f2f', '#6ce', '#994499', '#bbb', '#6633cc', '#e67300', ], + uiText: { + indicatorPanelheader: 'Choose an indicator to explore', + }, demoMode: { egu2023: [ // custom story is not supported yet for new demo mode @@ -189,6 +191,9 @@ module.exports = [ collectionLink.themes[j] = 'oceans'; } }, + uiText: { + indicatorPanelheader: 'Choose an indicator to explore', + }, demoMode: { cop28: [ { @@ -314,11 +319,11 @@ module.exports = [ src: './data/trilateral/new-precipitation-jaxa.png', }, { - poi: 'ThwaitesLandsat-ADD', + poi: 'ADD_L2_Thwaites-ADD_Landsat_L2_Antarctica', src: './data/trilateral/landsat-antarctica.png', }, { - poi: 'S1GRD-ADD', + poi: 'World-ADD_West_Antarctica_S1', src: './data/trilateral/s-1-antarctica.png', }, ], @@ -386,6 +391,131 @@ module.exports = [ enableStories: false, enableESALayout: true, enableScrollyTelling: true, + }, + { + id: 'polar', + mailingList: { + development: 3, + staging: 3, + production: 5, + }, + demoMode: { + polartep: [ + { + poi: 'World-TOPAZ5_P1D_SIAGE', + }, + { + poi: 'World-TOPAZ5_P1D_SICONC', + }, + { + poi: 'World-TOPAZ5_P1D_SISNTHICK', + }, + { + poi: 'World-TOPAZ5_P1D_SITHICK', + }, + { + poi: 'World-TOPAZ5_P1D_VXO', + }, + { + poi: 'World-TOPAZ5_P1D_VXSI', + }, + { + poi: 'World-TOPAZ5_P1D_VYO', + }, + { + poi: 'World-TOPAZ5_P1D_VYSI', + }, + { + poi: 'World-TOPAZ4_P1D_SICONC', + }, + { + poi: 'World-TOPAZ4_P1D_SISNTHICK', + }, + { + poi: 'World-TOPAZ4_P1D_SITHICK', + }, + { + poi: 'World-TOPAZ4_P1D_VXO', + }, + { + poi: 'World-TOPAZ4_P1D_VXSI', + }, + { + poi: 'World-TOPAZ4_P1D_VYO', + }, + { + poi: 'World-TOPAZ4_P1D_VYSI', + }, + { + poi: 'World-SITI', + }, + { + poi: 'World-N12_1_sea_ice_concentration_arctic', + }, + { + poi: 'World-CDS3', + }, + { + poi: 'World-CDS4', + }, + { + poi: 'World-CDS1_temperature', + }, + { + poi: 'World-Polartep_SeaIceDetection_tif_demo', + }, + { + poi: 'World-Polartep_Snowgrain_diameter_demo', + }, + { + poi: 'World-Polartep_Snow_specific_surface_area_demo', + }, + { + poi: 'World-Polartep_S1_demo', + }, + { + poi: 'World-Polartep_SeaIce_demo', + }, + ], + }, + match: ['polardashboard.org', 'polar.eox.world', 'polar.localhost', 'polar.eox.home', 'eodash-polar.eox.at', 'eodash-polar-testing.eox.at'], + branding: { + appName: 'Polar Dashboard', + primaryColor: '#003247', + secondaryColor: '#00ae9d', + headerLogo: './eodash-data/general/RACE_Logo.png', + faviconPath: './public/img/ESA/favicon.ico', + }, + pageMeta: { + rootPath: 'https://polardashboard.org', + googleSiteVerification: '', + shortDescription: 'Polar Dashboard', // TODO: polar + twitterCardImagePath: '/img/ESA/twitter_card.jpg', // TODO: polar + imagePath: '/img/ESA', // TODO: polar + }, + showNewsletterButton: false, + customCSS: 'esa', + newsBanner: {}, + aboutText: '/eodash-data/general/about', + welcomeText: '/eodash-data/general/welcome', + tutorialText: '/eodash-data/general/tutorials', + showNewsCarousel: false, + newsCarouselitems: [ + ], + privacyText: '/eodash-data/general/privacy', + termsText: '/eodash-data/general/terms', + challengesText: '/eodash-data/general/challenges', + feedbackTwitterHandles: ['esa_eo', 'EO_OPEN_SCIENCE', 'eurodatacube'], + refColors: [ + '#22aa99', '#a37', '#47a', '#a67', '#283', '#302f2f', + '#6ce', '#994499', '#bbb', '#6633cc', '#e67300', + ], + enableStories: false, + enableESALayout: false, + enableScrollyTelling: false, enableIndicatorSidebar: true, + uiText: { + + }, }, ]; diff --git a/app/src/components/DataPanel.vue b/app/src/components/DataPanel.vue index be843ad29c..7de5441aa3 100644 --- a/app/src/components/DataPanel.vue +++ b/app/src/components/DataPanel.vue @@ -200,7 +200,12 @@ :vectorStyles="indicatorObject.vectorStyles" > - + + @@ -243,7 +248,7 @@ Select a point of interest on the map to see more information

- @@ -282,6 +287,7 @@ import DataMockupView from '@/components/DataMockupView.vue'; import AddToDashboardButton from '@/components/AddToDashboardButton.vue'; import WmsStyleControls from '@/components/map/WmsStyleControls.vue'; import VectorTileStyleControl from '@/components/map/VectorTileStyleControl.vue'; +import VectorStyleControl from '@/components/map/VectorStyleControl.vue'; import SelectionInfoBar from '@/components/SelectionInfoBar.vue'; import GTIFProcessingButtons from '@/components/GTIFProcessingButtons.vue'; @@ -297,6 +303,7 @@ export default { DataMockupView, SelectionInfoBar, GTIFProcessingButtons, + VectorStyleControl, }, data: () => ({ mounted: false, @@ -316,6 +323,9 @@ export default { ...mapState('indicators', [ 'customAreaIndicator', ]), + showingChart() { + return this.customAreaIndicator || this.customAreaIndicator || this.dataObject?.time; + }, indicatorObject() { return this.$store.state.indicators.selectedIndicator; }, @@ -410,6 +420,18 @@ export default { const currDate = DateTime.utc().toFormat('yyyy-LL-dd'); return `user_AOI_${currDate}_${this.indicatorObject.indicator}.csv`; }, + useVectorStyleControl() { + return Array.isArray(this.indicatorObject?.queryParameters); + }, + showVisualAnalysisAddons() { + let show = false; + if (['polar', 'gtif'].includes(this.appConfig.id)) { + const showVar = this.indicatorHasMapData; + const hideVar = this.mergedConfigsData[0].disableVisualAnalysisAddons; + show = showVar && !hideVar; + } + return show; + }, showMap() { // show map means that only information on the map is shown and no indicator data is expected // currently this seems to be only the case for indicatorobjects with no features @@ -489,6 +511,16 @@ export default { }, }, watch: { + showingChart() { + if (this.showingChart) { + // we only want to open if it is closed + if (!this.$parent.$parent.$el.classList.contains('v-expansion-panel--active')) { + this.$parent.$parent.$parent.$refs.header.$emit('click', { + currentTarget: this.$parent.$parent.$parent.$refs.header.$el, + }); + } + } + }, selectedArea(area) { this.showRegenerateButton = this.customAreaIndicator && !!area; }, diff --git a/app/src/components/GlobalHeader.vue b/app/src/components/GlobalHeader.vue index e8c19a6d0e..8511b83a2f 100644 --- a/app/src/components/GlobalHeader.vue +++ b/app/src/components/GlobalHeader.vue @@ -255,6 +255,7 @@ @@ -436,6 +441,10 @@ export default { ...mapGetters({ currentTheme: 'themes/getCurrentTheme', }), + polartepTemp() { + // TODO remove when to be merged + return this.appConfig.id === 'polar'; + }, isThemePageActive() { switch (this.$route.name) { diff --git a/app/src/components/IndicatorData.vue b/app/src/components/IndicatorData.vue index eb1300dd14..b785ba0170 100644 --- a/app/src/components/IndicatorData.vue +++ b/app/src/components/IndicatorData.vue @@ -125,12 +125,12 @@ export default { dataLayerTimeFromMap: null, compareLayerTimeFromMap: null, lineChartIndicators: [ - 'E12', 'E12b', 'E8', 'N1b', 'N1', 'N1_NO2_city_trilateral', 'NASACustomLineChart', 'XCubeCustomLineChart', 'SHCustomLineChart', 'N3', 'N3b_tsm', 'N3b_chl', 'SST', - 'GG', 'E10a', 'E10a9', 'CV', 'OW', 'E10c', 'E10a10', 'OX', 'OX-EU', + 'E12b', 'E8', 'N1b', 'N1', 'N1_NO2_city_trilateral', 'NASACustomLineChart', 'XCubeCustomLineChart', 'SHCustomLineChart', 'N3', 'N3b_tsm', 'N3b_chl', 'SST', + 'GG', 'E10a', 'E10a9', 'CV', 'OW', 'E10c', 'E10a10', 'OX', 'OX_EU', 'N1a', 'N1c', 'N1d', 'LWE', 'LWL', 'AQA', 'AQB', 'AQC', 'AQ3', 'REP4_1', 'REP4_4', 'REP4_6', 'MOBI1', 'MOBI1_1', 'PRCTS', 'SMCTS', 'VITS', 'E12c', 'E12d', 'ADO', 'ADO_1', 'ADO_2', 'ADO_3', - 'Lakes_SWT', + 'Lakes_SWT', 'CROPOM', // Year overlap comparison 'E13e', 'E13f', 'E13g', 'E13h', 'E13i', 'E13l', 'E13m', 'E10a2', 'E10a6', 'N3a2', 'N3a2_chl_esa', 'N3a2_chl_jaxa', 'N3a2_TSM_esa', 'N3a2_TSM_jaxa', 'REP4_2', 'REP1', 'REP1_1', 'REP1_2', @@ -876,6 +876,34 @@ export default { borderWidth: 2, }); } + if (['CROPOM'].includes(indicatorCode)) { + const data = []; + const refData = []; + featureData.time.forEach((t, i) => { + data.push({ t, y: featureData.measurement[i] }); + refData.push({ t, y: featureData.referenceValue[i] }); + }); + datasets.push({ + label: `Yield ${featureData.yAxis[0]}`, + yAxisID: 'y-axis-0', + data, + fill: false, + borderColor: refColors[0], + backgroundColor: refColors[0], + borderWidth: 2, + pointRadius: 2, + }); + datasets.push({ + label: `Biomass ${featureData.yAxis[1]}`, + yAxisID: 'y-axis-1', + data: refData, + fill: false, + borderColor: refColors[1], + backgroundColor: refColors[1], + borderWidth: 2, + pointRadius: 2, + }); + } if (['N3b_tsm', 'N3b_chl'].includes(indicatorCode)) { const sensors = Array.from(new Set(featureData.eoSensor)).sort(); @@ -1010,7 +1038,7 @@ export default { } datasets.push(ds); }); - } else if (['OX', 'OX-EU'].includes(indicatorCode)) { + } else if (['OX', 'OX_EU'].includes(indicatorCode)) { const data = []; const average = []; let counter = 0; @@ -1376,10 +1404,10 @@ export default { if (this.enableMapTimeInteraction) { // set listener to highlight points for selected time on map via annotations if (event.data.command === 'chart:setTime') { - this.dataLayerTimeFromMap = event.data.time; + this.dataLayerTimeFromMap = event?.data?.time; } if (event.data.command === 'chart:setCompareTime') { - this.compareLayerTimeFromMap = event.data.time; + this.compareLayerTimeFromMap = event?.data?.time; } this.$nextTick(() => { const chart = this.getChartObject(); @@ -1497,6 +1525,8 @@ export default { }.bind(this), }, }; + // just one default yAxis + customSettings.yAxis = [this.indicatorObject.yAxis]; if (!Number.isNaN(reference) && ['E13b', 'E200'].includes(indicatorCode)) { annotations.push({ @@ -1590,7 +1620,7 @@ export default { customSettings.yAxisRange = [0, 8]; } - if (['E13d', 'E13n', 'OX', 'OX-EU'].includes(indicatorCode)) { + if (['E13d', 'E13n', 'OX', 'OX_EU'].includes(indicatorCode)) { customSettings.timeConfig = { unit: 'month', displayFormats: { month: 'MMM yy' }, @@ -1753,7 +1783,7 @@ export default { } // Special chart display for oilx data - if (['OX', 'OX-EU'].includes(indicatorCode)) { + if (['OX', 'OX_EU'].includes(indicatorCode)) { customSettings.hover = { mode: 'nearest', }; @@ -1911,6 +1941,10 @@ export default { }; } + if (['CROPOM'].includes(indicatorCode)) { + customSettings.yAxis = ['t/ha', 'g/m2']; + } + if (['SOL1', 'SOL1_1', 'SOL1_2', 'SOL1_3', 'SOL1_4', 'SOL1_5', 'SOL1_6', 'SOL1_7', 'SOL2', 'SOL2_1', 'SOL2_2', 'SOL2_3'].includes(indicatorCode)) { customSettings.tooltips = { callbacks: { @@ -1989,7 +2023,6 @@ export default { animation: { duration: 0, }, - yAxis: this.indicatorObject.yAxis, xAxis: this.indicatorObject.xAxis, country: this.indicatorObject.country, }; diff --git a/app/src/components/IndicatorFiltersDemo.vue b/app/src/components/IndicatorFiltersDemo.vue index 0a61e41648..662a6e3e5c 100644 --- a/app/src/components/IndicatorFiltersDemo.vue +++ b/app/src/components/IndicatorFiltersDemo.vue @@ -28,9 +28,7 @@ - -

- Filter -

- -

+ + +

{{this.appConfig.id === "gtif" ? (toolsToggle ? "Tools" : "Narratives") : "Indicators"}}

@@ -138,12 +135,15 @@ export default { { key: 'tags', title: 'Tag' }, { key: 'satellite', title: 'Satellite' }, { key: 'sensor', title: 'Satellite sensor' }, + /* { key: 'insituSources', title: 'In situ sources' }, { key: 'otherSources', title: 'Other sources' }, + */ { key: 'countries', title: 'Country' }, - { key: 'cities', title: 'City' }, + { key: 'cities', title: 'City/Location' }, ], aggregateResults: 'group', + autoSpreadSingle: true, enableHighlighting: true, onSelect: (item) => { this.toggleSelectedItem(item); @@ -159,19 +159,49 @@ export default { expanded: true, featured: true, }, + /* { key: 'tags', title: 'Tag' }, { key: 'satellite', title: 'Satellite' }, { key: 'sensor', title: 'Sensor' }, { key: 'countries', title: 'Country' }, { key: 'cities', title: 'City' }, { key: 'themes', title: 'Theme', ...themesPresetState }, + */ ], aggregateResults: 'themes', + autoSpreadSingle: false, enableHighlighting: true, onSelect: (item) => { this.toggleSelectedItem(item); }, }, + polar: { + titleProperty: 'name', + filterProperties: [ + // { + // keys: ['name', 'description'], + // title: 'Search', + // type: 'text', + // expanded: true, + // featured: true, + // }, + /* + { key: 'tags', title: 'Tag' }, + { key: 'satellite', title: 'Satellite' }, + { key: 'sensor', title: 'Sensor' }, + { key: 'countries', title: 'Country' }, + { key: 'cities', title: 'City' }, + { key: 'themes', title: 'Theme', ...themesPresetState }, + */ + ], + aggregateResults: 'group', + expandResults: false, + autoSpreadSingle: true, + enableHighlighting: false, + onSelect: (item) => { + this.toggleSelectedItem(item); + }, + }, gtif: { titleProperty: 'name', filterProperties: [ @@ -277,25 +307,57 @@ export default { // `; // }); const flags = ''; - this.itemfilter.styleOverride = ` + let newStyle = ` ${this.itemFilterStyleOverride} ${flags} ${configs[this.appConfig.id].styleOverride} #container-results{ - overflow:hidden; - } - form#itemfilter{ - overflow: auto; - } - * { - font-family: 'NotesESA' !important; - } + overflow:hidden; + } + form#itemfilter{ + overflow: auto; + } + /* to fix strange double scroll bar in filters*/ + eox-itemfilter-multiselect { + overflow-y: hidden!important; + } + /* to fix cutting of text in result names*/ + label span { + height: 15px; + } + /* to have indicator results closer together */ + #results li { + padding-top: 2px!important; + padding-bottom: 2px!important; + } + /* making reset button small and changing position */ + #filter-reset { + height: 16px; + top: 39px!important; + right: 1px!important; + padding: 5px; + margin: 0px; + } + /* ading more indentation to summarized items */ + details div ul li { + margin-left: 9px; + } + #filters>li:first-child { + margin-bottom: 10px!important; + } `; + if (this.appConfig.id === 'gtif') { + newStyle = `${newStyle} * { + font-family: 'NotesESA' !important; + }`; + } + this.itemfilter.styleOverride = newStyle; }); }, toggleSelectedItem(item) { if (this.selectedIndicator && item.indicator === this.selectedIndicator.indicator) { this.setSelectedIndicator(null); + // this does not reset the UI (the radiobutton is still checked...) this.itemfilter.selectedResult = null; this.itemfilter.requestUpdate(); } else { @@ -304,6 +366,14 @@ export default { // pick an indicator based on match of unique collection link instead const match = this.indicators.find((indicator) => item.link === indicator.link); this.setSelectedIndicator(match); + + const uiPanels = this.$parent.$parent.$parent.$parent.$children; + // programatically open Layer Panel it exists and not open yet + if (!uiPanels[1].$refs.header.$el.classList.contains('v-expansion-panel-header--active')) { + uiPanels[1].$refs.header.$emit('click', { + currentTarget: uiPanels[1].$refs.header.$el, + }); + } } }, }, diff --git a/app/src/components/LineChart.vue b/app/src/components/LineChart.vue index f1653dae81..3624a64c91 100644 --- a/app/src/components/LineChart.vue +++ b/app/src/components/LineChart.vue @@ -23,6 +23,14 @@ export default { } }, data() { + const yAxes = this.options.yAxis.map((value) => ( + { + scaleLabel: { + display: true, + labelString: value, + padding: 2, + }, + })); return { defaultOptions: { responsive: true, @@ -90,13 +98,7 @@ export default { distribution: this.options.distribution ? this.options.distribution : 'linear', ticks: {}, }], - yAxes: [{ - scaleLabel: { - display: true, - labelString: this.options.yAxis, - padding: 2, - }, - }], + yAxes, }, pan: { enabled: true, diff --git a/app/src/components/StacInfo.vue b/app/src/components/StacInfo.vue index dbc7ee1218..c7ed2fcac9 100644 --- a/app/src/components/StacInfo.vue +++ b/app/src/components/StacInfo.vue @@ -6,7 +6,11 @@ @loaded="onStacInfoLoad" :for="getLink" :allowHtml.prop="true" - :styleOverride.prop="`#properties li > .value { + :styleOverride.prop="` + .single-property { + word-break: break-word + } + #properties li > .value { font-weight: normal !important; } #properties li { @@ -20,7 +24,58 @@ properties='["description"]' featured="[]" footer="[]" - style="margin-left: -30px; margin-right: -30px;word-wrap: break-word;" + :style="` + margin-left: -30px; + margin-right: -30px; + word-wrap: break-word; + --color-primary: ${$vuetify.theme.currentTheme.main}`" + > + + + @@ -31,25 +86,49 @@ :for="getLink" @loaded="onStacInfoLoad" header='["title"]' - subheader='["keywords"]' - properties='["themes", "satellite", "sensor", "agency", "links"]' - featured='["description", "providers", "extent", "sci:publications", "assets"]' + tags='["themes"]' + properties='["satellite","sensor","agency","extent","license"]' + featured='["description","providers","assets","links"]' footer='["sci:citation"]' :allowHtml.prop="true" - style="margin-left: -30px; margin-right: -30px;" - :styleOverride.prop="'#properties li > .value { font-weight: normal !important;}'" + :style="` + margin-left: -20px; + margin-right: -20px; + word-wrap: break-word; + --color-primary: ${$vuetify.theme.currentTheme.main}!important; + --color-primary-lighter: white;`" + :styleOverride.prop="` + .single-property {columns: 1!important;} + h1 {margin:0px!important;font-size:16px!important;} + header h1:after { + content:' '; + display:block; + border:1px solid #d0d0d0; + } + h2 {font-size:15px} + h3 {font-size:14px} + summary {cursor: pointer;} + #properties li > .value { font-weight: normal !important;} + main {padding-bottom: 10px;} + .footer-container {line-height:1;} + .footer-container button {margin-top: -10px;} + .footer-container small {font-size:10px;line-height:1;} + `" >
    - {{ $store.state.config.baseConfig.indicatorClassesIcons[theme] }} + + {{ $store.state.config.baseConfig.indicatorClassesIcons[theme] }} + {{ theme }} @@ -59,9 +138,7 @@ v-if="stacInfoLoaded"> Code examples:
  • {{ link.rel }} @@ -73,7 +150,7 @@

    Dataset metadata @@ -112,6 +189,8 @@ export default { data: () => ({ additionalGtifDataInfoContent: [], stacInfoLoaded: null, + themesInStacInfo: [], + linksInStacInfo: [], }), computed: { ...mapState('config', [ @@ -172,6 +251,11 @@ export default { } else { this.$parent.$parent.$el.style.display = ''; } + this.themesInStacInfo = this.$refs.stacInfo?.stacProperties?.themes?.value || []; + const links = this.$refs.stacInfo?.stacProperties?.links?.value || []; + this.linksInStacInfo = links.filter( + (l) => l.rel === 'example' || l.rel === 'license', + ); this.stacInfoLoaded = true; }); }, @@ -203,12 +287,15 @@ export default { diff --git a/app/src/components/ThemesLandingPage/Hero.vue b/app/src/components/ThemesLandingPage/Hero.vue index c5d79dafa0..223647334f 100644 --- a/app/src/components/ThemesLandingPage/Hero.vue +++ b/app/src/components/ThemesLandingPage/Hero.vue @@ -36,7 +36,7 @@ export default { }; - diff --git a/app/src/components/UiPanelsLayout.vue b/app/src/components/UiPanelsLayout.vue index 7c80ed1a47..319329e723 100644 --- a/app/src/components/UiPanelsLayout.vue +++ b/app/src/components/UiPanelsLayout.vue @@ -5,12 +5,12 @@ - + - + @@ -27,6 +27,10 @@ + + diff --git a/app/src/components/map/DatePickerControl.vue b/app/src/components/map/DatePickerControl.vue new file mode 100644 index 0000000000..a5ae307269 --- /dev/null +++ b/app/src/components/map/DatePickerControl.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/app/src/components/map/LayerSwipe.vue b/app/src/components/map/LayerSwipe.vue index 7f9b814d30..7d52fe3ee1 100644 --- a/app/src/components/map/LayerSwipe.vue +++ b/app/src/components/map/LayerSwipe.vue @@ -52,6 +52,7 @@ export default { swipeLayerObject: null, swipe: 0, swipePixelX: null, + _time: null, }), computed: { specialLayerOptions() { @@ -106,16 +107,7 @@ export default { const dataGroup = map.getLayers().getArray().find((l) => l.get('id') === 'dataGroup'); this.mergedConfigsData.forEach((config) => { const swipeLayer = dataGroup.getLayers().getArray().find((l) => l.get('name') === `${config.name}_compare`); - if (config.protocol === 'geoserverTileLayer' && swipeLayer) { - loadIndicatorExternalData( - time, config, - ).then((data) => { - this.$store.state.indicators.selectedIndicator.compareMapData = data; - swipeLayer.changed(); - }); - } else if (swipeLayer) { - swipeLayer.changed(); - } + swipeLayer.changed(); }); }, time(time) { @@ -160,7 +152,6 @@ export default { // clip the originalLayer from right, the comparing layer from left if (this.$refs.container) { const ctx = evt.context; - const sidePadding = document.querySelector('.data-panel') !== null // eslint-disable-line ? !document.querySelector('.data-panel').className.includes('v-navigation-drawer--open') ? 0 @@ -176,10 +167,17 @@ export default { const isRightLayer = !evt.target.get('name').includes('_compare'); if (isRightLayer) { if (ctx instanceof WebGLRenderingContext) { + if (this._time !== evt.frameState.time) { + ctx.clearColor(0, 0, 0, 0); + ctx.clear(ctx.COLOR_BUFFER_BIT); + this._time = evt.frameState.time; + } ctx.enable(ctx.SCISSOR_TEST); ctx.scissor( this.swipePixelX, 0, actualWidth - this.swipePixelX, actualHeight, ); + ctx.clearColor(0, 0, 0, 0); + ctx.clear(ctx.COLOR_BUFFER_BIT); } else { ctx.save(); ctx.beginPath(); @@ -187,8 +185,16 @@ export default { ctx.clip(); } } else if (ctx instanceof WebGLRenderingContext) { + if (this._time !== evt.frameState.time) { + ctx.clearColor(0, 0, 0, 0); + ctx.clear(ctx.COLOR_BUFFER_BIT); + this._time = evt.frameState.time; + } + ctx.clearColor(0, 0, 0, 0); ctx.enable(ctx.SCISSOR_TEST); ctx.scissor(0, 0, this.swipePixelX, actualHeight); + ctx.clearColor(0, 0, 0, 0); + ctx.clear(ctx.COLOR_BUFFER_BIT); } else { ctx.save(); ctx.beginPath(); diff --git a/app/src/components/map/Map.vue b/app/src/components/map/Map.vue index f6a07bf568..13c92d451f 100644 --- a/app/src/components/map/Map.vue +++ b/app/src/components/map/Map.vue @@ -81,16 +81,22 @@ :overlayRows="overlayRows" :overlayCoordinate="overlayCoordinate" /> - +
    +
    +
    mdi-map-clock-outline + + +
    -
    - -
    -
    @@ -181,6 +201,9 @@ import getCluster from '@/components/map/Cluster'; import SpecialLayer from '@/components/map/SpecialLayer.vue'; import LayerSwipe from '@/components/map/LayerSwipe.vue'; import CustomAreaButtons from '@/components/map/CustomAreaButtons.vue'; +import DatePickerControl from '@/components/map/DatePickerControl.vue'; +import CustomFeaturesFetchButton from '@/components/map/CustomFeaturesFetchButton.vue'; +import SliderControl from '@/components/map/SliderControl.vue'; import { getMapInstance } from '@/components/map/map'; import { createLayerFromConfig } from '@/components/map/layers'; import MapOverlay from '@/components/map/MapOverlay.vue'; @@ -204,6 +227,7 @@ import { DateTime } from 'luxon'; import SubaoiLayer from '@/components/map/SubaoiLayer.vue'; import DarkOverlayLayer from '@/components/map/DarkOverlayLayer.vue'; import Link from 'ol/interaction/Link'; +import { Vector as VectorLayer } from 'ol/layer'; import { loadIndicatorExternalData, loadIndicatorData, @@ -224,11 +248,14 @@ export default { IndicatorTimeSelection, LayerSwipe, CustomAreaButtons, + DatePickerControl, + SliderControl, SubaoiLayer, MapOverlay, IframeButton, AddToDashboardButton, DarkOverlayLayer, + CustomFeaturesFetchButton, }, props: { mapId: { @@ -318,7 +345,7 @@ export default { }, showSpecialLayer() { return this.mergedConfigsData.length - && this.indicatorHasMapData(this.indicator); + && this.indicatorHasMapData(); }, dataLayerConfigLayerControls() { // SpecialLayer entries in LayerControl @@ -349,15 +376,19 @@ export default { }; }, displayTimeSelection() { + if (this.indicator?.indicator === 'E13d' && this.featureData) { + // custom overload for extra hassle with replaceMapTimes from config + return true; + } return ( !this.indicator?.disableTimeSelection && this.featureData?.time && this.featureData.time?.length > 1 - && this.indicatorHasMapData(this.indicator) + && this.indicatorHasMapData() ) || ( this.indicator?.time?.length > 1 && !this.indicator?.disableTimeSelection && this.dataLayerTime - && this.indicatorHasMapData(this.indicator) + && this.indicatorHasMapData() ); }, indicator() { @@ -631,13 +662,13 @@ export default { return window.self !== window.top; }, calculatePosition() { - let position = 'bottom: 155px'; + let position = 'bottom: 40px'; if (this.$vuetify.breakpoint.xsOnly) { position = `bottom: ${this.$vuetify.application.footer + 70}px`; } if (this.mapId === 'centerMap' && this.$vuetify.breakpoint.smAndUp && this.$route.name !== 'demo') { - position = 'bottom: 155px'; + position = 'bottom: 40px'; } if (this.mapId === 'centerMap' && this.$vuetify.breakpoint.smAndUp && this.appConfig.enableESALayout) { @@ -651,18 +682,23 @@ export default { } return position; }, - mousePosConStyle() { - let style = 'position:absolute;'; - if (this.$vuetify.breakpoint.smAndUp) { - if (this.appConfig.id === 'gtif') { - style = 'position:relative;'; - } else { - style += 'bottom:0px;'; - } - } else if (this.appConfig.id === 'gtif') { - style += `bottom:${this.$vuetify.application.footer + 50}px;`; + calculatePadding() { + // It seems that the footer on gtif is somehow not evaluated need to handle it differently + let style; + if (this.appConfig.id === 'gtif') { + style = `padding-bottom: ${this.$vuetify.breakpoint.xsOnly + ? this.$vuetify.application.footer + 60 : this.$vuetify.application.footer + 11}px !important;`; } else { - style += 'bottom:60px;'; + style = `padding-bottom: ${this.$vuetify.breakpoint.xsOnly + ? this.$vuetify.application.footer + 30 : 3}px !important;`; + } + return style; + }, + mousePosConStyle() { + let style = 'position:absolute;bottom:-5px;'; + // Trying to detect touch device, if it is, remove coordinates hover visualization + if (matchMedia('(hover: none), (pointer: coarse)').matches) { + style += 'display:none;'; } return style; }, @@ -736,11 +772,15 @@ export default { // redraw all time-dependant layers, if time is passed via WMS params const area = this.drawnArea; this.mergedConfigsDataIndexAware.filter( - (config) => config.timeFromProperty || config.usedTimes?.time?.length, + (config) => config.mapTimeDatepicker + || config.timeFromProperty + || config.usedTimes?.time?.length, ) .forEach((config) => { const layer = layers.find((l) => l.get('name') === config.name); - if (layer) { + if (layer instanceof VectorLayer && config.mapTimeDatepicker) { + // do not fetch new features on time changeempty + } else if (layer) { updateTimeLayer(layer, config, timeObj.value, area); } }); @@ -897,12 +937,25 @@ export default { } } }); + + this.$store.subscribe((mutation) => { + if (mutation.type === 'features/SET_SELECTED_FEATURES') { + if (this.indicator && ['CROPOM'].includes(this.indicator.indicator) && this.mapId === 'centerMap') { + if (mutation.payload?.length > 0) { + window.dispatchEvent(new Event('fetch-custom-area-chart')); + } else { + // reset custom area chart + this.$store.commit('indicators/CUSTOM_AREA_INDICATOR_LOAD_FINISHED', null); + } + } + } + }); map.setTarget(/** @type {HTMLElement} */ (this.$refs.mapContainer)); // adding a necessary reference for eox-layercontrol plugin this.$refs.mapContainer.map = map; const attributions = new Attribution(); - attributions.setTarget(this.$refs.controlsContainer); + attributions.setTarget(this.$refs.bottomControlsContainer); attributions.setMap(map); map.addControl(new MousePosition({ @@ -1038,6 +1091,12 @@ export default { this.$emit('update:center', e); this.currentCenter = e; }, + setDateFromDatePicker(date) { + this.dataLayerTime = { + name: date, + value: DateTime.fromISO(date), + }; + }, updateTime(time, compare) { // Define a function to update the data layer // direct match on name @@ -1045,18 +1104,20 @@ export default { if (timeEntry === undefined && time.isLuxonDateTime) { // search for closest time to datetime if provided as such const searchTimes = this.availableTimeEntries.map((e) => { - if (e.value?.isLuxonDateTime) { - return e.value; + const timeValue = Array.isArray(e.value) ? e.value[0] : e.value; + if (timeValue?.isLuxonDateTime) { + return timeValue; } - return DateTime.fromISO(e.value); + return DateTime.fromISO(timeValue); }); const closestTime = findClosest(searchTimes, time); // get back the original unmapped object with value and name timeEntry = this.availableTimeEntries.find((e) => { - if (e.value?.isLuxonDateTime) { - return e.value.ts === closestTime.ts; + const timeValue = Array.isArray(e.value) ? e.value[0] : e.value; + if (timeValue?.isLuxonDateTime) { + return timeValue.ts === closestTime.ts; } - return DateTime.fromISO(e.value).ts === closestTime.ts; + return DateTime.fromISO(timeValue).ts === closestTime.ts; }); } else { // Use most recent time since there is none defined in the map timeline @@ -1210,8 +1271,8 @@ export default { return obj; }); }, - indicatorHasMapData(indicatorObject) { - return indicatorHasMapData(indicatorObject, this.featureData); + indicatorHasMapData() { + return indicatorHasMapData(this.indicator, this.featureData); }, overlayCallback(headers, rows, coordinate) { this.overlayHeaders = headers; @@ -1239,18 +1300,26 @@ export default { } } }, - updateSelectedAreaFeature() { + updateSelectedAreaFeature(manualTrigger = false) { const { map } = getMapInstance(this.mapId); const dataGroup = map.getLayers().getArray().find((l) => l.get('id') === 'dataGroup'); const layers = dataGroup.getLayers().getArray(); const area = this.drawnArea; const time = this.dataLayerTime?.value; - this.mergedConfigsDataIndexAware.filter((config) => config.usedTimes?.time?.length) + this.mergedConfigsDataIndexAware.filter( + (config) => config.mapTimeDatepicker || config.usedTimes?.time?.length, + ) .forEach((config) => { const layer = layers.find((l) => l.get('name') === config.name); const handler = 'updateArea'; if (layer && layer.getSource().get(handler)) { - updateTimeLayer(layer, config, time, area, handler); + if (manualTrigger) { + updateTimeLayer(layer, config, time, area, handler); + } else if (layer instanceof VectorLayer && config.mapTimeDatepicker) { + // do nothing + } else { + updateTimeLayer(layer, config, time, area, handler); + } } }); }, @@ -1265,10 +1334,12 @@ export default { return; } window.dispatchEvent(new CustomEvent('set-custom-area-indicator-loading', { detail: true })); - + const options = { + currentTimeIndex: this.currentTimeIndex, + }; try { const custom = await fetchCustomAreaObjects( - {}, + options, this.drawnArea.area, this.mergedConfigsData[0], this.indicator, @@ -1370,6 +1441,18 @@ export default { opacity: 0 !important; } } + .bottomControlsContainer { + position: absolute; + right: 4px; + bottom: 0px; + min-width: 50px; + pointer-events: none; + z-index: 4; + + &.hidden { + opacity: 0 !important; + } + } .pointerEvents { pointer-events: initial; diff --git a/app/src/components/map/SliderControl.vue b/app/src/components/map/SliderControl.vue new file mode 100644 index 0000000000..6b7004790b --- /dev/null +++ b/app/src/components/map/SliderControl.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/app/src/components/map/SpecialLayer.vue b/app/src/components/map/SpecialLayer.vue index 608e2a4ec0..7414b2c181 100644 --- a/app/src/components/map/SpecialLayer.vue +++ b/app/src/components/map/SpecialLayer.vue @@ -111,7 +111,7 @@ export default { let rows = []; if (config?.tooltip?.tooltipFormatFunction) { // has to return a list of rows - rows = config?.tooltip?.tooltipFormatFunction(feature, config); + rows = config?.tooltip?.tooltipFormatFunction(feature, config, this.$store); } else { const props = feature.getProperties(); // some indicators have 'allowedParameters', which define the keys to display diff --git a/app/src/components/map/VectorStyleControl.vue b/app/src/components/map/VectorStyleControl.vue new file mode 100644 index 0000000000..b16678f113 --- /dev/null +++ b/app/src/components/map/VectorStyleControl.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/app/src/components/map/VectorTileStyleControl.vue b/app/src/components/map/VectorTileStyleControl.vue index 25ba656675..bc28c0025c 100644 --- a/app/src/components/map/VectorTileStyleControl.vue +++ b/app/src/components/map/VectorTileStyleControl.vue @@ -1,7 +1,7 @@