@vcmap/ui 6.0.11 → 6.1.0-rc.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 (69) hide show
  1. package/config/base.config.json +25 -3
  2. package/config/dev.config.json +17 -3
  3. package/config/splashscreen.config.json +13 -0
  4. package/dist/assets/cesium.js +1 -1
  5. package/dist/assets/{core-d78889f9.js → core-9d0cfec3.js} +6949 -5868
  6. package/dist/assets/core.js +1 -1
  7. package/dist/assets/ol.js +1 -1
  8. package/dist/assets/ui-08446666.css +1 -0
  9. package/dist/assets/{ui-f56287eb.js → ui-08446666.js} +17374 -19067
  10. package/dist/assets/ui.js +1 -1
  11. package/dist/assets/vue.js +1 -1
  12. package/dist/assets/{vuetify-03bc5f58.js → vuetify-67025c41.js} +1 -1
  13. package/dist/assets/vuetify.js +1 -1
  14. package/index.d.ts +11 -1
  15. package/index.js +6 -0
  16. package/package.json +2 -2
  17. package/plugins/@vcmap-show-case/dev-tools/package.json +5 -0
  18. package/plugins/@vcmap-show-case/dev-tools/src/eventLogger.js +35 -0
  19. package/plugins/@vcmap-show-case/dev-tools/src/index.js +59 -0
  20. package/plugins/@vcmap-show-case/search-example/src/searchImpl.js +10 -0
  21. package/src/application/VcsApp.vue.d.ts +22 -0
  22. package/src/application/VcsContainer.vue.d.ts +15 -0
  23. package/src/application/VcsSplashScreen.vue +35 -28
  24. package/src/application/VcsSplashScreen.vue.d.ts +1 -0
  25. package/src/callback/addModuleCallback.d.ts +29 -0
  26. package/src/callback/addModuleCallback.js +61 -0
  27. package/src/callback/removeModuleCallback.d.ts +29 -0
  28. package/src/callback/removeModuleCallback.js +53 -0
  29. package/src/callback/startRotationCallback.d.ts +37 -0
  30. package/src/callback/startRotationCallback.js +67 -0
  31. package/src/callback/stopRotationCallback.d.ts +8 -0
  32. package/src/callback/stopRotationCallback.js +37 -0
  33. package/src/components/icons/+all.js +4 -0
  34. package/src/components/icons/View360Icon.vue +55 -0
  35. package/src/components/icons/View360Icon.vue.d.ts +2 -0
  36. package/src/components/lists/VcsTreeNode.vue +237 -0
  37. package/src/components/lists/VcsTreeNode.vue.d.ts +31 -0
  38. package/src/components/lists/VcsTreeview.vue +103 -173
  39. package/src/components/lists/VcsTreeview.vue.d.ts +41 -4
  40. package/src/components/lists/VcsTreeviewTitle.vue +10 -3
  41. package/src/components/lists/VcsTreeviewTitle.vue.d.ts +2 -0
  42. package/src/featureInfo/BalloonComponent.vue +18 -47
  43. package/src/featureInfo/BalloonComponent.vue.d.ts +0 -1
  44. package/src/featureInfo/IframeComponent.vue +1 -32
  45. package/src/featureInfo/IframeComponent.vue.d.ts +1 -4
  46. package/src/i18n/de.d.ts +1 -0
  47. package/src/i18n/de.js +1 -0
  48. package/src/i18n/en.d.ts +1 -0
  49. package/src/i18n/en.js +1 -0
  50. package/src/init.d.ts +6 -0
  51. package/src/init.js +26 -14
  52. package/src/manager/window/WindowComponent.vue +1 -1
  53. package/src/navigation/MapNavigation.vue +83 -1
  54. package/src/navigation/MapNavigation.vue.d.ts +2 -0
  55. package/src/search/ResultItem.vue +1 -10
  56. package/src/search/ResultsComponent.vue +11 -1
  57. package/src/search/ResultsComponent.vue.d.ts +9 -0
  58. package/src/search/SearchComponent.vue +88 -11
  59. package/src/search/SearchComponent.vue.d.ts +7 -0
  60. package/src/search/search.d.ts +3 -0
  61. package/src/search/search.js +3 -2
  62. package/src/uiConfig.d.ts +31 -0
  63. package/src/uiConfig.js +5 -0
  64. package/src/vuePlugins/vuetify.js +2 -0
  65. package/dist/assets/ui-f56287eb.css +0 -1
  66. /package/dist/assets/{cesium-5a0d7ac6.js → cesium-11e5bbc6.js} +0 -0
  67. /package/dist/assets/{ol-27d44222.js → ol-0d0ebb27.js} +0 -0
  68. /package/dist/assets/{vue-41556557.js → vue-2f81c7f8.js} +0 -0
  69. /package/dist/assets/{vuetify-03bc5f58.css → vuetify-67025c41.css} +0 -0
