@kalisio/kdk 2.5.3 → 2.6.1

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 (541) hide show
  1. package/.github/workflows/main.yaml +35 -6
  2. package/.vscode/settings.json +5 -0
  3. package/client.globe.js +8 -0
  4. package/client.js +8 -0
  5. package/client.map.js +8 -0
  6. package/core/api/hooks/hooks.push.js +3 -2
  7. package/core/api/hooks/hooks.tags.js +56 -0
  8. package/core/api/models/tags.model.mongodb.js +8 -0
  9. package/core/api/services/index.js +33 -2
  10. package/core/api/services/tags/tags.hooks.js +47 -0
  11. package/core/client/api.js +5 -5
  12. package/core/client/components/KActivity.vue +3 -2
  13. package/core/client/components/KChip.vue +2 -2
  14. package/core/client/components/KEditor.vue +3 -1
  15. package/core/client/components/KFollower.vue +4 -4
  16. package/core/client/components/KStore.vue +1 -1
  17. package/core/client/components/KTab.vue +20 -7
  18. package/core/client/components/account/KProfile.vue +9 -25
  19. package/core/client/components/action/KAction.vue +10 -10
  20. package/core/client/components/action/KToggleFullscreenAction.vue +2 -11
  21. package/core/client/components/app/KHome.vue +3 -2
  22. package/core/client/components/collection/KFilter.vue +5 -4
  23. package/core/client/components/collection/KGrid.vue +5 -1
  24. package/core/client/components/collection/KItemsFilter.vue +47 -0
  25. package/core/client/components/collection/KItemsSorter.vue +42 -0
  26. package/core/client/components/collection/KScrollDown.vue +2 -2
  27. package/core/client/components/collection/KSearchFilterControl.vue +3 -2
  28. package/core/client/components/collection/KSorter.vue +33 -37
  29. package/core/client/components/collection/KTagsFilterControl.vue +14 -40
  30. package/core/client/components/collection/KTagsFilterView.vue +10 -45
  31. package/core/client/components/collection/KTimeFilterControl.vue +6 -7
  32. package/core/client/components/collection/KTimeFilterView.vue +13 -22
  33. package/core/client/components/collection/KTimeLine.vue +18 -9
  34. package/core/client/components/form/KColorField.vue +13 -6
  35. package/core/client/components/form/KColorScaleField.vue +7 -12
  36. package/core/client/components/form/KFileField.vue +118 -89
  37. package/core/client/components/form/KForm.vue +30 -18
  38. package/core/client/components/form/KIconField.vue +4 -1
  39. package/core/client/components/form/KNumberField.vue +9 -2
  40. package/core/client/components/form/KSelectField.vue +1 -4
  41. package/core/client/components/form/KTagField.vue +229 -0
  42. package/core/client/components/form/KTextField.vue +4 -0
  43. package/core/client/components/form/KTextareaField.vue +3 -1
  44. package/core/client/components/input/KShapePicker.vue +3 -3
  45. package/core/client/components/layout/KFab.vue +32 -20
  46. package/core/client/components/layout/KPage.vue +11 -6
  47. package/core/client/components/layout/KWindow.vue +6 -1
  48. package/core/client/components/media/index.js +2 -6
  49. package/core/client/components/menu/KMenu.vue +12 -10
  50. package/core/client/components/menu/KSubMenu.vue +12 -12
  51. package/core/client/components/messages/KMessageCard.vue +13 -12
  52. package/core/client/components/messages/KMessageComposer.vue +13 -9
  53. package/core/client/components/messages/KMessagesTimeLine.vue +16 -8
  54. package/core/client/components/tags/KTagFilter.vue +99 -0
  55. package/core/client/components/tags/KTagItem.vue +65 -0
  56. package/core/client/components/tags/KTagManager.vue +198 -0
  57. package/core/client/components/tags/KTagSelection.vue +82 -0
  58. package/core/client/components/time/KDate.vue +3 -17
  59. package/core/client/components/time/KDateTime.vue +1 -1
  60. package/core/client/components/time/KTime.vue +0 -4
  61. package/core/client/composables/collection-filter.js +41 -2
  62. package/core/client/composables/collection.js +3 -3
  63. package/core/client/composables/index.js +1 -0
  64. package/core/client/composables/pwa.js +13 -0
  65. package/core/client/composables/session.js +7 -8
  66. package/core/client/composables/user.js +36 -0
  67. package/core/client/directives/index.js +1 -0
  68. package/core/client/directives/v-drop-file.js +174 -0
  69. package/core/client/document.js +2 -1
  70. package/core/client/exporter.js +17 -3
  71. package/core/client/i18n/core_en.json +34 -7
  72. package/core/client/i18n/core_fr.json +36 -9
  73. package/core/client/i18n.js +26 -11
  74. package/core/client/layout.js +5 -5
  75. package/core/client/mixins/mixin.base-activity.js +8 -5
  76. package/core/client/mixins/mixin.base-editor.js +2 -1
  77. package/core/client/mixins/mixin.base-field.js +3 -2
  78. package/core/client/mixins/mixin.base-item.js +12 -10
  79. package/core/client/mixins/mixin.service.js +3 -1
  80. package/core/client/platform.js +0 -3
  81. package/core/client/readers/reader.json.js +2 -2
  82. package/core/client/utils/index.js +2 -0
  83. package/core/client/utils/utils.collection.js +6 -6
  84. package/core/client/utils/utils.colors.js +473 -173
  85. package/core/client/utils/utils.files.js +19 -0
  86. package/core/client/utils/utils.locale.js +13 -17
  87. package/core/client/utils/utils.services.js +27 -0
  88. package/core/client/utils/utils.shapes.js +2 -2
  89. package/core/client/utils/utils.tags.js +17 -0
  90. package/core/client/utils/utils.tours.js +31 -0
  91. package/core/common/permissions.js +3 -0
  92. package/core/common/schemas/tags.update.json +35 -0
  93. package/core/common/schemas/users.update-profile.json +1 -1
  94. package/core/common/utils.js +5 -5
  95. package/coverage/core/api/application.js.html +464 -464
  96. package/coverage/core/api/authentication.js.html +219 -351
  97. package/coverage/core/api/db.js.html +194 -209
  98. package/coverage/core/api/hooks/hooks.authentication.js.html +208 -34
  99. package/coverage/core/api/hooks/hooks.authorisations.js.html +717 -432
  100. package/coverage/core/api/hooks/hooks.groups.js.html +52 -52
  101. package/coverage/core/api/hooks/hooks.logger.js.html +43 -43
  102. package/coverage/core/api/hooks/hooks.model.js.html +300 -312
  103. package/coverage/core/api/hooks/hooks.organisations.js.html +264 -264
  104. package/coverage/core/api/hooks/hooks.push.js.html +107 -119
  105. package/coverage/core/api/hooks/hooks.query.js.html +279 -279
  106. package/coverage/core/api/hooks/hooks.schemas.js.html +135 -135
  107. package/coverage/core/api/hooks/hooks.service.js.html +28 -28
  108. package/coverage/core/api/hooks/hooks.storage.js.html +7 -7
  109. package/coverage/core/api/hooks/hooks.users.js.html +478 -205
  110. package/coverage/core/api/hooks/index.html +132 -102
  111. package/coverage/core/api/hooks/index.js.html +19 -13
  112. package/coverage/core/api/index.html +69 -54
  113. package/coverage/core/api/index.js.html +25 -25
  114. package/coverage/core/api/marshall.js.html +127 -127
  115. package/coverage/core/api/models/groups.model.mongodb.js.html +26 -26
  116. package/coverage/core/api/models/index.html +66 -21
  117. package/coverage/core/api/models/messages.model.mongodb.js.html +27 -39
  118. package/coverage/core/api/models/organisations.model.mongodb.js.html +16 -16
  119. package/coverage/core/api/models/tags.model.mongodb.js.html +30 -30
  120. package/coverage/core/api/models/users.model.mongodb.js.html +11 -11
  121. package/coverage/core/api/services/account/account.hooks.js.html +46 -46
  122. package/coverage/core/api/services/account/account.service.js.html +139 -139
  123. package/coverage/core/api/services/account/index.html +22 -22
  124. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  125. package/coverage/core/api/services/authorisations/authorisations.service.js.html +230 -221
  126. package/coverage/core/api/services/authorisations/index.html +20 -20
  127. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  128. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  129. package/coverage/core/api/services/databases/index.html +1 -1
  130. package/coverage/core/api/services/groups/groups.hooks.js.html +72 -72
  131. package/coverage/core/api/services/groups/index.html +21 -21
  132. package/coverage/core/api/services/import-export/import-export.hooks.js.html +76 -76
  133. package/coverage/core/api/services/import-export/import-export.service.js.html +32 -32
  134. package/coverage/core/api/services/import-export/index.html +32 -32
  135. package/coverage/core/api/services/index.html +21 -21
  136. package/coverage/core/api/services/index.js.html +195 -171
  137. package/coverage/core/api/services/mailer/index.html +32 -32
  138. package/coverage/core/api/services/mailer/mailer.hooks.js.html +80 -80
  139. package/coverage/core/api/services/mailer/mailer.service.js.html +32 -32
  140. package/coverage/core/api/services/messages/index.html +21 -21
  141. package/coverage/core/api/services/messages/messages.hooks.js.html +76 -94
  142. package/coverage/core/api/services/organisations/index.html +32 -32
  143. package/coverage/core/api/services/organisations/organisations.hooks.js.html +72 -72
  144. package/coverage/core/api/services/organisations/organisations.service.js.html +163 -163
  145. package/coverage/core/api/services/push/index.html +32 -32
  146. package/coverage/core/api/services/push/push.hooks.js.html +80 -80
  147. package/coverage/core/api/services/push/push.service.js.html +34 -34
  148. package/coverage/core/api/services/storage/index.html +29 -29
  149. package/coverage/core/api/services/storage/storage.hooks.js.html +80 -80
  150. package/coverage/core/api/services/storage/storage.service.js.html +37 -37
  151. package/coverage/core/api/services/tags/index.html +21 -21
  152. package/coverage/core/api/services/tags/tags.hooks.js.html +72 -72
  153. package/coverage/core/api/services/users/index.html +12 -27
  154. package/coverage/core/api/services/users/users.hooks.js.html +84 -87
  155. package/coverage/core/api/utils.js.html +1 -1
  156. package/coverage/core/common/errors.js.html +2 -2
  157. package/coverage/core/common/index.html +32 -47
  158. package/coverage/core/common/index.js.html +11 -11
  159. package/coverage/core/common/permissions.js.html +579 -264
  160. package/coverage/core/common/schema.js.html +26 -26
  161. package/coverage/core/common/utils.js.html +59 -65
  162. package/coverage/index.html +286 -256
  163. package/coverage/lcov-report/core/api/application.js.html +464 -464
  164. package/coverage/lcov-report/core/api/authentication.js.html +219 -351
  165. package/coverage/lcov-report/core/api/db.js.html +194 -209
  166. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +208 -34
  167. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +717 -432
  168. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +52 -52
  169. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +43 -43
  170. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +300 -312
  171. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +264 -264
  172. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +107 -119
  173. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +279 -279
  174. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +135 -135
  175. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +28 -28
  176. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +7 -7
  177. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +478 -205
  178. package/coverage/lcov-report/core/api/hooks/index.html +132 -102
  179. package/coverage/lcov-report/core/api/hooks/index.js.html +19 -13
  180. package/coverage/lcov-report/core/api/index.html +69 -54
  181. package/coverage/lcov-report/core/api/index.js.html +25 -25
  182. package/coverage/lcov-report/core/api/marshall.js.html +127 -127
  183. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +26 -26
  184. package/coverage/lcov-report/core/api/models/index.html +66 -21
  185. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +27 -39
  186. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +16 -16
  187. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +30 -30
  188. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +11 -11
  189. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +46 -46
  190. package/coverage/lcov-report/core/api/services/account/account.service.js.html +139 -139
  191. package/coverage/lcov-report/core/api/services/account/index.html +22 -22
  192. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +34 -34
  193. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +230 -221
  194. package/coverage/lcov-report/core/api/services/authorisations/index.html +20 -20
  195. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  196. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  197. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  198. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +72 -72
  199. package/coverage/lcov-report/core/api/services/groups/index.html +21 -21
  200. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +76 -76
  201. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +32 -32
  202. package/coverage/lcov-report/core/api/services/import-export/index.html +32 -32
  203. package/coverage/lcov-report/core/api/services/index.html +21 -21
  204. package/coverage/lcov-report/core/api/services/index.js.html +195 -171
  205. package/coverage/lcov-report/core/api/services/mailer/index.html +32 -32
  206. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +80 -80
  207. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +32 -32
  208. package/coverage/lcov-report/core/api/services/messages/index.html +21 -21
  209. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +76 -94
  210. package/coverage/lcov-report/core/api/services/organisations/index.html +32 -32
  211. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +72 -72
  212. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +163 -163
  213. package/coverage/lcov-report/core/api/services/push/index.html +32 -32
  214. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +80 -80
  215. package/coverage/lcov-report/core/api/services/push/push.service.js.html +34 -34
  216. package/coverage/lcov-report/core/api/services/storage/index.html +29 -29
  217. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +80 -80
  218. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +37 -37
  219. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  220. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +72 -72
  221. package/coverage/lcov-report/core/api/services/users/index.html +12 -27
  222. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +84 -87
  223. package/coverage/lcov-report/core/api/utils.js.html +1 -1
  224. package/coverage/lcov-report/core/common/errors.js.html +2 -2
  225. package/coverage/lcov-report/core/common/index.html +32 -47
  226. package/coverage/lcov-report/core/common/index.js.html +11 -11
  227. package/coverage/lcov-report/core/common/permissions.js.html +579 -264
  228. package/coverage/lcov-report/core/common/schema.js.html +26 -26
  229. package/coverage/lcov-report/core/common/utils.js.html +59 -65
  230. package/coverage/lcov-report/index.html +286 -256
  231. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +257 -353
  232. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +218 -218
  233. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +810 -795
  234. package/coverage/lcov-report/map/api/hooks/index.html +54 -54
  235. package/coverage/lcov-report/map/api/hooks/index.js.html +16 -16
  236. package/coverage/lcov-report/map/api/index.html +32 -32
  237. package/coverage/lcov-report/map/api/index.js.html +46 -46
  238. package/coverage/lcov-report/map/api/marshall.js.html +72 -72
  239. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +24 -24
  240. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +27 -69
  241. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +80 -80
  242. package/coverage/lcov-report/map/api/models/index.html +54 -69
  243. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +26 -26
  244. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +136 -136
  245. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +343 -343
  246. package/coverage/lcov-report/map/api/services/alerts/index.html +32 -32
  247. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +160 -178
  248. package/coverage/lcov-report/map/api/services/catalog/index.html +21 -21
  249. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  250. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  251. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +114 -183
  252. package/coverage/lcov-report/map/api/services/features/features.service.js.html +56 -359
  253. package/coverage/lcov-report/map/api/services/features/index.html +31 -31
  254. package/coverage/lcov-report/map/api/services/index.html +21 -21
  255. package/coverage/lcov-report/map/api/services/index.js.html +258 -495
  256. package/coverage/lcov-report/map/api/services/projects/index.html +21 -21
  257. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +237 -237
  258. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  259. package/coverage/lcov-report/map/common/errors.js.html +16 -16
  260. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +267 -270
  261. package/coverage/lcov-report/map/common/grid.js.html +554 -554
  262. package/coverage/lcov-report/map/common/index.html +158 -158
  263. package/coverage/lcov-report/map/common/index.js.html +68 -68
  264. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +73 -73
  265. package/coverage/lcov-report/map/common/moment-utils.js.html +18 -18
  266. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +484 -484
  267. package/coverage/lcov-report/map/common/opendap-utils.js.html +353 -353
  268. package/coverage/lcov-report/map/common/permissions.js.html +36 -42
  269. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +59 -59
  270. package/coverage/lcov-report/map/common/tms-utils.js.html +6 -6
  271. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +190 -190
  272. package/coverage/lcov-report/map/common/wcs-utils.js.html +339 -339
  273. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +345 -345
  274. package/coverage/lcov-report/map/common/wfs-utils.js.html +11 -11
  275. package/coverage/lcov-report/map/common/wms-utils.js.html +8 -8
  276. package/coverage/lcov-report/map/common/wmts-utils.js.html +7 -7
  277. package/coverage/lcov.info +7793 -8564
  278. package/coverage/map/api/hooks/hooks.catalog.js.html +257 -353
  279. package/coverage/map/api/hooks/hooks.features.js.html +218 -218
  280. package/coverage/map/api/hooks/hooks.query.js.html +810 -795
  281. package/coverage/map/api/hooks/index.html +54 -54
  282. package/coverage/map/api/hooks/index.js.html +16 -16
  283. package/coverage/map/api/index.html +32 -32
  284. package/coverage/map/api/index.js.html +46 -46
  285. package/coverage/map/api/marshall.js.html +72 -72
  286. package/coverage/map/api/models/alerts.model.mongodb.js.html +24 -24
  287. package/coverage/map/api/models/catalog.model.mongodb.js.html +27 -69
  288. package/coverage/map/api/models/features.model.mongodb.js.html +80 -80
  289. package/coverage/map/api/models/index.html +54 -69
  290. package/coverage/map/api/models/projects.model.mongodb.js.html +26 -26
  291. package/coverage/map/api/services/alerts/alerts.hooks.js.html +136 -136
  292. package/coverage/map/api/services/alerts/alerts.service.js.html +343 -343
  293. package/coverage/map/api/services/alerts/index.html +32 -32
  294. package/coverage/map/api/services/catalog/catalog.hooks.js.html +160 -178
  295. package/coverage/map/api/services/catalog/index.html +21 -21
  296. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  297. package/coverage/map/api/services/daptiles/index.html +1 -1
  298. package/coverage/map/api/services/features/features.hooks.js.html +114 -183
  299. package/coverage/map/api/services/features/features.service.js.html +56 -359
  300. package/coverage/map/api/services/features/index.html +31 -31
  301. package/coverage/map/api/services/index.html +21 -21
  302. package/coverage/map/api/services/index.js.html +258 -495
  303. package/coverage/map/api/services/projects/index.html +21 -21
  304. package/coverage/map/api/services/projects/projects.hooks.js.html +237 -237
  305. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  306. package/coverage/map/common/errors.js.html +16 -16
  307. package/coverage/map/common/geotiff-grid-source.js.html +267 -270
  308. package/coverage/map/common/grid.js.html +554 -554
  309. package/coverage/map/common/index.html +158 -158
  310. package/coverage/map/common/index.js.html +68 -68
  311. package/coverage/map/common/meteo-model-grid-source.js.html +73 -73
  312. package/coverage/map/common/moment-utils.js.html +18 -18
  313. package/coverage/map/common/opendap-grid-source.js.html +484 -484
  314. package/coverage/map/common/opendap-utils.js.html +353 -353
  315. package/coverage/map/common/permissions.js.html +36 -42
  316. package/coverage/map/common/time-based-grid-source.js.html +59 -59
  317. package/coverage/map/common/tms-utils.js.html +6 -6
  318. package/coverage/map/common/wcs-grid-source.js.html +190 -190
  319. package/coverage/map/common/wcs-utils.js.html +339 -339
  320. package/coverage/map/common/weacast-grid-source.js.html +345 -345
  321. package/coverage/map/common/wfs-utils.js.html +11 -11
  322. package/coverage/map/common/wms-utils.js.html +8 -8
  323. package/coverage/map/common/wmts-utils.js.html +7 -7
  324. package/coverage/tmp/coverage-151166-1723543324307-0.json +1 -0
  325. package/coverage/tmp/coverage-151178-1723543324283-0.json +1 -0
  326. package/coverage/tmp/coverage-151189-1723543324271-0.json +1 -0
  327. package/coverage/tmp/coverage-151201-1723543324248-0.json +1 -0
  328. package/coverage/tmp/coverage-151208-1723543324227-0.json +1 -0
  329. package/extras/configs/panes.top.js +33 -11
  330. package/extras/configs/stickies.js +26 -16
  331. package/extras/configs/widgets.left.js +13 -1
  332. package/extras/libs/jsts.min.js +8 -0
  333. package/{test/client/core/account.js → extras/tests/core/account.mjs} +4 -4
  334. package/extras/tests/core/api.mjs +114 -0
  335. package/{test/client/core/collection.js → extras/tests/core/collection.mjs} +8 -8
  336. package/{test/client/core/dialogs.js → extras/tests/core/dialogs.mjs} +1 -1
  337. package/extras/tests/core/index.mjs +9 -0
  338. package/{test/client/core/layout.js → extras/tests/core/layout.mjs} +7 -3
  339. package/{test/client/core/runner.js → extras/tests/core/runner.mjs} +3 -3
  340. package/{test/client/core/screens.js → extras/tests/core/screens.mjs} +1 -1
  341. package/{test/client/core/utils.js → extras/tests/core/utils.mjs} +79 -26
  342. package/extras/tests/index.mjs +4 -0
  343. package/{test/client/map/api.js → extras/tests/map/api.mjs} +1 -1
  344. package/{test/client/map/catalog.js → extras/tests/map/catalog.mjs} +18 -18
  345. package/{test/client/map/controls.js → extras/tests/map/controls.mjs} +3 -3
  346. package/extras/tests/map/index.mjs +5 -0
  347. package/{test/client/map/time.js → extras/tests/map/time.mjs} +3 -3
  348. package/{test/client/map/utils.js → extras/tests/map/utils.mjs} +6 -5
  349. package/extras/tours/fab.js +36 -0
  350. package/extras/tours/layout.js +49 -0
  351. package/extras/tours/pane.left.js +78 -0
  352. package/extras/tours/pane.right.js +145 -0
  353. package/extras/tours/pane.top.js +239 -0
  354. package/map/api/config/layers.cjs +28 -13
  355. package/map/api/hooks/hooks.query.js +12 -7
  356. package/map/api/models/catalog.model.mongodb.js +17 -6
  357. package/map/api/services/catalog/catalog.hooks.js +1 -1
  358. package/map/api/services/index.js +18 -1
  359. package/map/client/cesium/utils/utils.cesium.js +25 -65
  360. package/map/client/cesium/utils/utils.features.js +1 -0
  361. package/map/client/cesium/utils/utils.geojson.js +1 -0
  362. package/map/client/cesium/utils/utils.style.js +7 -6
  363. package/map/client/components/KFeatureEditor.vue +3 -3
  364. package/map/client/components/KFeaturesChart.vue +4 -4
  365. package/map/client/components/KFeaturesFilterEditor.vue +19 -13
  366. package/map/client/components/KFeaturesFilterManager.vue +7 -4
  367. package/map/client/components/KFeaturesTable.vue +2 -2
  368. package/map/client/components/KLayerEditor.vue +6 -6
  369. package/map/client/components/KMeasureTool.vue +2 -1
  370. package/map/client/components/catalog/KBaseLayersSelector.vue +1 -1
  371. package/map/client/components/catalog/KCategoryItem.vue +15 -1
  372. package/map/client/components/catalog/KConnectLayer.vue +2 -2
  373. package/map/client/components/catalog/KCreateView.vue +3 -2
  374. package/map/client/components/catalog/KFilteredLayerItem.vue +26 -6
  375. package/map/client/components/catalog/KImportLayer.vue +6 -3
  376. package/map/client/components/catalog/KLayerCategories.vue +6 -6
  377. package/map/client/components/catalog/KLayerItem.vue +12 -2
  378. package/map/client/components/catalog/KLayersList.vue +180 -0
  379. package/map/client/components/catalog/KLayersPanel.vue +146 -36
  380. package/map/client/components/catalog/KLayersSelector.vue +96 -48
  381. package/map/client/components/catalog/KProjectEditor.vue +0 -9
  382. package/map/client/components/catalog/KProjectSelector.vue +3 -2
  383. package/map/client/components/catalog/KProjectsPanel.vue +23 -8
  384. package/map/client/components/catalog/KViewsPanel.vue +18 -8
  385. package/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  386. package/map/client/components/form/KDirectionField.vue +3 -6
  387. package/map/client/components/form/KLayerCategoryField.vue +2 -2
  388. package/map/client/components/form/KOwsServiceField.vue +25 -24
  389. package/map/client/components/form/KSelectLayersField.vue +4 -4
  390. package/map/client/components/form/KSelectViewsField.vue +4 -4
  391. package/map/client/components/legend/KLayerLegend.vue +11 -2
  392. package/map/client/components/legend/KLegend.vue +44 -51
  393. package/map/client/components/location/KLocationCardSection.vue +6 -7
  394. package/map/client/components/location/KLocationMap.vue +23 -13
  395. package/map/client/components/stickies/KPosition.vue +5 -0
  396. package/map/client/components/stickies/KZoomControl.vue +70 -0
  397. package/map/client/components/styles/KLayerStyleAction.vue +59 -12
  398. package/map/client/components/styles/KStyleEditor.vue +71 -8
  399. package/map/client/components/styles/KStyleEditorSection.vue +82 -33
  400. package/map/client/components/styles/KStyleManager.vue +119 -59
  401. package/map/client/components/styles/KStylePreview.vue +9 -25
  402. package/map/client/components/styles/KStylePreviewItem.vue +22 -1
  403. package/map/client/components/tools/KSearchTool.vue +1 -1
  404. package/map/client/components/widget/KElevationProfile.vue +20 -17
  405. package/map/client/components/widget/KInformationBox.vue +5 -5
  406. package/map/client/components/widget/KMapillaryViewer.vue +2 -1
  407. package/map/client/components/widget/KTimeSeries.vue +11 -9
  408. package/map/client/globe.js +2 -0
  409. package/map/client/i18n/map_en.json +30 -7
  410. package/map/client/i18n/map_fr.json +30 -7
  411. package/map/client/leaflet/GradientPath.js +61 -24
  412. package/map/client/leaflet/ShapeMarker.js +12 -5
  413. package/map/client/leaflet/TiledMeshLayer.js +3 -3
  414. package/map/client/leaflet/utils/utils.geojson.js +66 -8
  415. package/map/client/leaflet/utils/utils.style.js +14 -15
  416. package/map/client/mixins/globe/mixin.base-globe.js +190 -34
  417. package/map/client/mixins/globe/mixin.file-layers.js +3 -0
  418. package/map/client/mixins/globe/mixin.geojson-layers.js +179 -31
  419. package/map/client/mixins/globe/mixin.opendap-layers.js +2 -1
  420. package/map/client/mixins/globe/mixin.style.js +23 -1
  421. package/map/client/mixins/globe/mixin.tooltip.js +14 -2
  422. package/map/client/mixins/map/mixin.base-map.js +156 -58
  423. package/map/client/mixins/map/mixin.edit-layers.js +18 -15
  424. package/map/client/mixins/map/mixin.geojson-layers.js +181 -106
  425. package/map/client/mixins/map/mixin.heatmap-layers.js +3 -2
  426. package/map/client/mixins/map/mixin.map-activity.js +6 -1
  427. package/map/client/mixins/map/mixin.mapillary-layers.js +2 -1
  428. package/map/client/mixins/map/mixin.pmtiles-layers.js +3 -3
  429. package/map/client/mixins/map/mixin.tiled-mesh-layers.js +3 -2
  430. package/map/client/mixins/map/mixin.tiled-wind-layers.js +3 -2
  431. package/map/client/mixins/mixin.activity.js +199 -55
  432. package/map/client/mixins/mixin.context.js +11 -11
  433. package/map/client/mixins/mixin.feature-service.js +11 -9
  434. package/map/client/mixins/mixin.weacast.js +5 -3
  435. package/map/client/readers/reader.geojson.js +3 -1
  436. package/map/client/utils/utils.capture.js +3 -3
  437. package/map/client/utils/utils.catalog.js +9 -5
  438. package/map/client/utils/utils.features.js +120 -54
  439. package/map/client/utils/utils.js +25 -10
  440. package/map/client/utils/utils.layers.js +148 -24
  441. package/map/client/utils/utils.location.js +26 -9
  442. package/map/client/utils/utils.schema.js +2 -1
  443. package/map/client/utils/utils.style.js +53 -9
  444. package/map/common/geotiff-grid-source.js +1 -3
  445. package/map/common/opendap-utils.js +0 -1
  446. package/map/common/tms-utils.js +0 -1
  447. package/map/common/wcs-utils.js +0 -1
  448. package/map/common/wfs-utils.js +0 -1
  449. package/map/common/wms-utils.js +7 -1
  450. package/map/common/wmts-utils.js +0 -1
  451. package/package.json +12 -12
  452. package/scripts/init_runner.sh +3 -3
  453. package/scripts/kash/CHANGELOG.md +27 -0
  454. package/scripts/kash/kash.sh +556 -237
  455. package/scripts/kash/scripts/run_tests.sh +44 -5
  456. package/scripts/setup_workspace.sh +23 -13
  457. package/test/api/core/config/default.cjs +2 -1
  458. package/test/api/core/tags.test.js +62 -0
  459. package/test/api/core/test-log-2024-04-22.log +84 -0
  460. package/test/api/core/{test-log-2025-02-05.log → test-log-2024-04-23.log} +3 -3
  461. package/test/api/core/test-log-2024-08-13.log +3 -0
  462. package/test/api/map/config/default.cjs +2 -1
  463. package/test/api/map/config/layers.json +9 -0
  464. package/test/api/map/data/openradiation.json +13811 -0
  465. package/test/api/map/grid-sources.test.js +1 -3
  466. package/test/api/map/index.test.js +60 -1
  467. package/test/api/map/style.test.js +30 -1
  468. package/test/api/map/test-log-2025-03-08.log +0 -0
  469. package/test.api.js +1 -1
  470. package/vite/App.vue +18 -0
  471. package/vite/AppWithGlobe.vue +84 -0
  472. package/vite/GlobeActivity.vue +58 -0
  473. package/vite/MapActivity.vue +63 -0
  474. package/vite/MapActivityWithGlobe.vue +63 -0
  475. package/vite/README.md +169 -0
  476. package/vite/config.js +221 -0
  477. package/vite/index_with_globe.html +50 -0
  478. package/vite/index_with_map.html +50 -0
  479. package/vite/package.json +173 -0
  480. package/vite/quasar.variables.scss +17 -0
  481. package/vite/vite.config.js +166 -0
  482. package/vite/yarn.lock +11641 -0
  483. package/core/client/components/media/KImageViewer.vue +0 -68
  484. package/core/client/components/media/KMarkdownViewer.vue +0 -55
  485. package/core/client/components/media/KMediaBrowser.vue +0 -301
  486. package/coverage/core/api/services/users/users.service.js.html +0 -100
  487. package/coverage/core/common/utils.offline.js.html +0 -199
  488. package/coverage/lcov-report/core/api/services/users/users.service.js.html +0 -100
  489. package/coverage/lcov-report/core/common/utils.offline.js.html +0 -199
  490. package/coverage/lcov-report/map/api/models/styles.model.mongodb.js.html +0 -112
  491. package/coverage/lcov-report/map/api/services/styles/index.html +0 -116
  492. package/coverage/lcov-report/map/api/services/styles/styles.hooks.js.html +0 -196
  493. package/coverage/map/api/models/styles.model.mongodb.js.html +0 -112
  494. package/coverage/map/api/services/styles/index.html +0 -116
  495. package/coverage/map/api/services/styles/styles.hooks.js.html +0 -196
  496. package/coverage/tmp/coverage-151198-1753351220086-0.json +0 -1
  497. package/coverage/tmp/coverage-151210-1753351220070-0.json +0 -1
  498. package/coverage/tmp/coverage-151221-1753351129816-0.json +0 -1
  499. package/coverage/tmp/coverage-151233-1753351129803-0.json +0 -1
  500. package/coverage/tmp/coverage-151240-1753351129770-0.json +0 -1
  501. package/coverage/tmp/coverage-151307-1753351220058-0.json +0 -1
  502. package/coverage/tmp/coverage-151319-1753351220044-0.json +0 -1
  503. package/coverage/tmp/coverage-151326-1753351220010-0.json +0 -1
  504. package/extras/tours/core/account-profile.js +0 -32
  505. package/extras/tours/core/account.js +0 -143
  506. package/extras/tours/core/add-member.js +0 -75
  507. package/extras/tours/core/add-tag.js +0 -13
  508. package/extras/tours/core/create-group.js +0 -19
  509. package/extras/tours/core/create-organisation.js +0 -19
  510. package/extras/tours/core/create-tag.js +0 -26
  511. package/extras/tours/core/edit-member-role.js +0 -13
  512. package/extras/tours/core/groups.js +0 -65
  513. package/extras/tours/core/join-group.js +0 -13
  514. package/extras/tours/core/login.js +0 -41
  515. package/extras/tours/core/members.js +0 -108
  516. package/extras/tours/core/register.js +0 -61
  517. package/extras/tours/core/send-reset-password.js +0 -14
  518. package/extras/tours/core/tags.js +0 -65
  519. package/extras/tours/map/catalog-panel.js +0 -112
  520. package/extras/tours/map/fab.js +0 -26
  521. package/extras/tours/map/navigation-bar.js +0 -187
  522. package/extras/tours/map/side-nav.js +0 -36
  523. package/test/api/core/test-log-2025-05-21.log +0 -15
  524. package/test/api/core/test-log-2025-06-25.log +0 -9
  525. package/test/api/core/test-log-2025-07-24.log +0 -44
  526. package/test/api/map/test-log-2025-05-27.log +0 -13
  527. package/test/api/map/test-log-2025-06-23.log +0 -7
  528. package/test/api/map/test-log-2025-07-24.log +0 -11
  529. package/test/client/core/api.js +0 -361
  530. package/test/client/core/index.js +0 -9
  531. package/test/client/index.js +0 -4
  532. package/test/client/map/index.js +0 -5
  533. package/test.client.js +0 -1
  534. /package/{test/client/core/time.js → extras/tests/core/time.mjs} +0 -0
  535. /package/extras/tours/{map/add-layer.js → add-layer.js} +0 -0
  536. /package/extras/tours/{map/catalog-categories.js → catalog-categories.js} +0 -0
  537. /package/extras/tours/{map/connect-layer.js → connect-layer.js} +0 -0
  538. /package/extras/tours/{map/create-layer.js → create-layer.js} +0 -0
  539. /package/extras/tours/{map/create-view.js → create-view.js} +0 -0
  540. /package/extras/tours/{map/import-layer.js → import-layer.js} +0 -0
  541. /package/extras/tours/{map/timeline.js → pane.bottom.js} +0 -0
