@eodash/eodash 5.0.0-rc.2.2 → 5.0.0-rc.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/core/client/components/EodashOverlay.vue +56 -0
  2. package/core/client/components/Footer.vue +1 -15
  3. package/core/client/composables/EodashMap.js +1 -0
  4. package/core/client/eodash.js +4 -7
  5. package/core/client/eodashSTAC/EodashCollection.js +62 -31
  6. package/core/client/eodashSTAC/createLayers.js +21 -2
  7. package/core/client/eodashSTAC/helpers.js +1 -2
  8. package/core/client/utils/states.js +43 -0
  9. package/core/client/views/Dashboard.vue +4 -1
  10. package/dist/client/{DashboardLayout-ByVMURpM.js → DashboardLayout-Reny_s87.js} +2 -2
  11. package/dist/client/{DynamicWebComponent-BRQQ5AXV.js → DynamicWebComponent-DQPKIscC.js} +1 -1
  12. package/dist/client/{EodashDatePicker-DyLo_JUC.js → EodashDatePicker-E5GjnQQ2.js} +2 -2
  13. package/dist/client/{EodashItemFilter-BR572AaH.js → EodashItemFilter-DN77Uqgg.js} +1 -1
  14. package/dist/client/{EodashLayerControl-C_mi-Hoo.js → EodashLayerControl-DduVhg2O.js} +10 -3
  15. package/dist/client/{EodashLayoutSwitcher-D4ooLbys.js → EodashLayoutSwitcher-CeNnYuaC.js} +2 -2
  16. package/dist/client/{EodashMap-CGFv4e85.js → EodashMap-C3bgcNJk.js} +9 -3
  17. package/dist/client/{EodashMapBtns-_M7SW7Is.js → EodashMapBtns-B73UApEn.js} +4 -4
  18. package/dist/client/{EodashProcess-ZQAMi9Pc.js → EodashProcess-IQPnj17j.js} +14 -14
  19. package/dist/client/{EodashStacInfo-CwOCcsGl.js → EodashStacInfo-CeZqI75-.js} +1 -1
  20. package/dist/client/{EodashTools-C_X0RPIp.js → EodashTools-CAE604ZJ.js} +4 -4
  21. package/dist/client/{ExportState-DNUSRJSJ.js → ExportState-DXw8Dwvk.js} +4 -4
  22. package/dist/client/Footer-Bl9tQTyj.js +119 -0
  23. package/dist/client/{Header-BcHAtFqr.js → Header-qH_kBs-u.js} +3 -3
  24. package/dist/client/{MobileLayout-CUHZFLDY.js → MobileLayout-Du5n5XyY.js} +5 -5
  25. package/dist/client/{PopUp-CEmhdNIj.js → PopUp-B12NWJHU.js} +3 -3
  26. package/dist/client/{VImg-Cdaw92OV.js → VImg-CjsuV4n9.js} +2 -2
  27. package/dist/client/{VMain-B7G2T3Zv.js → VMain-B11EjLm6.js} +1 -1
  28. package/dist/client/{VOverlay-Mf1pOmgW.js → VOverlay-CLR2s8AQ.js} +3 -3
  29. package/dist/client/{VTooltip-9810qjB2.js → VTooltip-DqyE5_aG.js} +3 -3
  30. package/dist/client/{WidgetsContainer-GUwXMh9d.js → WidgetsContainer-YI9ZycgC.js} +1 -1
  31. package/dist/client/{asWebComponent--e4yqM3f.js → asWebComponent-DBkwthjq.js} +217 -59
  32. package/dist/client/eo-dash.css +2 -2
  33. package/dist/client/eo-dash.js +1 -1
  34. package/dist/client/{forwardRefs-B9UH8QZK.js → forwardRefs-BTYtR3pq.js} +1 -1
  35. package/dist/client/{index-D-lbt2my.js → index-BhfdO0rU.js} +1 -1
  36. package/dist/client/{transition-CTjQmgIS.js → transition-B79onGGb.js} +1 -1
  37. package/dist/types/core/client/components/EodashOverlay.vue.d.ts +2 -0
  38. package/dist/types/core/client/eodashSTAC/EodashCollection.d.ts +36 -7
  39. package/dist/types/core/client/eodashSTAC/createLayers.d.ts +20 -0
  40. package/dist/types/core/client/eodashSTAC/helpers.d.ts +4 -10
  41. package/dist/types/core/client/utils/states.d.ts +43 -0
  42. package/package.json +1 -1
  43. package/widgets/EodashLayerControl.vue +7 -0
  44. package/widgets/EodashMap.vue +7 -1
  45. package/widgets/EodashProcess.vue +13 -13
  46. package/dist/client/Footer-FUp1Te0L.js +0 -141
