@vcmap/ui 5.0.0-rc.29 → 5.0.0-rc.31

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 (334) hide show
  1. package/build/buildHelpers.js +4 -3
  2. package/config/base.config.json +5 -4
  3. package/config/dev.config.json +8 -0
  4. package/config/graphFeatureInfo.config.json +1 -1
  5. package/config/projects.config.json +2 -2
  6. package/dist/assets/cesium/ThirdParty/Workers/basis_transcoder.js +1 -1
  7. package/dist/assets/cesium/Workers/chunk-227AJNOA.js +59 -0
  8. package/dist/assets/cesium/Workers/chunk-2R5O53JW.js +157 -0
  9. package/dist/assets/cesium/Workers/chunk-34YUDLRP.js +781 -0
  10. package/dist/assets/cesium/Workers/chunk-3W63OHNJ.js +100 -0
  11. package/dist/assets/cesium/Workers/chunk-4MFFIWUA.js +163 -0
  12. package/dist/assets/cesium/Workers/chunk-66QLLS45.js +218 -0
  13. package/dist/assets/cesium/Workers/chunk-6BTKZDRG.js +77 -0
  14. package/dist/assets/cesium/Workers/chunk-A4JVFBQ3.js +101 -0
  15. package/dist/assets/cesium/Workers/chunk-ABADGKYE.js +58 -0
  16. package/dist/assets/cesium/Workers/chunk-AFFLIKOH.js +353 -0
  17. package/dist/assets/cesium/Workers/chunk-AHKEZ2OE.js +629 -0
  18. package/dist/assets/cesium/Workers/chunk-C3SXRKRW.js +476 -0
  19. package/dist/assets/cesium/Workers/chunk-CCFQRR6D.js +55 -0
  20. package/dist/assets/cesium/Workers/chunk-CHHNOC2C.js +1860 -0
  21. package/dist/assets/cesium/Workers/chunk-CTELOFLA.js +196 -0
  22. package/dist/assets/cesium/Workers/chunk-DUHWWBQQ.js +3273 -0
  23. package/dist/assets/cesium/Workers/chunk-EW2GWJYB.js +44 -0
  24. package/dist/assets/cesium/Workers/chunk-GLZBE3ML.js +421 -0
  25. package/dist/assets/cesium/Workers/chunk-HARLBUOL.js +236 -0
  26. package/dist/assets/cesium/Workers/chunk-HQF437NJ.js +117 -0
  27. package/dist/assets/cesium/Workers/chunk-IPA4EACJ.js +368 -0
  28. package/dist/assets/cesium/Workers/chunk-J3JY6I2C.js +1009 -0
  29. package/dist/assets/cesium/Workers/chunk-JB2LWGH4.js +390 -0
  30. package/dist/assets/cesium/Workers/chunk-JS3AW5BK.js +634 -0
  31. package/dist/assets/cesium/Workers/chunk-K36FEYS7.js +452 -0
  32. package/dist/assets/cesium/Workers/chunk-KD4Y7CZL.js +400 -0
  33. package/dist/assets/cesium/Workers/chunk-KTJSNCK4.js +842 -0
  34. package/dist/assets/cesium/Workers/chunk-LLUNNUJV.js +258 -0
  35. package/dist/assets/cesium/Workers/{package.js → chunk-MPAZH4BF.js} +13 -2
  36. package/dist/assets/cesium/Workers/chunk-MYZB7C4T.js +1258 -0
  37. package/dist/assets/cesium/Workers/chunk-N3JIFFX2.js +501 -0
  38. package/dist/assets/cesium/Workers/chunk-O5AMBQ36.js +430 -0
  39. package/dist/assets/cesium/Workers/chunk-OAVNIRB4.js +124 -0
  40. package/dist/assets/cesium/Workers/chunk-OYFCF4PL.js +171 -0
  41. package/dist/assets/cesium/Workers/chunk-OZJDGN5F.js +1477 -0
  42. package/dist/assets/cesium/Workers/chunk-PCJWUS4M.js +2041 -0
  43. package/dist/assets/cesium/Workers/chunk-PFQBCKBM.js +8644 -0
  44. package/dist/assets/cesium/Workers/chunk-QIKODV5G.js +305 -0
  45. package/dist/assets/cesium/Workers/chunk-QJ3DFBH3.js +73 -0
  46. package/dist/assets/cesium/Workers/chunk-QMEMZIJI.js +138 -0
  47. package/dist/assets/cesium/Workers/chunk-QT3MPEMI.js +102 -0
  48. package/dist/assets/cesium/Workers/chunk-RP2A7BR5.js +289 -0
  49. package/dist/assets/cesium/Workers/chunk-RW6LU2CJ.js +138 -0
  50. package/dist/assets/cesium/Workers/chunk-TFC6TZ3S.js +757 -0
  51. package/dist/assets/cesium/Workers/chunk-V3NGATMV.js +693 -0
  52. package/dist/assets/cesium/Workers/chunk-VLGOATD6.js +1075 -0
  53. package/dist/assets/cesium/Workers/chunk-WXTV4ATB.js +39 -0
  54. package/dist/assets/cesium/Workers/chunk-X4SU25DT.js +302 -0
  55. package/dist/assets/cesium/Workers/chunk-XTY7B2N6.js +2716 -0
  56. package/dist/assets/cesium/Workers/chunk-XY7MGBKC.js +513 -0
  57. package/dist/assets/cesium/Workers/chunk-Z24VKNDO.js +834 -0
  58. package/dist/assets/cesium/Workers/chunk-ZA25DG4Y.js +684 -0
  59. package/dist/assets/cesium/Workers/chunk-ZFOBYDGF.js +73 -0
  60. package/dist/assets/cesium/Workers/combineGeometry.js +65 -15
  61. package/dist/assets/cesium/Workers/createBoxGeometry.js +55 -10
  62. package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +231 -310
  63. package/dist/assets/cesium/Workers/createCircleGeometry.js +185 -202
  64. package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +141 -155
  65. package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +477 -557
  66. package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +218 -230
  67. package/dist/assets/cesium/Workers/createCorridorGeometry.js +1162 -1307
  68. package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +533 -569
  69. package/dist/assets/cesium/Workers/createCylinderGeometry.js +57 -10
  70. package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +224 -258
  71. package/dist/assets/cesium/Workers/createEllipseGeometry.js +68 -12
  72. package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +61 -12
  73. package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +56 -10
  74. package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +58 -13
  75. package/dist/assets/cesium/Workers/createFrustumGeometry.js +55 -10
  76. package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +226 -243
  77. package/dist/assets/cesium/Workers/createGeometry.js +143 -48
  78. package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +1484 -2011
  79. package/dist/assets/cesium/Workers/createPlaneGeometry.js +216 -243
  80. package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +121 -113
  81. package/dist/assets/cesium/Workers/createPolygonGeometry.js +1041 -1327
  82. package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +516 -657
  83. package/dist/assets/cesium/Workers/createPolylineGeometry.js +471 -547
  84. package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +352 -384
  85. package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +271 -295
  86. package/dist/assets/cesium/Workers/createRectangleGeometry.js +1128 -1331
  87. package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +445 -500
  88. package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +381 -440
  89. package/dist/assets/cesium/Workers/createSphereGeometry.js +112 -118
  90. package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +112 -121
  91. package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +32 -127
  92. package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +462 -505
  93. package/dist/assets/cesium/Workers/createVectorTileGeometries.js +377 -436
  94. package/dist/assets/cesium/Workers/createVectorTilePoints.js +110 -77
  95. package/dist/assets/cesium/Workers/createVectorTilePolygons.js +369 -391
  96. package/dist/assets/cesium/Workers/createVectorTilePolylines.js +252 -244
  97. package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +543 -615
  98. package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +2244 -2677
  99. package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +682 -926
  100. package/dist/assets/cesium/Workers/createWallGeometry.js +459 -593
  101. package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +324 -419
  102. package/dist/assets/cesium/Workers/decodeDraco.js +327 -347
  103. package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +2530 -3567
  104. package/dist/assets/cesium/Workers/decodeI3S.js +765 -970
  105. package/dist/assets/cesium/Workers/transcodeKTX2.js +3353 -1464
  106. package/dist/assets/cesium/Workers/transferTypedArrayTest.js +3 -4
  107. package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +748 -953
  108. package/dist/assets/{cesium.16590b.js → cesium.77d0f7.js} +8915 -13165
  109. package/dist/assets/cesium.js +1 -1
  110. package/dist/assets/{core.74da2a.js → core.720589.js} +3421 -3365
  111. package/dist/assets/core.js +1 -1
  112. package/dist/assets/index-dd539204.js +1 -0
  113. package/dist/assets/{ol.50a512.js → ol.e48649.js} +4 -4
  114. package/dist/assets/ol.js +1 -1
  115. package/dist/assets/{ui.d3054c.css → ui.50452a.css} +2 -2
  116. package/dist/assets/{ui.d3054c.js → ui.50452a.js} +5312 -4776
  117. package/dist/assets/ui.js +1 -1
  118. package/dist/assets/vue.js +2 -2
  119. package/dist/assets/{vuetify.946bd8.js → vuetify.f0a769.js} +1 -1
  120. package/dist/assets/vuetify.js +2 -2
  121. package/dist/index.html +27 -23
  122. package/index.html +23 -22
  123. package/index.js +6 -0
  124. package/package.json +5 -5
  125. package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +37 -1
  126. package/plugins/@vcmap-show-case/form-inputs-example/index.js +3 -0
  127. package/plugins/@vcmap-show-case/form-inputs-example/validation.js +11 -0
  128. package/plugins/@vcmap-show-case/plugin-editors/PluginEditors.vue +119 -0
  129. package/plugins/@vcmap-show-case/plugin-editors/index.js +41 -0
  130. package/plugins/@vcmap-show-case/plugin-editors/package.json +5 -0
  131. package/plugins/{@vcmap → @vcmap-show-case}/project-selector/ProjectSelectorComponent.vue +1 -1
  132. package/plugins/{@vcmap → @vcmap-show-case}/project-selector/config.json +2 -2
  133. package/plugins/{@vcmap → @vcmap-show-case}/project-selector/package.json +1 -1
  134. package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/package.json +1 -1
  135. package/plugins/@vcmap-show-case/style-input-example/styleExample.vue +0 -1
  136. package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +1 -1
  137. package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/ThemeChangerComponent.vue +1 -1
  138. package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/config.json +2 -2
  139. package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/package.json +1 -1
  140. package/plugins/@vcmap-show-case/vector-properties-example/index.js +40 -0
  141. package/plugins/@vcmap-show-case/vector-properties-example/package.json +5 -0
  142. package/plugins/@vcmap-show-case/vector-properties-example/vectorPropertiesExample.vue +128 -0
  143. package/plugins/package.json +6 -2
  144. package/src/application/VcsAttributions.vue +27 -20
  145. package/src/components/form-inputs-controls/VcsChipArrayInput.vue +290 -0
  146. package/src/components/form-inputs-controls/VcsSlider.vue +1 -0
  147. package/src/components/form-inputs-controls/VcsTextField.vue +9 -3
  148. package/src/components/icons/2DAreaIcon.vue +2 -17
  149. package/src/components/icons/2DDistanceIcon.vue +0 -3
  150. package/src/components/icons/3DAreaIcon.vue +2 -17
  151. package/src/components/icons/3DDistanceIcon.vue +0 -3
  152. package/src/components/icons/3DHeightIcon.vue +0 -3
  153. package/src/components/icons/AngleIcon.vue +0 -1
  154. package/src/components/icons/AssociationsIcon.vue +1 -3
  155. package/src/components/icons/AxisIcon.vue +0 -4
  156. package/src/components/icons/BoundingBoxIcon.vue +1 -4
  157. package/src/components/icons/CheckboxIcon.vue +0 -2
  158. package/src/components/icons/CheckboxIndeterminateIcon.vue +1 -5
  159. package/src/components/icons/CircleIcon.vue +1 -6
  160. package/src/components/icons/ClippingHorizontalIcon.vue +0 -1
  161. package/src/components/icons/ClippingIcon.vue +0 -1
  162. package/src/components/icons/ClippingVerticalIcon.vue +0 -1
  163. package/src/components/icons/ColorPickerIcon.vue +0 -1
  164. package/src/components/icons/ColorSwatchIcon.vue +0 -2
  165. package/src/components/icons/CommentIcon.vue +0 -1
  166. package/src/components/icons/CompassIcon.vue +0 -2
  167. package/src/components/icons/ComponentsIcon.vue +0 -1
  168. package/src/components/icons/ConeIcon.vue +1 -4
  169. package/src/components/icons/DimensionsHouseIcon.vue +0 -2
  170. package/src/components/icons/EditIcon.vue +0 -1
  171. package/src/components/icons/EditVerticesIcon.vue +0 -4
  172. package/src/components/icons/ElevationProfileIcon.vue +1 -13
  173. package/src/components/icons/ExportAreaIcon.vue +0 -1
  174. package/src/components/icons/ExportFlightIcon.vue +0 -1
  175. package/src/components/icons/ExportIcon.vue +12 -8
  176. package/src/components/icons/ExternalLinkIcon.vue +0 -2
  177. package/src/components/icons/FastForwardIcon.vue +0 -1
  178. package/src/components/icons/FilterIcon.vue +0 -1
  179. package/src/components/icons/GlobeNatureIcon.vue +0 -3
  180. package/src/components/icons/GroundIcon.vue +0 -1
  181. package/src/components/icons/HealthCareIndustriesIcon.vue +1 -11
  182. package/src/components/icons/HideIcon.vue +0 -1
  183. package/src/components/icons/HomePointIcon.vue +0 -1
  184. package/src/components/icons/HospitalsIcon.vue +1 -20
  185. package/src/components/icons/HouseIcon.vue +3 -13
  186. package/src/components/icons/ImportIcon.vue +6 -14
  187. package/src/components/icons/InfoIcon.vue +0 -2
  188. package/src/components/icons/KebabIcon.vue +1 -9
  189. package/src/components/icons/LabelIcon.vue +0 -2
  190. package/src/components/icons/LayersIcon.vue +1 -9
  191. package/src/components/icons/LegendIcon.vue +0 -1
  192. package/src/components/icons/LineIcon.vue +0 -2
  193. package/src/components/icons/LinkIcon.vue +0 -1
  194. package/src/components/icons/LogoutIcon.vue +0 -1
  195. package/src/components/icons/MapIcon.vue +0 -2
  196. package/src/components/icons/MenuIcon.vue +1 -5
  197. package/src/components/icons/MinusIcon.vue +0 -2
  198. package/src/components/icons/ObjectSelectIcon.vue +0 -2
  199. package/src/components/icons/ObliqueViewIcon.vue +0 -1
  200. package/src/components/icons/PdfIcon.vue +0 -1
  201. package/src/components/icons/PedestrianIcon.vue +0 -1
  202. package/src/components/icons/PenIcon.vue +0 -1
  203. package/src/components/icons/PlayCircleIcon.vue +1 -8
  204. package/src/components/icons/PlusIcon.vue +0 -2
  205. package/src/components/icons/PoiIcon.vue +0 -1
  206. package/src/components/icons/PointIcon.vue +2 -6
  207. package/src/components/icons/PointSelectIcon.vue +0 -1
  208. package/src/components/icons/PresentationModeIcon.vue +0 -1
  209. package/src/components/icons/ProgressIcon.vue +1 -1
  210. package/src/components/icons/QueryIcon.vue +0 -1
  211. package/src/components/icons/RectangleIcon.vue +1 -6
  212. package/src/components/icons/ReturnIcon.vue +0 -1
  213. package/src/components/icons/RewindIcon.vue +0 -1
  214. package/src/components/icons/RotateLeftIcon.vue +0 -1
  215. package/src/components/icons/RotateRightIcon.vue +0 -1
  216. package/src/components/icons/ScreenshotIcon.vue +1 -6
  217. package/src/components/icons/SearchIcon.vue +0 -1
  218. package/src/components/icons/ShadowIcon.vue +0 -2
  219. package/src/components/icons/ShapesIcon.vue +1 -4
  220. package/src/components/icons/ShareIcon.vue +0 -1
  221. package/src/components/icons/SimpleCircleFilledIcon.vue +0 -1
  222. package/src/components/icons/SimpleCircleHalfFilledIcon.vue +0 -1
  223. package/src/components/icons/SimpleCircleOutlinedIcon.vue +1 -7
  224. package/src/components/icons/SkipPreviousIcon.vue +1 -6
  225. package/src/components/icons/SplitViewIcon.vue +0 -1
  226. package/src/components/icons/TextStyleIcon.vue +0 -3
  227. package/src/components/icons/ThreeDimensionsIcon.vue +0 -1
  228. package/src/components/icons/ToolsIcon.vue +0 -1
  229. package/src/components/icons/TouchIcon.vue +0 -1
  230. package/src/components/icons/TriangleIcon.vue +0 -3
  231. package/src/components/icons/TwoDimensionsIcon.vue +0 -2
  232. package/src/components/icons/UploadIcon.vue +0 -1
  233. package/src/components/icons/UserProfileIcon.vue +0 -1
  234. package/src/components/icons/UserShareIcon.vue +0 -1
  235. package/src/components/icons/ViewpointFlightIcon.vue +0 -1
  236. package/src/components/icons/ViewpointIcon.vue +0 -1
  237. package/src/components/icons/Viewshed360Icon.vue +0 -1
  238. package/src/components/icons/ViewshedConeIcon.vue +0 -1
  239. package/src/components/icons/ViewshedIcon.vue +0 -1
  240. package/src/components/icons/WalkingIcon.vue +0 -1
  241. package/src/components/icons/WallIcon.vue +1 -4
  242. package/src/components/icons/WandIcon.vue +22 -70
  243. package/src/components/lists/VcsList.vue +18 -12
  244. package/src/components/plugins/AbstractConfigEditor.vue +84 -0
  245. package/src/components/style/VcsImageSelector.vue +6 -5
  246. package/src/components/style/VcsTextSelector.vue +1 -1
  247. package/src/components/tables/VcsDataTable.vue +1 -1
  248. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +780 -0
  249. package/src/components/vector-properties/composables.js +93 -0
  250. package/src/contentTree/contentTreeCollection.js +30 -9
  251. package/src/i18n/de.js +41 -7
  252. package/src/i18n/en.js +39 -5
  253. package/src/i18n/i18nCollection.js +19 -65
  254. package/src/manager/buttonManager.js +4 -0
  255. package/src/manager/collectionManager/collectionComponent.js +1 -1
  256. package/src/manager/contextMenu/contextMenuManager.js +2 -0
  257. package/src/pluginHelper.js +57 -17
  258. package/src/vcsUiApp.js +25 -30
  259. package/src/vuePlugins/i18n.js +0 -8
  260. package/dist/assets/cesium/ThirdParty/Workers/draco_decoder_nodejs.js +0 -117
  261. package/dist/assets/cesium/Workers/ArcType-2d9abbbc.js +0 -37
  262. package/dist/assets/cesium/Workers/AttributeCompression-f9f6c717.js +0 -716
  263. package/dist/assets/cesium/Workers/AxisAlignedBoundingBox-4140c51f.js +0 -258
  264. package/dist/assets/cesium/Workers/BoundingRectangle-c714b156.js +0 -369
  265. package/dist/assets/cesium/Workers/BoxGeometry-6f3da43d.js +0 -884
  266. package/dist/assets/cesium/Workers/Check-6ede7e26.js +0 -290
  267. package/dist/assets/cesium/Workers/Color-8a565ff2.js +0 -2262
  268. package/dist/assets/cesium/Workers/ComponentDatatype-cf1fa08e.js +0 -341
  269. package/dist/assets/cesium/Workers/CoplanarPolygonGeometryLibrary-4b4d4096.js +0 -132
  270. package/dist/assets/cesium/Workers/CorridorGeometryLibrary-7b94502b.js +0 -498
  271. package/dist/assets/cesium/Workers/CylinderGeometry-ca070b87.js +0 -467
  272. package/dist/assets/cesium/Workers/CylinderGeometryLibrary-7bf291b4.js +0 -63
  273. package/dist/assets/cesium/Workers/EllipseGeometry-122e51fa.js +0 -1304
  274. package/dist/assets/cesium/Workers/EllipseGeometryLibrary-4d326efc.js +0 -366
  275. package/dist/assets/cesium/Workers/EllipseOutlineGeometry-16cc2bd7.js +0 -443
  276. package/dist/assets/cesium/Workers/EllipsoidGeodesic-5b3623dc.js +0 -520
  277. package/dist/assets/cesium/Workers/EllipsoidGeometry-cb148ca2.js +0 -637
  278. package/dist/assets/cesium/Workers/EllipsoidOutlineGeometry-0fa10c79.js +0 -454
  279. package/dist/assets/cesium/Workers/EllipsoidRhumbLine-ef872433.js +0 -741
  280. package/dist/assets/cesium/Workers/EllipsoidTangentPlane-6dd1b7af.js +0 -373
  281. package/dist/assets/cesium/Workers/EncodedCartesian3-57415c8a.js +0 -171
  282. package/dist/assets/cesium/Workers/FrustumGeometry-ee73037c.js +0 -2540
  283. package/dist/assets/cesium/Workers/GeometryAttribute-ff5b4fb1.js +0 -619
  284. package/dist/assets/cesium/Workers/GeometryAttributes-ad136444.js +0 -91
  285. package/dist/assets/cesium/Workers/GeometryInstance-34d9e21e.js +0 -121
  286. package/dist/assets/cesium/Workers/GeometryOffsetAttribute-9ad0019c.js +0 -16
  287. package/dist/assets/cesium/Workers/GeometryPipeline-1f8fbf05.js +0 -3690
  288. package/dist/assets/cesium/Workers/IndexDatatype-2643aa47.js +0 -200
  289. package/dist/assets/cesium/Workers/IntersectionTests-70d39ba9.js +0 -1836
  290. package/dist/assets/cesium/Workers/Math-0a2ac845.js +0 -1340
  291. package/dist/assets/cesium/Workers/Matrix2-e1298525.js +0 -7086
  292. package/dist/assets/cesium/Workers/Matrix3-41c58dde.js +0 -4283
  293. package/dist/assets/cesium/Workers/OrientedBoundingBox-159cf1d6.js +0 -1259
  294. package/dist/assets/cesium/Workers/Plane-4c3d403b.js +0 -309
  295. package/dist/assets/cesium/Workers/PolygonGeometryLibrary-076a5d25.js +0 -1074
  296. package/dist/assets/cesium/Workers/PolygonPipeline-b9f2810a.js +0 -1344
  297. package/dist/assets/cesium/Workers/PolylinePipeline-639192e0.js +0 -573
  298. package/dist/assets/cesium/Workers/PolylineVolumeGeometryLibrary-b73549fb.js +0 -781
  299. package/dist/assets/cesium/Workers/PrimitivePipeline-10ede1b6.js +0 -966
  300. package/dist/assets/cesium/Workers/RectangleGeometryLibrary-c35a7356.js +0 -280
  301. package/dist/assets/cesium/Workers/RuntimeError-ef395448.js +0 -68
  302. package/dist/assets/cesium/Workers/TerrainEncoding-668d242f.js +0 -1227
  303. package/dist/assets/cesium/Workers/Transforms-a2a85221.js +0 -14712
  304. package/dist/assets/cesium/Workers/VertexFormat-030f11ff.js +0 -312
  305. package/dist/assets/cesium/Workers/WallGeometryLibrary-1938bf0d.js +0 -211
  306. package/dist/assets/cesium/Workers/WebGLConstants-0b1ce7ba.js +0 -620
  307. package/dist/assets/cesium/Workers/WebMercatorProjection-13ed1a6e.js +0 -151
  308. package/dist/assets/cesium/Workers/arrayRemoveDuplicates-d2061e85.js +0 -129
  309. package/dist/assets/cesium/Workers/cesiumWorkerBootstrapper.js +0 -1363
  310. package/dist/assets/cesium/Workers/combine-d9581036.js +0 -82
  311. package/dist/assets/cesium/Workers/defaultValue-fe22d8c0.js +0 -51
  312. package/dist/assets/index-cb070eff.js +0 -1
  313. package/plugins/@vcmap/create-link/fallbackCreateLink.vue +0 -76
  314. package/plugins/@vcmap/create-link/index.js +0 -95
  315. package/plugins/@vcmap/create-link/package.json +0 -6
  316. package/plugins/@vcmap/search-nominatim/LICENSE.md +0 -13
  317. package/plugins/@vcmap/search-nominatim/README.md +0 -3
  318. package/plugins/@vcmap/search-nominatim/config.json +0 -3
  319. package/plugins/@vcmap/search-nominatim/index.js +0 -29
  320. package/plugins/@vcmap/search-nominatim/nominatim.js +0 -175
  321. package/plugins/@vcmap/search-nominatim/package.json +0 -9
  322. /package/dist/assets/{vue.30740e.js → vue.5d696e.js} +0 -0
  323. /package/dist/assets/{vuetify.946bd8.css → vuetify.f0a769.css} +0 -0
  324. /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/ModulesListComponent.vue +0 -0
  325. /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/README.md +0 -0
  326. /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/de.json +0 -0
  327. /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/en.json +0 -0
  328. /package/plugins/{@vcmap → @vcmap-show-case}/project-selector/index.js +0 -0
  329. /package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/README.md +0 -0
  330. /package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/SimpleGraphComponent.vue +0 -0
  331. /package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/index.js +0 -0
  332. /package/plugins/{@vcmap → @vcmap-show-case}/simple-graph/simpleGraphView.js +0 -0
  333. /package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/README.md +0 -0
  334. /package/plugins/{@vcmap → @vcmap-show-case}/theme-changer/index.js +0 -0
