@kalisio/kdk 2.5.2 → 2.6.0

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 (535) hide show
  1. package/.github/workflows/main.yaml +35 -6
  2. package/client.globe.js +8 -0
  3. package/client.js +8 -0
  4. package/client.map.js +8 -0
  5. package/core/api/hooks/hooks.push.js +3 -2
  6. package/core/api/hooks/hooks.tags.js +56 -0
  7. package/core/api/models/tags.model.mongodb.js +8 -0
  8. package/core/api/services/index.js +33 -2
  9. package/core/api/services/tags/tags.hooks.js +47 -0
  10. package/core/client/api.js +5 -5
  11. package/core/client/components/KActivity.vue +3 -2
  12. package/core/client/components/KChip.vue +2 -2
  13. package/core/client/components/KEditor.vue +3 -1
  14. package/core/client/components/KFollower.vue +4 -4
  15. package/core/client/components/KStore.vue +1 -1
  16. package/core/client/components/KTab.vue +20 -7
  17. package/core/client/components/account/KProfile.vue +9 -25
  18. package/core/client/components/action/KAction.vue +10 -10
  19. package/core/client/components/action/KToggleFullscreenAction.vue +2 -11
  20. package/core/client/components/app/KHome.vue +3 -2
  21. package/core/client/components/collection/KFilter.vue +5 -4
  22. package/core/client/components/collection/KGrid.vue +5 -1
  23. package/core/client/components/collection/KItemsFilter.vue +47 -0
  24. package/core/client/components/collection/KItemsSorter.vue +42 -0
  25. package/core/client/components/collection/KScrollDown.vue +2 -2
  26. package/core/client/components/collection/KSearchFilterControl.vue +3 -2
  27. package/core/client/components/collection/KSorter.vue +33 -37
  28. package/core/client/components/collection/KTagsFilterControl.vue +14 -40
  29. package/core/client/components/collection/KTagsFilterView.vue +10 -45
  30. package/core/client/components/collection/KTimeFilterControl.vue +6 -7
  31. package/core/client/components/collection/KTimeFilterView.vue +13 -22
  32. package/core/client/components/collection/KTimeLine.vue +18 -9
  33. package/core/client/components/form/KColorField.vue +13 -6
  34. package/core/client/components/form/KColorScaleField.vue +7 -12
  35. package/core/client/components/form/KFileField.vue +118 -89
  36. package/core/client/components/form/KForm.vue +30 -18
  37. package/core/client/components/form/KIconField.vue +4 -1
  38. package/core/client/components/form/KNumberField.vue +9 -2
  39. package/core/client/components/form/KSelectField.vue +1 -4
  40. package/core/client/components/form/KTagField.vue +229 -0
  41. package/core/client/components/form/KTextField.vue +4 -0
  42. package/core/client/components/form/KTextareaField.vue +3 -1
  43. package/core/client/components/input/KShapePicker.vue +5 -5
  44. package/core/client/components/layout/KFab.vue +32 -20
  45. package/core/client/components/layout/KPage.vue +11 -6
  46. package/core/client/components/layout/KWindow.vue +5 -0
  47. package/core/client/components/media/index.js +2 -6
  48. package/core/client/components/menu/KMenu.vue +12 -10
  49. package/core/client/components/menu/KSubMenu.vue +12 -12
  50. package/core/client/components/messages/KMessageCard.vue +13 -12
  51. package/core/client/components/messages/KMessageComposer.vue +13 -9
  52. package/core/client/components/messages/KMessagesTimeLine.vue +16 -8
  53. package/core/client/components/tags/KTagFilter.vue +99 -0
  54. package/core/client/components/tags/KTagItem.vue +65 -0
  55. package/core/client/components/tags/KTagManager.vue +198 -0
  56. package/core/client/components/tags/KTagSelection.vue +82 -0
  57. package/core/client/components/time/KDate.vue +3 -17
  58. package/core/client/components/time/KDateTime.vue +1 -1
  59. package/core/client/components/time/KTime.vue +0 -4
  60. package/core/client/composables/collection-filter.js +41 -2
  61. package/core/client/composables/collection.js +3 -3
  62. package/core/client/composables/index.js +1 -0
  63. package/core/client/composables/pwa.js +13 -0
  64. package/core/client/composables/session.js +7 -8
  65. package/core/client/composables/user.js +36 -0
  66. package/core/client/directives/index.js +1 -0
  67. package/core/client/directives/v-drop-file.js +174 -0
  68. package/core/client/document.js +2 -1
  69. package/core/client/exporter.js +17 -3
  70. package/core/client/i18n/core_en.json +34 -7
  71. package/core/client/i18n/core_fr.json +36 -9
  72. package/core/client/i18n.js +26 -11
  73. package/core/client/layout.js +5 -5
  74. package/core/client/mixins/mixin.base-activity.js +8 -5
  75. package/core/client/mixins/mixin.base-editor.js +2 -1
  76. package/core/client/mixins/mixin.base-field.js +3 -2
  77. package/core/client/mixins/mixin.base-item.js +12 -10
  78. package/core/client/mixins/mixin.service.js +3 -1
  79. package/core/client/platform.js +0 -3
  80. package/core/client/readers/reader.json.js +2 -2
  81. package/core/client/utils/index.js +2 -0
  82. package/core/client/utils/utils.collection.js +6 -6
  83. package/core/client/utils/utils.colors.js +46 -19
  84. package/core/client/utils/utils.files.js +19 -0
  85. package/core/client/utils/utils.locale.js +13 -17
  86. package/core/client/utils/utils.services.js +27 -0
  87. package/core/client/utils/utils.shapes.js +2 -2
  88. package/core/client/utils/utils.tags.js +17 -0
  89. package/core/client/utils/utils.tours.js +31 -0
  90. package/core/common/permissions.js +3 -0
  91. package/core/common/schemas/tags.update.json +35 -0
  92. package/core/common/schemas/users.update-profile.json +1 -1
  93. package/core/common/utils.js +5 -5
  94. package/extras/configs/panes.top.js +11 -0
  95. package/extras/configs/stickies.js +1 -1
  96. package/extras/configs/widgets.left.js +13 -1
  97. package/extras/libs/jsts.min.js +8 -0
  98. package/{test/client/core/account.js → extras/tests/core/account.mjs} +4 -4
  99. package/extras/tests/core/api.mjs +114 -0
  100. package/{test/client/core/collection.js → extras/tests/core/collection.mjs} +8 -8
  101. package/{test/client/core/dialogs.js → extras/tests/core/dialogs.mjs} +1 -1
  102. package/extras/tests/core/index.mjs +9 -0
  103. package/{test/client/core/layout.js → extras/tests/core/layout.mjs} +7 -3
  104. package/{test/client/core/runner.js → extras/tests/core/runner.mjs} +3 -3
  105. package/{test/client/core/screens.js → extras/tests/core/screens.mjs} +1 -1
  106. package/{test/client/core/utils.js → extras/tests/core/utils.mjs} +79 -26
  107. package/extras/tests/index.mjs +4 -0
  108. package/{test/client/map/api.js → extras/tests/map/api.mjs} +1 -1
  109. package/{test/client/map/catalog.js → extras/tests/map/catalog.mjs} +18 -18
  110. package/{test/client/map/controls.js → extras/tests/map/controls.mjs} +3 -3
  111. package/extras/tests/map/index.mjs +5 -0
  112. package/{test/client/map/time.js → extras/tests/map/time.mjs} +3 -3
  113. package/{test/client/map/utils.js → extras/tests/map/utils.mjs} +6 -5
  114. package/extras/tours/fab.js +36 -0
  115. package/extras/tours/layout.js +49 -0
  116. package/extras/tours/pane.left.js +78 -0
  117. package/extras/tours/pane.right.js +145 -0
  118. package/extras/tours/pane.top.js +239 -0
  119. package/map/api/config/layers.cjs +28 -13
  120. package/map/api/hooks/hooks.query.js +12 -7
  121. package/map/api/models/catalog.model.mongodb.js +17 -6
  122. package/map/api/services/catalog/catalog.hooks.js +1 -1
  123. package/map/api/services/index.js +18 -1
  124. package/map/api/services/styles/styles.hooks.js +1 -1
  125. package/map/client/cesium/utils/utils.cesium.js +25 -65
  126. package/map/client/cesium/utils/utils.features.js +1 -0
  127. package/map/client/cesium/utils/utils.geojson.js +1 -0
  128. package/map/client/cesium/utils/utils.style.js +7 -6
  129. package/map/client/components/KFeatureEditor.vue +3 -3
  130. package/map/client/components/KFeaturesChart.vue +4 -4
  131. package/map/client/components/KFeaturesFilterEditor.vue +19 -13
  132. package/map/client/components/KFeaturesFilterManager.vue +7 -4
  133. package/map/client/components/KFeaturesTable.vue +2 -2
  134. package/map/client/components/KLayerEditor.vue +10 -6
  135. package/map/client/components/KMeasureTool.vue +2 -1
  136. package/map/client/components/catalog/KBaseLayersSelector.vue +1 -1
  137. package/map/client/components/catalog/KCategoryItem.vue +15 -1
  138. package/map/client/components/catalog/KConnectLayer.vue +2 -2
  139. package/map/client/components/catalog/KCreateView.vue +3 -2
  140. package/map/client/components/catalog/KFilteredLayerItem.vue +26 -6
  141. package/map/client/components/catalog/KImportLayer.vue +6 -3
  142. package/map/client/components/catalog/KLayerCategories.vue +8 -6
  143. package/map/client/components/catalog/KLayerItem.vue +12 -2
  144. package/map/client/components/catalog/KLayersList.vue +180 -0
  145. package/map/client/components/catalog/KLayersPanel.vue +146 -36
  146. package/map/client/components/catalog/KLayersSelector.vue +96 -48
  147. package/map/client/components/catalog/KProjectEditor.vue +0 -9
  148. package/map/client/components/catalog/KProjectSelector.vue +3 -2
  149. package/map/client/components/catalog/KProjectsPanel.vue +23 -8
  150. package/map/client/components/catalog/KViewsPanel.vue +18 -8
  151. package/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  152. package/map/client/components/form/KDirectionField.vue +3 -6
  153. package/map/client/components/form/KLayerCategoryField.vue +2 -2
  154. package/map/client/components/form/KOwsServiceField.vue +25 -24
  155. package/map/client/components/form/KSelectLayersField.vue +4 -4
  156. package/map/client/components/form/KSelectViewsField.vue +4 -4
  157. package/map/client/components/legend/KLayerLegend.vue +11 -2
  158. package/map/client/components/legend/KLegend.vue +44 -51
  159. package/map/client/components/location/KLocationCardSection.vue +6 -7
  160. package/map/client/components/location/KLocationMap.vue +23 -13
  161. package/map/client/components/stickies/KLevelSlider.vue +10 -8
  162. package/map/client/components/stickies/KPosition.vue +5 -0
  163. package/map/client/components/styles/KLayerStyleAction.vue +59 -12
  164. package/map/client/components/styles/KStyleEditor.vue +72 -9
  165. package/map/client/components/styles/KStyleEditorSection.vue +82 -33
  166. package/map/client/components/styles/KStyleManager.vue +126 -60
  167. package/map/client/components/styles/KStylePreview.vue +9 -25
  168. package/map/client/components/styles/KStylePreviewItem.vue +22 -1
  169. package/map/client/components/tools/KSearchTool.vue +1 -1
  170. package/map/client/components/widget/KElevationProfile.vue +20 -17
  171. package/map/client/components/widget/KInformationBox.vue +5 -5
  172. package/map/client/components/widget/KMapillaryViewer.vue +2 -1
  173. package/map/client/components/widget/KTimeSeries.vue +11 -9
  174. package/map/client/composables/highlight.js +5 -1
  175. package/map/client/globe.js +2 -0
  176. package/map/client/i18n/map_en.json +33 -8
  177. package/map/client/i18n/map_fr.json +33 -8
  178. package/map/client/leaflet/GradientPath.js +61 -24
  179. package/map/client/leaflet/ShapeMarker.js +12 -5
  180. package/map/client/leaflet/TiledMeshLayer.js +3 -3
  181. package/map/client/leaflet/utils/utils.geojson.js +66 -8
  182. package/map/client/leaflet/utils/utils.style.js +14 -15
  183. package/map/client/mixins/globe/mixin.base-globe.js +181 -34
  184. package/map/client/mixins/globe/mixin.file-layers.js +3 -0
  185. package/map/client/mixins/globe/mixin.geojson-layers.js +190 -36
  186. package/map/client/mixins/globe/mixin.opendap-layers.js +2 -1
  187. package/map/client/mixins/globe/mixin.style.js +23 -1
  188. package/map/client/mixins/globe/mixin.tooltip.js +14 -2
  189. package/map/client/mixins/map/mixin.base-map.js +146 -58
  190. package/map/client/mixins/map/mixin.edit-layers.js +18 -15
  191. package/map/client/mixins/map/mixin.geojson-layers.js +181 -106
  192. package/map/client/mixins/map/mixin.heatmap-layers.js +3 -2
  193. package/map/client/mixins/map/mixin.map-activity.js +6 -1
  194. package/map/client/mixins/map/mixin.mapillary-layers.js +2 -1
  195. package/map/client/mixins/map/mixin.pmtiles-layers.js +3 -3
  196. package/map/client/mixins/map/mixin.tiled-mesh-layers.js +3 -2
  197. package/map/client/mixins/map/mixin.tiled-wind-layers.js +3 -2
  198. package/map/client/mixins/mixin.activity.js +203 -48
  199. package/map/client/mixins/mixin.context.js +11 -11
  200. package/map/client/mixins/mixin.feature-service.js +11 -9
  201. package/map/client/mixins/mixin.weacast.js +5 -3
  202. package/map/client/readers/reader.geojson.js +3 -1
  203. package/map/client/utils/utils.capture.js +3 -3
  204. package/map/client/utils/utils.catalog.js +9 -5
  205. package/map/client/utils/utils.features.js +120 -54
  206. package/map/client/utils/utils.js +25 -10
  207. package/map/client/utils/utils.layers.js +148 -26
  208. package/map/client/utils/utils.location.js +26 -9
  209. package/map/client/utils/utils.schema.js +2 -1
  210. package/map/client/utils/utils.style.js +53 -9
  211. package/map/common/geotiff-grid-source.js +1 -3
  212. package/map/common/opendap-utils.js +0 -1
  213. package/map/common/tms-utils.js +0 -1
  214. package/map/common/wcs-utils.js +0 -1
  215. package/map/common/wfs-utils.js +0 -1
  216. package/map/common/wms-utils.js +7 -1
  217. package/map/common/wmts-utils.js +0 -1
  218. package/package.json +12 -12
  219. package/scripts/init_runner.sh +3 -3
  220. package/scripts/kash/CHANGELOG.md +27 -0
  221. package/scripts/kash/kash.sh +556 -237
  222. package/scripts/kash/scripts/run_tests.sh +44 -5
  223. package/scripts/setup_workspace.sh +23 -13
  224. package/test/api/core/config/default.cjs +2 -1
  225. package/test/api/core/push.test.js +1 -1
  226. package/test/api/core/tags.test.js +62 -0
  227. package/test/api/map/config/default.cjs +2 -1
  228. package/test/api/map/config/layers.json +9 -0
  229. package/test/api/map/data/openradiation.json +13811 -0
  230. package/test/api/map/grid-sources.test.js +1 -3
  231. package/test/api/map/index.test.js +60 -1
  232. package/test/api/map/style.test.js +30 -1
  233. package/test.api.js +1 -1
  234. package/vite/App.vue +18 -0
  235. package/vite/AppWithGlobe.vue +84 -0
  236. package/vite/GlobeActivity.vue +58 -0
  237. package/vite/MapActivity.vue +63 -0
  238. package/vite/MapActivityWithGlobe.vue +63 -0
  239. package/vite/README.md +169 -0
  240. package/vite/config.js +221 -0
  241. package/vite/index_with_globe.html +50 -0
  242. package/vite/index_with_map.html +50 -0
  243. package/vite/package.json +173 -0
  244. package/vite/quasar.variables.scss +17 -0
  245. package/vite/vite.config.js +166 -0
  246. package/vite/yarn.lock +11641 -0
  247. package/core/client/components/media/KImageViewer.vue +0 -68
  248. package/core/client/components/media/KMarkdownViewer.vue +0 -55
  249. package/core/client/components/media/KMediaBrowser.vue +0 -301
  250. package/coverage/base.css +0 -224
  251. package/coverage/block-navigation.js +0 -87
  252. package/coverage/core/api/application.js.html +0 -1870
  253. package/coverage/core/api/authentication.js.html +0 -874
  254. package/coverage/core/api/db.js.html +0 -793
  255. package/coverage/core/api/hooks/hooks.authentication.js.html +0 -139
  256. package/coverage/core/api/hooks/hooks.authorisations.js.html +0 -955
  257. package/coverage/core/api/hooks/hooks.groups.js.html +0 -229
  258. package/coverage/core/api/hooks/hooks.logger.js.html +0 -163
  259. package/coverage/core/api/hooks/hooks.model.js.html +0 -955
  260. package/coverage/core/api/hooks/hooks.organisations.js.html +0 -541
  261. package/coverage/core/api/hooks/hooks.push.js.html +0 -265
  262. package/coverage/core/api/hooks/hooks.query.js.html +0 -862
  263. package/coverage/core/api/hooks/hooks.schemas.js.html +0 -298
  264. package/coverage/core/api/hooks/hooks.service.js.html +0 -319
  265. package/coverage/core/api/hooks/hooks.storage.js.html +0 -193
  266. package/coverage/core/api/hooks/hooks.users.js.html +0 -595
  267. package/coverage/core/api/hooks/index.html +0 -266
  268. package/coverage/core/api/hooks/index.js.html +0 -115
  269. package/coverage/core/api/index.html +0 -176
  270. package/coverage/core/api/index.js.html +0 -148
  271. package/coverage/core/api/marshall.js.html +0 -448
  272. package/coverage/core/api/models/groups.model.mongodb.js.html +0 -109
  273. package/coverage/core/api/models/index.html +0 -131
  274. package/coverage/core/api/models/messages.model.mongodb.js.html +0 -121
  275. package/coverage/core/api/models/organisations.model.mongodb.js.html +0 -94
  276. package/coverage/core/api/models/tags.model.mongodb.js.html +0 -115
  277. package/coverage/core/api/models/users.model.mongodb.js.html +0 -115
  278. package/coverage/core/api/services/account/account.hooks.js.html +0 -208
  279. package/coverage/core/api/services/account/account.service.js.html +0 -436
  280. package/coverage/core/api/services/account/index.html +0 -131
  281. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
  282. package/coverage/core/api/services/authorisations/authorisations.service.js.html +0 -532
  283. package/coverage/core/api/services/authorisations/index.html +0 -131
  284. package/coverage/core/api/services/databases/databases.hooks.js.html +0 -193
  285. package/coverage/core/api/services/databases/databases.service.js.html +0 -100
  286. package/coverage/core/api/services/databases/index.html +0 -131
  287. package/coverage/core/api/services/groups/groups.hooks.js.html +0 -178
  288. package/coverage/core/api/services/groups/index.html +0 -116
  289. package/coverage/core/api/services/import-export/import-export.hooks.js.html +0 -184
  290. package/coverage/core/api/services/import-export/import-export.service.js.html +0 -118
  291. package/coverage/core/api/services/import-export/index.html +0 -131
  292. package/coverage/core/api/services/index.html +0 -116
  293. package/coverage/core/api/services/index.js.html +0 -520
  294. package/coverage/core/api/services/mailer/index.html +0 -131
  295. package/coverage/core/api/services/mailer/mailer.hooks.js.html +0 -190
  296. package/coverage/core/api/services/mailer/mailer.service.js.html +0 -118
  297. package/coverage/core/api/services/messages/index.html +0 -116
  298. package/coverage/core/api/services/messages/messages.hooks.js.html +0 -199
  299. package/coverage/core/api/services/organisations/index.html +0 -131
  300. package/coverage/core/api/services/organisations/organisations.hooks.js.html +0 -178
  301. package/coverage/core/api/services/organisations/organisations.service.js.html +0 -343
  302. package/coverage/core/api/services/push/index.html +0 -131
  303. package/coverage/core/api/services/push/push.hooks.js.html +0 -190
  304. package/coverage/core/api/services/push/push.service.js.html +0 -121
  305. package/coverage/core/api/services/storage/index.html +0 -131
  306. package/coverage/core/api/services/storage/storage.hooks.js.html +0 -190
  307. package/coverage/core/api/services/storage/storage.service.js.html +0 -172
  308. package/coverage/core/api/services/tags/index.html +0 -116
  309. package/coverage/core/api/services/tags/tags.hooks.js.html +0 -178
  310. package/coverage/core/api/services/users/index.html +0 -131
  311. package/coverage/core/api/services/users/users.hooks.js.html +0 -307
  312. package/coverage/core/api/services/users/users.service.js.html +0 -100
  313. package/coverage/core/api/utils.js.html +0 -118
  314. package/coverage/core/common/errors.js.html +0 -88
  315. package/coverage/core/common/index.html +0 -191
  316. package/coverage/core/common/index.js.html +0 -115
  317. package/coverage/core/common/permissions.js.html +0 -733
  318. package/coverage/core/common/schema.js.html +0 -190
  319. package/coverage/core/common/utils.js.html +0 -226
  320. package/coverage/core/common/utils.offline.js.html +0 -199
  321. package/coverage/favicon.png +0 -0
  322. package/coverage/index.html +0 -461
  323. package/coverage/lcov-report/base.css +0 -224
  324. package/coverage/lcov-report/block-navigation.js +0 -87
  325. package/coverage/lcov-report/core/api/application.js.html +0 -1870
  326. package/coverage/lcov-report/core/api/authentication.js.html +0 -874
  327. package/coverage/lcov-report/core/api/db.js.html +0 -793
  328. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +0 -139
  329. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +0 -955
  330. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +0 -229
  331. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +0 -163
  332. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +0 -955
  333. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +0 -541
  334. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +0 -265
  335. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +0 -862
  336. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +0 -298
  337. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +0 -319
  338. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +0 -193
  339. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +0 -595
  340. package/coverage/lcov-report/core/api/hooks/index.html +0 -266
  341. package/coverage/lcov-report/core/api/hooks/index.js.html +0 -115
  342. package/coverage/lcov-report/core/api/index.html +0 -176
  343. package/coverage/lcov-report/core/api/index.js.html +0 -148
  344. package/coverage/lcov-report/core/api/marshall.js.html +0 -448
  345. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +0 -109
  346. package/coverage/lcov-report/core/api/models/index.html +0 -131
  347. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +0 -121
  348. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +0 -94
  349. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +0 -115
  350. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +0 -115
  351. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +0 -208
  352. package/coverage/lcov-report/core/api/services/account/account.service.js.html +0 -436
  353. package/coverage/lcov-report/core/api/services/account/index.html +0 -131
  354. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
  355. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +0 -532
  356. package/coverage/lcov-report/core/api/services/authorisations/index.html +0 -131
  357. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +0 -193
  358. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +0 -100
  359. package/coverage/lcov-report/core/api/services/databases/index.html +0 -131
  360. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +0 -178
  361. package/coverage/lcov-report/core/api/services/groups/index.html +0 -116
  362. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +0 -184
  363. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +0 -118
  364. package/coverage/lcov-report/core/api/services/import-export/index.html +0 -131
  365. package/coverage/lcov-report/core/api/services/index.html +0 -116
  366. package/coverage/lcov-report/core/api/services/index.js.html +0 -520
  367. package/coverage/lcov-report/core/api/services/mailer/index.html +0 -131
  368. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +0 -190
  369. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +0 -118
  370. package/coverage/lcov-report/core/api/services/messages/index.html +0 -116
  371. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +0 -199
  372. package/coverage/lcov-report/core/api/services/organisations/index.html +0 -131
  373. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +0 -178
  374. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +0 -343
  375. package/coverage/lcov-report/core/api/services/push/index.html +0 -131
  376. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +0 -190
  377. package/coverage/lcov-report/core/api/services/push/push.service.js.html +0 -121
  378. package/coverage/lcov-report/core/api/services/storage/index.html +0 -131
  379. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +0 -190
  380. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +0 -172
  381. package/coverage/lcov-report/core/api/services/tags/index.html +0 -116
  382. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +0 -178
  383. package/coverage/lcov-report/core/api/services/users/index.html +0 -131
  384. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +0 -307
  385. package/coverage/lcov-report/core/api/services/users/users.service.js.html +0 -100
  386. package/coverage/lcov-report/core/api/utils.js.html +0 -118
  387. package/coverage/lcov-report/core/common/errors.js.html +0 -88
  388. package/coverage/lcov-report/core/common/index.html +0 -191
  389. package/coverage/lcov-report/core/common/index.js.html +0 -115
  390. package/coverage/lcov-report/core/common/permissions.js.html +0 -733
  391. package/coverage/lcov-report/core/common/schema.js.html +0 -190
  392. package/coverage/lcov-report/core/common/utils.js.html +0 -226
  393. package/coverage/lcov-report/core/common/utils.offline.js.html +0 -199
  394. package/coverage/lcov-report/favicon.png +0 -0
  395. package/coverage/lcov-report/index.html +0 -461
  396. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +0 -463
  397. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +0 -397
  398. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +0 -1309
  399. package/coverage/lcov-report/map/api/hooks/index.html +0 -161
  400. package/coverage/lcov-report/map/api/hooks/index.js.html +0 -94
  401. package/coverage/lcov-report/map/api/index.html +0 -131
  402. package/coverage/lcov-report/map/api/index.js.html +0 -139
  403. package/coverage/lcov-report/map/api/marshall.js.html +0 -178
  404. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +0 -106
  405. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +0 -127
  406. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +0 -196
  407. package/coverage/lcov-report/map/api/models/index.html +0 -161
  408. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +0 -109
  409. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +0 -274
  410. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +0 -610
  411. package/coverage/lcov-report/map/api/services/alerts/index.html +0 -131
  412. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +0 -313
  413. package/coverage/lcov-report/map/api/services/catalog/index.html +0 -116
  414. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +0 -1510
  415. package/coverage/lcov-report/map/api/services/daptiles/index.html +0 -116
  416. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +0 -310
  417. package/coverage/lcov-report/map/api/services/features/features.service.js.html +0 -544
  418. package/coverage/lcov-report/map/api/services/features/index.html +0 -131
  419. package/coverage/lcov-report/map/api/services/index.html +0 -116
  420. package/coverage/lcov-report/map/api/services/index.js.html +0 -946
  421. package/coverage/lcov-report/map/api/services/projects/index.html +0 -116
  422. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +0 -439
  423. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +0 -466
  424. package/coverage/lcov-report/map/common/errors.js.html +0 -94
  425. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +0 -544
  426. package/coverage/lcov-report/map/common/grid.js.html +0 -1612
  427. package/coverage/lcov-report/map/common/index.html +0 -371
  428. package/coverage/lcov-report/map/common/index.js.html +0 -172
  429. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +0 -556
  430. package/coverage/lcov-report/map/common/moment-utils.js.html +0 -157
  431. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +0 -868
  432. package/coverage/lcov-report/map/common/opendap-utils.js.html +0 -826
  433. package/coverage/lcov-report/map/common/permissions.js.html +0 -124
  434. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +0 -418
  435. package/coverage/lcov-report/map/common/tms-utils.js.html +0 -274
  436. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +0 -364
  437. package/coverage/lcov-report/map/common/wcs-utils.js.html +0 -586
  438. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +0 -1033
  439. package/coverage/lcov-report/map/common/wfs-utils.js.html +0 -574
  440. package/coverage/lcov-report/map/common/wms-utils.js.html +0 -451
  441. package/coverage/lcov-report/map/common/wmts-utils.js.html +0 -547
  442. package/coverage/lcov-report/prettify.css +0 -1
  443. package/coverage/lcov-report/prettify.js +0 -2
  444. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  445. package/coverage/lcov-report/sorter.js +0 -196
  446. package/coverage/lcov.info +0 -10392
  447. package/coverage/map/api/hooks/hooks.catalog.js.html +0 -463
  448. package/coverage/map/api/hooks/hooks.features.js.html +0 -397
  449. package/coverage/map/api/hooks/hooks.query.js.html +0 -1309
  450. package/coverage/map/api/hooks/index.html +0 -161
  451. package/coverage/map/api/hooks/index.js.html +0 -94
  452. package/coverage/map/api/index.html +0 -131
  453. package/coverage/map/api/index.js.html +0 -139
  454. package/coverage/map/api/marshall.js.html +0 -178
  455. package/coverage/map/api/models/alerts.model.mongodb.js.html +0 -106
  456. package/coverage/map/api/models/catalog.model.mongodb.js.html +0 -127
  457. package/coverage/map/api/models/features.model.mongodb.js.html +0 -196
  458. package/coverage/map/api/models/index.html +0 -161
  459. package/coverage/map/api/models/projects.model.mongodb.js.html +0 -109
  460. package/coverage/map/api/services/alerts/alerts.hooks.js.html +0 -274
  461. package/coverage/map/api/services/alerts/alerts.service.js.html +0 -610
  462. package/coverage/map/api/services/alerts/index.html +0 -131
  463. package/coverage/map/api/services/catalog/catalog.hooks.js.html +0 -313
  464. package/coverage/map/api/services/catalog/index.html +0 -116
  465. package/coverage/map/api/services/daptiles/daptiles.service.js.html +0 -1510
  466. package/coverage/map/api/services/daptiles/index.html +0 -116
  467. package/coverage/map/api/services/features/features.hooks.js.html +0 -310
  468. package/coverage/map/api/services/features/features.service.js.html +0 -544
  469. package/coverage/map/api/services/features/index.html +0 -131
  470. package/coverage/map/api/services/index.html +0 -116
  471. package/coverage/map/api/services/index.js.html +0 -946
  472. package/coverage/map/api/services/projects/index.html +0 -116
  473. package/coverage/map/api/services/projects/projects.hooks.js.html +0 -439
  474. package/coverage/map/common/dynamic-grid-source.js.html +0 -466
  475. package/coverage/map/common/errors.js.html +0 -94
  476. package/coverage/map/common/geotiff-grid-source.js.html +0 -544
  477. package/coverage/map/common/grid.js.html +0 -1612
  478. package/coverage/map/common/index.html +0 -371
  479. package/coverage/map/common/index.js.html +0 -172
  480. package/coverage/map/common/meteo-model-grid-source.js.html +0 -556
  481. package/coverage/map/common/moment-utils.js.html +0 -157
  482. package/coverage/map/common/opendap-grid-source.js.html +0 -868
  483. package/coverage/map/common/opendap-utils.js.html +0 -826
  484. package/coverage/map/common/permissions.js.html +0 -124
  485. package/coverage/map/common/time-based-grid-source.js.html +0 -418
  486. package/coverage/map/common/tms-utils.js.html +0 -274
  487. package/coverage/map/common/wcs-grid-source.js.html +0 -364
  488. package/coverage/map/common/wcs-utils.js.html +0 -586
  489. package/coverage/map/common/weacast-grid-source.js.html +0 -1033
  490. package/coverage/map/common/wfs-utils.js.html +0 -574
  491. package/coverage/map/common/wms-utils.js.html +0 -451
  492. package/coverage/map/common/wmts-utils.js.html +0 -547
  493. package/coverage/prettify.css +0 -1
  494. package/coverage/prettify.js +0 -2
  495. package/coverage/sort-arrow-sprite.png +0 -0
  496. package/coverage/sorter.js +0 -196
  497. package/coverage/tmp/coverage-122123-1739872365211-0.json +0 -1
  498. package/coverage/tmp/coverage-122135-1739872365196-0.json +0 -1
  499. package/coverage/tmp/coverage-122146-1739872365184-0.json +0 -1
  500. package/coverage/tmp/coverage-122158-1739872365169-0.json +0 -1
  501. package/coverage/tmp/coverage-122165-1739872365141-0.json +0 -1
  502. package/extras/tours/core/account-profile.js +0 -32
  503. package/extras/tours/core/account.js +0 -143
  504. package/extras/tours/core/add-member.js +0 -75
  505. package/extras/tours/core/add-tag.js +0 -13
  506. package/extras/tours/core/create-group.js +0 -19
  507. package/extras/tours/core/create-organisation.js +0 -19
  508. package/extras/tours/core/create-tag.js +0 -26
  509. package/extras/tours/core/edit-member-role.js +0 -13
  510. package/extras/tours/core/groups.js +0 -65
  511. package/extras/tours/core/join-group.js +0 -13
  512. package/extras/tours/core/login.js +0 -41
  513. package/extras/tours/core/members.js +0 -108
  514. package/extras/tours/core/register.js +0 -61
  515. package/extras/tours/core/send-reset-password.js +0 -14
  516. package/extras/tours/core/tags.js +0 -65
  517. package/extras/tours/map/catalog-panel.js +0 -112
  518. package/extras/tours/map/fab.js +0 -26
  519. package/extras/tours/map/navigation-bar.js +0 -187
  520. package/extras/tours/map/side-nav.js +0 -36
  521. package/test/api/core/test-log-2025-05-26.log +0 -22
  522. package/test/api/map/test-log-2025-05-26.log +0 -12
  523. package/test/client/core/api.js +0 -361
  524. package/test/client/core/index.js +0 -9
  525. package/test/client/index.js +0 -4
  526. package/test/client/map/index.js +0 -5
  527. package/test.client.js +0 -1
  528. /package/{test/client/core/time.js → extras/tests/core/time.mjs} +0 -0
  529. /package/extras/tours/{map/add-layer.js → add-layer.js} +0 -0
  530. /package/extras/tours/{map/catalog-categories.js → catalog-categories.js} +0 -0
  531. /package/extras/tours/{map/connect-layer.js → connect-layer.js} +0 -0
  532. /package/extras/tours/{map/create-layer.js → create-layer.js} +0 -0
  533. /package/extras/tours/{map/create-view.js → create-view.js} +0 -0
  534. /package/extras/tours/{map/import-layer.js → import-layer.js} +0 -0
  535. /package/extras/tours/{map/timeline.js → pane.bottom.js} +0 -0
