@eodash/eodash 5.6.1 → 5.7.1

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 (133) hide show
  1. package/core/client/components/DashboardLayout.vue +1 -1
  2. package/core/client/components/EodashOverlay.vue +27 -4
  3. package/core/client/composables/DefineEodash.js +0 -1
  4. package/core/client/composables/DefineWidgets.js +3 -1
  5. package/core/client/composables/index.js +6 -2
  6. package/core/client/eodashSTAC/EodashCollection.js +79 -45
  7. package/core/client/eodashSTAC/cql.js +64 -0
  8. package/core/client/eodashSTAC/createLayers.js +192 -125
  9. package/core/client/eodashSTAC/helpers.js +423 -97
  10. package/core/client/eodashSTAC/mosaic.js +416 -0
  11. package/core/client/plugins/axios.js +31 -1
  12. package/core/client/store/actions.js +1 -1
  13. package/core/client/store/stac.js +25 -4
  14. package/core/client/store/states.js +20 -2
  15. package/core/client/types.ts +155 -29
  16. package/core/client/utils/bands-editor/exampleSchema.json +50 -50
  17. package/core/client/utils/index.js +4 -0
  18. package/core/client/utils/states.js +10 -0
  19. package/dist/client/{DashboardLayout-CqMb7OXc.js → DashboardLayout-ePbdvUTE.js} +5 -5
  20. package/dist/client/{DynamicWebComponent-DqKqTf7l.js → DynamicWebComponent-g5SdRbjY.js} +1 -1
  21. package/dist/client/{EodashChart-PkUQfH0k.js → EodashChart-ChrkA5oS.js} +7 -6
  22. package/dist/client/{EodashDatePicker-DLJGdTtX.js → EodashDatePicker-CY1TrsDo.js} +3 -3
  23. package/dist/client/{EodashItemFilter-Dk8KjFcX.js → EodashItemFilter-DzshHDlS.js} +2 -1
  24. package/dist/client/{EodashLayerControl-CC1Cogrn.js → EodashLayerControl-DMCeMkSd.js} +70 -22
  25. package/dist/client/{EodashLayoutSwitcher-5WZYd6rr.js → EodashLayoutSwitcher-iJ8mX1rF.js} +3 -3
  26. package/dist/client/EodashMapBtns-C7Cr7q5Y.js +592 -0
  27. package/dist/client/EodashStacInfo-K7-iuXa7.js +169 -0
  28. package/dist/client/{EodashTools-CGZtTh45.js → EodashTools-BEK7e7JM.js} +4 -4
  29. package/dist/client/{ExportState-Ce0ZnrX_.js → ExportState-CqIzfMYQ.js} +6 -168
  30. package/dist/client/{Footer-CnZqEiop.js → Footer-1P0cmBOZ.js} +1 -1
  31. package/dist/client/{Header-Dr5PBIm8.js → Header-CkkBaBNh.js} +2 -2
  32. package/dist/client/MobileLayout-BPf49kDU.js +118 -0
  33. package/dist/client/{PopUp-DjvE_71e.js → PopUp-DPZq5SWI.js} +4 -168
  34. package/dist/client/{ProcessList-kf3olI7W.js → ProcessList-DuI6WpS1.js} +5 -5
  35. package/dist/client/VDivider-Bj9LG_JV.js +168 -0
  36. package/dist/client/{VImg-Bj6uWt6j.js → VImg-Ddv5OyMz.js} +2 -2
  37. package/dist/client/{VMain-Cm0UmKGi.js → VMain-7yqk_qC3.js} +1 -1
  38. package/dist/client/{VTooltip-DbBu-ky3.js → VTooltip-2hAJyEoa.js} +2 -2
  39. package/dist/client/{WidgetsContainer-CfLnd44U.js → WidgetsContainer-2DOrlwCB.js} +1 -1
  40. package/dist/client/{asWebComponent-DfULAbpq.js → asWebComponent-BlFN2lkB.js} +493 -335
  41. package/dist/client/{async-CIbKXEEe.js → async-B2H8ZwUK.js} +21 -10
  42. package/dist/client/create-layers-config-u_vn5hPk.js +182 -0
  43. package/dist/client/dialog-transition-BrMkMiNa.js +170 -0
  44. package/dist/client/eo-dash.js +1 -1
  45. package/dist/client/{forwardRefs-yj3VWOK5.js → forwardRefs-DAlror6d.js} +8 -87
  46. package/dist/client/{handling-s8xt2JwF.js → handling-B6I1V5eG.js} +123 -85
  47. package/dist/client/{helpers-DAVGYl_f.js → helpers-CBqIUSXJ.js} +3034 -1649
  48. package/dist/client/index-BWq1ZKaV.js +3168 -0
  49. package/dist/client/{index-CYz6dT7K.js → index-CJ9UI3ln.js} +2 -2
  50. package/dist/client/index-DXLz4sFR.js +442 -0
  51. package/dist/client/{index-4TrjfJ32.js → index-DhKU6KqM.js} +230 -231
  52. package/dist/client/{index-Bu8BMA9q.js → index-DjQlbWbJ.js} +70 -83
  53. package/dist/client/material-symbols-outlined.woff2 +0 -0
  54. package/dist/client/material-symbols-rounded.woff2 +0 -0
  55. package/dist/client/material-symbols-sharp.woff2 +0 -0
  56. package/dist/client/material-symbols-subset.woff2 +0 -0
  57. package/dist/client/mosaic-BFYLEwyx.js +455 -0
  58. package/dist/client/templates.js +250 -119
  59. package/dist/client/{transition-DaOsiD4u.js → transition-D_W6Wn9v.js} +1 -1
  60. package/dist/node/cli.js +5 -5
  61. package/dist/node/types.d.ts +4 -0
  62. package/dist/types/core/client/composables/DefineEodash.d.ts +1 -1
  63. package/dist/types/core/client/composables/index.d.ts +1 -3
  64. package/dist/types/core/client/eodashSTAC/EodashCollection.d.ts +62 -31
  65. package/dist/types/core/client/eodashSTAC/cql.d.ts +15 -0
  66. package/dist/types/core/client/eodashSTAC/createLayers.d.ts +44 -25
  67. package/dist/types/core/client/eodashSTAC/helpers.d.ts +78 -18
  68. package/dist/types/core/client/eodashSTAC/mosaic.d.ts +56 -0
  69. package/dist/types/core/client/store/stac.d.ts +31 -7
  70. package/dist/types/core/client/store/states.d.ts +24 -2
  71. package/dist/types/core/client/types.d.ts +131 -25
  72. package/dist/types/core/client/utils/states.d.ts +12 -0
  73. package/dist/types/templates/baseConfig.d.ts +1 -88
  74. package/dist/types/templates/compare.d.ts +32 -3
  75. package/dist/types/templates/expert.d.ts +18 -0
  76. package/dist/types/templates/explore.d.ts +9 -1
  77. package/dist/types/templates/lite.d.ts +11 -0
  78. package/dist/types/widgets/EodashChart.vue.d.ts +5 -3
  79. package/dist/types/widgets/EodashItemCatalog/index.vue.d.ts +129 -2
  80. package/dist/types/widgets/EodashItemCatalog/methods/filters.d.ts +28 -6
  81. package/dist/types/widgets/EodashItemCatalog/methods/handlers.d.ts +17 -4
  82. package/dist/types/widgets/EodashItemCatalog/methods/map.d.ts +16 -4
  83. package/dist/types/widgets/EodashLayerControl.vue.d.ts +36 -17
  84. package/dist/types/widgets/EodashMap/EodashMapBtns.vue.d.ts +23 -10
  85. package/dist/types/widgets/EodashMap/index.vue.d.ts +91 -35
  86. package/dist/types/widgets/EodashMap/methods/create-layers-config.d.ts +1 -8
  87. package/dist/types/widgets/EodashMap/methods/index.d.ts +5 -1
  88. package/dist/types/widgets/EodashMap/methods/use-map-loading.d.ts +1 -0
  89. package/dist/types/widgets/EodashProcess/index.vue.d.ts +5 -3
  90. package/dist/types/widgets/EodashProcess/methods/composables.d.ts +1 -1
  91. package/dist/types/widgets/EodashProcess/methods/handling.d.ts +13 -8
  92. package/dist/types/widgets/EodashProcess/states.d.ts +1 -1
  93. package/dist/types/widgets/EodashStacInfo.vue.d.ts +20 -0
  94. package/dist/types/widgets/EodashTimeSlider/index.vue.d.ts +54 -0
  95. package/dist/types/widgets/EodashTimeSlider/methods/index.d.ts +34 -0
  96. package/dist/types/widgets/EodashTimeSlider/types.d.ts +52 -0
  97. package/dist/types/widgets/EodashTools.vue.d.ts +5 -5
  98. package/package.json +46 -46
  99. package/templates/baseConfig.js +36 -6
  100. package/templates/compare.js +62 -7
  101. package/templates/expert.js +23 -0
  102. package/templates/explore.js +11 -5
  103. package/templates/lite.js +14 -0
  104. package/widgets/EodashChart.vue +1 -0
  105. package/widgets/EodashItemCatalog/index.vue +363 -35
  106. package/widgets/EodashItemCatalog/methods/filters.js +134 -70
  107. package/widgets/EodashItemCatalog/methods/handlers.js +113 -19
  108. package/widgets/EodashItemCatalog/methods/map.js +142 -28
  109. package/widgets/EodashLayerControl.vue +64 -14
  110. package/widgets/EodashMap/EodashMapBtns.vue +153 -47
  111. package/widgets/EodashMap/index.vue +101 -105
  112. package/widgets/EodashMap/methods/btns.js +37 -5
  113. package/widgets/EodashMap/methods/create-layers-config.js +18 -16
  114. package/widgets/EodashMap/methods/index.js +89 -8
  115. package/widgets/EodashMap/methods/use-map-loading.js +52 -0
  116. package/widgets/EodashProcess/index.vue +2 -1
  117. package/widgets/EodashProcess/methods/async.js +19 -8
  118. package/widgets/EodashProcess/methods/composables.js +63 -77
  119. package/widgets/EodashProcess/methods/custom-endpoints/chart/sentinelhub-endpoint.js +9 -5
  120. package/widgets/EodashProcess/methods/custom-endpoints/chart/veda-endpoint.js +7 -4
  121. package/widgets/EodashProcess/methods/handling.js +105 -72
  122. package/widgets/EodashProcess/states.js +1 -1
  123. package/widgets/EodashStacInfo.vue +64 -2
  124. package/widgets/EodashTimeSlider/index.vue +208 -0
  125. package/widgets/EodashTimeSlider/methods/index.js +236 -0
  126. package/widgets/EodashTimeSlider/types.ts +54 -0
  127. package/dist/client/EodashMapBtns-BHrSDNoC.js +0 -435
  128. package/dist/client/EodashStacInfo-B90wobPc.js +0 -107
  129. package/dist/client/EodashTimeSlider-5vm7F3ju.js +0 -53
  130. package/dist/client/MobileLayout-DyMjaeif.js +0 -118
  131. package/dist/client/index-CugS__t5.js +0 -570
  132. package/dist/types/widgets/EodashTimeSlider.vue.d.ts +0 -15
  133. package/widgets/EodashTimeSlider.vue +0 -40
