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

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 (425) hide show
  1. package/README.md +38 -20
  2. package/app.config.json +3 -0
  3. package/build/.eslintrc +3 -0
  4. package/build/build.js +184 -174
  5. package/build/buildCesium.js +32 -19
  6. package/build/buildHelpers.js +117 -48
  7. package/build/buildPreview.js +9 -6
  8. package/build/commonViteConfig.js +1 -3
  9. package/build/determineHost.js +17 -4
  10. package/build/generateOLLib.js +13 -16
  11. package/build/getPluginProxies.js +16 -3
  12. package/build/info/conf.json +21 -21
  13. package/build/info/publish.js +15 -4
  14. package/config/aerowest.config.json +18 -44
  15. package/config/base.config.json +72 -246
  16. package/config/codes.config.json +4 -0
  17. package/config/dev.config.json +11 -13
  18. package/config/graphFeatureInfo.config.json +58 -17
  19. package/config/projects.config.json +30 -0
  20. package/config/www.config.json +98 -297
  21. package/dist/assets/cesium/Workers/{ArcType-ce2e50ab.js → ArcType-2d9abbbc.js} +4 -4
  22. package/dist/assets/cesium/Workers/{AttributeCompression-b646d393.js → AttributeCompression-f9f6c717.js} +24 -24
  23. package/dist/assets/cesium/Workers/{AxisAlignedBoundingBox-ff186ccc.js → AxisAlignedBoundingBox-85d9e53a.js} +3 -3
  24. package/dist/assets/cesium/Workers/{BoundingRectangle-be5924f4.js → BoundingRectangle-1ee7eb47.js} +18 -18
  25. package/dist/assets/cesium/Workers/{BoxGeometry-12eeccaf.js → BoxGeometry-3b2be784.js} +9 -9
  26. package/dist/assets/cesium/Workers/{Check-666ab1a0.js → Check-6ede7e26.js} +22 -22
  27. package/dist/assets/cesium/Workers/{Color-a84038cb.js → Color-f107c84d.js} +59 -59
  28. package/dist/assets/cesium/Workers/{ComponentDatatype-f7b11d02.js → ComponentDatatype-cf1fa08e.js} +16 -16
  29. package/dist/assets/cesium/Workers/{CoplanarPolygonGeometryLibrary-3272c1b3.js → CoplanarPolygonGeometryLibrary-78d71993.js} +1 -1
  30. package/dist/assets/cesium/Workers/{CorridorGeometryLibrary-0170e093.js → CorridorGeometryLibrary-50d99b33.js} +1 -1
  31. package/dist/assets/cesium/Workers/{CylinderGeometry-7c5da648.js → CylinderGeometry-51b0d9bf.js} +12 -12
  32. package/dist/assets/cesium/Workers/{CylinderGeometryLibrary-372c07d8.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
  33. package/dist/assets/cesium/Workers/{EllipseGeometry-797d580e.js → EllipseGeometry-bcfb5d87.js} +20 -20
  34. package/dist/assets/cesium/Workers/{EllipseGeometryLibrary-2939e1dc.js → EllipseGeometryLibrary-e94f8472.js} +1 -1
  35. package/dist/assets/cesium/Workers/{EllipseOutlineGeometry-8b50870f.js → EllipseOutlineGeometry-28e3a1bb.js} +15 -15
  36. package/dist/assets/cesium/Workers/{EllipsoidGeodesic-98c62a56.js → EllipsoidGeodesic-5b3623dc.js} +6 -6
  37. package/dist/assets/cesium/Workers/{EllipsoidGeometry-21c0e3a5.js → EllipsoidGeometry-b222fa63.js} +14 -14
  38. package/dist/assets/cesium/Workers/{EllipsoidOutlineGeometry-eff247c8.js → EllipsoidOutlineGeometry-38a3fb5b.js} +15 -15
  39. package/dist/assets/cesium/Workers/{EllipsoidRhumbLine-19756602.js → EllipsoidRhumbLine-ef872433.js} +9 -9
  40. package/dist/assets/cesium/Workers/{EllipsoidTangentPlane-214683dc.js → EllipsoidTangentPlane-8c89f28c.js} +1 -1
  41. package/dist/assets/cesium/Workers/{EncodedCartesian3-81f70735.js → EncodedCartesian3-57415c8a.js} +6 -6
  42. package/dist/assets/cesium/Workers/{FrustumGeometry-ac42a6d9.js → FrustumGeometry-bdd3a04d.js} +139 -111
  43. package/dist/assets/cesium/Workers/{GeometryAttribute-7d6f1732.js → GeometryAttribute-153115c5.js} +20 -20
  44. package/dist/assets/cesium/Workers/{GeometryAttributes-f06a2792.js → GeometryAttributes-ad136444.js} +1 -1
  45. package/dist/assets/cesium/Workers/{GeometryInstance-451dc1cd.js → GeometryInstance-34d9e21e.js} +6 -6
  46. package/dist/assets/cesium/Workers/{GeometryPipeline-ce4339ed.js → GeometryPipeline-acb2399c.js} +22 -22
  47. package/dist/assets/cesium/Workers/{IndexDatatype-a55ceaa1.js → IndexDatatype-2643aa47.js} +13 -13
  48. package/dist/assets/cesium/Workers/{IntersectionTests-f6e6bd8a.js → IntersectionTests-271e513e.js} +37 -37
  49. package/dist/assets/cesium/Workers/{Math-2dbd6b93.js → Math-0a2ac845.js} +149 -139
  50. package/dist/assets/cesium/Workers/{Matrix2-13178034.js → Matrix2-e1298525.js} +256 -256
  51. package/dist/assets/cesium/Workers/{Matrix3-315394f6.js → Matrix3-41c58dde.js} +150 -150
  52. package/dist/assets/cesium/Workers/{OrientedBoundingBox-04920dc7.js → OrientedBoundingBox-5e04e31f.js} +19 -17
  53. package/dist/assets/cesium/Workers/{Plane-900aa728.js → Plane-4c3d403b.js} +5 -5
  54. package/dist/assets/cesium/Workers/{PolygonGeometryLibrary-a8680d96.js → PolygonGeometryLibrary-6762b65b.js} +6 -6
  55. package/dist/assets/cesium/Workers/PolygonPipeline-7dc7a431.js +1344 -0
  56. package/dist/assets/cesium/Workers/{PolylinePipeline-32f36d2a.js → PolylinePipeline-15fde655.js} +16 -16
  57. package/dist/assets/cesium/Workers/{PolylineVolumeGeometryLibrary-a510d657.js → PolylineVolumeGeometryLibrary-ba7dfed5.js} +7 -7
  58. package/dist/assets/cesium/Workers/{PrimitivePipeline-ba38434a.js → PrimitivePipeline-68f0b9a2.js} +6 -6
  59. package/dist/assets/cesium/Workers/{RectangleGeometryLibrary-bdba697e.js → RectangleGeometryLibrary-8eaf23da.js} +1 -1
  60. package/dist/assets/cesium/Workers/{RuntimeError-06c93819.js → RuntimeError-ef395448.js} +5 -5
  61. package/dist/assets/cesium/Workers/{TerrainEncoding-833187da.js → TerrainEncoding-eb8a645a.js} +30 -30
  62. package/dist/assets/cesium/Workers/Transforms-f6451f99.js +14698 -0
  63. package/dist/assets/cesium/Workers/{VertexFormat-6b480673.js → VertexFormat-030f11ff.js} +14 -14
  64. package/dist/assets/cesium/Workers/{WallGeometryLibrary-919eed92.js → WallGeometryLibrary-feef3109.js} +1 -1
  65. package/dist/assets/cesium/Workers/{WebGLConstants-a8cc3e8c.js → WebGLConstants-0b1ce7ba.js} +1 -1
  66. package/dist/assets/cesium/Workers/{WebMercatorProjection-13a90d41.js → WebMercatorProjection-13ed1a6e.js} +6 -6
  67. package/dist/assets/cesium/Workers/{arrayRemoveDuplicates-c2038105.js → arrayRemoveDuplicates-d2061e85.js} +5 -5
  68. package/dist/assets/cesium/Workers/cesiumWorkerBootstrapper.js +5 -5
  69. package/dist/assets/cesium/Workers/{combine-ca22a614.js → combine-d9581036.js} +5 -5
  70. package/dist/assets/cesium/Workers/combineGeometry.js +1 -1
  71. package/dist/assets/cesium/Workers/createBoxGeometry.js +1 -1
  72. package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +9 -9
  73. package/dist/assets/cesium/Workers/createCircleGeometry.js +13 -13
  74. package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +13 -13
  75. package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +11 -11
  76. package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +9 -9
  77. package/dist/assets/cesium/Workers/createCorridorGeometry.js +14 -14
  78. package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +12 -12
  79. package/dist/assets/cesium/Workers/createCylinderGeometry.js +1 -1
  80. package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +13 -13
  81. package/dist/assets/cesium/Workers/createEllipseGeometry.js +1 -1
  82. package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +1 -1
  83. package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +1 -1
  84. package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +1 -1
  85. package/dist/assets/cesium/Workers/createFrustumGeometry.js +1 -1
  86. package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +8 -8
  87. package/dist/assets/cesium/Workers/createGeometry.js +1 -1
  88. package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +33 -33
  89. package/dist/assets/cesium/Workers/createPlaneGeometry.js +8 -8
  90. package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +6 -6
  91. package/dist/assets/cesium/Workers/createPolygonGeometry.js +25 -25
  92. package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +17 -17
  93. package/dist/assets/cesium/Workers/createPolylineGeometry.js +11 -11
  94. package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +9 -9
  95. package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +9 -9
  96. package/dist/assets/cesium/Workers/createRectangleGeometry.js +16 -16
  97. package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +12 -12
  98. package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +10 -10
  99. package/dist/assets/cesium/Workers/createSphereGeometry.js +11 -11
  100. package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +12 -12
  101. package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +2 -2
  102. package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +1 -1
  103. package/dist/assets/cesium/Workers/createVectorTileGeometries.js +8 -8
  104. package/dist/assets/cesium/Workers/createVectorTilePoints.js +1 -1
  105. package/dist/assets/cesium/Workers/createVectorTilePolygons.js +1 -1
  106. package/dist/assets/cesium/Workers/createVectorTilePolylines.js +1 -1
  107. package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  108. package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +27 -28
  109. package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +33 -38
  110. package/dist/assets/cesium/Workers/createWallGeometry.js +14 -14
  111. package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +14 -14
  112. package/dist/assets/cesium/Workers/decodeDraco.js +10 -2
  113. package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +15 -15
  114. package/dist/assets/cesium/Workers/decodeI3S.js +1 -1
  115. package/dist/assets/cesium/Workers/{defaultValue-0a909f67.js → defaultValue-fe22d8c0.js} +2 -2
  116. package/dist/assets/cesium/Workers/package.js +1 -1
  117. package/dist/assets/cesium/Workers/transcodeKTX2.js +46 -26
  118. package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
  119. package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +24 -24
  120. package/dist/assets/{cesium.88cffd.js → cesium.253914.js} +36578 -33768
  121. package/dist/assets/cesium.js +1 -1
  122. package/dist/assets/{core.a66593.js → core.3a8205.js} +7824 -5377
  123. package/dist/assets/core.js +1 -1
  124. package/dist/assets/index.91ae2d55.js +1 -0
  125. package/dist/assets/{ol.d4539f.js → ol.1c946a.js} +5550 -5491
  126. package/dist/assets/ol.js +1 -1
  127. package/dist/assets/ui.0025be.css +5 -0
  128. package/dist/assets/{ui.d760e4.js → ui.0025be.js} +6260 -5164
  129. package/dist/assets/ui.js +1 -1
  130. package/dist/assets/vue.js +2 -2
  131. package/dist/assets/{vuetify.427322.css → vuetify.6efa21.css} +2 -2
  132. package/dist/assets/{vuetify.427322.js → vuetify.6efa21.js} +1 -1
  133. package/dist/assets/vuetify.js +2 -2
  134. package/dist/index.html +27 -7
  135. package/index.html +26 -6
  136. package/index.js +68 -15
  137. package/lib/cesium.js +1 -1
  138. package/lib/core.js +1 -1
  139. package/lib/ui.js +1 -1
  140. package/lib/vue.js +2 -2
  141. package/lib/vuetify.js +2 -2
  142. package/package.json +19 -10
  143. package/plugins/.eslintrc +9 -0
  144. package/plugins/@vcmap/create-link/fallbackCreateLink.vue +13 -9
  145. package/plugins/@vcmap/create-link/index.js +15 -6
  146. package/plugins/@vcmap/project-selector/{ContextsListComponent.vue → ModulesListComponent.vue} +14 -18
  147. package/plugins/@vcmap/project-selector/ProjectSelectorComponent.vue +19 -24
  148. package/plugins/@vcmap/project-selector/README.md +16 -20
  149. package/plugins/@vcmap/project-selector/config.json +13 -13
  150. package/plugins/@vcmap/project-selector/de.json +4 -1
  151. package/plugins/@vcmap/project-selector/en.json +4 -1
  152. package/plugins/@vcmap/project-selector/index.js +117 -107
  153. package/plugins/@vcmap/search-nominatim/LICENSE.md +5 -6
  154. package/plugins/@vcmap/search-nominatim/README.md +2 -1
  155. package/plugins/@vcmap/search-nominatim/config.json +1 -2
  156. package/plugins/@vcmap/search-nominatim/index.js +7 -4
  157. package/plugins/@vcmap/search-nominatim/nominatim.js +7 -2
  158. package/plugins/@vcmap/search-nominatim/package.json +2 -36
  159. package/plugins/@vcmap/simple-graph/README.md +29 -9
  160. package/plugins/@vcmap/simple-graph/SimpleGraphComponent.vue +2 -7
  161. package/plugins/@vcmap/simple-graph/index.js +2 -2
  162. package/plugins/@vcmap/simple-graph/simpleGraphView.js +3 -1
  163. package/plugins/@vcmap/theme-changer/README.md +5 -3
  164. package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +6 -10
  165. package/plugins/@vcmap/theme-changer/config.json +67 -67
  166. package/plugins/@vcmap/theme-changer/index.js +11 -5
  167. package/plugins/@vcmap-show-case/buttons-example/ButtonsExample.vue +76 -11
  168. package/plugins/@vcmap-show-case/buttons-example/index.js +10 -8
  169. package/plugins/@vcmap-show-case/category-tester/Categories.vue +144 -117
  170. package/plugins/@vcmap-show-case/category-tester/Category.vue +46 -29
  171. package/plugins/@vcmap-show-case/category-tester/index.js +9 -3
  172. package/plugins/@vcmap-show-case/config-editor/ConfigEditor.vue +62 -0
  173. package/plugins/@vcmap-show-case/config-editor/index.js +13 -11
  174. package/plugins/@vcmap-show-case/context-menu-tester/index.js +18 -10
  175. package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +97 -109
  176. package/plugins/@vcmap-show-case/form-inputs-example/config.json +3 -3
  177. package/plugins/@vcmap-show-case/form-inputs-example/exampleActions.js +14 -4
  178. package/plugins/@vcmap-show-case/form-inputs-example/index.js +42 -19
  179. package/plugins/@vcmap-show-case/form-inputs-example/validation.js +2 -1
  180. package/plugins/@vcmap-show-case/icons-example/README.md +1 -1
  181. package/plugins/@vcmap-show-case/icons-example/allIconsComponent.vue +10 -10
  182. package/plugins/@vcmap-show-case/icons-example/index.js +10 -8
  183. package/plugins/@vcmap-show-case/list-example/ListExample.vue +221 -103
  184. package/plugins/@vcmap-show-case/list-example/index.js +10 -8
  185. package/plugins/@vcmap-show-case/notifier-tester/index.js +9 -3
  186. package/plugins/@vcmap-show-case/notifier-tester/notifierTester.vue +15 -21
  187. package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +183 -0
  188. package/plugins/@vcmap-show-case/table-example/README.md +3 -0
  189. package/plugins/@vcmap-show-case/table-example/index.js +49 -0
  190. package/plugins/@vcmap-show-case/table-example/package.json +5 -0
  191. package/plugins/@vcmap-show-case/textfields-example/TextfieldsExample.vue +7 -30
  192. package/plugins/@vcmap-show-case/textfields-example/index.js +10 -4
  193. package/plugins/@vcmap-show-case/window-tester/WindowExample.vue +16 -13
  194. package/plugins/@vcmap-show-case/window-tester/emptyComponent.vue +4 -7
  195. package/plugins/@vcmap-show-case/window-tester/index.js +26 -20
  196. package/plugins/@vcmap-show-case/window-tester/myCustomHeader.vue +7 -3
  197. package/plugins/@vcmap-show-case/window-tester/toolbox-data.js +82 -5
  198. package/plugins/@vcmap-show-case/window-tester/windowExampleContent.vue +3 -7
  199. package/plugins/@vcmap-show-case/wizard-example/index.js +9 -3
  200. package/plugins/@vcmap-show-case/wizard-example/wizardExample.vue +36 -38
  201. package/src/actions/actionHelper.js +64 -37
  202. package/src/actions/styleSelector.vue +40 -24
  203. package/src/application/VcsApp.vue +117 -80
  204. package/src/application/VcsAttributions.vue +8 -9
  205. package/src/application/VcsAttributionsFooter.vue +12 -9
  206. package/src/application/VcsMap.vue +9 -5
  207. package/src/application/VcsNavbar.vue +44 -27
  208. package/src/application/VcsSettings.vue +5 -12
  209. package/src/application/attributionsHelper.js +23 -11
  210. package/src/application/vcsAppWrapper.vue +1 -3
  211. package/src/components/buttons/VcsActionButtonList.vue +20 -17
  212. package/src/components/buttons/VcsButton.vue +19 -23
  213. package/src/components/buttons/VcsFormButton.vue +176 -0
  214. package/src/components/form-inputs-controls/VcsCheckbox.vue +6 -7
  215. package/src/components/form-inputs-controls/VcsDatePicker.vue +142 -0
  216. package/src/components/form-inputs-controls/VcsFormSection.vue +11 -12
  217. package/src/components/form-inputs-controls/VcsLabel.vue +9 -10
  218. package/src/components/form-inputs-controls/VcsRadio.vue +44 -44
  219. package/src/components/form-inputs-controls/VcsSelect.vue +16 -13
  220. package/src/components/form-inputs-controls/VcsTextArea.vue +21 -14
  221. package/src/components/form-inputs-controls/VcsTextField.vue +44 -19
  222. package/src/components/form-inputs-controls/VcsWizard.vue +79 -77
  223. package/src/components/form-inputs-controls/VcsWizardStep.vue +20 -20
  224. package/src/components/form-inputs-controls/composables.js +13 -8
  225. package/src/components/form-output/VcsFormattedNumber.vue +26 -26
  226. package/src/components/icons/+all.js +13 -5
  227. package/src/components/icons/2DAreaIcon.vue +62 -10
  228. package/src/components/icons/2DDistanceIcon.vue +14 -2
  229. package/src/components/icons/3DAreaIcon.vue +62 -10
  230. package/src/components/icons/3DDistanceIcon.vue +14 -2
  231. package/src/components/icons/3DHeightIcon.vue +14 -2
  232. package/src/components/icons/AngleIcon.vue +12 -3
  233. package/src/components/icons/AssociationsIcon.vue +6 -1
  234. package/src/components/icons/AxisIcon.vue +34 -5
  235. package/src/components/icons/BoundingBoxIcon.vue +31 -5
  236. package/src/components/icons/CheckboxCheckedIcon.vue +4 -1
  237. package/src/components/icons/CheckboxIcon.vue +1 -8
  238. package/src/components/icons/CheckboxIndeterminateIcon.vue +9 -2
  239. package/src/components/icons/CircleIcon.vue +24 -4
  240. package/src/components/icons/ClippingHorizontalIcon.vue +14 -2
  241. package/src/components/icons/ClippingIcon.vue +13 -2
  242. package/src/components/icons/ClippingVerticalIcon.vue +14 -2
  243. package/src/components/icons/ColorPickerIcon.vue +13 -2
  244. package/src/components/icons/ColorSwatchIcon.vue +7 -1
  245. package/src/components/icons/CommentIcon.vue +6 -1
  246. package/src/components/icons/CompassIcon.vue +21 -3
  247. package/src/components/icons/ComponentsIcon.vue +14 -2
  248. package/src/components/icons/ConeIcon.vue +26 -4
  249. package/src/components/icons/DimensionsHouseIcon.vue +7 -1
  250. package/src/components/icons/EditIcon.vue +13 -2
  251. package/src/components/icons/ElevationProfileIcon.vue +6 -1
  252. package/src/components/icons/ExportAreaIcon.vue +13 -2
  253. package/src/components/icons/ExportFlightIcon.vue +13 -2
  254. package/src/components/icons/ExportIcon.vue +14 -2
  255. package/src/components/icons/ExternalLinkIcon.vue +18 -3
  256. package/src/components/icons/EyeIcon.vue +12 -2
  257. package/src/components/icons/FastForwardIcon.vue +13 -2
  258. package/src/components/icons/FilterIcon.vue +13 -2
  259. package/src/components/icons/GlobalTerrainIcon.vue +12 -2
  260. package/src/components/icons/GlobeNatureIcon.vue +7 -1
  261. package/src/components/icons/GroundIcon.vue +12 -2
  262. package/src/components/icons/HealthCareIndustriesIcon.vue +6 -1
  263. package/src/components/icons/HelpIcon.vue +12 -2
  264. package/src/components/icons/HideIcon.vue +17 -3
  265. package/src/components/icons/HomePointIcon.vue +13 -3
  266. package/src/components/icons/HospitalsIcon.vue +6 -1
  267. package/src/components/icons/HouseIcon.vue +20 -3
  268. package/src/components/icons/ImportIcon.vue +21 -3
  269. package/src/components/icons/InfoIcon.vue +19 -3
  270. package/src/components/icons/KebabIcon.vue +12 -2
  271. package/src/components/icons/LabelIcon.vue +21 -3
  272. package/src/components/icons/LayersIcon.vue +12 -2
  273. package/src/components/icons/LegendIcon.vue +20 -60
  274. package/src/components/icons/LineIcon.vue +20 -3
  275. package/src/components/icons/LinkIcon.vue +13 -2
  276. package/src/components/icons/LogoutIcon.vue +13 -2
  277. package/src/components/icons/MapIcon.vue +14 -2
  278. package/src/components/icons/MenuIcon.vue +7 -1
  279. package/src/components/icons/MinusIcon.vue +14 -2
  280. package/src/components/icons/ObjectAttributeIcon.vue +13 -2
  281. package/src/components/icons/ObjectSelectIcon.vue +14 -2
  282. package/src/components/icons/ObliqueViewIcon.vue +11 -2
  283. package/src/components/icons/PdfIcon.vue +12 -2
  284. package/src/components/icons/PedestrianIcon.vue +13 -2
  285. package/src/components/icons/PenIcon.vue +13 -3
  286. package/src/components/icons/PlayCircleIcon.vue +20 -3
  287. package/src/components/icons/PlusIcon.vue +14 -3
  288. package/src/components/icons/PoiIcon.vue +17 -3
  289. package/src/components/icons/PointSelectIcon.vue +12 -2
  290. package/src/components/icons/PolygonIcon.vue +7 -1
  291. package/src/components/icons/PresentationModeIcon.vue +13 -2
  292. package/src/components/icons/ProgressIcon.vue +8 -6
  293. package/src/components/icons/QueryIcon.vue +31 -5
  294. package/src/components/icons/RectangleIcon.vue +24 -4
  295. package/src/components/icons/ReturnIcon.vue +13 -2
  296. package/src/components/icons/RewindIcon.vue +13 -2
  297. package/src/components/icons/RotateLeftIcon.vue +13 -2
  298. package/src/components/icons/RotateRightIcon.vue +13 -2
  299. package/src/components/icons/ScreenshotIcon.vue +52 -10
  300. package/src/components/icons/SearchIcon.vue +13 -3
  301. package/src/components/icons/ShadowIcon.vue +14 -3
  302. package/src/components/icons/ShapesIcon.vue +13 -3
  303. package/src/components/icons/ShareIcon.vue +17 -4
  304. package/src/components/icons/SimpleCircleFilledIcon.vue +14 -10
  305. package/src/components/icons/SimpleCircleHalfFilledIcon.vue +6 -1
  306. package/src/components/icons/SimpleCircleOutlinedIcon.vue +14 -10
  307. package/src/components/icons/SkipNextIcon.vue +11 -2
  308. package/src/components/icons/SkipPreviousIcon.vue +17 -3
  309. package/src/components/icons/SplitViewIcon.vue +6 -1
  310. package/src/components/icons/TerrainBoxIcon.vue +12 -2
  311. package/src/components/icons/TextStyleIcon.vue +7 -1
  312. package/src/components/icons/ThreeDimensionsIcon.vue +13 -2
  313. package/src/components/icons/ToolsIcon.vue +12 -2
  314. package/src/components/icons/TouchIcon.vue +13 -2
  315. package/src/components/icons/TrashCanIcon.vue +13 -2
  316. package/src/components/icons/TriangleIcon.vue +6 -2
  317. package/src/components/icons/TwoDimensionsIcon.vue +14 -2
  318. package/src/components/icons/UploadIcon.vue +13 -2
  319. package/src/components/icons/UserProfileIcon.vue +13 -2
  320. package/src/components/icons/UserShareIcon.vue +12 -2
  321. package/src/components/icons/VideoRecorderIcon.vue +16 -3
  322. package/src/components/icons/ViewpointFlightIcon.vue +22 -4
  323. package/src/components/icons/ViewpointIcon.vue +22 -4
  324. package/src/components/icons/Viewshed360Icon.vue +14 -2
  325. package/src/components/icons/ViewshedConeIcon.vue +13 -2
  326. package/src/components/icons/ViewshedIcon.vue +14 -2
  327. package/src/components/icons/WalkingIcon.vue +13 -2
  328. package/src/components/icons/WallIcon.vue +19 -3
  329. package/src/components/icons/WandIcon.vue +129 -21
  330. package/src/components/imageElementInjector.vue +1 -3
  331. package/src/components/lists/VcsActionList.vue +21 -18
  332. package/src/components/lists/VcsList.vue +226 -97
  333. package/src/components/lists/VcsTreeview.vue +30 -26
  334. package/src/components/lists/VcsTreeviewLeaf.vue +23 -22
  335. package/src/components/lists/VcsTreeviewSearchbar.vue +19 -15
  336. package/src/components/notification/VcsBadge.vue +4 -6
  337. package/src/components/notification/VcsTooltip.vue +95 -94
  338. package/src/components/notification/validation.js +1 -1
  339. package/src/components/tables/VcsDataTable.vue +398 -0
  340. package/src/components/tables/VcsTable.vue +63 -300
  341. package/src/contentTree/LayerTree.vue +2 -3
  342. package/src/contentTree/contentTreeCollection.js +49 -23
  343. package/src/contentTree/contentTreeItem.js +36 -14
  344. package/src/contentTree/groupContentTreeItem.js +44 -22
  345. package/src/contentTree/layerContentTreeItem.js +45 -20
  346. package/src/contentTree/layerGroupContentTreeItem.js +53 -31
  347. package/src/contentTree/nodeContentTreeItem.js +18 -7
  348. package/src/contentTree/obliqueCollectionContentTreeItem.js +45 -20
  349. package/src/contentTree/subContentTreeItem.js +13 -4
  350. package/src/contentTree/vcsObjectContentTreeItem.js +24 -15
  351. package/src/contentTree/viewpointContentTreeItem.js +19 -6
  352. package/src/downloadHelper.js +52 -0
  353. package/src/featureInfo/AddressBalloonComponent.vue +11 -16
  354. package/src/featureInfo/BalloonComponent.vue +41 -31
  355. package/src/featureInfo/abstractFeatureInfoView.js +30 -14
  356. package/src/featureInfo/addressBalloonFeatureInfoView.js +19 -7
  357. package/src/featureInfo/balloonFeatureInfoView.js +22 -9
  358. package/src/featureInfo/balloonHelper.js +61 -42
  359. package/src/featureInfo/featureInfo.js +74 -34
  360. package/src/featureInfo/featureInfoInteraction.js +13 -7
  361. package/src/featureInfo/iframeFeatureInfoView.js +3 -1
  362. package/src/featureInfo/tableFeatureInfoView.js +15 -5
  363. package/src/i18n/de.js +8 -0
  364. package/src/i18n/en.js +8 -0
  365. package/src/i18n/i18nCollection.js +183 -155
  366. package/src/init.js +124 -38
  367. package/src/legend/legendHelper.js +11 -6
  368. package/src/legend/styleLegendItem.vue +18 -12
  369. package/src/legend/vcsLegend.vue +15 -17
  370. package/src/manager/buttonManager.js +6 -3
  371. package/src/manager/categoryManager/CategoryComponent.vue +99 -63
  372. package/src/manager/categoryManager/CategoryComponentList.vue +33 -8
  373. package/src/manager/categoryManager/CategoryManager.vue +23 -11
  374. package/src/manager/categoryManager/categoryManager.js +90 -45
  375. package/src/manager/contextMenu/contextMenuComponent.vue +2 -6
  376. package/src/manager/contextMenu/contextMenuInteraction.js +6 -1
  377. package/src/manager/contextMenu/contextMenuManager.js +37 -22
  378. package/src/manager/navbarManager.js +28 -3
  379. package/src/manager/toolbox/GroupToolboxComponent.vue +22 -21
  380. package/src/manager/toolbox/SelectToolboxComponent.vue +36 -35
  381. package/src/manager/toolbox/ToolboxManager.vue +18 -10
  382. package/src/manager/toolbox/toolboxManager.js +30 -12
  383. package/src/manager/window/WindowComponent.vue +24 -32
  384. package/src/manager/window/WindowComponentHeader.vue +38 -28
  385. package/src/manager/window/WindowManager.vue +45 -35
  386. package/src/manager/window/windowHelper.js +80 -24
  387. package/src/manager/window/windowManager.js +79 -39
  388. package/src/navigation/mapNavCompass.vue +18 -4
  389. package/src/navigation/mapNavigation.vue +65 -46
  390. package/src/navigation/obliqueRotation.vue +34 -13
  391. package/src/navigation/orientationToolsButton.vue +6 -10
  392. package/src/navigation/overviewMap.js +76 -45
  393. package/src/navigation/overviewMapClickedInteraction.js +6 -1
  394. package/src/navigation/tiltSlider.vue +6 -10
  395. package/src/navigation/vcsCompass.vue +1 -9
  396. package/src/navigation/vcsZoomButton.vue +36 -11
  397. package/src/notifier/notifier.js +22 -13
  398. package/src/notifier/notifierComponent.vue +21 -21
  399. package/src/pluginHelper.js +39 -5
  400. package/src/search/resultItem.vue +10 -15
  401. package/src/search/resultsComponent.vue +30 -24
  402. package/src/search/search.js +48 -22
  403. package/src/search/searchComponent.vue +35 -10
  404. package/src/setup.js +9 -9
  405. package/src/state.js +28 -12
  406. package/src/styles/_typography.scss +0 -1
  407. package/src/styles/shades.scss +4 -2
  408. package/src/styles/utils/_border.scss +1 -1
  409. package/src/styles/utils/_display.scss +1 -1
  410. package/src/styles/variables.scss +39 -34
  411. package/src/styles/vcsFont.scss +6 -5
  412. package/src/styles/vcsGrid.scss +9 -0
  413. package/src/uiConfig.js +6 -4
  414. package/src/vcsUiApp.js +192 -91
  415. package/src/vuePlugins/i18n.js +5 -4
  416. package/src/vuePlugins/vuetify.js +4 -0
  417. package/start.js +8 -2
  418. package/dist/assets/cesium/Workers/PolygonPipeline-844aab0a.js +0 -1345
  419. package/dist/assets/cesium/Workers/Transforms-40229881.js +0 -14696
  420. package/dist/assets/index.8b833ead.js +0 -1
  421. package/dist/assets/ui.d760e4.css +0 -5
  422. package/map.config.json +0 -44
  423. package/plugins/@vcmap-show-case/config-editor/editor.vue +0 -66
  424. /package/dist/assets/cesium/Workers/{GeometryOffsetAttribute-04332ce7.js → GeometryOffsetAttribute-9ad0019c.js} +0 -0
  425. /package/dist/assets/{vue.db5102.js → vue.c1ece7.js} +0 -0
@@ -1,15 +1,19 @@
1
1
  <template>
2
- <div>
3
- <OrientationToolsButton
4
- @click="$emit('zoom-in')"
5
- icon="$vcsPlus"
6
- tooltip="navigation.zoomInTooltip"
7
- />
8
- <OrientationToolsButton
9
- @click="$emit('zoom-out')"
10
- icon="$vcsMinus"
11
- tooltip="navigation.zoomOutTooltip"
12
- />
2
+ <div class="rounded vcs-navigation-zoom">
3
+ <div class="rounded inner">
4
+ <OrientationToolsButton
5
+ @click="$emit('zoom-in')"
6
+ icon="$vcsPlus"
7
+ tooltip="navigation.zoomInTooltip"
8
+ elevation="0"
9
+ />
10
+ <OrientationToolsButton
11
+ @click="$emit('zoom-out')"
12
+ icon="$vcsMinus"
13
+ tooltip="navigation.zoomOutTooltip"
14
+ elevation="0"
15
+ />
16
+ </div>
13
17
  </div>
14
18
  </template>
15
19
 
@@ -25,3 +29,24 @@
25
29
  components: { OrientationToolsButton },
26
30
  };