@@ -0,0 +1,93 @@
1
+ import { computed } from 'vue';
2
+
3
+ /**
4
+ * Creates a computed property with a getter and a setter for a specific primitive object property/key of the modelled object. This composable allows to pass the computed to an v-model of a sub component. The getter returns the value of the key. The setter merges the passed value with the other object properties of the modelled object and emits the whole object as a input event, and only the changed props as an change event.
5
+ * @param {function():Object} modelObject Getter for the property that is modelled by the component and should be updated with input event, usually this is the 'value' prop.
6
+ * @param {string} key The key of the modelObject that should be returned on get and updated on set.
7
+ * @param {function(event: string, ...args: any[]):void} emit The emit function of the component context that is using this composable.
8
+ * @returns {import('vue').WriteableComputedRef} A computed with a getter and a setter.
9
+ */
10
+ export function usePrimitiveProperty(modelObject, key, emit) {
11
+ return computed({
12
+ get() {
13
+ return modelObject()[key];
14
+ },
15
+ set(value) {
16
+ if (modelObject()[key] !== value) {
17
+ const newParams = structuredClone(modelObject());
18
+ const changedParams = { [key]: value || undefined }; // XXX boolean values need to be handled differently
19
+ emit('input', Object.assign(newParams, changedParams));
20
+ emit('propertyChange', changedParams);
21
+ }
22
+ },
23
+ });
24
+ }
25
+
26
+ /**
27
+ * Creates an object with the entries of the input array as keys and computed properties as values. These have a getter and a setter for a specific entry of the array, that is an object property/key of the modelled object. This composable allows to pass the computeds to an v-model of a sub component. The getter returns the value of the array entry. The setter first merges the passed value with the other array entries, and then with the other object properties of the modelled object and emits the whole object as a input event, and only the changed props as an change event.
28
+ * @param {function():Object} modelObject Getter for the property that is modelled by the component and should be updated with input event, usually this is the 'value' prop.
29
+ * @param {string} key The key of the modelObject that should be returned on get and updated on set.
30
+ * @param {function(event: string, ...args: any[]):void} emit The emit function of the component context that is using this composable.
31
+ * @param {number} arrayLength The length of the array property.
32
+ * @returns {Object<string, import('vue').WriteableComputedRef>} An object with the provided names as keys and the corresponding computed properties with a getter and a setter.
33
+ */
34
+ export function useArrayProperty(modelObject, key, emit, arrayLength) {
35
+ return Array(arrayLength)
36
+ .fill()
37
+ .map((entry, index) => {
38
+ return computed({
39
+ get() {
40
+ if (modelObject()?.[key]) {
41
+ return modelObject()[key][index];
42
+ } else {
43
+ return undefined;
44
+ }
45
+ },
46
+ set(value) {
47
+ const newParams = structuredClone(modelObject());
48
+ let changedParams;
49
+ if (!modelObject()?.[key]) {
50
+ const newArray = Array(arrayLength).fill();
51
+ newArray[index] = value;
52
+ changedParams = { [key]: newArray };
53
+ } else if (modelObject()[key][index] !== value) {
54
+ const newArray = [...modelObject()[key]];
55
+ newArray[index] = value;
56
+ changedParams = { [key]: newArray };
57
+ }
58
+
59
+ if (changedParams) {
60
+ emit('input', Object.assign(newParams, changedParams));
61
+ emit('propertyChange', changedParams);
62
+ }
63
+ },
64
+ });
65
+ });
66
+ }
67
+
68
+ /**
69
+ * Creates a computed property that returns whether a specific key of the modelled object (value prop) is undefined or not. If set to true, the provided default value is applied to the key of the modelled object.
70
+ * @param {function():Object} modelObject Getter for the property that is modelled by the component and should be updated with input event, usually this is the 'value' prop.
71
+ * @param {string} key The key of the modelObject that should be return on get and updated on set.
72
+ * @param {function(event: string, ...args: any[]):void} emit The emit function of the component context that is using this composable.
73
+ * @param {*} valueDefault The defualt value that is set when `true` is provided to the setter of the computed property.
74
+ * @returns {import('vue').WriteableComputedRef} A computed ref with a setter and a getter.
75
+ */
76
+ export function useHasProperty(modelObject, key, emit, valueDefault) {
77
+ return computed({
78
+ get() {
79
+ return modelObject()?.[key] !== undefined;
80
+ },
81
+ set(value) {
82
+ const newParams = structuredClone(modelObject());
83
+ let changedParams;
84
+ if (value) {
85
+ changedParams = { [key]: valueDefault };
86
+ } else {
87
+ changedParams = { [key]: undefined };
88
+ }
89
+ emit('input', Object.assign(newParams, changedParams));
90
+ emit('propertyChange', changedParams);
91
+ },
92
+ });
93
+ }
@@ -17,6 +17,7 @@ import { ButtonLocation } from '../manager/navbarManager.js';
17
17
  * @type {symbol}
