@kalisio/kdk 2.3.1 → 2.4.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 (416) hide show
  1. package/.eslintignore +2 -1
  2. package/.github/workflows/main.yaml +3 -3
  3. package/README.md +1 -0
  4. package/core/api/db.js +6 -1
  5. package/core/api/hooks/hooks.model.js +1 -1
  6. package/core/api/hooks/hooks.schemas.js +0 -2
  7. package/core/api/models/messages.model.mongodb.js +13 -0
  8. package/core/api/services/authorisations/authorisations.service.js +13 -4
  9. package/core/api/services/index.js +19 -0
  10. package/core/api/services/messages/messages.hooks.js +38 -0
  11. package/core/client/api.js +7 -32
  12. package/core/client/capabilities.js +2 -2
  13. package/core/client/components/KActivity.vue +29 -6
  14. package/core/client/components/KContent.vue +2 -2
  15. package/core/client/components/KDialog.vue +4 -7
  16. package/core/client/components/KStamp.vue +3 -9
  17. package/core/client/components/KStore.vue +2 -4
  18. package/core/client/components/KTab.vue +95 -0
  19. package/core/client/components/action/KAction.vue +15 -2
  20. package/core/client/components/action/KBugReportAction.vue +4 -2
  21. package/core/client/components/action/KToggleFullscreenAction.vue +25 -0
  22. package/core/client/components/app/KSettings.vue +17 -13
  23. package/core/client/components/chart/KDataTable.vue +6 -9
  24. package/core/client/components/chart/KTimeSeriesChart.vue +74 -56
  25. package/core/client/components/collection/KBoard.vue +22 -33
  26. package/core/client/components/collection/KCard.vue +71 -56
  27. package/core/client/components/collection/KCardSection.vue +20 -10
  28. package/core/client/components/collection/KDescriptionCardSection.vue +47 -0
  29. package/core/client/components/collection/KGrid.vue +234 -54
  30. package/core/client/components/collection/KScrollDown.vue +97 -0
  31. package/core/client/components/collection/KScrollToTop.vue +93 -0
  32. package/core/client/components/collection/KTable.vue +87 -33
  33. package/core/client/components/collection/KTimeLine.vue +406 -0
  34. package/core/client/components/collection/index.js +1 -5
  35. package/core/client/components/document/KDocument.vue +20 -55
  36. package/core/client/components/document/KHtml.vue +17 -7
  37. package/core/client/components/document/KImage.vue +78 -0
  38. package/core/client/components/document/KMarkdown.vue +12 -16
  39. package/core/client/components/document/KPdf.vue +69 -0
  40. package/core/client/components/form/KFileField.vue +2 -2
  41. package/core/client/components/form/KSelectField.vue +2 -1
  42. package/core/client/components/form/KUnitField.vue +3 -1
  43. package/core/client/components/layout/KFab.vue +9 -10
  44. package/core/client/components/layout/KLayout.vue +104 -6
  45. package/core/client/components/layout/KOpener.vue +14 -19
  46. package/core/client/components/layout/KPage.vue +195 -105
  47. package/core/client/components/layout/KWindow.vue +62 -45
  48. package/core/client/components/layout/index.js +0 -2
  49. package/core/client/components/media/KRibbon.vue +95 -0
  50. package/core/client/components/menu/KMenu.vue +4 -4
  51. package/core/client/components/team/KGroupsActivity.vue +25 -27
  52. package/core/client/components/team/KMembersActivity.vue +21 -23
  53. package/core/client/components/team/KOrganisationsActivity.vue +20 -22
  54. package/core/client/components/team/KTagsActivity.vue +21 -23
  55. package/core/client/components/time/KAbsoluteTimeRange.vue +70 -170
  56. package/core/client/composables/activity.js +14 -12
  57. package/core/client/composables/collection.js +3 -1
  58. package/core/client/composables/counter.js +51 -0
  59. package/core/client/composables/index.js +3 -0
  60. package/core/client/composables/layout.js +13 -2
  61. package/core/client/composables/messages.js +15 -0
  62. package/core/client/composables/pwa.js +1 -1
  63. package/core/client/composables/schema.js +6 -6
  64. package/core/client/composables/screen.js +23 -0
  65. package/core/client/directives/index.js +1 -0
  66. package/core/client/directives/v-hover.js +23 -0
  67. package/core/client/document.js +61 -0
  68. package/core/client/exporter.js +1 -1
  69. package/core/client/filter.js +0 -1
  70. package/core/client/guards.js +1 -1
  71. package/core/client/i18n/core_en.json +14 -8
  72. package/core/client/i18n/core_fr.json +15 -9
  73. package/core/client/index.js +9 -3
  74. package/core/client/layout.js +129 -29
  75. package/core/client/local-storage.js +1 -1
  76. package/core/client/mixins/index.js +0 -1
  77. package/core/client/mixins/mixin.base-activity.js +23 -13
  78. package/core/client/mixins/mixin.base-item.js +6 -3
  79. package/core/client/services/index.js +4 -1
  80. package/core/client/services/local-settings.service.js +4 -0
  81. package/core/client/storage.js +1 -1
  82. package/core/client/store.js +1 -1
  83. package/core/client/template-context.js +17 -0
  84. package/core/client/units.js +49 -27
  85. package/core/client/utils/index.js +3 -2
  86. package/core/client/utils/utils.actions.js +4 -0
  87. package/core/client/utils/utils.colors.js +155 -2
  88. package/core/client/utils/utils.items.js +26 -0
  89. package/core/client/utils/utils.math.js +3 -0
  90. package/core/client/utils/utils.platform.js +3 -1
  91. package/core/client/utils/utils.screen.js +82 -0
  92. package/core/client/utils/utils.time.js +0 -1
  93. package/core/common/schemas/settings.update.json +12 -0
  94. package/coverage/core/api/application.js.html +1 -1
  95. package/coverage/core/api/authentication.js.html +1 -1
  96. package/coverage/core/api/db.js.html +51 -36
  97. package/coverage/core/api/hooks/hooks.authentication.js.html +1 -1
  98. package/coverage/core/api/hooks/hooks.authorisations.js.html +1 -1
  99. package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
  100. package/coverage/core/api/hooks/hooks.logger.js.html +1 -1
  101. package/coverage/core/api/hooks/hooks.model.js.html +2 -2
  102. package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
  103. package/coverage/core/api/hooks/hooks.push.js.html +1 -1
  104. package/coverage/core/api/hooks/hooks.query.js.html +1 -1
  105. package/coverage/core/api/hooks/hooks.schemas.js.html +6 -12
  106. package/coverage/core/api/hooks/hooks.service.js.html +1 -1
  107. package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
  108. package/coverage/core/api/hooks/hooks.users.js.html +2 -2
  109. package/coverage/core/api/hooks/index.html +10 -10
  110. package/coverage/core/api/hooks/index.js.html +1 -1
  111. package/coverage/core/api/index.html +14 -14
  112. package/coverage/core/api/index.js.html +1 -1
  113. package/coverage/core/api/marshall.js.html +1 -1
  114. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  115. package/coverage/core/api/models/index.html +25 -10
  116. package/coverage/core/api/models/messages.model.mongodb.js.html +121 -0
  117. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  118. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  119. package/coverage/core/api/models/users.model.mongodb.js.html +1 -1
  120. package/coverage/core/api/services/account/account.hooks.js.html +1 -1
  121. package/coverage/core/api/services/account/account.service.js.html +1 -1
  122. package/coverage/core/api/services/account/index.html +1 -1
  123. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  124. package/coverage/core/api/services/authorisations/authorisations.service.js.html +43 -16
  125. package/coverage/core/api/services/authorisations/index.html +19 -19
  126. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  127. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  128. package/coverage/core/api/services/databases/index.html +1 -1
  129. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  130. package/coverage/core/api/services/groups/index.html +1 -1
  131. package/coverage/core/api/services/import-export/import-export.hooks.js.html +1 -1
  132. package/coverage/core/api/services/import-export/import-export.service.js.html +1 -1
  133. package/coverage/core/api/services/import-export/index.html +1 -1
  134. package/coverage/core/api/services/index.html +19 -19
  135. package/coverage/core/api/services/index.js.html +67 -10
  136. package/coverage/core/api/services/mailer/index.html +1 -1
  137. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  138. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  139. package/coverage/core/api/services/messages/index.html +116 -0
  140. package/coverage/core/api/services/messages/messages.hooks.js.html +199 -0
  141. package/coverage/core/api/services/organisations/index.html +1 -1
  142. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  143. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  144. package/coverage/core/api/services/push/index.html +1 -1
  145. package/coverage/core/api/services/push/push.hooks.js.html +1 -1
  146. package/coverage/core/api/services/push/push.service.js.html +1 -1
  147. package/coverage/core/api/services/storage/index.html +1 -1
  148. package/coverage/core/api/services/storage/storage.hooks.js.html +1 -1
  149. package/coverage/core/api/services/storage/storage.service.js.html +1 -1
  150. package/coverage/core/api/services/tags/index.html +1 -1
  151. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  152. package/coverage/core/api/services/users/index.html +1 -1
  153. package/coverage/core/api/services/users/users.hooks.js.html +1 -1
  154. package/coverage/core/api/utils.js.html +1 -1
  155. package/coverage/core/common/errors.js.html +1 -1
  156. package/coverage/core/common/index.html +1 -1
  157. package/coverage/core/common/index.js.html +1 -1
  158. package/coverage/core/common/permissions.js.html +1 -1
  159. package/coverage/core/common/schema.js.html +1 -1
  160. package/coverage/core/common/utils.js.html +1 -1
  161. package/coverage/index.html +69 -54
  162. package/coverage/lcov-report/core/api/application.js.html +1 -1
  163. package/coverage/lcov-report/core/api/authentication.js.html +1 -1
  164. package/coverage/lcov-report/core/api/db.js.html +51 -36
  165. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +1 -1
  166. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +1 -1
  167. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
  168. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +1 -1
  169. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +2 -2
  170. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
  171. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +1 -1
  172. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +1 -1
  173. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +6 -12
  174. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
  175. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
  176. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +2 -2
  177. package/coverage/lcov-report/core/api/hooks/index.html +10 -10
  178. package/coverage/lcov-report/core/api/hooks/index.js.html +1 -1
  179. package/coverage/lcov-report/core/api/index.html +14 -14
  180. package/coverage/lcov-report/core/api/index.js.html +1 -1
  181. package/coverage/lcov-report/core/api/marshall.js.html +1 -1
  182. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  183. package/coverage/lcov-report/core/api/models/index.html +25 -10
  184. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +121 -0
  185. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  186. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  187. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +1 -1
  188. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
  189. package/coverage/lcov-report/core/api/services/account/account.service.js.html +1 -1
  190. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  191. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  192. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +43 -16
  193. package/coverage/lcov-report/core/api/services/authorisations/index.html +19 -19
  194. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  195. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  196. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  197. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  198. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  199. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +1 -1
  200. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +1 -1
  201. package/coverage/lcov-report/core/api/services/import-export/index.html +1 -1
  202. package/coverage/lcov-report/core/api/services/index.html +19 -19
  203. package/coverage/lcov-report/core/api/services/index.js.html +67 -10
  204. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  205. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  206. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  207. package/coverage/lcov-report/core/api/services/messages/index.html +116 -0
  208. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +199 -0
  209. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  210. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  211. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  212. package/coverage/lcov-report/core/api/services/push/index.html +1 -1
  213. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +1 -1
  214. package/coverage/lcov-report/core/api/services/push/push.service.js.html +1 -1
  215. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  216. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +1 -1
  217. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +1 -1
  218. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  219. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  220. package/coverage/lcov-report/core/api/services/users/index.html +1 -1
  221. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +1 -1
  222. package/coverage/lcov-report/core/api/utils.js.html +1 -1
  223. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  224. package/coverage/lcov-report/core/common/index.html +1 -1
  225. package/coverage/lcov-report/core/common/index.js.html +1 -1
  226. package/coverage/lcov-report/core/common/permissions.js.html +1 -1
  227. package/coverage/lcov-report/core/common/schema.js.html +1 -1
  228. package/coverage/lcov-report/core/common/utils.js.html +1 -1
  229. package/coverage/lcov-report/index.html +69 -54
  230. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  231. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +1 -1
  232. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +1 -1
  233. package/coverage/lcov-report/map/api/hooks/index.html +1 -1
  234. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  235. package/coverage/lcov-report/map/api/index.html +1 -1
  236. package/coverage/lcov-report/map/api/index.js.html +1 -1
  237. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  238. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  239. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  240. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  241. package/coverage/lcov-report/map/api/models/index.html +1 -1
  242. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +1 -1
  243. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  244. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  245. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  246. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +9 -15
  247. package/coverage/lcov-report/map/api/services/catalog/index.html +5 -5
  248. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  249. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  250. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +2 -2
  251. package/coverage/lcov-report/map/api/services/features/features.service.js.html +1 -1
  252. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  253. package/coverage/lcov-report/map/api/services/index.html +1 -1
  254. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  255. package/coverage/lcov-report/map/api/services/projects/index.html +1 -1
  256. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +1 -1
  257. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  258. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  259. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  260. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  261. package/coverage/lcov-report/map/common/index.html +1 -1
  262. package/coverage/lcov-report/map/common/index.js.html +1 -1
  263. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  264. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  265. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  266. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  267. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  268. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  269. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  270. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  271. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  272. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  273. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  274. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  275. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  276. package/coverage/lcov.info +487 -370
  277. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  278. package/coverage/map/api/hooks/hooks.features.js.html +1 -1
  279. package/coverage/map/api/hooks/hooks.query.js.html +1 -1
  280. package/coverage/map/api/hooks/index.html +1 -1
  281. package/coverage/map/api/hooks/index.js.html +1 -1
  282. package/coverage/map/api/index.html +1 -1
  283. package/coverage/map/api/index.js.html +1 -1
  284. package/coverage/map/api/marshall.js.html +1 -1
  285. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  286. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  287. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  288. package/coverage/map/api/models/index.html +1 -1
  289. package/coverage/map/api/models/projects.model.mongodb.js.html +1 -1
  290. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  291. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  292. package/coverage/map/api/services/alerts/index.html +1 -1
  293. package/coverage/map/api/services/catalog/catalog.hooks.js.html +9 -15
  294. package/coverage/map/api/services/catalog/index.html +5 -5
  295. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  296. package/coverage/map/api/services/daptiles/index.html +1 -1
  297. package/coverage/map/api/services/features/features.hooks.js.html +2 -2
  298. package/coverage/map/api/services/features/features.service.js.html +1 -1
  299. package/coverage/map/api/services/features/index.html +1 -1
  300. package/coverage/map/api/services/index.html +1 -1
  301. package/coverage/map/api/services/index.js.html +1 -1
  302. package/coverage/map/api/services/projects/index.html +1 -1
  303. package/coverage/map/api/services/projects/projects.hooks.js.html +1 -1
  304. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  305. package/coverage/map/common/errors.js.html +1 -1
  306. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  307. package/coverage/map/common/grid.js.html +1 -1
  308. package/coverage/map/common/index.html +1 -1
  309. package/coverage/map/common/index.js.html +1 -1
  310. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  311. package/coverage/map/common/moment-utils.js.html +1 -1
  312. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  313. package/coverage/map/common/opendap-utils.js.html +1 -1
  314. package/coverage/map/common/permissions.js.html +1 -1
  315. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  316. package/coverage/map/common/tms-utils.js.html +1 -1
  317. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  318. package/coverage/map/common/wcs-utils.js.html +1 -1
  319. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  320. package/coverage/map/common/wfs-utils.js.html +1 -1
  321. package/coverage/map/common/wms-utils.js.html +1 -1
  322. package/coverage/map/common/wmts-utils.js.html +1 -1
  323. package/coverage/tmp/coverage-280506-1731704745613-0.json +1 -0
  324. package/coverage/tmp/coverage-280518-1731704745599-0.json +1 -0
  325. package/coverage/tmp/coverage-280529-1731704745588-0.json +1 -0
  326. package/coverage/tmp/{coverage-137470-1719398750728-0.json → coverage-280541-1731704745574-0.json} +1 -1
  327. package/coverage/tmp/{coverage-137477-1719398750691-0.json → coverage-280548-1731704745545-0.json} +1 -1
  328. package/extras/css/core.variables.scss +32 -8
  329. package/extras/icons/attribution.png +0 -0
  330. package/map/api/services/catalog/catalog.hooks.js +5 -7
  331. package/map/api/services/features/features.hooks.js +1 -1
  332. package/map/client/cesium/utils/utils.style.js +11 -2
  333. package/map/client/components/KAttribution.vue +108 -0
  334. package/map/client/components/KPositionIndicator.vue +11 -18
  335. package/map/client/components/KProjectMenu.vue +4 -4
  336. package/map/client/components/catalog/KCategoryItem.vue +74 -0
  337. package/map/client/components/catalog/KLayerCategories.vue +24 -12
  338. package/map/client/components/catalog/KLayersPanel.vue +139 -116
  339. package/map/client/components/catalog/KProjectSelector.vue +29 -17
  340. package/map/client/components/catalog/KProjectsPanel.vue +19 -35
  341. package/map/client/components/catalog/KViewSelector.vue +37 -25
  342. package/map/client/components/catalog/KViewsPanel.vue +19 -35
  343. package/map/client/components/form/KLocationField.vue +1 -2
  344. package/map/client/components/legend/KLegend.vue +34 -34
  345. package/map/client/components/location/KLocationCardSection.vue +18 -22
  346. package/map/client/components/location/KLocationMap.vue +36 -38
  347. package/map/client/components/location/KLocationTimeLineCard.vue +147 -0
  348. package/map/client/components/location/KLocationTip.vue +12 -2
  349. package/map/client/components/widget/KInformationBox.vue +0 -4
  350. package/map/client/components/widget/KStackableTimeSeries.vue +8 -1
  351. package/map/client/components/widget/KTimeSeries.vue +1 -1
  352. package/map/client/composables/highlight.js +29 -31
  353. package/map/client/composables/probe.js +7 -3
  354. package/map/client/composables/weather.js +71 -31
  355. package/map/client/i18n/map_en.json +3 -0
  356. package/map/client/i18n/map_fr.json +3 -0
  357. package/map/client/init.js +4 -3
  358. package/map/client/leaflet/ShapeMarker.js +1 -1
  359. package/map/client/leaflet/utils/utils.events.js +1 -1
  360. package/map/client/leaflet/utils/utils.style.js +20 -8
  361. package/map/client/mixins/globe/mixin.base-globe.js +111 -13
  362. package/map/client/mixins/globe/mixin.file-layers.js +10 -10
  363. package/map/client/mixins/globe/mixin.geojson-layers.js +90 -15
  364. package/map/client/mixins/globe/mixin.style.js +2 -0
  365. package/map/client/mixins/index.js +0 -1
  366. package/map/client/mixins/map/index.js +1 -0
  367. package/map/client/mixins/map/mixin.base-map.js +21 -2
  368. package/map/client/mixins/map/mixin.canvas-layers.js +7 -2
  369. package/map/client/mixins/map/mixin.edit-layers.js +12 -4
  370. package/map/client/mixins/map/mixin.file-layers.js +3 -0
  371. package/map/client/mixins/map/mixin.geojson-layers.js +90 -5
  372. package/map/client/mixins/map/mixin.pmtiles-layers.js +106 -0
  373. package/map/client/mixins/mixin.activity.js +8 -3
  374. package/map/client/mixins/mixin.feature-service.js +73 -32
  375. package/map/client/mixins/mixin.levels.js +1 -0
  376. package/map/client/mixins/mixin.weacast.js +10 -87
  377. package/map/client/utils/index.js +1 -0
  378. package/map/client/utils/utils.capture.js +1 -1
  379. package/map/client/utils/utils.catalog.js +7 -7
  380. package/map/client/utils/utils.features.js +59 -1
  381. package/map/client/utils/utils.layers.js +8 -0
  382. package/map/client/utils/utils.time-series.js +121 -0
  383. package/map/client/utils/utils.weacast.js +102 -0
  384. package/package.json +6 -6
  385. package/scripts/init_runner.sh +2 -2
  386. package/scripts/kash/CHANGELOG.md +12 -0
  387. package/scripts/kash/README.md +2 -0
  388. package/scripts/kash/kash.sh +34 -32
  389. package/scripts/run_tests.sh +2 -2
  390. package/scripts/setup_workspace.sh +24 -6
  391. package/test/api/core/hooks.test.js +6 -3
  392. package/test/api/core/test-log-2024-07-09.log +0 -0
  393. package/test/api/core/test-log-2024-08-13.log +69 -0
  394. package/test/api/core/test-log-2024-10-28.log +53 -0
  395. package/test/api/core/test-log-2024-11-05.log +30 -0
  396. package/test/api/core/test-log-2024-11-15.log +23 -0
  397. package/test/api/map/alerts.test.js +3 -1
  398. package/test/api/map/config/layers.json +3 -1
  399. package/test/api/map/index.test.js +18 -1
  400. package/test/api/map/test-log-2024-08-13.log +13 -0
  401. package/test/api/map/test-log-2024-08-20.log +55 -0
  402. package/test/api/map/test-log-2024-09-09.log +92 -0
  403. package/test/api/map/test-log-2024-10-28.log +11 -0
  404. package/test/client/core/utils.js +13 -0
  405. package/test/client/map/api.js +34 -0
  406. package/test/client/map/catalog.js +6 -2
  407. package/test/client/map/index.js +1 -0
  408. package/test/client/map/utils.js +4 -2
  409. package/core/client/components/collection/KList.vue +0 -135
  410. package/core/client/components/layout/KPageSticky.vue +0 -53
  411. package/core/client/mixins/mixin.base-collection.js +0 -162
  412. package/core/client/utils/utils.data.js +0 -22
  413. package/coverage/tmp/coverage-137435-1719398750767-0.json +0 -1
  414. package/coverage/tmp/coverage-137447-1719398750752-0.json +0 -1
  415. package/coverage/tmp/coverage-137458-1719398750740-0.json +0 -1
  416. package/map/client/mixins/mixin.catalog-panel.js +0 -26
