qwc2 2025.10.9 → 2025.10.14

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 (241) hide show
  1. package/actions/display.js +30 -1
  2. package/actions/editing.js +22 -1
  3. package/actions/layerinfo.js +13 -1
  4. package/actions/layers.js +213 -3
  5. package/actions/localConfig.js +58 -1
  6. package/actions/locale.js +21 -1
  7. package/actions/locate.js +26 -1
  8. package/actions/logging.js +10 -1
  9. package/actions/map.js +105 -2
  10. package/actions/measurement.js +12 -1
  11. package/actions/processNotifications.js +37 -1
  12. package/actions/redlining.js +18 -1
  13. package/actions/redliningPick.js +12 -1
  14. package/actions/search.js +12 -1
  15. package/actions/serviceinfo.js +12 -1
  16. package/actions/task.js +55 -3
  17. package/actions/theme.js +339 -19
  18. package/actions/windows.js +164 -5
  19. package/components/AppMenu.js +435 -3
  20. package/components/AttributeForm.js +928 -32
  21. package/components/AttributeTableWidget.js +1105 -13
  22. package/components/AutoEditForm.js +189 -3
  23. package/components/CoordinateDisplayer.js +78 -2
  24. package/components/EditComboField.js +190 -6
  25. package/components/EditUploadField.js +315 -3
  26. package/components/ExportSelection.js +203 -2
  27. package/components/FullscreenSwitcher.js +90 -3
  28. package/components/Icon.js +81 -2
  29. package/components/IdentifyViewer.js +1161 -6
  30. package/components/ImportLayer.js +718 -20
  31. package/components/LayerInfoWindow.js +145 -2
  32. package/components/LinkFeatureForm.js +246 -5
  33. package/components/MapButton.js +88 -2
  34. package/components/MapSelection.js +287 -8
  35. package/components/MessageBar.js +68 -2
  36. package/components/NumericInputWindow.js +359 -2
  37. package/components/PickFeature.js +266 -2
  38. package/components/PluginsContainer.js +227 -8
  39. package/components/PrintSelection.js +620 -49
  40. package/components/ProcessNotifications.js +104 -2
  41. package/components/QtDesignerForm.js +1137 -18
  42. package/components/ResizeableWindow.js +591 -8
  43. package/components/SearchBox.js +1307 -20
  44. package/components/ServiceInfoWindow.js +107 -2
  45. package/components/SideBar.js +204 -4
  46. package/components/StandardApp.js +381 -20
  47. package/components/Swipeable.js +15 -1
  48. package/components/TaskBar.js +85 -2
  49. package/components/ThemeLayersListWindow.js +216 -4
  50. package/components/ThemeList.js +381 -7
  51. package/components/Toolbar.js +106 -2
  52. package/components/WindowManager.js +178 -2
  53. package/components/map/OlLayer.js +257 -6
  54. package/components/map/OlMap.js +405 -5
  55. package/components/map/layers/BingLayer.js +31 -2
  56. package/components/map/layers/GoogleLayer.js +222 -19
  57. package/components/map/layers/GraticuleLayer.js +21 -1
  58. package/components/map/layers/ImageLayer.js +15 -1
  59. package/components/map/layers/MVTLayer.js +52 -2
  60. package/components/map/layers/OSMLayer.js +24 -2
  61. package/components/map/layers/OverlayLayer.js +55 -3
  62. package/components/map/layers/VectorLayer.js +173 -8
  63. package/components/map/layers/WFSLayer.js +220 -6
  64. package/components/map/layers/WMSLayer.js +180 -6
  65. package/components/map/layers/WMTSLayer.js +67 -3
  66. package/components/map/layers/XYZLayer.js +24 -2
  67. package/components/map/layers/index.js +28 -1
  68. package/components/map3d/EditDataset3D.js +190 -3
  69. package/components/map3d/HeightProfile3D.js +402 -3
  70. package/components/map3d/ImportObjects3D.js +162 -2
  71. package/components/map3d/Map3D.js +1304 -38
  72. package/components/map3d/MapControls3D.js +392 -7
  73. package/components/map3d/SearchField3D.js +183 -11
  74. package/components/map3d/View3DSwitcher.js +98 -2
  75. package/components/map3d/drawtool/CreateTool3D.js +174 -4
  76. package/components/map3d/drawtool/EditTool3D.js +590 -6
  77. package/components/map3d/drawtool/NumericInput3D.js +336 -4
  78. package/components/map3d/layers/GeoTIFFLayer3D.js +15 -1
  79. package/components/map3d/layers/VectorLayer3D.js +53 -2
  80. package/components/map3d/layers/WFSLayer3D.js +109 -3
  81. package/components/map3d/layers/WMSLayer3D.js +70 -2
  82. package/components/map3d/layers/WMTSLayer3D.js +27 -3
  83. package/components/map3d/layers/index.js +14 -1
  84. package/components/map3d/utils/FirstPersonControls3D.js +423 -16
  85. package/components/map3d/utils/MiscUtils3D.js +221 -13
  86. package/components/map3d/utils/OrbitControls3D.js +176 -5
  87. package/components/map3d/utils/Tiles3DStyle.js +238 -9
  88. package/components/share/ShareLink.js +54 -2
  89. package/components/share/ShareQRCode.js +62 -2
  90. package/components/share/ShareSocials.js +125 -3
  91. package/components/timeline/FixedTimeline.js +236 -5
  92. package/components/timeline/InfiniteTimeline.js +347 -8
  93. package/components/timeline/TimelineFeaturesSlider.js +439 -5
  94. package/components/widgets/AccordeonWidget.js +96 -2
  95. package/components/widgets/ButtonBar.js +124 -2
  96. package/components/widgets/ColorButton.js +201 -3
  97. package/components/widgets/ComboBox.js +166 -2
  98. package/components/widgets/CopyButton.js +110 -2
  99. package/components/widgets/DateTimeInput.js +100 -3
  100. package/components/widgets/EditableSelect.js +230 -3
  101. package/components/widgets/FileSelector.js +128 -4
  102. package/components/widgets/Input.js +124 -2
  103. package/components/widgets/InputContainer.js +96 -2
  104. package/components/widgets/LayerCatalogWidget.js +219 -3
  105. package/components/widgets/MenuButton.js +157 -1
  106. package/components/widgets/ModalDialog.js +64 -2
  107. package/components/widgets/NavBar.js +119 -2
  108. package/components/widgets/NumberInput.js +226 -4
  109. package/components/widgets/PopupMenu.js +72 -1
  110. package/components/widgets/Primitives.js +6 -1
  111. package/components/widgets/ReCaptchaWidget.js +55 -1
  112. package/components/widgets/SearchWidget.js +255 -2
  113. package/components/widgets/Spinner.js +44 -2
  114. package/components/widgets/SuggestionInput.js +77 -2
  115. package/components/widgets/TextInput.js +308 -2
  116. package/components/widgets/ToggleSwitch.js +85 -2
  117. package/components/widgets/VectorLayerPicker.js +85 -3
  118. package/libs/openlayers.js +225 -5
  119. package/package.json +1 -1
  120. package/plugins/API.js +358 -15
  121. package/plugins/AttributeTable.js +109 -3
  122. package/plugins/Authentication.js +130 -5
  123. package/plugins/BackgroundSwitcher.js +218 -4
  124. package/plugins/Bookmark.js +289 -3
  125. package/plugins/BottomBar.js +298 -4
  126. package/plugins/CookiePopup.js +67 -3
  127. package/plugins/Cyclomedia.js +442 -5
  128. package/plugins/Editing.js +497 -9
  129. package/plugins/FeatureForm.js +366 -4
  130. package/plugins/FeatureSearch.js +458 -3
  131. package/plugins/GeometryDigitizer.js +664 -7
  132. package/plugins/HeightProfile.js +763 -15
  133. package/plugins/Help.js +102 -3
  134. package/plugins/HomeButton.js +80 -3
  135. package/plugins/Identify.js +543 -5
  136. package/plugins/LayerCatalog.js +215 -4
  137. package/plugins/LayerTree.js +1194 -6
  138. package/plugins/LocateButton.js +94 -3
  139. package/plugins/Map.js +320 -16
  140. package/plugins/MapCompare.js +94 -3
  141. package/plugins/MapCopyright.js +127 -5
  142. package/plugins/MapExport.js +613 -20
  143. package/plugins/MapFilter.js +868 -12
  144. package/plugins/MapInfoTooltip.js +277 -3
  145. package/plugins/MapLegend.js +253 -4
  146. package/plugins/MapTip.js +290 -4
  147. package/plugins/Measure.js +220 -4
  148. package/plugins/NewsPopup.js +137 -3
  149. package/plugins/OverviewMap.js +167 -7
  150. package/plugins/Panoramax.js +340 -2
  151. package/plugins/Portal.js +199 -4
  152. package/plugins/Print.js +1231 -15
  153. package/plugins/Redlining.js +750 -6
  154. package/plugins/Reports.js +332 -3
  155. package/plugins/Routing.js +1278 -15
  156. package/plugins/ScratchDrawing.js +173 -5
  157. package/plugins/Settings.js +241 -4
  158. package/plugins/Share.js +198 -3
  159. package/plugins/StartupMarker.js +84 -4
  160. package/plugins/TaskButton.js +88 -3
  161. package/plugins/ThemeSwitcher.js +164 -4
  162. package/plugins/TimeManager.js +971 -10
  163. package/plugins/TopBar.js +300 -7
  164. package/plugins/TourGuide.js +213 -2
  165. package/plugins/ValueTool.js +419 -4
  166. package/plugins/View3D.js +519 -14
  167. package/plugins/ZoomButtons.js +165 -3
  168. package/plugins/map/EditingSupport.js +199 -7
  169. package/plugins/map/LocateSupport.js +260 -4
  170. package/plugins/map/MeasurementSupport.js +216 -8
  171. package/plugins/map/RedliningPickSupport.js +201 -7
  172. package/plugins/map/RedliningSupport.js +726 -17
  173. package/plugins/map/SnapInteraction.js +101 -1
  174. package/plugins/map/SnapSupport.js +210 -2
  175. package/plugins/map/SnappingSupport.js +356 -17
  176. package/plugins/map3d/BackgroundSwitcher3D.js +44 -3
  177. package/plugins/map3d/BottomBar3D.js +118 -3
  178. package/plugins/map3d/Compare3D.js +422 -8
  179. package/plugins/map3d/Draw3D.js +353 -6
  180. package/plugins/map3d/ExportObjects3D.js +393 -18
  181. package/plugins/map3d/HideObjects3D.js +313 -12
  182. package/plugins/map3d/Identify3D.js +283 -12
  183. package/plugins/map3d/LayerTree3D.js +323 -3
  184. package/plugins/map3d/MapCopyright3D.js +128 -5
  185. package/plugins/map3d/MapExport3D.js +590 -10
  186. package/plugins/map3d/MapLight3D.js +553 -6
  187. package/plugins/map3d/Measure3D.js +571 -20
  188. package/plugins/map3d/OverviewMap3D.js +169 -3
  189. package/plugins/map3d/Settings3D.js +73 -3
  190. package/plugins/map3d/TopBar3D.js +207 -9
  191. package/plugins/redlining/RedliningBufferSupport.js +206 -3
  192. package/reducers/display.js +34 -2
  193. package/reducers/editing.js +68 -3
  194. package/reducers/index.js +9 -1
  195. package/reducers/layerinfo.js +26 -2
  196. package/reducers/layers.js +456 -9
  197. package/reducers/localConfig.js +122 -2
  198. package/reducers/locale.js +38 -2
  199. package/reducers/locate.js +40 -2
  200. package/reducers/map.js +176 -5
  201. package/reducers/measurement.js +42 -2
  202. package/reducers/processNotifications.js +49 -2
  203. package/reducers/redlining.js +50 -2
  204. package/reducers/redliningPick.js +27 -2
  205. package/reducers/search.js +20 -1
  206. package/reducers/serviceinfo.js +25 -2
  207. package/reducers/task.js +45 -2
  208. package/reducers/theme.js +51 -2
  209. package/reducers/windows.js +203 -2
  210. package/scripts/dist.sh +1 -1
  211. package/scripts/gen-plugin-docs.js +152 -2
  212. package/scripts/makeIconkit.js +85 -6
  213. package/scripts/themesConfig.js +742 -40
  214. package/scripts/updateTranslations.js +251 -10
  215. package/selectors/searchproviders.js +44 -2
  216. package/stores/StandardStore.js +42 -2
  217. package/utils/ConfigUtils.js +84 -3
  218. package/utils/CoordinatesUtils.js +234 -23
  219. package/utils/DxfUtils.js +237 -11
  220. package/utils/EditingInterface.js +421 -87
  221. package/utils/EditingUtils.js +357 -13
  222. package/utils/ElevationInterface.js +83 -22
  223. package/utils/FeatureStyles.js +429 -5
  224. package/utils/IdentifyUtils.js +443 -7
  225. package/utils/ImageEditor.js +79 -9
  226. package/utils/LayerUtils.js +1516 -50
  227. package/utils/LocaleUtils.js +117 -7
  228. package/utils/MapUtils.js +241 -59
  229. package/utils/MeasureUtils.js +323 -2
  230. package/utils/MiscUtils.js +189 -11
  231. package/utils/PermaLinkUtils.js +429 -6
  232. package/utils/PluginStore.js +27 -1
  233. package/utils/ResourceRegistry.js +15 -1
  234. package/utils/RoutingInterface.js +307 -7
  235. package/utils/SearchProviders.js +722 -19
  236. package/utils/ServiceLayerUtils.js +669 -14
  237. package/utils/Signal.js +32 -2
  238. package/utils/ThemeUtils.js +341 -7
  239. package/utils/VectorLayerUtils.js +589 -15
  240. package/utils/expr_grammar/grammar.js +2239 -2
  241. package/utils/expr_grammar/test.js +65 -3
