@igo2/geo 1.14.3 → 1.14.4

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 (876) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/esm2020/igo2-geo.mjs +4 -4
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +300 -300
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +305 -305
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +246 -246
  10. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +79 -79
  11. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +208 -208
  12. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +78 -78
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +216 -216
  14. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +94 -94
  15. package/esm2020/lib/catalog/catalog.module.mjs +52 -52
  16. package/esm2020/lib/catalog/index.mjs +4 -4
  17. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +94 -94
  18. package/esm2020/lib/catalog/shared/catalog.enum.mjs +15 -15
  19. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  20. package/esm2020/lib/catalog/shared/catalog.service.mjs +605 -605
  21. package/esm2020/lib/catalog/shared/index.mjs +5 -5
  22. package/esm2020/lib/datasource/datasource.module.mjs +21 -21
  23. package/esm2020/lib/datasource/index.mjs +3 -3
  24. package/esm2020/lib/datasource/shared/capabilities.service.mjs +431 -431
  25. package/esm2020/lib/datasource/shared/datasource.service.mjs +235 -235
  26. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  27. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  29. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +144 -144
  30. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +108 -108
  32. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +14 -14
  34. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +2 -2
  35. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  36. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +28 -28
  37. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +42 -42
  39. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +56 -56
  41. package/esm2020/lib/datasource/shared/datasources/index.mjs +36 -36
  42. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  43. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +27 -27
  44. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  45. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +11 -11
  46. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  47. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +48 -48
  48. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  49. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +14 -14
  50. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +53 -53
  52. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  53. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +71 -71
  54. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +151 -151
  55. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -205
  57. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +206 -206
  58. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  59. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +15 -15
  60. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  61. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +8 -8
  62. package/esm2020/lib/datasource/shared/index.mjs +4 -4
  63. package/esm2020/lib/datasource/shared/options/index.mjs +4 -4
  64. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
  65. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +14 -14
  66. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +80 -80
  67. package/esm2020/lib/datasource/shared/options/options.service.mjs +2 -2
  68. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +356 -356
  69. package/esm2020/lib/datasource/utils/index.mjs +2 -2
  70. package/esm2020/lib/datasource/utils/tilegrid.mjs +19 -19
  71. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +223 -223
  72. package/esm2020/lib/directions/directions-buttons/index.mjs +2 -2
  73. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +289 -289
  74. package/esm2020/lib/directions/directions-inputs/index.mjs +2 -2
  75. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +195 -195
  76. package/esm2020/lib/directions/directions-results/index.mjs +2 -2
  77. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  78. package/esm2020/lib/directions/directions-sources/directions-source.mjs +2 -2
  79. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +15 -15
  80. package/esm2020/lib/directions/directions-sources/index.mjs +5 -5
  81. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +99 -99
  82. package/esm2020/lib/directions/directions.component.mjs +310 -310
  83. package/esm2020/lib/directions/directions.module.mjs +101 -101
  84. package/esm2020/lib/directions/index.mjs +7 -7
  85. package/esm2020/lib/directions/shared/directions-source.service.mjs +17 -17
  86. package/esm2020/lib/directions/shared/directions.enum.mjs +28 -28
  87. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  88. package/esm2020/lib/directions/shared/directions.service.mjs +28 -28
  89. package/esm2020/lib/directions/shared/directions.utils.mjs +508 -508
  90. package/esm2020/lib/directions/shared/index.mjs +6 -6
  91. package/esm2020/lib/directions/shared/store.mjs +23 -23
  92. package/esm2020/lib/download/download-button/download-button.component.mjs +60 -60
  93. package/esm2020/lib/download/download-button/index.mjs +2 -2
  94. package/esm2020/lib/download/download.module.mjs +41 -41
  95. package/esm2020/lib/download/index.mjs +3 -3
  96. package/esm2020/lib/download/shared/download.interface.mjs +2 -2
  97. package/esm2020/lib/download/shared/download.service.mjs +64 -64
  98. package/esm2020/lib/download/shared/index.mjs +3 -3
  99. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +54 -54
  100. package/esm2020/lib/draw/draw/draw-popup.component.mjs +590 -590
  101. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +47 -47
  102. package/esm2020/lib/draw/draw/draw.component.mjs +1298 -1298
  103. package/esm2020/lib/draw/draw/draw.module.mjs +112 -112
  104. package/esm2020/lib/draw/drawingTool.module.mjs +19 -19
  105. package/esm2020/lib/draw/index.mjs +3 -3
  106. package/esm2020/lib/draw/shared/draw-icon.service.mjs +26 -26
  107. package/esm2020/lib/draw/shared/draw-style.service.mjs +189 -189
  108. package/esm2020/lib/draw/shared/draw.enum.mjs +36 -36
  109. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  110. package/esm2020/lib/draw/shared/draw.utils.mjs +121 -121
  111. package/esm2020/lib/draw/shared/index.mjs +5 -5
  112. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +404 -404
  113. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +53 -53
  114. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +47 -47
  115. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +111 -111
  116. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +33 -33
  117. package/esm2020/lib/feature/feature.module.mjs +27 -27
  118. package/esm2020/lib/feature/index.mjs +3 -3
  119. package/esm2020/lib/feature/shared/feature.enums.mjs +9 -9
  120. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  121. package/esm2020/lib/feature/shared/feature.utils.mjs +346 -346
  122. package/esm2020/lib/feature/shared/index.mjs +6 -6
  123. package/esm2020/lib/feature/shared/store.mjs +123 -123
  124. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +112 -112
  125. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +93 -93
  126. package/esm2020/lib/feature/shared/strategies/index.mjs +5 -5
  127. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +103 -103
  128. package/esm2020/lib/feature/shared/strategies/loading.mjs +132 -132
  129. package/esm2020/lib/feature/shared/strategies/selection.mjs +369 -369
  130. package/esm2020/lib/feature/shared/strategies.utils.mjs +36 -36
  131. package/esm2020/lib/filter/filter.module.mjs +288 -288
  132. package/esm2020/lib/filter/index.mjs +15 -15
  133. package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
  134. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +139 -139
  135. package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
  136. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +644 -644
  137. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
  138. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1301 -1301
  139. package/esm2020/lib/filter/ogc-filter-time/index.mjs +2 -2
  140. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +176 -176
  141. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +897 -897
  142. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
  143. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +58 -58
  144. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
  145. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +306 -306
  146. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +2 -2
  147. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +30 -30
  148. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +43 -43
  149. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +54 -54
  150. package/esm2020/lib/filter/shared/index.mjs +11 -11
  151. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +71 -71
  152. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +29 -29
  153. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  154. package/esm2020/lib/filter/shared/ogc-filter.mjs +691 -691
  155. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +45 -45
  156. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +22 -22
  157. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
  158. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +268 -268
  159. package/esm2020/lib/filter/shared/time-filter.enum.mjs +12 -12
  160. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  161. package/esm2020/lib/filter/shared/time-filter.service.mjs +106 -106
  162. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
  163. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1088 -1088
  164. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
  165. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +207 -207
  166. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
  167. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +143 -143
  168. package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
  169. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +77 -77
  170. package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
  171. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +733 -733
  172. package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
  173. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +118 -118
  174. package/esm2020/lib/filter/time-filter-list/index.mjs +2 -2
  175. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +30 -30
  176. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +38 -38
  177. package/esm2020/lib/geo.module.mjs +101 -101
  178. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +520 -520
  179. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +188 -188
  180. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +63 -63
  181. package/esm2020/lib/geometry/geometry.module.mjs +26 -26
  182. package/esm2020/lib/geometry/index.mjs +3 -3
  183. package/esm2020/lib/geometry/shared/controls/draw.mjs +313 -313
  184. package/esm2020/lib/geometry/shared/controls/index.mjs +4 -4
  185. package/esm2020/lib/geometry/shared/controls/modify.mjs +520 -520
  186. package/esm2020/lib/geometry/shared/controls/slice.mjs +176 -176
  187. package/esm2020/lib/geometry/shared/geometry.errors.mjs +25 -25
  188. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  189. package/esm2020/lib/geometry/shared/geometry.utils.mjs +121 -121
  190. package/esm2020/lib/geometry/shared/index.mjs +5 -5
  191. package/esm2020/lib/import-export/export-button/export-button.component.mjs +63 -63
  192. package/esm2020/lib/import-export/export-button/index.mjs +2 -2
  193. package/esm2020/lib/import-export/import-export/import-export.component.mjs +1219 -1219
  194. package/esm2020/lib/import-export/import-export/index.mjs +2 -2
  195. package/esm2020/lib/import-export/import-export.module.mjs +95 -95
  196. package/esm2020/lib/import-export/index.mjs +4 -4
  197. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +134 -134
  198. package/esm2020/lib/import-export/shared/export.errors.mjs +15 -15
  199. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  200. package/esm2020/lib/import-export/shared/export.service.mjs +194 -194
  201. package/esm2020/lib/import-export/shared/export.type.mjs +3 -3
  202. package/esm2020/lib/import-export/shared/export.utils.mjs +54 -54
  203. package/esm2020/lib/import-export/shared/import.errors.mjs +38 -38
  204. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  205. package/esm2020/lib/import-export/shared/import.service.mjs +214 -214
  206. package/esm2020/lib/import-export/shared/import.utils.mjs +234 -234
  207. package/esm2020/lib/import-export/shared/index.mjs +11 -11
  208. package/esm2020/lib/import-export/style-list/index.mjs +4 -4
  209. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
  210. package/esm2020/lib/import-export/style-list/style-list.module.mjs +22 -22
  211. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +20 -20
  212. package/esm2020/lib/import-export/style-list/style-list.service.mjs +50 -50
  213. package/esm2020/lib/layer/index.mjs +10 -10
  214. package/esm2020/lib/layer/layer-item/index.mjs +1 -1
  215. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +299 -299
  216. package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
  217. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +387 -387
  218. package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
  219. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +83 -83
  220. package/esm2020/lib/layer/layer-legend-list/index.mjs +2 -2
  221. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +47 -47
  222. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +194 -194
  223. package/esm2020/lib/layer/layer-list/index.mjs +3 -3
  224. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +58 -58
  225. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1008 -1008
  226. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +18 -18
  227. package/esm2020/lib/layer/layer-list-tool/index.mjs +4 -4
  228. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +164 -164
  229. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +6 -6
  230. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  231. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +21 -21
  232. package/esm2020/lib/layer/layer.module.mjs +184 -184
  233. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  234. package/esm2020/lib/layer/shared/index.mjs +6 -6
  235. package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
  236. package/esm2020/lib/layer/shared/layer.service.mjs +185 -185
  237. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  238. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  239. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  240. package/esm2020/lib/layer/shared/layers/image-layer.mjs +67 -67
  241. package/esm2020/lib/layer/shared/layers/index.mjs +13 -13
  242. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +16 -16
  243. package/esm2020/lib/layer/shared/layers/layer.mjs +163 -163
  244. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  245. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +46 -46
  246. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  247. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +377 -377
  248. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  249. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +103 -103
  250. package/esm2020/lib/layer/shared/style.service.mjs +355 -355
  251. package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
  252. package/esm2020/lib/layer/style-modal/index.mjs +1 -1
  253. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +287 -287
  254. package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
  255. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +58 -58
  256. package/esm2020/lib/layer/utils/image-watcher.mjs +61 -61
  257. package/esm2020/lib/layer/utils/index.mjs +5 -5
  258. package/esm2020/lib/layer/utils/layer.utils.mjs +9 -9
  259. package/esm2020/lib/layer/utils/outputLegend.mjs +26 -26
  260. package/esm2020/lib/layer/utils/tile-watcher.mjs +49 -49
  261. package/esm2020/lib/layer/utils/vector-watcher.mjs +47 -47
  262. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +19 -19
  263. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +96 -96
  264. package/esm2020/lib/map/baselayers-switcher/index.mjs +2 -2
  265. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +140 -140
  266. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +78 -78
  267. package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
  268. package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +62 -62
  269. package/esm2020/lib/map/home-extent-button/index.mjs +1 -1
  270. package/esm2020/lib/map/index.mjs +13 -13
  271. package/esm2020/lib/map/info-section/index.mjs +1 -1
  272. package/esm2020/lib/map/info-section/info-section.component.mjs +29 -29
  273. package/esm2020/lib/map/map-browser/index.mjs +1 -1
  274. package/esm2020/lib/map/map-browser/map-browser.component.mjs +65 -65
  275. package/esm2020/lib/map/map-center/index.mjs +1 -1
  276. package/esm2020/lib/map/map-center/map-center.component.mjs +49 -49
  277. package/esm2020/lib/map/map.module.mjs +126 -126
  278. package/esm2020/lib/map/menu-button/index.mjs +1 -1
  279. package/esm2020/lib/map/menu-button/menu-button.component.mjs +61 -61
  280. package/esm2020/lib/map/offline-button/index.mjs +1 -1
  281. package/esm2020/lib/map/offline-button/offline-button.component.mjs +75 -75
  282. package/esm2020/lib/map/rotation-button/index.mjs +1 -1
  283. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +69 -69
  284. package/esm2020/lib/map/shared/controllers/controller.mjs +41 -41
  285. package/esm2020/lib/map/shared/controllers/geolocation.mjs +307 -307
  286. package/esm2020/lib/map/shared/controllers/index.mjs +3 -3
  287. package/esm2020/lib/map/shared/controllers/view.mjs +350 -350
  288. package/esm2020/lib/map/shared/hover-feature.directive.mjs +502 -502
  289. package/esm2020/lib/map/shared/index.mjs +13 -13
  290. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +237 -237
  291. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +106 -106
  292. package/esm2020/lib/map/shared/map.enums.mjs +5 -5
  293. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  294. package/esm2020/lib/map/shared/map.mjs +412 -407
  295. package/esm2020/lib/map/shared/map.service.mjs +28 -28
  296. package/esm2020/lib/map/shared/map.utils.mjs +462 -462
  297. package/esm2020/lib/map/shared/mapOffline.directive.mjs +162 -162
  298. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  299. package/esm2020/lib/map/shared/projection.service.mjs +64 -64
  300. package/esm2020/lib/map/shared/projection.utils.mjs +63 -63
  301. package/esm2020/lib/map/swipe-control/index.mjs +1 -1
  302. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +192 -192
  303. package/esm2020/lib/map/utils/layer-watcher.mjs +78 -78
  304. package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
  305. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +113 -113
  306. package/esm2020/lib/map/zoom-button/index.mjs +1 -1
  307. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +39 -39
  308. package/esm2020/lib/measure/index.mjs +3 -3
  309. package/esm2020/lib/measure/measure.module.mjs +19 -19
  310. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +36 -36
  311. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +179 -179
  312. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +139 -139
  313. package/esm2020/lib/measure/measurer/measurer.component.mjs +1041 -1041
  314. package/esm2020/lib/measure/measurer/measurer.module.mjs +93 -93
  315. package/esm2020/lib/measure/shared/index.mjs +4 -4
  316. package/esm2020/lib/measure/shared/measure.enum.mjs +36 -36
  317. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  318. package/esm2020/lib/measure/shared/measure.utils.mjs +488 -488
  319. package/esm2020/lib/metadata/index.mjs +2 -2
  320. package/esm2020/lib/metadata/metadata-button/index.mjs +2 -2
  321. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +134 -134
  322. package/esm2020/lib/metadata/metadata.module.mjs +54 -54
  323. package/esm2020/lib/metadata/shared/index.mjs +3 -3
  324. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  325. package/esm2020/lib/metadata/shared/metadata.service.mjs +19 -19
  326. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +104 -104
  327. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +5 -5
  328. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  329. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +166 -166
  330. package/esm2020/lib/offline/geoDB/index.mjs +5 -5
  331. package/esm2020/lib/offline/index.mjs +2 -2
  332. package/esm2020/lib/offline/shared/geo-network.service.mjs +65 -65
  333. package/esm2020/lib/offline/shared/index.mjs +2 -2
  334. package/esm2020/lib/overlay/index.mjs +2 -2
  335. package/esm2020/lib/overlay/overlay.module.mjs +22 -22
  336. package/esm2020/lib/overlay/shared/index.mjs +6 -6
  337. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +68 -68
  338. package/esm2020/lib/overlay/shared/overlay.directive.mjs +32 -32
  339. package/esm2020/lib/overlay/shared/overlay.enum.mjs +7 -7
  340. package/esm2020/lib/overlay/shared/overlay.mjs +129 -129
  341. package/esm2020/lib/overlay/shared/overlay.service.mjs +26 -26
  342. package/esm2020/lib/overlay/shared/overlay.utils.mjs +102 -102
  343. package/esm2020/lib/print/index.mjs +4 -4
  344. package/esm2020/lib/print/print/print.component.mjs +125 -125
  345. package/esm2020/lib/print/print-form/index.mjs +2 -2
  346. package/esm2020/lib/print/print-form/print-form.component.mjs +427 -427
  347. package/esm2020/lib/print/print.module.mjs +64 -64
  348. package/esm2020/lib/print/shared/geopdf.mjs +57 -57
  349. package/esm2020/lib/print/shared/index.mjs +5 -5
  350. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  351. package/esm2020/lib/print/shared/print.service.mjs +933 -933
  352. package/esm2020/lib/print/shared/print.type.mjs +29 -29
  353. package/esm2020/lib/query/index.mjs +2 -2
  354. package/esm2020/lib/query/query.module.mjs +28 -28
  355. package/esm2020/lib/query/shared/index.mjs +7 -7
  356. package/esm2020/lib/query/shared/query-search-source.mjs +34 -34
  357. package/esm2020/lib/query/shared/query-search-source.providers.mjs +21 -21
  358. package/esm2020/lib/query/shared/query.directive.mjs +260 -260
  359. package/esm2020/lib/query/shared/query.enums.mjs +30 -30
  360. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  361. package/esm2020/lib/query/shared/query.service.mjs +732 -732
  362. package/esm2020/lib/query/shared/query.utils.mjs +36 -36
  363. package/esm2020/lib/search/index.mjs +11 -11
  364. package/esm2020/lib/search/search-bar/search-bar.component.mjs +511 -511
  365. package/esm2020/lib/search/search-bar/search-bar.module.mjs +74 -74
  366. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +34 -34
  367. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +117 -117
  368. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +370 -370
  369. package/esm2020/lib/search/search-results/search-results-item.component.mjs +123 -123
  370. package/esm2020/lib/search/search-results/search-results.component.mjs +339 -339
  371. package/esm2020/lib/search/search-results/search-results.module.mjs +103 -103
  372. package/esm2020/lib/search/search-selector/search-selector.component.mjs +122 -122
  373. package/esm2020/lib/search/search-selector/search-selector.module.mjs +55 -55
  374. package/esm2020/lib/search/search-settings/search-settings.component.mjs +441 -441
  375. package/esm2020/lib/search/search-settings/search-settings.module.mjs +59 -59
  376. package/esm2020/lib/search/search.module.mjs +66 -66
  377. package/esm2020/lib/search/shared/index.mjs +9 -9
  378. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +321 -321
  379. package/esm2020/lib/search/shared/search-source-service.providers.mjs +19 -19
  380. package/esm2020/lib/search/shared/search-source.service.mjs +46 -46
  381. package/esm2020/lib/search/shared/search.enums.mjs +3 -3
  382. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  383. package/esm2020/lib/search/shared/search.service.mjs +120 -120
  384. package/esm2020/lib/search/shared/search.utils.mjs +90 -90
  385. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  386. package/esm2020/lib/search/shared/sources/coordinates.mjs +153 -153
  387. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +39 -39
  388. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  389. package/esm2020/lib/search/shared/sources/icherche.mjs +767 -767
  390. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +65 -65
  391. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  392. package/esm2020/lib/search/shared/sources/ilayer.mjs +320 -320
  393. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +39 -39
  394. package/esm2020/lib/search/shared/sources/index.mjs +17 -17
  395. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +2 -2
  396. package/esm2020/lib/search/shared/sources/nominatim.mjs +252 -252
  397. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +22 -22
  398. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  399. package/esm2020/lib/search/shared/sources/source.mjs +178 -178
  400. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  401. package/esm2020/lib/search/shared/sources/storedqueries.mjs +425 -425
  402. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +40 -40
  403. package/esm2020/lib/toast/index.mjs +2 -2
  404. package/esm2020/lib/toast/toast.component.mjs +112 -112
  405. package/esm2020/lib/toast/toast.module.mjs +44 -44
  406. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
  407. package/esm2020/lib/utils/commonVectorStyle.mjs +74 -74
  408. package/esm2020/lib/utils/googleLinks.mjs +12 -12
  409. package/esm2020/lib/utils/id-generator.mjs +109 -109
  410. package/esm2020/lib/utils/index.mjs +5 -5
  411. package/esm2020/lib/utils/osmLinks.mjs +9 -9
  412. package/esm2020/lib/wkt/index.mjs +2 -2
  413. package/esm2020/lib/wkt/shared/index.mjs +2 -2
  414. package/esm2020/lib/wkt/shared/wkt.service.mjs +224 -224
  415. package/esm2020/lib/wkt/wkt.module.mjs +21 -21
  416. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +47 -47
  417. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +35 -35
  418. package/esm2020/lib/workspace/confirmation-popup/index.mjs +2 -2
  419. package/esm2020/lib/workspace/index.mjs +8 -8
  420. package/esm2020/lib/workspace/shared/edition-workspace.mjs +279 -279
  421. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +656 -656
  422. package/esm2020/lib/workspace/shared/feature-workspace.mjs +34 -34
  423. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +149 -149
  424. package/esm2020/lib/workspace/shared/index.mjs +8 -8
  425. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +34 -34
  426. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +149 -149
  427. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +259 -259
  428. package/esm2020/lib/workspace/shared/workspace.utils.mjs +23 -23
  429. package/esm2020/lib/workspace/widgets/index.mjs +4 -4
  430. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +46 -46
  431. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +35 -35
  432. package/esm2020/lib/workspace/widgets/widgets.mjs +15 -15
  433. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +132 -132
  434. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +27 -27
  435. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +112 -112
  436. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +27 -27
  437. package/esm2020/lib/workspace/workspace.module.mjs +61 -61
  438. package/esm2020/public_api.mjs +54 -54
  439. package/fesm2015/igo2-geo.mjs +44992 -44987
  440. package/fesm2015/igo2-geo.mjs.map +1 -1
  441. package/fesm2020/igo2-geo.mjs +43034 -43029
  442. package/fesm2020/igo2-geo.mjs.map +1 -1
  443. package/index.d.ts +5 -5
  444. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +126 -126
  445. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +80 -80
  446. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +105 -105
  447. package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +22 -22
  448. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +45 -45
  449. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +25 -25
  450. package/lib/catalog/catalog-library/catalog-library.component.d.ts +65 -65
  451. package/lib/catalog/catalog-library/catalog-library.module.d.ts +26 -26
  452. package/lib/catalog/catalog.module.d.ts +14 -14
  453. package/lib/catalog/index.d.ts +4 -4
  454. package/lib/catalog/shared/catalog.abstract.d.ts +50 -50
  455. package/lib/catalog/shared/catalog.enum.d.ts +14 -14
  456. package/lib/catalog/shared/catalog.interface.d.ts +66 -66
  457. package/lib/catalog/shared/catalog.service.d.ts +36 -36
  458. package/lib/catalog/shared/index.d.ts +4 -4
  459. package/lib/datasource/datasource.module.d.ts +8 -8
  460. package/lib/datasource/index.d.ts +2 -2
  461. package/lib/datasource/shared/capabilities.service.d.ts +37 -37
  462. package/lib/datasource/shared/datasource.service.d.ts +37 -37
  463. package/lib/datasource/shared/datasources/any-datasource.d.ts +16 -16
  464. package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +15 -15
  465. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +14 -14
  466. package/lib/datasource/shared/datasources/arcgisrest-datasource.interface.d.ts +14 -14
  467. package/lib/datasource/shared/datasources/carto-datasource.d.ts +15 -15
  468. package/lib/datasource/shared/datasources/carto-datasource.interface.d.ts +13 -13
  469. package/lib/datasource/shared/datasources/cluster-datasource.d.ts +10 -10
  470. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +11 -11
  471. package/lib/datasource/shared/datasources/data.service.d.ts +3 -3
  472. package/lib/datasource/shared/datasources/datasource.d.ts +20 -20
  473. package/lib/datasource/shared/datasources/datasource.interface.d.ts +100 -100
  474. package/lib/datasource/shared/datasources/feature-datasource.d.ts +12 -12
  475. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +18 -18
  476. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.d.ts +15 -15
  477. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +15 -15
  478. package/lib/datasource/shared/datasources/index.d.ts +35 -35
  479. package/lib/datasource/shared/datasources/mvt-datasource.d.ts +10 -10
  480. package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +13 -13
  481. package/lib/datasource/shared/datasources/osm-datasource.d.ts +9 -9
  482. package/lib/datasource/shared/datasources/osm-datasource.interface.d.ts +7 -7
  483. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.d.ts +15 -15
  484. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.d.ts +14 -14
  485. package/lib/datasource/shared/datasources/tiledebug-datasource.d.ts +9 -9
  486. package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +9 -9
  487. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +15 -15
  488. package/lib/datasource/shared/datasources/websocket-datasource.interface.d.ts +7 -7
  489. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +20 -20
  490. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +20 -20
  491. package/lib/datasource/shared/datasources/wfs.service.d.ts +17 -17
  492. package/lib/datasource/shared/datasources/wms-datasource.d.ts +31 -31
  493. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +32 -32
  494. package/lib/datasource/shared/datasources/wms-wfs.utils.d.ts +41 -41
  495. package/lib/datasource/shared/datasources/wmts-datasource.d.ts +10 -10
  496. package/lib/datasource/shared/datasources/wmts-datasource.interface.d.ts +13 -13
  497. package/lib/datasource/shared/datasources/xyz-datasource.d.ts +9 -9
  498. package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +11 -11
  499. package/lib/datasource/shared/index.d.ts +4 -4
  500. package/lib/datasource/shared/options/index.d.ts +4 -4
  501. package/lib/datasource/shared/options/options-api.interface.d.ts +4 -4
  502. package/lib/datasource/shared/options/options-api.providers.d.ts +10 -10
  503. package/lib/datasource/shared/options/options-api.service.d.ts +16 -16
  504. package/lib/datasource/shared/options/options.service.d.ts +6 -6
  505. package/lib/datasource/utils/esri-style-generator.d.ts +21 -21
  506. package/lib/datasource/utils/index.d.ts +2 -2
  507. package/lib/datasource/utils/tilegrid.d.ts +2 -2
  508. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +30 -30
  509. package/lib/directions/directions-buttons/index.d.ts +1 -1
  510. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +45 -45
  511. package/lib/directions/directions-inputs/index.d.ts +1 -1
  512. package/lib/directions/directions-results/directions-results.component.d.ts +30 -30
  513. package/lib/directions/directions-results/index.d.ts +1 -1
  514. package/lib/directions/directions-sources/directions-source.d.ts +7 -7
  515. package/lib/directions/directions-sources/directions-source.interface.d.ts +11 -11
  516. package/lib/directions/directions-sources/directions-source.provider.d.ts +11 -11
  517. package/lib/directions/directions-sources/index.d.ts +4 -4
  518. package/lib/directions/directions-sources/osrm-directions-source.d.ts +23 -23
  519. package/lib/directions/directions.component.d.ts +56 -56
  520. package/lib/directions/directions.module.d.ts +26 -26
  521. package/lib/directions/index.d.ts +6 -6
  522. package/lib/directions/shared/directions-source.service.d.ts +11 -11
  523. package/lib/directions/shared/directions.enum.d.ts +22 -22
  524. package/lib/directions/shared/directions.interface.d.ts +126 -126
  525. package/lib/directions/shared/directions.service.d.ts +13 -13
  526. package/lib/directions/shared/directions.utils.d.ts +42 -42
  527. package/lib/directions/shared/index.d.ts +5 -5
  528. package/lib/directions/shared/store.d.ts +18 -18
  529. package/lib/download/download-button/download-button.component.d.ts +18 -18
  530. package/lib/download/download-button/index.d.ts +1 -1
  531. package/lib/download/download.module.d.ts +14 -14
  532. package/lib/download/index.d.ts +2 -2
  533. package/lib/download/shared/download.interface.d.ts +10 -10
  534. package/lib/download/shared/download.service.d.ts +11 -11
  535. package/lib/download/shared/index.d.ts +2 -2
  536. package/lib/draw/draw/draw-layer-popup.component.d.ts +14 -14
  537. package/lib/draw/draw/draw-popup.component.d.ts +63 -63
  538. package/lib/draw/draw/draw-shorcuts.component.d.ts +5 -5
  539. package/lib/draw/draw/draw.component.d.ts +239 -239
  540. package/lib/draw/draw/draw.module.d.ts +34 -34
  541. package/lib/draw/drawingTool.module.d.ts +7 -7
  542. package/lib/draw/index.d.ts +2 -2
  543. package/lib/draw/shared/draw-icon.service.d.ts +12 -12
  544. package/lib/draw/shared/draw-style.service.d.ts +36 -36
  545. package/lib/draw/shared/draw.enum.d.ts +32 -32
  546. package/lib/draw/shared/draw.interface.d.ts +40 -40
  547. package/lib/draw/shared/draw.utils.d.ts +35 -35
  548. package/lib/draw/shared/index.d.ts +5 -5
  549. package/lib/feature/feature-details/feature-details.component.d.ts +60 -60
  550. package/lib/feature/feature-details/feature-details.directive.d.ts +19 -19
  551. package/lib/feature/feature-details/feature-details.module.d.ts +15 -15
  552. package/lib/feature/feature-form/feature-form.component.d.ts +50 -50
  553. package/lib/feature/feature-form/feature-form.module.d.ts +12 -12
  554. package/lib/feature/feature.module.d.ts +9 -9
  555. package/lib/feature/index.d.ts +3 -3
  556. package/lib/feature/shared/feature.enums.d.ts +7 -7
  557. package/lib/feature/shared/feature.interfaces.d.ts +74 -74
  558. package/lib/feature/shared/feature.utils.d.ts +104 -104
  559. package/lib/feature/shared/index.d.ts +6 -6
  560. package/lib/feature/shared/store.d.ts +71 -71
  561. package/lib/feature/shared/strategies/in-map-extent.d.ts +52 -52
  562. package/lib/feature/shared/strategies/in-map-resolution.d.ts +52 -52
  563. package/lib/feature/shared/strategies/index.d.ts +5 -5
  564. package/lib/feature/shared/strategies/loading-layer.d.ts +59 -59
  565. package/lib/feature/shared/strategies/loading.d.ts +75 -75
  566. package/lib/feature/shared/strategies/selection.d.ts +176 -176
  567. package/lib/feature/shared/strategies.utils.d.ts +17 -17
  568. package/lib/filter/filter.module.d.ts +53 -53
  569. package/lib/filter/index.d.ts +15 -15
  570. package/lib/filter/ogc-filter-button/index.d.ts +1 -1
  571. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +20 -20
  572. package/lib/filter/ogc-filter-form/index.d.ts +1 -1
  573. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +65 -65
  574. package/lib/filter/ogc-filter-selection/index.d.ts +1 -1
  575. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +93 -93
  576. package/lib/filter/ogc-filter-time/index.d.ts +2 -2
  577. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +39 -39
  578. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +86 -86
  579. package/lib/filter/ogc-filterable-form/index.d.ts +1 -1
  580. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +15 -15
  581. package/lib/filter/ogc-filterable-item/index.d.ts +1 -1
  582. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +41 -41
  583. package/lib/filter/ogc-filterable-list/index.d.ts +2 -2
  584. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +14 -14
  585. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +10 -10
  586. package/lib/filter/shared/filterable-datasource.pipe.d.ts +10 -10
  587. package/lib/filter/shared/index.d.ts +11 -11
  588. package/lib/filter/shared/ogc-filter-time.service.d.ts +19 -19
  589. package/lib/filter/shared/ogc-filter.d.ts +29 -29
  590. package/lib/filter/shared/ogc-filter.enum.d.ts +27 -27
  591. package/lib/filter/shared/ogc-filter.interface.d.ts +200 -200
  592. package/lib/filter/shared/ogc-filter.service.d.ts +11 -11
  593. package/lib/filter/shared/spatial-filter.enum.d.ts +19 -19
  594. package/lib/filter/shared/spatial-filter.interface.d.ts +10 -10
  595. package/lib/filter/shared/spatial-filter.service.d.ts +37 -37
  596. package/lib/filter/shared/time-filter.enum.d.ts +10 -10
  597. package/lib/filter/shared/time-filter.interface.d.ts +29 -29
  598. package/lib/filter/shared/time-filter.service.d.ts +11 -11
  599. package/lib/filter/spatial-filter/spatial-filter-item/index.d.ts +1 -1
  600. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +166 -166
  601. package/lib/filter/spatial-filter/spatial-filter-list/index.d.ts +1 -1
  602. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +58 -58
  603. package/lib/filter/spatial-filter/spatial-filter-type/index.d.ts +1 -1
  604. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +45 -45
  605. package/lib/filter/time-filter-button/index.d.ts +1 -1
  606. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +20 -20
  607. package/lib/filter/time-filter-form/index.d.ts +1 -1
  608. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +77 -77
  609. package/lib/filter/time-filter-item/index.d.ts +1 -1
  610. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +28 -28
  611. package/lib/filter/time-filter-list/index.d.ts +2 -2
  612. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +14 -14
  613. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +12 -12
  614. package/lib/geo.module.d.ts +28 -28
  615. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +206 -206
  616. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +88 -88
  617. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +19 -19
  618. package/lib/geometry/geometry.module.d.ts +8 -8
  619. package/lib/geometry/index.d.ts +3 -3
  620. package/lib/geometry/shared/controls/draw.d.ts +150 -150
  621. package/lib/geometry/shared/controls/index.d.ts +3 -3
  622. package/lib/geometry/shared/controls/modify.d.ts +228 -228
  623. package/lib/geometry/shared/controls/slice.d.ts +99 -99
  624. package/lib/geometry/shared/geometry.errors.d.ts +11 -11
  625. package/lib/geometry/shared/geometry.interfaces.d.ts +13 -13
  626. package/lib/geometry/shared/geometry.utils.d.ts +45 -45
  627. package/lib/geometry/shared/index.d.ts +4 -4
  628. package/lib/import-export/export-button/export-button.component.d.ts +16 -16
  629. package/lib/import-export/export-button/index.d.ts +1 -1
  630. package/lib/import-export/import-export/import-export.component.d.ts +104 -104
  631. package/lib/import-export/import-export/index.d.ts +1 -1
  632. package/lib/import-export/import-export.module.d.ts +26 -26
  633. package/lib/import-export/index.d.ts +4 -4
  634. package/lib/import-export/shared/drop-geo-file.directive.d.ts +36 -36
  635. package/lib/import-export/shared/export.errors.d.ts +8 -8
  636. package/lib/import-export/shared/export.interface.d.ts +11 -11
  637. package/lib/import-export/shared/export.service.d.ts +30 -30
  638. package/lib/import-export/shared/export.type.d.ts +16 -16
  639. package/lib/import-export/shared/export.utils.d.ts +19 -19
  640. package/lib/import-export/shared/import.errors.d.ts +20 -20
  641. package/lib/import-export/shared/import.interface.d.ts +8 -8
  642. package/lib/import-export/shared/import.service.d.ts +31 -31
  643. package/lib/import-export/shared/import.utils.d.ts +18 -18
  644. package/lib/import-export/shared/index.d.ts +10 -10
  645. package/lib/import-export/style-list/index.d.ts +4 -4
  646. package/lib/import-export/style-list/style-list.interface.d.ts +6 -6
  647. package/lib/import-export/style-list/style-list.module.d.ts +8 -8
  648. package/lib/import-export/style-list/style-list.provider.d.ts +15 -15
  649. package/lib/import-export/style-list/style-list.service.d.ts +18 -18
  650. package/lib/layer/index.d.ts +10 -10
  651. package/lib/layer/layer-item/index.d.ts +1 -1
  652. package/lib/layer/layer-item/layer-item.component.d.ts +62 -62
  653. package/lib/layer/layer-legend/index.d.ts +1 -1
  654. package/lib/layer/layer-legend/layer-legend.component.d.ts +90 -90
  655. package/lib/layer/layer-legend-item/index.d.ts +1 -1
  656. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +22 -22
  657. package/lib/layer/layer-legend-list/index.d.ts +2 -2
  658. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +16 -16
  659. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +31 -31
  660. package/lib/layer/layer-list/index.d.ts +3 -3
  661. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +19 -19
  662. package/lib/layer/layer-list/layer-list.component.d.ts +127 -127
  663. package/lib/layer/layer-list/layer-list.enum.d.ts +15 -15
  664. package/lib/layer/layer-list-tool/index.d.ts +4 -4
  665. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +32 -32
  666. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +5 -5
  667. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +8 -8
  668. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +14 -14
  669. package/lib/layer/layer.module.d.ts +36 -36
  670. package/lib/layer/shared/clusterParam.d.ts +13 -13
  671. package/lib/layer/shared/index.d.ts +6 -6
  672. package/lib/layer/shared/layer.enums.d.ts +1 -1
  673. package/lib/layer/shared/layer.service.d.ts +30 -30
  674. package/lib/layer/shared/layers/any-layer.d.ts +6 -6
  675. package/lib/layer/shared/layers/any-layer.interface.d.ts +6 -6
  676. package/lib/layer/shared/layers/image-layer.d.ts +22 -22
  677. package/lib/layer/shared/layers/image-layer.interface.d.ts +19 -19
  678. package/lib/layer/shared/layers/index.d.ts +12 -12
  679. package/lib/layer/shared/layers/layer.d.ts +62 -62
  680. package/lib/layer/shared/layers/layer.interface.d.ts +109 -109
  681. package/lib/layer/shared/layers/tile-layer.d.ts +31 -31
  682. package/lib/layer/shared/layers/tile-layer.interface.d.ts +20 -20
  683. package/lib/layer/shared/layers/vector-layer.d.ts +78 -78
  684. package/lib/layer/shared/layers/vector-layer.interface.d.ts +41 -41
  685. package/lib/layer/shared/layers/vectortile-layer.d.ts +28 -28
  686. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +18 -18
  687. package/lib/layer/shared/style.service.d.ts +57 -57
  688. package/lib/layer/shared/vector-style.interface.d.ts +38 -38
  689. package/lib/layer/style-modal/index.d.ts +1 -1
  690. package/lib/layer/style-modal/style-modal.component.d.ts +42 -42
  691. package/lib/layer/track-feature-button/index.d.ts +1 -1
  692. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +15 -15
  693. package/lib/layer/utils/image-watcher.d.ts +17 -17
  694. package/lib/layer/utils/index.d.ts +5 -5
  695. package/lib/layer/utils/layer.utils.d.ts +2 -2
  696. package/lib/layer/utils/outputLegend.d.ts +7 -7
  697. package/lib/layer/utils/tile-watcher.d.ts +14 -14
  698. package/lib/layer/utils/vector-watcher.d.ts +13 -13
  699. package/lib/map/baselayers-switcher/baselayers-switcher.animation.d.ts +2 -2
  700. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +21 -21
  701. package/lib/map/baselayers-switcher/index.d.ts +2 -2
  702. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +29 -29
  703. package/lib/map/geolocate-button/geolocate-button.component.d.ts +22 -22
  704. package/lib/map/geolocate-button/index.d.ts +1 -1
  705. package/lib/map/home-extent-button/home-extent-button.component.d.ts +20 -20
  706. package/lib/map/home-extent-button/index.d.ts +1 -1
  707. package/lib/map/index.d.ts +13 -13
  708. package/lib/map/info-section/index.d.ts +1 -1
  709. package/lib/map/info-section/info-section.component.d.ts +7 -7
  710. package/lib/map/map-browser/index.d.ts +1 -1
  711. package/lib/map/map-browser/map-browser.component.d.ts +25 -25
  712. package/lib/map/map-center/index.d.ts +1 -1
  713. package/lib/map/map-center/map-center.component.d.ts +31 -31
  714. package/lib/map/map.module.d.ts +28 -28
  715. package/lib/map/menu-button/index.d.ts +1 -1
  716. package/lib/map/menu-button/menu-button.component.d.ts +17 -17
  717. package/lib/map/offline-button/index.d.ts +1 -1
  718. package/lib/map/offline-button/offline-button.component.d.ts +23 -23
  719. package/lib/map/rotation-button/index.d.ts +1 -1
  720. package/lib/map/rotation-button/rotation-button.component.d.ts +17 -17
  721. package/lib/map/shared/controllers/controller.d.ts +29 -29
  722. package/lib/map/shared/controllers/geolocation.d.ts +112 -112
  723. package/lib/map/shared/controllers/index.d.ts +3 -3
  724. package/lib/map/shared/controllers/view.d.ts +200 -200
  725. package/lib/map/shared/hover-feature.directive.d.ts +132 -132
  726. package/lib/map/shared/index.d.ts +13 -13
  727. package/lib/map/shared/linkedLayers.utils.d.ts +17 -17
  728. package/lib/map/shared/map-pointer-position.directive.d.ts +71 -71
  729. package/lib/map/shared/map.d.ts +135 -135
  730. package/lib/map/shared/map.enums.d.ts +4 -4
  731. package/lib/map/shared/map.interface.d.ts +57 -57
  732. package/lib/map/shared/map.service.d.ts +19 -19
  733. package/lib/map/shared/map.utils.d.ts +90 -90
  734. package/lib/map/shared/mapOffline.directive.d.ts +21 -21
  735. package/lib/map/shared/projection.interfaces.d.ts +29 -29
  736. package/lib/map/shared/projection.service.d.ts +19 -19
  737. package/lib/map/shared/projection.utils.d.ts +19 -19
  738. package/lib/map/swipe-control/index.d.ts +1 -1
  739. package/lib/map/swipe-control/swipe-control.component.d.ts +97 -97
  740. package/lib/map/utils/layer-watcher.d.ts +20 -20
  741. package/lib/map/wake-lock-button/index.d.ts +1 -1
  742. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -30
  743. package/lib/map/zoom-button/index.d.ts +1 -1
  744. package/lib/map/zoom-button/zoom-button.component.d.ts +12 -12
  745. package/lib/measure/index.d.ts +3 -3
  746. package/lib/measure/measure.module.d.ts +7 -7
  747. package/lib/measure/measurer/measure-format.pipe.d.ts +15 -15
  748. package/lib/measure/measurer/measurer-dialog.component.d.ts +14 -14
  749. package/lib/measure/measurer/measurer-item.component.d.ts +66 -66
  750. package/lib/measure/measurer/measurer.component.d.ts +405 -405
  751. package/lib/measure/measurer/measurer.module.d.ts +25 -25
  752. package/lib/measure/shared/index.d.ts +3 -3
  753. package/lib/measure/shared/measure.enum.d.ts +33 -33
  754. package/lib/measure/shared/measure.interfaces.d.ts +21 -21
  755. package/lib/measure/shared/measure.utils.d.ts +180 -180
  756. package/lib/metadata/index.d.ts +2 -2
  757. package/lib/metadata/metadata-button/index.d.ts +1 -1
  758. package/lib/metadata/metadata-button/metadata-button.component.d.ts +26 -26
  759. package/lib/metadata/metadata.module.d.ts +15 -15
  760. package/lib/metadata/shared/index.d.ts +2 -2
  761. package/lib/metadata/shared/metadata.interface.d.ts +13 -13
  762. package/lib/metadata/shared/metadata.service.d.ts +8 -8
  763. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +14 -14
  764. package/lib/offline/geoDB/geoDB.enums.d.ts +4 -4
  765. package/lib/offline/geoDB/geoDB.interface.d.ts +19 -19
  766. package/lib/offline/geoDB/geoDB.service.d.ts +37 -37
  767. package/lib/offline/geoDB/index.d.ts +4 -4
  768. package/lib/offline/index.d.ts +2 -2
  769. package/lib/offline/shared/geo-network.service.d.ts +28 -28
  770. package/lib/offline/shared/index.d.ts +1 -1
  771. package/lib/overlay/index.d.ts +1 -1
  772. package/lib/overlay/overlay.module.d.ts +9 -9
  773. package/lib/overlay/shared/index.d.ts +6 -6
  774. package/lib/overlay/shared/overlay-marker-style.utils.d.ts +11 -11
  775. package/lib/overlay/shared/overlay.d.ts +81 -81
  776. package/lib/overlay/shared/overlay.directive.d.ts +18 -18
  777. package/lib/overlay/shared/overlay.enum.d.ts +6 -6
  778. package/lib/overlay/shared/overlay.service.d.ts +14 -14
  779. package/lib/overlay/shared/overlay.utils.d.ts +17 -17
  780. package/lib/print/index.d.ts +3 -3
  781. package/lib/print/print/print.component.d.ts +35 -35
  782. package/lib/print/print-form/index.d.ts +1 -1
  783. package/lib/print/print-form/print-form.component.d.ts +97 -97
  784. package/lib/print/print.module.d.ts +19 -19
  785. package/lib/print/shared/geopdf.d.ts +1 -1
  786. package/lib/print/shared/index.d.ts +4 -4
  787. package/lib/print/shared/print.interface.d.ts +22 -22
  788. package/lib/print/shared/print.service.d.ts +168 -168
  789. package/lib/print/shared/print.type.d.ts +45 -45
  790. package/lib/query/index.d.ts +1 -1
  791. package/lib/query/query.module.d.ts +11 -11
  792. package/lib/query/shared/index.d.ts +6 -6
  793. package/lib/query/shared/query-search-source.d.ts +17 -17
  794. package/lib/query/shared/query-search-source.providers.d.ts +17 -17
  795. package/lib/query/shared/query.directive.d.ts +105 -105
  796. package/lib/query/shared/query.enums.d.ts +26 -26
  797. package/lib/query/shared/query.interfaces.d.ts +35 -35
  798. package/lib/query/shared/query.service.d.ts +56 -56
  799. package/lib/query/shared/query.utils.d.ts +27 -27
  800. package/lib/search/index.d.ts +11 -11
  801. package/lib/search/search-bar/search-bar.component.d.ts +230 -230
  802. package/lib/search/search-bar/search-bar.module.d.ts +23 -23
  803. package/lib/search/search-bar/search-url-param.directive.d.ts +13 -13
  804. package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -32
  805. package/lib/search/search-results/search-results-add-button.component.d.ts +76 -76
  806. package/lib/search/search-results/search-results-item.component.d.ts +47 -47
  807. package/lib/search/search-results/search-results.component.d.ts +161 -161
  808. package/lib/search/search-results/search-results.module.d.ts +28 -28
  809. package/lib/search/search-selector/search-selector.component.d.ts +58 -58
  810. package/lib/search/search-selector/search-selector.module.d.ts +19 -19
  811. package/lib/search/search-settings/search-settings.component.d.ts +102 -102
  812. package/lib/search/search-settings/search-settings.module.d.ts +20 -20
  813. package/lib/search/search.module.d.ts +14 -14
  814. package/lib/search/shared/index.d.ts +8 -8
  815. package/lib/search/shared/search-pointer-summary.directive.d.ts +133 -133
  816. package/lib/search/shared/search-source-service.providers.d.ts +15 -15
  817. package/lib/search/shared/search-source.service.d.ts +32 -32
  818. package/lib/search/shared/search.enums.d.ts +1 -1
  819. package/lib/search/shared/search.interfaces.d.ts +29 -29
  820. package/lib/search/shared/search.service.d.ts +53 -53
  821. package/lib/search/shared/search.utils.d.ts +39 -39
  822. package/lib/search/shared/sources/coordinates.d.ts +40 -40
  823. package/lib/search/shared/sources/coordinates.interfaces.d.ts +12 -12
  824. package/lib/search/shared/sources/coordinates.providers.d.ts +31 -31
  825. package/lib/search/shared/sources/icherche.d.ts +96 -96
  826. package/lib/search/shared/sources/icherche.interfaces.d.ts +30 -30
  827. package/lib/search/shared/sources/icherche.providers.d.ts +46 -46
  828. package/lib/search/shared/sources/ilayer.d.ts +55 -55
  829. package/lib/search/shared/sources/ilayer.interfaces.d.ts +47 -47
  830. package/lib/search/shared/sources/ilayer.providers.d.ts +31 -31
  831. package/lib/search/shared/sources/index.d.ts +17 -17
  832. package/lib/search/shared/sources/nominatim.d.ts +45 -45
  833. package/lib/search/shared/sources/nominatim.interfaces.d.ts +10 -10
  834. package/lib/search/shared/sources/nominatim.providers.d.ts +18 -18
  835. package/lib/search/shared/sources/source.d.ts +108 -108
  836. package/lib/search/shared/sources/source.interfaces.d.ts +47 -47
  837. package/lib/search/shared/sources/storedqueries.d.ts +73 -73
  838. package/lib/search/shared/sources/storedqueries.interfaces.d.ts +42 -42
  839. package/lib/search/shared/sources/storedqueries.providers.d.ts +32 -32
  840. package/lib/toast/index.d.ts +1 -1
  841. package/lib/toast/toast.component.d.ts +33 -33
  842. package/lib/toast/toast.module.d.ts +14 -14
  843. package/lib/utils/commonVectorStyle.d.ts +14 -14
  844. package/lib/utils/commonVectorStyle.interface.d.ts +16 -16
  845. package/lib/utils/googleLinks.d.ts +5 -5
  846. package/lib/utils/id-generator.d.ts +54 -54
  847. package/lib/utils/index.d.ts +5 -5
  848. package/lib/utils/osmLinks.d.ts +4 -4
  849. package/lib/wkt/index.d.ts +1 -1
  850. package/lib/wkt/shared/index.d.ts +1 -1
  851. package/lib/wkt/shared/wkt.service.d.ts +19 -19
  852. package/lib/wkt/wkt.module.d.ts +8 -8
  853. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +23 -23
  854. package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +14 -14
  855. package/lib/workspace/confirmation-popup/index.d.ts +2 -2
  856. package/lib/workspace/index.d.ts +7 -7
  857. package/lib/workspace/shared/edition-workspace.d.ts +82 -82
  858. package/lib/workspace/shared/edition-workspace.service.d.ts +52 -52
  859. package/lib/workspace/shared/feature-workspace.d.ts +18 -18
  860. package/lib/workspace/shared/feature-workspace.service.d.ts +19 -19
  861. package/lib/workspace/shared/index.d.ts +7 -7
  862. package/lib/workspace/shared/wfs-workspace.d.ts +18 -18
  863. package/lib/workspace/shared/wfs-workspace.service.d.ts +19 -19
  864. package/lib/workspace/shared/wms-workspace.service.d.ts +22 -22
  865. package/lib/workspace/shared/workspace.utils.d.ts +10 -10
  866. package/lib/workspace/widgets/index.d.ts +3 -3
  867. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +29 -29
  868. package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +14 -14
  869. package/lib/workspace/widgets/widgets.d.ts +9 -9
  870. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +32 -32
  871. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +11 -11
  872. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +26 -26
  873. package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +11 -11
  874. package/lib/workspace/workspace.module.d.ts +14 -14
  875. package/package.json +4 -4
  876. package/public_api.d.ts +51 -51