27
31
  </script>
32
+ <style lang="scss" scoped>
33
+ .vcs-navigation-zoom {
34
+ box-shadow: rgba(0, 0, 0, 0.1) 0 2px 2px 0;
35
+ .inner {
36
+ box-shadow: rgba(0, 0, 0, 0.25) 0 0 10px 0 inset;
37
+ }
38
+ ::v-deep {
39
+ .btn-orientation-tools {
40
+ &:first-child {
41
+ box-shadow: rgba(0, 0, 0, 0.25) -2px 2px 1px -2px,
42
+ rgba(0, 0, 0, 0.08) 1px 0 0 0, rgba(0, 0, 0, 0.05) -1px 1px 1px 1px !important;
43
+ }
44
+ &:last-child {
45
+ box-shadow: rgba(0, 0, 0, 0.25) -2px 3px 1px -2px,
46
+ rgba(0, 0, 0, 0.08) 1px 4px 2px 0,
47
+ rgba(0, 0, 0, 0.05) -1px 1px 1px 1px !important;
48
+ }
49
+ }
50
+ }
51
+ }
52
+ </style>
@@ -36,22 +36,29 @@ export const NotificationType = {
36
36
  * @returns {Notification}
37
37
  */
38
38
  function createNotification(options, notifier) {
39
- const {
40
- type,
41
- title,
42
- message,
43
- timeout,
44
- } = options;
39
+ const { type, title, message, timeout } = options;
45
40
  const id = uuidv4();
46
41
  const open = ref(true);
47
42
 
48
43
  return {
49
- get id() { return id; },
50
- get type() { return type; },
51
- get title() { return title; },
52
- get message() { return message; },
53
- get timeout() { return timeout ?? 5000; },
54
- get open() { return open; },
44
+ get id() {
45
+ return id;
46
+ },
47
+ get type() {
48
+ return type;
49
+ },
50
+ get title() {
51
+ return title;
52
+ },
53
+ get message() {
54
+ return message;
55
+ },
56
+ get timeout() {
57
+ return timeout ?? 5000;
58
+ },
59
+ get open() {
60
+ return open;
61
+ },
55
62
  set open(value) {
56
63
  open.value = value?.value ?? value; // when used as a v-model, this is set as a boolean
57
64
  if (!open.value) {
@@ -105,7 +112,9 @@ class Notifier {
105
112
  */
106
113
  remove(notification) {
107
114
  // reassign to trigger update
108
- this._notifications.value = this._notifications.value.filter(n => n !== notification);
115
+ this._notifications.value = this._notifications.value.filter(
116
+ (n) => n !== notification,
117
+ );
109
118
  }
110
119
 
111
120
  /**
@@ -2,17 +2,17 @@
2
2
  <div>
3
3
  <v-snackbar
4
4
  dark
5
- v-for="(notification) in notifications"
5
+ v-for="notification in notifications"
6
6
  :key="notification.id"
7
7
  v-model="notification.open"
8
8
  :timeout="notification.timeout"
9
9
  >
10
- <v-icon
11
- :color="notification.type"
12
- >
10
+ <v-icon :color="notification.type">
13
11
  {{ icon[notification.type] }}
14
12
  </v-icon>
15
- <span class="snack-title">{{ $t(notification.title || defaultTitle[notification.type]) }}</span>
13
+ <span class="snack-title">{{
14
+ $t(notification.title || defaultTitle[notification.type])
15
+ }}</span>
16
16
  <template #action="{ attrs }">
17
17
  <VcsButton
18
18
  icon="mdi-close"
@@ -62,23 +62,23 @@
62
62
  </script>
63
63
 
64
64
  <style lang="scss" scoped>
65
- .v-snack{
66
- ::v-deep{
67
- .v-snack__content{
68
- display: grid;
69
- gap: 8px 4px;
70
- grid-template-columns: 20px auto;
71
- .v-icon{
72
- grid-row-start: 1;
73
- grid-row-end: 3;
74
- align-self: start;
75
- font-size: 17px;
65
+ .v-snack {
66
+ ::v-deep {
67
+ .v-snack__content {
68
+ display: grid;
69
+ gap: 8px 4px;
70
+ grid-template-columns: 20px auto;
71
+ .v-icon {
72
+ grid-row-start: 1;
73
+ grid-row-end: 3;
74
+ align-self: start;
75
+ font-size: 17px;
76
+ }
77
+ }
78
+ .v-snack__action {
79
+ align-self: flex-start;
80
+ margin-top: 4px;
76
81
  }
77
- }
78
- .v-snack__action{
79
- align-self: flex-start;
80
- margin-top: 4px;
81
82
  }
82
83
  }
83
- }
84
84
  </style>
@@ -61,7 +61,9 @@ export function getPluginAssetUrl(app, pluginName, asset) {
61
61
  export function isValidPackageName(name) {
62
62
  check(name, String);
63
63
 
64
- return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(name);
64
+ return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(
65
+ name,
66
+ );
65
67
  }
66
68
 
67
69
  /**
@@ -73,9 +75,15 @@ export async function loadPlugin(name, config) {
73
75
  let module = config.entry;
74
76
 
75
77
  if (!/^(https?:\/\/|\/)/.test(module)) {
76
- module = `${window.location.origin}${window.location.pathname.replace(/\/?$/, '/')}${module}`;
78
+ module = `${window.location.origin}${window.location.pathname.replace(
79
+ /\/?$/,
80
+ '/',
81
+ )}${module}`;
77
82
  } else if (module === '_dev') {
78
83
  module = `/${name}.js`;
84
+ } else if (module === 'http://localhost/_test') {
85
+ // early escape to bypass module loading for testing, see VcsUiApp.spec.js
86
+ return null;
79
87
  }
80
88
 
81
89
  // if (!context.security.isTrustedUrl(module)) { XXX missing pipeline security
@@ -85,13 +93,16 @@ export async function loadPlugin(name, config) {
85
93
 
86
94
  try {
87
95
  let plugin;
88
- if (window.VcsPluginLoaderFunction) { // TODO PluginLoaderfunction needs to be documented.
96
+ if (window.VcsPluginLoaderFunction) {
97
+ // TODO PluginLoaderfunction needs to be documented.
89
98
  plugin = await window.VcsPluginLoaderFunction(name, module);
90
99
  } else {
91
100
  plugin = await import(/* @vite-ignore */ module);
92
101
  }
93
102
  if (plugin.default == null || typeof plugin.default !== 'function') {
94
- getLogger().error(`plugin ${name} does not provide a default exported function`);
103
+ getLogger().error(
104
+ `plugin ${name} does not provide a default exported function`,
105
+ );
95
106
  return null;
96
107
  }
97
108
  const baseUrl = new URL(module);
@@ -115,12 +126,33 @@ export async function loadPlugin(name, config) {
115
126
  return null;
116
127
  }
117
128
 
129
+ /**
130
+ * @param {string} base
131
+ * @param {string} pluginBase
132
+ * @returns {string}
133
+ */
134
+ export function getPluginEntry(base, pluginBase) {
135
+ const baseUrl = new URL(base);
136
+ const pluginBaseUrl = new URL(pluginBase);
137
+ if (baseUrl.origin !== pluginBaseUrl.origin) {
138
+ return pluginBase;
139
+ }
140
+ const baseSubs = baseUrl.pathname.split('/');
141
+ const pluginSubs = pluginBaseUrl.pathname.split('/');
142
+ return pluginSubs.filter((sub, idx) => sub !== baseSubs[idx]).join('/');
143
+ }
144
+
118
145
  /**
119
146
  * @param {VcsPlugin} plugin
120
147
  * @returns {Object}
121
148
  */
122
149
  export function serializePlugin(plugin) {
123
150
  const serializedPlugin = plugin.toJSON ? plugin.toJSON() : {};
151
+ serializedPlugin.name = plugin.name;
152
+ serializedPlugin.entry = getPluginEntry(
153
+ window.location.href,
154
+ plugin[pluginBaseUrlSymbol],
155
+ );
124
156
  serializedPlugin[pluginFactorySymbol] = plugin[pluginFactorySymbol];
125
157
  serializedPlugin[pluginBaseUrlSymbol] = plugin[pluginBaseUrlSymbol];
126
158
  return serializedPlugin;
@@ -131,7 +163,9 @@ export function serializePlugin(plugin) {
131
163
  * @returns {Promise<VcsPlugin>}
132
164
  */
133
165
  export async function deserializePlugin(serializedPlugin) {
134
- const reincarnation = await serializedPlugin[pluginFactorySymbol](serializedPlugin);
166
+ const reincarnation = await serializedPlugin[pluginFactorySymbol](
167
+ serializedPlugin,
168
+ );
135
169
  reincarnation[pluginFactorySymbol] = serializedPlugin[pluginFactorySymbol];
136
170
  reincarnation[pluginBaseUrlSymbol] = serializedPlugin[pluginBaseUrlSymbol];
137
171
  return reincarnation;
@@ -1,17 +1,11 @@
1
1
  <template>
2
- <div
3
- class="ma-1 d-flex flex-row align-center"
4
- v-if="item"
5
- >
2
+ <div class="ma-2 d-flex flex-row align-center" v-if="item">
6
3
  <v-list-item-icon v-if="item.icon" class="px-1">
7
4
  <v-icon>
8
5
  {{ item.icon }}
9
6
  </v-icon>
10
7
  </v-list-item-icon>
11
- <div
12
- class="px-2 d-flex align-center"
13
- :title="$t('search.select')"
14
- >
8
+ <div class="px-2 d-flex align-center" :title="$t('search.select')">
15
9
  <span v-html="marked" />
16
10
  </div>
17
11
  <VcsActionButtonList
@@ -38,11 +32,14 @@
38
32
  function markText(text, query) {
39
33
  let replacement = text;
40
34
  if (query) {
41
- const partials = query.split(/[.,\s]/)
42
- .filter(partial => partial.trim());
35
+ const partials = query
36
+ .split(/[.,\s]/)
37
+ .filter((partial) => partial.trim());
43
38
  partials.forEach((partial) => {
44
- replacement = replacement
45
- .replaceAll(new RegExp(`(^|[^>])(${partial})`, 'ig'), '<span class="primary--text">$2</span>');
39
+ replacement = replacement.replaceAll(
40
+ new RegExp(`(^|[^>])(${partial})`, 'ig'),
41
+ '<span class="primary--text">$2</span>',
42
+ );
46
43
  });
47
44
  }
48
45
  return replacement;
@@ -84,6 +81,4 @@
84
81
  };
85
82
  </script>
86
83
 
87
- <style lang="scss" scoped>
88
-
89
- </style>
84
+ <style lang="scss" scoped></style>
@@ -1,22 +1,13 @@
1
1
  <template>
2
2
  <v-list dense class="ma-0 overflow-y-auto vcs-search-results">
3
- <v-list-item-group
4
- v-model="highlighted"
5
- >
6
- <v-list-item
7
- v-for="(item, index) in results"
8
- :key="index"
9
- class="px-0"
10
- >
3
+ <v-list-item-group v-model="highlighted">
4
+ <v-list-item v-for="(item, index) in results" :key="index" class="px-0">
11
5
  <v-list-item-content>
12
- <ResultItem
13
- :item="item"
14
- :query="query"
15
- class="cursor-pointer"
16
- />
6
+ <ResultItem :item="item" :query="query" class="cursor-pointer" />
17
7
  <v-divider
18
8
  v-if="index < results.length - 1"
19
9
  :key="index"
10
+ class="base lighten-3"
20
11
  />
21
12
  </v-list-item-content>
22
13
  </v-list-item>
@@ -26,7 +17,13 @@
26
17
 
27
18
  <script>
28
19
  import { inject, onUnmounted, ref, computed } from 'vue';
29
- import { VDivider, VList, VListItem, VListItemContent, VListItemGroup } from 'vuetify/lib';
20
+ import {
21
+ VDivider,
22
+ VList,
23
+ VListItem,
24
+ VListItemContent,
25
+ VListItemGroup,
26
+ } from 'vuetify/lib';
30
27
  import ResultItem from './resultItem.vue';
31
28
 
32
29
  /**
@@ -59,16 +56,23 @@
59
56
  const highlightedRef = ref(-1);
60
57
  /** @type {VcsUiApp} */
61
58
  const app = inject('vcsApp');
62
- const selectedListener = app.featureInfo.featureChanged.addEventListener((feature) => {
63
- if (highlightedRef.value >= 0) {
64
- if (feature && props.results[highlightedRef.value].feature === feature) {
65
- return;
59
+ const selectedListener = app.featureInfo.featureChanged.addEventListener(
60
+ (feature) => {
61
+ if (highlightedRef.value >= 0) {
62
+ if (
63
+ feature &&
64
+ props.results[highlightedRef.value].feature === feature
65
+ ) {
66
+ return;
67
+ }
68
+ highlightedRef.value = -1;
69
+ } else if (feature) {
70
+ highlightedRef.value = props.results.findIndex(
71
+ (r) => r.feature === feature,
72
+ );
66
73
  }
67
- highlightedRef.value = -1;
68
- } else if (feature) {
69
- highlightedRef.value = props.results.findIndex(r => r.feature === feature);
70
- }
71
- });
74
+ },
75
+ );
72
76
 
73
77
  onUnmounted(() => {
74
78
  selectedListener();
@@ -76,7 +80,9 @@
76
80
 
77
81
  return {
78
82
  highlighted: computed({
79
- get() { return highlightedRef.value; },
83
+ get() {
84
+ return highlightedRef.value;
85
+ },
80
86
  set(value) {
81
87
  highlightedRef.value = value;
82
88
  if (value >= 0) {
@@ -6,14 +6,18 @@ import {
6
6
  VcsEvent,
7
7
  vcsLayerName,
8
8
  VectorLayer,
9
- VectorStyleItem, Viewpoint,
9
+ VectorStyleItem,
10
+ Viewpoint,
10
11
  } from '@vcmap/core';
11
12
  import { shallowRef } from 'vue';
12
13
  import { check } from '@vcsuite/check';
13
14
  import { Icon } from 'ol/style.js';
14
15
  import { getLogger } from '@vcsuite/logger';
15
16
  import { vcsAppSymbol } from '../pluginHelper.js';
16
- import { getDefaultPrimaryColor, getColorByKey } from '../vuePlugins/vuetify.js';
17
+ import {
18
+ getDefaultPrimaryColor,
19
+ getColorByKey,
20
+ } from '../vuePlugins/vuetify.js';
17
21
  import { getViewpointFromFeature } from '../actions/actionHelper.js';
18
22
 
19
23
  /**
@@ -27,7 +31,6 @@ import { getViewpointFromFeature } from '../actions/actionHelper.js';
27
31
  * @property {import("ol").Feature|undefined} [feature] If a feature is provided, the feature is added to the result layer and search zooms to the layer's extent. Default clicked handler is zoom to feature, highlight feature and select feature, if feature has a FeatureInfoView.
28
32
  */
29
33
 
30
-
31
34
  /**
32
35
  * @interface SearchImpl
33
36
  * @property {string} name Name of the implementation. Must be the name of the plugin the SearchImpl is owned by
@@ -43,7 +46,9 @@ import { getViewpointFromFeature } from '../actions/actionHelper.js';
43
46
  */
44
47
  function getPointResultIcon(color) {
45
48
  return {
46
- src: `data:image/svg+xml,%3Csvg xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:cc='http://creativecommons.org/ns%23' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' id='icon_24_poi' width='24' height='23.994' viewBox='0 0 24 23.994' sodipodi:docname='mapIcon.svg'%3E%3Cg id='Gruppe_1972' transform='translate(-571 -609.477)'%3E%3Cpath id='Pfad_773' d='M583,611a8.009,8.009,0,0,0-8,8c0,5.314,6.952,13.32,7.248,13.658a1,1,0,0,0,1.5,0c.3-.338,7.248-8.344,7.248-13.658A8.009,8.009,0,0,0,583,611Zm0,19.444c-2.18-2.685-6-8.09-6-11.444a6,6,0,0,1,12,0C589,622.354,585.18,627.759,583,630.444Z' fill='currentColor' /%3E%3Cpath id='Pfad_774' d='M583,615a4,4,0,1,0,4,4A4,4,0,0,0,583,615Zm0,6a2,2,0,1,1,2-2A2,2,0,0,1,583,621Z' fill='currentColor' /%3E%3C/g%3E%3Cpath fill='${encodeURIComponent(color)}' d='M 11.672998,20.526286 C 8.5115524,16.526958 6.4310003,12.714969 6.0702695,10.260963 6.0109099,9.8571482 6.0115821,9.1201807 6.0716855,8.7084104 6.4424582,6.1682348 8.3335069,4.1603103 10.828528,3.6575721 c 1.904966,-0.383844 3.881822,0.1903514 5.289639,1.5364231 0.993092,0.9495349 1.610829,2.1488769 1.810148,3.5144152 0.0601,0.4117703 0.06077,1.1487378 0.0014,1.5525526 -0.357076,2.429138 -2.337816,6.081898 -5.487559,10.119822 -0.224045,0.287223 -0.415188,0.530536 -0.424763,0.540696 -0.0096,0.01016 -0.16456,-0.167678 -0.344411,-0.395195 z m 0.990366,-7.047968 c 0.894914,-0.146674 1.762065,-0.627065 2.349286,-1.301476 0.86707,-0.995812 1.194989,-2.3427819 0.880571,-3.6170541 -0.379849,-1.5394474 -1.596396,-2.6842781 -3.173401,-2.9863277 -0.368703,-0.070619 -1.070937,-0.070619 -1.43964,0 C 9.7056173,5.875042 8.48604,7.0227247 8.1067793,8.5597879 7.8410265,9.6368274 8.0329903,10.787029 8.6317551,11.705317 c 0.5717674,0.876885 1.4205679,1.474277 2.4457369,1.721329 0.47704,0.114961 1.079877,0.134602 1.585872,0.05167 z' id='path1432' /%3E%3C/svg%3E`,
49
+ src: `data:image/svg+xml,%3Csvg xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:cc='http://creativecommons.org/ns%23' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' id='icon_24_poi' width='24' height='23.994' viewBox='0 0 24 23.994' sodipodi:docname='mapIcon.svg'%3E%3Cg id='Gruppe_1972' transform='translate(-571 -609.477)'%3E%3Cpath id='Pfad_773' d='M583,611a8.009,8.009,0,0,0-8,8c0,5.314,6.952,13.32,7.248,13.658a1,1,0,0,0,1.5,0c.3-.338,7.248-8.344,7.248-13.658A8.009,8.009,0,0,0,583,611Zm0,19.444c-2.18-2.685-6-8.09-6-11.444a6,6,0,0,1,12,0C589,622.354,585.18,627.759,583,630.444Z' fill='currentColor' /%3E%3Cpath id='Pfad_774' d='M583,615a4,4,0,1,0,4,4A4,4,0,0,0,583,615Zm0,6a2,2,0,1,1,2-2A2,2,0,0,1,583,621Z' fill='currentColor' /%3E%3C/g%3E%3Cpath fill='${encodeURIComponent(
50
+ color,
51
+ )}' d='M 11.672998,20.526286 C 8.5115524,16.526958 6.4310003,12.714969 6.0702695,10.260963 6.0109099,9.8571482 6.0115821,9.1201807 6.0716855,8.7084104 6.4424582,6.1682348 8.3335069,4.1603103 10.828528,3.6575721 c 1.904966,-0.383844 3.881822,0.1903514 5.289639,1.5364231 0.993092,0.9495349 1.610829,2.1488769 1.810148,3.5144152 0.0601,0.4117703 0.06077,1.1487378 0.0014,1.5525526 -0.357076,2.429138 -2.337816,6.081898 -5.487559,10.119822 -0.224045,0.287223 -0.415188,0.530536 -0.424763,0.540696 -0.0096,0.01016 -0.16456,-0.167678 -0.344411,-0.395195 z m 0.990366,-7.047968 c 0.894914,-0.146674 1.762065,-0.627065 2.349286,-1.301476 0.86707,-0.995812 1.194989,-2.3427819 0.880571,-3.6170541 -0.379849,-1.5394474 -1.596396,-2.6842781 -3.173401,-2.9863277 -0.368703,-0.070619 -1.070937,-0.070619 -1.43964,0 C 9.7056173,5.875042 8.48604,7.0227247 8.1067793,8.5597879 7.8410265,9.6368274 8.0329903,10.787029 8.6317551,11.705317 c 0.5717674,0.876885 1.4205679,1.474277 2.4457369,1.721329 0.47704,0.114961 1.079877,0.134602 1.585872,0.05167 z' id='path1432' /%3E%3C/svg%3E`,
47
52
  scale: 1,
48
53
  color,
49
54
  };
@@ -104,7 +109,6 @@ function setupSearchResultLayer(app) {
104
109
  */
105
110
  const searchImplOwnerSymbol = Symbol('featureInfoView');
106
111
 
107
-
108
112
  /**
109
113
  * Collection of SearchImpl
110
114
  * @extends {IndexedCollection<SearchImpl<ResultItem>>}
@@ -185,7 +189,9 @@ class Search extends IndexedCollection {
185
189
  check(owner, [String, vcsAppSymbol]);
186
190
  check(item.search, Function);
187
191
  if (item.name !== owner) {
188
- getLogger('Search').warning('SearchImplementations must be named as the plugin they are owned by.');
192
+ getLogger('Search').warning(
193
+ 'SearchImplementations must be named as the plugin they are owned by.',
194
+ );
189
195
  }
190
196
  item[searchImplOwnerSymbol] = owner;
191
197
  super.add(item, index);
@@ -212,8 +218,12 @@ class Search extends IndexedCollection {
212
218
  */
213
219
  async search(q) {
214
220
  this.clearResults();
215
- const promises = await Promise.allSettled([...this._array].map(impl => impl.search(q)));
216
- const isAborted = promises.some(r => r.status === 'rejected' && r.reason?.name === 'AbortError');
221
+ const promises = await Promise.allSettled(
222
+ [...this._array].map((impl) => impl.search(q)),
223
+ );
224
+ const isAborted = promises.some(
225
+ (r) => r.status === 'rejected' && r.reason?.name === 'AbortError',
226
+ );
217
227
  if (!isAborted) {
218
228
  const results = promises
219
229
  .map((o) => {
@@ -226,7 +236,7 @@ class Search extends IndexedCollection {
226
236
  .flat();
227
237
 
228
238
  this._currentResults.value = results
229
- .filter(r => r.feature || r.clicked)
239
+ .filter((r) => r.feature || r.clicked)
230
240
  .map((item) => {
231
241
  if (item.feature) {
232
242
  this._resultLayer.addFeatures([item.feature]);
@@ -242,9 +252,6 @@ class Search extends IndexedCollection {
242
252
  });
243
253
  if (this._currentResults.value.length > 0) {
244
254
  await this._resultLayer.activate();
245
- const extent = this._resultLayer.getZoomToExtent();
246
- const viewpoint = Viewpoint.createViewpointFromExtent(extent);
247
- await this._app.maps.activeMap.gotoViewpoint(viewpoint);
248
255
  this.resultsChanged.raiseEvent(this._currentResults.value.slice(0));
249
256
  }
250
257
  }
@@ -257,13 +264,17 @@ class Search extends IndexedCollection {
257
264
  * @returns {Promise<Array<string>>}
258
265
  */
259
266
  async suggest(q) {
260
- const promises = await Promise.allSettled([...this._array].map((impl) => {
261
- if (impl.suggest) {
262
- return impl.suggest(q);
263
- }
264
- return Promise.resolve([]);
265
- }));
266
- const isAborted = promises.some(r => r.status === 'rejected' && r.reason?.name === 'AbortError');
267
+ const promises = await Promise.allSettled(
268
+ [...this._array].map((impl) => {
269
+ if (impl.suggest) {
270
+ return impl.suggest(q);
271
+ }
272
+ return Promise.resolve([]);
273
+ }),
274
+ );
275
+ const isAborted = promises.some(
276
+ (r) => r.status === 'rejected' && r.reason?.name === 'AbortError',
277
+ );
267
278
  if (isAborted) {
268
279
  return [];
269
280
  }
@@ -283,7 +294,19 @@ class Search extends IndexedCollection {
283
294
  * Aborting any ongoing request
284
295
  */
285
296
  abort() {
286
- [...this._array].forEach(impl => impl.abort?.());
297
+ [...this._array].forEach((impl) => impl.abort?.());
298
+ }
299
+
300
+ /**
301
+ * Zooms to the extent of all available result features
302
+ * @returns {Promise<void>}
303
+ */
304
+ async zoomToAll() {
305
+ if (this._resultLayer.getFeatures().length > 0) {
306
+ const extent = this._resultLayer.getZoomToExtent();
307
+ const viewpoint = Viewpoint.createViewpointFromExtent(extent);
308
+ await this._app.maps.activeMap.gotoViewpoint(viewpoint);
309
+ }
287
310
  }
288
311
 
289
312
  /**
@@ -297,7 +320,10 @@ class Search extends IndexedCollection {
297
320
  }
298
321
  this._resultLayer.removeAllFeatures();
299
322
  this._resultLayer.deactivate();
300
- if (this._app.featureInfo.selectedFeature?.[vcsLayerName] === this._resultLayer.name) {
323
+ if (
324
+ this._app.featureInfo.selectedFeature?.[vcsLayerName] ===
325
+ this._resultLayer.name
326
+ ) {
301
327
  this._app.featureInfo.clear();
302
328
  }
303
329
  }
@@ -306,7 +332,7 @@ class Search extends IndexedCollection {
306
332
  * @inheritDoc
307
333
  */
308
334
  destroy() {
309
- [...this._array].forEach(impl => impl.destroy());
335
+ [...this._array].forEach((impl) => impl.destroy());
310
336
  this.resultsChanged.destroy();
311
337
  this._destroyResultLayer();
312
338
  super.destroy();
@@ -1,13 +1,9 @@
1
1
  <template>
2
2
  <v-sheet>
3
- <span class="d-flex justify-space-between align-center mt-1 mx-1">
4
- <v-icon
5
- class="mx-2"
6
- >
7
- $vcsSearch
8
- </v-icon>
3
+ <span class="d-flex justify-space-between align-center mt-1 ml-2">
4
+ <v-icon class="pa-1"> $vcsSearch </v-icon>
9
5
  <VcsTextField
10
- class="font-size-14 d-inline-block user-select-none w-full mx-2"
6
+ class="d-inline-block user-select-none w-full mx-1"
11
7
  autofocus
12
8
  :loading="searching"
13
9
  clearable
@@ -18,13 +14,35 @@
18
14
  @input="reset"
19
15
  />
20
16
  </span>
21
- <v-divider class="mt-1" v-if="!!results.length" />
17
+ <v-divider class="mt-1 base darken-1" v-if="!!results.length" />
22
18
  <ResultsComponent :query="query" :results="results" />
19
+ <v-divider v-if="!!results.length" />
20
+ <VcsButton
21
+ v-if="!!results.length"
22
+ class="d-flex pt-1 px-1 justify-end"
23
+ @click="zoomToAll"
24
+ >
25
+ {{ $t('search.zoomToAll') }}
26
+ </VcsButton>
23
27
  </v-sheet>
24
28
  </template>
25
29
 
26
- <style>
27
-
30
+ <style lang="scss" scoped>
31
+ ::v-deep {
32
+ .v-input {
33
+ fieldset {
34
+ padding: 0 !important;
35
+ }
36
+ fieldset,
37
+ input {
38
+ border-color: transparent !important;
39
+ }
40
+ }
41
+ .v-icon .v-icon__component {
42
+ width: 16px;
43
+ height: 16px;
44
+ }
45
+ }
28
46
  </style>
29
47
 
30
48
  <script>
@@ -33,9 +51,11 @@
33
51
  import { VSheet, VDivider, VIcon } from 'vuetify/lib';
34
52
  import VcsTextField from '../components/form-inputs-controls/VcsTextField.vue';
35
53
  import ResultsComponent from './resultsComponent.vue';
54
+ import VcsButton from '../components/buttons/VcsButton.vue';
36
55
 
37
56
  export default {
38
57
  components: {
58
+ VcsButton,
39
59
  ResultsComponent,
40
60
  VcsTextField,
41
61
  VSheet,
@@ -72,6 +92,10 @@
72
92
  searching.value = false;
73
93
  };
74
94
 
95
+ const zoomToAll = () => {
96
+ app.search.zoomToAll();
97
+ };
98
+
75
99
  onUnmounted(() => {
76
100
  clear();
77
101
  });
@@ -83,6 +107,7 @@
83
107
  reset,
84
108
  clear,
85
109
  search,
110
+ zoomToAll,
86
111
  };
87
112
  },
88
113
  };
package/src/setup.js CHANGED
@@ -1,9 +1,9 @@
1
- import Vue from 'vue';
2
-
3
- // eslint-disable-next-line no-unused-vars
4
- import * as core from '@vcmap/core';
5
- // pull in entire core for vcsClassRegistry
6
-
7
- Vue.config.productionTip = false;
8
-
9
- window.CESIUM_BASE_URL = '/node_modules/@vcmap-cesium/engine/Build/';
1
+ import Vue from 'vue';
2
+
3
+ // eslint-disable-next-line no-unused-vars
4
+ import * as core from '@vcmap/core';
5
+ // pull in entire core for vcsClassRegistry
6
+
7
+ Vue.config.productionTip = false;
8
+
9
+ window.CESIUM_BASE_URL = '/node_modules/@vcmap-cesium/engine/Build/';