@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
@@ -534,10 +534,7 @@
534
534
  "UNSUBSCRIBE_DIALOG_MESSAGE": "Are you sure you want to unsubscribe your account from <b>{description}</b> ?<br><br>You will not be able to receive notifications until you reconnect using this service."
535
535
  },
536
536
  "KGrid": {
537
- "EMPTY_GRID": "@:NO_ITEM"
538
- },
539
- "KList": {
540
- "EMPTY_LIST": "@:NO_ITEM"
537
+ "EMPTY_LABEL": "@:NO_ITEM"
541
538
  },
542
539
  "KTable": {
543
540
  "EMPTY_TABLE": "@:NO_ITEM",
@@ -550,6 +547,12 @@
550
547
  "EXPORT_DATA": "Export data",
551
548
  "DATA_EXPORT_FILE": "Data.csv"
552
549
  },
550
+ "KTimeLine": {
551
+ "EMPTY_LABEL": "@:NO_ITEM"
552
+ },
553
+ "KScrollToTop": {
554
+ "TOOLTIP": "Scroll to top"
555
+ },
553
556
  "KHistory": {
554
557
  "EMPTY_HISTORY": "@:NO_ITEM"
555
558
  },
@@ -557,10 +560,12 @@
557
560
  "EMPTY_COLUMN": "@:NO_ITEM"
558
561
  },
559
562
  "KCard": {
560
- "DESCRIPTION_SECTION": "Description",
561
- "NO_DESCRIPTION_LABEL": "No description",
562
- "MORE_ACTION": "More details",
563
- "LESS_ACTION": "Less details"
563
+ "MORE_DETAILS": "More details",
564
+ "LESS_DETAILS": "Less details"
565
+ },
566
+ "KDescriptionCardSection": {
567
+ "TITLE": "Description",
568
+ "NO_DESCRIPTION_LABEL": "No description"
564
569
  },
565
570
  "KColorChooser": {
566
571
  "CANCEL_BUTTON": "@:CANCEL",
@@ -892,6 +897,7 @@
892
897
  },
893
898
  "KTimeSeriesChart": {
894
899
  "TIME_LABEL": "Time",
900
+ "NO_DATA_AVAILABLE": "No data available",
895
901
  "EXPORT_SERIES": "Export series",
896
902
  "SERIES_EXPORT_FILE": "Series.csv"
897
903
  },
@@ -532,10 +532,7 @@
532
532
  "UNSUBSCRIBE_DIALOG_MESSAGE": "Etes vous sûr de vouloir désabonner votre compte de {description} ?<br><br>Vous ne pourrez plus recevoir de notifications jusqu'à une prochaine reconnexion via ce service."
533
533
  },
534
534
  "KGrid": {
535
- "EMPTY_GRID": "@:NO_ITEM"
536
- },
537
- "KList": {
538
- "EMPTY_LIST": "@:NO_ITEM"
535
+ "EMPTY_LABEL": "@:NO_ITEM"
539
536
  },
540
537
  "KTable": {
541
538
  "EMPTY_TABLE": "@:NO_ITEM",
@@ -548,17 +545,25 @@
548
545
  "EXPORT_DATA": "Exporter les données",
549
546
  "DATA_EXPORT_FILE": "Données.csv"
550
547
  },
548
+ "KTimeLine": {
549
+ "EMPTY_LABEL": "@:NO_ITEM"
550
+ },
551
+ "KScrollToTop": {
552
+ "TOOLTIP": "Haut de page"
553
+ },
551
554
  "KHistory": {
552
555
  "EMPTY_HISTORY": "@:NO_ITEM"
553
556
  },
554
557
  "KColumn": {
555
558
  "EMPTY_COLUMN": "@:NO_ITEM"
556
559
  },
