qwc2 2025.12.19 → 2025.12.25
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/actions/display.js +6 -6
- package/actions/theme.js +4 -19
- package/components/AppMenu.js +1 -1
- package/components/AttributeForm.js +7 -7
- package/components/AttributeTableWidget.js +2 -2
- package/components/AutoEditForm.js +6 -3
- package/components/EditComboField.js +1 -4
- package/components/IdentifyViewer.js +33 -34
- package/components/ImportLayer.js +78 -79
- package/components/PluginsContainer.js +2 -2
- package/components/ResizeableWindow.js +8 -1
- package/components/SearchBox.js +2 -2
- package/components/SideBar.js +1 -0
- package/components/StandardApp.js +1 -2
- package/components/ThemeLayersListWindow.js +10 -1
- package/components/{map3d/View3DSwitcher.js → ViewSwitcher.js} +74 -29
- package/components/map/OlMap.js +1 -1
- package/components/map3d/Map3D.js +50 -48
- package/components/map3d/MapControls3D.js +4 -1
- package/components/map3d/drawtool/EditTool3D.js +1 -1
- package/components/map3d/layers/WFSLayer3D.js +1 -1
- package/components/share/ShareQRCode.js +1 -1
- package/components/style/ViewSwitcher.css +36 -0
- package/components/widgets/ColorButton.js +2 -2
- package/components/widgets/CopyButton.js +1 -1
- package/components/widgets/LayerCatalogWidget.js +4 -4
- package/libs/openlayers.js +11 -11
- package/package.json +54 -55
- package/plugins/API.js +4 -4
- package/plugins/FeatureForm.js +2 -2
- package/plugins/FeatureSearch.js +12 -12
- package/plugins/GeometryDigitizer.js +2 -3
- package/plugins/Map.js +11 -4
- package/plugins/MapFilter.js +12 -12
- package/plugins/MapTip.js +1 -1
- package/plugins/ObliqueView.js +31 -12
- package/plugins/Print.js +79 -91
- package/plugins/Routing.js +1 -1
- package/plugins/Share.js +5 -5
- package/plugins/TimeManager.js +1 -2
- package/plugins/View3D.js +135 -123
- package/plugins/map/RedliningSupport.js +1 -1
- package/plugins/map3d/Draw3D.js +4 -4
- package/plugins/map3d/ExportObjects3D.js +1 -1
- package/plugins/map3d/HideObjects3D.js +7 -7
- package/plugins/map3d/Identify3D.js +1 -1
- package/plugins/map3d/LayerTree3D.js +1 -1
- package/plugins/map3d/MapExport3D.js +25 -25
- package/plugins/map3d/Measure3D.js +1 -1
- package/plugins/map3d/TopBar3D.js +7 -7
- package/plugins/style/ObliqueView.css +21 -9
- package/reducers/display.js +2 -2
- package/reducers/layers.js +11 -11
- package/scripts/gen-plugin-docs.js +11 -4
- package/scripts/makeIconkit.js +2 -2
- package/scripts/themesConfig.js +5 -5
- package/scripts/updateTranslations.js +2 -2
- package/utils/CoordinatesUtils.js +1 -1
- package/utils/EditingUtils.js +4 -4
- package/utils/FeatureStyles.js +1 -1
- package/utils/LayerUtils.js +73 -74
- package/utils/MiscUtils.js +10 -3
- package/utils/PermaLinkUtils.js +68 -71
- package/utils/SearchProviders.js +2 -2
- package/utils/ServiceLayerUtils.js +12 -12
- package/utils/ThemeUtils.js +2 -2
- package/utils/VectorLayerUtils.js +3 -3
- package/components/map3d/style/View3DSwitcher.css +0 -19
|
@@ -36,11 +36,11 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
36
36
|
import React, { Suspense } from 'react';
|
|
37
37
|
import ReactDOM from 'react-dom';
|
|
38
38
|
import { connect } from 'react-redux';
|
|
39
|
-
import
|
|
39
|
+
import CoordinateSystem from '@giro3d/giro3d/core/geographic/coordinate-system/CoordinateSystem';
|
|
40
40
|
import Coordinates, { crsIsGeographic } from '@giro3d/giro3d/core/geographic/Coordinates';
|
|
41
41
|
import Ellipsoid from '@giro3d/giro3d/core/geographic/Ellipsoid';
|
|
42
42
|
import Extent from '@giro3d/giro3d/core/geographic/Extent.js';
|
|
43
|
-
import
|
|
43
|
+
import Instance from '@giro3d/giro3d/core/Instance.js';
|
|
44
44
|
import ElevationLayer from '@giro3d/giro3d/core/layer/ElevationLayer.js';
|
|
45
45
|
import DrapedFeatureCollection from '@giro3d/giro3d/entities/DrapedFeatureCollection';
|
|
46
46
|
import Map from '@giro3d/giro3d/entities/Map.js';
|
|
@@ -65,15 +65,15 @@ import { registerPermalinkDataStoreHook, unregisterPermalinkDataStoreHook, UrlPa
|
|
|
65
65
|
import ServiceLayerUtils from '../../utils/ServiceLayerUtils';
|
|
66
66
|
import ThemeUtils from '../../utils/ThemeUtils';
|
|
67
67
|
import { MapContainerPortalContext } from '../PluginsContainer';
|
|
68
|
+
import ViewSwitcher from '../ViewSwitcher';
|
|
68
69
|
import EditDataset3D from './EditDataset3D';
|
|
69
|
-
import MapControls3D from './MapControls3D';
|
|
70
|
-
import View3DSwitcher from './View3DSwitcher';
|
|
71
70
|
import LayerRegistry from './layers/index';
|
|
71
|
+
import MapControls3D from './MapControls3D';
|
|
72
72
|
import { importGltf, updateObjectLabel } from './utils/MiscUtils3D';
|
|
73
73
|
import Tiles3DStyle from './utils/Tiles3DStyle';
|
|
74
74
|
import './style/Map3D.css';
|
|
75
75
|
|
|
76
|
-
// Ensures
|
|
76
|
+
// Ensures onUnload is called *after* all other children have unmounted
|
|
77
77
|
var UnloadWrapper = /*#__PURE__*/function (_React$Component) {
|
|
78
78
|
function UnloadWrapper() {
|
|
79
79
|
var _this;
|
|
@@ -587,7 +587,7 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
587
587
|
}
|
|
588
588
|
});
|
|
589
589
|
_defineProperty(_this2, "setupInstance", function () {
|
|
590
|
-
var _this2$props$theme$ma, _this2$props$theme$ma2, _this2$props$theme$ma3, _this2$props$theme$ma4, _this2$props$theme$ma5, _this2$props$theme$ma8, _this2$props$theme$ma9, _this2$props$theme$
|
|
590
|
+
var _this2$props$theme$ma, _this2$props$theme$ma2, _this2$props$theme$ma3, _this2$props$theme$ma4, _this2$props$theme$ma5, _this2$props$theme$ma8, _this2$props$theme$ma9, _this2$props$theme$ma0;
|
|
591
591
|
if (_this2.instance) {
|
|
592
592
|
_this2.disposeInstance();
|
|
593
593
|
}
|
|
@@ -699,19 +699,19 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
699
699
|
_this2.instance.notifyChange(tiles);
|
|
700
700
|
});
|
|
701
701
|
// Apply style when loading tile
|
|
702
|
-
tiles.tiles.addEventListener('load-model', function (
|
|
702
|
+
tiles.tiles.addEventListener('load-model', function (_ref0) {
|
|
703
703
|
var _entry$idAttr;
|
|
704
|
-
var scene =
|
|
704
|
+
var scene = _ref0.scene;
|
|
705
705
|
scene.userData.tilesetName = entry.name;
|
|
706
706
|
scene.userData.featureIdAttr = (_entry$idAttr = entry.idAttr) !== null && _entry$idAttr !== void 0 ? _entry$idAttr : "id";
|
|
707
707
|
Tiles3DStyle.applyTileStyle(scene, _this2.state.sceneContext.sceneObjects[entry.name], _this2.state.sceneContext);
|
|
708
708
|
_this2.instance.notifyChange(tiles);
|
|
709
709
|
});
|
|
710
710
|
// Show/hide labels when tile visibility changes
|
|
711
|
-
tiles.tiles.addEventListener('tile-visibility-change', function (
|
|
711
|
+
tiles.tiles.addEventListener('tile-visibility-change', function (_ref1) {
|
|
712
712
|
var _scene$userData$tileL2, _scene$userData2;
|
|
713
|
-
var scene =
|
|
714
|
-
visible =
|
|
713
|
+
var scene = _ref1.scene,
|
|
714
|
+
visible = _ref1.visible;
|
|
715
715
|
Object.values((_scene$userData$tileL2 = scene === null || scene === void 0 || (_scene$userData2 = scene.userData) === null || _scene$userData2 === void 0 ? void 0 : _scene$userData2.tileLabels) !== null && _scene$userData$tileL2 !== void 0 ? _scene$userData$tileL2 : {}).forEach(function (label) {
|
|
716
716
|
label.labelObject.visible = visible;
|
|
717
717
|
label.labelObject.element.style.display = visible ? 'initial' : 'none';
|
|
@@ -739,7 +739,7 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
739
739
|
});
|
|
740
740
|
|
|
741
741
|
// Add other objects
|
|
742
|
-
(((_this2$props$theme$
|
|
742
|
+
(((_this2$props$theme$ma0 = _this2.props.theme.map3d) === null || _this2$props$theme$ma0 === void 0 ? void 0 : _this2$props$theme$ma0.objects3d) || []).forEach(function (entry) {
|
|
743
743
|
var _entry$title2, _entry$visibility2;
|
|
744
744
|
importGltf(MiscUtils.resolveAssetsPath(entry.url), (_entry$title2 = entry.title) !== null && _entry$title2 !== void 0 ? _entry$title2 : entry.name, _this2.state.sceneContext, {
|
|
745
745
|
visibility: (_entry$visibility2 = entry.visibility) !== null && _entry$visibility2 !== void 0 ? _entry$visibility2 : true
|
|
@@ -779,10 +779,10 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
779
779
|
var isFirstPerson = _this2.state.sceneContext.scene.view.controls.isFirstPerson;
|
|
780
780
|
var maxDistance = isFirstPerson ? 200 + 20 * quality : 500 + quality * quality;
|
|
781
781
|
// Hide scene objects according to scene quality
|
|
782
|
-
Object.entries(_this2.state.sceneContext.sceneObjects).forEach(function (
|
|
783
|
-
var
|
|
784
|
-
objId =
|
|
785
|
-
options =
|
|
782
|
+
Object.entries(_this2.state.sceneContext.sceneObjects).forEach(function (_ref10) {
|
|
783
|
+
var _ref11 = _slicedToArray(_ref10, 2),
|
|
784
|
+
objId = _ref11[0],
|
|
785
|
+
options = _ref11[1];
|
|
786
786
|
var object = _this2.objectMap[objId];
|
|
787
787
|
if (options.layertree && object.isObject3D && object.visible) {
|
|
788
788
|
object.children.forEach(function (child) {
|
|
@@ -803,10 +803,10 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
803
803
|
});
|
|
804
804
|
});
|
|
805
805
|
_defineProperty(_this2, "instanceOnUpdateEnd", function () {
|
|
806
|
-
Object.entries(_this2.state.sceneContext.sceneObjects).forEach(function (
|
|
807
|
-
var
|
|
808
|
-
objId =
|
|
809
|
-
options =
|
|
806
|
+
Object.entries(_this2.state.sceneContext.sceneObjects).forEach(function (_ref12) {
|
|
807
|
+
var _ref13 = _slicedToArray(_ref12, 2),
|
|
808
|
+
objId = _ref13[0],
|
|
809
|
+
options = _ref13[1];
|
|
810
810
|
var object = _this2.objectMap[objId];
|
|
811
811
|
if (options.layertree && object.isObject3D) {
|
|
812
812
|
object.children.forEach(function (child) {
|
|
@@ -816,8 +816,8 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
816
816
|
}
|
|
817
817
|
});
|
|
818
818
|
});
|
|
819
|
-
_defineProperty(_this2, "instanceOnBeforeEntityUpdate", function (
|
|
820
|
-
var entity =
|
|
819
|
+
_defineProperty(_this2, "instanceOnBeforeEntityUpdate", function (_ref14) {
|
|
820
|
+
var entity = _ref14.entity;
|
|
821
821
|
if (entity !== _this2.map) {
|
|
822
822
|
_this2.instance.view.camera.userData.__previousFar = _this2.instance.view.camera.far;
|
|
823
823
|
var quality = _this2.state.sceneContext.settings.sceneQuality;
|
|
@@ -826,8 +826,8 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
826
826
|
_this2.instance.view.camera.updateProjectionMatrix();
|
|
827
827
|
}
|
|
828
828
|
});
|
|
829
|
-
_defineProperty(_this2, "instanceOnAfterEntityUpdate", function (
|
|
830
|
-
var entity =
|
|
829
|
+
_defineProperty(_this2, "instanceOnAfterEntityUpdate", function (_ref15) {
|
|
830
|
+
var entity = _ref15.entity;
|
|
831
831
|
if (entity !== _this2.map) {
|
|
832
832
|
_this2.instance.view.camera.far = _this2.instance.view.camera.userData.__previousFar;
|
|
833
833
|
delete _this2.instance.view.camera.userData.__previousFar;
|
|
@@ -934,12 +934,12 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
934
934
|
ModelPixelScale = _image$fileDirectory.ModelPixelScale;
|
|
935
935
|
|
|
936
936
|
// Extract scale and tiepoint values
|
|
937
|
-
var
|
|
938
|
-
scaleX =
|
|
939
|
-
scaleY =
|
|
940
|
-
var
|
|
941
|
-
tiepointX =
|
|
942
|
-
tiepointY =
|
|
937
|
+
var _ref16 = [ModelPixelScale[0], ModelPixelScale[1]],
|
|
938
|
+
scaleX = _ref16[0],
|
|
939
|
+
scaleY = _ref16[1];
|
|
940
|
+
var _ref17 = [ModelTiepoint[3], ModelTiepoint[4]],
|
|
941
|
+
tiepointX = _ref17[0],
|
|
942
|
+
tiepointY = _ref17[1]; // Tiepoint world coordinates
|
|
943
943
|
|
|
944
944
|
// Calculate pixel indices (rounded to nearest integers)
|
|
945
945
|
var minPixelX = Math.round((dtmExt[0] - tiepointX) / scaleX);
|
|
@@ -1021,10 +1021,10 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
1021
1021
|
_this2.state.sceneContext.setViewToExtent(bounds, rotation);
|
|
1022
1022
|
});
|
|
1023
1023
|
_defineProperty(_this2, "store3dState", function () {
|
|
1024
|
-
var promises = Object.entries(_this2.state.sceneContext.sceneObjects).map(function (
|
|
1025
|
-
var
|
|
1026
|
-
objectId =
|
|
1027
|
-
entry =
|
|
1024
|
+
var promises = Object.entries(_this2.state.sceneContext.sceneObjects).map(function (_ref18) {
|
|
1025
|
+
var _ref19 = _slicedToArray(_ref18, 2),
|
|
1026
|
+
objectId = _ref19[0],
|
|
1027
|
+
entry = _ref19[1];
|
|
1028
1028
|
if (!entry.layertree) {
|
|
1029
1029
|
return null;
|
|
1030
1030
|
}
|
|
@@ -1064,10 +1064,10 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
1064
1064
|
var _this2$state$sceneCon2, _this2$state$sceneCon3;
|
|
1065
1065
|
var camera = _this2.state.sceneContext.scene.view.camera.position;
|
|
1066
1066
|
var target = _this2.state.sceneContext.scene.view.controls.target;
|
|
1067
|
-
var layers = Object.entries(_this2.state.sceneContext.colorLayers).map(function (
|
|
1068
|
-
var
|
|
1069
|
-
layerId =
|
|
1070
|
-
options =
|
|
1067
|
+
var layers = Object.entries(_this2.state.sceneContext.colorLayers).map(function (_ref20) {
|
|
1068
|
+
var _ref21 = _slicedToArray(_ref20, 2),
|
|
1069
|
+
layerId = _ref21[0],
|
|
1070
|
+
options = _ref21[1];
|
|
1071
1071
|
return {
|
|
1072
1072
|
id: layerId,
|
|
1073
1073
|
options: {
|
|
@@ -1181,7 +1181,9 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
1181
1181
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
1182
1182
|
var _this3 = this;
|
|
1183
1183
|
if (this.props.theme !== prevProps.theme) {
|
|
1184
|
-
this.
|
|
1184
|
+
if (this.props.theme.map3d) {
|
|
1185
|
+
this.setupInstance();
|
|
1186
|
+
}
|
|
1185
1187
|
} else if (this.props.layers !== prevProps.layers) {
|
|
1186
1188
|
this.setState(function (state) {
|
|
1187
1189
|
return {
|
|
@@ -1207,10 +1209,10 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
1207
1209
|
this.setState(function (state) {
|
|
1208
1210
|
return {
|
|
1209
1211
|
sceneContext: _objectSpread(_objectSpread({}, state.sceneContext), {}, {
|
|
1210
|
-
collisionObjects: Object.entries(state.sceneContext.sceneObjects).map(function (
|
|
1211
|
-
var
|
|
1212
|
-
objId =
|
|
1213
|
-
options =
|
|
1212
|
+
collisionObjects: Object.entries(state.sceneContext.sceneObjects).map(function (_ref22) {
|
|
1213
|
+
var _ref23 = _slicedToArray(_ref22, 2),
|
|
1214
|
+
objId = _ref23[0],
|
|
1215
|
+
options = _ref23[1];
|
|
1214
1216
|
if (options.layertree && options.visibility) {
|
|
1215
1217
|
var _obj$tiles$group, _obj$tiles;
|
|
1216
1218
|
var obj = _this3.objectMap[objId];
|
|
@@ -1249,12 +1251,12 @@ var Map3D = /*#__PURE__*/function (_React$Component2) {
|
|
|
1249
1251
|
sceneContext: this.state.sceneContext
|
|
1250
1252
|
}, /*#__PURE__*/React.createElement(EditDataset3D, {
|
|
1251
1253
|
sceneContext: this.state.sceneContext
|
|
1252
|
-
}), /*#__PURE__*/React.createElement(
|
|
1254
|
+
}), /*#__PURE__*/React.createElement(ViewSwitcher, {
|
|
1253
1255
|
position: 1
|
|
1254
|
-
}), Object.entries(this.props.plugins3d).map(function (
|
|
1255
|
-
var
|
|
1256
|
-
name =
|
|
1257
|
-
Component =
|
|
1256
|
+
}), Object.entries(this.props.plugins3d).map(function (_ref24) {
|
|
1257
|
+
var _ref25 = _slicedToArray(_ref24, 2),
|
|
1258
|
+
name = _ref25[0],
|
|
1259
|
+
Component = _ref25[1];
|
|
1258
1260
|
return /*#__PURE__*/React.createElement(Suspense, {
|
|
1259
1261
|
key: name
|
|
1260
1262
|
}, /*#__PURE__*/React.createElement(Component, _extends({
|
|
@@ -374,7 +374,10 @@ var MapControls3D = /*#__PURE__*/function (_React$Component) {
|
|
|
374
374
|
style: {
|
|
375
375
|
order: 996
|
|
376
376
|
}
|
|
377
|
-
}), this.context) : null
|
|
377
|
+
}), this.context) : null, /*#__PURE__*/React.createElement("span", {
|
|
378
|
+
key: "Unloader",
|
|
379
|
+
ref: this.unload
|
|
380
|
+
})];
|
|
378
381
|
}
|
|
379
382
|
}]);
|
|
380
383
|
}(React.Component);
|
|
@@ -33,8 +33,8 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
33
33
|
import React from 'react';
|
|
34
34
|
import PropTypes from 'prop-types';
|
|
35
35
|
import { Color, Group, Vector3 } from 'three';
|
|
36
|
-
import { TransformControls } from 'three/addons/controls/TransformControls';
|
|
37
36
|
import { CSG } from 'three-csg-ts';
|
|
37
|
+
import { TransformControls } from 'three/addons/controls/TransformControls';
|
|
38
38
|
import LocaleUtils from '../../../utils/LocaleUtils';
|
|
39
39
|
import Icon from '../../Icon';
|
|
40
40
|
import ButtonBar from '../../widgets/ButtonBar';
|
|
@@ -22,8 +22,8 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
|
22
22
|
* LICENSE file in the root directory of this source tree.
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
-
import Extent from '@giro3d/giro3d/core/geographic/Extent';
|
|
26
25
|
import CoordinateSystem from '@giro3d/giro3d/core/geographic/coordinate-system/CoordinateSystem';
|
|
26
|
+
import Extent from '@giro3d/giro3d/core/geographic/Extent';
|
|
27
27
|
import ColorLayer from '@giro3d/giro3d/core/layer/ColorLayer';
|
|
28
28
|
import StreamableFeatureSource, { wfsBuilder, tiledLoadingStrategy } from '@giro3d/giro3d/sources/StreamableFeatureSource';
|
|
29
29
|
import VectorSource from "@giro3d/giro3d/sources/VectorSource.js";
|
|
@@ -21,9 +21,9 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
21
21
|
* LICENSE file in the root directory of this source tree.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
+
import { QRCodeCanvas } from 'qrcode.react';
|
|
24
25
|
import React from 'react';
|
|
25
26
|
import PropTypes from 'prop-types';
|
|
26
|
-
import { QRCodeCanvas } from 'qrcode.react';
|
|
27
27
|
import LocaleUtils from '../../utils/LocaleUtils';
|
|
28
28
|
import CopyButton from '../widgets/CopyButton';
|
|
29
29
|
var ShareQRCode = /*#__PURE__*/function (_React$Component) {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
button.view-switcher-button {
|
|
2
|
+
position: relative;
|
|
3
|
+
z-index: 2;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
div.view-switcher-buttons > button {
|
|
7
|
+
transition: right 0.25s, box-shadow 0.25s;
|
|
8
|
+
position: absolute;
|
|
9
|
+
right: 0;
|
|
10
|
+
bottom: 0;
|
|
11
|
+
z-index: 1;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
div.view-switcher-buttons:not(div.view-switcher-buttons-expanded) button {
|
|
15
|
+
box-shadow: none;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
div.view-switcher-buttons-expanded > button:nth-child(1) {
|
|
19
|
+
right: 4em;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
div.view-switcher-buttons-expanded > button:nth-child(2) {
|
|
23
|
+
right: 8em;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
div.view-switcher-buttons-expanded > button:nth-child(3) {
|
|
27
|
+
right: 12em;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
div.view-switcher-buttons-expanded > button:nth-child(4) {
|
|
31
|
+
right: 16em;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
div.view-switcher-buttons-expanded > button:nth-child(5) {
|
|
35
|
+
right: 20em;
|
|
36
|
+
}
|
|
@@ -26,12 +26,12 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
26
26
|
* LICENSE file in the root directory of this source tree.
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
-
import React from 'react';
|
|
30
29
|
import { ColorPicker } from '@vtaits/react-color-picker';
|
|
30
|
+
import '@vtaits/react-color-picker/index.css';
|
|
31
|
+
import React from 'react';
|
|
31
32
|
import PropTypes from 'prop-types';
|
|
32
33
|
import MiscUtils from '../../utils/MiscUtils';
|
|
33
34
|
import './style/ColorButton.css';
|
|
34
|
-
import '@vtaits/react-color-picker/index.css';
|
|
35
35
|
var defaultColors = [
|
|
36
36
|
// [r, g, b, a]
|
|
37
37
|
[255, 255, 255, 1], [0, 0, 0, 1], [255, 105, 0, 1], [252, 185, 0, 1], [0, 208, 132, 1], [142, 209, 252, 1], [6, 147, 227, 1], [171, 184, 195, 1], [235, 20, 76, 1], [247, 141, 167, 1]];
|
|
@@ -121,8 +121,8 @@ var LayerCatalogWidget = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
121
121
|
return res;
|
|
122
122
|
}, []);
|
|
123
123
|
if (existingSublayers.includes((_entry$name = entry.name) !== null && _entry$name !== void 0 ? _entry$name : resource === null || resource === void 0 ? void 0 : resource.name)) {
|
|
124
|
-
var
|
|
125
|
-
var text =
|
|
124
|
+
var _entry$title;
|
|
125
|
+
var text = LocaleUtils.tr("themelayerslist.existinglayers") + ": " + ((_entry$title = entry.title) !== null && _entry$title !== void 0 ? _entry$title : entry.name);
|
|
126
126
|
var actions = [{
|
|
127
127
|
name: LocaleUtils.tr("themelayerslist.addanyway"),
|
|
128
128
|
onClick: function onClick() {
|
|
@@ -139,13 +139,13 @@ var LayerCatalogWidget = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
139
139
|
var asGroup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
140
140
|
_this.props.closeWindow("existinglayers");
|
|
141
141
|
if (resource) {
|
|
142
|
-
var _entry$
|
|
142
|
+
var _entry$title2;
|
|
143
143
|
// Create placeholder layer
|
|
144
144
|
_this.props.addLayer({
|
|
145
145
|
id: resource.id,
|
|
146
146
|
type: "placeholder",
|
|
147
147
|
name: resource.name,
|
|
148
|
-
title: (_entry$
|
|
148
|
+
title: (_entry$title2 = entry.title) !== null && _entry$title2 !== void 0 ? _entry$title2 : resource.name,
|
|
149
149
|
role: resource.USERLAYER,
|
|
150
150
|
loading: true
|
|
151
151
|
});
|
package/libs/openlayers.js
CHANGED
|
@@ -13,15 +13,9 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
13
13
|
* LICENSE file in the root directory of this source tree.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
+
import OlInteractionDrawRegular from 'ol-ext/interaction/DrawRegular';
|
|
17
|
+
import OlInteractionTransform from 'ol-ext/interaction/Transform';
|
|
16
18
|
import OlCollection from 'ol/Collection';
|
|
17
|
-
import OlFeature from 'ol/Feature';
|
|
18
|
-
import OlGeolocation from 'ol/Geolocation';
|
|
19
|
-
import OlKinetic from 'ol/Kinetic';
|
|
20
|
-
import OlMap from 'ol/Map';
|
|
21
|
-
import OlObject from 'ol/Object';
|
|
22
|
-
import OlOverlay from 'ol/Overlay';
|
|
23
|
-
import OlTileQueue from 'ol/TileQueue';
|
|
24
|
-
import OlView from 'ol/View';
|
|
25
19
|
import { defaults as olControlDefaults } from 'ol/control';
|
|
26
20
|
import OlControlAttribution from 'ol/control/Attribution';
|
|
27
21
|
import OlControlOverviewMap from 'ol/control/OverviewMap';
|
|
@@ -29,16 +23,18 @@ import OlControlScaleLine from 'ol/control/ScaleLine';
|
|
|
29
23
|
import OlControlZoom from 'ol/control/Zoom';
|
|
30
24
|
import * as OlEventsCondition from 'ol/events/condition';
|
|
31
25
|
import * as OlExtent from 'ol/extent';
|
|
26
|
+
import OlFeature from 'ol/Feature';
|
|
27
|
+
import OlFormatGeoJSON from 'ol/format/GeoJSON';
|
|
32
28
|
import OlFormatGML2 from 'ol/format/GML2';
|
|
33
29
|
import OlFormatGML3 from 'ol/format/GML3';
|
|
34
30
|
import OlFormatGML32 from 'ol/format/GML32';
|
|
35
|
-
import OlFormatGeoJSON from 'ol/format/GeoJSON';
|
|
36
31
|
import OlFormatKML from 'ol/format/KML';
|
|
37
32
|
import OlFormatMVT from 'ol/format/MVT';
|
|
38
33
|
import OlFormatWFS from 'ol/format/WFS';
|
|
39
34
|
import OlFormatWKT from 'ol/format/WKT';
|
|
40
35
|
import OlFormatWMSCapabilities from 'ol/format/WMSCapabilities';
|
|
41
36
|
import OlFormatWMTSCapabilities from 'ol/format/WMTSCapabilities';
|
|
37
|
+
import OlGeolocation from 'ol/Geolocation';
|
|
42
38
|
import OlGeomCircle from 'ol/geom/Circle';
|
|
43
39
|
import OlGeomGeometryCollection from 'ol/geom/GeometryCollection';
|
|
44
40
|
import OlGeomLineString from 'ol/geom/LineString';
|
|
@@ -63,6 +59,7 @@ import OlInteractionPointer from 'ol/interaction/Pointer';
|
|
|
63
59
|
import OlInteractionSelect from 'ol/interaction/Select';
|
|
64
60
|
import OlInteractionSnap from 'ol/interaction/Snap';
|
|
65
61
|
import OlInteractionTranslate from 'ol/interaction/Translate';
|
|
62
|
+
import OlKinetic from 'ol/Kinetic';
|
|
66
63
|
import OlGraticule from 'ol/layer/Graticule';
|
|
67
64
|
import OlLayerGroup from 'ol/layer/Group';
|
|
68
65
|
import OlLayerImage from 'ol/layer/Image';
|
|
@@ -71,6 +68,9 @@ import OlLayerTile from 'ol/layer/Tile';
|
|
|
71
68
|
import OlLayerVector from 'ol/layer/Vector';
|
|
72
69
|
import OlLayerVectorTile from 'ol/layer/VectorTile';
|
|
73
70
|
import * as OlLoadingstrategy from 'ol/loadingstrategy';
|
|
71
|
+
import OlMap from 'ol/Map';
|
|
72
|
+
import OlObject from 'ol/Object';
|
|
73
|
+
import OlOverlay from 'ol/Overlay';
|
|
74
74
|
import * as OlProj from 'ol/proj';
|
|
75
75
|
import OlSourceBingMaps from 'ol/source/BingMaps';
|
|
76
76
|
import OlSourceImageStatic from 'ol/source/ImageStatic';
|
|
@@ -91,8 +91,8 @@ import OlStyleStyle from 'ol/style/Style';
|
|
|
91
91
|
import OlStyleText from 'ol/style/Text';
|
|
92
92
|
import OlTilegridTileGrid from 'ol/tilegrid/TileGrid';
|
|
93
93
|
import OlTilegridWMTS from 'ol/tilegrid/WMTS';
|
|
94
|
-
import
|
|
95
|
-
import
|
|
94
|
+
import OlTileQueue from 'ol/TileQueue';
|
|
95
|
+
import OlView from 'ol/View';
|
|
96
96
|
import 'ol/ol.css';
|
|
97
97
|
export default {
|
|
98
98
|
Attribution: OlControlAttribution,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qwc2",
|
|
3
|
-
"version": "2025.12.
|
|
3
|
+
"version": "2025.12.25",
|
|
4
4
|
"description": "QGIS Web Client",
|
|
5
5
|
"author": "Sourcepole AG",
|
|
6
6
|
"license": "BSD-2-Clause",
|
|
@@ -16,75 +16,74 @@
|
|
|
16
16
|
"geospatial"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@furkot/webfonts-generator": "^2.0.
|
|
20
|
-
"@kayahr/text-encoding": "^2.
|
|
21
|
-
"@loaders.gl/core": "^4.3.
|
|
22
|
-
"@loaders.gl/shapefile": "^4.3.
|
|
23
|
-
"@loaders.gl/zip": "^4.3.
|
|
19
|
+
"@furkot/webfonts-generator": "^2.0.3",
|
|
20
|
+
"@kayahr/text-encoding": "^2.1.0",
|
|
21
|
+
"@loaders.gl/core": "^4.3.4",
|
|
22
|
+
"@loaders.gl/shapefile": "^4.3.4",
|
|
23
|
+
"@loaders.gl/zip": "^4.3.4",
|
|
24
24
|
"@mapbox/shp-write": "^0.4.3",
|
|
25
25
|
"@norbulcz/num-parse": "^0.1.0",
|
|
26
|
-
"@panoramax/web-viewer": "^4.0
|
|
27
|
-
"@reduxjs/toolkit": "^2.
|
|
26
|
+
"@panoramax/web-viewer": "^4.2.0",
|
|
27
|
+
"@reduxjs/toolkit": "^2.11.2",
|
|
28
28
|
"@sourcepole/qwc-giro3d": "^0.44.0-dev",
|
|
29
|
-
"@turf/buffer": "^
|
|
29
|
+
"@turf/buffer": "^7.3.1",
|
|
30
30
|
"@turf/clean-coords": "^7.3.1",
|
|
31
|
-
"@turf/helpers": "^
|
|
31
|
+
"@turf/helpers": "^7.3.1",
|
|
32
32
|
"@vtaits/react-color-picker": "^2.0.0",
|
|
33
33
|
"any-date-parser": "^1.5.4",
|
|
34
|
-
"axios": "^1.
|
|
35
|
-
"chart.js": "^4.
|
|
34
|
+
"axios": "^1.13.2",
|
|
35
|
+
"chart.js": "^4.5.1",
|
|
36
36
|
"classnames": "^2.5.1",
|
|
37
37
|
"clone": "^2.1.2",
|
|
38
|
-
"dayjs": "^1.11.
|
|
38
|
+
"dayjs": "^1.11.19",
|
|
39
39
|
"deepmerge": "^4.3.1",
|
|
40
40
|
"diacritics": "^1.3.0",
|
|
41
|
-
"dompurify": "^3.
|
|
42
|
-
"driver.js": "^1.
|
|
41
|
+
"dompurify": "^3.3.1",
|
|
42
|
+
"driver.js": "^1.4.0",
|
|
43
43
|
"expr-eval": "^2.0.2",
|
|
44
|
-
"fast-xml-parser": "^
|
|
44
|
+
"fast-xml-parser": "^5.3.3",
|
|
45
45
|
"file-saver": "^2.0.5",
|
|
46
46
|
"flat": "^6.0.1",
|
|
47
47
|
"formdata-json": "^1.0.0",
|
|
48
48
|
"geojson-bounding-box": "^0.2.0",
|
|
49
|
-
"html-react-parser": "^5.2.
|
|
49
|
+
"html-react-parser": "^5.2.11",
|
|
50
50
|
"ismobilejs": "^1.1.1",
|
|
51
|
-
"js-yaml": "^4.1.
|
|
51
|
+
"js-yaml": "^4.1.1",
|
|
52
52
|
"jszip": "^3.10.1",
|
|
53
53
|
"lodash.isempty": "^4.4.0",
|
|
54
54
|
"lodash.isequal": "^4.5.0",
|
|
55
|
-
"lodash.omit": "^4.5.0",
|
|
56
55
|
"mime-to-extensions": "^1.0.2",
|
|
57
56
|
"mkdirp": "^3.0.1",
|
|
58
57
|
"mousetrap": "^1.6.5",
|
|
59
58
|
"nearley": "^2.20.1",
|
|
60
59
|
"object-path": "^0.11.8",
|
|
61
|
-
"ol": "^10.
|
|
62
|
-
"ol-ext": "^4.0.
|
|
63
|
-
"ol-mapbox-style": "^
|
|
64
|
-
"painterro": "^1.2.
|
|
60
|
+
"ol": "^10.7.0",
|
|
61
|
+
"ol-ext": "^4.0.37",
|
|
62
|
+
"ol-mapbox-style": "^13.2.0",
|
|
63
|
+
"painterro": "^1.2.92",
|
|
65
64
|
"parse-css-color": "^0.2.1",
|
|
66
65
|
"path-browserify": "^1.0.1",
|
|
67
66
|
"pdf-lib": "^1.17.1",
|
|
68
|
-
"pdfjs-dist": "^4.
|
|
67
|
+
"pdfjs-dist": "^5.4.449",
|
|
69
68
|
"point-in-polygon": "^1.1.0",
|
|
70
69
|
"polygon-intersect-test": "^1.0.1",
|
|
71
|
-
"proj4": "^2.
|
|
70
|
+
"proj4": "^2.20.2",
|
|
72
71
|
"prop-types": "^15.8.1",
|
|
73
|
-
"qrcode.react": "^4.
|
|
72
|
+
"qrcode.react": "^4.2.0",
|
|
74
73
|
"randomcolor": "^0.6.2",
|
|
75
|
-
"react": "^
|
|
76
|
-
"react-chartjs-2": "^5.
|
|
77
|
-
"react-dom": "^
|
|
74
|
+
"react": "^19.2.3",
|
|
75
|
+
"react-chartjs-2": "^5.3.1",
|
|
76
|
+
"react-dom": "^19.2.3",
|
|
78
77
|
"react-google-recaptcha": "^3.1.0",
|
|
79
|
-
"react-redux": "^9.
|
|
80
|
-
"react-reverse-portal": "^2.
|
|
81
|
-
"react-rnd": "^10.
|
|
82
|
-
"react-share": "^5.
|
|
78
|
+
"react-redux": "^9.2.0",
|
|
79
|
+
"react-reverse-portal": "^2.3.0",
|
|
80
|
+
"react-rnd": "^10.5.2",
|
|
81
|
+
"react-share": "^5.2.2",
|
|
83
82
|
"react-sortablejs": "^1.5.1",
|
|
84
83
|
"react-swipeable": "^7.0.2",
|
|
85
84
|
"redux-logger": "^3.0.6",
|
|
86
85
|
"reselect": "^5.1.1",
|
|
87
|
-
"simplepolygon": "^
|
|
86
|
+
"simplepolygon": "^2.0.2",
|
|
88
87
|
"sortablejs": "^1.15.6",
|
|
89
88
|
"suncalc": "^1.9.0",
|
|
90
89
|
"svgpath": "^2.6.0",
|
|
@@ -94,36 +93,36 @@
|
|
|
94
93
|
"toposort": "^2.0.2",
|
|
95
94
|
"url": "^0.11.4",
|
|
96
95
|
"utif": "^3.1.0",
|
|
97
|
-
"uuid": "^
|
|
96
|
+
"uuid": "^13.0.0",
|
|
98
97
|
"xlsx": "^0.18.5"
|
|
99
98
|
},
|
|
100
99
|
"devDependencies": {
|
|
101
|
-
"@babel/cli": "^7.
|
|
102
|
-
"@babel/core": "^7.
|
|
103
|
-
"@babel/eslint-parser": "^7.
|
|
104
|
-
"@babel/plugin-transform-class-properties": "^7.
|
|
105
|
-
"@babel/plugin-transform-object-rest-spread": "^7.
|
|
106
|
-
"@babel/preset-env": "^7.
|
|
107
|
-
"@babel/preset-react": "^7.
|
|
100
|
+
"@babel/cli": "^7.28.3",
|
|
101
|
+
"@babel/core": "^7.28.5",
|
|
102
|
+
"@babel/eslint-parser": "^7.28.5",
|
|
103
|
+
"@babel/plugin-transform-class-properties": "^7.27.1",
|
|
104
|
+
"@babel/plugin-transform-object-rest-spread": "^7.28.4",
|
|
105
|
+
"@babel/preset-env": "^7.28.5",
|
|
106
|
+
"@babel/preset-react": "^7.28.5",
|
|
108
107
|
"@microsoft/eslint-formatter-sarif": "^3.1.0",
|
|
109
|
-
"@types/react": "^
|
|
110
|
-
"
|
|
108
|
+
"@types/react": "^19.2.7",
|
|
109
|
+
"@types/three": "^0.170.0",
|
|
110
|
+
"babel-loader": "^10.0.0",
|
|
111
111
|
"babel-plugin-transform-react-remove-prop-types": "^0.4.24",
|
|
112
|
-
"
|
|
113
|
-
"copy-webpack-plugin": "^12.0.2",
|
|
112
|
+
"copy-webpack-plugin": "^13.0.1",
|
|
114
113
|
"css-loader": "^7.1.2",
|
|
115
|
-
"eslint": "^
|
|
116
|
-
"eslint-plugin-perfectionist": "^
|
|
117
|
-
"eslint-plugin-react": "^7.37.
|
|
118
|
-
"html-webpack-plugin": "^5.6.
|
|
119
|
-
"react-docgen": "^
|
|
114
|
+
"eslint": "^9.39.2",
|
|
115
|
+
"eslint-plugin-perfectionist": "^5.1.0",
|
|
116
|
+
"eslint-plugin-react": "^7.37.5",
|
|
117
|
+
"html-webpack-plugin": "^5.6.5",
|
|
118
|
+
"react-docgen": "^8.0.2",
|
|
120
119
|
"source-map-loader": "^5.0.0",
|
|
121
120
|
"style-loader": "^4.0.0",
|
|
122
|
-
"typescript": "^5.
|
|
123
|
-
"webpack": "^5.
|
|
121
|
+
"typescript": "^5.9.3",
|
|
122
|
+
"webpack": "^5.104.1",
|
|
124
123
|
"webpack-bundle-size-analyzer": "^3.1.0",
|
|
125
|
-
"webpack-cli": "^
|
|
126
|
-
"webpack-dev-server": "^5.
|
|
124
|
+
"webpack-cli": "^6.0.1",
|
|
125
|
+
"webpack-dev-server": "^5.2.2"
|
|
127
126
|
},
|
|
128
127
|
"bin": {
|
|
129
128
|
"qwc_build_iconfont": "./scripts/makeIconkit.js",
|
package/plugins/API.js
CHANGED
|
@@ -69,18 +69,18 @@ import QtDesignerForm from '../components/QtDesignerForm';
|
|
|
69
69
|
import ResizeableWindow from '../components/ResizeableWindow';
|
|
70
70
|
import SearchBox from '../components/SearchBox';
|
|
71
71
|
import ServiceInfoWindow from '../components/ServiceInfoWindow';
|
|
72
|
+
import ShareLink from '../components/share/ShareLink';
|
|
73
|
+
import ShareQRCode from '../components/share/ShareQRCode';
|
|
74
|
+
import ShareSocials from '../components/share/ShareSocials';
|
|
72
75
|
import SideBar from '../components/SideBar';
|
|
73
76
|
import { Swipeable } from '../components/Swipeable';
|
|
74
77
|
import TaskBar from '../components/TaskBar';
|
|
75
78
|
import ThemeLayersListWindow from '../components/ThemeLayersListWindow';
|
|
76
79
|
import ThemeList from '../components/ThemeList';
|
|
77
|
-
import Toolbar from '../components/Toolbar';
|
|
78
|
-
import ShareLink from '../components/share/ShareLink';
|
|
79
|
-
import ShareQRCode from '../components/share/ShareQRCode';
|
|
80
|
-
import ShareSocials from '../components/share/ShareSocials';
|
|
81
80
|
import FixedTimeline from '../components/timeline/FixedTimeline';
|
|
82
81
|
import InfiniteTimeline from '../components/timeline/InfiniteTimeline';
|
|
83
82
|
import TimelineFeaturesSlider from '../components/timeline/TimelineFeaturesSlider';
|
|
83
|
+
import Toolbar from '../components/Toolbar';
|
|
84
84
|
import AccordeonWidget from '../components/widgets/AccordeonWidget';
|
|
85
85
|
import ButtonBar from '../components/widgets/ButtonBar';
|
|
86
86
|
import ColorButton from '../components/widgets/ColorButton';
|