@@ -5,30 +5,28 @@
5
5
  class="primary small circle small-elevate"
6
6
  @click="onMapZoomIn"
7
7
  >
8
- <i class="small"
9
- ><svg viewBox="0 0 24 24"><path :d="mdiPlus" /></svg>
8
+ <i class="small">
9
+ <svg viewBox="0 0 24 24"><path :d="mdiPlus"></path></svg>
10
10
  </i>
11
11
  <div class="tooltip left">Zoom in</div>
12
12
  </button>
13
-
14
13
  <button
15
14
  v-if="enableZoom && !isGlobe"
16
15
  class="primary small circle small-elevate"
17
16
  @click="onMapZoomOut"
18
17
  >
19
- <i class="small"
20
- ><svg viewBox="0 0 24 24"><path :d="mdiMinus" /></svg>
18
+ <i class="small">
19
+ <svg viewBox="0 0 24 24"><path :d="mdiMinus"></path></svg>
21
20
  </i>
22
21
  <div class="tooltip left">Zoom out</div>
23
22
  </button>
24
-
25
23
  <button
26
24
  v-if="exportMap"
27
25
  class="primary small circle small-elevate"
28
26
  @click="showMapState = !showMapState"
29
27
  >
30
- <i class="small"
31
- ><svg viewBox="0 0 24 24"><path :d="mdiMapPlus" /></svg>
28
+ <i class="small">
29
+ <svg viewBox="0 0 24 24"><path :d="mdiMapPlus"></path></svg>
32
30
  </i>
