@kalisio/kdk 2.3.2 → 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 (441) 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 +62 -49
  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 +54 -32
  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/base.css +224 -0
  95. package/coverage/block-navigation.js +87 -0
  96. package/coverage/core/api/application.js.html +1870 -0
  97. package/coverage/core/api/authentication.js.html +742 -0
  98. package/coverage/core/api/db.js.html +793 -0
  99. package/coverage/core/api/hooks/hooks.authentication.js.html +313 -0
  100. package/coverage/core/api/hooks/hooks.authorisations.js.html +1243 -0
  101. package/coverage/core/api/hooks/hooks.groups.js.html +229 -0
  102. package/coverage/core/api/hooks/hooks.logger.js.html +163 -0
  103. package/coverage/core/api/hooks/hooks.model.js.html +955 -0
  104. package/coverage/core/api/hooks/hooks.organisations.js.html +541 -0
  105. package/coverage/core/api/hooks/hooks.push.js.html +253 -0
  106. package/coverage/core/api/hooks/hooks.query.js.html +862 -0
  107. package/coverage/core/api/hooks/hooks.schemas.js.html +298 -0
  108. package/coverage/core/api/hooks/hooks.service.js.html +319 -0
  109. package/coverage/core/api/hooks/hooks.storage.js.html +193 -0
  110. package/coverage/core/api/hooks/hooks.users.js.html +868 -0
  111. package/coverage/core/api/hooks/index.html +296 -0
  112. package/coverage/core/api/hooks/index.js.html +121 -0
  113. package/coverage/core/api/index.html +191 -0
  114. package/coverage/core/api/index.js.html +148 -0
  115. package/coverage/core/api/marshall.js.html +448 -0
  116. package/coverage/core/api/models/groups.model.mongodb.js.html +109 -0
  117. package/coverage/core/api/models/index.html +176 -0
  118. package/coverage/core/api/models/messages.model.mongodb.js.html +121 -0
  119. package/coverage/core/api/models/organisations.model.mongodb.js.html +94 -0
  120. package/coverage/core/api/models/tags.model.mongodb.js.html +115 -0
  121. package/coverage/core/api/models/users.model.mongodb.js.html +115 -0
  122. package/coverage/core/api/services/account/account.hooks.js.html +208 -0
  123. package/coverage/core/api/services/account/account.service.js.html +436 -0
  124. package/coverage/core/api/services/account/index.html +131 -0
  125. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +184 -0
  126. package/coverage/core/api/services/authorisations/authorisations.service.js.html +529 -0
  127. package/coverage/core/api/services/authorisations/index.html +131 -0
  128. package/coverage/core/api/services/databases/databases.hooks.js.html +193 -0
  129. package/coverage/core/api/services/databases/databases.service.js.html +100 -0
  130. package/coverage/core/api/services/databases/index.html +131 -0
  131. package/coverage/core/api/services/groups/groups.hooks.js.html +178 -0
  132. package/coverage/core/api/services/groups/index.html +116 -0
  133. package/coverage/core/api/services/import-export/import-export.hooks.js.html +184 -0
  134. package/coverage/core/api/services/import-export/import-export.service.js.html +118 -0
  135. package/coverage/core/api/services/import-export/index.html +131 -0
  136. package/coverage/core/api/services/index.html +116 -0
  137. package/coverage/core/api/services/index.js.html +556 -0
  138. package/coverage/core/api/services/mailer/index.html +131 -0
  139. package/coverage/core/api/services/mailer/mailer.hooks.js.html +190 -0
  140. package/coverage/core/api/services/mailer/mailer.service.js.html +118 -0
  141. package/coverage/core/api/services/messages/index.html +116 -0
  142. package/coverage/core/api/services/messages/messages.hooks.js.html +199 -0
  143. package/coverage/core/api/services/organisations/index.html +131 -0
  144. package/coverage/core/api/services/organisations/organisations.hooks.js.html +178 -0
  145. package/coverage/core/api/services/organisations/organisations.service.js.html +343 -0
  146. package/coverage/core/api/services/push/index.html +131 -0
  147. package/coverage/core/api/services/push/push.hooks.js.html +190 -0
  148. package/coverage/core/api/services/push/push.service.js.html +121 -0
  149. package/coverage/core/api/services/storage/index.html +131 -0
  150. package/coverage/core/api/services/storage/storage.hooks.js.html +190 -0
  151. package/coverage/core/api/services/storage/storage.service.js.html +172 -0
  152. package/coverage/core/api/services/tags/index.html +116 -0
  153. package/coverage/core/api/services/tags/tags.hooks.js.html +178 -0
  154. package/coverage/core/api/services/users/index.html +116 -0
  155. package/coverage/core/api/services/users/users.hooks.js.html +307 -0
  156. package/coverage/core/api/utils.js.html +118 -0
  157. package/coverage/core/common/errors.js.html +88 -0
  158. package/coverage/core/common/index.html +176 -0
  159. package/coverage/core/common/index.js.html +115 -0
  160. package/coverage/core/common/permissions.js.html +1048 -0
  161. package/coverage/core/common/schema.js.html +190 -0
  162. package/coverage/core/common/utils.js.html +220 -0
  163. package/coverage/favicon.png +0 -0
  164. package/coverage/index.html +506 -0
  165. package/coverage/lcov-report/base.css +224 -0
  166. package/coverage/lcov-report/block-navigation.js +87 -0
  167. package/coverage/lcov-report/core/api/application.js.html +1870 -0
  168. package/coverage/lcov-report/core/api/authentication.js.html +742 -0
  169. package/coverage/lcov-report/core/api/db.js.html +793 -0
  170. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +313 -0
  171. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +1243 -0
  172. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +229 -0
  173. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +163 -0
  174. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +955 -0
  175. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +541 -0
  176. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +253 -0
  177. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +862 -0
  178. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +298 -0
  179. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +319 -0
  180. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +193 -0
  181. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +868 -0
  182. package/coverage/lcov-report/core/api/hooks/index.html +296 -0
  183. package/coverage/lcov-report/core/api/hooks/index.js.html +121 -0
  184. package/coverage/lcov-report/core/api/index.html +191 -0
  185. package/coverage/lcov-report/core/api/index.js.html +148 -0
  186. package/coverage/lcov-report/core/api/marshall.js.html +448 -0
  187. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +109 -0
  188. package/coverage/lcov-report/core/api/models/index.html +176 -0
  189. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +121 -0
  190. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +94 -0
  191. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +115 -0
  192. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +115 -0
  193. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +208 -0
  194. package/coverage/lcov-report/core/api/services/account/account.service.js.html +436 -0
  195. package/coverage/lcov-report/core/api/services/account/index.html +131 -0
  196. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +184 -0
  197. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +529 -0
  198. package/coverage/lcov-report/core/api/services/authorisations/index.html +131 -0
  199. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +193 -0
  200. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +100 -0
  201. package/coverage/lcov-report/core/api/services/databases/index.html +131 -0
  202. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +178 -0
  203. package/coverage/lcov-report/core/api/services/groups/index.html +116 -0
  204. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +184 -0
  205. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +118 -0
  206. package/coverage/lcov-report/core/api/services/import-export/index.html +131 -0
  207. package/coverage/lcov-report/core/api/services/index.html +116 -0
  208. package/coverage/lcov-report/core/api/services/index.js.html +556 -0
  209. package/coverage/lcov-report/core/api/services/mailer/index.html +131 -0
  210. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +190 -0
  211. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +118 -0
  212. package/coverage/lcov-report/core/api/services/messages/index.html +116 -0
  213. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +199 -0
  214. package/coverage/lcov-report/core/api/services/organisations/index.html +131 -0
  215. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +178 -0
  216. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +343 -0
  217. package/coverage/lcov-report/core/api/services/push/index.html +131 -0
  218. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +190 -0
  219. package/coverage/lcov-report/core/api/services/push/push.service.js.html +121 -0
  220. package/coverage/lcov-report/core/api/services/storage/index.html +131 -0
  221. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +190 -0
  222. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +172 -0
  223. package/coverage/lcov-report/core/api/services/tags/index.html +116 -0
  224. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +178 -0
  225. package/coverage/lcov-report/core/api/services/users/index.html +116 -0
  226. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +307 -0
  227. package/coverage/lcov-report/core/api/utils.js.html +118 -0
  228. package/coverage/lcov-report/core/common/errors.js.html +88 -0
  229. package/coverage/lcov-report/core/common/index.html +176 -0
  230. package/coverage/lcov-report/core/common/index.js.html +115 -0
  231. package/coverage/lcov-report/core/common/permissions.js.html +1048 -0
  232. package/coverage/lcov-report/core/common/schema.js.html +190 -0
  233. package/coverage/lcov-report/core/common/utils.js.html +220 -0
  234. package/coverage/lcov-report/favicon.png +0 -0
  235. package/coverage/lcov-report/index.html +506 -0
  236. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +457 -0
  237. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +397 -0
  238. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +1309 -0
  239. package/coverage/lcov-report/map/api/hooks/index.html +161 -0
  240. package/coverage/lcov-report/map/api/hooks/index.js.html +94 -0
  241. package/coverage/lcov-report/map/api/index.html +131 -0
  242. package/coverage/lcov-report/map/api/index.js.html +139 -0
  243. package/coverage/lcov-report/map/api/marshall.js.html +178 -0
  244. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +106 -0
  245. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +127 -0
  246. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +196 -0
  247. package/coverage/lcov-report/map/api/models/index.html +161 -0
  248. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +109 -0
  249. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +274 -0
  250. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +610 -0
  251. package/coverage/lcov-report/map/api/services/alerts/index.html +131 -0
  252. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +310 -0
  253. package/coverage/lcov-report/map/api/services/catalog/index.html +116 -0
  254. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1510 -0
  255. package/coverage/lcov-report/map/api/services/daptiles/index.html +116 -0
  256. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +241 -0
  257. package/coverage/lcov-report/map/api/services/features/features.service.js.html +241 -0
  258. package/coverage/lcov-report/map/api/services/features/index.html +131 -0
  259. package/coverage/lcov-report/map/api/services/index.html +116 -0
  260. package/coverage/lcov-report/map/api/services/index.js.html +817 -0
  261. package/coverage/lcov-report/map/api/services/projects/index.html +116 -0
  262. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +439 -0
  263. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +466 -0
  264. package/coverage/lcov-report/map/common/errors.js.html +94 -0
  265. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +541 -0
  266. package/coverage/lcov-report/map/common/grid.js.html +1612 -0
  267. package/coverage/lcov-report/map/common/index.html +371 -0
  268. package/coverage/lcov-report/map/common/index.js.html +172 -0
  269. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +556 -0
  270. package/coverage/lcov-report/map/common/moment-utils.js.html +157 -0
  271. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +868 -0
  272. package/coverage/lcov-report/map/common/opendap-utils.js.html +826 -0
  273. package/coverage/lcov-report/map/common/permissions.js.html +124 -0
  274. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +418 -0
  275. package/coverage/lcov-report/map/common/tms-utils.js.html +274 -0
  276. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +364 -0
  277. package/coverage/lcov-report/map/common/wcs-utils.js.html +586 -0
  278. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1033 -0
  279. package/coverage/lcov-report/map/common/wfs-utils.js.html +574 -0
  280. package/coverage/lcov-report/map/common/wms-utils.js.html +451 -0
  281. package/coverage/lcov-report/map/common/wmts-utils.js.html +547 -0
  282. package/coverage/lcov-report/prettify.css +1 -0
  283. package/coverage/lcov-report/prettify.js +2 -0
  284. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  285. package/coverage/lcov-report/sorter.js +196 -0
  286. package/coverage/lcov.info +11245 -0
  287. package/coverage/map/api/hooks/hooks.catalog.js.html +457 -0
  288. package/coverage/map/api/hooks/hooks.features.js.html +397 -0
  289. package/coverage/map/api/hooks/hooks.query.js.html +1309 -0
  290. package/coverage/map/api/hooks/index.html +161 -0
  291. package/coverage/map/api/hooks/index.js.html +94 -0
  292. package/coverage/map/api/index.html +131 -0
  293. package/coverage/map/api/index.js.html +139 -0
  294. package/coverage/map/api/marshall.js.html +178 -0
  295. package/coverage/map/api/models/alerts.model.mongodb.js.html +106 -0
  296. package/coverage/map/api/models/catalog.model.mongodb.js.html +127 -0
  297. package/coverage/map/api/models/features.model.mongodb.js.html +196 -0
  298. package/coverage/map/api/models/index.html +161 -0
  299. package/coverage/map/api/models/projects.model.mongodb.js.html +109 -0
  300. package/coverage/map/api/services/alerts/alerts.hooks.js.html +274 -0
  301. package/coverage/map/api/services/alerts/alerts.service.js.html +610 -0
  302. package/coverage/map/api/services/alerts/index.html +131 -0
  303. package/coverage/map/api/services/catalog/catalog.hooks.js.html +310 -0
  304. package/coverage/map/api/services/catalog/index.html +116 -0
  305. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1510 -0
  306. package/coverage/map/api/services/daptiles/index.html +116 -0
  307. package/coverage/map/api/services/features/features.hooks.js.html +241 -0
  308. package/coverage/map/api/services/features/features.service.js.html +241 -0
  309. package/coverage/map/api/services/features/index.html +131 -0
  310. package/coverage/map/api/services/index.html +116 -0
  311. package/coverage/map/api/services/index.js.html +817 -0
  312. package/coverage/map/api/services/projects/index.html +116 -0
  313. package/coverage/map/api/services/projects/projects.hooks.js.html +439 -0
  314. package/coverage/map/common/dynamic-grid-source.js.html +466 -0
  315. package/coverage/map/common/errors.js.html +94 -0
  316. package/coverage/map/common/geotiff-grid-source.js.html +541 -0
  317. package/coverage/map/common/grid.js.html +1612 -0
  318. package/coverage/map/common/index.html +371 -0
  319. package/coverage/map/common/index.js.html +172 -0
  320. package/coverage/map/common/meteo-model-grid-source.js.html +556 -0
  321. package/coverage/map/common/moment-utils.js.html +157 -0
  322. package/coverage/map/common/opendap-grid-source.js.html +868 -0
  323. package/coverage/map/common/opendap-utils.js.html +826 -0
  324. package/coverage/map/common/permissions.js.html +124 -0
  325. package/coverage/map/common/time-based-grid-source.js.html +418 -0
  326. package/coverage/map/common/tms-utils.js.html +274 -0
  327. package/coverage/map/common/wcs-grid-source.js.html +364 -0
  328. package/coverage/map/common/wcs-utils.js.html +586 -0
  329. package/coverage/map/common/weacast-grid-source.js.html +1033 -0
  330. package/coverage/map/common/wfs-utils.js.html +574 -0
  331. package/coverage/map/common/wms-utils.js.html +451 -0
  332. package/coverage/map/common/wmts-utils.js.html +547 -0
  333. package/coverage/prettify.css +1 -0
  334. package/coverage/prettify.js +2 -0
  335. package/coverage/sort-arrow-sprite.png +0 -0
  336. package/coverage/sorter.js +196 -0
  337. package/coverage/tmp/coverage-280506-1731704745613-0.json +1 -0
  338. package/coverage/tmp/coverage-280518-1731704745599-0.json +1 -0
  339. package/coverage/tmp/coverage-280529-1731704745588-0.json +1 -0
  340. package/coverage/tmp/coverage-280541-1731704745574-0.json +1 -0
  341. package/coverage/tmp/coverage-280548-1731704745545-0.json +1 -0
  342. package/extras/css/core.variables.scss +32 -8
  343. package/extras/icons/attribution.png +0 -0
  344. package/map/api/services/catalog/catalog.hooks.js +5 -7
  345. package/map/api/services/features/features.hooks.js +1 -1
  346. package/map/client/cesium/utils/utils.style.js +11 -2
  347. package/map/client/components/KAttribution.vue +108 -0
  348. package/map/client/components/KPositionIndicator.vue +11 -18
  349. package/map/client/components/KProjectMenu.vue +4 -4
  350. package/map/client/components/catalog/KCategoryItem.vue +74 -0
  351. package/map/client/components/catalog/KLayerCategories.vue +24 -12
  352. package/map/client/components/catalog/KLayersPanel.vue +139 -116
  353. package/map/client/components/catalog/KProjectSelector.vue +29 -17
  354. package/map/client/components/catalog/KProjectsPanel.vue +19 -35
  355. package/map/client/components/catalog/KViewSelector.vue +37 -25
  356. package/map/client/components/catalog/KViewsPanel.vue +19 -35
  357. package/map/client/components/form/KLocationField.vue +1 -2
  358. package/map/client/components/legend/KLegend.vue +34 -34
  359. package/map/client/components/location/KLocationCardSection.vue +18 -22
  360. package/map/client/components/location/KLocationMap.vue +36 -38
  361. package/map/client/components/location/KLocationTimeLineCard.vue +147 -0
  362. package/map/client/components/location/KLocationTip.vue +12 -2
  363. package/map/client/components/widget/KInformationBox.vue +0 -4
  364. package/map/client/components/widget/KStackableTimeSeries.vue +8 -1
  365. package/map/client/components/widget/KTimeSeries.vue +1 -1
  366. package/map/client/composables/highlight.js +29 -31
  367. package/map/client/composables/probe.js +7 -3
  368. package/map/client/composables/weather.js +71 -31
  369. package/map/client/i18n/map_en.json +3 -0
  370. package/map/client/i18n/map_fr.json +3 -0
  371. package/map/client/init.js +4 -3
  372. package/map/client/leaflet/ShapeMarker.js +1 -1
  373. package/map/client/leaflet/utils/utils.events.js +1 -1
  374. package/map/client/leaflet/utils/utils.style.js +20 -8
  375. package/map/client/mixins/globe/mixin.base-globe.js +111 -13
  376. package/map/client/mixins/globe/mixin.file-layers.js +10 -10
  377. package/map/client/mixins/globe/mixin.geojson-layers.js +90 -15
  378. package/map/client/mixins/globe/mixin.style.js +2 -0
  379. package/map/client/mixins/index.js +0 -1
  380. package/map/client/mixins/map/index.js +1 -0
  381. package/map/client/mixins/map/mixin.base-map.js +21 -2
  382. package/map/client/mixins/map/mixin.canvas-layers.js +7 -2
  383. package/map/client/mixins/map/mixin.edit-layers.js +12 -4
  384. package/map/client/mixins/map/mixin.file-layers.js +3 -0
  385. package/map/client/mixins/map/mixin.geojson-layers.js +90 -5
  386. package/map/client/mixins/map/mixin.pmtiles-layers.js +106 -0
  387. package/map/client/mixins/mixin.activity.js +8 -3
  388. package/map/client/mixins/mixin.feature-service.js +73 -32
  389. package/map/client/mixins/mixin.levels.js +1 -0
  390. package/map/client/mixins/mixin.weacast.js +10 -87
  391. package/map/client/utils/index.js +1 -0
  392. package/map/client/utils/utils.capture.js +1 -1
  393. package/map/client/utils/utils.catalog.js +7 -7
  394. package/map/client/utils/utils.features.js +59 -1
  395. package/map/client/utils/utils.layers.js +8 -0
  396. package/map/client/utils/utils.time-series.js +121 -0
  397. package/map/client/utils/utils.weacast.js +102 -0
  398. package/package.json +6 -6
  399. package/scripts/init_runner.sh +2 -2
  400. package/scripts/kash/CHANGELOG.md +12 -0
  401. package/scripts/kash/README.md +2 -0
  402. package/scripts/kash/kash.sh +34 -32
  403. package/scripts/run_tests.sh +2 -2
  404. package/scripts/setup_workspace.sh +24 -6
  405. package/test/api/core/hooks.test.js +6 -3
  406. package/test/api/core/test-log-2023-12-19.log +7 -0
  407. package/test/api/core/test-log-2024-01-04.log +14 -0
  408. package/test/api/core/test-log-2024-05-14.log +6 -0
  409. package/test/api/core/{test-log-2024-04-23.log → test-log-2024-06-06.log} +3 -3
  410. package/test/api/core/test-log-2024-06-26.log +25 -0
  411. package/test/api/core/test-log-2024-06-28.log +2 -0
  412. package/test/api/core/test-log-2024-07-09.log +0 -0
  413. package/test/api/core/test-log-2024-08-13.log +69 -0
  414. package/test/api/core/test-log-2024-10-28.log +53 -0
  415. package/test/api/core/test-log-2024-11-05.log +30 -0
  416. package/test/api/core/test-log-2024-11-15.log +23 -0
  417. package/test/api/map/alerts.test.js +3 -1
  418. package/test/api/map/config/layers.json +3 -1
  419. package/test/api/map/index.test.js +18 -1
  420. package/test/api/map/test-log-2023-11-24.log +121 -0
  421. package/test/api/map/test-log-2023-12-12.log +29 -0
  422. package/test/api/map/test-log-2023-12-13.log +5 -0
  423. package/test/api/map/test-log-2024-01-04.log +2 -0
  424. package/test/api/map/test-log-2024-01-11.log +1 -0
  425. package/test/api/map/test-log-2024-01-25.log +19 -0
  426. package/test/api/map/test-log-2024-06-06.log +39 -0
  427. package/test/api/map/test-log-2024-08-13.log +13 -0
  428. package/test/api/map/test-log-2024-08-20.log +55 -0
  429. package/test/api/map/test-log-2024-09-09.log +92 -0
  430. package/test/api/map/test-log-2024-10-28.log +11 -0
  431. package/test/client/core/utils.js +13 -0
  432. package/test/client/map/api.js +34 -0
  433. package/test/client/map/catalog.js +6 -2
  434. package/test/client/map/index.js +1 -0
  435. package/test/client/map/utils.js +4 -2
  436. package/core/client/components/collection/KList.vue +0 -135
  437. package/core/client/components/layout/KPageSticky.vue +0 -53
  438. package/core/client/mixins/mixin.base-collection.js +0 -162
  439. package/core/client/utils/utils.data.js +0 -22
  440. package/map/client/mixins/mixin.catalog-panel.js +0 -26
  441. package/test/api/core/test-log-2024-04-22.log +0 -84