@@ -1,23 +1,362 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
5
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
7
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
8
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
9
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
10
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
11
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
12
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
13
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
14
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
15
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
16
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
18
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
19
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
20
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
21
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
22
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
23
+ /**
2
24
  * Copyright 2017-2024 Sourcepole AG
3
25
  * All rights reserved.
4
26
  *
5
27
  * This source code is licensed under the BSD-style license found in the
6
28
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import ol from"openlayers";import PropTypes from"prop-types";import{v4 as uuidv4}from"uuid";import{LayerRole}from"../../actions/layers";import{setSnappingConfig}from"../../actions/map";import Icon from"../../components/Icon";import Spinner from"../../components/widgets/Spinner";import IdentifyUtils from"../../utils/IdentifyUtils";import LocaleUtils from"../../utils/LocaleUtils";import MapUtils from"../../utils/MapUtils";import VectorLayerUtils from"../../utils/VectorLayerUtils";import SnapInteraction from"./SnapInteraction";import"./style/SnappingSupport.css";/**
29
+ */
30
+
31
+ import React from 'react';
32
+ import { connect } from 'react-redux';
33
+ import isEmpty from 'lodash.isempty';
34
+ import ol from 'openlayers';
35
+ import PropTypes from 'prop-types';
36
+ import { v4 as uuidv4 } from 'uuid';
37
+ import { LayerRole } from '../../actions/layers';
38
+ import { setSnappingConfig } from '../../actions/map';
39
+ import Icon from '../../components/Icon';
40
+ import Spinner from '../../components/widgets/Spinner';
41
+ import IdentifyUtils from '../../utils/IdentifyUtils';
42
+ import LocaleUtils from '../../utils/LocaleUtils';
43
+ import MapUtils from '../../utils/MapUtils';
44
+ import VectorLayerUtils from '../../utils/VectorLayerUtils';
45
+ import SnapInteraction from './SnapInteraction';
46
+ import './style/SnappingSupport.css';
47
+
48
+ /**
8
49
  * Snapping support for the map component.
9
- */var SnappingSupport=/*#__PURE__*/function(_React$Component){function SnappingSupport(props){var _this;_classCallCheck(this,SnappingSupport);_this=_callSuper(this,SnappingSupport,[props]);_defineProperty(_this,"state",{reqId:null,// FeatureInfo request ID
10
- invalid:true,// Whether the feature cache needs to be rebuilt
11
- havesnaplayers:false,// Whether there are any snaplayers
12
- drawing:false// Whether a drawing interaction is active,
13
- });_defineProperty(_this,"snapToEdge",function(snappingConfig){return snappingConfig.active===true||snappingConfig.active==="edge"});_defineProperty(_this,"snapToVertex",function(snappingConfig){return snappingConfig.active===true||snappingConfig.active==="vertex"});_defineProperty(_this,"toggleSnap",function(mode){var active=_this.props.mapObj.snapping.active;if(mode==="edge"){if(active===true){active="vertex"}else if(active==="edge"){active=false}else if(active==="vertex"){active=true}else{active="edge"}}else if(mode==="vertex"){if(active===true){active="edge"}else if(active==="vertex"){active=false}else if(active==="edge"){active=true}else{active="vertex"}}_this.props.setSnappingConfig(true,active)});_defineProperty(_this,"handleInteractionAdded",function(ev){if(_this.inEventHandler){return}_this.inEventHandler=true;_this.addSnapInteractionIfNeeded(ev.target);_this.inEventHandler=false});_defineProperty(_this,"handleInteractionRemoved",function(ev){if(_this.inEventHandler){return}_this.inEventHandler=true;// If the removed interaction is the snap interaction, which should always be
14
- // the last interaction, remove the interaction preceding the snap interaction
15
- if(ev.element===_this.snapInteraction){ev.target.pop()}_this.addSnapInteractionIfNeeded(ev.target);_this.inEventHandler=false});_defineProperty(_this,"addSnapInteractionIfNeeded",function(interactions){// Just to be sure
16
- interactions.remove(_this.snapInteraction);// If there is any draw or modify interaction, add snapping interaction
17
- var added=false;if(_this.props.mapObj.snapping.enabled){for(var i=0;i<interactions.getLength();++i){var interaction=interactions.item(i);if(interaction instanceof ol.interaction.Draw||interaction instanceof ol.interaction.Modify||interaction instanceof ol.interaction.Select){interactions.push(_this.snapInteraction);added=true;break}}}_this.setState({drawing:added})});_defineProperty(_this,"refreshFeatureCache",function(force){if(!_this.state.invalid&&!force||!_this.state.drawing){return}_this.source.clear();var themeLayer=_this.props.layers.find(function(layer){return layer.role===LayerRole.THEME});if(!_this.props.theme||!themeLayer||!_this.state.drawing){return}var snappingConfig=_this.props.theme.snapping||{};// Gather snapping layers based on visibility scale ranges
18
- var scale=MapUtils.computeForZoom(_this.props.mapObj.scales,_this.props.mapObj.zoom);var snapLayers=(snappingConfig.snaplayers||[]).reduce(function(res,cur){if(cur.min!==undefined&&cur.min!==null&&scale<cur.min){// Below scale range
19
- return res}if(cur.max!==undefined&&cur.max!==null&&scale>=cur.max){// Above scale range
20
- return res}return[].concat(_toConsumableArray(res),[cur.name])},[]);// Gather local snap layers
21
- var snapToWfs=scale<snappingConfig.wfsMaxScale;var localLayers=[];_this.props.layers.forEach(function(layer){if(layer.role===LayerRole.USERLAYER&&(layer.type==="vector"||layer.type==="wfs"&&snapToWfs)){var olLayer=_this.props.map.getLayers().getArray().find(function(l){return l.get("id")===layer.id});if(olLayer&&olLayer.getSource()&&olLayer.getSource().getFeaturesInExtent){localLayers.push(olLayer)}}});_this.setState({reqId:null,havesnaplayers:!isEmpty(snapLayers)||!isEmpty(localLayers)});if(!_this.snapInteraction.getMap()||!_this.snapInteraction.getActive()){return}if(snapLayers.length===0){_this.addLocalSnapFeatures(localLayers);return}var xmin=_this.props.mapObj.bbox.bounds[0];var ymin=_this.props.mapObj.bbox.bounds[1];var xmax=_this.props.mapObj.bbox.bounds[2];var ymax=_this.props.mapObj.bbox.bounds[3];var filterGeom=VectorLayerUtils.geoJSONGeomToWkt({type:"Polygon",coordinates:[[[xmin,ymin],[xmax,ymin],[xmax,ymax],[xmin,ymax],[xmin,ymin]]]});var options={LAYERATTRIBS:JSON.stringify(snapLayers.reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,[]))},{})),with_htmlcontent:false,with_bbox:false,feature_count:snappingConfig.featureCount||500};var request=IdentifyUtils.buildFilterRequest(themeLayer,snapLayers.join(","),filterGeom,_this.props.mapObj,options);var reqId=uuidv4();_this.setState({reqId:reqId});IdentifyUtils.sendRequest(request,function(response){if(_this.state.reqId!==reqId){return}if(response){var result=IdentifyUtils.parseXmlResponse(response,_this.props.mapObj.projection,themeLayer);var features=Object.values(result).reduce(function(res,cur){return[].concat(_toConsumableArray(res),_toConsumableArray(cur))},[]);var format=new ol.format.GeoJSON;var olFeatures=format.readFeatures({type:"FeatureCollection",features:features.map(function(feature){return _objectSpread(_objectSpread({},feature),{},{id:uuidv4()})})});_this.source.addFeatures(olFeatures);// Add features from local layers
22
- _this.addLocalSnapFeatures(localLayers);_this.setState({invalid:false,reqId:null,havesnaplayers:true})}else{_this.setState({reqId:null})}})});_defineProperty(_this,"addLocalSnapFeatures",function(localLayers){var extent=_this.props.mapObj.bbox.bounds;var projection=ol.proj.get(_this.props.mapObj.projection);localLayers.forEach(function(olLayer){var olFeatures=olLayer.getSource().getFeaturesInExtent(extent,projection);_this.source.addFeatures(olFeatures)})});_this.source=new ol.source.Vector;_this.snapInteraction=new SnapInteraction({source:_this.source,edge:_this.snapToEdge(props.mapObj.snapping),vertex:_this.snapToVertex(props.mapObj.snapping)});_this.snapInteraction.setActive(_this.props.mapObj.snapping.active);_this.inEventHandler=false;props.map.getInteractions().on("add",_this.handleInteractionAdded);props.map.getInteractions().on("remove",_this.handleInteractionRemoved);MapUtils.registerHook(MapUtils.GET_SNAPPED_COORDINATES_FROM_PIXEL_HOOK,function(pixel){var coo=props.map.getCoordinateFromPixel(pixel);var snapResult=_this.snapInteraction.snapTo(pixel,coo,props.map);return snapResult?props.map.getCoordinateFromPixel(snapResult.vertexPixel):coo});return _this}_inherits(SnappingSupport,_React$Component);return _createClass(SnappingSupport,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){var _this2=this;if(this.state.drawing&&(this.props.mapObj.bbox!==prevProps.mapObj.bbox||this.props.theme!==prevProps.theme)){this.setState({invalid:true});this.refreshFeatureCache(true)}else if(this.state.drawing&&this.props.layers!==prevProps.layers){var layersChanged=this.props.layers.find(function(layer){if(layer.role===LayerRole.THEME){var prev=prevProps.layers.find(function(prevLayer){return layer.id===prevLayer.id});return!prev||layer.rev!==prev.rev}else if(layer.role===LayerRole.USERLAYER&&layer.type==="vector"){var _prev=prevProps.layers.find(function(prevLayer){return layer.id===prevLayer.id});return!_prev||_prev.features!==layer.features}return false});if(layersChanged){this.setState({invalid:true});// Delay to avoid refreshing the cache before QGIS Server can pick up the new feature
23
- setTimeout(function(){_this2.refreshFeatureCache(true)},1500)}}if(this.props.mapObj.snapping.active!==prevProps.mapObj.snapping.active||this.state.drawing!==prevState.drawing){this.snapInteraction.setActive(this.props.mapObj.snapping.active!==false);this.snapInteraction.setSnapEdge(this.snapToEdge(this.props.mapObj.snapping));this.snapInteraction.setSnapVertex(this.snapToVertex(this.props.mapObj.snapping));if(this.props.mapObj.snapping.active){this.refreshFeatureCache()}}}},{key:"render",value:function render(){var _this3=this;if(!this.state.drawing||!this.props.mapObj.snapping.enabled){return null}var disabled=!this.state.havesnaplayers||this.props.mapObj.snapping.active===false;var toolbarClass=disabled?"snapping-toolbar-inactive":"";var snapEdge=this.snapToEdge(this.props.mapObj.snapping);var snapVertex=this.snapToVertex(this.props.mapObj.snapping);return/*#__PURE__*/React.createElement("div",{className:"snapping-toolbar-container"},/*#__PURE__*/React.createElement("div",{className:toolbarClass},this.state.reqId!==null?/*#__PURE__*/React.createElement(Spinner,null):/*#__PURE__*/React.createElement("span",null,/*#__PURE__*/React.createElement("button",{className:"button"+(snapVertex?" pressed":""),onClick:function onClick(){return _this3.toggleSnap("vertex")},title:LocaleUtils.tr("snapping.vertex")},/*#__PURE__*/React.createElement(Icon,{icon:"snap_vertex",size:"large"})),/*#__PURE__*/React.createElement("button",{className:"button"+(snapEdge?" pressed":""),onClick:function onClick(){return _this3.toggleSnap("edge")},title:LocaleUtils.tr("snapping.edge")},/*#__PURE__*/React.createElement(Icon,{icon:"snap_edge",size:"large"}))),"\xA0",this.state.reqId?LocaleUtils.tr("snapping.loading"):LocaleUtils.tr("snapping.snappingenabled")))}}])}(React.Component);_defineProperty(SnappingSupport,"propTypes",{layers:PropTypes.array,map:PropTypes.object,mapObj:PropTypes.object,setSnappingConfig:PropTypes.func,task:PropTypes.string,theme:PropTypes.object});export default connect(function(state){return{layers:state.layers.flat,mapObj:state.map,task:state.task.id,theme:state.theme.current}},{setSnappingConfig:setSnappingConfig})(SnappingSupport);
50
+ */
51
+ var SnappingSupport = /*#__PURE__*/function (_React$Component) {
52
+ function SnappingSupport(props) {
53
+ var _this;
54
+ _classCallCheck(this, SnappingSupport);
55
+ _this = _callSuper(this, SnappingSupport, [props]);
56
+ _defineProperty(_this, "state", {
57
+ reqId: null,
58
+ // FeatureInfo request ID
59
+ invalid: true,
60
+ // Whether the feature cache needs to be rebuilt
61
+ havesnaplayers: false,
62
+ // Whether there are any snaplayers
63
+ drawing: false // Whether a drawing interaction is active,
64
+ });
65
+ _defineProperty(_this, "snapToEdge", function (snappingConfig) {
66
+ return snappingConfig.active === true || snappingConfig.active === 'edge';
67
+ });
68
+ _defineProperty(_this, "snapToVertex", function (snappingConfig) {
69
+ return snappingConfig.active === true || snappingConfig.active === 'vertex';
70
+ });
71
+ _defineProperty(_this, "toggleSnap", function (mode) {
72
+ var active = _this.props.mapObj.snapping.active;
73
+ if (mode === 'edge') {
74
+ if (active === true) {
75
+ active = 'vertex';
76
+ } else if (active === 'edge') {
77
+ active = false;
78
+ } else if (active === 'vertex') {
79
+ active = true;
80
+ } else {
81
+ active = 'edge';
82
+ }
83
+ } else if (mode === 'vertex') {
84
+ if (active === true) {
85
+ active = 'edge';
86
+ } else if (active === 'vertex') {
87
+ active = false;
88
+ } else if (active === 'edge') {
89
+ active = true;
90
+ } else {
91
+ active = 'vertex';
92
+ }
93
+ }
94
+ _this.props.setSnappingConfig(true, active);
95
+ });
96
+ _defineProperty(_this, "handleInteractionAdded", function (ev) {
97
+ if (_this.inEventHandler) {
98
+ return;
99
+ }
100
+ _this.inEventHandler = true;
101
+ _this.addSnapInteractionIfNeeded(ev.target);
102
+ _this.inEventHandler = false;
103
+ });
104
+ _defineProperty(_this, "handleInteractionRemoved", function (ev) {
105
+ if (_this.inEventHandler) {
106
+ return;
107
+ }
108
+ _this.inEventHandler = true;
109
+ // If the removed interaction is the snap interaction, which should always be
110
+ // the last interaction, remove the interaction preceding the snap interaction
111
+ if (ev.element === _this.snapInteraction) {
112
+ ev.target.pop();
113
+ }
114
+ _this.addSnapInteractionIfNeeded(ev.target);
115
+ _this.inEventHandler = false;
116
+ });
117
+ _defineProperty(_this, "addSnapInteractionIfNeeded", function (interactions) {
118
+ // Just to be sure
119
+ interactions.remove(_this.snapInteraction);
120
+ // If there is any draw or modify interaction, add snapping interaction
121
+ var added = false;
122
+ if (_this.props.mapObj.snapping.enabled) {
123
+ for (var i = 0; i < interactions.getLength(); ++i) {
124
+ var interaction = interactions.item(i);
125
+ if (interaction instanceof ol.interaction.Draw || interaction instanceof ol.interaction.Modify || interaction instanceof ol.interaction.Select) {
126
+ interactions.push(_this.snapInteraction);
127
+ added = true;
128
+ break;
129
+ }
130
+ }
131
+ }
132
+ _this.setState({
133
+ drawing: added
134
+ });
135
+ });
136
+ _defineProperty(_this, "refreshFeatureCache", function (force) {
137
+ if (!_this.state.invalid && !force || !_this.state.drawing) {
138
+ return;
139
+ }
140
+ _this.source.clear();
141
+ var themeLayer = _this.props.layers.find(function (layer) {
142
+ return layer.role === LayerRole.THEME;
143
+ });
144
+ if (!_this.props.theme || !themeLayer || !_this.state.drawing) {
145
+ return;
146
+ }
147
+ var snappingConfig = _this.props.theme.snapping || {};
148
+ // Gather snapping layers based on visibility scale ranges
149
+ var scale = MapUtils.computeForZoom(_this.props.mapObj.scales, _this.props.mapObj.zoom);
150
+ var snapLayers = (snappingConfig.snaplayers || []).reduce(function (res, cur) {
151
+ if (cur.min !== undefined && cur.min !== null && scale < cur.min) {
152
+ // Below scale range
153
+ return res;
154
+ }
155
+ if (cur.max !== undefined && cur.max !== null && scale >= cur.max) {
156
+ // Above scale range
157
+ return res;
158
+ }
159
+ return [].concat(_toConsumableArray(res), [cur.name]);
160
+ }, []);
161
+ // Gather local snap layers
162
+ var snapToWfs = scale < snappingConfig.wfsMaxScale;
163
+ var localLayers = [];
164
+ _this.props.layers.forEach(function (layer) {
165
+ if (layer.role === LayerRole.USERLAYER && (layer.type === 'vector' || layer.type === "wfs" && snapToWfs)) {
166
+ var olLayer = _this.props.map.getLayers().getArray().find(function (l) {
167
+ return l.get('id') === layer.id;
168
+ });
169
+ if (olLayer && olLayer.getSource() && olLayer.getSource().getFeaturesInExtent) {
170
+ localLayers.push(olLayer);
171
+ }
172
+ }
173
+ });
174
+ _this.setState({
175
+ reqId: null,
176
+ havesnaplayers: !isEmpty(snapLayers) || !isEmpty(localLayers)
177
+ });
178
+ if (!_this.snapInteraction.getMap() || !_this.snapInteraction.getActive()) {
179
+ return;
180
+ }
181
+ if (snapLayers.length === 0) {
182
+ _this.addLocalSnapFeatures(localLayers);
183
+ return;
184
+ }
185
+ var xmin = _this.props.mapObj.bbox.bounds[0];
186
+ var ymin = _this.props.mapObj.bbox.bounds[1];
187
+ var xmax = _this.props.mapObj.bbox.bounds[2];
188
+ var ymax = _this.props.mapObj.bbox.bounds[3];
189
+ var filterGeom = VectorLayerUtils.geoJSONGeomToWkt({
190
+ type: 'Polygon',
191
+ coordinates: [[[xmin, ymin], [xmax, ymin], [xmax, ymax], [xmin, ymax], [xmin, ymin]]]
192
+ });
193
+ var options = {
194
+ LAYERATTRIBS: JSON.stringify(snapLayers.reduce(function (res, key) {
195
+ return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, key, []));
196
+ }, {})),
197
+ with_htmlcontent: false,
198
+ with_bbox: false,
199
+ feature_count: snappingConfig.featureCount || 500
200
+ };
201
+ var request = IdentifyUtils.buildFilterRequest(themeLayer, snapLayers.join(","), filterGeom, _this.props.mapObj, options);
202
+ var reqId = uuidv4();
203
+ _this.setState({
204
+ reqId: reqId
205
+ });
206
+ IdentifyUtils.sendRequest(request, function (response) {
207
+ if (_this.state.reqId !== reqId) {
208
+ return;
209
+ }
210
+ if (response) {
211
+ var result = IdentifyUtils.parseXmlResponse(response, _this.props.mapObj.projection, themeLayer);
212
+ var features = Object.values(result).reduce(function (res, cur) {
213
+ return [].concat(_toConsumableArray(res), _toConsumableArray(cur));
214
+ }, []);
215
+ var format = new ol.format.GeoJSON();
216
+ var olFeatures = format.readFeatures({
217
+ type: "FeatureCollection",
218
+ features: features.map(function (feature) {
219
+ return _objectSpread(_objectSpread({}, feature), {}, {
220
+ id: uuidv4()
221
+ });
222
+ })
223
+ });
224
+ _this.source.addFeatures(olFeatures);
225
+ // Add features from local layers
226
+ _this.addLocalSnapFeatures(localLayers);
227
+ _this.setState({
228
+ invalid: false,
229
+ reqId: null,
230
+ havesnaplayers: true
231
+ });
232
+ } else {
233
+ _this.setState({
234
+ reqId: null
235
+ });
236
+ }
237
+ });
238
+ });
239
+ _defineProperty(_this, "addLocalSnapFeatures", function (localLayers) {
240
+ var extent = _this.props.mapObj.bbox.bounds;
241
+ var projection = ol.proj.get(_this.props.mapObj.projection);
242
+ localLayers.forEach(function (olLayer) {
243
+ var olFeatures = olLayer.getSource().getFeaturesInExtent(extent, projection);
244
+ _this.source.addFeatures(olFeatures);
245
+ });
246
+ });
247
+ _this.source = new ol.source.Vector();
248
+ _this.snapInteraction = new SnapInteraction({
249
+ source: _this.source,
250
+ edge: _this.snapToEdge(props.mapObj.snapping),
251
+ vertex: _this.snapToVertex(props.mapObj.snapping)
252
+ });
253
+ _this.snapInteraction.setActive(_this.props.mapObj.snapping.active);
254
+ _this.inEventHandler = false;
255
+ props.map.getInteractions().on('add', _this.handleInteractionAdded);
256
+ props.map.getInteractions().on('remove', _this.handleInteractionRemoved);
257
+ MapUtils.registerHook(MapUtils.GET_SNAPPED_COORDINATES_FROM_PIXEL_HOOK, function (pixel) {
258
+ var coo = props.map.getCoordinateFromPixel(pixel);
259
+ var snapResult = _this.snapInteraction.snapTo(pixel, coo, props.map);
260
+ return snapResult ? props.map.getCoordinateFromPixel(snapResult.vertexPixel) : coo;
261
+ });
262
+ return _this;
263
+ }
264
+ _inherits(SnappingSupport, _React$Component);
265
+ return _createClass(SnappingSupport, [{
266
+ key: "componentDidUpdate",
267
+ value: function componentDidUpdate(prevProps, prevState) {
268
+ var _this2 = this;
269
+ if (this.state.drawing && (this.props.mapObj.bbox !== prevProps.mapObj.bbox || this.props.theme !== prevProps.theme)) {
270
+ this.setState({
271
+ invalid: true
272
+ });
273
+ this.refreshFeatureCache(true);
274
+ } else if (this.state.drawing && this.props.layers !== prevProps.layers) {
275
+ var layersChanged = this.props.layers.find(function (layer) {
276
+ if (layer.role === LayerRole.THEME) {
277
+ var prev = prevProps.layers.find(function (prevLayer) {
278
+ return layer.id === prevLayer.id;
279
+ });
280
+ return !prev || layer.rev !== prev.rev;
281
+ } else if (layer.role === LayerRole.USERLAYER && layer.type === 'vector') {
282
+ var _prev = prevProps.layers.find(function (prevLayer) {
283
+ return layer.id === prevLayer.id;
284
+ });
285
+ return !_prev || _prev.features !== layer.features;
286
+ }
287
+ return false;
288
+ });
289
+ if (layersChanged) {
290
+ this.setState({
291
+ invalid: true
292
+ });
293
+ // Delay to avoid refreshing the cache before QGIS Server can pick up the new feature
294
+ setTimeout(function () {
295
+ _this2.refreshFeatureCache(true);
296
+ }, 1500);
297
+ }
298
+ }
299
+ if (this.props.mapObj.snapping.active !== prevProps.mapObj.snapping.active || this.state.drawing !== prevState.drawing) {
300
+ this.snapInteraction.setActive(this.props.mapObj.snapping.active !== false);
301
+ this.snapInteraction.setSnapEdge(this.snapToEdge(this.props.mapObj.snapping));
302
+ this.snapInteraction.setSnapVertex(this.snapToVertex(this.props.mapObj.snapping));
303
+ if (this.props.mapObj.snapping.active) {
304
+ this.refreshFeatureCache();
305
+ }
306
+ }
307
+ }
308
+ }, {
309
+ key: "render",
310
+ value: function render() {
311
+ var _this3 = this;
312
+ if (!this.state.drawing || !this.props.mapObj.snapping.enabled) {
313
+ return null;
314
+ }
315
+ var disabled = !this.state.havesnaplayers || this.props.mapObj.snapping.active === false;
316
+ var toolbarClass = disabled ? "snapping-toolbar-inactive" : "";
317
+ var snapEdge = this.snapToEdge(this.props.mapObj.snapping);
318
+ var snapVertex = this.snapToVertex(this.props.mapObj.snapping);
319
+ return /*#__PURE__*/React.createElement("div", {
320
+ className: "snapping-toolbar-container"
321
+ }, /*#__PURE__*/React.createElement("div", {
322
+ className: toolbarClass
323
+ }, this.state.reqId !== null ? /*#__PURE__*/React.createElement(Spinner, null) : /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("button", {
324
+ className: "button" + (snapVertex ? " pressed" : ""),
325
+ onClick: function onClick() {
326
+ return _this3.toggleSnap('vertex');
327
+ },
328
+ title: LocaleUtils.tr("snapping.vertex")
329
+ }, /*#__PURE__*/React.createElement(Icon, {
330
+ icon: "snap_vertex",
331
+ size: "large"
332
+ })), /*#__PURE__*/React.createElement("button", {
333
+ className: "button" + (snapEdge ? " pressed" : ""),
334
+ onClick: function onClick() {
335
+ return _this3.toggleSnap('edge');
336
+ },
337
+ title: LocaleUtils.tr("snapping.edge")
338
+ }, /*#__PURE__*/React.createElement(Icon, {
339
+ icon: "snap_edge",
340
+ size: "large"
341
+ }))), "\xA0", this.state.reqId ? LocaleUtils.tr("snapping.loading") : LocaleUtils.tr("snapping.snappingenabled")));
342
+ }
343
+ }]);
344
+ }(React.Component);
345
+ _defineProperty(SnappingSupport, "propTypes", {
346
+ layers: PropTypes.array,
347
+ map: PropTypes.object,
348
+ mapObj: PropTypes.object,
349
+ setSnappingConfig: PropTypes.func,
350
+ task: PropTypes.string,
351
+ theme: PropTypes.object
352
+ });
353
+ export default connect(function (state) {
354
+ return {
355
+ layers: state.layers.flat,
356
+ mapObj: state.map,
357
+ task: state.task.id,
358
+ theme: state.theme.current
359
+ };
360
+ }, {
361
+ setSnappingConfig: setSnappingConfig
362
+ })(SnappingSupport);
@@ -1,9 +1,50 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
6
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
7
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
8
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
10
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
11
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ /**
2
16
  * Copyright 2025 Sourcepole AG
3
17
  * All rights reserved.
4
18
  *
5
19
  * This source code is licensed under the BSD-style license found in the
6
20
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import PropTypes from"prop-types";import{BackgroundSwitcher}from"../BackgroundSwitcher";/**
21
+ */
22
+
23
+ import React from 'react';
24
+ import PropTypes from 'prop-types';
25
+ import { BackgroundSwitcher } from '../BackgroundSwitcher';
26
+
27
+ /**
8
28
  * Map button for switching the background layer of the 3D map.
9
- */var BackgroundSwitcher3D=/*#__PURE__*/function(_React$Component){function BackgroundSwitcher3D(){_classCallCheck(this,BackgroundSwitcher3D);return _callSuper(this,BackgroundSwitcher3D,arguments)}_inherits(BackgroundSwitcher3D,_React$Component);return _createClass(BackgroundSwitcher3D,[{key:"render",value:function render(){return/*#__PURE__*/React.createElement(BackgroundSwitcher,{changeLayerVisibility:this.props.sceneContext.setBaseLayer,layers:this.props.sceneContext.baseLayers})}}])}(React.Component);_defineProperty(BackgroundSwitcher3D,"availableIn3D",true);_defineProperty(BackgroundSwitcher3D,"propTypes",{sceneContext:PropTypes.object});export{BackgroundSwitcher3D as default};
29
+ */
30
+ var BackgroundSwitcher3D = /*#__PURE__*/function (_React$Component) {
31
+ function BackgroundSwitcher3D() {
32
+ _classCallCheck(this, BackgroundSwitcher3D);
33
+ return _callSuper(this, BackgroundSwitcher3D, arguments);
34
+ }
35
+ _inherits(BackgroundSwitcher3D, _React$Component);
36
+ return _createClass(BackgroundSwitcher3D, [{
37
+ key: "render",
38
+ value: function render() {
39
+ return /*#__PURE__*/React.createElement(BackgroundSwitcher, {
40
+ changeLayerVisibility: this.props.sceneContext.setBaseLayer,
41
+ layers: this.props.sceneContext.baseLayers
42
+ });
43
+ }
44
+ }]);
45
+ }(React.Component);
46
+ _defineProperty(BackgroundSwitcher3D, "availableIn3D", true);
47
+ _defineProperty(BackgroundSwitcher3D, "propTypes", {
48
+ sceneContext: PropTypes.object
49
+ });
50
+ export { BackgroundSwitcher3D as default };
@@ -1,9 +1,124 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
6
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
7
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
8
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
10
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
11
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ /**
2
16
  * Copyright 2024 Sourcepole AG
3
17
  * All rights reserved.
4
18
  *
5
19
  * This source code is licensed under the BSD-style license found in the
6
20
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{setBottombarHeight}from"../../actions/windows";import CoordinatesUtils from"../../utils/CoordinatesUtils";import"./style/BottomBar3D.css";/**
21
+ */
22
+
23
+ import React from 'react';
24
+ import { connect } from 'react-redux';
25
+ import PropTypes from 'prop-types';
26
+ import { setBottombarHeight } from '../../actions/windows';
27
+ import CoordinatesUtils from '../../utils/CoordinatesUtils';
28
+ import './style/BottomBar3D.css';
29
+
30
+ /**
8
31
  * Bottom bar of the 3D map, displaying coordinates, projection, etc.
9
- */var BottomBar3D=/*#__PURE__*/function(_React$Component){function BottomBar3D(){var _this;_classCallCheck(this,BottomBar3D);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,BottomBar3D,[].concat(args));_defineProperty(_this,"state",{cursorPosition:null,progress:0});_defineProperty(_this,"scheduleGetCursorPosition",function(ev){var rect=ev.currentTarget.getBoundingClientRect();var x=(ev.clientX-rect.left)/rect.width*2-1;var y=-(ev.clientY-rect.top)/rect.height*2+1;clearTimeout(_this.cursorPositionTimeout);_this.cursorPositionTimeout=setTimeout(function(){return _this.getCursorPosition(x,y)},150)});_defineProperty(_this,"getCursorPosition",function(x,y){var intersection=_this.props.sceneContext.getSceneIntersection(x,y);if(intersection){var p=intersection.point;_this.setState({cursorPosition:[p.x,p.y,p.z]})}});_defineProperty(_this,"storeHeight",function(el){if(el){_this.props.setBottombarHeight(el.clientHeight)}});return _this}_inherits(BottomBar3D,_React$Component);return _createClass(BottomBar3D,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;this.props.sceneContext.scene.viewport.addEventListener("mousemove",this.scheduleGetCursorPosition);this.props.sceneContext.scene.addEventListener("update-end",function(){_this2.setState({progress:Math.round(_this2.props.sceneContext.scene.progress*100)+"%"})})}},{key:"componentWillUnmount",value:function componentWillUnmount(){clearTimeout(this.cursorPositionTimeout)}},{key:"render",value:function render(){return/*#__PURE__*/React.createElement("div",{className:"map3d-bottombar",ref:this.storeHeight},/*#__PURE__*/React.createElement("div",{className:"map3d-bottombar-progress"},/*#__PURE__*/React.createElement("div",{className:"map3d-bottombar-progressbar",style:{width:this.state.progress}}),/*#__PURE__*/React.createElement("div",{className:"map3d-bottombar-progress-label"},this.state.progress)),/*#__PURE__*/React.createElement("div",{className:"map3d-bottombar-spacer"}),/*#__PURE__*/React.createElement("div",{className:"map3d-bottombar-position"},(this.state.cursorPosition||[]).map(function(x){return x.toFixed(0)}).join(" ")),/*#__PURE__*/React.createElement("div",{className:"map3d-bottombar-projection"},this.props.sceneContext.mapCrs?CoordinatesUtils.getAvailableCRS()[this.props.sceneContext.mapCrs].label:""),/*#__PURE__*/React.createElement("div",{className:"map3d-bottombar-spacer"}))}}])}(React.Component);_defineProperty(BottomBar3D,"propTypes",{sceneContext:PropTypes.object,setBottombarHeight:PropTypes.func});export default connect(function(){return{}},{setBottombarHeight:setBottombarHeight})(BottomBar3D);
32
+ */
33
+ var BottomBar3D = /*#__PURE__*/function (_React$Component) {
34
+ function BottomBar3D() {
35
+ var _this;
36
+ _classCallCheck(this, BottomBar3D);
37
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
38
+ args[_key] = arguments[_key];
39
+ }
40
+ _this = _callSuper(this, BottomBar3D, [].concat(args));
41
+ _defineProperty(_this, "state", {
42
+ cursorPosition: null,
43
+ progress: 0
44
+ });
45
+ _defineProperty(_this, "scheduleGetCursorPosition", function (ev) {
46
+ var rect = ev.currentTarget.getBoundingClientRect();
47
+ var x = (ev.clientX - rect.left) / rect.width * 2 - 1;
48
+ var y = -(ev.clientY - rect.top) / rect.height * 2 + 1;
49
+ clearTimeout(_this.cursorPositionTimeout);
50
+ _this.cursorPositionTimeout = setTimeout(function () {
51
+ return _this.getCursorPosition(x, y);
52
+ }, 150);
53
+ });
54
+ _defineProperty(_this, "getCursorPosition", function (x, y) {
55
+ var intersection = _this.props.sceneContext.getSceneIntersection(x, y);
56
+ if (intersection) {
57
+ var p = intersection.point;
58
+ _this.setState({
59
+ cursorPosition: [p.x, p.y, p.z]
60
+ });
61
+ }
62
+ });
63
+ _defineProperty(_this, "storeHeight", function (el) {
64
+ if (el) {
65
+ _this.props.setBottombarHeight(el.clientHeight);
66
+ }
67
+ });
68
+ return _this;
69
+ }
70
+ _inherits(BottomBar3D, _React$Component);
71
+ return _createClass(BottomBar3D, [{
72
+ key: "componentDidMount",
73
+ value: function componentDidMount() {
74
+ var _this2 = this;
75
+ this.props.sceneContext.scene.viewport.addEventListener('mousemove', this.scheduleGetCursorPosition);
76
+ this.props.sceneContext.scene.addEventListener("update-end", function () {
77
+ _this2.setState({
78
+ progress: Math.round(_this2.props.sceneContext.scene.progress * 100) + "%"
79
+ });
80
+ });
81
+ }
82
+ }, {
83
+ key: "componentWillUnmount",
84
+ value: function componentWillUnmount() {
85
+ clearTimeout(this.cursorPositionTimeout);
86
+ }
87
+ }, {
88
+ key: "render",
89
+ value: function render() {
90
+ return /*#__PURE__*/React.createElement("div", {
91
+ className: "map3d-bottombar",
92
+ ref: this.storeHeight
93
+ }, /*#__PURE__*/React.createElement("div", {
94
+ className: "map3d-bottombar-progress"
95
+ }, /*#__PURE__*/React.createElement("div", {
96
+ className: "map3d-bottombar-progressbar",
97
+ style: {
98
+ width: this.state.progress
99
+ }
100
+ }), /*#__PURE__*/React.createElement("div", {
101
+ className: "map3d-bottombar-progress-label"
102
+ }, this.state.progress)), /*#__PURE__*/React.createElement("div", {
103
+ className: "map3d-bottombar-spacer"
104
+ }), /*#__PURE__*/React.createElement("div", {
105
+ className: "map3d-bottombar-position"
106
+ }, (this.state.cursorPosition || []).map(function (x) {
107
+ return x.toFixed(0);
108
+ }).join(" ")), /*#__PURE__*/React.createElement("div", {
109
+ className: "map3d-bottombar-projection"
110
+ }, this.props.sceneContext.mapCrs ? CoordinatesUtils.getAvailableCRS()[this.props.sceneContext.mapCrs].label : ""), /*#__PURE__*/React.createElement("div", {
111
+ className: "map3d-bottombar-spacer"
112
+ }));
113
+ }
114
+ }]);
115
+ }(React.Component);
116
+ _defineProperty(BottomBar3D, "propTypes", {
117
+ sceneContext: PropTypes.object,
118
+ setBottombarHeight: PropTypes.func
119
+ });
120
+ export default connect(function () {
121
+ return {};
122
+ }, {
123
+ setBottombarHeight: setBottombarHeight
124
+ })(BottomBar3D);