@vcmap/ui 6.0.0-rc.3 → 6.0.0-rc.5

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 (161) hide show
  1. package/build/buildHelpers.js +60 -11
  2. package/build/bundle.js +1 -1
  3. package/build/info/publish.js +25 -31
  4. package/build/lintTypes.js +5 -0
  5. package/config/base.config.json +2 -1
  6. package/config/dev.config.json +7 -1
  7. package/config/www.config.json +25 -22
  8. package/dist/assets/@mdi/font/css/{materialdesignicons.min-7a4f6be0.css → materialdesignicons.min-680621ca.css} +1 -1
  9. package/dist/assets/{cesium-cb4dbfba.js → cesium-126f111a.js} +272 -385
  10. package/dist/assets/cesium.js +1 -1
  11. package/dist/assets/{core-72f21835.js → core-1c8b8674.js} +1417 -1453
  12. package/dist/assets/core.js +1 -1
  13. package/dist/assets/{ol-2d33bc8b.js → ol-27f9b3f3.js} +233 -329
  14. package/dist/assets/ol.js +1 -1
  15. package/dist/assets/ui-7214428e.css +1 -0
  16. package/dist/assets/{ui-2ab43a16.js → ui-7214428e.js} +9573 -9438
  17. package/dist/assets/ui.js +1 -1
  18. package/dist/assets/vue-c78a5f76.js +6083 -0
  19. package/dist/assets/vue.js +1 -1
  20. package/dist/assets/{vuetify-760ced3b.css → vuetify-88a2fabe.css} +2 -2
  21. package/dist/assets/{vuetify-760ced3b.js → vuetify-88a2fabe.js} +7672 -7877
  22. package/dist/assets/vuetify.js +1 -1
  23. package/index.d.ts +6 -8
  24. package/index.js +7 -5
  25. package/package.json +16 -16
  26. package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +2 -3
  27. package/plugins/@vcmap-show-case/project-selector/src/ModulesListComponent.vue +18 -11
  28. package/plugins/@vcmap-show-case/search-example/src/index.js +1 -0
  29. package/plugins/@vcmap-show-case/search-example/src/searchImpl.js +35 -5
  30. package/plugins/@vcmap-show-case/toolbox-example/src/index.js +2 -1
  31. package/plugins/package.json +3 -23
  32. package/public/assets/@mdi/font/css/materialdesignicons.min.css +1 -1
  33. package/src/actions/StyleSelector.vue +1 -1
  34. package/src/actions/actionHelper.js +13 -2
  35. package/src/actions/listActions.d.ts +4 -4
  36. package/src/actions/listActions.js +2 -2
  37. package/src/application/VcsApp.vue +96 -31
  38. package/src/application/VcsApp.vue.d.ts +297 -4
  39. package/src/application/VcsContainer.vue +26 -9
  40. package/src/application/VcsContainer.vue.d.ts +237 -0
  41. package/src/application/VcsMainMap.vue +7 -7
  42. package/src/application/VcsMainMap.vue.d.ts +2 -2
  43. package/src/application/VcsNavbar.vue +5 -1
  44. package/src/application/VcsSplashScreen.vue +24 -26
  45. package/src/application/VcsTextPageFooter.vue +2 -1
  46. package/src/components/buttons/VcsActionButtonList.vue +59 -3
  47. package/src/components/buttons/VcsActionButtonList.vue.d.ts +28 -0
  48. package/src/components/form-inputs-controls/VcsChipArrayInput.vue +15 -13
  49. package/src/components/form-inputs-controls/VcsChipArrayInput.vue.d.ts +3 -4
  50. package/src/components/form-inputs-controls/VcsCoordinate.vue +4 -3
  51. package/src/components/form-inputs-controls/VcsSelect.vue +1 -4
  52. package/src/components/form-inputs-controls/VcsSlider.vue +0 -1
  53. package/src/components/form-inputs-controls/VcsSlider.vue.d.ts +2 -4
  54. package/src/components/form-inputs-controls/VcsTextArea.vue +1 -4
  55. package/src/components/form-inputs-controls/VcsTextField.vue +14 -0
  56. package/src/components/form-inputs-controls/VcsTextField.vue.d.ts +9 -0
  57. package/src/components/form-inputs-controls/VcsWizardStep.vue +2 -5
  58. package/src/components/form-inputs-controls/vcsTextField.scss +1 -4
  59. package/src/components/form-output/VcsFormattedNumber.vue +6 -4
  60. package/src/components/form-output/VcsMarkdown.vue +15 -12
  61. package/src/components/form-output/VcsMarkdown.vue.d.ts +1 -0
  62. package/src/components/form-output/markdownHelper.d.ts +30 -0
  63. package/src/components/form-output/markdownHelper.js +398 -0
  64. package/src/components/import/VcsFileDrop.vue +8 -5
  65. package/src/components/import/VcsImportComponent.vue +4 -3
  66. package/src/components/import/VcsImportComponent.vue.d.ts +1 -2
  67. package/src/components/lists/VcsActionList.vue +4 -0
  68. package/src/components/lists/VcsList.vue +22 -37
  69. package/src/components/lists/VcsList.vue.d.ts +14 -55
  70. package/src/components/lists/{VcsListItem.vue → VcsListItemComponent.vue} +17 -1
  71. package/src/components/lists/VcsListItemComponent.vue.d.ts +69 -0
  72. package/src/components/lists/VcsTreeview.vue +43 -16
  73. package/src/components/lists/VcsTreeview.vue.d.ts +14 -3
  74. package/src/components/lists/VcsTreeviewLeaf.vue +15 -6
  75. package/src/components/lists/VcsTreeviewSearchbar.vue +2 -2
  76. package/src/components/notification/VcsHelp.vue +1 -1
  77. package/src/components/notification/VcsHelp.vue.d.ts +3 -2
  78. package/src/components/section/VcsExpansionPanel.vue +2 -2
  79. package/src/components/section/VcsFormSection.vue +10 -4
  80. package/src/components/section/VcsFormSection.vue.d.ts +1 -2
  81. package/src/components/style/VcsTextMenu.vue +1 -1
  82. package/src/components/style/VcsVectorStyleComponent.vue +1 -1
  83. package/src/components/tables/VcsDataTable.vue +28 -22
  84. package/src/components/tables/VcsTable.vue +45 -62
  85. package/src/components/tables/VcsTable.vue.d.ts +30 -17
  86. package/src/components/tables/VcsTableCell.vue +72 -0
  87. package/src/components/tables/VcsTableCell.vue.d.ts +13 -0
  88. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +6 -5
  89. package/src/components/vector-properties/VcsFeatureTransforms.vue +5 -0
  90. package/src/components/viewpoint/VcsViewpointComponent.vue +2 -2
  91. package/src/components/viewpoint/VcsViewpointEditor.vue +2 -2
  92. package/src/contentTree/LayerTree.vue +9 -27
  93. package/src/contentTree/LayerTree.vue.d.ts +1 -1
  94. package/src/contentTree/contentTreeCollection.d.ts +1 -0
  95. package/src/contentTree/contentTreeCollection.js +45 -11
  96. package/src/featureInfo/BalloonComponent.vue +14 -15
  97. package/src/featureInfo/MarkdownBalloonComponent.vue +4 -2
  98. package/src/featureInfo/MarkdownBalloonComponent.vue.d.ts +2 -2
  99. package/src/featureInfo/abstractFeatureInfoView.d.ts +6 -0
  100. package/src/featureInfo/abstractFeatureInfoView.js +15 -7
  101. package/src/featureInfo/featureInfo.d.ts +5 -5
  102. package/src/featureInfo/featureInfo.js +51 -31
  103. package/src/featureInfo/iframeFeatureInfoView.d.ts +8 -2
  104. package/src/featureInfo/iframeFeatureInfoView.js +15 -5
  105. package/src/featureInfo/markdownBalloonFeatureInfoView.d.ts +1 -1
  106. package/src/featureInfo/markdownBalloonFeatureInfoView.js +5 -5
  107. package/src/featureInfo/markdownFeatureInfoView.d.ts +1 -1
  108. package/src/featureInfo/markdownFeatureInfoView.js +9 -11
  109. package/src/featureInfo/tableFeatureInfoView.js +13 -4
  110. package/src/manager/collectionManager/CollectionComponentList.vue +1 -1
  111. package/src/manager/collectionManager/CollectionComponentList.vue.d.ts +2 -2
  112. package/src/manager/collectionManager/collectionComponentClass.d.ts +1 -1
  113. package/src/manager/collectionManager/collectionComponentClass.js +2 -2
  114. package/src/manager/collectionManager/editorCollectionComponentClass.js +2 -1
  115. package/src/manager/panel/PanelComponent.vue +2 -9
  116. package/src/manager/panel/PanelManagerComponent.vue +7 -3
  117. package/src/manager/panel/panelHelper.js +3 -3
  118. package/src/manager/panel/panelManager.d.ts +9 -1
  119. package/src/manager/panel/panelManager.js +15 -3
  120. package/src/manager/toolbox/GroupToolboxComponent.vue +8 -4
  121. package/src/manager/toolbox/GroupToolboxComponent.vue.d.ts +1 -0
  122. package/src/manager/toolbox/SelectToolboxComponent.vue +7 -4
  123. package/src/manager/toolbox/SelectToolboxComponent.vue.d.ts +1 -0
  124. package/src/manager/toolbox/ToolboxManager.vue +9 -6
  125. package/src/manager/toolbox/ToolboxManager.vue.d.ts +1 -0
  126. package/src/manager/window/WindowComponent.vue +12 -8
  127. package/src/manager/window/WindowComponentHeader.vue +29 -8
  128. package/src/manager/window/WindowComponentHeader.vue.d.ts +2 -0
  129. package/src/manager/window/WindowManager.vue +2 -2
  130. package/src/navigation/MapNavigation.vue +20 -0
  131. package/src/navigation/locatorHelper.js +1 -1
  132. package/src/navigation/overviewMap.js +1 -1
  133. package/src/notifier/NotifierComponent.vue +18 -15
  134. package/src/search/ResultItem.vue +18 -6
  135. package/src/search/ResultsComponent.vue +31 -20
  136. package/src/search/ResultsComponent.vue.d.ts +2 -1
  137. package/src/search/SearchComponent.vue +8 -14
  138. package/src/search/SearchComponent.vue.d.ts +1 -0
  139. package/src/siteConfig.js +8 -8
  140. package/src/styles/_typography.scss +0 -2
  141. package/src/styles/main.scss +0 -4
  142. package/src/uiConfig.d.ts +300 -5
  143. package/src/uiConfig.js +28 -16
  144. package/src/vcsUiApp.d.ts +7 -7
  145. package/src/vcsUiApp.js +10 -9
  146. package/src/vuePlugins/vuetify.js +3 -0
  147. package/dist/assets/ui-2ab43a16.css +0 -1
  148. package/dist/assets/vue-03b265aa.js +0 -6096
  149. package/src/application/markdownHelper.d.ts +0 -12
  150. package/src/application/markdownHelper.js +0 -70
  151. package/src/components/lists/VcsListItem.vue.d.ts +0 -27
  152. package/src/components/notification/VcsTooltip.vue +0 -156
  153. package/src/components/notification/VcsTooltip.vue.d.ts +0 -27
  154. package/src/featureInfo/MarkdownComponent.vue +0 -16
  155. package/src/featureInfo/MarkdownComponent.vue.d.ts +0 -7
  156. package/src/styles/_theming.scss +0 -73
  157. package/src/styles/settings.scss +0 -6
  158. package/src/styles/shades.scss +0 -4
  159. package/src/styles/variables.scss +0 -140
  160. package/src/styles/vcsFont.scss +0 -2
  161. package/src/styles/vcsGrid.scss +0 -3
