@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
@@ -1,9 +1,11 @@
1
- import { withAsyncContext, computed, ref, openBlock, createElementBlock, mergeProps, unref, renderSlot, createElementVNode, toDisplayString, createCommentVNode } from 'vue';
1
+ import { withAsyncContext, computed, ref, watch, openBlock, createElementBlock, mergeProps, unref, createElementVNode, toDisplayString, createCommentVNode, createBlock } from 'vue';
2
2
  import 'color-legend-element';
3
3
  import '@eox/timecontrol';
4
- import { S as mapCompareEl, i as mapEl, T as getColFromLayer } from './helpers-DAVGYl_f.js';
5
- import { _ as _export_sfc, H as useSTAcStore, P as layerControlFormValueCompare, Q as layerControlFormValue, M as eodashCompareCollections, L as eodashCollections } from './asWebComponent-DfULAbpq.js';
4
+ import { a1 as mapCompareEl, n as mapEl, a2 as updateGeoZarrBands, a3 as layerControlFormValueCompare, a4 as layerControlFormValue, a5 as getColFromLayer, P as eodashCompareCollections, S as eodashCollections } from './helpers-CBqIUSXJ.js';
6
5
  import { storeToRefs } from 'pinia';
6
+ import { _ as _export_sfc, H as useSTAcStore, aa as useEmitLayersUpdate } from './asWebComponent-BlFN2lkB.js';
7
+ import _sfc_main$1 from './EodashLayoutSwitcher-iJ8mX1rF.js';
8
+ import { mdiViewDashboard } from '@mdi/js';
7
9
 
8
10
  /**
9
11
  * Taken from jQuery 2.1.3
@@ -1367,35 +1369,53 @@ const bandsEditorInterface = [
1367
1369
  },
1368
1370
  ];
1369
1371
 
1370
- const _style_0 = "eox-layercontrol[data-v-219e33f9]{overflow:auto}";
1372
+ const _style_0 = "eox-layercontrol[data-v-2e9372f7]{overflow:auto}";
1371
1373
 
1372
1374
  const _hoisted_1 = { class: "d-flex flex-column" };
1373
1375
  const _hoisted_2 = ["for", ".customEditorInterfaces"];
1374
1376
  const _hoisted_3 = {
1375
- key: 0,
1376
- class: "mt-2 mb-2"
1377
+ slot: "layerstitle",
1378
+ class: "d-flex justify-space-between ma-2 pa-2 flex-shrink-0"
1377
1379
  };
1380
+ const _hoisted_4 = { key: 0 };
1378
1381
 
1379
1382
 
1380
1383
  const _sfc_main = {
1381
1384
  __name: 'EodashLayerControl',
1382
1385
  props: {
1386
+ /** Which map instance this control is bound to. Use `"second"` in a compare-mode layout. */
1383
1387
  map: {
1384
1388
  /** @type {import("vue").PropType<"first" | "second">} */
1385
1389
  //@ts-expect-error todo
1386
1390
  type: String,
1387
1391
  default: "first",
1388
1392
  },
1393
+ /** Tool tabs shown inside `eox-layercontrol`. Remove entries to hide individual tabs. */
1389
1394
  tools: {
1390
- type: Array,
1395
+ type: /** @type {import("vue").PropType<string[]>} */ (Array),
1391
1396
  default: () => ["datetime", "info", "config", "legend", "opacity"],
1392
1397
  },
1398
+ /** Heading rendered above the layer list. Set to `false` to hide it. */
1393
1399
  title: {
1394
- type: String || Boolean,
1400
+ type: /** @type {import("vue").PropType<string | false>} */ ([
1401
+ String,
1402
+ Boolean,
1403
+ ]),
1395
1404
  default: "Layers",
1396
1405
  },
1406
+ /** CSS custom-property overrides forwarded to the underlying `eox-layercontrol` element via its `style` attribute. */
1397
1407
  cssVars: {
1398
- type: Object,
1408
+ type: /** @type {import("vue").PropType<Record<string, string>>} */ (
1409
+ Object
1410
+ ),
1411
+ default: {},
1412
+ },
1413
+ layoutIcon: {
1414
+ type: String,
1415
+ default: mdiViewDashboard,
1416
+ },
1417
+ layoutTarget: {
1418
+ type: String,
1399
1419
  },