18
18
  */
19
19
  const subTreeOpenStateSymbol = Symbol('SubTreeOpenState');
20
+ const subTreeItemWeight = Symbol('SubTreeItemWeight');
20
21
 
21
22
  /**
22
23
  * @typedef {Object} ParentTreeViewItem
@@ -39,9 +40,9 @@ class ContentTreeCollection extends IndexedCollection {
39
40
  */
40
41
  this._app = app;
41
42
 
42
- const recreateTree = () => {
43
+ const recreateTree = (resetSubTreeButtons) => {
43
44
  if (!this._suspendListeners) {
44
- this._setTreeView();
45
+ this._setTreeView(resetSubTreeButtons);
45
46
  }
46
47
  };
47
48
 
@@ -76,7 +77,7 @@ class ContentTreeCollection extends IndexedCollection {
76
77
  this._subTreeViewItems.value.delete(child.name);
77
78
  }
78
79
  }),
79
- this.moved.addEventListener(recreateTree),
80
+ this.moved.addEventListener(() => recreateTree(true)),
80
81
  ];
81
82
  /**
82
83
  * This is the default content tree.
@@ -128,9 +129,9 @@ class ContentTreeCollection extends IndexedCollection {
128
129
  const { action, destroy } = createToggleAction(
129
130
  // TODO icon & title are not reactive
130
131
  {
131
- name: subTreeViewItem.name,
132
+ name: subTreeViewItem.title ?? subTreeViewItem.name,
132
133
  icon: subTreeViewItem.icon,
133
- title: subTreeViewItem.title,
134
+ title: subTreeViewItem.tooltip,
134
135
  },
135
136
  {
136
137
  component: LayerTree,
@@ -149,7 +150,7 @@ class ContentTreeCollection extends IndexedCollection {
149
150
  );
150
151
 
151
152
  this._app.navbarManager.add(
152
- { id, action, weight: 100 },
153
+ { id, action, weight: subTreeViewItem[subTreeItemWeight] },
153
154
  vcsAppSymbol,
154
155
  ButtonLocation.CONTENT,
155
156
  );
@@ -162,11 +163,13 @@ class ContentTreeCollection extends IndexedCollection {
162
163
  }
163
164
 
164
165
  /**
166
+ * @param {boolean} [resetSubtreeButtons=false]
165
167
  * @private
166
168
  */
