@vcmap/ui 5.0.0-rc.23 → 5.0.0-rc.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/README.md +36 -18
  2. package/app.config.json +2 -4
  3. package/build/.eslintrc +3 -0
  4. package/build/build.js +302 -174
  5. package/build/buildCesium.js +32 -19
  6. package/build/buildHelpers.js +267 -94
  7. package/build/buildPreview.js +7 -4
  8. package/build/bundle.js +56 -0
  9. package/build/commonViteConfig.js +2 -4
  10. package/build/determineHost.js +17 -4
  11. package/build/generateOLLib.js +13 -16
  12. package/build/getPluginProxies.js +16 -3
  13. package/build/info/conf.json +21 -21
  14. package/build/info/publish.js +15 -4
  15. package/config/aerowest.config.json +16 -44
  16. package/config/base.config.json +100 -248
  17. package/config/codes.config.json +3 -1
  18. package/config/dev.config.json +34 -14
  19. package/config/graphFeatureInfo.config.json +55 -16
  20. package/config/projects.config.json +5 -2
  21. package/config/www.config.json +174 -333
  22. package/dist/assets/@mdi/font/LICENSE +20 -0
  23. package/dist/assets/@mdi/font/css/materialdesignicons.css.map +16 -0
  24. package/dist/assets/@mdi/font/css/materialdesignicons.min.e3f476.css +3 -0
  25. package/dist/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
  26. package/dist/assets/cesium/Workers/{ArcType-ce2e50ab.js → ArcType-2d9abbbc.js} +4 -4
  27. package/dist/assets/cesium/Workers/{AttributeCompression-b646d393.js → AttributeCompression-f9f6c717.js} +24 -24
  28. package/dist/assets/cesium/Workers/{AxisAlignedBoundingBox-ff186ccc.js → AxisAlignedBoundingBox-4140c51f.js} +3 -3
  29. package/dist/assets/cesium/Workers/{BoundingRectangle-be5924f4.js → BoundingRectangle-c714b156.js} +18 -18
  30. package/dist/assets/cesium/Workers/{BoxGeometry-12eeccaf.js → BoxGeometry-6f3da43d.js} +9 -9
  31. package/dist/assets/cesium/Workers/{Check-666ab1a0.js → Check-6ede7e26.js} +22 -22
  32. package/dist/assets/cesium/Workers/{Color-a84038cb.js → Color-8a565ff2.js} +63 -63
  33. package/dist/assets/cesium/Workers/{ComponentDatatype-f7b11d02.js → ComponentDatatype-cf1fa08e.js} +16 -16
  34. package/dist/assets/cesium/Workers/{CoplanarPolygonGeometryLibrary-3272c1b3.js → CoplanarPolygonGeometryLibrary-4b4d4096.js} +1 -1
  35. package/dist/assets/cesium/Workers/{CorridorGeometryLibrary-0170e093.js → CorridorGeometryLibrary-7b94502b.js} +1 -1
  36. package/dist/assets/cesium/Workers/{CylinderGeometry-7c5da648.js → CylinderGeometry-ca070b87.js} +12 -12
  37. package/dist/assets/cesium/Workers/{CylinderGeometryLibrary-372c07d8.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
  38. package/dist/assets/cesium/Workers/{EllipseGeometry-797d580e.js → EllipseGeometry-122e51fa.js} +20 -20
  39. package/dist/assets/cesium/Workers/{EllipseGeometryLibrary-2939e1dc.js → EllipseGeometryLibrary-4d326efc.js} +1 -1
  40. package/dist/assets/cesium/Workers/{EllipseOutlineGeometry-8b50870f.js → EllipseOutlineGeometry-16cc2bd7.js} +15 -15
  41. package/dist/assets/cesium/Workers/{EllipsoidGeodesic-98c62a56.js → EllipsoidGeodesic-5b3623dc.js} +6 -6
  42. package/dist/assets/cesium/Workers/{EllipsoidGeometry-21c0e3a5.js → EllipsoidGeometry-cb148ca2.js} +14 -14
  43. package/dist/assets/cesium/Workers/{EllipsoidOutlineGeometry-eff247c8.js → EllipsoidOutlineGeometry-0fa10c79.js} +15 -15
  44. package/dist/assets/cesium/Workers/{EllipsoidRhumbLine-19756602.js → EllipsoidRhumbLine-ef872433.js} +9 -9
  45. package/dist/assets/cesium/Workers/{EllipsoidTangentPlane-214683dc.js → EllipsoidTangentPlane-6dd1b7af.js} +1 -1
  46. package/dist/assets/cesium/Workers/{EncodedCartesian3-81f70735.js → EncodedCartesian3-57415c8a.js} +6 -6
  47. package/dist/assets/cesium/Workers/{FrustumGeometry-ac42a6d9.js → FrustumGeometry-ee73037c.js} +139 -111
  48. package/dist/assets/cesium/Workers/{GeometryAttribute-7d6f1732.js → GeometryAttribute-ff5b4fb1.js} +20 -20
  49. package/dist/assets/cesium/Workers/{GeometryAttributes-f06a2792.js → GeometryAttributes-ad136444.js} +1 -1
  50. package/dist/assets/cesium/Workers/{GeometryInstance-451dc1cd.js → GeometryInstance-34d9e21e.js} +6 -6
  51. package/dist/assets/cesium/Workers/{GeometryPipeline-ce4339ed.js → GeometryPipeline-1f8fbf05.js} +22 -22
  52. package/dist/assets/cesium/Workers/{IndexDatatype-a55ceaa1.js → IndexDatatype-2643aa47.js} +13 -13
  53. package/dist/assets/cesium/Workers/{IntersectionTests-f6e6bd8a.js → IntersectionTests-70d39ba9.js} +37 -37
  54. package/dist/assets/cesium/Workers/{Math-2dbd6b93.js → Math-0a2ac845.js} +149 -139
  55. package/dist/assets/cesium/Workers/{Matrix2-13178034.js → Matrix2-e1298525.js} +256 -256
  56. package/dist/assets/cesium/Workers/{Matrix3-315394f6.js → Matrix3-41c58dde.js} +150 -150
  57. package/dist/assets/cesium/Workers/{OrientedBoundingBox-04920dc7.js → OrientedBoundingBox-159cf1d6.js} +19 -17
  58. package/dist/assets/cesium/Workers/{Plane-900aa728.js → Plane-4c3d403b.js} +5 -5
  59. package/dist/assets/cesium/Workers/{PolygonGeometryLibrary-a8680d96.js → PolygonGeometryLibrary-076a5d25.js} +6 -6
  60. package/dist/assets/cesium/Workers/PolygonPipeline-b9f2810a.js +1344 -0
  61. package/dist/assets/cesium/Workers/{PolylinePipeline-32f36d2a.js → PolylinePipeline-639192e0.js} +16 -16
  62. package/dist/assets/cesium/Workers/{PolylineVolumeGeometryLibrary-a510d657.js → PolylineVolumeGeometryLibrary-b73549fb.js} +7 -7
  63. package/dist/assets/cesium/Workers/{PrimitivePipeline-ba38434a.js → PrimitivePipeline-10ede1b6.js} +6 -6
  64. package/dist/assets/cesium/Workers/{RectangleGeometryLibrary-bdba697e.js → RectangleGeometryLibrary-c35a7356.js} +1 -1
  65. package/dist/assets/cesium/Workers/{RuntimeError-06c93819.js → RuntimeError-ef395448.js} +5 -5
  66. package/dist/assets/cesium/Workers/{TerrainEncoding-833187da.js → TerrainEncoding-668d242f.js} +30 -30
  67. package/dist/assets/cesium/Workers/Transforms-a2a85221.js +14712 -0
  68. package/dist/assets/cesium/Workers/{VertexFormat-6b480673.js → VertexFormat-030f11ff.js} +14 -14
  69. package/dist/assets/cesium/Workers/{WallGeometryLibrary-919eed92.js → WallGeometryLibrary-1938bf0d.js} +1 -1
  70. package/dist/assets/cesium/Workers/{WebGLConstants-a8cc3e8c.js → WebGLConstants-0b1ce7ba.js} +1 -1
  71. package/dist/assets/cesium/Workers/{WebMercatorProjection-13a90d41.js → WebMercatorProjection-13ed1a6e.js} +6 -6
  72. package/dist/assets/cesium/Workers/{arrayRemoveDuplicates-c2038105.js → arrayRemoveDuplicates-d2061e85.js} +5 -5
  73. package/dist/assets/cesium/Workers/cesiumWorkerBootstrapper.js +5 -5
  74. package/dist/assets/cesium/Workers/{combine-ca22a614.js → combine-d9581036.js} +5 -5
  75. package/dist/assets/cesium/Workers/combineGeometry.js +1 -1
  76. package/dist/assets/cesium/Workers/createBoxGeometry.js +1 -1
  77. package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +9 -9
  78. package/dist/assets/cesium/Workers/createCircleGeometry.js +13 -13
  79. package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +13 -13
  80. package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +11 -11
  81. package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +9 -9
  82. package/dist/assets/cesium/Workers/createCorridorGeometry.js +14 -14
  83. package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +12 -12
  84. package/dist/assets/cesium/Workers/createCylinderGeometry.js +1 -1
  85. package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +13 -13
  86. package/dist/assets/cesium/Workers/createEllipseGeometry.js +1 -1
  87. package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +1 -1
  88. package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +1 -1
  89. package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +1 -1
  90. package/dist/assets/cesium/Workers/createFrustumGeometry.js +1 -1
  91. package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +8 -8
  92. package/dist/assets/cesium/Workers/createGeometry.js +1 -1
  93. package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +33 -33
  94. package/dist/assets/cesium/Workers/createPlaneGeometry.js +8 -8
  95. package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +6 -6
  96. package/dist/assets/cesium/Workers/createPolygonGeometry.js +25 -25
  97. package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +17 -17
  98. package/dist/assets/cesium/Workers/createPolylineGeometry.js +11 -11
  99. package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +9 -9
  100. package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +9 -9
  101. package/dist/assets/cesium/Workers/createRectangleGeometry.js +16 -16
  102. package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +12 -12
  103. package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +10 -10
  104. package/dist/assets/cesium/Workers/createSphereGeometry.js +11 -11
  105. package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +12 -12
  106. package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +2 -2
  107. package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +1 -1
  108. package/dist/assets/cesium/Workers/createVectorTileGeometries.js +8 -8
  109. package/dist/assets/cesium/Workers/createVectorTilePoints.js +1 -1
  110. package/dist/assets/cesium/Workers/createVectorTilePolygons.js +1 -1
  111. package/dist/assets/cesium/Workers/createVectorTilePolylines.js +1 -1
  112. package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  113. package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +27 -28
  114. package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +33 -38
  115. package/dist/assets/cesium/Workers/createWallGeometry.js +14 -14
  116. package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +14 -14
  117. package/dist/assets/cesium/Workers/decodeDraco.js +10 -2
  118. package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +15 -15
  119. package/dist/assets/cesium/Workers/decodeI3S.js +1 -1
  120. package/dist/assets/cesium/Workers/{defaultValue-0a909f67.js → defaultValue-fe22d8c0.js} +2 -2
  121. package/dist/assets/cesium/Workers/package.js +1 -1
  122. package/dist/assets/cesium/Workers/transcodeKTX2.js +46 -26
  123. package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
  124. package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +24 -24
  125. package/dist/assets/{cesium.166f91.js → cesium.1457fa.js} +155448 -127152
  126. package/dist/assets/cesium.js +1 -1
  127. package/dist/assets/core.47836f.js +19060 -0
  128. package/dist/assets/core.js +1 -1
  129. package/dist/assets/index-bb372634.js +1 -0
  130. package/dist/assets/{ol.d2cba3.js → ol.9e4d23.js} +28380 -13095
  131. package/dist/assets/ol.js +1 -1
  132. package/dist/assets/ui.6ed89d.css +5 -0
  133. package/dist/assets/ui.6ed89d.js +13461 -0
  134. package/dist/assets/ui.js +1 -1
  135. package/dist/assets/{vue.5d00e9.js → vue.7327e4.js} +834 -598
  136. package/dist/assets/vue.js +2 -2
  137. package/dist/assets/{vuetify.2f1432.css → vuetify.d2131d.css} +2 -2
  138. package/dist/assets/{vuetify.2f1432.js → vuetify.d2131d.js} +343 -103
  139. package/dist/assets/vuetify.js +2 -2
  140. package/dist/index.html +28 -7
  141. package/index.html +35 -7
  142. package/index.js +82 -17
  143. package/lib/cesium.js +1 -1
  144. package/lib/core.js +1 -1
  145. package/lib/olLib.js +19 -16
  146. package/lib/ui.js +1 -1
  147. package/lib/vue.js +2 -2
  148. package/lib/vuetify.js +2 -2
  149. package/package.json +29 -19
  150. package/plugins/.eslintrc +9 -0
  151. package/plugins/@vcmap/create-link/fallbackCreateLink.vue +13 -11
  152. package/plugins/@vcmap/create-link/index.js +15 -6
  153. package/plugins/@vcmap/project-selector/ModulesListComponent.vue +4 -8
  154. package/plugins/@vcmap/project-selector/ProjectSelectorComponent.vue +5 -10
  155. package/plugins/@vcmap/project-selector/README.md +4 -2
  156. package/plugins/@vcmap/project-selector/config.json +13 -13
  157. package/plugins/@vcmap/project-selector/de.json +2 -2
  158. package/plugins/@vcmap/project-selector/en.json +2 -2
  159. package/plugins/@vcmap/project-selector/index.js +63 -28
  160. package/plugins/@vcmap/search-nominatim/LICENSE.md +5 -6
  161. package/plugins/@vcmap/search-nominatim/README.md +2 -1
  162. package/plugins/@vcmap/search-nominatim/config.json +1 -2
  163. package/plugins/@vcmap/search-nominatim/index.js +7 -4
  164. package/plugins/@vcmap/search-nominatim/nominatim.js +7 -2
  165. package/plugins/@vcmap/search-nominatim/package.json +2 -36
  166. package/plugins/@vcmap/simple-graph/README.md +29 -9
  167. package/plugins/@vcmap/simple-graph/SimpleGraphComponent.vue +2 -7
  168. package/plugins/@vcmap/simple-graph/index.js +2 -2
  169. package/plugins/@vcmap/simple-graph/simpleGraphView.js +3 -1
  170. package/plugins/@vcmap/theme-changer/README.md +5 -3
  171. package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +6 -10
  172. package/plugins/@vcmap/theme-changer/config.json +67 -67
  173. package/plugins/@vcmap/theme-changer/index.js +11 -5
  174. package/plugins/@vcmap-show-case/README.md +2 -1
  175. package/plugins/@vcmap-show-case/buttons-example/ButtonsExample.vue +87 -46
  176. package/plugins/@vcmap-show-case/buttons-example/index.js +10 -8
  177. package/plugins/@vcmap-show-case/category-tester/CategoriesExample.vue +135 -0
  178. package/plugins/@vcmap-show-case/category-tester/CollectionComponentOptions.vue +209 -0
  179. package/plugins/@vcmap-show-case/category-tester/index.js +28 -4
  180. package/plugins/@vcmap-show-case/collection-manager-example/CollectionManagerExample.vue +182 -0
  181. package/plugins/@vcmap-show-case/collection-manager-example/README.md +3 -0
  182. package/plugins/@vcmap-show-case/collection-manager-example/index.js +74 -0
  183. package/plugins/@vcmap-show-case/collection-manager-example/package.json +5 -0
  184. package/plugins/@vcmap-show-case/config-editor/{editor.vue → ConfigEditor.vue} +20 -24
  185. package/plugins/@vcmap-show-case/config-editor/index.js +13 -11
  186. package/plugins/@vcmap-show-case/context-menu-tester/index.js +18 -10
  187. package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +109 -121
  188. package/plugins/@vcmap-show-case/form-inputs-example/config.json +3 -3
  189. package/plugins/@vcmap-show-case/form-inputs-example/exampleActions.js +14 -4
  190. package/plugins/@vcmap-show-case/form-inputs-example/index.js +41 -19
  191. package/plugins/@vcmap-show-case/form-inputs-example/validation.js +2 -1
  192. package/plugins/@vcmap-show-case/icons-example/README.md +1 -1
  193. package/plugins/@vcmap-show-case/icons-example/allIconsComponent.vue +10 -10
  194. package/plugins/@vcmap-show-case/icons-example/index.js +10 -8
  195. package/plugins/@vcmap-show-case/list-example/ListExample.vue +221 -103
  196. package/plugins/@vcmap-show-case/list-example/index.js +10 -8
  197. package/plugins/@vcmap-show-case/notifier-tester/index.js +9 -3
  198. package/plugins/@vcmap-show-case/notifier-tester/notifierTester.vue +15 -21
  199. package/plugins/@vcmap-show-case/switch-map-callback-example/README.md +21 -0
  200. package/plugins/@vcmap-show-case/switch-map-callback-example/SwitchMapCallback.js +47 -0
  201. package/plugins/@vcmap-show-case/switch-map-callback-example/config.json +3 -0
  202. package/plugins/@vcmap-show-case/switch-map-callback-example/index.js +34 -0
  203. package/plugins/@vcmap-show-case/switch-map-callback-example/package.json +5 -0
  204. package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +22 -42
  205. package/plugins/@vcmap-show-case/table-example/index.js +10 -8
  206. package/plugins/@vcmap-show-case/textfields-example/TextfieldsExample.vue +7 -30
  207. package/plugins/@vcmap-show-case/textfields-example/index.js +10 -4
  208. package/plugins/@vcmap-show-case/window-tester/WindowExample.vue +16 -13
  209. package/plugins/@vcmap-show-case/window-tester/emptyComponent.vue +4 -7
  210. package/plugins/@vcmap-show-case/window-tester/index.js +26 -20
  211. package/plugins/@vcmap-show-case/window-tester/myCustomHeader.vue +7 -3
  212. package/plugins/@vcmap-show-case/window-tester/toolbox-data.js +82 -5
  213. package/plugins/@vcmap-show-case/window-tester/windowExampleContent.vue +3 -7
  214. package/plugins/@vcmap-show-case/wizard-example/index.js +9 -3
  215. package/plugins/@vcmap-show-case/wizard-example/wizardExample.vue +36 -38
  216. package/plugins/package.json +3 -1
  217. package/public/assets/@mdi/font/LICENSE +20 -0
  218. package/public/assets/@mdi/font/css/materialdesignicons.css.map +16 -0
  219. package/public/assets/@mdi/font/css/materialdesignicons.min.css +3 -0
  220. package/public/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
  221. package/public/assets/favicon-128.png +0 -0
  222. package/public/assets/favicon-180.png +0 -0
  223. package/public/assets/favicon-192.png +0 -0
  224. package/public/assets/favicon-32.png +0 -0
  225. package/public/assets/logo-mobile.svg +9 -0
  226. package/public/assets/logo.svg +26 -0
  227. package/src/actions/actionHelper.js +49 -11
  228. package/src/actions/styleSelector.vue +20 -11
  229. package/src/application/VcsApp.vue +151 -85
  230. package/src/application/VcsAttributions.vue +25 -11
  231. package/src/application/VcsAttributionsFooter.vue +12 -10
  232. package/src/application/VcsMap.vue +9 -5
  233. package/src/application/VcsNavbar.vue +58 -36
  234. package/src/application/VcsSettings.vue +5 -12
  235. package/src/application/attributionsHelper.js +23 -11
  236. package/src/application/vcsAppWrapper.vue +1 -3
  237. package/src/callback/activateLayersCallback.js +54 -0
  238. package/src/callback/applyLayerStyleCallback.js +63 -0
  239. package/src/callback/deactivateLayersCallback.js +54 -0
  240. package/src/callback/goToViewpointCallback.js +54 -0
  241. package/src/callback/vcsCallback.js +66 -0
  242. package/src/components/buttons/VcsActionButtonList.vue +43 -22
  243. package/src/components/buttons/VcsButton.vue +50 -116
  244. package/src/components/buttons/VcsFormButton.vue +178 -0
  245. package/src/components/buttons/VcsToolButton.vue +161 -0
  246. package/src/components/form-inputs-controls/VcsCheckbox.vue +6 -7
  247. package/src/components/form-inputs-controls/VcsDatePicker.vue +66 -21
  248. package/src/components/form-inputs-controls/VcsFormSection.vue +11 -13
  249. package/src/components/form-inputs-controls/VcsLabel.vue +9 -10
  250. package/src/components/form-inputs-controls/VcsRadio.vue +44 -44
  251. package/src/components/form-inputs-controls/VcsSelect.vue +32 -15
  252. package/src/components/form-inputs-controls/VcsSlider.vue +72 -0
  253. package/src/components/form-inputs-controls/VcsTextArea.vue +21 -14
  254. package/src/components/form-inputs-controls/VcsTextField.vue +43 -18
  255. package/src/components/form-inputs-controls/VcsWizard.vue +79 -80
  256. package/src/components/form-inputs-controls/VcsWizardStep.vue +20 -21
  257. package/src/components/form-inputs-controls/composables.js +13 -8
  258. package/src/components/form-output/VcsFormattedNumber.vue +26 -26
  259. package/src/components/icons/+all.js +13 -5
  260. package/src/components/icons/2DAreaIcon.vue +62 -10
  261. package/src/components/icons/2DDistanceIcon.vue +14 -2
  262. package/src/components/icons/3DAreaIcon.vue +62 -10
  263. package/src/components/icons/3DDistanceIcon.vue +14 -2
  264. package/src/components/icons/3DHeightIcon.vue +14 -2
  265. package/src/components/icons/AngleIcon.vue +12 -3
  266. package/src/components/icons/AssociationsIcon.vue +6 -1
  267. package/src/components/icons/AxisIcon.vue +34 -5
  268. package/src/components/icons/BoundingBoxIcon.vue +31 -5
  269. package/src/components/icons/CheckboxCheckedIcon.vue +4 -1
  270. package/src/components/icons/CheckboxIcon.vue +1 -8
  271. package/src/components/icons/CheckboxIndeterminateIcon.vue +9 -2
  272. package/src/components/icons/CircleIcon.vue +24 -4
  273. package/src/components/icons/ClippingHorizontalIcon.vue +14 -2
  274. package/src/components/icons/ClippingIcon.vue +13 -2
  275. package/src/components/icons/ClippingVerticalIcon.vue +14 -2
  276. package/src/components/icons/ColorPickerIcon.vue +13 -2
  277. package/src/components/icons/ColorSwatchIcon.vue +7 -1
  278. package/src/components/icons/CommentIcon.vue +6 -1
  279. package/src/components/icons/CompassIcon.vue +21 -3
  280. package/src/components/icons/ComponentsIcon.vue +14 -2
  281. package/src/components/icons/ConeIcon.vue +26 -4
  282. package/src/components/icons/DimensionsHouseIcon.vue +7 -1
  283. package/src/components/icons/EditIcon.vue +13 -2
  284. package/src/components/icons/ElevationProfileIcon.vue +6 -1
  285. package/src/components/icons/ExportAreaIcon.vue +13 -2
  286. package/src/components/icons/ExportFlightIcon.vue +13 -2
  287. package/src/components/icons/ExportIcon.vue +14 -2
  288. package/src/components/icons/ExternalLinkIcon.vue +18 -3
  289. package/src/components/icons/EyeIcon.vue +12 -2
  290. package/src/components/icons/FastForwardIcon.vue +13 -2
  291. package/src/components/icons/FilterIcon.vue +13 -2
  292. package/src/components/icons/GlobalTerrainIcon.vue +12 -2
  293. package/src/components/icons/GlobeNatureIcon.vue +7 -1
  294. package/src/components/icons/GroundIcon.vue +12 -2
  295. package/src/components/icons/HealthCareIndustriesIcon.vue +6 -1
  296. package/src/components/icons/HelpIcon.vue +12 -2
  297. package/src/components/icons/HideIcon.vue +17 -3
  298. package/src/components/icons/HomePointIcon.vue +13 -3
  299. package/src/components/icons/HospitalsIcon.vue +6 -1
  300. package/src/components/icons/HouseIcon.vue +20 -3
  301. package/src/components/icons/ImportIcon.vue +21 -3
  302. package/src/components/icons/InfoIcon.vue +19 -3
  303. package/src/components/icons/KebabIcon.vue +12 -2
  304. package/src/components/icons/LabelIcon.vue +21 -3
  305. package/src/components/icons/LayersIcon.vue +12 -2
  306. package/src/components/icons/LegendIcon.vue +13 -3
  307. package/src/components/icons/LineIcon.vue +20 -3
  308. package/src/components/icons/LinkIcon.vue +13 -2
  309. package/src/components/icons/LogoutIcon.vue +13 -2
  310. package/src/components/icons/MapIcon.vue +14 -2
  311. package/src/components/icons/MenuIcon.vue +7 -1
  312. package/src/components/icons/MinusIcon.vue +14 -2
  313. package/src/components/icons/ObjectAttributeIcon.vue +13 -2
  314. package/src/components/icons/ObjectSelectIcon.vue +14 -2
  315. package/src/components/icons/ObliqueViewIcon.vue +11 -2
  316. package/src/components/icons/PdfIcon.vue +12 -2
  317. package/src/components/icons/PedestrianIcon.vue +13 -2
  318. package/src/components/icons/PenIcon.vue +13 -3
  319. package/src/components/icons/PlayCircleIcon.vue +20 -3
  320. package/src/components/icons/PlusIcon.vue +14 -3
  321. package/src/components/icons/PoiIcon.vue +17 -3
  322. package/src/components/icons/PointSelectIcon.vue +12 -2
  323. package/src/components/icons/PolygonIcon.vue +7 -1
  324. package/src/components/icons/PresentationModeIcon.vue +13 -2
  325. package/src/components/icons/ProgressIcon.vue +8 -6
  326. package/src/components/icons/QueryIcon.vue +31 -5
  327. package/src/components/icons/RectangleIcon.vue +24 -4
  328. package/src/components/icons/ReturnIcon.vue +13 -2
  329. package/src/components/icons/RewindIcon.vue +13 -2
  330. package/src/components/icons/RotateLeftIcon.vue +13 -2
  331. package/src/components/icons/RotateRightIcon.vue +13 -2
  332. package/src/components/icons/ScreenshotIcon.vue +52 -10
  333. package/src/components/icons/SearchIcon.vue +13 -3
  334. package/src/components/icons/ShadowIcon.vue +14 -3
  335. package/src/components/icons/ShapesIcon.vue +13 -3
  336. package/src/components/icons/ShareIcon.vue +17 -4
  337. package/src/components/icons/SimpleCircleFilledIcon.vue +14 -10
  338. package/src/components/icons/SimpleCircleHalfFilledIcon.vue +6 -1
  339. package/src/components/icons/SimpleCircleOutlinedIcon.vue +14 -10
  340. package/src/components/icons/SkipNextIcon.vue +11 -2
  341. package/src/components/icons/SkipPreviousIcon.vue +17 -3
  342. package/src/components/icons/SplitViewIcon.vue +6 -1
  343. package/src/components/icons/TerrainBoxIcon.vue +12 -2
  344. package/src/components/icons/TextStyleIcon.vue +7 -1
  345. package/src/components/icons/ThreeDimensionsIcon.vue +13 -2
  346. package/src/components/icons/ToolsIcon.vue +12 -2
  347. package/src/components/icons/TouchIcon.vue +13 -2
  348. package/src/components/icons/TrashCanIcon.vue +13 -2
  349. package/src/components/icons/TriangleIcon.vue +6 -2
  350. package/src/components/icons/TwoDimensionsIcon.vue +14 -2
  351. package/src/components/icons/UploadIcon.vue +13 -2
  352. package/src/components/icons/UserProfileIcon.vue +13 -2
  353. package/src/components/icons/UserShareIcon.vue +12 -2
  354. package/src/components/icons/VideoRecorderIcon.vue +16 -3
  355. package/src/components/icons/ViewpointFlightIcon.vue +22 -4
  356. package/src/components/icons/ViewpointIcon.vue +22 -4
  357. package/src/components/icons/Viewshed360Icon.vue +14 -2
  358. package/src/components/icons/ViewshedConeIcon.vue +13 -2
  359. package/src/components/icons/ViewshedIcon.vue +14 -2
  360. package/src/components/icons/WalkingIcon.vue +13 -2
  361. package/src/components/icons/WallIcon.vue +19 -3
  362. package/src/components/icons/WandIcon.vue +129 -21
  363. package/src/components/imageElementInjector.vue +1 -3
  364. package/src/components/lists/VcsActionList.vue +21 -18
  365. package/src/components/lists/VcsList.vue +211 -100
  366. package/src/components/lists/VcsTreeview.vue +30 -26
  367. package/src/components/lists/VcsTreeviewLeaf.vue +23 -23
  368. package/src/components/lists/VcsTreeviewSearchbar.vue +19 -15
  369. package/src/components/notification/VcsBadge.vue +4 -6
  370. package/src/components/notification/VcsTooltip.vue +95 -94
  371. package/src/components/notification/validation.js +1 -1
  372. package/src/components/tables/VcsDataTable.vue +107 -97
  373. package/src/components/tables/VcsTable.vue +38 -30
  374. package/src/contentTree/LayerTree.vue +17 -12
  375. package/src/contentTree/contentTreeCollection.js +49 -23
  376. package/src/contentTree/contentTreeItem.js +58 -17
  377. package/src/contentTree/groupContentTreeItem.js +45 -22
  378. package/src/contentTree/layerContentTreeItem.js +40 -28
  379. package/src/contentTree/layerGroupContentTreeItem.js +51 -39
  380. package/src/contentTree/nodeContentTreeItem.js +18 -7
  381. package/src/contentTree/obliqueCollectionContentTreeItem.js +49 -20
  382. package/src/contentTree/subContentTreeItem.js +13 -4
  383. package/src/contentTree/vcsObjectContentTreeItem.js +24 -15
  384. package/src/contentTree/viewpointContentTreeItem.js +20 -6
  385. package/src/downloadHelper.js +4 -1
  386. package/src/featureInfo/AddressBalloonComponent.vue +11 -16
  387. package/src/featureInfo/BalloonComponent.vue +35 -27
  388. package/src/featureInfo/abstractFeatureInfoView.js +45 -14
  389. package/src/featureInfo/addressBalloonFeatureInfoView.js +19 -7
  390. package/src/featureInfo/balloonFeatureInfoView.js +22 -9
  391. package/src/featureInfo/balloonHelper.js +61 -42
  392. package/src/featureInfo/featureInfo.js +102 -73
  393. package/src/featureInfo/featureInfoInteraction.js +13 -7
  394. package/src/featureInfo/iframeFeatureInfoView.js +3 -1
  395. package/src/featureInfo/tableFeatureInfoView.js +15 -5
  396. package/src/i18n/de.js +5 -2
  397. package/src/i18n/en.js +5 -2
  398. package/src/i18n/i18nCollection.js +182 -155
  399. package/src/init.js +121 -121
  400. package/src/legend/legendHelper.js +11 -6
  401. package/src/legend/styleLegendItem.vue +18 -12
  402. package/src/legend/vcsLegend.vue +16 -18
  403. package/src/manager/buttonManager.js +21 -3
  404. package/src/manager/collectionManager/CollectionComponent.vue +142 -0
  405. package/src/manager/collectionManager/CollectionComponentList.vue +62 -0
  406. package/src/manager/collectionManager/CollectionComponentProvider.vue +38 -0
  407. package/src/manager/collectionManager/CollectionManager.vue +43 -0
  408. package/src/manager/collectionManager/categoryManager.js +83 -0
  409. package/src/manager/collectionManager/collectionComponent.js +453 -0
  410. package/src/manager/collectionManager/collectionManager.js +432 -0
  411. package/src/manager/contextMenu/contextMenuComponent.vue +2 -6
  412. package/src/manager/contextMenu/contextMenuInteraction.js +6 -1
  413. package/src/manager/contextMenu/contextMenuManager.js +37 -22
  414. package/src/manager/navbarManager.js +19 -11
  415. package/src/manager/toolbox/GroupToolboxComponent.vue +27 -28
  416. package/src/manager/toolbox/SelectToolboxComponent.vue +42 -44
  417. package/src/manager/toolbox/ToolboxManager.vue +22 -15
  418. package/src/manager/toolbox/toolboxManager.js +30 -12
  419. package/src/manager/window/WindowComponent.vue +18 -21
  420. package/src/manager/window/WindowComponentHeader.vue +34 -30
  421. package/src/manager/window/WindowManager.vue +33 -22
  422. package/src/manager/window/windowHelper.js +79 -23
  423. package/src/manager/window/windowManager.js +61 -32
  424. package/src/navigation/mapNavCompass.vue +17 -3
  425. package/src/navigation/mapNavigation.vue +93 -48
  426. package/src/navigation/obliqueRotation.vue +6 -8
  427. package/src/navigation/orientationToolsButton.vue +6 -9
  428. package/src/navigation/overviewMap.js +79 -42
  429. package/src/navigation/overviewMapClickedInteraction.js +6 -1
  430. package/src/navigation/tiltSlider.vue +6 -10
  431. package/src/navigation/vcsCompass.vue +1 -9
  432. package/src/navigation/vcsZoomButton.vue +16 -17
  433. package/src/notifier/notifier.js +22 -13
  434. package/src/notifier/notifierComponent.vue +21 -22
  435. package/src/pluginHelper.js +28 -9
  436. package/src/search/resultItem.vue +10 -16
  437. package/src/search/resultsComponent.vue +30 -24
  438. package/src/search/search.js +36 -19
  439. package/src/search/searchComponent.vue +27 -19
  440. package/src/setup.js +9 -9
  441. package/src/state.js +22 -6
  442. package/src/styles/_theming.scss +2 -2
  443. package/src/styles/_typography.scss +2 -3
  444. package/src/styles/main.scss +8 -0
  445. package/src/styles/shades.scss +4 -2
  446. package/src/styles/utils/_border.scss +1 -1
  447. package/src/styles/utils/_display.scss +1 -1
  448. package/src/styles/variables.scss +39 -34
  449. package/src/styles/vcsFont.scss +2 -22
  450. package/src/styles/vcsGrid.scss +9 -0
  451. package/src/uiConfig.js +3 -1
  452. package/src/vcsUiApp.js +227 -66
  453. package/src/vuePlugins/i18n.js +22 -23
  454. package/src/vuePlugins/vuetify.js +4 -1
  455. package/dist/assets/cesium/Workers/PolygonPipeline-844aab0a.js +0 -1345
  456. package/dist/assets/cesium/Workers/Transforms-40229881.js +0 -14696
  457. package/dist/assets/core.9342a1.js +0 -18431
  458. package/dist/assets/index.fd041928.js +0 -1
  459. package/dist/assets/ui.c27597.css +0 -5
  460. package/dist/assets/ui.c27597.js +0 -17799
  461. package/plugins/@vcmap-show-case/category-tester/Categories.vue +0 -264
  462. package/plugins/@vcmap-show-case/category-tester/Category.vue +0 -144
  463. package/src/manager/categoryManager/CategoryComponent.vue +0 -124
  464. package/src/manager/categoryManager/CategoryComponentList.vue +0 -57
  465. package/src/manager/categoryManager/CategoryManager.vue +0 -48
  466. package/src/manager/categoryManager/categoryManager.js +0 -588
  467. package/start.js +0 -9
  468. /package/dist/assets/cesium/Workers/{GeometryOffsetAttribute-04332ce7.js → GeometryOffsetAttribute-9ad0019c.js} +0 -0
  469. /package/{src/assets/favicon-128.png → dist/assets/favicon-128.4c4ce5.png} +0 -0
  470. /package/{src/assets/favicon-180.png → dist/assets/favicon-180.5b99c0.png} +0 -0
  471. /package/{src/assets/favicon-192.png → dist/assets/favicon-192.0e205e.png} +0 -0
  472. /package/{src/assets/favicon-32.png → dist/assets/favicon-32.6b9add.png} +0 -0
  473. /package/dist/assets/{favicon.decf54cc.svg → favicon.d5ec97.svg} +0 -0
  474. /package/dist/assets/font/{TitilliumWeb-Regular.woff2 → TitilliumWeb-Regular.9ca076.woff2} +0 -0
  475. /package/{src/assets/logo-mobile.svg → dist/assets/logo-mobile.2d10a6.svg} +0 -0
  476. /package/{src/assets/logo.svg → dist/assets/logo.27089a.svg} +0 -0
  477. /package/{src → public}/assets/favicon.svg +0 -0
  478. /package/{src → public}/assets/font/OFL.txt +0 -0
  479. /package/{src → public}/assets/font/TitilliumWeb-Regular.woff2 +0 -0
@@ -1,64 +1,46 @@
1
1
  <template>
2
- <div
3
- class="d-contents"
4
- >
2
+ <div class="d-contents">
5
3
  <vcs-treeview-searchbar
6
4
  v-if="searchable"
7
5
  :placeholder="searchbarPlaceholder"
8
6
  v-model="query"
9
7
  />
10
- <v-list
11
- dense
12
- >
13
- <v-list-item
14
- v-if="showTitle"
15
- class="font-weight-bold"
16
- >
17
- <v-list-item-action
18
- v-if="selectable"
19
- >
8
+ <v-list dense>
9
+ <v-list-item v-if="showTitle" class="font-weight-bold">
10
+ <v-list-item-action v-if="selectable">
20
11
  <v-spacer v-if="singleSelect" />
21
12
  <v-icon
22
13
  v-else-if="selected.length === renderingItems.length"
23
14
  @click="clear"
24
15
  >
25
- mdi-check-circle-outline
16
+ mdi-check-circle
26
17
  </v-icon>
27
18
  <v-icon
28
- v-else-if="selected.length > 0 && selected.length < renderingItems.length"
19
+ v-else-if="
20
+ selected.length > 0 && selected.length < renderingItems.length
21
+ "
29
22
  @click="selectAll()"
30
23
  >
31
- mdi-minus-circle-outline
32
- </v-icon>
33
- <v-icon
34
- v-else
35
- @click="selectAll()"
36
- >
37
- mdi-circle-outline
24
+ mdi-minus-circle
38
25
  </v-icon>
26
+ <v-icon v-else @click="selectAll()"> mdi-circle-outline </v-icon>
39
27
  </v-list-item-action>
40
-
41
28
  <v-list-item-content>
42
29
  <v-icon v-if="icon">
43
30
  {{ icon }}
44
31
  </v-icon>
45
-
46
- <VcsTooltip
47
- :tooltip="tooltip || title"
48
- >
32
+ <VcsTooltip :tooltip="$t(listHeaderTooltip)">
49
33
  <template #activator="{ on, attrs }">
50
- <v-list-item-title v-bind="attrs" v-on="on">
34
+ <v-list-item-title v-bind="attrs" v-on="on" ref="listHeader">
51
35
  {{ $t(title) }}
52
36
  </v-list-item-title>
53
37
  </template>
54
38
  </VcsTooltip>
55
-
56
39
  <vcs-action-button-list
57
40
  v-if="actions?.length > 0"
58
41
  :actions="actions"
59
42
  :block-overflow="true"
60
43
  :overflow-count="actionButtonListOverflowCount"
61
- small
62
44
  />
63
45
  </v-list-item-content>
64
46
  </v-list-item>
@@ -69,58 +51,65 @@
69
51
  :disabled="item.disabled"
70
52
  @mousedown.shift="$event.preventDefault()"
71
53
  @mouseover="hovering = index"
72
- @mouseout="hovering = null"
73
- :class="{ 'v-list-item__lighten_even': lightenEven, 'v-list-item__lighten_odd': !lightenEven }"
54
+ @mouseout="hovering = undefined"
55
+ :draggable="isDraggable"
56
+ @dragstart="drag($event, item, index)"
57
+ @mouseup="drop($event, index)"
58
+ :class="{
59
+ 'v-list-item__lighten_even': lightenEven,
60
+ 'v-list-item__lighten_odd': !lightenEven,
61
+ 'vcs-draggable-item': isDraggable,
62
+ 'v-list-item__dragged': dragging === index,
63
+ 'border-bottom': borderBottom(index),
64
+ 'border-top': borderTop(index),
65
+ }"
74
66
  >