33
31
  <div class="tooltip left">Extract storytelling configuration</div>
34
32
  </button>
@@ -39,8 +37,8 @@
39
37
  class="primary small circle small-elevate"
40
38
  @click="changeMapProjection(availableMapProjection)"
41
39
  >
42
- <i class="small"
43
- ><svg viewBox="0 0 24 24"><path :d="mdiEarthBox" /></svg>
40
+ <i class="small">
41
+ <svg viewBox="0 0 24 24"><path :d="mdiEarthBox"></path></svg>
44
42
  </i>
45
43
  <div class="tooltip left">Change map projection</div>
46
44
  </button>
@@ -49,51 +47,77 @@
49
47
  class="primary small circle small-elevate"
50
48
  @click="onCompareClick(compareIndicators)"
51
49
  >
52
- <i class="small"
53
- ><svg viewBox="0 0 24 24"><path :d="compareIcon" /></svg>
50
+ <i class="small">
51
+ <svg viewBox="0 0 24 24"><path :d="compareIcon"></path></svg>
54
52
  </i>
55
53
  <div class="tooltip left">Compare mode</div>
56
54
  </button>
57
55
  <button
58
- v-if="backToPOIs && (poi || comparePoi)"
56
+ v-if="enableGlobe && !isInCompareMode"
59
57
  class="primary small circle small-elevate"
