@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
@@ -0,0 +1,47 @@
1
+ <template>
2
+ <KCardSection
3
+ :title="$t('KDescriptionCardSection.TITLE')"
4
+ :actions="actions"
5
+ :actionsFilter="actionsFilter"
6
+ :hideHeader="hideHeader"
7
+ :dense="dense"
8
+ >
9
+ <KTextArea
10
+ v-if="description"
11
+ :text="description"
12
+ :minHeight="48"
13
+ :dense="dense"
14
+ />
15
+ <div v-else :style="`height: 44px; position: relative`">
16
+ <KStamp
17
+ text="KDescriptionCardSection.NO_DESCRIPTION"
18
+ icon="las la-exclamation-circle"
19
+ iconSize="24px"
20
+ direction="horizontal"
21
+ class="absolute-center"
22
+ />
23
+ </div>
24
+ </KCardSection>
25
+ </template>
26
+
27
+ <script setup>
28
+ import _ from 'lodash'
29
+ import { computed } from 'vue'
30
+ import { CardSectionProps } from '../../utils/utils.items.js'
31
+ import KCardSection from './KCardSection.vue'
32
+ import KTextArea from '../KTextArea.vue'
33
+
34
+ // Props
35
+ const props = defineProps({
36
+ descriptionPath: {
37
+ type: String,
38
+ default: 'description'
39
+ },
40
+ ...CardSectionProps
41
+ })
42
+
43
+ // Computed
44
+ const description = computed(() => {
45
+ return _.get(props.item, props.descriptionPath)
46
+ })
47
+ </script>
@@ -1,55 +1,154 @@
1
1
  <template>
2
- <div v-if="items.length > 0" class="q-pa-sm row">
3
- <template v-for="item in items" :key="item._id">
4
- <div :class="itemClass">
5
- <component
6
- :id="item._id"
7
- :service="service"
8
- :item="item"
9
- :contextId="contextId"
10
- :is="rendererComponent"
11
- v-bind="renderer"
12
- @item-selected="onItemSelected" />
2
+ <div class="fit column no-wrap">
3
+ <!--
4
+ Header
5
+ -->
6
+ <div id="grid-header">
7
+ <slot name="header">
8
+ <KPanel :content="header" :class="headerClass" />
9
+ </slot>
10
+ </div>
11
+ <!--
12
+ Content
13
+ -->
14
+ <div v-if="items && items.length > 0"
15
+ id="grid-content"
16
+ ref="contentRef"
17
+ class="col scroll"
18
+ >
19
+ <!-- Infinite mode -->
20
+ <div v-if="appendItems" class="column">
21
+ <q-infinite-scroll
22
+ @load="onLoad"
23
+ :initial-index="1"
24
+ :offset="200"
25
+ v-scroll="onScroll"
26
+ class="col"
27
+ >
28
+ <div class="row">
29
+ <template v-for="(item, index) in items" :key="item._id">
30
+ <div :class="rendererClass">
31
+ <component
32
+ :id="item._id"
33
+ :ref="onItemRendered"
34
+ :service="service"
35
+ :item="item"
36
+ :contextId="contextId"
37
+ :is="itemRenderer"
38
+ v-bind="renderer"
39
+ @item-selected="onItemSelected"
40
+ />
41
+ </div>
42
+ </template>
43
+ </div>
44
+ </q-infinite-scroll>
45
+ </div>
46
+ <!-- Paginated mode -->
47
+ <div v-else class="row">
48
+ <template v-for="item in items" :key="item._id">
49
+ <div :class="rendererClass">
50
+ <component
51
+ :id="item._id"
52
+ :ref="onItemRendered"
53
+ :service="service"
54
+ :item="item"
55
+ :contextId="contextId"
56
+ :is="itemRenderer"
57
+ v-bind="renderer"
58
+ @item-selected="onItemSelected"
59
+ />
60
+ </div>
61
+ </template>
13
62
  </div>
14
- </template>
15
- <div v-if="nbPages > 1" class="col-12">
16
- <q-pagination
17
- class="justify-center q-ma-md"
18
- v-model="currentPage"
19
- :max="nbPages"
20
- :input="true"
21
- @update:model-value="refreshCollection"
22
- />
23
63
  </div>