@@ -1,734 +1,734 @@
1
- import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
- import { MatSlider } from '@angular/material/slider';
3
- import { default as moment } from 'moment';
4
- import { TimeFilterType, TimeFilterStyle } from '../shared/time-filter.enum';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/material/core";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "@angular/forms";
9
- import * as i4 from "@angular/material/icon";
10
- import * as i5 from "@angular/material/button";
11
- import * as i6 from "@angular/material/slider";
12
- import * as i7 from "@angular/material/slide-toggle";
13
- import * as i8 from "@angular/material/form-field";
14
- import * as i9 from "@angular/material/input";
15
- import * as i10 from "@angular/material/select";
16
- import * as i11 from "@angular/material/tooltip";
17
- import * as i12 from "@mat-datetimepicker/core";
18
- import * as i13 from "@ngx-translate/core";
19
- function TimeFilterFormComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
20
- const _r8 = i0.ɵɵgetCurrentView();
21
- i0.ɵɵelementStart(0, "div", 3)(1, "mat-form-field");
22
- i0.ɵɵelement(2, "mat-datetimepicker-toggle", 4)(3, "mat-datetimepicker", 5, 6);
23
- i0.ɵɵelementStart(5, "input", 7);
24
- i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_0_div_1_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r7.date = $event); })("dateChange", function TimeFilterFormComponent_div_0_div_1_Template_input_dateChange_5_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r9 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r9.handleDateChange($event)); });
25
- i0.ɵɵpipe(6, "translate");
26
- i0.ɵɵelementEnd()()();
27
- } if (rf & 2) {
28
- const _r6 = i0.ɵɵreference(4);
29
- const ctx_r4 = i0.ɵɵnextContext(2);
30
- i0.ɵɵadvance(2);
31
- i0.ɵɵproperty("for", _r6);
32
- i0.ɵɵadvance(1);
33
- i0.ɵɵpropertyInterpolate("type", ctx_r4.type);
34
- i0.ɵɵadvance(2);
35
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(6, 7, "igo.geo.timeFilter.date"));
36
- i0.ɵɵproperty("matDatetimepicker", _r6)("ngModel", ctx_r4.date)("min", ctx_r4.min)("max", ctx_r4.max);
37
- } }
38
- function TimeFilterFormComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
39
- const _r13 = i0.ɵɵgetCurrentView();
40
- i0.ɵɵelementStart(0, "div")(1, "div", 8)(2, "mat-form-field");
41
- i0.ɵɵelement(3, "mat-datetimepicker-toggle", 4)(4, "mat-datetimepicker", 5, 9);
42
- i0.ɵɵelementStart(6, "input", 10);
43
- i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_0_div_2_Template_input_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r12.startDate = $event); })("input", function TimeFilterFormComponent_div_0_div_2_Template_input_input_6_listener() { i0.ɵɵrestoreView(_r13); const ctx_r14 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r14.startDate); })("dateChange", function TimeFilterFormComponent_div_0_div_2_Template_input_dateChange_6_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r15 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r15.handleDateChange($event)); });
44
- i0.ɵɵpipe(7, "translate");
45
- i0.ɵɵelementEnd()()();
46
- i0.ɵɵelementStart(8, "div", 8)(9, "mat-form-field");
47
- i0.ɵɵelement(10, "mat-datetimepicker-toggle", 4)(11, "mat-datetimepicker", 5, 11);
48
- i0.ɵɵelementStart(13, "input", 7);
49
- i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_0_div_2_Template_input_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r16 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r16.endDate = $event); })("dateChange", function TimeFilterFormComponent_div_0_div_2_Template_input_dateChange_13_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r17 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r17.handleDateChange($event)); });
50
- i0.ɵɵpipe(14, "translate");
51
- i0.ɵɵelementEnd()()()();
52
- } if (rf & 2) {
53
- const _r10 = i0.ɵɵreference(5);
54
- const _r11 = i0.ɵɵreference(12);
55
- const ctx_r5 = i0.ɵɵnextContext(2);
56
- i0.ɵɵadvance(3);
57
- i0.ɵɵproperty("for", _r10);
58
- i0.ɵɵadvance(1);
59
- i0.ɵɵpropertyInterpolate("type", ctx_r5.type);
60
- i0.ɵɵadvance(2);
61
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(7, 14, "igo.geo.timeFilter.startDate"));
62
- i0.ɵɵproperty("matDatetimepicker", _r10)("ngModel", ctx_r5.startDate)("min", ctx_r5.min)("max", ctx_r5.getRangeMaxDate());
63
- i0.ɵɵadvance(4);
64
- i0.ɵɵproperty("for", _r11);
65
- i0.ɵɵadvance(1);
66
- i0.ɵɵpropertyInterpolate("type", ctx_r5.type);
67
- i0.ɵɵadvance(2);
68
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(14, 16, "igo.geo.timeFilter.endDate"));
69
- i0.ɵɵproperty("matDatetimepicker", _r11)("ngModel", ctx_r5.endDate)("min", ctx_r5.getRangeMinDate())("max", ctx_r5.max);
70
- } }
71
- function TimeFilterFormComponent_div_0_Template(rf, ctx) { if (rf & 1) {
72
- i0.ɵɵelementStart(0, "div");
73
- i0.ɵɵtemplate(1, TimeFilterFormComponent_div_0_div_1_Template, 7, 9, "div", 2);
74
- i0.ɵɵtemplate(2, TimeFilterFormComponent_div_0_div_2_Template, 15, 18, "div", 0);
75
- i0.ɵɵelementEnd();
76
- } if (rf & 2) {
77
- const ctx_r0 = i0.ɵɵnextContext();
78
- i0.ɵɵadvance(1);
79
- i0.ɵɵproperty("ngIf", !ctx_r0.isRange);
80
- i0.ɵɵadvance(1);
81
- i0.ɵɵproperty("ngIf", ctx_r0.isRange);
82
- } }
83
- function TimeFilterFormComponent_div_1_div_1_mat_option_4_Template(rf, ctx) { if (rf & 1) {
84
- i0.ɵɵelementStart(0, "mat-option", 14);
85
- i0.ɵɵtext(1);
86
- i0.ɵɵelementEnd();
87
- } if (rf & 2) {
88
- const year_r21 = ctx.$implicit;
89
- i0.ɵɵproperty("value", year_r21);
90
- i0.ɵɵadvance(1);
91
- i0.ɵɵtextInterpolate(year_r21);
92
- } }
93
- function TimeFilterFormComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
94
- const _r23 = i0.ɵɵgetCurrentView();
95
- i0.ɵɵelementStart(0, "div", 3)(1, "mat-form-field")(2, "mat-select", 12);
96
- i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_1_div_1_Template_mat_select_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r22 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r22.year = $event); })("selectionChange", function TimeFilterFormComponent_div_1_div_1_Template_mat_select_selectionChange_2_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r24 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r24.handleYearChange($event)); });
97
- i0.ɵɵpipe(3, "translate");
98
- i0.ɵɵtemplate(4, TimeFilterFormComponent_div_1_div_1_mat_option_4_Template, 2, 2, "mat-option", 13);
99
- i0.ɵɵelementEnd()()();
100
- } if (rf & 2) {
101
- const ctx_r18 = i0.ɵɵnextContext(2);
102
- i0.ɵɵadvance(2);
103
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(3, 3, "igo.geo.timeFilter.date"));
104
- i0.ɵɵproperty("ngModel", ctx_r18.year);
105
- i0.ɵɵadvance(2);
106
- i0.ɵɵproperty("ngForOf", ctx_r18.listYears);
107
- } }
108
- function TimeFilterFormComponent_div_1_div_2_mat_option_5_Template(rf, ctx) { if (rf & 1) {
109
- i0.ɵɵelementStart(0, "mat-option", 14);
110
- i0.ɵɵtext(1);
111
- i0.ɵɵelementEnd();
112
- } if (rf & 2) {
113
- const startYear_r27 = ctx.$implicit;
114
- i0.ɵɵproperty("value", startYear_r27);
115
- i0.ɵɵadvance(1);
116
- i0.ɵɵtextInterpolate(startYear_r27);
117
- } }
118
- function TimeFilterFormComponent_div_1_div_2_mat_option_10_Template(rf, ctx) { if (rf & 1) {
119
- i0.ɵɵelementStart(0, "mat-option", 14);
120
- i0.ɵɵtext(1);
121
- i0.ɵɵelementEnd();
122
- } if (rf & 2) {
123
- const endYear_r28 = ctx.$implicit;
124
- i0.ɵɵproperty("value", endYear_r28);
125
- i0.ɵɵadvance(1);
126
- i0.ɵɵtextInterpolate(endYear_r28);
127
- } }
128
- function TimeFilterFormComponent_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
129
- const _r30 = i0.ɵɵgetCurrentView();
130
- i0.ɵɵelementStart(0, "div")(1, "div", 8)(2, "mat-form-field")(3, "mat-select", 12);
131
- i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_1_div_2_Template_mat_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r29 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r29.startYear = $event); })("selectionChange", function TimeFilterFormComponent_div_1_div_2_Template_mat_select_selectionChange_3_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r31 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r31.handleYearChange($event)); });
132
- i0.ɵɵpipe(4, "translate");
133
- i0.ɵɵtemplate(5, TimeFilterFormComponent_div_1_div_2_mat_option_5_Template, 2, 2, "mat-option", 13);
134
- i0.ɵɵelementEnd()()();
135
- i0.ɵɵelementStart(6, "div", 8)(7, "mat-form-field")(8, "mat-select", 12);
136
- i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_1_div_2_Template_mat_select_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r32 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r32.endYear = $event); })("selectionChange", function TimeFilterFormComponent_div_1_div_2_Template_mat_select_selectionChange_8_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r33 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r33.handleYearChange($event)); });
137
- i0.ɵɵpipe(9, "translate");
138
- i0.ɵɵtemplate(10, TimeFilterFormComponent_div_1_div_2_mat_option_10_Template, 2, 2, "mat-option", 13);
139
- i0.ɵɵelementEnd()()()();
140
- } if (rf & 2) {
141
- const ctx_r19 = i0.ɵɵnextContext(2);
142
- i0.ɵɵadvance(3);
143
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(4, 6, "igo.geo.timeFilter.startDate"));
144
- i0.ɵɵproperty("ngModel", ctx_r19.startYear);
145
- i0.ɵɵadvance(2);
146
- i0.ɵɵproperty("ngForOf", ctx_r19.startListYears);
147
- i0.ɵɵadvance(3);
148
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(9, 8, "igo.geo.timeFilter.endDate"));
149
- i0.ɵɵproperty("ngModel", ctx_r19.endYear);
150
- i0.ɵɵadvance(2);
151
- i0.ɵɵproperty("ngForOf", ctx_r19.endListYears);
152
- } }
153
- function TimeFilterFormComponent_div_1_Template(rf, ctx) { if (rf & 1) {
154
- i0.ɵɵelementStart(0, "div");
155
- i0.ɵɵtemplate(1, TimeFilterFormComponent_div_1_div_1_Template, 5, 5, "div", 2);
156
- i0.ɵɵtemplate(2, TimeFilterFormComponent_div_1_div_2_Template, 11, 10, "div", 0);
157
- i0.ɵɵelementEnd();
158
- } if (rf & 2) {
159
- const ctx_r1 = i0.ɵɵnextContext();
160
- i0.ɵɵadvance(1);
161
- i0.ɵɵproperty("ngIf", !ctx_r1.isRange);
162
- i0.ɵɵadvance(1);
163
- i0.ɵɵproperty("ngIf", ctx_r1.isRange);
164
- } }
165
- function TimeFilterFormComponent_div_3_p_6_Template(rf, ctx) { if (rf & 1) {
166
- i0.ɵɵelementStart(0, "p", 23);
167
- i0.ɵɵtext(1);
168
- i0.ɵɵelementEnd();
169
- } if (rf & 2) {
170
- const ctx_r34 = i0.ɵɵnextContext(2);
171
- i0.ɵɵadvance(1);
172
- i0.ɵɵtextInterpolate(ctx_r34.year);
173
- } }
174
- function TimeFilterFormComponent_div_3_Template(rf, ctx) { if (rf & 1) {
175
- const _r37 = i0.ɵɵgetCurrentView();
176
- i0.ɵɵelementStart(0, "div", 15)(1, "span");
177
- i0.ɵɵtext(2);
178
- i0.ɵɵelementEnd();
179
- i0.ɵɵelementStart(3, "mat-slider", 16);
180
- i0.ɵɵlistener("input", function TimeFilterFormComponent_div_3_Template_mat_slider_input_3_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r36 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r36.handleSliderYearChange($event)); })("change", function TimeFilterFormComponent_div_3_Template_mat_slider_change_3_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r38 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r38.handleSliderYearChange($event)); });
181
- i0.ɵɵelementEnd();
182
- i0.ɵɵelementStart(4, "span");
183
- i0.ɵɵtext(5);
184
- i0.ɵɵelementEnd();
185
- i0.ɵɵtemplate(6, TimeFilterFormComponent_div_3_p_6_Template, 2, 1, "p", 17);
186
- i0.ɵɵelementStart(7, "div", 18, 19)(9, "mat-slide-toggle", 20);
187
- i0.ɵɵlistener("change", function TimeFilterFormComponent_div_3_Template_mat_slide_toggle_change_9_listener() { i0.ɵɵrestoreView(_r37); const ctx_r39 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r39.toggleFilterState()); });
188
- i0.ɵɵpipe(10, "translate");
189
- i0.ɵɵelementEnd();
190
- i0.ɵɵelementStart(11, "button", 21);
191
- i0.ɵɵlistener("click", function TimeFilterFormComponent_div_3_Template_button_click_11_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r40 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r40.playYear($event)); });
192
- i0.ɵɵelement(12, "mat-icon", 22);
193
- i0.ɵɵelementEnd();
194
- i0.ɵɵelementStart(13, "button", 21);
195
- i0.ɵɵlistener("click", function TimeFilterFormComponent_div_3_Template_button_click_13_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r41 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r41.resetFilter($event)); });
196
- i0.ɵɵelement(14, "mat-icon", 22);
197
- i0.ɵɵelementEnd()()();
198
- } if (rf & 2) {
199
- const ctx_r2 = i0.ɵɵnextContext();
200
- i0.ɵɵadvance(2);
201
- i0.ɵɵtextInterpolate(ctx_r2.startYear);
202
- i0.ɵɵadvance(1);
203
- i0.ɵɵpropertyInterpolate("step", ctx_r2.step);
204
- i0.ɵɵproperty("min", ctx_r2.startYear)("max", ctx_r2.endYear)("value", ctx_r2.handleSliderValue())("color", ctx_r2.color)("disabled", !ctx_r2.options.enabled || !ctx_r2.layer.visible);
205
- i0.ɵɵadvance(2);
206
- i0.ɵɵtextInterpolate(ctx_r2.endYear);
207
- i0.ɵɵadvance(1);
208
- i0.ɵɵproperty("ngIf", ctx_r2.options.enabled);
209
- i0.ɵɵadvance(3);
210
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(10, 17, "igo.geo.filter.toggleFilterState"))("color", ctx_r2.color)("checked", ctx_r2.options.enabled)("disabled", !ctx_r2.layer.visible);
211
- i0.ɵɵadvance(2);
212
- i0.ɵɵproperty("disabled", !ctx_r2.options.enabled || !ctx_r2.layer.visible);
213
- i0.ɵɵadvance(1);
214
- i0.ɵɵpropertyInterpolate("svgIcon", ctx_r2.playIcon);
215
- i0.ɵɵadvance(1);
216
- i0.ɵɵproperty("disabled", !ctx_r2.options.enabled || !ctx_r2.layer.visible);
217
- i0.ɵɵadvance(1);
218
- i0.ɵɵpropertyInterpolate("svgIcon", ctx_r2.resetIcon);
219
- } }
220
- function TimeFilterFormComponent_div_4_Template(rf, ctx) { if (rf & 1) {
221
- const _r43 = i0.ɵɵgetCurrentView();
222
- i0.ɵɵelementStart(0, "div", 3)(1, "mat-slider", 24);
223
- i0.ɵɵlistener("input", function TimeFilterFormComponent_div_4_Template_mat_slider_input_1_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r42 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r42.handleSliderDateChange($event)); })("selectionChange", function TimeFilterFormComponent_div_4_Template_mat_slider_selectionChange_1_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r44 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r44.handleSliderDateChange($event)); });
224
- i0.ɵɵelementEnd();
225
- i0.ɵɵelementStart(2, "p", 23);
226
- i0.ɵɵtext(3);
227
- i0.ɵɵelementEnd();
228
- i0.ɵɵelementStart(4, "button", 25);
229
- i0.ɵɵlistener("click", function TimeFilterFormComponent_div_4_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r45 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r45.playFilter($event)); });
230
- i0.ɵɵelement(5, "mat-icon", 22);
231
- i0.ɵɵelementEnd()();
232
- } if (rf & 2) {
233
- const ctx_r3 = i0.ɵɵnextContext();
234
- i0.ɵɵadvance(1);
235
- i0.ɵɵpropertyInterpolate("step", ctx_r3.step);
236
- i0.ɵɵproperty("min", ctx_r3.dateToNumber(ctx_r3.min))("max", ctx_r3.dateToNumber(ctx_r3.max))("value", ctx_r3.handleSliderValue());
237
- i0.ɵɵadvance(2);
238
- i0.ɵɵtextInterpolate(ctx_r3.handleSliderTooltip());
239
- i0.ɵɵadvance(2);
240
- i0.ɵɵpropertyInterpolate("svgIcon", ctx_r3.playIcon);
241
- } }
242
- export class TimeFilterFormComponent {
243
- constructor(dateAdapter) {
244
- this.dateAdapter = dateAdapter;
245
- this.color = 'primary';
246
- this.listYears = [];
247
- this.startListYears = [];
248
- this.endListYears = [];
249
- this.playIcon = 'play-circle';
250
- this.resetIcon = 'replay';
251
- this.change = new EventEmitter();
252
- this.yearChange = new EventEmitter();
253
- this.dateAdapter.setLocale('fr');
254
- }
255
- set currentValue(value) {
256
- if (value) {
257
- if (this.type !== TimeFilterType.YEAR) {
258
- const valueArray = value.split('/');
259
- if (valueArray.length > 0) {
260
- const startDate = new Date(valueArray[0]);
261
- const endDate = new Date(valueArray[1]);
262
- if (!isNaN(startDate.valueOf())) {
263
- this.startDate = startDate;
264
- }
265
- if (!isNaN(endDate.valueOf())) {
266
- this.endDate = endDate;
267
- }
268
- }
269
- }
270
- }
271
- }
272
- get type() {
273
- return this.options.type === undefined
274
- ? TimeFilterType.DATE
275
- : this.options.type;
276
- }
277
- get isRange() {
278
- return this.options.range === undefined ||
279
- this.options.style === TimeFilterStyle.SLIDER
280
- ? false
281
- : this.options.range;
282
- }
283
- get style() {
284
- return this.options.style === undefined
285
- ? TimeFilterStyle.SLIDER
286
- : this.options.style;
287
- }
288
- get step() {
289
- let step = 10800000;
290
- if (this.options.step === undefined) {
291
- switch (this.type) {
292
- case TimeFilterType.DATE:
293
- case TimeFilterType.DATETIME:
294
- step = 10800000;
295
- break;
296
- case TimeFilterType.TIME:
297
- step = 3600000;
298
- break;
299
- case TimeFilterType.YEAR:
300
- step = 31536000000;
301
- break;
302
- default:
303
- step = 10800000;
304
- }
305
- }
306
- else {
307
- step = this.getStepDefinition(this.options.step);
308
- }
309
- return step;
310
- }
311
- get timeInterval() {
312
- return this.options.timeInterval === undefined
313
- ? 2000
314
- : this.options.timeInterval;
315
- }
316
- get min() {
317
- if (this.options.min) {
318
- const min = new Date(this.options.min);
319
- return new Date(min.getTime() + min.getTimezoneOffset() * 60000);
320
- }
321
- else {
322
- return undefined;
323
- }
324
- }
325
- get max() {
326
- if (this.options.max) {
327
- const max = new Date(this.options.max);
328
- return new Date(max.getTime() + max.getTimezoneOffset() * 60000);
329
- }
330
- else {
331
- return undefined;
332
- }
333
- }
334
- get is() {
335
- return this.options.range === undefined ? false : this.options.range;
336
- }
337
- ngOnInit() {
338
- if (this.startDate === undefined) {
339
- this.startDate = new Date(this.min);
340
- }
341
- if (this.endDate === undefined) {
342
- this.endDate = new Date(this.max);
343
- }
344
- if (this.startYear === undefined) {
345
- this.startYear = new Date(this.startDate).getFullYear();
346
- this.initStartYear = this.startYear;
347
- }
348
- if (this.endYear === undefined) {
349
- this.endYear = new Date(this.endDate).getFullYear();
350
- this.initEndYear = this.endYear;
351
- }
352
- if (!this.isRange) {
353
- for (let i = this.startYear; i <= this.endYear + 1; i++) {
354
- this.listYears.push(i);
355
- }
356
- }
357
- else {
358
- for (let i = this.startYear; i < this.endYear; i++) {
359
- this.startListYears.push(i);
360
- }
361
- for (let i = this.startYear + 1; i <= this.endYear; i++) {
362
- this.endListYears.push(i);
363
- }
364
- }
365
- this.options.enabled =
366
- this.options.enabled === undefined ? true : this.options.enabled;
367
- this.checkFilterValue();
368
- if (this.options.enabled) {
369
- if (!this.isRange && this.style === 'slider' && this.type === 'year') {
370
- this.yearChange.emit(this.year);
371
- }
372
- }
373
- else {
374
- this.storeCurrentFilterValue();
375
- this.yearChange.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
376
- }
377
- }
378
- storeCurrentFilterValue() {
379
- // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
380
- if (!this.isRange &&
381
- this.style === TimeFilterStyle.SLIDER &&
382
- this.type === TimeFilterType.YEAR) {
383
- this.options.value = this.year.toString();
384
- }
385
- }
386
- checkFilterValue() {
387
- const olSource = this.layer.dataSource.ol;
388
- const timeFromWms = olSource.getParams().TIME;
389
- if (!this.isRange &&
390
- this.style === TimeFilterStyle.SLIDER &&
391
- this.type === TimeFilterType.YEAR) {
392
- if (timeFromWms) {
393
- this.year = new Date(timeFromWms.toString()).getFullYear() + 1;
394
- }
395
- else if (this.options.value) {
396
- this.year = new Date(this.options.value.toString()).getFullYear() + 1;
397
- }
398
- else {
399
- this.year = new Date(this.min).getFullYear() + 1;
400
- }
401
- }
402
- else if (this.isRange &&
403
- this.style === TimeFilterStyle.CALENDAR &&
404
- this.type === TimeFilterType.YEAR) {
405
- if (timeFromWms) {
406
- this.startYear = parseInt(timeFromWms.substr(0, 4), 10);
407
- this.endYear = parseInt(timeFromWms.substr(5, 4), 10);
408
- const newStartListYears = [];
409
- const newEndListYears = [];
410
- for (let i = this.initStartYear; i < this.endYear; i++) {
411
- newStartListYears.push(i);
412
- }
413
- for (let i = this.startYear + 1; i <= this.initEndYear; i++) {
414
- newEndListYears.push(i);
415
- }
416
- this.startListYears = newStartListYears;
417
- this.endListYears = newEndListYears;
418
- }
419
- }
420
- // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
421
- }
422
- handleDateChange(event) {
423
- this.setupDateOutput();
424
- this.applyTypeChange();
425
- // Only if is range, use 2 dates to make the range
426
- if (this.isRange) {
427
- this.change.emit([this.startDate, this.endDate]);
428
- }
429
- else {
430
- this.change.emit(this.startDate);
431
- }
432
- }
433
- handleYearChange(event) {
434
- if (this.isRange) {
435
- this.endListYears = [];
436
- for (let i = this.startYear + 1; i <= this.initEndYear; i++) {
437
- this.endListYears.push(i);
438
- }
439
- this.startListYears = [];
440
- for (let i = this.initStartYear + 1; i < this.endYear; i++) {
441
- this.startListYears.push(i);
442
- }
443
- this.yearChange.emit([this.startYear, this.endYear]);
444
- }
445
- else {
446
- this.yearChange.emit(this.year);
447
- }
448
- }
449
- handleListYearChange(event) {
450
- this.handleYearChange([this.startYear, this.endYear]);
451
- }
452
- handleListYearStartChange(event) {
453
- this.change.emit([this.startDate, this.endDate]);
454
- }
455
- dateToNumber(date) {
456
- let newDate;
457
- if (date) {
458
- newDate = new Date(date);
459
- }
460
- else {
461
- newDate = new Date(this.min);
462
- }
463
- return newDate.getTime();
464
- }
465
- setSliderThumbLabel(label) {
466
- const thumbLabel = this.findThumbLabel(this.mySlider._elementRef.nativeElement.childNodes);
467
- if (thumbLabel) {
468
- thumbLabel.textContent = label;
469
- }
470
- }
471
- findThumbLabel(test) {
472
- let thumbLabel;
473
- test.forEach(value => {
474
- if (value.className === 'mat-slider-thumb-label-text') {
475
- thumbLabel = value;
476
- }
477
- if (value.children.length > 0 && !thumbLabel) {
478
- thumbLabel = this.findThumbLabel(value.childNodes);
479
- }
480
- }, this);
481
- return thumbLabel;
482
- }
483
- toggleFilterState() {
484
- this.options.enabled = !this.options.enabled;
485
- if (this.options.enabled) {
486
- if (!this.isRange &&
487
- TimeFilterStyle.SLIDER &&
488
- this.type === TimeFilterType.YEAR) {
489
- this.yearChange.emit(this.year);
490
- }
491
- }
492
- else {
493
- this.stopFilter();
494
- this.storeCurrentFilterValue();
495
- this.change.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
496
- }
497
- }
498
- resetFilter(event) {
499
- this.date = new Date(this.min);
500
- this.year = this.date.getFullYear();
501
- if (!this.isRange &&
502
- TimeFilterStyle.SLIDER &&
503
- this.type === TimeFilterType.YEAR) {
504
- this.yearChange.emit(this.year);
505
- }
506
- else {
507
- this.setupDateOutput();
508
- this.change.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
509
- }
510
- }
511
- playFilter(event) {
512
- if (this.interval) {
513
- this.stopFilter();
514
- }
515
- else {
516
- this.playIcon = 'pause-circle';
517
- this.interval = setInterval(that => {
518
- let newMinDateNumber;
519
- const maxDateNumber = new Date(that.max);
520
- newMinDateNumber =
521
- that.date === undefined ? that.min.getTime() : that.date.getTime();
522
- newMinDateNumber += that.mySlider.step;
523
- that.date = new Date(newMinDateNumber);
524
- if (newMinDateNumber > maxDateNumber.getTime()) {
525
- that.stopFilter();
526
- }
527
- that.handleDateChange({ value: that.date, date: that.date });
528
- }, this.timeInterval, this);
529
- }
530
- }
531
- playYear(event) {
532
- if (this.year + this.mySlider.step >
533
- this.max.getFullYear() + this.mySlider.step) {
534
- this.stopFilter();
535
- this.resetFilter(event);
536
- }
537
- if (this.interval) {
538
- this.stopFilter();
539
- }
540
- else {
541
- this.playIcon = 'pause-circle';
542
- this.interval = setInterval(() => {
543
- if ((this.year + this.mySlider.step) > this.max.getFullYear()) {
544
- this.stopFilter();
545
- }
546
- else {
547
- this.year = this.year + this.mySlider.step;
548
- }
549
- this.yearChange.emit(this.year);
550
- }, this.timeInterval, this);
551
- }
552
- }
553
- stopFilter() {
554
- if (this.interval) {
555
- clearInterval(this.interval);
556
- }
557
- this.interval = undefined;
558
- this.playIcon = 'play-circle';
559
- }
560
- handleSliderDateChange(event) {
561
- this.date = new Date(event.value);
562
- this.setSliderThumbLabel(this.handleSliderTooltip());
563
- this.handleDateChange(event);
564
- }
565
- handleSliderYearChange(event) {
566
- this.year = event.value;
567
- this.yearChange.emit(this.year);
568
- }
569
- handleSliderValue() {
570
- if (this.options.current === true || !this.min) {
571
- const currentDate = new Date();
572
- this.date = this.getRoundedDate(currentDate);
573
- }
574
- if (this.type === TimeFilterType.YEAR) {
575
- return this.year;
576
- }
577
- else {
578
- return this.date === undefined ? this.min.getTime() : this.date.getTime();
579
- }
580
- }
581
- handleSliderTooltip() {
582
- let label;
583
- switch (this.type) {
584
- case TimeFilterType.DATE:
585
- label =
586
- this.date === undefined
587
- ? this.min.toDateString()
588
- : this.date.toDateString();
589
- break;
590
- case TimeFilterType.TIME:
591
- label =
592
- this.date === undefined
593
- ? this.min.toTimeString()
594
- : this.date.toTimeString();
595
- break;
596
- // datetime
597
- default:
598
- label =
599
- this.date === undefined
600
- ? this.min.toUTCString()
601
- : this.date.toUTCString();
602
- break;
603
- }
604
- return label;
605
- }
606
- setupDateOutput() {
607
- if (this.style === TimeFilterStyle.SLIDER) {
608
- this.startDate = new Date(this.date);
609
- this.startDate.setSeconds(-(this.step / 1000));
610
- this.endDate = new Date(this.startDate);
611
- this.endDate.setSeconds(this.step / 1000);
612
- }
613
- else if (!this.isRange && !!this.date) {
614
- this.endDate = new Date(this.date);
615
- this.startDate = new Date(this.date);
616
- }
617
- else if (this.isRange && (!!this.date || !this.date)) {
618
- this.startDate =
619
- this.startDate === undefined ? new Date(this.min) : this.startDate;
620
- this.endDate =
621
- this.endDate === undefined ? new Date(this.max) : this.endDate;
622
- }
623
- else if (!this.date) {
624
- this.startDate =
625
- this.startDate === undefined ? new Date(this.min) : this.startDate;
626
- this.endDate =
627
- this.endDate === undefined ? new Date(this.max) : this.endDate;
628
- }
629
- }
630
- applyTypeChange() {
631
- switch (this.type) {
632
- case TimeFilterType.DATE:
633
- if (this.startDate !== undefined || this.endDate !== undefined) {
634
- this.startDate.setHours(0);
635
- this.startDate.setMinutes(0);
636
- this.startDate.setSeconds(0);
637
- this.endDate.setHours(23);
638
- this.endDate.setMinutes(59);
639
- this.endDate.setSeconds(59);
640
- }
641
- break;
642
- case TimeFilterType.TIME:
643
- if (this.style === TimeFilterStyle.CALENDAR) {
644
- if (this.startDate.getDay() !== this.min.getDay()) {
645
- const selectedHour = this.startDate.getHours();
646
- const selectedMinute = this.startDate.getMinutes();
647
- this.startDate = this.min;
648
- this.startDate.setHours(selectedHour);
649
- this.startDate.setMinutes(selectedMinute);
650
- }
651
- if (this.endDate.getDay() !== this.min.getDay()) {
652
- const selectedHour = this.endDate.getHours();
653
- const selectedMinute = this.endDate.getMinutes();
654
- this.endDate = this.min;
655
- this.endDate.setHours(selectedHour);
656
- this.endDate.setMinutes(selectedMinute);
657
- }
658
- }
659
- if (!this.isRange && this.step > 60 * 60 * 1000) {
660
- this.startDate.setMinutes(0);
661
- this.startDate.setSeconds(0);
662
- this.endDate.setMinutes(59);
663
- this.endDate.setSeconds(59);
664
- }
665
- break;
666
- // datetime
667
- default:
668
- // do nothing
669
- }
670
- }
671
- getRangeMinDate() {
672
- return this.startDate === undefined ? this.min : this.startDate;
673
- }
674
- getRangeMaxDate() {
675
- return this.endDate === undefined ? this.max : this.endDate;
676
- }
677
- /**
678
- * Round date at a certain time, 10 minutes by Default
679
- * @param date - Date to Round
680
- * @param atMinute - round to closest 'atMinute' minute, rounded 10 by default
681
- * @return the rounded date
682
- */
683
- getRoundedDate(date, atMinute = 10) {
684
- const coeff = 1000 * 60 * atMinute;
685
- return new Date(Math.round(date.getTime() / coeff) * coeff);
686
- }
687
- /**
688
- * Get the step (period) definition from the layer dimension tag
689
- * @param step The step as ISO 8601 example: PT10M for 10 Minutes
690
- * @return the duration in milliseconds
691
- */
692
- getStepDefinition(step) {
693
- return moment.duration(step).asMilliseconds();
694
- }
695
- }
696
- TimeFilterFormComponent.ɵfac = function TimeFilterFormComponent_Factory(t) { return new (t || TimeFilterFormComponent)(i0.ɵɵdirectiveInject(i1.DateAdapter)); };
697
- TimeFilterFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TimeFilterFormComponent, selectors: [["igo-time-filter-form"]], viewQuery: function TimeFilterFormComponent_Query(rf, ctx) { if (rf & 1) {
698
- i0.ɵɵviewQuery(MatSlider, 5);
699
- } if (rf & 2) {
700
- let _t;
701
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.mySlider = _t.first);
702
- } }, inputs: { layer: "layer", options: "options", currentValue: "currentValue" }, outputs: { change: "change", yearChange: "yearChange" }, decls: 5, vars: 4, consts: [[4, "ngIf"], ["class", "igo-col igo-col-100 igo-col-100-m mat-typography", 4, "ngIf"], ["class", "igo-col igo-col-100 igo-col-100-m", 4, "ngIf"], [1, "igo-col", "igo-col-100", "igo-col-100-m"], ["matSuffix", "", 1, "time-filter-mat-datetimepicker-toggle", 3, "for"], ["openOnFocus", "true", "timeInterval", "5", 3, "type"], ["datetimePicker", ""], ["matInput", "", "autocomplete", "false", "readonly", "readonly", 3, "placeholder", "matDatetimepicker", "ngModel", "min", "max", "ngModelChange", "dateChange"], [1, "igo-col", "igo-col-100"], ["minDatetimePicker", ""], ["matInput", "", "autocomplete", "false", "readonly", "readonly", 3, "placeholder", "matDatetimepicker", "ngModel", "min", "max", "ngModelChange", "input", "dateChange"], ["maxDatetimePicker", ""], [3, "placeholder", "ngModel", "ngModelChange", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], [1, "igo-col", "igo-col-100", "igo-col-100-m", "mat-typography"], ["id", "time-slider", "tickInterval", "auto", "thumbLabel", "", 3, "step", "min", "max", "value", "color", "disabled", "input", "change"], ["class", "date-below", 4, "ngIf"], [1, "igo-layer-actions-container"], ["actions", ""], ["tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "color", "checked", "disabled", "change"], ["mat-icon-button", "", "color", "primary", 3, "disabled", "click"], [3, "svgIcon"], [1, "date-below"], ["id", "time-slider", "tickInterval", "auto", "thumbLabel", "", 3, "step", "min", "max", "value", "input", "selectionChange"], ["mat-icon-button", "", "color", "primary", 3, "click"]], template: function TimeFilterFormComponent_Template(rf, ctx) { if (rf & 1) {
703
- i0.ɵɵtemplate(0, TimeFilterFormComponent_div_0_Template, 3, 2, "div", 0);
704
- i0.ɵɵtemplate(1, TimeFilterFormComponent_div_1_Template, 3, 2, "div", 0);
705
- i0.ɵɵelement(2, "br");
706
- i0.ɵɵtemplate(3, TimeFilterFormComponent_div_3_Template, 15, 19, "div", 1);
707
- i0.ɵɵtemplate(4, TimeFilterFormComponent_div_4_Template, 6, 6, "div", 2);
708
- } if (rf & 2) {
709
- i0.ɵɵproperty("ngIf", ctx.style === "calendar" && ctx.type !== "year");
710
- i0.ɵɵadvance(1);
711
- i0.ɵɵproperty("ngIf", ctx.style === "calendar" && ctx.type === "year");
712
- i0.ɵɵadvance(2);
713
- i0.ɵɵproperty("ngIf", !ctx.isRange && ctx.style === "slider" && ctx.type === "year");
714
- i0.ɵɵadvance(1);
715
- i0.ɵɵproperty("ngIf", ctx.style === "slider" && ctx.type !== "year");
716
- } }, dependencies: [i2.NgForOf, i2.NgIf, i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgModel, i1.MatOption, i4.MatIcon, i5.MatButton, i6.MatSlider, i7.MatSlideToggle, i8.MatFormField, i8.MatSuffix, i9.MatInput, i10.MatSelect, i11.MatTooltip, i12.MatDatetimepickerComponent, i12.MatDatetimepickerToggleComponent, i12.MatDatetimepickerInputDirective, i13.TranslatePipe], styles: [".igo-layer-filters-container[_ngcontent-%COMP%]{padding-left:5px}mat-slider[_ngcontent-%COMP%] div.mat-slider-thumb-label{width:32px;height:32px;margin:0 auto}mat-slider[_ngcontent-%COMP%] span.mat-slider-thumb-label-text{font-size:10px}#time-slider[_ngcontent-%COMP%]{width:70%;margin:0 auto}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){#time-slider[_ngcontent-%COMP%]{width:60%;margin:0 auto}}.date-below[_ngcontent-%COMP%]{margin:0}mat-form-field[_ngcontent-%COMP%]{text-align:center}mat-datetimepicker-toggle[_ngcontent-%COMP%] .mat-icon{padding-bottom:30px}.igo-layer-actions-container[_ngcontent-%COMP%] > .mat-slide-toggle[_ngcontent-%COMP%]{vertical-align:middle}.time-filter-mat-datetimepicker-toggle[_ngcontent-%COMP%] .mat-icon{width:auto}"] });
717
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimeFilterFormComponent, [{
718
- type: Component,
719
- args: [{ selector: 'igo-time-filter-form', template: "<div *ngIf=\"style === 'calendar' && type !=='year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-datetimepicker-toggle class=\"time-filter-mat-datetimepicker-toggle\" [for]=\"datetimePicker\" matSuffix></mat-datetimepicker-toggle>\n <mat-datetimepicker #datetimePicker type=\"{{type}}\" openOnFocus=\"true\" timeInterval=\"5\"></mat-datetimepicker>\n <input matInput autocomplete=\"false\"\n placeholder=\"{{'igo.geo.timeFilter.date' | translate}}\"\n [matDatetimepicker]=\"datetimePicker\"\n [(ngModel)]=\"date\"\n [min]=\"min\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange($event)\">\n </mat-form-field>\n\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle class=\"time-filter-mat-datetimepicker-toggle\" [for]=\"minDatetimePicker\" matSuffix></mat-datetimepicker-toggle>\n <mat-datetimepicker #minDatetimePicker type=\"{{type}}\" openOnFocus=\"true\" timeInterval=\"5\"></mat-datetimepicker>\n <input matInput autocomplete=\"false\"\n placeholder=\"{{'igo.geo.timeFilter.startDate' | translate}}\"\n [matDatetimepicker]=\"minDatetimePicker\"\n [(ngModel)]=\"startDate\"\n [min]=\"min\"\n [max]=\"getRangeMaxDate()\"\n readonly=\"readonly\"\n (input)=\"startDate\"\n (dateChange)=\"handleDateChange($event)\">\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle class=\"time-filter-mat-datetimepicker-toggle\" [for]=\"maxDatetimePicker\" matSuffix></mat-datetimepicker-toggle>\n <mat-datetimepicker #maxDatetimePicker type=\"{{type}}\" openOnFocus=\"true\" timeInterval=\"5\"></mat-datetimepicker>\n <input matInput autocomplete=\"false\"\n placeholder=\"{{'igo.geo.timeFilter.endDate' | translate}}\"\n [matDatetimepicker]=\"maxDatetimePicker\"\n [(ngModel)]=\"endDate\"\n [min]=\"getRangeMinDate()\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange($event)\">\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"style === 'calendar' && type ==='year'\">\n\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-select placeholder=\"{{'igo.geo.timeFilter.date' | translate}}\" [(ngModel)]=\"year\" (selectionChange)=\"handleYearChange($event)\">\n <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{year}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select placeholder=\"{{'igo.geo.timeFilter.startDate' | translate}}\" [(ngModel)]=\"startYear\" (selectionChange)=\"handleYearChange($event)\">\n <mat-option [value]=\"startYear\" *ngFor=\"let startYear of startListYears\">{{startYear}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select placeholder=\"{{'igo.geo.timeFilter.endDate' | translate}}\" [(ngModel)]=\"endYear\" (selectionChange)=\"handleYearChange($event)\">\n <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{endYear}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n</div>\n\n\n <br>\n <div *ngIf=\"!isRange && style === 'slider' && type === 'year'\" class=\"igo-col igo-col-100 igo-col-100-m mat-typography\">\n <span>{{startYear}}</span>\n <mat-slider\n id=\"time-slider\"\n tickInterval=\"auto\"\n step=\"{{step}}\"\n [min]=\"startYear\"\n [max]=\"endYear\"\n [value]=\"handleSliderValue()\"\n [color]=\"color\"\n thumbLabel\n (input)=\"handleSliderYearChange($event)\"\n (change)=\"handleSliderYearChange($event)\"\n [disabled]= \"!options.enabled || !layer.visible\">\n </mat-slider>\n <span>{{endYear}}</span>\n <p *ngIf= \"options.enabled\" class=\"date-below\">{{year}}</p>\n <div #actions class=\"igo-layer-actions-container\">\n <mat-slide-toggle (change)=\"toggleFilterState()\" tooltip-position=\"below\" matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" [color]=\"color\" [checked]=\"options.enabled\"\n [disabled]=\"!layer.visible\">\n </mat-slide-toggle>\n <button [disabled]= \"!options.enabled || !layer.visible\" mat-icon-button color=\"primary\" (click)=\"playYear($event)\">\n <mat-icon svgIcon=\"{{playIcon}}\"></mat-icon>\n </button>\n <button [disabled]=\"!options.enabled || !layer.visible\" mat-icon-button color=\"primary\" (click)=\"resetFilter($event)\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n </div>\n </div>\n\n<div *ngIf=\"style === 'slider' && type !== 'year'\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-slider\n id=\"time-slider\"\n tickInterval=\"auto\"\n step=\"{{step}}\"\n [min]=\"dateToNumber(min)\"\n [max]=\"dateToNumber(max)\"\n [value]=\"handleSliderValue()\"\n thumbLabel\n (input)=\"handleSliderDateChange($event)\"\n (selectionChange)=\"handleSliderDateChange($event)\">\n </mat-slider>\n <p class=\"date-below\">{{handleSliderTooltip()}}</p>\n <button mat-icon-button color=\"primary\" (click)=\"playFilter($event)\">\n <mat-icon svgIcon=\"{{playIcon}}\"></mat-icon>\n </button>\n</div>\n", styles: [".igo-layer-filters-container{padding-left:5px}mat-slider ::ng-deep div.mat-slider-thumb-label{width:32px;height:32px;margin:0 auto}mat-slider ::ng-deep span.mat-slider-thumb-label-text{font-size:10px}#time-slider{width:70%;margin:0 auto}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){#time-slider{width:60%;margin:0 auto}}.date-below{margin:0}mat-form-field{text-align:center}mat-datetimepicker-toggle ::ng-deep .mat-icon{padding-bottom:30px}.igo-layer-actions-container>.mat-slide-toggle{vertical-align:middle}.time-filter-mat-datetimepicker-toggle ::ng-deep .mat-icon{width:auto}\n"] }]
720
- }], function () { return [{ type: i1.DateAdapter }]; }, { layer: [{
721
- type: Input
722
- }], options: [{
723
- type: Input
724
- }], currentValue: [{
725
- type: Input
726
- }], change: [{
727
- type: Output
728
- }], yearChange: [{
729
- type: Output
730
- }], mySlider: [{
731
- type: ViewChild,
732
- args: [MatSlider]
733
- }] }); })();
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { MatSlider } from '@angular/material/slider';
3
+ import { default as moment } from 'moment';
4
+ import { TimeFilterType, TimeFilterStyle } from '../shared/time-filter.enum';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/core";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@angular/forms";
9
+ import * as i4 from "@angular/material/icon";
10
+ import * as i5 from "@angular/material/button";
11
+ import * as i6 from "@angular/material/slider";
12
+ import * as i7 from "@angular/material/slide-toggle";
13
+ import * as i8 from "@angular/material/form-field";
14
+ import * as i9 from "@angular/material/input";
15
+ import * as i10 from "@angular/material/select";
16
+ import * as i11 from "@angular/material/tooltip";
17
+ import * as i12 from "@mat-datetimepicker/core";
18
+ import * as i13 from "@ngx-translate/core";
19
+ function TimeFilterFormComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
20
+ const _r8 = i0.ɵɵgetCurrentView();
21
+ i0.ɵɵelementStart(0, "div", 3)(1, "mat-form-field");
22
+ i0.ɵɵelement(2, "mat-datetimepicker-toggle", 4)(3, "mat-datetimepicker", 5, 6);
23
+ i0.ɵɵelementStart(5, "input", 7);
24
+ i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_0_div_1_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r7.date = $event); })("dateChange", function TimeFilterFormComponent_div_0_div_1_Template_input_dateChange_5_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r9 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r9.handleDateChange($event)); });
25
+ i0.ɵɵpipe(6, "translate");
26
+ i0.ɵɵelementEnd()()();
27
+ } if (rf & 2) {
28
+ const _r6 = i0.ɵɵreference(4);
29
+ const ctx_r4 = i0.ɵɵnextContext(2);
30
+ i0.ɵɵadvance(2);
31
+ i0.ɵɵproperty("for", _r6);
32
+ i0.ɵɵadvance(1);
33
+ i0.ɵɵpropertyInterpolate("type", ctx_r4.type);
34
+ i0.ɵɵadvance(2);
35
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(6, 7, "igo.geo.timeFilter.date"));
36
+ i0.ɵɵproperty("matDatetimepicker", _r6)("ngModel", ctx_r4.date)("min", ctx_r4.min)("max", ctx_r4.max);
37
+ } }
38
+ function TimeFilterFormComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
39
+ const _r13 = i0.ɵɵgetCurrentView();
40
+ i0.ɵɵelementStart(0, "div")(1, "div", 8)(2, "mat-form-field");
41
+ i0.ɵɵelement(3, "mat-datetimepicker-toggle", 4)(4, "mat-datetimepicker", 5, 9);
42
+ i0.ɵɵelementStart(6, "input", 10);
43
+ i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_0_div_2_Template_input_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r12.startDate = $event); })("input", function TimeFilterFormComponent_div_0_div_2_Template_input_input_6_listener() { i0.ɵɵrestoreView(_r13); const ctx_r14 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r14.startDate); })("dateChange", function TimeFilterFormComponent_div_0_div_2_Template_input_dateChange_6_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r15 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r15.handleDateChange($event)); });
44
+ i0.ɵɵpipe(7, "translate");
45
+ i0.ɵɵelementEnd()()();
46
+ i0.ɵɵelementStart(8, "div", 8)(9, "mat-form-field");
47
+ i0.ɵɵelement(10, "mat-datetimepicker-toggle", 4)(11, "mat-datetimepicker", 5, 11);
48
+ i0.ɵɵelementStart(13, "input", 7);
49
+ i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_0_div_2_Template_input_ngModelChange_13_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r16 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r16.endDate = $event); })("dateChange", function TimeFilterFormComponent_div_0_div_2_Template_input_dateChange_13_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r17 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r17.handleDateChange($event)); });
50
+ i0.ɵɵpipe(14, "translate");
51
+ i0.ɵɵelementEnd()()()();
52
+ } if (rf & 2) {
53
+ const _r10 = i0.ɵɵreference(5);
54
+ const _r11 = i0.ɵɵreference(12);
55
+ const ctx_r5 = i0.ɵɵnextContext(2);
56
+ i0.ɵɵadvance(3);
57
+ i0.ɵɵproperty("for", _r10);
58
+ i0.ɵɵadvance(1);
59
+ i0.ɵɵpropertyInterpolate("type", ctx_r5.type);
60
+ i0.ɵɵadvance(2);
61
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(7, 14, "igo.geo.timeFilter.startDate"));
62
+ i0.ɵɵproperty("matDatetimepicker", _r10)("ngModel", ctx_r5.startDate)("min", ctx_r5.min)("max", ctx_r5.getRangeMaxDate());
63
+ i0.ɵɵadvance(4);
64
+ i0.ɵɵproperty("for", _r11);
65
+ i0.ɵɵadvance(1);
66
+ i0.ɵɵpropertyInterpolate("type", ctx_r5.type);
67
+ i0.ɵɵadvance(2);
68
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(14, 16, "igo.geo.timeFilter.endDate"));
69
+ i0.ɵɵproperty("matDatetimepicker", _r11)("ngModel", ctx_r5.endDate)("min", ctx_r5.getRangeMinDate())("max", ctx_r5.max);
70
+ } }
71
+ function TimeFilterFormComponent_div_0_Template(rf, ctx) { if (rf & 1) {
72
+ i0.ɵɵelementStart(0, "div");
73
+ i0.ɵɵtemplate(1, TimeFilterFormComponent_div_0_div_1_Template, 7, 9, "div", 2);
74
+ i0.ɵɵtemplate(2, TimeFilterFormComponent_div_0_div_2_Template, 15, 18, "div", 0);
75
+ i0.ɵɵelementEnd();
76
+ } if (rf & 2) {
77
+ const ctx_r0 = i0.ɵɵnextContext();
78
+ i0.ɵɵadvance(1);
79
+ i0.ɵɵproperty("ngIf", !ctx_r0.isRange);
80
+ i0.ɵɵadvance(1);
81
+ i0.ɵɵproperty("ngIf", ctx_r0.isRange);
82
+ } }
83
+ function TimeFilterFormComponent_div_1_div_1_mat_option_4_Template(rf, ctx) { if (rf & 1) {
84
+ i0.ɵɵelementStart(0, "mat-option", 14);
85
+ i0.ɵɵtext(1);
86
+ i0.ɵɵelementEnd();
87
+ } if (rf & 2) {
88
+ const year_r21 = ctx.$implicit;
89
+ i0.ɵɵproperty("value", year_r21);
90
+ i0.ɵɵadvance(1);
91
+ i0.ɵɵtextInterpolate(year_r21);
92
+ } }
93
+ function TimeFilterFormComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
94
+ const _r23 = i0.ɵɵgetCurrentView();
95
+ i0.ɵɵelementStart(0, "div", 3)(1, "mat-form-field")(2, "mat-select", 12);
96
+ i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_1_div_1_Template_mat_select_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r22 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r22.year = $event); })("selectionChange", function TimeFilterFormComponent_div_1_div_1_Template_mat_select_selectionChange_2_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r24 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r24.handleYearChange($event)); });
97
+ i0.ɵɵpipe(3, "translate");
98
+ i0.ɵɵtemplate(4, TimeFilterFormComponent_div_1_div_1_mat_option_4_Template, 2, 2, "mat-option", 13);
99
+ i0.ɵɵelementEnd()()();
100
+ } if (rf & 2) {
101
+ const ctx_r18 = i0.ɵɵnextContext(2);
102
+ i0.ɵɵadvance(2);
103
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(3, 3, "igo.geo.timeFilter.date"));
104
+ i0.ɵɵproperty("ngModel", ctx_r18.year);
105
+ i0.ɵɵadvance(2);
106
+ i0.ɵɵproperty("ngForOf", ctx_r18.listYears);
107
+ } }
108
+ function TimeFilterFormComponent_div_1_div_2_mat_option_5_Template(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵelementStart(0, "mat-option", 14);
110
+ i0.ɵɵtext(1);
111
+ i0.ɵɵelementEnd();
112
+ } if (rf & 2) {
113
+ const startYear_r27 = ctx.$implicit;
114
+ i0.ɵɵproperty("value", startYear_r27);
115
+ i0.ɵɵadvance(1);
116
+ i0.ɵɵtextInterpolate(startYear_r27);
117
+ } }
118
+ function TimeFilterFormComponent_div_1_div_2_mat_option_10_Template(rf, ctx) { if (rf & 1) {
119
+ i0.ɵɵelementStart(0, "mat-option", 14);
120
+ i0.ɵɵtext(1);
121
+ i0.ɵɵelementEnd();
122
+ } if (rf & 2) {
123
+ const endYear_r28 = ctx.$implicit;
124
+ i0.ɵɵproperty("value", endYear_r28);
125
+ i0.ɵɵadvance(1);
126
+ i0.ɵɵtextInterpolate(endYear_r28);
127
+ } }
128
+ function TimeFilterFormComponent_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
129
+ const _r30 = i0.ɵɵgetCurrentView();
130
+ i0.ɵɵelementStart(0, "div")(1, "div", 8)(2, "mat-form-field")(3, "mat-select", 12);
131
+ i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_1_div_2_Template_mat_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r29 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r29.startYear = $event); })("selectionChange", function TimeFilterFormComponent_div_1_div_2_Template_mat_select_selectionChange_3_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r31 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r31.handleYearChange($event)); });
132
+ i0.ɵɵpipe(4, "translate");
133
+ i0.ɵɵtemplate(5, TimeFilterFormComponent_div_1_div_2_mat_option_5_Template, 2, 2, "mat-option", 13);
134
+ i0.ɵɵelementEnd()()();
135
+ i0.ɵɵelementStart(6, "div", 8)(7, "mat-form-field")(8, "mat-select", 12);
136
+ i0.ɵɵlistener("ngModelChange", function TimeFilterFormComponent_div_1_div_2_Template_mat_select_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r32 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r32.endYear = $event); })("selectionChange", function TimeFilterFormComponent_div_1_div_2_Template_mat_select_selectionChange_8_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r33 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r33.handleYearChange($event)); });
137
+ i0.ɵɵpipe(9, "translate");
138
+ i0.ɵɵtemplate(10, TimeFilterFormComponent_div_1_div_2_mat_option_10_Template, 2, 2, "mat-option", 13);
139
+ i0.ɵɵelementEnd()()()();
140
+ } if (rf & 2) {
141
+ const ctx_r19 = i0.ɵɵnextContext(2);
142
+ i0.ɵɵadvance(3);
143
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(4, 6, "igo.geo.timeFilter.startDate"));
144
+ i0.ɵɵproperty("ngModel", ctx_r19.startYear);
145
+ i0.ɵɵadvance(2);
146
+ i0.ɵɵproperty("ngForOf", ctx_r19.startListYears);
147
+ i0.ɵɵadvance(3);
148
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(9, 8, "igo.geo.timeFilter.endDate"));
149
+ i0.ɵɵproperty("ngModel", ctx_r19.endYear);
150
+ i0.ɵɵadvance(2);
151
+ i0.ɵɵproperty("ngForOf", ctx_r19.endListYears);
152
+ } }
153
+ function TimeFilterFormComponent_div_1_Template(rf, ctx) { if (rf & 1) {
154
+ i0.ɵɵelementStart(0, "div");
155
+ i0.ɵɵtemplate(1, TimeFilterFormComponent_div_1_div_1_Template, 5, 5, "div", 2);
156
+ i0.ɵɵtemplate(2, TimeFilterFormComponent_div_1_div_2_Template, 11, 10, "div", 0);
157
+ i0.ɵɵelementEnd();
158
+ } if (rf & 2) {
159
+ const ctx_r1 = i0.ɵɵnextContext();
160
+ i0.ɵɵadvance(1);
161
+ i0.ɵɵproperty("ngIf", !ctx_r1.isRange);
162
+ i0.ɵɵadvance(1);
163
+ i0.ɵɵproperty("ngIf", ctx_r1.isRange);
164
+ } }
165
+ function TimeFilterFormComponent_div_3_p_6_Template(rf, ctx) { if (rf & 1) {
166
+ i0.ɵɵelementStart(0, "p", 23);
167
+ i0.ɵɵtext(1);
168
+ i0.ɵɵelementEnd();
169
+ } if (rf & 2) {
170
+ const ctx_r34 = i0.ɵɵnextContext(2);
171
+ i0.ɵɵadvance(1);
172
+ i0.ɵɵtextInterpolate(ctx_r34.year);
173
+ } }
174
+ function TimeFilterFormComponent_div_3_Template(rf, ctx) { if (rf & 1) {
175
+ const _r37 = i0.ɵɵgetCurrentView();
176
+ i0.ɵɵelementStart(0, "div", 15)(1, "span");
177
+ i0.ɵɵtext(2);
178
+ i0.ɵɵelementEnd();
179
+ i0.ɵɵelementStart(3, "mat-slider", 16);
180
+ i0.ɵɵlistener("input", function TimeFilterFormComponent_div_3_Template_mat_slider_input_3_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r36 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r36.handleSliderYearChange($event)); })("change", function TimeFilterFormComponent_div_3_Template_mat_slider_change_3_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r38 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r38.handleSliderYearChange($event)); });
181
+ i0.ɵɵelementEnd();
182
+ i0.ɵɵelementStart(4, "span");
183
+ i0.ɵɵtext(5);
184
+ i0.ɵɵelementEnd();
185
+ i0.ɵɵtemplate(6, TimeFilterFormComponent_div_3_p_6_Template, 2, 1, "p", 17);
186
+ i0.ɵɵelementStart(7, "div", 18, 19)(9, "mat-slide-toggle", 20);
187
+ i0.ɵɵlistener("change", function TimeFilterFormComponent_div_3_Template_mat_slide_toggle_change_9_listener() { i0.ɵɵrestoreView(_r37); const ctx_r39 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r39.toggleFilterState()); });
188
+ i0.ɵɵpipe(10, "translate");
189
+ i0.ɵɵelementEnd();
190
+ i0.ɵɵelementStart(11, "button", 21);
191
+ i0.ɵɵlistener("click", function TimeFilterFormComponent_div_3_Template_button_click_11_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r40 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r40.playYear($event)); });
192
+ i0.ɵɵelement(12, "mat-icon", 22);
193
+ i0.ɵɵelementEnd();
194
+ i0.ɵɵelementStart(13, "button", 21);
195
+ i0.ɵɵlistener("click", function TimeFilterFormComponent_div_3_Template_button_click_13_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r41 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r41.resetFilter($event)); });
196
+ i0.ɵɵelement(14, "mat-icon", 22);
197
+ i0.ɵɵelementEnd()()();
198
+ } if (rf & 2) {
199
+ const ctx_r2 = i0.ɵɵnextContext();
200
+ i0.ɵɵadvance(2);
201
+ i0.ɵɵtextInterpolate(ctx_r2.startYear);
202
+ i0.ɵɵadvance(1);
203
+ i0.ɵɵpropertyInterpolate("step", ctx_r2.step);
204
+ i0.ɵɵproperty("min", ctx_r2.startYear)("max", ctx_r2.endYear)("value", ctx_r2.handleSliderValue())("color", ctx_r2.color)("disabled", !ctx_r2.options.enabled || !ctx_r2.layer.visible);
205
+ i0.ɵɵadvance(2);
206
+ i0.ɵɵtextInterpolate(ctx_r2.endYear);
207
+ i0.ɵɵadvance(1);
208
+ i0.ɵɵproperty("ngIf", ctx_r2.options.enabled);
209
+ i0.ɵɵadvance(3);
210
+ i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(10, 17, "igo.geo.filter.toggleFilterState"))("color", ctx_r2.color)("checked", ctx_r2.options.enabled)("disabled", !ctx_r2.layer.visible);
211
+ i0.ɵɵadvance(2);
212
+ i0.ɵɵproperty("disabled", !ctx_r2.options.enabled || !ctx_r2.layer.visible);
213
+ i0.ɵɵadvance(1);
214
+ i0.ɵɵpropertyInterpolate("svgIcon", ctx_r2.playIcon);
215
+ i0.ɵɵadvance(1);
216
+ i0.ɵɵproperty("disabled", !ctx_r2.options.enabled || !ctx_r2.layer.visible);
217
+ i0.ɵɵadvance(1);
218
+ i0.ɵɵpropertyInterpolate("svgIcon", ctx_r2.resetIcon);
219
+ } }
220
+ function TimeFilterFormComponent_div_4_Template(rf, ctx) { if (rf & 1) {
221
+ const _r43 = i0.ɵɵgetCurrentView();
222
+ i0.ɵɵelementStart(0, "div", 3)(1, "mat-slider", 24);
223
+ i0.ɵɵlistener("input", function TimeFilterFormComponent_div_4_Template_mat_slider_input_1_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r42 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r42.handleSliderDateChange($event)); })("selectionChange", function TimeFilterFormComponent_div_4_Template_mat_slider_selectionChange_1_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r44 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r44.handleSliderDateChange($event)); });
224
+ i0.ɵɵelementEnd();
225
+ i0.ɵɵelementStart(2, "p", 23);
226
+ i0.ɵɵtext(3);
227
+ i0.ɵɵelementEnd();
228
+ i0.ɵɵelementStart(4, "button", 25);
229
+ i0.ɵɵlistener("click", function TimeFilterFormComponent_div_4_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r45 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r45.playFilter($event)); });
230
+ i0.ɵɵelement(5, "mat-icon", 22);
231
+ i0.ɵɵelementEnd()();
232
+ } if (rf & 2) {
233
+ const ctx_r3 = i0.ɵɵnextContext();
234
+ i0.ɵɵadvance(1);
235
+ i0.ɵɵpropertyInterpolate("step", ctx_r3.step);
236
+ i0.ɵɵproperty("min", ctx_r3.dateToNumber(ctx_r3.min))("max", ctx_r3.dateToNumber(ctx_r3.max))("value", ctx_r3.handleSliderValue());
237
+ i0.ɵɵadvance(2);
238
+ i0.ɵɵtextInterpolate(ctx_r3.handleSliderTooltip());
239
+ i0.ɵɵadvance(2);
240
+ i0.ɵɵpropertyInterpolate("svgIcon", ctx_r3.playIcon);
241
+ } }
242
+ export class TimeFilterFormComponent {
243
+ constructor(dateAdapter) {
244
+ this.dateAdapter = dateAdapter;
245
+ this.color = 'primary';
246
+ this.listYears = [];
247
+ this.startListYears = [];
248
+ this.endListYears = [];
249
+ this.playIcon = 'play-circle';
250
+ this.resetIcon = 'replay';
251
+ this.change = new EventEmitter();
252
+ this.yearChange = new EventEmitter();
253
+ this.dateAdapter.setLocale('fr');
254
+ }
255
+ set currentValue(value) {
256
+ if (value) {
257
+ if (this.type !== TimeFilterType.YEAR) {
258
+ const valueArray = value.split('/');
259
+ if (valueArray.length > 0) {
260
+ const startDate = new Date(valueArray[0]);
261
+ const endDate = new Date(valueArray[1]);
262
+ if (!isNaN(startDate.valueOf())) {
263
+ this.startDate = startDate;
264
+ }
265
+ if (!isNaN(endDate.valueOf())) {
266
+ this.endDate = endDate;
267
+ }
268
+ }
269
+ }
270
+ }
271
+ }
272
+ get type() {
273
+ return this.options.type === undefined
274
+ ? TimeFilterType.DATE
275
+ : this.options.type;
276
+ }
277
+ get isRange() {
278
+ return this.options.range === undefined ||
279
+ this.options.style === TimeFilterStyle.SLIDER
280
+ ? false
281
+ : this.options.range;
282
+ }
283
+ get style() {
284
+ return this.options.style === undefined
285
+ ? TimeFilterStyle.SLIDER
286
+ : this.options.style;
287
+ }
288
+ get step() {
289
+ let step = 10800000;
290
+ if (this.options.step === undefined) {
291
+ switch (this.type) {
292
+ case TimeFilterType.DATE:
293
+ case TimeFilterType.DATETIME:
294
+ step = 10800000;
295
+ break;
296
+ case TimeFilterType.TIME:
297
+ step = 3600000;
298
+ break;
299
+ case TimeFilterType.YEAR:
300
+ step = 31536000000;
301
+ break;
302
+ default:
303
+ step = 10800000;
304
+ }
305
+ }
306
+ else {
307
+ step = this.getStepDefinition(this.options.step);
308
+ }
309
+ return step;
310
+ }
311
+ get timeInterval() {
312
+ return this.options.timeInterval === undefined
313
+ ? 2000
314
+ : this.options.timeInterval;
315
+ }
316
+ get min() {
317
+ if (this.options.min) {
318
+ const min = new Date(this.options.min);
319
+ return new Date(min.getTime() + min.getTimezoneOffset() * 60000);
320
+ }
321
+ else {
322
+ return undefined;
323
+ }
324
+ }
325
+ get max() {
326
+ if (this.options.max) {
327
+ const max = new Date(this.options.max);
328
+ return new Date(max.getTime() + max.getTimezoneOffset() * 60000);
329
+ }
330
+ else {
331
+ return undefined;
332
+ }
333
+ }
334
+ get is() {
335
+ return this.options.range === undefined ? false : this.options.range;
336
+ }
337
+ ngOnInit() {
338
+ if (this.startDate === undefined) {
339
+ this.startDate = new Date(this.min);
340
+ }
341
+ if (this.endDate === undefined) {
342
+ this.endDate = new Date(this.max);
343
+ }
344
+ if (this.startYear === undefined) {
345
+ this.startYear = new Date(this.startDate).getFullYear();
346
+ this.initStartYear = this.startYear;
347
+ }
348
+ if (this.endYear === undefined) {
349
+ this.endYear = new Date(this.endDate).getFullYear();
350
+ this.initEndYear = this.endYear;
351
+ }
352
+ if (!this.isRange) {
353
+ for (let i = this.startYear; i <= this.endYear + 1; i++) {
354
+ this.listYears.push(i);
355
+ }
356
+ }
357
+ else {
358
+ for (let i = this.startYear; i < this.endYear; i++) {
359
+ this.startListYears.push(i);
360
+ }
361
+ for (let i = this.startYear + 1; i <= this.endYear; i++) {
362
+ this.endListYears.push(i);
363
+ }
364
+ }
365
+ this.options.enabled =
366
+ this.options.enabled === undefined ? true : this.options.enabled;
367
+ this.checkFilterValue();
368
+ if (this.options.enabled) {
369
+ if (!this.isRange && this.style === 'slider' && this.type === 'year') {
370
+ this.yearChange.emit(this.year);
371
+ }
372
+ }
373
+ else {
374
+ this.storeCurrentFilterValue();
375
+ this.yearChange.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
376
+ }
377
+ }
378
+ storeCurrentFilterValue() {
379
+ // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
380
+ if (!this.isRange &&
381
+ this.style === TimeFilterStyle.SLIDER &&
382
+ this.type === TimeFilterType.YEAR) {
383
+ this.options.value = this.year.toString();
384
+ }
385
+ }
386
+ checkFilterValue() {
387
+ const olSource = this.layer.dataSource.ol;
388
+ const timeFromWms = olSource.getParams().TIME;
389
+ if (!this.isRange &&
390
+ this.style === TimeFilterStyle.SLIDER &&
391
+ this.type === TimeFilterType.YEAR) {
392
+ if (timeFromWms) {
393
+ this.year = new Date(timeFromWms.toString()).getFullYear() + 1;
394
+ }
395
+ else if (this.options.value) {
396
+ this.year = new Date(this.options.value.toString()).getFullYear() + 1;
397
+ }
398
+ else {
399
+ this.year = new Date(this.min).getFullYear() + 1;
400
+ }
401
+ }
402
+ else if (this.isRange &&
403
+ this.style === TimeFilterStyle.CALENDAR &&
404
+ this.type === TimeFilterType.YEAR) {
405
+ if (timeFromWms) {
406
+ this.startYear = parseInt(timeFromWms.substr(0, 4), 10);
407
+ this.endYear = parseInt(timeFromWms.substr(5, 4), 10);
408
+ const newStartListYears = [];
409
+ const newEndListYears = [];
410
+ for (let i = this.initStartYear; i < this.endYear; i++) {
411
+ newStartListYears.push(i);
412
+ }
413
+ for (let i = this.startYear + 1; i <= this.initEndYear; i++) {
414
+ newEndListYears.push(i);
415
+ }
416
+ this.startListYears = newStartListYears;
417
+ this.endListYears = newEndListYears;
418
+ }
419
+ }
420
+ // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
421
+ }
422
+ handleDateChange(event) {
423
+ this.setupDateOutput();
424
+ this.applyTypeChange();
425
+ // Only if is range, use 2 dates to make the range
426
+ if (this.isRange) {
427
+ this.change.emit([this.startDate, this.endDate]);
428
+ }
429
+ else {
430
+ this.change.emit(this.startDate);
431
+ }
432
+ }
433
+ handleYearChange(event) {
434
+ if (this.isRange) {
435
+ this.endListYears = [];
436
+ for (let i = this.startYear + 1; i <= this.initEndYear; i++) {
437
+ this.endListYears.push(i);
438
+ }
439
+ this.startListYears = [];
440
+ for (let i = this.initStartYear + 1; i < this.endYear; i++) {
441
+ this.startListYears.push(i);
442
+ }
443
+ this.yearChange.emit([this.startYear, this.endYear]);
444
+ }
445
+ else {
446
+ this.yearChange.emit(this.year);
447
+ }
448
+ }
449
+ handleListYearChange(event) {
450
+ this.handleYearChange([this.startYear, this.endYear]);
451
+ }
452
+ handleListYearStartChange(event) {
453
+ this.change.emit([this.startDate, this.endDate]);
454
+ }
455
+ dateToNumber(date) {
456
+ let newDate;
457
+ if (date) {
458
+ newDate = new Date(date);
459
+ }
460
+ else {
461
+ newDate = new Date(this.min);
462
+ }
463
+ return newDate.getTime();
464
+ }
465
+ setSliderThumbLabel(label) {
466
+ const thumbLabel = this.findThumbLabel(this.mySlider._elementRef.nativeElement.childNodes);
467
+ if (thumbLabel) {
468
+ thumbLabel.textContent = label;
469
+ }
470
+ }
471
+ findThumbLabel(test) {
472
+ let thumbLabel;
473
+ test.forEach(value => {
474
+ if (value.className === 'mat-slider-thumb-label-text') {
475
+ thumbLabel = value;
476
+ }
477
+ if (value.children.length > 0 && !thumbLabel) {
478
+ thumbLabel = this.findThumbLabel(value.childNodes);
479
+ }
480
+ }, this);
481
+ return thumbLabel;
482
+ }
483
+ toggleFilterState() {
484
+ this.options.enabled = !this.options.enabled;
485
+ if (this.options.enabled) {
486
+ if (!this.isRange &&
487
+ TimeFilterStyle.SLIDER &&
488
+ this.type === TimeFilterType.YEAR) {
489
+ this.yearChange.emit(this.year);
490
+ }
491
+ }
492
+ else {
493
+ this.stopFilter();
494
+ this.storeCurrentFilterValue();
495
+ this.change.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
496
+ }
497
+ }
498
+ resetFilter(event) {
499
+ this.date = new Date(this.min);
500
+ this.year = this.date.getFullYear();
501
+ if (!this.isRange &&
502
+ TimeFilterStyle.SLIDER &&
503
+ this.type === TimeFilterType.YEAR) {
504
+ this.yearChange.emit(this.year);
505
+ }
506
+ else {
507
+ this.setupDateOutput();
508
+ this.change.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
509
+ }
510
+ }
511
+ playFilter(event) {
512
+ if (this.interval) {
513
+ this.stopFilter();
514
+ }
515
+ else {
516
+ this.playIcon = 'pause-circle';
517
+ this.interval = setInterval(that => {
518
+ let newMinDateNumber;
519
+ const maxDateNumber = new Date(that.max);
520
+ newMinDateNumber =
521
+ that.date === undefined ? that.min.getTime() : that.date.getTime();
522
+ newMinDateNumber += that.mySlider.step;
523
+ that.date = new Date(newMinDateNumber);
524
+ if (newMinDateNumber > maxDateNumber.getTime()) {
525
+ that.stopFilter();
526
+ }
527
+ that.handleDateChange({ value: that.date, date: that.date });
528
+ }, this.timeInterval, this);
529
+ }
530
+ }
531
+ playYear(event) {
532
+ if (this.year + this.mySlider.step >
533
+ this.max.getFullYear() + this.mySlider.step) {
534
+ this.stopFilter();
535
+ this.resetFilter(event);
536
+ }
537
+ if (this.interval) {
538
+ this.stopFilter();
539
+ }
540
+ else {
541
+ this.playIcon = 'pause-circle';
542
+ this.interval = setInterval(() => {
543
+ if ((this.year + this.mySlider.step) > this.max.getFullYear()) {
544
+ this.stopFilter();
545
+ }
546
+ else {
547
+ this.year = this.year + this.mySlider.step;
548
+ }
549
+ this.yearChange.emit(this.year);
550
+ }, this.timeInterval, this);
551
+ }
552
+ }
553
+ stopFilter() {
554
+ if (this.interval) {
555
+ clearInterval(this.interval);
556
+ }
557
+ this.interval = undefined;
558
+ this.playIcon = 'play-circle';
559
+ }
560
+ handleSliderDateChange(event) {
561
+ this.date = new Date(event.value);
562
+ this.setSliderThumbLabel(this.handleSliderTooltip());
563
+ this.handleDateChange(event);
564
+ }
565
+ handleSliderYearChange(event) {
566
+ this.year = event.value;
567
+ this.yearChange.emit(this.year);
568
+ }
569
+ handleSliderValue() {
570
+ if (this.options.current === true || !this.min) {
571
+ const currentDate = new Date();
572
+ this.date = this.getRoundedDate(currentDate);
573
+ }
574
+ if (this.type === TimeFilterType.YEAR) {
575
+ return this.year;
576
+ }
577
+ else {
578
+ return this.date === undefined ? this.min.getTime() : this.date.getTime();
579
+ }
580
+ }
581
+ handleSliderTooltip() {
582
+ let label;
583
+ switch (this.type) {
584
+ case TimeFilterType.DATE:
585
+ label =
586
+ this.date === undefined
587
+ ? this.min.toDateString()
588
+ : this.date.toDateString();
589
+ break;
590
+ case TimeFilterType.TIME:
591
+ label =
592
+ this.date === undefined
593
+ ? this.min.toTimeString()
594
+ : this.date.toTimeString();
595
+ break;
596
+ // datetime
597
+ default:
598
+ label =
599
+ this.date === undefined
600
+ ? this.min.toUTCString()
601
+ : this.date.toUTCString();
602
+ break;
603
+ }
604
+ return label;
605
+ }
606
+ setupDateOutput() {
607
+ if (this.style === TimeFilterStyle.SLIDER) {
608
+ this.startDate = new Date(this.date);
609
+ this.startDate.setSeconds(-(this.step / 1000));
610
+ this.endDate = new Date(this.startDate);
611
+ this.endDate.setSeconds(this.step / 1000);
612
+ }
613
+ else if (!this.isRange && !!this.date) {
614
+ this.endDate = new Date(this.date);
615
+ this.startDate = new Date(this.date);
616
+ }
617
+ else if (this.isRange && (!!this.date || !this.date)) {
618
+ this.startDate =
619
+ this.startDate === undefined ? new Date(this.min) : this.startDate;
620
+ this.endDate =
621
+ this.endDate === undefined ? new Date(this.max) : this.endDate;
622
+ }
623
+ else if (!this.date) {
624
+ this.startDate =
625
+ this.startDate === undefined ? new Date(this.min) : this.startDate;
626
+ this.endDate =
627
+ this.endDate === undefined ? new Date(this.max) : this.endDate;
628
+ }
629
+ }
630
+ applyTypeChange() {
631
+ switch (this.type) {
632
+ case TimeFilterType.DATE:
633
+ if (this.startDate !== undefined || this.endDate !== undefined) {
634
+ this.startDate.setHours(0);
635
+ this.startDate.setMinutes(0);
636
+ this.startDate.setSeconds(0);
637
+ this.endDate.setHours(23);
638
+ this.endDate.setMinutes(59);
639
+ this.endDate.setSeconds(59);
640
+ }
641
+ break;
642
+ case TimeFilterType.TIME:
643
+ if (this.style === TimeFilterStyle.CALENDAR) {
644
+ if (this.startDate.getDay() !== this.min.getDay()) {
645
+ const selectedHour = this.startDate.getHours();
646
+ const selectedMinute = this.startDate.getMinutes();
647
+ this.startDate = this.min;
648
+ this.startDate.setHours(selectedHour);
649
+ this.startDate.setMinutes(selectedMinute);
650
+ }
651
+ if (this.endDate.getDay() !== this.min.getDay()) {
652
+ const selectedHour = this.endDate.getHours();
653
+ const selectedMinute = this.endDate.getMinutes();
654
+ this.endDate = this.min;
655
+ this.endDate.setHours(selectedHour);
656
+ this.endDate.setMinutes(selectedMinute);
657
+ }
658
+ }
659
+ if (!this.isRange && this.step > 60 * 60 * 1000) {
660
+ this.startDate.setMinutes(0);
661
+ this.startDate.setSeconds(0);
662
+ this.endDate.setMinutes(59);
663
+ this.endDate.setSeconds(59);
664
+ }
665
+ break;
666
+ // datetime
667
+ default:
668
+ // do nothing
669
+ }
670
+ }
671
+ getRangeMinDate() {
672
+ return this.startDate === undefined ? this.min : this.startDate;
673
+ }
674
+ getRangeMaxDate() {
675
+ return this.endDate === undefined ? this.max : this.endDate;
676
+ }
677
+ /**
678
+ * Round date at a certain time, 10 minutes by Default
679
+ * @param date - Date to Round
680
+ * @param atMinute - round to closest 'atMinute' minute, rounded 10 by default
681
+ * @return the rounded date
682
+ */
683
+ getRoundedDate(date, atMinute = 10) {
684
+ const coeff = 1000 * 60 * atMinute;
685
+ return new Date(Math.round(date.getTime() / coeff) * coeff);
686
+ }
687
+ /**
688
+ * Get the step (period) definition from the layer dimension tag
689
+ * @param step The step as ISO 8601 example: PT10M for 10 Minutes
690
+ * @return the duration in milliseconds
691
+ */
692
+ getStepDefinition(step) {
693
+ return moment.duration(step).asMilliseconds();
694
+ }
695
+ }
696
+ TimeFilterFormComponent.ɵfac = function TimeFilterFormComponent_Factory(t) { return new (t || TimeFilterFormComponent)(i0.ɵɵdirectiveInject(i1.DateAdapter)); };
697
+ TimeFilterFormComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TimeFilterFormComponent, selectors: [["igo-time-filter-form"]], viewQuery: function TimeFilterFormComponent_Query(rf, ctx) { if (rf & 1) {
698
+ i0.ɵɵviewQuery(MatSlider, 5);
699
+ } if (rf & 2) {
700
+ let _t;
701
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.mySlider = _t.first);
702
+ } }, inputs: { layer: "layer", options: "options", currentValue: "currentValue" }, outputs: { change: "change", yearChange: "yearChange" }, decls: 5, vars: 4, consts: [[4, "ngIf"], ["class", "igo-col igo-col-100 igo-col-100-m mat-typography", 4, "ngIf"], ["class", "igo-col igo-col-100 igo-col-100-m", 4, "ngIf"], [1, "igo-col", "igo-col-100", "igo-col-100-m"], ["matSuffix", "", 1, "time-filter-mat-datetimepicker-toggle", 3, "for"], ["openOnFocus", "true", "timeInterval", "5", 3, "type"], ["datetimePicker", ""], ["matInput", "", "autocomplete", "false", "readonly", "readonly", 3, "placeholder", "matDatetimepicker", "ngModel", "min", "max", "ngModelChange", "dateChange"], [1, "igo-col", "igo-col-100"], ["minDatetimePicker", ""], ["matInput", "", "autocomplete", "false", "readonly", "readonly", 3, "placeholder", "matDatetimepicker", "ngModel", "min", "max", "ngModelChange", "input", "dateChange"], ["maxDatetimePicker", ""], [3, "placeholder", "ngModel", "ngModelChange", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], [1, "igo-col", "igo-col-100", "igo-col-100-m", "mat-typography"], ["id", "time-slider", "tickInterval", "auto", "thumbLabel", "", 3, "step", "min", "max", "value", "color", "disabled", "input", "change"], ["class", "date-below", 4, "ngIf"], [1, "igo-layer-actions-container"], ["actions", ""], ["tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "color", "checked", "disabled", "change"], ["mat-icon-button", "", "color", "primary", 3, "disabled", "click"], [3, "svgIcon"], [1, "date-below"], ["id", "time-slider", "tickInterval", "auto", "thumbLabel", "", 3, "step", "min", "max", "value", "input", "selectionChange"], ["mat-icon-button", "", "color", "primary", 3, "click"]], template: function TimeFilterFormComponent_Template(rf, ctx) { if (rf & 1) {
703
+ i0.ɵɵtemplate(0, TimeFilterFormComponent_div_0_Template, 3, 2, "div", 0);
704
+ i0.ɵɵtemplate(1, TimeFilterFormComponent_div_1_Template, 3, 2, "div", 0);
705
+ i0.ɵɵelement(2, "br");
706
+ i0.ɵɵtemplate(3, TimeFilterFormComponent_div_3_Template, 15, 19, "div", 1);
707
+ i0.ɵɵtemplate(4, TimeFilterFormComponent_div_4_Template, 6, 6, "div", 2);
708
+ } if (rf & 2) {
709
+ i0.ɵɵproperty("ngIf", ctx.style === "calendar" && ctx.type !== "year");
710
+ i0.ɵɵadvance(1);
711
+ i0.ɵɵproperty("ngIf", ctx.style === "calendar" && ctx.type === "year");
712
+ i0.ɵɵadvance(2);
713
+ i0.ɵɵproperty("ngIf", !ctx.isRange && ctx.style === "slider" && ctx.type === "year");
714
+ i0.ɵɵadvance(1);
715
+ i0.ɵɵproperty("ngIf", ctx.style === "slider" && ctx.type !== "year");
716
+ } }, dependencies: [i2.NgForOf, i2.NgIf, i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgModel, i1.MatOption, i4.MatIcon, i5.MatButton, i6.MatSlider, i7.MatSlideToggle, i8.MatFormField, i8.MatSuffix, i9.MatInput, i10.MatSelect, i11.MatTooltip, i12.MatDatetimepickerComponent, i12.MatDatetimepickerToggleComponent, i12.MatDatetimepickerInputDirective, i13.TranslatePipe], styles: [".igo-layer-filters-container[_ngcontent-%COMP%]{padding-left:5px}mat-slider[_ngcontent-%COMP%] div.mat-slider-thumb-label{width:32px;height:32px;margin:0 auto}mat-slider[_ngcontent-%COMP%] span.mat-slider-thumb-label-text{font-size:10px}#time-slider[_ngcontent-%COMP%]{width:70%;margin:0 auto}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){#time-slider[_ngcontent-%COMP%]{width:60%;margin:0 auto}}.date-below[_ngcontent-%COMP%]{margin:0}mat-form-field[_ngcontent-%COMP%]{text-align:center}mat-datetimepicker-toggle[_ngcontent-%COMP%] .mat-icon{padding-bottom:30px}.igo-layer-actions-container[_ngcontent-%COMP%] > .mat-slide-toggle[_ngcontent-%COMP%]{vertical-align:middle}.time-filter-mat-datetimepicker-toggle[_ngcontent-%COMP%] .mat-icon{width:auto}"] });
717
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TimeFilterFormComponent, [{
718
+ type: Component,
719
+ args: [{ selector: 'igo-time-filter-form', template: "<div *ngIf=\"style === 'calendar' && type !=='year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-datetimepicker-toggle class=\"time-filter-mat-datetimepicker-toggle\" [for]=\"datetimePicker\" matSuffix></mat-datetimepicker-toggle>\n <mat-datetimepicker #datetimePicker type=\"{{type}}\" openOnFocus=\"true\" timeInterval=\"5\"></mat-datetimepicker>\n <input matInput autocomplete=\"false\"\n placeholder=\"{{'igo.geo.timeFilter.date' | translate}}\"\n [matDatetimepicker]=\"datetimePicker\"\n [(ngModel)]=\"date\"\n [min]=\"min\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange($event)\">\n </mat-form-field>\n\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle class=\"time-filter-mat-datetimepicker-toggle\" [for]=\"minDatetimePicker\" matSuffix></mat-datetimepicker-toggle>\n <mat-datetimepicker #minDatetimePicker type=\"{{type}}\" openOnFocus=\"true\" timeInterval=\"5\"></mat-datetimepicker>\n <input matInput autocomplete=\"false\"\n placeholder=\"{{'igo.geo.timeFilter.startDate' | translate}}\"\n [matDatetimepicker]=\"minDatetimePicker\"\n [(ngModel)]=\"startDate\"\n [min]=\"min\"\n [max]=\"getRangeMaxDate()\"\n readonly=\"readonly\"\n (input)=\"startDate\"\n (dateChange)=\"handleDateChange($event)\">\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle class=\"time-filter-mat-datetimepicker-toggle\" [for]=\"maxDatetimePicker\" matSuffix></mat-datetimepicker-toggle>\n <mat-datetimepicker #maxDatetimePicker type=\"{{type}}\" openOnFocus=\"true\" timeInterval=\"5\"></mat-datetimepicker>\n <input matInput autocomplete=\"false\"\n placeholder=\"{{'igo.geo.timeFilter.endDate' | translate}}\"\n [matDatetimepicker]=\"maxDatetimePicker\"\n [(ngModel)]=\"endDate\"\n [min]=\"getRangeMinDate()\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange($event)\">\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"style === 'calendar' && type ==='year'\">\n\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-select placeholder=\"{{'igo.geo.timeFilter.date' | translate}}\" [(ngModel)]=\"year\" (selectionChange)=\"handleYearChange($event)\">\n <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{year}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select placeholder=\"{{'igo.geo.timeFilter.startDate' | translate}}\" [(ngModel)]=\"startYear\" (selectionChange)=\"handleYearChange($event)\">\n <mat-option [value]=\"startYear\" *ngFor=\"let startYear of startListYears\">{{startYear}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select placeholder=\"{{'igo.geo.timeFilter.endDate' | translate}}\" [(ngModel)]=\"endYear\" (selectionChange)=\"handleYearChange($event)\">\n <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{endYear}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n</div>\n\n\n <br>\n <div *ngIf=\"!isRange && style === 'slider' && type === 'year'\" class=\"igo-col igo-col-100 igo-col-100-m mat-typography\">\n <span>{{startYear}}</span>\n <mat-slider\n id=\"time-slider\"\n tickInterval=\"auto\"\n step=\"{{step}}\"\n [min]=\"startYear\"\n [max]=\"endYear\"\n [value]=\"handleSliderValue()\"\n [color]=\"color\"\n thumbLabel\n (input)=\"handleSliderYearChange($event)\"\n (change)=\"handleSliderYearChange($event)\"\n [disabled]= \"!options.enabled || !layer.visible\">\n </mat-slider>\n <span>{{endYear}}</span>\n <p *ngIf= \"options.enabled\" class=\"date-below\">{{year}}</p>\n <div #actions class=\"igo-layer-actions-container\">\n <mat-slide-toggle (change)=\"toggleFilterState()\" tooltip-position=\"below\" matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" [color]=\"color\" [checked]=\"options.enabled\"\n [disabled]=\"!layer.visible\">\n </mat-slide-toggle>\n <button [disabled]= \"!options.enabled || !layer.visible\" mat-icon-button color=\"primary\" (click)=\"playYear($event)\">\n <mat-icon svgIcon=\"{{playIcon}}\"></mat-icon>\n </button>\n <button [disabled]=\"!options.enabled || !layer.visible\" mat-icon-button color=\"primary\" (click)=\"resetFilter($event)\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n </div>\n </div>\n\n<div *ngIf=\"style === 'slider' && type !== 'year'\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-slider\n id=\"time-slider\"\n tickInterval=\"auto\"\n step=\"{{step}}\"\n [min]=\"dateToNumber(min)\"\n [max]=\"dateToNumber(max)\"\n [value]=\"handleSliderValue()\"\n thumbLabel\n (input)=\"handleSliderDateChange($event)\"\n (selectionChange)=\"handleSliderDateChange($event)\">\n </mat-slider>\n <p class=\"date-below\">{{handleSliderTooltip()}}</p>\n <button mat-icon-button color=\"primary\" (click)=\"playFilter($event)\">\n <mat-icon svgIcon=\"{{playIcon}}\"></mat-icon>\n </button>\n</div>\n", styles: [".igo-layer-filters-container{padding-left:5px}mat-slider ::ng-deep div.mat-slider-thumb-label{width:32px;height:32px;margin:0 auto}mat-slider ::ng-deep span.mat-slider-thumb-label-text{font-size:10px}#time-slider{width:70%;margin:0 auto}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){#time-slider{width:60%;margin:0 auto}}.date-below{margin:0}mat-form-field{text-align:center}mat-datetimepicker-toggle ::ng-deep .mat-icon{padding-bottom:30px}.igo-layer-actions-container>.mat-slide-toggle{vertical-align:middle}.time-filter-mat-datetimepicker-toggle ::ng-deep .mat-icon{width:auto}\n"] }]
720
+ }], function () { return [{ type: i1.DateAdapter }]; }, { layer: [{
721
+ type: Input
722
+ }], options: [{
723
+ type: Input
724
+ }], currentValue: [{
725
+ type: Input
726
+ }], change: [{
727
+ type: Output
728
+ }], yearChange: [{
729
+ type: Output
730
+ }], mySlider: [{
731
+ type: ViewChild,
732
+ args: [MatSlider]
733
+ }] }); })();
734
734
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1maWx0ZXItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvdGltZS1maWx0ZXItZm9ybS90aW1lLWZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci90aW1lLWZpbHRlci1mb3JtL3RpbWUtZmlsdGVyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDZDNFLDhCQUFnRSxxQkFBQTtJQUU1RCwrQ0FBc0ksK0JBQUE7SUFFdEksZ0NBTzBDO0lBSnhDLHdPQUFrQiw2S0FJSixlQUFBLCtCQUF3QixDQUFBLElBSnBCOztJQUhwQixpQkFPMEMsRUFBQSxFQUFBOzs7O0lBVCtCLGVBQXNCO0lBQXRCLHlCQUFzQjtJQUMzRCxlQUFlO0lBQWYsNkNBQWU7SUFFakQsZUFBdUQ7SUFBdkQsd0ZBQXVEO0lBQ3ZELHVDQUFvQyx3QkFBQSxtQkFBQSxtQkFBQTs7OztJQVUxQywyQkFBcUIsYUFBQSxxQkFBQTtJQUdmLCtDQUF5SSwrQkFBQTtJQUV6SSxpQ0FRMEM7SUFMeEMsZ1BBQXVCLG9NQUFBLCtLQUtULGVBQUEsZ0NBQXdCLENBQUEsSUFMZjs7SUFIekIsaUJBUTBDLEVBQUEsRUFBQTtJQUk5Qyw4QkFB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IE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0U2xpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCBvbFNvdXJjZUltYWdlV01TIGZyb20gJ29sL3NvdXJjZS9JbWFnZVdNUyc7XG5cbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllcic7XG5pbXBvcnQgeyBUaW1lRmlsdGVyT3B0aW9ucyB9IGZyb20gJy4uL3NoYXJlZC90aW1lLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGltZUZpbHRlclR5cGUsIFRpbWVGaWx0ZXJTdHlsZSB9IGZyb20gJy4uL3NoYXJlZC90aW1lLWZpbHRlci5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLXRpbWUtZmlsdGVyLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGltZS1maWx0ZXItZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RpbWUtZmlsdGVyLWZvcm0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lRmlsdGVyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGxheWVyOiBMYXllcjtcblxuICBASW5wdXQoKSBvcHRpb25zOiBUaW1lRmlsdGVyT3B0aW9ucztcblxuICBwdWJsaWMgY29sb3IgPSAncHJpbWFyeSc7XG4gIHB1YmxpYyBkYXRlOiBEYXRlO1xuICBwdWJsaWMgc3RhcnREYXRlOiBEYXRlO1xuICBwdWJsaWMgZW5kRGF0ZTogRGF0ZTtcbiAgcHVibGljIHllYXI6IGFueTtcbiAgcHVibGljIHN0YXJ0WWVhcjogYW55O1xuICBwdWJsaWMgZW5kWWVhcjogYW55O1xuICBwdWJsaWMgaW5pdFN0YXJ0WWVhcjogYW55O1xuICBwdWJsaWMgaW5pdEVuZFllYXI6IGFueTtcbiAgcHVibGljIGxpc3RZZWFyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwdWJsaWMgc3RhcnRMaXN0WWVhcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHVibGljIGVuZExpc3RZZWFyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjdXJyZW50VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gVGltZUZpbHRlclR5cGUuWUVBUikge1xuICAgICAgICBjb25zdCB2YWx1ZUFycmF5ID0gdmFsdWUuc3BsaXQoJy8nKTtcbiAgICAgICAgaWYgKHZhbHVlQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHZhbHVlQXJyYXlbMF0pO1xuICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZSh2YWx1ZUFycmF5WzFdKTtcbiAgICAgICAgICBpZiAoIWlzTmFOKHN0YXJ0RGF0ZS52YWx1ZU9mKCkpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFpc05hTihlbmREYXRlLnZhbHVlT2YoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IGVuZERhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGludGVydmFsOiBhbnk7XG4gIHB1YmxpYyBwbGF5SWNvbiA9ICdwbGF5LWNpcmNsZSc7XG4gIHB1YmxpYyByZXNldEljb24gPSAncmVwbGF5JztcblxuICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IFtEYXRlLCBEYXRlXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKVxuICB5ZWFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoTWF0U2xpZGVyKSBteVNsaWRlcjtcblxuICBnZXQgdHlwZSgpOiBUaW1lRmlsdGVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50eXBlID09PSB1bmRlZmluZWRcbiAgICAgID8gVGltZUZpbHRlclR5cGUuREFURVxuICAgICAgOiB0aGlzLm9wdGlvbnMudHlwZTtcbiAgfVxuXG4gIGdldCBpc1JhbmdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmFuZ2UgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5vcHRpb25zLnN0eWxlID09PSBUaW1lRmlsdGVyU3R5bGUuU0xJREVSXG4gICAgICA/IGZhbHNlXG4gICAgICA6IHRoaXMub3B0aW9ucy5yYW5nZTtcbiAgfVxuXG4gIGdldCBzdHlsZSgpOiBUaW1lRmlsdGVyU3R5bGUge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3R5bGUgPT09IHVuZGVmaW5lZFxuICAgICAgPyBUaW1lRmlsdGVyU3R5bGUuU0xJREVSXG4gICAgICA6IHRoaXMub3B0aW9ucy5zdHlsZTtcbiAgfVxuXG4gIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgbGV0IHN0ZXAgPSAxMDgwMDAwMDtcbiAgICBpZiAodGhpcy5vcHRpb25zLnN0ZXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5EQVRFOlxuICAgICAgICBjYXNlIFRpbWVGaWx0ZXJUeXBlLkRBVEVUSU1FOlxuICAgICAgICAgIHN0ZXAgPSAxMDgwMDAwMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5USU1FOlxuICAgICAgICAgIHN0ZXAgPSAzNjAwMDAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRpbWVGaWx0ZXJUeXBlLllFQVI6XG4gICAgICAgICAgc3RlcCA9IDMxNTM2MDAwMDAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0ZXAgPSAxMDgwMDAwMDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RlcCA9IHRoaXMuZ2V0U3RlcERlZmluaXRpb24odGhpcy5vcHRpb25zLnN0ZXApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGVwO1xuICB9XG5cbiAgZ2V0IHRpbWVJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGltZUludGVydmFsID09PSB1bmRlZmluZWRcbiAgICAgID8gMjAwMFxuICAgICAgOiB0aGlzLm9wdGlvbnMudGltZUludGVydmFsO1xuICB9XG5cbiAgZ2V0IG1pbigpOiBEYXRlIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm1pbikge1xuICAgICAgY29uc3QgbWluID0gbmV3IERhdGUodGhpcy5vcHRpb25zLm1pbik7XG4gICAgICByZXR1cm4gbmV3IERhdGUobWluLmdldFRpbWUoKSArIG1pbi5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtYXgoKTogRGF0ZSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXgpIHtcbiAgICAgIGNvbnN0IG1heCA9IG5ldyBEYXRlKHRoaXMub3B0aW9ucy5tYXgpO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKG1heC5nZXRUaW1lKCkgKyBtYXguZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBnZXQgaXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yYW5nZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLm9wdGlvbnMucmFuZ2U7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEYXRlPikge1xuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKCdmcicpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhcnREYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gbmV3IERhdGUodGhpcy5taW4pO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbmREYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IG5ldyBEYXRlKHRoaXMubWF4KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhcnRZZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3RhcnRZZWFyID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUpLmdldEZ1bGxZZWFyKCk7XG4gICAgICB0aGlzLmluaXRTdGFydFllYXIgPSB0aGlzLnN0YXJ0WWVhcjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5kWWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVuZFllYXIgPSBuZXcgRGF0ZSh0aGlzLmVuZERhdGUpLmdldEZ1bGxZZWFyKCk7XG4gICAgICB0aGlzLmluaXRFbmRZZWFyID0gdGhpcy5lbmRZZWFyO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1JhbmdlKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFydFllYXI7IGkgPD0gdGhpcy5lbmRZZWFyICsgMTsgaSsrKSB7XG4gICAgICAgIHRoaXMubGlzdFllYXJzLnB1c2goaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YXJ0WWVhcjsgaSA8IHRoaXMuZW5kWWVhcjsgaSsrKSB7XG4gICAgICAgIHRoaXMuc3RhcnRMaXN0WWVhcnMucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YXJ0WWVhciArIDE7IGkgPD0gdGhpcy5lbmRZZWFyOyBpKyspIHtcbiAgICAgICAgdGhpcy5lbmRMaXN0WWVhcnMucHVzaChpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPVxuICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB0aGlzLm9wdGlvbnMuZW5hYmxlZDtcbiAgICB0aGlzLmNoZWNrRmlsdGVyVmFsdWUoKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQpIHtcbiAgICAgIGlmICghdGhpcy5pc1JhbmdlICYmIHRoaXMuc3R5bGUgPT09ICdzbGlkZXInICYmIHRoaXMudHlwZSA9PT0gJ3llYXInKSB7XG4gICAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmVDdXJyZW50RmlsdGVyVmFsdWUoKTtcbiAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHVuZGVmaW5lZCk7IC8vIFRPRE86IEZJWCBUSElTIGZvciBBTEwgT1RIRVIgVFlQRVMgU1RZTEVTIE9SIFJBTkdFLlxuICAgIH1cbiAgfVxuXG4gIHN0b3JlQ3VycmVudEZpbHRlclZhbHVlKCkge1xuICAgIC8vIFRPRE86IEZJWCBUSElTIGZvciBBTEwgT1RIRVIgVFlQRVMgU1RZTEVTIE9SIFJBTkdFLlxuICAgIGlmIChcbiAgICAgICF0aGlzLmlzUmFuZ2UgJiZcbiAgICAgIHRoaXMuc3R5bGUgPT09IFRpbWVGaWx0ZXJTdHlsZS5TTElERVIgJiZcbiAgICAgIHRoaXMudHlwZSA9PT0gVGltZUZpbHRlclR5cGUuWUVBUlxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy55ZWFyLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGaWx0ZXJWYWx1ZSgpIHtcbiAgICBjb25zdCBvbFNvdXJjZSA9IHRoaXMubGF5ZXIuZGF0YVNvdXJjZS5vbCBhcyBvbFNvdXJjZUltYWdlV01TO1xuICAgIGNvbnN0IHRpbWVGcm9tV21zID0gb2xTb3VyY2UuZ2V0UGFyYW1zKCkuVElNRTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1JhbmdlICYmXG4gICAgICB0aGlzLnN0eWxlID09PSBUaW1lRmlsdGVyU3R5bGUuU0xJREVSICYmXG4gICAgICB0aGlzLnR5cGUgPT09IFRpbWVGaWx0ZXJUeXBlLllFQVJcbiAgICApIHtcbiAgICAgIGlmICh0aW1lRnJvbVdtcykge1xuICAgICAgICB0aGlzLnllYXIgPSBuZXcgRGF0ZSh0aW1lRnJvbVdtcy50b1N0cmluZygpKS5nZXRGdWxsWWVhcigpICsgMTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnZhbHVlKSB7XG4gICAgICAgIHRoaXMueWVhciA9IG5ldyBEYXRlKHRoaXMub3B0aW9ucy52YWx1ZS50b1N0cmluZygpKS5nZXRGdWxsWWVhcigpICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMueWVhciA9IG5ldyBEYXRlKHRoaXMubWluKS5nZXRGdWxsWWVhcigpICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5pc1JhbmdlICYmXG4gICAgICB0aGlzLnN0eWxlID09PSBUaW1lRmlsdGVyU3R5bGUuQ0FMRU5EQVIgJiZcbiAgICAgIHRoaXMudHlwZSA9PT0gVGltZUZpbHRlclR5cGUuWUVBUlxuICAgICkge1xuICAgICAgaWYgKHRpbWVGcm9tV21zKSB7XG4gICAgICAgIHRoaXMuc3RhcnRZZWFyID0gcGFyc2VJbnQodGltZUZyb21XbXMuc3Vic3RyKDAsIDQpLCAxMCk7XG4gICAgICAgIHRoaXMuZW5kWWVhciA9IHBhcnNlSW50KHRpbWVGcm9tV21zLnN1YnN0cig1LCA0KSwgMTApO1xuICAgICAgICBjb25zdCBuZXdTdGFydExpc3RZZWFyczogYW55W10gPSBbXTtcbiAgICAgICAgY29uc3QgbmV3RW5kTGlzdFllYXJzOiBhbnlbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5pbml0U3RhcnRZZWFyOyBpIDwgdGhpcy5lbmRZZWFyOyBpKyspIHtcbiAgICAgICAgICBuZXdTdGFydExpc3RZZWFycy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YXJ0WWVhciArIDE7IGkgPD0gdGhpcy5pbml0RW5kWWVhcjsgaSsrKSB7XG4gICAgICAgICAgbmV3RW5kTGlzdFllYXJzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFydExpc3RZZWFycyA9IG5ld1N0YXJ0TGlzdFllYXJzO1xuICAgICAgICB0aGlzLmVuZExpc3RZZWFycyA9IG5ld0VuZExpc3RZZWFycztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETzogRklYIFRISVMgZm9yIEFMTCBPVEhFUiBUWVBFUyBTVFlMRVMgT1IgUkFOR0UuXG4gIH1cblxuICBoYW5kbGVEYXRlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNldHVwRGF0ZU91dHB1dCgpO1xuICAgIHRoaXMuYXBwbHlUeXBlQ2hhbmdlKCk7XG5cbiAgICAvLyBPbmx5IGlmIGlzIHJhbmdlLCB1c2UgMiBkYXRlcyB0byBtYWtlIHRoZSByYW5nZVxuICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQoW3RoaXMuc3RhcnREYXRlLCB0aGlzLmVuZERhdGVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlWWVhckNoYW5nZShldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgdGhpcy5lbmRMaXN0WWVhcnMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YXJ0WWVhciArIDE7IGkgPD0gdGhpcy5pbml0RW5kWWVhcjsgaSsrKSB7XG4gICAgICAgIHRoaXMuZW5kTGlzdFllYXJzLnB1c2goaSk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXJ0TGlzdFllYXJzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5pbml0U3RhcnRZZWFyICsgMTsgaSA8IHRoaXMuZW5kWWVhcjsgaSsrKSB7XG4gICAgICAgIHRoaXMuc3RhcnRMaXN0WWVhcnMucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KFt0aGlzLnN0YXJ0WWVhciwgdGhpcy5lbmRZZWFyXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTGlzdFllYXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaGFuZGxlWWVhckNoYW5nZShbdGhpcy5zdGFydFllYXIsIHRoaXMuZW5kWWVhcl0pO1xuICB9XG5cbiAgaGFuZGxlTGlzdFllYXJTdGFydENoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChbdGhpcy5zdGFydERhdGUsIHRoaXMuZW5kRGF0ZV0pO1xuICB9XG5cbiAgZGF0ZVRvTnVtYmVyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIGxldCBuZXdEYXRlO1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLm1pbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0RhdGUuZ2V0VGltZSgpO1xuICB9XG5cbiAgc2V0U2xpZGVyVGh1bWJMYWJlbChsYWJlbDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGh1bWJMYWJlbCA9IHRoaXMuZmluZFRodW1iTGFiZWwoXG4gICAgICB0aGlzLm15U2xpZGVyLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2Rlc1xuICAgICk7XG4gICAgaWYgKHRodW1iTGFiZWwpIHtcbiAgICAgIHRodW1iTGFiZWwudGV4dENvbnRlbnQgPSBsYWJlbDtcbiAgICB9XG4gIH1cblxuICBmaW5kVGh1bWJMYWJlbCh0ZXN0OiBhbnlbXSk6IGFueSB7XG4gICAgbGV0IHRodW1iTGFiZWw7XG5cbiAgICB0ZXN0LmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlLmNsYXNzTmFtZSA9PT0gJ21hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCcpIHtcbiAgICAgICAgdGh1bWJMYWJlbCA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGh1bWJMYWJlbCkge1xuICAgICAgICB0aHVtYkxhYmVsID0gdGhpcy5maW5kVGh1bWJMYWJlbCh2YWx1ZS5jaGlsZE5vZGVzKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgICByZXR1cm4gdGh1bWJMYWJlbDtcbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclN0YXRlKCkge1xuICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gIXRoaXMub3B0aW9ucy5lbmFibGVkO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmlzUmFuZ2UgJiZcbiAgICAgICAgVGltZUZpbHRlclN0eWxlLlNMSURFUiAmJlxuICAgICAgICB0aGlzLnR5cGUgPT09IFRpbWVGaWx0ZXJUeXBlLllFQVJcbiAgICAgICkge1xuICAgICAgICB0aGlzLnllYXJDaGFuZ2UuZW1pdCh0aGlzLnllYXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3BGaWx0ZXIoKTtcbiAgICAgIHRoaXMuc3RvcmVDdXJyZW50RmlsdGVyVmFsdWUoKTtcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodW5kZWZpbmVkKTsgLy8gVE9ETzogRklYIFRISVMgZm9yIEFMTCBPVEhFUiBUWVBFUyBTVFlMRVMgT1IgUkFOR0UuXG4gICAgfVxuICB9XG5cbiAgcmVzZXRGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHRoaXMubWluKTtcbiAgICB0aGlzLnllYXIgPSB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1JhbmdlICYmXG4gICAgICBUaW1lRmlsdGVyU3R5bGUuU0xJREVSICYmXG4gICAgICB0aGlzLnR5cGUgPT09IFRpbWVGaWx0ZXJUeXBlLllFQVJcbiAgICApIHtcbiAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRlT3V0cHV0KCk7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHVuZGVmaW5lZCk7IC8vIFRPRE86IEZJWCBUSElTIGZvciBBTEwgT1RIRVIgVFlQRVMgU1RZTEVTIE9SIFJBTkdFLlxuICAgIH1cbiAgfVxuXG4gIHBsYXlGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICB0aGlzLnN0b3BGaWx0ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGF5SWNvbiA9ICdwYXVzZS1jaXJjbGUnO1xuICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKFxuICAgICAgICB0aGF0ID0+IHtcbiAgICAgICAgICBsZXQgbmV3TWluRGF0ZU51bWJlcjtcbiAgICAgICAgICBjb25zdCBtYXhEYXRlTnVtYmVyID0gbmV3IERhdGUodGhhdC5tYXgpO1xuXG4gICAgICAgICAgbmV3TWluRGF0ZU51bWJlciA9XG4gICAgICAgICAgICB0aGF0LmRhdGUgPT09IHVuZGVmaW5lZCA/IHRoYXQubWluLmdldFRpbWUoKSA6IHRoYXQuZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgbmV3TWluRGF0ZU51bWJlciArPSB0aGF0Lm15U2xpZGVyLnN0ZXA7XG4gICAgICAgICAgdGhhdC5kYXRlID0gbmV3IERhdGUobmV3TWluRGF0ZU51bWJlcik7XG5cbiAgICAgICAgICBpZiAobmV3TWluRGF0ZU51bWJlciA+IG1heERhdGVOdW1iZXIuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICB0aGF0LnN0b3BGaWx0ZXIoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGF0LmhhbmRsZURhdGVDaGFuZ2UoeyB2YWx1ZTogdGhhdC5kYXRlLCBkYXRlOiB0aGF0LmRhdGUgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGltZUludGVydmFsLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHBsYXlZZWFyKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnllYXIgKyB0aGlzLm15U2xpZGVyLnN0ZXAgPlxuICAgICAgdGhpcy5tYXguZ2V0RnVsbFllYXIoKSArIHRoaXMubXlTbGlkZXIuc3RlcFxuICAgICkge1xuICAgICAgdGhpcy5zdG9wRmlsdGVyKCk7XG4gICAgICB0aGlzLnJlc2V0RmlsdGVyKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc3RvcEZpbHRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYXlJY29uID0gJ3BhdXNlLWNpcmNsZSc7XG4gICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRoaXMueWVhciArIHRoaXMubXlTbGlkZXIuc3RlcCkgPiB0aGlzLm1heC5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgdGhpcy5zdG9wRmlsdGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy55ZWFyID0gdGhpcy55ZWFyICsgdGhpcy5teVNsaWRlci5zdGVwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XG5cbiAgICAgIH0sIHRoaXMudGltZUludGVydmFsLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICBzdG9wRmlsdGVyKCkge1xuICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cbiAgICB0aGlzLmludGVydmFsID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGxheUljb24gPSAncGxheS1jaXJjbGUnO1xuICB9XG5cbiAgaGFuZGxlU2xpZGVyRGF0ZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoZXZlbnQudmFsdWUpO1xuICAgIHRoaXMuc2V0U2xpZGVyVGh1bWJMYWJlbCh0aGlzLmhhbmRsZVNsaWRlclRvb2x0aXAoKSk7XG4gICAgdGhpcy5oYW5kbGVEYXRlQ2hhbmdlKGV2ZW50KTtcbiAgfVxuXG4gIGhhbmRsZVNsaWRlclllYXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMueWVhciA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMueWVhckNoYW5nZS5lbWl0KHRoaXMueWVhcik7XG4gIH1cblxuICBoYW5kbGVTbGlkZXJWYWx1ZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY3VycmVudCA9PT0gdHJ1ZSB8fCAhdGhpcy5taW4pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZ2V0Um91bmRlZERhdGUoY3VycmVudERhdGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlID09PSBUaW1lRmlsdGVyVHlwZS5ZRUFSKSB7XG4gICAgICByZXR1cm4gdGhpcy55ZWFyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlID09PSB1bmRlZmluZWQgPyB0aGlzLm1pbi5nZXRUaW1lKCkgOiB0aGlzLmRhdGUuZ2V0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNsaWRlclRvb2x0aXAoKSB7XG4gICAgbGV0IGxhYmVsOiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5EQVRFOlxuICAgICAgICBsYWJlbCA9XG4gICAgICAgICAgdGhpcy5kYXRlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5taW4udG9EYXRlU3RyaW5nKClcbiAgICAgICAgICAgIDogdGhpcy5kYXRlLnRvRGF0ZVN0cmluZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVGltZUZpbHRlclR5cGUuVElNRTpcbiAgICAgICAgbGFiZWwgPVxuICAgICAgICAgIHRoaXMuZGF0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMubWluLnRvVGltZVN0cmluZygpXG4gICAgICAgICAgICA6IHRoaXMuZGF0ZS50b1RpbWVTdHJpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBkYXRldGltZVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGFiZWwgPVxuICAgICAgICAgIHRoaXMuZGF0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMubWluLnRvVVRDU3RyaW5nKClcbiAgICAgICAgICAgIDogdGhpcy5kYXRlLnRvVVRDU3RyaW5nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbDtcbiAgfVxuXG4gIHNldHVwRGF0ZU91dHB1dCgpIHtcbiAgICBpZiAodGhpcy5zdHlsZSA9PT0gVGltZUZpbHRlclN0eWxlLlNMSURFUikge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0U2Vjb25kcygtKHRoaXMuc3RlcCAvIDEwMDApKTtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlKTtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXRTZWNvbmRzKHRoaXMuc3RlcCAvIDEwMDApO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNSYW5nZSAmJiAhIXRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNSYW5nZSAmJiAoISF0aGlzLmRhdGUgfHwgIXRoaXMuZGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID1cbiAgICAgICAgdGhpcy5zdGFydERhdGUgPT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKHRoaXMubWluKSA6IHRoaXMuc3RhcnREYXRlO1xuICAgICAgdGhpcy5lbmREYXRlID1cbiAgICAgICAgdGhpcy5lbmREYXRlID09PSB1bmRlZmluZWQgPyBuZXcgRGF0ZSh0aGlzLm1heCkgOiB0aGlzLmVuZERhdGU7XG4gICAgfSBlbHNlIGlmICghdGhpcy5kYXRlKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9XG4gICAgICAgIHRoaXMuc3RhcnREYXRlID09PSB1bmRlZmluZWQgPyBuZXcgRGF0ZSh0aGlzLm1pbikgOiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9XG4gICAgICAgIHRoaXMuZW5kRGF0ZSA9PT0gdW5kZWZpbmVkID8gbmV3IERhdGUodGhpcy5tYXgpIDogdGhpcy5lbmREYXRlO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5VHlwZUNoYW5nZSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUaW1lRmlsdGVyVHlwZS5EQVRFOlxuICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmVuZERhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldEhvdXJzKDApO1xuICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldE1pbnV0ZXMoMCk7XG4gICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0U2Vjb25kcygwKTtcbiAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0SG91cnMoMjMpO1xuICAgICAgICAgIHRoaXMuZW5kRGF0ZS5zZXRNaW51dGVzKDU5KTtcbiAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0U2Vjb25kcyg1OSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRpbWVGaWx0ZXJUeXBlLlRJTUU6XG4gICAgICAgIGlmICh0aGlzLnN0eWxlID09PSBUaW1lRmlsdGVyU3R5bGUuQ0FMRU5EQVIpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGUuZ2V0RGF5KCkgIT09IHRoaXMubWluLmdldERheSgpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEhvdXIgPSB0aGlzLnN0YXJ0RGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMubWluO1xuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0SG91cnMoc2VsZWN0ZWRIb3VyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldE1pbnV0ZXMoc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUuZ2V0RGF5KCkgIT09IHRoaXMubWluLmdldERheSgpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEhvdXIgPSB0aGlzLmVuZERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTWludXRlID0gdGhpcy5lbmREYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMubWluO1xuICAgICAgICAgICAgdGhpcy5lbmREYXRlLnNldEhvdXJzKHNlbGVjdGVkSG91cik7XG4gICAgICAgICAgICB0aGlzLmVuZERhdGUuc2V0TWludXRlcyhzZWxlY3RlZE1pbnV0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzUmFuZ2UgJiYgdGhpcy5zdGVwID4gNjAgKiA2MCAqIDEwMDApIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXRNaW51dGVzKDApO1xuICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnNldFNlY29uZHMoMCk7XG4gICAgICAgICAgdGhpcy5lbmREYXRlLnNldE1pbnV0ZXMoNTkpO1xuICAgICAgICAgIHRoaXMuZW5kRGF0ZS5zZXRTZWNvbmRzKDU5KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIGRhdGV0aW1lXG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIGdldFJhbmdlTWluRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydERhdGUgPT09IHVuZGVmaW5lZCA/IHRoaXMubWluIDogdGhpcy5zdGFydERhdGU7XG4gIH1cblxuICBnZXRSYW5nZU1heERhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZSA9PT0gdW5kZWZpbmVkID8gdGhpcy5tYXggOiB0aGlzLmVuZERhdGU7XG4gIH1cblxuICAvKipcbiAgICogUm91bmQgZGF0ZSBhdCBhIGNlcnRhaW4gdGltZSwgMTAgbWludXRlcyBieSBEZWZhdWx0XG4gICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSB0byBSb3VuZFxuICAgKiBAcGFyYW0gYXRNaW51dGUgLSByb3VuZCB0byBjbG9zZXN0ICdhdE1pbnV0ZScgbWludXRlLCByb3VuZGVkIDEwIGJ5IGRlZmF1bHRcbiAgICogQHJldHVybiB0aGUgcm91bmRlZCBkYXRlXG4gICAqL1xuICBnZXRSb3VuZGVkRGF0ZShkYXRlLCBhdE1pbnV0ZSA9IDEwKSB7XG4gICAgY29uc3QgY29lZmYgPSAxMDAwICogNjAgKiBhdE1pbnV0ZTtcbiAgICByZXR1cm4gbmV3IERhdGUoTWF0aC5yb3VuZChkYXRlLmdldFRpbWUoKSAvIGNvZWZmKSAqIGNvZWZmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXAgKHBlcmlvZCkgZGVmaW5pdGlvbiBmcm9tIHRoZSBsYXllciBkaW1lbnNpb24gdGFnXG4gICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIGFzIElTTyA4NjAxIGV4YW1wbGU6IFBUMTBNIGZvciAxMCBNaW51dGVzXG4gICAqIEByZXR1cm4gdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgKi9cbiAgZ2V0U3RlcERlZmluaXRpb24oc3RlcCkge1xuICAgIHJldHVybiBtb21lbnQuZHVyYXRpb24oc3RlcCkuYXNNaWxsaXNlY29uZHMoKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cInN0eWxlID09PSAnY2FsZW5kYXInICYmIHR5cGUgIT09J3llYXInXCI+XG4gIDxkaXYgKm5nSWY9XCIhaXNSYW5nZVwiIGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMCBpZ28tY29sLTEwMC1tXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1kYXRldGltZXBpY2tlci10b2dnbGUgY2xhc3M9XCJ0aW1lLWZpbHRlci1tYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXCIgW2Zvcl09XCJkYXRldGltZVBpY2tlclwiIG1hdFN1ZmZpeD48L21hdC1kYXRldGltZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGV0aW1lcGlja2VyICNkYXRldGltZVBpY2tlciB0eXBlPVwie3t0eXBlfX1cIiBvcGVuT25Gb2N1cz1cInRydWVcIiB0aW1lSW50ZXJ2YWw9XCI1XCI+PC9tYXQtZGF0ZXRpbWVwaWNrZXI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwiZmFsc2VcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8udGltZUZpbHRlci5kYXRlJyB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgW21hdERhdGV0aW1lcGlja2VyXT1cImRhdGV0aW1lUGlja2VyXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRlXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIHJlYWRvbmx5PVwicmVhZG9ubHlcIlxuICAgICAgICAoZGF0ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJpc1JhbmdlXCI+XG4gICAgPGRpdiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDBcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1kYXRldGltZXBpY2tlci10b2dnbGUgY2xhc3M9XCJ0aW1lLWZpbHRlci1tYXQtZGF0ZXRpbWVwaWNrZXItdG9nZ2xlXCIgW2Zvcl09XCJtaW5EYXRldGltZVBpY2tlclwiIG1hdFN1ZmZpeD48L21hdC1kYXRldGltZXBpY2tlci10b2dnbGU+XG4gICAgICAgIDxtYXQtZGF0ZXRpbWVwaWNrZXIgI21pbkRhdGV0aW1lUGlja2VyIHR5cGU9XCJ7e3R5cGV9fVwiIG9wZW5PbkZvY3VzPVwidHJ1ZVwiIHRpbWVJbnRlcnZhbD1cIjVcIj48L21hdC1kYXRldGltZXBpY2tlcj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT1cImZhbHNlXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8udGltZUZpbHRlci5zdGFydERhdGUnIHwgdHJhbnNsYXRlfX1cIlxuICAgICAgICAgIFttYXREYXRldGltZXBpY2tlcl09XCJtaW5EYXRldGltZVBpY2tlclwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzdGFydERhdGVcIlxuICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICBbbWF4XT1cImdldFJhbmdlTWF4RGF0ZSgpXCJcbiAgICAgICAgICByZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAoaW5wdXQpPVwic3RhcnREYXRlXCJcbiAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWdvLWNvbCBpZ28tY29sLTEwMFwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZSBjbGFzcz1cInRpbWUtZmlsdGVyLW1hdC1kYXRldGltZXBpY2tlci10b2dnbGVcIiBbZm9yXT1cIm1heERhdGV0aW1lUGlja2VyXCIgbWF0U3VmZml4PjwvbWF0LWRhdGV0aW1lcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRldGltZXBpY2tlciAjbWF4RGF0ZXRpbWVQaWNrZXIgdHlwZT1cInt7dHlwZX19XCIgb3Blbk9uRm9jdXM9XCJ0cnVlXCIgdGltZUludGVydmFsPVwiNVwiPjwvbWF0LWRhdGV0aW1lcGlja2VyPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgYXV0b2NvbXBsZXRlPVwiZmFsc2VcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby50aW1lRmlsdGVyLmVuZERhdGUnIHwgdHJhbnNsYXRlfX1cIlxuICAgICAgICAgIFttYXREYXRldGltZXBpY2tlcl09XCJtYXhEYXRldGltZVBpY2tlclwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJlbmREYXRlXCJcbiAgICAgICAgICBbbWluXT1cImdldFJhbmdlTWluRGF0ZSgpXCJcbiAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgcmVhZG9ubHk9XCJyZWFkb25seVwiXG4gICAgICAgICAgKGRhdGVDaGFuZ2UpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwic3R5bGUgPT09ICdjYWxlbmRhcicgJiYgdHlwZSA9PT0neWVhcidcIj5cblxuICA8ZGl2ICpuZ0lmPVwiIWlzUmFuZ2VcIiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDAgaWdvLWNvbC0xMDAtbVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8udGltZUZpbHRlci5kYXRlJyB8IHRyYW5zbGF0ZX19XCIgWyhuZ01vZGVsKV09XCJ5ZWFyXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVZZWFyQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ5ZWFyXCIgKm5nRm9yPVwibGV0IHllYXIgb2YgbGlzdFllYXJzXCI+e3t5ZWFyfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJpc1JhbmdlXCI+XG4gICAgPGRpdiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDBcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLnRpbWVGaWx0ZXIuc3RhcnREYXRlJyB8IHRyYW5zbGF0ZX19XCIgWyhuZ01vZGVsKV09XCJzdGFydFllYXJcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImhhbmRsZVllYXJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwic3RhcnRZZWFyXCIgKm5nRm9yPVwibGV0IHN0YXJ0WWVhciBvZiBzdGFydExpc3RZZWFyc1wiPnt7c3RhcnRZZWFyfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDBcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwie3snaWdvLmdlby50aW1lRmlsdGVyLmVuZERhdGUnIHwgdHJhbnNsYXRlfX1cIiBbKG5nTW9kZWwpXT1cImVuZFllYXJcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImhhbmRsZVllYXJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZW5kWWVhclwiICpuZ0Zvcj1cImxldCBlbmRZZWFyIG9mIGVuZExpc3RZZWFyc1wiPnt7ZW5kWWVhcn19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuPC9kaXY+XG5cblxuICA8YnI+XG4gIDxkaXYgKm5nSWY9XCIhaXNSYW5nZSAmJiBzdHlsZSA9PT0gJ3NsaWRlcicgJiYgdHlwZSA9PT0gJ3llYXInXCIgY2xhc3M9XCJpZ28tY29sIGlnby1jb2wtMTAwIGlnby1jb2wtMTAwLW0gbWF0LXR5cG9ncmFwaHlcIj5cbiAgICA8c3Bhbj57e3N0YXJ0WWVhcn19PC9zcGFuPlxuICAgIDxtYXQtc2xpZGVyXG4gICAgICAgIGlkPVwidGltZS1zbGlkZXJcIlxuICAgICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgICAgc3RlcD1cInt7c3RlcH19XCJcbiAgICAgICAgW21pbl09XCJzdGFydFllYXJcIlxuICAgICAgICBbbWF4XT1cImVuZFllYXJcIlxuICAgICAgICBbdmFsdWVdPVwiaGFuZGxlU2xpZGVyVmFsdWUoKVwiXG4gICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgIHRodW1iTGFiZWxcbiAgICAgICAgKGlucHV0KT1cImhhbmRsZVNsaWRlclllYXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlU2xpZGVyWWVhckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT0gXCIhb3B0aW9ucy5lbmFibGVkIHx8ICFsYXllci52aXNpYmxlXCI+XG4gICAgPC9tYXQtc2xpZGVyPlxuICAgIDxzcGFuPnt7ZW5kWWVhcn19PC9zcGFuPlxuICAgIDxwICpuZ0lmPSBcIm9wdGlvbnMuZW5hYmxlZFwiIGNsYXNzPVwiZGF0ZS1iZWxvd1wiPnt7eWVhcn19PC9wPlxuICAgIDxkaXYgI2FjdGlvbnMgY2xhc3M9XCJpZ28tbGF5ZXItYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIChjaGFuZ2UpPVwidG9nZ2xlRmlsdGVyU3RhdGUoKVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIudG9nZ2xlRmlsdGVyU3RhdGUnIHwgdHJhbnNsYXRlXCIgW2NvbG9yXT1cImNvbG9yXCIgW2NoZWNrZWRdPVwib3B0aW9ucy5lbmFibGVkXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFsYXllci52aXNpYmxlXCI+XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09IFwiIW9wdGlvbnMuZW5hYmxlZCAgfHwgIWxheWVyLnZpc2libGVcIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInBsYXlZZWFyKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7e3BsYXlJY29ufX1cIj48L21hdC1pY29uPlxuICAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIW9wdGlvbnMuZW5hYmxlZCAgfHwgIWxheWVyLnZpc2libGVcIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInJlc2V0RmlsdGVyKCRldmVudClcIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7e3Jlc2V0SWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuPGRpdiAqbmdJZj1cInN0eWxlID09PSAnc2xpZGVyJyAmJiB0eXBlICE9PSAneWVhcidcIiBjbGFzcz1cImlnby1jb2wgaWdvLWNvbC0xMDAgaWdvLWNvbC0xMDAtbVwiPlxuICA8bWF0LXNsaWRlclxuICAgICAgaWQ9XCJ0aW1lLXNsaWRlclwiXG4gICAgICB0aWNrSW50ZXJ2YWw9XCJhdXRvXCJcbiAgICAgIHN0ZXA9XCJ7e3N0ZXB9fVwiXG4gICAgICBbbWluXT1cImRhdGVUb051bWJlcihtaW4pXCJcbiAgICAgIFttYXhdPVwiZGF0ZVRvTnVtYmVyKG1heClcIlxuICAgICAgW3ZhbHVlXT1cImhhbmRsZVNsaWRlclZhbHVlKClcIlxuICAgICAgdGh1bWJMYWJlbFxuICAgICAgKGlucHV0KT1cImhhbmRsZVNsaWRlckRhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImhhbmRsZVNsaWRlckRhdGVDaGFuZ2UoJGV2ZW50KVwiPlxuICA8L21hdC1zbGlkZXI+XG4gIDxwIGNsYXNzPVwiZGF0ZS1iZWxvd1wiPnt7aGFuZGxlU2xpZGVyVG9vbHRpcCgpfX08L3A+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJwbGF5RmlsdGVyKCRldmVudClcIj5cbiAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3twbGF5SWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==