@@ -0,0 +1,56 @@
1
+ <template>
2
+ <div class="eodash-overlay" v-if="$vuetify.display.mdAndUp">
3
+ <p>
4
+ <a href="https://github.com/eodash/eodash" target="_blank"
5
+ >eodash v{{ version }}</a
6
+ >
7
+ by
8
+ <a href="https://eox.at" target="_blank">
9
+ <img :src="`data:image/svg+xml;base64,${base64Logo}`" height="9px" />
10
+ </a>
11
+ </p>
12
+ </div>
13
+ </template>
14
+ <script setup>
15
+ import { useTheme } from "vuetify/lib/framework.mjs";
16
+ import pkgJson from "../../../package.json";
17
+ const { computedThemes } = useTheme();
18
+
19
+ const version = pkgJson.version;
20
+
21
+ const eoxLogo = `<svg width="100%" height="100%" viewBox="0 0 355 85" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><g id="ink_ext_XXXXXX"><path id="path5076" d="M152.986,40.52l-0.75,-0.019l-0.737,-0.056l-0.725,-0.093l-0.713,-0.127l-0.7,-0.162l-0.7,-0.196l-0.675,-0.228l-0.65,-0.261l-0.65,-0.292l-0.625,-0.319l-0.612,-0.352l-0.588,-0.377l-0.562,-0.407l-0.55,-0.431l-0.538,-0.457l-0.5,-0.481l-0.487,-0.505l-0.45,-0.528l-0.438,-0.55l-0.4,-0.57l-0.375,-0.59l-0.35,-0.609l-0.325,-0.627l-0.287,-0.645l-0.263,-0.66l-0.225,-0.676l-0.2,-0.69l-0.162,-0.704l-0.125,-0.717l-0.1,-0.728l-0.05,-0.739l-0.025,-0.748c0,-8.023 6.512,-14.532 14.537,-14.532c8.038,0 14.538,6.509 14.538,14.532c0,8.036 -6.5,14.544 -14.538,14.544Z" style="fill:none;"/><path id="path5078" d="M165.748,-0.002c-42.009,0 -76.06,18.985 -76.06,42.402c0,13.268 10.921,25.102 28.021,32.875c-8.081,-5.487 -13.403,-12.973 -14.584,-21.859c-2.685,-20.186 16.83,-40.82 45.148,-49.615c-14.687,6.665 -24.923,21.427 -24.923,38.599c0,23.218 18.648,42.046 41.773,42.383c-0.037,0.005 -0.087,0.015 -0.137,0.02c0.263,0 0.512,0.009 0.762,0.009c42.013,0 76.076,-18.984 76.076,-42.412c0,-13.261 -10.937,-25.097 -28.037,-32.871l0.75,0.522l0.736,0.531l0.713,0.543l0.7,0.555l0.687,0.566l0.664,0.578l0.649,0.588l0.625,0.6l0.613,0.609l0.588,0.621l0.574,0.631l0.562,0.643l0.538,0.652l0.513,0.662l0.5,0.672l0.475,0.684l0.449,0.693l0.438,0.703l0.425,0.713l0.387,0.723l0.375,0.73l0.352,0.74l0.336,0.75l0.3,0.76l0.287,0.77l0.264,0.777l0.25,0.787l0.211,0.795l0.188,0.805l0.175,0.812l0.151,0.82l0.125,0.831c2.675,20.19 -16.838,40.825 -45.151,49.619c14.688,-6.665 24.926,-21.426 24.926,-38.614c0,-23.202 -18.65,-42.026 -41.775,-42.367c0.05,-0.005 0.1,-0.015 0.15,-0.025c-0.262,0 -0.526,-0.01 -0.789,-0.01Zm-13.248,11.314c7.817,0 14.25,6.433 14.25,14.25c0,0.001 0,0.001 0,0.001c0,7.817 -6.433,14.249 -14.25,14.249c-7.817,0 -14.25,-6.432 -14.25,-14.249c0,-0.001 0,-0.001 0,-0.001c0,-7.817 6.433,-14.25 14.25,-14.25Z"
22
+ style="fill:${computedThemes.value["dashboardTheme"].colors["on-secondary"]};fill-rule:nonzero;"/><path id="path5080" d="M213.786,9.529l0.75,0.521l0.738,0.532l0.712,0.544l0.7,0.555l0.688,0.566l0.662,0.577l0.65,0.588l0.625,0.6l0.613,0.61l0.587,0.62l0.575,0.631l0.563,0.643l0.537,0.652l0.513,0.663l0.5,0.672l0.475,0.684l0.45,0.692l0.437,0.703l0.425,0.712l0.388,0.723l0.375,0.731l0.35,0.741l0.337,0.75l0.3,0.76l0.288,0.769l0.262,0.777l0.25,0.786l0.213,0.797l0.187,0.804l0.175,0.812l0.15,0.821l0.125,0.83c2.675,20.19 -16.837,40.825 -45.15,49.619c14.688,-6.665 24.925,-21.426 24.925,-38.614c0,-23.202 -18.65,-42.025 -41.775,-42.367c0.05,-0.005 0.1,-0.015 0.15,-0.025c-0.262,0 -0.525,-0.01 -0.787,-0.01c-42.01,0 -76.062,18.985 -76.062,42.402c0,13.268 10.922,25.103 28.022,32.876c-8.081,-5.487 -13.403,-12.973 -14.584,-21.859c-2.685,-20.187 16.831,-40.82 45.149,-49.615c-14.688,6.665 -24.925,21.426 -24.925,38.598c0,23.218 18.65,42.046 41.775,42.383c-0.038,0.005 -0.088,0.015 -0.138,0.02c0.263,0 0.513,0.01 0.763,0.01c42.012,-0.001 76.075,-18.985 76.075,-42.413c0,-13.261 -10.938,-25.097 -28.038,-32.871Z" style="fill:none;"/><path id="path5082" d="M354.323,82.586l-41.999,-42.002l38.524,-38.515l-29.913,0l-23.562,23.559l-23.563,-23.559l-29.924,0l38.525,38.515l-42,42.002l29.913,0l27.049,-27.046l27.05,27.046l29.9,0"
23
+ style="fill:${computedThemes.value["dashboardTheme"].colors["on-secondary"]};fill-rule:nonzero;"/><path id="path5084" d="M354.323,82.586l-41.999,-42.002l38.524,-38.515l-29.913,0l-23.562,23.559l-23.563,-23.559l-29.924,0l38.525,38.515l-42,42.002l29.913,0l27.049,-27.046l27.05,27.046l29.9,0Z" style="fill:none;"/><path id="path5086" d="M0,2.069l75.033,0l0,16.489l-51.629,0l0,14.931l40.258,0l0,16.495l-40.258,0l0,16.05l53.124,0l0,16.488l-76.528,0l0,-80.453"
24
+ style="fill:${computedThemes.value["dashboardTheme"].colors["on-secondary"]};fill-rule:nonzero;"/><path id="path5088" d="M0,2.069l75.033,0l0,16.489l-51.629,0l0,14.931l40.258,0l0,16.495l-40.258,0l0,16.05l53.124,0l0,16.488l-76.528,0l0,-80.453Z" style="fill:none;"/></g></svg>`;
25
+ const base64Logo = btoa(eoxLogo);
26
+ </script>
27
+ <style scoped lang="scss">
28
+ .eodash-overlay {
29
+ position: fixed;
30
+ top: 0;
31
+ left: 0;
32
+ width: 100%;
33
+ height: 100%;
34
+ font-size: 0.7em;
35
+ font-weight: bold;
36
+ background: linear-gradient(
37
+ 181deg,
38
+ transparent 97%,
39
+ rgba(var(--v-theme-secondary), 0.5)
40
+ );
41
+ z-index: 9999;
42
+ pointer-events: none;
43
+ p {
44
+ position: absolute;
45
+ bottom: -4px;
46
+ left: 95px;
47
+ transform: translate(-50%, -50%);
48
+ color: rgba(var(--v-theme-on-secondary), 1);
49
+ }
50
+ a {
51
+ pointer-events: all;
52
+ text-decoration: dashed;
53
+ color: rgba(var(--v-theme-on-secondary), 1);
54
+ }
55
+ }
56
+ </style>
@@ -4,23 +4,11 @@
4
4
  :height="mdAndDown ? '48px' : 'auto'"
