@vcmap/ui 5.0.0-rc.22 → 5.0.0-rc.23

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 (91) hide show
  1. package/README.md +2 -2
  2. package/app.config.json +5 -0
  3. package/build/buildPreview.js +2 -2
  4. package/config/aerowest.config.json +2 -0
  5. package/config/base.config.json +1 -0
  6. package/config/codes.config.json +2 -0
  7. package/config/dev.config.json +6 -0
  8. package/config/graphFeatureInfo.config.json +3 -1
  9. package/config/projects.config.json +27 -0
  10. package/config/www.config.json +2 -0
  11. package/dist/assets/cesium.js +1 -1
  12. package/dist/assets/{core.a66593.js → core.9342a1.js} +7804 -5352
  13. package/dist/assets/core.js +1 -1
  14. package/dist/assets/index.fd041928.js +1 -0
  15. package/dist/assets/ol.js +1 -1
  16. package/dist/assets/ui.c27597.css +5 -0
  17. package/dist/assets/{ui.d760e4.js → ui.c27597.js} +5055 -4694
  18. package/dist/assets/ui.js +1 -1
  19. package/dist/assets/vue.js +2 -2
  20. package/dist/assets/{vuetify.427322.js → vuetify.2f1432.js} +1 -1
  21. package/dist/assets/vuetify.js +2 -2
  22. package/dist/index.html +1 -1
  23. package/index.js +5 -2
  24. package/package.json +3 -3
  25. package/plugins/@vcmap/project-selector/{ContextsListComponent.vue → ModulesListComponent.vue} +10 -10
  26. package/plugins/@vcmap/project-selector/ProjectSelectorComponent.vue +15 -15
  27. package/plugins/@vcmap/project-selector/README.md +15 -21
  28. package/plugins/@vcmap/project-selector/config.json +3 -3
  29. package/plugins/@vcmap/project-selector/de.json +3 -0
  30. package/plugins/@vcmap/project-selector/en.json +3 -0
  31. package/plugins/@vcmap/project-selector/index.js +76 -101
  32. package/plugins/@vcmap/simple-graph/index.js +1 -1
  33. package/plugins/@vcmap-show-case/category-tester/Categories.vue +2 -2
  34. package/plugins/@vcmap-show-case/category-tester/Category.vue +1 -4
  35. package/plugins/@vcmap-show-case/config-editor/editor.vue +14 -14
  36. package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +18 -1
  37. package/plugins/@vcmap-show-case/form-inputs-example/index.js +1 -0
  38. package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +202 -0
  39. package/plugins/@vcmap-show-case/table-example/README.md +3 -0
  40. package/plugins/@vcmap-show-case/table-example/index.js +47 -0
  41. package/plugins/@vcmap-show-case/table-example/package.json +5 -0
  42. package/src/actions/actionHelper.js +16 -27
  43. package/src/actions/styleSelector.vue +26 -19
  44. package/src/components/form-inputs-controls/VcsDatePicker.vue +111 -0
  45. package/src/components/form-inputs-controls/VcsTextField.vue +18 -7
  46. package/src/components/form-inputs-controls/VcsWizard.vue +3 -1
  47. package/src/components/icons/CheckboxCheckedIcon.vue +1 -1
  48. package/src/components/icons/LegendIcon.vue +10 -60
  49. package/src/components/lists/VcsList.vue +25 -6
  50. package/src/components/tables/VcsDataTable.vue +386 -0
  51. package/src/components/tables/VcsTable.vue +33 -278
  52. package/src/contentTree/contentTreeCollection.js +1 -1
  53. package/src/contentTree/layerContentTreeItem.js +3 -0
  54. package/src/downloadHelper.js +49 -0
  55. package/src/featureInfo/BalloonComponent.vue +9 -8
  56. package/src/featureInfo/abstractFeatureInfoView.js +1 -1
  57. package/src/featureInfo/featureInfo.js +3 -3
  58. package/src/i18n/de.js +8 -0
  59. package/src/i18n/en.js +8 -0
  60. package/src/i18n/i18nCollection.js +22 -22
  61. package/src/init.js +90 -7
  62. package/src/manager/categoryManager/CategoryComponent.vue +56 -47
  63. package/src/manager/categoryManager/CategoryManager.vue +23 -10
  64. package/src/manager/categoryManager/categoryManager.js +11 -11
  65. package/src/manager/navbarManager.js +18 -0
  66. package/src/manager/window/WindowComponent.vue +10 -15
  67. package/src/manager/window/WindowComponentHeader.vue +4 -2
  68. package/src/manager/window/WindowManager.vue +14 -15
  69. package/src/manager/window/windowHelper.js +1 -1
  70. package/src/manager/window/windowManager.js +18 -7
  71. package/src/navigation/mapNavCompass.vue +1 -1
  72. package/src/navigation/mapNavigation.vue +6 -6
  73. package/src/navigation/obliqueRotation.vue +36 -13
  74. package/src/navigation/orientationToolsButton.vue +0 -1
  75. package/src/navigation/overviewMap.js +5 -5
  76. package/src/navigation/vcsZoomButton.vue +37 -11
  77. package/src/pluginHelper.js +20 -0
  78. package/src/search/search.js +12 -3
  79. package/src/search/searchComponent.vue +15 -0
  80. package/src/state.js +6 -6
  81. package/src/uiConfig.js +3 -3
  82. package/src/vcsUiApp.js +44 -40
  83. package/src/vuePlugins/i18n.js +1 -0
  84. package/start.js +8 -2
  85. package/dist/assets/index.8b833ead.js +0 -1
  86. package/dist/assets/ui.d760e4.css +0 -5
  87. package/map.config.json +0 -44
  88. /package/dist/assets/{cesium.88cffd.js → cesium.166f91.js} +0 -0
  89. /package/dist/assets/{ol.d4539f.js → ol.d2cba3.js} +0 -0
  90. /package/dist/assets/{vue.db5102.js → vue.5d00e9.js} +0 -0
  91. /package/dist/assets/{vuetify.427322.css → vuetify.2f1432.css} +0 -0