75
- <v-list-item-action
76
- v-if="selectable"
77
- >
78
- <v-icon
79
- v-if="selected.includes(item)"
80
- @click="remove(item)"
81
- >
82
- mdi-check-circle-outline
67
+ <v-list-item-action v-if="selectable">
68
+ <v-icon v-if="selected.includes(item)" @click="remove(item)">
69
+ mdi-check-circle
83
70
  </v-icon>
84
71
  <v-icon
85
- v-else-if="hovering === index || (!singleSelect && selected.length > 0)"
72
+ v-else-if="
73
+ hovering === index || (!singleSelect && selected.length > 0)
74
+ "
86
75
  @click="singleSelect ? select(item, $event) : add(item)"
87
76
  >
88
77
  mdi-circle-outline
89
78
  </v-icon>
90
- <v-icon
91
- v-else
92
- @click="select(item, $event)"
93
- >
79
+ <v-icon v-else @click="select(item, $event)">
94
80
  mdi-circle-small
95
81
  </v-icon>
96
82
  </v-list-item-action>
97
-
98
83
  <v-list-item-content
99
- :class="[selectable ? 'cursor-pointer' : '']"
84
+ :class="[selectable && !isDraggable ? 'cursor-pointer' : '']"
100
85
  @click="select(item, $event)"
