@vcmap/ui 6.0.2 → 6.0.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.
package/dist/assets/ui.js CHANGED
@@ -1 +1 @@
1
- export * from "./ui-1a51c85a.js";
1
+ export * from "./ui-b4efd5bf.js";
@@ -1 +1 @@
1
- export * from "./vue-8f83aa85.js";
1
+ export * from "./vue-fcafcafd.js";
@@ -10,7 +10,7 @@ function loadCss(href) {
10
10
  elem.onerror = reject;
11
11
  document.head.appendChild(elem);
12
12
  });
13
- } await loadCss('./assets/vuetify-95029d49.css');import { watch as X, onScopeDispose as tt, effectScope as Ul, shallowRef as K, Fragment as ie, reactive as it, computed as b, watchEffect as Ne, toRefs as Wt, capitalize as On, isVNode as Oc, Comment as Rc, unref as ot, warn as Ha, getCurrentInstance as Nc, ref as W, provide as Ae, inject as ye, defineComponent as Hc, camelize as Ir, h as jt, toRaw as Ee, createVNode as r, mergeProps as N, onBeforeUnmount as nt, readonly as Kl, onDeactivated as _r, onActivated as zc, onMounted as Ke, nextTick as Se, TransitionGroup as ql, Transition as Ht, isRef as _n, toRef as F, onBeforeMount as Xl, withDirectives as $e, resolveDirective as dt, vShow as xt, onUpdated as Wc, Text as jc, resolveDynamicComponent as Yc, markRaw as Gc, Teleport as Uc, cloneVNode as Kc, createTextVNode as Pt, onUnmounted as qc, onBeforeUpdate as Xc, withModifiers as Pl, toDisplayString as Zc, vModelText as Qc, resolveComponent as Jc, render as Tr } from "./vue-8f83aa85.js";
13
+ } await loadCss('./assets/vuetify-fbb86b3a.css');import { watch as X, onScopeDispose as tt, effectScope as Ul, shallowRef as K, Fragment as ie, reactive as it, computed as b, watchEffect as Ne, toRefs as Wt, capitalize as On, isVNode as Oc, Comment as Rc, unref as ot, warn as Ha, getCurrentInstance as Nc, ref as W, provide as Ae, inject as ye, defineComponent as Hc, camelize as Ir, h as jt, toRaw as Ee, createVNode as r, mergeProps as N, onBeforeUnmount as nt, readonly as Kl, onDeactivated as _r, onActivated as zc, onMounted as Ke, nextTick as Se, TransitionGroup as ql, Transition as Ht, isRef as _n, toRef as F, onBeforeMount as Xl, withDirectives as $e, resolveDirective as dt, vShow as xt, onUpdated as Wc, Text as jc, resolveDynamicComponent as Yc, markRaw as Gc, Teleport as Uc, cloneVNode as Kc, createTextVNode as Pt, onUnmounted as qc, onBeforeUpdate as Xc, withModifiers as Pl, toDisplayString as Zc, vModelText as Qc, resolveComponent as Jc, render as Tr } from "./vue-fcafcafd.js";
14
14
  function rt(e, n) {
15
15
  let t;
16
16
  function a() {
@@ -1 +1 @@
1
- export * from "./vuetify-95029d49.js";
1
+ export * from "./vuetify-fbb86b3a.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcmap/ui",
3
- "version": "6.0.2",
3
+ "version": "6.0.4",
4
4
  "author": "Virtual City Systems",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "peerDependencies": {
59
59
  "@vcmap-cesium/engine": "^11.0.2",
60
- "@vcmap/core": "^6.0.0",
60
+ "@vcmap/core": "^6.0.2",
61
61
  "ol": "^10.2.1",
62
62
  "vue": "~3.4.38",
63
63
  "vuetify": "^3.7.3"
@@ -25,17 +25,17 @@
25
25
  const editors = plugin.getConfigEditors?.();
26
26
  if (editors?.length > 0) {
27
27
  const actions = editors
28
- .map((e) => e.component)
29
- .filter((c) => c)
30
- .map((component, index) =>
28
+ .filter((e) => e.component)
29
+ .map((e, index) =>
31
30
  createToggleAction(
32
31
  {
33
32
  name: `editor-${index + 1}`,
33
+ title: e.title,
34
34
  icon: index < 9 ? `mdi-numeric-${index + 1}-box` : undefined,
35
35
  },
36
36
  {
37
37
  id: `${plugin.name}-editor-${index}`,
38
- component,
38
+ component: e.component,
39
39
  parentId: name,
40
40
  slot: WindowSlot.DYNAMIC_CHILD,
41
41
  props: {
@@ -60,7 +60,8 @@
60
60
  },
61
61
  state: {
62
62
  headerTitle:
63
- component.title ?? `${plugin.name} Editor ${index + 1}`,
63
+ e.title ?? `${plugin.name} Editor ${index + 1}`,
64
+ infoUrlCallback: e.infoUrlCallback,
64
65
  },
65
66
  position: {
66
67
  width: 500,
@@ -392,9 +392,9 @@
392
392
  * @returns {WatchStopHandle}
393
393
  */
394
394
  function setupSplashScreen(app, splashScreenRef) {
395
- function setupSplashScreenAction() {
395
+ function setupSplashScreenAction(moduleId) {
396
396
  const { splashScreen } = app.uiConfig.config;
397
- if (splashScreen) {
397
+ if (splashScreen && moduleId !== app.dynamicModuleId) {
398
398
  splashScreenRef.value = true;
399
399
  }
400
400
  if (splashScreen && splashScreen.menuEntry) {
@@ -422,7 +422,7 @@
422
422
  if (app.navbarManager.has('splashScreenToggle')) {
423
423
  app.navbarManager.remove('splashScreenToggle');
424
424
  }
425
- setupSplashScreenAction();
425
+ setupSplashScreenAction(item[moduleIdSymbol]);
426
426
  }
427
427
  });
428
428
  const removeRemovedListener = app.uiConfig.removed.addEventListener(
@@ -758,7 +758,7 @@
758
758
  'hideSettings',
759
759
  );
760
760
  const stopCustomScreen = setupCustomScreen(app);
761
- const splashScreenRef = ref(true);
761
+ const splashScreenRef = ref(false);
762
762
  const stopSplashScreen = setupSplashScreen(app, splashScreenRef);
763
763
  setupHelpButton(app);
764
764
  const destroyMyWorkspace = setupUIConfigDependency(
@@ -49,6 +49,7 @@
49
49
  #header.data-table-select="{ allSelected, selectAll, someSelected }"
50
50
  >
51
51
  <VcsCheckbox
52
+ v-if="$attrs.selectStrategy !== 'single'"
52
53
  :indeterminate="someSelected && !allSelected"
53
54
  indeterminate-icon="mdi-minus-circle"
54
55
  false-icon="mdi-circle-outline"
@@ -239,13 +240,13 @@
239
240
  /**
240
241
  * @param {any} value
241
242
  * @param {string|undefined} filter
242
- * @param {TableItem} item
243
+ * @param {Record<string,unknown>} item
243
244
  * @returns {boolean}
244
245
  */
245
- const handleFilter = (value, filter, item) => {
246
+ const handleFilterInternal = (value, filter, item) => {
246
247
  if (filter) {
247
248
  const q = filter.toLocaleLowerCase();
248
- return Object.values(item.raw).some((i) => {
249
+ return Object.values(item).some((i) => {
249
250
  if (i) {
250
251
  const content = i.toString();
251
252
  const translated = vm.$st(content);
@@ -260,6 +261,16 @@
260
261
  return true;
261
262
  };
262
263
 
264
+ /**
265
+ * @param {any} value
266
+ * @param {string|undefined} filter
267
+ * @param {TableItem} item
268
+ * @returns {boolean}
269
+ */
270
+ const handleFilter = (value, filter, item) => {
271
+ return handleFilterInternal(value, filter, item.raw);
272
+ };
273
+
263
274
  /**
264
275
  * Syncs disabled and isSelectable (or custom item-selectable key) on items
265
276
  * @type {ComputedRef<Array<Object>>}
@@ -286,7 +297,7 @@
286
297
  */
287
298
  const filteredItems = computed(() =>
288
299
  props.items.filter((item) =>
289
- handleFilter(item.value, search.value, item),
300
+ handleFilterInternal(item.value, search.value, item),
290
301
  ),
291
302
  );
292
303
  const numberOfItems = computed(() => {
@@ -120,7 +120,11 @@
120
120
 
121
121
  <script>
122
122
  import { Math as CesiumMath, HeightReference } from '@vcmap-cesium/engine';
123
- import { TransformationMode, placeGeometryOnSurface } from '@vcmap/core';
123
+ import {
124
+ SessionType,
125
+ TransformationMode,
126
+ placeGeometryOnSurface,
127
+ } from '@vcmap/core';
124
128
  import { VSheet, VContainer, VRow, VCol, VIcon } from 'vuetify/components';
125
129
  import { inject, ref, watch } from 'vue';
126
130
  import VcsButton from '../buttons/VcsButton.vue';
@@ -242,11 +246,17 @@
242
246
  }),
243
247
  );
244
248
 
245
- const currentEditingFeatures =
246
- manager.currentSession.value?.currentFeatures;
247
- if (currentEditingFeatures) {
248
- manager.currentSession.value?.setCurrentFeatures(
249
- currentEditingFeatures,
249
+ if (
250
+ manager.currentEditSession.value?.type === SessionType.EDIT_FEATURES
251
+ ) {
252
+ manager.currentEditSession.value?.setFeatures(
253
+ manager.currentFeatures.value,
254
+ );
255
+ } else if (
256
+ manager.currentEditSession.value?.type === SessionType.EDIT_GEOMETRY
257
+ ) {
258
+ manager.currentEditSession.value.setFeature(
259
+ manager.currentFeatures.value[0],
250
260
  );
251
261
  }
252
262
 
@@ -3,6 +3,7 @@ import {
3
3
  IndexedCollection,
4
4
  makeOverrideCollection,
5
5
  getObjectFromClassRegistry,
6
+ moduleIdSymbol,
6
7
  } from '@vcmap/core';
7
8
  import { computed, ref } from 'vue';
8
9
  import ContentTreeItem from './contentTreeItem.js';
@@ -69,7 +70,13 @@ class ContentTreeCollection extends IndexedCollection {
69
70
  this._subTreeListeners.delete(subTree.name);
70
71
  }
71
72
  });
72
- if (this._app.uiConfig.getByKey('contentTreeActiveOnStartup')?.value) {
73
+ const contentTreeActiveOnStartup = this._app.uiConfig.getByKey(
74
+ 'contentTreeActiveOnStartup',
75
+ );
76
+ if (
77
+ contentTreeActiveOnStartup?.value &&
78
+ contentTreeActiveOnStartup[moduleIdSymbol] !== this._app.dynamicModuleId
79
+ ) {
73
80
  const action = this._app.navbarManager.get('Content')?.action;
74
81
  if (action && !action.active) {
75
82
  action.callback();
package/src/init.js CHANGED
@@ -23,9 +23,10 @@ export const VcsUiAppConfigPattern = {
23
23
  maps: optional([VcsObjectPattern]),
24
24
  styles: optional([VcsObjectPattern]),
25
25
  viewpoints: optional([VcsObjectPattern]),
26
- startingViewpointName: optional(String),
27
- startingMapName: optional(String),
28
- projection: optional(Object),
26
+ startingObliqueCollectionName: maybe(String),
27
+ startingViewpointName: maybe(String),
28
+ startingMapName: maybe(String),
29
+ projection: maybe(Object),
29
30
  categories: optional([{ name: String, items: [Object] }]),
30
31
  obliqueCollections: optional([VcsObjectPattern]),
31
32
  plugins: optional([Object]),
@@ -270,24 +270,6 @@
270
270
  app.overviewMap.map.layerCollection.size > 0,
271
271
  );
272
272
 
273
- const handleOverviewMapActiveOnStartup = (item) => {
274
- if (
275
- item &&
276
- item.name === 'overviewMapActiveOnStartup' &&
277
- showOverviewButton.value &&
278
- item.value &&
279
- !overviewAction.active
280
- ) {
281
- overviewAction.callback();
282
- }
283
- };
284
- handleOverviewMapActiveOnStartup(
285
- app.uiConfig.getByKey('overviewMapActiveOnStartup'),
286
- );
287
- const uiConfigListener = app.uiConfig.added.addEventListener(
288
- handleOverviewMapActiveOnStartup,
289
- );
290
-
291
273
  // Locator
292
274
  const { action: locatorAction, destroy: destroyLocator } =
293
275
  createLocatorAction(app);
@@ -325,7 +307,6 @@
325
307
  const { action: homeAction, destroy: homeDestroy } = setupHomeButton(app);
326
308
 
327
309
  onUnmounted(() => {
328
- uiConfigListener();
329
310
  if (overviewDestroy) {
330
311
  overviewDestroy();
331
312
  }
@@ -111,6 +111,7 @@ declare class OverviewMap {
111
111
  * @private
112
112
  */
113
113
  private _collectionListeners;
114
+ _uiConfigWatcher: import("vue").WatchStopHandle;
114
115
  /**
115
116
  * @type {boolean}
116
117
  */
@@ -20,6 +20,7 @@ import { Math as CesiumMath, Color, Cartographic } from '@vcmap-cesium/engine';
20
20
  import { unByKey } from 'ol/Observable.js';
21
21
  import VectorSource from 'ol/source/Vector.js';
22
22
  import { Icon } from 'ol/style.js';
23
+ import { watch } from 'vue';
23
24
  import { WindowSlot } from '../manager/window/windowManager.js';
24
25
  import OverviewMapClickedInteraction from './overviewMapClickedInteraction.js';
25
26
  import {
@@ -256,6 +257,20 @@ class OverviewMap {
256
257
  this._updatePrimaryColor.bind(this),
257
258
  ),
258
259
  ];
260
+
261
+ this._uiConfigWatcher = watch(
262
+ () => [
263
+ this._app.uiConfig.config.hideMapNavigation,
264
+ this._app.uiConfig.config.overviewMapActiveOnStartup,
265
+ ],
266
+ async ([hide, activeOnStartup]) => {
267
+ if (activeOnStartup && !hide && !this._active) {
268
+ await this.activate();
269
+ } else if (hide && this._active) {
270
+ await this.deactivate();
271
+ }
272
+ },
273
+ );
259
274
  }
260
275
 
261
276
  /**
@@ -632,6 +647,7 @@ class OverviewMap {
632
647
  this._clearListeners();
633
648
  this._collectionListeners.forEach((cb) => cb());
634
649
  this._collectionListeners = [];
650
+ this._uiConfigWatcher();
635
651
  if (this._mapPointerListener) {
636
652
  this._mapPointerListener();
637
653
  this._mapPointerListener = null;
File without changes