@@ -4,13 +4,15 @@
4
4
  Window header
5
5
  -->
6
6
  <div
7
+ :id="`${placement}-window-header`"
7
8
  class="k-window-header full-width row items-center"
8
9
  v-touch-pan.prevent.mouse="onMoved"
9
10
  >
10
- <q-resize-observer @resize="onHeaderResized" />
11
+ <q-resize-observer @resize="onWindowHeaderResized" />
11
12
  <!-- window menu -->
12
13
  <KPanel
13
- id="window-menu"
14
+ v-if="currentWindow.controls.menu"
15
+ :id="`${placement}-window-menu`"
14
16
  :content="menu"
15
17
  @touchstart.passive.stop
16
18
  @mousedown.passive.stop
@@ -55,6 +57,7 @@
55
57
  :style="`min-width: ${widgetWidth}px; max-width: ${widgetWidth}px;`"
56
58
  >
57
59
  <component
60
+ :id="`${placement}-window-content`"
58
61
  ref="widgetRef"
59
62
  :is="widget.instance"
60
63
  v-bind="widget.content"
@@ -62,6 +65,7 @@
62
65
  />
63
66
  </KScrollArea>
64
67
  <component v-else
68
+ :id="`${placement}-window-content`"
65
69
  ref="widgetRef"
