@vcmap/ui 5.1.2 → 5.1.4

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 (52) hide show
  1. package/build/getPluginProxies.js +4 -1
  2. package/config/www.config.json +40 -6
  3. package/dist/assets/cesium.js +1 -1
  4. package/dist/assets/{core.753649.js → core.8b769f.js} +3360 -3334
  5. package/dist/assets/core.js +1 -1
  6. package/dist/assets/index-97b02a80.js +1 -0
  7. package/dist/assets/ol.js +1 -1
  8. package/dist/assets/{ui.a843ac.css → ui.576b59.css} +2 -2
  9. package/dist/assets/{ui.a843ac.js → ui.576b59.js} +2854 -2716
  10. package/dist/assets/ui.js +1 -1
  11. package/dist/assets/vue.js +2 -2
  12. package/dist/assets/{vuetify.50800a.js → vuetify.515b3c.js} +1 -1
  13. package/dist/assets/vuetify.js +2 -2
  14. package/dist/index.html +1 -1
  15. package/package.json +2 -2
  16. package/src/actions/listActions.d.ts +2 -1
  17. package/src/actions/listActions.js +3 -1
  18. package/src/application/VcsPositionDisplay.vue +10 -0
  19. package/src/components/icons/+all.js +12 -0
  20. package/src/components/icons/2DPointIcon.vue +22 -0
  21. package/src/components/icons/2DPointIcon.vue.d.ts +2 -0
  22. package/src/components/icons/3DPointIcon.vue +22 -0
  23. package/src/components/icons/3DPointIcon.vue.d.ts +2 -0
  24. package/src/components/icons/AxisIcon.vue +10 -15
  25. package/src/components/icons/PointMeasurementIcon.vue +7 -17
  26. package/src/components/icons/TransparentTerrainIcon.vue +17 -0
  27. package/src/components/icons/TransparentTerrainIcon.vue.d.ts +2 -0
  28. package/src/components/import/ImportComponent.vue +6 -0
  29. package/src/components/import/ImportComponent.vue.d.ts +1 -0
  30. package/src/components/viewpoint/VcsViewpointComponent.vue +24 -18
  31. package/src/featureInfo/abstractFeatureInfoView.d.ts +8 -0
  32. package/src/featureInfo/abstractFeatureInfoView.js +20 -1
  33. package/src/featureInfo/featureInfo.js +1 -1
  34. package/src/manager/collectionManager/collectionComponentClass.d.ts +14 -4
  35. package/src/manager/collectionManager/collectionComponentClass.js +40 -22
  36. package/src/manager/collectionManager/editorCollectionComponentClass.d.ts +7 -1
  37. package/src/manager/collectionManager/editorCollectionComponentClass.js +7 -2
  38. package/src/manager/contextMenu/contextMenuManager.d.ts +11 -0
  39. package/src/manager/contextMenu/contextMenuManager.js +22 -1
  40. package/src/manager/toolbox/SelectToolboxComponent.vue +1 -1
  41. package/src/manager/toolbox/ToolboxManager.vue +31 -4
  42. package/src/manager/toolbox/ToolboxManager.vue.d.ts +3 -0
  43. package/src/manager/window/WindowManager.vue +1 -1
  44. package/src/manager/window/windowManager.d.ts +30 -1
  45. package/src/manager/window/windowManager.js +71 -2
  46. package/src/navigation/MapNavigation.vue +7 -4
  47. package/src/navigation/overviewMap.js +24 -19
  48. package/dist/assets/index-cc59d4fd.js +0 -1
  49. /package/dist/assets/{cesium.6a1548.js → cesium.88a354.js} +0 -0
  50. /package/dist/assets/{ol.441b59.js → ol.98520e.js} +0 -0
  51. /package/dist/assets/{vue.118f2c.js → vue.e13c02.js} +0 -0
  52. /package/dist/assets/{vuetify.50800a.css → vuetify.515b3c.css} +0 -0
package/dist/assets/ui.js CHANGED
@@ -1 +1 @@
1
- export * from "./ui.a843ac.js";
1
+ export * from "./ui.576b59.js";
@@ -1,5 +1,5 @@
1
- export * from "./vue.118f2c.js";
2
- import { default as f } from "./vue.118f2c.js";
1
+ export * from "./vue.e13c02.js";
2
+ import { default as f } from "./vue.e13c02.js";
3
3
  export {
4
4
  f as default
5
5
  };
@@ -13,7 +13,7 @@ function loadCss(href) {
13
13
  elem.onerror = reject;
14
14
  document.head.appendChild(elem);
15
15
  });