60
- @click="loadPOiIndicator()"
58
+ @click="switchGlobe"
61
59
  >
62
60
  <i class="small"
63
61
  ><svg viewBox="0 0 24 24">
64
- <path :d="mdiStarFourPointsCircleOutline" />
62
+ <path :d="mdiEarth" />
65
63
  </svg>
66
64
  </i>
67
- <div class="tooltip left">Back to POIs</div>
65
+ <div class="tooltip left">
66
+ {{ isGlobe ? "switch to 2D" : "switch to 3D" }}
67
+ </div>
68
68
  </button>
69
69
  <button
70
- v-if="enableGlobe && !isInCompareMode"
70
+ v-if="enableFeedback && eodash?.brand?.feedback"
71
71
  class="primary small circle small-elevate"
72
- @click="switchGlobe"
72
+ @click="showFeedback = !showFeedback"
73
73
  >
74
74
  <i class="small"
75
75
  ><svg viewBox="0 0 24 24">
76
- <path :d="mdiEarth" />
76
+ <path :d="mdiMessageQuestion" />
77
77
  </svg>
78
78
  </i>
79
- <div class="tooltip left">
80
- {{ isGlobe ? "switch to 2D" : "switch to 3D" }}
81
- </div>
79
+ <div class="tooltip left">Provide Feedback</div>
82
80
  </button>
83
- <eox-geosearch
81
+ <div
82
+ v-if="showFeedback && enableFeedback && eodash?.brand?.feedback"
83
+ class="feedback-container small-elevate"
84
+ >
85
+ <eox-feedback
86
+ :endpoint="eodash?.brand?.feedback?.endpoint"
87
+ .schema="eodash?.brand?.feedback?.schema"
88
+ @close="showFeedback = false"
89
+ ></eox-feedback>
90
+ </div>
91
+ <button
84
92
  v-if="mapEl && !isGlobe && enableSearch"