@@ -1,163 +1,80 @@
1
1
  <template>
2
- <div class="d-contents">
2
+ <div class="vcs-treeview">
3
3
  <VcsTreeviewSearchbar
4
4
  v-if="showSearchbar"
5
5
  :placeholder="searchbarPlaceholder"
6
6
  v-model="localSearchValue"
7
7
  />
8
- <v-treeview
9
- class="vcs-treeview"
10
- density="compact"
11
- item-value="name"
12
- :item-props="true"
13
- :custom-filter="handleFilter"
14
- :selectable="false"
15
- :activatable="false"
16
- expand-icon="mdi-chevron-right"
17
- collapse-icon="mdi-chevron-down"
18
- v-bind="{ ...$props, ...$attrs }"
19
- :search="localSearchValue"
20
- @click:select="itemClicked($event.id, $event.event)"
21
- >
22
- <template #title="scope">
23
- <slot name="title" v-bind="scope ?? {}">
24
- <VcsTreeviewTitle :item="scope.item"></VcsTreeviewTitle>
25
- </slot>
26
- </template>
27
- <template v-for="slot of forwardSlots" #[slot]="scope">
28
- <slot :name="slot" v-bind="scope ?? {}" />
29
- </template>
30
- <template #prepend="scope">
31
- <slot name="prepend" v-bind="scope ?? {}">
32
- <template v-if="scope.item?.icon">
33
- <v-icon
34
- v-if="typeof scope.item?.icon === 'string'"
35
- :size="iconSize"
36
- >
37
- {{ scope.item.icon }}
38
- </v-icon>
39
- <ImageElementInjector :element="scope.item.icon" v-else />
40
- </template>
41
- </slot>
42
- </template>
43
- <template #append="scope">
44
- <slot name="append" v-bind="scope ?? {}">
45
- <VcsActionButtonList
46
- v-if="scope.item.actions?.length > 0"
47
- :actions="scope.item.actions"
48
- :overflow-count="3"
49
- :disabled="scope.item.disabled"
50
- right
51
- tooltip-position="right"
52
- block-overflow
53
- class="col-4 pa-0 d-flex align-center"
54
- />
55
- </slot>
56
- </template>
57
- </v-treeview>
8
+ <div v-for="item in items" :key="item.name" class="vcs-treeitem">
9
+ <VcsTreeNode
10
+ class="root-node"
11
+ :item="item"
12
+ :search="localSearchValue"
13
+ v-model:opened="localOpenedItems"
14
+ :open-on-click="openOnClick"
15
+ :item-children="itemChildren"
16
+ @item-toggled="itemToggled"
17
+ @click="itemClicked"
18
+ >
19
+ <template v-for="slot of forwardSlots" #[slot]="scope">
20
+ <slot :name="slot" v-bind="scope ?? {}" />
21
+ </template>
22
+ </VcsTreeNode>
23
+ </div>
58
24
  </div>
59
25
  </template>