@@ -1,117 +1,37 @@
1
1
  <template>
2
- <v-card>
3
- <VcsTreeviewSearchbar
4
- v-if="showSearchbar"
5
- :placeholder="$t(searchbarPlaceholder)"
6
- v-model="search"
7
- />
8
- <v-data-table
9
- dense
10
- item-key="key"
11
- :headers="translatedHeaders"
12
- :items="items"
13
- :items-per-page.sync="itemsPerPageRef"
14
- :page.sync="page"
15
- :search="search"
16
- :custom-filter="handleFilter"
17
- hide-default-footer
18
- class="vcs-table rounded-0"
19
- >
20
- <!-- eslint-disable-next-line -->
21
- <template #item.key="{ item }">
22
- <td
23
- :title="$t(item.key)"
24
- class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
25
- :style="{'max-width': headers[0].width }"
26
- >
27
- {{ $t(item.key) }}
28
- </td>
29
- </template>
30
- <!-- eslint-disable-next-line -->
31
- <template #item.value="{ item }">
32
- <td
33
- :title="$t(item.value)"
34
- class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
35
- :style="{'max-width': headers[1].width }"
36
- >
37
- <span :class="{ 'single-line': !/\s/.test(item.value), 'multi-line': /\s/.test(item.value), }">
38
- {{ $t(item.value) }}
39
- </span>
40
- </td>
41
- </template>
42
- <template #footer v-if="items.length > itemsPerPageRef">
43
- <v-divider />
44
- <v-container class="pa-2 vcs-pagination-bar">
45
- <v-row
46
- dense
47
- no-gutters
48
- justify="center"
49
- >
50
- <v-menu offset-y dense>
51
- <template #activator="{ on, attrs }">
52
- <VcsButton
53
- small
54
- color="primary"
55
- v-bind="attrs"
56
- v-on="on"
57
- >
58
- {{ itemsPerPageRef }}
59
- <v-icon>mdi-chevron-down</v-icon>
60
- </VcsButton>
61
- </template>
62
- <v-list>
63
- <v-list-item
64
- v-for="(number, index) in itemsPerPageArray"
65
- :key="index"
66
- @click="updateItemsPerPage(number)"
67
- style="min-height: auto; height: 24px; text-align: right;"
68
- >
69
- <v-list-item-title>{{ number }}</v-list-item-title>
70
- </v-list-item>
71
- </v-list>
72
- </v-menu>
73
- <span class="mx-2">{{ $t('components.vcsTable.itemsPerPage') }}</span>
74
- <span class="mx-2">
75
- {{ itemsFrom }} - {{ itemsTo }} {{ $t('components.vcsTable.ofItems') }} {{ numberOfItems }}
76
- </span>
77
- <VcsButton
78
- small
79
- icon="mdi-chevron-left"
80
- @click="formerPage"
81
- tooltip="components.vcsTable.formerPage"
82
- :disabled="page < 2"
83
- class="ml-1"
84
- />
85
- <VcsButton
86
- small
87
- icon="mdi-chevron-right"
88
- @click="nextPage"
89
- tooltip="components.vcsTable.nextPage"
90
- :disabled="page > numberOfPages - 1"
91
- class="ml-1"
92
- />
93
- </v-row>
94
- </v-container>
95
- </template>
96
- </v-data-table>
97
- </v-card>
2
+ <VcsDataTable
3
+ :items="items"
4
+ :headers="headers"
5
+ item-key="key"
6
+ v-bind="$attrs"
7
+ >
8
+ <!-- eslint-disable-next-line -->
9
+ <template #item.key="{ item }">
10
+ <td
11
+ :title="$t(item.key)"
12
+ class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
13
+ :style="{'max-width': headers[0].width }"
14
+ >
15
+ {{ $t(item.key) }}
16
+ </td>
17
+ </template>
18
+ <!-- eslint-disable-next-line -->
19
+ <template #item.value="{ item }">
20
+ <td
21
+ :title="$t(item.value)"
22
+ class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
23
+ :style="{'max-width': headers[1].width }"
24
+ >
25
+ <span :class="{ 'single-line': !/\s/.test(item.value), 'multi-line': /\s/.test(item.value), }">
26
+ {{ $t(item.value) }}
27
+ </span>
28
+ </td>
29
+ </template>
30
+ </VcsDataTable>
98
31
  </template>
