@eodash/eodash 5.7.0 → 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 (113) hide show
  1. package/core/client/components/EodashOverlay.vue +27 -4
  2. package/core/client/composables/DefineEodash.js +0 -1
  3. package/core/client/composables/DefineWidgets.js +3 -1
  4. package/core/client/eodashSTAC/EodashCollection.js +74 -20
  5. package/core/client/eodashSTAC/cql.js +64 -0
  6. package/core/client/eodashSTAC/createLayers.js +169 -116
  7. package/core/client/eodashSTAC/helpers.js +391 -98
  8. package/core/client/eodashSTAC/mosaic.js +416 -0
  9. package/core/client/plugins/axios.js +31 -1
  10. package/core/client/store/actions.js +1 -1
  11. package/core/client/store/stac.js +25 -4
  12. package/core/client/store/states.js +20 -2
  13. package/core/client/types.ts +147 -28
  14. package/core/client/utils/bands-editor/exampleSchema.json +50 -50
  15. package/core/client/utils/states.js +10 -0
  16. package/dist/client/{DashboardLayout-kRsmsNW5.js → DashboardLayout-ePbdvUTE.js} +2 -2
  17. package/dist/client/{DynamicWebComponent-CnKhYo0K.js → DynamicWebComponent-g5SdRbjY.js} +1 -1
  18. package/dist/client/{EodashChart-CLDqE93C.js → EodashChart-ChrkA5oS.js} +7 -6
  19. package/dist/client/{EodashDatePicker-CMPDT-ce.js → EodashDatePicker-CY1TrsDo.js} +3 -3
  20. package/dist/client/{EodashItemFilter-BpdA8QQa.js → EodashItemFilter-DzshHDlS.js} +2 -1
  21. package/dist/client/{EodashLayerControl-BHpDA4_0.js → EodashLayerControl-DMCeMkSd.js} +50 -20
  22. package/dist/client/{EodashLayoutSwitcher-B1fRUt7G.js → EodashLayoutSwitcher-iJ8mX1rF.js} +3 -3
  23. package/dist/client/{EodashMapBtns-Cpned0tc.js → EodashMapBtns-C7Cr7q5Y.js} +200 -86
  24. package/dist/client/EodashStacInfo-K7-iuXa7.js +169 -0
  25. package/dist/client/{EodashTools-1zHz26gv.js → EodashTools-BEK7e7JM.js} +4 -4
  26. package/dist/client/{ExportState-DbOm8hBI.js → ExportState-CqIzfMYQ.js} +6 -168
  27. package/dist/client/{Footer-BKg-VVkj.js → Footer-1P0cmBOZ.js} +1 -1
  28. package/dist/client/{Header-DCrwCvmY.js → Header-CkkBaBNh.js} +2 -2
  29. package/dist/client/{MobileLayout-vWSHpluo.js → MobileLayout-BPf49kDU.js} +2 -2
  30. package/dist/client/{PopUp-9uimfK49.js → PopUp-DPZq5SWI.js} +4 -168
  31. package/dist/client/{ProcessList-CTTIZa06.js → ProcessList-DuI6WpS1.js} +5 -5
  32. package/dist/client/VDivider-Bj9LG_JV.js +168 -0
  33. package/dist/client/{VImg-CrmB76ZY.js → VImg-Ddv5OyMz.js} +2 -2
  34. package/dist/client/{VMain-OKZNpcEG.js → VMain-7yqk_qC3.js} +1 -1
  35. package/dist/client/{VTooltip-CJw2FyWk.js → VTooltip-2hAJyEoa.js} +2 -2
  36. package/dist/client/{WidgetsContainer-BaWOnE5R.js → WidgetsContainer-2DOrlwCB.js} +1 -1
  37. package/dist/client/{asWebComponent-BHWpMuE3.js → asWebComponent-BlFN2lkB.js} +456 -306
  38. package/dist/client/{async-DSKj6g1f.js → async-B2H8ZwUK.js} +2 -2
  39. package/dist/client/{create-layers-config-CBoYedqB.js → create-layers-config-u_vn5hPk.js} +17 -17
  40. package/dist/client/dialog-transition-BrMkMiNa.js +170 -0
  41. package/dist/client/eo-dash.js +1 -1
  42. package/dist/client/{forwardRefs-DH51zPUr.js → forwardRefs-DAlror6d.js} +8 -87
  43. package/dist/client/{handling-BrcDDlgS.js → handling-B6I1V5eG.js} +3 -3
  44. package/dist/client/{helpers-DjZVl_WF.js → helpers-CBqIUSXJ.js} +794 -182
  45. package/dist/client/index-BWq1ZKaV.js +3168 -0
  46. package/dist/client/{index-CUjl-ZsI.js → index-CJ9UI3ln.js} +2 -2
  47. package/dist/client/{index-CSG_JoOA.js → index-DXLz4sFR.js} +62 -56
  48. package/dist/client/{index-1JKE68n3.js → index-DhKU6KqM.js} +211 -67
  49. package/dist/client/{index-Cu3-13Xg.js → index-DjQlbWbJ.js} +7 -6
  50. package/dist/client/mosaic-BFYLEwyx.js +455 -0
  51. package/dist/client/templates.js +250 -119
  52. package/dist/client/{transition-OHcz5Qq1.js → transition-D_W6Wn9v.js} +1 -1
  53. package/dist/node/cli.js +5 -5
  54. package/dist/node/types.d.ts +4 -0
  55. package/dist/types/core/client/composables/DefineEodash.d.ts +1 -1
  56. package/dist/types/core/client/eodashSTAC/EodashCollection.d.ts +57 -25
  57. package/dist/types/core/client/eodashSTAC/cql.d.ts +15 -0
  58. package/dist/types/core/client/eodashSTAC/createLayers.d.ts +42 -23
  59. package/dist/types/core/client/eodashSTAC/helpers.d.ts +77 -18
  60. package/dist/types/core/client/eodashSTAC/mosaic.d.ts +56 -0
  61. package/dist/types/core/client/store/stac.d.ts +31 -7
  62. package/dist/types/core/client/store/states.d.ts +24 -2
  63. package/dist/types/core/client/types.d.ts +123 -24
  64. package/dist/types/core/client/utils/states.d.ts +12 -0
  65. package/dist/types/templates/baseConfig.d.ts +1 -100
  66. package/dist/types/templates/compare.d.ts +32 -3
  67. package/dist/types/templates/expert.d.ts +18 -0
  68. package/dist/types/templates/explore.d.ts +9 -1
  69. package/dist/types/templates/lite.d.ts +11 -0
  70. package/dist/types/widgets/EodashChart.vue.d.ts +5 -3
  71. package/dist/types/widgets/EodashItemCatalog/index.vue.d.ts +129 -2
  72. package/dist/types/widgets/EodashItemCatalog/methods/filters.d.ts +28 -6
  73. package/dist/types/widgets/EodashItemCatalog/methods/handlers.d.ts +17 -4
  74. package/dist/types/widgets/EodashItemCatalog/methods/map.d.ts +16 -4
  75. package/dist/types/widgets/EodashLayerControl.vue.d.ts +35 -16
  76. package/dist/types/widgets/EodashMap/EodashMapBtns.vue.d.ts +14 -10
  77. package/dist/types/widgets/EodashMap/index.vue.d.ts +86 -37
  78. package/dist/types/widgets/EodashMap/methods/create-layers-config.d.ts +1 -1
  79. package/dist/types/widgets/EodashMap/methods/index.d.ts +5 -1
  80. package/dist/types/widgets/EodashMap/methods/use-map-loading.d.ts +1 -0
  81. package/dist/types/widgets/EodashProcess/index.vue.d.ts +5 -3
  82. package/dist/types/widgets/EodashProcess/states.d.ts +1 -1
  83. package/dist/types/widgets/EodashStacInfo.vue.d.ts +20 -0
  84. package/dist/types/widgets/EodashTimeSlider/index.vue.d.ts +20 -0
  85. package/dist/types/widgets/EodashTimeSlider/methods/index.d.ts +3 -8
  86. package/dist/types/widgets/EodashTimeSlider/types.d.ts +6 -16
  87. package/dist/types/widgets/EodashTools.vue.d.ts +5 -5
  88. package/package.json +33 -33
  89. package/templates/baseConfig.js +36 -6
  90. package/templates/compare.js +62 -7
  91. package/templates/expert.js +23 -0
  92. package/templates/explore.js +11 -5
  93. package/templates/lite.js +14 -0
  94. package/widgets/EodashChart.vue +1 -0
  95. package/widgets/EodashItemCatalog/index.vue +363 -35
  96. package/widgets/EodashItemCatalog/methods/filters.js +134 -70
  97. package/widgets/EodashItemCatalog/methods/handlers.js +113 -19
  98. package/widgets/EodashItemCatalog/methods/map.js +142 -28
  99. package/widgets/EodashLayerControl.vue +42 -11
  100. package/widgets/EodashMap/EodashMapBtns.vue +109 -48
  101. package/widgets/EodashMap/index.vue +89 -105
  102. package/widgets/EodashMap/methods/btns.js +37 -5
  103. package/widgets/EodashMap/methods/create-layers-config.js +16 -16
  104. package/widgets/EodashMap/methods/index.js +71 -8
  105. package/widgets/EodashMap/methods/use-map-loading.js +52 -0
  106. package/widgets/EodashProcess/index.vue +1 -0
  107. package/widgets/EodashProcess/states.js +1 -1
  108. package/widgets/EodashStacInfo.vue +64 -2
  109. package/widgets/EodashTimeSlider/index.vue +58 -2
  110. package/widgets/EodashTimeSlider/methods/index.js +5 -48
  111. package/widgets/EodashTimeSlider/types.ts +7 -17
  112. package/dist/client/EodashStacInfo-BQspAHKH.js +0 -107
  113. package/dist/client/index-5Jhsa8Xe.js +0 -570