@@ -10,16 +10,16 @@
10
10
  <v-btn
11
11
  :ripple="false"
12
12
  dense
13
- variant="plain"
13
+ variant="text"
14
14
  icon
15
- :size="useItemHeight().value - 4"
15
+ :size="itemHeight - 4"
16
16
  :disabled="disabled"
17
17
  elevation="0"
18
18
  @click="open = !open"
19
19
  v-if="expandable"
20
20
  :aria-expanded="open"
21
21
  >
22
- <v-icon :size="useItemHeight().value - 8">{{
22
+ <v-icon>{{
23
23
  open ? 'mdi-chevron-down' : 'mdi-chevron-right'
24
24
  }}</v-icon>
25
25
  </v-btn>
@@ -134,12 +134,14 @@
134
134
  return props.headerActions;
135
135
  });
136
136
 
137
+ const itemHeight = useItemHeight();
138
+
137
139
  return {
138
140
  open,
139
141
  showContent,
140
142
  showHelp,
141
143
  actions,
142
- useItemHeight,
144
+ itemHeight,
143
145
  };
144
146
  },
145
147
  };
@@ -152,4 +154,8 @@
152
154
  .v-alert--text:before {
153
155
  background-color: transparent;
154
156
  }
157
+ // remove hover shadow over button
158
+ :deep(.v-btn__overlay) {
159
+ --v-hover-opacity: 0;
160
+ }
155
161
  </style>