85
- :for="mapEl"
86
- :endpoint="opencageUrl"
87
- :params="searchParams"
88
- class="geosearch-detached"
89
- label="Search"
90
- small
91
- button
92
- list-direction="left"
93
- results-direction="down"
94
- tooltip="Search"
95
- tooltip-direction="left"
96
- ></eox-geosearch>
93
+ class="primary small circle small-elevate"
94
+ >
95
+ <eox-geosearch
96
+ :for="mapEl"
97
+ :endpoint="opencageUrl"
98
+ :params="searchParams"
99
+ class="geosearch-detached"
100
+ label="Search"
101
+ small
102
+ button
103
+ list-direction="left"
104
+ results-direction="down"
105
+ tooltip="Search"
106
+ tooltip-direction="left"
107
+ ></eox-geosearch>
108
+ </button>
109
+ <button
110
+ v-if="backToPOIs && (poi || comparePoi)"
111
+ class="primary small circle small-elevate"
112
+ @click="loadPOiIndicator()"
113
+ >
114
+ <i class="small">
115
+ <svg viewBox="0 0 24 24">
116
+ <path :d="mdiStarFourPointsCircleOutline"></path>
117
+ </svg>
118
+ </i>
119
+ <div class="tooltip left">Back to POIs</div>
120
+ </button>
97
121
  <PopUp
98
122
  v-model="showCompareIndicators"
99
123
  :maxWidth="popupWidth"
@@ -104,13 +128,33 @@
104
128
  <EodashItemFilter
105
129
  v-bind="itemFilterConfig"
106
130
  :enableCompare="true"
107
- @select="onSelectCompareIndicator"
131
+ @select="onSelectCompareIndicator(compareIndicators)"
108
132
  />
109
133
  </PopUp>
134
+ <v-alert
135
+ v-if="showMosaicHint"
136
+ class="mosaic-hint pa-2"
137
+ color="secondary"
138
+ type="info"
139
+ variant="elevated"
140
+ density="compact"
141
+ elevation="4"
142
+ >
143
+ <template v-if="showItemViewHint">
144
+ Viewing individual item —
145
+ <a class="mosaic-hint-link" @click.prevent="returnToOverview.emit()">
146
+ Back to overview
147
+ </a>
148
+ </template>
149
+ <template v-else-if="showZoomHint">Zoom in to explore the data</template>
150
+ <template v-else-if="showNoDataHint">
151
+ No data here - pan or change filters
152
+ </template>
153
+ </v-alert>
110
154
  </div>
111
155
  </template>
112
156
  <script setup>
113
- import { useTransparentPanel } from "@/composables";
157
+ import { useTransparentPanel, useEodash } from "@/composables";
114
158
  import { changeMapProjection } from "@/store/actions";