24
- </div>
25
- <div v-else>
26
- <slot name="empty-section">
27
- <div class="row justify-center">
28
- <KStamp icon="las la-exclamation-circle" icon-size="1.6rem" :text="$t('KGrid.EMPTY_GRID')" direction="horizontal" />
64
+ <!-- Empty slot -->
65
+ <div v-else-if="items && items.length === 0"
66
+ id="grid-empty"
67
+ >
68
+ <slot name="empty">
69
+ <div class="row justify-center">
70
+ <KStamp
71
+ icon="las la-exclamation-circle"
72
+ icon-size="1.6rem"
73
+ :text="$t('KGrid.EMPTY_LABEL')"
74
+ direction="horizontal"
75
+ class="q-pa-md"
76
+ />
77
+ </div>
78
+ </slot>
79
+ </div>
80
+ <!-- Initializing slot -->
81
+ <div v-else id="grid-initializing">
82
+ <slot name="initializing">
83
+ <div class="row justify-center">
84
+ <q-spinner
85
+ color="primary"
86
+ size="2rem"
87
+ />
88
+ </div>
89
+ </slot>
90
+ </div>
91
+ <!--
92
+ Controls
93
+ -->
94
+ <div id="grid-controls">
95
+ <div v-if="appendItems">
96
+ <!-- scroll -->
97
+ <div v-if="contentRef" class="row items-center">
98
+ <div class="col-4"></div>
99
+ <div class="col-4 row justify-center">
100
+ <KScrollDown
101
+ v-if="scrollDown"
102
+ :ref="scrollDownRefCreated"
103
+ target="grid-content"
104
+ :loading="loadDoneFunction ? true : false"
105
+ />
106
+ </div>
107
+ <div class="col-4 row justify-end">
108
+ <KScrollToTop
109
+ v-if="scrollToTop"
110
+ :ref="scrollToTopRefCreated"
111
+ target="grid-content"
112
+ />
113
+ </div>
114
+ </div>
29
115
  </div>
30
- </slot>
116
+ <!-- pagination -->
117
+ <div v-else>
118
+ <div v-if="nbPages > 1" class="row justify-center">
119
+ <q-pagination
120
+ v-model="currentPage"
121
+ :max="nbPages"
122
+ :input="true"
123
+ @update:model-value="refreshCollection"
124
+ />
125
+ </div>
126
+ </div>
127
+
128
+ </div>
129
+ <!--
130
+ Footer
131
+ -->
132
+ <div id="grid-footer">
133
+ <slot name="footer">
134
+ <KPanel :content="footer" :class="footerClass" />
135
+ </slot>
136
+ </div>
31
137
  </div>
32
138
  </template>
33
139
 
34
140
  <script setup>
35
- import { computed, watch, toRefs, onBeforeMount, onBeforeUnmount } from 'vue'
36
- import KStamp from '../KStamp.vue'
37
- import { Events } from '../../events.js'
141
+ import { ref, computed, watch, toRefs, onBeforeMount, onBeforeUnmount } from 'vue'
38
142
  import { useCollection } from '../../composables'
143
+ import { Events } from '../../events.js'
39
144
  import { loadComponent } from '../../utils'
40
-
41
- const emit = defineEmits(['selection-changed', 'collection-refreshed'])
145
+ import KScrollToTop from './KScrollToTop.vue'
146
+ import KScrollDown from './KScrollDown.vue'
147
+ import KStamp from '../KStamp.vue'
148
+ import KPanel from '../KPanel.vue'
42
149
 
43
150
  // Props