@@ -0,0 +1,229 @@
1
+ <template>
2
+ <div v-if="readOnly && model" :id="properties.name + '-field'">
3
+ <q-chip :color="model.color" dense>
4
+ {{ model.name }}
5
+ </q-chip>
6
+ </div>
7
+ <q-select v-else
8
+ ref="select"
9
+ :for="properties.name + '-field'"
10
+ :id="properties.name + '-field'"
11
+ v-model="items"
12
+ :label="label"
13
+ :multiple="properties.multiselect"
14
+ autocomplete="off"
15
+ hide-dropdown-icon
16
+ use-input
17
+ :clearable="isClearable()"
18
+ :error-message="errorLabel"
19
+ :error="hasError"
20
+ :disable="disabled"
21
+ bottom-slots
22
+ :options="options"
23
+ @filter="onSearch"
24
+ @update:model-value="onSelected">
25
+ <!-- Value display -->
26
+ <template v-slot:selected-item="scope">
27
+ <KChip
28
+ v-bind="scope.opt"
29
+ :label="scope.opt.name"
30
+ square
31
+ removable
32
+ @remove="scope.removeAtIndex(scope.index)"
33
+ />
34
+ </template>
35
+ <!-- Options display -->
36
+ <template v-slot:option="scope">
37
+ <q-item
38
+ v-bind="scope.itemProps"
39
+ :id="getId(scope.opt)"
40
+ >
41
+ <q-item-section v-if="scope.opt.create" class="col-auto">
42
+ {{ $t('KTagManager.CREATE_TAG_ON_THE_FLY')}}
43
+ </q-item-section>
44
+ <q-item-section>
45
+ <KChip v-bind="scope.opt" :label="scope.opt.name" />
46
+ </q-item-section>
47
+ <q-item-section v-if="!scope.opt.create" class="col-auto">
48
+ <KPanel
49
+ id="tag-actions"
50
+ :content="getActions(scope.opt)"/>
51
+ </q-item-section>
52
+ </q-item>
53
+ </template>
54
+ </q-select>
55
+ </template>
56
+
57
+ <script>
58
+ import _ from 'lodash'
59
+ import logger from 'loglevel'
60
+ import { api } from '../../api.js'
61
+ import { Search } from '../../search'
62
+ import { baseField } from '../../mixins'
63
+ import KChip from '../KChip.vue'
64
+
65
+ export default {
66
+ mixins: [baseField],
67
+ components: {
68
+ KChip
69
+ },
70
+ data () {
71
+ return {
72
+ items: null,
73
+ options: [],
74
+ searchString: ''
75
+ }
76
+ },
77
+ computed: {
78
+ hasSingleService () {
79
+ const services = _.uniqBy(this.properties.services, 'service')
80
+ return services.length === 1
81
+ }
82
+ },
83
+ methods: {
84
+ getServiceForItem (item) {
85
+ return (this.hasSingleService
86
+ ? this.properties.services[0]
87
+ : _.find(this.properties.services, { service: item.service }))
88
+ },
89
+ getId (item) {
90
+ return _.kebabCase(this.getLabel(item))
91
+ },
92
+ getLabel (item) {
93
+ const service = this.getServiceForItem(item)
94
+ return _.get(item, service.field || 'name', '')
95
+ },
96
+ getActions (item) {
97
+ if (item.scope !== 'user') return []
98
+ const actions = [{
99
+ id: 'item-field-actions',
100
+ component: 'menu/KMenu',
101
+ dropdownIcon: 'las la-ellipsis-v',
102
+ actionRenderer: 'item',
103
+ propagate: false,
104
+ dense: true,
105
+ content: [
106
+ {
107
+ id: 'edit-tag',
108
+ icon: 'las la-edit',
109
+ label: 'KTagManager.EDIT_TAG',
110
+ dialog: {
111
+ component: 'KEditor',
112
+ service: 'tags',
113
+ object: item,
114
+ hideButtons: true,
115
+ schema: 'tags.update',
116
+ cancelAction: 'CANCEL',
117
+ baseObject: {
118
+ service: _.get(this.properties, 'field.service'),
119
+ property: _.get(this.properties, 'field.property')
120
+ },
121
+ afterRequest: () => {
122
+ // Trigger a re-render of the select component
123
+ this.$refs.select.updateInputValue(this.searchString)
124
+ return { isOk: true }
125
+ },
126
+ okAction: {
127
+ id: 'ok-button',
128
+ label: 'APPLY',
129
+ handler: 'apply'
130
+ }
131
+ }
132
+ },
133
+ {
134
+ id: 'delete-tag',
135
+ icon: 'las la-trash',
136
+ label: 'KTagManager.DELETE_TAG',
137
+ context: item,
138
+ handler: this.deleteTag
139
+ }
140
+ ]
141
+ }]
142
+ return actions
143
+ },
144
+ isClearable () {
145
+ return _.get(this.properties, 'field.clearable', true)
146
+ },
147
+ emptyModel () {
148
+ if (this.properties.multiselect) return []
149
+ return null
150
+ },
151
+ fill (value) {
152
+ this.model = value
153
+ this.items = _.clone(value)
154
+ },
155
+ async onSearch (pattern, update, abort) {
156
+ if (pattern.length < _.get(this.properties, 'minCharsToSearch', 2)) {
157
+ abort()
158
+ return
159
+ }
160
+ this.searchString = pattern
161
+ const results = await Search.query(this.properties.services, pattern)
162
+ update(() => {
163
+ if (this.properties.multiselect) {
164
+ this.options = _.differenceWith(results, this.items, (item1, item2) => {
165
+ return _.get(item1, 'name') === _.get(item2, 'name') && _.get(item1, 'color') === _.get(item2, 'color')
166
+ })
167
+ } else this.options = results
168
+
169
+ // Add the current pattern as an option if it is not already present
170
+ const hasInvalidMinLength = pattern.length < _.get(this.properties, 'minLength', 0)
171
+ const hasInvalidMaxLength = pattern.length > _.get(this.properties, 'maxLength', 256)
172
+ if (hasInvalidMinLength || hasInvalidMaxLength) return
173
+ this.options = _.filter(this.options, (item) => !item.create)
174
+ if (pattern !== '' && !_.find(results, { name: pattern })) {
175
+ this.options.push({
176
+ name: pattern,
177
+ color: 'grey',
178
+ create: true
179
+ })
180
+ }
181
+ })
182
+ },
183
+ async onSelected (value) {
184
+ if (value) {
185
+ this.model = this.items
186
+ } else this.model = this.emptyModel()
187
+ this.options = []
188
+ this.$refs.select.updateInputValue('')
189
+ this.onChanged()
190
+
191
+ if (!this.model) return
192
+ for (const item of this.model) {
193
+ if (item.create) {
194
+ const service = api.getService('tags')
195
+
196
+ if (!_.get(this.properties, 'field.service') || !_.get(this.properties, 'field.property')) {
197
+ logger.error('[KDK] KTagField: Missing service or property in field definition for tag creation.')
198
+ return
199
+ }
200
+
201
+ const hasInvalidMinLength = item.name.length < _.get(this.properties, 'minLength', 0)
202
+ const hasInvalidMaxLength = item.name.length > _.get(this.properties, 'maxLength', 256)
203
+ if (hasInvalidMinLength || hasInvalidMaxLength) {
204
+ logger.error(`[KDK] KTagField: Tag name "${item.name}" is invalid. It must be between ${_.get(this.properties, 'minLength', 0)} and ${_.get(this.properties, 'maxLength', 256)} characters long.`)
205
+ return
206
+ }
207
+
208
+ _.defaults(item, {
209
+ service: this.properties.field.service,
210
+ property: this.properties.field.property,
211
+ scope: 'user',
212
+ color: 'grey',
213
+ description: ''
214
+ })
215
+ delete item.create
216
+ await service.create(item)
217
+ }
218
+ }
219
+ },
220
+ async deleteTag (item) {
221
+ const service = api.getService('tags')
222
+ await service.remove(item._id)
223
+ // Trigger a re-render of the select component
224
+ this.$refs.select.updateInputValue(this.searchString)
225
+ }
226
+ }
227
+ }
228
+
229
+ </script>
@@ -14,6 +14,7 @@
14
14
  :error="hasError"