167
- _setTreeView() {
169
+ _setTreeView(resetSubtreeButtons = false) {
168
170
  /** @type {Map<string, ParentTreeViewItem>} */
169
171
  const baseTreeMap = new Map();
172
+ let maxWeight = 0;
170
173
  [...this._array]
171
174
  .sort((a, b) => {
172
175
  const depthA = a.name.split('.').length;
@@ -183,6 +186,10 @@ class ContentTreeCollection extends IndexedCollection {
183
186
  const treeViewItem = item.getTreeViewItem();
184
187
  const namespace = treeViewItem.name.split('.');
185
188
  const name = namespace.pop();
189
+ maxWeight = item.weight > maxWeight ? item.weight : maxWeight;
190
+ if (namespace.length === 0) {
191
+ treeViewItem[subTreeItemWeight] = item.weight;
192
+ }
186
193
  /** @type {ParentTreeViewItem} */
187
194
  let parentItem = { children: baseTreeMap };
188
195
  namespace.forEach((parentName) => {
@@ -208,6 +215,7 @@ class ContentTreeCollection extends IndexedCollection {
208
215
  const topLevelItems = [...baseTreeMap.values()].map(setChildren);
209
216
  const defaultSubTreeViewItem = this._defaultSubtreeItem.getTreeViewItem();
210
217
  defaultSubTreeViewItem.children.splice(0);
218
+ defaultSubTreeViewItem[subTreeItemWeight] = maxWeight + 1;
211
219
  defaultSubTreeViewItem.children.push(
212
220
  ...topLevelItems.filter((i) => !i[subTreeSymbol]),
213
221
  );
@@ -217,11 +225,17 @@ class ContentTreeCollection extends IndexedCollection {
217
225
  ];
218
226
 
219
227
  subTrees.forEach((subTree) => {
220
- if (!this._app.navbarManager.has(subTree.name)) {
228
+ if (!this._app.navbarManager.has(subTree.name) || resetSubtreeButtons) {
229
+ this._subTreeListeners.get(subTree.name)?.();
221
230
  this._subTreeListeners.set(
222
231
  subTree.name,
223
232
  this._createSubtreeActionButton(subTree),
224
233
  );
234
+ } else {
235
+ const buttonComponent = this._app.navbarManager.get(subTree.name);
236
+ if (buttonComponent.weight !== subTree[subTreeItemWeight]) {
237
+ buttonComponent.weight = subTree[subTreeItemWeight];
238
+ }
225
239
  }
226
240
  });
227
241
  }
@@ -243,7 +257,14 @@ class ContentTreeCollection extends IndexedCollection {
243
257
  * @readonly
244
258
  */
245
259
  get subTreeIds() {
246
- return [...this._subTreeViewItems.value.keys()];
260
+ const [defaultItem, ...rest] = [...this._subTreeViewItems.value.entries()];
261
+ rest.sort(([, a], [, b]) => {
262
+ if (a[subTreeItemWeight] === b[subTreeItemWeight]) {
263
+ return 0;
264
+ }
265
+ return a[subTreeItemWeight] > b[subTreeItemWeight] ? -1 : 1;
266
+ });
267
+ return [defaultItem, ...rest].map(([id]) => id);
247
268
  }
248
269
 
249
270
  /**
package/src/i18n/de.js CHANGED
@@ -1,9 +1,9 @@
1
1
  const messages = {
2
2
  navbar: {
3
3
  maps: {
4
- CesiumMap: '3D Karte aktivieren',
5
- OpenlayersMap: '2D Karte aktivieren',
6
- ObliqueMap: 'Schrägluftbilder aktivieren',
4
+ CesiumMap: '3D-Karte aktivieren',
5
+ OpenlayersMap: '2D-Karte aktivieren',
6
+ ObliqueMap: 'Schrägluftbildkarte aktivieren',
7
7
  },
8
8
  menu: {
9
9
  tooltip: 'Menü',
@@ -52,6 +52,8 @@ const messages = {
52
52
  components: {
53
53
  pin: 'Fenster andocken',
54
54
  close: 'Fenster schließen',
55
+ apply: 'Anwenden',
56
+ cancel: 'Abbrechen',
55
57
  vcsFormSection: {
56
58
  help: 'Hilfe anzeigen',
57
59
  },
@@ -69,8 +71,8 @@ const messages = {
69
71
  noResultsPlaceholder: 'Keine übereinstimmenden Einträge gefunden',
70
72
  },
71
73
  style: {
72
- fill: 'Füll Stil',
73
- stroke: 'Linien Stil',
74
+ fill: 'Füllung',
75
+ stroke: 'Linie',
74
76
  reset: 'Zurücksetzen',
75
77
  lineWidth: 'Linienbreite',
76
78
  type: 'Typ',
@@ -81,7 +83,7 @@ const messages = {
81
83
  rotation: 'Rotation',
82
84
  scale: 'Skalierung',
83
85
  opacity: 'Deckkraft',
84
- image: 'Punkt Stil',
86
+ image: 'Symbol',
85
87
  icon: 'Icon',
86
88
  presets: 'Vorlagen',
87
89
  shape: 'Form',
@@ -97,10 +99,41 @@ const messages = {
97
99
  italic: 'Kursiv',
98
100
  text: 'Text',
99
101
  enterText: 'Text hier eingeben',
102
+ offset: 'Versatz',
103
+ },
104
+ vectorProperties: {
105
+ header: 'Vektor Eigenschaften',
106
+ altitudeMode: 'Höhenmodus',
107
+ clampToGround: 'Auf Gelände legen',
108
+ absolute: 'Absolut',
109
+ relativeToGround: 'Relativ zum Gelände',
110
+ groundLevel: 'Geländehöhe',
111
+ classificationType: 'Klassifizierung',
112
+ none: 'Keine',
113
+ both: 'Beide',
114
+ cesium3DTile: '3D Tiles',
115
+ terrain: 'Gelände',
116
+ heightAboveGround: 'Höhe über Gelände',
117
+ allowPicking: 'Auswahl erlauben',
118
+ scaleByDistance: 'Distanzskalierung',
119
+ eyeOffset: 'Blick Versatz',
120
+ storeys: 'Stockwerke',
121
+ storeyHeights: 'Stockwerkshöhe(n)',
122
+ aboveGround: 'Über Grund',
123
+ belowGround: 'Unter Grund',
124
+ modelUrl: 'Modell URL',
125
+ modelHeading: 'Modell Ausrichtung',
126
+ modelPitch: 'Modell Neigung',
127
+ modelRoll: 'Modell Rotation',
128
+ baseUrl: 'Basis URL',
129
+ extrudedHeight: 'Extrusion',
130
+ skirt: 'Skirts',
131
+ modelScale: 'Modell Skalierung',
132
+ },
133
+ validation: {
100
134
  allowedRange: 'Erlaubter Wertebereich',
101
135
  notValid: 'Eingabe nicht gültig',
102
136
  required: 'Eingabe ist erforderlich',
103
- offset: 'Versatz',
104
137
  },
105
138
  },
106
139
  settings: {
@@ -145,6 +178,7 @@ const messages = {
145
178
  attributions: {
146
179
  title: 'Attributionen',
147
180
  tooltip: 'Öffne Attributionsfenster',
181
+ empty: 'Aktuell sind keine Attributionseinträge verfügbar.',
148
182
  },
149
183
  },
150
184
  notification: {
package/src/i18n/en.js CHANGED
@@ -1,9 +1,9 @@
1
1
  const messages = {
2
2
  navbar: {
3
3
  maps: {
4
- CesiumMap: 'Enable 3D view',
5
- OpenlayersMap: 'Enable 2D view',
6
- ObliqueMap: 'Enable oblique view',
4
+ CesiumMap: 'Enable 3D map',
5
+ OpenlayersMap: 'Enable 2D map',
6
+ ObliqueMap: 'Enable oblique imagery map',
7
7
  },
8
8
  menu: {
9
9
  tooltip: 'Menu',
@@ -52,6 +52,8 @@ const messages = {
52
52
  components: {
53
53
  pin: 'Dock window',
54
54
  close: 'Close window',
55
+ apply: 'Apply',
56
+ cancel: 'Cancel',
55
57
  vcsFormSection: {
56
58
  help: 'Show help',
57
59
  },
@@ -81,7 +83,7 @@ const messages = {
81
83
  rotation: 'Rotation',
82
84
  scale: 'Scale',
83
85
  opacity: 'Opacity',
84
- image: 'Point style',
86
+ image: 'Symbol',
85
87
  icon: 'Icon',
86
88
  shape: 'Shape',
87
89
  presets: 'Presets',
@@ -97,10 +99,41 @@ const messages = {
97
99
  italic: 'Italic',
98
100
  text: 'Text',
99
101
  enterText: 'Enter text here',
102
+ offset: 'Offset',
103
+ },
104
+ vectorProperties: {
105
+ header: 'Vector properties',
106
+ altitudeMode: 'Altitude mode',
107
+ clampToGround: 'Clamp to ground',
108
+ absolute: 'Absolute',
109
+ relativeToGround: 'Relative to ground',
110
+ groundLevel: 'Ground level',
111
+ classificationType: 'Classification',
112
+ none: 'None',
113
+ both: 'Both',
114
+ cesium3DTile: '3D Tiles',
115
+ terrain: 'Terrain',
116
+ heightAboveGround: 'Height above ground',
117
+ allowPicking: 'Allow picking',
118
+ scaleByDistance: 'Scale by distance',
119
+ eyeOffset: 'Eye offset',
120
+ storeys: 'Storeys',
121
+ storeyHeights: 'Storey height(s)',
122
+ aboveGround: 'Above ground',
123
+ belowGround: 'Below ground',
124
+ modelUrl: 'Model URL',
125
+ modelHeading: 'Model heading',
126
+ modelPitch: 'Model pitch',
127
+ modelRoll: 'Model roll',
128
+ baseUrl: 'Base URL',
129
+ extrudedHeight: 'Extrusion',
130
+ skirt: 'Skirts',
131
+ modelScale: 'Model scale',
132
+ },
133
+ validation: {
100
134
  allowedRange: 'Allowed value range',
101
135
  notValid: 'Input not valid',
102
136
  required: 'Input is required',
103
- offset: 'Offset',
104
137
  },
105
138
  },
106
139
  settings: {
@@ -145,6 +178,7 @@ const messages = {
145
178
  attributions: {
146
179
  title: 'Attributions',
147
180
  tooltip: 'Open attributions window',
181
+ empty: 'Currently there are no attribution entries available.',
148
182
  },
149
183
  },
150
184
  notification: {
@@ -1,12 +1,7 @@
1
- // eslint-disable-next-line max-classes-per-file
2
- import { v5 as uuidv5 } from 'uuid';
3
1
  import { IndexedCollection, moduleIdSymbol } from '@vcmap/core';
4
2
  import { getLogger } from '@vcsuite/logger';
5
-
6
- /**
7
- * @type {string}
8
- */
9
- const uniqueNamespace = '9c27cc2d-552f-4637-9194-09329ed4c1dc';
3
+ import en from './en.js';
4
+ import de from './de.js';
10
5
 
11
6
  /**
12
7
  * returns true if the given value is of type object and not an array.
@@ -70,64 +65,20 @@ export function mergeDeep(...sources) {
70
65
  * @extends {IndexedCollection<I18nConfigurationItem>}
71
66
  */
72
67
  class I18nCollection extends IndexedCollection {
73
- /**
74
- * @param {function():string} getDynamicModuleId - function to get the current dynamic module id
75
- */
76
- constructor(getDynamicModuleId) {
68
+ constructor() {
77
69
  super();
78
70
  /**
79
- * @type {function(): string}
71
+ * VC Map default I18n Messages
72
+ * @type {Object}
80
73
  * @private
81
74
  */
82
- this._getDynamicModuleId = getDynamicModuleId;
83
- }
84
-
85
- /**
86
- * @inheritDoc
87
- */
88
- add(item) {
89
- if (!item[moduleIdSymbol]) {
90
- item[moduleIdSymbol] = this._getDynamicModuleId();
91
- }
92
- if (!item.name) {
93
- item.name = uuidv5(JSON.stringify(item), uniqueNamespace);
94
- }
95
- super.add(item);
96
- }
97
-
98
- /**
99
- * @param {Array<I18nConfigurationItem>} configArray
100
- * @param {string} moduleId
101
- * @returns {Promise<void>}
102
- */
103
- async parseItems(configArray, moduleId) {
104
- if (Array.isArray(configArray)) {
105
- configArray.forEach((item) => {
106
- this.add({ ...item, [moduleIdSymbol]: moduleId });
107
- });
108
- }
109
- }
110
-
111
- /**
112
- * @param {string} moduleId
113
- */
114
- async removeModule(moduleId) {
115
- [...this]
116
- .filter((item) => item[moduleIdSymbol] === moduleId)
117
- .forEach((item) => {
118
- this.remove(item);
119
- });
120
- }
75
+ this._defaultMessages = { name: 'default', en, de };
121
76
 
122
- /**
123
- * @param {string} moduleId
124
- * @returns {Array<I18nConfigurationItem>}
125
- */
126
- serializeModule(moduleId) {
127
- return [...this]
128
- .filter((item) => item[moduleIdSymbol] === moduleId)
129
- .filter((item) => !item[i18nPluginSymbol])
130
- .map((item) => JSON.parse(JSON.stringify(item)));
77
+ /**
78
+ * @type {IndexedCollection<Object>}
79
+ * @private
80
+ */
81
+ this._pluginMessages = new IndexedCollection(false);
131
82
  }
132
83
 
133
84
  /**
@@ -138,10 +89,11 @@ class I18nCollection extends IndexedCollection {
138
89
  * @param {Object} messages
139
90
  */
140
91
  addPluginMessages(plugin, moduleId, messages) {
141
- messages[i18nPluginSymbol] = plugin;
142
92
  messages[moduleIdSymbol] = moduleId;
93
+ messages[i18nPluginSymbol] = plugin;
143
94
  messages.name = plugin;
144
- this.add(messages);
95
+ this._pluginMessages.add(messages);
96
+ this.added.raiseEvent(messages);
145
97
  }
146
98
 
147
99
  /**
@@ -151,14 +103,15 @@ class I18nCollection extends IndexedCollection {
151
103
  * @param {string} moduleId
152
104
  */
153
105
  removePluginMessages(pluginName, moduleId) {
154
- [...this]
106
+ [...this._pluginMessages]
155
107
  .filter(
156
108
  (item) =>
157
109
  item[i18nPluginSymbol] === pluginName &&
158
110
  item[moduleIdSymbol] === moduleId,
159
111
  )
160
112
  .forEach((item) => {
161
- this.remove(item);
113
+ this._pluginMessages.remove(item);
114
+ this.removed.raiseEvent(item);
162
115
  });
163
116
  }
164
117
 
@@ -167,13 +120,14 @@ class I18nCollection extends IndexedCollection {
167
120
  * @returns {Object}
168
121
  */
169
122
  getMergedMessages() {
170
- return mergeDeep(...this);
123
+ return mergeDeep(this._defaultMessages, ...this._pluginMessages, ...this);
171
124
  }
172
125
 
173
126
  /**
174
127
  * @inheritDoc
175
128
  */
176
129
  destroy() {
130
+ this._pluginMessages.destroy();
177
131
  this._getDynamicModuleId = null;
178
132
  super.destroy();
179
133
  }
@@ -124,6 +124,10 @@ class ButtonManager {
124
124
  get weight() {
125
125
  return buttonComponentOptions.weight || 0;
126
126
  },
127
+ set weight(value) {
128
+ check(value, Number);
129
+ buttonComponentOptions.weight = value;
130
+ },
127
131
  };
128
132
 
129
133
  this._buttonComponents.set(id, buttonComponent);
@@ -243,7 +243,7 @@ class CollectionComponent {
243
243
  * @private
244
244
  */
245
245
  _insertListItem(listItem) {
246
- if (!this._listItems.value.includes(listItem)) {
246
+ if (!this._listItems.value.some((i) => i.name === listItem.name)) {
247
247
  if (this._collection instanceof IndexedCollection) {
248
248
  const newItemIndex = this._collection.indexOfKey(listItem.name);
249
249
  if (newItemIndex === this._collection.size - 1) {
@@ -126,6 +126,8 @@ class ContextMenuManager {
126
126
  } else {
127
127
  position.right += 1;
128
128
  }
129
+ position.maxWidth = 320;
130
+ position.width = -1; // unset width magic. dont touch.
129
131
 
130
132
  this._app.windowManager.add(
131
133
  {
@@ -25,9 +25,21 @@ export const pluginFactorySymbol = Symbol('pluginFactory');
25
25
  */
26
26
  export const pluginBaseUrlSymbol = Symbol('pluginBaseUrl');
27
27
 
28
+ /**
29
+ * A symbol added to each plugin which describes the module URL from which the plugin was loaded (with the filename and including searchParams)
30
+ * @type {symbol}
31
+ */
32
+ export const pluginModuleUrlSymbol = Symbol('pluginModuleUrl');
33
+ /**
34
+ * A symbol added to each plugin which describes the configured version range
35
+ * @type {symbol}
36
+ */
37
+ export const pluginVersionRangeSymbol = Symbol('pluginVersionRange');
38
+
28
39
  /**
29
40
  * A helper function to create an absolute URL from a relative plugin asset URL. For example, when
30
41
  * shipping your plugin with a "plugin-asset/icon.png", you can always retrieve said icon with getPluginAssetUrl(app, name, 'pluing-assets/icon.png')
42
+ * Sets the plugin version as searchParam.
31
43
  * Returns null, if the plugin does not exist.
32
44
  * @param {VcsUiApp} app
33
45
  * @param {string} pluginName
@@ -47,6 +59,7 @@ export function getPluginAssetUrl(app, pluginName, asset) {
47
59
  assetUrl.searchParams.set(key, value);
48
60
  }
49
61
  });
62
+ assetUrl.searchParams.set('version', plugin.version);
50
63
  return assetUrl.toString();
51
64
  }
52
65
  return null;
@@ -114,15 +127,24 @@ export async function loadPlugin(name, config) {
114
127
  baseUrl.pathname = baseUrl.pathname.replace(/\/[^/]+$/, '/');
115
128
  const pluginInstance = await plugin.default(config, baseUrl.toString());
116
129
 
117
- if (!pluginInstance.name) {
118
- getLogger().error(`plugin ${name} does not expose a name`);
130
+ if (!(pluginInstance.name || pluginInstance.version)) {
131
+ getLogger().error(
132
+ `plugin ${name} does not conform to the VcsPlugin interface, which requires a name and version`,
133
+ );
119
134
  if (pluginInstance.destroy) {
120
135
  pluginInstance.destroy();
121
136
  }
122
137
  return null;
123
138
  }
139
+ if (!isValidPackageName(pluginInstance.name)) {
140
+ getLogger().warning(
141
+ `plugin ${pluginInstance.name} has no valid package name!`,
142
+ );
143
+ }
124
144
  pluginInstance[pluginFactorySymbol] = plugin.default;
125
145
  pluginInstance[pluginBaseUrlSymbol] = baseUrl.toString();
146
+ pluginInstance[pluginModuleUrlSymbol] = module;
147
+ pluginInstance[pluginVersionRangeSymbol] = config.version;
126
148
  return pluginInstance;
127
149
  } catch (err) {
128
150
  getLogger().error(`failed to load plugin ${name}`);
@@ -132,19 +154,25 @@ export async function loadPlugin(name, config) {
132
154
  }
133
155
 
134
156
  /**
157
+ * Returns relative url, if base is same, otherwise absolute url
158
+ * Removes version from searchParams, since version is serialized itself
135
159
  * @param {string} base
136
- * @param {string} pluginBase
160
+ * @param {string} pluginUrl
137
161
  * @returns {string}
138
162
  */
139
- export function getPluginEntry(base, pluginBase) {
163
+ export function getPluginEntry(base, pluginUrl) {
140
164
  const baseUrl = new URL(base);
141
- const pluginBaseUrl = new URL(pluginBase);
142
- if (baseUrl.origin !== pluginBaseUrl.origin) {
143
- return pluginBase;
165
+ const pluginModuleUrl = new URL(pluginUrl);
166
+ pluginModuleUrl.searchParams.delete('version'); // semver is part of config
167
+ if (baseUrl.origin !== pluginModuleUrl.origin) {
168
+ return pluginModuleUrl.toString();
144
169
  }
145
170
  const baseSubs = baseUrl.pathname.split('/');
146
- const pluginSubs = pluginBaseUrl.pathname.split('/');
147
- return pluginSubs.filter((sub, idx) => sub !== baseSubs[idx]).join('/');
171
+ const pluginSubs = pluginModuleUrl.pathname.split('/');
172
+ pluginModuleUrl.pathname = pluginSubs
173
+ .filter((sub, idx) => sub !== baseSubs[idx])
174
+ .join('/');
175
+ return `${pluginModuleUrl.pathname}${pluginModuleUrl.search}`.substring(1);
148
176
  }
149
177
 
150
178
  /**
@@ -154,24 +182,36 @@ export function getPluginEntry(base, pluginBase) {
154
182
  export function serializePlugin(plugin) {
155
183
  const serializedPlugin = plugin.toJSON ? plugin.toJSON() : {};
156
184
  serializedPlugin.name = plugin.name;
185
+ if (plugin[pluginVersionRangeSymbol]) {
186
+ serializedPlugin.version = plugin[pluginVersionRangeSymbol];
187
+ }
157
188
  serializedPlugin.entry = getPluginEntry(
158
189
  window.location.href,
159
- plugin[pluginBaseUrlSymbol],
190
+ plugin[pluginModuleUrlSymbol],
160
191
  );
161
192
  serializedPlugin[pluginFactorySymbol] = plugin[pluginFactorySymbol];
162
193
  serializedPlugin[pluginBaseUrlSymbol] = plugin[pluginBaseUrlSymbol];
194
+ serializedPlugin[pluginModuleUrlSymbol] = plugin[pluginModuleUrlSymbol];
195
+ serializedPlugin[pluginVersionRangeSymbol] = plugin[pluginVersionRangeSymbol];
163
196
  return serializedPlugin;
164
197
  }
165
198
 
166
199
  /**
167
200
  * @param {Object} serializedPlugin
168
- * @returns {Promise<VcsPlugin>}
201
+ * @returns {Promise<VcsPlugin|null>}
169
202
  */
170
203
  export async function deserializePlugin(serializedPlugin) {
171
- const reincarnation = await serializedPlugin[pluginFactorySymbol](
172
- serializedPlugin,
173
- );
174
- reincarnation[pluginFactorySymbol] = serializedPlugin[pluginFactorySymbol];
175
- reincarnation[pluginBaseUrlSymbol] = serializedPlugin[pluginBaseUrlSymbol];
176
- return reincarnation;
204
+ if (serializedPlugin[pluginFactorySymbol]) {
205
+ const reincarnation = await serializedPlugin[pluginFactorySymbol](
206
+ serializedPlugin,
207
+ );
208
+ reincarnation[pluginFactorySymbol] = serializedPlugin[pluginFactorySymbol];
209
+ reincarnation[pluginBaseUrlSymbol] = serializedPlugin[pluginBaseUrlSymbol];
210
+ reincarnation[pluginModuleUrlSymbol] =
211
+ serializedPlugin[pluginModuleUrlSymbol];
212
+ reincarnation[pluginVersionRangeSymbol] =
213
+ serializedPlugin[pluginVersionRangeSymbol];
214
+ return reincarnation;
215
+ }
216
+ return loadPlugin(serializedPlugin.name, serializedPlugin);
177
217
  }