@kando-env/kando-ui 1.2.236 → 1.2.237

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 (592) hide show
  1. package/lib/Router.js +66 -4
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +41 -11
  3. package/lib/Widgets/EventsRow/EventsRow.js +41 -14
  4. package/lib/Widgets/Map/GraphUtils.js +4 -1
  5. package/lib/Widgets/Map/Map.js +62 -117
  6. package/lib/Widgets/Map/Map.scss +0 -67
  7. package/lib/Widgets/Map/MapUtils.js +67 -28
  8. package/lib/Widgets/Map/areas/AreaPolygon.js +27 -7
  9. package/lib/Widgets/Map/areas/AreaPolygons.js +23 -10
  10. package/lib/Widgets/Map/edges/Edge.js +31 -10
  11. package/lib/Widgets/Map/edges/Edge.scss +2 -7
  12. package/lib/Widgets/Map/edges/Edges.js +18 -24
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +22 -7
  14. package/lib/Widgets/Map/events/Event.js +23 -7
  15. package/lib/Widgets/Map/events/EventIndicator.js +43 -20
  16. package/lib/Widgets/Map/events/EventPath.js +20 -5
  17. package/lib/Widgets/Map/events/EventUtils.js +69 -26
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +17 -10
  19. package/lib/Widgets/Map/events/PointOfEvent.js +37 -11
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +14 -4
  21. package/lib/Widgets/Map/events/Snail.js +19 -7
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +54 -15
  23. package/lib/Widgets/Map/map/FloatingGraph.js +19 -3
  24. package/lib/Widgets/Map/map/GraphDateButton.js +9 -3
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +11 -5
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +10 -4
  27. package/lib/Widgets/Map/points/PointMarker.js +35 -22
  28. package/lib/Widgets/Map/points/PointMarkers.js +26 -62
  29. package/lib/Widgets/Map/points/PointUtils.js +106 -85
  30. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +49 -15
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +19 -4
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +13 -1
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +5 -1
  34. package/lib/Widgets/MostPolluting/Areas/Areas.js +53 -19
  35. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +1 -1
  36. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  37. package/lib/Widgets/MostPolluting/Areas/styles.js +7 -1
  38. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +11 -3
  39. package/lib/Widgets/MostPolluting/Factories/Factories.js +64 -30
  40. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +21 -4
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +10 -1
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +17 -4
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +7 -3
  44. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +1 -1
  45. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  46. package/lib/Widgets/MostPolluting/Factories/styles.js +7 -1
  47. package/lib/Widgets/MostPolluting/MostPolluting.js +18 -22
  48. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +17 -13
  49. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +9 -2
  50. package/lib/Widgets/MostPolluting/ShowMore/styles.js +5 -1
  51. package/lib/Widgets/MostPolluting/assets/index.js +28 -17
  52. package/lib/Widgets/MostPolluting/components/ChangePercent.js +16 -1
  53. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +26 -15
  54. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +26 -4
  55. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +33 -25
  56. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +20 -4
  57. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +43 -29
  58. package/lib/Widgets/MostPolluting/models.js +1 -1
  59. package/lib/Widgets/MostPolluting/styles.js +7 -1
  60. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +9 -2
  61. package/lib/Widgets/PotentialImpactSummary/Icon.js +11 -1
  62. package/lib/Widgets/PotentialImpactSummary/index.js +29 -7
  63. package/lib/Widgets/PotentialImpactSummary/index.test.js +36 -17
  64. package/lib/Widgets/PotentialImpactSummary/styles.js +15 -2
  65. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  66. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +10 -4
  67. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +21 -7
  68. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +29 -19
  69. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +24 -15
  70. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +21 -7
  71. package/lib/Widgets/QualitySummary/QualitySummary.js +24 -8
  72. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +2 -2
  73. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  74. package/lib/Widgets/QualitySummary/styles.js +15 -2
  75. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +20 -9
  76. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +34 -9
  77. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +18 -9
  78. package/lib/Widgets/UtilityInformation/UtilityInformation.js +45 -22
  79. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  80. package/lib/Widgets/UtilityInformation/styles.js +22 -2
  81. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +2 -2
  82. package/lib/assets/icons/index.js +8 -5
  83. package/lib/assets/icons/kandoStepper/index.js +14 -9
  84. package/lib/assets/icons/pin/pin-matash-white.svg +42 -8
  85. package/lib/assets/map/pin-matash-white.svg +28 -8
  86. package/lib/assets/map/pin-plant-white.svg +28 -6
  87. package/lib/assets/map/pin-suction.svg +23 -6
  88. package/lib/assets/map/pin-water.svg +17 -7
  89. package/lib/assets/point_icons/WWTP-icon.svg +21 -8
  90. package/lib/assets/point_icons/factory-icon.svg +21 -6
  91. package/lib/assets/point_icons/pump-station-icon.svg +16 -6
  92. package/lib/components/ApplyButton/ApplyButton.js +11 -5
  93. package/lib/components/ApplyButton/index.js +4 -1
  94. package/lib/components/Backdrop/Backdrop.js +8 -2
  95. package/lib/components/ContentLoader/ContentLoader.js +12 -7
  96. package/lib/components/ContentLoader/index.js +2 -1
  97. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +14 -7
  98. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +8 -2
  99. package/lib/components/CustomInputs/DoubleTabs/styles.js +10 -2
  100. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +18 -5
  101. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +5 -1
  102. package/lib/components/CustomInputs/Search/Search.js +38 -13
  103. package/lib/components/CustomInputs/Search/index.js +4 -1
  104. package/lib/components/CustomInputs/Select/Select.js +33 -33
  105. package/lib/components/CustomInputs/Select/Select.stories.js +8 -2
  106. package/lib/components/DamageType/DamageType.js +76 -37
  107. package/lib/components/DamageType/index.js +4 -1
  108. package/lib/components/DataLoaderError/DataLoaderError.js +10 -4
  109. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +16 -6
  110. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +37 -17
  111. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +37 -12
  112. package/lib/components/DischargeHeatmap/HighchartsOptions.js +10 -6
  113. package/lib/components/DischargeHeatmap/index.js +4 -1
  114. package/lib/components/DischargeHeatmap/mocks/handlers.js +4 -3
  115. package/lib/components/DischargeHeatmap/popupText.js +16 -1
  116. package/lib/components/DischargeHeatmap/titles.js +8 -1
  117. package/lib/components/DischargeHeatmap/types.js +1 -1
  118. package/lib/components/ErrorBoundary.js +15 -3
  119. package/lib/components/Events/Events.js +30 -5
  120. package/lib/components/Events/index.js +4 -1
  121. package/lib/components/Graph/Graph.js +74 -31
  122. package/lib/components/Graph/index.js +4 -1
  123. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +7 -1
  124. package/lib/components/Header/Breadcrumbs/index.js +4 -1
  125. package/lib/components/Header/DoubleTabs/DoubleTabs.js +30 -14
  126. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +8 -2
  127. package/lib/components/Header/DoubleTabs/styles.js +10 -2
  128. package/lib/components/Header/Header.js +7 -1
  129. package/lib/components/Header/Header.stories.js +8 -2
  130. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +11 -1
  131. package/lib/components/Header/InfoBar/InfoBar.js +30 -10
  132. package/lib/components/Header/InfoBar/Search/Control.js +13 -2
  133. package/lib/components/Header/InfoBar/Search/GroupLabel.js +12 -1
  134. package/lib/components/Header/InfoBar/Search/Search.js +26 -5
  135. package/lib/components/Header/InfoBar/Search/SearchContainer.js +21 -4
  136. package/lib/components/Header/InfoBar/Search/index.js +4 -1
  137. package/lib/components/Header/InfoBar/Search/searchStyle.js +4 -1
  138. package/lib/components/Header/KandoNavbar/KandoNavbar.js +91 -46
  139. package/lib/components/Header/KandoNavbar/index.js +4 -1
  140. package/lib/components/Header/Slideshow/Slideshow.js +67 -31
  141. package/lib/components/Header/Slideshow/index.js +4 -1
  142. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +7 -1
  143. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +15 -2
  144. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +15 -1
  145. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +24 -7
  146. package/lib/components/Header/Toolbar/Toolbar.js +84 -46
  147. package/lib/components/InfoBar/InfoBar.js +23 -8
  148. package/lib/components/InfoBar/InfoBar.stories.js +8 -2
  149. package/lib/components/KandoModal/KandoModal.js +42 -19
  150. package/lib/components/KandoModal/index.js +4 -1
  151. package/lib/components/Link.js +11 -2
  152. package/lib/components/Links/CustomRedirect/CustomRedirect.js +12 -3
  153. package/lib/components/Links/StyledLink/StyledLink.js +16 -6
  154. package/lib/components/Links/StyledNavLink/StyledNavLink.js +14 -4
  155. package/lib/components/LiveEvents/CarouselSlide.js +11 -5
  156. package/lib/components/LiveEvents/LiveEvents.js +10 -1
  157. package/lib/components/LiveEvents/index.js +4 -1
  158. package/lib/components/LoaderByPercent/LoaderByPercent.js +23 -13
  159. package/lib/components/Map/Map.js +26 -12
  160. package/lib/components/Map/index.js +4 -1
  161. package/lib/components/Modal/Modal.js +10 -3
  162. package/lib/components/NarrowHeader.js +12 -1
  163. package/lib/components/PointInfo/PointInfo.js +22 -10
  164. package/lib/components/PointInfo/index.js +4 -1
  165. package/lib/components/PopupModal/PopupModal.js +17 -6
  166. package/lib/components/PopupModal/PopupModal.stories.js +11 -2
  167. package/lib/components/Sector/Sector.js +13 -4
  168. package/lib/components/Sector/Sector.test.js +8 -3
  169. package/lib/components/Sector/index.js +4 -1
  170. package/lib/components/Sector/sectorIcons.js +27 -1
  171. package/lib/components/SevereEvent/Eta/Eta.js +40 -20
  172. package/lib/components/SevereEvent/Eta/styles.js +5 -1
  173. package/lib/components/SevereEvent/SevereEvent.js +36 -15
  174. package/lib/components/Spinner/Spinner.js +10 -5
  175. package/lib/components/Spinner/Spinner.stories.js +8 -2
  176. package/lib/components/Spinner/index.js +4 -1
  177. package/lib/components/Spinner/styles.js +9 -1
  178. package/lib/components/Tabs/Tabs.js +24 -4
  179. package/lib/components/Tabs/Tabs.stories.js +8 -2
  180. package/lib/components/Tabs/assets/index.js +6 -1
  181. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +12 -2
  182. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +43 -12
  183. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +36 -12
  184. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +4 -1
  185. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +29 -9
  186. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +9 -4
  187. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +4 -1
  188. package/lib/components/TimeRangeSelector/TimeRangeList.js +13 -4
  189. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +24 -11
  190. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +36 -11
  191. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +10 -2
  192. package/lib/components/TimeRangeSelector/constants.js +2 -2
  193. package/lib/components/TimeRangeSelector/index.js +4 -1
  194. package/lib/components/Toggle/Toggle.js +21 -7
  195. package/lib/components/Toggle/index.js +4 -1
  196. package/lib/components/TrendGraph/TrendGraph.js +49 -16
  197. package/lib/components/TrendGraph/index.js +4 -1
  198. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +36 -11
  199. package/lib/components/TrendGraphNVL/index.js +4 -1
  200. package/lib/development-environment/index.js +13 -1
  201. package/lib/development-environment/mock/browser.js +8 -1
  202. package/lib/development-environment/mock/get.js +5 -1
  203. package/lib/development-environment/mock/handlers.js +26 -1
  204. package/lib/development-environment/mock/mockBus.js +7 -2
  205. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +1 -1
  206. package/lib/development-environment/mock/mockObjects/areaInformation.js +1 -1
  207. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +1 -1
  208. package/lib/development-environment/mock/mockObjects/areaSitesData.js +1 -1
  209. package/lib/development-environment/mock/mockObjects/areasJson.js +1 -1
  210. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +1 -1
  211. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +1 -1
  212. package/lib/development-environment/mock/mockObjects/data-menuData.js +1 -1
  213. package/lib/development-environment/mock/mockObjects/data-search.js +1 -1
  214. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +1 -1
  215. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +1 -1
  216. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +1 -1
  217. package/lib/development-environment/mock/mockObjects/eventsJson.js +1 -1
  218. package/lib/development-environment/mock/mockObjects/metascore.js +1 -1
  219. package/lib/development-environment/mock/mockObjects/permissionsJson.js +1 -1
  220. package/lib/development-environment/mock/mockObjects/pointsJson.js +1 -1
  221. package/lib/development-environment/mock/mockObjects/site-info.js +1 -1
  222. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +1 -1
  223. package/lib/development-environment/togly/ToglyDashboard.js +22 -4
  224. package/lib/development-environment/togly/ToglyItem.js +25 -5
  225. package/lib/development-environment/togly/flags.js +1 -1
  226. package/lib/development-environment/togly/init.js +6 -1
  227. package/lib/development-environment/togly/macro.js +9 -7
  228. package/lib/development-environment/togly/useDoubleKeyDown.js +8 -1
  229. package/lib/development-environment/togly/useLocalStorage.js +19 -12
  230. package/lib/hooks/useApi.js +29 -10
  231. package/lib/hooks/useApiWithDashboardQuery.js +30 -10
  232. package/lib/hooks/useClickOutside.js +5 -1
  233. package/lib/hooks/useInitializeHeaders.js +7 -1
  234. package/lib/hooks/useKandoFetch.js +27 -13
  235. package/lib/hooks/useMap.js +52 -11
  236. package/lib/hooks/useNavContext.js +22 -13
  237. package/lib/hooks/useQueryURL.js +4 -1
  238. package/lib/hooks/useRemoveExistingLayers.js +7 -2
  239. package/lib/hooks/useUpdateEventBodyTail.js +10 -1
  240. package/lib/hooks/useUserTimeZone.js +9 -1
  241. package/lib/hooks/useUserTimeZone.test.js +9 -1
  242. package/lib/hooks/useWindowSize.js +19 -14
  243. package/lib/i18n/en.json +8 -36
  244. package/lib/i18n/en_uk.json +1 -24
  245. package/lib/i18n/fr.json +0 -23
  246. package/lib/i18n/he.json +0 -30
  247. package/lib/i18n/it.json +0 -23
  248. package/lib/index.js +29 -21
  249. package/lib/macros/getVersion.js +3 -2
  250. package/lib/models/IAction.js +1 -1
  251. package/lib/models/IAppState.js +1 -1
  252. package/lib/pages/AreaPage/AreaPage.js +34 -5
  253. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +17 -6
  254. package/lib/pages/AreaPage/Dashboard/Dashboard.js +23 -2
  255. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +35 -11
  256. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +8 -6
  257. package/lib/pages/AreaPage/Dashboard/Sites/Sites.js +65 -46
  258. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +10 -1
  259. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +15 -3
  260. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +7 -3
  261. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  262. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +1 -1
  263. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +10 -2
  264. package/lib/pages/AssessmentPage/AssessmentPage.js +30 -5
  265. package/lib/pages/CannyWidget/Feedback.js +25 -10
  266. package/lib/pages/CovidPage/CovidPage.js +14 -1
  267. package/lib/pages/CovidPage/components/Body.js +33 -9
  268. package/lib/pages/CovidPage/components/Map.js +38 -20
  269. package/lib/pages/CovidPage/components/Sidebar.js +18 -4
  270. package/lib/pages/CovidPage/components/Summary.js +29 -8
  271. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +36 -11
  272. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +4 -1
  273. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +41 -13
  274. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +4 -1
  275. package/lib/pages/CovidPage/components/areas/Area.js +33 -6
  276. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +45 -4
  277. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +18 -5
  278. package/lib/pages/CovidPage/components/areas/AreasList.js +33 -14
  279. package/lib/pages/CovidPage/components/areas/Sort.js +19 -5
  280. package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -2
  281. package/lib/pages/EventsPage/Body/Body.js +19 -2
  282. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +28 -11
  283. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +31 -11
  284. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +11 -4
  285. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +11 -3
  286. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +10 -5
  287. package/lib/pages/EventsPage/DragAndDropArea/index.js +4 -1
  288. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +36 -26
  289. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +24 -5
  290. package/lib/pages/EventsPage/EventsPage.js +13 -1
  291. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +32 -9
  292. package/lib/pages/EventsPage/events/MoreInfo.js +19 -1
  293. package/lib/pages/EventsPage/events/Sidebar.js +18 -5
  294. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +29 -5
  295. package/lib/pages/EventsPage/events/event_info/EventDetails.js +32 -8
  296. package/lib/pages/EventsPage/events/event_info/EventInfo.js +42 -14
  297. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +14 -2
  298. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +40 -10
  299. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +12 -1
  300. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +30 -8
  301. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +8 -1
  302. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/LineChartYear/LineChartYear.js +27 -7
  303. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/MockHistoryInformation.js +10 -2
  304. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +21 -5
  305. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsLineChart.js +23 -4
  306. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +22 -4
  307. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +33 -6
  308. package/lib/pages/EventsPage/events/event_info/samplings/Sampling.js +15 -3
  309. package/lib/pages/EventsPage/events/event_info/samplings/Samplings.js +10 -2
  310. package/lib/pages/EventsPage/events/event_info/sources/Source.js +31 -8
  311. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +20 -4
  312. package/lib/pages/EventsPage/events/events_list/EventItem.js +24 -3
  313. package/lib/pages/EventsPage/events/events_list/EventUtils.js +13 -2
  314. package/lib/pages/EventsPage/events/events_list/EventsList.js +111 -54
  315. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +32 -11
  316. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +96 -35
  317. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +55 -10
  318. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +17 -5
  319. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +38 -15
  320. package/lib/pages/EventsPage/events/events_list/Sort.js +23 -4
  321. package/lib/pages/ImportFileWizard/FileUploadRespones.js +19 -4
  322. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +8 -2
  323. package/lib/pages/ImportFileWizard/ImportFile.js +29 -10
  324. package/lib/pages/ImportFileWizard/ResponseBody.js +12 -3
  325. package/lib/pages/ImportFileWizard/ValidationForm.js +27 -7
  326. package/lib/pages/ImportFileWizard/ValidationResponse.js +30 -6
  327. package/lib/pages/ImportFileWizard/importFileUtils.js +2 -1
  328. package/lib/pages/ImportFileWizard/index.js +4 -1
  329. package/lib/pages/ImportGisPage/ImportGisContainer.js +27 -7
  330. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +27 -10
  331. package/lib/pages/ImportGisPage/importGisUtils.js +13 -1
  332. package/lib/pages/ImportGisProcess/index.js +18 -4
  333. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +19 -5
  334. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +10 -3
  335. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +8 -1
  336. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +58 -25
  337. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +8 -2
  338. package/lib/pages/NotificationsPage/Notification/Notification.js +16 -8
  339. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  340. package/lib/pages/NotificationsPage/Notifications.mock.js +1 -1
  341. package/lib/pages/NotificationsPage/Notifications.stories.js +10 -2
  342. package/lib/pages/NotificationsPage/NotificationsPage.js +35 -11
  343. package/lib/pages/NotificationsPage/assets/index.js +24 -15
  344. package/lib/pages/NotificationsPageV2/NotificationsPage.js +83 -35
  345. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +24 -4
  346. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +46 -27
  347. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +49 -18
  348. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +47 -4
  349. package/lib/pages/NotificationsPageV2/notificationUtils.js +30 -2
  350. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  351. package/lib/pages/OldSitePage/OldSitePage.js +77 -16
  352. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +16 -3
  353. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +8 -2
  354. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -4
  355. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +12 -5
  356. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -2
  357. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +23 -7
  358. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +20 -6
  359. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +10 -4
  360. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -2
  361. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +24 -9
  362. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +12 -4
  363. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +59 -28
  364. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  365. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
  366. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +18 -3
  367. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +15 -2
  368. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +16 -8
  369. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +16 -1
  370. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  371. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +10 -2
  372. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +7 -2
  373. package/lib/pages/ProfilePage/Container.js +6 -2
  374. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +43 -16
  375. package/lib/pages/ProfilePage/ProfilePage.js +115 -172
  376. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +32 -9
  377. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +17 -7
  378. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +14 -3
  379. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +48 -18
  380. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +21 -4
  381. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +15 -7
  382. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +29 -8
  383. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +25 -6
  384. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +21 -9
  385. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +13 -1
  386. package/lib/pages/SamplingsPage/DesktopActions/index.js +4 -1
  387. package/lib/pages/SamplingsPage/NavigationDropdown.js +21 -3
  388. package/lib/pages/SamplingsPage/NewSamplingAction.js +84 -38
  389. package/lib/pages/SamplingsPage/SamplingMobileModal.js +65 -12
  390. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +19 -5
  391. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +13 -2
  392. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +56 -22
  393. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +20 -4
  394. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +14 -1
  395. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +112 -40
  396. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +42 -11
  397. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +47 -14
  398. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +49 -15
  399. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +21 -5
  400. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +8 -2
  401. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +11 -1
  402. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +36 -7
  403. package/lib/pages/SamplingsPage/SamplingsMobileList.js +34 -10
  404. package/lib/pages/SamplingsPage/SamplingsPage.js +39 -14
  405. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +48 -14
  406. package/lib/pages/SamplingsPage/index.js +3 -1
  407. package/lib/pages/SamplingsPage/samplingsPageUtils.js +30 -7
  408. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +10 -2
  409. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +8 -2
  410. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +17 -3
  411. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +11 -6
  412. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +23 -15
  413. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +16 -7
  414. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +27 -18
  415. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -2
  416. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +26 -9
  417. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +20 -6
  418. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +10 -4
  419. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -2
  420. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +24 -9
  421. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +12 -4
  422. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +68 -32
  423. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  424. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
  425. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +19 -4
  426. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +15 -2
  427. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +38 -17
  428. package/lib/pages/SitePage/SamplingParameters/dataParser.js +29 -13
  429. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +7 -3
  430. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  431. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +10 -2
  432. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +8 -2
  433. package/lib/pages/SitePage/SiteInformation/ContributorItem.js +12 -5
  434. package/lib/pages/SitePage/SiteInformation/EmptyState.js +10 -1
  435. package/lib/pages/SitePage/SiteInformation/PollutionContributor.js +15 -5
  436. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +48 -17
  437. package/lib/pages/SitePage/SiteInformation/style.js +8 -2
  438. package/lib/pages/SitePage/SitePage.js +49 -10
  439. package/lib/pages/UploadLabResult/index.js +8 -1
  440. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +37 -9
  441. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +9 -2
  442. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +16 -2
  443. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +8 -2
  444. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +35 -9
  445. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +5 -1
  446. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +7 -1
  447. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +10 -1
  448. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +16 -7
  449. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  450. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +10 -1
  451. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +5 -1
  452. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +25 -3
  453. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +19 -13
  454. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +18 -9
  455. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +20 -5
  456. package/lib/pages/WbeDashboard/ExpandableComponent.js +12 -2
  457. package/lib/pages/WbeDashboard/GraphWrapper.js +27 -6
  458. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +19 -6
  459. package/lib/pages/WbeDashboard/SearchInput.js +22 -4
  460. package/lib/pages/WbeDashboard/SummaryGraph.js +49 -16
  461. package/lib/pages/WbeDashboard/SummaryGraphModal.js +13 -1
  462. package/lib/pages/WbeDashboard/Tabs.js +9 -3
  463. package/lib/pages/WbeDashboard/WbeDashboardPage.js +124 -38
  464. package/lib/pages/WbeDashboard/WbeSummaryBar.js +45 -11
  465. package/lib/providers/Slideshow/SlideshowContext.js +5 -3
  466. package/lib/providers/Slideshow/SlideshowProvider.js +31 -16
  467. package/lib/providers/Slideshow/SlideshowRunner.js +17 -7
  468. package/lib/providers/UrlHistory/UrlHistoryContext.js +7 -3
  469. package/lib/providers/UrlHistory/UrlHistoryProvider.js +13 -1
  470. package/lib/providers/UrlHistory/index.js +8 -5
  471. package/lib/providers/UrlHistory/useLastVisited.js +7 -1
  472. package/lib/react-app-env.d.js +1 -1
  473. package/lib/store/ImportGis/action.js +1 -1
  474. package/lib/store/ImportGis/actionTypes.js +2 -1
  475. package/lib/store/ImportGis/actionsCreator.js +17 -7
  476. package/lib/store/ImportGis/models/gisImports.js +1 -1
  477. package/lib/store/ImportGis/reducer.js +17 -1
  478. package/lib/store/WBE/actionTypes.js +1 -1
  479. package/lib/store/WBE/actions.js +3 -1
  480. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  481. package/lib/store/WBE/models/IWBE.js +1 -1
  482. package/lib/store/WBE/models/IWBEState.js +1 -1
  483. package/lib/store/WBE/reducer.js +9 -2
  484. package/lib/store/areas/actionTypes.js +2 -2
  485. package/lib/store/areas/actions.js +11 -2
  486. package/lib/store/areas/models/IArea.js +1 -1
  487. package/lib/store/areas/models/IAreasState.js +1 -1
  488. package/lib/store/areas/reducer.js +9 -1
  489. package/lib/store/context/actionTypes.js +2 -2
  490. package/lib/store/context/actions.js +6 -2
  491. package/lib/store/context/contextMiddlewares.js +9 -1
  492. package/lib/store/context/models/INavContext.js +1 -1
  493. package/lib/store/context/models/INavContextState.js +1 -1
  494. package/lib/store/context/reducer.js +9 -2
  495. package/lib/store/dashboard/dashboardSlice.js +3 -1
  496. package/lib/store/dashboard/periodType.js +1 -1
  497. package/lib/store/edges/actionTypes.js +2 -2
  498. package/lib/store/edges/actions.js +9 -3
  499. package/lib/store/edges/models/IEdge.js +1 -1
  500. package/lib/store/edges/models/IEdgesState.js +1 -1
  501. package/lib/store/edges/reducer.js +16 -2
  502. package/lib/store/events/actionTypes.js +2 -2
  503. package/lib/store/events/actions.js +30 -12
  504. package/lib/store/events/models/IEvent.js +1 -1
  505. package/lib/store/events/models/IEventsState.js +1 -1
  506. package/lib/store/events/models/ISource.js +1 -1
  507. package/lib/store/events/reducer.js +41 -3
  508. package/lib/store/filters/IFilter.js +1 -1
  509. package/lib/store/filters/IFilterItem.js +1 -1
  510. package/lib/store/global/actionTypes.js +2 -2
  511. package/lib/store/global/actions.js +20 -8
  512. package/lib/store/global/models/IGlobalState.js +1 -1
  513. package/lib/store/global/reducer.js +18 -2
  514. package/lib/store/permissions/permissionsSlice.js +6 -1
  515. package/lib/store/points/actionTypes.js +2 -2
  516. package/lib/store/points/actions.js +5 -1
  517. package/lib/store/points/models/IGroup.js +1 -1
  518. package/lib/store/points/models/IPoint.js +1 -1
  519. package/lib/store/points/models/IPointsState.js +1 -1
  520. package/lib/store/points/reducer.js +7 -1
  521. package/lib/store/rootActionTypes.js +1 -1
  522. package/lib/store/rootActions.js +3 -1
  523. package/lib/store/rootReducer.js +23 -4
  524. package/lib/store/rootStore.js +12 -4
  525. package/lib/store/samplings/action.js +1 -1
  526. package/lib/store/samplings/actionTypes.js +2 -1
  527. package/lib/store/samplings/actionsCreator.js +5 -2
  528. package/lib/store/samplings/models/Samplings.js +1 -1
  529. package/lib/store/samplings/reducer.js +9 -1
  530. package/lib/styles/StylesLayout.js +7 -1
  531. package/lib/styles/theme/theme.js +4 -2
  532. package/lib/test/mocks/browser.js +7 -3
  533. package/lib/test/test-utils.js +21 -11
  534. package/lib/ui-kit/Button/Button.js +23 -15
  535. package/lib/ui-kit/Button/Button.test.js +26 -6
  536. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  537. package/lib/ui-kit/Checkbox/Checkbox.js +21 -7
  538. package/lib/ui-kit/DropDown/DropDown.js +16 -5
  539. package/lib/ui-kit/DropDown/DropDown.test.js +12 -6
  540. package/lib/ui-kit/DropDown/DropDownItem.js +13 -5
  541. package/lib/ui-kit/DropDown/DropdownToggle.js +13 -2
  542. package/lib/ui-kit/IconAction/IconAction.js +9 -3
  543. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +54 -16
  544. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +28 -24
  545. package/lib/ui-kit/KandoList/KandoList.js +16 -5
  546. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  547. package/lib/ui-kit/KandoTable/KandoTable.js +36 -22
  548. package/lib/ui-kit/KandoTable/KandoTable.test.js +16 -1
  549. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  550. package/lib/ui-kit/Layout/Layout.js +8 -1
  551. package/lib/ui-kit/MobileInput/MobileInput.js +33 -18
  552. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +14 -8
  553. package/lib/ui-kit/ModalConfirmation/index.js +3 -1
  554. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +10 -5
  555. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +11 -3
  556. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +11 -4
  557. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +14 -5
  558. package/lib/ui-kit/Tooltip/Tooltip.js +8 -3
  559. package/lib/ui-kit/index.js +15 -1
  560. package/lib/ui-kit/kandoStepper/KandoStepper.js +7 -2
  561. package/lib/utilities/ActionUtility.js +2 -1
  562. package/lib/utilities/Alert.js +10 -2
  563. package/lib/utilities/Analytics.js +12 -2
  564. package/lib/utilities/Array.js +6 -2
  565. package/lib/utilities/Enum.js +16 -12
  566. package/lib/utilities/ErrorBoundary.js +18 -3
  567. package/lib/utilities/File.js +24 -5
  568. package/lib/utilities/GetDir.js +8 -4
  569. package/lib/utilities/KandoDate.js +7 -1
  570. package/lib/utilities/KandoModal.js +22 -7
  571. package/lib/utilities/LocalStorage.js +13 -2
  572. package/lib/utilities/ThousandsToK.js +3 -1
  573. package/lib/utilities/TimeFormat.js +19 -6
  574. package/lib/utilities/Truncate.js +27 -7
  575. package/lib/utilities/edgesMath.js +26 -9
  576. package/lib/utilities/i18n.js +14 -1
  577. package/lib/utilities/kql.js +10 -3
  578. package/lib/utilities/map/icons.js +20 -19
  579. package/lib/utilities/scoreToColor.js +8 -1
  580. package/lib/utilities/time.js +9 -2
  581. package/lib/utilities/uploadToS3.js +9 -1
  582. package/lib/utilities/urls.js +12 -4
  583. package/package.json +4 -9
  584. package/lib/Widgets/Map/points/PointIcon.js +0 -44
  585. package/lib/Widgets/Map/points/PointIcon.scss +0 -230
  586. package/lib/assets/icons/plus_v.svg +0 -13
  587. package/lib/assets/icons/water_reuse.svg +0 -27
  588. package/lib/assets/map/pin-matash-clicked.svg +0 -12
  589. package/lib/assets/map/pin-plant-clicked.svg +0 -10
  590. package/lib/assets/map/pin-suction-clicked.svg +0 -10
  591. package/lib/assets/map/pin-water-clicked.svg +0 -11
  592. package/lib/utilities/polylinedecorator.js +0 -383