101
86
  >
102
87
  <v-icon v-if="item.icon">
103
88
  {{ item.icon }}
104
89
  </v-icon>
105
-
106
90
  <VcsTooltip
107
- :tooltip="item.tooltip || item.title"
91
+ :tooltip="
92
+ dragging !== undefined
93
+ ? undefined
94
+ : $t(item.tooltip || overflowTitle(index, item.title))
95
+ "
108
96
  >
109
97
  <template #activator="{ on, attrs }">
110
- <v-list-item-title v-bind="attrs" v-on="on">
98
+ <v-list-item-title v-bind="attrs" v-on="on" ref="titles">
111
99
  {{ $t(item.title) }}
112
100
  </v-list-item-title>
113
101
  </template>
114
102
  </VcsTooltip>
115
-
103
+ </v-list-item-content>
104
+ <VcsBadge v-if="item.hasUpdate" :color="'warning'" />
105
+ <v-list-item-action>
116
106
  <vcs-action-button-list
117
107
  v-if="item.actions?.length > 0"
118
108
  :actions="item.actions"
119
109
  :block-overflow="true"
120
110
  :overflow-count="actionButtonListOverflowCount"
121
- small
122
111
  />
123
- </v-list-item-content>
112
+ </v-list-item-action>
124
113
  </v-list-item>