99
32
  <script>
100
- import { getCurrentInstance, ref, computed } from 'vue';
101
- import {
102
- VCard,
103
- VDivider,
104
- VContainer,
105
- VDataTable,
106
- VList,
107
- VListItem,
108
- VListItemTitle,
109
- VMenu,
110
- VIcon,
111
- VRow,
112
- } from 'vuetify/lib';
113
- import VcsTreeviewSearchbar from '../lists/VcsTreeviewSearchbar.vue';
114
- import VcsButton from '../buttons/VcsButton.vue';
33
+ import { computed } from 'vue';
34
+ import VcsDataTable from './VcsDataTable.vue';
115
35
 
116
36
  /**
117
37
  * @typedef {Object} TableItem
@@ -140,34 +60,16 @@
140
60
  }
141
61
 
142
62
  /**
143
- * @description A table view for feature attributes using {@link https://vuetifyjs.com/en/api/v-data-table/#props v-data-table }
63
+ * @description A table view for feature attributes using VcsDataTable
144
64
  * @vue-prop {string} featureId - feature's id
145
65
  * @vue-prop {Object} attributes - feature's attributes
146
66
  * @vue-prop {Array<{text: string, value: string}>} [headers] - optional array defining column names
147
- * @vue-prop {boolean} [showSearchbar=true] - whether to show searchbar
148
- * @vue-prop {string} [searchbarPlaceholder='Search'] - placeholder for searchbar
149
67
  * @vue-computed {Array<TableItem>} items - from attributes derived table items
150
- * @vue-computed {Array<TableItem>} filteredItems - array of items with search filter applied on. If search string is empty, same as items array.
151
- * @vue-computed {number} numberOfItems - number of filtered items (depending on search).
152
- * @vue-computed {number} numberOfPages - number of pages depending on number of items, search and itemsPerPage.
153
- * @vue-computed {number} itemsFrom - index of first item shown on current page.
154
- * @vue-computed {number} itemsTo - index of last item shown on current page.
155
68
  */