@@ -1,5 +1,9 @@
1
+ export { useMapLoading } from "./use-map-loading";
1
2
  export function useHandleMapMoveEnd(mapElement: import("vue").Ref<(HTMLElement & Record<string, any> & {
2
3
  map: import("ol").Map;
3
4
  }) | null>, mapPosition: import("vue").Ref<(number | undefined)[]>): void;
4
- export function useInitMap(mapElement: import("vue").Ref<import("@eox/map").EOxMap | null>, selectedIndicator: import("vue").Ref<import("stac-ts").StacCollection | null>, eodashCols: import("../../../core/client/eodashSTAC/EodashCollection").EodashCollection[], datetime: import("vue").Ref<string>, mapLayers: import("vue").Ref<Record<string, any>[]>, partnerMap: import("vue").Ref<import("@eox/map").EOxMap | null>, zoomToExtent: boolean, selectedItem?: import("vue").Ref<import("stac-ts").StacItem | import("stac-ts").StacLink | null>): void;
5
+ export function useInitMap(mapElement: import("vue").Ref<import("@eox/map").EOxMap | null>, selectedIndicator: import("vue").Ref<import("stac-ts").StacCollection | null>, eodashCols: import("../../../core/client/eodashSTAC/EodashCollection").EodashCollection[], datetime: import("vue").Ref<string>, mapLayers: import("vue").Ref<Record<string, any>[]>, partnerMap: import("vue").Ref<import("@eox/map").EOxMap | null>, zoomToExtent: boolean, selectedItem?: import("vue").Ref<import("stac-ts").StacItem | import("stac-ts").StacLink | null>, defaultBaseLayers?: Record<string, any>[]): void;
5
6
  export function useUpdateTooltipProperties(eodashCols: import("../../../core/client/eodashSTAC/EodashCollection").EodashCollection[], tooltipProperties: import("vue").Ref<Exclude<import("../../../core/client/types").EodashStyleJson["tooltip"], undefined>>, enableCompare?: boolean): void;