60
- <style lang="scss" scoped>
61
- :deep(.vcs-treeview) {
62
- // Root Level Entries should be 40px high
63
- > .v-list-item,
64
- > .v-list-group > .v-list-item {
65
- min-height: calc(var(--v-vcs-font-size) * 2 + 14px) !important;
66
- padding-left: 6px;
67
- }
68
- // Border around root nodes with children included
69
- > .v-list-item:not(:last-child),
70
- > .v-list-group:not(:last-child) {
71
- border-bottom: 1px solid rgb(var(--v-theme-base-lighten-2));
72
- }
73
- // Only Group Entries have a bold font
74
- > .v-list-group
75
- > .v-list-item
76
- > .v-list-item__content
77
- > .v-list-item-title {
78
- font-weight: 700 !important;
79
- }
80
- }
81
-
82
- // leaf indent
83
- :deep(.v-list--slim .v-treeview-group.v-list-group) {
84
- --prepend-width: 0px;
85
- }
86
-
87
- // Padding left of root nodes
88
- :deep(.v-list-item__prepend) {
89
- width: var(--v-vcs-font-size);
90
- margin-right: 8px;
91
- > .v-list-item-action > .v-btn {
92
- width: var(--v-vcs-font-size);
93
- height: var(--v-vcs-font-size);
94
- margin: auto;
95
- // for alignment of chevron
96
- display: flex;
97
- }
98
- }
99
-
100
- // Width of prepend for group nodes having two icons (chevron and custom icon)
101
- :deep(.v-list-item__prepend:has(> .v-list-item-action + .v-icon)) {
102
- width: calc(var(--v-vcs-font-size) + 23px);
103
- .v-list-item-action {
104
- margin-right: calc(22px - var(--v-vcs-font-size));
105
- }
106
- }
107
-
108
- // remove hover shadow over button
109
- :deep(.v-btn__overlay) {
110
- --v-hover-opacity: 0;
111
- }
112
- // remove ripple effect
113
- :deep(.v-ripple__container) {
114
- display: none;
115
- }
116
- // hide active class
117
- :deep(.v-list-item__overlay) {
118
- display: none;
119
- }
120
-
121
- .d-contents {
122
- display: contents;
123
- }
124
- </style>
125
26
 
126
27
  <script>
127
- import { getCurrentInstance } from 'vue';
128
- import { VIcon } from 'vuetify/components';
129
- import { VTreeview } from 'vuetify/labs/VTreeview';
130
- import { useProxiedAtomicModel } from '../modelHelper.js';
28
+ import { watch } from 'vue';
29
+ import {
30
+ useProxiedAtomicModel,
31
+ useProxiedComplexModel,
32
+ } from '../modelHelper.js';
131
33
  import { getForwardSlots } from '../composables.js';
132
34
  import VcsTreeviewSearchbar from './VcsTreeviewSearchbar.vue';
133
- import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
134
- import ImageElementInjector from '../ImageElementInjector.vue';
135
- import VcsTreeviewTitle from './VcsTreeviewTitle.vue';
136
- import { useIconSize } from '../../vuePlugins/vuetify.js';
35
+ import VcsTreeNode from './VcsTreeNode.vue';
137
36
 
138
37
  /**
139
- * @description extends API of https://vuetifyjs.com/en/api/v-treeview/
140
- * Can render dynamic components as leaf items.
141
- * In order to display an item needs to be registered and added to `availableComponents`.
38
+ * @description The VcsTreeview is heavily inspired by the Vuetify VTreeview component. Can render dynamic components as leaf items.
142
39
  * Exposes the `search` value for filtering the treeview.
143
- * @vue-prop {boolean} [showSearchbar=false] - Whether there is a searchbar for this treeview
144
- * @vue-prop {string} [searchbarPlaceholder] - Placeholder text for the searchbar, will be translated
40
+ * Exposes the `opened` model-value for controlling the opened state of the treeview.
41
+ * Forwards the `prepend`, `title` and `append` slots to the VcsTreeNode component.
42
+ * @vue-prop {Array<import("./VcsTreeNode.vue").VcsTreeNodeItem>} items.
43
+ * @vue-prop {Array<import("./VcsTreeNode.vue").VcsTreeNodeItem>} opened - Array of name of opened nodes.
44
+ * @vue-prop {string} [itemChildren='children'] - The property key of the children.
45
+ * @vue-prop {boolean} [openAll=false] - Whether to open all root items on startup.
46
+ * @vue-prop {boolean} [openOnClick=false] - Whether to open items on title click.
47
+ * @vue-prop {string} [search=''] - The value used to filter the items.
48
+ * @vue-prop {boolean} [showSearchbar=false] - Whether there is a searchbar for this treeview.
49
+ * @vue-prop {string} [searchbarPlaceholder] - Placeholder text for the searchbar, will be translated.
145
50
  */