@@ -33,7 +33,7 @@ declare const _default: import("vue").DefineComponent<{
33
33
  showContent: import("vue").ComputedRef<boolean>;
34
34
  showHelp: import("vue").ComputedRef<boolean>;
35
35
  actions: import("vue").ComputedRef<VcsAction>;
36
- useItemHeight: typeof useItemHeight;
36
+ itemHeight: import("vue").ComputedRef<number>;
37
37
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
38
38
  heading: {
39
39
  type: StringConstructor;
@@ -74,4 +74,3 @@ declare const _default: import("vue").DefineComponent<{
74
74
  helpText: string;
75
75
  }, {}>;
76
76
  export default _default;
77
- import { useItemHeight } from '../../vuePlugins/vuetify.js';
@@ -1,8 +1,8 @@
1
1
  <template>
2
2
  <MenuWrapper
3
- v-bind="{ ...$attrs, ...$props }"
4
3
  :value-fallback="fallbackStyle"
5
4
  name="components.style.text"
5
+ v-bind="{ ...$attrs, ...$props }"
6
6
  >
7
7
  <template #preview>
8
8
  <div v-if="modelValue" class="d-flex justify-center align-center">
@@ -5,9 +5,9 @@
5
5
  :key="key"
6
6
  :is="componentMap[key]"
7
7
  :value-default="valueDefault[key]"
8
+ v-bind="specificProps[key]"
8
9
  v-model="localValue[key]"
9
10
  @update:model-value="(v) => $emit(`update:${key}`, v)"
10
- v-bind="specificProps[key]"
11
11
  />
12
12
  </v-sheet>
13
13
  </template>
@@ -72,28 +72,30 @@
72
72
  <tfoot>
73
73
  <tr class="v-data-table__tr">
74
74
  <td colspan="100" class="text-center pa-1">
75
- <v-menu dense>
76
- <template #activator="{ props }">
77
- <VcsButton
78
- color="primary"
79
- v-bind="props"
80
- class="v-btn--variant-plain mx-2 d-flex flex-wrap"
81
- >
82
- {{ itemsPerPageRef }}
83
- <v-icon>mdi-chevron-down</v-icon>
84
- </VcsButton>
85
- </template>
86
- <v-list>
87
- <v-list-item
88
- v-for="(number, index) in itemsPerPageArray"
89
- :key="index"
90
- @click="updateItemsPerPage(number)"
91
- style="min-height: auto; height: 24px; text-align: right"
92
- >
93
- <v-list-item-title>{{ number }}</v-list-item-title>
94
- </v-list-item>
95
- </v-list>
96
- </v-menu>
75
+ <div class="d-inline-block">
76
+ <v-menu>
77
+ <template #activator="{ props }">
78
+ <VcsButton
79
+ color="primary"
80
+ v-bind="props"
81
+ class="v-btn--variant-plain mx-2 d-flex flex-wrap"
82
+ >
83
+ {{ itemsPerPageRef }}
84
+ <v-icon>mdi-chevron-down</v-icon>
85
+ </VcsButton>
86
+ </template>
87
+ <v-list>
88
+ <v-list-item
89
+ v-for="(number, index) in itemsPerPageArray"
90
+ :key="index"
91
+ @click="updateItemsPerPage(number)"
92
+ style="min-height: auto; height: 24px; text-align: right"
93
+ >
94
+ <v-list-item-title>{{ number }}</v-list-item-title>
95
+ </v-list-item>
96
+ </v-list>
97
+ </v-menu>
98
+ </div>
97
99
  <span class="mx-2">{{
98
100
  $t('components.vcsDataTable.itemsPerPage')
99
101
  }}</span>
@@ -419,6 +421,9 @@
419
421
  }
420
422
 
421
423
  :deep(.vcs-table > .v-table__wrapper) {
424
+ overflow-x: hidden;
425
+ overflow-y: auto;
426
+
422
427
  table tbody tr {
423
428
  &:hover {
424
429
  background-color: transparent !important;
@@ -430,6 +435,7 @@
430
435
 
431
436
  td {
432
437
  padding: 0 8px;
438
+ border-bottom: transparent !important;
433
439
  }
434
440
  }
435
441
  table thead tr {
@@ -1,34 +1,33 @@
1
1
  <template>
2
- <VcsDataTable :items="items" :headers="headers" v-bind="$attrs">
3
- <template #item.key="{ item }">
4
- <td
5
- class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
6
- :style="{ 'max-width': headers[0].width }"
2
+ <VcsDataTable
3
+ v-bind="$attrs"
4
+ :items="items"
5
+ :headers="[keyHeader, valueHeader]"
6
+ >
7
+ <template #body="{ page, itemsPerPage }">
8
+ <tr
9
+ class="v-data-table__tr"
10
+ v-for="(item, idx) in items.slice(
11
+ (page - 1) * itemsPerPage,
12
+ page * itemsPerPage,
13
+ )"
14
+ :key="`row-${idx}`"
7
15
  >
8
- {{ $st(item.key) }}
9
- </td>
10
- </template>
11
- <template #item.value="{ item }">
12
- <td
13
- class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
14
- :style="{ 'max-width': headers[1].width }"
15
- >
16
- <component
17
- :is="getTag(tags, item.key)"
18
- v-bind="getTagOptions(tags, item.key)"
19
- :class="{
20
- 'single-line': !/\s/.test(item.value),
21
- 'multi-line': /\s/.test(item.value),
22
- }"
16
+ <vcs-table-cell :title="item.key" :width="keyHeader.width" />
17
+ <vcs-table-cell
18
+ :title="item.value"
19
+ :width="valueHeader.width"
20
+ :tag="getTag(tags, item.key)"
21
+ :tag-options="getTagOptions(tags, item.key)"
23
22
  >
24
- {{ $st(item.value) }}
25
- </component>
26
- </td>
23
+ </vcs-table-cell>
24
+ </tr>
27
25
  </template>
28
26
  </VcsDataTable>
29
27
  </template>
30
28
  <script>
31
29
  import { computed } from 'vue';
30
+ import VcsTableCell from './VcsTableCell.vue';
32
31
  import VcsDataTable from './VcsDataTable.vue';
33
32
 
34
33
  /**
@@ -125,22 +124,19 @@
125
124
 
126
125
  /**
127
126
  * @description A table view for feature attributes using VcsDataTable
128
- * @vue-prop {string} featureId - feature's id
129
127
  * @vue-prop {Object} attributes - feature's attributes
130
128
  * @vue-prop {Object} tags - Allows to render the value column for specific attribute keys with special html elements. See 'defaultTagOptions' for supported html tags.
131
- * @vue-prop {Array<{title: string, value: string}>} [headers] - optional array defining column names
129
+ * @vue-prop {{title: string, key: 'key', width: string|undefined}} [keyHeader] - optional header defining the key column
130
+ * @vue-prop {{title: string, key: 'value', width: string|undefined}} [valueHeader] - optional header defining the value column
132
131
  * @vue-computed {Array<TableItem>} items - from attributes derived table items
133
132
  */
134
133
  export default {
135
134
  name: 'VcsTable',
136
135
  components: {
136
+ VcsTableCell,
137
137
  VcsDataTable,
138
138
  },
139
139
  props: {
140
- featureId: {
141
- type: String,
142
- required: true,
143
- },
144
140
  attributes: {
145
141
  type: Object,
146
142
  required: true,
@@ -149,16 +145,23 @@
149
145
  type: Object,
150
146
  default: undefined,
151
147
  },
152
- headers: {
153
- type: Array,
154
- default: () => [
155
- { title: 'components.vcsTable.key', value: 'key', width: '160px' },
156
- {
157
- title: 'components.vcsTable.value',
158
- value: 'value',
159
- width: '160px',
160
- },
161
- ],
148
+ keyHeader: {
149
+ type: Object,
150
+ default: () => ({
151
+ title: 'components.vcsTable.key',
152
+ key: 'key',
153
+ width: '128px',
154
+ }),
155
+ validator: (value) => value.key === 'key',
156
+ },
157
+ valueHeader: {
158
+ type: Object,
159
+ default: () => ({
160
+ title: 'components.vcsTable.value',
161
+ key: 'value',
162
+ width: '192px',
163
+ }),
164
+ validator: (value) => value.key === 'value',
162
165
  },
163
166
  },
164
167
  setup(props) {
@@ -166,10 +169,7 @@
166
169
  * @type {ComputedRef<Array<TableItem>>}
167
170
  */
168
171
  const items = computed(() => {
169
- return attributesToItems({
170
- featureId: props.featureId,
171
- ...props.attributes,
172
- });
172
+ return attributesToItems(props.attributes);
173
173
  });
174
174
 
175
175
  return {
@@ -182,28 +182,11 @@
182
182
  </script>
183
183
 
184
184
  <style lang="scss" scoped>
185
- .single-line {
186
- display: block;
187
- white-space: nowrap;
188
- overflow: hidden;
189
- text-overflow: ellipsis;
190
- }
191
- .multi-line {
192
- display: -webkit-box;
193
- -webkit-box-orient: vertical;
194
- -webkit-line-clamp: 3;
195
- overflow: hidden;
196
- height: auto;
197
- max-height: 96px;
198
- }
199
-
200
- .noBorder {
201
- border-bottom: none !important;
202
- }
203
-
204
185
  :deep(.v-data-table__mobile-row__cell) {
205
186
  td.vcs-table.overflow-max-width {
206
187
  max-width: 100% !important;
207
188
  }
208
189
  }
190
+ :deep(.v-table__wrapper) {
191
+ }
209
192
  </style>
@@ -32,10 +32,6 @@ export const defaultTagOptions: {
32
32
  };
33
33
  };
34
34
  declare const _default: import("vue").DefineComponent<{
35
- featureId: {
36
- type: StringConstructor;
37
- required: true;
38
- };
39
35
  attributes: {
40
36
  type: ObjectConstructor;
41
37
  required: true;
@@ -44,23 +40,29 @@ declare const _default: import("vue").DefineComponent<{
44
40
  type: ObjectConstructor;
45
41
  default: undefined;
46
42
  };
47
- headers: {
48
- type: ArrayConstructor;
43
+ keyHeader: {
44
+ type: ObjectConstructor;
45
+ default: () => {
46
+ title: string;
47
+ key: string;
48
+ width: string;
49
+ };
50
+ validator: (value: unknown) => boolean;
51
+ };
52
+ valueHeader: {
53
+ type: ObjectConstructor;
49
54
  default: () => {
50
55
  title: string;
51
- value: string;
56
+ key: string;
52
57
  width: string;
53
- }[];
58
+ };
59
+ validator: (value: unknown) => boolean;
54
60
  };
55
61
  }, {
56
62
  items: ComputedRef<TableItem[]>;
57
63
  getTag: typeof getTag;
58
64
  getTagOptions: typeof getTagOptions;
59
65
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
60
- featureId: {
61
- type: StringConstructor;
62
- required: true;
63
- };
64
66
  attributes: {
65
67
  type: ObjectConstructor;
66
68
  required: true;
@@ -69,17 +71,28 @@ declare const _default: import("vue").DefineComponent<{
69
71
  type: ObjectConstructor;
70
72
  default: undefined;
71
73
  };
72
- headers: {
73
- type: ArrayConstructor;
74
+ keyHeader: {
75
+ type: ObjectConstructor;
76
+ default: () => {
77
+ title: string;
78
+ key: string;
79
+ width: string;
80
+ };
81
+ validator: (value: unknown) => boolean;
82
+ };
83
+ valueHeader: {
84
+ type: ObjectConstructor;
74
85
  default: () => {
75
86
  title: string;
76
- value: string;
87
+ key: string;
77
88
  width: string;
78
- }[];
89
+ };
90
+ validator: (value: unknown) => boolean;
79
91
  };
80
92
  }>>, {
81
- headers: unknown[];
82
93
  tags: Record<string, any>;
94
+ keyHeader: Record<string, any>;
95
+ valueHeader: Record<string, any>;
83
96
  }, {}>;
84
97
  export default _default;
85
98
  export type TableItem = {
@@ -0,0 +1,72 @@
1
+ <script setup>
2
+ import { ref, computed } from 'vue';
3
+ import { VTooltip } from 'vuetify/components';
4
+ import { createEllipseTooltip } from '../composables.js';
5
+
6
+ const props = defineProps({
7
+ title: {
8
+ type: [String, Number],
9
+ default: undefined,
10
+ },
11
+ width: {
12
+ type: [String, Number],
13
+ default: undefined,
14
+ },
15
+ tag: {
16
+ type: String,
17
+ default: 'div',
18
+ },
19
+ tagOptions: {
20
+ type: Object,
21
+ default: () => {},
22
+ },
23
+ });
24
+
25
+ const td = ref(null);
26
+
27
+ const tooltip = createEllipseTooltip(
28
+ computed(() => td.value),
29
+ computed(() => undefined),
30
+ computed(() => props.title),
31
+ );
32
+
33
+ const hasWhiteSpace = computed(() => /\s/.test(props.title));
34
+ // important: tooltip has evaluated before single-line and multi-line class are applied
35
+ const isSingleLine = computed(() => tooltip.value && !hasWhiteSpace.value);
36
+ const isMultiLine = computed(() => tooltip.value && hasWhiteSpace.value);
37
+ </script>
38
+
39
+ <template>
40
+ <td ref="td" :style="{ 'max-width': width }">
41
+ <component
42
+ :is="tag"
43
+ :class="{
44
+ 'single-line': isSingleLine,
45
+ 'multi-line': isMultiLine,
46
+ }"
47
+ v-bind="tagOptions"
48
+ >
49
+ {{ $st(title) }}
50
+ </component>
51
+ <v-tooltip v-if="tooltip" activator="parent">
52
+ {{ $st(tooltip) }}
53
+ </v-tooltip>
54
+ </td>
55
+ </template>
56
+
57
+ <style scoped>
58
+ .single-line {
59
+ display: block;
60
+ white-space: nowrap;
61
+ overflow: hidden;
62
+ text-overflow: ellipsis;
63
+ }
64
+ .multi-line {
65
+ display: -webkit-box;
66
+ -webkit-box-orient: vertical;
67
+ -webkit-line-clamp: 3;
68
+ overflow: hidden;
69
+ height: auto;
70
+ max-height: 96px;
71
+ }
72
+ </style>
@@ -0,0 +1,13 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {
2
+ tag: string;
3
+ tagOptions: Record<string, any>;
4
+ title?: string | number | undefined;
5
+ width?: string | number | undefined;
6
+ $props: {
7
+ readonly tag?: string | undefined;
8
+ readonly tagOptions?: Record<string, any> | undefined;
9
+ readonly title?: string | number | undefined;
10
+ readonly width?: string | number | undefined;
11
+ };
12
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
13
+ export default _default;
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <v-sheet>
3
3
  <VcsFormSection
4
- v-if="session.type === SessionType.SELECT"
4
+ v-if="session?.type === SessionType.SELECT"
5
5
  heading="components.editor.modifyHeader"
6
6
  :action-button-list-overflow-count="5"
7
7
  :header-actions="availableModifyActions"
@@ -45,6 +45,7 @@
45
45
  provide,
46
46
  computed,
47
47
  shallowRef,
48
+ reactive,
48
49
  } from 'vue';
49
50
  import {
50
51
  CesiumMap,
@@ -300,7 +301,7 @@
300
301
  );
301
302
 
302
303
  const allowedActions = allowedModes.map((mode) => {
303
- return {
304
+ return reactive({
304
305
  name: mode,
305
306
  title: `components.editor.${mode}`,
306
307
  icon: EditorTransformationIcons[mode],
@@ -308,7 +309,7 @@
308
309
  callback: () => {
309
310
  toggleTransformationSession(mode);
310
311
  },
311
- };
312
+ });
312
313
  });
313
314
 
314
315
  const transformationModeWatcher = watch(
@@ -324,7 +325,7 @@
324
325
 
325
326
  let geometryEditingWatcher;
326
327
  if (features.value.length === 1) {
327
- const editGeometryAction = {
328
+ const editGeometryAction = reactive({
328
329
  name: 'editGeometry',
329
330
  title: `components.editor.edit`,
330
331
  icon: '$vcsEditVertices',
@@ -332,7 +333,7 @@
332
333
  callback: () => {
333
334
  toggleEditGeometrySession();
334
335
  },
335
- };
336
+ });
336
337
  allowedActions.unshift(editGeometryAction);
337
338
 
338
339
  geometryEditingWatcher = watch(isGeometryEditing, () => {
@@ -11,6 +11,7 @@
11
11
  type="number"
12
12
  placeholder="0"
13
13
  prefix="X"
14
+ force-prefix
14
15
  v-model.number="xValue"
15
16
  unit="m"
16
17
  @keydown.enter.prevent="translate"
@@ -22,6 +23,7 @@
22
23
  type="number"
23
24
  placeholder="0"
24
25
  prefix="Y"
26
+ force-prefix
25
27
  v-model.number="yValue"
26
28
  unit="m"
27
29
  @keydown.enter.prevent="translate"
@@ -33,6 +35,7 @@
33
35
  type="number"
34
36
  placeholder="0"
35
37
  prefix="Z"
38
+ force-prefix
36
39
  v-model.number="zValue"
37
40
  unit="m"
38
41
  :disabled="
@@ -89,6 +92,7 @@
89
92
  <v-col cols="3">
90
93
  <VcsTextField
91
94
  prefix="X"
95
+ force-prefix
92
96
  v-model.number="xValue"
93
97
  placeholder="1"
94
98
  @keydown.enter.prevent="scale"
@@ -97,6 +101,7 @@
97
101
  <v-col cols="3">
98
102
  <VcsTextField
99
103
  prefix="Y"
104
+ force-prefix
100
105
  v-model.number="yValue"
101
106
  placeholder="1"
102
107
  @keydown.enter.prevent="scale"
@@ -154,9 +154,9 @@
154
154
  height="32"
155
155
  hide-details
156
156
  :step="0.1"
157
- v-model="localValue[key]"
158
- v-bind="hprSliderOptions[key]"
159
157
  :disabled="editAction.active"
158
+ v-bind="hprSliderOptions[key]"
159
+ v-model="localValue[key]"
160
160
  @update:model-value="gotoViewpoint"
161
161
  />
162
162
  </v-col>
@@ -7,10 +7,10 @@
7
7
  v-bind="{ ...$attrs, ...$props }"
8
8
  >
9
9
  <VcsViewpointComponent
10
- v-bind="$attrs"
11
- v-model="localConfig"
12
10
  hide-name
13
11
  :name-rules="nameRules"
12
+ v-bind="$attrs"
13
+ v-model="localConfig"
14
14
  />
15
15
  </AbstractConfigEditor>
16
16
  </template>
@@ -3,8 +3,9 @@
3
3
  <VcsTreeview
4
4
  v-if="tree && tree.length"
5
5
  :items="tree"
6
- v-model:opened="opened"
7
6
  :show-searchbar="true"
7
+ v-model:opened="open"
8
+ open-on-click
8
9
  :searchbar-placeholder="'content.search.placeholder'"
9
10
  item-children="visibleChildren"
10
11
  />
@@ -15,7 +16,7 @@
15
16
  </template>
16
17
 
17
18
  <script>
18
- import { computed, inject, onMounted, reactive, watch } from 'vue';
19
+ import { inject, ref, watch } from 'vue';
19
20
  import { VSheet } from 'vuetify/components';
20
21
  import VcsTreeview from '../components/lists/VcsTreeview.vue';
21
22
 
@@ -35,7 +36,7 @@
35
36
  },
36
37
  setup(props) {
37
38
  const app = inject('vcsApp');
38
- const open = app.contentTree.getTreeOpenState(props.windowState.id);
39
+ const open = ref(app.contentTree.getTreeOpenState(props.windowState.id));
39
40
  const tree = app.contentTree.getComputedVisibleTree(props.windowState.id);
40
41
 
41
42
  function getWithVisibleChildren(item) {
@@ -59,8 +60,7 @@
59
60
  tree,
60
61
  (value, oldValue) => {
61
62
  if (openStateMap.has(app.maps.activeMap?.name)) {
62
- open.splice(0);
63
- open.push(...openStateMap.get(app.maps.activeMap?.name));
63
+ open.value = openStateMap.get(app.maps.activeMap?.name);
64
64
  } else {
65
65
  const items = [...app.contentTree]
66
66
  .filter((i) => i.initOpen && i.getTreeViewItem().visible)
@@ -69,9 +69,9 @@
69
69
  ? oldValue.map(getWithVisibleChildren).flat()
70
70
  : [];
71
71
  const changed = items.filter(
72
- (name) => !oldValues.includes(name) && !open.includes(name),
72
+ (name) => !oldValues.includes(name) && !open.value.includes(name),
73
73
  );
74
- open.push(...changed);
74
+ open.value.push(...changed);
75
75
  }
76
76
  },
77
77
  { immediate: true },
@@ -79,31 +79,13 @@
79
79
 
80
80
  watch(open, () => {
81
81
  if (app.maps.activeMap) {
82
- openStateMap.set(app.maps.activeMap.name, [...open]);
82
+ openStateMap.set(app.maps.activeMap.name, [...open.value]);
83
83
  }
84
84
  });
85
85
 
86
- // the entire block, very ugly because of https://github.com/vuetifyjs/vuetify/issues/19414
87
- const opened = reactive([]);
88
- onMounted(() => {
89
- opened.splice(0);
90
- opened.push(...open);
91
-
92
- watch(opened, () => {
93
- open.splice(0);
94
- open.push(...opened);
95
- });
96
- });
97
-
98
86
  return {
99
87
  tree,
100
- opened: computed({
101
- get: () => opened,
102
- set: (value) => {
103
- opened.splice(0);
104
- opened.push(...value);
105
- },
106
- }),
88
+ open,
107
89
  };
108
90
  },
109
91
  };