44
151
  const props = defineProps({
45
- renderer: {
46
- type: Object,
47
- default: () => {
48
- return {
49
- component: 'collection/KCard'
50
- }
51
- }
52
- },
53
152
  contextId: {
54
153
  type: String,
55
154
  default: undefined
@@ -66,45 +165,126 @@ const props = defineProps({
66
165
  type: Object,
67
166
  default: () => {}
68
167
  },
69
- listStrategy: {
70
- type: String,
71
- default: 'smart'
168
+ renderer: {
169
+ type: Object,
170
+ default: () => {
171
+ return {
172
+ component: 'collection/KCard'
173
+ }
174
+ }
175
+ },
176
+ processor: {
177
+ type: Function,
178
+ default: undefined
179
+ },
180
+ appendItems: {
181
+ type: Boolean,
182
+ default: false
72
183
  },
73
184
  nbItemsPerPage: {
74
185
  type: Number,
75
186
  default: 12
76
187
  },
77
- processor: {
78
- type: Function,
188
+ listStrategy: {
189
+ type: String,
190
+ default: 'smart'
191
+ },
192
+ scrollDown: {
193
+ type: Boolean,
194
+ default: true
195
+ },
196
+ scrollToTop: {
197
+ type: Boolean,
198
+ default: true
199
+ },
200
+ header: {
201
+ type: [Array, Object],
202
+ default: () => null
203
+ },
204
+ headerClass: {
205
+ type: String,
206
+ default: undefined
207
+ },
208
+ footer: {
209
+ type: [Array, Object],
210
+ default: () => null
211
+ },
212
+ footerClass: {
213
+ type: String,
79
214
  default: undefined
215
+ },
216
+ dense: {
217
+ type: Boolean,
218
+ default: false
80
219
  }
81
220
  })
82
221
 
222
+ // Emits
223
+ const emit = defineEmits(['collection-refreshed', 'selection-changed'])
224
+
225
+ // Data
226
+ const { items, nbTotalItems, nbPages, currentPage, refreshCollection, resetCollection } = useCollection(toRefs(props))
227
+ const contentRef = ref(null)
228
+ const scrollDownRef = ref(null)
229
+ const scrollToTopRef = ref(null)
230
+ const loadDoneFunction = ref(null)
231
+
83
232
  // Computed
84
- const rendererComponent = computed(() => loadComponent(props.renderer.component))
85
- const itemClass = computed(() => props.renderer.class || 'q-pa-sm col-12 col-sm-6 col-md-4 col-lg-3 col-xl-2')
233
+ const itemRenderer = computed(() => {
234
+ return loadComponent(props.renderer.component)
235
+ })
236
+ const rendererClass = computed(() => {
237
+ return props.renderer.class || 'q-pa-sm col-12 col-sm-6 col-md-4 col-lg-3'
238
+ })
239
+
240
+ // Watch
241
+ watch(items, onCollectionRefreshed)
86
242
 
87
243
  // Functions
244
+ function onItemRendered (instance) {
245
+ if (instance) onScroll()
246
+ }
247
+ function scrollDownRefCreated (instance) {
248
+ scrollDownRef.value = instance
249
+ if (instance) instance.refresh()
250
+ }
251
+ function scrollToTopRefCreated (instance) {
252
+ scrollToTopRef.value = instance
253
+ if (instance) instance.refresh()
254
+ }
255
+ function onScroll () {
256
+ if (scrollDownRef.value) scrollDownRef.value.refresh()
257
+ if (scrollToTopRef.value) scrollToTopRef.value.refresh()
258
+ }
259
+ function onLoad (index, done) {
260
+ // check whether the items are all loaded yet
261
+ if (items.value.length === nbTotalItems.value) {
262
+ done(true)
263
+ return
264
+ }
265
+ // set the current page and tell the collection to be refreshed
266
+ currentPage.value = index
267
+ refreshCollection()
268
+ loadDoneFunction.value = done
269
+ }
88
270
  function onItemSelected (item, section) {
89
271
  emit('selection-changed', item, section)
90
272
  }
91
273
  function onCollectionRefreshed () {
92
274
  emit('collection-refreshed', items.value)
275
+ // call done callback if needed
276
+ if (loadDoneFunction.value) {
277
+ loadDoneFunction.value(items.value.length === nbTotalItems.value)
278
+ loadDoneFunction.value = null
279
+ }
93
280
  }
94
281
 
95
- const { items, nbTotalItems, nbPages, currentPage, refreshCollection, resetCollection } = useCollection(toRefs(props))
96
-
97
- // Lifecycle hooks
98
-
99
- // Emit events so that embbeding components can be aware of it
100
- watch(items, onCollectionRefreshed)
101
-
282
+ // Hooks
102
283
  onBeforeMount(() => {
103
284
  refreshCollection()
104
285
  // Whenever the user abilities are updated, update collection as well
105
286
  Events.on('user-abilities-changed', refreshCollection)
106
287
  })
107
-
108
288
  onBeforeUnmount(() => {
109
289
  Events.off('user-abilities-changed', refreshCollection)
110
290
  })
@@ -0,0 +1,97 @@
1
+ <template>
2
+ <div>
3
+ <q-spinner v-if="loading"
4
+ color="primary"
5
+ :size="size"
6
+ />
7
+ <KAction v-else
8
+ v-if="isVisible"
9
+ id="scroll-down"
10
+ :color="color"
11
+ :icon="icon"
12
+ :size="size"
13
+ :handler="scrollOnce"
14
+ />
15
+ </div>
16
+ </template>
17
+
18
+ <script setup>
19
+ import _ from 'lodash'
20
+ import logger from 'loglevel'
21
+ import { ref, watch } from 'vue'
22
+ import { useQuasar, scroll as qScrollUtils } from 'quasar'
23
+ import { clamp } from '../../utils'
24
+
25
+ // Props
26
+ const props = defineProps({
27
+ target: {
28
+ type: String,
29
+ required: true
30
+ },
31
+ color: {
32
+ type: String,
33
+ default: 'grey-7'
34
+ },
35
+ icon: {
36
+ type: String,
37
+ default: 'las la-angle-double-down'
38
+ },
39
+ size: {
40
+ type: String,
41
+ default: 'md'
42
+ },
43
+ loading: {
44
+ type: Boolean,
45
+ default: false
46
+ },
47
+ duration: {
48
+ type: Number,
49
+ default: 200
50
+ }
51
+ })
52
+
53
+ // Data
54
+ const $q = useQuasar()
55
+ const isVisible = ref(false)
56
+
57
+ // Watch
58
+ watch(() => [$q.screen.width, $q.screen.height], () => {
59
+ refresh()
60
+ })
61
+
62
+ // Functions
63
+ const refresh = _.debounce(() => {
64
+ const targetElement = document.getElementById(props.target)
65
+ if (!targetElement) {
66
+ logger.error('[KDK] Cannot find target element')
67
+ return
68
+ }
69
+ const containerHeight = targetElement.offsetHeight
70
+ const scrollHeight = qScrollUtils.getScrollHeight(targetElement)
71
+ const diff = scrollHeight - containerHeight
72
+ if (diff <= 0) isVisible.value = false
73
+ else {
74
+ const ratio = clamp(qScrollUtils.getVerticalScrollPosition(targetElement) / diff, 0, 1)
75
+ const percent = Math.round(ratio * 10000) / 10000
76
+ isVisible.value = percent < 0.99
77
+ }
78
+ logger.trace(`[KDK] (KScrollDown) Refreshed with visibility: ${isVisible.value}`)
79
+ }, 100)
80
+ function scrollOnce () {
81
+ const targetElement = document.getElementById(props.target)
82
+ if (!targetElement) {
83
+ logger.error('[KDK] Cannot find target element')
84
+ return
85
+ }
86
+ const position = qScrollUtils.getVerticalScrollPosition(targetElement)
87
+ const offset = targetElement.offsetHeight * 0.75
88
+ qScrollUtils.setVerticalScrollPosition(targetElement, position + offset, props.duration)
89
+ logger.trace(`[KDK] (KScrollDown) Scrolled down with offset: ${offset}`)
90
+ refresh()
91
+ }
92
+
93
+ // Expose
94
+ defineExpose({
95
+ refresh
96
+ })
97
+ </script>
@@ -0,0 +1,93 @@
1
+ <template>
2
+ <div class="k-scroll-to-top">
3
+ <KAction
4
+ v-if="isVisible"
5
+ id="scroll-to-top"
6
+ tooltip="KScrollToTop.TOOLTIP"
7
+ :icon="icon"
8
+ :color="color"
9
+ :flat="false"
10
+ :size="size"
11
+ :handler="scrollToTop"
12
+ />
13
+ </div>
14
+ </template>
15
+
16
+ <script setup>
17
+ import _ from 'lodash'
18
+ import logger from 'loglevel'
19
+ import { ref, watch } from 'vue'
20
+ import { useQuasar, scroll as qScrollUtils } from 'quasar'
21
+ import { DefaultZIndex } from '../../layout.js'
22
+
23
+ // Props
24
+ const props = defineProps({
25
+ target: {
26
+ type: String,
27
+ required: true
28
+ },
29
+ color: {
30
+ type: String,
31
+ default: 'grey-7'
32
+ },
33
+ icon: {
34
+ type: String,
35
+ default: 'las la-arrow-up'
36
+ },
37
+ size: {
38
+ type: String,
39
+ default: 'md'
40
+ },
41
+ duration: {
42
+ type: Number,
43
+ default: 300
44
+ },
45
+ zIndex: {
46
+ type: Number,
47
+ default: () => { return DefaultZIndex.fab }
48
+ }
49
+ })
50
+
51
+ // Data
52
+ const $q = useQuasar()
53
+ const isVisible = ref(false)
54
+
55
+ // Watch
56
+ watch(() => [$q.screen.width, $q.screen.height], () => {
57
+ refresh()
58
+ })
59
+
60
+ // Functions
61
+ const refresh = _.debounce(() => {
62
+ const targetElement = document.getElementById(props.target)
63
+ if (!targetElement) {
64
+ logger.error('[KDK] Cannot find target element')
65
+ return
66
+ }
67
+ isVisible.value = qScrollUtils.getVerticalScrollPosition(targetElement) > 0
68
+ logger.trace(`[KDK] (KScrollToTop) Refreshed with visibility: ${isVisible.value}`)
69
+ }, 100)
70
+ function scrollToTop () {
71
+ const targetElement = document.getElementById(props.target)
72
+ if (!targetElement) {
73
+ logger.error('[KDK] Cannot find target element')
74
+ return
75
+ }
76
+ qScrollUtils.setVerticalScrollPosition(targetElement, 0, props.duration)
77
+ logger.trace('[KDK] (KScrollToTop) Scrolled to top')
78
+ refresh()
79
+ }
80
+
81
+ // Expose
82
+ defineExpose({
83
+ refresh
84
+ })
85
+ </script>
86
+
87
+ <style lang="scss" scoped>
88
+ .k-scroll-to-top {
89
+ position: relative;
90
+ transform: translate(-48px, -24px);
91
+ z-index: v-bind(zIndex);
92
+ }
93
+ </style>