156
69
  export default {
157
70
  name: 'VcsTable',
158
71
  components: {
159
- VcsButton,
160
- VcsTreeviewSearchbar,
161
- VCard,
162
- VDataTable,
163
- VContainer,
164
- VDivider,
165
- VRow,
166
- VMenu,
167
- VIcon,
168
- VList,
169
- VListItem,
170
- VListItemTitle,
72
+ VcsDataTable,
171
73
  },
172
74
  props: {
173
75
  featureId: {
@@ -185,29 +87,8 @@
185
87
  { text: 'components.vcsTable.value', value: 'value', width: '160px' },
186
88
  ],
187
89
  },
188
- itemsPerPage: {
189
- type: Number,
190
- default: 10,
191
- },
192
- itemsPerPageArray: {
193
- type: Array,
194
- default: () => [5, 10, 15],
195
- },
196
- showSearchbar: {
197
- type: Boolean,
198
- default: true,
199
- },
200
- searchbarPlaceholder: {
201
- type: String,
202
- default: 'components.vcsTable.searchbarPlaceholder',
203
- },
204
90
  },
205
91
  setup(props) {
206
- const vm = getCurrentInstance().proxy;
207
- /**
208
- * @type {Ref<UnwrapRef<string>>}
209
- */
210
- const search = ref('');
211
92
  /**
212
93
  * @type {ComputedRef<Array<TableItem>>}
213
94
  */
@@ -218,89 +99,14 @@
218
99
  });
219
100
  });
220
101
 
221
- /**
222
- * @param {any} value
223
- * @param {string|undefined} filter
224
- * @param {TableItem} item
225
- * @returns {boolean}
226
- */
227
- const handleFilter = (value, filter, item) => {
228
- if (filter) {
229
- const q = filter.toLocaleLowerCase();
230
- return [item.key, item.value].some((i) => {
231
- const content = i.toString();
232
- const translated = vm.$t(content);
233
- return translated.toLowerCase().includes(q) || content.toLowerCase().includes(q);
234
- });
235
- }
236
- return true;
237
- };
238
-
239
- /**
240
- * @type {ComputedRef<TableItem[]>}
241
- */
242
- const filteredItems = computed(() => items.value.filter(item => handleFilter(item.value, search.value, item)));
243
- const numberOfItems = computed(() => filteredItems.value.length);
244
-
245
- /**
246
- * @type {ComputedRef<Array<{text: string, value: string}>>}
247
- */
248
- const translatedHeaders = computed(() => {
249
- return props.headers.map((hd) => {
250
- hd.text = vm.$t(hd.text);
251
- return hd;
252
- });
253
- });
254
-
255
- /**
256
- * @type {Ref<UnwrapRef<number>>}
257
- */
258
- const itemsPerPageRef = ref(props.itemsPerPage);
259
- const numberOfPages = computed(() => {
260
- return Math.ceil(numberOfItems.value / itemsPerPageRef.value);
261
- });
262
- /**
263
- * @type {Ref<UnwrapRef<number>>}
264
- */
265
- const page = ref(1);
266
- const itemsFrom = computed(() => ((page.value - 1) * itemsPerPageRef.value) + 1);
267
- const itemsTo = computed(() => {
268
- const last = page.value * itemsPerPageRef.value;
269
- return last < numberOfItems.value ? last : numberOfItems.value;
270
- });
271
-
272
102
  return {
273
- search,
274
- page,
275
103
  items,
276
- filteredItems,
277
- itemsPerPageRef,
278
- itemsFrom,
279
- itemsTo,
280
- numberOfPages,
281
- numberOfItems,
282
- nextPage() {
283
- if (page.value + 1 <= numberOfPages.value) {
284
- page.value += 1;
285
- }
286
- },
287
- formerPage() {
288
- if (page.value - 1 >= 1) {
289
- page.value -= 1;
290
- }
291
- },
292
- updateItemsPerPage(number) {
293
- itemsPerPageRef.value = number;
294
- },
295
- handleFilter,
296
- translatedHeaders,
297
104
  };