125
114
  </v-list>
126
115
  </div>
@@ -140,6 +129,7 @@
140
129
  import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
141
130
  import VcsTooltip from '../notification/VcsTooltip.vue';
142
131
  import VcsTreeviewSearchbar from './VcsTreeviewSearchbar.vue';
132
+ import VcsBadge from '../notification/VcsBadge.vue';
143
133
 
144
134
  /**
145
135
  * @typedef {Object} VcsListItem
@@ -148,14 +138,21 @@
148
138
  * @property {boolean} [disabled] - Whether this item should be displayed as disabled.
149
139
  * @property {string} title - The title to be displayed
150
140
  * @property {string} [tooltip]
151
- * @property {string|HTMLCanvasElement|HTMLImageElement|undefined} [icon] - An optional icon to display with this item. Can be an URL or HTMLElement.
141
+ * @property {string|HTMLCanvasElement|HTMLImageElement|undefined} [icon] - An optional icon to display with this item. Can be a URL or HTMLElement.
142
+ * @property {boolean} [hasUpdate] - Shows badge, if item has an update.
152
143
  * @property {Array<VcsAction>} [actions]
153
144
  * @property {function(boolean):void} [selectionChanged] - A callback called if the selection changes with the current selection status. called before value update
154
145
  */
155
146
 
