@igo2/geo 1.14.2 → 1.14.3

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 (871) hide show
  1. package/esm2020/igo2-geo.mjs +4 -4
  2. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +300 -300
  3. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +305 -305
  4. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +246 -246
  5. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +79 -79
  6. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +208 -208
  7. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +78 -78
  8. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +216 -216
  9. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +94 -94
  10. package/esm2020/lib/catalog/catalog.module.mjs +52 -52
  11. package/esm2020/lib/catalog/index.mjs +4 -4
  12. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +94 -94
  13. package/esm2020/lib/catalog/shared/catalog.enum.mjs +15 -15
  14. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  15. package/esm2020/lib/catalog/shared/catalog.service.mjs +605 -605
  16. package/esm2020/lib/catalog/shared/index.mjs +4 -4
  17. package/esm2020/lib/datasource/datasource.module.mjs +21 -21
  18. package/esm2020/lib/datasource/index.mjs +2 -2
  19. package/esm2020/lib/datasource/shared/capabilities.service.mjs +430 -430
  20. package/esm2020/lib/datasource/shared/datasource.service.mjs +235 -235
  21. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  22. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +144 -144
  25. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +108 -108
  27. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +14 -14
  29. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +2 -2
  30. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +28 -28
  32. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +42 -42
  34. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +56 -56
  36. package/esm2020/lib/datasource/shared/datasources/index.mjs +35 -35
  37. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +27 -27
  39. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +11 -11
  41. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +48 -48
  43. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +14 -14
  45. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +53 -53
  47. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +71 -71
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +151 -151
  50. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -205
  52. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +206 -206
  53. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +15 -15
  55. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +8 -8
  57. package/esm2020/lib/datasource/shared/index.mjs +4 -4
  58. package/esm2020/lib/datasource/shared/options/index.mjs +4 -4
  59. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
  60. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +14 -14
  61. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +80 -80
  62. package/esm2020/lib/datasource/shared/options/options.service.mjs +2 -2
  63. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +356 -356
  64. package/esm2020/lib/datasource/utils/index.mjs +2 -2
  65. package/esm2020/lib/datasource/utils/tilegrid.mjs +19 -19
  66. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +223 -223
  67. package/esm2020/lib/directions/directions-buttons/index.mjs +1 -1
  68. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +289 -289
  69. package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
  70. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +195 -195
  71. package/esm2020/lib/directions/directions-results/index.mjs +1 -1
  72. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  73. package/esm2020/lib/directions/directions-sources/directions-source.mjs +2 -2
  74. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +15 -15
  75. package/esm2020/lib/directions/directions-sources/index.mjs +4 -4
  76. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +98 -98
  77. package/esm2020/lib/directions/directions.component.mjs +310 -310
  78. package/esm2020/lib/directions/directions.module.mjs +101 -101
  79. package/esm2020/lib/directions/index.mjs +6 -6
  80. package/esm2020/lib/directions/shared/directions-source.service.mjs +16 -16
  81. package/esm2020/lib/directions/shared/directions.enum.mjs +27 -27
  82. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  83. package/esm2020/lib/directions/shared/directions.service.mjs +28 -28
  84. package/esm2020/lib/directions/shared/directions.utils.mjs +508 -508
  85. package/esm2020/lib/directions/shared/index.mjs +5 -5
  86. package/esm2020/lib/directions/shared/store.mjs +23 -23
  87. package/esm2020/lib/download/download-button/download-button.component.mjs +60 -60
  88. package/esm2020/lib/download/download-button/index.mjs +1 -1
  89. package/esm2020/lib/download/download.module.mjs +41 -41
  90. package/esm2020/lib/download/index.mjs +2 -2
  91. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  92. package/esm2020/lib/download/shared/download.service.mjs +64 -64
  93. package/esm2020/lib/download/shared/index.mjs +2 -2
  94. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +54 -54
  95. package/esm2020/lib/draw/draw/draw-popup.component.mjs +590 -590
  96. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +47 -47
  97. package/esm2020/lib/draw/draw/draw.component.mjs +1298 -1298
  98. package/esm2020/lib/draw/draw/draw.module.mjs +112 -112
  99. package/esm2020/lib/draw/drawingTool.module.mjs +19 -19
  100. package/esm2020/lib/draw/index.mjs +2 -2
  101. package/esm2020/lib/draw/shared/draw-icon.service.mjs +26 -26
  102. package/esm2020/lib/draw/shared/draw-style.service.mjs +189 -189
  103. package/esm2020/lib/draw/shared/draw.enum.mjs +36 -36
  104. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  105. package/esm2020/lib/draw/shared/draw.utils.mjs +121 -121
  106. package/esm2020/lib/draw/shared/index.mjs +5 -5
  107. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +404 -404
  108. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +53 -53
  109. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +47 -47
  110. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +111 -111
  111. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +33 -33
  112. package/esm2020/lib/feature/feature.module.mjs +27 -27
  113. package/esm2020/lib/feature/index.mjs +3 -3
  114. package/esm2020/lib/feature/shared/feature.enums.mjs +8 -8
  115. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  116. package/esm2020/lib/feature/shared/feature.utils.mjs +346 -346
  117. package/esm2020/lib/feature/shared/index.mjs +6 -6
  118. package/esm2020/lib/feature/shared/store.mjs +123 -123
  119. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +112 -112
  120. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +93 -93
  121. package/esm2020/lib/feature/shared/strategies/index.mjs +5 -5
  122. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +103 -103
  123. package/esm2020/lib/feature/shared/strategies/loading.mjs +132 -132
  124. package/esm2020/lib/feature/shared/strategies/selection.mjs +369 -369
  125. package/esm2020/lib/feature/shared/strategies.utils.mjs +36 -36
  126. package/esm2020/lib/filter/filter.module.mjs +288 -288
  127. package/esm2020/lib/filter/index.mjs +15 -15
  128. package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
  129. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +139 -139
  130. package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
  131. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +644 -644
  132. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
  133. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1301 -1301
  134. package/esm2020/lib/filter/ogc-filter-time/index.mjs +2 -2
  135. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +176 -176
  136. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +897 -897
  137. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
  138. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +58 -58
  139. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
  140. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +306 -306
  141. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +2 -2
  142. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +30 -30
  143. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +43 -43
  144. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +54 -54
  145. package/esm2020/lib/filter/shared/index.mjs +11 -11
  146. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +71 -71
  147. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +29 -29
  148. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  149. package/esm2020/lib/filter/shared/ogc-filter.mjs +691 -691
  150. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +45 -45
  151. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +22 -22
  152. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
  153. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +268 -268
  154. package/esm2020/lib/filter/shared/time-filter.enum.mjs +12 -12
  155. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  156. package/esm2020/lib/filter/shared/time-filter.service.mjs +106 -106
  157. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
  158. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1088 -1088
  159. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
  160. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +207 -207
  161. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
  162. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +143 -143
  163. package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
  164. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +77 -77
  165. package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
  166. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +733 -733
  167. package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
  168. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +118 -118
  169. package/esm2020/lib/filter/time-filter-list/index.mjs +2 -2
  170. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +30 -30
  171. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +38 -38
  172. package/esm2020/lib/geo.module.mjs +101 -101
  173. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +520 -520
  174. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +188 -188
  175. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +63 -63
  176. package/esm2020/lib/geometry/geometry.module.mjs +26 -26
  177. package/esm2020/lib/geometry/index.mjs +3 -3
  178. package/esm2020/lib/geometry/shared/controls/draw.mjs +313 -313
  179. package/esm2020/lib/geometry/shared/controls/index.mjs +3 -3
  180. package/esm2020/lib/geometry/shared/controls/modify.mjs +520 -520
  181. package/esm2020/lib/geometry/shared/controls/slice.mjs +176 -176
  182. package/esm2020/lib/geometry/shared/geometry.errors.mjs +25 -25
  183. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  184. package/esm2020/lib/geometry/shared/geometry.utils.mjs +121 -121
  185. package/esm2020/lib/geometry/shared/index.mjs +4 -4
  186. package/esm2020/lib/import-export/export-button/export-button.component.mjs +63 -63
  187. package/esm2020/lib/import-export/export-button/index.mjs +1 -1
  188. package/esm2020/lib/import-export/import-export/import-export.component.mjs +1219 -1219
  189. package/esm2020/lib/import-export/import-export/index.mjs +1 -1
  190. package/esm2020/lib/import-export/import-export.module.mjs +95 -95
  191. package/esm2020/lib/import-export/index.mjs +4 -4
  192. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +134 -134
  193. package/esm2020/lib/import-export/shared/export.errors.mjs +14 -14
  194. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  195. package/esm2020/lib/import-export/shared/export.service.mjs +194 -194
  196. package/esm2020/lib/import-export/shared/export.type.mjs +3 -3
  197. package/esm2020/lib/import-export/shared/export.utils.mjs +54 -54
  198. package/esm2020/lib/import-export/shared/import.errors.mjs +38 -38
  199. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  200. package/esm2020/lib/import-export/shared/import.service.mjs +214 -214
  201. package/esm2020/lib/import-export/shared/import.utils.mjs +234 -234
  202. package/esm2020/lib/import-export/shared/index.mjs +10 -10
  203. package/esm2020/lib/import-export/style-list/index.mjs +4 -4
  204. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
  205. package/esm2020/lib/import-export/style-list/style-list.module.mjs +22 -22
  206. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +20 -20
  207. package/esm2020/lib/import-export/style-list/style-list.service.mjs +50 -50
  208. package/esm2020/lib/layer/index.mjs +10 -10
  209. package/esm2020/lib/layer/layer-item/index.mjs +1 -1
  210. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +299 -299
  211. package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
  212. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +387 -387
  213. package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
  214. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +83 -83
  215. package/esm2020/lib/layer/layer-legend-list/index.mjs +2 -2
  216. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +47 -47
  217. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +194 -194
  218. package/esm2020/lib/layer/layer-list/index.mjs +3 -3
  219. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +58 -58
  220. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1008 -1008
  221. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +18 -18
  222. package/esm2020/lib/layer/layer-list-tool/index.mjs +4 -4
  223. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +164 -164
  224. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +6 -6
  225. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  226. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +21 -21
  227. package/esm2020/lib/layer/layer.module.mjs +184 -184
  228. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  229. package/esm2020/lib/layer/shared/index.mjs +6 -6
  230. package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
  231. package/esm2020/lib/layer/shared/layer.service.mjs +185 -185
  232. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  233. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  234. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  235. package/esm2020/lib/layer/shared/layers/image-layer.mjs +67 -67
  236. package/esm2020/lib/layer/shared/layers/index.mjs +12 -12
  237. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +17 -17
  238. package/esm2020/lib/layer/shared/layers/layer.mjs +163 -163
  239. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  240. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +46 -46
  241. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  242. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +377 -377
  243. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  244. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +103 -103
  245. package/esm2020/lib/layer/shared/style.service.mjs +355 -355
  246. package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
  247. package/esm2020/lib/layer/style-modal/index.mjs +1 -1
  248. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +287 -287
  249. package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
  250. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +58 -58
  251. package/esm2020/lib/layer/utils/image-watcher.mjs +61 -61
  252. package/esm2020/lib/layer/utils/index.mjs +5 -5
  253. package/esm2020/lib/layer/utils/layer.utils.mjs +9 -9
  254. package/esm2020/lib/layer/utils/outputLegend.mjs +26 -26
  255. package/esm2020/lib/layer/utils/tile-watcher.mjs +49 -49
  256. package/esm2020/lib/layer/utils/vector-watcher.mjs +47 -47
  257. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +19 -19
  258. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +96 -96
  259. package/esm2020/lib/map/baselayers-switcher/index.mjs +2 -2
  260. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +141 -142
  261. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +78 -78
  262. package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
  263. package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +62 -62
  264. package/esm2020/lib/map/home-extent-button/index.mjs +1 -1
  265. package/esm2020/lib/map/index.mjs +13 -13
  266. package/esm2020/lib/map/info-section/index.mjs +1 -1
  267. package/esm2020/lib/map/info-section/info-section.component.mjs +29 -29
  268. package/esm2020/lib/map/map-browser/index.mjs +1 -1
  269. package/esm2020/lib/map/map-browser/map-browser.component.mjs +65 -65
  270. package/esm2020/lib/map/map-center/index.mjs +1 -1
  271. package/esm2020/lib/map/map-center/map-center.component.mjs +49 -49
  272. package/esm2020/lib/map/map.module.mjs +126 -126
  273. package/esm2020/lib/map/menu-button/index.mjs +1 -1
  274. package/esm2020/lib/map/menu-button/menu-button.component.mjs +61 -61
  275. package/esm2020/lib/map/offline-button/index.mjs +1 -1
  276. package/esm2020/lib/map/offline-button/offline-button.component.mjs +75 -75
  277. package/esm2020/lib/map/rotation-button/index.mjs +1 -1
  278. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +69 -69
  279. package/esm2020/lib/map/shared/controllers/controller.mjs +41 -41
  280. package/esm2020/lib/map/shared/controllers/geolocation.mjs +307 -307
  281. package/esm2020/lib/map/shared/controllers/index.mjs +3 -3
  282. package/esm2020/lib/map/shared/controllers/view.mjs +350 -350
  283. package/esm2020/lib/map/shared/hover-feature.directive.mjs +502 -502
  284. package/esm2020/lib/map/shared/index.mjs +13 -13
  285. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +237 -237
  286. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +106 -106
  287. package/esm2020/lib/map/shared/map.enums.mjs +5 -5
  288. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  289. package/esm2020/lib/map/shared/map.mjs +406 -406
  290. package/esm2020/lib/map/shared/map.service.mjs +28 -28
  291. package/esm2020/lib/map/shared/map.utils.mjs +462 -462
  292. package/esm2020/lib/map/shared/mapOffline.directive.mjs +162 -162
  293. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  294. package/esm2020/lib/map/shared/projection.service.mjs +64 -64
  295. package/esm2020/lib/map/shared/projection.utils.mjs +63 -63
  296. package/esm2020/lib/map/swipe-control/index.mjs +1 -1
  297. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +192 -192
  298. package/esm2020/lib/map/utils/layer-watcher.mjs +78 -78
  299. package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
  300. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +113 -113
  301. package/esm2020/lib/map/zoom-button/index.mjs +1 -1
  302. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +39 -39
  303. package/esm2020/lib/measure/index.mjs +3 -3
  304. package/esm2020/lib/measure/measure.module.mjs +19 -19
  305. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +36 -36
  306. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +179 -179
  307. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +139 -139
  308. package/esm2020/lib/measure/measurer/measurer.component.mjs +1041 -1041
  309. package/esm2020/lib/measure/measurer/measurer.module.mjs +93 -93
  310. package/esm2020/lib/measure/shared/index.mjs +3 -3
  311. package/esm2020/lib/measure/shared/measure.enum.mjs +36 -36
  312. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  313. package/esm2020/lib/measure/shared/measure.utils.mjs +488 -488
  314. package/esm2020/lib/metadata/index.mjs +2 -2
  315. package/esm2020/lib/metadata/metadata-button/index.mjs +1 -1
  316. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +133 -133
  317. package/esm2020/lib/metadata/metadata.module.mjs +54 -54
  318. package/esm2020/lib/metadata/shared/index.mjs +2 -2
  319. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  320. package/esm2020/lib/metadata/shared/metadata.service.mjs +18 -18
  321. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +104 -104
  322. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +5 -5
  323. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  324. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +166 -166
  325. package/esm2020/lib/offline/geoDB/index.mjs +4 -4
  326. package/esm2020/lib/offline/index.mjs +2 -2
  327. package/esm2020/lib/offline/shared/geo-network.service.mjs +65 -65
  328. package/esm2020/lib/offline/shared/index.mjs +1 -1
  329. package/esm2020/lib/overlay/index.mjs +1 -1
  330. package/esm2020/lib/overlay/overlay.module.mjs +22 -22
  331. package/esm2020/lib/overlay/shared/index.mjs +6 -6
  332. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +68 -68
  333. package/esm2020/lib/overlay/shared/overlay.directive.mjs +32 -32
  334. package/esm2020/lib/overlay/shared/overlay.enum.mjs +7 -7
  335. package/esm2020/lib/overlay/shared/overlay.mjs +129 -129
  336. package/esm2020/lib/overlay/shared/overlay.service.mjs +26 -26
  337. package/esm2020/lib/overlay/shared/overlay.utils.mjs +102 -102
  338. package/esm2020/lib/print/index.mjs +3 -3
  339. package/esm2020/lib/print/print/print.component.mjs +125 -125
  340. package/esm2020/lib/print/print-form/index.mjs +1 -1
  341. package/esm2020/lib/print/print-form/print-form.component.mjs +427 -427
  342. package/esm2020/lib/print/print.module.mjs +64 -64
  343. package/esm2020/lib/print/shared/geopdf.mjs +57 -57
  344. package/esm2020/lib/print/shared/index.mjs +4 -4
  345. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  346. package/esm2020/lib/print/shared/print.service.mjs +933 -933
  347. package/esm2020/lib/print/shared/print.type.mjs +29 -29
  348. package/esm2020/lib/query/index.mjs +1 -1
  349. package/esm2020/lib/query/query.module.mjs +28 -28
  350. package/esm2020/lib/query/shared/index.mjs +6 -6
  351. package/esm2020/lib/query/shared/query-search-source.mjs +34 -34
  352. package/esm2020/lib/query/shared/query-search-source.providers.mjs +21 -21
  353. package/esm2020/lib/query/shared/query.directive.mjs +260 -260
  354. package/esm2020/lib/query/shared/query.enums.mjs +29 -29
  355. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  356. package/esm2020/lib/query/shared/query.service.mjs +732 -732
  357. package/esm2020/lib/query/shared/query.utils.mjs +36 -36
  358. package/esm2020/lib/search/index.mjs +11 -11
  359. package/esm2020/lib/search/search-bar/search-bar.component.mjs +511 -511
  360. package/esm2020/lib/search/search-bar/search-bar.module.mjs +74 -74
  361. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +34 -34
  362. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +117 -117
  363. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +370 -370
  364. package/esm2020/lib/search/search-results/search-results-item.component.mjs +123 -123
  365. package/esm2020/lib/search/search-results/search-results.component.mjs +339 -339
  366. package/esm2020/lib/search/search-results/search-results.module.mjs +103 -103
  367. package/esm2020/lib/search/search-selector/search-selector.component.mjs +122 -122
  368. package/esm2020/lib/search/search-selector/search-selector.module.mjs +55 -55
  369. package/esm2020/lib/search/search-settings/search-settings.component.mjs +441 -441
  370. package/esm2020/lib/search/search-settings/search-settings.module.mjs +59 -59
  371. package/esm2020/lib/search/search.module.mjs +66 -66
  372. package/esm2020/lib/search/shared/index.mjs +8 -8
  373. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +321 -321
  374. package/esm2020/lib/search/shared/search-source-service.providers.mjs +19 -19
  375. package/esm2020/lib/search/shared/search-source.service.mjs +46 -46
  376. package/esm2020/lib/search/shared/search.enums.mjs +3 -3
  377. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  378. package/esm2020/lib/search/shared/search.service.mjs +120 -120
  379. package/esm2020/lib/search/shared/search.utils.mjs +90 -90
  380. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  381. package/esm2020/lib/search/shared/sources/coordinates.mjs +152 -152
  382. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +39 -39
  383. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  384. package/esm2020/lib/search/shared/sources/icherche.mjs +766 -766
  385. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +65 -65
  386. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  387. package/esm2020/lib/search/shared/sources/ilayer.mjs +319 -319
  388. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +39 -39
  389. package/esm2020/lib/search/shared/sources/index.mjs +17 -17
  390. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
  391. package/esm2020/lib/search/shared/sources/nominatim.mjs +251 -251
  392. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +22 -22
  393. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  394. package/esm2020/lib/search/shared/sources/source.mjs +178 -178
  395. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  396. package/esm2020/lib/search/shared/sources/storedqueries.mjs +424 -424
  397. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +40 -40
  398. package/esm2020/lib/toast/index.mjs +1 -1
  399. package/esm2020/lib/toast/toast.component.mjs +112 -112
  400. package/esm2020/lib/toast/toast.module.mjs +44 -44
  401. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
  402. package/esm2020/lib/utils/commonVectorStyle.mjs +74 -74
  403. package/esm2020/lib/utils/googleLinks.mjs +12 -12
  404. package/esm2020/lib/utils/id-generator.mjs +109 -109
  405. package/esm2020/lib/utils/index.mjs +5 -5
  406. package/esm2020/lib/utils/osmLinks.mjs +9 -9
  407. package/esm2020/lib/wkt/index.mjs +1 -1
  408. package/esm2020/lib/wkt/shared/index.mjs +1 -1
  409. package/esm2020/lib/wkt/shared/wkt.service.mjs +224 -224
  410. package/esm2020/lib/wkt/wkt.module.mjs +21 -21
  411. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +47 -47
  412. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +35 -35
  413. package/esm2020/lib/workspace/confirmation-popup/index.mjs +2 -2
  414. package/esm2020/lib/workspace/index.mjs +7 -7
  415. package/esm2020/lib/workspace/shared/edition-workspace.mjs +279 -279
  416. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +656 -656
  417. package/esm2020/lib/workspace/shared/feature-workspace.mjs +34 -34
  418. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +149 -149
  419. package/esm2020/lib/workspace/shared/index.mjs +7 -7
  420. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +34 -34
  421. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +149 -149
  422. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +259 -259
  423. package/esm2020/lib/workspace/shared/workspace.utils.mjs +23 -23
  424. package/esm2020/lib/workspace/widgets/index.mjs +3 -3
  425. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +46 -46
  426. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +35 -35
  427. package/esm2020/lib/workspace/widgets/widgets.mjs +14 -14
  428. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +132 -132
  429. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +27 -27
  430. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +112 -112
  431. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +27 -27
  432. package/esm2020/lib/workspace/workspace.module.mjs +61 -61
  433. package/esm2020/public_api.mjs +54 -54
  434. package/fesm2015/igo2-geo.mjs +44986 -44986
  435. package/fesm2015/igo2-geo.mjs.map +1 -1
  436. package/fesm2020/igo2-geo.mjs +43029 -43030
  437. package/fesm2020/igo2-geo.mjs.map +1 -1
  438. package/index.d.ts +5 -5
  439. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +126 -126
  440. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +80 -80
  441. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +105 -105
  442. package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +22 -22
  443. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +45 -45
  444. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +25 -25
  445. package/lib/catalog/catalog-library/catalog-library.component.d.ts +65 -65
  446. package/lib/catalog/catalog-library/catalog-library.module.d.ts +26 -26
  447. package/lib/catalog/catalog.module.d.ts +14 -14
  448. package/lib/catalog/index.d.ts +4 -4
  449. package/lib/catalog/shared/catalog.abstract.d.ts +50 -50
  450. package/lib/catalog/shared/catalog.enum.d.ts +14 -14
  451. package/lib/catalog/shared/catalog.interface.d.ts +66 -66
  452. package/lib/catalog/shared/catalog.service.d.ts +36 -36
  453. package/lib/catalog/shared/index.d.ts +4 -4
  454. package/lib/datasource/datasource.module.d.ts +8 -8
  455. package/lib/datasource/index.d.ts +2 -2
  456. package/lib/datasource/shared/capabilities.service.d.ts +37 -37
  457. package/lib/datasource/shared/datasource.service.d.ts +37 -37
  458. package/lib/datasource/shared/datasources/any-datasource.d.ts +16 -16
  459. package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +15 -15
  460. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +14 -14
  461. package/lib/datasource/shared/datasources/arcgisrest-datasource.interface.d.ts +14 -14
  462. package/lib/datasource/shared/datasources/carto-datasource.d.ts +15 -15
  463. package/lib/datasource/shared/datasources/carto-datasource.interface.d.ts +13 -13
  464. package/lib/datasource/shared/datasources/cluster-datasource.d.ts +10 -10
  465. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +11 -11
  466. package/lib/datasource/shared/datasources/data.service.d.ts +3 -3
  467. package/lib/datasource/shared/datasources/datasource.d.ts +20 -20
  468. package/lib/datasource/shared/datasources/datasource.interface.d.ts +100 -100
  469. package/lib/datasource/shared/datasources/feature-datasource.d.ts +12 -12
  470. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +18 -18
  471. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.d.ts +15 -15
  472. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +15 -15
  473. package/lib/datasource/shared/datasources/index.d.ts +35 -35
  474. package/lib/datasource/shared/datasources/mvt-datasource.d.ts +10 -10
  475. package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +13 -13
  476. package/lib/datasource/shared/datasources/osm-datasource.d.ts +9 -9
  477. package/lib/datasource/shared/datasources/osm-datasource.interface.d.ts +7 -7
  478. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.d.ts +15 -15
  479. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.d.ts +14 -14
  480. package/lib/datasource/shared/datasources/tiledebug-datasource.d.ts +9 -9
  481. package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +9 -9
  482. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +15 -15
  483. package/lib/datasource/shared/datasources/websocket-datasource.interface.d.ts +7 -7
  484. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +20 -20
  485. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +20 -20
  486. package/lib/datasource/shared/datasources/wfs.service.d.ts +17 -17
  487. package/lib/datasource/shared/datasources/wms-datasource.d.ts +31 -31
  488. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +32 -32
  489. package/lib/datasource/shared/datasources/wms-wfs.utils.d.ts +41 -41
  490. package/lib/datasource/shared/datasources/wmts-datasource.d.ts +10 -10
  491. package/lib/datasource/shared/datasources/wmts-datasource.interface.d.ts +13 -13
  492. package/lib/datasource/shared/datasources/xyz-datasource.d.ts +9 -9
  493. package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +11 -11
  494. package/lib/datasource/shared/index.d.ts +4 -4
  495. package/lib/datasource/shared/options/index.d.ts +4 -4
  496. package/lib/datasource/shared/options/options-api.interface.d.ts +4 -4
  497. package/lib/datasource/shared/options/options-api.providers.d.ts +10 -10
  498. package/lib/datasource/shared/options/options-api.service.d.ts +16 -16
  499. package/lib/datasource/shared/options/options.service.d.ts +6 -6
  500. package/lib/datasource/utils/esri-style-generator.d.ts +21 -21
  501. package/lib/datasource/utils/index.d.ts +2 -2
  502. package/lib/datasource/utils/tilegrid.d.ts +2 -2
  503. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +30 -30
  504. package/lib/directions/directions-buttons/index.d.ts +1 -1
  505. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +45 -45
  506. package/lib/directions/directions-inputs/index.d.ts +1 -1
  507. package/lib/directions/directions-results/directions-results.component.d.ts +30 -30
  508. package/lib/directions/directions-results/index.d.ts +1 -1
  509. package/lib/directions/directions-sources/directions-source.d.ts +7 -7
  510. package/lib/directions/directions-sources/directions-source.interface.d.ts +11 -11
  511. package/lib/directions/directions-sources/directions-source.provider.d.ts +11 -11
  512. package/lib/directions/directions-sources/index.d.ts +4 -4
  513. package/lib/directions/directions-sources/osrm-directions-source.d.ts +23 -23
  514. package/lib/directions/directions.component.d.ts +56 -56
  515. package/lib/directions/directions.module.d.ts +26 -26
  516. package/lib/directions/index.d.ts +6 -6
  517. package/lib/directions/shared/directions-source.service.d.ts +11 -11
  518. package/lib/directions/shared/directions.enum.d.ts +22 -22
  519. package/lib/directions/shared/directions.interface.d.ts +126 -126
  520. package/lib/directions/shared/directions.service.d.ts +13 -13
  521. package/lib/directions/shared/directions.utils.d.ts +42 -42
  522. package/lib/directions/shared/index.d.ts +5 -5
  523. package/lib/directions/shared/store.d.ts +18 -18
  524. package/lib/download/download-button/download-button.component.d.ts +18 -18
  525. package/lib/download/download-button/index.d.ts +1 -1
  526. package/lib/download/download.module.d.ts +14 -14
  527. package/lib/download/index.d.ts +2 -2
  528. package/lib/download/shared/download.interface.d.ts +10 -10
  529. package/lib/download/shared/download.service.d.ts +11 -11
  530. package/lib/download/shared/index.d.ts +2 -2
  531. package/lib/draw/draw/draw-layer-popup.component.d.ts +14 -14
  532. package/lib/draw/draw/draw-popup.component.d.ts +63 -63
  533. package/lib/draw/draw/draw-shorcuts.component.d.ts +5 -5
  534. package/lib/draw/draw/draw.component.d.ts +239 -239
  535. package/lib/draw/draw/draw.module.d.ts +34 -34
  536. package/lib/draw/drawingTool.module.d.ts +7 -7
  537. package/lib/draw/index.d.ts +2 -2
  538. package/lib/draw/shared/draw-icon.service.d.ts +12 -12
  539. package/lib/draw/shared/draw-style.service.d.ts +36 -36
  540. package/lib/draw/shared/draw.enum.d.ts +32 -32
  541. package/lib/draw/shared/draw.interface.d.ts +40 -40
  542. package/lib/draw/shared/draw.utils.d.ts +35 -35
  543. package/lib/draw/shared/index.d.ts +5 -5
  544. package/lib/feature/feature-details/feature-details.component.d.ts +60 -60
  545. package/lib/feature/feature-details/feature-details.directive.d.ts +19 -19
  546. package/lib/feature/feature-details/feature-details.module.d.ts +15 -15
  547. package/lib/feature/feature-form/feature-form.component.d.ts +50 -50
  548. package/lib/feature/feature-form/feature-form.module.d.ts +12 -12
  549. package/lib/feature/feature.module.d.ts +9 -9
  550. package/lib/feature/index.d.ts +3 -3
  551. package/lib/feature/shared/feature.enums.d.ts +7 -7
  552. package/lib/feature/shared/feature.interfaces.d.ts +74 -74
  553. package/lib/feature/shared/feature.utils.d.ts +104 -104
  554. package/lib/feature/shared/index.d.ts +6 -6
  555. package/lib/feature/shared/store.d.ts +71 -71
  556. package/lib/feature/shared/strategies/in-map-extent.d.ts +52 -52
  557. package/lib/feature/shared/strategies/in-map-resolution.d.ts +52 -52
  558. package/lib/feature/shared/strategies/index.d.ts +5 -5
  559. package/lib/feature/shared/strategies/loading-layer.d.ts +59 -59
  560. package/lib/feature/shared/strategies/loading.d.ts +75 -75
  561. package/lib/feature/shared/strategies/selection.d.ts +176 -176
  562. package/lib/feature/shared/strategies.utils.d.ts +17 -17
  563. package/lib/filter/filter.module.d.ts +53 -53
  564. package/lib/filter/index.d.ts +15 -15
  565. package/lib/filter/ogc-filter-button/index.d.ts +1 -1
  566. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +20 -20
  567. package/lib/filter/ogc-filter-form/index.d.ts +1 -1
  568. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +65 -65
  569. package/lib/filter/ogc-filter-selection/index.d.ts +1 -1
  570. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +93 -93
  571. package/lib/filter/ogc-filter-time/index.d.ts +2 -2
  572. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +39 -39
  573. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +86 -86
  574. package/lib/filter/ogc-filterable-form/index.d.ts +1 -1
  575. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +15 -15
  576. package/lib/filter/ogc-filterable-item/index.d.ts +1 -1
  577. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +41 -41
  578. package/lib/filter/ogc-filterable-list/index.d.ts +2 -2
  579. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +14 -14
  580. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +10 -10
  581. package/lib/filter/shared/filterable-datasource.pipe.d.ts +10 -10
  582. package/lib/filter/shared/index.d.ts +11 -11
  583. package/lib/filter/shared/ogc-filter-time.service.d.ts +19 -19
  584. package/lib/filter/shared/ogc-filter.d.ts +29 -29
  585. package/lib/filter/shared/ogc-filter.enum.d.ts +27 -27
  586. package/lib/filter/shared/ogc-filter.interface.d.ts +200 -200
  587. package/lib/filter/shared/ogc-filter.service.d.ts +11 -11
  588. package/lib/filter/shared/spatial-filter.enum.d.ts +19 -19
  589. package/lib/filter/shared/spatial-filter.interface.d.ts +10 -10
  590. package/lib/filter/shared/spatial-filter.service.d.ts +37 -37
  591. package/lib/filter/shared/time-filter.enum.d.ts +10 -10
  592. package/lib/filter/shared/time-filter.interface.d.ts +29 -29
  593. package/lib/filter/shared/time-filter.service.d.ts +11 -11
  594. package/lib/filter/spatial-filter/spatial-filter-item/index.d.ts +1 -1
  595. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +166 -166
  596. package/lib/filter/spatial-filter/spatial-filter-list/index.d.ts +1 -1
  597. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +58 -58
  598. package/lib/filter/spatial-filter/spatial-filter-type/index.d.ts +1 -1
  599. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +45 -45
  600. package/lib/filter/time-filter-button/index.d.ts +1 -1
  601. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +20 -20
  602. package/lib/filter/time-filter-form/index.d.ts +1 -1
  603. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +77 -77
  604. package/lib/filter/time-filter-item/index.d.ts +1 -1
  605. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +28 -28
  606. package/lib/filter/time-filter-list/index.d.ts +2 -2
  607. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +14 -14
  608. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +12 -12
  609. package/lib/geo.module.d.ts +28 -28
  610. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +206 -206
  611. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +88 -88
  612. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +19 -19
  613. package/lib/geometry/geometry.module.d.ts +8 -8
  614. package/lib/geometry/index.d.ts +3 -3
  615. package/lib/geometry/shared/controls/draw.d.ts +150 -150
  616. package/lib/geometry/shared/controls/index.d.ts +3 -3
  617. package/lib/geometry/shared/controls/modify.d.ts +228 -228
  618. package/lib/geometry/shared/controls/slice.d.ts +99 -99
  619. package/lib/geometry/shared/geometry.errors.d.ts +11 -11
  620. package/lib/geometry/shared/geometry.interfaces.d.ts +13 -13
  621. package/lib/geometry/shared/geometry.utils.d.ts +45 -45
  622. package/lib/geometry/shared/index.d.ts +4 -4
  623. package/lib/import-export/export-button/export-button.component.d.ts +16 -16
  624. package/lib/import-export/export-button/index.d.ts +1 -1
  625. package/lib/import-export/import-export/import-export.component.d.ts +104 -104
  626. package/lib/import-export/import-export/index.d.ts +1 -1
  627. package/lib/import-export/import-export.module.d.ts +26 -26
  628. package/lib/import-export/index.d.ts +4 -4
  629. package/lib/import-export/shared/drop-geo-file.directive.d.ts +36 -36
  630. package/lib/import-export/shared/export.errors.d.ts +8 -8
  631. package/lib/import-export/shared/export.interface.d.ts +11 -11
  632. package/lib/import-export/shared/export.service.d.ts +30 -30
  633. package/lib/import-export/shared/export.type.d.ts +16 -16
  634. package/lib/import-export/shared/export.utils.d.ts +19 -19
  635. package/lib/import-export/shared/import.errors.d.ts +20 -20
  636. package/lib/import-export/shared/import.interface.d.ts +8 -8
  637. package/lib/import-export/shared/import.service.d.ts +31 -31
  638. package/lib/import-export/shared/import.utils.d.ts +18 -18
  639. package/lib/import-export/shared/index.d.ts +10 -10
  640. package/lib/import-export/style-list/index.d.ts +4 -4
  641. package/lib/import-export/style-list/style-list.interface.d.ts +6 -6
  642. package/lib/import-export/style-list/style-list.module.d.ts +8 -8
  643. package/lib/import-export/style-list/style-list.provider.d.ts +15 -15
  644. package/lib/import-export/style-list/style-list.service.d.ts +18 -18
  645. package/lib/layer/index.d.ts +10 -10
  646. package/lib/layer/layer-item/index.d.ts +1 -1
  647. package/lib/layer/layer-item/layer-item.component.d.ts +62 -62
  648. package/lib/layer/layer-legend/index.d.ts +1 -1
  649. package/lib/layer/layer-legend/layer-legend.component.d.ts +90 -90
  650. package/lib/layer/layer-legend-item/index.d.ts +1 -1
  651. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +22 -22
  652. package/lib/layer/layer-legend-list/index.d.ts +2 -2
  653. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +16 -16
  654. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +31 -31
  655. package/lib/layer/layer-list/index.d.ts +3 -3
  656. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +19 -19
  657. package/lib/layer/layer-list/layer-list.component.d.ts +127 -127
  658. package/lib/layer/layer-list/layer-list.enum.d.ts +15 -15
  659. package/lib/layer/layer-list-tool/index.d.ts +4 -4
  660. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +32 -32
  661. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +5 -5
  662. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +8 -8
  663. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +14 -14
  664. package/lib/layer/layer.module.d.ts +36 -36
  665. package/lib/layer/shared/clusterParam.d.ts +13 -13
  666. package/lib/layer/shared/index.d.ts +6 -6
  667. package/lib/layer/shared/layer.enums.d.ts +1 -1
  668. package/lib/layer/shared/layer.service.d.ts +30 -30
  669. package/lib/layer/shared/layers/any-layer.d.ts +6 -6
  670. package/lib/layer/shared/layers/any-layer.interface.d.ts +6 -6
  671. package/lib/layer/shared/layers/image-layer.d.ts +22 -22
  672. package/lib/layer/shared/layers/image-layer.interface.d.ts +19 -19
  673. package/lib/layer/shared/layers/index.d.ts +12 -12
  674. package/lib/layer/shared/layers/layer.d.ts +62 -62
  675. package/lib/layer/shared/layers/layer.interface.d.ts +109 -107
  676. package/lib/layer/shared/layers/tile-layer.d.ts +31 -31
  677. package/lib/layer/shared/layers/tile-layer.interface.d.ts +20 -20
  678. package/lib/layer/shared/layers/vector-layer.d.ts +78 -78
  679. package/lib/layer/shared/layers/vector-layer.interface.d.ts +41 -41
  680. package/lib/layer/shared/layers/vectortile-layer.d.ts +28 -28
  681. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +18 -18
  682. package/lib/layer/shared/style.service.d.ts +57 -57
  683. package/lib/layer/shared/vector-style.interface.d.ts +38 -38
  684. package/lib/layer/style-modal/index.d.ts +1 -1
  685. package/lib/layer/style-modal/style-modal.component.d.ts +42 -42
  686. package/lib/layer/track-feature-button/index.d.ts +1 -1
  687. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +15 -15
  688. package/lib/layer/utils/image-watcher.d.ts +17 -17
  689. package/lib/layer/utils/index.d.ts +5 -5
  690. package/lib/layer/utils/layer.utils.d.ts +2 -2
  691. package/lib/layer/utils/outputLegend.d.ts +7 -7
  692. package/lib/layer/utils/tile-watcher.d.ts +14 -14
  693. package/lib/layer/utils/vector-watcher.d.ts +13 -13
  694. package/lib/map/baselayers-switcher/baselayers-switcher.animation.d.ts +2 -2
  695. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +21 -21
  696. package/lib/map/baselayers-switcher/index.d.ts +2 -2
  697. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +29 -29
  698. package/lib/map/geolocate-button/geolocate-button.component.d.ts +22 -22
  699. package/lib/map/geolocate-button/index.d.ts +1 -1
  700. package/lib/map/home-extent-button/home-extent-button.component.d.ts +20 -20
  701. package/lib/map/home-extent-button/index.d.ts +1 -1
  702. package/lib/map/index.d.ts +13 -13
  703. package/lib/map/info-section/index.d.ts +1 -1
  704. package/lib/map/info-section/info-section.component.d.ts +7 -7
  705. package/lib/map/map-browser/index.d.ts +1 -1
  706. package/lib/map/map-browser/map-browser.component.d.ts +25 -25
  707. package/lib/map/map-center/index.d.ts +1 -1
  708. package/lib/map/map-center/map-center.component.d.ts +31 -31
  709. package/lib/map/map.module.d.ts +28 -28
  710. package/lib/map/menu-button/index.d.ts +1 -1
  711. package/lib/map/menu-button/menu-button.component.d.ts +17 -17
  712. package/lib/map/offline-button/index.d.ts +1 -1
  713. package/lib/map/offline-button/offline-button.component.d.ts +23 -23
  714. package/lib/map/rotation-button/index.d.ts +1 -1
  715. package/lib/map/rotation-button/rotation-button.component.d.ts +17 -17
  716. package/lib/map/shared/controllers/controller.d.ts +29 -29
  717. package/lib/map/shared/controllers/geolocation.d.ts +112 -112
  718. package/lib/map/shared/controllers/index.d.ts +3 -3
  719. package/lib/map/shared/controllers/view.d.ts +200 -200
  720. package/lib/map/shared/hover-feature.directive.d.ts +132 -132
  721. package/lib/map/shared/index.d.ts +13 -13
  722. package/lib/map/shared/linkedLayers.utils.d.ts +17 -17
  723. package/lib/map/shared/map-pointer-position.directive.d.ts +71 -71
  724. package/lib/map/shared/map.d.ts +135 -135
  725. package/lib/map/shared/map.enums.d.ts +4 -4
  726. package/lib/map/shared/map.interface.d.ts +57 -57
  727. package/lib/map/shared/map.service.d.ts +19 -19
  728. package/lib/map/shared/map.utils.d.ts +90 -90
  729. package/lib/map/shared/mapOffline.directive.d.ts +21 -21
  730. package/lib/map/shared/projection.interfaces.d.ts +29 -29
  731. package/lib/map/shared/projection.service.d.ts +19 -19
  732. package/lib/map/shared/projection.utils.d.ts +19 -19
  733. package/lib/map/swipe-control/index.d.ts +1 -1
  734. package/lib/map/swipe-control/swipe-control.component.d.ts +97 -97
  735. package/lib/map/utils/layer-watcher.d.ts +20 -20
  736. package/lib/map/wake-lock-button/index.d.ts +1 -1
  737. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -30
  738. package/lib/map/zoom-button/index.d.ts +1 -1
  739. package/lib/map/zoom-button/zoom-button.component.d.ts +12 -12
  740. package/lib/measure/index.d.ts +3 -3
  741. package/lib/measure/measure.module.d.ts +7 -7
  742. package/lib/measure/measurer/measure-format.pipe.d.ts +15 -15
  743. package/lib/measure/measurer/measurer-dialog.component.d.ts +14 -14
  744. package/lib/measure/measurer/measurer-item.component.d.ts +66 -66
  745. package/lib/measure/measurer/measurer.component.d.ts +405 -405
  746. package/lib/measure/measurer/measurer.module.d.ts +25 -25
  747. package/lib/measure/shared/index.d.ts +3 -3
  748. package/lib/measure/shared/measure.enum.d.ts +33 -33
  749. package/lib/measure/shared/measure.interfaces.d.ts +21 -21
  750. package/lib/measure/shared/measure.utils.d.ts +180 -180
  751. package/lib/metadata/index.d.ts +2 -2
  752. package/lib/metadata/metadata-button/index.d.ts +1 -1
  753. package/lib/metadata/metadata-button/metadata-button.component.d.ts +26 -26
  754. package/lib/metadata/metadata.module.d.ts +15 -15
  755. package/lib/metadata/shared/index.d.ts +2 -2
  756. package/lib/metadata/shared/metadata.interface.d.ts +13 -13
  757. package/lib/metadata/shared/metadata.service.d.ts +8 -8
  758. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +14 -14
  759. package/lib/offline/geoDB/geoDB.enums.d.ts +4 -4
  760. package/lib/offline/geoDB/geoDB.interface.d.ts +19 -19
  761. package/lib/offline/geoDB/geoDB.service.d.ts +37 -37
  762. package/lib/offline/geoDB/index.d.ts +4 -4
  763. package/lib/offline/index.d.ts +2 -2
  764. package/lib/offline/shared/geo-network.service.d.ts +28 -28
  765. package/lib/offline/shared/index.d.ts +1 -1
  766. package/lib/overlay/index.d.ts +1 -1
  767. package/lib/overlay/overlay.module.d.ts +9 -9
  768. package/lib/overlay/shared/index.d.ts +6 -6
  769. package/lib/overlay/shared/overlay-marker-style.utils.d.ts +11 -11
  770. package/lib/overlay/shared/overlay.d.ts +81 -81
  771. package/lib/overlay/shared/overlay.directive.d.ts +18 -18
  772. package/lib/overlay/shared/overlay.enum.d.ts +6 -6
  773. package/lib/overlay/shared/overlay.service.d.ts +14 -14
  774. package/lib/overlay/shared/overlay.utils.d.ts +17 -17
  775. package/lib/print/index.d.ts +3 -3
  776. package/lib/print/print/print.component.d.ts +35 -35
  777. package/lib/print/print-form/index.d.ts +1 -1
  778. package/lib/print/print-form/print-form.component.d.ts +97 -97
  779. package/lib/print/print.module.d.ts +19 -19
  780. package/lib/print/shared/geopdf.d.ts +1 -1
  781. package/lib/print/shared/index.d.ts +4 -4
  782. package/lib/print/shared/print.interface.d.ts +22 -22
  783. package/lib/print/shared/print.service.d.ts +168 -168
  784. package/lib/print/shared/print.type.d.ts +45 -45
  785. package/lib/query/index.d.ts +1 -1
  786. package/lib/query/query.module.d.ts +11 -11
  787. package/lib/query/shared/index.d.ts +6 -6
  788. package/lib/query/shared/query-search-source.d.ts +17 -17
  789. package/lib/query/shared/query-search-source.providers.d.ts +17 -17
  790. package/lib/query/shared/query.directive.d.ts +105 -105
  791. package/lib/query/shared/query.enums.d.ts +26 -26
  792. package/lib/query/shared/query.interfaces.d.ts +35 -35
  793. package/lib/query/shared/query.service.d.ts +56 -56
  794. package/lib/query/shared/query.utils.d.ts +27 -27
  795. package/lib/search/index.d.ts +11 -11
  796. package/lib/search/search-bar/search-bar.component.d.ts +230 -230
  797. package/lib/search/search-bar/search-bar.module.d.ts +23 -23
  798. package/lib/search/search-bar/search-url-param.directive.d.ts +13 -13
  799. package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -32
  800. package/lib/search/search-results/search-results-add-button.component.d.ts +76 -76
  801. package/lib/search/search-results/search-results-item.component.d.ts +47 -47
  802. package/lib/search/search-results/search-results.component.d.ts +161 -161
  803. package/lib/search/search-results/search-results.module.d.ts +28 -28
  804. package/lib/search/search-selector/search-selector.component.d.ts +58 -58
  805. package/lib/search/search-selector/search-selector.module.d.ts +19 -19
  806. package/lib/search/search-settings/search-settings.component.d.ts +102 -102
  807. package/lib/search/search-settings/search-settings.module.d.ts +20 -20
  808. package/lib/search/search.module.d.ts +14 -14
  809. package/lib/search/shared/index.d.ts +8 -8
  810. package/lib/search/shared/search-pointer-summary.directive.d.ts +133 -133
  811. package/lib/search/shared/search-source-service.providers.d.ts +15 -15
  812. package/lib/search/shared/search-source.service.d.ts +32 -32
  813. package/lib/search/shared/search.enums.d.ts +1 -1
  814. package/lib/search/shared/search.interfaces.d.ts +29 -29
  815. package/lib/search/shared/search.service.d.ts +53 -53
  816. package/lib/search/shared/search.utils.d.ts +39 -39
  817. package/lib/search/shared/sources/coordinates.d.ts +40 -40
  818. package/lib/search/shared/sources/coordinates.interfaces.d.ts +12 -12
  819. package/lib/search/shared/sources/coordinates.providers.d.ts +31 -31
  820. package/lib/search/shared/sources/icherche.d.ts +96 -96
  821. package/lib/search/shared/sources/icherche.interfaces.d.ts +30 -30
  822. package/lib/search/shared/sources/icherche.providers.d.ts +46 -46
  823. package/lib/search/shared/sources/ilayer.d.ts +55 -55
  824. package/lib/search/shared/sources/ilayer.interfaces.d.ts +47 -47
  825. package/lib/search/shared/sources/ilayer.providers.d.ts +31 -31
  826. package/lib/search/shared/sources/index.d.ts +17 -17
  827. package/lib/search/shared/sources/nominatim.d.ts +45 -45
  828. package/lib/search/shared/sources/nominatim.interfaces.d.ts +10 -10
  829. package/lib/search/shared/sources/nominatim.providers.d.ts +18 -18
  830. package/lib/search/shared/sources/source.d.ts +108 -108
  831. package/lib/search/shared/sources/source.interfaces.d.ts +47 -47
  832. package/lib/search/shared/sources/storedqueries.d.ts +73 -73
  833. package/lib/search/shared/sources/storedqueries.interfaces.d.ts +42 -42
  834. package/lib/search/shared/sources/storedqueries.providers.d.ts +32 -32
  835. package/lib/toast/index.d.ts +1 -1
  836. package/lib/toast/toast.component.d.ts +33 -33
  837. package/lib/toast/toast.module.d.ts +14 -14
  838. package/lib/utils/commonVectorStyle.d.ts +14 -14
  839. package/lib/utils/commonVectorStyle.interface.d.ts +16 -16
  840. package/lib/utils/googleLinks.d.ts +5 -5
  841. package/lib/utils/id-generator.d.ts +54 -54
  842. package/lib/utils/index.d.ts +5 -5
  843. package/lib/utils/osmLinks.d.ts +4 -4
  844. package/lib/wkt/index.d.ts +1 -1
  845. package/lib/wkt/shared/index.d.ts +1 -1
  846. package/lib/wkt/shared/wkt.service.d.ts +19 -19
  847. package/lib/wkt/wkt.module.d.ts +8 -8
  848. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +23 -23
  849. package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +14 -14
  850. package/lib/workspace/confirmation-popup/index.d.ts +2 -2
  851. package/lib/workspace/index.d.ts +7 -7
  852. package/lib/workspace/shared/edition-workspace.d.ts +82 -82
  853. package/lib/workspace/shared/edition-workspace.service.d.ts +52 -52
  854. package/lib/workspace/shared/feature-workspace.d.ts +18 -18
  855. package/lib/workspace/shared/feature-workspace.service.d.ts +19 -19
  856. package/lib/workspace/shared/index.d.ts +7 -7
  857. package/lib/workspace/shared/wfs-workspace.d.ts +18 -18
  858. package/lib/workspace/shared/wfs-workspace.service.d.ts +19 -19
  859. package/lib/workspace/shared/wms-workspace.service.d.ts +22 -22
  860. package/lib/workspace/shared/workspace.utils.d.ts +10 -10
  861. package/lib/workspace/widgets/index.d.ts +3 -3
  862. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +29 -29
  863. package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +14 -14
  864. package/lib/workspace/widgets/widgets.d.ts +9 -9
  865. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +32 -32
  866. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +11 -11
  867. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +26 -26
  868. package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +11 -11
  869. package/lib/workspace/workspace.module.d.ts +14 -14
  870. package/package.json +4 -4
  871. package/public_api.d.ts +51 -51