@@ -1,9 +1,31 @@
1
1
  name: ci
2
- on: [ push, workflow_dispatch ]
2
+ on:
3
+ push:
4
+ workflow_dispatch:
5
+ inputs:
6
+ run_tests:
7
+ description: "Run tests"
8
+ default: false
9
+ required: false
10
+ type: boolean
11
+ additional_tests:
12
+ description: "Additional tests"
13
+ default: false
14
+ required: false
15
+ type: boolean
16
+ build_docs:
17
+ description: "Build docs"
18
+ default: false
19
+ required: false
20
+ type: boolean
3
21
 
4
22
  jobs:
5
23
  run_tests:
6
24
  name: Run tests
25
+ if: ${{
26
+ github.event_name == 'workflow_dispatch' && inputs.run_tests ||
27
+ github.event_name == 'push'
28
+ }}
7
29
  runs-on: ubuntu-22.04
8
30
  steps:
9
31
  - name: Checkout repo
@@ -19,16 +41,20 @@ jobs:
19
41
  - name: Run tests
20
42
  env:
21
43
  SOPS_AGE_KEY: ${{ secrets.SOPS_AGE_KEY }}
22
- run: bash ./scripts/run_tests.sh -c -r ${{ github.job }}
44
+ # run: bash ./scripts/run_tests.sh -c -r ${{ github.job }}
45
+ run: bash ./scripts/run_tests.sh -r ${{ github.job }}
23
46
 