@@ -1,134 +1,157 @@
1
1
  <template>
2
- <KScrollArea :maxHeight="scrollAreaMaxHeight" :style="panelStyle">
3
- <q-list dense bordered>
4
- <slot name="header" />
5
- <!-- Orphan layers -->
6
- <k-layers-selector
7
- :layers="orphanLayers"
8
- :options="{ hideIfEmpty: true }"
9
- />
10
- <!-- Categorized layers -->
11
- <template v-for="category in filteredCategories">
12
- <q-expansion-item
13
- v-if="isVisible(category)"
14
- :key="getId(category)"
15
- :id="getId(category)"
16
- :header-class="getHeaderClass(category)"
17
- :icon="getIcon(category)"
18
- :label="$t(category.name)"
19
- :default-opened="getDefaultOpened(category)"
20
- expand-separator>
21
- <component
22
- :is="category.componentInstance"
2
+ <div class="fit column">
3
+ <!--
4
+ Header
5
+ -->
6
+ <div>
7
+ <slot name="header">
8
+ <KPanel
9
+ :content="header"
10
+ :class="headerClass"
11
+ />
12
+ <q-separator inset v-if="header"/>
13
+ </slot>
14
+ </div>
15
+ <!--
16
+ Content
17
+ -->
18
+ <q-scroll-area class="col">
19
+ <!--q-list dense-->
20
+ <!-- Orphan layers -->
21
+ <KLayersSelector
22
+ :layers="orphanLayers"
23
+ :options="orphanLayersOptions"
24
+ />
25
+ <!-- Categorized layers -->
26
+ <template v-for="category in filteredCategories">
27
+ <KCategoryItem
28
+ v-if="isCategoryVisible(category)"
29
+ :key="getCategoryId(category)"
30
+ :id="getCategoryId(category)"
31
+ :category="category"
23
32
  :layers="layersByCategory[category.name]"