@@ -1,521 +1,521 @@
1
- import { Component, Input, Optional, Self, ChangeDetectionStrategy } from '@angular/core';
2
- import OlGeoJSON from 'ol/format/GeoJSON';
3
- import OlFeature from 'ol/Feature';
4
- import OlVectorSource from 'ol/source/Vector';
5
- import OlVectorLayer from 'ol/layer/Vector';
6
- import OlOverlay from 'ol/Overlay';
7
- import * as olproj from 'ol/proj';
8
- import Point from 'ol/geom/Point';
9
- import { MeasureLengthUnit, updateOlGeometryMidpoints, formatMeasure, measureOlGeometry } from '../../measure';
10
- import { DrawControl, ModifyControl } from '../shared/controls';
11
- import { createDrawInteractionStyle } from '../shared/geometry.utils';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/forms";
14
- function GeometryFormFieldInputComponent_ng_template_0_Template(rf, ctx) { }
15
- /**
16
- * This input allows a user to draw a new geometry or to edit
17
- * an existing one on a map. A text input is also displayed in the
18
- * form with some instructions.
19
- * This is still WIP.
20
- */
21
- export class GeometryFormFieldInputComponent {
22
- constructor(cdRef, ngControl) {
23
- this.cdRef = cdRef;
24
- this.ngControl = ngControl;
25
- this.olGeoJSON = new OlGeoJSON();
26
- this.ready = false;
27
- this.olTooltip = this.createMeasureTooltip();
28
- /**
29
- * The drawGuide around the mouse pointer to help drawing
30
- */
31
- this.drawGuide = null;
32
- /**
33
- * Whether a measure tooltip should be displayed
34
- */
35
- this.measure = false;
36
- this._drawControlIsActive = true;
37
- /**
38
- * Control options
39
- */
40
- this.controlOptions = {};
41
- this.onChange = () => { };
42
- this.onTouched = () => { };
43
- if (this.ngControl !== undefined) {
44
- // Setting the value accessor directly (instead of using
45
- // the providers) to avoid running into a circular import.
46
- this.ngControl.valueAccessor = this;
47
- }
48
- }
49
- /**
50
- * The geometry type
51
- */
52
- set geometryType(value) {
53
- this._geometryType = value;
54
- if (this.ready === false) {
55
- return;
56
- }
57
- this.deactivateControl();
58
- this.createDrawControl();
59
- this.drawControl.freehand$.next(this.freehandDrawIsActive);
60
- this.toggleControl();
61
- }
62
- get geometryType() { return this._geometryType; }
63
- /**
64
- * Whether draw control should be active or not
65
- */
66
- get drawControlIsActive() { return this._drawControlIsActive; }
67
- set drawControlIsActive(value) {
68
- this._drawControlIsActive = value;
69
- if (this.ready === false) {
70
- return;
71
- }
72
- this.deactivateControl();
73
- if (!this._drawControlIsActive) {
74
- return;
75
- }
76
- else {
77
- this.toggleControl();
78
- }
79
- }
80
- /**
81
- * Whether freehand draw control should be active or not
82
- */
83
- get freehandDrawIsActive() { return this._freehandDrawIsActive; }
84
- set freehandDrawIsActive(value) {
85
- this._freehandDrawIsActive = value;
86
- this.deactivateControl();
87
- this.createDrawControl();
88
- this.createModifyControl();
89
- this.drawControl.freehand$.next(this.freehandDrawIsActive);
90
- if (this.ready === false) {
91
- return;
92
- }
93
- if (!this.drawControlIsActive) {
94
- return;
95
- }
96
- this.toggleControl();
97
- }
98
- /**
99
- * Whether freehand draw control should be active or not
100
- */
101
- get predefinedRadius() { return this._predefinedRadius; }
102
- set predefinedRadius(value) {
103
- this._predefinedRadius = value;
104
- this.drawControl.ispredefinedRadius$.next(value);
105
- }
106
- /**
107
- * Style for the draw control (applies while the geometry is being drawn)
108
- */
109
- set drawStyle(value) {
110
- if (value === undefined) {
111
- value = createDrawInteractionStyle();
112
- }
113
- this._drawStyle = value;
114
- const olGuideStyle = this.getGuideStyleFromDrawStyle(value);
115
- if (olGuideStyle !== undefined) {
116
- this.defaultDrawStyleRadius = olGuideStyle.getRadius();
117
- }
118
- else {
119
- this.defaultDrawStyleRadius = null;
120
- }
121
- if (this.ready === false) {
122
- return;
123
- }
124
- this.deactivateControl();
125
- this.createDrawControl();
126
- this.createModifyControl();
127
- this.drawControl.freehand$.next(this.freehandDrawIsActive);
128
- this.toggleControl();
129
- }
130
- get drawStyle() { return this._drawStyle; }
131
- /**
132
- * Style for the overlay layer (applies once the geometry is added to the map)
133
- * If not specified, drawStyle applies
134
- */
135
- set overlayStyle(value) { this._overlayStyle = value; }
136
- get overlayStyle() { return this._overlayStyle; }
137
- /**
138
- * The geometry value (GeoJSON)
139
- * Implemented as part of ControlValueAccessor.
140
- */
141
- set value(value) {
142
- this._value = value;
143
- if (this.ready === false) {
144
- return;
145
- }
146
- if (value) {
147
- this.addGeoJSONToOverlay(value);
148
- }
149
- else {
150
- this.olOverlaySource.clear(true);
151
- }
152
- this.onChange(value);
153
- this.toggleControl();
154
- this.cdRef.detectChanges();
155
- }
156
- get value() { return this._value; }
157
- /**
158
- * The vector source to add the geometry to
159
- * @internal
160
- */
161
- get olOverlaySource() {
162
- return this.olOverlayLayer.getSource();
163
- }
164
- set radius(value) {
165
- if (this.ready === false) {
166
- return;
167
- }
168
- if (this.modifyControl.getSource()) {
169
- this.modifyControl.getSource().refresh();
170
- }
171
- if (this.freehandDrawIsActive) {
172
- let olModify;
173
- setTimeout(() => {
174
- olModify = this.modifyControl.olModifyInteraction;
175
- if (olModify) {
176
- if (olModify.features_) {
177
- olModify.features_.clear();
178
- this.addGeoJSONToOverlay(this.value);
179
- }
180
- }
181
- }, 0);
182
- }
183
- }
184
- /**
185
- * Create an overlay layer, add the initial geometry to it (if any)
186
- * and toggle the right interaction.
187
- * @internal
188
- */
189
- ngOnInit() {
190
- if (this.drawStyle === undefined) {
191
- this.drawStyle = createDrawInteractionStyle();
192
- }
193
- if (this.overlayStyle === undefined) {
194
- this.overlayStyle = this.drawStyle;
195
- }
196
- this.addOlOverlayLayer();
197
- this.createDrawControl();
198
- this.createModifyControl();
199
- if (this.value) {
200
- this.addGeoJSONToOverlay(this.value);
201
- }
202
- this.toggleControl();
203
- this.ready = true;
204
- }
205
- /**
206
- * Clear the overlay layer and any interaction added by this component.
207
- * @internal
208
- */
209
- ngOnDestroy() {
210
- // This is mandatory when the form control is reused after
211
- // this component has been destroyed. It seems like the control
212
- // keeps a reference to this component even after it's destroyed
213
- // and it attempts to set it's value
214
- this.ready = false;
215
- this.deactivateControl();
216
- this.olOverlaySource.clear();
217
- this.map.ol.removeLayer(this.olOverlayLayer);
218
- }
219
- /**
220
- * Implemented as part of ControlValueAccessor.
221
- */
222
- // eslint-disable-next-line @typescript-eslint/ban-types
223
- registerOnChange(fn) {
224
- this.onChange = fn;
225
- }
226
- /**
227
- * Implemented as part of ControlValueAccessor.
228
- */
229
- // eslint-disable-next-line @typescript-eslint/ban-types
230
- registerOnTouched(fn) {
231
- this.onTouched = fn;
232
- }
233
- /**
234
- * Implemented as part of ControlValueAccessor.
235
- */
236
- writeValue(value) {
237
- this.value = value;
238
- }
239
- /**
240
- * Add an overlay layer to the map
241
- */
242
- addOlOverlayLayer() {
243
- this.olOverlayLayer = new OlVectorLayer({
244
- source: new OlVectorSource(),
245
- zIndex: 500,
246
- style: null
247
- });
248
- this.map.ol.addLayer(this.olOverlayLayer);
249
- }
250
- /**
251
- * Create a draw control and subscribe to it's geometry
252
- */
253
- createDrawControl() {
254
- const controlOptions = Object.assign({}, this.controlOptions, {
255
- geometryType: this.geometryType || 'Point',
256
- drawingLayer: this.olOverlayLayer,
257
- interactionStyle: typeof this.drawStyle === 'function' ? this.drawStyle : (olFeature, resolution) => {
258
- const style = this.drawStyle;
259
- this.updateDrawStyleWithDrawGuide(style, resolution);
260
- return style;
261
- }
262
- });
263
- this.drawControl = new DrawControl(controlOptions);
264
- }
265
- /**
266
- * Create a modify control and subscribe to it's geometry
267
- */
268
- createModifyControl() {
269
- const controlOptions = Object.assign({}, this.controlOptions, {
270
- layer: this.olOverlayLayer,
271
- drawStyle: typeof this.drawStyle === 'function' ? this.drawStyle : (olFeature, resolution) => {
272
- const style = this.drawStyle;
273
- this.updateDrawStyleWithDrawGuide(style, resolution);
274
- return style;
275
- }
276
- });
277
- this.modifyControl = new ModifyControl(controlOptions);
278
- }
279
- /**
280
- * Toggle the proper control (draw or modify)
281
- */
282
- toggleControl() {
283
- let activate;
284
- if (!this.value && this.geometryType) {
285
- activate = this.drawControl;
286
- }
287
- else {
288
- activate = this.modifyControl;
289
- }
290
- // If the control that should be activated
291
- // is not the same as the current active control,
292
- // deactivate the current control and activate the new one
293
- // Otherwise, do nothing and keep the current control active
294
- if (activate !== this.activeControl) {
295
- this.deactivateControl();
296
- this.activateControl(activate);
297
- }
298
- }
299
- /**
300
- * Activate a given control
301
- * @param control Control
302
- */
303
- activateControl(control) {
304
- this.activeControl = control;
305
- this.olGeometryEnds$$ = control.end$
306
- .subscribe((olGeometry) => this.onOlGeometryEnds(olGeometry));
307
- if (this.measure === true && control === this.drawControl) {
308
- this.olGeometryChanges$$ = control.changes$
309
- .subscribe((olGeometry) => this.onOlGeometryChanges(olGeometry));
310
- }
311
- control.setOlMap(this.map.ol, false);
312
- }
313
- /**
314
- * Deactivate the active control
315
- */
316
- deactivateControl() {
317
- this.removeMeasureTooltip();
318
- if (this.activeControl !== undefined) {
319
- this.activeControl.setOlMap(undefined);
320
- }
321
- if (this.olGeometryEnds$$ !== undefined) {
322
- this.olGeometryEnds$$.unsubscribe();
323
- }
324
- if (this.olGeometryChanges$$ !== undefined) {
325
- this.olGeometryChanges$$.unsubscribe();
326
- }
327
- this.activeControl = undefined;
328
- }
329
- /**
330
- * Update measures observables and map tooltips
331
- * @param olGeometry Ol linestring or polygon
332
- */
333
- onOlGeometryEnds(olGeometry) {
334
- this.removeMeasureTooltip();
335
- this.setOlGeometry(olGeometry);
336
- }
337
- /**
338
- * Update measures observables and map tooltips
339
- * @param olGeometry Ol linestring or polygon
340
- */
341
- onOlGeometryChanges(olGeometry) {
342
- if (olGeometry.getType() !== 'Point') {
343
- this.updateMeasureTooltip(olGeometry);
344
- }
345
- }
346
- /**
347
- * When drawing ends, convert the output value to GeoJSON and keep it.
348
- * Restore the double click interaction.
349
- * @param olGeometry OL geometry
350
- */
351
- setOlGeometry(olGeometry) {
352
- let value;
353
- if (olGeometry === undefined) {
354
- return;
355
- }
356
- if (olGeometry.getType() === 'Circle') { // Because Circle doesn't exist as a GeoJSON object
357
- olGeometry = this.circleToPoint(olGeometry);
358
- }
359
- value = this.olGeoJSON.writeGeometryObject(olGeometry, {
360
- featureProjection: this.map.projection,
361
- dataProjection: 'EPSG:4326'
362
- });
363
- if (olGeometry.get('radius')) {
364
- value.radius = olGeometry.get('radius');
365
- olGeometry.set('radius', value.radius);
366
- }
367
- this.writeValue(value);
368
- }
369
- circleToPoint(olGeometry) {
370
- const center = olGeometry.getCenter();
371
- const coordinates = olproj.transform(center, this.map.projection, 'EPSG:4326');
372
- const radius = Math.round(olGeometry.getRadius() * (Math.cos((Math.PI / 180) * coordinates[1])));
373
- // Convert it to a point object
374
- olGeometry = new Point(center);
375
- olGeometry.set('radius', radius, true);
376
- return olGeometry;
377
- }
378
- /**
379
- * Add a GeoJSON geometry to the overlay
380
- * @param geometry GeoJSON geometry
381
- */
382
- addGeoJSONToOverlay(geometry) {
383
- const olGeometry = this.olGeoJSON.readGeometry(geometry, {
384
- dataProjection: 'EPSG:4326',
385
- featureProjection: this.map.projection
386
- });
387
- const olFeature = new OlFeature({
388
- geometry: olGeometry
389
- });
390
- olFeature.setStyle(this.overlayStyle);
391
- this.olOverlaySource.clear();
392
- this.olOverlaySource.addFeature(olFeature);
393
- }
394
- /**
395
- * Create the measure tooltip
396
- */
397
- createMeasureTooltip() {
398
- return new OlOverlay({
399
- element: document.createElement('div'),
400
- offset: [-30, -10],
401
- className: [
402
- 'igo-map-tooltip',
403
- 'igo-map-tooltip-measure'
404
- ].join(' '),
405
- stopEvent: false
406
- });
407
- }
408
- /**
409
- * Update the measure tooltip of an OL geometry
410
- * @param olGeometry OL Geometry
411
- */
412
- updateMeasureTooltip(olGeometry) {
413
- const measure = measureOlGeometry(olGeometry, this.map.projection);
414
- const lengths = measure.lengths;
415
- const lastIndex = olGeometry.getType() === 'Polygon' ? lengths.length - 2 : lengths.length - 1;
416
- const lastLength = lengths[lastIndex];
417
- const olMidpoints = updateOlGeometryMidpoints(olGeometry);
418
- const olLastMidpoint = olMidpoints[lastIndex];
419
- if (olMidpoints.length === 0 || olLastMidpoint === undefined) {
420
- this.removeMeasureTooltip();
421
- return;
422
- }
423
- this.olTooltip.setPosition(olLastMidpoint.getFlatCoordinates());
424
- const innerHtml = formatMeasure(lastLength, {
425
- decimal: 1,
426
- unit: MeasureLengthUnit.Meters,
427
- unitAbbr: true,
428
- locale: 'fr'
429
- });
430
- this.olTooltip.getElement().innerHTML = innerHtml;
431
- if (this.olTooltip.getMap() === undefined) {
432
- this.map.ol.addOverlay(this.olTooltip);
433
- }
434
- }
435
- /**
436
- * Remove the measure tooltip from the map
437
- */
438
- removeMeasureTooltip() {
439
- if (this.olTooltip.getMap && this.olTooltip.getMap() !== undefined) {
440
- this.map.ol.removeOverlay(this.olTooltip);
441
- this.olTooltip.setMap(undefined);
442
- }
443
- }
444
- /**
445
- * Adjust the draw style with the specified draw guide distance, if possible
446
- * @param olStyle Draw style to update
447
- * @param resolution Resolution (to make the screen size of symbol fit the drawGuide value)
448
- */
449
- updateDrawStyleWithDrawGuide(olStyle, resolution) {
450
- const olGuideStyle = this.getGuideStyleFromDrawStyle(olStyle);
451
- if (olGuideStyle === undefined) {
452
- return;
453
- }
454
- const drawGuide = this.drawGuide;
455
- let radius;
456
- if (!drawGuide || drawGuide < 0) {
457
- radius = this.defaultDrawStyleRadius;
458
- }
459
- else {
460
- radius = drawGuide > 0 ? drawGuide / resolution : drawGuide;
461
- }
462
- olGuideStyle.setRadius(radius);
463
- }
464
- /**
465
- * Returns wether a given Open Layers style has a radius property that can be set (used to set draw guide)
466
- * @param olStyle The style on which to perform the check
467
- */
468
- isStyleWithRadius(olStyle) {
469
- return typeof olStyle !== 'function' && olStyle.setRadius;
470
- }
471
- /**
472
- * Returns wether a given Open Layers style has a radius property that can be set (used to set draw guide)
473
- * @param olStyle The style on which to perform the check
474
- */
475
- getGuideStyleFromDrawStyle(olStyle) {
476
- if (Array.isArray(olStyle)) {
477
- olStyle = olStyle[0];
478
- }
479
- if (this.isStyleWithRadius(olStyle)) {
480
- return olStyle;
481
- }
482
- return undefined;
483
- }
484
- }
485
- GeometryFormFieldInputComponent.ɵfac = function GeometryFormFieldInputComponent_Factory(t) { return new (t || GeometryFormFieldInputComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.NgControl, 10)); };
486
- GeometryFormFieldInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GeometryFormFieldInputComponent, selectors: [["igo-geometry-form-field-input"]], inputs: { map: "map", geometryType: "geometryType", drawGuide: "drawGuide", measure: "measure", drawControlIsActive: "drawControlIsActive", freehandDrawIsActive: "freehandDrawIsActive", predefinedRadius: "predefinedRadius", controlOptions: "controlOptions", drawStyle: "drawStyle", overlayStyle: "overlayStyle", value: "value", radius: "radius" }, decls: 1, vars: 0, template: function GeometryFormFieldInputComponent_Template(rf, ctx) { if (rf & 1) {
487
- i0.ɵɵtemplate(0, GeometryFormFieldInputComponent_ng_template_0_Template, 0, 0, "ng-template");
488
- } }, encapsulation: 2, changeDetection: 0 });
489
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GeometryFormFieldInputComponent, [{
490
- type: Component,
491
- args: [{ selector: 'igo-geometry-form-field-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template></ng-template>" }]
492
- }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
493
- type: Optional
494
- }, {
495
- type: Self
496
- }] }]; }, { map: [{
497
- type: Input
498
- }], geometryType: [{
499
- type: Input
500
- }], drawGuide: [{
501
- type: Input
502
- }], measure: [{
503
- type: Input
504
- }], drawControlIsActive: [{
505
- type: Input
506
- }], freehandDrawIsActive: [{
507
- type: Input
508
- }], predefinedRadius: [{
509
- type: Input
510
- }], controlOptions: [{
511
- type: Input
512
- }], drawStyle: [{
513
- type: Input
514
- }], overlayStyle: [{
515
- type: Input
516
- }], value: [{
517
- type: Input
518
- }], radius: [{
519
- type: Input
520
- }] }); })();
1
+ import { Component, Input, Optional, Self, ChangeDetectionStrategy } from '@angular/core';
2
+ import OlGeoJSON from 'ol/format/GeoJSON';
3
+ import OlFeature from 'ol/Feature';
4
+ import OlVectorSource from 'ol/source/Vector';
5
+ import OlVectorLayer from 'ol/layer/Vector';
6
+ import OlOverlay from 'ol/Overlay';
7
+ import * as olproj from 'ol/proj';
8
+ import Point from 'ol/geom/Point';
9
+ import { MeasureLengthUnit, updateOlGeometryMidpoints, formatMeasure, measureOlGeometry } from '../../measure';
10
+ import { DrawControl, ModifyControl } from '../shared/controls';
11
+ import { createDrawInteractionStyle } from '../shared/geometry.utils';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/forms";
14
+ function GeometryFormFieldInputComponent_ng_template_0_Template(rf, ctx) { }
15
+ /**
16
+ * This input allows a user to draw a new geometry or to edit
17
+ * an existing one on a map. A text input is also displayed in the
18
+ * form with some instructions.
19
+ * This is still WIP.
20
+ */
21
+ export class GeometryFormFieldInputComponent {
22
+ constructor(cdRef, ngControl) {
23
+ this.cdRef = cdRef;
24
+ this.ngControl = ngControl;
25
+ this.olGeoJSON = new OlGeoJSON();
26
+ this.ready = false;
27
+ this.olTooltip = this.createMeasureTooltip();
28
+ /**
29
+ * The drawGuide around the mouse pointer to help drawing
30
+ */
31
+ this.drawGuide = null;
32
+ /**
33
+ * Whether a measure tooltip should be displayed
34
+ */
35
+ this.measure = false;
36
+ this._drawControlIsActive = true;
37
+ /**
38
+ * Control options
39
+ */
40
+ this.controlOptions = {};
41
+ this.onChange = () => { };
42
+ this.onTouched = () => { };
43
+ if (this.ngControl !== undefined) {
44
+ // Setting the value accessor directly (instead of using
45
+ // the providers) to avoid running into a circular import.
46
+ this.ngControl.valueAccessor = this;
47
+ }
48
+ }
49
+ /**
50
+ * The geometry type
51
+ */
52
+ set geometryType(value) {
53
+ this._geometryType = value;
54
+ if (this.ready === false) {
55
+ return;
56
+ }
57
+ this.deactivateControl();
58
+ this.createDrawControl();
59
+ this.drawControl.freehand$.next(this.freehandDrawIsActive);
60
+ this.toggleControl();
61
+ }
62
+ get geometryType() { return this._geometryType; }
63
+ /**
64
+ * Whether draw control should be active or not
65
+ */
66
+ get drawControlIsActive() { return this._drawControlIsActive; }
67
+ set drawControlIsActive(value) {
68
+ this._drawControlIsActive = value;
69
+ if (this.ready === false) {
70
+ return;
71
+ }
72
+ this.deactivateControl();
73
+ if (!this._drawControlIsActive) {
74
+ return;
75
+ }
76
+ else {
77
+ this.toggleControl();
78
+ }
79
+ }
80
+ /**
81
+ * Whether freehand draw control should be active or not
82
+ */
83
+ get freehandDrawIsActive() { return this._freehandDrawIsActive; }
84
+ set freehandDrawIsActive(value) {
85
+ this._freehandDrawIsActive = value;
86
+ this.deactivateControl();
87
+ this.createDrawControl();
88
+ this.createModifyControl();
89
+ this.drawControl.freehand$.next(this.freehandDrawIsActive);
90
+ if (this.ready === false) {
91
+ return;
92
+ }
93
+ if (!this.drawControlIsActive) {
94
+ return;
95
+ }
96
+ this.toggleControl();
97
+ }
98
+ /**
99
+ * Whether freehand draw control should be active or not
100
+ */
101
+ get predefinedRadius() { return this._predefinedRadius; }
102
+ set predefinedRadius(value) {
103
+ this._predefinedRadius = value;
104
+ this.drawControl.ispredefinedRadius$.next(value);
105
+ }
106
+ /**
107
+ * Style for the draw control (applies while the geometry is being drawn)
108
+ */
109
+ set drawStyle(value) {
110
+ if (value === undefined) {
111
+ value = createDrawInteractionStyle();
112
+ }
113
+ this._drawStyle = value;
114
+ const olGuideStyle = this.getGuideStyleFromDrawStyle(value);
115
+ if (olGuideStyle !== undefined) {
116
+ this.defaultDrawStyleRadius = olGuideStyle.getRadius();
117
+ }
118
+ else {
119
+ this.defaultDrawStyleRadius = null;
120
+ }
121
+ if (this.ready === false) {
122
+ return;
123
+ }
124
+ this.deactivateControl();
125
+ this.createDrawControl();
126
+ this.createModifyControl();
127
+ this.drawControl.freehand$.next(this.freehandDrawIsActive);
128
+ this.toggleControl();
129
+ }
130
+ get drawStyle() { return this._drawStyle; }
131
+ /**
132
+ * Style for the overlay layer (applies once the geometry is added to the map)
133
+ * If not specified, drawStyle applies
134
+ */
135
+ set overlayStyle(value) { this._overlayStyle = value; }
136
+ get overlayStyle() { return this._overlayStyle; }
137
+ /**
138
+ * The geometry value (GeoJSON)
139
+ * Implemented as part of ControlValueAccessor.
140
+ */
141
+ set value(value) {
142
+ this._value = value;
143
+ if (this.ready === false) {
144
+ return;
145
+ }
146
+ if (value) {
147
+ this.addGeoJSONToOverlay(value);
148
+ }
149
+ else {
150
+ this.olOverlaySource.clear(true);
151
+ }
152
+ this.onChange(value);
153
+ this.toggleControl();
154
+ this.cdRef.detectChanges();
155
+ }
156
+ get value() { return this._value; }
157
+ /**
158
+ * The vector source to add the geometry to
159
+ * @internal
160
+ */
161
+ get olOverlaySource() {
162
+ return this.olOverlayLayer.getSource();
163
+ }
164
+ set radius(value) {
165
+ if (this.ready === false) {
166
+ return;
167
+ }
168
+ if (this.modifyControl.getSource()) {
169
+ this.modifyControl.getSource().refresh();
170
+ }
171
+ if (this.freehandDrawIsActive) {
172
+ let olModify;
173
+ setTimeout(() => {
174
+ olModify = this.modifyControl.olModifyInteraction;
175
+ if (olModify) {
176
+ if (olModify.features_) {
177
+ olModify.features_.clear();
178
+ this.addGeoJSONToOverlay(this.value);
179
+ }
180
+ }
181
+ }, 0);
182
+ }
183
+ }
184
+ /**
185
+ * Create an overlay layer, add the initial geometry to it (if any)
186
+ * and toggle the right interaction.
187
+ * @internal
188
+ */
189
+ ngOnInit() {
190
+ if (this.drawStyle === undefined) {
191
+ this.drawStyle = createDrawInteractionStyle();
192
+ }
193
+ if (this.overlayStyle === undefined) {
194
+ this.overlayStyle = this.drawStyle;
195
+ }
196
+ this.addOlOverlayLayer();
197
+ this.createDrawControl();
198
+ this.createModifyControl();
199
+ if (this.value) {
200
+ this.addGeoJSONToOverlay(this.value);
201
+ }
202
+ this.toggleControl();
203
+ this.ready = true;
204
+ }
205
+ /**
206
+ * Clear the overlay layer and any interaction added by this component.
207
+ * @internal
208
+ */
209
+ ngOnDestroy() {
210
+ // This is mandatory when the form control is reused after
211
+ // this component has been destroyed. It seems like the control
212
+ // keeps a reference to this component even after it's destroyed
213
+ // and it attempts to set it's value
214
+ this.ready = false;
215
+ this.deactivateControl();
216
+ this.olOverlaySource.clear();
217
+ this.map.ol.removeLayer(this.olOverlayLayer);
218
+ }
219
+ /**
220
+ * Implemented as part of ControlValueAccessor.
221
+ */
222
+ // eslint-disable-next-line @typescript-eslint/ban-types
223
+ registerOnChange(fn) {
224
+ this.onChange = fn;
225
+ }
226
+ /**
227
+ * Implemented as part of ControlValueAccessor.
228
+ */
229
+ // eslint-disable-next-line @typescript-eslint/ban-types
230
+ registerOnTouched(fn) {
231
+ this.onTouched = fn;
232
+ }
233
+ /**
234
+ * Implemented as part of ControlValueAccessor.
235
+ */
236
+ writeValue(value) {
237
+ this.value = value;
238
+ }
239
+ /**
240
+ * Add an overlay layer to the map
241
+ */
242
+ addOlOverlayLayer() {
243
+ this.olOverlayLayer = new OlVectorLayer({
244
+ source: new OlVectorSource(),
245
+ zIndex: 500,
246
+ style: null
247
+ });
248
+ this.map.ol.addLayer(this.olOverlayLayer);
249
+ }
250
+ /**
251
+ * Create a draw control and subscribe to it's geometry
252
+ */
253
+ createDrawControl() {
254
+ const controlOptions = Object.assign({}, this.controlOptions, {
255
+ geometryType: this.geometryType || 'Point',
256
+ drawingLayer: this.olOverlayLayer,
257
+ interactionStyle: typeof this.drawStyle === 'function' ? this.drawStyle : (olFeature, resolution) => {
258
+ const style = this.drawStyle;
259
+ this.updateDrawStyleWithDrawGuide(style, resolution);
260
+ return style;
261
+ }
262
+ });
263
+ this.drawControl = new DrawControl(controlOptions);
264
+ }
265
+ /**
266
+ * Create a modify control and subscribe to it's geometry
267
+ */
268
+ createModifyControl() {
269
+ const controlOptions = Object.assign({}, this.controlOptions, {
270
+ layer: this.olOverlayLayer,
271
+ drawStyle: typeof this.drawStyle === 'function' ? this.drawStyle : (olFeature, resolution) => {
272
+ const style = this.drawStyle;
273
+ this.updateDrawStyleWithDrawGuide(style, resolution);
274
+ return style;
275
+ }
276
+ });
277
+ this.modifyControl = new ModifyControl(controlOptions);
278
+ }
279
+ /**
280
+ * Toggle the proper control (draw or modify)
281
+ */
282
+ toggleControl() {
283
+ let activate;
284
+ if (!this.value && this.geometryType) {
285
+ activate = this.drawControl;
286
+ }
287
+ else {
288
+ activate = this.modifyControl;
289
+ }
290
+ // If the control that should be activated
291
+ // is not the same as the current active control,
292
+ // deactivate the current control and activate the new one
293
+ // Otherwise, do nothing and keep the current control active
294
+ if (activate !== this.activeControl) {
295
+ this.deactivateControl();
296
+ this.activateControl(activate);
297
+ }
298
+ }
299
+ /**
300
+ * Activate a given control
301
+ * @param control Control
302
+ */
303
+ activateControl(control) {
304
+ this.activeControl = control;
305
+ this.olGeometryEnds$$ = control.end$
306
+ .subscribe((olGeometry) => this.onOlGeometryEnds(olGeometry));
307
+ if (this.measure === true && control === this.drawControl) {
308
+ this.olGeometryChanges$$ = control.changes$
309
+ .subscribe((olGeometry) => this.onOlGeometryChanges(olGeometry));
310
+ }
311
+ control.setOlMap(this.map.ol, false);
312
+ }
313
+ /**
314
+ * Deactivate the active control
315
+ */
316
+ deactivateControl() {
317
+ this.removeMeasureTooltip();
318
+ if (this.activeControl !== undefined) {
319
+ this.activeControl.setOlMap(undefined);
320
+ }
321
+ if (this.olGeometryEnds$$ !== undefined) {
322
+ this.olGeometryEnds$$.unsubscribe();
323
+ }
324
+ if (this.olGeometryChanges$$ !== undefined) {
325
+ this.olGeometryChanges$$.unsubscribe();
326
+ }
327
+ this.activeControl = undefined;
328
+ }
329
+ /**
330
+ * Update measures observables and map tooltips
331
+ * @param olGeometry Ol linestring or polygon
332
+ */
333
+ onOlGeometryEnds(olGeometry) {
334
+ this.removeMeasureTooltip();
335
+ this.setOlGeometry(olGeometry);
336
+ }
337
+ /**
338
+ * Update measures observables and map tooltips
339
+ * @param olGeometry Ol linestring or polygon
340
+ */
341
+ onOlGeometryChanges(olGeometry) {
342
+ if (olGeometry.getType() !== 'Point') {
343
+ this.updateMeasureTooltip(olGeometry);
344
+ }
345
+ }
346
+ /**
347
+ * When drawing ends, convert the output value to GeoJSON and keep it.
348
+ * Restore the double click interaction.
349
+ * @param olGeometry OL geometry
350
+ */
351
+ setOlGeometry(olGeometry) {
352
+ let value;
353
+ if (olGeometry === undefined) {
354
+ return;
355
+ }
356
+ if (olGeometry.getType() === 'Circle') { // Because Circle doesn't exist as a GeoJSON object
357
+ olGeometry = this.circleToPoint(olGeometry);
358
+ }
359
+ value = this.olGeoJSON.writeGeometryObject(olGeometry, {
360
+ featureProjection: this.map.projection,
361
+ dataProjection: 'EPSG:4326'
362
+ });
363
+ if (olGeometry.get('radius')) {
364
+ value.radius = olGeometry.get('radius');
365
+ olGeometry.set('radius', value.radius);
366
+ }
367
+ this.writeValue(value);
368
+ }
369
+ circleToPoint(olGeometry) {
370
+ const center = olGeometry.getCenter();
371
+ const coordinates = olproj.transform(center, this.map.projection, 'EPSG:4326');
372
+ const radius = Math.round(olGeometry.getRadius() * (Math.cos((Math.PI / 180) * coordinates[1])));
373
+ // Convert it to a point object
374
+ olGeometry = new Point(center);
375
+ olGeometry.set('radius', radius, true);
376
+ return olGeometry;
377
+ }
378
+ /**
379
+ * Add a GeoJSON geometry to the overlay
380
+ * @param geometry GeoJSON geometry
381
+ */
382
+ addGeoJSONToOverlay(geometry) {
383
+ const olGeometry = this.olGeoJSON.readGeometry(geometry, {
384
+ dataProjection: 'EPSG:4326',
385
+ featureProjection: this.map.projection
386
+ });
387
+ const olFeature = new OlFeature({
388
+ geometry: olGeometry
389
+ });
390
+ olFeature.setStyle(this.overlayStyle);
391
+ this.olOverlaySource.clear();
392
+ this.olOverlaySource.addFeature(olFeature);
393
+ }
394
+ /**
395
+ * Create the measure tooltip
396
+ */
397
+ createMeasureTooltip() {
398
+ return new OlOverlay({
399
+ element: document.createElement('div'),
400
+ offset: [-30, -10],
401
+ className: [
402
+ 'igo-map-tooltip',
403
+ 'igo-map-tooltip-measure'
404
+ ].join(' '),
405
+ stopEvent: false
406
+ });
407
+ }
408
+ /**
409
+ * Update the measure tooltip of an OL geometry
410
+ * @param olGeometry OL Geometry
411
+ */
412
+ updateMeasureTooltip(olGeometry) {
413
+ const measure = measureOlGeometry(olGeometry, this.map.projection);
414
+ const lengths = measure.lengths;
415
+ const lastIndex = olGeometry.getType() === 'Polygon' ? lengths.length - 2 : lengths.length - 1;
416
+ const lastLength = lengths[lastIndex];
417
+ const olMidpoints = updateOlGeometryMidpoints(olGeometry);
418
+ const olLastMidpoint = olMidpoints[lastIndex];
419
+ if (olMidpoints.length === 0 || olLastMidpoint === undefined) {
420
+ this.removeMeasureTooltip();
421
+ return;
422
+ }
423
+ this.olTooltip.setPosition(olLastMidpoint.getFlatCoordinates());
424
+ const innerHtml = formatMeasure(lastLength, {
425
+ decimal: 1,
426
+ unit: MeasureLengthUnit.Meters,
427
+ unitAbbr: true,
428
+ locale: 'fr'
429
+ });
430
+ this.olTooltip.getElement().innerHTML = innerHtml;
431
+ if (this.olTooltip.getMap() === undefined) {
432
+ this.map.ol.addOverlay(this.olTooltip);
433
+ }
434
+ }
435
+ /**
436
+ * Remove the measure tooltip from the map
437
+ */
438
+ removeMeasureTooltip() {
439
+ if (this.olTooltip.getMap && this.olTooltip.getMap() !== undefined) {
440
+ this.map.ol.removeOverlay(this.olTooltip);
441
+ this.olTooltip.setMap(undefined);
442
+ }
443
+ }
444
+ /**
445
+ * Adjust the draw style with the specified draw guide distance, if possible
446
+ * @param olStyle Draw style to update
447
+ * @param resolution Resolution (to make the screen size of symbol fit the drawGuide value)
448
+ */
449
+ updateDrawStyleWithDrawGuide(olStyle, resolution) {
450
+ const olGuideStyle = this.getGuideStyleFromDrawStyle(olStyle);
451
+ if (olGuideStyle === undefined) {
452
+ return;
453
+ }
454
+ const drawGuide = this.drawGuide;
455
+ let radius;
456
+ if (!drawGuide || drawGuide < 0) {
457
+ radius = this.defaultDrawStyleRadius;
458
+ }
459
+ else {
460
+ radius = drawGuide > 0 ? drawGuide / resolution : drawGuide;
461
+ }
462
+ olGuideStyle.setRadius(radius);
463
+ }
464
+ /**
465
+ * Returns wether a given Open Layers style has a radius property that can be set (used to set draw guide)
466
+ * @param olStyle The style on which to perform the check
467
+ */
468
+ isStyleWithRadius(olStyle) {
469
+ return typeof olStyle !== 'function' && olStyle.setRadius;
470
+ }
471
+ /**
472
+ * Returns wether a given Open Layers style has a radius property that can be set (used to set draw guide)
473
+ * @param olStyle The style on which to perform the check
474
+ */
475
+ getGuideStyleFromDrawStyle(olStyle) {
476
+ if (Array.isArray(olStyle)) {
477
+ olStyle = olStyle[0];
478
+ }
479
+ if (this.isStyleWithRadius(olStyle)) {
480
+ return olStyle;
481
+ }
482
+ return undefined;
483
+ }
484
+ }
485
+ GeometryFormFieldInputComponent.ɵfac = function GeometryFormFieldInputComponent_Factory(t) { return new (t || GeometryFormFieldInputComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.NgControl, 10)); };
486
+ GeometryFormFieldInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GeometryFormFieldInputComponent, selectors: [["igo-geometry-form-field-input"]], inputs: { map: "map", geometryType: "geometryType", drawGuide: "drawGuide", measure: "measure", drawControlIsActive: "drawControlIsActive", freehandDrawIsActive: "freehandDrawIsActive", predefinedRadius: "predefinedRadius", controlOptions: "controlOptions", drawStyle: "drawStyle", overlayStyle: "overlayStyle", value: "value", radius: "radius" }, decls: 1, vars: 0, template: function GeometryFormFieldInputComponent_Template(rf, ctx) { if (rf & 1) {
487
+ i0.ɵɵtemplate(0, GeometryFormFieldInputComponent_ng_template_0_Template, 0, 0, "ng-template");
488
+ } }, encapsulation: 2, changeDetection: 0 });
489
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GeometryFormFieldInputComponent, [{
490
+ type: Component,
491
+ args: [{ selector: 'igo-geometry-form-field-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template></ng-template>" }]
492
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
493
+ type: Optional
494
+ }, {
495
+ type: Self
496
+ }] }]; }, { map: [{
497
+ type: Input
498
+ }], geometryType: [{
499
+ type: Input
500
+ }], drawGuide: [{
501
+ type: Input
502
+ }], measure: [{
503
+ type: Input
504
+ }], drawControlIsActive: [{
505
+ type: Input
506
+ }], freehandDrawIsActive: [{
507
+ type: Input
508
+ }], predefinedRadius: [{
509
+ type: Input
510
+ }], controlOptions: [{
511
+ type: Input
512
+ }], drawStyle: [{
513
+ type: Input
514
+ }], overlayStyle: [{
515
+ type: Input
516
+ }], value: [{
517
+ type: Input
518
+ }], radius: [{
519
+ type: Input
520
+ }] }); })();
521
521
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnktZm9ybS1maWVsZC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9nZW9tZXRyeS9nZW9tZXRyeS1mb3JtLWZpZWxkL2dlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZ2VvbWV0cnkvZ2VvbWV0cnktZm9ybS1maWVsZC9nZW9tZXRyeS1mb3JtLWZpZWxkLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFDUixJQUFJLEVBRUosdUJBQXVCLEVBQ3hCLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sU0FBUyxNQUFNLG1CQUFtQixDQUFDO0FBRzFDLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLGFBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxLQUFLLE1BQU0sZUFBZSxDQUFDO0FBR2xDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFPdEU7Ozs7O0dBS0c7QUFNSCxNQUFNLE9BQU8sK0JBQStCO0lBNk0xQyxZQUNVLEtBQXdCLEVBQ0wsU0FBb0I7UUFEdkMsVUFB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RztJQUNLLGlCQUFpQixDQUFDLE9BQU87UUFDL0IsT0FBTyxPQUFPLE9BQU8sS0FBSyxVQUFVLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssMEJBQTBCLENBQ2hDLE9BQytFO1FBRS9FLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQixPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzs4R0E1aUJVLCtCQUErQjtrRkFBL0IsK0JBQStCO1FDcEQ1Qyw2RkFBMkI7O3VGRG9EZCwrQkFBK0I7Y0FMM0MsU0FBUzsyQkFDRSwrQkFBK0IsbUJBRXhCLHVCQUF1QixDQUFDLE1BQU07O3NCQWlONUMsUUFBUTs7c0JBQUksSUFBSTt3QkF6TFYsR0FBRztrQkFBWCxLQUFLO1lBTUYsWUFBWTtrQkFEZixLQUFLO1lBa0JHLFNBQVM7a0JBQWpCLEtBQUs7WUFLRyxPQUFPO2tCQUFmLEtBQUs7WUFNRixtQkFBbUI7a0JBRHRCLEtBQUs7WUFvQkYsb0JBQW9CO2tCQUR2QixLQUFLO1lBMEJGLGdCQUFnQjtrQkFEbkIsS0FBSztZQVdHLGNBQWM7a0JBQXRCLEtBQUs7WUFNRixTQUFTO2tCQURaLEtBQUs7WUFpQ0YsWUFBWTtrQkFEZixLQUFLO1lBVUYsS0FBSztrQkFEUixLQUFLO1lBNEJGLE1BQU07a0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERyYXdDb250cm9sT3B0aW9ucyB9IGZyb20gJy4vLi4vc2hhcmVkL2NvbnRyb2xzL2RyYXcnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBTZWxmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0ICogYXMgT2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgT2xHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCBPbEdlb21ldHJ5IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IE9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IE9sVmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCBPbE92ZXJsYXkgZnJvbSAnb2wvT3ZlcmxheSc7XG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XG5cbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQge1xuICBNZWFzdXJlTGVuZ3RoVW5pdCxcbiAgdXBkYXRlT2xHZW9tZXRyeU1pZHBvaW50cyxcbiAgZm9ybWF0TWVhc3VyZSxcbiAgbWVhc3VyZU9sR2VvbWV0cnlcbn0gZnJvbSAnLi4vLi4vbWVhc3VyZSc7XG5pbXBvcnQgeyBEcmF3Q29udHJvbCwgTW9kaWZ5Q29udHJvbCwgTW9kaWZ5Q29udHJvbE9wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvY29udHJvbHMnO1xuaW1wb3J0IHsgY3JlYXRlRHJhd0ludGVyYWN0aW9uU3R5bGUgfSBmcm9tICcuLi9zaGFyZWQvZ2VvbWV0cnkudXRpbHMnO1xuaW1wb3J0IHsgR2VvSlNPTkdlb21ldHJ5IH0gZnJvbSAnLi4vc2hhcmVkL2dlb21ldHJ5LmludGVyZmFjZXMnO1xuaW1wb3J0IE9sQ2lyY2xlIGZyb20gJ29sL2dlb20vQ2lyY2xlJztcbmltcG9ydCBPbExpbmVTdHJpbmcgZnJvbSAnb2wvZ2VvbS9MaW5lU3RyaW5nJztcbmltcG9ydCBPbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuaW1wb3J0IE9sUG9seWdvbiBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuXG4vKipcbiAqIFRoaXMgaW5wdXQgYWxsb3dzIGEgdXNlciB0byBkcmF3IGEgbmV3IGdlb21ldHJ5IG9yIHRvIGVkaXRcbiAqIGFuIGV4aXN0aW5nIG9uZSBvbiBhIG1hcC4gQSB0ZXh0IGlucHV0IGlzIGFsc28gZGlzcGxheWVkIGluIHRoZVxuICogZm9ybSB3aXRoIHNvbWUgaW5zdHJ1Y3Rpb25zLlxuICogVGhpcyBpcyBzdGlsbCBXSVAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1nZW9tZXRyeS1mb3JtLWZpZWxkLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBHZW9tZXRyeUZvcm1GaWVsZElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBwcml2YXRlIG9sT3ZlcmxheUxheWVyOiBPbFZlY3RvckxheWVyPE9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+PjtcbiAgcHJpdmF0ZSBvbEdlb0pTT04gPSBuZXcgT2xHZW9KU09OKCk7XG4gIHByaXZhdGUgcmVhZHkgPSBmYWxzZTtcblxuICBwcml2YXRlIGRyYXdDb250cm9sOiBEcmF3Q29udHJvbDtcbiAgcHJpdmF0ZSBtb2RpZnlDb250cm9sOiBNb2RpZnlDb250cm9sO1xuICBwcml2YXRlIGRlZmF1bHREcmF3U3R5bGVSYWRpdXM6IG51bWJlcjtcbiAgcHJpdmF0ZSBvbEdlb21ldHJ5RW5kcyQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb2xHZW9tZXRyeUNoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG9sVG9vbHRpcCA9IHRoaXMuY3JlYXRlTWVhc3VyZVRvb2x0aXAoKTtcblxuICAvKipcbiAgICogQWN0aXZlIGNvbnRyb2xcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWN0aXZlQ29udHJvbDogRHJhd0NvbnRyb2wgfCBNb2RpZnlDb250cm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFwIHRvIGRyYXcgdGhlIGdlb21ldHJ5IG9uXG4gICAqL1xuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICAvKipcbiAgICogVGhlIGdlb21ldHJ5IHR5cGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBnZW9tZXRyeVR5cGUodmFsdWU6IFR5cGUpIHtcbiAgICB0aGlzLl9nZW9tZXRyeVR5cGUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5yZWFkeSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRlYWN0aXZhdGVDb250cm9sKCk7XG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICAgIHRoaXMuZHJhd0NvbnRyb2wuZnJlZWhhbmQkLm5leHQodGhpcy5mcmVlaGFuZERyYXdJc0FjdGl2ZSk7XG4gICAgdGhpcy50b2dnbGVDb250cm9sKCk7XG4gIH1cbiAgZ2V0IGdlb21ldHJ5VHlwZSgpOiBUeXBlIHsgcmV0dXJuIHRoaXMuX2dlb21ldHJ5VHlwZTsgfVxuICBwcml2YXRlIF9nZW9tZXRyeVR5cGU6IFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkcmF3R3VpZGUgYXJvdW5kIHRoZSBtb3VzZSBwb2ludGVyIHRvIGhlbHAgZHJhd2luZ1xuICAgKi9cbiAgQElucHV0KCkgZHJhd0d1aWRlOiBudW1iZXIgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgbWVhc3VyZSB0b29sdGlwIHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIG1lYXN1cmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciBkcmF3IGNvbnRyb2wgc2hvdWxkIGJlIGFjdGl2ZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkcmF3Q29udHJvbElzQWN0aXZlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZHJhd0NvbnRyb2xJc0FjdGl2ZTsgfVxuICBzZXQgZHJhd0NvbnRyb2xJc0FjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RyYXdDb250cm9sSXNBY3RpdmUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5yZWFkeSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgIGlmICghdGhpcy5fZHJhd0NvbnRyb2xJc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvZ2dsZUNvbnRyb2woKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZHJhd0NvbnRyb2xJc0FjdGl2ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZnJlZWhhbmQgZHJhdyBjb250cm9sIHNob3VsZCBiZSBhY3RpdmUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZnJlZWhhbmREcmF3SXNBY3RpdmUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9mcmVlaGFuZERyYXdJc0FjdGl2ZTsgfVxuICBzZXQgZnJlZWhhbmREcmF3SXNBY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9mcmVlaGFuZERyYXdJc0FjdGl2ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGVhY3RpdmF0ZUNvbnRyb2woKTtcblxuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGlmeUNvbnRyb2woKTtcblxuICAgIHRoaXMuZHJhd0NvbnRyb2wuZnJlZWhhbmQkLm5leHQodGhpcy5mcmVlaGFuZERyYXdJc0FjdGl2ZSk7XG5cbiAgICBpZiAodGhpcy5yZWFkeSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZHJhd0NvbnRyb2xJc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZUNvbnRyb2woKTtcbiAgfVxuICBwcml2YXRlIF9mcmVlaGFuZERyYXdJc0FjdGl2ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBmcmVlaGFuZCBkcmF3IGNvbnRyb2wgc2hvdWxkIGJlIGFjdGl2ZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBwcmVkZWZpbmVkUmFkaXVzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fcHJlZGVmaW5lZFJhZGl1czsgfVxuICBzZXQgcHJlZGVmaW5lZFJhZGl1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3ByZWRlZmluZWRSYWRpdXMgPSB2YWx1ZTtcbiAgICB0aGlzLmRyYXdDb250cm9sLmlzcHJlZGVmaW5lZFJhZGl1cyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfcHJlZGVmaW5lZFJhZGl1czogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbCBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBjb250cm9sT3B0aW9uczoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcblxuICAvKipcbiAgICogU3R5bGUgZm9yIHRoZSBkcmF3IGNvbnRyb2wgKGFwcGxpZXMgd2hpbGUgdGhlIGdlb21ldHJ5IGlzIGJlaW5nIGRyYXduKVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGRyYXdTdHlsZSh2YWx1ZTogT2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gT2xTdHlsZS5TdHlsZSkgfCBPbFN0eWxlLkNpcmNsZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IGNyZWF0ZURyYXdJbnRlcmFjdGlvblN0eWxlKCk7XG4gICAgfVxuICAgIHRoaXMuX2RyYXdTdHlsZSA9IHZhbHVlO1xuXG4gICAgY29uc3Qgb2xHdWlkZVN0eWxlID0gdGhpcy5nZXRHdWlkZVN0eWxlRnJvbURyYXdTdHlsZSh2YWx1ZSkgYXMgT2xTdHlsZS5DaXJjbGU7XG4gICAgaWYgKG9sR3VpZGVTdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRlZmF1bHREcmF3U3R5bGVSYWRpdXMgPSBvbEd1aWRlU3R5bGUuZ2V0UmFkaXVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVmYXVsdERyYXdTdHlsZVJhZGl1cyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZHkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kZWFjdGl2YXRlQ29udHJvbCgpO1xuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGlmeUNvbnRyb2woKTtcblxuICAgIHRoaXMuZHJhd0NvbnRyb2wuZnJlZWhhbmQkLm5leHQodGhpcy5mcmVlaGFuZERyYXdJc0FjdGl2ZSk7XG4gICAgdGhpcy50b2dnbGVDb250cm9sKCk7XG4gIH1cbiAgZ2V0IGRyYXdTdHlsZSgpOiBPbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBPbFN0eWxlLlN0eWxlKSB8IE9sU3R5bGUuQ2lyY2xlIHsgcmV0dXJuIHRoaXMuX2RyYXdTdHlsZTsgfVxuICBwcml2YXRlIF9kcmF3U3R5bGU6IE9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IE9sU3R5bGUuU3R5bGUpIHwgT2xTdHlsZS5DaXJjbGU7XG5cbiAgLyoqXG4gICAqIFN0eWxlIGZvciB0aGUgb3ZlcmxheSBsYXllciAoYXBwbGllcyBvbmNlIHRoZSBnZW9tZXRyeSBpcyBhZGRlZCB0byB0aGUgbWFwKVxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBkcmF3U3R5bGUgYXBwbGllc1xuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IG92ZXJsYXlTdHlsZSh2YWx1ZTogT2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gT2xTdHlsZS5TdHlsZSkgfCBPbFN0eWxlLkNpcmNsZSkgeyB0aGlzLl9vdmVybGF5U3R5bGUgPSB2YWx1ZTsgfVxuICBnZXQgb3ZlcmxheVN0eWxlKCk6IE9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IE9sU3R5bGUuU3R5bGUpIHwgT2xTdHlsZS5DaXJjbGUgeyByZXR1cm4gdGhpcy5fb3ZlcmxheVN0eWxlOyB9XG4gIHByaXZhdGUgX292ZXJsYXlTdHlsZTogT2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gT2xTdHlsZS5TdHlsZSkgfCBPbFN0eWxlLkNpcmNsZTtcblxuICAvKipcbiAgICogVGhlIGdlb21ldHJ5IHZhbHVlIChHZW9KU09OKVxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBHZW9KU09OR2VvbWV0cnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hZGRHZW9KU09OVG9PdmVybGF5KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbE92ZXJsYXlTb3VyY2UuY2xlYXIodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudG9nZ2xlQ29udHJvbCgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIGdldCB2YWx1ZSgpOiBHZW9KU09OR2VvbWV0cnkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cbiAgcHJpdmF0ZSBfdmFsdWU6IEdlb0pTT05HZW9tZXRyeTtcblxuICAvKipcbiAgICogVGhlIHZlY3RvciBzb3VyY2UgdG8gYWRkIHRoZSBnZW9tZXRyeSB0b1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBvbE92ZXJsYXlTb3VyY2UoKTogT2xWZWN0b3JTb3VyY2U8T2xHZW9tZXRyeT4ge1xuICAgIHJldHVybiB0aGlzLm9sT3ZlcmxheUxheWVyLmdldFNvdXJjZSgpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJhZGl1cyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMucmVhZHkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGlmeUNvbnRyb2wuZ2V0U291cmNlKCkpIHtcbiAgICAgIHRoaXMubW9kaWZ5Q29udHJvbC5nZXRTb3VyY2UoKS5yZWZyZXNoKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKSB7XG4gICAgICBsZXQgb2xNb2RpZnk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgb2xNb2RpZnkgPSB0aGlzLm1vZGlmeUNvbnRyb2wub2xNb2RpZnlJbnRlcmFjdGlvbjtcbiAgICAgICAgaWYgKG9sTW9kaWZ5KSB7XG4gICAgICAgICAgaWYgKG9sTW9kaWZ5LmZlYXR1cmVzXykge1xuICAgICAgICAgICAgb2xNb2RpZnkuZmVhdHVyZXNfLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmFkZEdlb0pTT05Ub092ZXJsYXkodGhpcy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbFxuICApIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgYWNjZXNzb3IgZGlyZWN0bHkgKGluc3RlYWQgb2YgdXNpbmdcbiAgICAgIC8vIHRoZSBwcm92aWRlcnMpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gb3ZlcmxheSBsYXllciwgYWRkIHRoZSBpbml0aWFsIGdlb21ldHJ5IHRvIGl0IChpZiBhbnkpXG4gICAqIGFuZCB0b2dnbGUgdGhlIHJpZ2h0IGludGVyYWN0aW9uLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRyYXdTdHlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRyYXdTdHlsZSA9IGNyZWF0ZURyYXdJbnRlcmFjdGlvblN0eWxlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3ZlcmxheVN0eWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3ZlcmxheVN0eWxlID0gdGhpcy5kcmF3U3R5bGU7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRPbE92ZXJsYXlMYXllcigpO1xuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGlmeUNvbnRyb2woKTtcblxuICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLmFkZEdlb0pTT05Ub092ZXJsYXkodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlQ29udHJvbCgpO1xuXG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIG92ZXJsYXkgbGF5ZXIgYW5kIGFueSBpbnRlcmFjdGlvbiBhZGRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBUaGlzIGlzIG1hbmRhdG9yeSB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgcmV1c2VkIGFmdGVyXG4gICAgLy8gdGhpcyBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkLiBJdCBzZWVtcyBsaWtlIHRoZSBjb250cm9sXG4gICAgLy8ga2VlcHMgYSByZWZlcmVuY2UgdG8gdGhpcyBjb21wb25lbnQgZXZlbiBhZnRlciBpdCdzIGRlc3Ryb3llZFxuICAgIC8vIGFuZCBpdCBhdHRlbXB0cyB0byBzZXQgaXQncyB2YWx1ZVxuICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcblxuICAgIHRoaXMuZGVhY3RpdmF0ZUNvbnRyb2woKTtcbiAgICB0aGlzLm9sT3ZlcmxheVNvdXJjZS5jbGVhcigpO1xuICAgIHRoaXMubWFwLm9sLnJlbW92ZUxheWVyKHRoaXMub2xPdmVybGF5TGF5ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBGdW5jdGlvbikge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuICBwcml2YXRlIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbikge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogR2VvSlNPTkdlb21ldHJ5KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBvdmVybGF5IGxheWVyIHRvIHRoZSBtYXBcbiAgICovXG4gIHByaXZhdGUgYWRkT2xPdmVybGF5TGF5ZXIoKSB7XG4gICAgdGhpcy5vbE92ZXJsYXlMYXllciA9IG5ldyBPbFZlY3RvckxheWVyKHtcbiAgICAgIHNvdXJjZTogbmV3IE9sVmVjdG9yU291cmNlKCksXG4gICAgICB6SW5kZXg6IDUwMCxcbiAgICAgIHN0eWxlOiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy5tYXAub2wuYWRkTGF5ZXIodGhpcy5vbE92ZXJsYXlMYXllcik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZHJhdyBjb250cm9sIGFuZCBzdWJzY3JpYmUgdG8gaXQncyBnZW9tZXRyeVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVEcmF3Q29udHJvbCgpIHtcbiAgICBjb25zdCBjb250cm9sT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29udHJvbE9wdGlvbnMsIHtcbiAgICAgIGdlb21ldHJ5VHlwZTogdGhpcy5nZW9tZXRyeVR5cGUgfHwgJ1BvaW50JyxcbiAgICAgIGRyYXdpbmdMYXllcjogdGhpcy5vbE92ZXJsYXlMYXllcixcbiAgICAgIGludGVyYWN0aW9uU3R5bGU6IHR5cGVvZiB0aGlzLmRyYXdTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZHJhd1N0eWxlIDogKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LCByZXNvbHV0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRyYXdTdHlsZTtcbiAgICAgICAgdGhpcy51cGRhdGVEcmF3U3R5bGVXaXRoRHJhd0d1aWRlKHN0eWxlLCByZXNvbHV0aW9uKTtcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfVxuICAgIH0pIGFzIERyYXdDb250cm9sT3B0aW9ucztcbiAgICB0aGlzLmRyYXdDb250cm9sID0gbmV3IERyYXdDb250cm9sKGNvbnRyb2xPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtb2RpZnkgY29udHJvbCBhbmQgc3Vic2NyaWJlIHRvIGl0J3MgZ2VvbWV0cnlcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTW9kaWZ5Q29udHJvbCgpIHtcbiAgICBjb25zdCBjb250cm9sT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29udHJvbE9wdGlvbnMsIHtcbiAgICAgIGxheWVyOiB0aGlzLm9sT3ZlcmxheUxheWVyLFxuICAgICAgZHJhd1N0eWxlOiB0eXBlb2YgdGhpcy5kcmF3U3R5bGUgPT09ICdmdW5jdGlvbicgPyB0aGlzLmRyYXdTdHlsZSA6IChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiwgcmVzb2x1dGlvbjogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kcmF3U3R5bGU7XG4gICAgICAgIHRoaXMudXBkYXRlRHJhd1N0eWxlV2l0aERyYXdHdWlkZShzdHlsZSwgcmVzb2x1dGlvbik7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH1cbiAgICB9KSBhcyBNb2RpZnlDb250cm9sT3B0aW9ucztcbiAgICB0aGlzLm1vZGlmeUNvbnRyb2wgPSBuZXcgTW9kaWZ5Q29udHJvbChjb250cm9sT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBwcm9wZXIgY29udHJvbCAoZHJhdyBvciBtb2RpZnkpXG4gICAqL1xuICBwcml2YXRlIHRvZ2dsZUNvbnRyb2woKSB7XG4gICAgbGV0IGFjdGl2YXRlO1xuICAgIGlmICghdGhpcy52YWx1ZSAmJiB0aGlzLmdlb21ldHJ5VHlwZSkge1xuICAgICAgYWN0aXZhdGUgPSB0aGlzLmRyYXdDb250cm9sO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmF0ZSA9IHRoaXMubW9kaWZ5Q29udHJvbDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgY29udHJvbCB0aGF0IHNob3VsZCBiZSBhY3RpdmF0ZWRcbiAgICAvLyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbnRyb2wsXG4gICAgLy8gZGVhY3RpdmF0ZSB0aGUgY3VycmVudCBjb250cm9sIGFuZCBhY3RpdmF0ZSB0aGUgbmV3IG9uZVxuICAgIC8vIE90aGVyd2lzZSwgZG8gbm90aGluZyBhbmQga2VlcCB0aGUgY3VycmVudCBjb250cm9sIGFjdGl2ZVxuICAgIGlmIChhY3RpdmF0ZSAhPT0gdGhpcy5hY3RpdmVDb250cm9sKSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGVDb250cm9sKCk7XG4gICAgICB0aGlzLmFjdGl2YXRlQ29udHJvbChhY3RpdmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGEgZ2l2ZW4gY29udHJvbFxuICAgKiBAcGFyYW0gY29udHJvbCBDb250cm9sXG4gICAqL1xuICBwcml2YXRlIGFjdGl2YXRlQ29udHJvbChjb250cm9sOiBEcmF3Q29udHJvbCB8IE1vZGlmeUNvbnRyb2wpIHtcbiAgICB0aGlzLmFjdGl2ZUNvbnRyb2wgPSBjb250cm9sO1xuICAgIHRoaXMub2xHZW9tZXRyeUVuZHMkJCA9IGNvbnRyb2wuZW5kJFxuICAgICAgLnN1YnNjcmliZSgob2xHZW9tZXRyeTogT2xHZW9tZXRyeSkgPT4gdGhpcy5vbk9sR2VvbWV0cnlFbmRzKG9sR2VvbWV0cnkpKTtcbiAgICBpZiAodGhpcy5tZWFzdXJlID09PSB0cnVlICYmIGNvbnRyb2wgPT09IHRoaXMuZHJhd0NvbnRyb2wpIHtcbiAgICAgIHRoaXMub2xHZW9tZXRyeUNoYW5nZXMkJCA9IGNvbnRyb2wuY2hhbmdlcyRcbiAgICAgICAgLnN1YnNjcmliZSgob2xHZW9tZXRyeTogT2xQb2x5Z29uIHwgT2xQb2ludCB8IE9sTGluZVN0cmluZyB8IE9sQ2lyY2xlKSA9PiB0aGlzLm9uT2xHZW9tZXRyeUNoYW5nZXMob2xHZW9tZXRyeSkpO1xuICAgIH1cbiAgICBjb250cm9sLnNldE9sTWFwKHRoaXMubWFwLm9sLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSB0aGUgYWN0aXZlIGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgZGVhY3RpdmF0ZUNvbnRyb2woKSB7XG4gICAgdGhpcy5yZW1vdmVNZWFzdXJlVG9vbHRpcCgpO1xuICAgIGlmICh0aGlzLmFjdGl2ZUNvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hY3RpdmVDb250cm9sLnNldE9sTWFwKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9sR2VvbWV0cnlFbmRzJCQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vbEdlb21ldHJ5RW5kcyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9sR2VvbWV0cnlDaGFuZ2VzJCQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vbEdlb21ldHJ5Q2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlQ29udHJvbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWVhc3VyZXMgb2JzZXJ2YWJsZXMgYW5kIG1hcCB0b29sdGlwc1xuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cbiAgICovXG4gIHByaXZhdGUgb25PbEdlb21ldHJ5RW5kcyhvbEdlb21ldHJ5OiBPbEdlb21ldHJ5IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5yZW1vdmVNZWFzdXJlVG9vbHRpcCgpO1xuICAgIHRoaXMuc2V0T2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWVhc3VyZXMgb2JzZXJ2YWJsZXMgYW5kIG1hcCB0b29sdGlwc1xuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cbiAgICovXG4gIHByaXZhdGUgb25PbEdlb21ldHJ5Q2hhbmdlcyhvbEdlb21ldHJ5OiBPbFBvbHlnb24gfCBPbFBvaW50IHwgT2xMaW5lU3RyaW5nIHwgT2xDaXJjbGUpIHtcbiAgICBpZiAob2xHZW9tZXRyeS5nZXRUeXBlKCkgIT09ICdQb2ludCcpIHtcbiAgICAgIHRoaXMudXBkYXRlTWVhc3VyZVRvb2x0aXAob2xHZW9tZXRyeSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gZHJhd2luZyBlbmRzLCBjb252ZXJ0IHRoZSBvdXRwdXQgdmFsdWUgdG8gR2VvSlNPTiBhbmQga2VlcCBpdC5cbiAgICogUmVzdG9yZSB0aGUgZG91YmxlIGNsaWNrIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPTCBnZW9tZXRyeVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRPbEdlb21ldHJ5KG9sR2VvbWV0cnk6IE9sR2VvbWV0cnkgfCB1bmRlZmluZWQpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG9sR2VvbWV0cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvbEdlb21ldHJ5LmdldFR5cGUoKSA9PT0gJ0NpcmNsZScpIHsgLy8gQmVjYXVzZSBDaXJjbGUgZG9lc24ndCBleGlzdCBhcyBhIEdlb0pTT04gb2JqZWN0XG4gICAgICBvbEdlb21ldHJ5ID0gdGhpcy5jaXJjbGVUb1BvaW50KG9sR2VvbWV0cnkpO1xuICAgIH1cblxuICAgIHZhbHVlID0gdGhpcy5vbEdlb0pTT04ud3JpdGVHZW9tZXRyeU9iamVjdChvbEdlb21ldHJ5LCB7XG4gICAgICBmZWF0dXJlUHJvamVjdGlvbjogdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiAnRVBTRzo0MzI2J1xuICAgIH0pO1xuICAgIGlmIChvbEdlb21ldHJ5LmdldCgncmFkaXVzJykpIHtcbiAgICAgIHZhbHVlLnJhZGl1cyA9IG9sR2VvbWV0cnkuZ2V0KCdyYWRpdXMnKTtcbiAgICAgIG9sR2VvbWV0cnkuc2V0KCdyYWRpdXMnLCB2YWx1ZS5yYWRpdXMpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaXJjbGVUb1BvaW50KG9sR2VvbWV0cnkpIHtcbiAgICBjb25zdCBjZW50ZXIgPSBvbEdlb21ldHJ5LmdldENlbnRlcigpO1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb2xwcm9qLnRyYW5zZm9ybShjZW50ZXIsIHRoaXMubWFwLnByb2plY3Rpb24sICdFUFNHOjQzMjYnKTtcbiAgICBjb25zdCByYWRpdXMgPSBNYXRoLnJvdW5kKG9sR2VvbWV0cnkuZ2V0UmFkaXVzKCkgKiAoTWF0aC5jb3MoKE1hdGguUEkgLyAxODApICogY29vcmRpbmF0ZXNbMV0pKSk7XG5cbiAgICAvLyBDb252ZXJ0IGl0IHRvIGEgcG9pbnQgb2JqZWN0XG4gICAgb2xHZW9tZXRyeSA9IG5ldyBQb2ludChjZW50ZXIpO1xuICAgIG9sR2VvbWV0cnkuc2V0KCdyYWRpdXMnLCByYWRpdXMsIHRydWUpO1xuICAgIHJldHVybiBvbEdlb21ldHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIEdlb0pTT04gZ2VvbWV0cnkgdG8gdGhlIG92ZXJsYXlcbiAgICogQHBhcmFtIGdlb21ldHJ5IEdlb0pTT04gZ2VvbWV0cnlcbiAgICovXG4gIHByaXZhdGUgYWRkR2VvSlNPTlRvT3ZlcmxheShnZW9tZXRyeTogR2VvSlNPTkdlb21ldHJ5KSB7XG4gICAgY29uc3Qgb2xHZW9tZXRyeSA9IHRoaXMub2xHZW9KU09OLnJlYWRHZW9tZXRyeShnZW9tZXRyeSwge1xuICAgICAgZGF0YVByb2plY3Rpb246ICdFUFNHOjQzMjYnLFxuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHRoaXMubWFwLnByb2plY3Rpb25cbiAgICB9KTtcbiAgICBjb25zdCBvbEZlYXR1cmUgPSBuZXcgT2xGZWF0dXJlKHtcbiAgICAgIGdlb21ldHJ5OiBvbEdlb21ldHJ5XG4gICAgfSk7XG4gICAgb2xGZWF0dXJlLnNldFN0eWxlKHRoaXMub3ZlcmxheVN0eWxlIGFzIE9sU3R5bGUuU3R5bGUpO1xuICAgIHRoaXMub2xPdmVybGF5U291cmNlLmNsZWFyKCk7XG4gICAgdGhpcy5vbE92ZXJsYXlTb3VyY2UuYWRkRmVhdHVyZShvbEZlYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgbWVhc3VyZSB0b29sdGlwXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZU1lYXN1cmVUb29sdGlwKCkge1xuICAgIHJldHVybiBuZXcgT2xPdmVybGF5KHtcbiAgICAgIGVsZW1lbnQ6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgICAgb2Zmc2V0OiBbLTMwLCAtMTBdLFxuICAgICAgY2xhc3NOYW1lOiBbXG4gICAgICAgICdpZ28tbWFwLXRvb2x0aXAnLFxuICAgICAgICAnaWdvLW1hcC10b29sdGlwLW1lYXN1cmUnXG4gICAgICBdLmpvaW4oJyAnKSxcbiAgICAgIHN0b3BFdmVudDogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIG1lYXN1cmUgdG9vbHRpcCBvZiBhbiBPTCBnZW9tZXRyeVxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPTCBHZW9tZXRyeVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVNZWFzdXJlVG9vbHRpcChvbEdlb21ldHJ5OiBPbFBvbHlnb24gfCBPbFBvaW50IHwgT2xMaW5lU3RyaW5nIHwgT2xDaXJjbGUpIHtcbiAgICBjb25zdCBtZWFzdXJlID0gbWVhc3VyZU9sR2VvbWV0cnkob2xHZW9tZXRyeSwgdGhpcy5tYXAucHJvamVjdGlvbik7XG4gICAgY29uc3QgbGVuZ3RocyA9IG1lYXN1cmUubGVuZ3RocztcbiAgICBjb25zdCBsYXN0SW5kZXggPSBvbEdlb21ldHJ5LmdldFR5cGUoKSA9PT0gJ1BvbHlnb24nID8gbGVuZ3Rocy5sZW5ndGggLSAyIDogbGVuZ3Rocy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RMZW5ndGggPSBsZW5ndGhzW2xhc3RJbmRleF07XG5cbiAgICBjb25zdCBvbE1pZHBvaW50cyA9IHVwZGF0ZU9sR2VvbWV0cnlNaWRwb2ludHMob2xHZW9tZXRyeSk7XG4gICAgY29uc3Qgb2xMYXN0TWlkcG9pbnQgPSBvbE1pZHBvaW50c1tsYXN0SW5kZXhdO1xuICAgIGlmIChvbE1pZHBvaW50cy5sZW5ndGggPT09IDAgfHwgb2xMYXN0TWlkcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZW1vdmVNZWFzdXJlVG9vbHRpcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub2xUb29sdGlwLnNldFBvc2l0aW9uKG9sTGFzdE1pZHBvaW50LmdldEZsYXRDb29yZGluYXRlcygpKTtcblxuICAgIGNvbnN0IGlubmVySHRtbCA9IGZvcm1hdE1lYXN1cmUobGFzdExlbmd0aCwge1xuICAgICAgZGVjaW1hbDogMSxcbiAgICAgIHVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyxcbiAgICAgIHVuaXRBYmJyOiB0cnVlLFxuICAgICAgbG9jYWxlOiAnZnInXG4gICAgfSk7XG4gICAgdGhpcy5vbFRvb2x0aXAuZ2V0RWxlbWVudCgpLmlubmVySFRNTCA9IGlubmVySHRtbDtcbiAgICBpZiAodGhpcy5vbFRvb2x0aXAuZ2V0TWFwKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYXAub2wuYWRkT3ZlcmxheSh0aGlzLm9sVG9vbHRpcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgbWVhc3VyZSB0b29sdGlwIGZyb20gdGhlIG1hcFxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVNZWFzdXJlVG9vbHRpcCgpIHtcbiAgICBpZiAodGhpcy5vbFRvb2x0aXAuZ2V0TWFwICYmIHRoaXMub2xUb29sdGlwLmdldE1hcCgpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWFwLm9sLnJlbW92ZU92ZXJsYXkodGhpcy5vbFRvb2x0aXApO1xuICAgICAgdGhpcy5vbFRvb2x0aXAuc2V0TWFwKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgZHJhdyBzdHlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgZHJhdyBndWlkZSBkaXN0YW5jZSwgaWYgcG9zc2libGVcbiAgICogQHBhcmFtIG9sU3R5bGUgRHJhdyBzdHlsZSB0byB1cGRhdGVcbiAgICogQHBhcmFtIHJlc29sdXRpb24gUmVzb2x1dGlvbiAodG8gbWFrZSB0aGUgc2NyZWVuIHNpemUgb2Ygc3ltYm9sIGZpdCB0aGUgZHJhd0d1aWRlIHZhbHVlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEcmF3U3R5bGVXaXRoRHJhd0d1aWRlKFxuICAgIG9sU3R5bGU6IE9sU3R5bGUuU3R5bGUgfFxuICAgICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gT2xTdHlsZS5TdHlsZSkgfFxuICAgIE9sU3R5bGUuQ2lyY2xlLFxuICAgIHJlc29sdXRpb246IG51bWJlcikge1xuICAgIGNvbnN0IG9sR3VpZGVTdHlsZSA9IHRoaXMuZ2V0R3VpZGVTdHlsZUZyb21EcmF3U3R5bGUob2xTdHlsZSkgYXMgT2xTdHlsZS5DaXJjbGU7XG4gICAgaWYgKG9sR3VpZGVTdHlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZHJhd0d1aWRlID0gdGhpcy5kcmF3R3VpZGU7XG4gICAgbGV0IHJhZGl1cztcbiAgICBpZiAoIWRyYXdHdWlkZSB8fCBkcmF3R3VpZGUgPCAwKSB7XG4gICAgICByYWRpdXMgPSB0aGlzLmRlZmF1bHREcmF3U3R5bGVSYWRpdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhZGl1cyA9IGRyYXdHdWlkZSA+IDAgPyBkcmF3R3VpZGUgLyByZXNvbHV0aW9uIDogZHJhd0d1aWRlO1xuICAgIH1cbiAgICBvbEd1aWRlU3R5bGUuc2V0UmFkaXVzKHJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3ZXRoZXIgYSBnaXZlbiBPcGVuIExheWVycyBzdHlsZSBoYXMgYSByYWRpdXMgcHJvcGVydHkgdGhhdCBjYW4gYmUgc2V0ICh1c2VkIHRvIHNldCBkcmF3IGd1aWRlKVxuICAgKiBAcGFyYW0gb2xTdHlsZSBUaGUgc3R5bGUgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgY2hlY2tcbiAgICovXG4gIHByaXZhdGUgaXNTdHlsZVdpdGhSYWRpdXMob2xTdHlsZSkge1xuICAgIHJldHVybiB0eXBlb2Ygb2xTdHlsZSAhPT0gJ2Z1bmN0aW9uJyAmJiBvbFN0eWxlLnNldFJhZGl1cztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdldGhlciBhIGdpdmVuIE9wZW4gTGF5ZXJzIHN0eWxlIGhhcyBhIHJhZGl1cyBwcm9wZXJ0eSB0aGF0IGNhbiBiZSBzZXQgKHVzZWQgdG8gc2V0IGRyYXcgZ3VpZGUpXG4gICAqIEBwYXJhbSBvbFN0eWxlIFRoZSBzdHlsZSBvbiB3aGljaCB0byBwZXJmb3JtIHRoZSBjaGVja1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRHdWlkZVN0eWxlRnJvbURyYXdTdHlsZShcbiAgICBvbFN0eWxlOiBPbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBPbFN0eWxlLlN0eWxlKSB8IE9sU3R5bGUuQ2lyY2xlIHxcbiAgICBPbFN0eWxlLlN0eWxlW10gfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IE9sU3R5bGUuU3R5bGUpW10gfCBPbFN0eWxlLkNpcmNsZVtdXG4gICkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9sU3R5bGUpKSB7XG4gICAgICBvbFN0eWxlID0gb2xTdHlsZVswXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTdHlsZVdpdGhSYWRpdXMob2xTdHlsZSkpIHtcbiAgICAgIHJldHVybiBvbFN0eWxlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGU+PC9uZy10ZW1wbGF0ZT4iXX0=