7
+ import { useEmitLayersUpdate } from "../../../core/client/composables";
8
+ import { useOnLayersUpdate } from "../../../core/client/composables";
9
+ export { useEmitLayersUpdate, useOnLayersUpdate };
@@ -0,0 +1 @@
1
+ export function useMapLoading(mapElement: import("vue").Ref<import("@eox/map").EOxMap | null>, compareMapElement: import("vue").Ref<import("@eox/map").EOxMap | null>): void;
@@ -6,7 +6,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
6
6
  default: boolean;
7
7
  };
8
8
  vegaEmbedOptions: {
9
- type: ObjectConstructor;
9
+ /** @type {import("vue").PropType<import("vega-embed").EmbedOptions>} */
10
+ type: import("vue").PropType<import("vega-embed").EmbedOptions>;
10
11
  default(): {
11
12
  actions: boolean;
12
13
  };
@@ -17,12 +18,13 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
17
18
  default: boolean;
18
19
  };
19
20
  vegaEmbedOptions: {
20
- type: ObjectConstructor;
21
+ /** @type {import("vue").PropType<import("vega-embed").EmbedOptions>} */
22
+ type: import("vue").PropType<import("vega-embed").EmbedOptions>;
21
23
  default(): {
22
24
  actions: boolean;
23
25
  };
24
26
  };