1400
1420
  },
1401
1421
  async setup(__props) {
@@ -1424,7 +1444,12 @@ const config = {
1424
1444
  style: props.cssVars,
1425
1445
  };
1426
1446
 
1447
+ const enableLayoutSwitcher = computed(
1448
+ () => !!props.layoutTarget && !!props.layoutIcon,
1449
+ );
1450
+
1427
1451
  const { selectedCompareStac, selectedStac } = storeToRefs(useSTAcStore());
1452
+
1428
1453
  const showControls = computed(() => {
1429
1454
  if (props.map === "second") {
1430
1455
  return mapCompareEl.value !== null && selectedCompareStac.value !== null;
@@ -1436,12 +1461,23 @@ const eodashCols =
1436
1461
  props.map === "second" ? eodashCompareCollections : eodashCollections;
1437
1462
  const mapElement = props.map === "second" ? mapCompareEl : mapEl;
1438
1463
 
1439
- /** @type { import("vue").Ref<HTMLElement & Record<string,any> | null>} */
1464
+ /** @type { import("vue").Ref<import("@eox/layercontrol").EOxLayerControl | null>} */
1440
1465
  const eoxLayercontrol = ref(null);
1441
1466
 
1467
+ // eox-timecontrol re-fires datetime:updated after layer reassignment;
1468
+ // dedupe by (collectionId, datetime)
1469
+ const processedDatetimes = new Map();
1470
+ watch([selectedStac, selectedCompareStac], () => processedDatetimes.clear());
1471
+
1442
1472
  /** @param {CustomEvent<{layer:import('ol/layer').Layer; datetime:string;}>} evt */
1443
1473
  const handleDatetimeUpdate = async (evt) => {
1444
1474
  const { layer, datetime } = evt.detail;
1475
+ const collectionId = layer.get("id")?.split(";:;")[0] ?? layer.get("id");
1476
+ if (processedDatetimes.get(collectionId) === datetime) return;
1477
+ // First event per collection is eox-timecontrol's mount echo.
1478
+ const isFirstEvent = !processedDatetimes.has(collectionId);
1479
+ processedDatetimes.set(collectionId, datetime);
1480
+ if (isFirstEvent) return;
1445
1481
 
1446
1482
  const ec = await getColFromLayer(eodashCols, layer);
1447
1483
 
@@ -1452,9 +1488,10 @@ const handleDatetimeUpdate = async (evt) => {
1452
1488
  updatedLayers = await ec.updateLayerJson(
1453
1489
  datetime,
1454
1490
  layer.get("id"),
1455
- props.map,
1491
+ mapElement.value?.layers ?? [],
1456
1492
  );
1457
1493
  }
1494
+ if (!updatedLayers?.length) return;
1458
1495
  /** @type {Record<String,any>[] | undefined} */
1459
1496
  const dataLayers = updatedLayers?.find(
1460
1497
  (l) => l?.properties?.id === "AnalysisGroup",
@@ -1466,9 +1503,14 @@ const handleDatetimeUpdate = async (evt) => {
1466
1503
  dl.properties.layerControlExpand = true;
1467
1504
  dl.properties.layerControlToolsExpand = true;
1468
1505
  });
1469
- // assign layers to the map
1470
1506
  /** @type {HTMLElement & Record<string,any>} */
1471
1507
  (mapElement.value).layers = updatedLayers;
1508
+ // Emit after layer assignment so listeners resolve against the new layer.
1509
+ await useEmitLayersUpdate(
1510
+ props.map === "second" ? "compareLayertime:updated" : "layertime:updated",
1511
+ mapElement.value,
1512
+ updatedLayers,
1513
+ );
1472
1514
  }
1473
1515
  };
1474
1516
 
@@ -1491,6 +1533,8 @@ const debouncedHandleDateTime = (evt) => {
1491
1533
  * @param {Event & {detail:{layer:import("ol/layer").Layer;jsonformValue:Record<string,any>}}} evt
1492
1534
  */
1493
1535
  const onLayerConfigChange = (evt) => {
1536
+ updateGeoZarrBands(evt.detail.layer, evt.detail.jsonformValue);
1537
+
1494
1538
  if (props.map === "second") {
1495
1539
  layerControlFormValueCompare.value = evt.detail.jsonformValue;
1496
1540
  } else {
@@ -1503,6 +1547,7 @@ return (_ctx, _cache) => {
1503
1547
  (showControls.value)
1504
1548
  ? (openBlock(), createElementBlock("eox-layercontrol", mergeProps({ key: unref(mapElement) }, config, {
1505
1549
  for: unref(mapElement),
1550
+ ".showLayerZoomState": true,
1506
1551
  ".customEditorInterfaces": unref(bandsEditorInterface),
1507
1552
  "onDatetime:updated": debouncedHandleDateTime,
1508
1553
  toolsAsList: "true",
@@ -1510,15 +1555,18 @@ return (_ctx, _cache) => {
1510
1555
  ref: eoxLayercontrol,
1511
1556
  "on:layerConfig:change": onLayerConfigChange
1512
1557
  }), [
1513
- renderSlot(_ctx.$slots, "layerstitle", {}, () => [
1514
- createElementVNode("div", null, [
1515
- (__props.title)
1516
- ? (openBlock(), createElementBlock("p", _hoisted_3, [
1517
- createElementVNode("strong", null, toDisplayString(__props.title), 1 /* TEXT */)
1518
- ]))
1519
- : createCommentVNode("v-if", true)
1520
- ])
1521
- ], true)
1558
+ createElementVNode("span", _hoisted_3, [
1559
+ (__props.title)
1560
+ ? (openBlock(), createElementBlock("h4", _hoisted_4, toDisplayString(__props.title), 1 /* TEXT */))
1561
+ : createCommentVNode("v-if", true),
1562
+ (enableLayoutSwitcher.value)
1563
+ ? (openBlock(), createBlock(_sfc_main$1, {
1564
+ key: 1,
1565
+ target: __props.layoutTarget,
1566
+ icon: __props.layoutIcon
1567
+ }, null, 8 /* PROPS */, ["target", "icon"]))
1568
+ : createCommentVNode("v-if", true)
1569
+ ])
1522
1570
  ], 48 /* FULL_PROPS, NEED_HYDRATION */, _hoisted_2))
1523
1571
  : createCommentVNode("v-if", true)
1524
1572
  ]))
@@ -1526,6 +1574,6 @@ return (_ctx, _cache) => {
1526
1574
  }
1527
1575
 
1528
1576
  };
1529
- const EodashLayerControl = /*#__PURE__*/_export_sfc(_sfc_main, [['styles',[_style_0]],['__scopeId',"data-v-219e33f9"]]);
1577
+ const EodashLayerControl = /*#__PURE__*/_export_sfc(_sfc_main, [['styles',[_style_0]],['__scopeId',"data-v-2e9372f7"]]);
1530
1578
 
1531
1579
  export { EodashLayerControl as default };
@@ -1,8 +1,8 @@
1
1
  import { ref, openBlock, createElementBlock, unref, createBlock, withCtx, createVNode, mergeProps } from 'vue';
2
- import { D as activeTemplate } from './helpers-DAVGYl_f.js';
2
+ import { J as activeTemplate } from './helpers-CBqIUSXJ.js';
3
3
  import { mdiViewDashboard } from '@mdi/js';
4
- import { G as useDisplay, I as useTransparentPanel, K as VIcon } from './asWebComponent-DfULAbpq.js';
5
- import { V as VTooltip } from './VTooltip-DbBu-ky3.js';
4
+ import { G as useDisplay, I as useTransparentPanel, K as VIcon } from './asWebComponent-BlFN2lkB.js';
5
+ import { V as VTooltip } from './VTooltip-2hAJyEoa.js';
6
6
 
7
7
  const _sfc_main = {
8
8
  __name: 'EodashLayoutSwitcher',