298
105
  },
299
106
  };
300
107
  </script>
301
108
 
302
109
  <style lang="scss" scoped>
303
- @import '../../styles/shades.scss';
304
110
 
305
111
  .single-line {
306
112
  display: block;
@@ -322,61 +128,10 @@
322
128
  }
323
129
 
324
130
  ::v-deep {
325
- .vcs-table {
326
- tbody tr {
327
- &:hover {
328
- background-color: transparent !important;
329
- }
330
- &:nth-child(odd) {
331
- background-color: var(--v-base-lighten4) !important;
332
- }
333
- }
334
- td {
335
- font-size: 14px !important;
336
- &.v-data-table__mobile-row {
337
- justify-content: left;
338
- height: 27px;
339
- min-height: auto;
340
- }
341
- }
342
- th.sortable {
343
- padding: 0 8px;
344
- span {
345
- vertical-align: middle;
346
- padding: 0 4px 0 0;
347
- }
348
- }
349
- &.theme--light {
350
- thead tr th {
351
- color: map-get($shades, 'black') !important;
352
- }
353
- }
354
- &.theme--dark {
355
- thead tr th {
356
- color: map-get($shades, 'white') !important;
357
- }
358
- }
359
- }
360
131
  .v-data-table__mobile-row__cell {
361
132
  td.vcs-table.overflow-max-width {
362
133
  max-width: 260px;
363
134
  }
364
135
  }
365
- .v-btn.vcs-button--small {
366
- height: 100% !important;
367
- display: block;
368
- }
369
- }
370
-
371
- .vcs-pagination-bar {
372
- .vcs-button-wrap {
373
- height: 25px;
374
- border: 1px solid;
375
- padding: 0 4px;
376
- border-radius: 4px;
377
- &:hover {
378
- border: 1px solid var(--v-primary-base);
379
- }
380
- }
381
136
  }
382
137
  </style>