25
27
  }>> & Readonly<{}>, {
26
28
  enableCompare: boolean;
27
- vegaEmbedOptions: Record<string, any>;
29
+ vegaEmbedOptions: import("vega-embed").EmbedOptions<string, import("vega-typings").Renderers>;
28
30
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -2,7 +2,7 @@
2
2
  * The list of job result from the server
3
3
  * {job_start_datetime: string, job_end_datetime: string,status: string}
4
4
  * @type {import("vue").Ref<import("./types").AsyncJob[]>}
5
- **/
5
+ */
6
6
  export const jobs: import("vue").Ref<import("./types").AsyncJob[]>;
7
7
  /**
8
8
  * The list of jobs results from the server for the compare map
@@ -1,6 +1,15 @@
1
1
  declare const _default: typeof __VLS_export;
2
2
  export default _default;
3
3
  declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
+ level: {
5
+ type: import("vue").PropType<"item" | "collection">;
6
+ default: string;
7
+ validator: (v: string) => boolean;
8
+ };
9
+ styleOverride: {
10
+ type: StringConstructor;
11
+ default: string;
12
+ };
4
13
  allowHtml: {
5
14
  type: BooleanConstructor;
6
15
  default: boolean;
@@ -81,6 +90,15 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
81
90
  default: () => string[];
82
91
  };
83
92
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
93
+ level: {
94
+ type: import("vue").PropType<"item" | "collection">;
95
+ default: string;
96
+ validator: (v: string) => boolean;
97
+ };
98
+ styleOverride: {
99
+ type: StringConstructor;
100
+ default: string;
101
+ };
84
102
  allowHtml: {
85
103
  type: BooleanConstructor;
86
104
  default: boolean;
@@ -173,6 +191,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
173
191
  key: string;
174
192
  filter?: (item: any) => boolean;
175
193
  })[];
194
+ styleOverride: string;
195
+ level: "collection" | "item";
176
196
  allowHtml: boolean;
177
197
  tags: (string | {
178
198
  key: string;
@@ -10,6 +10,15 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
10
10
  type: BooleanConstructor;
11
11
  default: boolean;
12
12
  };
13
+ useMosaic: {
14
+ type: BooleanConstructor;
15
+ default: boolean;
16
+ };
17
+ mosaicIndicators: {
18
+ /** @type {import("vue").PropType<string[]>} */
19
+ type: import("vue").PropType<string[]>;
20
+ default: () => never[];
21
+ };
13
22
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
14
23
  filters: {
15
24
  /** @type {import("vue").PropType<import("@eox/itemfilter").EOxItemFilter["filterProperties"]>} */
@@ -20,6 +29,15 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
20
29
  type: BooleanConstructor;
21
30
  default: boolean;
22
31
  };