24
33
  :forecastModels="forecastModels"
25
- :options="category.options || category">
26
- </component>
27
- </q-expansion-item>
28
- </template>
29
- <slot name="footer" />
30
- </q-list>
31
- </KScrollArea>
34
+ />
35
+ </template>
36
+ <!--/q-list-->
37
+ </q-scroll-area>
38
+ <!--
39
+ Footer
40
+ -->
41
+ <div>
42
+ <slot name="footer">
43
+ <q-separator inset v-if="footer"/>
44
+ <KPanel
45
+ :content="footer"
46
+ :class="footerClass"
47
+ />
48
+ </slot>
49
+ </div>
50
+ </div>
32
51
  </template>
33
52
 
34
53
  <script>
35
- import sift from 'sift'
54
+ // WARNING for now we must declare the inheritAttrs this way. Lint will try to move it. Don't do it.
55
+ // TODO: need to updated when switch to vue > 3.3 to be able to declare options
56
+ export default {
57
+ inheritAttrs: false
58
+ }
59
+ </script>
60
+
61
+ <script setup>
36
62
  import _ from 'lodash'
37
- import { loadComponent } from '../../../../core/client/utils'
63
+ import sift from 'sift'
64
+ import { ref, watchEffect, onMounted } from 'vue'
65
+ import { utils as coreUtils } from '../../../../core/client'
38
66
  import { getLayersByCategory, getOrphanLayers } from '../../utils'