@@ -306,7 +306,7 @@ export function createContentTreeCollection(app) {
306
306
 
307
307
  const overrideCollection = makeOverrideCollection(
308
308
  collection,
309
- () => app.dynamicContextId,
309
+ () => app.dynamicModuleId,
310
310
  null,
311
311
  config => getObjectFromClassRegistry(app.contentTreeClassRegistry, config, app),
312
312
  ContentTreeItem,
@@ -122,6 +122,9 @@ class LayerContentTreeItem extends VcsObjectContentTreeItem {
122
122
  },
123
123
  {
124
124
  component,
125
+ position: {
126
+ width: 200,
127
+ },
125
128
  props: reactive({
126
129
  availableStyles: availableStyles.slice(),
127
130
  layerName: this._layerName,
@@ -0,0 +1,49 @@
1
+ import { hasSameOrigin } from '@vcmap/core';
2
+
3
+ /**
4
+ * Download a blob
5
+ * @param {string} uri
6
+ * @param {string} fileName
7
+ * @api
8
+ * @export
9
+ */
10
+ export function downloadURI(uri, fileName) {
11
+ const link = document.createElement('a');
12
+ link.download = fileName;
13
+ link.href = uri;
14
+ if (!hasSameOrigin(uri)) {
15
+ link.target = '_blank';
16
+ }
17
+ link.click();
18
+ link.remove();
19
+ }
20
+
21
+ /**
22
+ * Download a blob
23
+ * @param {Blob} blob
24
+ * @param {string} fileName
25
+ */
26
+ export function downloadBlob(blob, fileName) {
27
+ downloadURI(URL.createObjectURL(blob), fileName);
28
+ }
29
+
30
+ /**
31
+ * Download a text as UTF-8
32
+ * @param {string} text
33
+ * @param {string} fileName
34
+ */
35
+ export function downloadText(text, fileName) {
36
+ downloadURI(`data:text/plain;charset=utf-8,${encodeURIComponent(text)}`, fileName);
37
+ }
38
+
39
+ /**
40
+ * Download a canvas as an image
41
+ * @param {HTMLCanvasElement} canvas
42
+ * @param {string} fileName
43
+ * @param {string=} mimeType
44
+ */
45
+ export function downloadCanvas(canvas, fileName, mimeType) {
46
+ canvas.toBlob((blob) => {
47
+ downloadBlob(blob, fileName);
48
+ }, mimeType);
49
+ }
@@ -1,21 +1,21 @@
1
1
  <template>
2
2
  <v-card
3
- class="mx-auto elevation-0 rounded-0"
3
+ class="mx-auto elevation-0"
4
4
  max-width="400"
5
5
  v-if="position"
6
6
  >
7
7
  <slot name="balloon-header" :attrs="{...$props, ...$attrs}">
8
- <v-list-item class="px-2 pr-1 align-start">
8
+ <v-list-item class="px-2 align-center">
9
9
  <v-list-item-avatar
10
10
  tile
11
- size="20"
12
- class="mr-2 align-self-start"
11
+ size="16"
12
+ class="mr-2"
13
13
  >
14
14
  <v-icon color="primary">
15
15
  $vcsInfo
16
16
  </v-icon>
17
17
  </v-list-item-avatar>
18
- <v-list-item-content class="py-2 pr-1 align-self-start">
18
+ <v-list-item-content class="pr-1">
19
19
  <v-list-item-title>
20
20
  <h3 class="font-weight-bold">
21
21
  {{ $t(balloonTitle) }}
@@ -30,7 +30,7 @@
30
30
  small
31
31
  icon="mdi-close-thick"
32
32
  tooltip="components.close"
33
- class="mt-1 mr-1"
33
+ class="d-flex"
34
34
  />
35
35
  </v-list-item>
36
36
  </slot>
@@ -164,12 +164,13 @@
164
164
  .balloon:after {
165
165
  content: "";
166
166
  position: absolute;
167
- bottom: -20px;
167
+ bottom: -12px;
168
168
  left: 40px;
169
- border-width: 20px 20px 0;
169
+ border-width: 12px 10px 0;
170
170
  border-style: solid;
171
171
  display: block;
172
172
  width: 0;
173
+ filter: drop-shadow(1px 2px 1px rgba(0, 0, 0, 0.3));
173
174
  }
174
175
  .theme--light .balloon:after {
175
176
  border-color: map-get($shades, 'white') transparent;
@@ -217,7 +217,7 @@ class AbstractFeatureInfoView extends VcsObject {
217
217
  }
218
218
 
219
219
  /**
220
- * window options, configured in a context, used only internally by AbstractFeatureInfoView or subclass
220
+ * window options, configured in a module, used only internally by AbstractFeatureInfoView or subclass
221
221
  * @type {WindowComponentOptions|Object}
222
222
  * @readonly
223
223
  */
@@ -211,7 +211,7 @@ class FeatureInfo {
211
211
  */
212
212
  this._collection = makeOverrideCollection(
213
213
  new Collection(),
214
- () => this._app.dynamicContextId,
214
+ () => this._app.dynamicModuleId,
215
215
  null,
216
216
  config => getObjectFromClassRegistry(this._featureInfoClassRegistry, config),
217
217
  AbstractFeatureInfoView,
@@ -277,12 +277,12 @@ class FeatureInfo {
277
277
  this.clear();
278
278
  }
279
279
  }),
280
- this._app.contextAdded.addEventListener(() => {
280
+ this._app.moduleAdded.addEventListener(() => {
281
281
  this.clear();
282
282
  this._destroyFeatureInfoTool();
283
283
  this._destroyFeatureInfoTool = setupFeatureInfoTool(this._app);
284
284
  }),
285
- this._app.contextRemoved.addEventListener(() => this.clear()),
285
+ this._app.moduleRemoved.addEventListener(() => this.clear()),
286
286
  ];
287
287
  /**
288
288
  * A vector layer to render provided features on
package/src/i18n/de.js CHANGED
@@ -55,11 +55,15 @@ const messages = {
55
55
  vcsTable: {
56
56
  key: 'Name',
57
57
  value: 'Wert',
58
+ },
59
+ vcsDataTable: {
58
60
  searchbarPlaceholder: 'Name, Wert, ...',
59
61
  itemsPerPage: 'pro Seite',
60
62
  ofItems: 'von',
61
63
  nextPage: 'Nächste Seite',
62
64
  formerPage: 'Vorherige Seite',
65
+ noDataPlaceholder: 'Keine Daten verfügbar',
66
+ noResultsPlaceholder: 'Keine übereinstimmenden Einträge gefunden',
63
67
  },
64
68
  },
65
69
  settings: {
@@ -89,6 +93,7 @@ const messages = {
89
93
  select: 'Suchergebnis selektieren',
90
94
  placeholder: 'Suche nach Straße, Adresse, Ort, POI',
91
95
  zoomToFeatureAction: 'Auf Ergebnis zoomen',
96
+ zoomToAll: 'Zu allen Ergebnissen zoomen',
92
97
  },
93
98
  toolbox: {
94
99
  flight: 'Flug',
@@ -107,6 +112,9 @@ const messages = {
107
112
  information: 'Information',
108
113
  success: 'Erfolg',
109
114
  },
115
+ datePicker: {
116
+ today: 'Heute',
117
+ },
110
118
  };
111
119
 
112
120
  export default messages;
package/src/i18n/en.js CHANGED
@@ -55,11 +55,15 @@ const messages = {
55
55
  vcsTable: {
56
56
  key: 'Name',
57
57
  value: 'Value',
58
+ },
59
+ vcsDataTable: {
58
60
  searchbarPlaceholder: 'Name, Value, ...',
59
61
  itemsPerPage: 'per page',
60
62
  ofItems: 'of',
61
63
  nextPage: 'Next page',
62
64
  formerPage: 'Former page',
65
+ noDataPlaceholder: 'No data available',
66
+ noResultsPlaceholder: 'No matching records found',
63
67
  },
64
68
  },
65
69
  settings: {
@@ -89,6 +93,7 @@ const messages = {
89
93
  select: 'Select result item',
90
94
  placeholder: 'Search for Street, Address, Landmark, POI',
91
95
  zoomToFeatureAction: 'Zoom to result',
96
+ zoomToAll: 'Zoom to all',
92
97
  },
93
98
  toolbox: {
94
99
  flight: 'flight',
@@ -107,6 +112,9 @@ const messages = {
107
112
  information: 'Information',
108
113
  success: 'Success',
109
114
  },
115
+ datePicker: {
116
+ today: 'Today',
117
+ },
110
118
  };
111
119
 
112
120
  export default messages;