156
147
  /**
157
- * The VCS list is intended to render items. Items can be selectable (by default, more then one) or only a single item can
158
- * be selected. If items are disabled they cannot selected. Items which are not visible are not rendered. This items can
148
+ * @typedef {Object} ItemMovedEvent
149
+ * @property {VcsListItem} item
150
+ * @property {number} targetIndex
151
+ */
152
+
153
+ /**
154
+ * The VCS list is intended to render items. Items can be selectable (by default, more than one) or only a single item can
155
+ * be selected. If items are disabled they cannot be selected. Items which are not visible are not rendered. These items can
159
156
  * no longer be selected or deselected either. Making a selected item invisible can lead to undefined behavior
160
157
  * in the selection state.
161
158
  * Clicking an unselected item selects it.
@@ -165,6 +162,7 @@
165
162
  * Clicking with SHIFT will create a selection range, starting or ending with the first item in the list
166
163
  * or the last normally selected item (not the last item clicked with CTRL for instance).
167
164
  * @vue-prop {Array<VcsListItem>} items
165
+ * @vue-prop {boolean} [draggable=false]
168
166
  * @vue-prop {boolean} [selectable=false]
169
167
  * @vue-prop {boolean} [singleSelect=false]
170
168
  * @vue-prop {Array<VcsListItem>} [value=[]] - the initial items to be selected.
@@ -176,10 +174,12 @@
176
174
  * @vue-prop {string} [icon] - icon to prepend to the list title
177
175
  * @vue-prop {string} [tooltip] - tooltip to render on the list title
178
176
  * @vue-prop {Array<VcsAction>} [actions] - actions to render in the list title
177
+ * @vue-event {ItemMovedEvent} item-moved - event triggered after item was dragged and is dropped
179
178
  */