39
- import { KScrollArea } from '../../../../core/client/components'
40
- import { catalogPanel } from '../../mixins'
41
67
  import { useProject } from '../../composables'
42
68
  import KLayersSelector from './KLayersSelector.vue'
69
+ import KCategoryItem from './KCategoryItem.vue'
43
70
 
44
- export default {
45
- name: 'k-layers-panel',
46
- components: {
47
- KScrollArea,
48
- KLayersSelector
71
+ // Props
72
+ const props = defineProps({
73
+ layers: {
74
+ type: [Object, Array],
75
+ default: () => []
76
+ },
77
+ layersFilter: {
78
+ type: [Object, Function],
79
+ default: () => {}
80
+ },
81
+ layerCategories: {
82
+ type: Array,
83
+ default: () => []
49
84
  },
50
- mixins: [catalogPanel],
51
- props: {
52
- layers: {
53
- type: [Object, Array],
54
- default: () => []
55
- },
56
- layersFilter: {
57
- type: [Object, Function],
58
- default: () => {}
59
- },
60
- layerCategories: {
61
- type: Array,
62
- default: () => []
63
- },
64
- layerCategoriesFilter: {
65
- type: [Object, Function],
66
- default: () => {}
67
- },
68
- forecastModels: {
69
- type: Array,
70
- default: () => []
71
- }
85
+ layerCategoriesFilter: {
86
+ type: [Object, Function],
87
+ default: () => {}
72
88
  },
73
- inheritAttrs: false,
74
- computed: {
75
- filteredLayers () {
76
- const filter = (typeof this.layersFilter === 'object' ? sift(this.layersFilter) : this.layersFilter)
77
- return _.filter(this.layers, filter)
78
- },
79
- filteredCategories () {
80
- const filter = (typeof this.layerCategoriesFilter === 'object' ? sift(this.layerCategoriesFilter) : this.layerCategoriesFilter)
81
- const filteredCategories = _.filter(this.layerCategories, filter)
82
- _.forEach(filteredCategories, category => {
83
- const component = _.get(category, 'component', 'catalog/KLayersSelector')
84
- if (!category.componentInstance) category.componentInstance = loadComponent(component)
85
- })
86
- return filteredCategories
87
- },
88
- layersByCategory () {
89
- return getLayersByCategory(this.filteredLayers, this.filteredCategories)
90
- },
91
- orphanLayers () {
92
- return getOrphanLayers(this.filteredLayers, this.layersByCategory)
93
- }
89
+ forecastModels: {
90
+ type: Array,
91
+ default: () => []
94
92
  },
95
- methods: {
96
- getId (category) {
97
- return _.kebabCase(category.name)
98
- },
99
- isVisible (category) {
100
- // Show a built-in category only if it has some layers.
101
- // Indeed, depending on the app configuration, none might be available for this category.
102
- // User-defined categories are visible by default, even if empty,
103
- // except if used inside a project as in this case having no layers means we don't want to use this category
104
- const isEmpty = (this.layersByCategory[category.name].length === 0)
105
- if (isEmpty) {
106
- if (this.hasProject()) return false
107
- else return !_.get(category, 'hideIfEmpty', !category._id)
108
- }
109
- return true
110
- },
111
- getHeaderClass (category) {
112
- if (category.headerClass) return category.headerClass
113
- return 'text-' + _.get(category, 'icon.color', 'primary')
114
- },
115
- getIcon (category) {
116
- return _.get(category, 'icon.name', _.get(category, 'icon'))
117
- },
118
- getDefaultOpened (category) {
119
- // if category explicitely specify default opened state, use that
120
- if (_.has(category, 'options.open')) return category.options.open
121
- // otherwise, defaut open when there's only one category
122
- // return this.filteredCategories.length === 1
123
- // robin: to not break existing apps, just return false when options.open is not defined
124
- return false
125
- }
93
+ header: {
94
+ type: [Array, Object],
95
+ default: () => null
126
96
  },
127
- setup () {
128
- // Expose
129
- return {
130
- ...useProject()
131
- }
97
+ headerClass: {
98
+ type: String,
99
+ default: undefined
100
+ },
101
+ footer: {
102
+ type: [Array, Object],
103
+ default: () => null
104
+ },
105
+ footerClass: {
106
+ type: String,
107
+ default: undefined
108
+ }
109
+ })
110
+
111
+ // Data
112
+ const { hasProject } = useProject()
113
+ const orphanLayersOptions = { hideIfEmpty: true }
114
+ const filteredCategories = ref([])
115
+ const layersByCategory = ref({})
116
+ const orphanLayers = ref([])
117
+
118
+ // Watch
119
+ watchEffect(() => { refresh() })
120
+
121
+ // Functions
122
+ function getCategoryId (category) {
123
+ return _.kebabCase(category.name)
124
+ }
125
+ function isCategoryVisible (category) {
126
+ // Show a built-in category only if it has some layers.
127
+ // Indeed, depending on the app configuration, none might be available for this category.
128
+ // User-defined categories are visible by default, even if empty,
129
+ // except if used inside a project as in this case having no layers means we don't want to use this category
130
+ const isEmpty = (layersByCategory.value[category.name].length === 0)
131
+ if (isEmpty) {
132
+ if (hasProject()) return false
133
+ else return !_.get(category, 'hideIfEmpty', !category._id)
132
134
  }
135
+ return true
133
136
  }
137
+ function refresh () {
138
+ // filter layers
139
+ const layersFilter = (typeof props.layersFilter === 'object' ? sift(props.layersFilter) : props.layersFilter)
140
+ const filteredLayers = _.filter(props.layers, layersFilter)
141
+ // filter categories
142
+ const categoriesFilter = (typeof props.layerCategoriesFilter === 'object' ? sift(props.layerCategoriesFilter) : props.layerCategoriesFilter)
143
+ filteredCategories.value = _.filter(props.layerCategories, categoriesFilter)
144
+ _.forEach(filteredCategories.value, category => {
145
+ const component = _.get(category, 'component', 'catalog/KLayersSelector')
146
+ if (!category.componentInstance) category.componentInstance = coreUtils.loadComponent(component)
147
+ })
148
+ // compute layers by categories and orphans layers
149
+ layersByCategory.value = getLayersByCategory(filteredLayers, filteredCategories.value)
150
+ orphanLayers.value = getOrphanLayers(filteredLayers, layersByCategory.value)
151
+ }//, 100)
152
+
153
+ // Hooks
154
+ onMounted(() => {
155
+ refresh()
156
+ })
134
157
  </script>
@@ -1,25 +1,27 @@
1
1
  <template>
2
2
  <div
3
- class="relative-position q-pl-md row full-width items-center no-wrap cursor-pointer"
4
3
  v-ripple:primary
4
+ class="k-project-selector"
5
5
  >
6
- <!-- Project name -->
7
- <div class="ellipsis full-width" @click="$emit('item-selected', item, 'open-project')">
8
- {{ item.name }}
9
- <q-tooltip
10
- v-if="(item.description) && $q.platform.is.desktop" :delay="500"
11
- anchor="center left"
12
- self="center right"
13
- :offset="[20, 0]">
14
- {{ item.description }}
15
- </q-tooltip>
16
- <q-space />
6
+ <div class="q-pl-md row full-width items-center no-wrap">
7
+ <!-- Project name -->
8
+ <div class="ellipsis full-width" @click="$emit('item-selected', item, 'open-project')">
9
+ {{ item.name }}
10
+ <q-tooltip
11
+ v-if="(item.description) && $q.platform.is.desktop" :delay="500"
12
+ anchor="center left"
13
+ self="center right"
14
+ :offset="[20, 0]">
15
+ {{ item.description }}
16
+ </q-tooltip>
17
+ <q-space />
18
+ </div>
19
+ <!-- Project actions -->
20
+ <KPanel
21
+ :id="`${item.name}-actions`"
22
+ :content="itemActions"
23
+ :context="item" />
17
24
  </div>
18
- <!-- Project actions -->
19
- <KPanel
20
- :id="`${item.name}-actions`"
21
- :content="itemActions"
22
- :context="item" />
23
25
  </div>
24
26
  </template>
25
27
 
@@ -36,3 +38,13 @@ export default {
36
38
  mixins: [baseItem]
37
39
  }
38
40
  </script>
41
+
42
+ <style lang="scss" scoped>
43
+ .k-project-selector {
44
+ position: relative; // needed for the directive v-ripple to target the item
45
+ cursor: pointer;
46
+ }
47
+ .k-project-selector:hover {
48
+ background-color: #efefef
49
+ }
50
+ </style>
@@ -1,43 +1,33 @@
1
1
  <template>
2
- <q-list dense bordered>
3
- <div class="no-padding" :style="panelStyle">
4
- <q-resize-observer @resize="onResized" />
5
- <KPanel
6
- id="favorite-views-toolbar"
7
- :content="toolbar"
8
- class="no-wrap q-pl-sm q-pr-md"
9
- />
10
- <KColumn
11
- class="q-pl-sm"
12
- service="projects"
13
- :renderer="projectRenderer"
14
- :nbItemsPerPage="20"
15
- :append-items="true"
16
- :base-query="baseQuery"
17
- :filter-query="filter.query"
18
- :height="scrollAreaMaxHeight - 100"
19
- :width="scrollAreaMaxWidth - 50"
20
- :dense="true"
21
- @selection-changed="onProjectSelected"
22
- />
23
- </div>
24
- </q-list>
2
+ <div class="fit">
3
+ <KGrid
4
+ service="projects"
5
+ :renderer="projectRenderer"
6
+ :nb-items-per-page="20"
7
+ :append-items="true"
8
+ :base-query="baseQuery"
9
+ :filter-query="filter.query"
10
+ :dense="true"
11
+ :scrollToTop="false"
12
+ :header="toolbar"
13
+ header-class="full-width no-wrap"
14
+ @selection-changed="onProjectSelected"
15
+ />
16
+ </div>
25
17
  </template>
26
18
 
27
19
  <script>
28
20
  import logger from 'loglevel'
29
21
  import { Filter, Sorter, utils, i18n } from '../../../../core/client'
30
- import { KColumn, KPanel, KAction } from '../../../../core/client/components'
31
- import { catalogPanel } from '../../mixins'
22
+ import { KGrid, KPanel, KAction } from '../../../../core/client/components'
32
23
 
33
24
  export default {
34
25
  name: 'k-projects-panel',
35
26
  components: {
36
- KColumn,
27
+ KGrid,
37
28
  KPanel,
38
29
  KAction
39
30
  },
40
- mixins: [catalogPanel],
41
31
  inject: ['kActivity'],
42
32
  computed: {
43
33
  baseQuery () {
@@ -47,10 +37,8 @@ export default {
47
37
  return [
48
38
  {
49
39
  id: 'projects-filter',
50
- component: 'collection/KFilter',
51
- class: 'full-width'
40
+ component: 'collection/KFilter'
52
41
  },
53
- { component: 'QSpace' },
54
42
  {
55
43
  component: 'collection/KSorter',
56
44
  id: 'projects-sorter',
@@ -93,12 +81,11 @@ export default {
93
81
  })
94
82
  }
95
83
  return {
96
- scrollAreaMaxWidth: 0,
97
84
  filter: Filter.get(),
98
85
  sorter: Sorter.get(),
99
86
  projectRenderer: {
100
87
  component: 'catalog/KProjectSelector',
101
- class: 'q-pt-xs q-pb-xs q-pr-xs',
88
+ class: 'col-12',
102
89
  actions: projectActions
103
90
  }
104
91
  }
@@ -144,9 +131,6 @@ export default {
144
131
  })
145
132
  if (!result.ok) return false
146
133
  await this.$api.getService('projects').remove(project._id)
147
- },
148
- onResized (size) {
149
- this.scrollAreaMaxWidth = size.width
150
134
  }
151
135
  }
152
136
  }
@@ -1,33 +1,35 @@
1
1
  <template>
2
2
  <div
3
- class="relative-position q-pl-md row full-width items-center no-wrap cursor-pointer"
4
3
  v-ripple:primary
4
+ class="k-view-selector"
5
5
  >
6
- <!-- View name -->
7
- <div class="ellipsis full-width" @click="$emit('item-selected', item, 'apply-view')">
8
- {{ item.name }}
9
- <q-tooltip
10
- v-if="(item.description) && $q.platform.is.desktop" :delay="500"
11
- anchor="center left"
12
- self="center right"
13
- :offset="[20, 0]">
14
- {{ item.description }}
15
- </q-tooltip>
16
- <q-space />
6
+ <div class="q-pl-md row full-width items-center no-wrap">
7
+ <!-- View name -->
8
+ <div class="ellipsis full-width" @click="$emit('item-selected', item, 'apply-view')">
9
+ {{ item.name }}
10
+ <q-tooltip
11
+ v-if="(item.description) && $q.platform.is.desktop" :delay="500"
12
+ anchor="center left"
13
+ self="center right"
14
+ :offset="[20, 0]">
15
+ {{ item.description }}
16
+ </q-tooltip>
17
+ <q-space />
18
+ </div>
19
+ <!-- View favorite action -->
20
+ <KAction
21
+ id="set-home-view"
22
+ icon="las la-star"
23
+ :color="item.isDefault ? 'primary' : 'grey-5'"
24
+ :tooltip="$t('KViewsPanel.SET_HOME_VIEW')"
25
+ :propagate="false"
26
+ @triggered="$emit('item-selected', item, 'set-home-view')" />
27
+ <!-- View actions -->
28
+ <KPanel
29
+ :id="`${item.name}-actions`"
30
+ :content="itemActions"
31
+ :context="item" />
17
32
  </div>
18
- <!-- View favorite action -->
19
- <KAction
20
- id="set-home-view"
21
- icon="las la-star"
22
- :color="item.isDefault ? 'primary' : 'grey-5'"
23
- :tooltip="$t('KViewsPanel.SET_HOME_VIEW')"
24
- :propagate="false"
25
- @triggered="$emit('item-selected', item, 'set-home-view')" />
26
- <!-- View actions -->
27
- <KPanel
28
- :id="`${item.name}-actions`"
29
- :content="itemActions"
30
- :context="item" />
31
33
  </div>
32
34
  </template>
33
35
 
@@ -44,3 +46,13 @@ export default {
44
46
  mixins: [baseItem]
45
47
  }
46
48
  </script>
49
+
50
+ <style lang="scss" scoped>
51
+ .k-view-selector {
52
+ position: relative; // needed for the directive v-ripple to target the item
53
+ cursor: pointer;
54
+ }
55
+ .k-view-selector:hover {
56
+ background-color: #efefef
57
+ }
58
+ </style>
@@ -1,45 +1,35 @@
1
1
  <template>
2
- <q-list dense bordered>
3
- <div class="no-padding" :style="panelStyle">
4
- <q-resize-observer @resize="onResized" />
5
- <KPanel
6
- id="favorite-views-toolbar"
7
- :content="toolbar"
8
- class="no-wrap q-pl-sm q-pr-md"
9
- />
10
- <KColumn
11
- class="q-pl-sm"
12
- service="catalog"
13
- :renderer="viewRenderer"
14
- :nbItemsPerPage="20"
15
- :append-items="true"
16
- :base-query="baseQuery"
17
- :filter-query="filterQuery"
18
- @selection-changed="onViewSelected"
19
- :height="scrollAreaMaxHeight - 100"
20
- :width="scrollAreaMaxWidth"
21
- :dense="true"
22
- />
23
- </div>
24
- </q-list>
2
+ <div class="fit">
3
+ <KGrid
4
+ service="catalog"
5
+ :renderer="viewRenderer"
6
+ :nb-items-per-page="20"
7
+ :append-items="true"
8
+ :base-query="baseQuery"
9
+ :filter-query="filterQuery"
10
+ :dense="true"
11
+ :scrollToTop="false"
12
+ :header="toolbar"
13
+ header-class="full-width no-wrap"
14
+ @selection-changed="onViewSelected"
15
+ />
16
+ </div>
25
17
  </template>
26
18
 
27
19
  <script>
28
20
  import _ from 'lodash'
29
21
  import logger from 'loglevel'
30
22
  import { Filter, Sorter, utils, i18n } from '../../../../core/client'
31
- import { KColumn, KPanel, KAction } from '../../../../core/client/components'
32
- import { catalogPanel } from '../../mixins'
23
+ import { KGrid, KPanel, KAction } from '../../../../core/client/components'
33
24
  import { useProject } from '../../composables'
34
25
 
35
26
  export default {
36
27
  name: 'k-views-panel',
37
28
  components: {
38
- KColumn,
29
+ KGrid,
39
30
  KPanel,
40
31
  KAction
41
32
  },
42
- mixins: [catalogPanel],
43
33
  inject: ['kActivity'],
44
34
  data () {
45
35
  const viewActions = []
@@ -60,12 +50,11 @@ export default {
60
50
  })
61
51
  }
62
52
  return {
63
- scrollAreaMaxWidth: 0,
64
53
  filter: Filter.get(),
65
54
  sorter: Sorter.get(),
66
55
  viewRenderer: {
67
56
  component: 'catalog/KViewSelector',
68
- class: 'q-pt-xs q-pb-xs q-pr-xs',
57
+ class: 'col-12',
69
58
  actions: viewActions
70
59
  }
71
60
  }
@@ -83,10 +72,8 @@ export default {
83
72
  return [
84
73
  {
85
74
  id: 'views-filter',
86
- component: 'collection/KFilter',
87
- class: 'full-width'
75
+ component: 'collection/KFilter'
88
76
  },
89
- { component: 'QSpace' },
90
77
  {
91
78
  component: 'collection/KSorter',
92
79
  id: 'views-sorter',
@@ -141,9 +128,6 @@ export default {
141
128
  })
142
129
  if (!result.ok) return false
143
130
  await this.$api.getService('catalog').remove(view._id)
144
- },
145
- onResized (size) {
146
- this.scrollAreaMaxWidth = size.width
147
131
  }
148
132
  },
149
133
  // Should be used with <Suspense> to ensure the project is loaded upfront
@@ -66,8 +66,7 @@
66
66
  :dialog="{
67
67
  component: 'location/KLocationMap',
68
68
  'v-model': model,
69
- draggable: true,
70
- header: map,
69
+ tools: map,
71
70
  widthPolicy: 'wide',
72
71
  cancelAction: 'CANCEL',
73
72
  okAction: {