146
51
  export default {
147
52
  name: 'VcsTreeview',
148
53
  components: {
149
- VcsTreeviewTitle,
150
- VIcon,
151
- ImageElementInjector,
152
- VcsActionButtonList,
153
54
  VcsTreeviewSearchbar,
154
- VTreeview,
55
+ VcsTreeNode,
155
56
  },
156
57
  props: {
157
58
  items: {
158
59
  type: Array,
159
60
  default: () => [],
160
61
  },
62
+ opened: {
63
+ type: Array,
64
+ default: () => [],
65
+ },
66
+ itemChildren: {
67
+ type: String,
68
+ default: 'children',
69
+ },
70
+ openAll: {
71
+ type: Boolean,
72
+ default: false,
73
+ },
74
+ openOnClick: {
75
+ type: Boolean,
76
+ default: false,
77
+ },
161
78
  search: {
162
79
  type: String,
163
80
  default: '',
@@ -171,58 +88,71 @@
171
88
  default: undefined,
172
89
  },
173
90
  },
174
- emits: ['update:search'],
91
+ emits: ['update:search', 'update:opened'],
175
92
  setup(props, { emit, slots }) {
93
+ const forwardSlots = getForwardSlots(slots);
176
94
  const localSearchValue = useProxiedAtomicModel(props, 'search', emit);
95
+ const localOpenedItems = useProxiedComplexModel(props, 'opened', emit);
177
96
 
178
- // TODO properly type the tree view item interface & export in index.d.ts
97
+ if ((props.openAll ?? false) !== false) {
98
+ localOpenedItems.value = props.items.map((item) => item.name);
99
+ watch(
100
+ () => props.items,
101
+ (items) => {
102
+ const newItems = items.filter(
103
+ (item) => !localOpenedItems.value.includes(item.name),
104
+ );
105
+ localOpenedItems.value.push(...newItems.map((item) => item.name));
106
+ },
107
+ );
108
+ }
179
109
 
180
- const vm = getCurrentInstance().proxy;
181
- /**
182
- * @param {string} value
183
- * @param {string} q
184
- * @param {Object} item
185
- * @returns {number}
186
- */
187
- const handleFilter = (value, q, item) => {
188
- if (value == null || q == null) {
189
- return -1;
110
+ function itemToggled(name, state) {
111
+ if (state) {
112
+ localOpenedItems.value.push(name);
113
+ } else {
114
+ const idx = localOpenedItems.value.indexOf(name);
115
+ if (idx >= 0) {
116
+ localOpenedItems.value.splice(idx, 1);
117
+ }
190
118
  }
191
- const translatedTitle = item.title ? vm.$st(item.title) : item.value;
192
- return translatedTitle
193
- .toLocaleLowerCase()
194
- .indexOf(q.toLocaleLowerCase());
195
- };
119
+ }
196
120
 
197
- const forwardSlots = getForwardSlots(slots, [
198
- 'append',
199
- 'title',
200
- 'prepend',
201
- ]);
202
- const iconSize = useIconSize();
203
121
  return {
204
- iconSize,
205
122
  localSearchValue,
206
- handleFilter,
123
+ localOpenedItems,
207
124
  forwardSlots,
208
- itemClicked(name, event) {
209
- const items = props.items.slice();
210
- let item;
211
- while (items.length > 0) {
212
- item = items.pop();
213
- if (item.name === name) {
214
- break;
215
- }
216
- if (item.children?.length > 0) {
217
- items.push(...item.children);
125
+ itemToggled,
126
+ itemClicked(item, event) {
127
+ if (item?.clickable) {
128
+ if (item?.clicked && !item?.disabled) {
129
+ item.clicked(event);
218
130
  }
219
- }
220
-
221
- if (item?.clicked && !item?.disabled) {
222
- item.clicked(event);
131
+ } else if ((props.openOnClick ?? false) !== false) {
132
+ itemToggled(item.name, !localOpenedItems.value.includes(item.name));
223
133
  }
224
134
  },
225
135
  };
226
136
  },
227
137
  };
228
138
  </script>
139
+
140
+ <style lang="scss" scoped>
141
+ // Hide node component when not rendered (e.g. filtered by search)
142
+ .vcs-treeitem:not(:has(.vcs-tree-node)) {
143
+ display: none;
144
+ }
145
+ .vcs-treeitem:not(:last-child) {
146
+ border-bottom: 1px solid rgb(var(--v-theme-base-lighten-2));
147
+ }
148
+ .root-node {
149
+ :deep(.level-0) {
150
+ // Root Level Entries should be 40px high
151
+ min-height: calc(var(--v-vcs-font-size) * 2 + 14px) !important;
152
+ }
153
+ // Only Group Entries have a bold font
154
+ > :deep(.group) {
155
+ font-weight: 700 !important;
156
+ }
157
+ }
158
+ </style>
@@ -3,6 +3,22 @@ declare const _default: import("vue").DefineComponent<{
3
3
  type: ArrayConstructor;
4
4
  default: () => never[];
5
5
  };
6
+ opened: {
7
+ type: ArrayConstructor;
8
+ default: () => never[];
9
+ };
10
+ itemChildren: {
11
+ type: StringConstructor;
12
+ default: string;
13
+ };
14
+ openAll: {
15
+ type: BooleanConstructor;
16
+ default: boolean;
17
+ };
18
+ openOnClick: {
19
+ type: BooleanConstructor;
20
+ default: boolean;
21
+ };
6
22
  search: {
7
23
  type: StringConstructor;
8
24
  default: string;
@@ -16,16 +32,32 @@ declare const _default: import("vue").DefineComponent<{
16
32
  default: undefined;
17
33
  };
18
34
  }, {
19
- iconSize: import("vue").ComputedRef<number>;
20
35
  localSearchValue: import("vue").Ref<any>;
21
- handleFilter: (value: string, q: string, item: Object) => number;
36
+ localOpenedItems: import("vue").Ref<any>;
22
37
  forwardSlots: string[];
23
- itemClicked(name: any, event: any): void;
24
- }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:search"[], "update:search", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
38
+ itemToggled: (name: any, state: any) => void;
39
+ itemClicked(item: any, event: any): void;
40
+ }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:opened" | "update:search")[], "update:opened" | "update:search", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
25
41
  items: {
26
42
  type: ArrayConstructor;
27
43
  default: () => never[];
28
44
  };
45
+ opened: {
46
+ type: ArrayConstructor;
47
+ default: () => never[];
48
+ };
49
+ itemChildren: {
50
+ type: StringConstructor;
51
+ default: string;
52
+ };
53
+ openAll: {
54
+ type: BooleanConstructor;
55
+ default: boolean;
56
+ };
57
+ openOnClick: {
58
+ type: BooleanConstructor;
59
+ default: boolean;
60
+ };
29
61
  search: {
30
62
  type: StringConstructor;
31
63
  default: string;
@@ -39,10 +71,15 @@ declare const _default: import("vue").DefineComponent<{
39
71
  default: undefined;
40
72
  };
41
73
  }>> & {
74
+ "onUpdate:opened"?: ((...args: any[]) => any) | undefined;
42
75
  "onUpdate:search"?: ((...args: any[]) => any) | undefined;
43
76
  }, {
44
77
  search: string;
78
+ openOnClick: boolean;
45
79
  items: unknown[];
80
+ opened: unknown[];
81
+ itemChildren: string;
82
+ openAll: boolean;
46
83
  showSearchbar: boolean;
47
84
  searchbarPlaceholder: string;
48
85
  }, {}>;
@@ -8,6 +8,10 @@
8
8
  type: Object,
9
9
  default: undefined,
10
10
  },
11
+ cursorPointer: {
12
+ type: Boolean,
13
+ default: false,
14
+ },
11
15
  });