5
5
  color="secondary"
6
6
  app
7
- class="d-flex justify-space-between"
7
+ class="d-flex justify-end"
8
8
  >
9
9
  <p class="pt-0 footer-text">
10
10
  {{ eodash.brand.footerText ?? "" }}
11
11
  </p>
12
- <div>
13
- <a
14
- href="https://github.com/eodash/eodash"
15
- class="text-white"
16
- target="_blank"
17
- >eodash</a
18
- >
19
- by
20
- <a href="https://eox.at" target="_blank" class="text-white">
21
- <img :src="`data:image/svg+xml;base64,${base64Logo}`" height="11px" />
22
- </a>
23
- </div>
24
12
  </v-footer>
25
13
  </template>
26
14
  <script setup>
@@ -40,8 +28,6 @@ const footer = ref(null);
40
28
  const eodash = /** @type {import("@/types").Eodash} */ (inject(eodashKey));
41
29
 
42
30
  const { mdAndDown } = useDisplay();
43
- const eoxLogo = `<svg width="100%" height="100%" viewBox="0 0 355 85" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"><g id="ink_ext_XXXXXX"><path id="path5076" d="M152.986,40.52l-0.75,-0.019l-0.737,-0.056l-0.725,-0.093l-0.713,-0.127l-0.7,-0.162l-0.7,-0.196l-0.675,-0.228l-0.65,-0.261l-0.65,-0.292l-0.625,-0.319l-0.612,-0.352l-0.588,-0.377l-0.562,-0.407l-0.55,-0.431l-0.538,-0.457l-0.5,-0.481l-0.487,-0.505l-0.45,-0.528l-0.438,-0.55l-0.4,-0.57l-0.375,-0.59l-0.35,-0.609l-0.325,-0.627l-0.287,-0.645l-0.263,-0.66l-0.225,-0.676l-0.2,-0.69l-0.162,-0.704l-0.125,-0.717l-0.1,-0.728l-0.05,-0.739l-0.025,-0.748c0,-8.023 6.512,-14.532 14.537,-14.532c8.038,0 14.538,6.509 14.538,14.532c0,8.036 -6.5,14.544 -14.538,14.544Z" style="fill:none;"/><path id="path5078" d="M165.748,-0.002c-42.009,0 -76.06,18.985 -76.06,42.402c0,13.268 10.921,25.102 28.021,32.875c-8.081,-5.487 -13.403,-12.973 -14.584,-21.859c-2.685,-20.186 16.83,-40.82 45.148,-49.615c-14.687,6.665 -24.923,21.427 -24.923,38.599c0,23.218 18.648,42.046 41.773,42.383c-0.037,0.005 -0.087,0.015 -0.137,0.02c0.263,0 0.512,0.009 0.762,0.009c42.013,0 76.076,-18.984 76.076,-42.412c0,-13.261 -10.937,-25.097 -28.037,-32.871l0.75,0.522l0.736,0.531l0.713,0.543l0.7,0.555l0.687,0.566l0.664,0.578l0.649,0.588l0.625,0.6l0.613,0.609l0.588,0.621l0.574,0.631l0.562,0.643l0.538,0.652l0.513,0.662l0.5,0.672l0.475,0.684l0.449,0.693l0.438,0.703l0.425,0.713l0.387,0.723l0.375,0.73l0.352,0.74l0.336,0.75l0.3,0.76l0.287,0.77l0.264,0.777l0.25,0.787l0.211,0.795l0.188,0.805l0.175,0.812l0.151,0.82l0.125,0.831c2.675,20.19 -16.838,40.825 -45.151,49.619c14.688,-6.665 24.926,-21.426 24.926,-38.614c0,-23.202 -18.65,-42.026 -41.775,-42.367c0.05,-0.005 0.1,-0.015 0.15,-0.025c-0.262,0 -0.526,-0.01 -0.789,-0.01Zm-13.248,11.314c7.817,0 14.25,6.433 14.25,14.25c0,0.001 0,0.001 0,0.001c0,7.817 -6.433,14.249 -14.25,14.249c-7.817,0 -14.25,-6.432 -14.25,-14.249c0,-0.001 0,-0.001 0,-0.001c0,-7.817 6.433,-14.25 14.25,-14.25Z" style="fill:#fff;fill-rule:nonzero;"/><path id="path5080" d="M213.786,9.529l0.75,0.521l0.738,0.532l0.712,0.544l0.7,0.555l0.688,0.566l0.662,0.577l0.65,0.588l0.625,0.6l0.613,0.61l0.587,0.62l0.575,0.631l0.563,0.643l0.537,0.652l0.513,0.663l0.5,0.672l0.475,0.684l0.45,0.692l0.437,0.703l0.425,0.712l0.388,0.723l0.375,0.731l0.35,0.741l0.337,0.75l0.3,0.76l0.288,0.769l0.262,0.777l0.25,0.786l0.213,0.797l0.187,0.804l0.175,0.812l0.15,0.821l0.125,0.83c2.675,20.19 -16.837,40.825 -45.15,49.619c14.688,-6.665 24.925,-21.426 24.925,-38.614c0,-23.202 -18.65,-42.025 -41.775,-42.367c0.05,-0.005 0.1,-0.015 0.15,-0.025c-0.262,0 -0.525,-0.01 -0.787,-0.01c-42.01,0 -76.062,18.985 -76.062,42.402c0,13.268 10.922,25.103 28.022,32.876c-8.081,-5.487 -13.403,-12.973 -14.584,-21.859c-2.685,-20.187 16.831,-40.82 45.149,-49.615c-14.688,6.665 -24.925,21.426 -24.925,38.598c0,23.218 18.65,42.046 41.775,42.383c-0.038,0.005 -0.088,0.015 -0.138,0.02c0.263,0 0.513,0.01 0.763,0.01c42.012,-0.001 76.075,-18.985 76.075,-42.413c0,-13.261 -10.938,-25.097 -28.038,-32.871Z" style="fill:none;"/><path id="path5082" d="M354.323,82.586l-41.999,-42.002l38.524,-38.515l-29.913,0l-23.562,23.559l-23.563,-23.559l-29.924,0l38.525,38.515l-42,42.002l29.913,0l27.049,-27.046l27.05,27.046l29.9,0" style="fill:#fff;fill-rule:nonzero;"/><path id="path5084" d="M354.323,82.586l-41.999,-42.002l38.524,-38.515l-29.913,0l-23.562,23.559l-23.563,-23.559l-29.924,0l38.525,38.515l-42,42.002l29.913,0l27.049,-27.046l27.05,27.046l29.9,0Z" style="fill:none;"/><path id="path5086" d="M0,2.069l75.033,0l0,16.489l-51.629,0l0,14.931l40.258,0l0,16.495l-40.258,0l0,16.05l53.124,0l0,16.488l-76.528,0l0,-80.453" style="fill:#fff;fill-rule:nonzero;"/><path id="path5088" d="M0,2.069l75.033,0l0,16.489l-51.629,0l0,14.931l40.258,0l0,16.495l-40.258,0l0,16.05l53.124,0l0,16.488l-76.528,0l0,-80.453Z" style="fill:none;"/></g></svg>`;
44
- const base64Logo = window.btoa(eoxLogo);
45
31
  </script>