180
179
  export default {
181
180
  name: 'VcsList',
182
181
  components: {
182
+ VcsBadge,
183
183
  VcsTreeviewSearchbar,
184
184
  VcsActionButtonList,
185
185
  VcsTooltip,
@@ -192,11 +192,14 @@
192
192
  VSpacer,
193
193
  },
194
194
  props: {
195
- /** @type {Array<VcsListItem>} */
196
195
  items: {
197
196
  type: Array,
198
197
  required: true,
199
198
  },
199
+ draggable: {
200
+ type: Boolean,
201
+ default: false,
202
+ },
200
203
  selectable: {
201
204
  type: Boolean,
202
205
  default: false,
@@ -205,7 +208,6 @@
205
208
  type: Boolean,
206
209
  default: false,
207
210
  },
208
- /** @type {Array<VcsListItem>} */
209
211
  value: {
210
212
  type: Array,
211
213
  default: () => [],
@@ -253,53 +255,117 @@
253
255
  const selected = ref(props.value);
254
256
  /** @type {import("vue").Ref<string>} */
255
257
  const query = ref('');
256
- const hovering = ref(null);
258
+ /** @type {import("vue").Ref<number|undefined>} */
259
+ const hovering = ref(undefined);
260
+ /** @type {import("vue").Ref<number|undefined>} */
261
+ const dragging = ref(undefined);
262
+ const borderBottom = (index) => {
263
+ return (
264
+ dragging.value !== undefined &&
265
+ dragging.value < index &&
266
+ index === hovering.value
267
+ );
268
+ };
269
+ const borderTop = (index) => {
270
+ return (
271
+ dragging.value !== undefined &&
272
+ dragging.value > index &&
273
+ index === hovering.value
274
+ );
275
+ };
257
276
  const lightenEven = computed(() => {
258
277
  return !(!props.searchable && !props.showTitle);
259
278
  });
260
279
  let firstSelected = null;
280
+ const titles = ref([]);
281
+ const listHeader = ref(null);
261
282
 
262
- watch(props, () => {
263
- if (selected.value !== props.value) {
264
- selected.value = props.value;
265
- }
266
- if (props.singleSelect && selected.value.length > 1) {
267
- selected.value
268
- .filter((i, index) => index && i.selectionChanged)
269
- .forEach(i => i.selectionChanged(false));
270
- selected.value = [selected.value[0]];
271
- emit('input', selected);
272
- }
273
- if (!props.selectable && selected.value.length > 0) {
274
- selected.value
275
- .filter(i => i.selectionChanged)
276
- .forEach(i => i.selectionChanged(false));
277
- selected.value = [];
278
- emit('input', selected);
279
- }
280
- if (!props.searchable) {
281
- query.value = '';
282
- }
283
- }, { immediate: true, deep: false });
283
+ watch(
284
+ props,
285
+ () => {
286
+ if (selected.value !== props.value) {
287
+ selected.value = props.value;
288
+ }
289
+ if (props.singleSelect && selected.value.length > 1) {
290
+ selected.value
291
+ .filter((i, index) => index && i.selectionChanged)
292
+ .forEach((i) => i.selectionChanged(false));
293
+ selected.value = [selected.value[0]];
294
+ emit('input', selected);
295
+ }
296
+ if (!props.selectable && selected.value.length > 0) {
297
+ selected.value
298
+ .filter((i) => i.selectionChanged)
299
+ .forEach((i) => i.selectionChanged(false));
300
+ selected.value = [];
301
+ emit('input', selected);
302
+ }
303
+ if (!props.searchable) {
304
+ query.value = '';
305
+ }
306
+ },
307
+ { immediate: true, deep: false },
308
+ );
284
309
 
285
310
  const vm = getCurrentInstance().proxy;
286
311
  /** @type {function(VcsListItem, string):boolean} */
287
- const filterPredicate = inject('filterPredicate', (item, queryString = '') => {
288
- const translatedTitle = vm.$t(item.title);
289
- return translatedTitle.toLocaleLowerCase().includes(queryString.toLocaleLowerCase());
290
- });
312
+ const filterPredicate = inject(
313
+ 'filterPredicate',
314
+ (item, queryString = '') => {
315
+ const translatedTitle = vm.$t(item.title);
316
+ return translatedTitle
317
+ .toLocaleLowerCase()
318
+ .includes(queryString.toLocaleLowerCase());
319
+ },
320
+ );
321
+
322
+ /**
323
+ * @type {VcsListItem|null}
324
+ */
325
+ let draggedItem = null;
326
+
327
+ /**
328
+ * @param {MouseEvent} e
329
+ * @param {number} targetIndex
330
+ */
331
+ function drop(e, targetIndex) {
332
+ if (draggedItem !== null && targetIndex !== undefined) {
333
+ emit('item-moved', { item: draggedItem, targetIndex });
334
+ }
335
+ draggedItem = null;
336
+ dragging.value = undefined;
337
+ document.removeEventListener('mouseup', drop);
338
+ }
339
+
340
+ /**
341
+ * @param {MouseEvent} e
342
+ * @param {VcsListItem} item
343
+ * @param {number} index
344
+ */
345
+ function drag(e, item, index) {
346
+ dragging.value = index;
347
+ draggedItem = item;
348
+ e.dataTransfer.effectAllowed = 'move';
349
+ document.addEventListener('mouseup', drop);
350
+ }
291
351
 
292
352
  return {
293
353
  query,
294
354
  hovering,
355
+ dragging,
356
+ isDraggable: computed(() => {
357
+ return query.value === '' && props.draggable;
358
+ }),
359
+ borderBottom,
360
+ borderTop,
295
361
  lightenEven,
296
362
  /**
297
363
  * @type {import("vue").ComputedRef<Array<VcsListItem>>}
298
364
  */
299
365
  renderingItems: computed(() => {
300
- let items = props.items.filter(i => i.visible !== false);
366
+ let items = props.items.filter((i) => i.visible !== false);
301
367
  if (query.value) {
302
- items = items.filter(i => filterPredicate(i, query.value));
368
+ items = items.filter((i) => filterPredicate(i, query.value));
303
369
  }
304
370
  return items;
305
371
  }),
@@ -337,30 +403,36 @@
337
403
  Math.max(firstIndex, currentIndex) + 1,
338
404
  );
339
405
  currentSelection.forEach((oldItem) => {
340
- if (oldItem.selectionChanged && !selected.value.includes(oldItem)) {
406
+ if (
407
+ oldItem.selectionChanged &&
408
+ !selected.value.includes(oldItem)
409
+ ) {
341
410
  oldItem.selectionChanged(false);
342
411
  }
343
412
  });
344
413
  selected.value.forEach((newItem) => {
345
- if (newItem.selectionChanged && !currentSelection.includes(newItem)) {
414
+ if (
415
+ newItem.selectionChanged &&
416
+ !currentSelection.includes(newItem)
417
+ ) {
346
418
  newItem.selectionChanged(true);
347
419
  }
348
420
  });
349
421
  } else {
350
422
  selected.value
351
- .filter(i => i !== item && i.selectionChanged)
352
- .forEach(i => i.selectionChanged(false));
423
+ .filter((i) => i !== item && i.selectionChanged)
424
+ .forEach((i) => i.selectionChanged(false));
353
425
  selected.value = [];
354
426
  firstSelected = null;
355
427
  }
356
428
  } else if (selected.value.includes(item)) {
357
429
  if (event.ctrlKey) {
358
430
  item.selectionChanged?.(false);
359
- selected.value = selected.value.filter(i => i !== item);
431
+ selected.value = selected.value.filter((i) => i !== item);
360
432
  } else if (selected.value.length > 1) {
361
433
  selected.value
362
- .filter(i => i !== item && i.selectionChanged)
363
- .forEach(i => i.selectionChanged(false));
434
+ .filter((i) => i !== item && i.selectionChanged)
435
+ .forEach((i) => i.selectionChanged(false));
364
436
  selected.value = [item];
365
437
  firstSelected = item;
366
438
  } else {
@@ -376,8 +448,8 @@
376
448
  }
377
449
  } else {
378
450
  selected.value
379
- .filter(i => i !== item && i.selectionChanged)
380
- .forEach(i => i.selectionChanged(false));
451
+ .filter((i) => i !== item && i.selectionChanged)
452
+ .forEach((i) => i.selectionChanged(false));
381
453
  item.selectionChanged?.(true);
382
454
  selected.value = [item];
383
455
  firstSelected = item;
@@ -401,14 +473,14 @@
401
473
  remove(item) {
402
474
  if (selected.value.includes(item) && !item.disabled) {
403
475
  item.selectionChanged?.(false);
404
- selected.value = selected.value.filter(i => i !== item);
476
+ selected.value = selected.value.filter((i) => i !== item);
405
477
  emit('input', selected.value);
406
478
  }
407
479
  },
408
480
  clear() {
409
481
  selected.value
410
- .filter(i => i.selectionChanged)
411
- .forEach(i => i.selectionChanged(false));
482
+ .filter((i) => i.selectionChanged)
483
+ .forEach((i) => i.selectionChanged(false));
412
484
  selected.value = [];
413
485
  firstSelected = null;
414
486
  emit('input', selected.value);
@@ -423,6 +495,27 @@
423
495
  });
424
496
  emit('input', selected.value);
425
497
  },
498
+ drag,
499
+ drop,
500
+ titles,
501
+ overflowTitle(index, alternative) {
502
+ const elem = titles.value[index];
503
+ if (elem && elem.offsetWidth < elem.scrollWidth) {
504
+ return alternative;
505
+ }
506
+ return '';
507
+ },
508
+ listHeader,
509
+ listHeaderTooltip: computed(() => {
510
+ if (props.tooltip) {
511
+ return props.tooltip;
512
+ }
513
+ const elem = listHeader.value;
514
+ if (elem && elem.offsetWidth < elem.scrollWidth) {
515
+ return props.title;
516
+ }
517
+ return '';
518
+ }),
426
519
  };
427
520
  },