@@ -1,383 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.computeSegmentHeading = exports.asRatioToPathLength = void 0;
8
- exports.parseRelativeOrAbsoluteValue = parseRelativeOrAbsoluteValue;
9
- exports.projectPatternOnPointPath = projectPatternOnPointPath;
10
- var _leaflet = _interopRequireDefault(require("leaflet"));
11
- require("leaflet-rotatedmarker");
12
- // enable rotationAngle and rotationOrigin support on L.Marker
13
-
14
- /**
15
- * Defines several classes of symbol factories,
16
- * to be used with L.PolylineDecorator
17
- */
18
-
19
- _leaflet.default.Symbol = _leaflet.default.Symbol || {};
20
-
21
- /**
22
- * A simple dash symbol, drawn as a Polyline.
23
- * Can also be used for dots, if 'pixelSize' option is given the 0 value.
24
- */
25
- _leaflet.default.Symbol.Dash = _leaflet.default.Class.extend({
26
- options: {
27
- pixelSize: 10,
28
- pathOptions: {}
29
- },
30
- initialize: function initialize(options) {
31
- _leaflet.default.Util.setOptions(this, options);
32
- this.options.pathOptions.clickable = false;
33
- },
34
- buildSymbol: function buildSymbol(dirPoint, latLngs, map, index, total) {
35
- var opts = this.options;
36
- var d2r = Math.PI / 180;
37
-
38
- // for a dot, nothing more to compute
39
- if (opts.pixelSize <= 1) {
40
- return _leaflet.default.polyline([dirPoint.latLng, dirPoint.latLng], opts.pathOptions);
41
- }
42
- var midPoint = map.project(dirPoint.latLng);
43
- var angle = -(dirPoint.heading - 90) * d2r;
44
- var a = _leaflet.default.point(midPoint.x + opts.pixelSize * Math.cos(angle + Math.PI) / 2, midPoint.y + opts.pixelSize * Math.sin(angle) / 2);
45
- // compute second point by central symmetry to avoid unecessary cos/sin
46
- var b = midPoint.add(midPoint.subtract(a));
47
- return _leaflet.default.polyline([map.unproject(a), map.unproject(b)], opts.pathOptions);
48
- }
49
- });
50
- _leaflet.default.Symbol.dash = function (options) {
51
- return new _leaflet.default.Symbol.Dash(options);
52
- };
53
- _leaflet.default.Symbol.ArrowHead = _leaflet.default.Class.extend({
54
- options: {
55
- polygon: true,
56
- pixelSize: 10,
57
- headAngle: 60,
58
- pathOptions: {
59
- stroke: false,
60
- weight: 2
61
- }
62
- },
63
- initialize: function initialize(options) {
64
- _leaflet.default.Util.setOptions(this, options);
65
- this.options.pathOptions.clickable = false;
66
- },
67
- buildSymbol: function buildSymbol(dirPoint, latLngs, map, index, total) {
68
- return this.options.polygon ? _leaflet.default.polygon(this._buildArrowPath(dirPoint, map), this.options.pathOptions) : _leaflet.default.polyline(this._buildArrowPath(dirPoint, map), this.options.pathOptions);
69
- },
70
- _buildArrowPath: function _buildArrowPath(dirPoint, map) {
71
- var d2r = Math.PI / 180;
72
- var tipPoint = map.project(dirPoint.latLng);
73
- var direction = -(dirPoint.heading - 90) * d2r;
74
- var radianArrowAngle = this.options.headAngle / 2 * d2r;
75
- var headAngle1 = direction + radianArrowAngle;
76
- var headAngle2 = direction - radianArrowAngle;
77
- var arrowHead1 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle1), tipPoint.y + this.options.pixelSize * Math.sin(headAngle1));
78
- var arrowHead2 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle2), tipPoint.y + this.options.pixelSize * Math.sin(headAngle2));
79
- return [map.unproject(arrowHead1), dirPoint.latLng, map.unproject(arrowHead2)];
80
- }
81
- });
82
- _leaflet.default.Symbol.arrowHead = function (options) {
83
- return new _leaflet.default.Symbol.ArrowHead(options);
84
- };
85
- _leaflet.default.Symbol.Marker = _leaflet.default.Class.extend({
86
- options: {
87
- markerOptions: {},
88
- rotate: false
89
- },
90
- initialize: function initialize(options) {
91
- _leaflet.default.Util.setOptions(this, options);
92
- this.options.markerOptions.clickable = false;
93
- this.options.markerOptions.draggable = false;
94
- },
95
- buildSymbol: function buildSymbol(directionPoint, latLngs, map, index, total) {
96
- if (this.options.rotate) {
97
- this.options.markerOptions.rotationAngle = directionPoint.heading + (this.options.angleCorrection || 0);
98
- }
99
- return _leaflet.default.marker(directionPoint.latLng, this.options.markerOptions);
100
- }
101
- });
102
- _leaflet.default.Symbol.marker = function (options) {
103
- return new _leaflet.default.Symbol.Marker(options);
104
- };
105
- var isCoord = function isCoord(c) {
106
- return c instanceof _leaflet.default.LatLng || Array.isArray(c) && c.length === 2 && typeof c[0] === 'number';
107
- };
108
- var isCoordArray = function isCoordArray(ll) {
109
- return Array.isArray(ll) && isCoord(ll[0]);
110
- };
111
- _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
112
- options: {
113
- patterns: []
114
- },
115
- initialize: function initialize(paths, options) {
116
- _leaflet.default.FeatureGroup.prototype.initialize.call(this);
117
- _leaflet.default.Util.setOptions(this, options);
118
- this._map = null;
119
- this._paths = this._initPaths(paths);
120
- this._bounds = this._initBounds();
121
- this._patterns = this._initPatterns(this.options.patterns);
122
- },
123
- /**
124
- * Deals with all the different cases. input can be one of these types:
125
- * array of LatLng, array of 2-number arrays, Polyline, Polygon,
126
- * array of one of the previous.
127
- */
128
- _initPaths: function _initPaths(input, isPolygon) {
129
- var _this = this;
130
- if (isCoordArray(input)) {
131
- // Leaflet Polygons don't need the first point to be repeated, but we do
132
- var coords = isPolygon ? input.concat([input[0]]) : input;
133
- return [coords];
134
- }
135
- if (input instanceof _leaflet.default.Polyline) {
136
- // we need some recursivity to support multi-poly*
137
- return this._initPaths(input.getLatLngs(), input instanceof _leaflet.default.Polygon);
138
- }
139
- if (Array.isArray(input)) {
140
- // flatten everything, we just need coordinate lists to apply patterns
141
- return input.reduce(function (flatArray, p) {
142
- return flatArray.concat(_this._initPaths(p, isPolygon));
143
- }, []);
144
- }
145
- return [];
146
- },
147
- // parse pattern definitions and precompute some values
148
- _initPatterns: function _initPatterns(patternDefs) {
149
- return patternDefs.map(this._parsePatternDef);
150
- },
151
- /**
152
- * Changes the patterns used by this decorator
153
- * and redraws the new one.
154
- */
155
- setPatterns: function setPatterns(patterns) {
156
- this.options.patterns = patterns;
157
- this._patterns = this._initPatterns(this.options.patterns);
158
- this.redraw();
159
- },
160
- /**
161
- * Changes the patterns used by this decorator
162
- * and redraws the new one.
163
- */
164
- setPaths: function setPaths(paths) {
165
- this._paths = this._initPaths(paths);
166
- this._bounds = this._initBounds();
167
- this.redraw();
168
- },
169
- /**
170
- * Parse the pattern definition
171
- */
172
- _parsePatternDef: function _parsePatternDef(patternDef, latLngs) {
173
- return {
174
- symbolFactory: patternDef.symbol,
175
- // Parse offset and repeat values, managing the two cases:
176
- // absolute (in pixels) or relative (in percentage of the polyline length)
177
- offset: parseRelativeOrAbsoluteValue(patternDef.offset),
178
- endOffset: parseRelativeOrAbsoluteValue(patternDef.endOffset),
179
- repeat: parseRelativeOrAbsoluteValue(patternDef.repeat)
180
- };
181
- },
182
- onAdd: function onAdd(map) {
183
- this._map = map;
184
- this._draw();
185
- this._map.on('moveend', this.redraw, this);
186
- },
187
- onRemove: function onRemove(map) {
188
- this._map.off('moveend', this.redraw, this);
189
- this._map = null;
190
- _leaflet.default.FeatureGroup.prototype.onRemove.call(this, map);
191
- },
192
- /**
193
- * As real pattern bounds depends on map zoom and bounds,
194
- * we just compute the total bounds of all paths decorated by this instance.
195
- */
196
- _initBounds: function _initBounds() {
197
- var allPathCoords = this._paths.reduce(function (acc, path) {
198
- return acc.concat(path);
199
- }, []);
200
- return _leaflet.default.latLngBounds(allPathCoords);
201
- },
202
- getBounds: function getBounds() {
203
- return this._bounds;
204
- },
205
- /**
206
- * Returns an array of ILayers object
207
- */
208
- _buildSymbols: function _buildSymbols(latLngs, symbolFactory, directionPoints) {
209
- var _this2 = this;
210
- return directionPoints.map(function (directionPoint, i) {
211
- return symbolFactory.buildSymbol(directionPoint, latLngs, _this2._map, i, directionPoints.length);
212
- });
213
- },
214
- /**
215
- * Compute pairs of LatLng and heading angle,
216
- * that define positions and directions of the symbols on the path
217
- */
218
- _getDirectionPoints: function _getDirectionPoints(latLngs, pattern) {
219
- var _this3 = this;
220
- if (latLngs.length < 2) {
221
- return [];
222
- }
223
- var pathAsPoints = latLngs.map(function (latLng) {
224
- return _this3._map.project(latLng);
225
- });
226
- return projectPatternOnPointPath(pathAsPoints, pattern).map(function (point) {
227
- return {
228
- latLng: _this3._map.unproject(_leaflet.default.point(point.pt)),
229
- heading: point.heading
230
- };
231
- });
232
- },
233
- redraw: function redraw() {
234
- if (!this._map) {
235
- return;
236
- }
237
- this.clearLayers();
238
- this._draw();
239
- },
240
- /**
241
- * Returns all symbols for a given pattern as an array of FeatureGroup
242
- */
243
- _getPatternLayers: function _getPatternLayers(pattern) {
244
- var _this4 = this;
245
- var mapBounds = this._map.getBounds().pad(0.1);
246
- return this._paths.map(function (path) {
247
- var directionPoints = _this4._getDirectionPoints(path, pattern)
248
- // filter out invisible points
249
- .filter(function (point) {
250
- return mapBounds.contains(point.latLng);
251
- });
252
- return _leaflet.default.featureGroup(_this4._buildSymbols(path, pattern.symbolFactory, directionPoints));
253
- });
254
- },
255
- /**
256
- * Draw all patterns
257
- */
258
- _draw: function _draw() {
259
- var _this5 = this;
260
- this._patterns.map(function (pattern) {
261
- return _this5._getPatternLayers(pattern);
262
- }).forEach(function (layers) {
263
- _this5.addLayer(_leaflet.default.featureGroup(layers));
264
- });
265
- }
266
- });
267
- /*
268
- * Allows compact syntax to be used
269
- */
270
- _leaflet.default.polylineDecorator = function (paths, options) {
271
- return new _leaflet.default.PolylineDecorator(paths, options);
272
- };
273
-
274
- // functional re-impl of L.Point.distanceTo,
275
- // with no dependency on Leaflet for easier testing
276
- function pointDistance(ptA, ptB) {
277
- var x = ptB.x - ptA.x;
278
- var y = ptB.y - ptA.y;
279
- return Math.sqrt(x * x + y * y);
280
- }
281
- var computeSegmentHeading = function computeSegmentHeading(a, b) {
282
- return (Math.atan2(b.y - a.y, b.x - a.x) * 180 / Math.PI + 90 + 360) % 360;
283
- };
284
- exports.computeSegmentHeading = computeSegmentHeading;
285
- var asRatioToPathLength = function asRatioToPathLength(_ref, totalPathLength) {
286
- var value = _ref.value,
287
- isInPixels = _ref.isInPixels;
288
- return isInPixels ? value / totalPathLength : value;
289
- };
290
- exports.asRatioToPathLength = asRatioToPathLength;
291
- function parseRelativeOrAbsoluteValue(value) {
292
- if (typeof value === 'string' && value.indexOf('%') !== -1) {
293
- return {
294
- value: parseFloat(value) / 100,
295
- isInPixels: false
296
- };
297
- }
298
- var parsedValue = value ? parseFloat(value) : 0;
299
- return {
300
- value: parsedValue,
301
- isInPixels: parsedValue > 0
302
- };
303
- }
304
- var pointsEqual = function pointsEqual(a, b) {
305
- return a.x === b.x && a.y === b.y;
306
- };
307
- function pointsToSegments(pts) {
308
- return pts.reduce(function (segments, b, idx, points) {
309
- // this test skips same adjacent points
310
- if (idx > 0 && !pointsEqual(b, points[idx - 1])) {
311
- var a = points[idx - 1];
312
- var distA = segments.length > 0 ? segments[segments.length - 1].distB : 0;
313
- var distAB = pointDistance(a, b);
314
- segments.push({
315
- a: a,
316
- b: b,
317
- distA: distA,
318
- distB: distA + distAB,
319
- heading: computeSegmentHeading(a, b)
320
- });
321
- }
322
- return segments;
323
- }, []);
324
- }
325
- function projectPatternOnPointPath(pts, pattern) {
326
- // 1. split the path into segment infos
327
- var segments = pointsToSegments(pts);
328
- var nbSegments = segments.length;
329
- if (nbSegments === 0) {
330
- return [];
331
- }
332
- var totalPathLength = segments[nbSegments - 1].distB;
333
- var offset = asRatioToPathLength(pattern.offset, totalPathLength);
334
- var endOffset = asRatioToPathLength(pattern.endOffset, totalPathLength);
335
- var repeat = asRatioToPathLength(pattern.repeat, totalPathLength);
336
- var repeatIntervalPixels = totalPathLength * repeat;
337
- var startOffsetPixels = offset > 0 ? totalPathLength * offset : 0;
338
- var endOffsetPixels = endOffset > 0 ? totalPathLength * endOffset : 0;
339
-
340
- // 2. generate the positions of the pattern as offsets from the path start
341
- var positionOffsets = [];
342
- var positionOffset = startOffsetPixels;
343
- do {
344
- positionOffsets.push(positionOffset);
345
- positionOffset += repeatIntervalPixels;
346
- } while (repeatIntervalPixels > 0 && positionOffset < totalPathLength - endOffsetPixels);
347
-
348
- // 3. projects offsets to segments
349
- var segmentIndex = 0;
350
- var segment = segments[0];
351
- return positionOffsets.map(function (positionOffset) {
352
- // find the segment matching the offset,
353
- // starting from the previous one as offsets are ordered
354
- while (positionOffset > segment.distB && segmentIndex < nbSegments - 1) {
355
- segmentIndex++;
356
- segment = segments[segmentIndex];
357
- }
358
- var segmentRatio = (positionOffset - segment.distA) / (segment.distB - segment.distA);
359
- return {
360
- pt: interpolateBetweenPoints(segment.a, segment.b, segmentRatio),
361
- heading: segment.heading
362
- };
363
- });
364
- }
365
-
366
- /**
367
- * Finds the point which lies on the segment defined by points A and B,
368
- * at the given ratio of the distance from A to B, by linear interpolation.
369
- */
370
- function interpolateBetweenPoints(ptA, ptB, ratio) {
371
- if (ptB.x !== ptA.x) {
372
- return {
373
- x: ptA.x + ratio * (ptB.x - ptA.x),
374
- y: ptA.y + ratio * (ptB.y - ptA.y)
375
- };
376
- }
377
- // special case where points lie on the same vertical axis
378
- return {
379
- x: ptA.x,
380
- y: ptA.y + (ptB.y - ptA.y) * ratio
381
- };
382
- }
383
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTCIsIlN5bWJvbCIsIkRhc2giLCJDbGFzcyIsImV4dGVuZCIsIm9wdGlvbnMiLCJwaXhlbFNpemUiLCJwYXRoT3B0aW9ucyIsImluaXRpYWxpemUiLCJVdGlsIiwic2V0T3B0aW9ucyIsImNsaWNrYWJsZSIsImJ1aWxkU3ltYm9sIiwiZGlyUG9pbnQiLCJsYXRMbmdzIiwibWFwIiwiaW5kZXgiLCJ0b3RhbCIsIm9wdHMiLCJkMnIiLCJNYXRoIiwiUEkiLCJwb2x5bGluZSIsImxhdExuZyIsIm1pZFBvaW50IiwicHJvamVjdCIsImFuZ2xlIiwiaGVhZGluZyIsImEiLCJwb2ludCIsIngiLCJjb3MiLCJ5Iiwic2luIiwiYiIsImFkZCIsInN1YnRyYWN0IiwidW5wcm9qZWN0IiwiZGFzaCIsIkFycm93SGVhZCIsInBvbHlnb24iLCJoZWFkQW5nbGUiLCJzdHJva2UiLCJ3ZWlnaHQiLCJfYnVpbGRBcnJvd1BhdGgiLCJ0aXBQb2ludCIsImRpcmVjdGlvbiIsInJhZGlhbkFycm93QW5nbGUiLCJoZWFkQW5nbGUxIiwiaGVhZEFuZ2xlMiIsImFycm93SGVhZDEiLCJhcnJvd0hlYWQyIiwiYXJyb3dIZWFkIiwiTWFya2VyIiwibWFya2VyT3B0aW9ucyIsInJvdGF0ZSIsImRyYWdnYWJsZSIsImRpcmVjdGlvblBvaW50Iiwicm90YXRpb25BbmdsZSIsImFuZ2xlQ29ycmVjdGlvbiIsIm1hcmtlciIsImlzQ29vcmQiLCJjIiwiTGF0TG5nIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNDb29yZEFycmF5IiwibGwiLCJQb2x5bGluZURlY29yYXRvciIsIkZlYXR1cmVHcm91cCIsInBhdHRlcm5zIiwicGF0aHMiLCJwcm90b3R5cGUiLCJjYWxsIiwiX21hcCIsIl9wYXRocyIsIl9pbml0UGF0aHMiLCJfYm91bmRzIiwiX2luaXRCb3VuZHMiLCJfcGF0dGVybnMiLCJfaW5pdFBhdHRlcm5zIiwiaW5wdXQiLCJpc1BvbHlnb24iLCJfdGhpcyIsImNvb3JkcyIsImNvbmNhdCIsIlBvbHlsaW5lIiwiZ2V0TGF0TG5ncyIsIlBvbHlnb24iLCJyZWR1Y2UiLCJmbGF0QXJyYXkiLCJwIiwicGF0dGVybkRlZnMiLCJfcGFyc2VQYXR0ZXJuRGVmIiwic2V0UGF0dGVybnMiLCJyZWRyYXciLCJzZXRQYXRocyIsInBhdHRlcm5EZWYiLCJzeW1ib2xGYWN0b3J5Iiwic3ltYm9sIiwib2Zmc2V0IiwicGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZSIsImVuZE9mZnNldCIsInJlcGVhdCIsIm9uQWRkIiwiX2RyYXciLCJvbiIsIm9uUmVtb3ZlIiwib2ZmIiwiYWxsUGF0aENvb3JkcyIsImFjYyIsInBhdGgiLCJsYXRMbmdCb3VuZHMiLCJnZXRCb3VuZHMiLCJfYnVpbGRTeW1ib2xzIiwiZGlyZWN0aW9uUG9pbnRzIiwiX3RoaXMyIiwiaSIsIl9nZXREaXJlY3Rpb25Qb2ludHMiLCJwYXR0ZXJuIiwiX3RoaXMzIiwicGF0aEFzUG9pbnRzIiwicHJvamVjdFBhdHRlcm5PblBvaW50UGF0aCIsInB0IiwiY2xlYXJMYXllcnMiLCJfZ2V0UGF0dGVybkxheWVycyIsIl90aGlzNCIsIm1hcEJvdW5kcyIsInBhZCIsImZpbHRlciIsImNvbnRhaW5zIiwiZmVhdHVyZUdyb3VwIiwiX3RoaXM1IiwiZm9yRWFjaCIsImxheWVycyIsImFkZExheWVyIiwicG9seWxpbmVEZWNvcmF0b3IiLCJwb2ludERpc3RhbmNlIiwicHRBIiwicHRCIiwic3FydCIsImNvbXB1dGVTZWdtZW50SGVhZGluZyIsImF0YW4yIiwiZXhwb3J0cyIsImFzUmF0aW9Ub1BhdGhMZW5ndGgiLCJfcmVmIiwidG90YWxQYXRoTGVuZ3RoIiwidmFsdWUiLCJpc0luUGl4ZWxzIiwiaW5kZXhPZiIsInBhcnNlRmxvYXQiLCJwYXJzZWRWYWx1ZSIsInBvaW50c0VxdWFsIiwicG9pbnRzVG9TZWdtZW50cyIsInB0cyIsInNlZ21lbnRzIiwiaWR4IiwicG9pbnRzIiwiZGlzdEEiLCJkaXN0QiIsImRpc3RBQiIsInB1c2giLCJuYlNlZ21lbnRzIiwicmVwZWF0SW50ZXJ2YWxQaXhlbHMiLCJzdGFydE9mZnNldFBpeGVscyIsImVuZE9mZnNldFBpeGVscyIsInBvc2l0aW9uT2Zmc2V0cyIsInBvc2l0aW9uT2Zmc2V0Iiwic2VnbWVudEluZGV4Iiwic2VnbWVudCIsInNlZ21lbnRSYXRpbyIsImludGVycG9sYXRlQmV0d2VlblBvaW50cyIsInJhdGlvIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9wb2x5bGluZWRlY29yYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTCBmcm9tICdsZWFmbGV0Jztcbi8vIGVuYWJsZSByb3RhdGlvbkFuZ2xlIGFuZCByb3RhdGlvbk9yaWdpbiBzdXBwb3J0IG9uIEwuTWFya2VyXG5pbXBvcnQgJ2xlYWZsZXQtcm90YXRlZG1hcmtlcic7XG5cbi8qKlxuICogRGVmaW5lcyBzZXZlcmFsIGNsYXNzZXMgb2Ygc3ltYm9sIGZhY3RvcmllcyxcbiAqIHRvIGJlIHVzZWQgd2l0aCBMLlBvbHlsaW5lRGVjb3JhdG9yXG4gKi9cblxuTC5TeW1ib2wgPSBMLlN5bWJvbCB8fCB7fTtcblxuLyoqXG4gKiBBIHNpbXBsZSBkYXNoIHN5bWJvbCwgZHJhd24gYXMgYSBQb2x5bGluZS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgZm9yIGRvdHMsIGlmICdwaXhlbFNpemUnIG9wdGlvbiBpcyBnaXZlbiB0aGUgMCB2YWx1ZS5cbiAqL1xuTC5TeW1ib2wuRGFzaCA9IEwuQ2xhc3MuZXh0ZW5kKHtcbiAgb3B0aW9uczoge1xuICAgIHBpeGVsU2l6ZTogMTAsXG4gICAgcGF0aE9wdGlvbnM6IHt9LFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBkMnIgPSBNYXRoLlBJIC8gMTgwO1xuXG4gICAgLy8gZm9yIGEgZG90LCBub3RoaW5nIG1vcmUgdG8gY29tcHV0ZVxuICAgIGlmIChvcHRzLnBpeGVsU2l6ZSA8PSAxKSB7XG4gICAgICByZXR1cm4gTC5wb2x5bGluZShbZGlyUG9pbnQubGF0TG5nLCBkaXJQb2ludC5sYXRMbmddLCBvcHRzLnBhdGhPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaWRQb2ludCA9IG1hcC5wcm9qZWN0KGRpclBvaW50LmxhdExuZyk7XG4gICAgY29uc3QgYW5nbGUgPSAtKGRpclBvaW50LmhlYWRpbmcgLSA5MCkgKiBkMnI7XG4gICAgY29uc3QgYSA9IEwucG9pbnQoXG4gICAgICBtaWRQb2ludC54ICsgKG9wdHMucGl4ZWxTaXplICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJKSkgLyAyLFxuICAgICAgbWlkUG9pbnQueSArIChvcHRzLnBpeGVsU2l6ZSAqIE1hdGguc2luKGFuZ2xlKSkgLyAyLFxuICAgICk7XG4gICAgLy8gY29tcHV0ZSBzZWNvbmQgcG9pbnQgYnkgY2VudHJhbCBzeW1tZXRyeSB0byBhdm9pZCB1bmVjZXNzYXJ5IGNvcy9zaW5cbiAgICBjb25zdCBiID0gbWlkUG9pbnQuYWRkKG1pZFBvaW50LnN1YnRyYWN0KGEpKTtcbiAgICByZXR1cm4gTC5wb2x5bGluZShbbWFwLnVucHJvamVjdChhKSwgbWFwLnVucHJvamVjdChiKV0sIG9wdHMucGF0aE9wdGlvbnMpO1xuICB9LFxufSk7XG5cbkwuU3ltYm9sLmRhc2ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLkRhc2gob3B0aW9ucyk7XG59O1xuXG5MLlN5bWJvbC5BcnJvd0hlYWQgPSBMLkNsYXNzLmV4dGVuZCh7XG4gIG9wdGlvbnM6IHtcbiAgICBwb2x5Z29uOiB0cnVlLFxuICAgIHBpeGVsU2l6ZTogMTAsXG4gICAgaGVhZEFuZ2xlOiA2MCxcbiAgICBwYXRoT3B0aW9uczoge1xuICAgICAgc3Ryb2tlOiBmYWxzZSxcbiAgICAgIHdlaWdodDogMixcbiAgICB9LFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb2x5Z29uXG4gICAgICA/IEwucG9seWdvbih0aGlzLl9idWlsZEFycm93UGF0aChkaXJQb2ludCwgbWFwKSwgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zKVxuICAgICAgOiBMLnBvbHlsaW5lKFxuICAgICAgICAgIHRoaXMuX2J1aWxkQXJyb3dQYXRoKGRpclBvaW50LCBtYXApLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucyxcbiAgICAgICAgKTtcbiAgfSxcblxuICBfYnVpbGRBcnJvd1BhdGg6IGZ1bmN0aW9uIChkaXJQb2ludCwgbWFwKSB7XG4gICAgY29uc3QgZDJyID0gTWF0aC5QSSAvIDE4MDtcbiAgICBjb25zdCB0aXBQb2ludCA9IG1hcC5wcm9qZWN0KGRpclBvaW50LmxhdExuZyk7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gLShkaXJQb2ludC5oZWFkaW5nIC0gOTApICogZDJyO1xuICAgIGNvbnN0IHJhZGlhbkFycm93QW5nbGUgPSAodGhpcy5vcHRpb25zLmhlYWRBbmdsZSAvIDIpICogZDJyO1xuXG4gICAgY29uc3QgaGVhZEFuZ2xlMSA9IGRpcmVjdGlvbiArIHJhZGlhbkFycm93QW5nbGU7XG4gICAgY29uc3QgaGVhZEFuZ2xlMiA9IGRpcmVjdGlvbiAtIHJhZGlhbkFycm93QW5nbGU7XG4gICAgY29uc3QgYXJyb3dIZWFkMSA9IEwucG9pbnQoXG4gICAgICB0aXBQb2ludC54IC0gdGhpcy5vcHRpb25zLnBpeGVsU2l6ZSAqIE1hdGguY29zKGhlYWRBbmdsZTEpLFxuICAgICAgdGlwUG9pbnQueSArIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLnNpbihoZWFkQW5nbGUxKSxcbiAgICApO1xuICAgIGNvbnN0IGFycm93SGVhZDIgPSBMLnBvaW50KFxuICAgICAgdGlwUG9pbnQueCAtIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLmNvcyhoZWFkQW5nbGUyKSxcbiAgICAgIHRpcFBvaW50LnkgKyB0aGlzLm9wdGlvbnMucGl4ZWxTaXplICogTWF0aC5zaW4oaGVhZEFuZ2xlMiksXG4gICAgKTtcblxuICAgIHJldHVybiBbXG4gICAgICBtYXAudW5wcm9qZWN0KGFycm93SGVhZDEpLFxuICAgICAgZGlyUG9pbnQubGF0TG5nLFxuICAgICAgbWFwLnVucHJvamVjdChhcnJvd0hlYWQyKSxcbiAgICBdO1xuICB9LFxufSk7XG5cbkwuU3ltYm9sLmFycm93SGVhZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5TeW1ib2wuQXJyb3dIZWFkKG9wdGlvbnMpO1xufTtcblxuTC5TeW1ib2wuTWFya2VyID0gTC5DbGFzcy5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgbWFya2VyT3B0aW9uczoge30sXG4gICAgcm90YXRlOiBmYWxzZSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLmRyYWdnYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyZWN0aW9uUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yb3RhdGUpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLnJvdGF0aW9uQW5nbGUgPVxuICAgICAgICBkaXJlY3Rpb25Qb2ludC5oZWFkaW5nICsgKHRoaXMub3B0aW9ucy5hbmdsZUNvcnJlY3Rpb24gfHwgMCk7XG4gICAgfVxuICAgIHJldHVybiBMLm1hcmtlcihkaXJlY3Rpb25Qb2ludC5sYXRMbmcsIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zKTtcbiAgfSxcbn0pO1xuXG5MLlN5bWJvbC5tYXJrZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLk1hcmtlcihvcHRpb25zKTtcbn07XG5cbmNvbnN0IGlzQ29vcmQgPSAoYykgPT5cbiAgYyBpbnN0YW5jZW9mIEwuTGF0TG5nIHx8XG4gIChBcnJheS5pc0FycmF5KGMpICYmIGMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBjWzBdID09PSAnbnVtYmVyJyk7XG5cbmNvbnN0IGlzQ29vcmRBcnJheSA9IChsbCkgPT4gQXJyYXkuaXNBcnJheShsbCkgJiYgaXNDb29yZChsbFswXSk7XG5cbkwuUG9seWxpbmVEZWNvcmF0b3IgPSBMLkZlYXR1cmVHcm91cC5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgcGF0dGVybnM6IFtdLFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChwYXRocywgb3B0aW9ucykge1xuICAgIEwuRmVhdHVyZUdyb3VwLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyk7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICB0aGlzLl9wYXRocyA9IHRoaXMuX2luaXRQYXRocyhwYXRocyk7XG4gICAgdGhpcy5fYm91bmRzID0gdGhpcy5faW5pdEJvdW5kcygpO1xuICAgIHRoaXMuX3BhdHRlcm5zID0gdGhpcy5faW5pdFBhdHRlcm5zKHRoaXMub3B0aW9ucy5wYXR0ZXJucyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlYWxzIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgY2FzZXMuIGlucHV0IGNhbiBiZSBvbmUgb2YgdGhlc2UgdHlwZXM6XG4gICAqIGFycmF5IG9mIExhdExuZywgYXJyYXkgb2YgMi1udW1iZXIgYXJyYXlzLCBQb2x5bGluZSwgUG9seWdvbixcbiAgICogYXJyYXkgb2Ygb25lIG9mIHRoZSBwcmV2aW91cy5cbiAgICovXG4gIF9pbml0UGF0aHM6IGZ1bmN0aW9uIChpbnB1dCwgaXNQb2x5Z29uKSB7XG4gICAgaWYgKGlzQ29vcmRBcnJheShpbnB1dCkpIHtcbiAgICAgIC8vIExlYWZsZXQgUG9seWdvbnMgZG9uJ3QgbmVlZCB0aGUgZmlyc3QgcG9pbnQgdG8gYmUgcmVwZWF0ZWQsIGJ1dCB3ZSBkb1xuICAgICAgY29uc3QgY29vcmRzID0gaXNQb2x5Z29uID8gaW5wdXQuY29uY2F0KFtpbnB1dFswXV0pIDogaW5wdXQ7XG4gICAgICByZXR1cm4gW2Nvb3Jkc107XG4gICAgfVxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEwuUG9seWxpbmUpIHtcbiAgICAgIC8vIHdlIG5lZWQgc29tZSByZWN1cnNpdml0eSB0byBzdXBwb3J0IG11bHRpLXBvbHkqXG4gICAgICByZXR1cm4gdGhpcy5faW5pdFBhdGhzKGlucHV0LmdldExhdExuZ3MoKSwgaW5wdXQgaW5zdGFuY2VvZiBMLlBvbHlnb24pO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIC8vIGZsYXR0ZW4gZXZlcnl0aGluZywgd2UganVzdCBuZWVkIGNvb3JkaW5hdGUgbGlzdHMgdG8gYXBwbHkgcGF0dGVybnNcbiAgICAgIHJldHVybiBpbnB1dC5yZWR1Y2UoXG4gICAgICAgIChmbGF0QXJyYXksIHApID0+IGZsYXRBcnJheS5jb25jYXQodGhpcy5faW5pdFBhdGhzKHAsIGlzUG9seWdvbikpLFxuICAgICAgICBbXSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcblxuICAvLyBwYXJzZSBwYXR0ZXJuIGRlZmluaXRpb25zIGFuZCBwcmVjb21wdXRlIHNvbWUgdmFsdWVzXG4gIF9pbml0UGF0dGVybnM6IGZ1bmN0aW9uIChwYXR0ZXJuRGVmcykge1xuICAgIHJldHVybiBwYXR0ZXJuRGVmcy5tYXAodGhpcy5fcGFyc2VQYXR0ZXJuRGVmKTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgcGF0dGVybnMgdXNlZCBieSB0aGlzIGRlY29yYXRvclxuICAgKiBhbmQgcmVkcmF3cyB0aGUgbmV3IG9uZS5cbiAgICovXG4gIHNldFBhdHRlcm5zOiBmdW5jdGlvbiAocGF0dGVybnMpIHtcbiAgICB0aGlzLm9wdGlvbnMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICB0aGlzLl9wYXR0ZXJucyA9IHRoaXMuX2luaXRQYXR0ZXJucyh0aGlzLm9wdGlvbnMucGF0dGVybnMpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIHBhdHRlcm5zIHVzZWQgYnkgdGhpcyBkZWNvcmF0b3JcbiAgICogYW5kIHJlZHJhd3MgdGhlIG5ldyBvbmUuXG4gICAqL1xuICBzZXRQYXRoczogZnVuY3Rpb24gKHBhdGhzKSB7XG4gICAgdGhpcy5fcGF0aHMgPSB0aGlzLl9pbml0UGF0aHMocGF0aHMpO1xuICAgIHRoaXMuX2JvdW5kcyA9IHRoaXMuX2luaXRCb3VuZHMoKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcGF0dGVybiBkZWZpbml0aW9uXG4gICAqL1xuICBfcGFyc2VQYXR0ZXJuRGVmOiBmdW5jdGlvbiAocGF0dGVybkRlZiwgbGF0TG5ncykge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xGYWN0b3J5OiBwYXR0ZXJuRGVmLnN5bWJvbCxcbiAgICAgIC8vIFBhcnNlIG9mZnNldCBhbmQgcmVwZWF0IHZhbHVlcywgbWFuYWdpbmcgdGhlIHR3byBjYXNlczpcbiAgICAgIC8vIGFic29sdXRlIChpbiBwaXhlbHMpIG9yIHJlbGF0aXZlIChpbiBwZXJjZW50YWdlIG9mIHRoZSBwb2x5bGluZSBsZW5ndGgpXG4gICAgICBvZmZzZXQ6IHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUocGF0dGVybkRlZi5vZmZzZXQpLFxuICAgICAgZW5kT2Zmc2V0OiBwYXJzZVJlbGF0aXZlT3JBYnNvbHV0ZVZhbHVlKHBhdHRlcm5EZWYuZW5kT2Zmc2V0KSxcbiAgICAgIHJlcGVhdDogcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZShwYXR0ZXJuRGVmLnJlcGVhdCksXG4gICAgfTtcbiAgfSxcblxuICBvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICB0aGlzLl9kcmF3KCk7XG4gICAgdGhpcy5fbWFwLm9uKCdtb3ZlZW5kJywgdGhpcy5yZWRyYXcsIHRoaXMpO1xuICB9LFxuXG4gIG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgdGhpcy5fbWFwLm9mZignbW92ZWVuZCcsIHRoaXMucmVkcmF3LCB0aGlzKTtcbiAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgIEwuRmVhdHVyZUdyb3VwLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFzIHJlYWwgcGF0dGVybiBib3VuZHMgZGVwZW5kcyBvbiBtYXAgem9vbSBhbmQgYm91bmRzLFxuICAgKiB3ZSBqdXN0IGNvbXB1dGUgdGhlIHRvdGFsIGJvdW5kcyBvZiBhbGwgcGF0aHMgZGVjb3JhdGVkIGJ5IHRoaXMgaW5zdGFuY2UuXG4gICAqL1xuICBfaW5pdEJvdW5kczogZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFsbFBhdGhDb29yZHMgPSB0aGlzLl9wYXRocy5yZWR1Y2UoXG4gICAgICAoYWNjLCBwYXRoKSA9PiBhY2MuY29uY2F0KHBhdGgpLFxuICAgICAgW10sXG4gICAgKTtcbiAgICByZXR1cm4gTC5sYXRMbmdCb3VuZHMoYWxsUGF0aENvb3Jkcyk7XG4gIH0sXG5cbiAgZ2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBJTGF5ZXJzIG9iamVjdFxuICAgKi9cbiAgX2J1aWxkU3ltYm9sczogZnVuY3Rpb24gKGxhdExuZ3MsIHN5bWJvbEZhY3RvcnksIGRpcmVjdGlvblBvaW50cykge1xuICAgIHJldHVybiBkaXJlY3Rpb25Qb2ludHMubWFwKChkaXJlY3Rpb25Qb2ludCwgaSkgPT5cbiAgICAgIHN5bWJvbEZhY3RvcnkuYnVpbGRTeW1ib2woXG4gICAgICAgIGRpcmVjdGlvblBvaW50LFxuICAgICAgICBsYXRMbmdzLFxuICAgICAgICB0aGlzLl9tYXAsXG4gICAgICAgIGksXG4gICAgICAgIGRpcmVjdGlvblBvaW50cy5sZW5ndGgsXG4gICAgICApLFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXB1dGUgcGFpcnMgb2YgTGF0TG5nIGFuZCBoZWFkaW5nIGFuZ2xlLFxuICAgKiB0aGF0IGRlZmluZSBwb3NpdGlvbnMgYW5kIGRpcmVjdGlvbnMgb2YgdGhlIHN5bWJvbHMgb24gdGhlIHBhdGhcbiAgICovXG4gIF9nZXREaXJlY3Rpb25Qb2ludHM6IGZ1bmN0aW9uIChsYXRMbmdzLCBwYXR0ZXJuKSB7XG4gICAgaWYgKGxhdExuZ3MubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBwYXRoQXNQb2ludHMgPSBsYXRMbmdzLm1hcCgobGF0TG5nKSA9PiB0aGlzLl9tYXAucHJvamVjdChsYXRMbmcpKTtcbiAgICByZXR1cm4gcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aChwYXRoQXNQb2ludHMsIHBhdHRlcm4pLm1hcCgocG9pbnQpID0+ICh7XG4gICAgICBsYXRMbmc6IHRoaXMuX21hcC51bnByb2plY3QoTC5wb2ludChwb2ludC5wdCkpLFxuICAgICAgaGVhZGluZzogcG9pbnQuaGVhZGluZyxcbiAgICB9KSk7XG4gIH0sXG5cbiAgcmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbGVhckxheWVycygpO1xuICAgIHRoaXMuX2RyYXcoKTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgc3ltYm9scyBmb3IgYSBnaXZlbiBwYXR0ZXJuIGFzIGFuIGFycmF5IG9mIEZlYXR1cmVHcm91cFxuICAgKi9cbiAgX2dldFBhdHRlcm5MYXllcnM6IGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgY29uc3QgbWFwQm91bmRzID0gdGhpcy5fbWFwLmdldEJvdW5kcygpLnBhZCgwLjEpO1xuICAgIHJldHVybiB0aGlzLl9wYXRocy5tYXAoKHBhdGgpID0+IHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvblBvaW50cyA9IHRoaXMuX2dldERpcmVjdGlvblBvaW50cyhwYXRoLCBwYXR0ZXJuKVxuICAgICAgICAvLyBmaWx0ZXIgb3V0IGludmlzaWJsZSBwb2ludHNcbiAgICAgICAgLmZpbHRlcigocG9pbnQpID0+IG1hcEJvdW5kcy5jb250YWlucyhwb2ludC5sYXRMbmcpKTtcbiAgICAgIHJldHVybiBMLmZlYXR1cmVHcm91cChcbiAgICAgICAgdGhpcy5fYnVpbGRTeW1ib2xzKHBhdGgsIHBhdHRlcm4uc3ltYm9sRmFjdG9yeSwgZGlyZWN0aW9uUG9pbnRzKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERyYXcgYWxsIHBhdHRlcm5zXG4gICAqL1xuICBfZHJhdzogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3BhdHRlcm5zXG4gICAgICAubWFwKChwYXR0ZXJuKSA9PiB0aGlzLl9nZXRQYXR0ZXJuTGF5ZXJzKHBhdHRlcm4pKVxuICAgICAgLmZvckVhY2goKGxheWVycykgPT4ge1xuICAgICAgICB0aGlzLmFkZExheWVyKEwuZmVhdHVyZUdyb3VwKGxheWVycykpO1xuICAgICAgfSk7XG4gIH0sXG59KTtcbi8qXG4gKiBBbGxvd3MgY29tcGFjdCBzeW50YXggdG8gYmUgdXNlZFxuICovXG5MLnBvbHlsaW5lRGVjb3JhdG9yID0gZnVuY3Rpb24gKHBhdGhzLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5Qb2x5bGluZURlY29yYXRvcihwYXRocywgb3B0aW9ucyk7XG59O1xuXG4vLyBmdW5jdGlvbmFsIHJlLWltcGwgb2YgTC5Qb2ludC5kaXN0YW5jZVRvLFxuLy8gd2l0aCBubyBkZXBlbmRlbmN5IG9uIExlYWZsZXQgZm9yIGVhc2llciB0ZXN0aW5nXG5mdW5jdGlvbiBwb2ludERpc3RhbmNlKHB0QSwgcHRCKSB7XG4gIGNvbnN0IHggPSBwdEIueCAtIHB0QS54O1xuICBjb25zdCB5ID0gcHRCLnkgLSBwdEEueTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuY29uc3QgY29tcHV0ZVNlZ21lbnRIZWFkaW5nID0gKGEsIGIpID0+XG4gICgoTWF0aC5hdGFuMihiLnkgLSBhLnksIGIueCAtIGEueCkgKiAxODApIC8gTWF0aC5QSSArIDkwICsgMzYwKSAlIDM2MDtcblxuY29uc3QgYXNSYXRpb1RvUGF0aExlbmd0aCA9ICh7IHZhbHVlLCBpc0luUGl4ZWxzIH0sIHRvdGFsUGF0aExlbmd0aCkgPT5cbiAgaXNJblBpeGVscyA/IHZhbHVlIC8gdG90YWxQYXRoTGVuZ3RoIDogdmFsdWU7XG5cbmZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDAsXG4gICAgICBpc0luUGl4ZWxzOiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHBhcnNlZFZhbHVlID0gdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IDA7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHBhcnNlZFZhbHVlLFxuICAgIGlzSW5QaXhlbHM6IHBhcnNlZFZhbHVlID4gMCxcbiAgfTtcbn1cblxuY29uc3QgcG9pbnRzRXF1YWwgPSAoYSwgYikgPT4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnk7XG5cbmZ1bmN0aW9uIHBvaW50c1RvU2VnbWVudHMocHRzKSB7XG4gIHJldHVybiBwdHMucmVkdWNlKChzZWdtZW50cywgYiwgaWR4LCBwb2ludHMpID0+IHtcbiAgICAvLyB0aGlzIHRlc3Qgc2tpcHMgc2FtZSBhZGphY2VudCBwb2ludHNcbiAgICBpZiAoaWR4ID4gMCAmJiAhcG9pbnRzRXF1YWwoYiwgcG9pbnRzW2lkeCAtIDFdKSkge1xuICAgICAgY29uc3QgYSA9IHBvaW50c1tpZHggLSAxXTtcbiAgICAgIGNvbnN0IGRpc3RBID1cbiAgICAgICAgc2VnbWVudHMubGVuZ3RoID4gMCA/IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmRpc3RCIDogMDtcbiAgICAgIGNvbnN0IGRpc3RBQiA9IHBvaW50RGlzdGFuY2UoYSwgYik7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgYSxcbiAgICAgICAgYixcbiAgICAgICAgZGlzdEEsXG4gICAgICAgIGRpc3RCOiBkaXN0QSArIGRpc3RBQixcbiAgICAgICAgaGVhZGluZzogY29tcHV0ZVNlZ21lbnRIZWFkaW5nKGEsIGIpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50cztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0UGF0dGVybk9uUG9pbnRQYXRoKHB0cywgcGF0dGVybikge1xuICAvLyAxLiBzcGxpdCB0aGUgcGF0aCBpbnRvIHNlZ21lbnQgaW5mb3NcbiAgY29uc3Qgc2VnbWVudHMgPSBwb2ludHNUb1NlZ21lbnRzKHB0cyk7XG4gIGNvbnN0IG5iU2VnbWVudHMgPSBzZWdtZW50cy5sZW5ndGg7XG4gIGlmIChuYlNlZ21lbnRzID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgdG90YWxQYXRoTGVuZ3RoID0gc2VnbWVudHNbbmJTZWdtZW50cyAtIDFdLmRpc3RCO1xuXG4gIGNvbnN0IG9mZnNldCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5vZmZzZXQsIHRvdGFsUGF0aExlbmd0aCk7XG4gIGNvbnN0IGVuZE9mZnNldCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5lbmRPZmZzZXQsIHRvdGFsUGF0aExlbmd0aCk7XG4gIGNvbnN0IHJlcGVhdCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5yZXBlYXQsIHRvdGFsUGF0aExlbmd0aCk7XG5cbiAgY29uc3QgcmVwZWF0SW50ZXJ2YWxQaXhlbHMgPSB0b3RhbFBhdGhMZW5ndGggKiByZXBlYXQ7XG4gIGNvbnN0IHN0YXJ0T2Zmc2V0UGl4ZWxzID0gb2Zmc2V0ID4gMCA/IHRvdGFsUGF0aExlbmd0aCAqIG9mZnNldCA6IDA7XG4gIGNvbnN0IGVuZE9mZnNldFBpeGVscyA9IGVuZE9mZnNldCA+IDAgPyB0b3RhbFBhdGhMZW5ndGggKiBlbmRPZmZzZXQgOiAwO1xuXG4gIC8vIDIuIGdlbmVyYXRlIHRoZSBwb3NpdGlvbnMgb2YgdGhlIHBhdHRlcm4gYXMgb2Zmc2V0cyBmcm9tIHRoZSBwYXRoIHN0YXJ0XG4gIGNvbnN0IHBvc2l0aW9uT2Zmc2V0cyA9IFtdO1xuICBsZXQgcG9zaXRpb25PZmZzZXQgPSBzdGFydE9mZnNldFBpeGVscztcbiAgZG8ge1xuICAgIHBvc2l0aW9uT2Zmc2V0cy5wdXNoKHBvc2l0aW9uT2Zmc2V0KTtcbiAgICBwb3NpdGlvbk9mZnNldCArPSByZXBlYXRJbnRlcnZhbFBpeGVscztcbiAgfSB3aGlsZSAoXG4gICAgcmVwZWF0SW50ZXJ2YWxQaXhlbHMgPiAwICYmXG4gICAgcG9zaXRpb25PZmZzZXQgPCB0b3RhbFBhdGhMZW5ndGggLSBlbmRPZmZzZXRQaXhlbHNcbiAgKTtcblxuICAvLyAzLiBwcm9qZWN0cyBvZmZzZXRzIHRvIHNlZ21lbnRzXG4gIGxldCBzZWdtZW50SW5kZXggPSAwO1xuICBsZXQgc2VnbWVudCA9IHNlZ21lbnRzWzBdO1xuICByZXR1cm4gcG9zaXRpb25PZmZzZXRzLm1hcCgocG9zaXRpb25PZmZzZXQpID0+IHtcbiAgICAvLyBmaW5kIHRoZSBzZWdtZW50IG1hdGNoaW5nIHRoZSBvZmZzZXQsXG4gICAgLy8gc3RhcnRpbmcgZnJvbSB0aGUgcHJldmlvdXMgb25lIGFzIG9mZnNldHMgYXJlIG9yZGVyZWRcbiAgICB3aGlsZSAocG9zaXRpb25PZmZzZXQgPiBzZWdtZW50LmRpc3RCICYmIHNlZ21lbnRJbmRleCA8IG5iU2VnbWVudHMgLSAxKSB7XG4gICAgICBzZWdtZW50SW5kZXgrKztcbiAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdtZW50SW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZ21lbnRSYXRpbyA9XG4gICAgICAocG9zaXRpb25PZmZzZXQgLSBzZWdtZW50LmRpc3RBKSAvIChzZWdtZW50LmRpc3RCIC0gc2VnbWVudC5kaXN0QSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB0OiBpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMoc2VnbWVudC5hLCBzZWdtZW50LmIsIHNlZ21lbnRSYXRpbyksXG4gICAgICBoZWFkaW5nOiBzZWdtZW50LmhlYWRpbmcsXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHBvaW50IHdoaWNoIGxpZXMgb24gdGhlIHNlZ21lbnQgZGVmaW5lZCBieSBwb2ludHMgQSBhbmQgQixcbiAqIGF0IHRoZSBnaXZlbiByYXRpbyBvZiB0aGUgZGlzdGFuY2UgZnJvbSBBIHRvIEIsIGJ5IGxpbmVhciBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMocHRBLCBwdEIsIHJhdGlvKSB7XG4gIGlmIChwdEIueCAhPT0gcHRBLngpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcHRBLnggKyByYXRpbyAqIChwdEIueCAtIHB0QS54KSxcbiAgICAgIHk6IHB0QS55ICsgcmF0aW8gKiAocHRCLnkgLSBwdEEueSksXG4gICAgfTtcbiAgfVxuICAvLyBzcGVjaWFsIGNhc2Ugd2hlcmUgcG9pbnRzIGxpZSBvbiB0aGUgc2FtZSB2ZXJ0aWNhbCBheGlzXG4gIHJldHVybiB7XG4gICAgeDogcHRBLngsXG4gICAgeTogcHRBLnkgKyAocHRCLnkgLSBwdEEueSkgKiByYXRpbyxcbiAgfTtcbn1cblxuZXhwb3J0IHtcbiAgcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aCxcbiAgcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZSxcbiAgLy8gdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhcmUgZXhwb3J0ZWQgb25seSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VcbiAgY29tcHV0ZVNlZ21lbnRIZWFkaW5nLFxuICBhc1JhdGlvVG9QYXRoTGVuZ3RoLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUFBLE9BQUE7QUFEQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQUMsZ0JBQUMsQ0FBQ0MsTUFBTSxHQUFHRCxnQkFBQyxDQUFDQyxNQUFNLElBQUksQ0FBQyxDQUFDOztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBRCxnQkFBQyxDQUFDQyxNQUFNLENBQUNDLElBQUksR0FBR0YsZ0JBQUMsQ0FBQ0csS0FBSyxDQUFDQyxNQUFNLENBQUM7RUFDN0JDLE9BQU8sRUFBRTtJQUNQQyxTQUFTLEVBQUUsRUFBRTtJQUNiQyxXQUFXLEVBQUUsQ0FBQztFQUNoQixDQUFDO0VBRURDLFVBQVUsRUFB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