32
+ useMosaic: {
33
+ type: BooleanConstructor;
34
+ default: boolean;
35
+ };
36
+ mosaicIndicators: {
37
+ /** @type {import("vue").PropType<string[]>} */
38
+ type: import("vue").PropType<string[]>;
39
+ default: () => never[];
40
+ };
23
41
  }>> & Readonly<{}>, {
24
42
  animate: boolean;
25
43
  filters: {
@@ -31,4 +49,6 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
31
49
  format?: string;
32
50
  state?: any;
33
51
  }[];
52
+ useMosaic: boolean;
53
+ mosaicIndicators: string[];
34
54
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -3,9 +3,9 @@
3
3
  * @param {[string, string]} selectedRange
4
4
  * @param {import("../types").TimelineExportEventDetail["selectedRangeItems"]} selectedRangeItems
5
5
  * @param {import("vue").Ref<import("stac-ts").StacCollection|null>} selectedStac
6
- * @param {Record<string, import("../types").Filter>} filters
6
+ * @param {import("../../../core/client/types").ItemFilterFilters} filters
7
7
  */
8
- export function createAnimationLayers(stacEndpoint: string, selectedRange: [string, string], selectedRangeItems: import("../types").TimelineExportEventDetail["selectedRangeItems"], selectedStac: import("vue").Ref<import("stac-ts").StacCollection | null>, filters: Record<string, import("../types").Filter>): Promise<{
8
+ export function createAnimationLayers(stacEndpoint: string, selectedRange: [string, string], selectedRangeItems: import("../types").TimelineExportEventDetail["selectedRangeItems"], selectedStac: import("vue").Ref<import("stac-ts").StacCollection | null>, filters: import("../../../core/client/types").ItemFilterFilters): Promise<{
9
9
  layers: Record<string, any>[];
10
10
  date: string;
11
11
  }[]>;
@@ -31,9 +31,4 @@ export function getHiddenLayers(layers: import("@eox/map").EoxLayer[]): {
31
31
  * @returns {import("@eox/map").EoxLayer[]}
32
32
  */
33
33
  export function restoreLayersVisibility(layers: import("@eox/map").EoxLayer[]): import("@eox/map").EoxLayer[];
34
- /**
35
- * Build STAC API filter string from TimeSlider filters
36
- * @param {Record<string, import("../types").Filter>} filters
37
- * @returns {string}
38
- */
39
- export function buildStacFilters(filters: Record<string, import("../types").Filter>): string;
34
+ export { useScheduleMosaicUpdate } from "../../../core/client/eodashSTAC/mosaic";
@@ -1,10 +1,11 @@
1
+ import type { ItemFilterFilters } from "../../core/client/types";
1
2
  export interface TimelineSelectionEventDetail {
2
3
  date: [string, string];
3
4
  instances: {
4
5
  layer: import("ol/layer/Layer").default;
5
6
  source: import("ol/source/Source").default;
6
7
  };
7
- filters: Record<string, Filter>;
8
+ filters: ItemFilterFilters;
8
9
  selectedItems: {
9
10
  [layerId: string]: SelectedItem[];
10
11
  };
@@ -28,7 +29,7 @@ export interface TimelineExportEventDetail {
28
29
  zoom: number;
29
30
  center: [number, number];
30
31
  };
31
- filters: Record<string, Filter>;
32
+ filters: ItemFilterFilters;
32
33
  instances: {
33
34
  layer: import("ol/layer/Layer").default;
34
35
  source: import("ol/source/Source").default;
@@ -45,18 +46,7 @@ export interface TimelineExportEventDetail {
45
46
  zoom?: number;
46
47
  }) => Promise<void>;
47
48
  }
48
- export interface Filter {
49
- key: string;
50
- title: string;
51
- type: "range" | "multiselect" | "select";
52
- expanded: boolean;
53
- min: number;
54
- max: number;
55
- step: number;
56
- state: {
57
- min: number;
58
- max: number;
59
- };
60
- dirty: boolean;
61
- stringifiedState: string;
49
+ export interface ItemFilterEventDetail {
50
+ result: Record<string, any>;
51
+ filters: ItemFilterFilters;
62
52
  }
@@ -397,6 +397,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
397
397
  default: () => void;
398
398
  };
399
399
  }>> & Readonly<{}>, {
400
+ layoutIcon: string;
401
+ layoutTarget: string;
402
+ showIndicatorsBtn: boolean;
403
+ showLayoutSwitcher: boolean;
404
+ indicatorBtnText: string;
400
405
  itemFilterConfig: Partial<{
401
406
  enableCompare: boolean;
402
407
  filtersTitle: string;
@@ -439,9 +444,4 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
439
444
  readonly aggregateResults?: string | undefined;
440
445
  readonly onSelect?: ((...args: any[]) => any) | undefined;
441
446
  } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "enableCompare" | "filtersTitle" | "resultsTitle" | "titleProperty" | "aggregateResults" | "imageProperty" | "subTitleProperty" | "resultType" | "cssVars" | "enableHighlighting" | "expandMultipleFilters" | "expandMultipleResults" | "styleOverride" | "filterProperties">;
442
- showIndicatorsBtn: boolean;
443
- showLayoutSwitcher: boolean;
444
- layoutTarget: string;
445
- layoutIcon: string;
446
- indicatorBtnText: string;
447
447
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eodash/eodash",
3
- "version": "5.7.0",
3
+ "version": "5.7.1",
4
4
  "type": "module",
5
5
  "types": "./dist/types/core/client/types.d.ts",
6
6
  "files": [
@@ -60,79 +60,79 @@
60
60
  "lint": "eslint . --fix",
61
61
  "cypress": "cypress open --component ",
62
62
  "vitest": "vitest --isolate --ui",
63
- "test": "npm run test:client && npm run test:cli",
63
+ "test": "npm run test:client && npm run test:unit && npm run test:cli",
64
64
  "test:cli": "vitest run tests/cli --isolate",
65
- "test:client": "cypress run --component",
66
- "docs:dev": "vitepress dev docs --port 3333",
65
+ "test:client": "cypress run --component && npm run test:unit",
66
+ "test:unit": "vitest run tests/unit --isolate",
67
+ "docs:dev": "test -d docs/api || npm run docs:generate && vitepress dev docs --port 3333",
67
68
  "docs:build": "npm run docs:generate && vitepress build docs",
68
69
  "docs:preview": "vitepress preview docs",
69
70
  "docs:generate": "npm run build:cli && npm run build:types && typedoc --options typedoc.config.json"
70
71
  },
71
72
  "dependencies": {
72
73
  "@eox/chart": "^1.2.0",
73
- "@eox/drawtools": "^1.5.0",
74
+ "@eox/drawtools": "^1.6.0",
74
75
  "@eox/feedback": "^1.2.0",
75
76
  "@eox/geosearch": "^1.2.0",
76
- "@eox/itemfilter": "^1.16.0",
77
- "@eox/jsonform": "^1.12.0",
77
+ "@eox/itemfilter": "^1.17.3",
78
+ "@eox/jsonform": "^1.12.1",
78
79
  "@eox/layercontrol": "^1.7.0",
79
80
  "@eox/layout": "^1.0.0",
80
- "@eox/map": "^2.5.1",
81
+ "@eox/map": "^2.6.1",
81
82
  "@eox/stacinfo": "^1.2.0",
82
- "@eox/timecontrol": "^2.4.0",
83
+ "@eox/timecontrol": "https://pkg.pr.new/EOX-A/EOxElements/@eox/timecontrol@476eb30",
83
84
  "@eox/ui": "^1.1.0",
84
85
  "@mdi/js": "^7.4.47",
85
- "@vitejs/plugin-vue": "^6.0.6",
86
- "@vueuse/core": "^14.2.1",
86
+ "@vitejs/plugin-vue": "^6.0.7",
87
+ "@vueuse/core": "^14.3.0",
87
88
  "animated-details": "gist:2912bb049fa906671807415eb0e87188",
88
- "axios": "^1.15.2",
89
+ "axios": "^1.17.0",
89
90
  "axios-cache-interceptor": "^1.12.0",
90
- "color-legend-element": "^1.3.0",
91
+ "color-legend-element": "^1.5.0",
91
92
  "commander": "^14.0.3",
92
93
  "core-js": "^3.49.0",
93
94
  "dotenv": "^17.4.2",
94
- "hyparquet": "^1.25.6",
95
+ "hyparquet": "^1.26.0",
95
96
  "loglevel": "^1.9.2",
96
97
  "mustache": "^4.2.0",
97
98
  "pinia": "^3.0.4",
98
99
  "proj4": "^2.20.8",
99
- "sass": "^1.99.0",
100
- "stac-js": "^0.4.2",
100
+ "sass": "^1.100.0",
101
+ "stac-js": "^0.4.3",
101
102
  "stac-ts": "^1.0.5",
102
103
  "v-calendar": "3.0.0",
103
104
  "vega-embed": "^6.29.0",
104
105
  "vega-lite": "^5.23.0",
105
- "vite": "^7.3.1",
106
+ "vite": "^7.3.5",
106
107
  "vite-plugin-vuetify": "^2.1.3",
107
- "vue": "^3.5.33",
108
- "vuetify": "^3.11.4",
108
+ "vue": "^3.5.35",
109
+ "vuetify": "^3.12.8",
109
110
  "webfontloader": "^1.6.28"
110
111
  },
111
112
  "devDependencies": {
112
- "@babel/types": "^7.29.0",
113
- "@eox/eslint-config": "^2.0.0",
113
+ "@babel/types": "^7.29.7",
114
+ "@eox/eslint-config": "^2.1.0",
115
+ "@eox/pages-theme-eox": "^1.7.0",
114
116
  "@pinia/testing": "^1.0.3",
115
117
  "@types/json-schema": "^7.0.15",
116
118
  "@types/mustache": "^4.2.6",
117
- "@types/node": "^25.6.0",
119
+ "@types/node": "^25.9.1",
118
120
  "@types/openlayers": "^4.6.23",
119
121
  "@types/webfontloader": "^1.6.38",
120
- "cypress": "^15.14.1",
121
- "eslint": "^9.39.2",
122
- "eslint-plugin-vue": "^9.33.0",
123
- "pkg-pr-new": "^0.0.66",
122
+ "@typescript-eslint/parser": "^8.61.1",
123
+ "cypress": "^15.16.0",
124
+ "pkg-pr-new": "^0.0.75",
124
125
  "prettier": "^3.8.3",
125
- "rollup": "^4.60.2",
126
+ "rollup": "^4.61.1",
126
127
  "terminate": "^2.8.0",
127
- "tsc-alias": "^1.8.16",
128
+ "tsc-alias": "^1.8.17",
128
129
  "typedoc": "^0.28.19",
129
- "typedoc-plugin-markdown": "^4.11.0",
130
+ "typedoc-plugin-markdown": "^4.12.0",
130
131
  "typedoc-plugin-vue": "^1.5.1",
131
- "typedoc-vitepress-theme": "^1.1.2",
132
+ "typedoc-vitepress-theme": "^1.1.3",
132
133
  "typescript": "^5.9.3",
133
- "vitepress": "^1.6.4",
134
- "vitest": "^4.1.5",
135
- "vue-tsc": "3.2.7"
134
+ "vitest": "^4.1.8",
135
+ "vue-tsc": "3.3.3"
136
136
  },
137
137
  "engines": {
138
138
  "node": ">=20.15.1"
@@ -1,4 +1,4 @@
1
- import { deepmergeInto } from "deepmerge-ts";
1
+ import { deepmergeCustom } from "deepmerge-ts";
2
2
  import lite from "./lite";
3
3
  import expert from "./expert";
4
4
  import compare from "./compare";
@@ -13,12 +13,14 @@ const baseConfig = {
13
13
  stacEndpoint: {
14
14
  endpoint:
15
15
  "https://esa-eodashboards.github.io/eodashboard-catalog/trilateral/catalog.json",
16
+ // "https://GTIF-Austria.github.io/public-catalog/pr-preview/pr-119/GTIF-Austria/catalog.json",
16
17
  // "https://api.explorer.eopf.copernicus.eu/stac",
17
18
  // api: true,
18
19
  supportedUpscalingEndpoints: [
19
- "openveda.cloud",
20
- "api.explorer.eopf.copernicus.eu",
20
+ { url: "openveda.cloud", titilerVersion: 1 },
21
+ { url: "api.explorer.eopf.copernicus.eu", titilerVersion: 2 },
21
22
  ],
23
+ rasterEndpoint: "https://api.explorer.eopf.copernicus.eu/rstaging",
22
24
  },
23
25
  brand: {
24
26
  noLayout: true,
@@ -66,13 +68,41 @@ const baseConfig = {
66
68
  },
67
69
  };
68
70
 
71
+ /**
72
+ * Arrays are replacement semantics (user array wins, not concat).
73
+ * mergeArrays:false ensures e.g. widgets/collectionsPalette/supportedUpscalingEndpoints
74
+ * supplied by the caller fully replace the base arrays.
75
+ */
76
+ const deepmerge = deepmergeCustom({ mergeArrays: false });
77
+
69
78
  /**
70
79
  * @param {import("vega-lite").DeepPartial<import("@/types").Eodash>} config
80
+ * @return {import("@/types").Eodash}
71
81
  */
72
82
  export const getBaseConfig = (config) => {
73
- const merged = /** @type {import("@/types").Eodash} */ ({});
74
- deepmergeInto(merged, baseConfig, config || {});
75
- return merged;
83
+ return /** @type {import("@/types").Eodash} */ (
84
+ deepmerge(cloneConfig(baseConfig), config || {})
85
+ );
76
86
  };
77
87
 
88
+ /**
89
+ * Shallow-safe deep clone that preserves functions and Symbols as references
90
+ * (they are intentionally shared; template functions and Symbol IDs are
91
+ * not mutable data). Only plain objects and arrays are cloned.
92
+ *
93
+ * @param {unknown} val
94
+ * @returns {unknown}
95
+ */
96
+ function cloneConfig(val) {
97
+ if (val === null || typeof val !== "object") return val;
98
+ if (Array.isArray(val)) return val.map(cloneConfig);
99
+ if (typeof val === "function") return val;
100
+ /** @type {Record<string, unknown>} */
101
+ const out = {};
102
+ for (const key of Object.keys(val)) {
103
+ out[key] = cloneConfig(/** @type {Record<string, unknown>} */ (val)[key]);
104
+ }
105
+ return out;
106
+ }
107
+
78
108
  export default baseConfig;
@@ -25,6 +25,29 @@ export default {
25
25
  name: "EodashMap",
26
26
  properties: {
27
27
  enableCompare: true,
28
+ baseLayers: [
29
+ {
30
+ type: "Group",
31
+ properties: {
32
+ id: "BaseLayersGroup",
33
+ title: "Base Layers",
34
+ },
35
+ layers: [
36
+ {
37
+ type: "Tile",
38
+ properties: {
39
+ id: "terrain-light;:;EPSG:3857",
40
+ title: "Terrain Light",
41
+ },
42
+ source: {
43
+ type: "XYZ",
44
+ //@ts-expect-error todo
45
+ url: "https://s2maps-tiles.eu/wmts/1.0.0/terrain-light_3857/default/g/{z}/{y}/{x}.jpeg",
46
+ },
47
+ },
48
+ ],
49
+ },
50
+ ],
28
51
  },
29
52
  },
30
53
  },
@@ -118,6 +141,26 @@ export default {
118
141
  },
119
142
  },
120
143
  },
144
+ // {
145
+ // defineWidget: (selectedSTAC) => {
146
+ // return selectedSTAC
147
+ // ? {
148
+ // id: "expert-Datepicker",
149
+ // type: "internal",
150
+ // layout: { x: 4, y: 7, w: 4, h: 5 },
151
+ // title: "Date",
152
+ // widget: {
153
+ // name: "EodashDatePicker",
154
+ // properties: {
155
+ // hintText: `<b>Hint:</b> closest available date is displayed <br />
156
+ // on map (see Analysis Layers)`,
157
+ // toggleCalendar: true,
158
+ // },
159
+ // },
160
+ // }
161
+ // : null;
162
+ // },
163
+ // },
121
164
  {
122
165
  defineWidget: () =>
123
166
  shouldShowChartWidget() && {
@@ -149,16 +192,28 @@ export default {
149
192
  defineWidget: (selectedSTAC) => {
150
193
  return selectedSTAC
151
194
  ? {
152
- id: "expert-Datepicker",
195
+ id: "expert-datetime",
153
196
  type: "internal",
154
- layout: { x: 4, y: 3, w: 4, h: 9 },
155
- title: "Date",
197
+ layout: { x: 1, y: 8, w: 8, h: 3 },
198
+ title: "Time Slider",
156
199
  widget: {
157
- name: "EodashDatePicker",
200
+ name: "EodashTimeSlider",
158
201
  properties: {
159
- hintText: `<b>Hint:</b> closest available date is displayed<br/>
160
- on map (see Analysis Layers)`,
161
- toggleCalendar: true,
202
+ filters: [
203
+ {
204
+ key: "eo:cloud_cover",
205
+ title: "Cloud Coverage %",
206
+ type: "range",
207
+ expanded: true,
208
+ min: 0,
209
+ max: 100,
210
+ step: 5,
211
+ state: {
212
+ min: 0,
213
+ max: 100,
214
+ },
215
+ },
216
+ ],
162
217
  },
163
218
  },
164
219
  }
@@ -24,6 +24,29 @@ export default {
24
24
  widget: {
25
25
  name: "EodashMap",
26
26
  properties: {
27
+ baseLayers: [
28
+ {
29
+ type: "Group",
30
+ properties: {
31
+ id: "BaseLayersGroup",
32
+ title: "Base Layers",
33
+ },
34
+ layers: [
35
+ {
36
+ type: "Tile",
37
+ properties: {
38
+ id: "terrain-light;:;EPSG:3857",
39
+ title: "Terrain Light",
40
+ },
41
+ source: {
42
+ type: "XYZ",
43
+ //@ts-expect-error todo
44
+ url: "https://s2maps-tiles.eu/wmts/1.0.0/terrain-light_3857/default/g/{z}/{y}/{x}.jpeg",
45
+ },
46
+ },
47
+ ],
48
+ },
49
+ ],
27
50
  enableCompare: true,
28
51
  zoomToExtent: true,
29
52
  btns: {
@@ -1,4 +1,3 @@
1
- // import { includesProcess } from "@/store/actions";
2
1
  /** @type {import("@/types").Template} */
3
2
  export default {
4
3
  gap: 16,
@@ -23,6 +22,7 @@ export default {
23
22
  widget: {
24
23
  name: "EodashMap",
25
24
  properties: {
25
+ zoomToExtent: false,
26
26
  enableCompare: true,
27
27
  btns: {
28
28
  enableZoom: true,
@@ -30,21 +30,23 @@ export default {
30
30
  enableChangeProjection: true,
31
31
  enableCompareIndicators: {
32
32
  fallbackTemplate: "explore",
33
+ compareTemplate: "compare",
33
34
  itemFilterConfig: {
34
35
  imageProperty: "assets.thumbnail.href",
35
36
  },
36
37
  },
37
- enableSearch: true,
38
+ enableBackToPOIs: false,
39
+ enableSearch: false,
38
40
  },
39
41
  },
40
42
  },
41
43
  },
42
44
  widgets: [
43
45
  {
44
- id: "Layercontrol",
46
+ id: "explore-layercontrol",
45
47
  type: "internal",
46
48
  title: "Layers",
47
- layout: { x: "9/9/10", y: 0, w: "3/3/2", h: 12 },
49
+ layout: { x: "9/9/10", y: 0, w: "3/3/2", h: 11 },
48
50
  widget: {
49
51
  name: "EodashLayerControl",
50
52
  },
@@ -53,9 +55,13 @@ export default {
53
55
  id: "ItemCatalog",
54
56
  title: "Catalog",
55
57
  type: "internal",
56
- layout: { x: 0, y: 0, w: "3/3/2", h: 12 },
58
+ layout: { x: 0, y: 0, w: "3/3/2", h: 11 },
57
59
  widget: {
58
60
  name: "EodashItemCatalog",
61
+ properties: {
62
+ layoutTarget: undefined,
63
+ hoverProperties: ["datetime", "eo:cloud_cover"],
64
+ },
59
65
  },
60
66
  },
61
67
  ],
package/templates/lite.js CHANGED
@@ -24,6 +24,20 @@ export default {
24
24
  widget: {
25
25
  name: "EodashMap",
26
26
  properties: {
27
+ baseLayers: [
28
+ {
29
+ type: "Tile",
30
+ properties: {
31
+ id: "terrain-light;:;EPSG:3857",
32
+ title: "Terrain Light",
33
+ },
34
+ source: {
35
+ type: "XYZ",
36
+ //@ts-expect-error todo
37
+ url: "https://s2maps-tiles.eu/wmts/1.0.0/terrain-light_3857/default/g/{z}/{y}/{x}.jpeg",
38
+ },
39
+ },
40
+ ],
27
41
  enableCompare: true,
28
42
  enableCursorCoordinates: false,
29
43
  enableScaleLine: false,
@@ -51,6 +51,7 @@ const { enableCompare, vegaEmbedOptions } = defineProps({
51
51
  default: false,
52
52
  },
53
53
  vegaEmbedOptions: {
54
+ /** @type {import("vue").PropType<import("vega-embed").EmbedOptions>} */
54
55
  type: Object,
55
56
  default() {
56
57
  return { actions: true };