16
- } await loadCss('./assets/vuetify.50800a.css');import v from "./vue.118f2c.js";
16
+ } await loadCss('./assets/vuetify.515b3c.css');import v from "./vue.e13c02.js";
17
17
  const Ne = v.extend().extend({
18
18
  name: "themeable",
19
19
  provide() {
@@ -1,5 +1,5 @@
1
- export * from "./vuetify.50800a.js";
2
- import { default as f } from "./vuetify.50800a.js";
1
+ export * from "./vuetify.515b3c.js";
2
+ import { default as f } from "./vuetify.515b3c.js";
3
3
  export {
4
4
  f as default
5
5
  };
package/dist/index.html CHANGED
@@ -91,7 +91,7 @@
91
91
  }
92
92
  }
93
93
  </style>
94
- <script type="module" crossorigin src="./assets/index-cc59d4fd.js"></script>
94
+ <script type="module" crossorigin src="./assets/index-97b02a80.js"></script>
95
95
  </head>
96
96
  <body style="height: 100vh; margin: 0;">
97
97
  <noscript>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcmap/ui",
3
- "version": "5.1.2",
3
+ "version": "5.1.4",
4
4
  "author": "Virtual City Systems",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -53,7 +53,7 @@
53
53
  },
54
54
  "peerDependencies": {
55
55
  "@vcmap-cesium/engine": "^4.0.3",
56
- "@vcmap/core": "^5.1.1",
56
+ "@vcmap/core": "^5.1.3",
57
57
  "ol": "^7.5.2",
58
58
  "vue": "~2.7.3",
59
59
  "vuetify": "~2.6.7"
@@ -54,10 +54,11 @@ export function createListImportAction(importCallback: (arg0: File[]) => void |
54
54
  * @param {import("../manager/window/windowManager.js").default} windowManager
55
55
  * @param {string|symbol} owner
56
56
  * @param {string} multiEditorId
57
+ * @param {string} [name="list.edit"]
57
58
  * @template {Object} T
58
59
  * @returns {{action: import("./actionHelper.js").VcsAction, destroy: function(): void}}
59
60
  */
60
- export function createListEditAction<T extends Object>(selection: import("vue").Ref<Array<import("../manager/collectionManager/collectionComponentClass.js").CollectionComponentListItem>>, editCallback: (arg0: T) => void, windowManager: import("../manager/window/windowManager.js").default, owner: string | symbol, multiEditorId: string): {
61
+ export function createListEditAction<T extends Object>(selection: import("vue").Ref<Array<import("../manager/collectionManager/collectionComponentClass.js").CollectionComponentListItem>>, editCallback: (arg0: T) => void, windowManager: import("../manager/window/windowManager.js").default, owner: string | symbol, multiEditorId: string, name?: string | undefined): {
61
62
  action: import("./actionHelper.js").VcsAction;
62
63
  destroy: () => void;
63
64
  };
@@ -148,6 +148,7 @@ export function createListImportAction(
148
148
  * @param {import("../manager/window/windowManager.js").default} windowManager
149
149
  * @param {string|symbol} owner
150
150
  * @param {string} multiEditorId
151
+ * @param {string} [name="list.edit"]
151
152
  * @template {Object} T
152
153
  * @returns {{action: import("./actionHelper.js").VcsAction, destroy: function(): void}}
153
154
  */
@@ -157,11 +158,12 @@ export function createListEditAction(
157
158
  windowManager,
158
159
  owner,
159
160
  multiEditorId,
161
+ name = 'list.edit',
160
162
  ) {
161
163
  const { action, destroy: destroyEditSelected } = createListItemBulkAction(
162
164
  selection,
163
165
  {
164
- name: 'list.edit',
166
+ name,
165
167
  callback: editCallback,
166
168
  },
167
169
  );
@@ -152,6 +152,16 @@
152
152
  }
153
153
 
154
154
  const listener = [
155
+ app.uiConfig.added.addEventListener((added) => {
156
+ if (added.name === 'positionDisplayEventType') {
157
+ setMove();
158
+ }
159
+ }),
160
+ app.uiConfig.removed.addEventListener((added) => {
161
+ if (added.name === 'positionDisplayEventType') {
162
+ setMove();
163
+ }
164
+ }),
155
165
  app.moduleAdded.addEventListener(() => {
156
166
  const newDefaultProjection = getDefaultProjection();
157
167
  projections[newDefaultProjection.epsg] = newDefaultProjection;
@@ -1,9 +1,11 @@
1
1
  import TwoDAreaIcon from './2DAreaIcon.vue';
2
2
  import TwoDDistanceIcon from './2DDistanceIcon.vue';
3
3
  import TwoDHeightObliqueIcon from './2DHeightObliqueIcon.vue';
4
+ import TwoDPointIcon from './2DPointIcon.vue';
4
5
  import ThreeDAreaIcon from './3DAreaIcon.vue';
5
6
  import ThreeDDistanceIcon from './3DDistanceIcon.vue';
6
7
  import ThreeDHeightIcon from './3DHeightIcon.vue';
8
+ import ThreeDPointIcon from './3DPointIcon.vue';
7
9
  import AngleIcon from './AngleIcon.vue';
8
10
  import AssociationsIcon from './AssociationsIcon.vue';
9
11
  import AxisIcon from './AxisIcon.vue';
@@ -91,6 +93,7 @@ import TextStyleIcon from './TextStyleIcon.vue';
91
93
  import ThreeDimensionsIcon from './ThreeDimensionsIcon.vue';
92
94
  import ToolsIcon from './ToolsIcon.vue';
93
95
  import TouchIcon from './TouchIcon.vue';
96
+ import TransparentTerrainIcon from './TransparentTerrainIcon.vue';
94
97
  import TrashCanIcon from './TrashCanIcon.vue';
95
98
  import TriangleIcon from './TriangleIcon.vue';
96
99
  import TwoDimensionsIcon from './TwoDimensionsIcon.vue';
@@ -143,6 +146,9 @@ const IconMap = {
143
146
  '2dHeightOblique': {
144
147
  component: TwoDHeightObliqueIcon,
145
148
  },
149
+ '2dPoint': {
150
+ component: TwoDPointIcon,
151
+ },
146
152
  '3d': {
147
153
  component: ThreeDimensionsIcon,
148
154
  },
@@ -155,6 +161,9 @@ const IconMap = {
155
161
  '3dHeight': {
156
162
  component: ThreeDHeightIcon,
157
163
  },
164
+ '3dPoint': {
165
+ component: ThreeDPointIcon,
166
+ },
158
167
  angle: {
159
168
  component: AngleIcon,
160
169
  },
@@ -413,6 +422,9 @@ const IconMap = {
413
422
  touch: {
414
423
  component: TouchIcon,
415
424
  },
425
+ transparentTerrain: {
426
+ component: TransparentTerrainIcon,
427
+ },
416
428
  trashCan: {
417
429
  component: TrashCanIcon,
418
430
  },
@@ -0,0 +1,22 @@
1
+ <!-- eslint-disable max-len -->
2
+
3
+ <template>
4
+ <svg
5
+ id="icon_24_2D_point"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ viewBox="0 0 24 24"
8
+ >
9
+ <rect id="size" x="0" y="0" width="24" height="24" fill="none" />
10
+ <path
11
+ id="ruler"
12
+ d="M.5,14.24c-.48-.6-.37-1.48.23-1.95h0L15.72.45c.6-.48,1.48-.37,1.95.23l2.15,2.72c.48.6.37,1.48-.23,1.95h0l-15,11.84c-.6.48-1.48.37-1.95-.23L.5,14.25h0ZM16.32,1.75L1.87,13.16c-.15.12-.18.34-.06.49l1.72,2.18c.12.15.34.18.49.06l1.77-1.39c.15-.12.18-.34.06-.49l-.43-.54c-.18-.23-.14-.55.09-.73s.55-.14.73.09l.43.54c.12.15.33.18.48.06l.55-.43c.15-.12.18-.33.06-.49l-.43-.54c-.17-.23-.11-.56.11-.73.22-.16.53-.12.7.08l.43.54c.12.15.34.18.49.06l.56-.44c.15-.12.18-.33.06-.49l-.43-.54c-.17-.23-.12-.56.11-.73.22-.16.53-.12.7.08l.43.54c.12.15.34.18.49.06l.54-.43c.15-.12.18-.34.06-.49l-.43-.54c-.17-.23-.11-.56.11-.73.22-.16.53-.12.7.08l.43.54c.12.15.34.18.49.06h0l.55-.43c.15-.12.18-.33.06-.49l-.43-.54c-.18-.23-.14-.55.09-.73s.55-.14.73.09l.43.54c.12.15.33.17.48.06l.55-.43c.15-.12.17-.33.06-.48l-.43-.55c-.18-.23-.14-.55.09-.73s.55-.14.73.09l.43.54c.12.15.33.17.48.06l1.77-1.4c.15-.12.18-.34.06-.49l-1.72-2.18c-.12-.15-.34-.18-.49-.06ZM16.14,3.21c.3-.24.73-.18.97.11s.18.73-.11.97-.73.18-.97-.11-.18-.73.11-.97h0Z"
13
+ fill="currentColor"
14
+ />
15
+ <path
16
+ id="text2D"
17
+ d="M13.9,20.5h1.09c0-.15.01-.3.04-.45.03-.15.08-.29.15-.42.07-.12.16-.22.28-.3.13-.08.27-.12.42-.12.22,0,.44.07.6.23.16.17.25.4.24.64,0,.16-.04.32-.12.46-.08.13-.17.25-.29.36s-.24.21-.38.29c-.14.09-.27.17-.39.26-.24.17-.47.33-.68.49-.21.15-.4.33-.56.52-.16.19-.29.41-.38.64-.1.27-.15.56-.14.85h4.11v-.98h-2.64c.14-.19.3-.36.48-.5.18-.14.37-.28.56-.4.19-.12.38-.25.57-.38.18-.12.35-.27.51-.43.15-.16.27-.34.36-.54.1-.23.14-.48.14-.73s-.05-.51-.16-.75c-.1-.21-.24-.4-.42-.55s-.39-.27-.61-.34c-.24-.08-.48-.12-.73-.12-.31,0-.61.05-.89.17-.25.11-.47.27-.64.48s-.3.46-.38.72c-.09.29-.13.59-.11.9h-.03ZM19.86,22.89v-3.6h.9c.27,0,.53.04.78.13.2.08.38.21.51.38.13.18.23.38.28.6.06.26.09.52.08.78,0,.27-.03.54-.12.8-.07.2-.18.38-.32.53-.13.13-.28.23-.46.29-.17.06-.35.09-.53.08h-1.12ZM18.6,18.23v5.71h2.46c.39,0,.78-.07,1.14-.22.31-.14.59-.34.81-.6.22-.27.39-.58.48-.92.11-.37.16-.76.16-1.15,0-.42-.06-.84-.2-1.24-.12-.33-.3-.63-.54-.88-.23-.23-.51-.42-.82-.53-.33-.12-.68-.18-1.03-.18h-2.46,0Z"
18
+ fill="currentColor"
19
+ />
20
+ <circle id="ellipse" cx="17.89" cy="12.96" r="3" fill="currentColor" />
21
+ </svg>
22
+ </template>
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;
@@ -0,0 +1,22 @@
1
+ <!-- eslint-disable max-len -->
2
+
3
+ <template>
4
+ <svg
5
+ id="icon_24_3D_point"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ viewBox="0 0 24 24"
8
+ >
9
+ <rect id="size" x="0" y="0" width="24" height="24" fill="none" />
10
+ <path
11
+ id="ruler"
12
+ d="M.5,14.24c-.48-.6-.37-1.48.23-1.95h0L15.72.45c.6-.48,1.48-.37,1.95.23l2.15,2.72c.48.6.37,1.48-.23,1.95h0l-15,11.84c-.6.48-1.48.37-1.95-.23L.5,14.25h0ZM16.32,1.75L1.87,13.16c-.15.12-.18.34-.06.49l1.72,2.18c.12.15.34.18.49.06l1.77-1.39c.15-.12.18-.34.06-.49l-.43-.54c-.18-.23-.14-.55.09-.73s.55-.14.73.09l.43.54c.12.15.33.18.48.06l.55-.43c.15-.12.18-.33.06-.49l-.43-.54c-.17-.23-.11-.56.11-.73.22-.16.53-.12.7.08l.43.54c.12.15.34.18.49.06l.56-.44c.15-.12.18-.33.06-.49l-.43-.54c-.17-.23-.12-.56.11-.73.22-.16.53-.12.7.08l.43.54c.12.15.34.18.49.06l.54-.43c.15-.12.18-.34.06-.49l-.43-.54c-.17-.23-.11-.56.11-.73.22-.16.53-.12.7.08l.43.54c.12.15.34.18.49.06h0l.55-.43c.15-.12.18-.33.06-.49l-.43-.54c-.18-.23-.14-.55.09-.73s.55-.14.73.09l.43.54c.12.15.33.17.48.06l.55-.43c.15-.12.17-.33.06-.48l-.43-.55c-.18-.23-.14-.55.09-.73s.55-.14.73.09l.43.54c.12.15.33.17.48.06l1.77-1.4c.15-.12.18-.34.06-.49l-1.72-2.18c-.12-.15-.34-.18-.49-.06ZM16.14,3.21c.3-.24.73-.18.97.11s.18.73-.11.97-.73.18-.97-.11-.18-.73.11-.97h0Z"
13
+ fill="currentColor"
14
+ />
15
+ <circle id="ellipse" cx="17.89" cy="12.96" r="3" fill="currentColor" />
16
+ <path
17
+ id="text3D"
18
+ d="M15.32,20.55v.8c.14,0,.28,0,.44.01.14,0,.29.04.42.09.13.05.24.13.32.24.09.15.14.32.12.49.01.24-.08.48-.26.64-.18.16-.41.24-.65.24-.15,0-.3-.03-.43-.09-.12-.06-.22-.14-.3-.24-.08-.1-.14-.22-.18-.35-.04-.14-.07-.28-.07-.43h-1.08c-.01.29.04.59.14.86.09.24.24.46.42.64.19.18.41.32.66.4.28.09.57.13.86.13.27,0,.53-.04.78-.12.24-.07.47-.19.67-.35.19-.16.35-.35.46-.58.12-.24.18-.51.17-.78,0-.3-.09-.59-.26-.82-.18-.23-.44-.39-.73-.45v-.02c.24-.06.45-.21.59-.42.13-.22.2-.47.2-.72,0-.23-.05-.46-.17-.66-.11-.19-.26-.36-.44-.49-.18-.13-.38-.24-.6-.3-.22-.07-.44-.1-.67-.1-.27,0-.53.04-.78.14-.23.09-.43.23-.6.4-.17.18-.3.38-.39.61-.1.25-.15.52-.16.79h1.08c-.02-.26.05-.51.2-.72.16-.19.4-.3.65-.28.2,0,.4.07.55.19.16.14.25.34.24.55,0,.14-.03.27-.12.38-.08.1-.18.17-.3.22-.12.05-.25.08-.39.09-.13.01-.26.01-.39,0ZM19.76,22.83v-3.6h.9c.27,0,.53.04.78.13.2.08.38.21.51.38.13.18.23.38.28.6.06.26.09.52.08.78,0,.27-.03.54-.12.8-.07.2-.18.38-.32.53-.13.13-.28.23-.46.29-.17.06-.35.09-.53.08h-1.12ZM18.5,18.17v5.71h2.46c.39,0,.78-.07,1.14-.22.31-.14.59-.34.81-.6.22-.27.39-.58.48-.92.11-.37.16-.76.16-1.15,0-.42-.06-.84-.2-1.24-.12-.33-.3-.63-.54-.88-.23-.23-.51-.42-.82-.53-.33-.12-.68-.18-1.03-.18h-2.46Z"
19
+ fill="currentColor"
20
+ />
21
+ </svg>
22
+ </template>
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;
@@ -2,33 +2,28 @@
2
2
 
3
3
  <template>
4
4
  <svg
5
+ id="vcsAxis"
5
6
  xmlns="http://www.w3.org/2000/svg"
6
- width="14.456"
7
- height="14.02"
8
- viewBox="0 0 14.456 14.02"
7
+ viewBox="0 0 14.46 14.02"
9
8
  >
10
9
  <path
11
- id="Path_716"
12
- d="M.114-2.886V-4.02h3.18v1.134l-1.3,1.65v.1h1.3V0H.114V-1.08l1.332-1.7v-.1Z"
13
- transform="translate(-0.114 14.02)"
10
+ id="Path_Z"
11
+ d="M5.37,1.13V0h3.18v1.13l-1.3,1.65v.1h1.3v1.14h-3.18v-1.08l1.33-1.7v-.1h-1.33Z"
14
12
  fill="currentColor"
15
13
  />
16
14
  <path
17
- id="Path_715"
18
- d="M1.368-4.02l.366,1.1L2.2-4.02H3.57L2.7-2.106,3.516,0H2.088L1.734-1.068,1.368,0H-.048L.81-1.926-.048-4.02Z"
19
- transform="translate(10.886 14.02)"
15
+ id="Path_X"
16
+ d="M12.25,10l.37,1.1.47-1.1h1.37l-.87,1.91.82,2.11h-1.43l-.35-1.07-.37,1.07h-1.42l.86-1.93-.86-2.09h1.42Z"
20
17
  fill="currentColor"
21
18
  />
22
19
  <path
23
- id="Path_717"
24
- d="M2.46,0H1.068V-1.26L-.078-4.02H1.4l.378,1.182.39-1.182h1.47L2.46-1.26Z"
25
- transform="translate(5.186 4.02)"
20
+ id="Path_Y"
21
+ d="M2.54,14.02h-1.39v-1.26l-1.15-2.76h1.48l.38,1.18.39-1.18h1.47l-1.18,2.76v1.26Z"
26
22
  fill="currentColor"
27
23
  />
28
24
  <path
29
- id="Path_718"
30
- d="M328.277,1221.584l-2.777-1.852V1216a.5.5,0,0,0-1,0v3.692l-2.66,1.9a.5.5,0,0,0,.291.907.5.5,0,0,0,.29-.093l2.553-1.824,2.749,1.833a.5.5,0,0,0,.693-.139A.5.5,0,0,0,328.277,1221.584Z"
31
- transform="translate(-318.1 -1210.48)"
25
+ id="center"
26
+ d="M10.18,11.1l-2.78-1.85v-3.73c0-.28-.22-.5-.5-.5s-.5.22-.5.5v3.69l-2.66,1.9c-.22.16-.28.47-.12.7.09.13.25.21.41.21.1,0,.21-.03.29-.09l2.55-1.82,2.75,1.83c.23.15.54.09.69-.14.15-.23.09-.54-.14-.69Z"
32
27
  fill="currentColor"
33
28
  />
34
29
  </svg>
@@ -7,30 +7,20 @@
7
7
  viewBox="0 0 24 24"
8
8
  >
9
9
  <path
10
- id="Pfad_716"
11
- d="m1.67,18.17v-1.7h4.77v1.7l-1.95,2.47v.15h1.95v1.7H1.67v-1.62l2-2.55v-.15h-2Z"
10
+ id="Pfad_Z"
11
+ d="M9.61,2.64V.94h4.77v1.7l-1.95,2.47v.15h1.95v1.7h-4.77v-1.62l2-2.55v-.15h-2Z"
12
12
  fill="currentColor"
13
- stroke-width="0"
14
13
  />
15
14
  <path
16
- id="Pfad_715"
17
- d="m20.05,16.47l.55,1.65.7-1.65h2.05l-1.3,2.87,1.22,3.16h-2.14l-.53-1.6-.55,1.6h-2.12l1.29-2.89-1.29-3.14h2.12Z"
15
+ id="Pfad_X"
16
+ d="M20.05,16.47l.55,1.65.7-1.65h2.05l-1.3,2.87,1.22,3.16h-2.14l-.53-1.6-.55,1.6h-2.12l1.29-2.89-1.29-3.14s2.12,0,2.12,0Z"
18
17
  fill="currentColor"
19
- stroke-width="0"
20
18
  />
21
19
  <path
22
- id="Pfad_717"
23
- d="m13.14,7.5h-2.09v-1.89l-1.72-4.14h2.22l.57,1.77.58-1.77h2.21l-1.77,4.14v1.89Z"
20
+ id="Pfad_Y"
21
+ d="M4.67,22.5h-2.09v-1.89l-1.72-4.14h2.22l.57,1.77.58-1.77h2.21l-1.77,4.14s0,1.89,0,1.89Z"
24
22
  fill="currentColor"
25
- stroke-width="0"
26
- />
27
- <circle
28
- id="Ellipse_41"
29
- cx="12"
30
- cy="13.47"
31
- r="3"
32
- fill="currentColor"
33
- stroke-width="0"
34
23
  />
24
+ <circle id="ellipse" cx="12" cy="13.47" r="3" fill="currentColor" />
35
25
  </svg>
36
26
  </template>
@@ -0,0 +1,17 @@
1
+ <!-- eslint-disable max-len -->
2
+
3
+ <template>
4
+ <svg
5
+ id="TransparentTerrain"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ viewBox="0 0 24 24"
8
+ >
9
+ <g id="Gruppe_1899">
10
+ <path
11
+ d="M23.97,11.08c-.01-.05-.03-.1-.06-.15,0-.02-.01-.04-.02-.05-.02-.02-.04-.05-.06-.07-.03-.05-.07-.09-.11-.12-.04-.03-.09-.06-.13-.09-.03-.02-.05-.04-.08-.05l-11.2-4.48c-.19-.08-.41-.08-.6,0L.5,10.54s-.06.04-.08.06c-.05.02-.09.05-.13.08-.04.04-.08.08-.11.13-.02.02-.04.04-.06.07,0,.02-.01.03-.02.05-.02.05-.04.1-.06.15-.01.05-.03.1-.03.15,0,.05,0,.09,0,.14,0,.06.02.12.03.17,0,.02,0,.03.01.05s.03.05.05.08c.03.05.06.1.1.15.04.04.07.07.12.1.02.02.05.05.07.07l6.15,3.69,5.05,3.03h.01c.25.15.56.15.81,0h.01l4.9-2.94,6.29-3.78.02-.02s.03-.03.04-.04c.1-.08.19-.18.24-.3,0-.02.03-.02.03-.04s0-.03,0-.05c.02-.06.03-.11.03-.17,0-.05,0-.09,0-.14,0-.05-.02-.1-.03-.15ZM16.86,14.15l-4.88,2.6-4.98-2.68h0s-4.38-2.63-4.38-2.63l4.87-1.95,4.53-1.81,5.01,2.01h0s4.36,1.75,4.36,1.75l-4.52,2.71Z"
12
+ fill="currentColor"
13
+ />
14
+ <rect id="size" width="24" height="24" fill="none" />
15
+ </g>
16
+ </svg>
17
+ </template>
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;
@@ -4,6 +4,7 @@
4
4
  <vcs-text-field
5
5
  type="file"
6
6
  v-model="files"
7
+ :loading="loading"
7
8
  :multiple="multiple"
8
9
  :accept="fileTypes.join(',')"
9
10
  />
@@ -54,6 +55,7 @@
54
55
  setup(props, { emit }) {
55
56
  const app = inject('vcsApp');
56
57
  const localFiles = ref([]);
58
+ const loading = ref(false);
57
59
  /**
58
60
  * @type {WritableComputedRef<Array<File>>}
59
61
  */
@@ -68,7 +70,9 @@
68
70
 
69
71
  return {
70
72
  files,
73
+ loading,
71
74
  async doImport() {
75
+ loading.value = true;
72
76
  try {
73
77
  const close = await props.importFiles(files.value);
74
78
  if (close) {
@@ -79,6 +83,8 @@
79
83
  type: NotificationType.ERROR,
80
84
  message: String(e.message),
81
85
  });
86
+ } finally {
87
+ loading.value = false;
82
88
  }
83
89
  },
84
90
  };
@@ -13,6 +13,7 @@ declare const _default: import("vue").DefineComponent<{
13
13
  };
14
14
  }, {
15
15
  files: WritableComputedRef<File[]>;
16
+ loading: import("vue").Ref<boolean>;
16
17
  doImport(): Promise<void>;
17
18
  }, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{
18
19
  importFiles: {
@@ -226,7 +226,7 @@
226
226
  cachedViewpoint = viewpoint;
227
227
  },
228
228
  );
229
- if (app.maps.activeMap.className === OpenlayersMap.className) {
229
+ if (app.maps.activeMap?.className === OpenlayersMap.className) {
230
230
  app.maps.activeMap.requestRender();
231
231
  }
232
232
  }
@@ -235,7 +235,7 @@
235
235
  name: 'edit-viewpoint-action',
236
236
  icon: active ? 'mdi-sync' : 'mdi-sync-off',
237
237
  title: 'components.viewpoint.syncOff',
238
- disabled: app.maps.activeMap.className === ObliqueMap.className,
238
+ disabled: app.maps.activeMap?.className === ObliqueMap.className,
239
239
  active,
240
240
  callback() {
241
241
  this.active = !this.active;
@@ -369,7 +369,7 @@
369
369
  },
370
370
  setup(props, { emit }) {
371
371
  const app = inject('vcsApp');
372
- const isCesiumMap = ref(app.maps.activeMap.className === 'CesiumMap');
372
+ const isCesiumMap = ref(app.maps.activeMap?.className === 'CesiumMap');
373
373
 
374
374
  const name = usePrimitiveProperty(() => props.value, 'name', emit);
375
375
  const title = computed({
@@ -377,13 +377,15 @@
377
377
  return props.value?.properties?.title;
378
378
  },
379
379
  set(value) {
380
- const clone = props.value ? structuredClone(props.value) : {};
381
- if (clone.properties) {
382
- clone.properties.title = value;
383
- } else {
384
- clone.properties = { title };
380
+ if (props.value?.properties?.title !== value) {
381
+ const clone = props.value ? structuredClone(props.value) : {};
382
+ if (clone.properties) {
383
+ clone.properties.title = value;
384
+ } else {
385
+ clone.properties = { title: value };
386
+ }
387
+ emit('input', clone);
385
388
  }
386
- emit('input', clone);
387
389
  },
388
390
  });
389
391
  const animate = usePrimitiveProperty(() => props.value, 'animate', emit);
@@ -435,8 +437,10 @@
435
437
  icon: 'mdi-camera',
436
438
  title: 'components.viewpoint.updateFromView',
437
439
  async callback() {
438
- const viewpoint = await app.maps.activeMap.getViewpoint();
439
- emitInput(emit, viewpoint, () => props.value);
440
+ if (app.maps.activeMap) {
441
+ const viewpoint = await app.maps.activeMap.getViewpoint();
442
+ emitInput(emit, viewpoint, () => props.value);
443
+ }
440
444
  },
441
445
  };
442
446
 
@@ -480,14 +484,16 @@
480
484
  }
481
485
 
482
486
  async function handleInput(key) {
483
- if (key === 'groundPosition') {
484
- cameraPosition.value = undefined;
485
- } else if (key === 'cameraPosition') {
486
- groundPosition.value = (
487
- await app.maps.activeMap.getViewpoint()
488
- ).groundPosition;
487
+ if (app.maps.activeMap) {
488
+ if (key === 'groundPosition') {
489
+ cameraPosition.value = undefined;
490
+ } else if (key === 'cameraPosition') {
491
+ groundPosition.value = (
492
+ await app.maps.activeMap.getViewpoint()
493
+ ).groundPosition;
494
+ }
495
+ await gotoViewpoint();
489
496
  }
490
- await gotoViewpoint();
491
497
  }
492
498
 
493
499
  return {
@@ -75,6 +75,14 @@ export function applyAttributeFilter(attributes: {
75
75
  export function applyOlcsAttributeFilter(attributes: {
76
76
  [x: string]: unknown;
77
77
  }, keys?: Array<string>): Object;
78
+ /**
79
+ * Filters attributes having an empty object as value
80
+ * @param {Object<string, unknown>} attributes
81
+ * @returns {Object}
82
+ */
83
+ export function applyEmptyAttributesFilter(attributes: {
84
+ [x: string]: unknown;
85
+ }): Object;
78
86
  export default AbstractFeatureInfoView;
79
87
  export type FeatureInfoProps = {
80
88
  featureId: string;
@@ -218,6 +218,24 @@ export function applyOlcsAttributeFilter(attributes, keys = []) {
218
218
  }, {});
219
219
  }
220
220
 
221
+ /**
222
+ * Filters attributes having an empty object as value
223
+ * @param {Object<string, unknown>} attributes
224
+ * @returns {Object}
225
+ */
226
+ export function applyEmptyAttributesFilter(attributes) {
227
+ return Object.keys(attributes).reduce((obj, key) => {
228
+ if (
229
+ typeof attributes[key] === 'object' &&
230
+ Object.keys(attributes[key]).length === 0
231
+ ) {
232
+ return obj;
233
+ }
234
+ obj[key] = attributes[key];
235
+ return obj;
236
+ }, {});
237
+ }
238
+
221
239
  /**
222
240
  * Abstract class to be extended by FeatureInfoView classes
223
241
  * Subclasses must always provide a component and may overwrite class methods.
@@ -314,7 +332,8 @@ class AbstractFeatureInfoView extends VcsObject {
314
332
  if (this.keyMapping) {
315
333
  applyKeyMapping(attributes, this.keyMapping);
316
334
  }
317
- return applyOlcsAttributeFilter(attributes, this.attributeKeys);
335
+ attributes = applyOlcsAttributeFilter(attributes, this.attributeKeys);
336
+ return applyEmptyAttributesFilter(attributes);
318
337
  }
319
338
 
320
339
  /**
@@ -138,13 +138,13 @@ function setupFeatureInfoTool(app) {
138
138
  callback() {
139
139
  if (session) {
140
140
  session.stop();
141
- this.title = 'featureInfo.activateToolTitle';
142
141
  } else {
143
142
  session = createFeatureInfoSession(app);
144
143
  session.stopped.addEventListener(() => {
145
144
  this.active = false;
146
145
  session = null;
147
146
  app.featureInfo.clear();
147
+ this.title = 'featureInfo.activateToolTitle';
148
148
  });
149
149
  this.active = true;
150
150
  this.title = 'featureInfo.deactivateToolTitle';
@@ -31,6 +31,9 @@ export type CollectionComponentUiOptions = {
31
31
  * - limit number of items in rendered list (more items are rendered in extra window)
32
32
  */
33
33
  limit?: number | undefined;
34
+ removeTitle?: string | undefined;
35
+ bulkRemoveTitle?: string | undefined;
36
+ renameTitle?: string | undefined;
34
37
  };
35
38
  export type CollectionComponentClassOptions<T extends Object> = CollectionComponentUiOptions & {
36
39
  collection: import("@vcmap/core").Collection<T>;
@@ -133,6 +136,17 @@ declare class CollectionComponentClass<T extends Object | import("@vcmap/core/di
133
136
  * @type {import("vue").Ref<Array<CollectionComponentListItem>>}
134
137
  */
135
138
  selection: import("vue").Ref<Array<CollectionComponentListItem>>;
139
+ /**
140
+ *
141
+ * @type {{ removeTitle: string, bulkRemoveTitle: string, renameTitle: string }}
142
+ * @private
143
+ */
144
+ private _actionTitles;
145
+ /**
146
+ * @tyep {() => void}
147
+ * @private
148
+ */
149
+ private _removeBulkDeleteAction;
136
150
  _resetWatchers: import("vue").WatchStopHandle[];
137
151
  _destroyBulkDelete: () => void;
138
152
  _listeners: (() => void)[];
@@ -169,10 +183,6 @@ declare class CollectionComponentClass<T extends Object | import("@vcmap/core/di
169
183
  * @private
170
184
  */
171
185
  private _addBulkDeleteAction;
172
- /**
173
- * @private
174
- */
175
- private _removeBulkDeleteAction;
176
186
  /**
177
187
  * uses the itemMappings to transform the given Item to an CollectionComponentListItem usable in the VcsList
178
188
  * @param {T} item