15
15
  :error-message="errorLabel"
16
16
  bottom-slots
17
+ :debounce="debounce"
17
18
  @blur="onChanged"
18
19
  @update:model-value='onChanged'
19
20
  >
@@ -47,6 +48,9 @@ export default {
47
48
  } else {
48
49
  return this.model
49
50
  }
51
+ },
52
+ debounce () {
53
+ return _.get(this.properties, 'field.debounce', 0)
50
54
  }
51
55
  },
52
56
  methods: {
@@ -19,10 +19,12 @@
19
19
  v-model="model"
20
20
  :definitions="definitions"
21
21
  :toolbar="editorToolbar"
22
+ :content-style="{ overflowWrap: 'anywhere' }"
22
23
  content-class="text-grey-8"
23
24
  min-height="5rem"
24
25
  max-height="10rem"
25
- dense />
26
+ dense
27
+ />
26
28
  </div>
27
29
  </template>
28
30
  <!-- Helper -->
@@ -22,16 +22,16 @@
22
22
  <script setup>
23
23
  import _ from 'lodash'
24
24
  import { ref, watch, computed } from 'vue'
25
- import { utils as kdkCoreUtils } from '@kalisio/kdk/core.client'
25
+ import { Shapes } from '../../utils/utils.shapes.js'
26
26
  import KShape from '../media/KShape.vue'
27
27
 
28
28
  // Props
29
29
  const props = defineProps({
30
30
  modelValue: {
31
31
  type: String,
32
- default: 'rect',
32
+ default: 'circle',
33
33
  validator: (value) => {
34
- return _.keys(kdkCoreUtils.Shapes).includes(value)
34
+ return _.concat(['none'], _.keys(Shapes)).includes(value)
35
35
  }
36
36
  },
37
37
  size: {
@@ -45,8 +45,8 @@ const emit = defineEmits(['update:modelValue'])
45
45
 
46
46
  // Data
47
47
  const popupProxyRef = ref(null)
48
- const shape = ref(props.modelValue)
49
- const shapeTypes = _.keys(kdkCoreUtils.Shapes)
48
+ const shapeTypes = _.concat(['none'], _.keys(Shapes))
49
+ const shape = ref(shapeTypes.includes(props.modelValue) ? props.modelValue : 'circle')
50
50
  const shapeSizes = {
51
51
  xs: 14,
52
52
  sm: 16,
@@ -7,18 +7,20 @@
7
7
  id="fab"
8
8
  v-model="isOpened"
9
9
  :icon="icon"
10
- class="k-fab"
11
- :vertical-actions-align="actionsAlign"
10
+ :padding="padding"
11
+ vertical-actions-align="center"
12
12
  :direction="direction"
13
- color="primary"
14
- persistent>
13
+ :color="color"
14
+ persistent
15
+ class="k-fab"
16
+ >
15
17
  <!-- Render a grid menu if the number of actions is higher than the expandable limit -->
16
18
  <q-menu v-if="actions.length > expandableLimit" v-model="isOpened" ref="menu" persistent fit anchor="top left" self="bottom right">
17
19
  <div class="q-pa-sm row" style="max-width: 50vw">
18
20
  <template v-for="action in actions" :key="action.id">
19
21
  <div class="col-12 col-sm-6 col-md-4 col-lg-3 col-xl-2">
20
22
  <KAction
21
- color="primary"
23
+ :color="color"
22
24
  v-bind="action"
23
25
  renderer="item"
24
26
  v-on="action.on ? { [action.on.event]: action.on.listener } : {}"
@@ -32,11 +34,11 @@
32
34
  <div v-else>
33
35
  <template v-for="action in actions" :key="action.id">
34
36
  <KAction
35
- color="primary"
37
+ :color="color"
36
38
  v-bind="action"
37
39
  renderer="fab-action"
40
+ :iconRight="alignment === 'left' ? true : false"
38
41
  v-on="action.on ? { [action.on.event]: action.on.listener } : {}"
39
- :iconRight="actionsAlign === 'left' ? true : false"
40
42
  />
41
43
  </template>
42
44
  </div>
@@ -45,9 +47,8 @@
45
47
  Render a non expandable fab if a single action is provided
46
48
  -->
47
49
  <KAction v-else-if="actions.length === 1"
48
- color="primary"
50
+ :color="color"
49
51
  v-bind="actions[0]"
50
- size="1.15rem"
51
52
  renderer="fab"
52
53
  v-on="actions[0].on ? { [actions[0].on.event]: actions[0].on.listener } : {}"
53
54
  />
@@ -57,14 +58,25 @@
57
58
  <script setup>
58
59
  import _ from 'lodash'
59
60
  import { ref, computed } from 'vue'
60
- import { Layout } from '../../layout'
61
61
  import KAction from '../action/KAction.vue'
62
62
 
63
63
  // Props
64
- defineProps({
65
- expandableLimit: {
66
- type: Number,
67
- default: 8
64
+ const props = defineProps({
65
+ content: {
66
+ type: Array,
67
+ default: () => null
68
+ },
69
+ icon: {
70
+ type: String,
71
+ default: 'las la-ellipsis-v'
72
+ },
73
+ color: {
74
+ type: String,
75
+ default: 'primary'
76
+ },
77
+ padding: {
78
+ type: String,
79
+ default: 'md'
68
80
  },
69
81
  direction: {
70
82
  type: String,
@@ -73,27 +85,27 @@ defineProps({
73
85
  return ['up', 'down'].includes(value)
74
86
  }
75
87
  },
76
- actionsAlign: {
88
+ alignment: {
77
89
  type: String,
78
90
  required: true,
79
91
  validator: (value) => {
80
92
  return ['left', 'right'].includes(value)
81
93
  }
94
+ },
95
+ expandableLimit: {
96
+ type: Number,
97
+ default: 8
82
98
  }
83
99
  })
84
100
 
85
101
  // Data
86
- const fab = Layout.getFab()
87
102
  const isOpened = ref(false)
88
103
 
89
104
  // Computed
90
- const icon = computed(() => {
91
- return fab.icon || 'las la-ellipsis-v'
92
- })
93
105
  const actions = computed(() => {
94
106
  const actions = []
95
107
  // Apply filtering
96
- _.forEach(fab.components, (action) => {
108
+ _.forEach(props.content, (action) => {
97
109
  let isVisible = _.get(action, 'visible', true)
98
110
  // Can be a functional call
99
111
  if (typeof isVisible === 'function') {
@@ -109,9 +109,11 @@
109
109
  >
110
110
  <KFab
111
111
  id="fab"
112
- v-if="fab.visible"
112
+ v-if="hasFabComponents && fab.visible"
113
+ :content="fab.components"
114
+ :icon="fab.icon"
113
115
  :direction="fabBehavior.direction"
114
- :actions-align="fabBehavior.actionsAlign"
116
+ :alignment="fabBehavior.alignment"
115
117
  />
116
118
  </q-page-sticky>
117
119
  <!-- left Window -->
@@ -309,12 +311,15 @@ const bottomWindowSize = computed(() => {
309
311
  const bottomWindowStyle = computed(() => {
310
312
  return { maxWidth: bottomWindowSize[0] + 'px', maxHeight: bottomWindowSize[1] + 'px' }
311
313
  })
314
+ const hasFabComponents = computed(() => {
315
+ return !_.isEmpty(fab.components)
316
+ })
312
317
  const fabBehavior = computed(() => {
313
318
  switch (fab.position) {
314
- case 'bottom-right': return { direction: 'up', actionsAlign: 'left' }
315
- case 'bottom-left': return { direction: 'up', actionsAlign: 'right' }
316
- case 'top-right': return { direction: 'down', actionsAlign: 'left' }
317
- case 'top-left': return { direction: 'down', actionsAlign: 'right' }
319
+ case 'bottom-right': return { direction: 'up', alignment: 'left' }
320
+ case 'bottom-left': return { direction: 'up', alignment: 'right' }
321
+ case 'top-right': return { direction: 'down', alignment: 'left' }
322
+ case 'top-left': return { direction: 'down', alignment: 'right' }
318
323
  }
319
324
  })
320
325
  const stickiesComponents = computed(() => {
@@ -89,6 +89,7 @@
89
89
  <div
90
90
  :id="`${placement}-window-resize-grip`"
91
91
  class="row items-center"
92
+ style="position: relative"
92
93
  >
93
94
  <q-icon
94
95
  v-if="currentWindow.controls.resize && currentWindow.state !== 'maximized'"
@@ -97,6 +98,10 @@
97
98
  size="10px"
98
99
  v-touch-pan.prevent.mouse="onResized"
99
100
  />
101
+ <div
102
+ :id="`${placement}-window-magnet`"
103
+ style="position: absolute; right: 8px; bottom: 8px;"
104
+ />
100
105
  </div>
101
106
  </div>
102
107
  </div>
@@ -1,13 +1,9 @@
1
1
  import KColorScale from './KColorScale.vue'
2
- import KImageViewer from './KImageViewer.vue'
3
- import KMarkdownViewer from './KMarkdownViewer.vue'
4
- import KMediaBrowser from './KMediaBrowser.vue'
2
+ import KRibbon from './KRibbon.vue'
5
3
  import KShape from './KShape.vue'
6
4
 
7
5
  export {
8
6
  KColorScale,
9
- KMarkdownViewer,
10
- KMediaBrowser,
11
- KImageViewer,
7
+ KRibbon,
12
8
  KShape
13
9
  }
@@ -28,16 +28,18 @@
28
28
  </div>
29
29
  </div>
30
30
  </template>
31
- <KPanel
32
- id="menu-entries"
33
- :content="content"
34
- :mode="mode"
35
- :context="context"
36
- :filter="filter"
37
- :action-renderer="actionRenderer"
38
- :direction="direction"
39
- class="no-wrap"
40
- />
31
+ <div class="row">
32
+ <KPanel
33
+ id="menu-entries"
34
+ :content="content"
35
+ :mode="mode"
36
+ :context="context"
37
+ :filter="filter"
38
+ :action-renderer="actionRenderer"
39
+ :direction="direction"
40
+ class="no-wrap"
41
+ />
42
+ </div>
41
43
  </q-btn-dropdown>
42
44
  <q-tooltip v-if="enableTooltip && tooltip">
43
45
  {{ tooltip }}
@@ -9,18 +9,18 @@
9
9
  :persistent="persistent"
10
10
  :auto-close="autoClose">
11
11
  <div v-hover="{ enter: onShowMenu, leave: onHideMenuRequested }">
12
- <q-list>
13
- <KPanel
14
- id="submenu-entries"
15
- :content="content"
16
- :mode="mode"
17
- :context="context"
18
- :filter="filter"
19
- :action-renderer="actionRenderer"
20
- :direction="direction"
21
- class="no-wrap"
22
- />
23
- </q-list>
12
+ <div class="row">
13
+ <KPanel
14
+ id="submenu-entries"
15
+ :content="content"
16
+ :mode="mode"
17
+ :context="context"
18
+ :filter="filter"
19
+ :action-renderer="actionRenderer"
20
+ :direction="direction"
21
+ class="no-wrap"
22
+ />
23
+ </div>
24
24
  </div>
25
25
  </q-menu>
26
26
  </KAction>
@@ -96,18 +96,17 @@
96
96
  </template>
97
97
 
98
98
  <script>
99
- import {
100
- Document,
101
- Storage,
102
- composables as kdkCoreComposables,
103
- mixins as kdkCoreMixins
104
- } from '@kalisio/kdk/core.client'
105
99
  import _ from 'lodash'
100
+ import { Document } from '../../document.js'
101
+ import { Storage } from '../../storage.js'
102
+ import { api } from '../../api.js'
103
+ import { useScreen } from '../../composables/index.js'
104
+ import { baseItem } from '../../mixins/index.js'
106
105
  import KTextArea from '../KTextArea.vue'
107
106
  import KCard from '../collection/KCard.vue'
108
107
 
109
108
  export default {
110
- mixins: [kdkCoreMixins.baseItem],
109
+ mixins: [baseItem],
111
110
  props: {
112
111
  header: {
113
112
  type: [Array, Object],
@@ -187,17 +186,19 @@ export default {
187
186
  Storage.export({ file: attachment.name, key, context: this.contextId })
188
187
  },
189
188
  canEditMessage () {
190
- if (this.canEditMessageFn === null) return this.$can('update', 'messages')
191
- return this.canEditMessageFn(this.item)
189
+ const result = this.canEditMessageFn(this.item)
190
+ if (result === null) return api.can('update', 'messages')
191
+ return result
192
192
  },
193
193
  canRemoveMessage () {
194
- if (this.canRemoveMessageFn === null) return this.$can('remove', 'messages')
195
- return this.canRemoveMessageFn(this.item)
194
+ const result = this.canRemoveMessageFn(this.item)
195
+ if (result === null) return api.can('remove', 'messages')
196
+ return result
196
197
  }
197
198
  },
198
199
  setup () {
199
200
  // data
200
- const { dense } = kdkCoreComposables.useScreen()
201
+ const { dense } = useScreen()
201
202
  // expose
202
203
  return {
203
204
  dense
@@ -6,6 +6,7 @@
6
6
  <div class="row justify-between items-center no-wrap">
7
7
  <div :class="{ 'q-pa-xs': $q.screen.xs, 'q-pa-sm': $q.screen.gt.xs, 'col-auto': true }">
8
8
  <q-fab
9
+ id="composer-fab"
9
10
  :icon="getKindIcon(currentType)"
10
11
  :color="getKindColor(currentType)"
11
12
  direction="up"
@@ -42,7 +43,7 @@
42
43
  <!--
43
44
  Editor
44
45
  -->
45
- <div class="q-pa-sm col">
46
+ <div class="q-pa-sm full-width col">
46
47
  <q-editor
47
48
  v-if="editor"
48
49
  :placeholder="$t('KMessageComposer.WRITE_YOUR_MESSAGE')"
@@ -57,6 +58,7 @@
57
58
  v-else
58
59
  :placeholder="$t('KMessageComposer.WRITE_YOUR_MESSAGE')"
59
60
  v-model="body"
61
+ autogrow
60
62
  borderless
61
63
  dense
62
64
  @keydown.enter.prevent="sendMessage"
@@ -87,16 +89,14 @@
87
89
  </template>
88
90
 
89
91
  <script setup>
90
- import {
91
- i18n,
92
- composables as kdkCoreComposables,
93
- Store
94
- } from '@kalisio/kdk/core.client'
95
92
  import config from 'config'
96
93
  import _ from 'lodash'
97
94
  import logger from 'loglevel'
98
95
  import { Notify, useQuasar } from 'quasar'
99
96
  import { computed, ref } from 'vue'
97
+ import { i18n } from '../../i18n.js'
98
+ import { Store } from '../../store.js'
99
+ import { useMessages } from '../../composables/index.js'
100
100
  import KUploader from '../document/KUploader.vue'
101
101
 
102
102
  // Props
@@ -116,6 +116,10 @@ const props = defineProps({
116
116
  canSendMessage: {
117
117
  type: Boolean,
118
118
  default: true
119
+ },
120
+ editorModeByDefault: {
121
+ type: Boolean,
122
+ default: false
119
123
  }
120
124
  })
121
125
 
@@ -123,8 +127,8 @@ const props = defineProps({
123
127
  const $q = useQuasar()
124
128
  const User = Store.get('user')
125
129
  const MessageTypes = props.messageTypes ?? config.messagesActivity.messages
126
- const { createMessage } = kdkCoreComposables.useMessages()
127
- const editor = ref(false)
130
+ const { createMessage } = useMessages()
131
+ const editor = ref(props.editorModeByDefault)
128
132
  const uploaderRef = ref(null)
129
133
  const attachments = ref(null)
130
134
  const currentType = ref(_.head(_.keys(MessageTypes)))
@@ -165,6 +169,7 @@ async function sendMessage () {
165
169
  type: currentType.value,
166
170
  body: body.value,
167
171
  author: _.get(User, 'profile.name'),
172
+ authorId: _.get(User, '_id'),
168
173
  attachments: attachments.value
169
174
  }
170
175
  if (props.baseMessage) _.merge(message, props.baseMessage)
@@ -174,7 +179,6 @@ async function sendMessage () {
174
179
  (_.some(attachments.value, (file) => !file.type) ||
175
180
  _.some(attachments.value, (file) => !file.name))
176
181
  ) {
177
- console.error('Invalid file type')
178
182
  Notify.create({
179
183
  type: 'negative',
180
184
  message: i18n.t('KUploader.INVALID_TYPE')