12
16
 
13
17
  const titleParent = ref();
@@ -23,14 +27,17 @@
23
27
  overflow: hidden;
24
28
  text-overflow: ellipsis;
25
29
  }
30
+ .cursor-pointer {
31
+ cursor: pointer;
32
+ }
26
33
  </style>
27
34
  <template>
28
35
  <div
29
- class="title-parent pr-2 vcs-treeview-title"
36
+ class="title-parent pr-2 vcs-treeview-title w-100"
37
+ :class="{ 'cursor-pointer': cursorPointer }"
30
38
  ref="titleParent"
31
- @click.stop="item.clicked && !item.disabled && item.clicked($event)"
32
39
  >
33
- <span>
40
+ <span class="w-100">
34
41
  {{ $st(item.title || item.name) }}
35
42
  </span>
36
43
  <v-tooltip v-if="tooltip" activator="parent">
@@ -1,6 +1,8 @@
1
1
  declare const _default: import("vue").DefineComponent<{}, {
2
+ cursorPointer: boolean;
2
3
  item?: Record<string, any> | undefined;
3
4
  $props: {
5
+ readonly cursorPointer?: boolean | undefined;
4
6
  readonly item?: Record<string, any> | undefined;
5
7
  };
6
8
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
@@ -1,5 +1,8 @@
1
1
  <template>
2
- <v-card class="mx-auto elevation-0 balloon-component" v-if="position">
2
+ <v-sheet
3
+ class="balloon-component d-flex flex-column flex-grow-1"
4
+ v-if="position"
5
+ >
3
6
  <slot name="balloon-header" :attrs="{ ...$props, ...$attrs }">
4
7
  <v-list-item class="px-1">
5
8
  <template #prepend="prependScope">
@@ -32,21 +35,17 @@
32
35
 
33
36
  <v-divider />
34
37
 
35
- <v-card
36
- class="overflow-y-auto py-2 elevation-0"
37
- :max-height="maxHeight"
38
- color="transparent"
38
+ <div
39
+ class="overflow-x-hidden overflow-y-auto d-flex flex-column flex-grow-1"
39
40
  >
40
41
  <slot :attrs="{ ...$props, ...$attrs }">
41
- <v-list
42
- v-for="(value, key, index) in attributes"
43
- :key="`attribute-${index}`"
44
- color="transparent"
45
- >
46
- <v-list-item class="px-2">
47
- <v-list-item-title>
48
- {{ $st(key) }}
49
- </v-list-item-title>
42
+ <v-list color="transparent" class="py-2">
43
+ <v-list-item
44
+ v-for="(value, key, index) in attributes"
45
+ :key="`attribute-${index}`"
46
+ class="px-2"
47
+ :title="$st(key)"
48
+ >
50
49
  <v-list-item-subtitle
51
50
  :tag="getTag(tags, key)"
52
51
  v-bind="getTagOptions(tags, key)"
@@ -56,13 +55,13 @@
56
55
  </v-list-item>
57
56
  </v-list>
58
57
  </slot>
59
- </v-card>
60
- </v-card>
58
+ </div>
59
+ </v-sheet>
61
60
  </template>
62
61
  <script>
63
- import { inject, onMounted, onUnmounted, ref, watch } from 'vue';
62
+ import { inject, onMounted, onUnmounted, watch } from 'vue';
64
63
  import {
65
- VCard,
64
+ VSheet,
66
65
  VDivider,
67
66
  VIcon,
68
67
  VList,
@@ -70,10 +69,6 @@
70
69
  VListItemSubtitle,
71
70
  VListItemTitle,
72
71
  } from 'vuetify/components';
73
- import {
74
- getTargetSize,
75
- posToNumber,
76
- } from '../manager/window/windowHelper.js';
77
72
  import { setupBalloonPositionListener } from './balloonHelper.js';
78
73
  import VcsButton from '../components/buttons/VcsButton.vue';
79
74
  import { getTag, getTagOptions } from '../components/tables/VcsTable.vue';
@@ -97,7 +92,7 @@
97
92
  name: 'BalloonComponent',
98
93
  components: {
99
94
  VcsButton,
100
- VCard,
95
+ VSheet,
101
96
  VList,
102
97
  VListItem,
103
98
  VIcon,
@@ -134,28 +129,6 @@
134
129
  setup(props, { attrs }) {
135
130
  const app = inject('vcsApp');
136
131
  const windowId = attrs['window-state'].id;
137
- function getMaxHeight() {
138
- if (app.windowManager.get(windowId)?.position?.maxHeight) {
139
- return (
140
- posToNumber(
141
- app.windowManager.get(windowId).position.maxHeight,
142
- 'maxHeight',
143
- getTargetSize(app.maps.target),
144
- ) - 49 // 44px header offset with padding 5px
145
- );
146
- }
147
- if (app.windowManager.get(windowId)?.position?.height) {
148
- return (
149
- posToNumber(
150
- app.windowManager.get(windowId).position.height,
151
- 'height',
152
- getTargetSize(app.maps.target),
153
- ) - 49 // 44px header offset with padding 5px
154
- );
155
- }
156
- return 250;
157
- }
158
- const maxHeight = ref(getMaxHeight());
159
132
 
160
133
  let balloonPositionListener = null;
161
134
  const destroyListener = () => {
@@ -181,7 +154,6 @@
181
154
  windowId,
182
155
  props.position,
183
156
  );
184
- maxHeight.value = getMaxHeight();
185
157
  },
186
158
  );
187
159
 
@@ -199,7 +171,6 @@
199
171
  close,
200
172
  getTag,
201
173
  getTagOptions,
202
- maxHeight,
203
174
  };
