@igo2/geo 18.0.0-next.9 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +4 -6
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +13 -10
  3. package/esm2022/lib/datasource/shared/capabilities.service.mjs +1 -1
  4. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +2 -1
  5. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  6. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  7. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +151 -102
  8. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +177 -83
  9. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +93 -44
  10. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  11. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  12. package/esm2022/lib/directions/directions.component.mjs +55 -31
  13. package/esm2022/lib/directions/shared/directions.enum.mjs +51 -7
  14. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  15. package/esm2022/lib/directions/shared/directions.service.mjs +122 -96
  16. package/esm2022/lib/directions/shared/directions.utils.mjs +281 -318
  17. package/esm2022/lib/directions/shared/store.mjs +2 -2
  18. package/esm2022/lib/download/download-button/download-button.component.mjs +8 -20
  19. package/esm2022/lib/download/shared/download.service.mjs +1 -1
  20. package/esm2022/lib/draw/draw/draw-popup.component.mjs +1 -1
  21. package/esm2022/lib/draw/draw/draw.component.mjs +5 -12
  22. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  23. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  24. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +2 -2
  25. package/esm2022/lib/feature/shared/feature-store.utils.mjs +7 -6
  26. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  27. package/esm2022/lib/feature/shared/store.mjs +1 -1
  28. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +3 -3
  29. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +7 -4
  30. package/esm2022/lib/feature/shared/strategies/selection.mjs +5 -4
  31. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  32. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  33. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +5 -3
  34. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +1 -1
  35. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +8 -1
  36. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1 -1
  37. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -8
  38. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -8
  39. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  40. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +13 -10
  41. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  42. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +4 -2
  43. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +5 -16
  44. package/esm2022/lib/import-export/export-button/export-button.component.mjs +4 -17
  45. package/esm2022/lib/import-export/import-export/import-export.component.mjs +23 -12
  46. package/esm2022/lib/import-export/shared/export.service.mjs +7 -4
  47. package/esm2022/lib/import-export/shared/import.utils.mjs +3 -3
  48. package/esm2022/lib/layer/index.mjs +10 -5
  49. package/esm2022/lib/layer/layer-group/index.mjs +2 -0
  50. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +103 -0
  51. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +76 -161
  52. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +5 -8
  53. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +5 -6
  54. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +14 -21
  55. package/esm2022/lib/layer/layer-list/index.mjs +1 -3
  56. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +176 -785
  57. package/esm2022/lib/layer/layer-list-tool/index.mjs +1 -2
  58. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +51 -84
  59. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +7 -2
  60. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +56 -16
  61. package/esm2022/lib/layer/layer-search/index.mjs +2 -0
  62. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +65 -0
  63. package/esm2022/lib/layer/layer-unavailable/index.mjs +3 -0
  64. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +25 -0
  65. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +35 -0
  66. package/esm2022/lib/layer/layer-viewer/index.mjs +3 -0
  67. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +226 -0
  68. package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +2 -0
  69. package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +2 -0
  70. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +207 -0
  71. package/esm2022/lib/layer/layer-visibility-button/index.mjs +2 -0
  72. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +83 -0
  73. package/esm2022/lib/layer/layer.module.mjs +51 -33
  74. package/esm2022/lib/layer/shared/index.mjs +2 -1
  75. package/esm2022/lib/layer/shared/layer-controller.mjs +316 -0
  76. package/esm2022/lib/layer/shared/layer-selection.mjs +38 -0
  77. package/esm2022/lib/layer/shared/layer.service.mjs +31 -16
  78. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  79. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  80. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  81. package/esm2022/lib/layer/shared/layers/image-layer.mjs +8 -3
  82. package/esm2022/lib/layer/shared/layers/index.mjs +6 -1
  83. package/esm2022/lib/layer/shared/layers/layer-base.mjs +199 -0
  84. package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +2 -0
  85. package/esm2022/lib/layer/shared/layers/layer-group.mjs +120 -0
  86. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -11
  87. package/esm2022/lib/layer/shared/layers/layer.mjs +108 -117
  88. package/esm2022/lib/layer/shared/layers/linked/index.mjs +4 -0
  89. package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +12 -0
  90. package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +242 -0
  91. package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +70 -0
  92. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +8 -3
  93. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +9 -3
  94. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +8 -3
  95. package/esm2022/lib/layer/utils/layer.utils.mjs +47 -1
  96. package/esm2022/lib/layer/utils/outputLegend.mjs +5 -1
  97. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
  98. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +8 -6
  99. package/esm2022/lib/map/map-center/map-center.component.mjs +1 -2
  100. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  101. package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
  102. package/esm2022/lib/map/shared/hover-feature.directive.mjs +1 -9
  103. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +113 -123
  104. package/esm2022/lib/map/shared/map.abstract.mjs +4 -3
  105. package/esm2022/lib/map/shared/map.mjs +7 -243
  106. package/esm2022/lib/map/shared/map.service.mjs +1 -1
  107. package/esm2022/lib/map/shared/map.utils.mjs +3 -3
  108. package/esm2022/lib/map/shared/mapOffline.directive.mjs +9 -5
  109. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +1 -3
  110. package/esm2022/lib/map/utils/index.mjs +2 -0
  111. package/esm2022/lib/map/utils/layer-watcher.mjs +45 -13
  112. package/esm2022/lib/measure/measurer/measurer.component.mjs +7 -25
  113. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -18
  114. package/esm2022/lib/offline/offline.provider.mjs +10 -11
  115. package/esm2022/lib/print/shared/print.service.mjs +3 -3
  116. package/esm2022/lib/query/shared/query.directive.mjs +9 -5
  117. package/esm2022/lib/query/shared/query.service.mjs +7 -7
  118. package/esm2022/lib/query/shared/query.utils.mjs +5 -1
  119. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +15 -9
  120. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +1 -10
  121. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  122. package/esm2022/lib/search/shared/sources/workspace.mjs +1 -1
  123. package/esm2022/lib/workspace/shared/edition-workspace.mjs +6 -4
  124. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +19 -17
  125. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +17 -2
  126. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +22 -4
  127. package/esm2022/lib/workspace/shared/workspace.utils.mjs +6 -3
  128. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  129. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +6 -2
  130. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +4 -3
  131. package/fesm2022/igo2-geo.mjs +22952 -22018
  132. package/fesm2022/igo2-geo.mjs.map +1 -1
  133. package/lib/datasource/shared/capabilities.service.d.ts +7 -2
  134. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +2 -2
  135. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +5 -5
  136. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +57 -20
  137. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +115 -13
  138. package/lib/directions/directions-results/directions-results.component.d.ts +50 -16
  139. package/lib/directions/directions-sources/directions-source.d.ts +2 -2
  140. package/lib/directions/directions-sources/osrm-directions-source.d.ts +2 -2
  141. package/lib/directions/directions.component.d.ts +5 -5
  142. package/lib/directions/shared/directions.enum.d.ts +42 -1
  143. package/lib/directions/shared/directions.interface.d.ts +50 -25
  144. package/lib/directions/shared/directions.service.d.ts +46 -8
  145. package/lib/directions/shared/directions.utils.d.ts +102 -23
  146. package/lib/directions/shared/store.d.ts +3 -3
  147. package/lib/download/download-button/download-button.component.d.ts +4 -8
  148. package/lib/download/shared/download.service.d.ts +1 -1
  149. package/lib/draw/draw/draw.component.d.ts +2 -2
  150. package/lib/draw/shared/draw.utils.d.ts +2 -1
  151. package/lib/environment/environment.interface.d.ts +2 -0
  152. package/lib/feature/shared/feature-store.utils.d.ts +1 -1
  153. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  154. package/lib/feature/shared/store.d.ts +1 -1
  155. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  156. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  157. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +2 -2
  158. package/lib/filter/shared/filterable-datasource.pipe.d.ts +2 -2
  159. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +3 -3
  160. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -5
  161. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -5
  162. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  163. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +5 -5
  164. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  165. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +2 -7
  166. package/lib/import-export/export-button/export-button.component.d.ts +3 -7
  167. package/lib/import-export/import-export/import-export.component.d.ts +1 -2
  168. package/lib/import-export/shared/export.service.d.ts +2 -2
  169. package/lib/layer/index.d.ts +9 -4
  170. package/lib/layer/layer-group/index.d.ts +1 -0
  171. package/lib/layer/layer-group/layer-group.component.d.ts +30 -0
  172. package/lib/layer/layer-item/layer-item.component.d.ts +19 -42
  173. package/lib/layer/layer-legend/layer-legend.component.d.ts +2 -5
  174. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +6 -7
  175. package/lib/layer/layer-list/index.d.ts +0 -2
  176. package/lib/layer/layer-list/layer-list.component.d.ts +51 -128
  177. package/lib/layer/layer-list-tool/index.d.ts +0 -1
  178. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +19 -26
  179. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +5 -1
  180. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +9 -8
  181. package/lib/layer/layer-search/index.d.ts +1 -0
  182. package/lib/layer/layer-search/layer-search.component.d.ts +16 -0
  183. package/lib/layer/layer-unavailable/index.d.ts +2 -0
  184. package/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.d.ts +10 -0
  185. package/lib/layer/layer-unavailable/layer-unavailable.component.d.ts +11 -0
  186. package/lib/layer/layer-viewer/index.d.ts +2 -0
  187. package/lib/layer/layer-viewer/layer-viewer.component.d.ts +52 -0
  188. package/lib/layer/layer-viewer/layer-viewer.interface.d.ts +22 -0
  189. package/lib/layer/layer-viewer-bottom-actions/index.d.ts +1 -0
  190. package/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.d.ts +44 -0
  191. package/lib/layer/layer-visibility-button/index.d.ts +1 -0
  192. package/lib/layer/layer-visibility-button/layer-visibility-button.component.d.ts +22 -0
  193. package/lib/layer/layer.module.d.ts +18 -6
  194. package/lib/layer/shared/index.d.ts +1 -0
  195. package/lib/layer/shared/layer-controller.d.ts +81 -0
  196. package/lib/layer/shared/layer-selection.d.ts +14 -0
  197. package/lib/layer/shared/layer.service.d.ts +9 -5
  198. package/lib/layer/shared/layers/any-layer.d.ts +3 -6
  199. package/lib/layer/shared/layers/any-layer.interface.d.ts +8 -6
  200. package/lib/layer/shared/layers/image-layer.d.ts +5 -2
  201. package/lib/layer/shared/layers/image-layer.interface.d.ts +1 -4
  202. package/lib/layer/shared/layers/index.d.ts +5 -0
  203. package/lib/layer/shared/layers/layer-base.d.ts +75 -0
  204. package/lib/layer/shared/layers/layer-group.d.ts +32 -0
  205. package/lib/layer/shared/layers/layer-group.interface.d.ts +8 -0
  206. package/lib/layer/shared/layers/layer.d.ts +27 -45
  207. package/lib/layer/shared/layers/layer.interface.d.ts +23 -41
  208. package/lib/layer/shared/layers/linked/index.d.ts +3 -0
  209. package/lib/layer/shared/layers/linked/linked-layer.d.ts +35 -0
  210. package/lib/layer/shared/layers/linked/linked-layer.interface.d.ts +32 -0
  211. package/lib/layer/shared/layers/linked/linked-layer.utils.d.ts +9 -0
  212. package/lib/layer/shared/layers/tile-layer.d.ts +5 -2
  213. package/lib/layer/shared/layers/vector-layer.d.ts +7 -3
  214. package/lib/layer/shared/layers/vectortile-layer.d.ts +5 -2
  215. package/lib/layer/utils/layer.utils.d.ts +12 -2
  216. package/lib/layer/utils/outputLegend.d.ts +2 -2
  217. package/lib/map/shared/controllers/geolocation.interface.d.ts +2 -1
  218. package/lib/map/shared/hover-feature.directive.d.ts +0 -1
  219. package/lib/map/shared/linkedLayers.utils.d.ts +13 -17
  220. package/lib/map/shared/map.abstract.d.ts +12 -29
  221. package/lib/map/shared/map.d.ts +10 -85
  222. package/lib/map/shared/map.service.d.ts +1 -1
  223. package/lib/map/shared/map.utils.d.ts +5 -3
  224. package/lib/map/utils/index.d.ts +1 -0
  225. package/lib/map/utils/layer-watcher.d.ts +18 -8
  226. package/lib/measure/measurer/measurer.component.d.ts +0 -8
  227. package/lib/metadata/metadata-button/metadata-button.component.d.ts +3 -7
  228. package/lib/offline/offline.provider.d.ts +1 -1
  229. package/lib/query/shared/query.service.d.ts +1 -1
  230. package/lib/query/shared/query.utils.d.ts +2 -1
  231. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  232. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -1
  233. package/lib/search/shared/sources/workspace.interfaces.d.ts +1 -1
  234. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  235. package/locale/en.geo.json +104 -89
  236. package/locale/fr.geo.json +103 -89
  237. package/package.json +5 -5
  238. package/src/geo-theme.scss +1 -1
  239. package/src/lib/directions/directions-inputs/directions-inputs.theming.scss +21 -0
  240. package/src/lib/directions/directions.theming.scss +2 -0
  241. package/src/lib/layer/layer-group/layer-group.theme.scss +28 -0
  242. package/src/lib/layer/layer-item/layer-item.theme.scss +4 -9
  243. package/src/lib/layer/layer-legend/layer-legend.theme.scss +30 -0
  244. package/src/lib/layer/layer-list/layer-list.theme.scss +50 -0
  245. package/src/lib/layer/layer-unavailable/layer-unavailable.theme.scss +19 -0
  246. package/src/lib/layer/layer-viewer/_layer-viewer.theme.scss +16 -0
  247. package/src/lib/layer/layer-visibility-button/layer-visibility-button.theme.scss +27 -0
  248. package/src/lib/layer/layer.theming.scss +14 -3
  249. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +0 -70
  250. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +0 -19
  251. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +0 -7
  252. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +0 -19
  253. package/lib/layer/layer-list/layer-list.enum.d.ts +0 -15
  254. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +0 -5
  255. package/src/lib/layer/layer-legend/layer-legend.theming.scss +0 -10