115
159
  import {
116
160
  activeTemplate,
@@ -118,8 +162,10 @@ import {
118
162
  comparePoi,
119
163
  isGlobe,
120
164
  mapEl,
165
+ mapPosition,
121
166
  poi,
122
167
  } from "@/store/states";
168
+ import { useMosaicState, normalizeGlobeZoom } from "@/eodashSTAC/mosaic";
123
169
  import {
124
170
  mdiCompare,
125
171
  mdiCompareRemove,
@@ -129,6 +175,7 @@ import {
129
175
  mdiPlus,
130
176
  mdiStarFourPointsCircleOutline,
131
177
  mdiEarth,
178
+ mdiMessageQuestion,
132
179
  } from "@mdi/js";
133
180
  import ExportState from "^/ExportState.vue";
134
181
  import { computed, ref } from "vue";
@@ -146,6 +193,12 @@ import {
146
193
  } from "./methods/btns";
147
194
  import "@eox/geosearch";
148
195
 
196
+ if (!customElements.get("eox-feedback")) {
197
+ //@ts-expect-error will be fixed in https://github.com/EOX-A/EOxElements/pull/2238
198
+ await import("@eox/feedback");
199
+ }
200
+ const eodash = useEodash();
201
+
149
202
  const {
150
203
  compareIndicators,
151
204
  changeProjection,
@@ -155,6 +208,7 @@ const {
155
208
  enableZoom,
156
209
  searchParams,
157
210
  enableGlobe,
211
+ enableFeedback,
158
212
  } = defineProps({
159
213
  exportMap: {
160
214
  type: Boolean,
@@ -165,11 +219,13 @@ const {
165
219
  default: true,
166
220
  },
167
221
  compareIndicators: {
168
- /** @type {import("vue").PropType<boolean | {
169
- compareTemplate?:string;
170
- fallbackTemplate?:string;
171
- itemFilterConfig?:Partial<InstanceType<import("./EodashItemFilter.vue").default>["$props"]>
172
- }> }*/
222
+ /**
223
+ * @type {import("vue").PropType<boolean | {
224
+ * compareTemplate?:string;
225
+ * fallbackTemplate?:string;
226
+ * itemFilterConfig?:Partial<InstanceType<import("./EodashItemFilter.vue").default>["$props"]>
227
+ * }> }
228
+ */
173
229
  type: [Boolean, Object],
174
230
  default: true,
175
231
  },
@@ -193,6 +249,10 @@ const {
193
249
  type: Boolean,
194
250
  default: true,
195
251
  },
252
+ enableFeedback: {
253
+ type: Boolean,
254
+ default: true,
255
+ },
196
256
  });
197
257
 
198
258
  const { smAndDown } = useDisplay();
@@ -200,6 +260,7 @@ const popupWidth = computed(() => (smAndDown.value ? "80%" : "70%"));
200
260
  const popupHeight = computed(() => (smAndDown.value ? "90%" : "70%"));
201
261
 
202
262
  const showMapState = ref(false);
263
+ const showFeedback = ref(false);
203
264
  const isInCompareMode = computed(
204
265
  () =>
205
266
  activeTemplate.value ===
@@ -232,6 +293,32 @@ useTransparentPanel(rootRef);
232
293
 
233
294
  const opencageApiKey = process.env.EODASH_OPENCAGE || "NO_KEY_FOUND";
234
295
  const opencageUrl = `https://api.opencagedata.com/geocode/v1/json?key=${opencageApiKey}`;
296
+
297
+ const {
298
+ latestLayer,
299
+ isItemView,
300
+ visibilityThreshold,
301
+ returnToOverview,
302
+ hasDataInView,
303
+ } = useMosaicState();
304
+
305
+ const showItemViewHint = computed(
306
+ () => isItemView.value && !!latestLayer.value,
307
+ );
308
+
309
+ const showZoomHint = computed(() => {
310
+ if (!latestLayer.value || isItemView.value) return false;
311
+ const rawZ = mapPosition.value?.[2] ?? 4;
312
+ return normalizeGlobeZoom(rawZ) < visibilityThreshold.value;
313
+ });
314
+
315
+ const showNoDataHint = computed(
316
+ () => !!latestLayer.value && !isItemView.value && !hasDataInView.value,
317
+ );
318
+
319
+ const showMosaicHint = computed(
320
+ () => showItemViewHint.value || showZoomHint.value || showNoDataHint.value,
321
+ );
235
322
  </script>
236
323
 
237
324
  <style scoped>
@@ -246,16 +333,35 @@ const opencageUrl = `https://api.opencagedata.com/geocode/v1/json?key=${opencage
246
333
  margin-bottom: 5px;
247
334
  background-color: var(--primary);
248
335
  }
336
+
337
+ .feedback-container {
338
+ position: absolute;
339
+ right: 70px;
340
+ pointer-events: auto;
341
+ z-index: 20;
342
+ border-radius: 8px;
343
+ min-width: 300px;
344
+ }
345
+
249
346
  /* Make sure buttons have pointer event */
250
347
  .geosearch-detached {
251
348
  pointer-events: auto !important;
252
349
  }
253
350
 
254
- /* Container constraints removal */
255
- eox-geosearch {
256
- position: relative !important;
257
- width: 40px;
258
- overflow: visible !important;
351
+ .mosaic-hint {
352
+ position: fixed;
353
+ left: 50%;
354
+ transform: translateX(-50%);
259
355
  z-index: 10;
356
+ opacity: 0.8;
357
+ border-radius: 8px;
358
+ pointer-events: auto;
359
+ }
360
+
361
+ .mosaic-hint-link {
362
+ color: inherit;
363
+ cursor: pointer;
364
+ text-decoration: underline;
365
+ pointer-events: auto;
260
366
  }
261
367
  </style>