428
521
  };
@@ -441,9 +534,24 @@
441
534
  background-color: var(--v-base-lighten4);
442
535
  }
443
536
  }
537
+ .v-list-item__dragged {
538
+ background-color: var(--v-base-lighten2) !important;
539
+ }
444
540
  .v-list-item {
445
541
  padding: 4px 8px 4px 16px;
446
- &:after{
542
+ &.vcs-draggable-item:hover {
543
+ cursor: grab;
544
+ user-select: none;
545
+ }
546
+ &.border-bottom {
547
+ border-bottom: solid;
548
+ border-bottom-color: var(--v-base-lighten2);
549
+ }
550
+ &.border-top {
551
+ border-top: solid;
552
+ border-top-color: var(--v-base-lighten2);
553
+ }
554
+ &:after {
447
555
  display: none;
448
556
  }
449
557
  &.font-weight-bold {
@@ -455,6 +563,9 @@
455
563
  .v-icon {
456
564
  font-size: 16px;
457
565
  }
566
+ &:last-child {
567
+ min-width: auto;
568
+ }
458
569
  }
459
570
  .v-list-item__content {
460
571
  flex-wrap: nowrap;
@@ -7,7 +7,7 @@
7
7
  />
8
8
  <v-treeview
9
9
  class="vcs-treeview"
10
- v-bind="{...$props, ...$attrs}"
10
+ v-bind="{ ...$props, ...$attrs }"
11
11
  v-on="$listeners"
12
12
  expand-icon="mdi-chevron-down"
13
13
  item-key="name"
@@ -25,32 +25,35 @@
25
25
  </div>
26
26
  </template>
27
27
  <style lang="scss" scoped>
28
- .vcs-treeview {
29
- ::v-deep {
30
- // Root Level Entries should be 40px high
31
- > .v-treeview-node > .v-treeview-node__root {
32
- min-height: 40px;
33
- }
34
- // Border around root nodes with children included
35
- > .v-treeview-node:not(:last-child) {
36
- border-bottom: 1px solid var(--v-base-lighten2);
37
- }
38
- // Only Root Entries have a bold font
39
- > .v-treeview-node > .v-treeview-node__root > .v-treeview-node__content > .v-treeview-node__label {
40
- font-weight: 700;
41
- }
42
- // remove ripple effect from expand icon
43
- .v-icon.v-icon {
44
- &::after{
45
- background-color: transparent;
28
+ .vcs-treeview {
29
+ ::v-deep {
30
+ // Root Level Entries should be 40px high
31
+ > .v-treeview-node > .v-treeview-node__root {
32
+ min-height: 40px;
33
+ }
34
+ // Border around root nodes with children included
35
+ > .v-treeview-node:not(:last-child) {
36
+ border-bottom: 1px solid var(--v-base-lighten2);
37
+ }
38
+ // Only Root Entries have a bold font
39
+ > .v-treeview-node
40
+ > .v-treeview-node__root
41
+ > .v-treeview-node__content
42
+ > .v-treeview-node__label {
43
+ font-weight: 700;
44
+ }
45
+ // remove ripple effect from expand icon
46
+ .v-icon.v-icon {
47
+ &::after {
48
+ background-color: transparent;
49
+ }
50
+ }
51
+ // Toggle Item Chevron with should be 16px
52
+ .v-treeview-node__toggle {
53
+ width: 16px;
46
54
  }
47
- }
48
- // Toggle Item Chevron with should be 16px
49
- .v-treeview-node__toggle {
50
- width: 16px;
51
55
  }
52
56
  }
53
- }
54
57
  </style>
55
58
 
56
59
  <script>
@@ -95,7 +98,9 @@
95
98
  */
96
99
  const handleFilter = (treeNode, q = '') => {
97
100
  const translatedTitle = vm.$t(treeNode.title);
98
- return translatedTitle.toLocaleLowerCase().includes(q.toLocaleLowerCase());
101
+ return translatedTitle
102
+ .toLocaleLowerCase()
103
+ .includes(q.toLocaleLowerCase());
99
104
  };
100
105
 
101
106
  return {
@@ -105,4 +110,3 @@
105
110
  },
106
111
  };
107
112
  </script>
108
-
@@ -1,32 +1,21 @@
1
1
  <template>
2
- <div
3
- class="d-flex flex-row align-center"
4
- v-if="item"
5
- >
6
- <div
7
- class="position-relative col-8 pa-0 d-flex align-center"
8
- >
9
- <span
10
- v-if="item.icon"
11
- class="d-inline-flex"
12
- >
13
- <v-icon
14
- v-if="isStringIcon"
15
- v-text="item.icon"
16
- :size="16"
17
- class="mr-1"
18
- />
2
+ <div class="d-flex flex-row align-center" v-if="item">
3
+ <div class="position-relative col-8 pa-0 d-flex align-center">
4
+ <span v-if="item.icon" class="d-inline-flex">
5
+ <v-icon v-if="isStringIcon" :size="16" class="mr-1">
6
+ {{ item.icon }}
7
+ </v-icon>
19
8
  <ImageElementInjector :element="item.icon" v-else />
20
9
  </span>
21
- <VcsTooltip
22
- :tooltip="item.tooltip || item.title"
23
- >
10
+ <VcsTooltip :tooltip="tooltip">
24
11
  <template #activator="{ on, attrs }">
25
12
  <span
26
13
  v-bind="attrs"
27
14
  v-on="on"
28
15
  class="d-inline-block text-truncate"
29
- >{{ $t(item.title) }}</span>
16
+ ref="titleElem"
17
+ >{{ $t(item.title) }}</span
18
+ >
30
19
  </template>
31
20
  </VcsTooltip>
32
21
  </div>
@@ -36,7 +25,6 @@
36
25
  :actions="item.actions"
37
26
  :block-overflow="true"
38
27
  :overflow-count="3"
39
- small
40
28
  right
41
29
  class="col-4 pa-0 d-flex align-center"
42
30
  />
@@ -44,7 +32,7 @@
44
32
  </template>
45
33
 
46
34
  <script>
47
- import { computed } from 'vue';
35
+ import { computed, ref } from 'vue';
48
36
  import { VIcon } from 'vuetify/lib';
49
37
  import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
50
38
  import ImageElementInjector from '../imageElementInjector.vue';
@@ -71,10 +59,22 @@
71
59
  },
72
60
  setup(props) {
73
61
  const leaf = computed(() => props.item?.children?.length === 0);
62
+ const titleElem = ref(null);
74
63
 
75
64
  return {
76
65
  isStringIcon: computed(() => typeof props.item.icon === 'string'),
77
66
  leaf,
67
+ titleElem,
68
+ tooltip: computed(() => {
69
+ if (props.item.tooltip) {
70
+ return props.item.tooltip;
71
+ }
72
+ const elem = titleElem.value;
73
+ if (elem && elem.offsetWidth < elem.scrollWidth) {
74
+ return props.item.title;
75
+ }
76
+ return '';
77
+ }),
78
78
  };
79
79
  },
80
80
  };