66
70
  :is="widget.instance"
67
71
  v-bind="widget.content"
@@ -71,8 +75,11 @@
71
75
  <!--
72
76
  Window footer
73
77
  -->
74
- <div id="window-footer" class="k-window-footer full-width row justify-end">
75
- <q-resize-observer @resize="onFooterResized" />
78
+ <div
79
+ :id="`${placement}-window-footer`"
80
+ class="k-window-footer full-width row justify-end"
81
+ >
82
+ <q-resize-observer @resize="onWindowFooterResized" />
76
83
  <!-- window grip -->
77
84
  <q-icon
78
85
  v-if="currentWindow.controls.resize && currentWindow.state !== 'maximized'"
@@ -90,7 +97,10 @@ import _ from 'lodash'
90
97
  import logger from 'loglevel'
91
98
  import { ref, computed, watch, provide } from 'vue'
92
99
  import { useQuasar } from 'quasar'
93
- import { Store, LocalStorage, Layout, utils } from '../..'
100
+ import { Store } from '../../store.js'
101
+ import { LocalStorage } from '../../local-storage.js'
102
+ import { Layout } from '../../layout.js'
103
+ import { loadComponent, bindContent, computeResponsiveSize } from '../../utils'
94
104
  import KPanel from '../KPanel.vue'