557
- "KCard": {
558
- "DESCRIPTION_SECTION": "Description",
559
- "NO_DESCRIPTION_LABEL": "Aucune description",
560
- "MORE_ACTION": "Plus de détails",
561
- "LESS_ACTION": "Moins de détails"
560
+ "KCard": {
561
+ "MORE_DETAILS": "Plus de détails",
562
+ "LESS_DETAILS": "Moins de détails"
563
+ },
564
+ "KDescriptionCardSection": {
565
+ "TITLE": "Description",
566
+ "NO_DESCRIPTION": "Aucune description"
562
567
  },
563
568
  "KColorChooser": {
564
569
  "CANCEL_BUTTON": "@:CANCEL",
@@ -891,6 +896,7 @@
891
896
  },
892
897
  "KTimeSeriesChart": {
893
898
  "TIME_LABEL": "Temps",
899
+ "NO_DATA_AVAILABLE": "Aucune donnée disponible",
894
900
  "EXPORT_SERIES": "Exporter les données",
895
901
  "SERIES_EXPORT_FILE": "Series.csv"
896
902
  },
@@ -6,15 +6,18 @@ import { Theme } from './theme.js'
6
6
  import { Capabilities } from './capabilities.js'
7
7
  import { LocalStorage } from './local-storage.js'
8
8
  import { Storage } from './storage.js'
9
+ import { TemplateContext } from './template-context.js'
9
10
  import { Time } from './time.js'
10
11
  import { Units } from './units.js'
11
12
  import { Layout } from './layout.js'
12
13
  import { Filter } from './filter.js'
13
14
  import { Sorter } from './sorter.js'
15
+ import { Document } from './document.js'
14
16
  import { Exporter } from './exporter.js'
15
17
  import { Reader } from './reader.js'
16
18
  import services from './services/index.js'
17
19
  import * as utils from './utils/index.js'
20
+ import * as directives from './directives/index.js'
18
21
  import * as composables from './composables/index.js'
19
22
  import * as mixins from './mixins/index.js'
20
23
  import * as hooks from './hooks/index.js'
@@ -28,6 +31,7 @@ export { Theme }
28
31
  export { Capabilities }
29
32
  export { LocalStorage }
30
33
  export { Storage }
34
+ export { TemplateContext }
31
35
  export { Time }
32
36
  export { Units }
33
37
  export { Layout }
@@ -37,6 +41,7 @@ export { Exporter }
37
41
  export { Reader }
38
42
  export { services }
39
43
  export { utils }
44
+ export { directives }
40
45
  export { composables }
41
46
  export { mixins }
42
47
  export { hooks }
@@ -50,9 +55,9 @@ export * from '../common/index.js'
50
55
  export default async function initialize () {
51
56
  const api = this
52
57
 
53
- logger.debug('[KDK] initializing core module')
58
+ logger.debug('[KDK] Initializing core module')
54
59
 
55
- // Delcare the module intiaization states
60
+ // Declare the module initialization states
56
61
  Store.set('kdk', { core: { initialized: false }, map: { initialized: false } })
57
62
 
58
63
  // Initialize singletons that might be used globally first
@@ -70,6 +75,7 @@ export default async function initialize () {
70
75
  Layout.initialize()
71
76
  Filter.initialize()
72
77
  Sorter.initialize()
78
+ Document.initialize()
73
79
  Exporter.initialize(_.get(config, 'exporter'))
74
80
  Schema.initialize(_.get(config, 'schema'))
75
81
 
@@ -78,7 +84,7 @@ export default async function initialize () {
78
84
 
79
85
  // Register the readers
80
86
  _.forEach(_.get(config, 'readers.core', []), entry => {
81
- logger.debug(`[KDK] registering mime types [${entry.mimeTypes}] to reader ${entry.reader}`)
87
+ logger.debug(`[KDK] Registering reader ${entry.reader} for [${entry.mimeTypes}] mime types`)
82
88
  Reader.register(entry.mimeTypes, readers[entry.reader])
83
89
  })
84
90
 
@@ -5,10 +5,20 @@ import sift from 'sift'
5
5
  import { Store } from './store.js'
6
6
  import { bindContent } from './utils/utils.content.js'
7
7
 
8
+ export const DefaultZIndex = {
9
+ drawer: 3000, // see Quasar css variables
10
+ panes: 1000,
11
+ fab: 1000,
12
+ windows: 990,
13
+ stickies: 980,
14
+ focus: 1010
15
+ }
16
+
8
17
  const layoutPath = 'layout'
9
18
  const contentDefaults = { content: undefined, filter: {}, mode: undefined, visible: false }
10
- const windowDefaultContols = { pin: true, unpin: true, maximize: true, restore: true, close: true, resize: true }
11
- const windowDefaults = { state: undefined, position: undefined, size: undefined, current: undefined, controls: windowDefaultContols }
19
+ const paneDefaults = { opener: false, size: [0, 0], zIndex: DefaultZIndex.panes }
20
+ const windowsDefaultControls = { menu: true, pin: true, unpin: true, maximize: true, restore: true, close: true, resize: true }
21
+ const windowDefaults = { state: undefined, position: undefined, size: undefined, current: undefined, controls: windowsDefaultControls, zIndex: 980 }
12
22
  const hWindowDefaultSizePolicy = {
13
23
  minSize: [300, 200],
14
24
  floating: { position: [0, 0], size: [300, 200] },
@@ -20,22 +30,29 @@ const vWindowDefaultSizePolicy = {
20
30
  pinned: { xs: [50, 90], sm: [40, 80], md: [30, 75], lg: [25, 75], xl: [20, 75] }
21
31
  }
22
32
  const defaults = {
23
- layout: { view: 'lHh LpR lFf', mode: undefined },
33
+ view: 'lHh LpR lFf',
34
+ padding: true,
35
+ mode: undefined,
24
36
  header: { ...contentDefaults },
25
37
  footer: { ...contentDefaults },
26
- page: { ...contentDefaults },
27
- fab: { ...contentDefaults, icon: 'las la-ellipsis-v', position: 'bottom-right', offset: [16, 16] },
38
+ page: { ...contentDefaults, size: [0, 0] },
39
+ stickies: { ...contentDefaults, zIndex: DefaultZIndex.stickies },
40
+ fab: { ...contentDefaults, icon: 'las la-ellipsis-v', position: 'bottom-right', offset: [16, 16], zIndex: DefaultZIndex.fab },
28
41
  panes: {
29
- left: { ...contentDefaults, opener: false },
30
- top: { ...contentDefaults, opener: false },
31
- right: { ...contentDefaults, opener: false },
32
- bottom: { ...contentDefaults, opener: false }
42
+ left: { ...contentDefaults, ...paneDefaults, sizes: 300, zIndex: DefaultZIndex.drawer },
43
+ top: { ...contentDefaults, ...paneDefaults, sizes: undefined },
44
+ right: { ...contentDefaults, ...paneDefaults, sizes: { xs: [85, 75], sm: [360, 75], md: [440, 80], lg: [500, 80], xl: [500, 85] } },
45
+ bottom: { ...contentDefaults, ...paneDefaults, sizes: undefined }
33
46
  },
34
47
  windows: {
35
48
  left: { ...contentDefaults, ...windowDefaults, sizePolicy: vWindowDefaultSizePolicy },
36
49
  top: { ...contentDefaults, ...windowDefaults, sizePolicy: hWindowDefaultSizePolicy },
37
50
  right: { ...contentDefaults, ...windowDefaults, sizePolicy: vWindowDefaultSizePolicy },
38
51
  bottom: { ...contentDefaults, ...windowDefaults, sizePolicy: hWindowDefaultSizePolicy }
52
+ },
53
+ focus: {
54
+ element: null,
55
+ zIndex: DefaultZIndex.focus
39
56
  }
40
57
  }
41
58
 
@@ -44,9 +61,13 @@ export const Layout = {
44
61
  placements: ['top', 'right', 'bottom', 'left'],
45
62
  paths: {
46
63
  layout: layoutPath,
64
+ view: layoutPath + '.view',
65
+ padding: layoutPath + '.padding',
66
+ mode: layoutPath + '.mode',
47
67
  header: layoutPath + '.header',
48
68
  footer: layoutPath + '.footer',
49
69
  page: layoutPath + '.page',
70
+ stickies: layoutPath + '.stickies',
50
71
  fab: layoutPath + '.fab',
51
72
  panes: {
52
73
  left: layoutPath + '.panes.left',
@@ -59,36 +80,63 @@ export const Layout = {
59
80
  top: layoutPath + '.windows.top',
60
81
  right: layoutPath + '.windows.right',
61
82
  bottom: layoutPath + '.windows.bottom'
62
- }
83
+ },
84
+ focus: layoutPath + '.focus'
63
85
  },
86
+ defaults,
64
87
  initialize () {
65
88
  // create the store structure for each element with their configuration
66
- Store.set(this.paths.layout, this.getLayoutDefaults())
89
+ Store.set(this.paths.view, this.getElementDefaults('view'))
90
+ Store.set(this.paths.padding, this.getElementDefaults('padding'))
67
91
  Store.set(this.paths.header, this.getElementDefaults('header'))
68
92
  Store.set(this.paths.footer, this.getElementDefaults('footer'))
69
93
  Store.set(this.paths.page, this.getElementDefaults('page'))
94
+ Store.set(this.paths.stickies, this.getElementDefaults('stickies'))
70
95
  Store.set(this.paths.fab, this.getElementDefaults('fab'))
71
96
  this.placements.forEach(placement => {
72
97
  Store.set(_.get(this.paths.panes, placement), this.getElementDefaults(`panes.${placement}`))
73
98
  Store.set(_.get(this.paths.windows, placement), this.getElementDefaults(`windows.${placement}`))
74
99
  })
100
+ Store.set(this.paths.focus, this.getElementDefaults('focus'))
75
101
  // debug message
76
- logger.debug(`[KDK] Layout initialized with: ${JSON.stringify(this.get(), null, 4)}`)
102
+ logger.debug('[KDK] Configuring layout with options:', this.get())
77
103
  },
78
104
  get () {
79
105
  return Store.get(this.paths.layout)
80
106
  },
81
- getLayoutDefaults () {
82
- return Object.assign({}, defaults.options, _.pick(_.get(config, this.paths.layout), _.keys(defaults.layout)))
107
+ set (layout) {
108
+ if (layout.view) this.setView(layout.view)
109
+ if (layout.padding) this.setPadding(layout.padding)
110
+ if (layout.header) this.setHeader(layout.header)
111
+ if (layout.footer) this.setFooter(layout.footer)
112
+ if (layout.page) this.setPage(layout.page)
113
+ if (layout.stickies) this.setStickies(layout.stickies)
114
+ if (layout.fab) this.setFab(layout.fab)
115
+ this.placements.forEach(placement => {
116
+ if (_.has(layout, `panes.${placement}`)) this.setPane(placement, _.get(layout, `panes.${placement}`))
117
+ if (_.has(layout, `windows.${placement}`)) this.setWindow(placement, _.get(layout, `windows.${placement}`))
118
+ })
119
+ if (layout.mode) this.setMode(layout.mode)
120
+ if (layout.focus) this.setFocus(layout.focus)
83
121
  },
84
122
  setView (view) {
85
123
  Store.patch(this.paths.layout, { view })
86
124
  },
125
+ clearView () {
126
+ Store.patch(this.paths.layout, { view: this.getElementDefaults('view') })
127
+ },
128
+ setPadding (padding) {
129
+ Store.patch(this.paths.padding, { padding })
130
+ },
131
+ clearPadding () {
132
+ Store.patch(this.paths.layout, { padding: this.getElementDefaults('padding') })
133
+ },
87
134
  setMode (mode) {
88
135
  this.setHeaderMode(mode)
89
136
  this.setFooterMode(mode)
90
137
  this.setPageMode(mode)
91
138
  this.setFabMode(mode)
139
+ this.setStickiesMode(mode)
92
140
  this.placements.forEach(placement => {
93
141
  this.setPaneMode(placement, mode)
94
142
  this.setWindowMode(placement, mode)
@@ -108,7 +156,8 @@ export const Layout = {
108
156
  const elementPath = this.getElementPath(element)
109
157
  const elementDefaults = _.get(defaults, element)
110
158
  const elementConfig = _.get(config, elementPath)
111
- return _.defaultsDeep(_.cloneDeep(elementConfig), elementDefaults)
159
+ if (elementConfig) return _.defaultsDeep(_.cloneDeep(elementConfig), elementDefaults)
160
+ return _.cloneDeep(elementDefaults)
112
161
  },
113
162
  setElement (element, options, context, omit = []) {
114
163
  const props = _.defaultsDeep(_.cloneDeep(options), this.getElementDefaults(element))
@@ -118,7 +167,7 @@ export const Layout = {
118
167
  // compute components
119
168
  if (Array.isArray(content)) props.components = content.filter(sift(props.filter))
120
169
  else props.components = _.get(content, mode, []).filter(sift(props.filter))
121
- // pacth the element
170
+ // patch the element
122
171
  Store.patch(this.getElementPath(element), props)
123
172
  },
124
173
  setElementMode (element, mode) {
@@ -128,7 +177,7 @@ export const Layout = {
128
177
  let components
129
178
  if (Array.isArray(props.content)) components = props.content.filter(sift(props.filter))
130
179
  else components = _.get(props.content, mode, []).filter(sift(props.filter))
131
- // pacth the element
180
+ // patch the element
132
181
  Store.patch(this.getElementPath(element), { mode, components })
133
182
  },
134
183
  setElementFilter (element, filter) {
@@ -138,7 +187,7 @@ export const Layout = {
138
187
  let components
139
188
  if (Array.isArray(props.content)) components = props.content.filter(sift(props.filter))
140
189
  else components = _.get(props.content, props.mode, []).filter(sift(props.filter))
141
- // pacth the element
190
+ // patch the element
142
191
  Store.patch(this.getElementPath(element), { filter, components })
143
192
  },
144
193
  setElementVisible (element, visible) {
@@ -146,8 +195,17 @@ export const Layout = {
146
195
  if (props.visible === visible) return
147
196
  Store.patch(this.getElementPath(element), { visible })
148
197
  },
198
+ setElementSize (element, size) {
199
+ if (!Array.isArray(size) && size.length !== 2) {
200
+ logger.warn(`[KDK] Invalid size ${size}`)
201
+ return
202
+ }
203
+ const props = this.getElement(element)
204
+ if (_.isEqual(props.size, size)) return
205
+ Store.patch(this.getElementPath(element), { size })
206
+ },
149
207
  clearElement (element) {
150
- this.setElement(element, null)
208
+ this.setElement(element, this.getElementDefaults(element))
151
209
  },
152
210
  getHeader () {
153
211
  return this.getElement('header')
@@ -203,6 +261,24 @@ export const Layout = {
203
261
  clearPage () {
204
262
  this.clearElement('page')
205
263
  },
264
+ getStickies () {
265
+ return this.getElement('stickies')
266
+ },
267
+ setStickies (options, context) {
268
+ this.setElement('stickies', options, context)
269
+ },
270
+ setStickiesMode (mode) {
271
+ this.setElementMode('stickies', mode)
272
+ },
273
+ setStickiesFilter (filter) {
274
+ this.setElementFilter('stickies', filter)
275
+ },
276
+ setStickiesVisible (visible) {
277
+ this.setElementVisible('stickies', visible)
278
+ },
279
+ clearStickies () {
280
+ this.clearElement('stickies')
281
+ },
206
282
  getFab () {
207
283
  return this.getElement('fab')
208
284
  },
@@ -264,6 +340,11 @@ export const Layout = {
264
340
  if (props.opener === opener) return
265
341
  Store.patch(this.getElementPath(`panes.${placement}`), { opener })
266
342
  },
343
+ setPaneSizes (placement, sizes) {
344
+ const props = this.getElement(`panes.${placement}`)
345
+ if (_.isEqual(props.sizes, sizes)) return
346
+ Store.patch(this.getElementPath(`panes.${placement}`), { sizes })
347
+ },
267
348
  clearPane (placement) {
268
349
  this.clearElement(`panes.${placement}`)
269
350
  },
@@ -284,9 +365,9 @@ export const Layout = {
284
365
  this.setElementVisible(`windows.${placement}`, visible)
285
366
  },
286
367
  setWindowControls (placement, controls) {
287
- for (const key in _.keys(windowDefaultContols)) {
368
+ for (const key of _.keys(windowsDefaultControls)) {
288
369
  if (!_.has(controls, key)) {
289
- logger.warn(`[KDK] Invalid window controls ${controls}`)
370
+ logger.warn(`[KDK] Invalid window control key ${key}`)
290
371
  return
291
372
  }
292
373
  }
@@ -313,17 +394,11 @@ export const Layout = {
313
394
  Store.patch(this.getElementPath(`windows.${placement}`), { position })
314
395
  },
315
396
  setWindowSize (placement, size) {
316
- if (!Array.isArray(size) && size.length !== 2) {
317
- logger.warn(`[KDK] Invalid size ${size}`)
318
- return
319
- }
320
- const props = this.getElement(`windows.${placement}`)
321
- if (_.isEqual(props.size, size)) return
322
- Store.patch(this.getElementPath(`windows.${placement}`), { size })
397
+ this.setElementSize(`windows.${placement}`, size)
323
398
  },
324
399
  setWindowSizePolicy (placement, policy) {
325
400
  if (!policy.minSize || !policy.floating || !policy.pinned) {
326
- logger.warn(`[KDK] Invalid sizePolicy ${policy}`)
401
+ logger.warn(`[KDK] Invalid window sizePolicy ${policy}`)
327
402
  return
328
403
  }
329
404
  const props = this.getElement(`windows.${placement}`)
@@ -350,5 +425,30 @@ export const Layout = {
350
425
  }
351
426
  logger.debug(`[KDK] Unable to find the widget ${widget}`)
352
427
  return { placement: undefined, window: undefined }
428
+ },
429
+ openWidget (widget, focus = true) {
430
+ const { placement, window } = this.findWindow(widget)
431
+ if (!placement) return
432
+ if (window.current !== 'current') this.setWindowCurrent(placement, widget)
433
+ if (!window.visible) this.setWindowVisible(placement, true)
434
+ if (focus) Layout.setFocus(`windows.${placement}`)
435
+ },
436
+ closeWidget (widget) {
437
+ const { placement, window } = this.findWindow(widget)
438
+ if (!placement) return
439
+ if (window.visible) this.setWindowVisible(placement, false)
440
+ },
441
+ setFocus (element) {
442
+ const focus = this.getElement('focus')
443
+ if (focus.element) {
444
+ if (focus.element === element) return
445
+ Store.patch(this.getElementPath(focus.element.path), { zIndex: focus.element.zIndex })
446
+ }
447
+ const props = this.getElement(element)
448
+ Store.patch(this.getElementPath('focus'), { element: { path: element, zIndex: props.zIndex } })
449
+ Store.patch(this.getElementPath(element), { zIndex: focus.zIndex })
450
+ },
451
+ clearFocus () {
452
+ this.clearElement('focus')
353
453
  }
354
454
  }
@@ -5,7 +5,7 @@ import config from 'config'
5
5
  export const LocalStorage = {
6
6
  initialize () {
7
7
  this.prefix = _.kebabCase(_.get(config, 'appName', 'kdk'))
8
- logger.debug(`[KDK] initializing local storage with prefix: '${this.prefix}'`)
8
+ logger.debug(`[KDK] Configuring local storage with prefix: '${this.prefix}'`)
9
9
  },
10
10
  localKey (key) {
11
11
  const keyPrefix = `${this.prefix}-`
@@ -1,6 +1,5 @@
1
1
  export * from './mixin.base-context.js'
2
2
  export * from './mixin.base-activity.js'
3
- export * from './mixin.base-collection.js'
4
3
  export * from './mixin.base-editor.js'
5
4
  export * from './mixin.base-item.js'
6
5
  export * from './mixin.base-field.js'
@@ -131,6 +131,21 @@ export function baseActivity (name) {
131
131
  clearPage () {
132
132
  Layout.setPage(null)
133
133
  },
134
+ getStickies () {
135
+ return Layout.getPage()
136
+ },
137
+ setStickies (content, mode, filter, sticky) {
138
+ Layout.setStickies({ content, mode, filter, sticky }, this)
139
+ },
140
+ setStickiesMode (mode) {
141
+ Layout.setStickiesMode(mode)
142
+ },
143
+ configureStickies () {
144
+ Layout.setStickies(_.get(this.activityOptions, 'stickies'), this)
145
+ },
146
+ clearStickies () {
147
+ Layout.clearStickies()
148
+ },
134
149
  getFab () {
135
150
  return Layout.getFab()
136
151
  },
@@ -169,23 +184,16 @@ export function baseActivity (name) {
169
184
  return (window && window.visible)
170
185
  },
171
186
  openWidget (widget) {
172
- const { placement, window } = this.findWindow(widget)
173
- if (!placement) {
174
- logger.warn(`[KDK] Cannot find widget ${widget}`)
175
- return
176
- }
177
- if (window.current !== widget) Layout.setWindowCurrent(placement, widget)
178
- Layout.setWindowVisible(placement, true)
187
+ Layout.openWidget(widget)
179
188
  },
180
189
  closeWidget (widget) {
181
- const result = this.findWindow(widget)
182
- if (!result.placement) {
183
- logger.warn(`Cannot find widget ${widget}`)
184
- return
185
- }
186
- Layout.setWindowVisible(result.placement, false)
190
+ Layout.closeWidget(widget)
191
+ },
192
+ clearFocus () {
193
+ Layout.clearFocus()
187
194
  },
188
195
  clearActivity () {
196
+ this.clearFocus()
189
197
  this.clearHeader()
190
198
  this.clearFooter()
191
199
  this.clearTopPane()
@@ -193,6 +201,7 @@ export function baseActivity (name) {
193
201
  this.clearLeftPane()
194
202
  this.clearRightPane()
195
203
  this.clearPage()
204
+ this.clearStickies()
196
205
  this.clearFab()
197
206
  this.clearWindows()
198
207
  },
@@ -204,6 +213,7 @@ export function baseActivity (name) {
204
213
  this.configureBottomPane()
205
214
  this.configureRightPane()
206
215
  this.configurePage()
216
+ this.configureStickies()
207
217
  this.configureFab()
208
218
  this.configureWindows()
209
219
  },
@@ -41,8 +41,11 @@ export const baseItem = {
41
41
  }
42
42
  },
43
43
  watch: {
44
+ // Make configured actions reactive as item actions are built from
45
+ item: function () {
46
+ this.configureActions()
47
+ },
44
48
  actions: function () {
45
- // Make configured actions reactive as item actions are built from
46
49
  this.configureActions()
47
50
  }
48
51
  },
@@ -138,10 +141,10 @@ export const baseItem = {
138
141
  flat: true
139
142
  }
140
143
  }).onOk(() => {
141
- this.$api.getService(this.service).remove(this.item._id)
144
+ this.$api.getService(this.service, this.contextId).remove(this.item._id)
142
145
  })
143
146
  } else {
144
- this.$api.getService(this.service).remove(this.item._id)
147
+ this.$api.getService(this.service, this.contextId).remove(this.item._id)
145
148
  }
146
149
  },
147
150
  exportItem () {
@@ -31,6 +31,7 @@ export default function init () {
31
31
  timelineStep: 'time.step',
32
32
  timelineInterval: 'time.interval',
33
33
  timeseriesSpan: 'timeseries.span',
34
+ timeseriesGroupBy: 'timeseries.groupBy',
34
35
  location: 'locationFormat',
35
36
  restoreView: 'restore.view',
36
37
  restoreLayers: 'restore.layers',
@@ -44,8 +45,10 @@ export default function init () {
44
45
  defaultNotation: 'units.default.notation',
45
46
  defaultPrecision: 'units.default.precision'
46
47
  })
48
+ const settingsSchema = _.get(config, 'settings.schema', 'settings.update')
47
49
  api.createService('settings', {
48
50
  service: LocalSettingsService,
49
- propertyMapping
51
+ propertyMapping,
52
+ settingsSchema
50
53
  }) // Default options can be overriden from app config
51
54
  }
@@ -59,6 +59,10 @@ export default function (name, api, options) {
59
59
  })
60
60
  },
61
61
 
62
+ getSchema () {
63
+ return options.settingsSchema
64
+ },
65
+
62
66
  getSettingsMapping () {
63
67
  return mapping
64
68
  }
@@ -87,7 +87,7 @@ export const Storage = {
87
87
  // Ensure service is created
88
88
  const service = this.getService(context)
89
89
  // Get proxy route to object storage
90
- let url = api.getBaseUrl() + config.apiPath
90
+ let url = api.getConfig('domain') + config.apiPath
91
91
  if (service.context) url += `/${context}`
92
92
  url += `/storage-objects/${key}`
93
93
  // Handle extra query params
@@ -15,7 +15,7 @@ export const Store = Object.assign(store, {
15
15
  set(path, value)
16
16
  const eventName = _.kebabCase(`${path}-changed`)
17
17
  Events.emit(eventName, value, previousValue)
18
- Events.emit('store-changed', path, value)
18
+ Events.emit('store-changed', path, value, previousValue)
19
19
  },
20
20
  patch (path, value) {
21
21
  // Patching should not change the object reference to maintain reactivity
@@ -0,0 +1,17 @@
1
+ // This is a singleton used to inject data in string template evaluation contexts (lodash)
2
+ export const TemplateContext = {
3
+ initialize () {
4
+ if (this.ctx) return
5
+ this.ctx = {}
6
+ },
7
+
8
+ get () {
9
+ return this.ctx
10
+ },
11
+
12
+ merge (ctx) {
13
+ this.ctx = Object.assign({}, this.ctx, ctx)
14
+ }
15
+ }
16
+
17
+ TemplateContext.initialize()