204
175
  },
205
176
  };
@@ -28,7 +28,6 @@ declare const _default: import("vue").DefineComponent<{
28
28
  close: () => void;
29
29
  getTag: typeof getTag;
30
30
  getTagOptions: typeof getTagOptions;
31
- maxHeight: import("vue").Ref<number>;
32
31
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
33
32
  featureId: {
34
33
  type: StringConstructor;
@@ -2,17 +2,10 @@
2
2
  <iframe
3
3
  :src="src"
4
4
  :title="title"
5
- :style="{ height, width }"
6
- class="iframe-component"
5
+ class="h-100 w-100 border-0 d-block flex-grow-1"
7
6
  />
8
7
  </template>
9
8
  <script>
10
- import { inject } from 'vue';
11
- import {
12
- getTargetSize,
13
- posToNumber,
14
- } from '../manager/window/windowHelper.js';
15
-
16
9
  /**
17
10
  * @description An iframe component
18
11
  * @vue-prop {string} src - Specifies the address of the document to embed in the <iframe>
@@ -38,30 +31,6 @@
38
31
  default: () => {},
39
32
  },
40
33
  },
41
- setup(props, { attrs }) {
42
- const app = inject('vcsApp');
43
- let { height, width } = app.windowManager.get(
44
- attrs['window-state'].id,
45
- ).position;
46
-
47
- // set iframe size to absolute px values
48
- if (app.maps.target) {
49
- const targetSize = getTargetSize(app.maps.target);
50
- const heightNumber = posToNumber(height, 'height', targetSize);
51
- if (heightNumber) {
52
- height = `${heightNumber - 36}px`; // 32px header height + 4px margin
53
- }
54
- const widthNumber = posToNumber(width, 'width', targetSize);
55
- if (widthNumber) {
56
- width = `${widthNumber}px`;
57
- }
58
- }
59
-
60
- return {
61
- height,
62
- width,
63
- };
64
- },
65
34
  };
66
35
  </script>
67
36
 
@@ -14,10 +14,7 @@ declare const _default: import("vue").DefineComponent<{
14
14
  type: ObjectConstructor;
15
15
  default: () => void;
16
16
  };
17
- }, {
18
- height: any;
19
- width: any;
20
- }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
17
+ }, any, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
21
18
  src: {
22
19
  type: StringConstructor;
23
20
  required: true;
package/src/i18n/de.d.ts CHANGED
@@ -147,6 +147,7 @@ declare namespace messages {
147
147
  }
148
148
  }
149
149
  export namespace navigation {
150
+ let rotateButton: string;
150
151
  let obliqueLeftTooltip: string;
151
152
  let obliqueRightTooltip: string;
152
153
  let zoomInTooltip: string;
package/src/i18n/de.js CHANGED
@@ -46,6 +46,7 @@ const messages = {
46
46
  },
47
47
  },
48
48
  navigation: {
49
+ rotateButton: 'Ansicht drehen',
49
50
  obliqueLeftTooltip: 'Ansicht nach links drehen',
50
51
  obliqueRightTooltip: 'Ansicht nach rechts drehen',
51
52
  zoomInTooltip: 'Hineinzoomen',
package/src/i18n/en.d.ts CHANGED
@@ -147,6 +147,7 @@ declare namespace messages {
147
147
  }
148
148
  }
149
149
  export namespace navigation {
150
+ let rotateButton: string;
150
151
  let obliqueLeftTooltip: string;
151
152
  let obliqueRightTooltip: string;
152
153
  let zoomInTooltip: string;
package/src/i18n/en.js CHANGED
@@ -46,6 +46,7 @@ const messages = {
46
46
  },
47
47
  },
48
48
  navigation: {
49
+ rotateButton: 'Rotate view',
49
50
  obliqueLeftTooltip: 'Rotate view to left',
50
51
  obliqueRightTooltip: 'Rotate view to right',
51
52
  zoomInTooltip: 'Zoom in',