95
105
  import KScrollArea from '../KScrollArea.vue'
96
106
  import KMenu from '../menu/KMenu.vue'
@@ -106,16 +116,18 @@ const props = defineProps({
106
116
  },
107
117
  layoutOffset: {
108
118
  type: Number,
109
- defaut: 0
119
+ default: 0
110
120
  }
111
121
  })
112
122
 
113
123
  // Data
114
124
  const $q = useQuasar()
125
+ const header = Layout.getHeader()
126
+ const footer = Layout.getFooter()
115
127
  const currentWindow = Layout.getWindow(props.placement)
128
+ const windowHeaderHeight = ref(0)
129
+ const windowFooterHeight = ref(0)
116
130
  const widgetRef = ref(null)
117
- const headerHeight = ref(0)
118
- const footerHeight = ref(0)
119
131
  const pinIcons = {
120
132
  left: 'las la-angle-left',
121
133
  right: 'las la-angle-right',
@@ -129,7 +141,6 @@ const unpinIcons = {
129
141
  bottom: 'las la-angle-up'
130
142
  }
131
143
  const border = 2
132
- let backupState
133
144
 
134
145
  // Provide
135
146
  provide('widget', widgetRef)
@@ -139,7 +150,7 @@ const widgets = computed(() => {
139
150
  let isCurrentValid = false
140
151
  _.forEach(currentWindow.components, (widget) => {
141
152
  const componentName = _.get(widget, 'content.component')
142
- widget.instance = utils.loadComponent(componentName)
153
+ widget.instance = loadComponent(componentName)
143
154
  if (currentWindow.current === widget.id) isCurrentValid = true
144
155
  })
145
156
  if (!isCurrentValid) Layout.setWindowCurrent(props.placement, _.get(widgets, '[0].id'))
@@ -199,7 +210,7 @@ const headerControls = computed(() => {
199
210
  size: 'sm',
200
211
  tooltip: 'KWindow.RESTORE_ACTION',
201
212
  visible: currentWindow.controls.restore && currentWindow.state === 'maximized',
202
- handler: () => Layout.setWindowState(props.placement, backupState)
213
+ handler: () => Layout.setWindowState(props.placement, LocalStorage.get(getStorageKey('restore-state')) || 'pinned')
203
214
  }, {
204
215
  id: `close-${props.placement}-window`,
205
216
  icon: 'las la-times',
@@ -230,14 +241,14 @@ const widgetLabel = computed(() => {
230
241
  const widgetHeader = computed(() => {
231
242
  if (!widget.value) return null
232
243
  let header = _.cloneDeep(widget.value.header)
233
- header = utils.bindContent(header, widgetRef.value)
244
+ header = bindContent(header, widgetRef.value)
234
245
  return header
235
246
  })
236
247
  const widgetWidth = computed(() => {
237
248
  return currentWindow.size[0] - border
238
249
  })
239
250
  const widgetHeight = computed(() => {
240
- return currentWindow.size[1] - headerHeight.value - footerHeight.value
251
+ return currentWindow.size[1] - windowHeaderHeight.value - windowFooterHeight.value
241
252
  })
242
253
 
243
254
  // Watch
@@ -248,10 +259,10 @@ watch(() => currentWindow.state, (newState, oldState) => refresh(newState, oldSt
248
259
  function getStorageKey (element) {
249
260
  return `windows-${props.placement}-${element}`
250
261
  }
251
- function storeState () {
262
+ function writeState () {
252
263
  LocalStorage.set(getStorageKey('state'), currentWindow.state)
253
264
  }
254
- function restoreState () {
265
+ function readState () {
255
266
  return LocalStorage.get(getStorageKey('state'))
256
267
  }
257
268
  function storeGeometry () {
@@ -263,18 +274,20 @@ function restoreGeometry () {
263
274
  function refresh (newState, oldState) {
264
275
  switch (newState) {
265
276
  case 'pinned': {
266
- storeState()
277
+ LocalStorage.clear(getStorageKey('restore-state'))
278
+ writeState()
267
279
  setPinnedGeometry()
268
280
  break
269
281
  }
270
282
  case 'maximized': {
271
- storeState()
272
- backupState = oldState
283
+ if (oldState) LocalStorage.set(getStorageKey('restore-state'), oldState)
284
+ writeState()
273
285
  setMaximizedGeometry()
274
286
  break
275
287
  }
276
288
  case 'floating': {
277
- storeState()
289
+ LocalStorage.clear(getStorageKey('restore-state'))
290
+ writeState()
278
291
  const geometry = restoreGeometry()
279
292
  if (geometry) {
280
293
  updateGeometry(geometry.position, geometry.size, true)
@@ -286,25 +299,26 @@ function refresh (newState, oldState) {
286
299
  break
287
300
  }
288
301
  default:
289
- logger.warn(`[KDK] invalid window state ${currentWindow.state}`)
302
+ logger.error(`[KDK] invalid window state ${currentWindow.state}`)
290
303
  }
291
304
  }
292
305
  function setPinnedGeometry () {
293
- const sizeRatio = currentWindow.sizePolicy.pinned[$q.screen.name]
294
- const w = $q.screen.width * sizeRatio[0] / 100
295
- const h = $q.screen.height * sizeRatio[1] / 100
306
+ const size = computeResponsiveSize(currentWindow.sizePolicy.pinned)
296
307
  let x, y
297
308
  if (props.placement === 'top' || props.placement === 'bottom') {
298
- x = $q.screen.width / 2 - w / 2
299
- y = props.placement === 'top' ? 0 : $q.screen.height - h
309
+ x = $q.screen.width / 2 - size[0] / 2
310
+ y = props.placement === 'top' ? 0 : $q.screen.height - size[1]
300
311
  } else {
301
- x = props.placement === 'left' ? 0 : $q.screen.width - w
302
- y = $q.screen.height / 2 - h / 2
312
+ x = props.placement === 'left' ? 0 : $q.screen.width - size[0]
313
+ y = $q.screen.height / 2 - size[1] / 2
303
314
  }
304
- updateGeometry([x, y], [w, h])
315
+ updateGeometry([x, y], size)
305
316
  }
306
317
  function setMaximizedGeometry () {
307
- updateGeometry([0, 0], [$q.screen.width, $q.screen.height])
318
+ let height = $q.screen.height
319
+ if (header.visible) height -= header.size[1]
320
+ if (footer.visible) height -= footer.size[1]
321
+ updateGeometry([0, 0], [$q.screen.width, height])
308
322
  }
309
323
  function updateGeometry (position, size, check = false) {
310
324
  // check geometry
@@ -318,7 +332,7 @@ function updateGeometry (position, size, check = false) {
318
332
  position = [x, y]
319
333
  size = [w, h]
320
334
  }
321
- // compute breakpoings
335
+ // compute breakpoints
322
336
  // Code taken from quasar screen plugin code
323
337
  const w = size[0]
324
338
  const s = $q.screen.sizes
@@ -350,6 +364,9 @@ function updateGeometry (position, size, check = false) {
350
364
  function onMoved (event) {
351
365
  if (!event) return
352
366
  if (currentWindow.state !== 'maximized') {
367
+ // Set Focus
368
+ Layout.setFocus(`windows.${props.placement}`)
369
+ // Update geometry
353
370
  if (currentWindow.state !== 'floating') {
354
371
  storeGeometry()
355
372
  Layout.setWindowState(props.placement, 'floating')
@@ -364,8 +381,10 @@ function onMoved (event) {
364
381
  if (event.isFinal) storeGeometry()
365
382
  }
366
383
  }
367
- function onResized (event) {
384
+ const onResized = _.throttle((event) => {
368
385
  if (!event) return
386
+ // Set Focus
387
+ Layout.setFocus(`windows.${props.placement}`)
369
388
  // Handle the pinned and floating currentState
370
389
  if (currentWindow.state !== 'maximized') {
371
390
  if (currentWindow.state !== 'floating') {
@@ -381,26 +400,24 @@ function onResized (event) {
381
400
  updateGeometry(currentWindow.position, newSize)
382
401
  if (event.isFinal) storeGeometry()
383
402
  }
384
- }
385
- function onScreenResized () {
403
+ }, 5)
404
+ const onScreenResized = _.throttle(() => {
386
405
  if (currentWindow.state === 'pinned') setPinnedGeometry()
387
406
  else if (currentWindow.state === 'maximized') setMaximizedGeometry()
388
407
  else updateGeometry(currentWindow.position, currentWindow.size, true)
408
+ }, 50)
409
+ function onWindowHeaderResized (size) {
410
+ windowHeaderHeight.value = size.height
389
411
  }
390
- function onHeaderResized (size) {
391
- headerHeight.value = size.height
392
- }
393
- function onFooterResized (size) {
394
- footerHeight.value = size.height
412
+ function onWindowFooterResized (size) {
413
+ windowFooterHeight.value = size.height
395
414
  }
396
415
 
397
416
  // restore the state
398
- const fallbackState = restoreState() || 'pinned'
399
- if (currentWindow.state) {
400
- logger.debug(`[KDK] restoring ${props.placement} window in ${currentWindow.state} state`)
401
- refresh(currentWindow.state, fallbackState)
402
- } else {
403
- logger.debug(`[KDK] restoring ${props.placement} window in ${fallbackState} state`)
417
+ const currentState = currentWindow.state
418
+ if (currentState) refresh(currentState)
419
+ else {
420
+ const fallbackState = readState() || 'pinned'
404
421
  Layout.setWindowState(props.placement, fallbackState)
405
422
  }
406
423
  </script>
@@ -425,7 +442,7 @@ if (currentWindow.state) {
425
442
  background-color: $window-header-hover-background;
426
443
  }
427
444
  .k-window-footer {
428
- height: v-bind(footerHeight)px;
445
+ height: v-bind(windowFooterHeight)px;
429
446
  border-radius: 0 0 $window-border-radius $window-border-radius;
430
447
  }
431
448
  .k-window-grip:hover {
@@ -1,13 +1,11 @@
1
1
  import KFab from './KFab.vue'
2
2
  import KLayout from './KLayout.vue'
3
3
  import KPage from './KPage.vue'
4
- import KPageSticky from './KPageSticky.vue'
5
4
  import KWindow from './KWindow.vue'
6
5
 
7
6
  export {
8
7
  KFab,
9
8
  KLayout,
10
9
  KPage,
11
- KPageSticky,
12
10
  KWindow
13
11
  }
@@ -0,0 +1,95 @@
1
+ <template>
2
+ <div class="k-ribbon">
3
+ {{ text }}
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import _ from 'lodash'
9
+ import { computed } from 'vue'
10
+ import { getHtmlColor } from '../../utils/utils.colors.js'
11
+ const width = 500
12
+
13
+ // Props
14
+ const props = defineProps({
15
+ text: {
16
+ type: String,
17
+ default: undefined
18
+ },
19
+ size: {
20
+ type: Number,
21
+ default: 32
22
+ },
23
+ color: {
24
+ type: String,
25
+ default: 'primary'
26
+ },
27
+ textColor: {
28
+ type: String,
29
+ default: 'white'
30
+ },
31
+ letterSpacing: {
32
+ type: Number,
33
+ default: 2
34
+ },
35
+ position: {
36
+ type: String,
37
+ default: 'top-left',
38
+ validator: (value) => {
39
+ return ['top-left', 'top-right', 'bottom-right', 'bottom-left'].includes(value)
40
+ }
41
+ },
42
+ origin: {
43
+ type: Array,
44
+ default: [50, 50],
45
+ validator: (value) => {
46
+ return _.isArray(value) && _.size(value) === 2
47
+ }
48
+ }
49
+ })
50
+
51
+ // Computed
52
+ const computedWidth = computed(() => {
53
+ return `${width}px`
54
+ })
55
+ const computedHeight = computed(() => {
56
+ return `${props.size}px`
57
+ })
58
+ const computedFontSize = computed(() => {
59
+ return `${props.size - 8}px`
60
+ })
61
+ const computedColor = computed(() => {
62
+ return getHtmlColor(props.color)
63
+ })
64
+ const computedTextColor = computed(() => {
65
+ return getHtmlColor(props.textColor)
66
+ })
67
+ const computedLetterSpacing = computed(() => {
68
+ return `${props.letterSpacing}px`
69
+ })
70
+ const translation = computed(() => {
71
+ if (props.position === 'top-left') return `${props.origin[0] - (width / 2)}px, ${props.origin[1] - (props.size / 2)}px`
72
+ if (props.position === 'top-right') return `${(width / 2) - props.origin[0]}px, ${props.origin[1] - (props.size / 2)}px`
73
+ if (props.position === 'bottom-right') return `${(width / 2) - props.origin[0]}px, ${(props.size / 2) - props.origin[1]}px`
74
+ if (props.position === 'bottom-left') return `${props.origin[0] - (width / 2)}px, ${(props.size / 2) - props.origin[1]}px`
75
+ })
76
+ const rotation = computed(() => {
77
+ if (props.position === 'top-left' || props.position === 'bottom-right') return '-45deg'
78
+ return '45deg'
79
+ })
80
+ </script>
81
+
82
+ <style lang="scss" scope>
83
+ .k-ribbon {
84
+ width: v-bind(computedWidth);
85
+ height: v-bind(computedHeight);
86
+ display: flex;
87
+ justify-content: center;
88
+ align-items: center;
89
+ transform: translate(v-bind(translation)) rotate(v-bind(rotation));
90
+ background-color: v-bind(computedColor);
91
+ color: v-bind(computedTextColor);
92
+ font-size: v-bind(computedFontSize);
93
+ letter-spacing: v-bind(computedLetterSpacing);
94
+ }
95
+ </style>
@@ -140,8 +140,8 @@ function onClicked (event) {
140
140
  }
141
141
  </script>
142
142
 
143
- <style lang="scss" scoped>
144
- .q-btn-dropdown__arrow {
145
- margin-left: 0px !important;
146
- }
143
+ <style lang="scss">
144
+ .q-btn-dropdown__arrow {
145
+ margin-left: 0px !important;
146
+ }
147
147
  </style>
@@ -1,32 +1,30 @@
1
1
  <template>
2
2
  <KPage padding>
3
- <template v-slot:page-content>
4
- <!--
5
- Groups collection
6
- -->
7
- <KGrid
8
- ref="groupsGrid"
9
- :contextId="contextId"
10
- service="groups"
11
- :renderer="renderer"
12
- :base-query="sorter.query"
13
- :filter-query="filter.query"
14
- :list-strategy="'smart'">
15
- <template v-slot:empty-section>
16
- <div class="absolute-center">
17
- <KStamp
18
- icon="las la-exclamation-circle"
19
- icon-size="3rem"
20
- :text="$t('KGrid.EMPTY_GRID')"
21
- />
22
- </div>
23
- </template>
24
- </KGrid>
25
- <!--
26
- Router view to enable routing to modals
27
- -->
28
- <router-view service="groups"></router-view>
29
- </template>
3
+ <!--
4
+ Groups collection
5
+ -->
6
+ <KGrid
7
+ ref="groupsGrid"
8
+ :contextId="contextId"
9
+ service="groups"
10
+ :renderer="renderer"
11
+ :base-query="sorter.query"
12
+ :filter-query="filter.query"
13
+ :list-strategy="'smart'">
14
+ <template v-slot:empty-section>
15
+ <div class="absolute-center">
16
+ <KStamp
17
+ icon="las la-exclamation-circle"
18
+ icon-size="3rem"
19
+ :text="$t('KGrid.EMPTY_LABEL')"
20
+ />
21
+ </div>
22
+ </template>
23
+ </KGrid>
24
+ <!--
25
+ Router view to enable routing to modals
26
+ -->
27
+ <router-view service="groups"></router-view>
30
28
  </KPage>
31
29
  </template>
32
30
 
@@ -1,28 +1,26 @@
1
1
  <template>
2
2
  <KPage padding>
3
- <template v-slot:page-content>
4
- <!--
5
- Members collection, cannot use smart strategy here because membership is not managed at service level
6
- but using authorisations on users
7
- -->
8
- <KGrid
9
- ref="membersGrid"
10
- service="members"
11
- :renderer="renderer"
12
- :contextId="contextId"
13
- :base-query="baseQuery"
14
- :filter-query="filter.query">
15
- <template v-slot:empty-section>
16
- <div class="absolute-center">
17
- <KStamp icon="las la-exclamation-circle" icon-size="3rem" :text="$t('KGrid.EMPTY_GRID')" />
18
- </div>
19
- </template>
20
- </KGrid>
21
- <!--
22
- Router view to enable routing to modals
23
- -->
24
- <router-view service="members"></router-view>
25
- </template>
3
+ <!--
4
+ Members collection, cannot use smart strategy here because membership is not managed at service level
5
+ but using authorisations on users
6
+ -->
7
+ <KGrid
8
+ ref="membersGrid"
9
+ service="members"
10
+ :renderer="renderer"
11
+ :contextId="contextId"
12
+ :base-query="baseQuery"
13
+ :filter-query="filter.query">
14
+ <template v-slot:empty-section>
15
+ <div class="absolute-center">
16
+ <KStamp icon="las la-exclamation-circle" icon-size="3rem" :text="$t('KGrid.EMPTY_LABEL')" />
17
+ </div>
18
+ </template>
19
+ </KGrid>
20
+ <!--
21
+ Router view to enable routing to modals
22
+ -->
23
+ <router-view service="members"></router-view>
26
24
  </KPage>
27
25
  </template>
28
26
 
@@ -1,27 +1,25 @@
1
1
  <template>
2
2
  <KPage padding>
3
- <template v-slot:page-content>
4
- <!--
5
- Organisations collection
6
- -->
7
- <KGrid
8
- ref="organisationsGrid"
9
- service="organisations"
10
- :renderer="renderer"
11
- :base-query="sorter.query"
12
- :filter-query="filter.query"
13
- :list-strategy="'smart'">
14
- <template v-slot:empty-section>
15
- <div class="absolute-center">
16
- <KStamp icon="las la-exclamation-circle" icon-size="3rem" :text="$t('KGrid.EMPTY_GRID')" />
17
- </div>
18
- </template>
19
- </KGrid>
20
- <!--
21
- Router view to enable routing to modals
22
- -->
23
- <router-view service="organisations"></router-view>
24
- </template>
3
+ <!--
4
+ Organisations collection
5
+ -->
6
+ <KGrid
7
+ ref="organisationsGrid"
8
+ service="organisations"
9
+ :renderer="renderer"
10
+ :base-query="sorter.query"
11
+ :filter-query="filter.query"
12
+ :list-strategy="'smart'">
13
+ <template v-slot:empty-section>
14
+ <div class="absolute-center">
15
+ <KStamp icon="las la-exclamation-circle" icon-size="3rem" :text="$t('KGrid.EMPTY_LABEL')" />
16
+ </div>
17
+ </template>
18
+ </KGrid>
19
+ <!--
20
+ Router view to enable routing to modals
21
+ -->
22
+ <router-view service="organisations"></router-view>
25
23
  </KPage>
26
24
  </template>
27
25
 
@@ -1,28 +1,26 @@
1
1
  <template>
2
2
  <KPage padding>
3
- <template v-slot:page-content>
4
- <!--
5
- Groups collection
6
- -->
7
- <KGrid
8
- ref="tagsGrid"
9
- :contextId="contextId"
10
- service="tags"
11
- :renderer="renderer"
12
- :base-query="sorter.query"
13
- :filter-query="filter.query"
14
- :list-strategy="'smart'">
15
- <template v-slot:empty-section>
16
- <div class="absolute-center">
17
- <KStamp icon="las la-exclamation-circle" icon-size="3rem" :text="$t('KGrid.EMPTY_GRID')" />
18
- </div>
19
- </template>
20
- </KGrid>
21
- <!--
22
- Router view to enable routing to modals
23
- -->
24
- <router-view service="tags"></router-view>
25
- </template>
3
+ <!--
4
+ Groups collection
5
+ -->
6
+ <KGrid
7
+ ref="tagsGrid"
8
+ :contextId="contextId"
9
+ service="tags"
10
+ :renderer="renderer"
11
+ :base-query="sorter.query"
12
+ :filter-query="filter.query"
13
+ :list-strategy="'smart'">
14
+ <template v-slot:empty-section>
15
+ <div class="absolute-center">
16
+ <KStamp icon="las la-exclamation-circle" icon-size="3rem" :text="$t('KGrid.EMPTY_LABEL')" />
17
+ </div>
18
+ </template>
19
+ </KGrid>
20
+ <!--
21
+ Router view to enable routing to modals
22
+ -->
23
+ <router-view service="tags"></router-view>
26
24
  </KPage>
27
25
  </template>
28
26