46
32
  <style scoped>
47
33
  .footer-text {
@@ -377,3 +377,4 @@ export const useUpdateTooltipProperties = (eodashCols, tooltipProperties) => {
377
377
  log.debug("Updated tooltip properties", tooltipProperties.value);
378
378
  });
379
379
  };
380
+
@@ -10,13 +10,14 @@ import { reactive } from "vue";
10
10
  export const eodash = reactive({
11
11
  id: "demo",
12
12
  stacEndpoint:
13
- // "https://eurodatacube.github.io/eodash-catalog/RACE/catalog.json",
13
+ "https://esa-eodash.github.io/RACE-catalog/RACE/catalog.json",
14
14
  // "https://gtif-cerulean.github.io/catalog/cerulean/catalog.json",
15
15
  // "https://eodashcatalog.eox.at/samplecatalog/samples/catalog.json",
16
16
  // "https://eodashcatalog.eox.at/test-style/trilateral/catalog.json",
17
17
  // "https://gtif-cerulean.github.io/catalog/cerulean/catalog.json",
18
18
  // "https://gtif-cerulean.github.io/deside-catalog/deside/catalog.json",
19
- "https://gtif-cerulean.github.io/cerulean-catalog/cerulean/catalog.json",
19
+ // "https://gtif-cerulean.github.io/cerulean-catalog/cerulean/catalog.json",
20
+ // "https://gtif-austria.github.io/public-catalog/GTIF-Austria/catalog.json",
20
21
  brand: {
21
22
  noLayout: true,
22
23
  name: "Demo",
@@ -247,10 +248,6 @@ export const eodash = reactive({
247
248
  type: "internal",
248
249
  widget: {
249
250
  name: "EodashStacInfo",
250
- properties: {
251
- showIndicatorsBtn: false,
252
- showLayoutSwitcher: false,
253
- },
254
251
  },
255
252
  }
256
253
  : null;
@@ -298,7 +295,7 @@ export const eodash = reactive({
298
295
  id: "Processes",
299
296
  type: "internal",
300
297
  title: "Processes",
301
- layout: { x: 9, y: 7, w: 3, h: 5 },
298
+ layout: { x: 9, y: 6, w: 3, h: 5 },
302
299
  widget: {
303
300
  name: "EodashProcess",
304
301
  },
@@ -17,6 +17,7 @@ import {
17
17
  import { createLayersFromAssets, createLayersFromLinks } from "./createLayers";
18
18
  import axios from "@/plugins/axios";
19
19
  import log from "loglevel";
20
+ import { dataThemesBrands } from "@/utils/states";
20
21
 
21
22
  export class EodashCollection {
22
23
  #collectionUrl = "";
@@ -419,38 +420,68 @@ export class EodashCollection {
419
420
  allFeatures.push(collectionFeatures);
420
421
  }
421
422
  }
422
- if (allFeatures.length) {
423
- const featureCollection = {
424
- type: "FeatureCollection",
425
- crs: {
426
- type: "name",
427
- properties: {
428
- name: "EPSG:4326",
429
- },
430
- },
431
- features: allFeatures.flat(),
432
- };
433
- return {
434
- type: "Vector",
423
+ if (!allFeatures.length) {
424
+ return null;
425
+ }
426
+
427
+ const featureCollection = {
428
+ type: "FeatureCollection",
429
+ crs: {
430
+ type: "name",
435
431
  properties: {
436
- id: "geodb-collection",
437
- title: "Observation Points",
438
- },
439
- source: {
440
- type: "Vector",
441
- url: "data:," + encodeURIComponent(JSON.stringify(featureCollection)),
442
- format: "GeoJSON",
432
+ name: "EPSG:4326",
443
433
  },
444
- style: {
445
- "circle-radius": 5,
446
- "circle-fill-color": "#00417077",
447
- "circle-stroke-color": "#004170",
448
- "fill-color": "#00417077",
449
- "stroke-color": "#004170",
450
- },
451
- interactions: [],
452
- };
453
- }
454
- return null;
434
+ },
435
+ features: allFeatures.flat(),
436
+ };
437
+ return {
438
+ type: "Vector",
439
+ properties: {
440
+ id: "geodb-collection",
441
+ title: "Observation Points",
442
+ },
443
+ source: {
444
+ type: "Vector",
445
+ url: "data:," + encodeURIComponent(JSON.stringify(featureCollection)),
446
+ format: "GeoJSON",
447
+ },
448
+ style: (() => {
449
+ // generate flat style rules for each theme
450
+ /** @param {*} theme */
451
+ const generateIconSrc = (theme) => {
452
+ const svgString = `
453
+ <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 70 70">
454
+ <circle cx="35" cy="35" r="30" stroke="white" fill="${theme.color}" stroke-width="4"/>
455
+ <path d="${theme.icon}" fill="#fff" transform="translate(19.5, 20) scale(1.3) "/>
456
+ </svg>
457
+ `;
458
+ return `data:image/svg+xml,${encodeURIComponent(svgString)}`;
459
+ };
460
+
461
+ return [
462
+ ...Object.keys(dataThemesBrands).map((theme, idx) => {
463
+ return {
464
+ ...(idx !== 0 && { else: true }),
465
+ filter: ["==", ["get", "themes", 0], theme],
466
+ style: {
467
+ //@ts-expect-error string index
468
+ "icon-src": generateIconSrc(dataThemesBrands[theme]),
469
+ },
470
+ };
471
+ }),
472
+ {
473
+ else: true,
474
+ style: {
475
+ "circle-radius": 10,
476
+ "circle-fill-color": "#00417077",
477
+ "circle-stroke-color": "#004170",
478
+ "fill-color": "#0417077",
479
+ "stroke-color": "#004170",
480
+ },
481
+ },
482
+ ];
483
+ })(),
484
+ interactions: [],
485
+ };
455
486
  }
456
487
  }
@@ -36,6 +36,7 @@ export async function createLayersFromAssets(
36
36
  let geoTIFFIdx = null;
37
37
  // let geoJsonLayers = [];
38
38
  let geoJsonIdx = 0;
39
+ let geoJsonAttributions = [];
39
40
 
40
41
  const geoJsonSources = [];
41
42
  let geoJsonRoles = {};
@@ -50,6 +51,8 @@ export async function createLayersFromAssets(
50
51
  if (assets[ast]?.type === "application/geo+json") {
51
52
  geoJsonSources.push(assets[ast].href);
52
53
  geoJsonIdx = idx;
54
+ if (assets[ast].attribution)
55
+ geoJsonAttributions.push(assets[ast].attribution);
53
56
  extractRoles(geoJsonRoles, assets[ast]);
54
57
  } else if (assets[ast]?.type === "application/vnd.flatgeobuf") {
55
58
  const assetId = createAssetID(collectionId, item.id, idx);
@@ -61,6 +64,7 @@ export async function createLayersFromAssets(
61
64
  type: "FlatGeoBuf",
62
65
  url: assets[ast].href,
63
66
  format: "GeoJSON",
67
+ attributions: assets[ast].attribution,
64
68
  },
65
69
  properties: {
66
70
  id: assetId,
@@ -74,11 +78,12 @@ export async function createLayersFromAssets(
74
78
  }),
75
79
  },
76
80
  ...(!style?.variables && { style }),
81
+ interactions: [],
77
82
  };
78
83
  // add tooltip interaction if style has tooltip
79
84
  if (style?.tooltip) {
80
- // @ts-expect-error no type for eox-map layer
81
85
  layer.interactions = [
86
+ // @ts-expect-error no type for eox-map layer
82
87
  {
83
88
  type: "select",
84
89
  options: {
@@ -98,9 +103,18 @@ export async function createLayersFromAssets(
98
103
  layer.properties = { ...layer.properties, ...(extraProperties ?? {}) };
99
104
 
100
105
  jsonArray.push(layer);
106
+ const layer2 = structuredClone(layer)
107
+ // temporary solution to avoid selection of the same layer
108
+ // to be removed
109
+ layer2.interactions = []
110
+ layer2.properties.id = layer2.properties.id + "_selection"
111
+ jsonArray.push(layer2)
101
112
  } else if (assets[ast]?.type === "image/tiff") {
102
113
  geoTIFFIdx = idx;
103
- geoTIFFSources.push({ url: assets[ast].href });
114
+ geoTIFFSources.push({
115
+ url: assets[ast].href,
116
+ attributions: assets[ast].attribution,
117
+ });
104
118
  }
105
119
  }
106
120
 
@@ -114,6 +128,7 @@ export async function createLayersFromAssets(
114
128
  type: "Vector",
115
129
  url: await mergeGeojsons(geoJsonSources),
116
130
  format: "GeoJSON",
131
+ attributions: geoJsonAttributions,
117
132
  },
118
133
  properties: {
119
134
  ...geoJsonRoles,
@@ -227,6 +242,7 @@ export const createLayersFromLinks = async (
227
242
  tileGrid: {
228
243
  tileSize,
229
244
  },
245
+ attributions: wmsLink.attribution,
230
246
  params: {
231
247
  LAYERS: wmsLink["wms:layers"],
232
248
  TILED: true,
@@ -297,6 +313,7 @@ export const createLayersFromLinks = async (
297
313
  tileGrid: {
298
314
  tileSize: [128, 128],
299
315
  },
316
+ attributions: wmtsLink.attribution,
300
317
  dimensions: dimensionsWithoutStyle,
301
318
  },
302
319
  };
@@ -322,6 +339,7 @@ export const createLayersFromLinks = async (
322
339
  tileGrid: {
323
340
  tileSize: [512, 512],
324
341
  },
342
+ attributions: wmtsLink.attribution,
325
343
  dimensions: dimensionsWithoutStyle,
326
344
  },
327
345
  };
@@ -359,6 +377,7 @@ export const createLayersFromLinks = async (
359
377
  type: "XYZ",
360
378
  url: xyzLink.href,
361
379
  projection: projectionCode,
380
+ attributions: xyzLink.attribution,
362
381
  },
363
382
  };
364
383
 
@@ -118,9 +118,8 @@ export const extractRoles = (properties, linkOrAsset) => {
118
118
  if (role === "overlay" || role === "baselayer") {
119
119
  properties.group = role;
120
120
  }
121
-
122
- return properties;
123
121
  });
122
+ return properties;
124
123
  };
125
124
 
126
125
  /**
@@ -1,3 +1,12 @@
1
+ import {
2
+ mdiBarley,
3
+ mdiCurrencyEur,
4
+ mdiHospitalBoxOutline,
5
+ mdiImageFilterHdr,
6
+ mdiSetCenter,
7
+ mdiWater,
8
+ mdiWeatherWindy,
9
+ } from "@mdi/js";
1
10
  import { reactive, ref, shallowReactive } from "vue";
2
11
 
3
12
  /**
@@ -37,3 +46,37 @@ export const collectionsPalette = reactive([
37
46
  "#56B4E9",
38
47
  "#D55E00",
39
48
  ]);
49
+
50
+ /**
51
+ * Object containing data themes and their associated brand properties (icon and color).
52
+ */
53
+ export const dataThemesBrands = {
54
+ agriculture: {
55
+ icon: mdiBarley,
56
+ color: "#F2AF25",
57
+ },
58
+ water: {
59
+ icon: mdiWater,
60
+ color: "#73A6C7",
61
+ },
62
+ land: {
63
+ icon: mdiImageFilterHdr,
64
+ color: "#019E73",
65
+ },
66
+ health: {
67
+ icon: mdiHospitalBoxOutline,
68
+ color: "#497FA9",
69
+ },
70
+ combined: {
71
+ icon: mdiSetCenter,
72
+ color: "#56B4E9",
73
+ },
74
+ air: {
75
+ icon: mdiWeatherWindy,
76
+ color: "#475faf",
77
+ },
78
+ economy: {
79
+ icon: mdiCurrencyEur,
80
+ color: "#8E81AF",
81
+ },
82
+ };
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <HeaderComponent v-if="!eodash.brand.noLayout" />
3
3
  <ErrorAlert v-model="error" />
4
+ <EodashOverlay />
4
5
  <Suspense>
5
6
  <TemplateComponent :style="{ height: templateHeight }" />
6
7
  <template #fallback>
@@ -21,6 +22,7 @@ import { useDisplay } from "vuetify/lib/framework.mjs";
21
22
  import { loadFont } from "@/utils";
22
23
  import Loading from "@/components/Loading.vue";
23
24
  import ErrorAlert from "@/components/ErrorAlert.vue";
25
+ import EodashOverlay from "@/components/EodashOverlay.vue";
24
26
 
25
27
  const props = defineProps({
26
28
  config: {
@@ -86,6 +88,7 @@ eo-dash {
86
88
  overflow: hidden;
87
89
  }
88
90
  /* set eox-elements colors css vars to match the theme */
91
+ /*
89
92
  eox-layercontrol,
90
93
  eox-map,
91
94
  eox-drawtools,
@@ -104,5 +107,5 @@ eox-itemfilter {
104
107
  --eox-warning-color: rgb(var(--v-theme-warning));
105
108
  --range-slider-color: rgb(var(--v-theme-primary));
106
109
  --range-slider-track-color: rgb(var(--v-theme-on-primary));
107
- }
110
+ } */
108
111
  </style>
@@ -1,7 +1,7 @@
1
1
  import { openBlock, createBlock, withCtx, createElementVNode, unref, normalizeStyle, createElementBlock, Suspense, resolveDynamicComponent, mergeProps, createCommentVNode, Fragment, renderList, Transition } from 'vue';
2
2
  import '@eox/layout';
3
- import { _ as _export_sfc, F as useDefineTemplate } from './asWebComponent--e4yqM3f.js';
4
- import { V as VMain } from './VMain-B7G2T3Zv.js';
3
+ import { _ as _export_sfc, F as useDefineTemplate } from './asWebComponent-DBkwthjq.js';
4
+ import { V as VMain } from './VMain-B11EjLm6.js';
5
5
 
6
6
  const _hoisted_1 = ["gap"];
7
7
  const _hoisted_2 = ["id", "h", "w", "x", "y"];
@@ -1,5 +1,5 @@
1
1
  import { withAsyncContext, ref, onMounted, onUnmounted, openBlock, createElementBlock, createBlock, resolveDynamicComponent, mergeProps } from 'vue';
2
- import { $ as useSTAcStore } from './asWebComponent--e4yqM3f.js';
2
+ import { $ as useSTAcStore } from './asWebComponent-DBkwthjq.js';
3
3
 
4
4
  const _hoisted_1 = { class: "d-flex flex-column fill-height overflow-auto" };
5
5
 
@@ -1,9 +1,9 @@
1
1
  import { resolveComponent, render, h, mergeProps, useCssVars, useTemplateRef, customRef, ref, computed, reactive, toRef, watch, onMounted, openBlock, createElementBlock, createVNode, unref, createSlots, withCtx, createElementVNode, withDirectives, createBlock, createCommentVNode, toHandlers } from 'vue';
2
2
  import { DatePicker } from 'v-calendar';
3
- import { E as isObject, Y as consoleError, t as useDisplay, Z as datetime, $ as useSTAcStore, a0 as eodashCollections, a1 as collectionsPalette, a2 as makePanelTransparent, V as VBtn, y as VIcon } from './asWebComponent--e4yqM3f.js';
3
+ import { E as isObject, Y as consoleError, t as useDisplay, Z as datetime, $ as useSTAcStore, a0 as eodashCollections, a1 as collectionsPalette, a2 as makePanelTransparent, V as VBtn, y as VIcon } from './asWebComponent-DBkwthjq.js';
4
4
  import { mdiRayEndArrow, mdiRayStartArrow } from '@mdi/js';
5
5
  import log from 'loglevel';
6
- import { V as VTooltip } from './VTooltip-9810qjB2.js';
6
+ import { V as VTooltip } from './VTooltip-DqyE5_aG.js';
7
7
 
8
8
  // Utilities
9
9
  function useDirectiveComponent(component, props) {
@@ -1,5 +1,5 @@
1
1
  import { computed, ref, openBlock, createElementBlock, mergeProps, unref, createElementVNode, toDisplayString } from 'vue';
2
- import { t as useDisplay, $ as useSTAcStore } from './asWebComponent--e4yqM3f.js';
2
+ import { t as useDisplay, $ as useSTAcStore } from './asWebComponent-DBkwthjq.js';
3
3
  import '@eox/itemfilter';
4
4
 
5
5
  const _hoisted_1 = [".items"];
@@ -3,12 +3,17 @@ import '@eox/layercontrol';
3
3
  import '@eox/jsonform';
4
4
  import '@eox/timecontrol';
5
5
  import 'color-legend-element';
6
- import { $ as useSTAcStore, a3 as mapCompareEl, a4 as mapEl, a5 as eodashCompareCollections, a0 as eodashCollections, a6 as layerControlFormValue, a7 as getColFromLayer } from './asWebComponent--e4yqM3f.js';
6
+ import { $ as useSTAcStore, a3 as mapCompareEl, a4 as mapEl, a5 as eodashCompareCollections, a0 as eodashCollections, a6 as layerControlFormValue, a7 as getColFromLayer } from './asWebComponent-DBkwthjq.js';
7
7
  import { storeToRefs } from 'pinia';
8
8
 
9
9
  const _hoisted_1 = { class: "d-flex flex-column fill-height overflow-auto" };
10
10
  const _hoisted_2 = ["for"];
11
11
 
12
+ const styleOverride = `
13
+ input[type="range"] {
14
+ background:transparent !important;
15
+ }
16
+ `;
12
17
 
13
18
  const _sfc_main = {
14
19
  __name: 'EodashLayerControl',
@@ -105,6 +110,7 @@ const onLayerConfigChange = (evt) => {
105
110
  layerControlFormValue.value = evt.detail.jsonformValue;
106
111
  };
107
112
 
113
+
108
114
  return (_ctx, _cache) => {
109
115
  return (openBlock(), createElementBlock("span", _hoisted_1, [
110
116
  (showControls.value)
@@ -116,8 +122,9 @@ return (_ctx, _cache) => {
116
122
  style: {"--eox-background-color":"transparent"},
117
123
  ref_key: "eoxLayercontrol",
118
124
  ref: eoxLayercontrol,
119
- "on:layerConfig:change": onLayerConfigChange
120
- }), null, 16 /* FULL_PROPS */, _hoisted_2))
125
+ "on:layerConfig:change": onLayerConfigChange,
126
+ ".styleOverride": styleOverride
127
+ }), null, 48 /* FULL_PROPS, NEED_HYDRATION */, _hoisted_2))
121
128
  : createCommentVNode("v-if", true)
122
129
  ]))
123
130
  }
@@ -1,7 +1,7 @@
1
1
  import { ref, openBlock, createElementBlock, createVNode, withCtx, mergeProps } from 'vue';
2
- import { a2 as makePanelTransparent, y as VIcon, al as activeTemplate } from './asWebComponent--e4yqM3f.js';
2
+ import { a2 as makePanelTransparent, y as VIcon, al as activeTemplate } from './asWebComponent-DBkwthjq.js';
3
3
  import { mdiViewDashboard } from '@mdi/js';
4
- import { V as VTooltip } from './VTooltip-9810qjB2.js';
4
+ import { V as VTooltip } from './VTooltip-DqyE5_aG.js';
5
5
 
6
6
  const _sfc_main = {
7
7
  __name: 'EodashLayoutSwitcher',
@@ -1,7 +1,7 @@
1
1
  import { onMounted, onUnmounted, watch, nextTick, ref, toRaw, computed, openBlock, createElementBlock, createElementVNode, unref, normalizeStyle } from 'vue';
2
2
  import '@eox/map';
3
3
  import '@eox/map/src/plugins/advancedLayersAndSources';
4
- import { a8 as eoxLayersKey, $ as useSTAcStore, a9 as setMapProjFromCol, aa as posIsSetFromUrl, ab as useOnLayersUpdate, ac as EodashCollection, ad as mapPosition, a4 as mapEl, a3 as mapCompareEl, Z as datetime, a0 as eodashCollections, a5 as eodashCompareCollections, a6 as layerControlFormValue } from './asWebComponent--e4yqM3f.js';
4
+ import { a8 as eoxLayersKey, $ as useSTAcStore, a9 as setMapProjFromCol, aa as posIsSetFromUrl, ab as useOnLayersUpdate, ac as EodashCollection, ad as mapPosition, a4 as mapEl, a3 as mapCompareEl, Z as datetime, a0 as eodashCollections, a5 as eodashCompareCollections, a6 as layerControlFormValue } from './asWebComponent-DBkwthjq.js';
5
5
  import { storeToRefs } from 'pinia';
6
6
  import log from 'loglevel';
7
7
  import { useEventBus } from '@vueuse/core';
@@ -425,7 +425,12 @@ const props = __props;
425
425
 
426
426
  /** @type {import("vue").Ref<Exclude<import("@/types").EodashStyleJson["tooltip"], undefined>>} */
427
427
  const tooltipProperties = ref([]);
428
-
428
+ /** @type {import("@eox/map").EOxMap["controls"]} */
429
+ const controls = {
430
+ Attribution: {
431
+ collapsible: true,
432
+ },
433
+ };
429
434
  const initialCenter = toRaw([
430
435
  mapPosition.value?.[0] ?? props.center?.[0],
431
436
  mapPosition.value?.[1] ?? props.center?.[1],
@@ -553,7 +558,8 @@ return (_ctx, _cache) => {
553
558
  ".animationOptions": animationOptions,
554
559
  ".center": unref(initialCenter),
555
560
  ".zoom": unref(initialZoom),
556
- ".layers": eoxMapLayers.value
561
+ ".layers": eoxMapLayers.value,
562
+ ".controls": controls
557
563
  }, [
558
564
  createElementVNode("eox-map-tooltip", {
559
565
  style: normalizeStyle(tooltipStyles.value),
@@ -1,9 +1,9 @@
1
1
  import { computed, ref, openBlock, createElementBlock, createBlock, unref, createCommentVNode, createVNode, withCtx } from 'vue';
2
- import { _ as _export_sfc, t as useDisplay, a2 as makePanelTransparent, V as VBtn, ae as availableMapProjection, af as changeMapProjection, ag as setActiveTemplate } from './asWebComponent--e4yqM3f.js';
2
+ import { _ as _export_sfc, t as useDisplay, a2 as makePanelTransparent, V as VBtn, ae as availableMapProjection, af as changeMapProjection, ag as setActiveTemplate } from './asWebComponent-DBkwthjq.js';
3
3
  import { mdiMapPlus, mdiEarthBox, mdiCompare } from '@mdi/js';
4
- import ExportState from './ExportState-DNUSRJSJ.js';
5
- import _sfc_main$1 from './PopUp-CEmhdNIj.js';
6
- import _sfc_main$2 from './EodashItemFilter-BR572AaH.js';
4
+ import ExportState from './ExportState-DXw8Dwvk.js';
5
+ import _sfc_main$1 from './PopUp-B12NWJHU.js';
6
+ import _sfc_main$2 from './EodashItemFilter-DN77Uqgg.js';
7
7
 
8
8
  const _sfc_main = {
9
9
  __name: 'EodashMapBtns',
@@ -2,7 +2,7 @@ import { createVNode, watch, onMounted, nextTick, ref, useTemplateRef, computed,
2
2
  import '@eox/chart';
3
3
  import '@eox/drawtools';
4
4
  import '@eox/jsonform';
5
- import { p as propsFactory, b as makeComponentProps, H as makeDimensionProps, c as makeTagProps, g as genericComponent, f as useRtl, J as useDimension, a as useRender, ah as axios, ai as getLayers, a4 as mapEl, aj as extractLayerConfig, a8 as eoxLayersKey, $ as useSTAcStore, ab as useOnLayersUpdate, V as VBtn } from './asWebComponent--e4yqM3f.js';
5
+ import { p as propsFactory, b as makeComponentProps, H as makeDimensionProps, c as makeTagProps, g as genericComponent, f as useRtl, J as useDimension, a as useRender, ah as axios, ai as getLayers, a4 as mapEl, aj as extractLayerConfig, a8 as eoxLayersKey, $ as useSTAcStore, ab as useOnLayersUpdate, V as VBtn } from './asWebComponent-DBkwthjq.js';
6
6
  import { storeToRefs } from 'pinia';
7
7
  import { useEventBus } from '@vueuse/core';
8
8
  import { isMulti } from '@eox/jsonform/src/custom-inputs/spatial/utils';
@@ -723,7 +723,19 @@ const downloadResults = () => {
723
723
  };
724
724
  onMounted(async () => {
725
725
  // wait for the layers to be rendered
726
- if (mapEl.value?.layers.length <= 1) {
726
+ if (mapEl.value?.layers.length > 1) {
727
+ await initProcess({
728
+ //@ts-expect-error TODO
729
+ selectedStac,
730
+ jsonformEl,
731
+ jsonformSchema,
732
+ chartSpec,
733
+ isProcessed,
734
+ processResults,
735
+ loading,
736
+ isPolling,
737
+ });
738
+ } else {
727
739
  layersEvents.once(async () => {
728
740
  await initProcess({
729
741
  //@ts-expect-error TODO
@@ -737,18 +749,6 @@ onMounted(async () => {
737
749
  isPolling,
738
750
  });
739
751
  });
740
- } else {
741
- await initProcess({
742
- //@ts-expect-error TODO
743
- selectedStac,
744
- jsonformEl,
745
- jsonformSchema,
746
- chartSpec,
747
- isProcessed,
748
- processResults,
749
- loading,
750
- isPolling,
751
- });
752
752
  }
753
753
  });
754
754
 
@@ -1,6 +1,6 @@
1
1
  import { openBlock, createElementBlock, createElementVNode, unref } from 'vue';
2
2
  import '@eox/stacinfo';
3
- import { ak as currentUrl } from './asWebComponent--e4yqM3f.js';
3
+ import { ak as currentUrl } from './asWebComponent-DBkwthjq.js';
4
4
 
5
5
  const _hoisted_1 = { class: "flex-grow-1 fill-height overflow-auto" };
6
6
  const _hoisted_2 = [".for", ".allowHtml", ".body", ".featured", ".footer", ".styleOverride", ".header", ".subheader", ".tags"];