24
47
  additional_tests:
25
48
  strategy:
26
49
  fail-fast: false
27
50
  matrix:
28
- node: [ 18, 22 ]
29
- mongo: [ 5, 6, 7 ]
51
+ node: [ 20, 22 ]
52
+ mongo: [ 8 ]
30
53
  name: Additional tests
31
- if: ${{ contains(github.event.head_commit.message, 'additional tests') }}
54
+ if: ${{
55
+ github.event_name == 'workflow_dispatch' && inputs.additional_tests ||
56
+ github.event_name == 'push' && contains(github.event.head_commit.message, 'additional tests')
57
+ }}
32
58
  runs-on: ubuntu-22.04
33
59
  steps:
34
60
  - name: Checkout repo
@@ -48,7 +74,10 @@ jobs:
48
74
 
49
75
  build_docs:
50
76
  name: Build doc
51
- if: ${{ startsWith(github.event.head_commit.message, 'docs:') || contains(github.event.head_commit.message, 'build doc') }}
77
+ if: ${{
78
+ github.event_name == 'workflow_dispatch' && inputs.build_docs ||
79
+ github.event_name == 'push' && contains(github.event.head_commit.message, 'doc')
80
+ }}
52
81
  runs-on: ubuntu-22.04
53
82
  steps:
54
83
  - name: Checkout repo
@@ -0,0 +1,5 @@
1
+ {
2
+ "cSpell.words": [
3
+ "reauthentication"
4
+ ]
5
+ }
@@ -0,0 +1,8 @@
1
+ // Need this as export * only exports named exports but not the default export
2
+ import core from './core/client/index.js'
3
+ import map from './map/client/globe.js'
4
+ const kdk = { core, map }
5
+
6
+ export default kdk
7
+ export * as kdkCore from './core/client/index.js'
8
+ export * as kdkMap from './map/client/globe.js'
package/client.js ADDED
@@ -0,0 +1,8 @@
1
+ // Need this as export * only exports named exports but not the default export
2
+ import core from './core/client/index.js'
3
+ import map from './map/client/index.js'
4
+ const kdk = { core, map }
5
+
6
+ export default kdk
7
+ export * as kdkCore from './core/client/index.js'
8
+ export * as kdkMap from './map/client/index.js'
package/client.map.js ADDED
@@ -0,0 +1,8 @@
1
+ // Need this as export * only exports named exports but not the default export
2
+ import core from './core/client/index.js'
3
+ import map from './map/client/map.js'
4
+ const kdk = { core, map }
5
+
6
+ export default kdk
7
+ export * as kdkCore from './core/client/index.js'
8
+ export * as kdkMap from './map/client/map.js'
@@ -14,6 +14,9 @@ export async function sendNewSubscriptionEmail (hook) {
14
14
  if (hook.type !== 'after') {
15
15
  throw new Error('The \'sendNewSubscriptionEmail\' hook should only be used as a \'after\' hook.')
16
16
  }
17
+ const app = hook.app
18
+ const mailerService = app.getService('mailer')
19
+ if (!mailerService) return
17
20
  // Check for a new subscription if any
18
21
  const currentUser = hook.result
19
22
  const previousUser = hook.params.user
@@ -32,8 +35,6 @@ export async function sendNewSubscriptionEmail (hook) {
32
35
  }
33
36
  debug('Last subscription uses uses a new fingerprint')
34
37
  // Send an email to notify the user
35
- const app = hook.app
36
- const mailerService = app.getService('mailer')
37
38
  const domainPath = app.get('domain') + '/#/'
38
39
  const email = {
39
40
  subject: 'Security alert - new browser detected',
@@ -0,0 +1,56 @@
1
+ import makeDebug from 'debug'
2
+
3
+ const debug = makeDebug('kdk:core:tags:hooks')
4
+
5
+ export async function reflectTagUpdate (hook) {
6
+ const { app, result, params, method } = hook
7
+
8
+ const { service: targetService, property, name, description, color } = result
9
+
10
+ if (!targetService) return hook
11
+
12
+ const service = app.getService(targetService)
13
+ if (!service) {
14
+ debug('Service not found: ', targetService)
15
+ return hook
16
+ }
17
+
18
+ const previousItem = params.previousItem || {}
19
+
20
+ const records = await service.find({
21
+ query: {
22
+ [property]: {
23
+ $elemMatch: {
24
+ name: previousItem.name,
25
+ color: previousItem.color
26
+ }
27
+ },
28
+
29
+ $select: ['_id', property]
30
+ },
31
+ paginate: false
32
+ })
33
+
34
+ for (const record of records) {
35
+ const updatedTags = record[property].map(tag => {
36
+ if (tag.name === previousItem.name && tag.color === previousItem.color) {
37
+ if (method === 'remove') {
38
+ // If the tag is being removed, we return null to filter it out
39
+ return null
40
+ }
41
+ return {
42
+ ...tag,
43
+ name,
44
+ description,
45
+ color
46
+ }
47
+ }
48
+ return tag
49
+ }).filter(Boolean)
50
+ await service.patch(record._id, {
51
+ [property]: updatedTags
52
+ })
53
+ }
54
+
55
+ return hook
56
+ }
@@ -0,0 +1,8 @@
1
+ export default function (app, options) {
2
+ const db = options.db || app.db
3
+ options.Model = db.collection('tags')
4
+ // Collation provided in query ensure sorting to be case insensitive w.r.t. user's language
5
+ // We built indices with collation to cover the most used languages, it requires different naming...
6
+ options.Model.createIndex({ name: 1 }, { name: 'name-en', collation: { locale: 'en', strength: 1 } })
7
+ options.Model.createIndex({ name: 1 }, { name: 'name-fr', collation: { locale: 'fr', strength: 1 } })
8
+ }
@@ -56,7 +56,7 @@ export function createStorageService (options = {}) {
56
56
  return app.createService('storage', Object.assign({
57
57
  servicesPath,
58
58
  modelsPath,
59
- methods: ['create', 'get', 'find', 'remove', 'createMultipartUpload', 'completeMultipartUpload', 'uploadPart', 'putObject'],
59
+ methods: ['create', 'get', 'find', 'remove', 'createMultipartUpload', 'completeMultipartUpload', 'uploadPart', 'putObject', 'uploadFile', 'downloadFile'],
60
60
  events: ['multipart-upload-created', 'multipart-upload-completed', 'part-uploaded', 'object-put'],
61
61
  id: '_id'
62
62
  }, options))
@@ -93,6 +93,31 @@ export function removeDatabasesService (options = {}) {
93
93
  return app.removeService(app.getService('databases', options.context))
94
94
  }
95
95
 
96
+ export function createTagsService (options = {}) {
97
+ const app = this
98
+ return app.createService('tags', Object.assign({
99
+ servicesPath,
100
+ modelsPath
101
+ }, options))
102
+ }
103
+
104
+ export async function createDefaultTags () {
105
+ const app = this
106
+ const defaultTags = app.get('tags').defaultTags
107
+ if (!defaultTags) return
108
+ const tagsService = app.getService('tags')
109
+ // Create default tags if not already done
110
+ const tags = await tagsService.find({ paginate: false })
111
+ for (let i = 0; i < defaultTags.length; i++) {
112
+ const defaultTag = defaultTags[i]
113
+ const createdTag = _.find(tags, { name: defaultTag.name })
114
+ if (!createdTag) {
115
+ app.logger.info('Initializing default tag (name = ' + defaultTag.name + ')')
116
+ await tagsService.create(defaultTag)
117
+ }
118
+ }
119
+ }
120
+
96
121
  export default async function () {
97
122
  const app = this
98
123
 
@@ -131,7 +156,7 @@ export default async function () {
131
156
 
132
157
  const messagesConfig = app.get('messages')
133
158
  if (messagesConfig) {
134
- await createMessagesService.call(app)
159
+ await createMessagesService.call(app, messagesConfig)
135
160
  debug('\'messages\' service created')
136
161
  }
137
162
 
@@ -146,4 +171,10 @@ export default async function () {
146
171
  await app.createService('push', { servicesPath })
147
172
  debug('\'push\' service created')
148
173
  }
174
+
175
+ const tagsConfig = app.get('tags')
176
+ if (tagsConfig) {
177
+ await createTagsService.call(app, tagsConfig)
178
+ debug('\'tags\' service created')
179
+ }
149
180
  }
@@ -0,0 +1,47 @@
1
+ import fuzzySearch from 'feathers-mongodb-fuzzy-search'
2
+ import { diacriticSearch } from '../../hooks/hooks.query.js'
3
+ import { hooks as kdkCoreHooks } from '../../index.js'
4
+ import { reflectTagUpdate } from '../../hooks/hooks.tags.js'
5
+
6
+ function addFieldToCheckUnique (property) {
7
+ return (query, hook) => {
8
+ const value = hook.data[property]
9
+ if (value === undefined) return
10
+ query[property] = value
11
+ }
12
+ }
13
+
14
+ export default {
15
+ before: {
16
+ all: [],
17
+ find: [
18
+ fuzzySearch({ fields: ['name'] }),
19
+ diacriticSearch()
20
+ ],
21
+ get: [],
22
+ create: [kdkCoreHooks.checkUnique({ field: 'name', query: addFieldToCheckUnique('service') })],
23
+ update: [kdkCoreHooks.checkUnique({ field: 'name', query: addFieldToCheckUnique('service') }), kdkCoreHooks.populatePreviousObject],
24
+ patch: [kdkCoreHooks.checkUnique({ field: 'name', query: addFieldToCheckUnique('service') }), kdkCoreHooks.populatePreviousObject],
25
+ remove: [kdkCoreHooks.populatePreviousObject]
26
+ },
27
+
28
+ after: {
29
+ all: [],
30
+ find: [],
31
+ get: [],
32
+ create: [],
33
+ update: [reflectTagUpdate],
34
+ patch: [reflectTagUpdate],
35
+ remove: [reflectTagUpdate]
36
+ },
37
+
38
+ error: {
39
+ all: [],
40
+ find: [],
41
+ get: [],
42
+ create: [],
43
+ update: [],
44
+ patch: [],
45
+ remove: []
46
+ }
47
+ }
@@ -5,7 +5,7 @@ import moment from 'moment'
5
5
  import jwtdecode from 'jwt-decode'
6
6
  import feathers from '@feathersjs/client'
7
7
  import { io } from 'socket.io-client'
8
- import reactive from 'feathers-reactive/dist/feathers-reactive.js'
8
+ import { rx as reactive } from 'feathers-reactive'
9
9
  import createOfflineService from '@kalisio/feathers-localforage'
10
10
  import configuration from 'config'
11
11
  import { permissions } from '../common/index.js'
@@ -140,14 +140,14 @@ export async function createClient (config) {
140
140
  // api.getService('xxx').on('event', () => ...)
141
141
  // In this case we simply warn and return the wrapper to the online service.
142
142
  // However, it is up to the application to make sure of not using such components when offline
143
- // throw new Error('Cannot retrieve offline service ' + name + ' for context ' + (typeof context === 'object' ? context._id : context))
144
- logger.warn('[KDK] Cannot retrieve offline service ' + name + ' for context ' + (typeof context === 'object' ? context._id : context))
143
+ // throw new Error('Cannot retrieve offline service ' + name + ' for context ' + (context && (typeof context === 'object') ? context._id : context))
144
+ logger.warn('[KDK] Cannot retrieve offline service ' + name + ' for context ' + (context && (typeof context === 'object') ? context._id : context))
145
145
  }
146
146
  }
147
147
  if (!service) {
148
148
  service = api.getOnlineService(name, context, options)
149
149
  if (!service) {
150
- throw new Error('Cannot retrieve service ' + name + ' for context ' + (typeof context === 'object' ? context._id : context))
150
+ throw new Error('Cannot retrieve service ' + name + ' for context ' + (context && (typeof context === 'object') ? context._id : context))
151
151
  }
152
152
  }
153
153
  return service
@@ -356,7 +356,7 @@ export async function createClient (config) {
356
356
  // We also add a random query parameter to prevent cached responses.
357
357
  if (!api.isDisconnected) {
358
358
  try {
359
- const url = new URL(api.getConfig('domain'))
359
+ const url = new URL(api.getConfig('domain') + config.apiPath + '/capabilities')
360
360
  url.searchParams.set('random', Math.random().toFixed(18).substring(2, 18))
361
361
  await window.fetch(url.toString(), { method: 'HEAD' })
362
362
  } catch (error) {
@@ -8,6 +8,7 @@
8
8
  import _ from 'lodash'
9
9
  import logger from 'loglevel'
10
10
  import { useActivity, useLayout } from '../composables'
11
+ import { Events } from '../events.js'
11
12
  import KPage from './layout/KPage.vue'
12
13
 
13
14
  export default {
@@ -79,11 +80,11 @@ export default {
79
80
  async created () {
80
81
  await this.configure()
81
82
  // whenever the user abilities are updated, update activity as well
82
- this.$events.on('user-abilities-changed', this.configure)
83
+ Events.on('user-abilities-changed', this.configure)
83
84
  },
84
85
  beforeUnmount () {
85
86
  logger.debug(`[KDK] Clearing '${this.name}' activity`)
86
- this.$events.off('user-abilities-changed', this.configure)
87
+ Events.off('user-abilities-changed', this.configure)
87
88
  // Clear the layout
88
89
  this.clearLayout()
89
90
  }
@@ -20,7 +20,7 @@
20
20
  <div v-if="computedLabel"
21
21
  :id="id"
22
22
  class="ellipsis"
23
- :class="{ 'q-pl-sm': !dense && icon, 'q-pl-xs': dense && icon }"
23
+ :class="{ 'q-pl-sm': !dense && (icon || isTruncated ) , 'q-pl-xs': dense && (icon || isTruncated) }"
24
24
  >
25
25
  {{ computedLabel }}
26
26
  <q-resize-observer @resize="onResize" />
@@ -125,7 +125,7 @@ const computedState = computed({
125
125
  return props.modelValue
126
126
  },
127
127
  set: function (state) {
128
- emit('updated:modelValue', state)
128
+ emit('update:modelValue', state)
129
129
  }
130
130
  })
131
131
  const computedLabel = computed(() => {
@@ -11,7 +11,9 @@
11
11
  import _ from 'lodash'
12
12
  import logger from 'loglevel'
13
13
  import { ref } from 'vue'
14
- import { api, Context, i18n } from '@kalisio/kdk/core.client'
14
+ import { i18n } from '../i18n.js'
15
+ import { api } from '../api.js'
16
+ import { Context } from '../context.js'
15
17
  import { Notify } from 'quasar'
16
18
 
17
19
  // Props
@@ -24,12 +24,12 @@ const props = defineProps({
24
24
  type: String,
25
25
  required: true
26
26
  },
27
- position: {
27
+ anchor: {
28
28
  type: String,
29
29
  default: 'top-right'
30
30
  },
31
31
  offset: {
32
- type: [Number, Array],
32
+ type: Array,
33
33
  default: [0, 0]
34
34
  }
35
35
  })
@@ -45,9 +45,9 @@ const computedStyle = computed(() => {
45
45
  const hOffset = `${props.offset[0]}px`
46
46
  const vOffset = `${props.offset[1]}px`
47
47
  const style = {
48
- position: 'fixed'
48
+ position: 'absolute'
49
49
  }
50
- switch (props.position) {
50
+ switch (props.anchor) {
51
51
  case 'top-right':
52
52
  style.top = vOffset
53
53
  style.right = hOffset
@@ -7,7 +7,7 @@ import _ from 'lodash'
7
7
  import moment from 'moment'
8
8
  import { Store, i18n } from '..'
9
9
  import { ref } from 'vue'
10
- import KTree from './KTree'
10
+ import KTree from './KTree.vue'
11
11
  import { Events } from '../events.js'
12
12
 
13
13
  // Data
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div v-if="hasTabs" class="fit column">
2
+ <div v-if="hasTabs && current" class="fit column">
3
3
  <!-- Tabs -->
4
4
  <q-tabs
5
5
  v-model="current"
@@ -8,9 +8,14 @@
8
8
  mobile-arrows
9
9
  :dense="dense"
10
10
  class="full-width text-primary"
11
+ @update:model-value="onTabChanged"
11
12
  >
12
13
  <template v-for="(tab, index) in tabs" :key="tab">
13
- <q-tab :name="tab" :id="tab" :label="getLabel(index) || tab" />
14
+ <q-tab
15
+ :name="tab"
16
+ :id="tab"
17
+ :label="getLabel(index) || tab"
18
+ />
14
19
  </template>
15
20
  </q-tabs>
16
21
  <q-separator />
@@ -20,7 +25,7 @@
20
25
  :content="panel"
21
26
  :mode="current"
22
27
  :filter="filter"
23
- @triggered="onTriggered"
28
+ @triggered="onContentTriggered"
24
29
  class="col full-width"
25
30
  />
26
31
  </div>
@@ -28,7 +33,7 @@
28
33
 
29
34
  <script setup>
30
35
  import _ from 'lodash'
31
- import { ref, computed } from 'vue'
36
+ import { ref, computed, watch } from 'vue'
32
37
  import { i18n } from '../i18n.js'
33
38
  import KContent from './KContent.vue'
34
39
 
@@ -65,10 +70,10 @@ const props = defineProps({
65
70
  })
66
71
 
67
72
  // Emit
68
- const emit = defineEmits(['triggered'])
73
+ const emit = defineEmits(['tab-changed', 'triggered'])
69
74
 
70
75
  // Data
71
- const current = ref(props.mode || _.head(getModes()))
76
+ const current = ref(null)
72
77
 
73
78
  // Computed
74
79
  const hasTabs = computed(() => {
@@ -81,6 +86,11 @@ const panel = computed(() => {
81
86
  return _.get(props.content, current.value)
82
87
  })
83
88
 
89
+ // Watch
90
+ watch(() => props.mode, (mode) => {
91
+ current.value = mode
92
+ }, { immediate: true })
93
+
84
94
  // Function
85
95
  function getModes () {
86
96
  return _.keys(props.content)
@@ -89,7 +99,10 @@ function getLabel (index) {
89
99
  const label = _.nth(props.labels, index)
90
100
  if (label) return i18n.tie(label)
91
101
  }
92
- function onTriggered (params) {
102
+ function onTabChanged (params) {
103
+ emit('tab-changed', params)
104
+ }
105
+ function onContentTriggered (params) {
93
106
  emit('triggered', params)
94
107
  }
95
108
  </script>
@@ -9,29 +9,29 @@
9
9
  @triggered="onTriggered"
10
10
  />
11
11
  <!-- Avatar -->
12
- <div v-if="avatar && computedAvatar" class="q-py-sm column items-center">
12
+ <div v-if="avatar && userAvatar" class="q-py-sm column items-center">
13
13
  <KAvatar
14
- :subject="computedAvatar"
14
+ :subject="userAvatar"
15
15
  size="5rem"
16
16
  />
17
17
  </div>
18
18
  <!-- Information -->
19
19
  <div class="q-py-sm column items-center">
20
20
  <div class="text-subtitle1 text-weight-medium">
21
- {{ computedName }}
21
+ {{ userName }}
22
22
  </div>
23
- <div v-if="description && computedDescription" class="text-caption">
24
- {{ computedDescription }}
23
+ <div v-if="description && userDescription" class="text-caption">
24
+ {{ userDescription }}
25
25
  </div>
26
26
  </div>
27
27
  <!-- Role -->
28
- <div v-if="role && computedRole" class="q-py-sm column items-center">
28
+ <div v-if="role && userRole" class="q-py-sm column items-center">
29
29
  <KChip
30
30
  color="primary"
31
31
  text-color="white"
32
32
  square
33
33
  size=".85rem"
34
- :label="$t(`roles.${computedRole}`)"
34
+ :label="$t(`roles.${userRole}`)"
35
35
  />
36
36
  </div>
37
37
  </div>
@@ -40,7 +40,7 @@
40
40
  <script setup>
41
41
  import _ from 'lodash'
42
42
  import { computed } from 'vue'
43
- import { Store } from '../../store.js'
43
+ import { useUser } from '../../composables'
44
44
  import KAvatar from '../KAvatar.vue'
45
45
  import KPanel from '../KPanel.vue'
46
46
  import KChip from '../KChip.vue'
@@ -73,7 +73,7 @@ const props = defineProps({
73
73
  const emit = defineEmits(['triggered'])
74
74
 
75
75
  // Data
76
- const User = Store.getRef('user')
76
+ const { User, name: userName, description: userDescription, avatar: userAvatar, role: userRole } = useUser()
77
77
 
78
78
  // Computed
79
79
  const header = computed(() => {
@@ -123,22 +123,6 @@ const header = computed(() => {
123
123
  }
124
124
  return actions
125
125
  })
126
- const computedName = computed(() => {
127
- return _.get(User.value, 'profile.name', _.get(User.value, 'profile.username', _.get(User.value, 'email', '')))
128
- })
129
- const computedDescription = computed(() => {
130
- return _.get(User.value, 'profile.description', '')
131
- })
132
- const computedAvatar = computed(() => {
133
- return _.get(User.value, 'profile', {})
134
- })
135
- const computedRole = computed(() => {
136
- const permissions = _.get(User.value, 'permissions')
137
- if (permissions) {
138
- if (_.isString(permissions)) return permissions
139
- return permissions[0]
140
- }
141
- })
142
126
 
143
127
  // Functions
144
128
  function onTriggered (args) {
@@ -23,7 +23,7 @@
23
23
  <!-- icon -->
24
24
  <KIcon v-if="!iconRight && computedIcon" :icon="computedIcon" />
25
25
  <!-- label -->
26
- <div v-if="computedLabel" :class="{ 'ellipsis q-pr-md': iconRight, 'ellipsis q-pl-md': !iconRight }">
26
+ <div v-if="computedLabel" :class="{ 'ellipsis q-pr-md': iconRight, 'ellipsis q-pl-md': !iconRight && computedIcon }">
27
27
  {{ computedLabel }}
28
28
  </div>
29
29
  <!-- tooltip -->
@@ -32,7 +32,7 @@
32
32
  </q-tooltip>
33
33
  <!-- badge -->
34
34
  <q-badge v-if="badge" v-bind="badge" :label="computedBadgeLabel">
35
- <q-icon v-if="badge.icon" v-bind="badge.icon" />
35
+ <KIcon v-if="badge.icon" v-bind="badge.icon" />
36
36
  </q-badge>
37
37
  <!-- extra content -->
38
38
  <slot>
@@ -90,13 +90,13 @@
90
90
  -->
91
91
  <q-btn v-else-if="renderer === 'fab'"
92
92
  :id="id"
93
- class="k-action-fab"
94
93
  :color="computedColor"
95
94
  :size="size"
96
95
  :round="true"
97
96
  :dense="dense"
98
97
  :disable="computedDisabled"
99
98
  @click="onClicked"
99
+ class="k-fab"
100
100
  >
101
101
  <!-- icon -->
102
102
  <KIcon v-if="!iconRight && computedIcon" :icon="computedIcon" />
@@ -106,7 +106,7 @@
106
106
  </q-tooltip>
107
107
  <!-- badge -->
108
108
  <q-badge v-if="badge" v-bind="badge" :label="computedBadgeLabel">
109
- <q-icon v-if="badge.icon" v-bind="badge.icon" />
109
+ <KIcon v-if="badge.icon" v-bind="badge.icon" />
110
110
  </q-badge>
111
111
  </q-btn>
112
112
  <!--
@@ -114,17 +114,17 @@
114
114
  -->
115
115
  <q-fab-action v-else-if="renderer === 'fab-action'"
116
116
  :id="id"
117
- class="k-action-fab-action"
118
117
  no-caps
119
- :icon="computedIcon"
118
+ :icon="iconRight ? computedIcon : undefined"
120
119
  :color="computedColor"
121
120
  :label="computedLabel"
122
121
  square
123
122
  external-label
124
123
  :label-position="iconRight ? 'left' : 'right'"
125
- label-class="bg-primary text-white text-caption k-fab-action"
124
+ label-class="text-white text-caption"
126
125
  :disable="computedDisabled"
127
126
  @click="onClicked"
127
+ class="k-fab-action"
128
128
  >
129
129
  <!-- icon -->
130
130
  <KIcon v-if="!iconRight && computedIcon" :icon="computedIcon" />
@@ -141,7 +141,7 @@
141
141
  Tab renderer
142
142
  -->
143
143
  <q-btn v-else-if="renderer === 'tab'"
144
- :class="{'k-action-tab-active': isToggled }"
144
+ :class="{'k-tab-action-active': isToggled }"
145
145
  :id="id"
146
146
  no-caps
147
147
  no-wrap
@@ -314,11 +314,11 @@ defineExpose({
314
314
  </script>
315
315
 
316
316
  <style lang="scss" scoped>
317
- .k-action-fab, .k-action-fab-action {
317
+ .k-fab, .k-fab-action {
318
318
  border: 2px solid;
319
319
  border-color: v-bind(computedColor) - 75%;
320
320
  }
321
- .k-action-tab-active {
321
+ .k-tab-action-active {
322
322
  border-bottom: solid 2px;
323
323
  }
324
324
  .k-action-toggled {