@c8y/ngx-components 1021.13.3 → 1021.22.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 (432) hide show
  1. package/alarms/alarm-details.component.d.ts +1 -3
  2. package/alarms/alarm-details.component.d.ts.map +1 -1
  3. package/alarms/alarm-info.component.d.ts +9 -14
  4. package/alarms/alarm-info.component.d.ts.map +1 -1
  5. package/alarms/alarms-list.component.d.ts +2 -17
  6. package/alarms/alarms-list.component.d.ts.map +1 -1
  7. package/alarms/alarms-view.service.d.ts +1 -0
  8. package/alarms/alarms-view.service.d.ts.map +1 -1
  9. package/alarms/alarms.component.d.ts.map +1 -1
  10. package/alarms/alarms.helper.d.ts +5 -0
  11. package/alarms/alarms.helper.d.ts.map +1 -0
  12. package/alarms/alarms.model.d.ts +30 -0
  13. package/alarms/alarms.model.d.ts.map +1 -1
  14. package/alarms/alarms.module.d.ts.map +1 -1
  15. package/alarms/cockpit/index.d.ts.map +1 -1
  16. package/alarms/devicemanagement/index.d.ts.map +1 -1
  17. package/alarms/index.d.ts +5 -4
  18. package/alarms/index.d.ts.map +1 -1
  19. package/context-dashboard/context-dashboard.model.d.ts +1 -0
  20. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  21. package/context-dashboard/context-dashboard.service.d.ts +7 -5
  22. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  23. package/context-dashboard/dashboard-detail.component.d.ts +4 -7
  24. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  25. package/context-dashboard/dashboard-detail.service.d.ts +4 -4
  26. package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
  27. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
  28. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
  29. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
  30. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
  31. package/core/action-bar/action-bar-item.component.d.ts +1 -1
  32. package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
  33. package/core/action-bar/action-bar.module.d.ts +6 -6
  34. package/core/action-bar/action-bar.module.d.ts.map +1 -1
  35. package/core/bootstrap/bootstrap.component.d.ts +3 -1
  36. package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
  37. package/core/common/aggregation/aggregation.model.d.ts +39 -0
  38. package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
  39. package/core/common/aggregation/aggregation.service.d.ts +17 -0
  40. package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
  41. package/core/common/index.d.ts +4 -0
  42. package/core/common/index.d.ts.map +1 -1
  43. package/core/common/inter-app.service.d.ts +48 -0
  44. package/core/common/inter-app.service.d.ts.map +1 -0
  45. package/core/common/interval-based-reload.abstract.d.ts +120 -0
  46. package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
  47. package/core/dashboard/dashboard.module.d.ts +24 -18
  48. package/core/dashboard/dashboard.module.d.ts.map +1 -1
  49. package/core/dashboard/index.d.ts +3 -0
  50. package/core/dashboard/index.d.ts.map +1 -1
  51. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
  52. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
  53. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
  54. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
  55. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
  56. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
  57. package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
  58. package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
  59. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
  60. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
  61. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
  62. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
  63. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
  64. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
  65. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
  66. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
  67. package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
  68. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  69. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
  70. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
  71. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
  72. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
  73. package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
  74. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +11 -8
  75. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  76. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +6 -12
  77. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  78. package/core/header/header.module.d.ts +18 -18
  79. package/core/header/header.module.d.ts.map +1 -1
  80. package/core/header/title/title.component.d.ts +1 -1
  81. package/core/header/title/title.component.d.ts.map +1 -1
  82. package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
  83. package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
  84. package/core/i18n/i18n.module.d.ts +0 -4
  85. package/core/i18n/i18n.module.d.ts.map +1 -1
  86. package/core/i18n/index.d.ts +2 -1
  87. package/core/i18n/index.d.ts.map +1 -1
  88. package/core/i18n/translation-loader.service.d.ts +50 -0
  89. package/core/i18n/translation-loader.service.d.ts.map +1 -0
  90. package/core/i18n/translation-utils.d.ts +14 -0
  91. package/core/i18n/translation-utils.d.ts.map +1 -0
  92. package/core/plugins/plugins-resolve.service.d.ts +7 -10
  93. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  94. package/core/router/context-route.component.d.ts +8 -3
  95. package/core/router/context-route.component.d.ts.map +1 -1
  96. package/core/router/context-route.service.d.ts +29 -3
  97. package/core/router/context-route.service.d.ts.map +1 -1
  98. package/core/router/router-tabs.resolver.d.ts +4 -1
  99. package/core/router/router-tabs.resolver.d.ts.map +1 -1
  100. package/core/router/router.model.d.ts +40 -3
  101. package/core/router/router.model.d.ts.map +1 -1
  102. package/core/router/router.module.d.ts +2 -1
  103. package/core/router/router.module.d.ts.map +1 -1
  104. package/core/router/router.service.d.ts +5 -4
  105. package/core/router/router.service.d.ts.map +1 -1
  106. package/core/router/scoped-context-route.service.d.ts +57 -0
  107. package/core/router/scoped-context-route.service.d.ts.map +1 -0
  108. package/core/router/view-context.service.d.ts +8 -18
  109. package/core/router/view-context.service.d.ts.map +1 -1
  110. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
  111. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
  112. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
  113. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  114. package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
  115. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  116. package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
  117. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
  118. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
  119. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
  120. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
  121. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
  122. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
  123. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
  124. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
  125. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
  126. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
  127. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
  128. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
  129. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
  130. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
  131. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
  132. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
  133. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
  134. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
  135. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
  136. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
  137. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
  138. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
  139. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
  140. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
  141. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
  142. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
  143. package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
  144. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
  145. package/datapoints-export-selector/index.d.ts +15 -0
  146. package/datapoints-export-selector/index.d.ts.map +1 -0
  147. package/device-list/device-list.module.d.ts +4 -2
  148. package/device-list/device-list.module.d.ts.map +1 -1
  149. package/esm2022/alarms/alarm-details.component.mjs +7 -9
  150. package/esm2022/alarms/alarm-info.component.mjs +23 -33
  151. package/esm2022/alarms/alarms-list.component.mjs +5 -16
  152. package/esm2022/alarms/alarms-view.service.mjs +3 -2
  153. package/esm2022/alarms/alarms.component.mjs +10 -3
  154. package/esm2022/alarms/alarms.helper.mjs +32 -0
  155. package/esm2022/alarms/alarms.model.mjs +1 -1
  156. package/esm2022/alarms/alarms.module.mjs +5 -5
  157. package/esm2022/alarms/cockpit/index.mjs +13 -17
  158. package/esm2022/alarms/devicemanagement/index.mjs +15 -18
  159. package/esm2022/alarms/index.mjs +6 -5
  160. package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
  161. package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
  162. package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
  163. package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
  164. package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
  165. package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
  166. package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
  167. package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
  168. package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
  169. package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
  170. package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
  171. package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
  172. package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
  173. package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
  174. package/esm2022/core/common/index.mjs +5 -1
  175. package/esm2022/core/common/inter-app.service.mjs +76 -0
  176. package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
  177. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  178. package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
  179. package/esm2022/core/dashboard/dashboard.module.mjs +18 -1
  180. package/esm2022/core/dashboard/index.mjs +4 -1
  181. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
  182. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
  183. package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
  184. package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
  185. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
  186. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
  187. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
  188. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
  189. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
  190. package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
  191. package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
  192. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
  193. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
  194. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -37
  195. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -28
  196. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +3 -3
  197. package/esm2022/core/header/header.module.mjs +7 -5
  198. package/esm2022/core/header/title/title.component.mjs +3 -3
  199. package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
  200. package/esm2022/core/i18n/i18n.module.mjs +7 -14
  201. package/esm2022/core/i18n/index.mjs +3 -2
  202. package/esm2022/core/i18n/translate.parser.mjs +2 -2
  203. package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
  204. package/esm2022/core/i18n/translation-utils.mjs +24 -0
  205. package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
  206. package/esm2022/core/router/context-route.component.mjs +23 -13
  207. package/esm2022/core/router/context-route.service.mjs +37 -5
  208. package/esm2022/core/router/router-tabs.resolver.mjs +46 -15
  209. package/esm2022/core/router/router.model.mjs +6 -1
  210. package/esm2022/core/router/router.module.mjs +20 -13
  211. package/esm2022/core/router/router.service.mjs +24 -10
  212. package/esm2022/core/router/scoped-context-route.service.mjs +152 -0
  213. package/esm2022/core/router/view-context.service.mjs +59 -16
  214. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
  215. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
  216. package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
  217. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  218. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  219. package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
  220. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
  221. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
  222. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
  223. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
  224. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
  225. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
  226. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
  227. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
  228. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
  229. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
  230. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
  231. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
  232. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
  233. package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
  234. package/esm2022/datapoints-export-selector/index.mjs +15 -0
  235. package/esm2022/device-list/add-smart-group.component.mjs +4 -3
  236. package/esm2022/device-list/device-list.module.mjs +22 -4
  237. package/esm2022/map/cluster-map.component.mjs +41 -13
  238. package/esm2022/map/map-status.component.mjs +6 -5
  239. package/esm2022/map/map.component.mjs +9 -5
  240. package/esm2022/map/map.model.mjs +1 -1
  241. package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
  242. package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
  243. package/esm2022/translation-editor/data/index.mjs +2 -0
  244. package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
  245. package/esm2022/translation-editor/index.mjs +10 -0
  246. package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
  247. package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
  248. package/esm2022/translation-editor/lazy/index.mjs +2 -0
  249. package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
  250. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
  251. package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
  252. package/esm2022/widgets/cockpit/index.mjs +4 -2
  253. package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
  254. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
  255. package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
  256. package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
  257. package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
  258. package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
  259. package/esm2022/widgets/definitions/index.mjs +2 -1
  260. package/esm2022/widgets/definitions/map/index.mjs +4 -2
  261. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
  262. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
  263. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
  264. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
  265. package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
  266. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
  267. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
  268. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
  269. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
  270. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
  271. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
  272. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
  273. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
  274. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
  275. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
  276. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
  277. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
  278. package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
  279. package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
  280. package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
  281. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
  282. package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
  283. package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
  284. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +12 -16
  285. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
  286. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +14 -17
  287. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
  288. package/fesm2022/c8y-ngx-components-alarms.mjs +203 -185
  289. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  290. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
  291. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  292. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
  293. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  294. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
  295. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
  296. package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
  297. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  298. package/fesm2022/c8y-ngx-components-map.mjs +52 -19
  299. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  300. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
  301. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
  302. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
  303. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
  304. package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
  305. package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
  306. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
  307. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  308. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
  309. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  310. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
  311. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  312. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
  313. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  314. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
  315. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  316. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
  317. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
  318. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
  319. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  320. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  321. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  322. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
  323. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  324. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
  325. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
  326. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
  327. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  328. package/fesm2022/c8y-ngx-components.mjs +5476 -4396
  329. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  330. package/locales/de.po +289 -18
  331. package/locales/en.po +12 -0
  332. package/locales/en_US.po +3 -0
  333. package/locales/es.po +253 -18
  334. package/locales/fr.po +253 -18
  335. package/locales/ja_JP.po +282 -18
  336. package/locales/locales.pot +257 -18
  337. package/locales/nl.po +253 -18
  338. package/locales/pl.po +253 -18
  339. package/locales/pt_BR.po +253 -18
  340. package/map/cluster-map.component.d.ts +8 -3
  341. package/map/cluster-map.component.d.ts.map +1 -1
  342. package/map/map-status.component.d.ts +0 -3
  343. package/map/map-status.component.d.ts.map +1 -1
  344. package/map/map.component.d.ts +4 -2
  345. package/map/map.component.d.ts.map +1 -1
  346. package/map/map.model.d.ts +2 -1
  347. package/map/map.model.d.ts.map +1 -1
  348. package/package.json +1 -1
  349. package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
  350. package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
  351. package/translation-editor/data/index.d.ts +2 -0
  352. package/translation-editor/data/index.d.ts.map +1 -0
  353. package/translation-editor/data/translation-store.service.d.ts +61 -0
  354. package/translation-editor/data/translation-store.service.d.ts.map +1 -0
  355. package/translation-editor/index.d.ts +2 -0
  356. package/translation-editor/index.d.ts.map +1 -0
  357. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
  358. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
  359. package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
  360. package/translation-editor/lazy/index.d.ts +2 -0
  361. package/translation-editor/lazy/index.d.ts.map +1 -0
  362. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
  363. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
  364. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
  365. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
  366. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
  367. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
  368. package/widgets/cockpit/index.d.ts +13 -0
  369. package/widgets/cockpit/index.d.ts.map +1 -1
  370. package/widgets/cockpit-exports/index.d.ts +6 -0
  371. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  372. package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
  373. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  374. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
  375. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  376. package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
  377. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  378. package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
  379. package/widgets/definitions/datapoints-table/index.d.ts +14 -0
  380. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
  381. package/widgets/definitions/index.d.ts +1 -0
  382. package/widgets/definitions/index.d.ts.map +1 -1
  383. package/widgets/definitions/map/index.d.ts +2 -1
  384. package/widgets/definitions/map/index.d.ts.map +1 -1
  385. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
  386. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  387. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
  388. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  389. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
  390. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  391. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
  392. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  393. package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
  394. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
  395. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
  396. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
  397. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
  398. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
  399. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
  400. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
  401. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
  402. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
  403. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
  404. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
  405. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
  406. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
  407. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
  408. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
  409. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
  410. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
  411. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
  412. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
  413. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
  414. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
  415. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
  416. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
  417. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
  418. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
  419. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
  420. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
  421. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
  422. package/widgets/implementations/datapoints-table/index.d.ts +10 -0
  423. package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
  424. package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
  425. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  426. package/widgets/implementations/map/map-widget.component.d.ts +8 -3
  427. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
  428. package/widgets/implementations/map/map-widget.model.d.ts +4 -3
  429. package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
  430. package/core/i18n/translate.loader.d.ts +0 -31
  431. package/core/i18n/translate.loader.d.ts.map +0 -1
  432. package/esm2022/core/i18n/translate.loader.mjs +0 -71
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-map.mjs","sources":["../../map/map.model.ts","../../map/map.service.ts","../../map/cluster-map.ts","../../map/map-popup.directive.ts","../../map/map.component.ts","../../map/map.component.html","../../map/cluster-map.component.ts","../../map/cluster-map.component.html","../../map/map-status.component.ts","../../map/map-status.component.html","../../map/map.module.ts","../../map/c8y-ngx-components-map.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IEvent, IManagedObject } from '@c8y/client';\nimport type { MapDefaultConfig, MapTileLayer } from '@c8y/options';\nimport type * as L from 'leaflet';\nimport { Observable } from 'rxjs';\n\nexport function getC8yMarker(marker: L.Marker, asset?: PositionManagedObject, event?: IEvent) {\n (marker as C8yMarker).asset = asset;\n (marker as C8yMarker).event = event;\n return marker as C8yMarker;\n}\n\nexport const MAP_TILE_LAYER = new InjectionToken<Observable<MapTileLayer[]>>('MAP_TILE_LAYER');\n\ntype RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n { [K in Keys]-?: Required<Pick<T, K>> & Partial<Record<Exclude<Keys, K>, undefined>> }[Keys];\n\ninterface C8yMarkerAttr {\n asset: PositionManagedObject;\n event: IEvent;\n}\n\nexport type C8yMarkerAttributes = keyof C8yMarkerAttr;\n\nexport type C8yMarker = L.Marker & RequireOnlyOne<C8yMarkerAttr, 'asset' | 'event'>;\n\nexport enum ClusterSize {\n NONE = 0,\n FOUR = 1,\n SIXTEEN = 2\n}\n\nexport enum MapTenantOptionKeys {\n CONFIG = 'map-config',\n LAYERS = 'map-layers'\n}\n\nexport interface PositionManagedObject extends IManagedObject {\n c8y_Position: {\n lat: number;\n lng: number;\n alt?: number;\n };\n\n c8y_ActiveAlarmsStatus?: {\n minor: number;\n major: number;\n warning: number;\n critical: number;\n };\n\n icon?: {\n name: string;\n };\n}\n\nexport type ClusterMapConfig = MapConfig & {\n center: [number, number];\n refreshInterval?: number;\n};\n\nexport type MapConfig = MapDefaultConfig & {\n follow?: boolean;\n realtime?: boolean;\n icon?: string;\n color?: string;\n disableZoom?: boolean;\n disablePan?: boolean;\n fitBoundsOptions?: L.FitBoundsOptions;\n};\n\nexport const MAP_DEFAULT_CONFIG = new InjectionToken<Observable<MapDefaultConfig>>(\n 'MAP_DEFAULT_CONFIG'\n);\n\nexport const defaultLayer: MapTileLayer = {\n layerUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n label: 'OpenStreetMap',\n priority: 1000,\n options: {\n maxZoom: 18,\n minZoom: 2,\n attribution:\n '&copy;<a href=\"http://www.openstreetmap.org/copyright\" rel=\"noreferrer nofollow\">OpenStreetMap</a>',\n noWrap: true\n }\n};\n\nexport const defaultMapConfig: MapDefaultConfig = {\n center: [51.23544, 6.79599], // Düsseldorf\n zoomLevel: 2\n};\n\nexport type MapStatusButtonsConfig = Record<'realtime', { show: boolean; disabled?: boolean }>;\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService, IResultList, Paging } from '@c8y/client';\nimport type * as L from 'leaflet';\nimport { combineLatest, defer, Observable, of } from 'rxjs';\nimport {\n ClusterSize,\n defaultLayer,\n defaultMapConfig,\n MapTenantOptionKeys,\n PositionManagedObject\n} from './map.model';\nimport { OptionsService, ServiceRegistry } from '@c8y/ngx-components';\nimport type { MapTileLayer, MapDefaultConfig } from '@c8y/options';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MapService {\n /**\n * Returns asset icon status for highest alarm severity found in device object.\n * @param device Device that contains alarms information.\n * @returns Status string according to alarm severity\n */\n static getStatus(device: PositionManagedObject) {\n if (!device.c8y_ActiveAlarmsStatus) {\n return 'text-muted';\n }\n if (device.c8y_ActiveAlarmsStatus.critical) {\n return 'status critical';\n }\n if (device.c8y_ActiveAlarmsStatus.major) {\n return 'status major';\n }\n if (device.c8y_ActiveAlarmsStatus.minor) {\n return 'status minor';\n }\n if (device.c8y_ActiveAlarmsStatus.warning) {\n return 'status warning';\n }\n return 'text-muted';\n }\n /**\n * The devices that are maximal displayed in one cluster.\n */\n MAX_DEVICE_PER_CLUSTER = 200;\n /**\n * The count until the cluster is sized. There are a maximum of\n * three clusters: 1, 4 or 16.\n */\n CLUSTER_LEVEL_THRESHOLD = 500;\n\n /**\n * @ignore: Only DI.\n */\n constructor(\n private inventory: InventoryService,\n private options: OptionsService,\n private serviceRegistry: ServiceRegistry\n ) {}\n\n /**\n * Returns the leaflet instance used by the cumulocity core.\n */\n async getLeaflet() {\n const originalLeflet = window.L;\n const c8yLeafletInstance = (await import('leaflet')).default;\n c8yLeafletInstance.noConflict();\n window.L = originalLeflet;\n return c8yLeafletInstance;\n }\n\n /**\n * Verifies if a given managed object is a device with a position fragment.\n * @param mo The given managed object.\n */\n isPositionedDevice(mo: IManagedObject) {\n return !!(mo?.c8y_IsDevice && this.hasPosition(mo));\n }\n\n /**\n * Verifies if a given managed object has a position fragment.\n * @param mo The given managed object.\n */\n hasPosition(mo: IManagedObject) {\n return mo?.c8y_Position;\n }\n\n getMapTileLayerProviders(): CumulocityServiceRegistry.MapTileLayerProvider[] {\n const layerProviders = this.serviceRegistry.get('mapTileLayerHook');\n\n return layerProviders;\n }\n\n getMapTileLayersFromHookedProviders$(\n layerProviders: CumulocityServiceRegistry.MapTileLayerProvider[]\n ): Observable<MapTileLayer[]> {\n if (!layerProviders.length) {\n return of([]);\n }\n const layers = combineLatest(layerProviders.map(provider => provider.getMapTileLayers$()));\n return layers.pipe(map(layers => layers.flat()));\n }\n\n /**\n * Returns the layers available in this application.\n * Layers are taken from plugins installed to this application.\n * In case none of the plugins override the default layers, the default layers are also considered.\n * @returns The layers.\n */\n getMapTileLayers$(): Observable<MapTileLayer[]> {\n return defer(() => {\n const layerProviders = this.getMapTileLayerProviders();\n const overridesDefaultLayer = layerProviders.some(provider =>\n provider.overridesDefaultLayer?.()\n );\n const layersFromProviders = defer(() =>\n this.getMapTileLayersFromHookedProviders$(layerProviders)\n );\n if (overridesDefaultLayer) {\n return layersFromProviders;\n }\n\n return combineLatest([this.getDefaultLayers(), layersFromProviders]).pipe(\n map(layers => {\n return layers.flat();\n })\n );\n });\n }\n\n /**\n * Returns the layers configured in the current platform via tenant options.\n * @returns The layers. If not set in tenant options the default layers.\n */\n getDefaultLayers(): Observable<MapTileLayer[]> {\n return this.getMapOption<MapTileLayer[]>(\n MapTenantOptionKeys.LAYERS,\n this.options.mapLayers || [defaultLayer]\n );\n }\n\n /**\n * Returns the map configuration configured on the tenant.\n * @returns The configuration. If not set in tenant options the default configuration.\n */\n getDefaultConfig(): Observable<MapDefaultConfig> {\n return this.getMapOption<MapDefaultConfig>(\n MapTenantOptionKeys.CONFIG,\n this.options.mapConfig || defaultMapConfig\n );\n }\n\n /**\n * Counts all managed objects in a given bound with a c8y_Position fragment.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @returns The number of all position managed objects in the given bound (and group).\n */\n async getPositionMOsFromBoundCount(\n bound: L.LatLngBounds,\n byGroupIdMO?: IManagedObject\n ): Promise<number> {\n return this.getPositionMOsFromBound(bound, byGroupIdMO, true) as Promise<number>;\n }\n\n /**\n * Returns all managed objects with a c8y_Position fragment in a certain boundary.\n * @param bound The lat lng bound to request the managed objects for.\n * @returns All position managed objects in the given bound.\n */\n async getPositionMOsFromBound(bound: L.LatLngBounds): Promise<PositionManagedObject[]>;\n /**\n * Returns all managed objects with a c8y_Position fragment in a certain boundary that belongs to a certain group.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @returns All position managed objects in the given bound that are children of the given group.\n */\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO: IManagedObject\n ): Promise<PositionManagedObject[]>;\n /**\n * Counts the managed objects in a certain boundary belonging to a group.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @return The count of the managed objects.\n */\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO: IManagedObject,\n count: true\n ): Promise<number>;\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO?: IManagedObject,\n count = false\n ): Promise<PositionManagedObject[] | number> {\n const { lat: latMin, lng: lngMin } = bound.getSouthWest();\n const { lat: latMax, lng: lngMax } = bound.getNorthEast();\n const byGroupIdFilter = byGroupIdMO\n ? `(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and `\n : '';\n const boundFilter = `$filter=${byGroupIdFilter}has(c8y_Position) and c8y_Position.lng gt ${lngMin}d and c8y_Position.lat gt ${latMin}d and c8y_Position.lng lt ${lngMax}d and c8y_Position.lat lt ${latMax}d`;\n const { paging, data } = await this.inventory.list({\n pageSize: count ? 1 : this.MAX_DEVICE_PER_CLUSTER,\n withTotalPages: count,\n query: boundFilter\n });\n if (count) {\n return paging.totalPages;\n }\n return data as PositionManagedObject[];\n }\n\n /**\n * Returns all devices with c8y_Position.\n */\n async getPositionDevices(): Promise<PositionManagedObject[]>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n */\n async getPositionDevices(pageSize: number): Promise<PositionManagedObject[]>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Counting is disabled\n */\n async getPositionDevices(pageSize: number, count: false): Promise<PositionManagedObject[]>;\n /**\n * Returns the number of all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Counting is enabled\n */\n async getPositionDevices(pageSize: number, count: true): Promise<number>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Switches to counting only.\n * @returns All devices or the device count with a c8y_Position fragment.\n */\n async getPositionDevices(\n pageSize = this.MAX_DEVICE_PER_CLUSTER,\n count?: boolean\n ): Promise<number | PositionManagedObject[]> {\n const { paging, data } = await this.inventory.list({\n pageSize: count ? 1 : pageSize,\n withTotalPages: !!count,\n query: '$filter=has(c8y_Position) and has(c8y_IsDevice)'\n });\n if (count) {\n return paging.totalPages;\n }\n return data as PositionManagedObject[];\n }\n\n /**\n * Returns all managed object with a c8y_Position fragment.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @param pageSize Defines how many results should be returned.\n * @returns The managed objects with position.\n */\n async getAllPositionMOs(\n byGroupIdMO?: IManagedObject,\n pageSize = 500\n ): Promise<IResultList<PositionManagedObject>> {\n const filter: { pageSize: number; withTotalPages: boolean; query: string } = {\n pageSize,\n withTotalPages: true,\n query: 'has(c8y_Position)'\n };\n\n if (byGroupIdMO) {\n filter.query = `$filter=(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and has(c8y_Position)`;\n }\n\n const { paging, data, res } = await this.inventory.list(filter);\n\n return {\n res,\n paging: paging as Paging<PositionManagedObject>,\n data: data as PositionManagedObject[]\n };\n }\n\n /**\n * Returns the cluster size for clustered maps. Counting the position MOs in a bounding\n * and if it reach a threshold, returning a [[ClusterSize]].\n * @param bound The bounding to check for cluster size.\n * @returns The cluster size, can be NONE, FOUR or SIXTEEN.\n */\n async getClusterSize(bound: L.LatLngBounds) {\n const count = await this.getPositionMOsFromBoundCount(bound);\n let clusterSize = ClusterSize.NONE;\n if (count > this.CLUSTER_LEVEL_THRESHOLD) {\n clusterSize = ClusterSize.SIXTEEN;\n } else if (count > this.MAX_DEVICE_PER_CLUSTER) {\n clusterSize = ClusterSize.FOUR;\n }\n return clusterSize;\n }\n\n private getMapOption<T>(key: MapTenantOptionKeys, defaultValue: T) {\n return defer(() =>\n this.options.getTenantOption<T | string>('configuration', key, defaultValue)\n ).pipe(\n map(config => {\n if (typeof config === 'string') {\n console.error(\n `The tenant option for maps 'configuration.${key}' is not a valid JSON structure.`\n );\n return defaultValue;\n }\n return config;\n })\n );\n }\n}\n","import { IterableChangeRecord, IterableDiffer, IterableDiffers } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport { gettext } from '@c8y/ngx-components';\nimport { C8yMarker, PositionManagedObject } from './map.model';\nimport { MapService } from './map.service';\n\nexport class ClusterMap {\n markers: C8yMarker[] = [];\n positions: PositionManagedObject[] = [];\n\n set clusterMarker(item: L.Layer) {\n this.removeClusterToBigMarker();\n this._clusterMarker = item;\n }\n\n get clusterMarker() {\n return this._clusterMarker;\n }\n\n set rect(item: L.Rectangle) {\n if (this._rect) {\n this._rect.remove();\n }\n this._rect = item;\n }\n\n get rect() {\n return this._rect;\n }\n\n private _clusterMarker: L.Layer;\n private _rect: L.Rectangle;\n private iterableDiffer: IterableDiffer<PositionManagedObject> | null;\n\n constructor(\n private iterable: IterableDiffers,\n private addAssetCallback: (asset: PositionManagedObject) => C8yMarker,\n private translateService: TranslateService\n ) {\n this.iterableDiffer = this.iterable.find(this.positions).create(this.trackBy);\n }\n\n render(map: L.Map) {\n if (this._rect) {\n this._rect.addTo(map);\n }\n this.updateChanges(map);\n if (this._clusterMarker) {\n this._clusterMarker.addTo(map);\n }\n }\n\n clear(map: L.Map) {\n this.removeClusterToBigMarker();\n this._rect.remove();\n this.positions = [];\n this.updateChanges(map);\n }\n\n removeClusterToBigMarker() {\n if (this._clusterMarker) {\n this._clusterMarker.remove();\n this._clusterMarker = null;\n }\n }\n\n addMarkerToMap(device: PositionManagedObject, map: L.Map) {\n const marker = this.addAssetCallback(device);\n this.markers.push(marker);\n marker.addTo(map);\n }\n\n setClusterToBigMarker(map: L.Map, count, leaflet: typeof L) {\n const bound = this.rect.getBounds();\n const text = this.translateService.instant(gettext('Zoom in'));\n const divMarker = leaflet.divIcon({\n html: `<div class=\"c8y-map-marker-count\" data-count=\"${count}\" title=\"${text}\"></div>`\n });\n const labelIcon = leaflet.marker(bound.getCenter(), {\n icon: divMarker\n });\n labelIcon.addTo(map);\n labelIcon.on('click', () => {\n map.fitBounds(bound);\n });\n this.clusterMarker = labelIcon;\n }\n\n private updateChanges(map: L.Map) {\n const changes = this.iterableDiffer.diff(this.positions);\n if (changes) {\n changes.forEachRemovedItem((record: IterableChangeRecord<PositionManagedObject>) => {\n this.removeMarkerFromMap(record.item);\n });\n\n changes.forEachAddedItem((record: IterableChangeRecord<PositionManagedObject>) => {\n this.addMarkerToMap(record.item, map);\n });\n }\n }\n\n private trackBy(index: number, item: PositionManagedObject) {\n const trackItems = [\n item.id,\n item.c8y_Position.lat,\n item.c8y_Position.lng,\n MapService.getStatus(item)\n ];\n return trackItems.join('');\n }\n\n private removeMarkerFromMap(device: PositionManagedObject) {\n const markers = this.markers.filter((marker: C8yMarker) => marker.asset?.id === device.id);\n markers.forEach(marker => marker.remove());\n }\n}\n","import { Directive, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[c8yMapPopup]'\n})\nexport class MapPopupDirective {\n constructor(\n public template: TemplateRef<unknown>,\n public elementRef: ElementRef,\n public viewContainer: ViewContainerRef\n ) {}\n}\n","import {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n Output,\n SimpleChange,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IEvent } from '@c8y/client';\nimport type { MapDefaultConfig, MapTileLayer } from '@c8y/options';\nimport {\n DatePipe,\n GeoService,\n gettext,\n ManagedObjectRealtimeService,\n sortByPriority\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport { flatten, isEmpty, isUndefined, remove } from 'lodash-es';\nimport {\n BehaviorSubject,\n combineLatest,\n fromEvent,\n NEVER,\n Observable,\n Subject,\n Subscription\n} from 'rxjs';\nimport { filter, first, map, scan, switchMap, takeUntil } from 'rxjs/operators';\nimport { MapPopupDirective } from './map-popup.directive';\nimport {\n C8yMarker,\n C8yMarkerAttributes,\n getC8yMarker,\n MapConfig,\n MAP_DEFAULT_CONFIG,\n MAP_TILE_LAYER,\n PositionManagedObject\n} from './map.model';\nimport { MapService } from './map.service';\nimport { isNull, every } from 'lodash-es';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'c8y-map',\n templateUrl: './map.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class MapComponent {\n /**\n * The leaflet map object.\n */\n map: L.Map;\n /**\n * The markers placed on the map.\n */\n markers: Array<C8yMarker | L.Marker> = [];\n /**\n * The leaflet representation used.\n */\n leaflet: typeof L;\n /**\n * Tells if the map was already initialized.\n */\n isInit = false;\n\n @ViewChild('map')\n mapElement: ElementRef;\n\n @ContentChild(MapPopupDirective)\n popup: MapPopupDirective;\n\n @Input()\n config: MapConfig = {};\n\n @Input()\n assets: PositionManagedObject | PositionManagedObject[];\n\n @Input()\n polyline$: Observable<L.LatLngExpression[] | L.LatLngExpression[][]> = NEVER;\n\n @Input()\n polylineOptions: L.PolylineOptions;\n\n @Output()\n onRealtimeUpdate = new EventEmitter<PositionManagedObject>();\n\n @Output()\n onMove: Observable<L.LeafletEvent>;\n\n @Output()\n onMoveEnd: Observable<L.LeafletEvent>;\n\n @Output()\n onZoomStart: Observable<L.LeafletEvent>;\n\n @Output()\n onZoomEnd: Observable<L.LeafletEvent>;\n\n @Output()\n onMap = new BehaviorSubject<L.Map | null>(null);\n\n @Output()\n onInit = new EventEmitter<typeof L>();\n\n protected realtimeSubscription: Subscription;\n protected unsubscribeTrigger$ = new Subject<void>();\n\n constructor(\n protected moRealtimeService: ManagedObjectRealtimeService,\n protected mapService: MapService,\n @Inject(MAP_TILE_LAYER) protected layers$: Observable<MapTileLayer[]>,\n @Inject(MAP_DEFAULT_CONFIG)\n protected defaultConfig$: Observable<MapDefaultConfig>,\n protected translateService: TranslateService,\n protected geo: GeoService,\n protected datePipe: DatePipe\n ) {\n this.initOutputs();\n }\n\n startRealtime() {\n if (!this.assets || (Array.isArray(this.assets) && this.assets.length > 1)) {\n this.config.realtime = false;\n this.stopRealtime();\n return;\n }\n const asset = Array.isArray(this.assets) ? this.assets[0] : this.assets;\n this.realtimeSubscription = this.moRealtimeService\n .onUpdate$(asset)\n .subscribe((asset: PositionManagedObject) => {\n const marker = this.findMarker(asset.id);\n const icon = this.getAssetIcon(asset);\n marker.setIcon(icon);\n marker.setLatLng(this.geo.getLatLong(asset));\n if (Array.isArray(this.assets)) {\n this.assets[0] = asset;\n } else {\n this.assets = asset;\n }\n this.moveToPositionOfMo(asset);\n this.onRealtimeUpdate.emit(asset);\n });\n }\n\n moveToPositionOfMo(positions: PositionManagedObject | PositionManagedObject[]) {\n const position = Array.isArray(positions) ? positions[0] : positions;\n if (this.config.follow) {\n this.map.setView([position.c8y_Position.lat, position.c8y_Position.lng]);\n }\n }\n\n stopRealtime() {\n if (this.realtimeSubscription) {\n this.realtimeSubscription.unsubscribe();\n }\n }\n\n findMarker(moOrId: string | IEvent | PositionManagedObject) {\n const getId = moOrId => (typeof moOrId === 'string' ? moOrId : moOrId?.id);\n return this.markers.find(\n (marker: C8yMarker) =>\n marker.asset?.id === getId(moOrId) || marker.event?.id === getId(moOrId)\n );\n }\n\n addMarkerToMap(marker: C8yMarker | L.Marker) {\n this.markers.push(marker);\n marker.addTo(this.map);\n }\n\n getAssetMarker(asset: PositionManagedObject) {\n if (!asset) {\n return;\n }\n\n const icon = this.getAssetIcon(asset);\n const leafletMarker = this.leaflet.marker(this.geo.getLatLong(asset), {\n icon\n });\n const marker = getC8yMarker(leafletMarker, asset);\n this.bindPopup(marker, asset);\n\n return marker;\n }\n\n getTrackingMarker(event: IEvent) {\n if (!event) {\n return;\n }\n\n const icon = this.getTrackingIcon();\n const leafletMarker = this.leaflet.marker(this.geo.getLatLong(event), { icon });\n const marker = getC8yMarker(leafletMarker, null, event);\n this.bindPopup(marker, event);\n\n return marker;\n }\n\n getAssetIcon(asset: PositionManagedObject) {\n const assetTypeIcon = this.config.icon || asset.icon?.name;\n const status = MapService.getStatus(asset);\n const color = this.config.color ? `style='color: ${this.config.color};'` : '';\n const icon = this.leaflet.divIcon({\n html: `<div class=\"dlt-c8y-icon-marker icon-3x ${status}\" ${color}><i class=\"dlt-c8y-icon-${\n assetTypeIcon || 'data-transfer'\n }\" /></div>`,\n className: 'c8y-map-marker-icon',\n // iconAnchor is used to set the marker accurately on click\n iconAnchor: [8, 8]\n });\n return icon;\n }\n\n getTrackingIcon() {\n const icon = this.leaflet.divIcon({\n html: `<div class=\"dlt-c8y-icon-marker icon-3x text-muted\"></div>`,\n className: 'c8y-map-marker-icon',\n // iconAnchor is used to set the marker accurately on click\n iconAnchor: [8, 8]\n });\n return icon;\n }\n\n removeMarker(marker: C8yMarker | L.Marker) {\n if (marker) {\n marker.remove();\n remove(this.markers, m => m === marker);\n }\n }\n\n clearMarkers(fragment?: C8yMarkerAttributes) {\n const matchingMarkers = marker => !fragment || !!marker[fragment];\n this.markers.filter(matchingMarkers).forEach(marker => marker.remove());\n this.markers = this.markers.filter(marker => !matchingMarkers(marker));\n }\n\n refreshMarkers() {\n this.clearMarkers();\n let assets: PositionManagedObject[] = [];\n if (!isUndefined(this.assets)) {\n assets = Array.isArray(this.assets) ? this.assets : [this.assets];\n }\n assets.forEach(asset => {\n const marker = this.getAssetMarker(asset);\n this.addMarkerToMap(marker);\n });\n if (!this.config.center) {\n this.zoomToBound(assets);\n }\n this.toggleControls();\n }\n\n center() {\n this.map?.setView(this.config.center);\n }\n\n refresh() {\n if (this.isInit) {\n this.refreshMarkers();\n }\n }\n\n protected async ngAfterViewInit() {\n this.leaflet = await this.mapService.getLeaflet();\n const initialized$ = combineLatest([this.layers$, this.defaultConfig$]).pipe(\n first(),\n takeUntil(this.unsubscribeTrigger$)\n );\n\n initialized$.subscribe(([layers, defaultConfig]) => {\n this.initMap(layers, defaultConfig);\n this.refreshMarkers();\n });\n\n combineLatest([this.polyline$, initialized$])\n .pipe(\n map(([expressions]) => this.leaflet.polyline(expressions, this.polylineOptions)),\n scan((oldPolyline, newPolyline) => {\n if (!!oldPolyline) {\n this.map.removeLayer(oldPolyline);\n }\n if (!!newPolyline) {\n newPolyline.addTo(this.map);\n this.fitBounds(newPolyline.getBounds());\n }\n\n return newPolyline;\n }, null),\n takeUntil(this.unsubscribeTrigger$)\n )\n .subscribe();\n }\n\n protected ngOnChanges(changes: SimpleChanges): void {\n if (!this.map) {\n return;\n }\n if (changes.assets?.currentValue && !changes.assets?.firstChange) {\n this.refreshMarkers();\n }\n\n if (changes.config?.currentValue && !changes.config?.firstChange) {\n this.changeConfig(changes.config);\n }\n }\n\n protected ngOnDestroy(): void {\n this.unsubscribeAllListeners();\n }\n\n protected unsubscribeAllListeners() {\n this.unsubscribeTrigger$.next();\n this.stopRealtime();\n }\n\n protected initOutputs() {\n const getMapEventObservable = eventName => {\n return this.onMap.pipe(\n filter(map => !!map),\n switchMap(map => fromEvent<L.LeafletEvent>(map, eventName)),\n takeUntilDestroyed()\n );\n };\n const dragStart$ = getMapEventObservable('dragstart');\n const move$ = getMapEventObservable('move');\n const dragEnd$ = getMapEventObservable('dragend');\n\n this.onMove = dragStart$.pipe(\n switchMap(() => move$.pipe(takeUntil(dragEnd$))),\n takeUntil(this.unsubscribeTrigger$)\n );\n\n this.onMoveEnd = getMapEventObservable('moveend');\n\n this.onZoomEnd = getMapEventObservable('zoomend');\n\n this.onZoomStart = getMapEventObservable('zoomstart');\n }\n\n protected initMap(layers: MapTileLayer[], defaultConfig: MapConfig): void {\n const defaultOptions = {\n center: this.config.center || defaultConfig.center,\n zoomSnap: 0,\n zoom: this.config.zoomLevel || defaultConfig.zoomLevel\n };\n\n if (this.map) {\n this.map.remove();\n }\n this.map = this.leaflet.map(this.mapElement.nativeElement, defaultOptions);\n\n this.map.attributionControl.setPrefix('');\n\n this.addLayers(layers);\n\n this.handleMobile();\n\n this.onMap.next(this.map);\n\n this.isInit = true;\n this.onInit.emit(this.leaflet);\n }\n\n protected handleMobile() {\n // adding event listener to do mobile 2 finger scrolling\n if (this.leaflet.Browser.mobile) {\n const touchMsg = this.translateService.instant(gettext('Use two fingers to move the map.'));\n this.map.dragging.disable();\n const container = this.map.getContainer();\n container.setAttribute('data-touch-warning-content', touchMsg);\n container.addEventListener('touchstart', event => this.handleTouch(event));\n container.addEventListener('touchmove', event => this.handleTouch(event));\n container.addEventListener('touchend', event => this.handleTouch(event));\n container.addEventListener('touchcancel', event => this.handleTouch(event));\n container.addEventListener('click', event => this.handleTouch(event));\n }\n }\n\n protected addLayers(layers: MapTileLayer[]) {\n const flattenLayers: MapTileLayer[] = flatten(layers);\n const baseLayers: L.Control.LayersObject = {};\n const overlays: L.Control.LayersObject = {};\n let firstLayer = true;\n for (const layer of sortByPriority(flattenLayers)) {\n const objectToAddTo = layer.isOverlay ? overlays : baseLayers;\n if (objectToAddTo[layer.label]) {\n continue;\n }\n\n const tiles = this.leaflet.tileLayer(layer.layerUrl, layer.options);\n if (!layer.isOverlay && firstLayer) {\n firstLayer = false;\n tiles.addTo(this.map);\n }\n objectToAddTo[layer.label] = tiles;\n }\n if (flattenLayers.length > 1) {\n this.leaflet.control.layers(baseLayers, overlays, { position: 'bottomleft' }).addTo(this.map);\n }\n }\n\n protected changeConfig(change: SimpleChange) {\n if (this.hasChanged(change, 'zoomLevel')) {\n this.map.setZoom(this.config.zoomLevel);\n }\n\n if (this.hasChanged(change, 'center') && every(change.currentValue.center, p => !isNull(p))) {\n this.map.setView(change.currentValue.center);\n }\n\n if (this.hasChanged(change, 'icon') || this.hasChanged(change, 'color')) {\n this.refreshMarkers();\n }\n\n if (this.hasChanged(change, 'realtime') && change.currentValue.realtime) {\n this.startRealtime();\n }\n\n if (change.currentValue.realtime === false) {\n this.stopRealtime();\n }\n\n if (this.hasChanged(change, 'follow')) {\n this.moveToPositionOfMo(this.assets);\n }\n\n if (this.hasChanged(change, 'disablePan') || this.hasChanged(change, 'disableZoom')) {\n this.toggleControls();\n }\n }\n\n protected hasChanged(change: SimpleChange, prop: keyof MapConfig) {\n return change.currentValue[prop] !== change.previousValue[prop];\n }\n\n protected toggleControls() {\n if (this.config.disableZoom) {\n this.map.removeControl(this.map.zoomControl);\n this.map.scrollWheelZoom.disable();\n } else {\n this.map.addControl(this.map.zoomControl);\n this.map.scrollWheelZoom.enable();\n }\n if (this.config.disablePan) {\n this.map.dragging.disable();\n } else {\n this.map.dragging.enable();\n }\n }\n\n private handleTouch(e: Event) {\n // Disregard touch events on the minimap if present\n const ignoreList = [\n 'leaflet-control-minimap',\n 'leaflet-interactive',\n 'leaflet-popup-content',\n 'leaflet-popup-content-wrapper',\n 'leaflet-popup-close-button',\n 'leaflet-control-zoom-in',\n 'leaflet-control-zoom-out'\n ];\n\n let ignoreElement = false;\n for (let i = 0; i < ignoreList.length; i++) {\n if (this.leaflet.DomUtil.hasClass(e.target as HTMLElement, ignoreList[i])) {\n ignoreElement = true;\n }\n }\n\n const container = this.map.getContainer();\n if (ignoreElement) {\n if (\n this.leaflet.DomUtil.hasClass(e.target as HTMLElement, 'leaflet-interactive') &&\n e.type === 'touchmove' &&\n (e as TouchEvent).touches.length === 1\n ) {\n this.leaflet.DomUtil.addClass(container, 'touch-warning');\n this.map.dragging.disable();\n } else {\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n }\n return;\n }\n\n if (e.type !== 'touchmove' && e.type !== 'touchstart') {\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n return;\n }\n if ((e as TouchEvent).touches.length === 1) {\n this.leaflet.DomUtil.addClass(container, 'touch-warning');\n this.map.dragging.disable();\n } else {\n this.map.dragging.enable();\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n }\n }\n\n private zoomToBound(assets: PositionManagedObject[]) {\n if (isEmpty(assets)) return;\n\n const bounds: [number, number][] = assets.map(asset => [\n asset.c8y_Position.lat,\n asset.c8y_Position.lng\n ]);\n if (assets.length > 1) {\n this.map.flyToBounds(bounds, { animate: false });\n return;\n }\n this.map.flyTo(\n [assets[0].c8y_Position.lat, assets[0].c8y_Position.lng],\n this.map.options.zoom,\n {\n animate: false\n }\n );\n }\n\n private fitBounds(bounds: L.LatLngBounds) {\n if (bounds?.isValid()) {\n this.map.fitBounds(bounds, this.config.fitBoundsOptions);\n }\n }\n\n private bindPopup(marker: C8yMarker, context: PositionManagedObject | IEvent) {\n if (this.popup) {\n marker.on('click', () => {\n this.popup.viewContainer.clear();\n const view = this.popup.viewContainer.createEmbeddedView(this.popup.template, {\n $implicit: context\n });\n view.detectChanges();\n marker\n .unbindPopup()\n .bindPopup(this.popup.elementRef.nativeElement.previousSibling, {\n offset: [-3, -40],\n maxWidth: 140,\n autoPan: true,\n closeButton: false\n })\n .openPopup();\n });\n }\n }\n}\n","<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n IterableDiffers,\n Output,\n SimpleChange,\n SimpleChanges\n} from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport type { MapDefaultConfig, MapTileLayer } from '@c8y/options';\nimport {\n ColorService,\n CountdownIntervalComponent,\n DatePipe,\n GeoService,\n ManagedObjectRealtimeService\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport {\n BehaviorSubject,\n EMPTY,\n Observable,\n combineLatest,\n from,\n fromEvent,\n merge,\n of\n} from 'rxjs';\nimport { debounceTime, mergeMap, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { ClusterMap } from './cluster-map';\nimport { MapComponent } from './map.component';\nimport {\n ClusterMapConfig,\n ClusterSize,\n MAP_DEFAULT_CONFIG,\n MAP_TILE_LAYER,\n PositionManagedObject\n} from './map.model';\nimport { MapService } from './map.service';\n\n@Component({\n selector: 'c8y-cluster-map',\n templateUrl: './cluster-map.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class ClusterMapComponent extends MapComponent {\n isLoading$ = new BehaviorSubject(false);\n countdownIntervalComp: CountdownIntervalComponent;\n\n @Input()\n config: ClusterMapConfig;\n\n @Input()\n rootNode: IManagedObject;\n\n @Input('asset')\n assets: PositionManagedObject;\n\n @Input()\n showClusterColor = false;\n\n @Output()\n mapChange = new EventEmitter<L.LeafletEvent>();\n\n private reloadTrigger$ = new BehaviorSubject(false);\n private clusters: ClusterMap[] = [];\n private readonly EVENT_THROTTLE_TIME = 750;\n\n constructor(\n protected moRealtimeService: ManagedObjectRealtimeService,\n protected mapService: MapService,\n @Inject(MAP_TILE_LAYER) protected layers$: Observable<MapTileLayer[]>,\n @Inject(MAP_DEFAULT_CONFIG)\n protected defaultConfig$: Observable<MapDefaultConfig>,\n protected translateService: TranslateService,\n private iterable: IterableDiffers,\n private colorService: ColorService,\n geo: GeoService,\n datePipe: DatePipe\n ) {\n super(moRealtimeService, mapService, layers$, defaultConfig$, translateService, geo, datePipe);\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.config?.firstChange) {\n return;\n }\n\n if (changes.rootNode?.previousValue !== changes.rootNode?.currentValue) {\n this.changeRootNode(changes.rootNode.currentValue);\n }\n\n if (changes.config?.currentValue) {\n this.changeConfig(changes.config);\n }\n }\n\n changeConfig(change: SimpleChange) {\n // on following, cancel reload to avoid stale state\n if (change.currentValue.follow === true) {\n this.cancelReload();\n this.isLoading$.next(false);\n }\n\n if (change.currentValue.refreshInterval !== change.previousValue.refreshInterval) {\n this.reload();\n }\n super.changeConfig(change);\n }\n\n async ngAfterViewInit() {\n if (!this.leaflet) {\n this.leaflet = await this.mapService.getLeaflet();\n }\n combineLatest([this.layers$, this.defaultConfig$])\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(([layers, defaultConfig]) => {\n this.initMap(layers, defaultConfig);\n this.changeRootNode(this.rootNode);\n this.changeConfig(new SimpleChange({}, this.config, false));\n });\n }\n\n async reset() {\n this.ngOnDestroy();\n await this.ngAfterViewInit();\n }\n\n reload() {\n this.reloadTrigger$.next(true);\n }\n\n cancelReload() {\n this.reloadTrigger$.next(false);\n }\n\n listenToClusterAndIntervalChanges() {\n const countdownEnded$ = this.countdownIntervalComp\n ? this.countdownIntervalComp.countdownEnded.pipe(takeUntil(this.unsubscribeTrigger$))\n : EMPTY;\n\n const mapChange$ = this.getMapChangeObservable();\n\n merge(this.reloadTrigger$, mapChange$, countdownEnded$)\n .pipe(\n tap(() => {\n this.countdownIntervalComp?.stop(true);\n this.isLoading$.next(true);\n }),\n switchMap(value =>\n value === false\n ? of([])\n : from(this.mapService.getClusterSize(this.map.getBounds())).pipe(\n mergeMap((clusterSize: ClusterSize) =>\n this.getClusterRects(clusterSize, this.map.getBounds())\n ),\n mergeMap(rects => this.createOrUpdateCluster(rects))\n )\n ),\n takeUntil(this.unsubscribeTrigger$)\n )\n .subscribe((clusters: ClusterMap[]) => {\n clusters.forEach(cluster => cluster.render(this.map));\n\n this.isLoading$.next(false);\n this.countdownIntervalComp?.start();\n });\n }\n\n listenToClusterMapChanges() {\n this.getMapChangeObservable().subscribe();\n }\n\n refreshMarkers() {\n if (this.assets) {\n super.refreshMarkers();\n return;\n }\n this.clusters.forEach(cluster => {\n cluster.clear(this.map);\n });\n this.reload();\n }\n\n private changeRootNode(mo: IManagedObject) {\n this.unsubscribeAllListeners();\n this.clearMarkers();\n this.clearClusters();\n\n const isPositionDevice = mo?.c8y_Position && mo?.c8y_IsDevice;\n if (isPositionDevice) {\n this.assets = mo as PositionManagedObject;\n this.refreshMarkers();\n this.listenToClusterMapChanges();\n } else {\n this.assets = null;\n this.listenToClusterAndIntervalChanges();\n this.reload();\n }\n }\n\n private async getClusterRects(\n levelThreshold: ClusterSize = ClusterSize.FOUR,\n viewBounds: L.LatLngBounds,\n level = 0\n ): Promise<L.Rectangle[]> {\n let rects = [];\n\n if (levelThreshold === ClusterSize.NONE) {\n const rect = await this.getRect(viewBounds);\n rects.push(rect);\n return rects;\n }\n\n if (level >= levelThreshold) {\n return rects;\n }\n level++;\n\n const { lat: x1, lng: y1 } = viewBounds.getSouthWest();\n const { lat: x2, lng: y2 } = viewBounds.getNorthEast();\n const newX2 = (x1 + x2) / 2;\n const newY2 = (y1 + y2) / 2;\n\n const bounds: [[number, number], [number, number]][] = [\n [\n [x1, y1],\n [newX2, newY2]\n ],\n [\n [newX2, newY2],\n [x2, y2]\n ],\n [\n [x1, newY2],\n [newX2, y2]\n ],\n [\n [newX2, y1],\n [x2, newY2]\n ]\n ];\n for (const bound of bounds) {\n const latLngBound = this.leaflet.latLngBounds(bound);\n const rect = await this.getRect(latLngBound);\n rects = [...rects, ...(await this.getClusterRects(levelThreshold, latLngBound, level))];\n\n if (level === levelThreshold) {\n rects.push(rect);\n }\n }\n\n return rects;\n }\n\n private async getRect(latLngBound: L.LatLngBounds) {\n let color = 'none';\n if (this.showClusterColor) {\n color = await this.colorService.generateColor(latLngBound.toBBoxString());\n }\n const rect = this.leaflet.rectangle(latLngBound, {\n color,\n weight: color === 'none' ? 0 : 1,\n interactive: false\n });\n return rect;\n }\n\n private clearClusters() {\n this.clusters.forEach(cluster => {\n cluster.clear(this.map);\n });\n this.clusters = [];\n }\n\n private async updateCluster(cluster: ClusterMap) {\n const clusterCount = await this.mapService.getPositionMOsFromBoundCount(\n cluster.rect.getBounds(),\n this.rootNode\n );\n if (clusterCount > this.mapService.MAX_DEVICE_PER_CLUSTER) {\n cluster.setClusterToBigMarker(this.map, clusterCount, this.leaflet);\n cluster.positions = [];\n return cluster;\n }\n\n cluster.removeClusterToBigMarker();\n cluster.positions = await this.mapService.getPositionMOsFromBound(\n cluster.rect.getBounds(),\n this.rootNode\n );\n return cluster;\n }\n\n private createOrUpdateCluster(rects: L.Rectangle<unknown>[]) {\n const isNew = rects.length !== this.clusters.length;\n if (isNew) {\n this.clearClusters();\n }\n const updatePromise = rects.map((rect, index) => {\n if (isNew) {\n const cluster = new ClusterMap(\n this.iterable,\n asset => this.getAssetMarker(asset),\n this.translateService\n );\n this.clusters.push(cluster);\n }\n this.clusters[index].rect = rect;\n return this.updateCluster(this.clusters[index]);\n });\n\n return Promise.all(updatePromise);\n }\n\n private getMapChangeObservable() {\n return merge(\n fromEvent<L.LeafletEvent>(this.map, 'move'),\n fromEvent<L.LeafletEvent>(this.map, 'moveend')\n ).pipe(\n debounceTime(this.EVENT_THROTTLE_TIME),\n tap(event => this.mapChange.emit(event)),\n takeUntil(this.unsubscribeTrigger$)\n );\n }\n}\n","<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n","import { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { ClusterMapComponent } from './cluster-map.component';\nimport { ClusterMapConfig, MapStatusButtonsConfig } from './map.model';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject, Observable } from 'rxjs';\nimport { cloneDeep } from 'lodash-es';\nimport { CountdownIntervalComponent } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-map-status',\n templateUrl: './map-status.component.html'\n})\nexport class MapStatusComponent {\n @Input()\n config: ClusterMapConfig;\n\n @Output()\n configChange = new EventEmitter<ClusterMapConfig>();\n\n @Output()\n onUnfollow = new EventEmitter<ClusterMapConfig>();\n\n @Input()\n clusterMap: ClusterMapComponent;\n\n @Input() buttonsConfig: Partial<MapStatusButtonsConfig> = {};\n\n centerMapButtonDisabled = true;\n secondsUntilRefresh$: Observable<string>;\n @ViewChild(CountdownIntervalComponent) countdownIntervalComp: CountdownIntervalComponent;\n\n showCenter = false;\n initConfig: ClusterMapConfig;\n private destroy$ = new Subject<void>();\n\n ngOnInit(): void {\n this.initConfig = cloneDeep(this.config);\n this.buttonsConfig = Object.assign(this.defaultButtonsConfig(), this.buttonsConfig);\n }\n\n ngAfterViewInit(): void {\n this.clusterMap.countdownIntervalComp = this.countdownIntervalComp;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.clusterMap?.previousValue !== changes.clusterMap?.currentValue) {\n this.checkIfMapIsAlreadyCentered();\n }\n }\n\n center() {\n this.clusterMap.center();\n }\n\n reload() {\n this.clusterMap.reload();\n }\n\n cancelReload() {\n this.clusterMap.cancelReload();\n }\n\n toggleRealtime() {\n this.config = {\n ...this.config,\n realtime: !this.config.realtime\n };\n this.configChange.emit(this.config);\n }\n\n unfollow() {\n this.config = {\n ...this.clusterMap.config,\n follow: false\n };\n this.configChange.emit(this.config);\n this.onUnfollow.emit(this.config);\n }\n\n follow() {\n this.config = {\n ...this.config,\n follow: true\n };\n this.configChange.emit(this.config);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n private checkIfMapIsAlreadyCentered() {\n this.clusterMap.mapChange.pipe(takeUntil(this.destroy$)).subscribe((event: L.LeafletEvent) => {\n if (this.config?.center && event.sourceTarget?.getBounds) {\n const bounds: L.LatLngBounds = event.sourceTarget.getBounds();\n this.centerMapButtonDisabled = this.shouldDisableCenterButton(bounds);\n }\n });\n }\n\n /**\n * Checks if Center button should be disabled according to provided bounds.\n * Provided bounds contain coordinates of current map rectangle corners.\n * Center button should be disabled if distance between center coordinates (from config) and center of current bounds\n * is less than 1/4 of bounds dimensions.\n * To achieve it we just need to check if center coordinates (from config) are contained in the boundaries of\n * current bounds shrunk by 25%.\n * @param bounds Current map view boundaries.\n * @returns True if distance between config center and current boundaries center is bigger than 1/4 of boundaries dimensions\n */\n private shouldDisableCenterButton(bounds: L.LatLngBounds): boolean {\n const shrunkBounds = bounds.pad(-0.25);\n return shrunkBounds.contains(this.config.center);\n }\n\n private defaultButtonsConfig(): MapStatusButtonsConfig {\n return {\n realtime: { show: this.config.realtime || this.clusterMap.config.follow, disabled: false }\n };\n }\n}\n","<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n class=\"c8y-realtime\"\n title=\"{{ 'Realtime' | translate }}\"\n type=\"button\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n <c8y-countdown-interval\n *ngIf=\"clusterMap?.config.refreshInterval && !clusterMap?.config.follow\"\n [countdownInterval]=\"clusterMap?.config.refreshInterval\"\n ></c8y-countdown-interval>\n <button\n title=\"{{ 'Cancel reload' | translate }}\"\n type=\"button\"\n *ngIf=\"clusterMap?.isLoading$ | async\"\n (click)=\"cancelReload()\"\n >\n <i\n class=\"icon-spin\"\n c8yIcon=\"refresh\"\n ></i>\n </button>\n <button\n [title]=\"'Reload' | translate\"\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime && !clusterMap?.assets && !(clusterMap?.isLoading$ | async)\n \"\n (click)=\"reload()\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n title=\"{{ 'Center map' | translate }}\"\n type=\"button\"\n (click)=\"center()\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n title=\"{{ 'Unfollow' | translate }}\"\n type=\"button\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n title=\"{{ 'Follow' | translate }}\"\n type=\"button\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n","import { CommonModule as NgCommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule as NgFormsModule } from '@angular/forms';\nimport { CommonModule, CoreModule, FormsModule, RealtimeModule } from '@c8y/ngx-components';\nimport { ClusterMapComponent } from './cluster-map.component';\nimport { MapPopupDirective } from './map-popup.directive';\nimport { MapStatusComponent } from './map-status.component';\nimport { MapComponent } from './map.component';\nimport { MAP_DEFAULT_CONFIG, MAP_TILE_LAYER } from './map.model';\nimport { MapService } from './map.service';\n\n@NgModule({\n declarations: [MapComponent, MapStatusComponent, ClusterMapComponent, MapPopupDirective],\n imports: [NgCommonModule, NgFormsModule, CommonModule, FormsModule, RealtimeModule, CoreModule],\n exports: [MapComponent, MapStatusComponent, ClusterMapComponent, MapPopupDirective],\n providers: [\n {\n provide: MAP_TILE_LAYER,\n useFactory: (mapService: MapService) => {\n return mapService.getMapTileLayers$();\n },\n deps: [MapService]\n },\n {\n provide: MAP_DEFAULT_CONFIG,\n useFactory: (mapService: MapService) => {\n return mapService.getDefaultConfig();\n },\n deps: [MapService]\n }\n ]\n})\nexport class MapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i2.MapService","NgCommonModule","NgFormsModule","CommonModule","FormsModule"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-map.mjs","sources":["../../map/map.model.ts","../../map/map.service.ts","../../map/cluster-map.ts","../../map/map-popup.directive.ts","../../map/map.component.ts","../../map/map.component.html","../../map/cluster-map.component.ts","../../map/cluster-map.component.html","../../map/map-status.component.ts","../../map/map-status.component.html","../../map/map.module.ts","../../map/c8y-ngx-components-map.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IEvent, IManagedObject } from '@c8y/client';\nimport type { MapDefaultConfig, MapTileLayer } from '@c8y/options';\nimport type * as L from 'leaflet';\nimport { Observable } from 'rxjs';\nimport { GlobalAutoRefreshWidgetConfig } from '@c8y/ngx-components';\n\nexport function getC8yMarker(marker: L.Marker, asset?: PositionManagedObject, event?: IEvent) {\n (marker as C8yMarker).asset = asset;\n (marker as C8yMarker).event = event;\n return marker as C8yMarker;\n}\n\nexport const MAP_TILE_LAYER = new InjectionToken<Observable<MapTileLayer[]>>('MAP_TILE_LAYER');\n\ntype RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n { [K in Keys]-?: Required<Pick<T, K>> & Partial<Record<Exclude<Keys, K>, undefined>> }[Keys];\n\ninterface C8yMarkerAttr {\n asset: PositionManagedObject;\n event: IEvent;\n}\n\nexport type C8yMarkerAttributes = keyof C8yMarkerAttr;\n\nexport type C8yMarker = L.Marker & RequireOnlyOne<C8yMarkerAttr, 'asset' | 'event'>;\n\nexport enum ClusterSize {\n NONE = 0,\n FOUR = 1,\n SIXTEEN = 2\n}\n\nexport enum MapTenantOptionKeys {\n CONFIG = 'map-config',\n LAYERS = 'map-layers'\n}\n\nexport interface PositionManagedObject extends IManagedObject {\n c8y_Position: {\n lat: number;\n lng: number;\n alt?: number;\n };\n\n c8y_ActiveAlarmsStatus?: {\n minor: number;\n major: number;\n warning: number;\n critical: number;\n };\n\n icon?: {\n name: string;\n };\n}\n\nexport type ClusterMapConfig = MapConfig & {\n center: [number, number];\n refreshInterval?: number;\n};\n\nexport type MapConfig = MapDefaultConfig & {\n follow?: boolean;\n realtime?: boolean;\n icon?: string;\n color?: string;\n disableZoom?: boolean;\n disablePan?: boolean;\n fitBoundsOptions?: L.FitBoundsOptions;\n} & GlobalAutoRefreshWidgetConfig;\n\nexport const MAP_DEFAULT_CONFIG = new InjectionToken<Observable<MapDefaultConfig>>(\n 'MAP_DEFAULT_CONFIG'\n);\n\nexport const defaultLayer: MapTileLayer = {\n layerUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n label: 'OpenStreetMap',\n priority: 1000,\n options: {\n maxZoom: 18,\n minZoom: 2,\n attribution:\n '&copy;<a href=\"http://www.openstreetmap.org/copyright\" rel=\"noreferrer nofollow\">OpenStreetMap</a>',\n noWrap: true\n }\n};\n\nexport const defaultMapConfig: MapDefaultConfig = {\n center: [51.23544, 6.79599], // Düsseldorf\n zoomLevel: 2\n};\n\nexport type MapStatusButtonsConfig = Record<'realtime', { show: boolean; disabled?: boolean }>;\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService, IResultList, Paging } from '@c8y/client';\nimport type * as L from 'leaflet';\nimport { combineLatest, defer, Observable, of } from 'rxjs';\nimport {\n ClusterSize,\n defaultLayer,\n defaultMapConfig,\n MapTenantOptionKeys,\n PositionManagedObject\n} from './map.model';\nimport { OptionsService, ServiceRegistry } from '@c8y/ngx-components';\nimport type { MapTileLayer, MapDefaultConfig } from '@c8y/options';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MapService {\n /**\n * Returns asset icon status for highest alarm severity found in device object.\n * @param device Device that contains alarms information.\n * @returns Status string according to alarm severity\n */\n static getStatus(device: PositionManagedObject) {\n if (!device.c8y_ActiveAlarmsStatus) {\n return 'text-muted';\n }\n if (device.c8y_ActiveAlarmsStatus.critical) {\n return 'status critical';\n }\n if (device.c8y_ActiveAlarmsStatus.major) {\n return 'status major';\n }\n if (device.c8y_ActiveAlarmsStatus.minor) {\n return 'status minor';\n }\n if (device.c8y_ActiveAlarmsStatus.warning) {\n return 'status warning';\n }\n return 'text-muted';\n }\n /**\n * The devices that are maximal displayed in one cluster.\n */\n MAX_DEVICE_PER_CLUSTER = 200;\n /**\n * The count until the cluster is sized. There are a maximum of\n * three clusters: 1, 4 or 16.\n */\n CLUSTER_LEVEL_THRESHOLD = 500;\n\n /**\n * @ignore: Only DI.\n */\n constructor(\n private inventory: InventoryService,\n private options: OptionsService,\n private serviceRegistry: ServiceRegistry\n ) {}\n\n /**\n * Returns the leaflet instance used by the cumulocity core.\n */\n async getLeaflet() {\n const originalLeflet = window.L;\n const c8yLeafletInstance = (await import('leaflet')).default;\n c8yLeafletInstance.noConflict();\n window.L = originalLeflet;\n return c8yLeafletInstance;\n }\n\n /**\n * Verifies if a given managed object is a device with a position fragment.\n * @param mo The given managed object.\n */\n isPositionedDevice(mo: IManagedObject) {\n return !!(mo?.c8y_IsDevice && this.hasPosition(mo));\n }\n\n /**\n * Verifies if a given managed object has a position fragment.\n * @param mo The given managed object.\n */\n hasPosition(mo: IManagedObject) {\n return mo?.c8y_Position;\n }\n\n getMapTileLayerProviders(): CumulocityServiceRegistry.MapTileLayerProvider[] {\n const layerProviders = this.serviceRegistry.get('mapTileLayerHook');\n\n return layerProviders;\n }\n\n getMapTileLayersFromHookedProviders$(\n layerProviders: CumulocityServiceRegistry.MapTileLayerProvider[]\n ): Observable<MapTileLayer[]> {\n if (!layerProviders.length) {\n return of([]);\n }\n const layers = combineLatest(layerProviders.map(provider => provider.getMapTileLayers$()));\n return layers.pipe(map(layers => layers.flat()));\n }\n\n /**\n * Returns the layers available in this application.\n * Layers are taken from plugins installed to this application.\n * In case none of the plugins override the default layers, the default layers are also considered.\n * @returns The layers.\n */\n getMapTileLayers$(): Observable<MapTileLayer[]> {\n return defer(() => {\n const layerProviders = this.getMapTileLayerProviders();\n const overridesDefaultLayer = layerProviders.some(provider =>\n provider.overridesDefaultLayer?.()\n );\n const layersFromProviders = defer(() =>\n this.getMapTileLayersFromHookedProviders$(layerProviders)\n );\n if (overridesDefaultLayer) {\n return layersFromProviders;\n }\n\n return combineLatest([this.getDefaultLayers(), layersFromProviders]).pipe(\n map(layers => {\n return layers.flat();\n })\n );\n });\n }\n\n /**\n * Returns the layers configured in the current platform via tenant options.\n * @returns The layers. If not set in tenant options the default layers.\n */\n getDefaultLayers(): Observable<MapTileLayer[]> {\n return this.getMapOption<MapTileLayer[]>(\n MapTenantOptionKeys.LAYERS,\n this.options.mapLayers || [defaultLayer]\n );\n }\n\n /**\n * Returns the map configuration configured on the tenant.\n * @returns The configuration. If not set in tenant options the default configuration.\n */\n getDefaultConfig(): Observable<MapDefaultConfig> {\n return this.getMapOption<MapDefaultConfig>(\n MapTenantOptionKeys.CONFIG,\n this.options.mapConfig || defaultMapConfig\n );\n }\n\n /**\n * Counts all managed objects in a given bound with a c8y_Position fragment.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @returns The number of all position managed objects in the given bound (and group).\n */\n async getPositionMOsFromBoundCount(\n bound: L.LatLngBounds,\n byGroupIdMO?: IManagedObject\n ): Promise<number> {\n return this.getPositionMOsFromBound(bound, byGroupIdMO, true) as Promise<number>;\n }\n\n /**\n * Returns all managed objects with a c8y_Position fragment in a certain boundary.\n * @param bound The lat lng bound to request the managed objects for.\n * @returns All position managed objects in the given bound.\n */\n async getPositionMOsFromBound(bound: L.LatLngBounds): Promise<PositionManagedObject[]>;\n /**\n * Returns all managed objects with a c8y_Position fragment in a certain boundary that belongs to a certain group.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @returns All position managed objects in the given bound that are children of the given group.\n */\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO: IManagedObject\n ): Promise<PositionManagedObject[]>;\n /**\n * Counts the managed objects in a certain boundary belonging to a group.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @return The count of the managed objects.\n */\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO: IManagedObject,\n count: true\n ): Promise<number>;\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO?: IManagedObject,\n count = false\n ): Promise<PositionManagedObject[] | number> {\n const { lat: latMin, lng: lngMin } = bound.getSouthWest();\n const { lat: latMax, lng: lngMax } = bound.getNorthEast();\n const byGroupIdFilter = byGroupIdMO\n ? `(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and `\n : '';\n const boundFilter = `$filter=${byGroupIdFilter}has(c8y_Position) and c8y_Position.lng gt ${lngMin}d and c8y_Position.lat gt ${latMin}d and c8y_Position.lng lt ${lngMax}d and c8y_Position.lat lt ${latMax}d`;\n const { paging, data } = await this.inventory.list({\n pageSize: count ? 1 : this.MAX_DEVICE_PER_CLUSTER,\n withTotalPages: count,\n query: boundFilter\n });\n if (count) {\n return paging.totalPages;\n }\n return data as PositionManagedObject[];\n }\n\n /**\n * Returns all devices with c8y_Position.\n */\n async getPositionDevices(): Promise<PositionManagedObject[]>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n */\n async getPositionDevices(pageSize: number): Promise<PositionManagedObject[]>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Counting is disabled\n */\n async getPositionDevices(pageSize: number, count: false): Promise<PositionManagedObject[]>;\n /**\n * Returns the number of all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Counting is enabled\n */\n async getPositionDevices(pageSize: number, count: true): Promise<number>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Switches to counting only.\n * @returns All devices or the device count with a c8y_Position fragment.\n */\n async getPositionDevices(\n pageSize = this.MAX_DEVICE_PER_CLUSTER,\n count?: boolean\n ): Promise<number | PositionManagedObject[]> {\n const { paging, data } = await this.inventory.list({\n pageSize: count ? 1 : pageSize,\n withTotalPages: !!count,\n query: '$filter=has(c8y_Position) and has(c8y_IsDevice)'\n });\n if (count) {\n return paging.totalPages;\n }\n return data as PositionManagedObject[];\n }\n\n /**\n * Returns all managed object with a c8y_Position fragment.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @param pageSize Defines how many results should be returned.\n * @returns The managed objects with position.\n */\n async getAllPositionMOs(\n byGroupIdMO?: IManagedObject,\n pageSize = 500\n ): Promise<IResultList<PositionManagedObject>> {\n const filter: { pageSize: number; withTotalPages: boolean; query: string } = {\n pageSize,\n withTotalPages: true,\n query: 'has(c8y_Position)'\n };\n\n if (byGroupIdMO) {\n filter.query = `$filter=(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and has(c8y_Position)`;\n }\n\n const { paging, data, res } = await this.inventory.list(filter);\n\n return {\n res,\n paging: paging as Paging<PositionManagedObject>,\n data: data as PositionManagedObject[]\n };\n }\n\n /**\n * Returns the cluster size for clustered maps. Counting the position MOs in a bounding\n * and if it reach a threshold, returning a [[ClusterSize]].\n * @param bound The bounding to check for cluster size.\n * @returns The cluster size, can be NONE, FOUR or SIXTEEN.\n */\n async getClusterSize(bound: L.LatLngBounds) {\n const count = await this.getPositionMOsFromBoundCount(bound);\n let clusterSize = ClusterSize.NONE;\n if (count > this.CLUSTER_LEVEL_THRESHOLD) {\n clusterSize = ClusterSize.SIXTEEN;\n } else if (count > this.MAX_DEVICE_PER_CLUSTER) {\n clusterSize = ClusterSize.FOUR;\n }\n return clusterSize;\n }\n\n private getMapOption<T>(key: MapTenantOptionKeys, defaultValue: T) {\n return defer(() =>\n this.options.getTenantOption<T | string>('configuration', key, defaultValue)\n ).pipe(\n map(config => {\n if (typeof config === 'string') {\n console.error(\n `The tenant option for maps 'configuration.${key}' is not a valid JSON structure.`\n );\n return defaultValue;\n }\n return config;\n })\n );\n }\n}\n","import { IterableChangeRecord, IterableDiffer, IterableDiffers } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport { gettext } from '@c8y/ngx-components';\nimport { C8yMarker, PositionManagedObject } from './map.model';\nimport { MapService } from './map.service';\n\nexport class ClusterMap {\n markers: C8yMarker[] = [];\n positions: PositionManagedObject[] = [];\n\n set clusterMarker(item: L.Layer) {\n this.removeClusterToBigMarker();\n this._clusterMarker = item;\n }\n\n get clusterMarker() {\n return this._clusterMarker;\n }\n\n set rect(item: L.Rectangle) {\n if (this._rect) {\n this._rect.remove();\n }\n this._rect = item;\n }\n\n get rect() {\n return this._rect;\n }\n\n private _clusterMarker: L.Layer;\n private _rect: L.Rectangle;\n private iterableDiffer: IterableDiffer<PositionManagedObject> | null;\n\n constructor(\n private iterable: IterableDiffers,\n private addAssetCallback: (asset: PositionManagedObject) => C8yMarker,\n private translateService: TranslateService\n ) {\n this.iterableDiffer = this.iterable.find(this.positions).create(this.trackBy);\n }\n\n render(map: L.Map) {\n if (this._rect) {\n this._rect.addTo(map);\n }\n this.updateChanges(map);\n if (this._clusterMarker) {\n this._clusterMarker.addTo(map);\n }\n }\n\n clear(map: L.Map) {\n this.removeClusterToBigMarker();\n this._rect.remove();\n this.positions = [];\n this.updateChanges(map);\n }\n\n removeClusterToBigMarker() {\n if (this._clusterMarker) {\n this._clusterMarker.remove();\n this._clusterMarker = null;\n }\n }\n\n addMarkerToMap(device: PositionManagedObject, map: L.Map) {\n const marker = this.addAssetCallback(device);\n this.markers.push(marker);\n marker.addTo(map);\n }\n\n setClusterToBigMarker(map: L.Map, count, leaflet: typeof L) {\n const bound = this.rect.getBounds();\n const text = this.translateService.instant(gettext('Zoom in'));\n const divMarker = leaflet.divIcon({\n html: `<div class=\"c8y-map-marker-count\" data-count=\"${count}\" title=\"${text}\"></div>`\n });\n const labelIcon = leaflet.marker(bound.getCenter(), {\n icon: divMarker\n });\n labelIcon.addTo(map);\n labelIcon.on('click', () => {\n map.fitBounds(bound);\n });\n this.clusterMarker = labelIcon;\n }\n\n private updateChanges(map: L.Map) {\n const changes = this.iterableDiffer.diff(this.positions);\n if (changes) {\n changes.forEachRemovedItem((record: IterableChangeRecord<PositionManagedObject>) => {\n this.removeMarkerFromMap(record.item);\n });\n\n changes.forEachAddedItem((record: IterableChangeRecord<PositionManagedObject>) => {\n this.addMarkerToMap(record.item, map);\n });\n }\n }\n\n private trackBy(index: number, item: PositionManagedObject) {\n const trackItems = [\n item.id,\n item.c8y_Position.lat,\n item.c8y_Position.lng,\n MapService.getStatus(item)\n ];\n return trackItems.join('');\n }\n\n private removeMarkerFromMap(device: PositionManagedObject) {\n const markers = this.markers.filter((marker: C8yMarker) => marker.asset?.id === device.id);\n markers.forEach(marker => marker.remove());\n }\n}\n","import { Directive, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[c8yMapPopup]'\n})\nexport class MapPopupDirective {\n constructor(\n public template: TemplateRef<unknown>,\n public elementRef: ElementRef,\n public viewContainer: ViewContainerRef\n ) {}\n}\n","import {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n Output,\n SimpleChange,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IEvent } from '@c8y/client';\nimport type { MapDefaultConfig, MapTileLayer } from '@c8y/options';\nimport {\n DatePipe,\n GeoService,\n gettext,\n ManagedObjectRealtimeService,\n sortByPriority,\n WidgetGlobalAutoRefreshService\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport { flatten, isEmpty, isUndefined, remove } from 'lodash-es';\nimport {\n BehaviorSubject,\n combineLatest,\n fromEvent,\n NEVER,\n Observable,\n Subject,\n Subscription\n} from 'rxjs';\nimport { filter, first, map, scan, switchMap, takeUntil } from 'rxjs/operators';\nimport { MapPopupDirective } from './map-popup.directive';\nimport {\n C8yMarker,\n C8yMarkerAttributes,\n getC8yMarker,\n MapConfig,\n MAP_DEFAULT_CONFIG,\n MAP_TILE_LAYER,\n PositionManagedObject\n} from './map.model';\nimport { MapService } from './map.service';\nimport { isNull, every } from 'lodash-es';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'c8y-map',\n templateUrl: './map.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class MapComponent {\n /**\n * The leaflet map object.\n */\n map: L.Map;\n /**\n * The markers placed on the map.\n */\n markers: Array<C8yMarker | L.Marker> = [];\n /**\n * The leaflet representation used.\n */\n leaflet: typeof L;\n /**\n * Tells if the map was already initialized.\n */\n isInit = false;\n\n @ViewChild('map')\n mapElement: ElementRef;\n\n @ContentChild(MapPopupDirective)\n popup: MapPopupDirective;\n\n @Input()\n config: MapConfig = {};\n\n @Input()\n assets: PositionManagedObject | PositionManagedObject[];\n\n @Input()\n polyline$: Observable<L.LatLngExpression[] | L.LatLngExpression[][]> = NEVER;\n\n @Input()\n polylineOptions: L.PolylineOptions;\n\n @Output()\n onRealtimeUpdate = new EventEmitter<PositionManagedObject>();\n\n @Output()\n onMove: Observable<L.LeafletEvent>;\n\n @Output()\n onMoveEnd: Observable<L.LeafletEvent>;\n\n @Output()\n onZoomStart: Observable<L.LeafletEvent>;\n\n @Output()\n onZoomEnd: Observable<L.LeafletEvent>;\n\n @Output()\n onMap = new BehaviorSubject<L.Map | null>(null);\n\n @Output()\n onInit = new EventEmitter<typeof L>();\n\n protected realtimeSubscription: Subscription;\n protected unsubscribeTrigger$ = new Subject<void>();\n protected destroy$ = new Subject<void>();\n\n constructor(\n protected moRealtimeService: ManagedObjectRealtimeService,\n protected mapService: MapService,\n @Inject(MAP_TILE_LAYER) protected layers$: Observable<MapTileLayer[]>,\n @Inject(MAP_DEFAULT_CONFIG)\n protected defaultConfig$: Observable<MapDefaultConfig>,\n protected translateService: TranslateService,\n protected geo: GeoService,\n protected datePipe: DatePipe,\n protected widgetGlobalAutoRefreshService: WidgetGlobalAutoRefreshService\n ) {\n this.initOutputs();\n }\n\n startRealtime() {\n if (!this.assets || (Array.isArray(this.assets) && this.assets.length > 1)) {\n this.config.realtime = false;\n this.stopRealtime();\n return;\n }\n const asset = Array.isArray(this.assets) ? this.assets[0] : this.assets;\n this.realtimeSubscription = this.moRealtimeService\n .onUpdate$(asset)\n .subscribe((asset: PositionManagedObject) => {\n const marker = this.findMarker(asset.id);\n const icon = this.getAssetIcon(asset);\n marker.setIcon(icon);\n marker.setLatLng(this.geo.getLatLong(asset));\n if (Array.isArray(this.assets)) {\n this.assets[0] = asset;\n } else {\n this.assets = asset;\n }\n this.moveToPositionOfMo(asset);\n this.onRealtimeUpdate.emit(asset);\n });\n }\n\n moveToPositionOfMo(positions: PositionManagedObject | PositionManagedObject[]) {\n const position = Array.isArray(positions) ? positions[0] : positions;\n if (this.config.follow) {\n this.map.setView([position.c8y_Position.lat, position.c8y_Position.lng]);\n }\n }\n\n stopRealtime() {\n if (this.realtimeSubscription) {\n this.realtimeSubscription.unsubscribe();\n }\n }\n\n findMarker(moOrId: string | IEvent | PositionManagedObject) {\n const getId = moOrId => (typeof moOrId === 'string' ? moOrId : moOrId?.id);\n return this.markers.find(\n (marker: C8yMarker) =>\n marker.asset?.id === getId(moOrId) || marker.event?.id === getId(moOrId)\n );\n }\n\n addMarkerToMap(marker: C8yMarker | L.Marker) {\n this.markers.push(marker);\n marker.addTo(this.map);\n }\n\n getAssetMarker(asset: PositionManagedObject) {\n if (!asset) {\n return;\n }\n\n const icon = this.getAssetIcon(asset);\n const leafletMarker = this.leaflet.marker(this.geo.getLatLong(asset), {\n icon\n });\n const marker = getC8yMarker(leafletMarker, asset);\n this.bindPopup(marker, asset);\n\n return marker;\n }\n\n getTrackingMarker(event: IEvent) {\n if (!event) {\n return;\n }\n\n const icon = this.getTrackingIcon();\n const leafletMarker = this.leaflet.marker(this.geo.getLatLong(event), { icon });\n const marker = getC8yMarker(leafletMarker, null, event);\n this.bindPopup(marker, event);\n\n return marker;\n }\n\n getAssetIcon(asset: PositionManagedObject) {\n const assetTypeIcon = this.config.icon || asset.icon?.name;\n const status = MapService.getStatus(asset);\n const color = this.config.color ? `style='color: ${this.config.color};'` : '';\n const icon = this.leaflet.divIcon({\n html: `<div class=\"dlt-c8y-icon-marker icon-3x ${status}\" ${color}><i class=\"dlt-c8y-icon-${\n assetTypeIcon || 'data-transfer'\n }\" /></div>`,\n className: 'c8y-map-marker-icon',\n // iconAnchor is used to set the marker accurately on click\n iconAnchor: [8, 8]\n });\n return icon;\n }\n\n getTrackingIcon() {\n const icon = this.leaflet.divIcon({\n html: `<div class=\"dlt-c8y-icon-marker icon-3x text-muted\"></div>`,\n className: 'c8y-map-marker-icon',\n // iconAnchor is used to set the marker accurately on click\n iconAnchor: [8, 8]\n });\n return icon;\n }\n\n removeMarker(marker: C8yMarker | L.Marker) {\n if (marker) {\n marker.remove();\n remove(this.markers, m => m === marker);\n }\n }\n\n clearMarkers(fragment?: C8yMarkerAttributes) {\n const matchingMarkers = marker => !fragment || !!marker[fragment];\n this.markers.filter(matchingMarkers).forEach(marker => marker.remove());\n this.markers = this.markers.filter(marker => !matchingMarkers(marker));\n }\n\n refreshMarkers() {\n this.clearMarkers();\n let assets: PositionManagedObject[] = [];\n if (!isUndefined(this.assets)) {\n assets = Array.isArray(this.assets) ? this.assets : [this.assets];\n }\n assets.forEach(asset => {\n const marker = this.getAssetMarker(asset);\n this.addMarkerToMap(marker);\n });\n if (!this.config.center) {\n this.zoomToBound(assets);\n }\n this.toggleControls();\n }\n\n center() {\n this.map?.setView(this.config.center);\n }\n\n refresh() {\n if (this.isInit) {\n this.refreshMarkers();\n }\n }\n\n protected async ngAfterViewInit() {\n this.leaflet = await this.mapService.getLeaflet();\n const initialized$ = combineLatest([this.layers$, this.defaultConfig$]).pipe(\n first(),\n takeUntil(this.unsubscribeTrigger$)\n );\n\n initialized$.subscribe(([layers, defaultConfig]) => {\n this.initMap(layers, defaultConfig);\n this.refreshMarkers();\n });\n\n combineLatest([this.polyline$, initialized$])\n .pipe(\n map(([expressions]) => this.leaflet.polyline(expressions, this.polylineOptions)),\n scan((oldPolyline, newPolyline) => {\n if (!!oldPolyline) {\n this.map.removeLayer(oldPolyline);\n }\n if (!!newPolyline) {\n newPolyline.addTo(this.map);\n this.fitBounds(newPolyline.getBounds());\n }\n\n return newPolyline;\n }, null),\n takeUntil(this.unsubscribeTrigger$)\n )\n .subscribe();\n }\n\n protected ngOnChanges(changes: SimpleChanges): void {\n if (!this.map) {\n return;\n }\n if (changes.assets?.currentValue && !changes.assets?.firstChange) {\n this.refreshMarkers();\n }\n\n if (changes.config?.currentValue && !changes.config?.firstChange) {\n this.changeConfig(changes.config);\n }\n }\n\n protected ngOnDestroy(): void {\n this.unsubscribeAllListeners();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected unsubscribeAllListeners() {\n this.unsubscribeTrigger$.next();\n this.stopRealtime();\n }\n\n protected initOutputs() {\n const getMapEventObservable = eventName => {\n return this.onMap.pipe(\n filter(map => !!map),\n switchMap(map => fromEvent<L.LeafletEvent>(map, eventName)),\n takeUntilDestroyed()\n );\n };\n const dragStart$ = getMapEventObservable('dragstart');\n const move$ = getMapEventObservable('move');\n const dragEnd$ = getMapEventObservable('dragend');\n\n this.onMove = dragStart$.pipe(\n switchMap(() => move$.pipe(takeUntil(dragEnd$))),\n takeUntil(this.unsubscribeTrigger$)\n );\n\n this.onMoveEnd = getMapEventObservable('moveend');\n\n this.onZoomEnd = getMapEventObservable('zoomend');\n\n this.onZoomStart = getMapEventObservable('zoomstart');\n }\n\n protected initMap(layers: MapTileLayer[], defaultConfig: MapConfig): void {\n const defaultOptions = {\n center: this.config.center || defaultConfig.center,\n zoomSnap: 0,\n zoom: this.config.zoomLevel || defaultConfig.zoomLevel\n };\n\n if (this.map) {\n this.map.remove();\n }\n this.map = this.leaflet.map(this.mapElement.nativeElement, defaultOptions);\n\n this.map.attributionControl.setPrefix('');\n\n this.addLayers(layers);\n\n this.handleMobile();\n\n this.onMap.next(this.map);\n\n this.isInit = true;\n this.onInit.emit(this.leaflet);\n }\n\n protected handleMobile() {\n // adding event listener to do mobile 2 finger scrolling\n if (this.leaflet.Browser.mobile) {\n const touchMsg = this.translateService.instant(gettext('Use two fingers to move the map.'));\n this.map.dragging.disable();\n const container = this.map.getContainer();\n container.setAttribute('data-touch-warning-content', touchMsg);\n container.addEventListener('touchstart', event => this.handleTouch(event));\n container.addEventListener('touchmove', event => this.handleTouch(event));\n container.addEventListener('touchend', event => this.handleTouch(event));\n container.addEventListener('touchcancel', event => this.handleTouch(event));\n container.addEventListener('click', event => this.handleTouch(event));\n }\n }\n\n protected addLayers(layers: MapTileLayer[]) {\n const flattenLayers: MapTileLayer[] = flatten(layers);\n const baseLayers: L.Control.LayersObject = {};\n const overlays: L.Control.LayersObject = {};\n let firstLayer = true;\n for (const layer of sortByPriority(flattenLayers)) {\n const objectToAddTo = layer.isOverlay ? overlays : baseLayers;\n if (objectToAddTo[layer.label]) {\n continue;\n }\n\n const tiles = this.leaflet.tileLayer(layer.layerUrl, layer.options);\n if (!layer.isOverlay && firstLayer) {\n firstLayer = false;\n tiles.addTo(this.map);\n }\n objectToAddTo[layer.label] = tiles;\n }\n if (flattenLayers.length > 1) {\n this.leaflet.control.layers(baseLayers, overlays, { position: 'bottomleft' }).addTo(this.map);\n }\n }\n\n protected changeConfig(change: SimpleChange) {\n if (this.hasChanged(change, 'zoomLevel')) {\n this.map.setZoom(this.config.zoomLevel);\n }\n\n if (this.hasChanged(change, 'center') && every(change.currentValue.center, p => !isNull(p))) {\n this.map.setView(change.currentValue.center);\n }\n\n if (this.hasChanged(change, 'icon') || this.hasChanged(change, 'color')) {\n this.refreshMarkers();\n }\n\n if (this.hasChanged(change, 'realtime') && change.currentValue.realtime) {\n this.startRealtime();\n }\n\n if (change.currentValue.realtime === false) {\n this.stopRealtime();\n }\n\n if (this.hasChanged(change, 'follow')) {\n this.moveToPositionOfMo(this.assets);\n }\n\n if (this.hasChanged(change, 'disablePan') || this.hasChanged(change, 'disableZoom')) {\n this.toggleControls();\n }\n }\n\n protected hasChanged(change: SimpleChange, prop: keyof MapConfig) {\n return change.currentValue[prop] !== change.previousValue[prop];\n }\n\n protected toggleControls() {\n if (this.config.disableZoom) {\n this.map.removeControl(this.map.zoomControl);\n this.map.scrollWheelZoom.disable();\n } else {\n this.map.addControl(this.map.zoomControl);\n this.map.scrollWheelZoom.enable();\n }\n if (this.config.disablePan) {\n this.map.dragging.disable();\n } else {\n this.map.dragging.enable();\n }\n }\n\n private handleTouch(e: Event) {\n // Disregard touch events on the minimap if present\n const ignoreList = [\n 'leaflet-control-minimap',\n 'leaflet-interactive',\n 'leaflet-popup-content',\n 'leaflet-popup-content-wrapper',\n 'leaflet-popup-close-button',\n 'leaflet-control-zoom-in',\n 'leaflet-control-zoom-out'\n ];\n\n let ignoreElement = false;\n for (let i = 0; i < ignoreList.length; i++) {\n if (this.leaflet.DomUtil.hasClass(e.target as HTMLElement, ignoreList[i])) {\n ignoreElement = true;\n }\n }\n\n const container = this.map.getContainer();\n if (ignoreElement) {\n if (\n this.leaflet.DomUtil.hasClass(e.target as HTMLElement, 'leaflet-interactive') &&\n e.type === 'touchmove' &&\n (e as TouchEvent).touches.length === 1\n ) {\n this.leaflet.DomUtil.addClass(container, 'touch-warning');\n this.map.dragging.disable();\n } else {\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n }\n return;\n }\n\n if (e.type !== 'touchmove' && e.type !== 'touchstart') {\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n return;\n }\n if ((e as TouchEvent).touches.length === 1) {\n this.leaflet.DomUtil.addClass(container, 'touch-warning');\n this.map.dragging.disable();\n } else {\n this.map.dragging.enable();\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n }\n }\n\n private zoomToBound(assets: PositionManagedObject[]) {\n if (isEmpty(assets)) return;\n\n const bounds: [number, number][] = assets.map(asset => [\n asset.c8y_Position.lat,\n asset.c8y_Position.lng\n ]);\n if (assets.length > 1) {\n this.map.flyToBounds(bounds, { animate: false });\n return;\n }\n this.map.flyTo(\n [assets[0].c8y_Position.lat, assets[0].c8y_Position.lng],\n this.map.options.zoom,\n {\n animate: false\n }\n );\n }\n\n private fitBounds(bounds: L.LatLngBounds) {\n if (bounds?.isValid()) {\n this.map.fitBounds(bounds, this.config.fitBoundsOptions);\n }\n }\n\n private bindPopup(marker: C8yMarker, context: PositionManagedObject | IEvent) {\n if (this.popup) {\n marker.on('click', () => {\n this.popup.viewContainer.clear();\n const view = this.popup.viewContainer.createEmbeddedView(this.popup.template, {\n $implicit: context\n });\n view.detectChanges();\n marker\n .unbindPopup()\n .bindPopup(this.popup.elementRef.nativeElement.previousSibling, {\n offset: [-3, -40],\n maxWidth: 140,\n autoPan: true,\n closeButton: false\n })\n .openPopup();\n });\n }\n }\n}\n","<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n IterableDiffers,\n Output,\n SimpleChange,\n SimpleChanges\n} from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport type { MapDefaultConfig, MapTileLayer } from '@c8y/options';\nimport {\n ColorService,\n CountdownIntervalComponent,\n DatePipe,\n GeoService,\n ManagedObjectRealtimeService,\n WidgetGlobalAutoRefreshService,\n globalAutoRefreshLoading,\n DynamicComponent,\n DynamicComponentAlertAggregator\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport {\n BehaviorSubject,\n EMPTY,\n Observable,\n combineLatest,\n from,\n fromEvent,\n merge,\n of\n} from 'rxjs';\nimport {\n catchError,\n debounceTime,\n mergeMap,\n skip,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport { ClusterMap } from './cluster-map';\nimport { MapComponent } from './map.component';\nimport {\n ClusterMapConfig,\n ClusterSize,\n MAP_DEFAULT_CONFIG,\n MAP_TILE_LAYER,\n PositionManagedObject\n} from './map.model';\nimport { MapService } from './map.service';\n\n@Component({\n selector: 'c8y-cluster-map',\n templateUrl: './cluster-map.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class ClusterMapComponent extends MapComponent implements DynamicComponent {\n isLoading$ = new BehaviorSubject(false);\n countdownIntervalComp: CountdownIntervalComponent;\n\n @Input()\n config: ClusterMapConfig;\n\n @Input()\n rootNode: IManagedObject;\n\n @Input('asset')\n assets: PositionManagedObject;\n\n @Input()\n showClusterColor = false;\n\n @Output()\n mapChange = new EventEmitter<L.LeafletEvent>();\n\n alerts: DynamicComponentAlertAggregator;\n\n errorNotifier = new BehaviorSubject(null);\n private reloadTrigger$ = new BehaviorSubject(false);\n private clusters: ClusterMap[] = [];\n private readonly EVENT_THROTTLE_TIME = 750;\n\n constructor(\n protected moRealtimeService: ManagedObjectRealtimeService,\n protected mapService: MapService,\n @Inject(MAP_TILE_LAYER) protected layers$: Observable<MapTileLayer[]>,\n @Inject(MAP_DEFAULT_CONFIG)\n protected defaultConfig$: Observable<MapDefaultConfig>,\n protected translateService: TranslateService,\n protected widgetGlobalAutoRefreshService: WidgetGlobalAutoRefreshService,\n private iterable: IterableDiffers,\n private colorService: ColorService,\n geo: GeoService,\n datePipe: DatePipe\n ) {\n super(\n moRealtimeService,\n mapService,\n layers$,\n defaultConfig$,\n translateService,\n geo,\n datePipe,\n widgetGlobalAutoRefreshService\n );\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.config?.firstChange) {\n return;\n }\n\n if (changes.rootNode?.previousValue !== changes.rootNode?.currentValue) {\n this.changeRootNode(changes.rootNode.currentValue);\n }\n\n if (changes.config?.currentValue) {\n this.changeConfig(changes.config);\n }\n }\n\n changeConfig(change: SimpleChange) {\n // on following, cancel reload to avoid stale state\n if (change.currentValue.follow === true) {\n this.cancelReload();\n this.isLoading$.next(false);\n }\n\n if (change.currentValue.refreshInterval !== change.previousValue.refreshInterval) {\n this.reload();\n }\n super.changeConfig(change);\n }\n\n async ngAfterViewInit() {\n if (!this.leaflet) {\n this.leaflet = await this.mapService.getLeaflet();\n }\n\n if (this.config.widgetInstanceGlobalAutoRefreshContext) {\n this.handleGlobalRefreshLoading();\n }\n combineLatest([this.layers$, this.defaultConfig$])\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(([layers, defaultConfig]) => {\n this.initMap(layers, defaultConfig);\n this.changeRootNode(this.rootNode);\n this.changeConfig(new SimpleChange({}, this.config, false));\n });\n }\n\n async reset() {\n this.ngOnDestroy();\n await this.ngAfterViewInit();\n }\n\n reload() {\n this.reloadTrigger$.next(true);\n }\n\n cancelReload() {\n this.reloadTrigger$.next(false);\n }\n\n listenToClusterAndIntervalChanges() {\n const countdownEnded$ = this.config.widgetInstanceGlobalAutoRefreshContext\n ? this.widgetGlobalAutoRefreshService.countdownActions.countdownEnded$.pipe(\n takeUntil(this.destroy$)\n )\n : this.countdownIntervalComp\n ? this.countdownIntervalComp.countdownEnded.pipe(takeUntil(this.unsubscribeTrigger$))\n : EMPTY;\n\n const mapChange$ = this.getMapChangeObservable();\n merge(this.reloadTrigger$, mapChange$, countdownEnded$)\n .pipe(\n tap(value => {\n if (this.config.widgetInstanceGlobalAutoRefreshContext) {\n !this.isLeafletEventInterface(value) && this.isLoading$.next(true);\n return;\n }\n this.isLoading$.next(true);\n this.countdownIntervalComp?.stop(true);\n }),\n switchMap(value =>\n value === false\n ? of([])\n : from(this.mapService.getClusterSize(this.map.getBounds())).pipe(\n mergeMap((clusterSize: ClusterSize) =>\n this.getClusterRects(clusterSize, this.map.getBounds())\n ),\n mergeMap(rects => this.createOrUpdateCluster(rects)),\n catchError(error => {\n this.errorNotifier.next(error);\n\n return of([]);\n })\n )\n ),\n takeUntil(this.unsubscribeTrigger$)\n )\n .subscribe((clusters: ClusterMap[]) => {\n clusters.forEach(cluster => cluster.render(this.map));\n this.isLoading$.next(false);\n if (this.config.widgetInstanceGlobalAutoRefreshContext) {\n return;\n }\n this.countdownIntervalComp?.start();\n });\n }\n\n listenToClusterMapChanges() {\n this.getMapChangeObservable().subscribe();\n }\n\n refreshMarkers() {\n if (this.assets) {\n super.refreshMarkers();\n return;\n }\n this.clusters.forEach(cluster => {\n cluster.clear(this.map);\n });\n this.reload();\n }\n\n private changeRootNode(mo: IManagedObject) {\n this.unsubscribeAllListeners();\n this.clearMarkers();\n this.clearClusters();\n\n const isPositionDevice = mo?.c8y_Position && mo?.c8y_IsDevice;\n if (isPositionDevice) {\n this.assets = mo as PositionManagedObject;\n this.refreshMarkers();\n this.listenToClusterMapChanges();\n } else {\n this.assets = null;\n this.listenToClusterAndIntervalChanges();\n this.reload();\n }\n }\n\n private async getClusterRects(\n levelThreshold: ClusterSize = ClusterSize.FOUR,\n viewBounds: L.LatLngBounds,\n level = 0\n ): Promise<L.Rectangle[]> {\n let rects = [];\n\n if (levelThreshold === ClusterSize.NONE) {\n const rect = await this.getRect(viewBounds);\n rects.push(rect);\n return rects;\n }\n\n if (level >= levelThreshold) {\n return rects;\n }\n level++;\n\n const { lat: x1, lng: y1 } = viewBounds.getSouthWest();\n const { lat: x2, lng: y2 } = viewBounds.getNorthEast();\n const newX2 = (x1 + x2) / 2;\n const newY2 = (y1 + y2) / 2;\n\n const bounds: [[number, number], [number, number]][] = [\n [\n [x1, y1],\n [newX2, newY2]\n ],\n [\n [newX2, newY2],\n [x2, y2]\n ],\n [\n [x1, newY2],\n [newX2, y2]\n ],\n [\n [newX2, y1],\n [x2, newY2]\n ]\n ];\n for (const bound of bounds) {\n const latLngBound = this.leaflet.latLngBounds(bound);\n const rect = await this.getRect(latLngBound);\n rects = [...rects, ...(await this.getClusterRects(levelThreshold, latLngBound, level))];\n\n if (level === levelThreshold) {\n rects.push(rect);\n }\n }\n\n return rects;\n }\n\n private async getRect(latLngBound: L.LatLngBounds) {\n let color = 'none';\n if (this.showClusterColor) {\n color = await this.colorService.generateColor(latLngBound.toBBoxString());\n }\n const rect = this.leaflet.rectangle(latLngBound, {\n color,\n weight: color === 'none' ? 0 : 1,\n interactive: false\n });\n return rect;\n }\n\n private clearClusters() {\n this.clusters.forEach(cluster => {\n cluster.clear(this.map);\n });\n this.clusters = [];\n }\n\n private async updateCluster(cluster: ClusterMap) {\n const clusterCount = await this.mapService.getPositionMOsFromBoundCount(\n cluster.rect.getBounds(),\n this.rootNode\n );\n if (clusterCount > this.mapService.MAX_DEVICE_PER_CLUSTER) {\n cluster.setClusterToBigMarker(this.map, clusterCount, this.leaflet);\n cluster.positions = [];\n return cluster;\n }\n\n cluster.removeClusterToBigMarker();\n cluster.positions = await this.mapService.getPositionMOsFromBound(\n cluster.rect.getBounds(),\n this.rootNode\n );\n return cluster;\n }\n\n private createOrUpdateCluster(rects: L.Rectangle<unknown>[]) {\n const isNew = rects.length !== this.clusters.length;\n if (isNew) {\n this.clearClusters();\n }\n const updatePromise = rects.map((rect, index) => {\n if (isNew) {\n const cluster = new ClusterMap(\n this.iterable,\n asset => this.getAssetMarker(asset),\n this.translateService\n );\n this.clusters.push(cluster);\n }\n this.clusters[index].rect = rect;\n return this.updateCluster(this.clusters[index]);\n });\n\n return Promise.all(updatePromise);\n }\n\n private getMapChangeObservable() {\n return merge(\n fromEvent<L.LeafletEvent>(this.map, 'move'),\n fromEvent<L.LeafletEvent>(this.map, 'moveend')\n ).pipe(\n debounceTime(this.EVENT_THROTTLE_TIME),\n tap(event => this.mapChange.emit(event)),\n takeUntil(this.unsubscribeTrigger$)\n );\n }\n\n private isLeafletEventInterface(\n LeafletEventObject: L.LeafletEvent | boolean | void\n ): LeafletEventObject is L.LeafletEvent {\n return (LeafletEventObject as L.LeafletEvent)?.type !== undefined;\n }\n\n private handleGlobalRefreshLoading(): void {\n this.isLoading$\n .pipe(\n skip(1),\n globalAutoRefreshLoading(this.widgetGlobalAutoRefreshService),\n takeUntil(this.destroy$)\n )\n .subscribe();\n\n this.destroy$.subscribe({\n complete: () =>\n this.isLoading$.value && this.widgetGlobalAutoRefreshService.decrementLoading()\n });\n }\n}\n","<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n","import { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { ClusterMapComponent } from './cluster-map.component';\nimport { ClusterMapConfig, MapStatusButtonsConfig } from './map.model';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { cloneDeep } from 'lodash-es';\nimport { CountdownIntervalComponent } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-map-status',\n templateUrl: './map-status.component.html'\n})\nexport class MapStatusComponent {\n @Input()\n config: ClusterMapConfig;\n\n @Output()\n configChange = new EventEmitter<ClusterMapConfig>();\n\n @Output()\n onUnfollow = new EventEmitter<ClusterMapConfig>();\n\n @Input()\n clusterMap: ClusterMapComponent;\n\n @Input() buttonsConfig: Partial<MapStatusButtonsConfig> = {};\n\n centerMapButtonDisabled = true;\n @ViewChild(CountdownIntervalComponent) countdownIntervalComp: CountdownIntervalComponent;\n\n initConfig: ClusterMapConfig;\n private destroy$ = new Subject<void>();\n\n ngOnInit(): void {\n this.initConfig = cloneDeep(this.config);\n this.buttonsConfig = Object.assign(this.defaultButtonsConfig(), this.buttonsConfig);\n }\n\n ngAfterViewInit(): void {\n if (!this.config.widgetInstanceGlobalAutoRefreshContext) {\n this.clusterMap.countdownIntervalComp = this.countdownIntervalComp;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.clusterMap?.previousValue !== changes.clusterMap?.currentValue) {\n this.checkIfMapIsAlreadyCentered();\n }\n }\n\n center() {\n this.clusterMap.center();\n }\n\n reload() {\n this.clusterMap.reload();\n }\n\n cancelReload() {\n this.clusterMap.cancelReload();\n }\n\n toggleRealtime() {\n this.config = {\n ...this.config,\n realtime: !this.config.realtime\n };\n this.configChange.emit(this.config);\n }\n\n unfollow() {\n this.config = {\n ...this.clusterMap.config,\n follow: false\n };\n this.configChange.emit(this.config);\n this.onUnfollow.emit(this.config);\n }\n\n follow() {\n this.config = {\n ...this.config,\n follow: true\n };\n this.configChange.emit(this.config);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n private checkIfMapIsAlreadyCentered() {\n this.clusterMap.mapChange.pipe(takeUntil(this.destroy$)).subscribe((event: L.LeafletEvent) => {\n if (this.config?.center && event.sourceTarget?.getBounds) {\n const bounds: L.LatLngBounds = event.sourceTarget.getBounds();\n this.centerMapButtonDisabled = this.shouldDisableCenterButton(bounds);\n }\n });\n }\n\n /**\n * Checks if Center button should be disabled according to provided bounds.\n * Provided bounds contain coordinates of current map rectangle corners.\n * Center button should be disabled if distance between center coordinates (from config) and center of current bounds\n * is less than 1/4 of bounds dimensions.\n * To achieve it we just need to check if center coordinates (from config) are contained in the boundaries of\n * current bounds shrunk by 25%.\n * @param bounds Current map view boundaries.\n * @returns True if distance between config center and current boundaries center is bigger than 1/4 of boundaries dimensions\n */\n private shouldDisableCenterButton(bounds: L.LatLngBounds): boolean {\n const shrunkBounds = bounds.pad(-0.25);\n return shrunkBounds.contains(this.config.center);\n }\n\n private defaultButtonsConfig(): MapStatusButtonsConfig {\n return {\n realtime: { show: this.config.realtime || this.clusterMap.config.follow, disabled: false }\n };\n }\n}\n","<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n class=\"c8y-realtime\"\n title=\"{{ 'Realtime' | translate }}\"\n type=\"button\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n\n <c8y-countdown-interval\n *ngIf=\"\n !config.widgetInstanceGlobalAutoRefreshContext &&\n clusterMap?.config.refreshInterval &&\n !clusterMap?.config.follow\n \"\n [countdownInterval]=\"clusterMap?.config.refreshInterval\"\n ></c8y-countdown-interval>\n\n <button\n title=\"{{ 'Cancel reload' | translate }}\"\n type=\"button\"\n *ngIf=\"(clusterMap?.isLoading$ | async) && !config.widgetInstanceGlobalAutoRefreshContext\"\n (click)=\"cancelReload()\"\n >\n <i\n class=\"icon-spin\"\n c8yIcon=\"refresh\"\n ></i>\n </button>\n <button\n [title]=\"'Reload' | translate\"\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime &&\n !clusterMap?.assets &&\n !(clusterMap?.isLoading$ | async) &&\n !config.widgetInstanceGlobalAutoRefreshContext\n \"\n (click)=\"reload()\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n title=\"{{ 'Center map' | translate }}\"\n type=\"button\"\n (click)=\"center()\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n title=\"{{ 'Unfollow' | translate }}\"\n type=\"button\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n title=\"{{ 'Follow' | translate }}\"\n type=\"button\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n","import { CommonModule as NgCommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule as NgFormsModule } from '@angular/forms';\nimport { CommonModule, CoreModule, FormsModule, RealtimeModule } from '@c8y/ngx-components';\nimport { ClusterMapComponent } from './cluster-map.component';\nimport { MapPopupDirective } from './map-popup.directive';\nimport { MapStatusComponent } from './map-status.component';\nimport { MapComponent } from './map.component';\nimport { MAP_DEFAULT_CONFIG, MAP_TILE_LAYER } from './map.model';\nimport { MapService } from './map.service';\n\n@NgModule({\n declarations: [MapComponent, MapStatusComponent, ClusterMapComponent, MapPopupDirective],\n imports: [NgCommonModule, NgFormsModule, CommonModule, FormsModule, RealtimeModule, CoreModule],\n exports: [MapComponent, MapStatusComponent, ClusterMapComponent, MapPopupDirective],\n providers: [\n {\n provide: MAP_TILE_LAYER,\n useFactory: (mapService: MapService) => {\n return mapService.getMapTileLayers$();\n },\n deps: [MapService]\n },\n {\n provide: MAP_DEFAULT_CONFIG,\n useFactory: (mapService: MapService) => {\n return mapService.getDefaultConfig();\n },\n deps: [MapService]\n }\n ]\n})\nexport class MapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i2.MapService","NgCommonModule","NgFormsModule","CommonModule","FormsModule"],"mappings":"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"}