@@ -0,0 +1,83 @@
1
+ import { NgClass } from '@angular/common';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { MatBadgeModule } from '@angular/material/badge';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { MatTooltipModule } from '@angular/material/tooltip';
7
+ import { IgoIconComponent } from '@igo2/common/icon';
8
+ import { IgoLanguageModule } from '@igo2/core/language';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/material/badge";
11
+ import * as i2 from "@angular/material/button";
12
+ import * as i3 from "@angular/material/tooltip";
13
+ import * as i4 from "@ngx-translate/core";
14
+ const EYE_CLOSE_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>eye-closed</title><path d="M12 17.5C8.2 17.5 4.8 15.4 3.2 12H1C2.7 16.4 7 19.5 12 19.5S21.3 16.4 23 12H20.8C19.2 15.4 15.8 17.5 12 17.5Z" /></svg>`;
15
+ export class LayerVisibilityButtonComponent {
16
+ cdr;
17
+ eyeClosedSvg = {
18
+ name: 'eye-closed',
19
+ svg: EYE_CLOSE_SVG
20
+ };
21
+ hiddenByParent;
22
+ visible;
23
+ layer;
24
+ tooltip;
25
+ disabled;
26
+ showQueryBadge;
27
+ inResolutionsRange;
28
+ get defaultTooltip() {
29
+ return !this.layer.isInResolutionsRange
30
+ ? 'igo.geo.layer.notInResolution'
31
+ : this.layer.visible && this.disabled
32
+ ? 'igo.geo.layer.group.hideChildren'
33
+ : this.layer.visible
34
+ ? 'igo.geo.layer.hideLayer'
35
+ : 'igo.geo.layer.showLayer';
36
+ }
37
+ visibilityChange = new EventEmitter();
38
+ constructor(cdr) {
39
+ this.cdr = cdr;
40
+ }
41
+ ngOnInit() {
42
+ this.layer.parent?.displayed$.subscribe((displayed) => {
43
+ this.hiddenByParent = !displayed;
44
+ this.cdr.markForCheck();
45
+ });
46
+ this.layer.visible$.subscribe((visible) => {
47
+ this.visible = visible;
48
+ this.cdr.markForCheck();
49
+ });
50
+ }
51
+ toggle(event) {
52
+ this.layer.visible = !this.layer.visible;
53
+ this.visibilityChange.emit(event);
54
+ }
55
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayerVisibilityButtonComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
56
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LayerVisibilityButtonComponent, isStandalone: true, selector: "igo-layer-visibility-button", inputs: { layer: "layer", tooltip: "tooltip", disabled: "disabled", showQueryBadge: "showQueryBadge", inResolutionsRange: "inResolutionsRange" }, outputs: { visibilityChange: "visibilityChange" }, ngImport: i0, template: "<button\n mat-icon-button\n [ngClass]=\"{\n disabled: disabled,\n 'out-of-range': !inResolutionsRange,\n 'visibility-hidden': !visible\n }\"\n [color]=\"visible ? 'primary' : 'default'\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"tooltip ?? defaultTooltip | translate\"\n (click)=\"toggle($event)\"\n>\n <igo-icon\n matBadge=\"?\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"after\"\n [matBadgeHidden]=\"!showQueryBadge\"\n [icon]=\"\n visible\n ? hiddenByParent\n ? eyeClosedSvg\n : 'visibility'\n : 'visibility_off'\n \"\n iconPositionEnd\n />\n</button>\n", styles: [":host .disabled.out-of-range,:host .visibility-hidden.out-of-range{opacity:.54}mat-icon[matBadge] ::ng-deep .mat-badge-content{font-size:12px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "component", type: IgoIconComponent, selector: "igo-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayerVisibilityButtonComponent, decorators: [{
59
+ type: Component,
60
+ args: [{ selector: 'igo-layer-visibility-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
61
+ NgClass,
62
+ MatBadgeModule,
63
+ MatButtonModule,
64
+ MatIconModule,
65
+ MatTooltipModule,
66
+ IgoLanguageModule,
67
+ IgoIconComponent
68
+ ], template: "<button\n mat-icon-button\n [ngClass]=\"{\n disabled: disabled,\n 'out-of-range': !inResolutionsRange,\n 'visibility-hidden': !visible\n }\"\n [color]=\"visible ? 'primary' : 'default'\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"tooltip ?? defaultTooltip | translate\"\n (click)=\"toggle($event)\"\n>\n <igo-icon\n matBadge=\"?\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"after\"\n [matBadgeHidden]=\"!showQueryBadge\"\n [icon]=\"\n visible\n ? hiddenByParent\n ? eyeClosedSvg\n : 'visibility'\n : 'visibility_off'\n \"\n iconPositionEnd\n />\n</button>\n", styles: [":host .disabled.out-of-range,:host .visibility-hidden.out-of-range{opacity:.54}mat-icon[matBadge] ::ng-deep .mat-badge-content{font-size:12px}\n"] }]
69
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { layer: [{
70
+ type: Input,
71
+ args: [{ required: true }]
72
+ }], tooltip: [{
73
+ type: Input
74
+ }], disabled: [{
75
+ type: Input
76
+ }], showQueryBadge: [{
77
+ type: Input
78
+ }], inResolutionsRange: [{
79
+ type: Input
80
+ }], visibilityChange: [{
81
+ type: Output
82
+ }] } });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItdmlzaWJpbGl0eS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXItdmlzaWJpbGl0eS1idXR0b24vbGF5ZXItdmlzaWJpbGl0eS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXItdmlzaWJpbGl0eS1idXR0b24vbGF5ZXItdmlzaWJpbGl0eS1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQVcsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBSXhELE1BQU0sYUFBYSxHQUFHLHVOQUF1TixDQUFDO0FBa0I5TyxNQUFNLE9BQU8sOEJBQThCO0lBMEJyQjtJQXpCcEIsWUFBWSxHQUFZO1FBQ3RCLElBQUksRUFBRSxZQUFZO1FBQ2xCLEdBQUcsRUFBRSxhQUFhO0tBQ25CLENBQUM7SUFDRixjQUFjLENBQVc7SUFDekIsT0FBTyxDQUFVO0lBRVUsS0FBSyxDQUFXO0lBQ2xDLE9BQU8sQ0FBUztJQUNoQixRQUFRLENBQVU7SUFDbEIsY0FBYyxDQUFVO0lBQ3hCLGtCQUFrQixDQUFVO0lBRXJDLElBQUksY0FBYztRQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0I7WUFDckMsQ0FBQyxDQUFDLCtCQUErQjtZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVE7Z0JBQ25DLENBQUMsQ0FBQyxrQ0FBa0M7Z0JBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87b0JBQ2xCLENBQUMsQ0FBQyx5QkFBeUI7b0JBQzNCLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQztJQUNwQyxDQUFDO0lBRVMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztJQUV2RCxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUFHLENBQUM7SUFFOUMsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFZO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO3dHQTNDVSw4QkFBOEI7NEZBQTlCLDhCQUE4Qiw0UkN0QzNDLDhyQkE2QkEsME1EQUksT0FBTyxtRkFDUCxjQUFjLDJQQUNkLGVBQWUsMklBQ2YsYUFBYSw4QkFDYixnQkFBZ0IsNFRBQ2hCLGlCQUFpQiw0RkFDakIsZ0JBQWdCOzs0RkFHUCw4QkFBOEI7a0JBaEIxQyxTQUFTOytCQUNFLDZCQUE2QixtQkFHdEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3FCQUNqQjtzRkFVMEIsS0FBSztzQkFBL0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQVlJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBJY29uU3ZnLCBJZ29JY29uQ29tcG9uZW50IH0gZnJvbSAnQGlnbzIvY29tbW9uL2ljb24nO1xuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcblxuaW1wb3J0IHsgQW55TGF5ZXIgfSBmcm9tICcuLi9zaGFyZWQvbGF5ZXJzL2FueS1sYXllcic7XG5cbmNvbnN0IEVZRV9DTE9TRV9TVkcgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjx0aXRsZT5leWUtY2xvc2VkPC90aXRsZT48cGF0aCBkPVwiTTEyIDE3LjVDOC4yIDE3LjUgNC44IDE1LjQgMy4yIDEySDFDMi43IDE2LjQgNyAxOS41IDEyIDE5LjVTMjEuMyAxNi40IDIzIDEySDIwLjhDMTkuMiAxNS40IDE1LjggMTcuNSAxMiAxNy41WlwiIC8+PC9zdmc+YDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWxheWVyLXZpc2liaWxpdHktYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xheWVyLXZpc2liaWxpdHktYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGF5ZXItdmlzaWJpbGl0eS1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE1hdEJhZGdlTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgSWdvTGFuZ3VhZ2VNb2R1bGUsXG4gICAgSWdvSWNvbkNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExheWVyVmlzaWJpbGl0eUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGV5ZUNsb3NlZFN2ZzogSWNvblN2ZyA9IHtcbiAgICBuYW1lOiAnZXllLWNsb3NlZCcsXG4gICAgc3ZnOiBFWUVfQ0xPU0VfU1ZHXG4gIH07XG4gIGhpZGRlbkJ5UGFyZW50PzogYm9vbGVhbjtcbiAgdmlzaWJsZTogYm9vbGVhbjtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBsYXllcjogQW55TGF5ZXI7XG4gIEBJbnB1dCgpIHRvb2x0aXA6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dRdWVyeUJhZGdlOiBib29sZWFuO1xuICBASW5wdXQoKSBpblJlc29sdXRpb25zUmFuZ2U6IGJvb2xlYW47XG5cbiAgZ2V0IGRlZmF1bHRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICF0aGlzLmxheWVyLmlzSW5SZXNvbHV0aW9uc1JhbmdlXG4gICAgICA/ICdpZ28uZ2VvLmxheWVyLm5vdEluUmVzb2x1dGlvbidcbiAgICAgIDogdGhpcy5sYXllci52aXNpYmxlICYmIHRoaXMuZGlzYWJsZWRcbiAgICAgICAgPyAnaWdvLmdlby5sYXllci5ncm91cC5oaWRlQ2hpbGRyZW4nXG4gICAgICAgIDogdGhpcy5sYXllci52aXNpYmxlXG4gICAgICAgICAgPyAnaWdvLmdlby5sYXllci5oaWRlTGF5ZXInXG4gICAgICAgICAgOiAnaWdvLmdlby5sYXllci5zaG93TGF5ZXInO1xuICB9XG5cbiAgQE91dHB1dCgpIHZpc2liaWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxheWVyLnBhcmVudD8uZGlzcGxheWVkJC5zdWJzY3JpYmUoKGRpc3BsYXllZCkgPT4ge1xuICAgICAgdGhpcy5oaWRkZW5CeVBhcmVudCA9ICFkaXNwbGF5ZWQ7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMubGF5ZXIudmlzaWJsZSQuc3Vic2NyaWJlKCh2aXNpYmxlKSA9PiB7XG4gICAgICB0aGlzLnZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5sYXllci52aXNpYmxlID0gIXRoaXMubGF5ZXIudmlzaWJsZTtcbiAgICB0aGlzLnZpc2liaWxpdHlDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgbWF0LWljb24tYnV0dG9uXG4gIFtuZ0NsYXNzXT1cIntcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgJ291dC1vZi1yYW5nZSc6ICFpblJlc29sdXRpb25zUmFuZ2UsXG4gICAgJ3Zpc2liaWxpdHktaGlkZGVuJzogIXZpc2libGVcbiAgfVwiXG4gIFtjb2xvcl09XCJ2aXNpYmxlID8gJ3ByaW1hcnknIDogJ2RlZmF1bHQnXCJcbiAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gIFttYXRUb29sdGlwXT1cInRvb2x0aXAgPz8gZGVmYXVsdFRvb2x0aXAgfCB0cmFuc2xhdGVcIlxuICAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIlxuPlxuICA8aWdvLWljb25cbiAgICBtYXRCYWRnZT1cIj9cIlxuICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIlxuICAgIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCJcbiAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWZ0ZXJcIlxuICAgIFttYXRCYWRnZUhpZGRlbl09XCIhc2hvd1F1ZXJ5QmFkZ2VcIlxuICAgIFtpY29uXT1cIlxuICAgICAgdmlzaWJsZVxuICAgICAgICA/IGhpZGRlbkJ5UGFyZW50XG4gICAgICAgICAgPyBleWVDbG9zZWRTdmdcbiAgICAgICAgICA6ICd2aXNpYmlsaXR5J1xuICAgICAgICA6ICd2aXNpYmlsaXR5X29mZidcbiAgICBcIlxuICAgIGljb25Qb3NpdGlvbkVuZFxuICAvPlxuPC9idXR0b24+XG4iXX0=
@@ -1,5 +1,7 @@
1
1
  import { NgModule } from '@angular/core';
2
+ import { FormDialogService } from '@igo2/common/form';
2
3
  import { StyleService } from '../style/style-service/style.service';
4
+ import { LayerGroupComponent } from './layer-group/layer-group.component';
3
5
  import { LayerItemComponent } from './layer-item/layer-item.component';
4
6
  import { LayerLegendItemComponent } from './layer-legend-item/layer-legend-item.component';
5
7
  import { LayerLegendListBindingDirective } from './layer-legend-list/layer-legend-list-binding.directive';
@@ -7,8 +9,13 @@ import { LayerLegendListComponent } from './layer-legend-list/layer-legend-list.
7
9
  import { LayerLegendComponent } from './layer-legend/layer-legend.component';
8
10
  import { LayerListToolComponent } from './layer-list-tool/layer-list-tool.component';
9
11
  import { LayerListToolService } from './layer-list-tool/layer-list-tool.service';
10
- import { LayerListBindingDirective } from './layer-list/layer-list-binding.directive';
11
12
  import { LayerListComponent } from './layer-list/layer-list.component';
13
+ import { LayerSearchComponent } from './layer-search/layer-search.component';
14
+ import { LayerUnavailableListComponent } from './layer-unavailable/layer-unavailable-list/layer-unavailable-list.component';
15
+ import { LayerUnavailableComponent } from './layer-unavailable/layer-unavailable.component';
16
+ import { LayerViewerBottomActionsComponent } from './layer-viewer-bottom-actions/layer-viewer-bottom-actions.component';
17
+ import { LayerViewerComponent } from './layer-viewer/layer-viewer.component';
18
+ import { LayerVisibilityButtonComponent } from './layer-visibility-button/layer-visibility-button.component';
12
19
  import { LayerService } from './shared/layer.service';
13
20
  import { TrackFeatureButtonComponent } from './track-feature-button/track-feature-button.component';
14
21
  import * as i0 from "@angular/core";
@@ -19,9 +26,15 @@ export const LAYER_DIRECTIVES = [
19
26
  LayerListComponent,
20
27
  LayerListToolComponent,
21
28
  LayerLegendListComponent,
22
- LayerListBindingDirective,
23
29
  LayerLegendListBindingDirective,
24
- TrackFeatureButtonComponent
30
+ TrackFeatureButtonComponent,
31
+ LayerGroupComponent,
32
+ LayerViewerComponent,
33
+ LayerUnavailableComponent,
34
+ LayerVisibilityButtonComponent,
35
+ LayerSearchComponent,
36
+ LayerViewerBottomActionsComponent,
37
+ LayerUnavailableListComponent
25
38
  ];
26
39
  /**
27
40
  * @deprecated import the components/directives directly or LAYER_DIRECTIVES for the set
@@ -30,7 +43,12 @@ export class IgoLayerModule {
30
43
  static forRoot() {
31
44
  return {
32
45
  ngModule: IgoLayerModule,
33
- providers: [LayerService, StyleService, LayerListToolService]
46
+ providers: [
47
+ LayerService,
48
+ StyleService,
49
+ FormDialogService,
50
+ LayerListToolService
51
+ ]
34
52
  };
35
53
  }
36
54
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoLayerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -40,50 +58,50 @@ export class IgoLayerModule {
40
58
  LayerListComponent,
41
59
  LayerListToolComponent,
42
60
  LayerLegendListComponent,
43
- LayerListBindingDirective,
44
61
  LayerLegendListBindingDirective,
45
- TrackFeatureButtonComponent], exports: [LayerItemComponent,
62
+ TrackFeatureButtonComponent,
63
+ LayerGroupComponent,
64
+ LayerViewerComponent,
65
+ LayerUnavailableComponent,
66
+ LayerVisibilityButtonComponent,
67
+ LayerSearchComponent,
68
+ LayerViewerBottomActionsComponent,
69
+ LayerUnavailableListComponent], exports: [LayerItemComponent,
46
70
  LayerLegendItemComponent,
47
71
  LayerLegendComponent,
48
72
  LayerListComponent,
49
73
  LayerListToolComponent,
50
74
  LayerLegendListComponent,
51
- LayerListBindingDirective,
52
75
  LayerLegendListBindingDirective,
53
- TrackFeatureButtonComponent] });
54
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoLayerModule, imports: [LayerItemComponent,
76
+ TrackFeatureButtonComponent,
77
+ LayerGroupComponent,
78
+ LayerViewerComponent,
79
+ LayerUnavailableComponent,
80
+ LayerVisibilityButtonComponent,
81
+ LayerSearchComponent,
82
+ LayerViewerBottomActionsComponent,
83
+ LayerUnavailableListComponent] });
84
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoLayerModule, providers: [FormDialogService], imports: [LayerItemComponent,
55
85
  LayerLegendItemComponent,
56
86
  LayerLegendComponent,
57
87
  LayerListComponent,
58
88
  LayerListToolComponent,
59
89
  LayerLegendListComponent,
60
- TrackFeatureButtonComponent] });
90
+ TrackFeatureButtonComponent,
91
+ LayerGroupComponent,
92
+ LayerViewerComponent,
93
+ LayerUnavailableComponent,
94
+ LayerVisibilityButtonComponent,
95
+ LayerSearchComponent,
96
+ LayerViewerBottomActionsComponent,
97
+ LayerUnavailableListComponent] });
61
98
  }
62
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoLayerModule, decorators: [{
63
100
  type: NgModule,
64
101
  args: [{
65
- imports: [
66
- LayerItemComponent,
67
- LayerLegendItemComponent,
68
- LayerLegendComponent,
69
- LayerListComponent,
70
- LayerListToolComponent,
71
- LayerLegendListComponent,
72
- LayerListBindingDirective,
73
- LayerLegendListBindingDirective,
74
- TrackFeatureButtonComponent
75
- ],
76
- exports: [
77
- LayerItemComponent,
78
- LayerLegendItemComponent,
79
- LayerLegendComponent,
80
- LayerListComponent,
81
- LayerListToolComponent,
82
- LayerLegendListComponent,
83
- LayerListBindingDirective,
84
- LayerLegendListBindingDirective,
85
- TrackFeatureButtonComponent
86
- ]
102
+ imports: [...LAYER_DIRECTIVES],
103
+ exports: [...LAYER_DIRECTIVES],
104
+ providers: [FormDialogService]
87
105
  }]
88
106
  }] });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7O0FBRXBHLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixzQkFBc0I7SUFDdEIsd0JBQXdCO0lBQ3hCLHlCQUF5QjtJQUN6QiwrQkFBK0I7SUFDL0IsMkJBQTJCO0NBQ25CLENBQUM7QUFFWDs7R0FFRztBQXlCSCxNQUFNLE9BQU8sY0FBYztJQUN6QixNQUFNLENBQUMsT0FBTztRQUNaLE9BQU87WUFDTCxRQUFRLEVBQUUsY0FBYztZQUN4QixTQUFTLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixDQUFDO1NBQzlELENBQUM7SUFDSixDQUFDO3dHQU5VLGNBQWM7eUdBQWQsY0FBYyxZQXRCdkIsa0JBQWtCO1lBQ2xCLHdCQUF3QjtZQUN4QixvQkFBb0I7WUFDcEIsa0JBQWtCO1lBQ2xCLHNCQUFzQjtZQUN0Qix3QkFBd0I7WUFDeEIseUJBQXlCO1lBQ3pCLCtCQUErQjtZQUMvQiwyQkFBMkIsYUFHM0Isa0JBQWtCO1lBQ2xCLHdCQUF3QjtZQUN4QixvQkFBb0I7WUFDcEIsa0JBQWtCO1lBQ2xCLHNCQUFzQjtZQUN0Qix3QkFBd0I7WUFDeEIseUJBQXlCO1lBQ3pCLCtCQUErQjtZQUMvQiwyQkFBMkI7eUdBR2xCLGNBQWMsWUF0QnZCLGtCQUFrQjtZQUNsQix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFDdEIsd0JBQXdCO1lBR3hCLDJCQUEyQjs7NEZBY2xCLGNBQWM7a0JBeEIxQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsd0JBQXdCO3dCQUN4Qix5QkFBeUI7d0JBQ3pCLCtCQUErQjt3QkFDL0IsMkJBQTJCO3FCQUM1QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asa0JBQWtCO3dCQUNsQix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3dCQUNsQixzQkFBc0I7d0JBQ3RCLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3dCQUN6QiwrQkFBK0I7d0JBQy9CLDJCQUEyQjtxQkFDNUI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi9zdHlsZS9zdHlsZS1zZXJ2aWNlL3N0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGF5ZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9sYXllci1pdGVtL2xheWVyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyTGVnZW5kSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItbGVnZW5kLWl0ZW0vbGF5ZXItbGVnZW5kLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyTGVnZW5kTGlzdEJpbmRpbmdEaXJlY3RpdmUgfSBmcm9tICcuL2xheWVyLWxlZ2VuZC1saXN0L2xheWVyLWxlZ2VuZC1saXN0LWJpbmRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IExheWVyTGVnZW5kTGlzdENvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItbGVnZW5kLWxpc3QvbGF5ZXItbGVnZW5kLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyTGVnZW5kQ29tcG9uZW50IH0gZnJvbSAnLi9sYXllci1sZWdlbmQvbGF5ZXItbGVnZW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYXllckxpc3RUb29sQ29tcG9uZW50IH0gZnJvbSAnLi9sYXllci1saXN0LXRvb2wvbGF5ZXItbGlzdC10b29sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYXllckxpc3RUb29sU2VydmljZSB9IGZyb20gJy4vbGF5ZXItbGlzdC10b29sL2xheWVyLWxpc3QtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IExheWVyTGlzdEJpbmRpbmdEaXJlY3RpdmUgfSBmcm9tICcuL2xheWVyLWxpc3QvbGF5ZXItbGlzdC1iaW5kaW5nLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMYXllckxpc3RDb21wb25lbnQgfSBmcm9tICcuL2xheWVyLWxpc3QvbGF5ZXItbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFja0ZlYXR1cmVCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL3RyYWNrLWZlYXR1cmUtYnV0dG9uL3RyYWNrLWZlYXR1cmUtYnV0dG9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBMQVlFUl9ESVJFQ1RJVkVTID0gW1xuICBMYXllckl0ZW1Db21wb25lbnQsXG4gIExheWVyTGVnZW5kSXRlbUNvbXBvbmVudCxcbiAgTGF5ZXJMZWdlbmRDb21wb25lbnQsXG4gIExheWVyTGlzdENvbXBvbmVudCxcbiAgTGF5ZXJMaXN0VG9vbENvbXBvbmVudCxcbiAgTGF5ZXJMZWdlbmRMaXN0Q29tcG9uZW50LFxuICBMYXllckxpc3RCaW5kaW5nRGlyZWN0aXZlLFxuICBMYXllckxlZ2VuZExpc3RCaW5kaW5nRGlyZWN0aXZlLFxuICBUcmFja0ZlYXR1cmVCdXR0b25Db21wb25lbnRcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgaW1wb3J0IHRoZSBjb21wb25lbnRzL2RpcmVjdGl2ZXMgZGlyZWN0bHkgb3IgTEFZRVJfRElSRUNUSVZFUyBmb3IgdGhlIHNldFxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgTGF5ZXJJdGVtQ29tcG9uZW50LFxuICAgIExheWVyTGVnZW5kSXRlbUNvbXBvbmVudCxcbiAgICBMYXllckxlZ2VuZENvbXBvbmVudCxcbiAgICBMYXllckxpc3RDb21wb25lbnQsXG4gICAgTGF5ZXJMaXN0VG9vbENvbXBvbmVudCxcbiAgICBMYXllckxlZ2VuZExpc3RDb21wb25lbnQsXG4gICAgTGF5ZXJMaXN0QmluZGluZ0RpcmVjdGl2ZSxcbiAgICBMYXllckxlZ2VuZExpc3RCaW5kaW5nRGlyZWN0aXZlLFxuICAgIFRyYWNrRmVhdHVyZUJ1dHRvbkNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTGF5ZXJJdGVtQ29tcG9uZW50LFxuICAgIExheWVyTGVnZW5kSXRlbUNvbXBvbmVudCxcbiAgICBMYXllckxlZ2VuZENvbXBvbmVudCxcbiAgICBMYXllckxpc3RDb21wb25lbnQsXG4gICAgTGF5ZXJMaXN0VG9vbENvbXBvbmVudCxcbiAgICBMYXllckxlZ2VuZExpc3RDb21wb25lbnQsXG4gICAgTGF5ZXJMaXN0QmluZGluZ0RpcmVjdGl2ZSxcbiAgICBMYXllckxlZ2VuZExpc3RCaW5kaW5nRGlyZWN0aXZlLFxuICAgIFRyYWNrRmVhdHVyZUJ1dHRvbkNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIElnb0xheWVyTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxJZ29MYXllck1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogSWdvTGF5ZXJNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtMYXllclNlcnZpY2UsIFN0eWxlU2VydmljZSwgTGF5ZXJMaXN0VG9vbFNlcnZpY2VdXG4gICAgfTtcbiAgfVxufVxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2RUFBNkUsQ0FBQztBQUM1SCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUM3RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7O0FBRXBHLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixzQkFBc0I7SUFDdEIsd0JBQXdCO0lBQ3hCLCtCQUErQjtJQUMvQiwyQkFBMkI7SUFDM0IsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQix5QkFBeUI7SUFDekIsOEJBQThCO0lBQzlCLG9CQUFvQjtJQUNwQixpQ0FBaUM7SUFDakMsNkJBQTZCO0NBQ3JCLENBQUM7QUFFWDs7R0FFRztBQU1ILE1BQU0sT0FBTyxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTztZQUNMLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFNBQVMsRUFBRTtnQkFDVCxZQUFZO2dCQUNaLFlBQVk7Z0JBQ1osaUJBQWlCO2dCQUNqQixvQkFBb0I7YUFDckI7U0FDRixDQUFDO0lBQ0osQ0FBQzt3R0FYVSxjQUFjO3lHQUFkLGNBQWMsWUF6QnpCLGtCQUFrQjtZQUNsQix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFDdEIsd0JBQXdCO1lBQ3hCLCtCQUErQjtZQUMvQiwyQkFBMkI7WUFDM0IsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQix5QkFBeUI7WUFDekIsOEJBQThCO1lBQzlCLG9CQUFvQjtZQUNwQixpQ0FBaUM7WUFDakMsNkJBQTZCLGFBZDdCLGtCQUFrQjtZQUNsQix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFDdEIsd0JBQXdCO1lBQ3hCLCtCQUErQjtZQUMvQiwyQkFBMkI7WUFDM0IsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQix5QkFBeUI7WUFDekIsOEJBQThCO1lBQzlCLG9CQUFvQjtZQUNwQixpQ0FBaUM7WUFDakMsNkJBQTZCO3lHQVdsQixjQUFjLGFBRmQsQ0FBQyxpQkFBaUIsQ0FBQyxZQXZCOUIsa0JBQWtCO1lBQ2xCLHdCQUF3QjtZQUN4QixvQkFBb0I7WUFDcEIsa0JBQWtCO1lBQ2xCLHNCQUFzQjtZQUN0Qix3QkFBd0I7WUFFeEIsMkJBQTJCO1lBQzNCLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIseUJBQXlCO1lBQ3pCLDhCQUE4QjtZQUM5QixvQkFBb0I7WUFDcEIsaUNBQWlDO1lBQ2pDLDZCQUE2Qjs7NEZBV2xCLGNBQWM7a0JBTDFCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztvQkFDOUIsT0FBTyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztvQkFDOUIsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRm9ybURpYWxvZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb21tb24vZm9ybSc7XG5cbmltcG9ydCB7IFN0eWxlU2VydmljZSB9IGZyb20gJy4uL3N0eWxlL3N0eWxlLXNlcnZpY2Uvc3R5bGUuc2VydmljZSc7XG5pbXBvcnQgeyBMYXllckdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9sYXllci1ncm91cC9sYXllci1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGF5ZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9sYXllci1pdGVtL2xheWVyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyTGVnZW5kSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItbGVnZW5kLWl0ZW0vbGF5ZXItbGVnZW5kLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyTGVnZW5kTGlzdEJpbmRpbmdEaXJlY3RpdmUgfSBmcm9tICcuL2xheWVyLWxlZ2VuZC1saXN0L2xheWVyLWxlZ2VuZC1saXN0LWJpbmRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IExheWVyTGVnZW5kTGlzdENvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItbGVnZW5kLWxpc3QvbGF5ZXItbGVnZW5kLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyTGVnZW5kQ29tcG9uZW50IH0gZnJvbSAnLi9sYXllci1sZWdlbmQvbGF5ZXItbGVnZW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYXllckxpc3RUb29sQ29tcG9uZW50IH0gZnJvbSAnLi9sYXllci1saXN0LXRvb2wvbGF5ZXItbGlzdC10b29sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYXllckxpc3RUb29sU2VydmljZSB9IGZyb20gJy4vbGF5ZXItbGlzdC10b29sL2xheWVyLWxpc3QtdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IExheWVyTGlzdENvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItbGlzdC9sYXllci1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYXllclNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItc2VhcmNoL2xheWVyLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGF5ZXJVbmF2YWlsYWJsZUxpc3RDb21wb25lbnQgfSBmcm9tICcuL2xheWVyLXVuYXZhaWxhYmxlL2xheWVyLXVuYXZhaWxhYmxlLWxpc3QvbGF5ZXItdW5hdmFpbGFibGUtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGF5ZXJVbmF2YWlsYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItdW5hdmFpbGFibGUvbGF5ZXItdW5hdmFpbGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyVmlld2VyQm90dG9tQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItdmlld2VyLWJvdHRvbS1hY3Rpb25zL2xheWVyLXZpZXdlci1ib3R0b20tYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGF5ZXJWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuL2xheWVyLXZpZXdlci9sYXllci12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyVmlzaWJpbGl0eUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vbGF5ZXItdmlzaWJpbGl0eS1idXR0b24vbGF5ZXItdmlzaWJpbGl0eS1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IExheWVyU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL2xheWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhY2tGZWF0dXJlQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi90cmFjay1mZWF0dXJlLWJ1dHRvbi90cmFjay1mZWF0dXJlLWJ1dHRvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgTEFZRVJfRElSRUNUSVZFUyA9IFtcbiAgTGF5ZXJJdGVtQ29tcG9uZW50LFxuICBMYXllckxlZ2VuZEl0ZW1Db21wb25lbnQsXG4gIExheWVyTGVnZW5kQ29tcG9uZW50LFxuICBMYXllckxpc3RDb21wb25lbnQsXG4gIExheWVyTGlzdFRvb2xDb21wb25lbnQsXG4gIExheWVyTGVnZW5kTGlzdENvbXBvbmVudCxcbiAgTGF5ZXJMZWdlbmRMaXN0QmluZGluZ0RpcmVjdGl2ZSxcbiAgVHJhY2tGZWF0dXJlQnV0dG9uQ29tcG9uZW50LFxuICBMYXllckdyb3VwQ29tcG9uZW50LFxuICBMYXllclZpZXdlckNvbXBvbmVudCxcbiAgTGF5ZXJVbmF2YWlsYWJsZUNvbXBvbmVudCxcbiAgTGF5ZXJWaXNpYmlsaXR5QnV0dG9uQ29tcG9uZW50LFxuICBMYXllclNlYXJjaENvbXBvbmVudCxcbiAgTGF5ZXJWaWV3ZXJCb3R0b21BY3Rpb25zQ29tcG9uZW50LFxuICBMYXllclVuYXZhaWxhYmxlTGlzdENvbXBvbmVudFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBpbXBvcnQgdGhlIGNvbXBvbmVudHMvZGlyZWN0aXZlcyBkaXJlY3RseSBvciBMQVlFUl9ESVJFQ1RJVkVTIGZvciB0aGUgc2V0XG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFsuLi5MQVlFUl9ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogWy4uLkxBWUVSX0RJUkVDVElWRVNdLFxuICBwcm92aWRlcnM6IFtGb3JtRGlhbG9nU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgSWdvTGF5ZXJNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPElnb0xheWVyTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBJZ29MYXllck1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBMYXllclNlcnZpY2UsXG4gICAgICAgIFN0eWxlU2VydmljZSxcbiAgICAgICAgRm9ybURpYWxvZ1NlcnZpY2UsXG4gICAgICAgIExheWVyTGlzdFRvb2xTZXJ2aWNlXG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,5 +1,6 @@
1
1
  export * from './layer.service';
2
2
  export * from './layer.enums';
3
3
  export * from './layers';
4
+ export * from './layer-controller';
4
5
  export * from './clusterParam';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9sYXllci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGF5ZXIuZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9sYXllcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbHVzdGVyUGFyYW0nO1xuIl19
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xheWVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9sYXllci5lbnVtcyc7XG5leHBvcnQgKiBmcm9tICcuL2xheWVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xheWVyLWNvbnRyb2xsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jbHVzdGVyUGFyYW0nO1xuIl19
@@ -0,0 +1,316 @@
1
+ import { TREE_SEPERATOR, Tree } from '@igo2/utils';
2
+ import { BehaviorSubject, combineLatest, debounceTime, map } from 'rxjs';
3
+ import { isBaseLayer, isLayerGroup, isLayerItem } from '../utils/layer.utils';
4
+ import { LayerSelectionModel } from './layer-selection';
5
+ import { isLayerLinked } from './layers/linked/linked-layer.utils';
6
+ // Below 10 is reserved for BaseLayer
7
+ const ZINDEX_MIN = 10;
8
+ /**
9
+ * We got four kind of layers
10
+ * TreeLayer: all layers to show in the layer manager
11
+ * Baselayer: Layer dedicated for the basemap
12
+ * SystemLayer: Every layer dedicated to good function of the map (Selection, hovering)
13
+ * OtherLayer: all remaining layer that is linked to another layer or simply not a systemLayer that need to be cleaned on map reset
14
+ */
15
+ export class LayerController extends LayerSelectionModel {
16
+ _map;
17
+ tree;
18
+ /** Selection, Hovering, every internalLayer not in the tree is here */
19
+ _systemLayers = [];
20
+ /** LinkedLayer and other layer that are not in the previous category and not visible in tree */
21
+ _otherLayers = [];
22
+ layersFlattened = [];
23
+ _layers$ = new BehaviorSubject(undefined);
24
+ layers$ = this._layers$.asObservable();
25
+ layersFlattened$ = this._layers$
26
+ .asObservable()
27
+ .pipe(map(() => this.layersFlattened));
28
+ _baseLayers = [];
29
+ _baseLayers$ = new BehaviorSubject(undefined);
30
+ baseLayers$ = this._baseLayers$.asObservable();
31
+ baseLayerSelection;
32
+ /** All layers with the tree flattened */
33
+ all$;
34
+ constructor(_map, layers) {
35
+ super();
36
+ this._map = _map;
37
+ this.all$ = combineLatest([this.layersFlattened$, this.baseLayers$]).pipe(debounceTime(10), map(() => this.all));
38
+ this.tree = new Tree(layers, {
39
+ getChildren: (node) => isLayerGroup(node) && node.children,
40
+ getId: (node) => node.id,
41
+ getLevel: (node) => node.zIndex,
42
+ reverse: true
43
+ });
44
+ }
45
+ get all() {
46
+ return [
47
+ ...this.baseLayers,
48
+ ...this.layersFlattened,
49
+ ...this._systemLayers,
50
+ ...this._otherLayers
51
+ ];
52
+ }
53
+ get baseLayers() {
54
+ return this._baseLayers;
55
+ }
56
+ get baseLayer() {
57
+ return this.baseLayers.find((layer) => layer.visible);
58
+ }
59
+ get treeLayers() {
60
+ return this.tree.data;
61
+ }
62
+ add(...layers) {
63
+ const offset = 0;
64
+ const addedLayers = layers
65
+ .map((layer) => this.handleAdd(layer, offset))
66
+ .filter(Boolean);
67
+ if (!addedLayers.length) {
68
+ this.notify();
69
+ return;
70
+ }
71
+ this.tree.add(...addedLayers);
72
+ // Notify the layers change before the iteration on the addedLayer
73
+ // Because the Layer may have have LinkedLayer who need to find the parent.
74
+ this.layersFlattened = [...this.tree.flattened];
75
+ addedLayers.forEach((layer) => layer.add());
76
+ this.recalculateZindex();
77
+ this.notify();
78
+ }
79
+ selectBaseLayer(layer) {
80
+ if (!isBaseLayer(layer)) {
81
+ return;
82
+ }
83
+ if (this.baseLayerSelection) {
84
+ this.baseLayerSelection.visible = false;
85
+ }
86
+ layer.visible = true;
87
+ this.baseLayerSelection = layer;
88
+ this._map.viewController.olView.setMinZoom(layer.dataSource.options.minZoom || (this._map.options.view || {}).minZoom);
89
+ this._map.viewController.olView.setMaxZoom(layer.dataSource.options.maxZoom || (this._map.options.view || {}).maxZoom);
90
+ }
91
+ remove(...layers) {
92
+ const list = layers.reduce((list, layer) => {
93
+ if (this.isSelected(layer)) {
94
+ this.deselect(layer);
95
+ }
96
+ const result = this._remove(layer);
97
+ Array.isArray(result) ? list.push(...result) : list.push(result);
98
+ return list;
99
+ }, []);
100
+ this.tree.remove(...list);
101
+ this.notify();
102
+ }
103
+ /**
104
+ * Move a layer into the tree
105
+ * @param layer Layer to move
106
+ * @param beforeTo The index position to move inside a tree
107
+ */
108
+ moveTo(beforeTo, ...layers) {
109
+ const movedLayers = this.tree.moveTo(beforeTo, ...layers);
110
+ if (!movedLayers?.length) {
111
+ return;
112
+ }
113
+ return movedLayers;
114
+ }
115
+ moveBelow(layerRef, ...layers) {
116
+ const position = this.getPosition(layerRef, 'below');
117
+ const movedLayers = this.moveTo(position, ...layers);
118
+ this.handleMove(movedLayers, layerRef.parent);
119
+ }
120
+ moveAbove(layerRef, ...layers) {
121
+ const position = this.getPosition(layerRef);
122
+ const movedLayers = this.moveTo(position, ...layers);
123
+ this.handleMove(movedLayers, layerRef.parent);
124
+ }
125
+ moveInside(layerRef, ...layers) {
126
+ const position = this.getPosition(layerRef);
127
+ const movedLayers = this.moveTo(position.concat(0), ...layers);
128
+ this.handleMove(movedLayers, layerRef);
129
+ }
130
+ raise(...layers) {
131
+ const position = this.getPosition(layers[0]);
132
+ const nextPosition = this.findLowestVisiblePostion(position, -1);
133
+ this.moveTo(nextPosition, ...layers);
134
+ this.handleMove(layers, null, true);
135
+ }
136
+ lower(...layers) {
137
+ const position = this.getPosition(layers[layers.length - 1]);
138
+ const nextPosition = this.findLowestVisiblePostion(position, 2); // +2 because we use moveBefore
139
+ this.moveTo(nextPosition, ...layers);
140
+ this.handleMove(layers, null, true);
141
+ }
142
+ /** Reset all except SystemLayer */
143
+ reset() {
144
+ this.clearBaselayers();
145
+ this.clearTree();
146
+ this.clearOther();
147
+ this.clearSelection();
148
+ this.notify();
149
+ }
150
+ getById(id) {
151
+ return this.all.find((layer) => layer.id && layer.id === id);
152
+ }
153
+ getBySourceId(id) {
154
+ return this.all.find((layer) => layer.dataSource?.id && layer.dataSource.id === id);
155
+ }
156
+ getPosition(layer, type = 'above') {
157
+ const position = this.tree.getPosition(layer);
158
+ if (type === 'below') {
159
+ let index = position.pop();
160
+ return position.concat(++index);
161
+ }
162
+ return position;
163
+ }
164
+ getLayerRecipient(layer) {
165
+ return layer.parent
166
+ ? this.tree.getChildren(layer.parent)
167
+ : [...this.treeLayers];
168
+ }
169
+ /**
170
+ * We got non visible layer in the tree like LinkedLayer. We want the next visible layer in tree
171
+ */
172
+ findLowestVisiblePostion(position, increment) {
173
+ const index = position.pop();
174
+ const nextPosition = position.concat(index + increment);
175
+ const layer = this.tree.getNodeByPosition(nextPosition);
176
+ if (layer && !layer.showInLayerList) {
177
+ const nextIndex = increment > 1 ? 1 : increment;
178
+ return this.findLowestVisiblePostion(nextPosition, nextIndex);
179
+ }
180
+ return nextPosition;
181
+ }
182
+ handleMove(layers, parent, keepCurrentParent) {
183
+ if (!layers?.length) {
184
+ return;
185
+ }
186
+ layers.forEach((layer) => {
187
+ layer.moveTo(keepCurrentParent ? layer.parent : parent);
188
+ });
189
+ this._internalMove();
190
+ }
191
+ _internalMove() {
192
+ this.recalculateZindex();
193
+ this.notify();
194
+ }
195
+ getBefore(layer) {
196
+ return this.treeLayers.find((layerTree) => layerTree.zIndex <= layer.zIndex);
197
+ }
198
+ /** Recursive */
199
+ recalculateZindex(minIndex = this.baseLayers.length, layers = this.treeLayers) {
200
+ return [...layers].reverse().reduce((previousZindex, layer) => {
201
+ let zIndex = ++previousZindex;
202
+ layer.zIndex = zIndex;
203
+ if (isLayerGroup(layer)) {
204
+ zIndex = this.recalculateZindex(zIndex, layer.children);
205
+ }
206
+ return zIndex;
207
+ }, minIndex);
208
+ }
209
+ handleAdd(layer, offset) {
210
+ const existingLayer = this.getById(layer.id);
211
+ if (existingLayer !== undefined) {
212
+ existingLayer.visible = true;
213
+ return;
214
+ }
215
+ const zIndex = this.getZindexOffset(layer, offset);
216
+ this.setZindex(layer, zIndex);
217
+ layer.init(this._map);
218
+ if (isBaseLayer(layer)) {
219
+ if (layer.visible) {
220
+ this.selectBaseLayer(layer);
221
+ }
222
+ this._baseLayers.push(layer);
223
+ }
224
+ else if (this.isOtherLayer(layer)) {
225
+ this._otherLayers.push(layer);
226
+ }
227
+ else if (this.isSystemLayer(layer) && !layer.showInLayerList) {
228
+ this._systemLayers.push(layer);
229
+ }
230
+ else if (layer.showInLayerList) {
231
+ return layer;
232
+ }
233
+ else {
234
+ this._otherLayers.push(layer);
235
+ }
236
+ const parent = layer.parentId
237
+ ? this.getById(layer.parentId.split(TREE_SEPERATOR).pop())
238
+ : undefined;
239
+ layer.add(parent);
240
+ return;
241
+ }
242
+ _remove(layer) {
243
+ if (isBaseLayer(layer)) {
244
+ this.removeBaselayer(layer);
245
+ }
246
+ else if (this.isOtherLayer(layer)) {
247
+ this.removeOtherLayer(layer);
248
+ }
249
+ else if (this.isSystemLayer(layer)) {
250
+ this.removeSystemLayer(layer);
251
+ }
252
+ layer.remove();
253
+ return layer;
254
+ }
255
+ removeBaselayer(layer) {
256
+ this.removeIn(layer, this._baseLayers);
257
+ }
258
+ removeSystemLayer(layer) {
259
+ this.removeIn(layer, this._systemLayers);
260
+ }
261
+ removeOtherLayer(layer) {
262
+ this.removeIn(layer, this._otherLayers);
263
+ }
264
+ removeIn(layer, store) {
265
+ const index = store.findIndex((sysLayer) => sysLayer.id === layer.id);
266
+ if (index === -1) {
267
+ return;
268
+ }
269
+ store.splice(index, 1);
270
+ }
271
+ isSystemLayer(layer) {
272
+ return isLayerItem(layer) && layer.isIgoInternalLayer;
273
+ }
274
+ isOtherLayer(layer) {
275
+ return isLayerLinked(layer) && !layer.showInLayerList;
276
+ }
277
+ clearBaselayers() {
278
+ this.baseLayers.forEach((layer) => this._remove(layer));
279
+ this._baseLayers = [];
280
+ }
281
+ clearTree() {
282
+ this.treeLayers.forEach((layer) => this._remove(layer));
283
+ this.tree.clear();
284
+ }
285
+ clearSystems() {
286
+ this._systemLayers.forEach((layer) => this._remove(layer));
287
+ this._systemLayers = [];
288
+ }
289
+ clearOther() {
290
+ this._otherLayers.forEach((layer) => this._remove(layer));
291
+ this._otherLayers = [];
292
+ }
293
+ getZindexOffset(layer, previousOffset = 0) {
294
+ return layer.zIndex ? 0 : previousOffset++;
295
+ }
296
+ setZindex(layer, offset) {
297
+ if (isBaseLayer(layer)) {
298
+ return this.handleBaselayerZIndex(layer, offset);
299
+ }
300
+ if (layer.zIndex === undefined || layer.zIndex === 0) {
301
+ const maxZIndex = Math.max(ZINDEX_MIN, ...this.treeLayers.map((l) => l.zIndex));
302
+ layer.zIndex = maxZIndex + 1 + (offset ?? 0);
303
+ }
304
+ }
305
+ handleBaselayerZIndex(layer, offset) {
306
+ const maxZIndex = Math.max(0, ...this.baseLayers.map((l) => l.zIndex));
307
+ const zIndex = maxZIndex + 1 + (offset ?? 0);
308
+ layer.zIndex = zIndex > ZINDEX_MIN ? ZINDEX_MIN : zIndex;
309
+ }
310
+ notify() {
311
+ this.layersFlattened = [...this.tree.flattened];
312
+ this._layers$.next([...this.treeLayers]);
313
+ this._baseLayers$.next([...this.baseLayers]);
314
+ }
315
+ }
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2xheWVyL3NoYXJlZC9sYXllci1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5ELE9BQU8sRUFDTCxlQUFlLEVBRWYsYUFBYSxFQUNiLFlBQVksRUFDWixHQUFHLEVBQ0osTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbkUscUNBQXFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUV0Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxtQkFBbUI7SUE0QjVDO0lBM0JGLElBQUksQ0FBaUI7SUFFN0IsdUVBQXVFO0lBQy9ELGFBQWEsR0FBZSxFQUFFLENBQUM7SUFFdkMsZ0dBQWdHO0lBQ3hGLFlBQVksR0FBZSxFQUFFLENBQUM7SUFFdEMsZUFBZSxHQUFlLEVBQUUsQ0FBQztJQUV6QixRQUFRLEdBQUcsSUFBSSxlQUFlLENBQXlCLFNBQVMsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXZDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRO1NBQzdCLFlBQVksRUFBRTtTQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFakMsV0FBVyxHQUFZLEVBQUUsQ0FB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ekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRSRUVfU0VQRVJBVE9SLCBUcmVlIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgbWFwXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyB0eXBlIE1hcEJhc2UgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC5hYnN0cmFjdCc7XG5pbXBvcnQgeyBpc0Jhc2VMYXllciwgaXNMYXllckdyb3VwLCBpc0xheWVySXRlbSB9IGZyb20gJy4uL3V0aWxzL2xheWVyLnV0aWxzJztcbmltcG9ydCB7IExheWVyU2VsZWN0aW9uTW9kZWwgfSBmcm9tICcuL2xheWVyLXNlbGVjdGlvbic7XG5pbXBvcnQgdHlwZSB7IEFueUxheWVyIH0gZnJvbSAnLi9sYXllcnMvYW55LWxheWVyJztcbmltcG9ydCB0eXBlIHsgTGF5ZXIgfSBmcm9tICcuL2xheWVycy9sYXllcic7XG5pbXBvcnQgdHlwZSB7IExheWVyR3JvdXAgfSBmcm9tICcuL2xheWVycy9sYXllci1ncm91cCc7XG5pbXBvcnQgeyBpc0xheWVyTGlua2VkIH0gZnJvbSAnLi9sYXllcnMvbGlua2VkL2xpbmtlZC1sYXllci51dGlscyc7XG5cbi8vIEJlbG93IDEwIGlzIHJlc2VydmVkIGZvciBCYXNlTGF5ZXJcbmNvbnN0IFpJTkRFWF9NSU4gPSAxMDtcblxuLyoqXG4gKiBXZSBnb3QgZm91ciBraW5kIG9mIGxheWVyc1xuICogVHJlZUxheWVyOiBhbGwgbGF5ZXJzIHRvIHNob3cgaW4gdGhlIGxheWVyIG1hbmFnZXJcbiAqIEJhc2VsYXllcjogTGF5ZXIgZGVkaWNhdGVkIGZvciB0aGUgYmFzZW1hcFxuICogU3lzdGVtTGF5ZXI6IEV2ZXJ5IGxheWVyIGRlZGljYXRlZCB0byBnb29kIGZ1bmN0aW9uIG9mIHRoZSBtYXAgKFNlbGVjdGlvbiwgaG92ZXJpbmcpXG4gKiBPdGhlckxheWVyOiBhbGwgcmVtYWluaW5nIGxheWVyIHRoYXQgaXMgbGlua2VkIHRvIGFub3RoZXIgbGF5ZXIgb3Igc2ltcGx5IG5vdCBhIHN5c3RlbUxheWVyIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIG9uIG1hcCByZXNldFxuICovXG5leHBvcnQgY2xhc3MgTGF5ZXJDb250cm9sbGVyIGV4dGVuZHMgTGF5ZXJTZWxlY3Rpb25Nb2RlbCB7XG4gIHByaXZhdGUgdHJlZTogVHJlZTxBbnlMYXllcj47XG5cbiAgLyoqIFNlbGVjdGlvbiwgSG92ZXJpbmcsIGV2ZXJ5IGludGVybmFsTGF5ZXIgbm90IGluIHRoZSB0cmVlIGlzIGhlcmUgKi9cbiAgcHJpdmF0ZSBfc3lzdGVtTGF5ZXJzOiBBbnlMYXllcltdID0gW107XG5cbiAgLyoqIExpbmtlZExheWVyIGFuZCBvdGhlciBsYXllciB0aGF0IGFyZSBub3QgaW4gdGhlIHByZXZpb3VzIGNhdGVnb3J5IGFuZCBub3QgdmlzaWJsZSBpbiB0cmVlICovXG4gIHByaXZhdGUgX290aGVyTGF5ZXJzOiBBbnlMYXllcltdID0gW107XG5cbiAgbGF5ZXJzRmxhdHRlbmVkOiBBbnlMYXllcltdID0gW107XG5cbiAgcHJpdmF0ZSBfbGF5ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW55TGF5ZXJbXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgbGF5ZXJzJCA9IHRoaXMuX2xheWVycyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgbGF5ZXJzRmxhdHRlbmVkJCA9IHRoaXMuX2xheWVycyRcbiAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAucGlwZShtYXAoKCkgPT4gdGhpcy5sYXllcnNGbGF0dGVuZWQpKTtcblxuICBwcml2YXRlIF9iYXNlTGF5ZXJzOiBMYXllcltdID0gW107XG4gIHByaXZhdGUgX2Jhc2VMYXllcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYXllcltdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBiYXNlTGF5ZXJzJCA9IHRoaXMuX2Jhc2VMYXllcnMkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGJhc2VMYXllclNlbGVjdGlvbjogTGF5ZXI7XG5cbiAgLyoqIEFsbCBsYXllcnMgd2l0aCB0aGUgdHJlZSBmbGF0dGVuZWQgKi9cbiAgYWxsJDogT2JzZXJ2YWJsZTxBbnlMYXllcltdPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9tYXA6IE1hcEJhc2UsXG4gICAgbGF5ZXJzOiBBbnlMYXllcltdXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmFsbCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmxheWVyc0ZsYXR0ZW5lZCQsIHRoaXMuYmFzZUxheWVycyRdKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmFsbClcbiAgICApO1xuXG4gICAgdGhpcy50cmVlID0gbmV3IFRyZWUobGF5ZXJzLCB7XG4gICAgICBnZXRDaGlsZHJlbjogKG5vZGUpID0+IGlzTGF5ZXJHcm91cChub2RlKSAmJiBub2RlLmNoaWxkcmVuLFxuICAgICAgZ2V0SWQ6IChub2RlKSA9PiBub2RlLmlkLFxuICAgICAgZ2V0TGV2ZWw6IChub2RlKSA9PiBub2RlLnpJbmRleCxcbiAgICAgIHJldmVyc2U6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBhbGwoKTogQW55TGF5ZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMuYmFzZUxheWVycyxcbiAgICAgIC4uLnRoaXMubGF5ZXJzRmxhdHRlbmVkLFxuICAgICAgLi4udGhpcy5fc3lzdGVtTGF5ZXJzLFxuICAgICAgLi4udGhpcy5fb3RoZXJMYXllcnNcbiAgICBdO1xuICB9XG5cbiAgZ2V0IGJhc2VMYXllcnMoKTogcmVhZG9ubHkgTGF5ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2Jhc2VMYXllcnM7XG4gIH1cblxuICBnZXQgYmFzZUxheWVyKCk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTGF5ZXJzLmZpbmQoKGxheWVyKSA9PiBsYXllci52aXNpYmxlKTtcbiAgfVxuXG4gIGdldCB0cmVlTGF5ZXJzKCk6IHJlYWRvbmx5IEFueUxheWVyW10ge1xuICAgIHJldHVybiB0aGlzLnRyZWUuZGF0YTtcbiAgfVxuXG4gIGFkZCguLi5sYXllcnM6IEFueUxheWVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBvZmZzZXQgPSAwO1xuXG4gICAgY29uc3QgYWRkZWRMYXllcnMgPSBsYXllcnNcbiAgICAgIC5tYXAoKGxheWVyKSA9PiB0aGlzLmhhbmRsZUFkZChsYXllciwgb2Zmc2V0KSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAoIWFkZGVkTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5ub3RpZnkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRyZWUuYWRkKC4uLmFkZGVkTGF5ZXJzKTtcblxuICAgIC8vIE5vdGlmeSB0aGUgbGF5ZXJzIGNoYW5nZSBiZWZvcmUgdGhlIGl0ZXJhdGlvbiBvbiB0aGUgYWRkZWRMYXllclxuICAgIC8vIEJlY2F1c2UgdGhlIExheWVyIG1heSBoYXZlIGhhdmUgTGlua2VkTGF5ZXIgd2hvIG5lZWQgdG8gZmluZCB0aGUgcGFyZW50LlxuICAgIHRoaXMubGF5ZXJzRmxhdHRlbmVkID0gWy4uLnRoaXMudHJlZS5mbGF0dGVuZWRdO1xuICAgIGFkZGVkTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiBsYXllci5hZGQoKSk7XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlWmluZGV4KCk7XG4gICAgdGhpcy5ub3RpZnkoKTtcbiAgfVxuXG4gIHNlbGVjdEJhc2VMYXllcihsYXllcjogTGF5ZXIpOiB2b2lkIHtcbiAgICBpZiAoIWlzQmFzZUxheWVyKGxheWVyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VMYXllclNlbGVjdGlvbikge1xuICAgICAgdGhpcy5iYXNlTGF5ZXJTZWxlY3Rpb24udmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGxheWVyLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuYmFzZUxheWVyU2VsZWN0aW9uID0gbGF5ZXI7XG5cbiAgICB0aGlzLl9tYXAudmlld0NvbnRyb2xsZXIub2xWaWV3LnNldE1pblpvb20oXG4gICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMubWluWm9vbSB8fCAodGhpcy5fbWFwLm9wdGlvbnMudmlldyB8fCB7fSkubWluWm9vbVxuICAgICk7XG4gICAgdGhpcy5fbWFwLnZpZXdDb250cm9sbGVyLm9sVmlldy5zZXRNYXhab29tKFxuICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLm1heFpvb20gfHwgKHRoaXMuX21hcC5vcHRpb25zLnZpZXcgfHwge30pLm1heFpvb21cbiAgICApO1xuICB9XG5cbiAgcmVtb3ZlKC4uLmxheWVyczogQW55TGF5ZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3QgPSBsYXllcnMucmVkdWNlKChsaXN0LCBsYXllcikgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChsYXllcikpIHtcbiAgICAgICAgdGhpcy5kZXNlbGVjdChsYXllcik7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9yZW1vdmUobGF5ZXIpO1xuICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQpID8gbGlzdC5wdXNoKC4uLnJlc3VsdCkgOiBsaXN0LnB1c2gocmVzdWx0KTtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLnRyZWUucmVtb3ZlKC4uLmxpc3QpO1xuXG4gICAgdGhpcy5ub3RpZnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGEgbGF5ZXIgaW50byB0aGUgdHJlZVxuICAgKiBAcGFyYW0gbGF5ZXIgTGF5ZXIgdG8gbW92ZVxuICAgKiBAcGFyYW0gYmVmb3JlVG8gVGhlIGluZGV4IHBvc2l0aW9uIHRvIG1vdmUgaW5zaWRlIGEgdHJlZVxuICAgKi9cbiAgbW92ZVRvKGJlZm9yZVRvOiBudW1iZXJbXSwgLi4ubGF5ZXJzOiBBbnlMYXllcltdKTogQW55TGF5ZXJbXSB7XG4gICAgY29uc3QgbW92ZWRMYXllcnMgPSB0aGlzLnRyZWUubW92ZVRvKGJlZm9yZVRvLCAuLi5sYXllcnMpO1xuICAgIGlmICghbW92ZWRMYXllcnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBtb3ZlZExheWVycztcbiAgfVxuXG4gIG1vdmVCZWxvdyhsYXllclJlZjogQW55TGF5ZXIgfCB1bmRlZmluZWQsIC4uLmxheWVyczogQW55TGF5ZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihsYXllclJlZiwgJ2JlbG93Jyk7XG5cbiAgICBjb25zdCBtb3ZlZExheWVycyA9IHRoaXMubW92ZVRvKHBvc2l0aW9uLCAuLi5sYXllcnMpO1xuICAgIHRoaXMuaGFuZGxlTW92ZShtb3ZlZExheWVycywgbGF5ZXJSZWYucGFyZW50KTtcbiAgfVxuXG4gIG1vdmVBYm92ZShsYXllclJlZjogQW55TGF5ZXIgfCB1bmRlZmluZWQsIC4uLmxheWVyczogQW55TGF5ZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihsYXllclJlZik7XG5cbiAgICBjb25zdCBtb3ZlZExheWVycyA9IHRoaXMubW92ZVRvKHBvc2l0aW9uLCAuLi5sYXllcnMpO1xuICAgIHRoaXMuaGFuZGxlTW92ZShtb3ZlZExheWVycywgbGF5ZXJSZWYucGFyZW50KTtcbiAgfVxuXG4gIG1vdmVJbnNpZGUobGF5ZXJSZWY6IExheWVyR3JvdXAsIC4uLmxheWVyczogQW55TGF5ZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihsYXllclJlZik7XG5cbiAgICBjb25zdCBtb3ZlZExheWVycyA9IHRoaXMubW92ZVRvKHBvc2l0aW9uLmNvbmNhdCgwKSwgLi4ubGF5ZXJzKTtcbiAgICB0aGlzLmhhbmRsZU1vdmUobW92ZWRMYXllcnMsIGxheWVyUmVmKTtcbiAgfVxuXG4gIHJhaXNlKC4uLmxheWVyczogQW55TGF5ZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbihsYXllcnNbMF0pO1xuICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IHRoaXMuZmluZExvd2VzdFZpc2libGVQb3N0aW9uKHBvc2l0aW9uLCAtMSk7XG4gICAgdGhpcy5tb3ZlVG8obmV4dFBvc2l0aW9uLCAuLi5sYXllcnMpO1xuICAgIHRoaXMuaGFuZGxlTW92ZShsYXllcnMsIG51bGwsIHRydWUpO1xuICB9XG5cbiAgbG93ZXIoLi4ubGF5ZXJzOiBBbnlMYXllcltdKTogdm9pZCB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKGxheWVyc1tsYXllcnMubGVuZ3RoIC0gMV0pO1xuICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IHRoaXMuZmluZExvd2VzdFZpc2libGVQb3N0aW9uKHBvc2l0aW9uLCAyKTsgLy8gKzIgYmVjYXVzZSB3ZSB1c2UgbW92ZUJlZm9yZVxuICAgIHRoaXMubW92ZVRvKG5leHRQb3NpdGlvbiwgLi4ubGF5ZXJzKTtcbiAgICB0aGlzLmhhbmRsZU1vdmUobGF5ZXJzLCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIC8qKiBSZXNldCBhbGwgZXhjZXB0IFN5c3RlbUxheWVyICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJCYXNlbGF5ZXJzKCk7XG4gICAgdGhpcy5jbGVhclRyZWUoKTtcbiAgICB0aGlzLmNsZWFyT3RoZXIoKTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG5cbiAgICB0aGlzLm5vdGlmeSgpO1xuICB9XG5cbiAgZ2V0QnlJZChpZDogc3RyaW5nKTogQW55TGF5ZXIge1xuICAgIHJldHVybiB0aGlzLmFsbC5maW5kKChsYXllcikgPT4gbGF5ZXIuaWQgJiYgbGF5ZXIuaWQgPT09IGlkKTtcbiAgfVxuXG4gIGdldEJ5U291cmNlSWQoaWQ6IHN0cmluZyk6IEFueUxheWVyIHtcbiAgICByZXR1cm4gdGhpcy5hbGwuZmluZChcbiAgICAgIChsYXllcikgPT4gbGF5ZXIuZGF0YVNvdXJjZT8uaWQgJiYgbGF5ZXIuZGF0YVNvdXJjZS5pZCA9PT0gaWRcbiAgICApO1xuICB9XG5cbiAgZ2V0UG9zaXRpb24obGF5ZXI6IEFueUxheWVyLCB0eXBlOiAnYmVsb3cnIHwgJ2Fib3ZlJyA9ICdhYm92ZScpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnRyZWUuZ2V0UG9zaXRpb24obGF5ZXIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdiZWxvdycpIHtcbiAgICAgIGxldCBpbmRleCA9IHBvc2l0aW9uLnBvcCgpO1xuICAgICAgcmV0dXJuIHBvc2l0aW9uLmNvbmNhdCgrK2luZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICBnZXRMYXllclJlY2lwaWVudChsYXllcjogQW55TGF5ZXIpOiBBbnlMYXllcltdIHtcbiAgICByZXR1cm4gbGF5ZXIucGFyZW50XG4gICAgICA/IHRoaXMudHJlZS5nZXRDaGlsZHJlbihsYXllci5wYXJlbnQpXG4gICAgICA6IFsuLi50aGlzLnRyZWVMYXllcnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFdlIGdvdCBub24gdmlzaWJsZSBsYXllciBpbiB0aGUgdHJlZSBsaWtlIExpbmtlZExheWVyLiBXZSB3YW50IHRoZSBuZXh0IHZpc2libGUgbGF5ZXIgaW4gdHJlZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kTG93ZXN0VmlzaWJsZVBvc3Rpb24oXG4gICAgcG9zaXRpb246IG51bWJlcltdLFxuICAgIGluY3JlbWVudDogbnVtYmVyXG4gICk6IG51bWJlcltdIHtcbiAgICBjb25zdCBpbmRleCA9IHBvc2l0aW9uLnBvcCgpO1xuICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uLmNvbmNhdChpbmRleCArIGluY3JlbWVudCk7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLnRyZWUuZ2V0Tm9kZUJ5UG9zaXRpb24obmV4dFBvc2l0aW9uKTtcbiAgICBpZiAobGF5ZXIgJiYgIWxheWVyLnNob3dJbkxheWVyTGlzdCkge1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gaW5jcmVtZW50ID4gMSA/IDEgOiBpbmNyZW1lbnQ7XG4gICAgICByZXR1cm4gdGhpcy5maW5kTG93ZXN0VmlzaWJsZVBvc3Rpb24obmV4dFBvc2l0aW9uLCBuZXh0SW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFBvc2l0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNb3ZlKFxuICAgIGxheWVyczogQW55TGF5ZXJbXSxcbiAgICBwYXJlbnQ/OiBMYXllckdyb3VwLFxuICAgIGtlZXBDdXJyZW50UGFyZW50PzogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZiAoIWxheWVycz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICBsYXllci5tb3ZlVG8oa2VlcEN1cnJlbnRQYXJlbnQgPyBsYXllci5wYXJlbnQgOiBwYXJlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuX2ludGVybmFsTW92ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW50ZXJuYWxNb3ZlKCkge1xuICAgIHRoaXMucmVjYWxjdWxhdGVaaW5kZXgoKTtcbiAgICB0aGlzLm5vdGlmeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCZWZvcmUobGF5ZXI6IEFueUxheWVyKTogQW55TGF5ZXIge1xuICAgIHJldHVybiB0aGlzLnRyZWVMYXllcnMuZmluZChcbiAgICAgIChsYXllclRyZWUpID0+IGxheWVyVHJlZS56SW5kZXggPD0gbGF5ZXIuekluZGV4XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBSZWN1cnNpdmUgKi9cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZVppbmRleChcbiAgICBtaW5JbmRleCA9IHRoaXMuYmFzZUxheWVycy5sZW5ndGgsXG4gICAgbGF5ZXJzID0gdGhpcy50cmVlTGF5ZXJzXG4gICkge1xuICAgIHJldHVybiBbLi4ubGF5ZXJzXS5yZXZlcnNlKCkucmVkdWNlKChwcmV2aW91c1ppbmRleCwgbGF5ZXIpID0+IHtcbiAgICAgIGxldCB6SW5kZXggPSArK3ByZXZpb3VzWmluZGV4O1xuICAgICAgbGF5ZXIuekluZGV4ID0gekluZGV4O1xuICAgICAgaWYgKGlzTGF5ZXJHcm91cChsYXllcikpIHtcbiAgICAgICAgekluZGV4ID0gdGhpcy5yZWNhbGN1bGF0ZVppbmRleCh6SW5kZXgsIGxheWVyLmNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHpJbmRleDtcbiAgICB9LCBtaW5JbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFkZChsYXllcjogQW55TGF5ZXIsIG9mZnNldD86IG51bWJlcik6IEFueUxheWVyIHtcbiAgICBjb25zdCBleGlzdGluZ0xheWVyID0gdGhpcy5nZXRCeUlkKGxheWVyLmlkKTtcbiAgICBpZiAoZXhpc3RpbmdMYXllciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleGlzdGluZ0xheWVyLnZpc2libGUgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHpJbmRleCA9IHRoaXMuZ2V0WmluZGV4T2Zmc2V0KGxheWVyLCBvZmZzZXQpO1xuICAgIHRoaXMuc2V0WmluZGV4KGxheWVyLCB6SW5kZXgpO1xuXG4gICAgbGF5ZXIuaW5pdCh0aGlzLl9tYXApO1xuXG4gICAgaWYgKGlzQmFzZUxheWVyKGxheWVyKSkge1xuICAgICAgaWYgKGxheWVyLnZpc2libGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RCYXNlTGF5ZXIobGF5ZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYmFzZUxheWVycy5wdXNoKGxheWVyKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNPdGhlckxheWVyKGxheWVyKSkge1xuICAgICAgdGhpcy5fb3RoZXJMYXllcnMucHVzaChsYXllcik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU3lzdGVtTGF5ZXIobGF5ZXIpICYmICFsYXllci5zaG93SW5MYXllckxpc3QpIHtcbiAgICAgIHRoaXMuX3N5c3RlbUxheWVycy5wdXNoKGxheWVyKTtcbiAgICB9IGVsc2UgaWYgKGxheWVyLnNob3dJbkxheWVyTGlzdCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vdGhlckxheWVycy5wdXNoKGxheWVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQ6IExheWVyR3JvdXAgfCB1bmRlZmluZWQgPSBsYXllci5wYXJlbnRJZFxuICAgICAgPyAodGhpcy5nZXRCeUlkKGxheWVyLnBhcmVudElkLnNwbGl0KFRSRUVfU0VQRVJBVE9SKS5wb3AoKSkgYXMgTGF5ZXJHcm91cClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGxheWVyLmFkZChwYXJlbnQpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlKGxheWVyOiBBbnlMYXllcik6IEFueUxheWVyIHwgQW55TGF5ZXJbXSB7XG4gICAgaWYgKGlzQmFzZUxheWVyKGxheWVyKSkge1xuICAgICAgdGhpcy5yZW1vdmVCYXNlbGF5ZXIobGF5ZXIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc090aGVyTGF5ZXIobGF5ZXIpKSB7XG4gICAgICB0aGlzLnJlbW92ZU90aGVyTGF5ZXIobGF5ZXIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1N5c3RlbUxheWVyKGxheWVyKSkge1xuICAgICAgdGhpcy5yZW1vdmVTeXN0ZW1MYXllcihsYXllcik7XG4gICAgfVxuXG4gICAgbGF5ZXIucmVtb3ZlKCk7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVCYXNlbGF5ZXIobGF5ZXI6IEFueUxheWVyKSB7XG4gICAgdGhpcy5yZW1vdmVJbihsYXllciwgdGhpcy5fYmFzZUxheWVycyk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVN5c3RlbUxheWVyKGxheWVyOiBBbnlMYXllcikge1xuICAgIHRoaXMucmVtb3ZlSW4obGF5ZXIsIHRoaXMuX3N5c3RlbUxheWVycyk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU90aGVyTGF5ZXIobGF5ZXI6IEFueUxheWVyKSB7XG4gICAgdGhpcy5yZW1vdmVJbihsYXllciwgdGhpcy5fb3RoZXJMYXllcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVJbihsYXllcjogQW55TGF5ZXIsIHN0b3JlOiBBbnlMYXllcltdKSB7XG4gICAgY29uc3QgaW5kZXggPSBzdG9yZS5maW5kSW5kZXgoKHN5c0xheWVyKSA9PiBzeXNMYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RvcmUuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTeXN0ZW1MYXllcihsYXllcjogQW55TGF5ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNMYXllckl0ZW0obGF5ZXIpICYmIGxheWVyLmlzSWdvSW50ZXJuYWxMYXllcjtcbiAgfVxuXG4gIHByaXZhdGUgaXNPdGhlckxheWVyKGxheWVyOiBBbnlMYXllcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0xheWVyTGlua2VkKGxheWVyKSAmJiAhbGF5ZXIuc2hvd0luTGF5ZXJMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckJhc2VsYXllcnMoKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB0aGlzLl9yZW1vdmUobGF5ZXIpKTtcbiAgICB0aGlzLl9iYXNlTGF5ZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIGNsZWFyVHJlZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWVMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHRoaXMuX3JlbW92ZShsYXllcikpO1xuICAgIHRoaXMudHJlZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclN5c3RlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5fc3lzdGVtTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB0aGlzLl9yZW1vdmUobGF5ZXIpKTtcbiAgICB0aGlzLl9zeXN0ZW1MYXllcnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJPdGhlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9vdGhlckxheWVycy5mb3JFYWNoKChsYXllcikgPT4gdGhpcy5fcmVtb3ZlKGxheWVyKSk7XG4gICAgdGhpcy5fb3RoZXJMYXllcnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0WmluZGV4T2Zmc2V0KGxheWVyOiBBbnlMYXllciwgcHJldmlvdXNPZmZzZXQgPSAwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbGF5ZXIuekluZGV4ID8gMCA6IHByZXZpb3VzT2Zmc2V0Kys7XG4gIH1cblxuICBwcml2YXRlIHNldFppbmRleChsYXllcjogQW55TGF5ZXIsIG9mZnNldD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpc0Jhc2VMYXllcihsYXllcikpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUJhc2VsYXllclpJbmRleChsYXllciwgb2Zmc2V0KTtcbiAgICB9XG4gICAgaWYgKGxheWVyLnpJbmRleCA9PT0gdW5kZWZpbmVkIHx8IGxheWVyLnpJbmRleCA9PT0gMCkge1xuICAgICAgY29uc3QgbWF4WkluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIFpJTkRFWF9NSU4sXG4gICAgICAgIC4uLnRoaXMudHJlZUxheWVycy5tYXAoKGwpID0+IGwuekluZGV4KVxuICAgICAgKTtcbiAgICAgIGxheWVyLnpJbmRleCA9IG1heFpJbmRleCArIDEgKyAob2Zmc2V0ID8/IDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQmFzZWxheWVyWkluZGV4KGxheWVyOiBMYXllciwgb2Zmc2V0PzogbnVtYmVyKSB7XG4gICAgY29uc3QgbWF4WkluZGV4ID0gTWF0aC5tYXgoMCwgLi4udGhpcy5iYXNlTGF5ZXJzLm1hcCgobCkgPT4gbC56SW5kZXgpKTtcblxuICAgIGNvbnN0IHpJbmRleCA9IG1heFpJbmRleCArIDEgKyAob2Zmc2V0ID8/IDApO1xuICAgIGxheWVyLnpJbmRleCA9IHpJbmRleCA+IFpJTkRFWF9NSU4gPyBaSU5ERVhfTUlOIDogekluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBub3RpZnkoKTogdm9pZCB7XG4gICAgdGhpcy5sYXllcnNGbGF0dGVuZWQgPSBbLi4udGhpcy50cmVlLmZsYXR0ZW5lZF07XG4gICAgdGhpcy5fbGF5ZXJzJC5uZXh0KFsuLi50aGlzLnRyZWVMYXllcnNdKTtcbiAgICB0aGlzLl9iYXNlTGF5ZXJzJC5uZXh0KFsuLi50aGlzLmJhc2VMYXllcnNdKTtcbiAgfVxufVxuIl19