@undp/data-viz 1.5.9 → 2.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 (670) hide show
  1. package/dist/AreaChart.cjs +1 -1
  2. package/dist/AreaChart.cjs.map +1 -1
  3. package/dist/AreaChart.d.ts +1 -0
  4. package/dist/AreaChart.js +420 -520
  5. package/dist/AreaChart.js.map +1 -1
  6. package/dist/Axis-CRyfcLjc.js +32 -0
  7. package/dist/Axis-CRyfcLjc.js.map +1 -0
  8. package/dist/Axis-DxRV2yMi.cjs +2 -0
  9. package/dist/Axis-DxRV2yMi.cjs.map +1 -0
  10. package/dist/AxisTitle-jeI7am8o.js +29 -0
  11. package/dist/AxisTitle-jeI7am8o.js.map +1 -0
  12. package/dist/AxisTitle-sS5bLLR7.cjs +2 -0
  13. package/dist/AxisTitle-sS5bLLR7.cjs.map +1 -0
  14. package/dist/BarGraph.cjs +1 -1
  15. package/dist/BarGraph.cjs.map +1 -1
  16. package/dist/BarGraph.d.ts +1 -0
  17. package/dist/BarGraph.js +2188 -4045
  18. package/dist/BarGraph.js.map +1 -1
  19. package/dist/BasicStatCard.cjs +1 -1
  20. package/dist/BasicStatCard.cjs.map +1 -1
  21. package/dist/BasicStatCard.d.ts +1 -0
  22. package/dist/BasicStatCard.js +120 -186
  23. package/dist/BasicStatCard.js.map +1 -1
  24. package/dist/BeeSwarmChart.cjs +1 -1
  25. package/dist/BeeSwarmChart.cjs.map +1 -1
  26. package/dist/BeeSwarmChart.d.ts +5 -0
  27. package/dist/BeeSwarmChart.js +500 -1018
  28. package/dist/BeeSwarmChart.js.map +1 -1
  29. package/dist/BiVariateChoroplethMap.cjs +1 -1
  30. package/dist/BiVariateChoroplethMap.cjs.map +1 -1
  31. package/dist/BiVariateChoroplethMap.d.ts +1 -0
  32. package/dist/BiVariateChoroplethMap.js +458 -699
  33. package/dist/BiVariateChoroplethMap.js.map +1 -1
  34. package/dist/BulletChart.cjs +1 -1
  35. package/dist/BulletChart.cjs.map +1 -1
  36. package/dist/BulletChart.d.ts +1 -0
  37. package/dist/BulletChart.js +863 -1414
  38. package/dist/BulletChart.js.map +1 -1
  39. package/dist/ButterflyChart.cjs +1 -1
  40. package/dist/ButterflyChart.cjs.map +1 -1
  41. package/dist/ButterflyChart.d.ts +1 -0
  42. package/dist/ButterflyChart.js +474 -684
  43. package/dist/ButterflyChart.js.map +1 -1
  44. package/dist/ChoroplethMap.cjs +1 -1
  45. package/dist/ChoroplethMap.cjs.map +1 -1
  46. package/dist/ChoroplethMap.d.ts +1 -0
  47. package/dist/ChoroplethMap.js +466 -720
  48. package/dist/ChoroplethMap.js.map +1 -1
  49. package/dist/CirclePackingGraph.cjs +1 -1
  50. package/dist/CirclePackingGraph.d.ts +1 -0
  51. package/dist/CirclePackingGraph.js +5 -4
  52. package/dist/CirclePackingGraph.js.map +1 -1
  53. package/dist/ColorLegend.cjs +1 -1
  54. package/dist/ColorLegend.cjs.map +1 -1
  55. package/dist/ColorLegend.js +57 -44
  56. package/dist/ColorLegend.js.map +1 -1
  57. package/dist/ColorLegendWithMouseOver.cjs +1 -1
  58. package/dist/ColorLegendWithMouseOver.cjs.map +1 -1
  59. package/dist/ColorLegendWithMouseOver.js +60 -65
  60. package/dist/ColorLegendWithMouseOver.js.map +1 -1
  61. package/dist/Colors.cjs.map +1 -1
  62. package/dist/Colors.js +44 -430
  63. package/dist/Colors.js.map +1 -1
  64. package/dist/CopyTextButton.cjs +3 -3
  65. package/dist/CopyTextButton.cjs.map +1 -1
  66. package/dist/CopyTextButton.js +537 -455
  67. package/dist/CopyTextButton.js.map +1 -1
  68. package/dist/CsvDownloadButton.cjs +7 -7
  69. package/dist/CsvDownloadButton.cjs.map +1 -1
  70. package/dist/CsvDownloadButton.js +442 -447
  71. package/dist/CsvDownloadButton.js.map +1 -1
  72. package/dist/DataCards.cjs +5 -5
  73. package/dist/DataCards.cjs.map +1 -1
  74. package/dist/DataCards.d.ts +1 -0
  75. package/dist/DataCards.js +488 -581
  76. package/dist/DataCards.js.map +1 -1
  77. package/dist/DataTable.cjs +1 -1
  78. package/dist/DataTable.cjs.map +1 -1
  79. package/dist/DataTable.d.ts +1 -0
  80. package/dist/DataTable.js +183 -326
  81. package/dist/DataTable.js.map +1 -1
  82. package/dist/DifferenceLineChart.cjs +1 -1
  83. package/dist/DifferenceLineChart.cjs.map +1 -1
  84. package/dist/DifferenceLineChart.d.ts +1 -0
  85. package/dist/DifferenceLineChart.js +729 -794
  86. package/dist/DifferenceLineChart.js.map +1 -1
  87. package/dist/DonutChart.cjs +1 -1
  88. package/dist/DonutChart.cjs.map +1 -1
  89. package/dist/DonutChart.d.ts +1 -4
  90. package/dist/DonutChart.js +260 -444
  91. package/dist/DonutChart.js.map +1 -1
  92. package/dist/DotDensityMap.cjs +1 -1
  93. package/dist/DotDensityMap.cjs.map +1 -1
  94. package/dist/DotDensityMap.d.ts +1 -0
  95. package/dist/DotDensityMap.js +387 -574
  96. package/dist/DotDensityMap.js.map +1 -1
  97. package/dist/{DropdownSelect-6kjXM6oW.js → DropdownSelect-BbdPQa2k.js} +1401 -1374
  98. package/dist/DropdownSelect-BbdPQa2k.js.map +1 -0
  99. package/dist/DropdownSelect-Doz3mCrM.cjs +29 -0
  100. package/dist/DropdownSelect-Doz3mCrM.cjs.map +1 -0
  101. package/dist/DualAxisLineChart.cjs +1 -1
  102. package/dist/DualAxisLineChart.cjs.map +1 -1
  103. package/dist/DualAxisLineChart.d.ts +1 -0
  104. package/dist/DualAxisLineChart.js +617 -712
  105. package/dist/DualAxisLineChart.js.map +1 -1
  106. package/dist/DumbbellChart.cjs +1 -1
  107. package/dist/DumbbellChart.cjs.map +1 -1
  108. package/dist/DumbbellChart.d.ts +1 -0
  109. package/dist/DumbbellChart.js +789 -1499
  110. package/dist/DumbbellChart.js.map +1 -1
  111. package/dist/EmptyState-BZo1BbAn.js +15 -0
  112. package/dist/{EmptyState-36lXXyui.js.map → EmptyState-BZo1BbAn.js.map} +1 -1
  113. package/dist/EmptyState-sAEZ_5rU.cjs +2 -0
  114. package/dist/{EmptyState-B8IpKGcL.cjs.map → EmptyState-sAEZ_5rU.cjs.map} +1 -1
  115. package/dist/ExcelDownloadButton.cjs +1 -1
  116. package/dist/ExcelDownloadButton.cjs.map +1 -1
  117. package/dist/ExcelDownloadButton.js +20 -24
  118. package/dist/ExcelDownloadButton.js.map +1 -1
  119. package/dist/FootNote.cjs +1 -1
  120. package/dist/FootNote.cjs.map +1 -1
  121. package/dist/FootNote.js +26 -17
  122. package/dist/FootNote.js.map +1 -1
  123. package/dist/GeoHubCompareMaps.cjs +1 -1
  124. package/dist/GeoHubCompareMaps.cjs.map +1 -1
  125. package/dist/GeoHubCompareMaps.d.ts +1 -0
  126. package/dist/GeoHubCompareMaps.js +265 -340
  127. package/dist/GeoHubCompareMaps.js.map +1 -1
  128. package/dist/GeoHubMap.cjs +1 -1
  129. package/dist/GeoHubMap.cjs.map +1 -1
  130. package/dist/GeoHubMap.d.ts +1 -0
  131. package/dist/GeoHubMap.js +214 -379
  132. package/dist/GeoHubMap.js.map +1 -1
  133. package/dist/GeoHubMapWithLayerSelection.cjs +1 -1
  134. package/dist/GeoHubMapWithLayerSelection.cjs.map +1 -1
  135. package/dist/GeoHubMapWithLayerSelection.d.ts +1 -0
  136. package/dist/GeoHubMapWithLayerSelection.js +192 -278
  137. package/dist/GeoHubMapWithLayerSelection.js.map +1 -1
  138. package/dist/GraphContainer-CRqzdKu2.js +78 -0
  139. package/dist/GraphContainer-CRqzdKu2.js.map +1 -0
  140. package/dist/GraphContainer-d8A46BK2.cjs +2 -0
  141. package/dist/GraphContainer-d8A46BK2.cjs.map +1 -0
  142. package/dist/GraphDescription.cjs +1 -1
  143. package/dist/GraphDescription.cjs.map +1 -1
  144. package/dist/GraphDescription.js +23 -17
  145. package/dist/GraphDescription.js.map +1 -1
  146. package/dist/GraphEl-BkyLYXG5.cjs +2 -0
  147. package/dist/GraphEl-BkyLYXG5.cjs.map +1 -0
  148. package/dist/{GraphEl-2IiUDxjR.js → GraphEl-DzRon4cb.js} +181 -202
  149. package/dist/GraphEl-DzRon4cb.js.map +1 -0
  150. package/dist/GraphFooter.cjs +1 -1
  151. package/dist/GraphFooter.cjs.map +1 -1
  152. package/dist/GraphFooter.js +28 -18
  153. package/dist/GraphFooter.js.map +1 -1
  154. package/dist/GraphHeader.cjs +1 -1
  155. package/dist/GraphHeader.cjs.map +1 -1
  156. package/dist/GraphHeader.d.ts +2 -1
  157. package/dist/GraphHeader.js +45 -59
  158. package/dist/GraphHeader.js.map +1 -1
  159. package/dist/GraphTitle.cjs +1 -1
  160. package/dist/GraphTitle.cjs.map +1 -1
  161. package/dist/GraphTitle.js +29 -24
  162. package/dist/GraphTitle.js.map +1 -1
  163. package/dist/GriddedGraphs.cjs +1 -1
  164. package/dist/GriddedGraphs.cjs.map +1 -1
  165. package/dist/GriddedGraphs.d.ts +1 -0
  166. package/dist/GriddedGraphs.js +216 -450
  167. package/dist/GriddedGraphs.js.map +1 -1
  168. package/dist/GriddedGraphsFromConfig.cjs +1 -1
  169. package/dist/GriddedGraphsFromConfig.cjs.map +1 -1
  170. package/dist/GriddedGraphsFromConfig.d.ts +1 -0
  171. package/dist/GriddedGraphsFromConfig.js +22 -36
  172. package/dist/GriddedGraphsFromConfig.js.map +1 -1
  173. package/dist/HeatMap.cjs +1 -1
  174. package/dist/HeatMap.cjs.map +1 -1
  175. package/dist/HeatMap.d.ts +1 -0
  176. package/dist/HeatMap.js +278 -446
  177. package/dist/HeatMap.js.map +1 -1
  178. package/dist/Histogram.cjs +1 -1
  179. package/dist/Histogram.cjs.map +1 -1
  180. package/dist/Histogram.d.ts +1 -0
  181. package/dist/Histogram.js +154 -264
  182. package/dist/Histogram.js.map +1 -1
  183. package/dist/ImageDownloadButton.cjs +1 -1
  184. package/dist/ImageDownloadButton.cjs.map +1 -1
  185. package/dist/ImageDownloadButton.d.ts +2 -1
  186. package/dist/ImageDownloadButton.js +21 -25
  187. package/dist/ImageDownloadButton.js.map +1 -1
  188. package/dist/LineChartWithConfidenceInterval.cjs +1 -1
  189. package/dist/LineChartWithConfidenceInterval.cjs.map +1 -1
  190. package/dist/LineChartWithConfidenceInterval.d.ts +1 -0
  191. package/dist/LineChartWithConfidenceInterval.js +674 -825
  192. package/dist/LineChartWithConfidenceInterval.js.map +1 -1
  193. package/dist/LinearColorLegend.cjs +1 -1
  194. package/dist/LinearColorLegend.cjs.map +1 -1
  195. package/dist/LinearColorLegend.js +49 -30
  196. package/dist/LinearColorLegend.js.map +1 -1
  197. package/dist/Modal-DGcuAHyK.js +1047 -0
  198. package/dist/Modal-DGcuAHyK.js.map +1 -0
  199. package/dist/Modal-JW_IExO3.cjs +46 -0
  200. package/dist/Modal-JW_IExO3.cjs.map +1 -0
  201. package/dist/MultiGraphDashboard.cjs +1 -1
  202. package/dist/MultiGraphDashboard.cjs.map +1 -1
  203. package/dist/MultiGraphDashboard.d.ts +1 -0
  204. package/dist/MultiGraphDashboard.js +122 -290
  205. package/dist/MultiGraphDashboard.js.map +1 -1
  206. package/dist/MultiGraphDashboardFromConfig.cjs +1 -1
  207. package/dist/MultiGraphDashboardFromConfig.cjs.map +1 -1
  208. package/dist/MultiGraphDashboardFromConfig.d.ts +1 -0
  209. package/dist/MultiGraphDashboardFromConfig.js +22 -31
  210. package/dist/MultiGraphDashboardFromConfig.js.map +1 -1
  211. package/dist/MultiGraphDashboardWideToLongFormat.cjs +1 -1
  212. package/dist/MultiGraphDashboardWideToLongFormat.cjs.map +1 -1
  213. package/dist/MultiGraphDashboardWideToLongFormat.d.ts +1 -0
  214. package/dist/MultiGraphDashboardWideToLongFormat.js +137 -223
  215. package/dist/MultiGraphDashboardWideToLongFormat.js.map +1 -1
  216. package/dist/MultiGraphDashboardWideToLongFormatFromConfig.cjs +1 -1
  217. package/dist/MultiGraphDashboardWideToLongFormatFromConfig.cjs.map +1 -1
  218. package/dist/MultiGraphDashboardWideToLongFormatFromConfig.d.ts +1 -0
  219. package/dist/MultiGraphDashboardWideToLongFormatFromConfig.js +25 -27
  220. package/dist/MultiGraphDashboardWideToLongFormatFromConfig.js.map +1 -1
  221. package/dist/MultiLineAltChart.cjs +1 -1
  222. package/dist/MultiLineAltChart.cjs.map +1 -1
  223. package/dist/MultiLineAltChart.d.ts +1 -0
  224. package/dist/MultiLineAltChart.js +581 -659
  225. package/dist/MultiLineAltChart.js.map +1 -1
  226. package/dist/MultiLineChart.cjs +1 -1
  227. package/dist/MultiLineChart.cjs.map +1 -1
  228. package/dist/MultiLineChart.d.ts +1 -0
  229. package/dist/MultiLineChart.js +617 -725
  230. package/dist/MultiLineChart.js.map +1 -1
  231. package/dist/ParetoChart.cjs +1 -1
  232. package/dist/ParetoChart.cjs.map +1 -1
  233. package/dist/ParetoChart.d.ts +1 -0
  234. package/dist/ParetoChart.js +531 -635
  235. package/dist/ParetoChart.js.map +1 -1
  236. package/dist/PerformanceIntensiveMultiGraphDashboard.cjs +1 -1
  237. package/dist/PerformanceIntensiveMultiGraphDashboard.cjs.map +1 -1
  238. package/dist/PerformanceIntensiveMultiGraphDashboard.d.ts +1 -0
  239. package/dist/PerformanceIntensiveMultiGraphDashboard.js +147 -338
  240. package/dist/PerformanceIntensiveMultiGraphDashboard.js.map +1 -1
  241. package/dist/PerformanceIntensiveMultiGraphDashboardFromConfig.cjs +1 -1
  242. package/dist/PerformanceIntensiveMultiGraphDashboardFromConfig.cjs.map +1 -1
  243. package/dist/PerformanceIntensiveMultiGraphDashboardFromConfig.d.ts +1 -0
  244. package/dist/PerformanceIntensiveMultiGraphDashboardFromConfig.js +22 -31
  245. package/dist/PerformanceIntensiveMultiGraphDashboardFromConfig.js.map +1 -1
  246. package/dist/PerformanceIntensiveScrollStory.cjs +1 -1
  247. package/dist/PerformanceIntensiveScrollStory.cjs.map +1 -1
  248. package/dist/PerformanceIntensiveScrollStory.d.ts +1 -0
  249. package/dist/PerformanceIntensiveScrollStory.js +93 -114
  250. package/dist/PerformanceIntensiveScrollStory.js.map +1 -1
  251. package/dist/RadarChart.cjs +1 -1
  252. package/dist/RadarChart.cjs.map +1 -1
  253. package/dist/RadarChart.d.ts +1 -0
  254. package/dist/RadarChart.js +426 -575
  255. package/dist/RadarChart.js.map +1 -1
  256. package/dist/ReferenceLine-2XCwHXQ4.js +162 -0
  257. package/dist/ReferenceLine-2XCwHXQ4.js.map +1 -0
  258. package/dist/ReferenceLine-BH0qdf4R.cjs +2 -0
  259. package/dist/ReferenceLine-BH0qdf4R.cjs.map +1 -0
  260. package/dist/RegressionLine-BOTTNSrr.cjs +2 -0
  261. package/dist/RegressionLine-BOTTNSrr.cjs.map +1 -0
  262. package/dist/RegressionLine-DAcY2DjT.js +87 -0
  263. package/dist/RegressionLine-DAcY2DjT.js.map +1 -0
  264. package/dist/SVGDownloadButton.cjs +1 -1
  265. package/dist/SVGDownloadButton.cjs.map +1 -1
  266. package/dist/SVGDownloadButton.js +21 -25
  267. package/dist/SVGDownloadButton.js.map +1 -1
  268. package/dist/SankeyChart.cjs +1 -1
  269. package/dist/SankeyChart.cjs.map +1 -1
  270. package/dist/SankeyChart.d.ts +1 -0
  271. package/dist/SankeyChart.js +665 -854
  272. package/dist/SankeyChart.js.map +1 -1
  273. package/dist/ScatterPlot.cjs +1 -1
  274. package/dist/ScatterPlot.cjs.map +1 -1
  275. package/dist/ScatterPlot.d.ts +1 -0
  276. package/dist/ScatterPlot.js +675 -815
  277. package/dist/ScatterPlot.js.map +1 -1
  278. package/dist/ScrollStory.cjs +1 -1
  279. package/dist/ScrollStory.cjs.map +1 -1
  280. package/dist/ScrollStory.d.ts +1 -0
  281. package/dist/ScrollStory.js +85 -97
  282. package/dist/ScrollStory.js.map +1 -1
  283. package/dist/SimpleLineChart.cjs +1 -1
  284. package/dist/SimpleLineChart.cjs.map +1 -1
  285. package/dist/SimpleLineChart.d.ts +1 -0
  286. package/dist/SimpleLineChart.js +504 -613
  287. package/dist/SimpleLineChart.js.map +1 -1
  288. package/dist/SingleGraphDashboard.cjs +1 -1
  289. package/dist/SingleGraphDashboard.cjs.map +1 -1
  290. package/dist/SingleGraphDashboard.d.ts +2 -1
  291. package/dist/SingleGraphDashboard.js +279 -507
  292. package/dist/SingleGraphDashboard.js.map +1 -1
  293. package/dist/SingleGraphDashboardFromConfig.cjs +1 -1
  294. package/dist/SingleGraphDashboardFromConfig.cjs.map +1 -1
  295. package/dist/SingleGraphDashboardFromConfig.d.ts +2 -1
  296. package/dist/SingleGraphDashboardFromConfig.js +25 -31
  297. package/dist/SingleGraphDashboardFromConfig.js.map +1 -1
  298. package/dist/SingleGraphDashboardGeoHubMaps.cjs +1 -1
  299. package/dist/SingleGraphDashboardGeoHubMaps.cjs.map +1 -1
  300. package/dist/SingleGraphDashboardGeoHubMaps.d.ts +1 -0
  301. package/dist/SingleGraphDashboardGeoHubMaps.js +146 -168
  302. package/dist/SingleGraphDashboardGeoHubMaps.js.map +1 -1
  303. package/dist/SingleGraphDashboardGeoHubMapsFromConfig.cjs +1 -1
  304. package/dist/SingleGraphDashboardGeoHubMapsFromConfig.cjs.map +1 -1
  305. package/dist/SingleGraphDashboardGeoHubMapsFromConfig.d.ts +1 -0
  306. package/dist/SingleGraphDashboardGeoHubMapsFromConfig.js +25 -21
  307. package/dist/SingleGraphDashboardGeoHubMapsFromConfig.js.map +1 -1
  308. package/dist/SingleGraphDashboardThreeDGraphs.cjs +1 -1
  309. package/dist/SingleGraphDashboardThreeDGraphs.cjs.map +1 -1
  310. package/dist/SingleGraphDashboardThreeDGraphs.d.ts +1 -0
  311. package/dist/SingleGraphDashboardThreeDGraphs.js +357 -591
  312. package/dist/SingleGraphDashboardThreeDGraphs.js.map +1 -1
  313. package/dist/SingleGraphDashboardThreeDGraphsFromConfig.cjs +1 -1
  314. package/dist/SingleGraphDashboardThreeDGraphsFromConfig.cjs.map +1 -1
  315. package/dist/SingleGraphDashboardThreeDGraphsFromConfig.d.ts +1 -0
  316. package/dist/SingleGraphDashboardThreeDGraphsFromConfig.js +25 -31
  317. package/dist/SingleGraphDashboardThreeDGraphsFromConfig.js.map +1 -1
  318. package/dist/SlopeChart.cjs +1 -1
  319. package/dist/SlopeChart.cjs.map +1 -1
  320. package/dist/SlopeChart.d.ts +1 -0
  321. package/dist/SlopeChart.js +539 -573
  322. package/dist/SlopeChart.js.map +1 -1
  323. package/dist/Source-DYMJRrsq.cjs +2 -0
  324. package/dist/Source-DYMJRrsq.cjs.map +1 -0
  325. package/dist/Source-DwTHB8fn.js +78 -0
  326. package/dist/Source-DwTHB8fn.js.map +1 -0
  327. package/dist/Source.cjs +1 -1
  328. package/dist/Source.cjs.map +1 -1
  329. package/dist/Source.js +4 -38
  330. package/dist/Source.js.map +1 -1
  331. package/dist/SparkLine.cjs +1 -1
  332. package/dist/SparkLine.cjs.map +1 -1
  333. package/dist/SparkLine.d.ts +1 -0
  334. package/dist/SparkLine.js +286 -314
  335. package/dist/SparkLine.js.map +1 -1
  336. package/dist/Spinner-D7rnnwnA.js +47 -0
  337. package/dist/Spinner-D7rnnwnA.js.map +1 -0
  338. package/dist/Spinner-DRMBUsX7.cjs +2 -0
  339. package/dist/Spinner-DRMBUsX7.cjs.map +1 -0
  340. package/dist/StatCardFromData.cjs +1 -1
  341. package/dist/StatCardFromData.cjs.map +1 -1
  342. package/dist/StatCardFromData.d.ts +1 -0
  343. package/dist/StatCardFromData.js +163 -243
  344. package/dist/StatCardFromData.js.map +1 -1
  345. package/dist/StripChart.cjs +1 -1
  346. package/dist/StripChart.cjs.map +1 -1
  347. package/dist/StripChart.d.ts +1 -0
  348. package/dist/StripChart.js +665 -983
  349. package/dist/StripChart.js.map +1 -1
  350. package/dist/ThreeDGlobe.cjs +1 -1
  351. package/dist/ThreeDGlobe.cjs.map +1 -1
  352. package/dist/ThreeDGlobe.d.ts +1 -0
  353. package/dist/ThreeDGlobe.js +356 -519
  354. package/dist/ThreeDGlobe.js.map +1 -1
  355. package/dist/ThresholdColorLegendWithMouseOver.cjs +1 -1
  356. package/dist/ThresholdColorLegendWithMouseOver.cjs.map +1 -1
  357. package/dist/ThresholdColorLegendWithMouseOver.js +96 -126
  358. package/dist/ThresholdColorLegendWithMouseOver.js.map +1 -1
  359. package/dist/Tooltip-4dJo4_AF.cjs +2 -0
  360. package/dist/Tooltip-4dJo4_AF.cjs.map +1 -0
  361. package/dist/Tooltip-CwWUegPB.js +43 -0
  362. package/dist/Tooltip-CwWUegPB.js.map +1 -0
  363. package/dist/TreeMapGraph.cjs +1 -1
  364. package/dist/TreeMapGraph.cjs.map +1 -1
  365. package/dist/TreeMapGraph.d.ts +1 -0
  366. package/dist/TreeMapGraph.js +479 -617
  367. package/dist/TreeMapGraph.js.map +1 -1
  368. package/dist/Types.d.ts +1 -0
  369. package/dist/Typography-DX7PlgQU.cjs +2 -0
  370. package/dist/Typography-DX7PlgQU.cjs.map +1 -0
  371. package/dist/Typography-PxtFcnJb.js +142 -0
  372. package/dist/Typography-PxtFcnJb.js.map +1 -0
  373. package/dist/UnitChart.cjs +1 -1
  374. package/dist/UnitChart.cjs.map +1 -1
  375. package/dist/UnitChart.d.ts +1 -0
  376. package/dist/UnitChart.js +160 -212
  377. package/dist/UnitChart.js.map +1 -1
  378. package/dist/XAxesLabels-D5X8jngD.cjs +2 -0
  379. package/dist/XAxesLabels-D5X8jngD.cjs.map +1 -0
  380. package/dist/XAxesLabels-DNO0KmjL.js +73 -0
  381. package/dist/XAxesLabels-DNO0KmjL.js.map +1 -0
  382. package/dist/XTicksAndGridLines-B6CELS7q.cjs +2 -0
  383. package/dist/XTicksAndGridLines-B6CELS7q.cjs.map +1 -0
  384. package/dist/XTicksAndGridLines-CObVFSm4.js +38 -0
  385. package/dist/XTicksAndGridLines-CObVFSm4.js.map +1 -0
  386. package/dist/YAxesLabels-DcS85Beo.cjs +2 -0
  387. package/dist/YAxesLabels-DcS85Beo.cjs.map +1 -0
  388. package/dist/YAxesLabels-Dnnng49-.js +70 -0
  389. package/dist/YAxesLabels-Dnnng49-.js.map +1 -0
  390. package/dist/YTicksAndGridLines-4pxTRlRK.cjs +2 -0
  391. package/dist/YTicksAndGridLines-4pxTRlRK.cjs.map +1 -0
  392. package/dist/YTicksAndGridLines-Blepl7XF.js +38 -0
  393. package/dist/YTicksAndGridLines-Blepl7XF.js.map +1 -0
  394. package/dist/{band-BEjh2CHI.js → band-CyHaVft5.js} +3 -3
  395. package/dist/{band-BEjh2CHI.js.map → band-CyHaVft5.js.map} +1 -1
  396. package/dist/{band-CAApY4Pd.cjs → band-VYfcZeJ2.cjs} +2 -2
  397. package/dist/{band-CAApY4Pd.cjs.map → band-VYfcZeJ2.cjs.map} +1 -1
  398. package/dist/checkIfMultiple-Y9iKaV_u.js +950 -0
  399. package/dist/checkIfMultiple-Y9iKaV_u.js.map +1 -0
  400. package/dist/checkIfMultiple-wg6hJLXy.cjs +12 -0
  401. package/dist/checkIfMultiple-wg6hJLXy.cjs.map +1 -0
  402. package/dist/customArea-BUhPiPT6.js +163 -0
  403. package/dist/{customArea-x4L4xwLl.js.map → customArea-BUhPiPT6.js.map} +1 -1
  404. package/dist/customArea-CMF5g-C3.cjs +2 -0
  405. package/dist/{customArea-1G1S78s_.cjs.map → customArea-CMF5g-C3.cjs.map} +1 -1
  406. package/dist/delaunay-C1uAf38t.js.map +1 -1
  407. package/dist/delaunay-rcy0HhZi.cjs.map +1 -1
  408. package/dist/{ensureCompleteData-DlmibgaI.js → ensureCompleteData-DNKEGRiP.js} +12 -32
  409. package/dist/{ensureCompleteData-DlmibgaI.js.map → ensureCompleteData-DNKEGRiP.js.map} +1 -1
  410. package/dist/{ensureCompleteData-DkQYPeDa.cjs → ensureCompleteData-I6nYmT8E.cjs} +2 -2
  411. package/dist/{ensureCompleteData-DkQYPeDa.cjs.map → ensureCompleteData-I6nYmT8E.cjs.map} +1 -1
  412. package/dist/{excelDownload-BOA-lskf.js → excelDownload-BEC1AyQW.js} +12 -2
  413. package/dist/{excelDownload-BOA-lskf.js.map → excelDownload-BEC1AyQW.js.map} +1 -1
  414. package/dist/excelDownload-BQpsCa62.cjs.map +1 -1
  415. package/dist/{fetchAndParseData-sapWbnYk.js → fetchAndParseData-BpqkBPQL.js} +15 -28
  416. package/dist/{fetchAndParseData-sapWbnYk.js.map → fetchAndParseData-BpqkBPQL.js.map} +1 -1
  417. package/dist/fetchAndParseData-l5HGMAEs.cjs +16 -0
  418. package/dist/{fetchAndParseData-Ba-_CgxS.cjs.map → fetchAndParseData-l5HGMAEs.cjs.map} +1 -1
  419. package/dist/fetchAndParseData.cjs +1 -1
  420. package/dist/fetchAndParseData.js +1 -1
  421. package/dist/{filterData-9nEcQ-Jp.js → filterData-DsAiFzKY.js} +3 -5
  422. package/dist/{filterData-9nEcQ-Jp.js.map → filterData-DsAiFzKY.js.map} +1 -1
  423. package/dist/{filterData-BoYadk0l.cjs → filterData-T5DQBE9b.cjs} +2 -2
  424. package/dist/{filterData-BoYadk0l.cjs.map → filterData-T5DQBE9b.cjs.map} +1 -1
  425. package/dist/generateRandomString-B5zBiJzS.cjs.map +1 -1
  426. package/dist/generateRandomString-za3IQGfQ.js.map +1 -1
  427. package/dist/{getCentroidCoordinates-Dfk6IqEG.js → getCentroidCoordinates-D7r34N4w.js} +2 -2
  428. package/dist/{getCentroidCoordinates-Dfk6IqEG.js.map → getCentroidCoordinates-D7r34N4w.js.map} +1 -1
  429. package/dist/{getCentroidCoordinates-DxTBqzp2.cjs → getCentroidCoordinates-Dng1HVjO.cjs} +2 -2
  430. package/dist/{getCentroidCoordinates-DxTBqzp2.cjs.map → getCentroidCoordinates-Dng1HVjO.cjs.map} +1 -1
  431. package/dist/getGraphList-BpEWn1Tk.js +227 -0
  432. package/dist/{getGraphList-DuColTJM.js.map → getGraphList-BpEWn1Tk.js.map} +1 -1
  433. package/dist/getGraphList-gf02xgT2.cjs.map +1 -1
  434. package/dist/getJenks-BbngDoBQ.js.map +1 -1
  435. package/dist/getJenks-GYmdwBqm.cjs.map +1 -1
  436. package/dist/getSchema.cjs.map +1 -1
  437. package/dist/getSchema.js +445 -231
  438. package/dist/getSchema.js.map +1 -1
  439. package/dist/getSliderMarks-BmADcPQt.cjs +6 -0
  440. package/dist/getSliderMarks-BmADcPQt.cjs.map +1 -0
  441. package/dist/getSliderMarks-HIDJ0_Cd.js +1033 -0
  442. package/dist/getSliderMarks-HIDJ0_Cd.js.map +1 -0
  443. package/dist/{getTextColorBasedOnBgColor-B6Nk2WBf.js → getTextColorBasedOnBgColor-CDY808zi.js} +11 -3
  444. package/dist/{getTextColorBasedOnBgColor-B6Nk2WBf.js.map → getTextColorBasedOnBgColor-CDY808zi.js.map} +1 -1
  445. package/dist/getTextColorBasedOnBgColor-nqY-bsM_.cjs.map +1 -1
  446. package/dist/{getUniqValue-DiCh_MOD.js → getUniqValue-BKHCm3zE.js} +2 -4
  447. package/dist/{getUniqValue-DiCh_MOD.js.map → getUniqValue-BKHCm3zE.js.map} +1 -1
  448. package/dist/getUniqValue-RViz8tTw.cjs.map +1 -1
  449. package/dist/{imageDownload-Dcci2LEy.js → imageDownload-BX6SILNZ.js} +4 -2
  450. package/dist/{imageDownload-Dcci2LEy.js.map → imageDownload-BX6SILNZ.js.map} +1 -1
  451. package/dist/imageDownload-CgDcm1Sj.cjs.map +1 -1
  452. package/dist/{index-DvVprvy6.js → index-BZQYSqar.js} +7 -7
  453. package/dist/{index-DvVprvy6.js.map → index-BZQYSqar.js.map} +1 -1
  454. package/dist/index-B_sAFsEV.cjs +2 -0
  455. package/dist/{index-BHe3wsWF.cjs.map → index-B_sAFsEV.cjs.map} +1 -1
  456. package/dist/index-BqfRwk1n.js +146 -0
  457. package/dist/index-BqfRwk1n.js.map +1 -0
  458. package/dist/{index-V_JXij1_.js → index-BuwmuDFJ.js} +3 -3
  459. package/dist/{index-V_JXij1_.js.map → index-BuwmuDFJ.js.map} +1 -1
  460. package/dist/index-CHPV5EwG-CTPQjnHt.cjs +84 -0
  461. package/dist/index-CHPV5EwG-CTPQjnHt.cjs.map +1 -0
  462. package/dist/{index-CHPV5EwG-DBWUSD9b.js → index-CHPV5EwG-Curnpaqc.js} +724 -625
  463. package/dist/index-CHPV5EwG-Curnpaqc.js.map +1 -0
  464. package/dist/index-Cno4Q0YE.cjs +2 -0
  465. package/dist/{index-CQ3e6Ewi.cjs.map → index-Cno4Q0YE.cjs.map} +1 -1
  466. package/dist/{index-Cw8sCyo_-BuI_jX5Z.js → index-Cw8sCyo_-B2hEKjzG.js} +16 -16
  467. package/dist/{index-Cw8sCyo_-BuI_jX5Z.js.map → index-Cw8sCyo_-B2hEKjzG.js.map} +1 -1
  468. package/dist/{index-Cw8sCyo_-gxT8ADyn.cjs → index-Cw8sCyo_-BrHiWiRF.cjs} +2 -2
  469. package/dist/{index-Cw8sCyo_-gxT8ADyn.cjs.map → index-Cw8sCyo_-BrHiWiRF.cjs.map} +1 -1
  470. package/dist/index-CyZ1lmi_.cjs +2 -0
  471. package/dist/{index-D72cOtq7.cjs.map → index-CyZ1lmi_.cjs.map} +1 -1
  472. package/dist/index-D491FEn1.js +184 -0
  473. package/dist/index-D491FEn1.js.map +1 -0
  474. package/dist/index-DG2bgAva.cjs +10 -0
  475. package/dist/index-DG2bgAva.cjs.map +1 -0
  476. package/dist/index-DRXx7m-C.cjs +2 -0
  477. package/dist/index-DRXx7m-C.cjs.map +1 -0
  478. package/dist/index-DoY3Ga3W.cjs +2 -0
  479. package/dist/index-DoY3Ga3W.cjs.map +1 -0
  480. package/dist/index-DxXnJ8Ti.cjs +2 -0
  481. package/dist/index-DxXnJ8Ti.cjs.map +1 -0
  482. package/dist/{index-Dzc_aaI9-BKklH89r.js → index-Dzc_aaI9-Bb7gobH_.js} +2 -2
  483. package/dist/{index-Dzc_aaI9-BKklH89r.js.map → index-Dzc_aaI9-Bb7gobH_.js.map} +1 -1
  484. package/dist/{index-Dzc_aaI9-RIk2GRHD.cjs → index-Dzc_aaI9-BmkfPMyc.cjs} +2 -2
  485. package/dist/{index-Dzc_aaI9-RIk2GRHD.cjs.map → index-Dzc_aaI9-BmkfPMyc.cjs.map} +1 -1
  486. package/dist/{index-9tDEUqOZ.js → index-GEsywGxz.js} +9 -9
  487. package/dist/index-GEsywGxz.js.map +1 -0
  488. package/dist/index-SKgJALZg.js +99 -0
  489. package/dist/{index-Bw_eHBVN.js.map → index-SKgJALZg.js.map} +1 -1
  490. package/dist/index-leTnKT2q.js +329 -0
  491. package/dist/index-leTnKT2q.js.map +1 -0
  492. package/dist/index.cjs +1 -1
  493. package/dist/index.d.ts +10 -8
  494. package/dist/index.js +13 -13
  495. package/dist/{init-BhZylTFx.js → init-BJFW6EwE.js} +3 -3
  496. package/dist/{init-BhZylTFx.js.map → init-BJFW6EwE.js.map} +1 -1
  497. package/dist/{linear-BVckp9RD.cjs → linear-BwPAspcq.cjs} +2 -2
  498. package/dist/{linear-BVckp9RD.cjs.map → linear-BwPAspcq.cjs.map} +1 -1
  499. package/dist/{linear-DUdu7l2G.js → linear-BwnDd9KF.js} +3 -3
  500. package/dist/{linear-DUdu7l2G.js.map → linear-BwnDd9KF.js.map} +1 -1
  501. package/dist/numberFormattingFunction-02t-wJta.cjs.map +1 -1
  502. package/dist/numberFormattingFunction-14YCbkN2.js.map +1 -1
  503. package/dist/{ordinal-BOeNbyae.cjs → ordinal-CrsysVE-.cjs} +2 -2
  504. package/dist/ordinal-CrsysVE-.cjs.map +1 -0
  505. package/dist/{ordinal-w9Lu4Stb.js → ordinal-P77xw8aL.js} +24 -24
  506. package/dist/ordinal-P77xw8aL.js.map +1 -0
  507. package/dist/{pow-e8zx3AQJ.js → pow-DE4c7dbW.js} +3 -3
  508. package/dist/{pow-e8zx3AQJ.js.map → pow-DE4c7dbW.js.map} +1 -1
  509. package/dist/{pow-B5-jkdHU.cjs → pow-DgrUorRi.cjs} +2 -2
  510. package/dist/{pow-B5-jkdHU.cjs.map → pow-DgrUorRi.cjs.map} +1 -1
  511. package/dist/{proxy-BYIC9BuT.js → proxy-BxkFHwUw.js} +144 -134
  512. package/dist/proxy-BxkFHwUw.js.map +1 -0
  513. package/dist/proxy-BxvUI_9l.cjs +2 -0
  514. package/dist/proxy-BxvUI_9l.cjs.map +1 -0
  515. package/dist/{removeOutliers-DR48e-18.js → removeOutliers-BqW0sPqj.js} +2 -5
  516. package/dist/{removeOutliers-DR48e-18.js.map → removeOutliers-BqW0sPqj.js.map} +1 -1
  517. package/dist/removeOutliers-WELHHqiI.cjs.map +1 -1
  518. package/dist/{sort-DfK1b0F5.js → sort-BIvMlUH1.js} +5 -5
  519. package/dist/{sort-DfK1b0F5.js.map → sort-BIvMlUH1.js.map} +1 -1
  520. package/dist/{string-CRoCZCYa.cjs → string-C-kRh1bQ.cjs} +2 -2
  521. package/dist/{string-CRoCZCYa.cjs.map → string-C-kRh1bQ.cjs.map} +1 -1
  522. package/dist/{string-B8KlVSPX.js → string-C_xJ4Wg4.js} +3 -3
  523. package/dist/{string-B8KlVSPX.js.map → string-C_xJ4Wg4.js.map} +1 -1
  524. package/dist/string2HTML-CPGr_I5E.cjs +3 -0
  525. package/dist/{string2HTML-z7CwHXcx.cjs.map → string2HTML-CPGr_I5E.cjs.map} +1 -1
  526. package/dist/{string2HTML-oFCROsus.js → string2HTML-DhG75NqA.js} +15 -9
  527. package/dist/{string2HTML-oFCROsus.js.map → string2HTML-DhG75NqA.js.map} +1 -1
  528. package/dist/style.css +1 -1
  529. package/dist/{svgDownload-C2-E3yf2.js → svgDownload-BAoarWNt.js} +4 -2
  530. package/dist/{svgDownload-C2-E3yf2.js.map → svgDownload-BAoarWNt.js.map} +1 -1
  531. package/dist/svgDownload-D9zEGjTF.cjs.map +1 -1
  532. package/dist/{threshold-DFfqcDMa.js → threshold-Bgr20hik.js} +2 -2
  533. package/dist/{threshold-DFfqcDMa.js.map → threshold-Bgr20hik.js.map} +1 -1
  534. package/dist/{time-Byw_jYQ7.cjs → time-CZd5YLSP.cjs} +2 -2
  535. package/dist/{time-Byw_jYQ7.cjs.map → time-CZd5YLSP.cjs.map} +1 -1
  536. package/dist/{time-BzJP5SPC.js → time-DCCfQk3V.js} +3 -3
  537. package/dist/{time-BzJP5SPC.js.map → time-DCCfQk3V.js.map} +1 -1
  538. package/dist/transformData.cjs +1 -1
  539. package/dist/transformData.js +3 -3
  540. package/dist/transformDataForAggregation-CE3bAlHU.js +585 -0
  541. package/dist/{transformDataForAggregation-sBpdlX8n.js.map → transformDataForAggregation-CE3bAlHU.js.map} +1 -1
  542. package/dist/transformDataForAggregation-KXGm6flX.cjs.map +1 -1
  543. package/dist/transformDataForGraphFromFile-BExxcITV.js +14 -0
  544. package/dist/{transformDataForGraphFromFile-ComYvzuz.js.map → transformDataForGraphFromFile-BExxcITV.js.map} +1 -1
  545. package/dist/{transformDataForGraphFromFile-DVZodTHd.cjs → transformDataForGraphFromFile-DaJHQCsL.cjs} +2 -2
  546. package/dist/{transformDataForGraphFromFile-DVZodTHd.cjs.map → transformDataForGraphFromFile-DaJHQCsL.cjs.map} +1 -1
  547. package/dist/transformDataForSelect-D8AuvYdf.js.map +1 -1
  548. package/dist/transformDataForSelect-YmStusCI.cjs.map +1 -1
  549. package/dist/uniqBy-BHy4I8PK.js.map +1 -1
  550. package/dist/uniqBy-O05lp2S5.cjs.map +1 -1
  551. package/dist/{use-in-view-DR-UTB96.js → use-in-view-Cxa7y1TH.js} +2 -2
  552. package/dist/use-in-view-Cxa7y1TH.js.map +1 -0
  553. package/dist/use-in-view-QcfiW0w3.cjs +2 -0
  554. package/dist/use-in-view-QcfiW0w3.cjs.map +1 -0
  555. package/dist/utils.cjs +1 -1
  556. package/dist/utils.js +8 -8
  557. package/dist/validateSchema.cjs.map +1 -1
  558. package/dist/validateSchema.js +33 -29
  559. package/dist/validateSchema.js.map +1 -1
  560. package/dist/{x-BBpi7a_7-Dz2vKSfu.cjs → x-BBpi7a_7-mTo40uId.cjs} +2 -2
  561. package/dist/{x-BBpi7a_7-Dz2vKSfu.cjs.map → x-BBpi7a_7-mTo40uId.cjs.map} +1 -1
  562. package/dist/{y-D0sAaVii.js → y-BqfogMAB.js} +3 -3
  563. package/dist/{y-D0sAaVii.js.map → y-BqfogMAB.js.map} +1 -1
  564. package/dist/{zoom-QipiAl5W.js → zoom-C9MFjAaV.js} +5 -5
  565. package/dist/{zoom-QipiAl5W.js.map → zoom-C9MFjAaV.js.map} +1 -1
  566. package/dist/zoom-DPw8bba-.cjs +2 -0
  567. package/dist/{zoom-BiMNsz72.cjs.map → zoom-DPw8bba-.cjs.map} +1 -1
  568. package/package.json +7 -6
  569. package/dist/Axis-4gUOL8B7.js +0 -43
  570. package/dist/Axis-4gUOL8B7.js.map +0 -1
  571. package/dist/Axis-CkNn1wit.cjs +0 -2
  572. package/dist/Axis-CkNn1wit.cjs.map +0 -1
  573. package/dist/AxisTitle-Wkz-xeQL.cjs +0 -2
  574. package/dist/AxisTitle-Wkz-xeQL.cjs.map +0 -1
  575. package/dist/AxisTitle-v6_xcXZ-.js +0 -20
  576. package/dist/AxisTitle-v6_xcXZ-.js.map +0 -1
  577. package/dist/DropdownSelect-6kjXM6oW.js.map +0 -1
  578. package/dist/DropdownSelect-vt8yiB-g.cjs +0 -29
  579. package/dist/DropdownSelect-vt8yiB-g.cjs.map +0 -1
  580. package/dist/EmptyState-36lXXyui.js +0 -22
  581. package/dist/EmptyState-B8IpKGcL.cjs +0 -2
  582. package/dist/GraphEl-2IiUDxjR.js.map +0 -1
  583. package/dist/GraphEl-qrlfGPe3.cjs +0 -2
  584. package/dist/GraphEl-qrlfGPe3.cjs.map +0 -1
  585. package/dist/Modal-Cg8daIlV.js +0 -1030
  586. package/dist/Modal-Cg8daIlV.js.map +0 -1
  587. package/dist/Modal-CuuJdWkD.cjs +0 -46
  588. package/dist/Modal-CuuJdWkD.cjs.map +0 -1
  589. package/dist/ReferenceLine-CPMaAX0r.js +0 -128
  590. package/dist/ReferenceLine-CPMaAX0r.js.map +0 -1
  591. package/dist/ReferenceLine-D04j-zeV.cjs +0 -2
  592. package/dist/ReferenceLine-D04j-zeV.cjs.map +0 -1
  593. package/dist/RegressionLine-CW7iViH2.js +0 -49
  594. package/dist/RegressionLine-CW7iViH2.js.map +0 -1
  595. package/dist/RegressionLine-D-49RaHa.cjs +0 -2
  596. package/dist/RegressionLine-D-49RaHa.cjs.map +0 -1
  597. package/dist/Spinner-Bpz70q_g.js +0 -30
  598. package/dist/Spinner-Bpz70q_g.js.map +0 -1
  599. package/dist/Spinner-C6wLp85s.cjs +0 -2
  600. package/dist/Spinner-C6wLp85s.cjs.map +0 -1
  601. package/dist/Tooltip-6LIdPQGC.js +0 -46
  602. package/dist/Tooltip-6LIdPQGC.js.map +0 -1
  603. package/dist/Tooltip-Cpv0QohJ.cjs +0 -2
  604. package/dist/Tooltip-Cpv0QohJ.cjs.map +0 -1
  605. package/dist/Typography-BDULiwlF.cjs +0 -2
  606. package/dist/Typography-BDULiwlF.cjs.map +0 -1
  607. package/dist/Typography-LmZ9LEpe.js +0 -140
  608. package/dist/Typography-LmZ9LEpe.js.map +0 -1
  609. package/dist/XAxesLabels-CLZnBgSr.cjs +0 -2
  610. package/dist/XAxesLabels-CLZnBgSr.cjs.map +0 -1
  611. package/dist/XAxesLabels-SOSmso5J.js +0 -57
  612. package/dist/XAxesLabels-SOSmso5J.js.map +0 -1
  613. package/dist/XTicksAndGridLines-DuydSnZ_.js +0 -56
  614. package/dist/XTicksAndGridLines-DuydSnZ_.js.map +0 -1
  615. package/dist/XTicksAndGridLines-RKy7BVCO.cjs +0 -2
  616. package/dist/XTicksAndGridLines-RKy7BVCO.cjs.map +0 -1
  617. package/dist/YAxesLabels-DlDyLvhi.js +0 -52
  618. package/dist/YAxesLabels-DlDyLvhi.js.map +0 -1
  619. package/dist/YAxesLabels-Dqd259-t.cjs +0 -2
  620. package/dist/YAxesLabels-Dqd259-t.cjs.map +0 -1
  621. package/dist/YTicksAndGridLines-7t4MKtGw.js +0 -56
  622. package/dist/YTicksAndGridLines-7t4MKtGw.js.map +0 -1
  623. package/dist/YTicksAndGridLines-qGpRo_t1.cjs +0 -2
  624. package/dist/YTicksAndGridLines-qGpRo_t1.cjs.map +0 -1
  625. package/dist/checkIfMultiple-Dko_cBvE.cjs +0 -12
  626. package/dist/checkIfMultiple-Dko_cBvE.cjs.map +0 -1
  627. package/dist/checkIfMultiple-u2SmbiCf.js +0 -912
  628. package/dist/checkIfMultiple-u2SmbiCf.js.map +0 -1
  629. package/dist/customArea-1G1S78s_.cjs +0 -2
  630. package/dist/customArea-x4L4xwLl.js +0 -175
  631. package/dist/fetchAndParseData-Ba-_CgxS.cjs +0 -16
  632. package/dist/getGraphList-DuColTJM.js +0 -265
  633. package/dist/getSliderMarks-CUxPy36E.cjs +0 -6
  634. package/dist/getSliderMarks-CUxPy36E.cjs.map +0 -1
  635. package/dist/getSliderMarks-_pYOWEtO.js +0 -1023
  636. package/dist/getSliderMarks-_pYOWEtO.js.map +0 -1
  637. package/dist/index-9tDEUqOZ.js.map +0 -1
  638. package/dist/index-BHe3wsWF.cjs +0 -2
  639. package/dist/index-Bw_eHBVN.js +0 -77
  640. package/dist/index-C0bpbS4F.cjs +0 -2
  641. package/dist/index-C0bpbS4F.cjs.map +0 -1
  642. package/dist/index-CE9pmfxt.js +0 -430
  643. package/dist/index-CE9pmfxt.js.map +0 -1
  644. package/dist/index-CEJwW3lL.cjs +0 -2
  645. package/dist/index-CEJwW3lL.cjs.map +0 -1
  646. package/dist/index-CHPV5EwG-DBWUSD9b.js.map +0 -1
  647. package/dist/index-CHPV5EwG-DjM48pIC.cjs +0 -44
  648. package/dist/index-CHPV5EwG-DjM48pIC.cjs.map +0 -1
  649. package/dist/index-CQ3e6Ewi.cjs +0 -2
  650. package/dist/index-Cm8NIdOO.cjs +0 -10
  651. package/dist/index-Cm8NIdOO.cjs.map +0 -1
  652. package/dist/index-CoZbeNM9.cjs +0 -2
  653. package/dist/index-CoZbeNM9.cjs.map +0 -1
  654. package/dist/index-Cwgh7i7X.js +0 -122
  655. package/dist/index-Cwgh7i7X.js.map +0 -1
  656. package/dist/index-D72cOtq7.cjs +0 -2
  657. package/dist/index-zZjQEHlm.js +0 -342
  658. package/dist/index-zZjQEHlm.js.map +0 -1
  659. package/dist/ordinal-BOeNbyae.cjs.map +0 -1
  660. package/dist/ordinal-w9Lu4Stb.js.map +0 -1
  661. package/dist/proxy-BYIC9BuT.js.map +0 -1
  662. package/dist/proxy-CKadx4lC.cjs +0 -2
  663. package/dist/proxy-CKadx4lC.cjs.map +0 -1
  664. package/dist/string2HTML-z7CwHXcx.cjs +0 -3
  665. package/dist/transformDataForAggregation-sBpdlX8n.js +0 -755
  666. package/dist/transformDataForGraphFromFile-ComYvzuz.js +0 -24
  667. package/dist/use-in-view-CEwlc_dd.cjs +0 -2
  668. package/dist/use-in-view-CEwlc_dd.cjs.map +0 -1
  669. package/dist/use-in-view-DR-UTB96.js.map +0 -1
  670. package/dist/zoom-BiMNsz72.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"BarGraph.cjs","sources":["../src/Components/Graphs/BarGraph/Horizontal/BarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/Horizontal/BarGraph/index.tsx","../src/Components/Graphs/BarGraph/Horizontal/GroupedBarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/Horizontal/GroupedBarGraph/index.tsx","../src/Components/Graphs/BarGraph/Horizontal/StackedBarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/Horizontal/StackedBarGraph/index.tsx","../src/Components/Graphs/BarGraph/Vertical/BarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/Vertical/BarGraph/index.tsx","../src/Components/Graphs/BarGraph/Vertical/GroupedBarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/Vertical/GroupedBarGraph/index.tsx","../src/Components/Graphs/BarGraph/Vertical/StackedBarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/Vertical/StackedBarGraph/index.tsx","../src/Components/Graphs/BarGraph/index.tsx"],"sourcesContent":["import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n BarGraphDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { XTicksAndGridLines } from '@/Components/Elements/Axes/XTicksAndGridLines';\r\nimport { YAxesLabels } from '@/Components/Elements/Axes/YAxesLabels';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { RefLineX } from '@/Components/Elements/ReferenceLine';\r\n\r\ninterface Props {\r\n data: BarGraphDataType[];\r\n barColor: string[];\r\n colorDomain: string[];\r\n suffix: string;\r\n prefix: string;\r\n barPadding: number;\r\n showValues: boolean;\r\n showTicks: boolean;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n showLabels: boolean;\r\n truncateBy: number;\r\n width: number;\r\n height: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n selectedColor?: string;\r\n maxValue: number;\r\n minValue: number;\r\n highlightedDataPoints: (string | number)[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n labelOrder?: string[];\r\n rtl: boolean;\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n dimmedOpacity: number;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n data,\r\n barColor,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showValues,\r\n showTicks,\r\n leftMargin,\r\n truncateBy,\r\n width,\r\n height,\r\n colorDomain,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n showLabels,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n selectedColor,\r\n highlightedDataPoints,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n labelOrder,\r\n rtl,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n dimmedOpacity,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const margin = {\r\n top: barAxisTitle ? topMargin + 25 : topMargin,\r\n bottom: bottomMargin,\r\n left: leftMargin,\r\n right: rightMargin,\r\n };\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const x = scaleLinear().domain([minValue, maxValue]).range([0, graphWidth]).nice();\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n const y = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphHeight, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphHeight, maxBarThickness * barOrder.length)\r\n : graphHeight,\r\n ])\r\n .paddingInner(barPadding);\r\n const xTicks = x.ticks(noOfTicks);\r\n\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n {showTicks ? (\r\n <XTicksAndGridLines\r\n values={xTicks.filter(d => d !== 0)}\r\n x={xTicks.filter(d => d !== 0).map(d => x(d))}\r\n y1={0 - topMargin}\r\n y2={graphHeight + margin.bottom}\r\n styles={{\r\n gridLines: styles?.xAxis?.gridLines,\r\n labels: styles?.xAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.xAxis?.gridLines,\r\n labels: classNames?.xAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={graphWidth / 2}\r\n y={0 - margin.top + 15}\r\n style={styles?.xAxis?.title}\r\n className={classNames?.xAxis?.title}\r\n text={barAxisTitle}\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(y(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n },\r\n whileInView: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d);\r\n onSeriesMouseClick?.(d);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n >\r\n {d.size ? (\r\n <motion.rect\r\n variants={{\r\n initial: {\r\n width: 0,\r\n x: x(0),\r\n y: y(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n width: d.size >= 0 ? x(d.size) - x(0) : x(0) - x(d.size),\r\n x: d.size >= 0 ? x(0) : x(d.size),\r\n y: y(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n width: 0,\r\n x: x(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n height={y.bandwidth()}\r\n />\r\n ) : null}\r\n {showLabels ? (\r\n <YAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(d.id) || 0}\r\n x={(d.size || 0) < 0 ? x(0) : 0 - margin.left}\r\n width={(d.size || 0) < 0 ? width - x(0) : x(0) + margin.left}\r\n height={y.bandwidth()}\r\n alignment={d.size ? (d.size < 0 ? 'left' : 'right') : 'right'}\r\n style={styles?.yAxis?.labels}\r\n className={classNames?.yAxis?.labels}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n style={{\r\n textAnchor: d.size ? (d.size < 0 ? 'end' : 'start') : 'start',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn(\r\n 'graph-value text-sm',\r\n !valueColor && barColor.length > 1\r\n ? ' fill-primary-gray-600 dark:fill-primary-gray-300'\r\n : '',\r\n classNames?.graphObjectValues,\r\n )}\r\n dx={d.size ? (d.size < 0 ? -5 : 5) : 5}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n x: x(0),\r\n y: (y(`${d.id}`) as number) + y.bandwidth() / 2,\r\n opacity: 0,\r\n fill: valueColor\r\n ? valueColor\r\n : data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n x: d.size ? x(d.size) : x(0),\r\n opacity: 1,\r\n y: (y(`${d.id}`) as number) + y.bandwidth() / 2,\r\n fill: valueColor\r\n ? valueColor\r\n : data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(d.size, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n <Axis\r\n x1={x(minValue < 0 ? 0 : minValue)}\r\n x2={x(minValue < 0 ? 0 : minValue)}\r\n y1={-2.5}\r\n y2={graphHeight + margin.bottom}\r\n classNames={{ axis: classNames?.yAxis?.axis }}\r\n styles={{ axis: styles?.yAxis?.axis }}\r\n />\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineX\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n x={x(el.value as number)}\r\n y1={0 - margin.top}\r\n y2={graphHeight + margin.bottom}\r\n textSide={x(el.value as number) > graphWidth * 0.75 || rtl ? 'left' : 'right'}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n BarGraphDataType,\r\n Languages,\r\n ReferenceDataType,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n data: BarGraphDataType[];\r\n colors?: string | string[];\r\n labelOrder?: string[];\r\n graphTitle?: string | React.ReactNode;\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n width?: number;\r\n height?: number;\r\n minHeight?: number;\r\n suffix?: string;\r\n prefix?: string;\r\n sources?: SourcesDataType[];\r\n barPadding?: number;\r\n showValues?: boolean;\r\n showTicks?: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n truncateBy?: number;\r\n colorDomain?: string[];\r\n colorLegendTitle?: string;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n relativeHeight?: number;\r\n showLabels?: boolean;\r\n showColorScale?: boolean;\r\n maxValue?: number;\r\n minValue?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n graphID?: string;\r\n highlightedDataPoints?: (string | number)[];\r\n dimmedOpacity?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n sortData?: 'asc' | 'desc';\r\n language?: Languages;\r\n showNAColor?: boolean;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n maxNumberOfBars?: number;\r\n minBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n}\r\n\r\nexport function HorizontalBarGraph(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n graphDescription,\r\n barPadding = 0.25,\r\n showValues = true,\r\n showTicks = true,\r\n leftMargin = 100,\r\n rightMargin = 40,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n highlightedDataPoints = [],\r\n padding,\r\n backgroundColor = false,\r\n topMargin = 25,\r\n bottomMargin = 10,\r\n showLabels = true,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale = true,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n sortData,\r\n labelOrder,\r\n language = 'en',\r\n showNAColor = true,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n dimmedOpacity = 0.3,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n } = props;\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(width || entries[0].target.clientWidth || 620);\r\n setSvgHeight(height || entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n setSvgHeight(graphDiv.current.clientHeight || 480);\r\n setSvgWidth(graphDiv.current.clientWidth || 620);\r\n if (!width) resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, [width, height]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex ${width ? 'w-fit grow-0' : 'w-full grow'}`}\r\n dir={language === 'he' || language === 'ar' ? 'rtl' : undefined}\r\n >\r\n <div\r\n className={cn(\r\n `${\r\n !backgroundColor\r\n ? 'bg-transparent '\r\n : backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }ml-auto mr-auto flex flex-col grow h-inherit ${language || 'en'}`,\r\n width ? 'w-fit' : 'w-full',\r\n classNames?.graphContainer,\r\n )}\r\n style={{\r\n ...(styles?.graphContainer || {}),\r\n ...(backgroundColor && backgroundColor !== true ? { backgroundColor } : {}),\r\n }}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={\r\n ariaLabel ||\r\n `${graphTitle ? `The graph shows ${graphTitle}. ` : ''}This is a bar chart. ${\r\n graphDescription ? ` ${graphDescription}` : ''\r\n }`\r\n }\r\n >\r\n <div\r\n className='flex grow'\r\n style={{ padding: backgroundColor ? padding || '1rem' : padding || 0 }}\r\n >\r\n <div className='flex flex-col w-full gap-4 grow justify-between'>\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv.current : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n <div className='grow flex flex-col justify-center gap-3 w-full'>\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale && data.filter(el => el.color).length !== 0 ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorLegendTitle={colorLegendTitle}\r\n colors={\r\n (colors as string[] | undefined) || Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={\r\n colorDomain || (uniqBy(data, 'color', true) as (string | number)[])\r\n }\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={showNAColor}\r\n />\r\n ) : null}\r\n <div\r\n className='flex grow flex-col justify-center w-full leading-0'\r\n ref={graphDiv}\r\n aria-label='Graph area'\r\n >\r\n {(width || svgWidth) && (height || svgHeight) ? (\r\n <Graph\r\n data={\r\n sortData\r\n ? orderBy(\r\n ensureCompleteDataForBarChart(data, timeline.dateFormat || 'yyyy')\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)),\r\n [\r\n d =>\r\n d.size === undefined\r\n ? sortData === 'asc'\r\n ? Infinity\r\n : -Infinity\r\n : d.size,\r\n ],\r\n [sortData],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : ensureCompleteDataForBarChart(data, timeline.dateFormat || 'yyyy')\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n }\r\n barColor={\r\n data.filter(el => el.color).length === 0\r\n ? colors\r\n ? [colors as string]\r\n : [Colors.primaryColors['blue-600']]\r\n : (colors as string[] | undefined) ||\r\n Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={\r\n data.filter(el => el.color).length === 0\r\n ? []\r\n : colorDomain || (uniqBy(data, 'color', true) as string[])\r\n }\r\n width={width || svgWidth}\r\n selectedColor={selectedColor}\r\n height={Math.max(\r\n minHeight,\r\n height ||\r\n (relativeHeight\r\n ? minHeight\r\n ? (width || svgWidth) * relativeHeight > minHeight\r\n ? (width || svgWidth) * relativeHeight\r\n : minHeight\r\n : (width || svgWidth) * relativeHeight\r\n : svgHeight),\r\n )}\r\n suffix={suffix}\r\n prefix={prefix}\r\n barPadding={barPadding}\r\n showValues={showValues}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n ) < 0\r\n ? 0\r\n : Math.max(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n )\r\n }\r\n minValue={\r\n !checkIfNullOrUndefined(minValue)\r\n ? (minValue as number)\r\n : Math.min(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n ) >= 0\r\n ? 0\r\n : Math.min(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n )\r\n }\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n labelOrder={labelOrder}\r\n rtl={language === 'he' || language === 'ar'}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n styles={styles}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n />\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n GroupedBarGraphDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { YAxesLabels } from '@/Components/Elements/Axes/YAxesLabels';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { XTicksAndGridLines } from '@/Components/Elements/Axes/XTicksAndGridLines';\r\nimport { RefLineX } from '@/Components/Elements/ReferenceLine';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n barColors: string[];\r\n barPadding: number;\r\n showTicks: boolean;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n truncateBy: number;\r\n showLabels: boolean;\r\n width: number;\r\n suffix: string;\r\n prefix: string;\r\n showValues: boolean;\r\n height: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n maxValue: number;\r\n minValue: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n selectedColor?: string;\r\n rtl: boolean;\r\n labelOrder?: string[];\r\n maxBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n colorDomain: string[];\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n data,\r\n barColors,\r\n barPadding,\r\n showTicks,\r\n leftMargin,\r\n truncateBy,\r\n width,\r\n height,\r\n suffix,\r\n prefix,\r\n showValues,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n showLabels,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n rtl,\r\n labelOrder,\r\n maxBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n colorDomain,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: barAxisTitle ? topMargin + 25 : topMargin,\r\n bottom: bottomMargin,\r\n left: leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n\r\n const x = scaleLinear().domain([minValue, maxValue]).range([0, graphWidth]).nice();\r\n const y = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n maxBarThickness ? Math.min(graphHeight, maxBarThickness * barOrder.length) : graphHeight,\r\n ])\r\n .paddingInner(barPadding);\r\n const subBarScale = scaleBand()\r\n .domain(data[0].size.map((_d, i) => `${i}`))\r\n .range([0, y.bandwidth()])\r\n .paddingInner(0.1);\r\n const xTicks = x.ticks(noOfTicks);\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n {showTicks ? (\r\n <XTicksAndGridLines\r\n values={xTicks.filter(d => d !== 0)}\r\n x={xTicks.filter(d => d !== 0).map(d => x(d))}\r\n y1={0 - topMargin}\r\n y2={graphHeight + margin.bottom}\r\n styles={{\r\n gridLines: styles?.xAxis?.gridLines,\r\n labels: styles?.xAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.xAxis?.gridLines,\r\n labels: classNames?.xAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={graphWidth / 2}\r\n y={0 - margin.top + 15}\r\n style={styles?.xAxis?.title}\r\n className={classNames?.xAxis?.title}\r\n text={barAxisTitle}\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(y(d.id)) ? (\r\n <motion.g\r\n key={d.label}\r\n variants={{\r\n initial: {\r\n x: 0,\r\n y: y(`${d.id}`),\r\n },\r\n whileInView: {\r\n x: 0,\r\n y: y(`${d.id}`),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {d.size.map((el, j) => (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={`${d.label}-${colorDomain[j] || j}`}\r\n opacity={selectedColor ? (barColors[j] === selectedColor ? 1 : 0.3) : 0.85}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, sizeIndex: j });\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, sizeIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, sizeIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, sizeIndex: j });\r\n }\r\n }\r\n }}\r\n >\r\n {!checkIfNullOrUndefined(el) ? (\r\n <motion.rect\r\n y={subBarScale(`${j}`)}\r\n variants={{\r\n initial: {\r\n width: 0,\r\n x: x(0),\r\n fill: barColors[j],\r\n },\r\n whileInView: {\r\n width: !checkIfNullOrUndefined(el)\r\n ? (el as number) >= 0\r\n ? x(el as number) - x(0)\r\n : x(0) - x(el as number)\r\n : 0,\r\n x: (el as number) >= 0 ? x(0) : x(el as number),\r\n fill: barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n width: 0,\r\n x: x(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n height={subBarScale.bandwidth()}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n y={(subBarScale(`${j}`) as number) + subBarScale.bandwidth() / 2}\r\n style={{\r\n textAnchor: el ? (el < 0 ? 'end' : 'start') : 'start',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dx={el ? (el < 0 ? -5 : 5) : 5}\r\n dy='0.33em'\r\n variants={{\r\n initial: { x: x(0), opacity: 0, fill: valueColor || barColors[j] },\r\n whileInView: {\r\n x: x(el || 0),\r\n opacity: 1,\r\n fill: valueColor || barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(el, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ))}\r\n {showLabels ? (\r\n <YAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={0}\r\n x={0 - margin.left}\r\n width={x(minValue < 0 ? 0 : minValue) + margin.left}\r\n height={y.bandwidth()}\r\n style={styles?.yAxis?.labels}\r\n className={classNames?.yAxis?.labels}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n <Axis\r\n x1={x(minValue < 0 ? 0 : minValue)}\r\n x2={x(minValue < 0 ? 0 : minValue)}\r\n y1={-2.5}\r\n y2={graphHeight + margin.bottom}\r\n classNames={{ axis: classNames?.yAxis?.axis }}\r\n styles={{ axis: styles?.yAxis?.axis }}\r\n />\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineX\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n x={x(el.value as number)}\r\n y1={0 - margin.top}\r\n y2={graphHeight + margin.bottom}\r\n textSide={x(el.value as number) > graphWidth * 0.75 || rtl ? 'left' : 'right'}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\nimport sum from 'lodash.sum';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n GroupedBarGraphDataType,\r\n Languages,\r\n ReferenceDataType,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForStackedBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n colors?: string[];\r\n graphTitle?: string | React.ReactNode;\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n width?: number;\r\n height?: number;\r\n sources?: SourcesDataType[];\r\n barPadding?: number;\r\n showTicks?: boolean;\r\n truncateBy?: number;\r\n colorDomain: string[];\r\n colorLegendTitle?: string;\r\n suffix?: string;\r\n prefix?: string;\r\n showValues?: boolean;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n showLabels?: boolean;\r\n bottomMargin?: number;\r\n relativeHeight?: number;\r\n sortParameter?: number | 'total';\r\n sortData?: 'asc' | 'desc';\r\n showColorScale?: boolean;\r\n minHeight?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n graphID?: string;\r\n maxValue?: number;\r\n minValue?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n labelOrder?: string[];\r\n language?: Languages;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n}\r\n\r\nexport function HorizontalGroupedBarGraph(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n sources,\r\n graphDescription,\r\n barPadding = 0.25,\r\n showTicks = true,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n suffix = '',\r\n prefix = '',\r\n showValues = true,\r\n showColorScale = true,\r\n padding,\r\n backgroundColor = false,\r\n leftMargin = 100,\r\n rightMargin = 40,\r\n topMargin = 25,\r\n bottomMargin = 10,\r\n showLabels = true,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n language = 'en',\r\n labelOrder,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n sortParameter,\r\n sortData,\r\n } = props;\r\n\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(width || entries[0].target.clientWidth || 620);\r\n setSvgHeight(height || entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n setSvgHeight(graphDiv.current.clientHeight || 480);\r\n setSvgWidth(graphDiv.current.clientWidth || 620);\r\n if (!width) resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, [width, height]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex ${width ? 'w-fit grow-0' : 'w-full grow'}`}\r\n dir={language === 'he' || language === 'ar' ? 'rtl' : undefined}\r\n >\r\n <div\r\n className={cn(\r\n `${\r\n !backgroundColor\r\n ? 'bg-transparent '\r\n : backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }ml-auto mr-auto flex flex-col grow h-inherit ${language || 'en'}`,\r\n width ? 'w-fit' : 'w-full',\r\n classNames?.graphContainer,\r\n )}\r\n style={{\r\n ...(styles?.graphContainer || {}),\r\n ...(backgroundColor && backgroundColor !== true ? { backgroundColor } : {}),\r\n }}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={\r\n ariaLabel ||\r\n `${graphTitle ? `The graph shows ${graphTitle}. ` : ''}This is a grouped bar chart. ${\r\n graphDescription ? ` ${graphDescription}` : ''\r\n }`\r\n }\r\n >\r\n <div\r\n className='flex grow'\r\n style={{ padding: backgroundColor ? padding || '1rem' : padding || 0 }}\r\n >\r\n <div className='flex flex-col gap-4 w-full grow justify-between'>\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv.current : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n <div className='grow flex flex-col justify-center gap-3 w-full'>\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorDomain={colorDomain}\r\n colors={colors}\r\n colorLegendTitle={colorLegendTitle}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={false}\r\n />\r\n ) : null}\r\n <div className='w-full grow leading-0' ref={graphDiv} aria-label='Graph area'>\r\n {(width || svgWidth) && (height || svgHeight) ? (\r\n <Graph\r\n data={\r\n sortParameter !== undefined\r\n ? sortParameter === 'total'\r\n ? orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d =>\r\n filterNA ? !d.size.every(item => item == null) : d,\r\n ),\r\n d => sum(d.size.filter(el => !checkIfNullOrUndefined(el))),\r\n [sortData || 'asc'],\r\n )\r\n : orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d =>\r\n filterNA ? !d.size.every(item => item == null) : d,\r\n ),\r\n d =>\r\n checkIfNullOrUndefined(d.size[sortParameter])\r\n ? -Infinity\r\n : d.size[sortParameter],\r\n [sortData || 'asc'],\r\n )\r\n : ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n ).filter(d => (filterNA ? !d.size.every(item => item == null) : d))\r\n }\r\n barColors={colors}\r\n width={width || svgWidth}\r\n height={Math.max(\r\n minHeight,\r\n height ||\r\n (relativeHeight\r\n ? minHeight\r\n ? (width || svgWidth) * relativeHeight > minHeight\r\n ? (width || svgWidth) * relativeHeight\r\n : minHeight\r\n : (width || svgWidth) * relativeHeight\r\n : svgHeight),\r\n )}\r\n suffix={suffix}\r\n prefix={prefix}\r\n showValues={showValues}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data.map(d =>\r\n Math.max(\r\n ...(d.size.filter(\r\n l => !checkIfNullOrUndefined(l),\r\n ) as number[]),\r\n ),\r\n ),\r\n ) < 0\r\n ? 0\r\n : Math.max(\r\n ...data.map(d =>\r\n Math.max(\r\n ...(d.size.filter(\r\n l => !checkIfNullOrUndefined(l),\r\n ) as number[]),\r\n ),\r\n ),\r\n )\r\n }\r\n minValue={\r\n !checkIfNullOrUndefined(minValue)\r\n ? (minValue as number)\r\n : Math.min(\r\n ...data.map(d =>\r\n Math.min(\r\n ...(d.size.filter(\r\n l => !checkIfNullOrUndefined(l),\r\n ) as number[]),\r\n ),\r\n ),\r\n ) >= 0\r\n ? 0\r\n : Math.min(\r\n ...data.map(d =>\r\n Math.min(\r\n ...(d.size.filter(\r\n l => !checkIfNullOrUndefined(l),\r\n ) as number[]),\r\n ),\r\n ),\r\n )\r\n }\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n selectedColor={selectedColor}\r\n labelOrder={labelOrder}\r\n rtl={language === 'he' || language === 'ar'}\r\n maxBarThickness={maxBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n styles={styles}\r\n classNames={classNames}\r\n colorDomain={colorDomain}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport sum from 'lodash.sum';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n GroupedBarGraphDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { getTextColorBasedOnBgColor } from '@/Utils/getTextColorBasedOnBgColor';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { YAxesLabels } from '@/Components/Elements/Axes/YAxesLabels';\r\nimport { XTicksAndGridLines } from '@/Components/Elements/Axes/XTicksAndGridLines';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { RefLineX } from '@/Components/Elements/ReferenceLine';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n barColors: string[];\r\n barPadding: number;\r\n showTicks: boolean;\r\n leftMargin: number;\r\n truncateBy: number;\r\n width: number;\r\n height: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n showLabels: boolean;\r\n bottomMargin: number;\r\n suffix: string;\r\n prefix: string;\r\n showValues: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n maxValue: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n selectedColor?: string;\r\n rtl: boolean;\r\n labelOrder?: string[];\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n colorDomain: string[];\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n data,\r\n barColors,\r\n barPadding,\r\n showTicks,\r\n leftMargin,\r\n rightMargin,\r\n truncateBy,\r\n width,\r\n height,\r\n topMargin,\r\n bottomMargin,\r\n tooltip,\r\n onSeriesMouseOver,\r\n showLabels,\r\n suffix,\r\n prefix,\r\n showValues,\r\n refValues,\r\n maxValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n rtl,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n colorDomain,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: barAxisTitle ? topMargin + 25 : topMargin,\r\n bottom: bottomMargin,\r\n left: leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n\r\n const x = scaleLinear().domain([0, maxValue]).range([0, graphWidth]).nice();\r\n const y = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphHeight, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphHeight, maxBarThickness * barOrder.length)\r\n : graphHeight,\r\n ])\r\n .paddingInner(barPadding);\r\n const xTicks = x.ticks(noOfTicks);\r\n\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n {showTicks ? (\r\n <XTicksAndGridLines\r\n values={xTicks.filter(d => d !== 0)}\r\n x={xTicks.filter(d => d !== 0).map(d => x(d))}\r\n y1={0 - topMargin}\r\n y2={graphHeight + margin.bottom}\r\n styles={{\r\n gridLines: styles?.xAxis?.gridLines,\r\n labels: styles?.xAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.xAxis?.gridLines,\r\n labels: classNames?.xAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={graphWidth / 2}\r\n y={0 - margin.top + 15}\r\n style={styles?.xAxis?.title}\r\n className={classNames?.xAxis?.title}\r\n text={barAxisTitle}\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(y(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-low-opacity undp-viz-g-with-hover'\r\n key={d.label}\r\n variants={{\r\n initial: { x: 0, y: y(`${d.id}`) },\r\n whileInView: {\r\n x: 0,\r\n y: y(`${d.id}`),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {d.size.map((el, j) => (\r\n <motion.g\r\n key={`${d.label}-${colorDomain[j] || j}`}\r\n opacity={selectedColor ? (barColors[j] === selectedColor ? 1 : 0.3) : 1}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, sizeIndex: j });\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, sizeIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, sizeIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, sizeIndex: j });\r\n }\r\n }\r\n }}\r\n >\r\n {el ? (\r\n <motion.rect\r\n key={j}\r\n y={0}\r\n style={{ fill: barColors[j] }}\r\n height={y.bandwidth()}\r\n exit={{\r\n width: 0,\r\n x: x(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n variants={{\r\n initial: {\r\n width: 0,\r\n x: x(0),\r\n fill: barColors[j],\r\n },\r\n whileInView: {\r\n width: x(el || 0),\r\n x: x(\r\n j === 0 ? 0 : sum(d.size.filter((element, k) => k < j && element)),\r\n ),\r\n fill: barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n y={y.bandwidth() / 2}\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n dy='0.33em'\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n variants={{\r\n initial: {\r\n x: x(0),\r\n opacity: 0,\r\n fill: getTextColorBasedOnBgColor(barColors[j]),\r\n },\r\n whileInView: {\r\n x:\r\n x(\r\n j === 0\r\n ? 0\r\n : sum(d.size.filter((element, k) => k < j && element)),\r\n ) +\r\n x(el || 0) / 2,\r\n opacity:\r\n el &&\r\n x(el) /\r\n numberFormattingFunction(el, naLabel, precision, prefix, suffix)\r\n .length >\r\n 12\r\n ? 1\r\n : 0,\r\n fill: getTextColorBasedOnBgColor(barColors[j]),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n >\r\n {numberFormattingFunction(el, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ))}\r\n {showLabels ? (\r\n <YAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={0}\r\n x={0 - margin.left}\r\n width={0 + margin.left}\r\n height={y.bandwidth()}\r\n style={styles?.yAxis?.labels}\r\n className={classNames?.yAxis?.labels}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n className={cn(\r\n 'graph-value graph-value-total text-sm',\r\n !valueColor ? ' fill-primary-gray-700 dark:fill-primary-gray-300' : '',\r\n classNames?.graphObjectValues,\r\n )}\r\n style={{\r\n ...(valueColor ? { fill: valueColor } : {}),\r\n textAnchor: 'start',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n y={y.bandwidth() / 2}\r\n dx={5}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n x: x(0),\r\n opacity: 0,\r\n ...(valueColor ? { fill: valueColor } : {}),\r\n },\r\n whileInView: {\r\n x: x(sum(d.size.map(el => el || 0))),\r\n opacity: 1,\r\n ...(valueColor ? { fill: valueColor } : {}),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n >\r\n {numberFormattingFunction(\r\n sum(d.size.filter(element => element)),\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n <Axis\r\n x1={x(0)}\r\n x2={x(0)}\r\n y1={-2.5}\r\n y2={graphHeight + margin.bottom}\r\n classNames={{ axis: classNames?.yAxis?.axis }}\r\n styles={{ axis: styles?.yAxis?.axis }}\r\n />\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineX\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n x={x(el.value as number)}\r\n y1={0 - margin.top}\r\n y2={graphHeight + margin.bottom}\r\n textSide={x(el.value as number) > graphWidth * 0.75 || rtl ? 'left' : 'right'}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport sum from 'lodash.sum';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport {\r\n GroupedBarGraphDataType,\r\n Languages,\r\n ReferenceDataType,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForStackedBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n colors?: string[];\r\n labelOrder?: string[];\r\n graphTitle?: string | React.ReactNode;\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n width?: number;\r\n height?: number;\r\n sources?: SourcesDataType[];\r\n barPadding?: number;\r\n showTicks?: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n truncateBy?: number;\r\n colorDomain: string[];\r\n colorLegendTitle?: string;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n suffix?: string;\r\n prefix?: string;\r\n showValues?: boolean;\r\n showLabels?: boolean;\r\n relativeHeight?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n graphID?: string;\r\n maxValue?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n language?: Languages;\r\n minHeight?: number;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n sortParameter?: number | 'total';\r\n sortData?: 'asc' | 'desc';\r\n maxNumberOfBars?: number;\r\n minBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n showColorScale?: boolean;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n}\r\n\r\nexport function HorizontalStackedBarGraph(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n sources,\r\n graphDescription,\r\n barPadding = 0.25,\r\n showTicks = true,\r\n leftMargin = 100,\r\n rightMargin = 40,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n backgroundColor = false,\r\n topMargin = 25,\r\n bottomMargin = 10,\r\n tooltip,\r\n onSeriesMouseOver,\r\n suffix = '',\r\n prefix = '',\r\n showLabels = true,\r\n relativeHeight,\r\n showValues = true,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n language = 'en',\r\n labelOrder,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n sortParameter,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n showColorScale = true,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n sortData,\r\n } = props;\r\n\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(width || entries[0].target.clientWidth || 620);\r\n setSvgHeight(height || entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n setSvgHeight(graphDiv.current.clientHeight || 480);\r\n setSvgWidth(graphDiv.current.clientWidth || 620);\r\n if (!width) resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, [width, height]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex ${width ? 'w-fit grow-0' : 'w-full grow'}`}\r\n dir={language === 'he' || language === 'ar' ? 'rtl' : undefined}\r\n >\r\n <div\r\n className={cn(\r\n `${\r\n !backgroundColor\r\n ? 'bg-transparent '\r\n : backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }ml-auto mr-auto flex flex-col grow h-inherit ${language || 'en'}`,\r\n width ? 'w-fit' : 'w-full',\r\n classNames?.graphContainer,\r\n )}\r\n style={{\r\n ...(styles?.graphContainer || {}),\r\n ...(backgroundColor && backgroundColor !== true ? { backgroundColor } : {}),\r\n }}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={\r\n ariaLabel ||\r\n `${graphTitle ? `The graph shows ${graphTitle}. ` : ''}This is a stacked bar chart. ${\r\n graphDescription ? ` ${graphDescription}` : ''\r\n }`\r\n }\r\n >\r\n <div\r\n className='flex grow'\r\n style={{ padding: backgroundColor ? padding || '1rem' : padding || 0 }}\r\n >\r\n <div className='flex flex-col gap-4 w-full grow justify-between'>\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv.current : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n <div className='grow flex flex-col justify-center gap-3 w-full'>\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorDomain={colorDomain}\r\n colors={colors}\r\n colorLegendTitle={colorLegendTitle}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={false}\r\n />\r\n ) : null}\r\n <div className='w-full grow leading-0' ref={graphDiv} aria-label='Graph area'>\r\n {(width || svgWidth) && (height || svgHeight) ? (\r\n <Graph\r\n data={\r\n sortParameter !== undefined\r\n ? sortParameter === 'total'\r\n ? orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d =>\r\n filterNA ? !d.size.every(item => item == null) : d,\r\n ),\r\n d => sum(d.size.filter(el => !checkIfNullOrUndefined(el))),\r\n [sortData || 'asc'],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d =>\r\n filterNA ? !d.size.every(item => item == null) : d,\r\n ),\r\n d =>\r\n checkIfNullOrUndefined(d.size[sortParameter])\r\n ? -Infinity\r\n : d.size[sortParameter],\r\n [sortData || 'asc'],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !d.size.every(item => item == null) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n }\r\n barColors={colors}\r\n width={width || svgWidth}\r\n height={Math.max(\r\n minHeight,\r\n height ||\r\n (relativeHeight\r\n ? minHeight\r\n ? (width || svgWidth) * relativeHeight > minHeight\r\n ? (width || svgWidth) * relativeHeight\r\n : minHeight\r\n : (width || svgWidth) * relativeHeight\r\n : svgHeight),\r\n )}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n showValues={showValues}\r\n suffix={suffix}\r\n prefix={prefix}\r\n refValues={refValues}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data.map(\r\n d => sum(d.size.filter(l => !checkIfNullOrUndefined(l))) || 0,\r\n ),\r\n )\r\n }\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n selectedColor={selectedColor}\r\n rtl={language === 'he' || language === 'ar'}\r\n labelOrder={labelOrder}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n styles={styles}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n colorDomain={colorDomain}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport {\r\n AnimateDataType,\r\n BarGraphDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\n\r\ninterface Props {\r\n data: BarGraphDataType[];\r\n width: number;\r\n height: number;\r\n barColor: string[];\r\n suffix: string;\r\n prefix: string;\r\n barPadding: number;\r\n showLabels: boolean;\r\n showValues: boolean;\r\n showTicks: boolean;\r\n colorDomain: string[];\r\n truncateBy: number;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n refValues?: ReferenceDataType[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n selectedColor?: string;\r\n maxValue: number;\r\n minValue: number;\r\n highlightedDataPoints: (string | number)[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n labelOrder?: string[];\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n dimmedOpacity: number;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n data,\r\n width,\r\n height,\r\n barColor,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showLabels,\r\n showValues,\r\n showTicks,\r\n colorDomain,\r\n truncateBy,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n leftMargin,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n selectedColor,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints,\r\n onSeriesMouseClick,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n dimmedOpacity,\r\n animate,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const y = scaleLinear().domain([minValue, maxValue]).range([graphHeight, 0]).nice();\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * barOrder.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(minValue < 0 ? 0 : minValue)}\r\n y2={y(minValue < 0 ? 0 : minValue)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(\r\n minValue < 0 ? 0 : minValue,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n dx: 0,\r\n dy: maxValue < 0 ? '1em' : -5,\r\n y: y(minValue < 0 ? 0 : minValue),\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map((d, _i) =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n },\r\n whileInView: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d);\r\n onSeriesMouseClick?.(d);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n >\r\n {d.size ? (\r\n <motion.rect\r\n width={x.bandwidth()}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n x: x(`${d.id}`),\r\n y: y(0),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n height: d.size ? Math.abs(y(d.size) - y(0)) : 0,\r\n y: d.size ? (d.size > 0 ? y(d.size) : y(0)) : y(0),\r\n x: x(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n height: 0,\r\n y: y(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n />\r\n ) : null}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={(d.size || 0) < 0 ? 0 : y(0) + 5}\r\n x={x(`${d.id}`) as number}\r\n width={x.bandwidth()}\r\n height={(d.size || 0) < 0 ? y(0) - 5 : margin.bottom}\r\n style={styles?.xAxis?.labels}\r\n className={classNames?.xAxis?.labels}\r\n alignment={(d.size || 0) < 0 ? 'bottom' : 'top'}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn(\r\n 'graph-value text-sm',\r\n !valueColor && barColor.length > 1\r\n ? ' fill-primary-gray-600 dark:fill-primary-gray-300'\r\n : '',\r\n classNames?.graphObjectValues,\r\n )}\r\n dy={d.size ? (d.size >= 0 ? '-5px' : '1em') : '-5px'}\r\n variants={{\r\n initial: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: y(0),\r\n opacity: 0,\r\n fill: valueColor\r\n ? valueColor\r\n : data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: y(d.size || 0),\r\n fill: valueColor\r\n ? valueColor\r\n : data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n opacity: 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(d.size, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n ReferenceDataType,\r\n BarGraphDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n data: BarGraphDataType[];\r\n colors?: string | string[];\r\n graphTitle?: string | React.ReactNode;\r\n labelOrder?: string[];\r\n width?: number;\r\n height?: number;\r\n suffix?: string;\r\n prefix?: string;\r\n sources?: SourcesDataType[];\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n barPadding?: number;\r\n showLabels?: boolean;\r\n showValues?: boolean;\r\n showTicks?: boolean;\r\n colorDomain?: string[];\r\n colorLegendTitle?: string;\r\n truncateBy?: number;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n relativeHeight?: number;\r\n bottomMargin?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n showColorScale?: boolean;\r\n graphID?: string;\r\n maxValue?: number;\r\n minValue?: number;\r\n highlightedDataPoints?: (string | number)[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n sortData?: 'asc' | 'desc';\r\n language?: Languages;\r\n showNAColor?: boolean;\r\n minHeight?: number;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n maxNumberOfBars?: number;\r\n minBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n dimmedOpacity?: number;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n}\r\n\r\nexport function VerticalBarGraph(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n barPadding = 0.25,\r\n showTicks = true,\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n truncateBy = 999,\r\n showLabels = true,\r\n showValues = true,\r\n backgroundColor = false,\r\n suffix = '',\r\n prefix = '',\r\n sources,\r\n graphDescription,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale = true,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints = [],\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n language = 'en',\r\n theme = 'light',\r\n sortData,\r\n labelOrder,\r\n showNAColor = true,\r\n minHeight = 0,\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n dimmedOpacity = 0.3,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n } = props;\r\n\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(width || entries[0].target.clientWidth || 620);\r\n setSvgHeight(height || entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n setSvgHeight(graphDiv.current.clientHeight || 480);\r\n setSvgWidth(graphDiv.current.clientWidth || 620);\r\n if (!width) resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, [width, height]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex ${width ? 'w-fit grow-0' : 'w-full grow'}`}\r\n dir={language === 'he' || language === 'ar' ? 'rtl' : undefined}\r\n >\r\n <div\r\n className={cn(\r\n `${\r\n !backgroundColor\r\n ? 'bg-transparent '\r\n : backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }ml-auto mr-auto flex flex-col grow h-inherit ${language || 'en'}`,\r\n width ? 'w-fit' : 'w-full',\r\n classNames?.graphContainer,\r\n )}\r\n style={{\r\n ...(styles?.graphContainer || {}),\r\n ...(backgroundColor && backgroundColor !== true ? { backgroundColor } : {}),\r\n }}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={\r\n ariaLabel ||\r\n `${graphTitle ? `The graph shows ${graphTitle}. ` : ''}This is a grouped bar chart. ${\r\n graphDescription ? ` ${graphDescription}` : ''\r\n }`\r\n }\r\n >\r\n <div\r\n className='flex grow'\r\n style={{ padding: backgroundColor ? padding || '1rem' : padding || 0 }}\r\n >\r\n <div className='flex flex-col w-full gap-4 grow justify-between'>\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv.current : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n <div className='grow flex flex-col justify-center gap-3 w-full'>\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale && data.filter(el => el.color).length !== 0 ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorLegendTitle={colorLegendTitle}\r\n colors={\r\n (colors as string[] | undefined) || Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={colorDomain || (uniqBy(data, 'color', true) as string[])}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={showNAColor}\r\n />\r\n ) : null}\r\n <div\r\n className='flex grow flex-col justify-center w-full leading-0'\r\n ref={graphDiv}\r\n aria-label='Graph area'\r\n >\r\n {(width || svgWidth) && (height || svgHeight) ? (\r\n <Graph\r\n data={\r\n sortData\r\n ? orderBy(\r\n ensureCompleteDataForBarChart(data, timeline.dateFormat || 'yyyy')\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)),\r\n [\r\n d =>\r\n d.size === undefined\r\n ? sortData === 'asc'\r\n ? -Infinity\r\n : Infinity\r\n : d.size,\r\n ],\r\n [sortData],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : ensureCompleteDataForBarChart(data, timeline.dateFormat || 'yyyy')\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n }\r\n barColor={\r\n data.filter(el => el.color).length === 0\r\n ? colors\r\n ? [colors as string]\r\n : [Colors.primaryColors['blue-600']]\r\n : (colors as string[] | undefined) ||\r\n Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={\r\n data.filter(el => el.color).length === 0\r\n ? []\r\n : colorDomain || (uniqBy(data, 'color', true) as string[])\r\n }\r\n width={width || svgWidth}\r\n refValues={refValues}\r\n height={Math.max(\r\n minHeight,\r\n height ||\r\n (relativeHeight\r\n ? minHeight\r\n ? (width || svgWidth) * relativeHeight > minHeight\r\n ? (width || svgWidth) * relativeHeight\r\n : minHeight\r\n : (width || svgWidth) * relativeHeight\r\n : svgHeight),\r\n )}\r\n suffix={suffix}\r\n prefix={prefix}\r\n barPadding={barPadding}\r\n showLabels={showLabels}\r\n showValues={showValues}\r\n showTicks={showTicks}\r\n truncateBy={truncateBy}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n selectedColor={selectedColor}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n ) < 0\r\n ? 0\r\n : Math.max(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n )\r\n }\r\n minValue={\r\n !checkIfNullOrUndefined(minValue)\r\n ? (minValue as number)\r\n : Math.min(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n ) >= 0\r\n ? 0\r\n : Math.min(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n )\r\n }\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n labelOrder={labelOrder}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n styles={styles}\r\n classNames={classNames}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport {\r\n ReferenceDataType,\r\n GroupedBarGraphDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n} from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n width: number;\r\n height: number;\r\n barColors: string[];\r\n suffix: string;\r\n prefix: string;\r\n barPadding: number;\r\n showLabels: boolean;\r\n showValues: boolean;\r\n showTicks: boolean;\r\n truncateBy: number;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n refValues?: ReferenceDataType[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n maxValue: number;\r\n minValue: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n selectedColor?: string;\r\n labelOrder?: string[];\r\n maxBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n colorDomain: string[];\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n data,\r\n width,\r\n height,\r\n barColors,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showLabels,\r\n showValues,\r\n showTicks,\r\n truncateBy,\r\n leftMargin,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n labelOrder,\r\n maxBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n colorDomain,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const y = scaleLinear().domain([minValue, maxValue]).range([graphHeight, 0]).nice();\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n maxBarThickness ? Math.min(graphWidth, maxBarThickness * barOrder.length) : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const subBarScale = scaleBand()\r\n .domain(data[0].size.map((_d, i) => `${i}`))\r\n .range([0, x.bandwidth()])\r\n .paddingInner(0.1);\r\n const yTicks = y.ticks(noOfTicks);\r\n return (\r\n <>\r\n <motion.svg\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n ref={svgRef}\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(minValue < 0 ? 0 : minValue)}\r\n y2={y(minValue < 0 ? 0 : minValue)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(\r\n minValue < 0 ? 0 : minValue,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n dx: 0,\r\n dy: maxValue < 0 ? '1em' : -5,\r\n y: y(minValue < 0 ? 0 : minValue),\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n key={d.label}\r\n variants={{\r\n initial: {\r\n x: x(`${d.id}`),\r\n y: 0,\r\n },\r\n whileInView: {\r\n x: x(`${d.id}`),\r\n y: 0,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {d.size.map((el, j) => (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={`${d.label}-${colorDomain[j] || j}`}\r\n opacity={selectedColor ? (barColors[j] === selectedColor ? 1 : 0.3) : 0.85}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, sizeIndex: j });\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, sizeIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, sizeIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, sizeIndex: j });\r\n }\r\n }\r\n }}\r\n >\r\n <motion.rect\r\n x={subBarScale(`${j}`)}\r\n width={subBarScale.bandwidth()}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n y: y(0),\r\n fill: barColors[j],\r\n },\r\n whileInView: {\r\n height: !checkIfNullOrUndefined(el)\r\n ? Math.abs(y(el as number) - y(0))\r\n : 0,\r\n y: !checkIfNullOrUndefined(el)\r\n ? (el as number) > 0\r\n ? y(el as number)\r\n : y(0)\r\n : y(0),\r\n fill: barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n height: 0,\r\n y: y(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n {showValues ? (\r\n <motion.text\r\n x={(subBarScale(`${j}`) as number) + subBarScale.bandwidth() / 2}\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dy={el ? (el >= 0 ? '-5px' : '1em') : '-5px'}\r\n variants={{\r\n initial: { y: y(0), opacity: 0, fill: valueColor || barColors[j] },\r\n whileInView: {\r\n y: y(el || 0),\r\n opacity: 1,\r\n fill: valueColor || barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(el, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ))}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(0) + 5}\r\n x={0}\r\n width={x.bandwidth()}\r\n height={margin.bottom}\r\n style={styles?.xAxis?.labels}\r\n className={classNames?.xAxis?.labels}\r\n alignment='top'\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\nimport sum from 'lodash.sum';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n ReferenceDataType,\r\n GroupedBarGraphDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForStackedBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n colors?: string[];\r\n graphTitle?: string | React.ReactNode;\r\n width?: number;\r\n height?: number;\r\n suffix?: string;\r\n prefix?: string;\r\n sources?: SourcesDataType[];\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n barPadding?: number;\r\n showLabels?: boolean;\r\n showValues?: boolean;\r\n showTicks?: boolean;\r\n colorDomain: string[];\r\n colorLegendTitle?: string;\r\n showColorScale?: boolean;\r\n labelOrder?: string[];\r\n truncateBy?: number;\r\n sortParameter?: number | 'total';\r\n sortData?: 'asc' | 'desc';\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n relativeHeight?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n graphID?: string;\r\n maxValue?: number;\r\n minValue?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n language?: Languages;\r\n minHeight?: number;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n}\r\n\r\nexport function VerticalGroupedBarGraph(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n sources,\r\n graphDescription,\r\n barPadding = 0.25,\r\n showTicks = true,\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n truncateBy = 999,\r\n showLabels = true,\r\n showValues = true,\r\n backgroundColor = false,\r\n suffix = '',\r\n prefix = '',\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n language = 'en',\r\n theme = 'light',\r\n labelOrder,\r\n minHeight = 0,\r\n maxBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n showColorScale = true,\r\n animate = false,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n sortParameter,\r\n sortData,\r\n } = props;\r\n\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(width || entries[0].target.clientWidth || 620);\r\n setSvgHeight(height || entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n setSvgHeight(graphDiv.current.clientHeight || 480);\r\n setSvgWidth(graphDiv.current.clientWidth || 620);\r\n if (!width) resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, [width, height]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex ${width ? 'w-fit grow-0' : 'w-full grow'}`}\r\n dir={language === 'he' || language === 'ar' ? 'rtl' : undefined}\r\n >\r\n <div\r\n className={cn(\r\n `${\r\n !backgroundColor\r\n ? 'bg-transparent '\r\n : backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }ml-auto mr-auto flex flex-col grow h-inherit ${language || 'en'}`,\r\n width ? 'w-fit' : 'w-full',\r\n classNames?.graphContainer,\r\n )}\r\n style={{\r\n ...(styles?.graphContainer || {}),\r\n ...(backgroundColor && backgroundColor !== true ? { backgroundColor } : {}),\r\n }}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={\r\n ariaLabel ||\r\n `${graphTitle ? `The graph shows ${graphTitle}. ` : ''}This is a grouped bar chart. ${\r\n graphDescription ? ` ${graphDescription}` : ''\r\n }`\r\n }\r\n >\r\n <div\r\n className='flex grow'\r\n style={{ padding: backgroundColor ? padding || '1rem' : padding || 0 }}\r\n >\r\n <div className='flex flex-col w-full gap-4 grow justify-between'>\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv.current : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n <div className='grow flex flex-col justify-center gap-3 w-full'>\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorDomain={colorDomain}\r\n colors={colors}\r\n colorLegendTitle={colorLegendTitle}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={false}\r\n />\r\n ) : null}\r\n <div className='w-full grow leading-0' ref={graphDiv} aria-label='Graph area'>\r\n {(width || svgWidth) && (height || svgHeight) ? (\r\n <Graph\r\n data={\r\n sortParameter !== undefined\r\n ? sortParameter === 'total'\r\n ? orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d =>\r\n filterNA ? !d.size.every(item => item == null) : d,\r\n ),\r\n d => sum(d.size.filter(el => !checkIfNullOrUndefined(el))),\r\n [sortData || 'asc'],\r\n )\r\n : orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d =>\r\n filterNA ? !d.size.every(item => item == null) : d,\r\n ),\r\n d =>\r\n checkIfNullOrUndefined(d.size[sortParameter])\r\n ? -Infinity\r\n : d.size[sortParameter],\r\n [sortData || 'asc'],\r\n )\r\n : ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n ).filter(d => (filterNA ? !d.size.every(item => item == null) : d))\r\n }\r\n barColors={colors}\r\n width={width || svgWidth}\r\n height={Math.max(\r\n minHeight,\r\n height ||\r\n (relativeHeight\r\n ? minHeight\r\n ? (width || svgWidth) * relativeHeight > minHeight\r\n ? (width || svgWidth) * relativeHeight\r\n : minHeight\r\n : (width || svgWidth) * relativeHeight\r\n : svgHeight),\r\n )}\r\n suffix={suffix}\r\n prefix={prefix}\r\n barPadding={barPadding}\r\n showLabels={showLabels}\r\n showValues={showValues}\r\n showTicks={showTicks}\r\n truncateBy={truncateBy}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data.map(d =>\r\n Math.max(\r\n ...(d.size.filter(\r\n l => !checkIfNullOrUndefined(l),\r\n ) as number[]),\r\n ),\r\n ),\r\n ) < 0\r\n ? 0\r\n : Math.max(\r\n ...data.map(d =>\r\n Math.max(\r\n ...(d.size.filter(\r\n l => !checkIfNullOrUndefined(l),\r\n ) as number[]),\r\n ),\r\n ),\r\n )\r\n }\r\n minValue={\r\n !checkIfNullOrUndefined(minValue)\r\n ? (minValue as number)\r\n : Math.min(\r\n ...data.map(d =>\r\n Math.min(\r\n ...(d.size.filter(\r\n l => !checkIfNullOrUndefined(l),\r\n ) as number[]),\r\n ),\r\n ),\r\n ) >= 0\r\n ? 0\r\n : Math.min(\r\n ...data.map(d =>\r\n Math.min(\r\n ...(d.size.filter(\r\n l => !checkIfNullOrUndefined(l),\r\n ) as number[]),\r\n ),\r\n ),\r\n )\r\n }\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n selectedColor={selectedColor}\r\n labelOrder={labelOrder}\r\n maxBarThickness={maxBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n styles={styles}\r\n classNames={classNames}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n colorDomain={colorDomain}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport sum from 'lodash.sum';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport {\r\n AnimateDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n GroupedBarGraphDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { getTextColorBasedOnBgColor } from '@/Utils/getTextColorBasedOnBgColor';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n width: number;\r\n height: number;\r\n barColors: string[];\r\n barPadding: number;\r\n showLabels: boolean;\r\n showTicks: boolean;\r\n truncateBy: number;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n suffix: string;\r\n prefix: string;\r\n showValues: boolean;\r\n refValues?: ReferenceDataType[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n maxValue: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n selectedColor?: string;\r\n labelOrder?: string[];\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n colorDomain: string[];\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n data,\r\n width,\r\n height,\r\n barColors,\r\n barPadding,\r\n showLabels,\r\n showTicks,\r\n truncateBy,\r\n leftMargin,\r\n topMargin,\r\n bottomMargin,\r\n rightMargin,\r\n tooltip,\r\n onSeriesMouseOver,\r\n suffix,\r\n prefix,\r\n showValues,\r\n refValues,\r\n maxValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n colorDomain,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const y = scaleLinear().domain([0, maxValue]).range([graphHeight, 0]).nice();\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * barOrder.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n return (\r\n <>\r\n <motion.svg\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n ref={svgRef}\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(0)}\r\n y2={y(0)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(0, naLabel, precision, prefix, suffix)}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n y: y(0),\r\n dx: 0,\r\n dy: -5,\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-low-opacity undp-viz-g-with-hover'\r\n key={d.label}\r\n variants={{\r\n initial: { x: x(`${d.id}`), y: 0 },\r\n whileInView: {\r\n x: x(`${d.id}`),\r\n y: 0,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n transition={{ duration: animate.duration }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {d.size.map((el, j) => (\r\n <motion.g\r\n key={`${d.label}-${colorDomain[j] || j}`}\r\n opacity={selectedColor ? (barColors[j] === selectedColor ? 1 : 0.3) : 1}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, sizeIndex: j });\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, sizeIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, sizeIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, sizeIndex: j });\r\n }\r\n }\r\n }}\r\n >\r\n <motion.rect\r\n x={0}\r\n width={x.bandwidth()}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n fill: barColors[j],\r\n y: y(0),\r\n },\r\n whileInView: {\r\n height: Math.abs(\r\n y(sum(d.size.filter((element, k) => k <= j && element))) -\r\n y(sum(d.size.filter((element, k) => k < j && element))),\r\n ),\r\n y: y(sum(d.size.filter((element, k) => k <= j && element))),\r\n fill: barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n height: 0,\r\n y: y(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n />\r\n {showValues ? (\r\n <motion.text\r\n x={x.bandwidth() / 2}\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n y: y(0),\r\n opacity: 0,\r\n fill: getTextColorBasedOnBgColor(barColors[j]),\r\n },\r\n whileInView: {\r\n y:\r\n y(sum(d.size.filter((element, k) => k <= j && element))) +\r\n Math.abs(\r\n y(sum(d.size.filter((element, k) => k <= j && element))) -\r\n y(sum(d.size.filter((element, k) => k < j && element))),\r\n ) /\r\n 2,\r\n opacity:\r\n el &&\r\n Math.abs(\r\n y(sum(d.size.filter((element, k) => k <= j && element))) -\r\n y(sum(d.size.filter((element, k) => k < j && element))),\r\n ) > 20\r\n ? 1\r\n : 0,\r\n fill: getTextColorBasedOnBgColor(barColors[j]),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {numberFormattingFunction(el, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ))}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(0) + 5}\r\n x={0}\r\n width={x.bandwidth()}\r\n height={margin.bottom}\r\n style={styles?.xAxis?.labels}\r\n className={classNames?.xAxis?.labels}\r\n alignment='top'\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n x={x.bandwidth() / 2}\r\n dy={-10}\r\n className={cn(\r\n 'graph-value graph-value-total',\r\n !valueColor\r\n ? 'fill-primary-gray-700 dark:fill-primary-gray-300 text-sm'\r\n : 'text-sm',\r\n classNames?.graphObjectValues,\r\n )}\r\n variants={{\r\n initial: {\r\n y: y(0),\r\n opacity: 0,\r\n ...(valueColor && { fill: valueColor }),\r\n },\r\n whileInView: {\r\n y: y(sum(d.size.map(el => el || 0))),\r\n opacity: 1,\r\n ...(valueColor && { fill: valueColor }),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n >\r\n {numberFormattingFunction(\r\n sum(d.size.filter(element => element)),\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport sum from 'lodash.sum';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n ReferenceDataType,\r\n GroupedBarGraphDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForStackedBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n colors?: string[];\r\n graphTitle?: string | React.ReactNode;\r\n width?: number;\r\n labelOrder?: string[];\r\n height?: number;\r\n sources?: SourcesDataType[];\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n barPadding?: number;\r\n showLabels?: boolean;\r\n showTicks?: boolean;\r\n colorDomain: string[];\r\n colorLegendTitle?: string;\r\n showColorScale?: boolean;\r\n truncateBy?: number;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n showValues?: boolean;\r\n suffix?: string;\r\n prefix?: string;\r\n relativeHeight?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n graphID?: string;\r\n maxValue?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n language?: Languages;\r\n minHeight?: number;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n sortParameter?: number | 'total';\r\n sortData?: 'asc' | 'desc';\r\n maxNumberOfBars?: number;\r\n minBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n}\r\n\r\nexport function VerticalStackedBarGraph(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n sources,\r\n graphDescription,\r\n barPadding = 0.25,\r\n showTicks = true,\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n truncateBy = 999,\r\n showLabels = true,\r\n showValues = true,\r\n backgroundColor = false,\r\n showColorScale = true,\r\n suffix = '',\r\n prefix = '',\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n tooltip,\r\n onSeriesMouseOver,\r\n relativeHeight,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n language = 'en',\r\n theme = 'light',\r\n labelOrder,\r\n minHeight = 0,\r\n maxBarThickness,\r\n sortParameter,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n sortData,\r\n } = props;\r\n\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(width || entries[0].target.clientWidth || 620);\r\n setSvgHeight(height || entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n setSvgHeight(graphDiv.current.clientHeight || 480);\r\n setSvgWidth(graphDiv.current.clientWidth || 620);\r\n if (!width) resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, [width, height]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex ${width ? 'w-fit grow-0' : 'w-full grow'}`}\r\n dir={language === 'he' || language === 'ar' ? 'rtl' : undefined}\r\n >\r\n <div\r\n className={cn(\r\n `${\r\n !backgroundColor\r\n ? 'bg-transparent '\r\n : backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }ml-auto mr-auto flex flex-col grow h-inherit ${language || 'en'}`,\r\n width ? 'w-fit' : 'w-full',\r\n classNames?.graphContainer,\r\n )}\r\n style={{\r\n ...(styles?.graphContainer || {}),\r\n ...(backgroundColor && backgroundColor !== true ? { backgroundColor } : {}),\r\n }}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={\r\n ariaLabel ||\r\n `${graphTitle ? `The graph shows ${graphTitle}. ` : ''}This is a stacked bar chart. ${\r\n graphDescription ? ` ${graphDescription}` : ''\r\n }`\r\n }\r\n >\r\n <div style={{ padding: backgroundColor ? padding || '1rem' : padding || 0 }}>\r\n <div className='flex flex-col w-full gap-4 grow justify-between'>\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv.current : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n <div className='grow flex flex-col justify-center gap-3 w-full'>\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorDomain={colorDomain}\r\n colors={colors}\r\n colorLegendTitle={colorLegendTitle}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={false}\r\n />\r\n ) : null}\r\n <div className='w-full grow leading-0' ref={graphDiv} aria-label='Graph area'>\r\n {(width || svgWidth) && (height || svgHeight) ? (\r\n <Graph\r\n data={\r\n sortParameter !== undefined\r\n ? sortParameter === 'total'\r\n ? orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d =>\r\n filterNA ? !d.size.every(item => item == null) : d,\r\n ),\r\n d => sum(d.size.filter(el => !checkIfNullOrUndefined(el))),\r\n [sortData || 'asc'],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d =>\r\n filterNA ? !d.size.every(item => item == null) : d,\r\n ),\r\n d =>\r\n checkIfNullOrUndefined(d.size[sortParameter])\r\n ? -Infinity\r\n : d.size[sortParameter],\r\n [sortData || 'asc'],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d => (filterNA ? !d.size.every(item => item == null) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n }\r\n barColors={colors}\r\n width={width || svgWidth}\r\n height={Math.max(\r\n minHeight,\r\n height ||\r\n (relativeHeight\r\n ? minHeight\r\n ? (width || svgWidth) * relativeHeight > minHeight\r\n ? (width || svgWidth) * relativeHeight\r\n : minHeight\r\n : (width || svgWidth) * relativeHeight\r\n : svgHeight),\r\n )}\r\n barPadding={barPadding}\r\n showLabels={showLabels}\r\n showTicks={showTicks}\r\n truncateBy={truncateBy}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n showValues={showValues}\r\n suffix={suffix}\r\n prefix={prefix}\r\n refValues={refValues}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data.map(\r\n d => sum(d.size.filter(l => !checkIfNullOrUndefined(l))) || 0,\r\n ),\r\n )\r\n }\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n selectedColor={selectedColor}\r\n labelOrder={labelOrder}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n styles={styles}\r\n classNames={classNames}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n colorDomain={colorDomain}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { HorizontalBarGraph } from './Horizontal/BarGraph';\r\nimport { HorizontalGroupedBarGraph } from './Horizontal/GroupedBarGraph';\r\nimport { HorizontalStackedBarGraph } from './Horizontal/StackedBarGraph';\r\nimport { VerticalBarGraph } from './Vertical/BarGraph';\r\nimport { VerticalGroupedBarGraph } from './Vertical/GroupedBarGraph';\r\nimport { VerticalStackedBarGraph } from './Vertical/StackedBarGraph';\r\n\r\nimport {\r\n ReferenceDataType,\r\n BarGraphDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n GroupedBarGraphDataType,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: BarGraphDataType[];\r\n\r\n /** Orientation of the graph */\r\n orientation?: 'vertical' | 'horizontal';\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Color or array of colors for bars */\r\n colors?: string | string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Color of value labels */\r\n valueColor?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n /** Minimum thickness of bars */\r\n minBarThickness?: number;\r\n /** Maximum number of bars shown in the graph */\r\n maxNumberOfBars?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n minValue?: number;\r\n /** Truncate labels by specified length */\r\n truncateBy?: number;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Toggle visibility of NA color in the color scale. This is only applicable if the data props hae color parameter and showColorScale prop is true */\r\n showNAColor?: boolean;\r\n /** Data points to highlight. Use the label value from data to highlight the data point */\r\n highlightedDataPoints?: (string | number)[];\r\n /** Defines the opacity of the non-highlighted data */\r\n dimmedOpacity?: number;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Sorting order for data. This is overwritten by labelOrder prop. */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if data point which are undefined or has value null are filtered out. */\r\n filterNA?: boolean;\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** Configures playback and slider controls for animating the chart over time. The data must have a key date for it to work properly. */\r\n timeline?: TimelineDataType;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function SimpleBarGraph(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n barPadding,\r\n showTicks,\r\n leftMargin,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n truncateBy,\r\n showLabels,\r\n showValues,\r\n backgroundColor,\r\n suffix,\r\n prefix,\r\n sources,\r\n graphDescription,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints,\r\n onSeriesMouseClick,\r\n graphDownload,\r\n dataDownload,\r\n language,\r\n theme,\r\n sortData,\r\n labelOrder,\r\n showNAColor,\r\n minHeight,\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n valueColor,\r\n orientation = 'vertical',\r\n styles,\r\n classNames,\r\n filterNA,\r\n animate,\r\n dimmedOpacity,\r\n precision,\r\n customLayers,\r\n timeline,\r\n naLabel,\r\n } = props;\r\n\r\n if (orientation === 'vertical')\r\n return (\r\n <VerticalBarGraph\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n showValues={showValues}\r\n backgroundColor={backgroundColor}\r\n suffix={suffix}\r\n prefix={prefix}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n padding={padding}\r\n relativeHeight={relativeHeight}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n showColorScale={showColorScale}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n theme={theme}\r\n sortData={sortData}\r\n labelOrder={labelOrder}\r\n showNAColor={showNAColor}\r\n minHeight={minHeight}\r\n maxBarThickness={maxBarThickness}\r\n maxNumberOfBars={maxNumberOfBars}\r\n minBarThickness={minBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n />\r\n );\r\n return (\r\n <HorizontalBarGraph\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n showValues={showValues}\r\n backgroundColor={backgroundColor}\r\n suffix={suffix}\r\n prefix={prefix}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n padding={padding}\r\n relativeHeight={relativeHeight}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n showColorScale={showColorScale}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n theme={theme}\r\n sortData={sortData}\r\n labelOrder={labelOrder}\r\n showNAColor={showNAColor}\r\n minHeight={minHeight}\r\n maxBarThickness={maxBarThickness}\r\n maxNumberOfBars={maxNumberOfBars}\r\n minBarThickness={minBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n />\r\n );\r\n}\r\n\r\ninterface GroupedBarChartProps {\r\n // Data\r\n /** Array of data objects */\r\n data: GroupedBarGraphDataType[];\r\n\r\n /** Orientation of the graph */\r\n orientation?: 'vertical' | 'horizontal';\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Array of colors for different bars in the group */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Color of value labels */\r\n valueColor?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n minValue?: number;\r\n /** Truncate labels by specified length */\r\n truncateBy?: number;\r\n /** Toggles if data points which have all the values as undefined or null are filtered out. */\r\n filterNA?: boolean;\r\n /** Parameter to sort the data. If a number is provided, it refers to the index of the size array to determine which value to sort by. If set to total, it sorts by the sum of all the values. */\r\n sortParameter?: number | 'total';\r\n /** Sorting order for data. This is overwritten by labelOrder prop. */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** Configures playback and slider controls for animating the chart over time. The data must have a key date for it to work properly. */\r\n timeline?: TimelineDataType;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function GroupedBarGraph(props: GroupedBarChartProps) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n sources,\r\n graphDescription,\r\n barPadding,\r\n showTicks,\r\n truncateBy,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n suffix,\r\n prefix,\r\n showValues,\r\n padding,\r\n backgroundColor,\r\n leftMargin,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n showLabels,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload,\r\n dataDownload,\r\n language,\r\n labelOrder,\r\n minHeight,\r\n theme,\r\n sortParameter,\r\n sortData,\r\n maxBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n valueColor,\r\n orientation = 'vertical',\r\n styles,\r\n classNames,\r\n filterNA,\r\n animate,\r\n precision,\r\n customLayers,\r\n showColorScale,\r\n timeline,\r\n naLabel,\r\n } = props;\r\n\r\n if (orientation === 'vertical')\r\n return (\r\n <VerticalGroupedBarGraph\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n truncateBy={truncateBy}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n suffix={suffix}\r\n prefix={prefix}\r\n showValues={showValues}\r\n padding={padding}\r\n backgroundColor={backgroundColor}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n sortParameter={sortParameter}\r\n sortData={sortData}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n showLabels={showLabels}\r\n relativeHeight={relativeHeight}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n labelOrder={labelOrder}\r\n minHeight={minHeight}\r\n theme={theme}\r\n maxBarThickness={maxBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n precision={precision}\r\n customLayers={customLayers}\r\n showColorScale={showColorScale}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n />\r\n );\r\n return (\r\n <HorizontalGroupedBarGraph\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n sortParameter={sortParameter}\r\n sortData={sortData}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n truncateBy={truncateBy}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n suffix={suffix}\r\n prefix={prefix}\r\n showValues={showValues}\r\n padding={padding}\r\n backgroundColor={backgroundColor}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n showLabels={showLabels}\r\n relativeHeight={relativeHeight}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n labelOrder={labelOrder}\r\n minHeight={minHeight}\r\n theme={theme}\r\n maxBarThickness={maxBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n precision={precision}\r\n customLayers={customLayers}\r\n showColorScale={showColorScale}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n />\r\n );\r\n}\r\n\r\ninterface StackedBarChartProps {\r\n // Data\r\n /** Array of data objects */\r\n data: GroupedBarGraphDataType[];\r\n\r\n /** Orientation of the graph */\r\n orientation?: 'vertical' | 'horizontal';\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Array of colors for different bars in the group */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Color of value labels */\r\n valueColor?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n /** Minimum thickness of bars */\r\n minBarThickness?: number;\r\n /** Maximum number of bars shown in the graph */\r\n maxNumberOfBars?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n truncateBy?: number;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Parameter to sort the data. If a number is provided, it refers to the index of the size array to determine which value to sort by. If set to total, it sorts by the sum of all the values. */\r\n sortParameter?: number | 'total';\r\n /** Sorting order for data. This is overwritten by labelOrder prop. */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if data points which have all the values as undefined or null are filtered out. */\r\n filterNA?: boolean;\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** Configures playback and slider controls for animating the chart over time. The data must have a key date for it to work properly. */\r\n timeline?: TimelineDataType;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function StackedBarGraph(props: StackedBarChartProps) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n sources,\r\n graphDescription,\r\n barPadding,\r\n showTicks,\r\n leftMargin,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n truncateBy,\r\n showLabels,\r\n showValues,\r\n backgroundColor,\r\n suffix,\r\n prefix,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n tooltip,\r\n onSeriesMouseOver,\r\n relativeHeight,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n onSeriesMouseClick,\r\n graphDownload,\r\n dataDownload,\r\n language,\r\n theme,\r\n labelOrder,\r\n minHeight,\r\n maxBarThickness,\r\n sortParameter,\r\n sortData,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n valueColor,\r\n orientation = 'vertical',\r\n styles,\r\n classNames,\r\n filterNA,\r\n animate,\r\n precision,\r\n customLayers,\r\n showColorScale,\r\n timeline,\r\n naLabel,\r\n } = props;\r\n\r\n if (orientation === 'vertical')\r\n return (\r\n <VerticalStackedBarGraph\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n showValues={showValues}\r\n backgroundColor={backgroundColor}\r\n suffix={suffix}\r\n prefix={prefix}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n padding={padding}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n relativeHeight={relativeHeight}\r\n refValues={refValues}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n theme={theme}\r\n labelOrder={labelOrder}\r\n minHeight={minHeight}\r\n maxBarThickness={maxBarThickness}\r\n sortParameter={sortParameter}\r\n sortData={sortData}\r\n maxNumberOfBars={maxNumberOfBars}\r\n minBarThickness={minBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n precision={precision}\r\n customLayers={customLayers}\r\n showColorScale={showColorScale}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n />\r\n );\r\n return (\r\n <HorizontalStackedBarGraph\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n showValues={showValues}\r\n backgroundColor={backgroundColor}\r\n suffix={suffix}\r\n prefix={prefix}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n padding={padding}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n relativeHeight={relativeHeight}\r\n refValues={refValues}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n theme={theme}\r\n labelOrder={labelOrder}\r\n minHeight={minHeight}\r\n maxBarThickness={maxBarThickness}\r\n sortParameter={sortParameter}\r\n sortData={sortData}\r\n maxNumberOfBars={maxNumberOfBars}\r\n minBarThickness={minBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n precision={precision}\r\n customLayers={customLayers}\r\n showColorScale={showColorScale}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n />\r\n );\r\n}\r\n"],"names":["Graph","props","data","barColor","suffix","prefix","barPadding","showValues","showTicks","leftMargin","truncateBy","width","height","colorDomain","rightMargin","topMargin","bottomMargin","showLabels","tooltip","onSeriesMouseOver","refValues","selectedColor","highlightedDataPoints","maxValue","minValue","onSeriesMouseClick","labelOrder","rtl","maxBarThickness","minBarThickness","resetSelectionOnDoubleClick","detailsOnClick","barAxisTitle","valueColor","noOfTicks","styles","classNames","animate","dimmedOpacity","precision","customLayers","naLabel","svgRef","useRef","isInView","useInView","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","margin","graphWidth","graphHeight","dataWithId","d","i","x","scaleLinear","barOrder","y","scaleBand","xTicks","jsxs","Fragment","jsx","motion","XTicksAndGridLines","AxisTitle","AnimatePresence","checkIfNullOrUndefined","event","isEqual","el","Colors","YAxesLabels","cn","Axis","RefLineX","Tooltip","Modal","string2HTML","HorizontalBarGraph","graphTitle","colors","sources","graphDescription","footNote","colorLegendTitle","padding","backgroundColor","relativeHeight","showColorScale","graphID","graphDownload","dataDownload","sortData","language","showNAColor","minHeight","theme","maxNumberOfBars","ariaLabel","filterNA","timeline","svgWidth","setSvgWidth","svgHeight","setSvgHeight","play","setPlay","uniqDatesSorted","sort","uniqBy","parse","a","b","ascending","index","setIndex","setSelectedColor","graphDiv","graphParentDiv","useEffect","resizeObserver","entries","interval","markObj","getSliderMarks","GraphHeader","Pause","Play","SliderUI","nextValue","EmptyState","ColorLegendWithMouseOver","orderBy","ensureCompleteDataForBarChart","format","_d","GraphFooter","barColors","subBarScale","j","numberFormattingFunction","HorizontalGroupedBarGraph","sortParameter","ensureCompleteDataForStackedBarChart","item","sum","l","element","k","getTextColorBasedOnBgColor","HorizontalStackedBarGraph","yTicks","YTicksAndGridLines","_i","XAxesLabels","RefLineY","VerticalBarGraph","VerticalGroupedBarGraph","VerticalStackedBarGraph","SimpleBarGraph","orientation","GroupedBarGraph","StackedBarGraph"],"mappings":"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"}
1
+ {"version":3,"file":"BarGraph.cjs","sources":["../src/Components/Graphs/BarGraph/GroupedBarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/GroupedBarGraph/index.tsx","../src/Components/Graphs/BarGraph/SimpleBarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/SimpleBarGraph/index.tsx","../src/Components/Graphs/BarGraph/StackedBarGraph/Graph.tsx","../src/Components/Graphs/BarGraph/StackedBarGraph/index.tsx","../src/Components/Graphs/BarGraph/index.tsx"],"sourcesContent":["import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n GroupedBarGraphDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { YAxesLabels } from '@/Components/Elements/Axes/YAxesLabels';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { XTicksAndGridLines } from '@/Components/Elements/Axes/XTicksAndGridLines';\r\nimport { RefLineX, RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n barColors: string[];\r\n barPadding: number;\r\n showTicks: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n truncateBy: number;\r\n showLabels: boolean;\r\n width: number;\r\n suffix: string;\r\n prefix: string;\r\n showValues: boolean;\r\n height: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n maxValue: number;\r\n minValue: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n selectedColor?: string;\r\n rtl: boolean;\r\n labelOrder?: string[];\r\n maxBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n colorDomain: string[];\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function HorizontalGraph(props: Props) {\r\n const {\r\n data,\r\n leftMargin = 100,\r\n rightMargin = 40,\r\n topMargin = 25,\r\n bottomMargin = 10,\r\n barColors,\r\n barPadding,\r\n showTicks,\r\n truncateBy,\r\n width,\r\n height,\r\n suffix,\r\n prefix,\r\n showValues,\r\n showLabels,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n rtl,\r\n labelOrder,\r\n maxBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n colorDomain,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: barAxisTitle ? topMargin + 25 : topMargin,\r\n bottom: bottomMargin,\r\n left: leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n\r\n const x = scaleLinear().domain([minValue, maxValue]).range([0, graphWidth]).nice();\r\n const y = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n maxBarThickness ? Math.min(graphHeight, maxBarThickness * barOrder.length) : graphHeight,\r\n ])\r\n .paddingInner(barPadding);\r\n const subBarScale = scaleBand()\r\n .domain(data[0].size.map((_d, i) => `${i}`))\r\n .range([0, y.bandwidth()])\r\n .paddingInner(0.1);\r\n const xTicks = x.ticks(noOfTicks);\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n {showTicks ? (\r\n <XTicksAndGridLines\r\n values={xTicks.filter(d => d !== 0)}\r\n x={xTicks.filter(d => d !== 0).map(d => x(d))}\r\n y1={0 - topMargin}\r\n y2={graphHeight + margin.bottom}\r\n styles={{\r\n gridLines: styles?.xAxis?.gridLines,\r\n labels: styles?.xAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.xAxis?.gridLines,\r\n labels: classNames?.xAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={graphWidth / 2}\r\n y={0 - margin.top + 15}\r\n style={styles?.xAxis?.title}\r\n className={classNames?.xAxis?.title}\r\n text={barAxisTitle}\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(y(d.id)) ? (\r\n <motion.g\r\n key={d.label}\r\n variants={{\r\n initial: {\r\n x: 0,\r\n y: y(`${d.id}`),\r\n },\r\n whileInView: {\r\n x: 0,\r\n y: y(`${d.id}`),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {d.size.map((el, j) => (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={`${d.label}-${colorDomain[j] || j}`}\r\n opacity={selectedColor ? (barColors[j] === selectedColor ? 1 : 0.3) : 0.85}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, sizeIndex: j });\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, sizeIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, sizeIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, sizeIndex: j });\r\n }\r\n }\r\n }}\r\n >\r\n {!checkIfNullOrUndefined(el) ? (\r\n <motion.rect\r\n y={subBarScale(`${j}`)}\r\n variants={{\r\n initial: {\r\n width: 0,\r\n x: x(0),\r\n fill: barColors[j],\r\n },\r\n whileInView: {\r\n width: !checkIfNullOrUndefined(el)\r\n ? (el as number) >= 0\r\n ? x(el as number) - x(0)\r\n : x(0) - x(el as number)\r\n : 0,\r\n x: (el as number) >= 0 ? x(0) : x(el as number),\r\n fill: barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n width: 0,\r\n x: x(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n height={subBarScale.bandwidth()}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n y={(subBarScale(`${j}`) as number) + subBarScale.bandwidth() / 2}\r\n style={{\r\n textAnchor: el ? (el < 0 ? 'end' : 'start') : 'start',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dx={el ? (el < 0 ? -5 : 5) : 5}\r\n dy='0.33em'\r\n variants={{\r\n initial: { x: x(0), opacity: 0, fill: valueColor || barColors[j] },\r\n whileInView: {\r\n x: x(el || 0),\r\n opacity: 1,\r\n fill: valueColor || barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(el, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ))}\r\n {showLabels ? (\r\n <YAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={0}\r\n x={0 - margin.left}\r\n width={x(minValue < 0 ? 0 : minValue) + margin.left}\r\n height={y.bandwidth()}\r\n style={styles?.yAxis?.labels}\r\n className={classNames?.yAxis?.labels}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n <Axis\r\n x1={x(minValue < 0 ? 0 : minValue)}\r\n x2={x(minValue < 0 ? 0 : minValue)}\r\n y1={-2.5}\r\n y2={graphHeight + margin.bottom}\r\n classNames={{ axis: classNames?.yAxis?.axis }}\r\n styles={{ axis: styles?.yAxis?.axis }}\r\n />\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineX\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n x={x(el.value as number)}\r\n y1={0 - margin.top}\r\n y2={graphHeight + margin.bottom}\r\n textSide={x(el.value as number) > graphWidth * 0.75 || rtl ? 'left' : 'right'}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n\r\nexport function VerticalGraph(props: Props) {\r\n const {\r\n data,\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n width,\r\n height,\r\n barColors,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showLabels,\r\n showValues,\r\n showTicks,\r\n truncateBy,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n labelOrder,\r\n maxBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n colorDomain,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const y = scaleLinear().domain([minValue, maxValue]).range([graphHeight, 0]).nice();\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n maxBarThickness ? Math.min(graphWidth, maxBarThickness * barOrder.length) : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const subBarScale = scaleBand()\r\n .domain(data[0].size.map((_d, i) => `${i}`))\r\n .range([0, x.bandwidth()])\r\n .paddingInner(0.1);\r\n const yTicks = y.ticks(noOfTicks);\r\n return (\r\n <>\r\n <motion.svg\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n ref={svgRef}\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(minValue < 0 ? 0 : minValue)}\r\n y2={y(minValue < 0 ? 0 : minValue)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(\r\n minValue < 0 ? 0 : minValue,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n dx: 0,\r\n dy: maxValue < 0 ? '1em' : -5,\r\n y: y(minValue < 0 ? 0 : minValue),\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n key={d.label}\r\n variants={{\r\n initial: {\r\n x: x(`${d.id}`),\r\n y: 0,\r\n },\r\n whileInView: {\r\n x: x(`${d.id}`),\r\n y: 0,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {d.size.map((el, j) => (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={`${d.label}-${colorDomain[j] || j}`}\r\n opacity={selectedColor ? (barColors[j] === selectedColor ? 1 : 0.3) : 0.85}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, sizeIndex: j });\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, sizeIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, sizeIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, sizeIndex: j });\r\n }\r\n }\r\n }}\r\n >\r\n <motion.rect\r\n x={subBarScale(`${j}`)}\r\n width={subBarScale.bandwidth()}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n y: y(0),\r\n fill: barColors[j],\r\n },\r\n whileInView: {\r\n height: !checkIfNullOrUndefined(el)\r\n ? Math.abs(y(el as number) - y(0))\r\n : 0,\r\n y: !checkIfNullOrUndefined(el)\r\n ? (el as number) > 0\r\n ? y(el as number)\r\n : y(0)\r\n : y(0),\r\n fill: barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n height: 0,\r\n y: y(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n {showValues ? (\r\n <motion.text\r\n x={(subBarScale(`${j}`) as number) + subBarScale.bandwidth() / 2}\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dy={el ? (el >= 0 ? '-5px' : '1em') : '-5px'}\r\n variants={{\r\n initial: { y: y(0), opacity: 0, fill: valueColor || barColors[j] },\r\n whileInView: {\r\n y: y(el || 0),\r\n opacity: 1,\r\n fill: valueColor || barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(el, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ))}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(0) + 5}\r\n x={0}\r\n width={x.bandwidth()}\r\n height={margin.bottom}\r\n style={styles?.xAxis?.labels}\r\n className={classNames?.xAxis?.labels}\r\n alignment='top'\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\nimport sum from 'lodash.sum';\r\n\r\nimport { HorizontalGraph, VerticalGraph } from './Graph';\r\n\r\nimport {\r\n GroupedBarGraphDataType,\r\n Languages,\r\n ReferenceDataType,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForStackedBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\nimport { GraphArea, GraphContainer } from '@/Components/Elements/GraphContainer';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n colors?: string[];\r\n graphTitle?: string | React.ReactNode;\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n width?: number;\r\n height?: number;\r\n sources?: SourcesDataType[];\r\n barPadding?: number;\r\n showTicks?: boolean;\r\n truncateBy?: number;\r\n colorDomain: string[];\r\n colorLegendTitle?: string;\r\n suffix?: string;\r\n prefix?: string;\r\n showValues?: boolean;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n showLabels?: boolean;\r\n bottomMargin?: number;\r\n relativeHeight?: number;\r\n sortParameter?: number | 'total';\r\n sortData?: 'asc' | 'desc';\r\n showColorScale?: boolean;\r\n minHeight?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n graphID?: string;\r\n maxValue?: number;\r\n minValue?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n labelOrder?: string[];\r\n language?: Languages;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n orientation?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport function GroupedBarGraphEl(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n sources,\r\n graphDescription,\r\n barPadding = 0.25,\r\n showTicks = true,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n suffix = '',\r\n prefix = '',\r\n showValues = true,\r\n showColorScale = true,\r\n padding,\r\n backgroundColor = false,\r\n leftMargin,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n showLabels = true,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n language = 'en',\r\n labelOrder,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n sortParameter,\r\n sortData,\r\n orientation = 'vertical',\r\n } = props;\r\n\r\n const Comp = orientation === 'horizontal' ? HorizontalGraph : VerticalGraph;\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(entries[0].target.clientWidth || 620);\r\n setSvgHeight(entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <GraphContainer\r\n className={classNames?.graphContainer}\r\n style={styles?.graphContainer}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={ariaLabel}\r\n backgroundColor={backgroundColor}\r\n theme={theme}\r\n language={language}\r\n minHeight={minHeight}\r\n width={width}\r\n height={height}\r\n relativeHeight={relativeHeight}\r\n padding={padding}\r\n >\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n <div className='grow flex flex-col justify-center gap-3 w-full'>\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorDomain={colorDomain}\r\n colors={colors}\r\n colorLegendTitle={colorLegendTitle}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={false}\r\n className={classNames?.colorLegend}\r\n />\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {svgWidth && svgHeight ? (\r\n <Comp\r\n data={\r\n sortParameter !== undefined\r\n ? sortParameter === 'total'\r\n ? orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !d.size.every(item => item == null) : d)),\r\n d => sum(d.size.filter(el => !checkIfNullOrUndefined(el))),\r\n [sortData || 'asc'],\r\n )\r\n : orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !d.size.every(item => item == null) : d)),\r\n d =>\r\n checkIfNullOrUndefined(d.size[sortParameter])\r\n ? -Infinity\r\n : d.size[sortParameter],\r\n [sortData || 'asc'],\r\n )\r\n : ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n ).filter(d => (filterNA ? !d.size.every(item => item == null) : d))\r\n }\r\n barColors={colors}\r\n width={width || svgWidth}\r\n height={Math.max(\r\n minHeight,\r\n height ||\r\n (relativeHeight\r\n ? minHeight\r\n ? (width || svgWidth) * relativeHeight > minHeight\r\n ? (width || svgWidth) * relativeHeight\r\n : minHeight\r\n : (width || svgWidth) * relativeHeight\r\n : svgHeight),\r\n )}\r\n suffix={suffix}\r\n prefix={prefix}\r\n showValues={showValues}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data.map(d =>\r\n Math.max(\r\n ...(d.size.filter(l => !checkIfNullOrUndefined(l)) as number[]),\r\n ),\r\n ),\r\n ) < 0\r\n ? 0\r\n : Math.max(\r\n ...data.map(d =>\r\n Math.max(\r\n ...(d.size.filter(l => !checkIfNullOrUndefined(l)) as number[]),\r\n ),\r\n ),\r\n )\r\n }\r\n minValue={\r\n !checkIfNullOrUndefined(minValue)\r\n ? (minValue as number)\r\n : Math.min(\r\n ...data.map(d =>\r\n Math.min(\r\n ...(d.size.filter(l => !checkIfNullOrUndefined(l)) as number[]),\r\n ),\r\n ),\r\n ) >= 0\r\n ? 0\r\n : Math.min(\r\n ...data.map(d =>\r\n Math.min(\r\n ...(d.size.filter(l => !checkIfNullOrUndefined(l)) as number[]),\r\n ),\r\n ),\r\n )\r\n }\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n selectedColor={selectedColor}\r\n labelOrder={labelOrder}\r\n rtl={language === 'he' || language === 'ar'}\r\n maxBarThickness={maxBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n styles={styles}\r\n classNames={classNames}\r\n colorDomain={colorDomain}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n </>\r\n )}\r\n </div>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n","import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n BarGraphDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { XTicksAndGridLines } from '@/Components/Elements/Axes/XTicksAndGridLines';\r\nimport { YAxesLabels } from '@/Components/Elements/Axes/YAxesLabels';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { RefLineX, RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\n\r\ninterface Props {\r\n data: BarGraphDataType[];\r\n barColor: string[];\r\n colorDomain: string[];\r\n suffix: string;\r\n prefix: string;\r\n barPadding: number;\r\n showValues: boolean;\r\n showTicks: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n showLabels: boolean;\r\n truncateBy: number;\r\n width: number;\r\n height: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n selectedColor?: string;\r\n maxValue: number;\r\n minValue: number;\r\n highlightedDataPoints: (string | number)[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n labelOrder?: string[];\r\n rtl: boolean;\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n dimmedOpacity: number;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function HorizontalGraph(props: Props) {\r\n const {\r\n data,\r\n barColor,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showValues,\r\n showTicks,\r\n truncateBy,\r\n width,\r\n height,\r\n colorDomain,\r\n topMargin = 25,\r\n bottomMargin = 10,\r\n leftMargin = 100,\r\n rightMargin = 40,\r\n showLabels,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n selectedColor,\r\n highlightedDataPoints,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n labelOrder,\r\n rtl,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n dimmedOpacity,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const margin = {\r\n top: barAxisTitle ? topMargin + 25 : topMargin,\r\n bottom: bottomMargin,\r\n left: leftMargin,\r\n right: rightMargin,\r\n };\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const x = scaleLinear().domain([minValue, maxValue]).range([0, graphWidth]).nice();\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n const y = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphHeight, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphHeight, maxBarThickness * barOrder.length)\r\n : graphHeight,\r\n ])\r\n .paddingInner(barPadding);\r\n const xTicks = x.ticks(noOfTicks);\r\n\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n {showTicks ? (\r\n <XTicksAndGridLines\r\n values={xTicks.filter(d => d !== 0)}\r\n x={xTicks.filter(d => d !== 0).map(d => x(d))}\r\n y1={0 - topMargin}\r\n y2={graphHeight + margin.bottom}\r\n styles={{\r\n gridLines: styles?.xAxis?.gridLines,\r\n labels: styles?.xAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.xAxis?.gridLines,\r\n labels: classNames?.xAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={graphWidth / 2}\r\n y={0 - margin.top + 15}\r\n style={styles?.xAxis?.title}\r\n className={classNames?.xAxis?.title}\r\n text={barAxisTitle}\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(y(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n },\r\n whileInView: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d);\r\n onSeriesMouseClick?.(d);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n >\r\n {d.size ? (\r\n <motion.rect\r\n variants={{\r\n initial: {\r\n width: 0,\r\n x: x(0),\r\n y: y(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n width: d.size >= 0 ? x(d.size) - x(0) : x(0) - x(d.size),\r\n x: d.size >= 0 ? x(0) : x(d.size),\r\n y: y(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n width: 0,\r\n x: x(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n height={y.bandwidth()}\r\n />\r\n ) : null}\r\n {showLabels ? (\r\n <YAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(d.id) || 0}\r\n x={(d.size || 0) < 0 ? x(0) : 0 - margin.left}\r\n width={(d.size || 0) < 0 ? width - x(0) : x(0) + margin.left}\r\n height={y.bandwidth()}\r\n alignment={d.size ? (d.size < 0 ? 'left' : 'right') : 'right'}\r\n style={styles?.yAxis?.labels}\r\n className={classNames?.yAxis?.labels}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n style={{\r\n textAnchor: d.size ? (d.size < 0 ? 'end' : 'start') : 'start',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn(\r\n 'graph-value text-sm',\r\n !valueColor && barColor.length > 1\r\n ? ' fill-primary-gray-600 dark:fill-primary-gray-300'\r\n : '',\r\n classNames?.graphObjectValues,\r\n )}\r\n dx={d.size ? (d.size < 0 ? -5 : 5) : 5}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n x: x(0),\r\n y: (y(`${d.id}`) as number) + y.bandwidth() / 2,\r\n opacity: 0,\r\n fill: valueColor\r\n ? valueColor\r\n : data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n x: d.size ? x(d.size) : x(0),\r\n opacity: 1,\r\n y: (y(`${d.id}`) as number) + y.bandwidth() / 2,\r\n fill: valueColor\r\n ? valueColor\r\n : data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(d.size, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n <Axis\r\n x1={x(minValue < 0 ? 0 : minValue)}\r\n x2={x(minValue < 0 ? 0 : minValue)}\r\n y1={-2.5}\r\n y2={graphHeight + margin.bottom}\r\n classNames={{ axis: classNames?.yAxis?.axis }}\r\n styles={{ axis: styles?.yAxis?.axis }}\r\n />\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineX\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n x={x(el.value as number)}\r\n y1={0 - margin.top}\r\n y2={graphHeight + margin.bottom}\r\n textSide={x(el.value as number) > graphWidth * 0.75 || rtl ? 'left' : 'right'}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n\r\nexport function VerticalGraph(props: Props) {\r\n const {\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n data,\r\n width,\r\n height,\r\n barColor,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showLabels,\r\n showValues,\r\n showTicks,\r\n colorDomain,\r\n truncateBy,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n selectedColor,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints,\r\n onSeriesMouseClick,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n dimmedOpacity,\r\n animate,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const y = scaleLinear().domain([minValue, maxValue]).range([graphHeight, 0]).nice();\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * barOrder.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(minValue < 0 ? 0 : minValue)}\r\n y2={y(minValue < 0 ? 0 : minValue)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(\r\n minValue < 0 ? 0 : minValue,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n dx: 0,\r\n dy: maxValue < 0 ? '1em' : -5,\r\n y: y(minValue < 0 ? 0 : minValue),\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map((d, _i) =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n },\r\n whileInView: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d);\r\n onSeriesMouseClick?.(d);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n >\r\n {d.size ? (\r\n <motion.rect\r\n width={x.bandwidth()}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n x: x(`${d.id}`),\r\n y: y(0),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n height: d.size ? Math.abs(y(d.size) - y(0)) : 0,\r\n y: d.size ? (d.size > 0 ? y(d.size) : y(0)) : y(0),\r\n x: x(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n height: 0,\r\n y: y(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n />\r\n ) : null}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={(d.size || 0) < 0 ? 0 : y(0) + 5}\r\n x={x(`${d.id}`) as number}\r\n width={x.bandwidth()}\r\n height={(d.size || 0) < 0 ? y(0) - 5 : margin.bottom}\r\n style={styles?.xAxis?.labels}\r\n className={classNames?.xAxis?.labels}\r\n alignment={(d.size || 0) < 0 ? 'bottom' : 'top'}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn(\r\n 'graph-value text-sm',\r\n !valueColor && barColor.length > 1\r\n ? ' fill-primary-gray-600 dark:fill-primary-gray-300'\r\n : '',\r\n classNames?.graphObjectValues,\r\n )}\r\n dy={d.size ? (d.size >= 0 ? '-5px' : '1em') : '-5px'}\r\n variants={{\r\n initial: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: y(0),\r\n opacity: 0,\r\n fill: valueColor\r\n ? valueColor\r\n : data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: y(d.size || 0),\r\n fill: valueColor\r\n ? valueColor\r\n : data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n opacity: 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(d.size, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\n\r\nimport { HorizontalGraph, VerticalGraph } from './Graph';\r\n\r\nimport {\r\n BarGraphDataType,\r\n Languages,\r\n ReferenceDataType,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\nimport { GraphArea, GraphContainer } from '@/Components/Elements/GraphContainer';\r\n\r\ninterface Props {\r\n data: BarGraphDataType[];\r\n colors?: string | string[];\r\n labelOrder?: string[];\r\n graphTitle?: string | React.ReactNode;\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n width?: number;\r\n height?: number;\r\n minHeight?: number;\r\n suffix?: string;\r\n prefix?: string;\r\n sources?: SourcesDataType[];\r\n barPadding?: number;\r\n showValues?: boolean;\r\n showTicks?: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n truncateBy?: number;\r\n colorDomain?: string[];\r\n colorLegendTitle?: string;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n relativeHeight?: number;\r\n showLabels?: boolean;\r\n showColorScale?: boolean;\r\n maxValue?: number;\r\n minValue?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n graphID?: string;\r\n highlightedDataPoints?: (string | number)[];\r\n dimmedOpacity?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n sortData?: 'asc' | 'desc';\r\n language?: Languages;\r\n showNAColor?: boolean;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n maxNumberOfBars?: number;\r\n minBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n orientation?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport function SimpleBarGraphEl(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n graphDescription,\r\n barPadding = 0.25,\r\n showValues = true,\r\n showTicks = true,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n highlightedDataPoints = [],\r\n padding,\r\n backgroundColor = false,\r\n topMargin,\r\n bottomMargin,\r\n leftMargin,\r\n rightMargin,\r\n showLabels = true,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale = true,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n sortData,\r\n labelOrder,\r\n language = 'en',\r\n showNAColor = true,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n dimmedOpacity = 0.3,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n orientation = 'vertical',\r\n } = props;\r\n const Comp = orientation === 'horizontal' ? HorizontalGraph : VerticalGraph;\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(entries[0].target.clientWidth || 620);\r\n setSvgHeight(entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <GraphContainer\r\n className={classNames?.graphContainer}\r\n style={styles?.graphContainer}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={ariaLabel}\r\n backgroundColor={backgroundColor}\r\n theme={theme}\r\n language={language}\r\n minHeight={minHeight}\r\n width={width}\r\n height={height}\r\n relativeHeight={relativeHeight}\r\n padding={padding}\r\n >\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center pb-4' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale && data.filter(el => el.color).length !== 0 ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorLegendTitle={colorLegendTitle}\r\n colors={(colors as string[] | undefined) || Colors[theme].categoricalColors.colors}\r\n colorDomain={colorDomain || (uniqBy(data, 'color', true) as (string | number)[])}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={showNAColor}\r\n className={classNames?.colorLegend}\r\n />\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {svgWidth && svgHeight ? (\r\n <Comp\r\n data={\r\n sortData\r\n ? orderBy(\r\n ensureCompleteDataForBarChart(data, timeline.dateFormat || 'yyyy')\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)),\r\n [\r\n d =>\r\n d.size === undefined\r\n ? sortData === 'asc'\r\n ? (orientation === 'horizontal' ? 1 : -1) * Infinity\r\n : (orientation === 'horizontal' ? -1 : 1) * Infinity\r\n : d.size,\r\n ],\r\n [sortData],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : ensureCompleteDataForBarChart(data, timeline.dateFormat || 'yyyy')\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n }\r\n barColor={\r\n data.filter(el => el.color).length === 0\r\n ? colors\r\n ? [colors as string]\r\n : [Colors.primaryColors['blue-600']]\r\n : (colors as string[] | undefined) || Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={\r\n data.filter(el => el.color).length === 0\r\n ? []\r\n : colorDomain || (uniqBy(data, 'color', true) as string[])\r\n }\r\n selectedColor={selectedColor}\r\n width={svgWidth}\r\n height={svgHeight}\r\n suffix={suffix}\r\n prefix={prefix}\r\n barPadding={barPadding}\r\n showValues={showValues}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n ) < 0\r\n ? 0\r\n : Math.max(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n )\r\n }\r\n minValue={\r\n !checkIfNullOrUndefined(minValue)\r\n ? (minValue as number)\r\n : Math.min(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n ) >= 0\r\n ? 0\r\n : Math.min(\r\n ...data\r\n .filter(d => !checkIfNullOrUndefined(d.size))\r\n .map(d => d.size as number),\r\n )\r\n }\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n labelOrder={labelOrder}\r\n rtl={language === 'he' || language === 'ar'}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n styles={styles}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n </>\r\n )}\r\n {sources || footNote ? (\r\n <GraphFooter\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n","import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport sum from 'lodash.sum';\r\nimport { useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n GroupedBarGraphDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { getTextColorBasedOnBgColor } from '@/Utils/getTextColorBasedOnBgColor';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\nimport { YAxesLabels } from '@/Components/Elements/Axes/YAxesLabels';\r\nimport { XTicksAndGridLines } from '@/Components/Elements/Axes/XTicksAndGridLines';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { RefLineX, RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n barColors: string[];\r\n barPadding: number;\r\n showTicks: boolean;\r\n leftMargin?: number;\r\n truncateBy: number;\r\n width: number;\r\n height: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n showLabels: boolean;\r\n bottomMargin?: number;\r\n suffix: string;\r\n prefix: string;\r\n showValues: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n maxValue: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n selectedColor?: string;\r\n rtl: boolean;\r\n labelOrder?: string[];\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n resetSelectionOnDoubleClick: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n colorDomain: string[];\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\n\r\nexport function HorizontalGraph(props: Props) {\r\n const {\r\n data,\r\n barColors,\r\n barPadding,\r\n showTicks,\r\n topMargin = 25,\r\n bottomMargin = 10,\r\n leftMargin = 100,\r\n rightMargin = 40,\r\n truncateBy,\r\n width,\r\n height,\r\n tooltip,\r\n onSeriesMouseOver,\r\n showLabels,\r\n suffix,\r\n prefix,\r\n showValues,\r\n refValues,\r\n maxValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n rtl,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n colorDomain,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: barAxisTitle ? topMargin + 25 : topMargin,\r\n bottom: bottomMargin,\r\n left: leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n\r\n const x = scaleLinear().domain([0, maxValue]).range([0, graphWidth]).nice();\r\n const y = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphHeight, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphHeight, maxBarThickness * barOrder.length)\r\n : graphHeight,\r\n ])\r\n .paddingInner(barPadding);\r\n const xTicks = x.ticks(noOfTicks);\r\n\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n {showTicks ? (\r\n <XTicksAndGridLines\r\n values={xTicks.filter(d => d !== 0)}\r\n x={xTicks.filter(d => d !== 0).map(d => x(d))}\r\n y1={0 - topMargin}\r\n y2={graphHeight + margin.bottom}\r\n styles={{\r\n gridLines: styles?.xAxis?.gridLines,\r\n labels: styles?.xAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.xAxis?.gridLines,\r\n labels: classNames?.xAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={graphWidth / 2}\r\n y={0 - margin.top + 15}\r\n style={styles?.xAxis?.title}\r\n className={classNames?.xAxis?.title}\r\n text={barAxisTitle}\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(y(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-low-opacity undp-viz-g-with-hover'\r\n key={d.label}\r\n variants={{\r\n initial: { x: 0, y: y(`${d.id}`) },\r\n whileInView: {\r\n x: 0,\r\n y: y(`${d.id}`),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {d.size.map((el, j) => (\r\n <motion.g\r\n key={`${d.label}-${colorDomain[j] || j}`}\r\n opacity={selectedColor ? (barColors[j] === selectedColor ? 1 : 0.3) : 1}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, sizeIndex: j });\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, sizeIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, sizeIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, sizeIndex: j });\r\n }\r\n }\r\n }}\r\n >\r\n {el ? (\r\n <motion.rect\r\n key={j}\r\n y={0}\r\n style={{ fill: barColors[j] }}\r\n height={y.bandwidth()}\r\n exit={{\r\n width: 0,\r\n x: x(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n variants={{\r\n initial: {\r\n width: 0,\r\n x: x(0),\r\n fill: barColors[j],\r\n },\r\n whileInView: {\r\n width: x(el || 0),\r\n x: x(\r\n j === 0 ? 0 : sum(d.size.filter((element, k) => k < j && element)),\r\n ),\r\n fill: barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n y={y.bandwidth() / 2}\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n dy='0.33em'\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n variants={{\r\n initial: {\r\n x: x(0),\r\n opacity: 0,\r\n fill: getTextColorBasedOnBgColor(barColors[j]),\r\n },\r\n whileInView: {\r\n x:\r\n x(\r\n j === 0\r\n ? 0\r\n : sum(d.size.filter((element, k) => k < j && element)),\r\n ) +\r\n x(el || 0) / 2,\r\n opacity:\r\n el &&\r\n x(el) /\r\n numberFormattingFunction(el, naLabel, precision, prefix, suffix)\r\n .length >\r\n 12\r\n ? 1\r\n : 0,\r\n fill: getTextColorBasedOnBgColor(barColors[j]),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n >\r\n {numberFormattingFunction(el, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ))}\r\n {showLabels ? (\r\n <YAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={0}\r\n x={0 - margin.left}\r\n width={0 + margin.left}\r\n height={y.bandwidth()}\r\n style={styles?.yAxis?.labels}\r\n className={classNames?.yAxis?.labels}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n className={cn(\r\n 'graph-value graph-value-total text-sm',\r\n !valueColor ? ' fill-primary-gray-700 dark:fill-primary-gray-300' : '',\r\n classNames?.graphObjectValues,\r\n )}\r\n style={{\r\n ...(valueColor ? { fill: valueColor } : {}),\r\n textAnchor: 'start',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n y={y.bandwidth() / 2}\r\n dx={5}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n x: x(0),\r\n opacity: 0,\r\n ...(valueColor ? { fill: valueColor } : {}),\r\n },\r\n whileInView: {\r\n x: x(sum(d.size.map(el => el || 0))),\r\n opacity: 1,\r\n ...(valueColor ? { fill: valueColor } : {}),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n >\r\n {numberFormattingFunction(\r\n sum(d.size.filter(element => element)),\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n <Axis\r\n x1={x(0)}\r\n x2={x(0)}\r\n y1={-2.5}\r\n y2={graphHeight + margin.bottom}\r\n classNames={{ axis: classNames?.yAxis?.axis }}\r\n styles={{ axis: styles?.yAxis?.axis }}\r\n />\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineX\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n x={x(el.value as number)}\r\n y1={0 - margin.top}\r\n y2={graphHeight + margin.bottom}\r\n textSide={x(el.value as number) > graphWidth * 0.75 || rtl ? 'left' : 'right'}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n\r\nexport function VerticalGraph(props: Props) {\r\n const {\r\n data,\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n width,\r\n height,\r\n barColors,\r\n barPadding,\r\n showLabels,\r\n showTicks,\r\n truncateBy,\r\n tooltip,\r\n onSeriesMouseOver,\r\n suffix,\r\n prefix,\r\n showValues,\r\n refValues,\r\n maxValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n valueColor,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n animate,\r\n colorDomain,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const y = scaleLinear().domain([0, maxValue]).range([graphHeight, 0]).nice();\r\n const dataWithId = data.map((d, i) => ({\r\n ...d,\r\n id: labelOrder ? `${d.label}` : `${i}`,\r\n }));\r\n const barOrder = labelOrder || dataWithId.map(d => `${d.id}`);\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * barOrder.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n return (\r\n <>\r\n <motion.svg\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n ref={svgRef}\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(0)}\r\n y2={y(0)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(0, naLabel, precision, prefix, suffix)}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n y: y(0),\r\n dx: 0,\r\n dy: -5,\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-low-opacity undp-viz-g-with-hover'\r\n key={d.label}\r\n variants={{\r\n initial: { x: x(`${d.id}`), y: 0 },\r\n whileInView: {\r\n x: x(`${d.id}`),\r\n y: 0,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n transition={{ duration: animate.duration }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {d.size.map((el, j) => (\r\n <motion.g\r\n key={`${d.label}-${colorDomain[j] || j}`}\r\n opacity={selectedColor ? (barColors[j] === selectedColor ? 1 : 0.3) : 1}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, sizeIndex: j });\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, sizeIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, sizeIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, sizeIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, sizeIndex: j });\r\n }\r\n }\r\n }}\r\n >\r\n <motion.rect\r\n x={0}\r\n width={x.bandwidth()}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n fill: barColors[j],\r\n y: y(0),\r\n },\r\n whileInView: {\r\n height: Math.abs(\r\n y(sum(d.size.filter((element, k) => k <= j && element))) -\r\n y(sum(d.size.filter((element, k) => k < j && element))),\r\n ),\r\n y: y(sum(d.size.filter((element, k) => k <= j && element))),\r\n fill: barColors[j],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n height: 0,\r\n y: y(0),\r\n transition: { duration: animate.duration },\r\n }}\r\n />\r\n {showValues ? (\r\n <motion.text\r\n x={x.bandwidth() / 2}\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n y: y(0),\r\n opacity: 0,\r\n fill: getTextColorBasedOnBgColor(barColors[j]),\r\n },\r\n whileInView: {\r\n y:\r\n y(sum(d.size.filter((element, k) => k <= j && element))) +\r\n Math.abs(\r\n y(sum(d.size.filter((element, k) => k <= j && element))) -\r\n y(sum(d.size.filter((element, k) => k < j && element))),\r\n ) /\r\n 2,\r\n opacity:\r\n el &&\r\n Math.abs(\r\n y(sum(d.size.filter((element, k) => k <= j && element))) -\r\n y(sum(d.size.filter((element, k) => k < j && element))),\r\n ) > 20\r\n ? 1\r\n : 0,\r\n fill: getTextColorBasedOnBgColor(barColors[j]),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n >\r\n {numberFormattingFunction(el, naLabel, precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ))}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(0) + 5}\r\n x={0}\r\n width={x.bandwidth()}\r\n height={margin.bottom}\r\n style={styles?.xAxis?.labels}\r\n className={classNames?.xAxis?.labels}\r\n alignment='top'\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ) : null}\r\n {showValues ? (\r\n <motion.text\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n x={x.bandwidth() / 2}\r\n dy={-10}\r\n className={cn(\r\n 'graph-value graph-value-total',\r\n !valueColor\r\n ? 'fill-primary-gray-700 dark:fill-primary-gray-300 text-sm'\r\n : 'text-sm',\r\n classNames?.graphObjectValues,\r\n )}\r\n variants={{\r\n initial: {\r\n y: y(0),\r\n opacity: 0,\r\n ...(valueColor && { fill: valueColor }),\r\n },\r\n whileInView: {\r\n y: y(sum(d.size.map(el => el || 0))),\r\n opacity: 1,\r\n ...(valueColor && { fill: valueColor }),\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n >\r\n {numberFormattingFunction(\r\n sum(d.size.filter(element => element)),\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useState, useRef, useEffect } from 'react';\r\nimport sum from 'lodash.sum';\r\nimport { format } from 'date-fns/format';\r\nimport { parse } from 'date-fns/parse';\r\nimport { SliderUI } from '@undp/design-system-react/SliderUI';\r\nimport { ascending, sort } from 'd3-array';\r\nimport orderBy from 'lodash.orderby';\r\n\r\nimport { HorizontalGraph, VerticalGraph } from './Graph';\r\n\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport {\r\n GroupedBarGraphDataType,\r\n Languages,\r\n ReferenceDataType,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { ensureCompleteDataForStackedBarChart } from '@/Utils/ensureCompleteData';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\nimport { GraphArea, GraphContainer } from '@/Components/Elements/GraphContainer';\r\n\r\ninterface Props {\r\n data: GroupedBarGraphDataType[];\r\n colors?: string[];\r\n labelOrder?: string[];\r\n graphTitle?: string | React.ReactNode;\r\n graphDescription?: string | React.ReactNode;\r\n footNote?: string | React.ReactNode;\r\n width?: number;\r\n height?: number;\r\n sources?: SourcesDataType[];\r\n barPadding?: number;\r\n showTicks?: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n truncateBy?: number;\r\n colorDomain: string[];\r\n colorLegendTitle?: string;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n suffix?: string;\r\n prefix?: string;\r\n showValues?: boolean;\r\n showLabels?: boolean;\r\n relativeHeight?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n graphID?: string;\r\n maxValue?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n graphDownload?: boolean;\r\n dataDownload?: boolean;\r\n language?: Languages;\r\n minHeight?: number;\r\n theme?: 'light' | 'dark';\r\n maxBarThickness?: number;\r\n sortParameter?: number | 'total';\r\n sortData?: 'asc' | 'desc';\r\n maxNumberOfBars?: number;\r\n minBarThickness?: number;\r\n ariaLabel?: string;\r\n resetSelectionOnDoubleClick?: boolean;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n showColorScale?: boolean;\r\n customLayers?: CustomLayerDataType[];\r\n timeline?: TimelineDataType;\r\n naLabel?: string;\r\n orientation?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport function StackedBarGraphEl(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n sources,\r\n graphDescription,\r\n barPadding = 0.25,\r\n showTicks = true,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n backgroundColor = false,\r\n topMargin,\r\n bottomMargin,\r\n leftMargin,\r\n rightMargin,\r\n tooltip,\r\n onSeriesMouseOver,\r\n suffix = '',\r\n prefix = '',\r\n showLabels = true,\r\n relativeHeight,\r\n showValues = true,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n language = 'en',\r\n labelOrder,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n sortParameter,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n showColorScale = true,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n precision = 2,\r\n customLayers = [],\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\r\n naLabel = 'NA',\r\n sortData,\r\n orientation = 'vertical',\r\n } = props;\r\n\r\n const Comp = orientation === 'horizontal' ? HorizontalGraph : VerticalGraph;\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [play, setPlay] = useState(timeline.autoplay);\r\n const uniqDatesSorted = sort(\r\n uniqBy(data, 'date', true).map(d =>\r\n parse(`${d}`, timeline.dateFormat || 'yyyy', new Date()).getTime(),\r\n ),\r\n (a, b) => ascending(a, b),\r\n );\r\n const [index, setIndex] = useState(timeline.autoplay ? 0 : uniqDatesSorted.length - 1);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(entries[0].target.clientWidth || 620);\r\n setSvgHeight(entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(\r\n () => {\r\n setIndex(i => (i < uniqDatesSorted.length - 1 ? i + 1 : 0));\r\n },\r\n (timeline.speed || 2) * 1000,\r\n );\r\n if (!play) clearInterval(interval);\r\n return () => clearInterval(interval);\r\n }, [uniqDatesSorted, play, timeline.speed]);\r\n\r\n const markObj = getSliderMarks(\r\n uniqDatesSorted,\r\n index,\r\n timeline.showOnlyActiveDate,\r\n timeline.dateFormat || 'yyyy',\r\n );\r\n\r\n return (\r\n <GraphContainer\r\n className={classNames?.graphContainer}\r\n style={styles?.graphContainer}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={ariaLabel}\r\n backgroundColor={backgroundColor}\r\n theme={theme}\r\n language={language}\r\n minHeight={minHeight}\r\n width={width}\r\n height={height}\r\n relativeHeight={relativeHeight}\r\n padding={padding}\r\n >\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {timeline.enabled && uniqDatesSorted.length > 0 && markObj ? (\r\n <div className='flex gap-6 items-center' dir='ltr'>\r\n <button\r\n type='button'\r\n onClick={() => {\r\n setPlay(!play);\r\n }}\r\n className='p-0 border-0 cursor-pointer bg-transparent'\r\n aria-label={play ? 'Click to pause animation' : 'Click to play animation'}\r\n >\r\n {play ? <Pause /> : <Play />}\r\n </button>\r\n <SliderUI\r\n min={uniqDatesSorted[0]}\r\n max={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n marks={markObj}\r\n step={null}\r\n defaultValue={uniqDatesSorted[uniqDatesSorted.length - 1]}\r\n value={uniqDatesSorted[index]}\r\n onChangeComplete={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n onChange={nextValue => {\r\n setIndex(uniqDatesSorted.indexOf(nextValue as number));\r\n }}\r\n aria-label='Time slider. Use arrow keys to adjust selected time period.'\r\n />\r\n </div>\r\n ) : null}\r\n <div className='grow flex flex-col justify-center gap-3 w-full'>\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale ? (\r\n <ColorLegendWithMouseOver\r\n width={width}\r\n colorDomain={colorDomain}\r\n colors={colors}\r\n colorLegendTitle={colorLegendTitle}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={false}\r\n className={classNames?.colorLegend}\r\n />\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {svgWidth && svgHeight ? (\r\n <Comp\r\n data={\r\n sortParameter !== undefined\r\n ? sortParameter === 'total'\r\n ? orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !d.size.every(item => item == null) : d)),\r\n d => sum(d.size.filter(el => !checkIfNullOrUndefined(el))),\r\n [sortData || 'asc'],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : orderBy(\r\n ensureCompleteDataForStackedBarChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !d.size.every(item => item == null) : d)),\r\n d =>\r\n checkIfNullOrUndefined(d.size[sortParameter])\r\n ? -Infinity\r\n : d.size[sortParameter],\r\n [sortData || 'asc'],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : ensureCompleteDataForStackedBarChart(data, timeline.dateFormat || 'yyyy')\r\n .filter(d =>\r\n timeline.enabled\r\n ? d.date ===\r\n format(\r\n new Date(uniqDatesSorted[index]),\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n : d,\r\n )\r\n .filter(d => (filterNA ? !d.size.every(item => item == null) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n }\r\n barColors={colors}\r\n width={width || svgWidth}\r\n height={Math.max(\r\n minHeight,\r\n height ||\r\n (relativeHeight\r\n ? minHeight\r\n ? (width || svgWidth) * relativeHeight > minHeight\r\n ? (width || svgWidth) * relativeHeight\r\n : minHeight\r\n : (width || svgWidth) * relativeHeight\r\n : svgHeight),\r\n )}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n showValues={showValues}\r\n suffix={suffix}\r\n prefix={prefix}\r\n refValues={refValues}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data.map(\r\n d => sum(d.size.filter(l => !checkIfNullOrUndefined(l))) || 0,\r\n ),\r\n )\r\n }\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n selectedColor={selectedColor}\r\n rtl={language === 'he' || language === 'ar'}\r\n labelOrder={labelOrder}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n styles={styles}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n colorDomain={colorDomain}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n </>\r\n )}\r\n </div>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n","import { GroupedBarGraphEl } from './GroupedBarGraph';\r\nimport { SimpleBarGraphEl } from './SimpleBarGraph';\r\nimport { StackedBarGraphEl } from './StackedBarGraph';\r\n\r\nimport {\r\n ReferenceDataType,\r\n BarGraphDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n GroupedBarGraphDataType,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n TimelineDataType,\r\n} from '@/Types';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: BarGraphDataType[];\r\n\r\n /** Orientation of the graph */\r\n orientation?: 'vertical' | 'horizontal';\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Color or array of colors for bars */\r\n colors?: string | string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Color of value labels */\r\n valueColor?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n /** Minimum thickness of bars */\r\n minBarThickness?: number;\r\n /** Maximum number of bars shown in the graph */\r\n maxNumberOfBars?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n minValue?: number;\r\n /** Truncate labels by specified length */\r\n truncateBy?: number;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Toggle visibility of NA color in the color scale. This is only applicable if the data props hae color parameter and showColorScale prop is true */\r\n showNAColor?: boolean;\r\n /** Data points to highlight. Use the label value from data to highlight the data point */\r\n highlightedDataPoints?: (string | number)[];\r\n /** Defines the opacity of the non-highlighted data */\r\n dimmedOpacity?: number;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Sorting order for data. This is overwritten by labelOrder prop. */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if data point which are undefined or has value null are filtered out. */\r\n filterNA?: boolean;\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** Configures playback and slider controls for animating the chart over time. The data must have a key date for it to work properly. */\r\n timeline?: TimelineDataType;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function SimpleBarGraph(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n barPadding,\r\n showTicks,\r\n leftMargin,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n truncateBy,\r\n showLabels,\r\n showValues,\r\n backgroundColor,\r\n suffix,\r\n prefix,\r\n sources,\r\n graphDescription,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints,\r\n onSeriesMouseClick,\r\n graphDownload,\r\n dataDownload,\r\n language,\r\n theme,\r\n sortData,\r\n labelOrder,\r\n showNAColor,\r\n minHeight,\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n valueColor,\r\n orientation = 'vertical',\r\n styles,\r\n classNames,\r\n filterNA,\r\n animate,\r\n dimmedOpacity,\r\n precision,\r\n customLayers,\r\n timeline,\r\n naLabel,\r\n } = props;\r\n return (\r\n <SimpleBarGraphEl\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n showValues={showValues}\r\n backgroundColor={backgroundColor}\r\n suffix={suffix}\r\n prefix={prefix}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n padding={padding}\r\n relativeHeight={relativeHeight}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n showColorScale={showColorScale}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n theme={theme}\r\n sortData={sortData}\r\n labelOrder={labelOrder}\r\n showNAColor={showNAColor}\r\n minHeight={minHeight}\r\n maxBarThickness={maxBarThickness}\r\n maxNumberOfBars={maxNumberOfBars}\r\n minBarThickness={minBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n orientation={orientation}\r\n />\r\n );\r\n}\r\n\r\ninterface GroupedBarChartProps {\r\n // Data\r\n /** Array of data objects */\r\n data: GroupedBarGraphDataType[];\r\n\r\n /** Orientation of the graph */\r\n orientation?: 'vertical' | 'horizontal';\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Array of colors for different bars in the group */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Color of value labels */\r\n valueColor?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n minValue?: number;\r\n /** Truncate labels by specified length */\r\n truncateBy?: number;\r\n /** Toggles if data points which have all the values as undefined or null are filtered out. */\r\n filterNA?: boolean;\r\n /** Parameter to sort the data. If a number is provided, it refers to the index of the size array to determine which value to sort by. If set to total, it sorts by the sum of all the values. */\r\n sortParameter?: number | 'total';\r\n /** Sorting order for data. This is overwritten by labelOrder prop. */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** Configures playback and slider controls for animating the chart over time. The data must have a key date for it to work properly. */\r\n timeline?: TimelineDataType;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function GroupedBarGraph(props: GroupedBarChartProps) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n sources,\r\n graphDescription,\r\n barPadding,\r\n showTicks,\r\n truncateBy,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n suffix,\r\n prefix,\r\n showValues,\r\n padding,\r\n backgroundColor,\r\n leftMargin,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n showLabels,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload,\r\n dataDownload,\r\n language,\r\n labelOrder,\r\n minHeight,\r\n theme,\r\n sortParameter,\r\n sortData,\r\n maxBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n valueColor,\r\n orientation = 'vertical',\r\n styles,\r\n classNames,\r\n filterNA,\r\n animate,\r\n precision,\r\n customLayers,\r\n showColorScale,\r\n timeline,\r\n naLabel,\r\n } = props;\r\n\r\n return (\r\n <GroupedBarGraphEl\r\n orientation={orientation}\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n truncateBy={truncateBy}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n suffix={suffix}\r\n prefix={prefix}\r\n showValues={showValues}\r\n padding={padding}\r\n backgroundColor={backgroundColor}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n sortParameter={sortParameter}\r\n sortData={sortData}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n showLabels={showLabels}\r\n relativeHeight={relativeHeight}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n labelOrder={labelOrder}\r\n minHeight={minHeight}\r\n theme={theme}\r\n maxBarThickness={maxBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n precision={precision}\r\n customLayers={customLayers}\r\n showColorScale={showColorScale}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n />\r\n );\r\n}\r\n\r\ninterface StackedBarChartProps {\r\n // Data\r\n /** Array of data objects */\r\n data: GroupedBarGraphDataType[];\r\n\r\n /** Orientation of the graph */\r\n orientation?: 'vertical' | 'horizontal';\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Array of colors for different bars in the group */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Color of value labels */\r\n valueColor?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n /** Minimum thickness of bars */\r\n minBarThickness?: number;\r\n /** Maximum number of bars shown in the graph */\r\n maxNumberOfBars?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n truncateBy?: number;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Parameter to sort the data. If a number is provided, it refers to the index of the size array to determine which value to sort by. If set to total, it sorts by the sum of all the values. */\r\n sortParameter?: number | 'total';\r\n /** Sorting order for data. This is overwritten by labelOrder prop. */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if data points which have all the values as undefined or null are filtered out. */\r\n filterNA?: boolean;\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** Configures playback and slider controls for animating the chart over time. The data must have a key date for it to work properly. */\r\n timeline?: TimelineDataType;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function StackedBarGraph(props: StackedBarChartProps) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n sources,\r\n graphDescription,\r\n barPadding,\r\n showTicks,\r\n leftMargin,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n truncateBy,\r\n showLabels,\r\n showValues,\r\n backgroundColor,\r\n suffix,\r\n prefix,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n tooltip,\r\n onSeriesMouseOver,\r\n relativeHeight,\r\n refValues,\r\n graphID,\r\n maxValue,\r\n onSeriesMouseClick,\r\n graphDownload,\r\n dataDownload,\r\n language,\r\n theme,\r\n labelOrder,\r\n minHeight,\r\n maxBarThickness,\r\n sortParameter,\r\n sortData,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n valueColor,\r\n orientation = 'vertical',\r\n styles,\r\n classNames,\r\n filterNA,\r\n animate,\r\n precision,\r\n customLayers,\r\n showColorScale,\r\n timeline,\r\n naLabel,\r\n } = props;\r\n\r\n return (\r\n <StackedBarGraphEl\r\n data={data}\r\n graphTitle={graphTitle}\r\n colors={colors}\r\n sources={sources}\r\n graphDescription={graphDescription}\r\n barPadding={barPadding}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n showValues={showValues}\r\n backgroundColor={backgroundColor}\r\n suffix={suffix}\r\n prefix={prefix}\r\n height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n padding={padding}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n relativeHeight={relativeHeight}\r\n refValues={refValues}\r\n graphID={graphID}\r\n maxValue={maxValue}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n language={language}\r\n theme={theme}\r\n labelOrder={labelOrder}\r\n minHeight={minHeight}\r\n maxBarThickness={maxBarThickness}\r\n sortParameter={sortParameter}\r\n sortData={sortData}\r\n maxNumberOfBars={maxNumberOfBars}\r\n minBarThickness={minBarThickness}\r\n ariaLabel={ariaLabel}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n filterNA={filterNA}\r\n animate={animate}\r\n precision={precision}\r\n customLayers={customLayers}\r\n showColorScale={showColorScale}\r\n timeline={timeline}\r\n naLabel={naLabel}\r\n orientation={orientation}\r\n />\r\n );\r\n}\r\n"],"names":["HorizontalGraph","props","$","_c","data","leftMargin","t0","rightMargin","t1","topMargin","t2","bottomMargin","t3","barColors","barPadding","showTicks","truncateBy","width","height","suffix","prefix","showValues","showLabels","tooltip","onSeriesMouseOver","refValues","maxValue","minValue","onSeriesMouseClick","selectedColor","rtl","labelOrder","maxBarThickness","resetSelectionOnDoubleClick","detailsOnClick","barAxisTitle","valueColor","noOfTicks","styles","classNames","animate","colorDomain","precision","customLayers","naLabel","undefined","svgRef","useRef","t4","amount","once","isInView","useInView","t5","t6","top","bottom","left","right","margin","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","graphWidth","graphHeight","T0","T1","t10","t11","t12","t13","t14","t15","t16","t17","t18","t7","t8","t9","graphObjectValues","xAxis","gridLines","labels","title","yAxis","axis","t19","d","i","id","label","dataWithId","map","barOrder","_temp","x","scaleLinear","domain","range","nice","y","scaleBand","Math","min","length","paddingInner","subBarScale","size","_temp2","bandwidth","xTicks","ticks","motion","svg","jsx","XTicksAndGridLines","filter","_temp3","_temp4","d_3","t20","t21","t22","t23","AxisTitle","_temp5","_temp6","AnimatePresence","d_6","checkIfNullOrUndefined","jsxs","initial","whileInView","transition","duration","opacity","el","j","event","sizeIndex","clientY","clientX","event_0","isEqual","fill","textAnchor","cn","numberFormattingFunction","YAxesLabels","substring","t24","t25","t26","t27","Axis","el_0","i_1","RefLineX","text","color","value","_temp7","_temp8","Tooltip","Modal","__html","string2HTML","Fragment","d_8","layer","d_7","position","d_5","d_4","d_2","d_1","_d","i_0","d_0","VerticalGraph","_temp9","_temp0","yTicks","t28","t29","dx","dy","YTicksAndGridLines","_temp1","_temp10","t30","t31","t32","t33","_temp11","_temp12","abs","XAxesLabels","RefLineY","_temp13","_temp14","GroupedBarGraphEl","graphTitle","colors","sources","graphDescription","footNote","colorLegendTitle","showColorScale","padding","backgroundColor","relativeHeight","graphID","graphDownload","dataDownload","language","minHeight","theme","ariaLabel","filterNA","timeline","sortParameter","sortData","orientation","Colors","light","categoricalColors","enabled","autoplay","showOnlyActiveDate","Comp","svgWidth","setSvgWidth","svgHeight","setSvgHeight","play","setPlay","uniqDatesSorted","sort","uniqBy","parse","dateFormat","Date","getTime","index","setIndex","setSelectedColor","graphDiv","graphParentDiv","Symbol","for","resizeObserver","ResizeObserver","entries","target","clientWidth","clientHeight","current","observe","disconnect","useEffect","interval","setInterval","speed","clearInterval","markObj","getSliderMarks","GraphContainer","graphContainer","description","GraphHeader","Pause","Play","SliderUI","nextValue","indexOf","nextValue_0","EmptyState","ColorLegendWithMouseOver","colorLegend","GraphArea","orderBy","ensureCompleteDataForStackedBarChart","date","format","every","d_9","d_10","d_11","max","_temp15","_temp17","t34","footnote","source","GraphFooter","t35","d_14","_temp16","l_1","l","d_15","l_2","d_12","d_13","l_0","item_1","item","item_0","sum","a","b","ascending","barColor","highlightedDataPoints","minBarThickness","dimmedOpacity","gray","el_3","el_2","el_1","_i","_temp18","_temp19","_temp20","SimpleBarGraphEl","showNAColor","maxNumberOfBars","ensureCompleteDataForBarChart","Infinity","_d_0","primaryColors","t36","d_17","d_16","element","k","getTextColorBasedOnBgColor","element_0","k_0","element_1","k_1","element_2","k_2","element_3","k_3","element_4","k_4","element_5","k_5","element_6","k_6","element_7","StackedBarGraphEl","_d_1","i_2","SimpleBarGraph","GroupedBarGraph","StackedBarGraph"],"mappings":"i9CAuEO,SAAAA,GAAAC,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,GAAA,EACL,CAAAC,KAAAA,EAAAC,WAAAC,EAAAC,YAAAC,GAAAC,UAAAC,GAAAC,aAAAC,GAAAC,UAAAA,GAAAC,WAAAA,GAAAC,UAAAA,EAAAC,WAAAA,EAAAC,MAAAA,EAAAC,OAAAA,EAAAC,OAAAA,GAAAC,OAAAA,GAAAC,WAAAA,GAAAC,WAAAA,EAAAC,QAAAA,GAAAC,kBAAAA,GAAAC,UAAAA,GAAAC,SAAAA,GAAAC,SAAAA,EAAAC,mBAAAA,GAAAC,cAAAA,EAAAC,IAAAA,EAAAC,WAAAA,EAAAC,gBAAAA,EAAAC,4BAAAA,EAAAC,eAAAA,EAAAC,aAAAA,EAAAC,WAAAA,EAAAC,UAAAA,EAAAC,OAAAA,EAAAC,WAAAA,EAAAC,QAAAA,EAAAC,YAAAA,EAAAC,UAAAA,EAAAC,aAAAA,EAAAC,QAAAA,CAAAA,EAsCI3C,EApCFI,EAAAC,IAAAuC,OAAA,IAAAvC,EACAC,EAAAC,KAAAqC,OAAA,GAAArC,GACAC,GAAAC,KAAAmC,OAAA,GAAAnC,GACAC,GAAAC,KAAAiC,OAAA,GAAAjC,GAkCFkC,GAAeC,EAAAA,OAAO,IAAI,EAAE,IAAAC,EAAA9C,EAAA,CAAA,IAAAsC,EAAAS,QAAA/C,EAAA,CAAA,IAAAsC,EAAAU,MACOF,EAAA,CAAAE,KAC3BV,EAAOU,KAAKD,OACVT,EAAOS,MAAAA,EAChB/C,EAAA,CAAA,EAAAsC,EAAAS,OAAA/C,EAAA,CAAA,EAAAsC,EAAAU,KAAAhD,KAAA8C,GAAAA,EAAA9C,EAAA,CAAA,EAHD,MAAAiD,GAAiBC,GAAAA,UAAUN,GAAQE,CAGlC,EAEMK,GAAAlB,EAAe1B,GAAY,GAA3BA,GAAyC,IAAA6C,EAAApD,EAAA,CAAA,IAAAS,IAAAT,EAAA,CAAA,IAAAG,GAAAH,EAAA,CAAA,IAAAK,GAAAL,OAAAmD,IADjCC,EAAA,CAAAC,IACRF,GAAyCG,OACtC7C,GAAY8C,KACdpD,EAAUqD,MACTnD,CAAAA,EACRL,KAAAS,GAAAT,KAAAG,EAAAH,KAAAK,EAAAL,KAAAmD,GAAAnD,KAAAoD,GAAAA,EAAApD,EAAA,CAAA,EALD,MAAAyD,EAAeL,EAOf,CAAAM,EAAAC,CAAA,EAA0CC,EAAAA,SAAcjB,MAAS,EAEjE,CAAAkB,EAAAC,CAAA,EAA4CF,EAAAA,SAAcjB,MAAS,EACnE,CAAAoB,EAAAC,EAAA,EAA4BJ,EAAAA,SAA6BjB,MAAS,EAClE,CAAAsB,GAAAC,EAAA,EAA4BN,EAAAA,SAA6BjB,MAAS,EAClEwB,GAAmBpD,EAAQ0C,EAAMF,KAAQE,EAAMD,MAC/CY,EAAoBpD,EAASyC,EAAMJ,IAAOI,EAAMH,OAAQ,IAAAe,EAAAC,GAAAC,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,EAAAC,GAAA,GAAAlF,EAAA,CAAA,IAAAsC,GAAAtC,EAAA,CAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAAW,IAAAX,EAAA,EAAA,IAAAY,IAAAZ,EAAA,EAAA,IAAAqC,GAAA8C,mBAAAnF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAC,WAAArF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAE,QAAAtF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAG,OAAAvF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAC,MAAAzF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAF,QAAAtF,EAAA,EAAA,IAAAuC,GAAAvC,EAAA,EAAA,IAAAyC,GAAAzC,EAAA,EAAA,IAAAE,GAAAF,EAAA,EAAA,IAAAgC,GAAAhC,EAAA,EAAA,IAAAoE,GAAApE,EAAA,EAAA,IAAAmE,IAAAnE,EAAA,EAAA,IAAAgB,GAAAhB,EAAA,EAAA,IAAAiD,IAAAjD,EAAA,EAAA,IAAA6B,GAAA7B,EAAA,EAAA,IAAAyD,EAAAH,QAAAtD,EAAA,EAAA,IAAAyD,EAAAF,MAAAvD,EAAA,EAAA,IAAAyD,EAAAJ,KAAArD,EAAA,EAAA,IAAA8B,GAAA9B,EAAA,EAAA,IAAAwB,IAAAxB,EAAA,EAAA,IAAAyB,GAAAzB,EAAA,EAAA,IAAA6D,GAAA7D,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAmC,GAAAnC,EAAA,EAAA,IAAA0B,IAAA1B,EAAA,EAAA,IAAAsB,IAAAtB,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,IAAAlB,EAAA,EAAA,IAAAuB,IAAAvB,EAAA,EAAA,IAAA+B,GAAA/B,EAAA,EAAA,IAAA4B,GAAA5B,EAAA,EAAA,IAAA2B,GAAA3B,EAAA,EAAA,IAAAoB,GAAApB,EAAA,EAAA,IAAAa,GAAAb,EAAA,EAAA,IAAAmB,IAAAnB,EAAA,EAAA,IAAAoC,GAAA+C,mBAAAnF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAC,WAAArF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAE,QAAAtF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAG,OAAAvF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAC,MAAAzF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAF,QAAAtF,EAAA,EAAA,IAAAiB,IAAAjB,EAAA,EAAA,IAAAO,IAAAP,EAAA,EAAA,IAAAc,GAAAd,EAAA,EAAA,IAAAkC,GAAAlC,EAAA,EAAA,IAAAe,EAAA,CAAA,IAAA2E,GAAA1F,QAAA6B,GAE5B6D,GAAAA,CAAAC,EAAAC,KAAW,CAAA,GAClCD,EAACE,GACAhE,EAAA,GAAgB8D,EAACG,KAAM,GAAvB,GAA+BF,CAAC,EAAA,GACpC5F,MAAA6B,EAAA7B,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAHF,MAAA+F,GAAmB7F,EAAI8F,IAAKN,EAG1B,EACFO,GAAiBpE,GAAckE,GAAUC,IAAKE,EAAc,EAE5DC,EAAUC,GAAAA,OAAAA,EAAaC,OAAQ,CAAC5E,EAAUD,EAAQ,CAAC,EAAC8E,MAAO,CAAC,EAAGnC,EAAU,CAAC,EAACoC,KAAAA,EAC3EC,GAAUC,GAAAA,OAAWJ,OACXJ,EAAQ,EAACK,MACV,CACL,EACAxE,EAAkB4E,KAAIC,IAAKvC,EAAatC,EAAkBmE,GAAQW,MAAqB,EAAvFxC,CAAwF,CACzF,EAACyC,aACYjG,EAAU,EAC1BkG,GAAoBL,GAAAA,OAAWJ,OACrBnG,KAAO6G,KAAKf,IAAKgB,EAAiB,CAAC,EAACV,MACrC,CAAC,EAAGE,GAACS,WAAY,CAAC,EAACJ,aACZ,EAAG,EACnBK,GAAef,EAACgB,MAAOhF,CAAS,EAG3BmC,GAAA8C,GAAAA,OAAMC,IACAzE,GAAAA,GACEgC,GAAA,GAAG7D,CAAK,KACP8D,GAAA,GAAG7D,CAAM,KACR8D,EAAA,OAAO/D,CAAK,IAAIC,CAAM,GACrB+D,GAAA,MAEIR,GAAA,aAAad,EAAMF,IAAK,IAAIE,EAAMJ,GAAI,IACjDmB,EAAA3D,EACCyG,EAAAA,kBAAAA,IAACC,GAAAA,mBAAA,CACS,OAAAL,GAAMM,OAAQC,EAAY,EAC/B,EAAAP,GAAMM,OAAQE,EAAY,EAAC1B,IAAK2B,GAAKxB,EAAER,CAAC,CAAC,EACxC,GAAA,EAAIpF,GACJ,GAAA6D,EAAcX,EAAMH,OAChB,OAAA,CAAA+B,UACKjD,GAAMgD,OAAkBC,UAAAC,OAC3BlD,GAAMgD,OAAeE,MAAAA,EAEnB,WAAA,CAAAD,UACChD,GAAU+C,OAAkBC,UAAAC,OAC/BjD,GAAU+C,OAAeE,MAAAA,EAE3BrE,OAAAA,GACAC,OAAAA,GACE,UAAA,YACV,cAAA,GACWsB,UAAAA,EAAS,EAlBvB,KAsBI,MAAAoF,GAAAzD,GAAa,EACb0D,GAAA,EAAIpE,EAAMJ,IAAO,GACbyE,GAAA1F,GAAMgD,OAAcG,MAChBwC,GAAA1F,GAAU+C,OAAcG,MAAAvF,EAAA,EAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAA4H,IAAA5H,EAAA,EAAA,IAAA6H,IAAA7H,EAAA,EAAA,IAAA8H,IAAA9H,QAAA+H,IAJrCtD,EAAA6C,EAAAA,kBAAAA,IAACU,GAAAA,UAAA,CACI,EAAAJ,GACA,EAAAC,GACI,MAAAC,GACI,UAAAC,GACL9F,KAAAA,CAAAA,CAAY,EAClBjC,MAAAiC,EAAAjC,MAAA4H,GAAA5H,MAAA6H,GAAA7H,MAAA8H,GAAA9H,MAAA+H,GAAA/H,MAAAyE,GAAAA,EAAAzE,EAAA,EAAA,EAAAA,QAAAyC,GACDiC,GAAAjC,EAAY+E,OAAQS,EAA4B,EAACjC,IAAKkC,EAAY,EAAClI,MAAAyC,EAAAzC,MAAA0E,IAAAA,GAAA1E,EAAA,EAAA,EACnEqE,EAAA8D,GAAAA,gBACEnD,EAAAe,GAAUC,IAAKoC,GACbC,GAAAA,uBAAuB7B,GAAEb,EAACE,EAAG,CAAC,EAA/B,KACEyC,EAAAA,kBAAAA,KAAAlB,GAAAA,OAAA,EAAA,CAEY,SAAA,CAAAmB,QACC,CAAApC,EACJ,EAACK,EACDA,GAAE,GAAGb,EAACE,EAAG,EAAE,CAAA,EACf2C,YACY,CAAArC,EACR,EAACK,EACDA,GAAE,GAAGb,EAACE,EAAG,EAAE,EAAC4C,WACH,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,GAAA,cAAA,UACH,KAAA,CAAA0F,QAAW,EAACF,WAAc,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAE5D/C,SAAAA,CAAAA,EAACoB,KAAKf,IAAK,CAAA4C,EAAAC,IACVP,EAAAA,kBAAAA,kBACY,UAAA,wBAED,QAAA3G,EAAiBhB,GAAUkI,CAAC,IAAMlH,EAAjB,EAAA,GAAjB,IACK,aAAAmH,GAAA,CACZnF,EAAiB,CAAA,GAAKgC,EAACoD,UAAaF,CAAAA,CAAG,EACvC3E,GAAU4E,EAAKE,OAAQ,EACvBhF,GAAU8E,EAAKG,OAAQ,EACvB3H,KAAoB,CAAA,GAAKqE,EAACoD,UAAaF,CAAAA,CAAG,CAAC,EAEhC,YAAAK,GAAA,CACXvF,EAAiB,CAAA,GAAKgC,EAACoD,UAAaF,CAAAA,CAAG,EACvC3E,GAAU4E,EAAKE,OAAQ,EACvBhF,GAAU8E,EAAKG,OAAQ,CAAC,EAEZ,aAAA,IAAA,CACZtF,EAAiBhB,MAAS,EAC1BqB,GAAUrB,MAAS,EACnBuB,GAAUvB,MAAS,EACnBrB,KAAoBqB,MAAS,CAAC,EAEvB,QAAA,IAAA,EACHjB,IAAAM,KAEAmH,GAAAA,QAAQtF,EAAgB,CAAA,GAAK8B,EAACoD,UAAaF,CAAAA,CACjB,GAD1B9G,GAGA+B,EAAkBnB,MAAS,EAC3BjB,KAAqBiB,MAAS,IAE9BmB,EAAkB,CAAA,GAAK6B,EAACoD,UAAaF,CAAAA,CAAG,EACpCnH,IAAoBA,GAAmB,CAAA,GAAKiE,EAACoD,UAAaF,CAAAA,CAAG,GAEpE,EAGF,SAAA,CAACR,GAAAA,uBAAuBO,CAAE,EAA1B,KACCtB,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACK,EAAAN,GAAY,GAAG+B,CAAC,EAAE,EACX,SAAA,CAAAN,QACC,CAAAxH,MACA,EAACoF,EACLA,EAAE,CAAC,EAACiD,KACDzI,GAAUkI,CAAC,CAAA,EAClBL,YACY,CAAAzH,MACHsH,GAAAA,uBAAuBO,CAAE,EAA1B,EACFA,GAAiB,EAChBzC,EAAEyC,CAAY,EAAIzC,EAAE,CAAC,EACrBA,EAAE,CAAC,EAAIA,EAAEyC,CAAY,EACtBzC,EACDyC,GAAiB,EAAIzC,EAAE,CAAmB,EAAdA,EAAEyC,CAAY,EAACQ,KACzCzI,GAAUkI,CAAC,EAACJ,WACN,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEI,KAAA,CAAA3H,MACG,EAACoF,EACLA,EAAE,CAAC,EAACsC,WACK,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAEnC,OAAA5B,GAAWG,UAAAA,EACX,QAAA,UACC,QAAAhE,GAAA,cAAA,SAAA,CAAoC,EAGhD9B,GACCmG,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACK,EAACN,GAAY,GAAG+B,CAAC,EAAE,EAAe/B,GAAWG,UAAAA,EAAe,EACxD,MAAA,CAAAoC,WACOT,GAAMA,EAAK,EAAL,MAAN,QAAyC,GACjDxG,GAAM+C,mBAAN,CAAA,CAA8B,EAEzB,UAAAmE,EAAAA,GAAG,sBAAuBjH,GAAU8C,iBAAmB,EAC9D,GAAAyD,GAAMA,EAAK,EAAL,GAAN,EACD,GAAA,SACO,SAAA,CAAAL,QACC,CAAApC,EAAKA,EAAE,CAAC,EAACwC,QAAW,EAACS,KAAQlH,GAAcvB,GAAUkI,CAAC,CAAA,EAAGL,YACrD,CAAArC,EACRA,EAAEyC,GAAA,CAAO,EAACD,QACJ,EAACS,KACJlH,GAAcvB,GAAUkI,CAAC,EAACJ,WACpB,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,GAAA,cAAA,UACH,KAAA,CAAA0F,QACK,EAACF,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAG1Ca,qCAAyBX,EAAIlG,EAASF,EAAWtB,GAAQD,EAAM,EAClE,EA3BD,IAAA,GAhEI,GAAG0E,EAACG,KAAM,IAAIvD,EAAYsG,CAAC,GAAbA,CAAmB,EA6FxC,CACD,EACAzH,EACCkG,EAAAA,kBAAAA,IAACkC,eAAA,CAEG,MAAA,GAAG7D,EAACG,KAAM,GAAEc,OAAU9F,EAAtB,GACO6E,EAACG,KAAM,GADd,GAEO,GAAGH,EAACG,KAAM,GAAE2D,UAAW,EAAG3I,CAAU,CAAC,MAE3C,EAAA,EACA,EAAA,EAAI2C,EAAMF,KACN,MAAA4C,EAAE1E,EAAW,EAAX,EAAAA,CAA2B,EAAIgC,EAAMF,KACtC,OAAAiD,GAACS,UAAAA,EACF,MAAA7E,GAAMoD,OAAeF,OACjB,UAAAjD,GAAUmD,OAAeF,OAC3BhD,QAAAA,EACCW,SAAAA,EAAAA,CAAQ,EAdrB,IAAA,CAAA,EAlHI0C,EAACG,KAmIR,CAEJ,EAMsB,MAAA4D,GAAArH,GAAUmD,OAAaC,KAAA,IAAAkE,GAAA3J,QAAA0J,IAA/BC,GAAA,CAAAlE,KAAQiE,EAAAA,EAAyB1J,MAAA0J,GAAA1J,MAAA2J,IAAAA,GAAA3J,EAAA,EAAA,EAC7B,MAAA4J,GAAAxH,GAAMoD,OAAaC,KAAA,IAAAoE,EAAA7J,QAAA4J,IAA3BC,EAAA,CAAApE,KAAQmE,EAAAA,EAAqB5J,MAAA4J,GAAA5J,MAAA6J,GAAAA,EAAA7J,EAAA,EAAA,EANvCiF,EAAAqC,EAAAA,kBAAAA,IAACwC,GAAAA,KAAA,CACK,GAAA3D,EAAE1E,EAAW,EAAX,EAAAA,CAA2B,EAC7B,GAAA0E,EAAE1E,EAAW,EAAX,EAAAA,CAA2B,EAC7B,GAAA,KACA,GAAA2C,EAAcX,EAAMH,OACZ,WAAAqG,GACJ,OAAAE,CAAAA,CAA6B,EAEtC3E,GAAA3D,yDAEIA,SAAAA,GAASyE,IAAK,CAAA+D,EAAAC,IACb1C,EAAAA,kBAAAA,IAAC2C,GAAAA,SAAA,CAEO,KAAArB,EAAEsB,KACD,MAAAtB,EAAEuB,MACN,EAAAhE,EAAEyC,EAAEwB,KAAgB,EACnB,GAAA,EAAI3G,EAAMJ,IACV,GAAAe,EAAcX,EAAMH,OACd,SAAA6C,EAAEyC,EAAEwB,KAAgB,EAAIjG,GAAa,KAArCvC,EAAA,OAAA,QACE,WAAAgH,EAAEvG,WACN,OAAAuG,EAAExG,OACDE,QAAAA,EACCW,SAAAA,EAAAA,EAVL2C,CAUa,CAErB,CAAA,CAAC,EAhBL,KAkBO5F,KAAAsC,EAAAtC,KAAAiC,EAAAjC,MAAAW,GAAAX,MAAAY,GAAAZ,EAAA,EAAA,EAAAqC,GAAA8C,kBAAAnF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAC,UAAArF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAE,OAAAtF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAG,MAAAvF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAC,KAAAzF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAF,OAAAtF,MAAAuC,EAAAvC,MAAAyC,EAAAzC,MAAAE,EAAAF,MAAAgC,EAAAhC,MAAAoE,EAAApE,MAAAmE,GAAAnE,MAAAgB,EAAAhB,MAAAiD,GAAAjD,MAAA6B,EAAA7B,EAAA,EAAA,EAAAyD,EAAAH,OAAAtD,EAAA,EAAA,EAAAyD,EAAAF,KAAAvD,EAAA,EAAA,EAAAyD,EAAAJ,IAAArD,MAAA8B,EAAA9B,MAAAwB,GAAAxB,MAAAyB,EAAAzB,MAAA6D,EAAA7D,MAAA0C,EAAA1C,MAAAmC,EAAAnC,MAAA0B,GAAA1B,MAAAsB,GAAAtB,MAAAwC,EAAAxC,MAAAkB,GAAAlB,MAAAuB,GAAAvB,MAAA+B,EAAA/B,MAAA4B,EAAA5B,MAAA2B,EAAA3B,MAAAoB,EAAApB,MAAAa,EAAAb,MAAAmB,GAAAnB,EAAA,EAAA,EAAAoC,GAAA+C,kBAAAnF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAC,UAAArF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAE,OAAAtF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAG,MAAAvF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAC,KAAAzF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAF,OAAAtF,MAAAiB,GAAAjB,MAAAO,GAAAP,MAAAc,EAAAd,MAAAkC,EAAAlC,MAAAe,EAAAf,MAAAqE,EAAArE,MAAAsE,GAAAtE,MAAAuE,GAAAvE,MAAAwE,EAAAxE,MAAAyE,EAAAzE,MAAA0E,GAAA1E,MAAA2E,GAAA3E,MAAA4E,GAAA5E,MAAA6E,GAAA7E,MAAA8E,EAAA9E,MAAA+E,GAAA/E,MAAAgF,EAAAhF,MAAAiF,EAAAjF,MAAAkF,EAAA,MAAAb,EAAArE,EAAA,EAAA,EAAAsE,GAAAtE,EAAA,EAAA,EAAAuE,GAAAvE,EAAA,EAAA,EAAAwE,EAAAxE,EAAA,EAAA,EAAAyE,EAAAzE,EAAA,EAAA,EAAA0E,GAAA1E,EAAA,EAAA,EAAA2E,GAAA3E,EAAA,EAAA,EAAA4E,GAAA5E,EAAA,EAAA,EAAA6E,GAAA7E,EAAA,EAAA,EAAA8E,EAAA9E,EAAA,EAAA,EAAA+E,GAAA/E,EAAA,EAAA,EAAAgF,EAAAhF,EAAA,EAAA,EAAAiF,EAAAjF,EAAA,EAAA,EAAAkF,GAAAlF,EAAA,EAAA,EAAA,IAAA0F,GAAA1F,EAAA,EAAA,IAAAqE,GAAArE,EAAA,EAAA,IAAAgF,GAAAhF,EAAA,EAAA,IAAAiF,GAAAjF,QAAAkF,IApKVQ,4BAACrB,EAAA,CACEW,SAAAA,CAAAA,EAyIDC,EAQCC,EAAAA,EAmBH,EAAkBlF,MAAAqE,EAAArE,MAAAgF,EAAAhF,MAAAiF,EAAAjF,MAAAkF,GAAAlF,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAAA,IAAA4H,GAAA5H,QAAAyC,GACjBmF,GAAAnF,EAAY+E,OAAQ6C,EAA2B,EAACrE,IAAKsE,EAAY,EAACtK,MAAAyC,EAAAzC,MAAA4H,IAAAA,GAAA5H,EAAA,EAAA,EAAA,IAAA6H,GAAA7H,QAAAuE,IAAAvE,EAAA,EAAA,IAAAwE,GAAAxE,EAAA,EAAA,IAAAyE,GAAAzE,EAAA,EAAA,IAAA0E,IAAA1E,QAAA0F,IAAA1F,EAAA,EAAA,IAAA4H,IApMrEC,GAAAS,EAAAA,kBAAAA,KAAA,IAAA,CAAc,UAAA/D,GACXC,SAAAA,CAAAA,EAqBDC,EAOCC,GACDgB,GAsKCkC,EAAAA,EACH,EAAI5H,MAAAuE,GAAAvE,MAAAwE,EAAAxE,MAAAyE,EAAAzE,MAAA0E,GAAA1E,MAAA0F,GAAA1F,MAAA4H,GAAA5H,MAAA6H,IAAAA,GAAA7H,EAAA,EAAA,EAAA,IAAA8H,GAAA9H,EAAA,GAAA,IAAAsE,IAAAtE,EAAA,GAAA,IAAA2E,IAAA3E,EAAA,GAAA,IAAA4E,IAAA5E,SAAA6E,IAAA7E,EAAA,GAAA,IAAA8E,GAAA9E,EAAA,GAAA,IAAA+E,IAAA/E,EAAA,GAAA,IAAA6H,IA5MNC,2BAACxD,GAAA,CACM1B,OACE,MAAAgC,GACC,OAAAC,GACC,QAAAC,EACC,UAAAC,GAEV8C,SAAAA,GAsMF,EAAa7H,OAAAsE,GAAAtE,OAAA2E,GAAA3E,OAAA4E,GAAA5E,OAAA6E,GAAA7E,OAAA8E,EAAA9E,OAAA+E,GAAA/E,OAAA6H,GAAA7H,OAAA8H,IAAAA,GAAA9H,EAAA,GAAA,EAAA,IAAA+H,GAAA/H,EAAA,GAAA,IAAAqC,GAAAhB,SAAArB,EAAA,GAAA,IAAA+D,GAAA/D,EAAA,GAAA,IAAAiE,IAAAjE,EAAA,GAAA,IAAA0D,GAAA1D,EAAA,GAAA,IAAAoC,GAAAf,SAAArB,EAAA,GAAA,IAAAqB,IACZ0G,GAAArE,GAAArC,IAAA0C,GAAAE,2BACEsG,GAAAA,QAAA,CACO7G,OACArC,KAAAA,GACA0C,OACAE,KAAAA,GACW,gBAAA7B,GAAMf,QACZ,UAAAgB,GAAUhB,QAAS,EAPjC,KASOrB,EAAA,GAAA,EAAAqC,GAAAhB,QAAArB,OAAA+D,EAAA/D,OAAAiE,GAAAjE,OAAA0D,EAAA1D,EAAA,GAAA,EAAAoC,GAAAf,QAAArB,OAAAqB,GAAArB,OAAA+H,IAAAA,GAAA/H,EAAA,GAAA,EAAA,IAAA0J,GAAA1J,EAAA,GAAA,IAAAgC,GAAAhC,SAAA6D,GACP6F,GAAA1H,GAAkB6B,IAAmBlB,OACpC2E,EAAAA,kBAAAA,IAACkD,OACO,KAAA3G,IAAmBlB,OAChB,QAAA,IAAA,CACPmB,EAAkBnB,MAAS,CAAC,EAG9B,iCAAA,MAAA,CACY,UAAA,0BAER,wBAAA,OAAOX,GAAmB,SAA1B,CAAAyI,OACcC,GAAAA,YAAY1I,EAAgB6B,CAAc,CAAA,EADxDlB,uBAKMX,GAAmB,WAAaA,EAAe6B,CAAqB,EAA3E,KACH,CAAA,CACF,EAjBD,KAkBO7D,OAAAgC,EAAAhC,OAAA6D,EAAA7D,OAAA0J,IAAAA,GAAA1J,EAAA,GAAA,EAAA,IAAA2J,EAAA,OAAA3J,EAAA,GAAA,IAAA8H,IAAA9H,SAAA+H,IAAA/H,EAAA,GAAA,IAAA0J,IA3OVC,EAAArB,EAAAA,kBAAAA,KAAAqC,6BAAA,CACE7C,SAAAA,CAAAA,GA8MCC,GAUA2B,EAAAA,EAkBO,EACP1J,OAAA8H,GAAA9H,OAAA+H,GAAA/H,OAAA0J,GAAA1J,OAAA2J,GAAAA,EAAA3J,EAAA,GAAA,EA5OH2J,CA4OG,CA5TA,SAAAW,GAAAM,EAAA,CAAA,OA4R8DjF,EAACkF,KAAM,CA5RrE,SAAAR,GAAAS,EAAA,CAAA,OA4R6BnF,EAACoF,WAAc,OAAO,CA5RnD,SAAA7C,GAAA8C,EAAA,CAAA,OAqH+DrF,EAACkF,KAAM,CArHtE,SAAA5C,GAAAgD,EAAA,CAAA,OAqH6BtF,EAACoF,WAAc,QAAQ,CArHpD,SAAArD,GAAAwD,EAAA,CAAA,OA4F6BvF,IAAM,CAAC,CA5FpC,SAAA8B,GAAA0D,EAAA,CAAA,OA2FkCxF,IAAM,CAAC,CA3FzC,SAAAqB,GAAAoE,EAAAC,EAAA,CAAA,MA2EiC,GAAGzF,CAAC,EAAE,CA3EvC,SAAAM,GAAAoF,EAAA,CAAA,MAgE8C,GAAG3F,EAACE,EAAG,EAAE,CAgQvD,SAAA0F,GAAAxL,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,GAAA,EACL,CAAAC,KAAAA,EAAAC,WAAAC,EAAAC,YAAAC,GAAAC,UAAAC,GAAAC,aAAAC,GAAAK,MAAAA,GAAAC,OAAAA,GAAAL,UAAAA,EAAAM,OAAAA,EAAAC,OAAAA,EAAAN,WAAAA,EAAAQ,WAAAA,GAAAD,WAAAA,GAAAN,UAAAA,GAAAC,WAAAA,EAAAO,QAAAA,GAAAC,kBAAAA,GAAAC,UAAAA,GAAAC,SAAAA,GAAAC,SAAAA,EAAAC,mBAAAA,GAAAC,cAAAA,EAAAE,WAAAA,EAAAC,gBAAAA,EAAAC,4BAAAA,EAAAC,eAAAA,EAAAC,aAAAA,EAAAC,WAAAA,EAAAC,UAAAA,EAAAC,OAAAA,EAAAC,WAAAA,EAAAC,QAAAA,EAAAC,YAAAA,EAAAC,UAAAA,EAAAC,aAAAA,EAAAC,QAAAA,CAAAA,EAqCI3C,EAnCFI,EAAAC,IAAAuC,OAAA,GAAAvC,EACAC,EAAAC,KAAAqC,OAAA,GAAArC,GACAC,EAAAC,KAAAmC,OAAA,GAAAnC,GACAC,GAAAC,KAAAiC,OAAA,GAAAjC,GAiCFkC,GAAeC,EAAAA,OAAO,IAAI,EAAE,IAAAC,GAAA9C,EAAA,CAAA,IAAAsC,EAAAS,QAAA/C,EAAA,CAAA,IAAAsC,EAAAU,MACOF,GAAA,CAAAE,KAC3BV,EAAOU,KAAKD,OACVT,EAAOS,MAAAA,EAChB/C,EAAA,CAAA,EAAAsC,EAAAS,OAAA/C,EAAA,CAAA,EAAAsC,EAAAU,KAAAhD,KAAA8C,IAAAA,GAAA9C,EAAA,CAAA,EAHD,MAAAiD,EAAiBC,GAAAA,UAAUN,GAAQE,EAGlC,EAIOK,GAAAlB,EAAe9B,EAAa,GAA5BA,EAA2C,IAAAiD,GAAApD,EAAA,CAAA,IAAAS,IAAAT,EAAA,CAAA,IAAAK,GAAAL,EAAA,CAAA,IAAAmD,IAAAnD,OAAAO,GAHpC6C,GAAA,CAAAC,IACR9C,EAAS+C,OACN7C,GAAY8C,KACdJ,GAA2CK,MAC1CnD,CAAAA,EACRL,KAAAS,GAAAT,KAAAK,EAAAL,KAAAmD,GAAAnD,KAAAO,EAAAP,KAAAoD,IAAAA,GAAApD,EAAA,CAAA,EALD,MAAAyD,EAAeL,GAOf,CAAAM,EAAAC,CAAA,EAA0CC,EAAAA,SAAcjB,MAAS,EAEjE,CAAAkB,EAAAC,CAAA,EAA4CF,EAAAA,SAAcjB,MAAS,EACnE,CAAAoB,EAAAC,CAAA,EAA4BJ,EAAAA,SAA6BjB,MAAS,EAClE,CAAAsB,GAAAC,EAAA,EAA4BN,EAAAA,SAA6BjB,MAAS,EAClEwB,GAAmBpD,GAAQ0C,EAAMF,KAAQE,EAAMD,MAC/CY,GAAoBpD,GAASyC,EAAMJ,IAAOI,EAAMH,OAAQ,IAAAe,EAAAC,EAAAC,GAAAC,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,EAAA,GAAAlF,EAAA,CAAA,IAAAsC,GAAAtC,EAAA,CAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAAW,GAAAX,EAAA,EAAA,IAAAY,GAAAZ,EAAA,EAAA,IAAAqC,GAAA8C,mBAAAnF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAK,MAAAzF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAE,QAAAtF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAH,WAAArF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAF,QAAAtF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAD,OAAAvF,EAAA,EAAA,IAAAuC,GAAAvC,EAAA,EAAA,IAAAyC,GAAAzC,EAAA,EAAA,IAAAE,GAAAF,EAAA,EAAA,IAAAgC,GAAAhC,EAAA,EAAA,IAAAoE,IAAApE,EAAA,EAAA,IAAAmE,IAAAnE,EAAA,EAAA,IAAAgB,IAAAhB,EAAA,EAAA,IAAAiD,GAAAjD,EAAA,EAAA,IAAA6B,GAAA7B,EAAA,EAAA,IAAAG,GAAAH,EAAA,EAAA,IAAAyD,EAAAH,QAAAtD,EAAA,EAAA,IAAAyD,EAAAF,MAAAvD,EAAA,EAAA,IAAAyD,EAAAD,OAAAxD,EAAA,EAAA,IAAAyD,EAAAJ,KAAArD,EAAA,EAAA,IAAA8B,GAAA9B,EAAA,EAAA,IAAAwB,IAAAxB,EAAA,EAAA,IAAAyB,GAAAzB,EAAA,EAAA,IAAA6D,GAAA7D,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAmC,GAAAnC,EAAA,EAAA,IAAA0B,IAAA1B,EAAA,EAAA,IAAAsB,IAAAtB,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,GAAAlB,EAAA,EAAA,IAAAuB,IAAAvB,EAAA,EAAA,IAAA+B,GAAA/B,EAAA,EAAA,IAAA2B,GAAA3B,EAAA,EAAA,IAAAoB,IAAApB,EAAA,EAAA,IAAAa,IAAAb,EAAA,EAAA,IAAAmB,IAAAnB,EAAA,EAAA,IAAAoC,GAAA+C,mBAAAnF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAK,MAAAzF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAE,QAAAtF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAH,WAAArF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAF,QAAAtF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAD,OAAAvF,EAAA,EAAA,IAAAiB,GAAAjB,EAAA,EAAA,IAAAc,GAAAd,EAAA,EAAA,IAAAkC,GAAAlC,EAAA,EAAA,IAAAe,GAAA,CAExD,MAAAyF,EAAUJ,GAAAA,OAAAA,EAAaC,OAAQ,CAAC5E,EAAUD,EAAQ,CAAC,EAAC8E,MAAO,CAAClC,GAAa,CAAC,CAAC,EAACmC,KAAAA,EAAQ,IAAAb,GAAA1F,QAAA6B,GAExD6D,GAAAA,CAAAC,EAAAC,MAAW,CAAA,GAClCD,EAACE,GACAhE,EAAA,GAAgB8D,EAACG,KAAM,GAAvB,GAA+BF,EAAC,EAAA,GACpC5F,MAAA6B,EAAA7B,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAHF,MAAA+F,GAAmB7F,EAAI8F,IAAKN,EAG1B,EACFO,GAAiBpE,GAAckE,GAAUC,IAAKwF,EAAc,EAC5DrF,EAAUM,GAAAA,OAAWJ,OACXJ,EAAQ,EAACK,MACV,CACL,EACAxE,EAAkB4E,KAAIC,IAAKxC,GAAYrC,EAAkBmE,GAAQW,MAAoB,EAArFzC,EAAsF,CACvF,EAAC0C,aACYjG,CAAU,EAC1BkG,GAAoBL,GAAAA,OAAWJ,OACrBnG,KAAO6G,KAAKf,IAAKyF,EAAiB,CAAC,EAACnF,MACrC,CAAC,EAAGH,EAACc,WAAY,CAAC,EAACJ,aACZ,EAAG,EACnB6E,GAAelF,EAACW,MAAOhF,CAAS,EAG3BmC,EAAA8C,GAAAA,OAAMC,IACE1C,GAAA,GAAG5D,EAAK,KACP6D,GAAA,GAAG5D,EAAM,KACR6D,GAAA,OAAO9D,EAAK,IAAIC,EAAM,GACrB8D,GAAA,MACLlC,EAAAA,GAESsC,EAAA,aAAazB,EAAMF,IAAK,IAAIE,EAAMJ,GAAI,IAE5C,MAAAuE,GAAApB,EAAE/E,EAAW,EAAX,EAAAA,CAA2B,EAC7BoG,GAAArB,EAAE/E,EAAW,EAAX,EAAAA,CAA2B,EAI/BqG,GAAArG,EAAW,EAAX,EAAAA,EAA2B,IAAAsG,GAAA/H,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,GAAAlB,EAAA,EAAA,IAAAiB,GAAAjB,QAAA8H,IADtBC,GAAAwB,GAAAA,yBACLzB,GACApF,EACAF,EACAtB,EACAD,CACF,EAACjB,MAAA0C,EAAA1C,MAAAwC,EAAAxC,MAAAkB,EAAAlB,MAAAiB,EAAAjB,MAAA8H,GAAA9H,MAAA+H,IAAAA,GAAA/H,EAAA,EAAA,EAQO,MAAA0J,GAAArH,GAAU+C,OAAaK,KACtBkE,GAAAtH,GAAUmD,OAAeF,OAAA,IAAAsE,GAAA5J,EAAA,EAAA,IAAA0J,IAAA1J,QAAA2J,IAFtBC,GAAA,CAAAnE,KACJiE,GAAuB5D,MACtB6D,EAAAA,EACR3J,MAAA0J,GAAA1J,MAAA2J,GAAA3J,MAAA4J,IAAAA,GAAA5J,EAAA,EAAA,EACe,MAAA6J,GAAAzH,GAAMgD,OAAaK,KAASkG,EAAAvJ,GAAMoD,OAAeF,OAAA,IAAAsG,EAAA5L,EAAA,EAAA,IAAA6J,IAAA7J,QAAA2L,GAAzDC,EAAA,CAAAnG,KAAQoE,GAAmB/D,MAAS6F,CAAAA,EAAuB3L,MAAA6J,GAAA7J,MAAA2L,EAAA3L,MAAA4L,GAAAA,EAAA5L,EAAA,EAAA,EAtBrEuE,2BAACuF,QAAA,CACK,GAAAlC,GACA,GAAAC,GACA,GAAA,EAAI1H,EACJ,GAAAgE,GAAaV,EAAMD,MAChB,MAAAuE,GAOG,SAAA,CAAA5B,EACL,EAAIhG,EAAU0L,GACb,EAACC,GACDtK,GAAW,EAAX,MAAA,GAAyBgF,EAC1BA,EAAE/E,EAAW,EAAX,EAAAA,CAA2B,CAAA,EAEtB,WAAAmI,GAIJ,OAAAgC,CAAAA,CAA2D,EAEpEpH,GAAA3D,GACCyG,EAAAA,kBAAAA,IAACyE,GAAAA,mBAAA,CACS,OAAAL,GAAMlE,OAAQwE,EAAY,EAC/B,EAAAN,GAAMlE,OAAQyE,EAAY,EAACjG,IAAK2B,GAAKnB,EAAEb,CAAC,CAAC,EACxC,GAAA,EAAIxF,EACJ,GAAAgE,GAAaV,EAAMD,MACf,OAAA,CAAA6B,UACKjD,GAAMoD,OAAkBH,UAAAC,OAC3BlD,GAAMoD,OAAeF,MAAAA,EAEnB,WAAA,CAAAD,UACChD,GAAUmD,OAAkBH,UAAAC,OAC/BjD,GAAUmD,OAAeF,MAAAA,EAE3BrE,OAAAA,EACAC,OAAAA,EACE,UAAA,YACV,cAAA,GACS,SAAA,WACEsB,UAAAA,CAAAA,CAAS,EAnBvB,KAuBI,MAAA0J,EAAA,EAAI/L,EAAa,GACjBgM,EAAA/H,GAAc,EACVgI,EAAAhK,GAAMoD,OAAcD,MAChB8G,GAAAhK,GAAUmD,OAAcD,MAAAvF,EAAA,EAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAAkM,GAAAlM,EAAA,EAAA,IAAAmM,GAAAnM,EAAA,EAAA,IAAAoM,GAAApM,QAAAqM,IAJrC5H,0BAACuD,GAAAA,UAAA,CACI,EAAAkE,EACA,EAAAC,EACI,MAAAC,EACI,UAAAC,GACLpK,KAAAA,EACN,SAAA,GAAQ,EACRjC,MAAAiC,EAAAjC,MAAAkM,EAAAlM,MAAAmM,EAAAnM,MAAAoM,EAAApM,MAAAqM,GAAArM,MAAAyE,GAAAA,EAAAzE,EAAA,EAAA,EAAAA,QAAAyC,GACDiC,EAAAjC,EAAY+E,OAAQ8E,EAA4B,EAACtG,IAAKuG,EAAY,EAACvM,MAAAyC,EAAAzC,MAAA0E,GAAAA,EAAA1E,EAAA,EAAA,EACnEqE,EAAA8D,GAAAA,gBACEnD,GAAAe,GAAUC,IAAKoC,GACbC,GAAAA,uBAAuBlC,EAAER,EAACE,EAAG,CAAC,EAA/B,KACEyC,EAAAA,kBAAAA,KAAAlB,GAAAA,OAAA,EAAA,CAEY,SAAA,CAAAmB,QACC,CAAApC,EACJA,EAAE,GAAGR,EAACE,EAAG,EAAE,EAACW,EACZ,CAAA,EACJgC,YACY,CAAArC,EACRA,EAAE,GAAGR,EAACE,EAAG,EAAE,EAACW,EACZ,EAACiC,WACQ,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAA0F,QAAW,EAACF,WAAc,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAE5D/C,SAAAA,CAAAA,EAACoB,KAAKf,IAAK,CAAA4C,GAAAC,IACVP,EAAAA,kBAAAA,kBACY,UAAA,wBAED,QAAA3G,EAAiBhB,EAAUkI,CAAC,IAAMlH,EAAjB,EAAA,GAAjB,IACK,aAAAmH,IAAA,CACZnF,EAAiB,CAAA,GAAKgC,EAACoD,UAAaF,CAAAA,CAAG,EACvC3E,GAAU4E,GAAKE,OAAQ,EACvBhF,EAAU8E,GAAKG,OAAQ,EACvB3H,KAAoB,CAAA,GAAKqE,EAACoD,UAAaF,CAAAA,CAAG,CAAC,EAEhC,YAAAK,IAAA,CACXvF,EAAiB,CAAA,GAAKgC,EAACoD,UAAaF,CAAAA,CAAG,EACvC3E,GAAU4E,GAAKE,OAAQ,EACvBhF,EAAU8E,GAAKG,OAAQ,CAAC,EAEZ,aAAA,IAAA,CACZtF,EAAiBhB,MAAS,EAC1BqB,EAAUrB,MAAS,EACnBuB,GAAUvB,MAAS,EACnBrB,KAAoBqB,MAAS,CAAC,EAEvB,QAAA,IAAA,EACHjB,IAAAM,KAEAmH,GAAAA,QAAQtF,EAAgB,CAAA,GAAK8B,EAACoD,UAAaF,CAAAA,CACjB,GAD1B9G,GAGA+B,EAAkBnB,MAAS,EAC3BjB,KAAqBiB,MAAS,IAE9BmB,EAAkB,CAAA,GAAK6B,EAACoD,UAAaF,CAAAA,CAAG,EACpCnH,IAAoBA,GAAmB,CAAA,GAAKiE,EAACoD,UAAaF,CAAAA,CAAG,GAEpE,EAGH,SAAA,CAAAvB,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACK,EAAAN,GAAY,GAAG+B,CAAC,EAAE,EACd,MAAA/B,GAAWG,UAAAA,EACR,SAAA,CAAAsB,QACC,CAAAvH,OACC,EAACwF,EACNA,EAAE,CAAC,EAAC4C,KACDzI,EAAUkI,CAAC,CAAA,EAClBL,YACY,CAAAxH,OACFqH,GAAAA,uBAAuBO,EAAE,EAA1B,EACJlC,KAAI8F,IAAKhG,EAAEoC,EAAY,EAAIpC,EAAE,CAAC,CAC9B,EAACA,EACD6B,GAAAA,uBAAuBO,EAAE,EAIzBpC,EAAE,CAAC,EAHFoC,GAAgB,EACfpC,EAAEoC,EACC,EAAHpC,EAAE,CAAC,EACD4C,KACFzI,EAAUkI,CAAC,EAACJ,WACN,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEI,KAAA,CAAA1H,OACI,EAACwF,EACNA,EAAE,CAAC,EAACiC,WACK,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAEnC,QAAA,UACC,QAAAzF,EAAA,cAAA,YAEV9B,GACCmG,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACK,EAACN,GAAY,GAAG+B,CAAC,EAAE,EAAe/B,GAAWG,UAAAA,EAAe,EACxD,MAAA,CAAAoC,WACO,SAAQ,GAChBjH,GAAM+C,mBAAN,CAAA,CAA8B,EAEzB,UAAAmE,EAAAA,GAAG,sBAAuBjH,GAAU8C,iBAAmB,EAC9D,GAAAyD,GAAMA,IAAM,EAAN,OAAA,MAAN,OACM,SAAA,CAAAL,QACC,CAAA/B,EAAKA,EAAE,CAAC,EAACmC,QAAW,EAACS,KAAQlH,GAAcvB,EAAUkI,CAAC,CAAA,EAAGL,YACrD,CAAAhC,EACRA,EAAEoC,IAAA,CAAO,EAACD,QACJ,EAACS,KACJlH,GAAcvB,EAAUkI,CAAC,EAACJ,WACpB,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAA0F,QACK,EAACF,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAG1Ca,qCAAyBX,GAAIlG,EAASF,EAAWtB,EAAQD,CAAM,EAClE,EA1BD,IAAA,GAhEI,GAAG0E,EAACG,KAAM,IAAIvD,EAAYsG,CAAC,GAAbA,CAAmB,EA4FxC,CACD,EACAzH,2BACEqL,eAAA,CAEG,SAAG9G,EAACG,KAAM,GAAEc,OAAU9F,EAAtB,GACO6E,EAACG,KAAM,GADd,GAEO,GAAGH,EAACG,KAAM,GAAE2D,UAAW,EAAG3I,CAAU,CAAC,MAE3C,EAAA0F,EAAE,CAAC,EAAI,EACP,EAAA,EACI,MAAAL,EAACc,UAAAA,EACA,OAAAxD,EAAMH,OACP,MAAAlB,GAAMgD,OAAeE,OACjB,UAAAjD,GAAU+C,OAAeE,OAC1B,UAAA,MACDhD,QAAAA,EACCW,SAAAA,CAAAA,CAAQ,EAfrB,IAAA,CAAA,EAjHI0C,EAACG,KAmIR,CAEJ,EACCb,EAAA1D,GAAA+F,EAAAA,kBAAAA,IAAAqD,EAAAA,kBAAAA,SAAA,CAEIpJ,SAAAA,GAASyE,IAAK,CAAA+D,EAAAC,KACb1C,EAAAA,kBAAAA,IAACoF,GAAAA,SAAA,CAEO,KAAA9D,EAAEsB,KACD,MAAAtB,EAAEuB,MACN,EAAA3D,EAAEoC,EAAEwB,KAAgB,EACnB,GAAA,EAAIjK,EACJ,GAAAgE,GAAaV,EAAMD,MACX,WAAAoF,EAAEvG,WACN,OAAAuG,EAAExG,OACDE,QAAAA,EACCW,SAAAA,GATL2C,EASa,CAErB,EAAC,EAfL,KAiBO5F,KAAAsC,EAAAtC,KAAAiC,EAAAjC,MAAAW,EAAAX,MAAAY,EAAAZ,EAAA,EAAA,EAAAqC,GAAA8C,kBAAAnF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAK,KAAAzF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAE,OAAAtF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAH,UAAArF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAF,OAAAtF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAD,MAAAvF,MAAAuC,EAAAvC,MAAAyC,EAAAzC,MAAAE,EAAAF,MAAAgC,EAAAhC,MAAAoE,GAAApE,MAAAmE,GAAAnE,MAAAgB,GAAAhB,MAAAiD,EAAAjD,MAAA6B,EAAA7B,MAAAG,EAAAH,EAAA,EAAA,EAAAyD,EAAAH,OAAAtD,EAAA,EAAA,EAAAyD,EAAAF,KAAAvD,EAAA,EAAA,EAAAyD,EAAAD,MAAAxD,EAAA,EAAA,EAAAyD,EAAAJ,IAAArD,MAAA8B,EAAA9B,MAAAwB,GAAAxB,MAAAyB,EAAAzB,MAAA6D,EAAA7D,MAAA0C,EAAA1C,MAAAmC,EAAAnC,MAAA0B,GAAA1B,MAAAsB,GAAAtB,MAAAwC,EAAAxC,MAAAkB,EAAAlB,MAAAuB,GAAAvB,MAAA+B,EAAA/B,MAAA2B,EAAA3B,MAAAoB,GAAApB,MAAAa,GAAAb,MAAAmB,GAAAnB,EAAA,EAAA,EAAAoC,GAAA+C,kBAAAnF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAK,KAAAzF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAE,OAAAtF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAH,UAAArF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAF,OAAAtF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAD,MAAAvF,MAAAiB,EAAAjB,MAAAc,EAAAd,MAAAkC,EAAAlC,MAAAe,GAAAf,MAAAqE,EAAArE,MAAAsE,EAAAtE,MAAAuE,GAAAvE,MAAAwE,GAAAxE,MAAAyE,EAAAzE,MAAA0E,EAAA1E,MAAA2E,GAAA3E,MAAA4E,GAAA5E,MAAA6E,GAAA7E,MAAA8E,GAAA9E,MAAA+E,EAAA/E,MAAAgF,GAAAhF,MAAAiF,EAAAjF,MAAAkF,CAAA,MAAAb,EAAArE,EAAA,EAAA,EAAAsE,EAAAtE,EAAA,EAAA,EAAAuE,GAAAvE,EAAA,EAAA,EAAAwE,GAAAxE,EAAA,EAAA,EAAAyE,EAAAzE,EAAA,EAAA,EAAA0E,EAAA1E,EAAA,EAAA,EAAA2E,GAAA3E,EAAA,EAAA,EAAA4E,GAAA5E,EAAA,EAAA,EAAA6E,GAAA7E,EAAA,EAAA,EAAA8E,GAAA9E,EAAA,EAAA,EAAA+E,EAAA/E,EAAA,EAAA,EAAAgF,GAAAhF,EAAA,EAAA,EAAAiF,EAAAjF,EAAA,EAAA,EAAAkF,EAAAlF,EAAA,EAAA,EAAA,IAAA0F,GAAA1F,EAAA,EAAA,IAAAqE,GAAArE,QAAAgF,IAAAhF,EAAA,EAAA,IAAAiF,GA3JVS,4BAACrB,EAAA,CACEW,SAAAA,CAAAA,GAyIAC,CAAAA,EAkBH,EAAkBjF,MAAAqE,EAAArE,MAAAgF,GAAAhF,MAAAiF,EAAAjF,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAAA,IAAA4H,GAAA5H,QAAAyC,GACjBmF,GAAAnF,EAAY+E,OAAQmF,EAA2B,EAAC3G,IAAK4G,EAAY,EAAC5M,MAAAyC,EAAAzC,MAAA4H,IAAAA,GAAA5H,EAAA,EAAA,EAAA,IAAA6H,GAAA7H,EAAA,GAAA,IAAAuE,IAAAvE,EAAA,GAAA,IAAAwE,IAAAxE,EAAA,GAAA,IAAAyE,GAAAzE,SAAA0E,GAAA1E,EAAA,GAAA,IAAA0F,IAAA1F,EAAA,GAAA,IAAA4H,IAAA5H,EAAA,GAAA,IAAAkF,GArNrE2C,GAAAS,EAAAA,kBAAAA,KAAA,IAAA,CAAc,UAAApD,EACZX,SAAAA,CAAAA,GAwBCC,GAsBDC,EAQCC,EACDgB,GA6JCkC,EAAAA,EACH,EAAI5H,OAAAuE,GAAAvE,OAAAwE,GAAAxE,OAAAyE,EAAAzE,OAAA0E,EAAA1E,OAAA0F,GAAA1F,OAAA4H,GAAA5H,OAAAkF,EAAAlF,OAAA6H,IAAAA,GAAA7H,EAAA,GAAA,EAAA,IAAA8H,GAAA9H,EAAA,GAAA,IAAAsE,GAAAtE,EAAA,GAAA,IAAA2E,IAAA3E,EAAA,GAAA,IAAA4E,IAAA5E,SAAA6E,IAAA7E,EAAA,GAAA,IAAA8E,IAAA9E,EAAA,GAAA,IAAA+E,GAAA/E,EAAA,GAAA,IAAA6H,IA7NNC,2BAACxD,EAAA,CACQ,MAAAK,GACC,OAAAC,GACC,QAAAC,GACC,UAAAC,GACLlC,IAAAA,EAELiF,SAAAA,GAuNF,EAAa7H,OAAAsE,EAAAtE,OAAA2E,GAAA3E,OAAA4E,GAAA5E,OAAA6E,GAAA7E,OAAA8E,GAAA9E,OAAA+E,EAAA/E,OAAA6H,GAAA7H,OAAA8H,IAAAA,GAAA9H,EAAA,GAAA,EAAA,IAAA+H,GAAA/H,EAAA,GAAA,IAAAqC,GAAAhB,SAAArB,EAAA,GAAA,IAAA+D,GAAA/D,EAAA,GAAA,IAAAiE,IAAAjE,EAAA,GAAA,IAAA0D,GAAA1D,EAAA,GAAA,IAAAoC,GAAAf,SAAArB,EAAA,GAAA,IAAAqB,IACZ0G,GAAArE,GAAArC,IAAA0C,GAAAE,2BACEsG,GAAAA,QAAA,CACO7G,OACArC,KAAAA,GACA0C,OACAE,KAAAA,GACW,gBAAA7B,GAAMf,QACZ,UAAAgB,GAAUhB,QAAS,EAPjC,KASOrB,EAAA,GAAA,EAAAqC,GAAAhB,QAAArB,OAAA+D,EAAA/D,OAAAiE,GAAAjE,OAAA0D,EAAA1D,EAAA,GAAA,EAAAoC,GAAAf,QAAArB,OAAAqB,GAAArB,OAAA+H,IAAAA,GAAA/H,EAAA,GAAA,EAAA,IAAA0J,GAAA1J,EAAA,GAAA,IAAAgC,GAAAhC,SAAA6D,GACP6F,GAAA1H,GAAkB6B,IAAmBlB,OACpC2E,EAAAA,kBAAAA,IAACkD,OACO,KAAA3G,IAAmBlB,OAChB,QAAA,IAAA,CACPmB,EAAkBnB,MAAS,CAAC,EAG9B,iCAAA,MAAA,CACY,UAAA,0BAER,wBAAA,OAAOX,GAAmB,SAA1B,CAAAyI,OACcC,GAAAA,YAAY1I,EAAgB6B,CAAc,CAAA,EADxDlB,uBAKMX,GAAmB,WAAaA,EAAe6B,CAAqB,EAA3E,KACH,CAAA,CACF,EAjBD,KAkBO7D,OAAAgC,EAAAhC,OAAA6D,EAAA7D,OAAA0J,IAAAA,GAAA1J,EAAA,GAAA,EAAA,IAAA2J,GAAA,OAAA3J,EAAA,GAAA,IAAA8H,IAAA9H,SAAA+H,IAAA/H,EAAA,GAAA,IAAA0J,IA5PVC,GAAArB,EAAAA,kBAAAA,KAAAqC,6BAAA,CACE7C,SAAAA,CAAAA,GA+NCC,GAUA2B,EAAAA,EAkBO,EACP1J,OAAA8H,GAAA9H,OAAA+H,GAAA/H,OAAA0J,GAAA1J,OAAA2J,IAAAA,GAAA3J,EAAA,GAAA,EA7PH2J,EA6PG,CA5UA,SAAAiD,GAAAhC,EAAA,CAAA,OA4S8DjF,EAACkF,KAAM,CA5SrE,SAAA8B,GAAA7B,EAAA,CAAA,OA4S6BnF,EAACoF,WAAc,OAAO,CA5SnD,SAAAwB,GAAAvB,EAAA,CAAA,OA8I+DrF,EAACkF,KAAM,CA9ItE,SAAAyB,GAAArB,EAAA,CAAA,OA8I6BtF,EAACoF,WAAc,QAAQ,CA9IpD,SAAAkB,GAAAf,EAAA,CAAA,OAmH6BvF,IAAM,CAAC,CAnHpC,SAAAqG,GAAAb,EAAA,CAAA,OAkHkCxF,IAAM,CAAC,CAlHzC,SAAA8F,GAAAL,EAAAC,EAAA,CAAA,MA0EiC,GAAGzF,CAAC,EAAE,CA1EvC,SAAA4F,GAAAF,EAAA,CAAA,MAiE8C,GAAG3F,EAACE,EAAG,EAAE,CCxWvD,SAAAgH,GAAA9M,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,EAAA,EACL,CAAAC,KAAAA,EAAA4M,WAAAA,EAAAC,OAAA3M,GAAA4M,QAAAA,GAAAC,iBAAAA,GAAArM,WAAAN,GAAAO,UAAAL,GAAAM,WAAAJ,EAAAM,OAAAA,EAAAD,MAAAA,EAAAmM,SAAAA,EAAA3K,YAAAA,GAAA4K,iBAAAA,GAAAlM,OAAA6B,GAAA5B,OAAAiC,EAAAhC,WAAAiC,GAAAgK,eAAApI,GAAAqI,QAAAA,GAAAC,gBAAArI,GAAA9E,WAAAA,EAAAE,YAAAA,GAAAE,UAAAA,EAAAE,aAAAA,EAAAW,WAAA8D,EAAAqI,eAAAA,EAAAlM,QAAAA,EAAAC,kBAAAA,EAAAC,UAAAA,EAAAiM,QAAAA,EAAAhM,SAAAA,EAAAC,SAAAA,EAAAC,mBAAAA,EAAA+L,cAAAlJ,EAAAmJ,aAAAlJ,EAAAmJ,SAAAlJ,EAAA5C,WAAAA,EAAA+L,UAAAlJ,EAAAmJ,MAAAlJ,EAAA7C,gBAAAA,EAAAgM,UAAAA,GAAA/L,4BAAA6C,GAAA5C,eAAAA,GAAAC,aAAAA,EAAAE,UAAA0C,GAAA3C,WAAAA,GAAAE,OAAAA,EAAAC,WAAAA,EAAA0L,SAAAjJ,EAAAxC,QAAAyC,EAAAvC,UAAAkD,EAAAjD,aAAAmF,EAAAoG,SAAAnG,EAAAnF,QAAAoF,GAAAmG,cAAAA,GAAAC,SAAAA,GAAAC,YAAApG,EAAAA,EAyDIhI,EAtDFgN,EAAA3M,KAAAuC,OAASyL,GAAAA,OAAMC,MAAMC,kBAAkBvB,OAAvC3M,GAGAQ,EAAAN,KAAAqC,OAAA,IAAArC,GACAO,GAAAL,KAAAmC,OAAA,GAAAnC,GACAM,GAAAJ,IAAAiC,OAAA,IAAAjC,EAMAO,EAAA6B,KAAAH,OAAA,GAAAG,GACA5B,EAAAiC,IAAAR,OAAA,GAAAQ,EACAhC,GAAAiC,KAAAT,OAAA,GAAAS,GACAgK,GAAApI,KAAArC,OAAA,GAAAqC,GAEAsI,GAAArI,KAAAtC,OAAA,GAAAsC,GAKA7D,GAAA8D,IAAAvC,OAAA,GAAAuC,EASAuI,EAAAlJ,IAAA5B,OAAA,GAAA4B,EACAmJ,GAAAlJ,IAAA7B,OAAA,GAAA6B,EACAmJ,EAAAlJ,IAAA9B,OAAA,KAAA8B,EAEAmJ,EAAAlJ,IAAA/B,OAAA,EAAA+B,EACAmJ,GAAAlJ,IAAAhC,OAAA,QAAAgC,EAGA5C,GAAA6C,KAAAjC,OAAA,GAAAiC,GAGAzC,GAAA0C,KAAAlC,OAAA,EAAAkC,GAIAkJ,GAAAjJ,IAAAnC,OAAA,GAAAmC,EACAxC,GAAAyC,IAAApC,OAAA,GAAAoC,EACAvC,GAAAkD,IAAA/C,OAAA,EAAA+C,EAAa,IAAAgE,GAAA1J,OAAA4H,GACb8B,GAAA9B,IAAAjF,OAAA,CAAA,EAAAiF,EAAiB5H,KAAA4H,EAAA5H,KAAA0J,IAAAA,GAAA1J,EAAA,CAAA,EAAjB,MAAAyC,EAAAiH,GACAsE,GAAAnG,IAAAlF,OAAA,CAAA4L,QAAsB,GAAKC,SAAY,GAAKC,mBAAsB,EAAA,EAAlE5G,EACAnF,GAAAoF,KAAAnF,OAAA,KAAAmF,GAMF4G,GAHE3G,KAAApF,OAAA,WAAAoF,MAG2B,aAAhBjI,GAAAyL,GACb,CAAAoD,GAAAC,EAAA,EAAgChL,EAAAA,SAAS,CAAC,EAC1C,CAAAiL,GAAAC,EAAA,EAAkClL,EAAAA,SAAS,CAAC,EAC5C,CAAAmL,GAAAC,EAAA,EAAwBpL,EAAAA,SAASoK,GAAQQ,QAAS,EAClDS,GAAwBC,QACtBC,GAAAA,OAAOjP,EAAM,OAAQ,EAAI,EAAC8F,IAAKL,IAC7ByJ,GAAAA,MAAM,GAAGzJ,EAAC,GAAIqI,GAAQqB,YAAR,OAA+B,IAAIC,IAAM,EAACC,SAC1D,EACArJ,EACF,EACA,CAAAsJ,GAAAC,EAAA,EAA0B7L,WAASoK,GAAQQ,SAAR,EAAwBS,GAAerI,OAAU,CAAC,EACrF,CAAAjF,GAAA+N,CAAA,EAA0C9L,EAAAA,SAA6BjB,MAAS,EAEhFgN,EAAiB9M,EAAAA,OAAuB,IAAI,EAC5C+M,EAAuB/M,EAAAA,OAAuB,IAAI,EAAE,IAAA8G,EAAAC,EAAA5J,EAAA,CAAA,IAAA6P,OAAAC,IAAA,2BAAA,GAE1CnG,EAAAA,IAAA,CACR,MAAAoG,GAAuB,IAAIC,eAAeC,IAAA,CACxCrB,GAAYqB,GAAO,CAAA,EAAGC,OAAOC,aAAjB,GAAoC,EAChDrB,GAAamB,GAAO,CAAA,EAAGC,OAAOE,cAAjB,GAAqC,CAAC,CACpD,EACD,OAAIT,EAAQU,SACVN,GAAcO,QAASX,EAAQU,OAAQ,EAElC,IAAMN,GAAcQ,WAAAA,CAAa,EACvC3G,EAAA,CAAA,EAAE5J,KAAA2J,EAAA3J,KAAA4J,IAAAD,EAAA3J,EAAA,CAAA,EAAA4J,EAAA5J,EAAA,CAAA,GATLwQ,EAAAA,UAAU7G,EASPC,CAAE,EAEL4G,EAAAA,UAAU,IAAA,CACR,MAAAC,GAAiBC,YACf,IAAA,CACEjB,OAAe7J,GAAIqJ,GAAerI,OAAU,EAAIhB,GAAI,EAArC,CAA2C,CAAC,GAE5DoI,GAAQ2C,OAAR,GAAuB,GAC1B,EACA,OAAK5B,IAAM6B,cAAcH,EAAQ,EAC1B,IAAMG,cAAcH,EAAQ,CAAC,EACnC,CAACxB,GAAiBF,GAAMf,GAAQ2C,KAAM,CAAC,EAE1C,MAAAE,GAAgBC,kBACd7B,GACAO,GACAxB,GAAQS,mBACRT,GAAQqB,YAAR,MACF,EAGGhL,EAAA0M,GAAAA,eACYlH,GAAAxH,GAAU2O,eACdrF,EAAAvJ,GAAM4O,eAAgB,IAAApF,GAAA5L,OAAAqC,GAAA4O,aAAAjR,OAAAqC,GAAAkD,OAAAvF,OAAAE,GAAAF,EAAA,CAAA,IAAA0N,IAAA1N,EAAA,CAAA,IAAAiN,IAAAjN,EAAA,CAAA,IAAAyN,GAAAzN,QAAA8M,GAAA9M,EAAA,EAAA,IAAAoC,GAAA6O,aAAAjR,EAAA,EAAA,IAAAoC,GAAAmD,OAAAvF,EAAA,EAAA,IAAAe,GAa5B6K,GAAAkB,GAAAG,IAAAQ,GAAAC,GACCpG,wBAAC4J,GAAAA,aACS,OAAA,CAAA3L,MACCnD,GAAMmD,MAAO0L,YACP7O,GAAM6O,WAAAA,EAET,WAAA,CAAA1L,MACHlD,GAAUkD,MAAO0L,YACX5O,GAAU4O,WAAAA,EAEbnE,WAAAA,EACMG,iBAAAA,GACXlM,MAAAA,EACQ,cAAA0M,EAAAmC,EAAAjN,OAEb,aAAA+K,GACIxN,EAAI8F,IAAKgB,EAAW,EAACQ,OAAQC,EAAoB,EAACb,OAAU,EAC1D1G,EAAI8F,IAAK0B,EAAW,EAACF,OAAQS,EACG,EAAhC/H,EAAIsH,OAAQU,EAAoB,EAHtC,KAIQ,EAnBb,KAsBOlI,EAAA,CAAA,EAAAqC,GAAA4O,YAAAjR,EAAA,CAAA,EAAAqC,GAAAkD,MAAAvF,KAAAE,EAAAF,KAAA0N,GAAA1N,KAAAiN,GAAAjN,KAAAyN,EAAAzN,MAAA8M,EAAA9M,EAAA,EAAA,EAAAoC,GAAA6O,YAAAjR,EAAA,EAAA,EAAAoC,GAAAmD,MAAAvF,MAAAe,EAAAf,MAAA4L,IAAAA,GAAA5L,EAAA,EAAA,EACP,MAAAkM,GAAA8B,GAAQO,SAAYU,GAAerI,OAAU,GAA7CiK,GACCvI,EAAAA,kBAAAA,KAAA,MAAA,CAAe,UAAA,0BAA8B,IAAA,MAC3C,SAAA,CAAAhB,EAAAA,kBAAAA,IAAA,SAAA,CACO,KAAA,SACI,QAAA,IAAA,CACP0H,GAAQ,CAACD,EAAI,CAAC,EAEN,UAAA,6CACE,aAAAA,GAAA,2BAAA,0BAEXA,SAAAA,GAAOzH,EAAAA,kBAAAA,IAAC6J,GAAAA,MAAA,EAAK,EAAM7J,EAAAA,kBAAAA,IAAC8J,GAAAA,SACvB,EACA9J,EAAAA,kBAAAA,IAAC+J,GAAAA,GAAA,CACM,IAAApC,GAAe,CAAA,EACf,IAAAA,GAAgBA,GAAerI,OAAU,CAAC,EACxCiK,MAAAA,GACD,KAAA,KACQ,aAAA5B,GAAgBA,GAAerI,OAAU,CAAC,EACjD,MAAAqI,GAAgBO,EAAK,EACV,iBAAA8B,IAAA,CAChB7B,GAASR,GAAesC,QAASD,EAAmB,CAAC,CAAC,EAE9C,SAAAE,IAAA,CACR/B,GAASR,GAAesC,QAASD,EAAmB,CAAC,CAAC,EAE7C,aAAA,6DAAA,IAEf,EA3BD,KA6BcnF,GAAA,iDACZC,GAAAlM,EAAI0G,SAAY,EACfU,EAAAA,kBAAAA,IAACmK,cAAA,CAAA,CAAU,EADZnJ,EAAAA,kBAAAA,KAAAqC,EAAAA,kBAAAA,SAAA,CAIIyC,SAAAA,CAAAA,GACC9F,EAAAA,kBAAAA,IAACoK,GAAAA,yBAAA,CACQ3Q,MAAAA,EACMwB,YAAAA,GACLwK,OAAAA,EACUI,iBAAAA,GACAuC,iBAAAA,EACL,YAAA,GACF,UAAArN,GAAUsP,WAAAA,CAAa,EARrC,KAWDrK,EAAAA,kBAAAA,IAACsK,GAAAA,UAAA,CAAejC,IAAAA,EACbhB,SAAAA,IAAAE,GACCvH,EAAAA,kBAAAA,IAACoH,EAAA,CAEG,KAAAT,KAAkBtL,OACdsL,KAAkB,QAChB4D,GAAAA,QACEC,GAAAA,qCACE5R,EACA8N,GAAQqB,YAAR,MACF,EAAC7H,OACSwD,IACNgD,GAAQO,QACJ5I,GAACoM,OACDC,GAAAA,OACE,IAAI1C,KAAKL,GAAgBO,EAAK,CAAC,EAC/BxB,GAAQqB,YAAR,MACF,EALJrE,EAOF,EAACxD,OACOY,IAAM2F,GAAA,CAAYpI,GAACoB,KAAKkL,MAAO5H,EAAoB,EAA7CjC,EAAmD,EACnEoD,GACA,CAAC0C,IAAA,KAAiB,CAsBpB,EApBA2D,GAAAA,QACEC,GAAAA,qCACE5R,EACA8N,GAAQqB,YAAR,MACF,EAAC7H,WAEGwG,GAAQO,QACJ5I,GAACoM,OACDC,GAAAA,OACE,IAAI1C,KAAKL,GAAgBO,EAAK,CAAC,EAC/BxB,GAAQqB,YAAR,MACF,EALJzE,EAOF,EAACpD,OACO0K,IAAMnE,GAAA,CAAYpI,GAACoB,KAAKkL,MAAOxG,EAAoB,EAA7CyG,EAAmD,EACnEC,IACE9J,GAAAA,uBAAuB1C,GAACoB,KAAMkH,EAAa,CAEnB,EAFxB,KAEItI,GAACoB,KAAMkH,EAAa,EAC1B,CAACC,IAAA,KAAiB,CACpB,EACF4D,wCACE5R,EACA8N,GAAQqB,YAAR,MACF,EAAC7H,OAAQ4K,IAAMrE,GAAA,CAAYpI,GAACoB,KAAKkL,MAAOjG,EAAoB,EAA7CoG,EAAmD,EAE7DrF,UAAAA,EACJ,MAAAhM,GAAA4N,GACC,OAAAjI,KAAI2L,IACVzE,EACA5M,IACGuM,EACGK,GACG7M,GAAA4N,IAAqBpB,EAAiBK,GACpC7M,GAAA4N,IAAqBpB,EADxBK,GAGC7M,GAAA4N,IAAqBpB,EAL3BsB,GAOL,EACQ5N,OAAAA,EACAC,OAAAA,EACIC,WAAAA,GACAP,WAAAA,EACDC,UAAAA,GACCV,WAAAA,EACCE,YAAAA,GACFE,UAAAA,EACGE,aAAAA,EACFK,WAAAA,GACAM,WAAAA,GACHC,QAAAA,EACUC,kBAAAA,EACRC,UAAAA,EAET,SAAC8G,GAAAA,uBAAuB7G,CAAQ,EAE5BkF,KAAI2L,IAAI,GACDnS,EAAI8F,IAAKsG,EAIZ,CACF,EAAI,EANN,EAQE5F,KAAI2L,OACCnS,EAAI8F,IAAK2G,EAIZ,CACF,EAfDnL,EAkBL,SAAC6G,GAAAA,uBAAuB5G,CAAQ,EAE5BiF,KAAIC,IAAI,GACDzG,EAAI8F,IAAKsM,EAIZ,CACF,GAAK,EANP,EAQE5L,KAAIC,IAAI,GACHzG,EAAI8F,IAAKuM,EAIZ,CACF,EAfD9Q,EAiBaC,mBAAAA,EACLC,cAAAA,GACHE,WAAAA,EACP,IAAA8L,IAAa,MAAQA,IAAa,KACtB7L,gBAAAA,EACYC,4BAAAA,GACbC,eAAAA,GACFC,aAAAA,EACHE,UAAAA,GACCD,WAAAA,GACJE,OAAAA,EACIC,WAAAA,EACCE,YAAAA,GAEX,QAAAD,KAAY,GAAZ,CAAAoG,SACgB,GAAG1F,KAAQ,GAAID,OAAU,EAAA,EACrCT,IAAA,CAAAoG,SAAuB,EAAC1F,KAAQ,GAAID,OAAU,CAAA,EAEzCP,UAAAA,GACGC,aAAAA,EACLC,QAAAA,EAAAA,CAAO,EAtInB,IAAA,CAyIH,CAAA,EAAY,EAEf,IAAA2J,GAAArM,QAAAoM,IA5JHC,GAAA/E,EAAAA,kBAAAA,IAAA,MAAA,CAAe,UAAA6E,GACZC,SAAAA,GA4JH,EAAMpM,MAAAoM,GAAApM,MAAAqM,IAAAA,GAAArM,EAAA,EAAA,EAAA,IAAAwS,GAAAxS,EAAA,EAAA,IAAAqC,GAAAoQ,UAAAzS,EAAA,EAAA,IAAAqC,GAAAqQ,QAAA1S,EAAA,EAAA,IAAAkN,GAAAlN,EAAA,EAAA,IAAAgN,IAAAhN,EAAA,EAAA,IAAAoC,GAAAqQ,UAAAzS,EAAA,EAAA,IAAAoC,GAAAsQ,QAAA1S,QAAAe,GACLyR,GAAAxF,IAAAE,EACC5F,EAAAA,kBAAAA,IAACqL,GAAAA,YAAA,CACS,OAAA,CAAAF,SAAYrQ,GAAMqQ,SAAUC,OAAUtQ,GAAMsQ,MAAAA,EACxC,WAAA,CAAAD,SACApQ,GAAUoQ,SAAUC,OACtBrQ,GAAUqQ,MAAAA,EAEX1F,QAAAA,GACCE,SAAAA,EACHnM,MAAAA,CAAAA,CAAK,EATf,KAWOf,EAAA,EAAA,EAAAqC,GAAAoQ,SAAAzS,EAAA,EAAA,EAAAqC,GAAAqQ,OAAA1S,MAAAkN,EAAAlN,MAAAgN,GAAAhN,EAAA,EAAA,EAAAoC,GAAAqQ,SAAAzS,EAAA,EAAA,EAAAoC,GAAAsQ,OAAA1S,MAAAe,EAAAf,MAAAwS,IAAAA,GAAAxS,EAAA,EAAA,EAAA,IAAA4S,GAAA,OAAA5S,EAAA,EAAA,IAAAqE,GAAArE,EAAA,EAAA,IAAA8N,IAAA9N,EAAA,EAAA,IAAAsN,IAAAtN,EAAA,EAAA,IAAAwN,GAAAxN,EAAA,EAAA,IAAAgB,GAAAhB,QAAA2N,GAAA3N,EAAA,EAAA,IAAA4N,GAAA5N,EAAA,EAAA,IAAAqN,IAAArN,EAAA,EAAA,IAAAuN,GAAAvN,EAAA,EAAA,IAAA6J,IAAA7J,EAAA,EAAA,IAAA2L,GAAA3L,EAAA,EAAA,IAAA4L,IAAA5L,EAAA,EAAA,IAAAkM,IAAAlM,EAAA,EAAA,IAAAqM,IAAArM,EAAA,EAAA,IAAAwS,IAAAxS,EAAA,EAAA,IAAA6N,IAAA7N,QAAAe,GA5OV6R,4BAACvO,EAAA,CACY,UAAAwF,GACJ,MAAA8B,EACH6B,KACCoC,MACO9B,aAAAA,GACKR,gBAAAA,GACVO,MAAAA,GACGF,SAAAA,EACCC,UAAAA,EACJ7M,MAAAA,EACCC,OAAAA,EACQuM,eAAAA,EACPF,QAAAA,GAERzB,SAAAA,CAAAA,GAuBAM,GA6BDG,GA8JCmG,EAAAA,EAYH,EAAiBxS,MAAAqE,EAAArE,MAAA8N,GAAA9N,MAAAsN,GAAAtN,MAAAwN,EAAAxN,MAAAgB,EAAAhB,MAAA2N,EAAA3N,MAAA4N,EAAA5N,MAAAqN,GAAArN,MAAAuN,EAAAvN,MAAA6J,GAAA7J,MAAA2L,EAAA3L,MAAA4L,GAAA5L,MAAAkM,GAAAlM,MAAAqM,GAAArM,MAAAwS,GAAAxS,MAAA6N,GAAA7N,MAAAe,EAAAf,MAAA4S,IAAAA,GAAA5S,EAAA,EAAA,EA7OjB4S,EA6OiB,CAvVd,SAAAL,GAAAM,EAAA,CAAA,OA0SuBnM,KAAIC,IAAI,GACFhB,EAACoB,KAAKS,OAAQsL,EAA+B,CACnD,CAAC,CA5SxB,SAAAA,GAAAC,EAAA,CAAA,MA2SgD,CAAC1K,GAAAA,uBAAuB2K,CAAC,CAAC,CA3S1E,SAAAV,GAAAW,EAAA,CAAA,OAkSuBvM,KAAIC,IAAI,GACFhB,EAACoB,KAAKS,OAAQoF,EAA+B,CACnD,CAAC,CApSxB,SAAAA,GAAAsG,EAAA,CAAA,MAmSgD,CAAC7K,GAAAA,uBAAuB2K,CAAC,CAAC,CAnS1E,SAAArG,GAAAwG,EAAA,CAAA,OAuRuBzM,KAAI2L,IAAI,GACF1M,EAACoB,KAAKS,OAAQ+E,EAA+B,CACnD,CAAC,CAzRxB,SAAAA,GAAAyG,EAAA,CAAA,MAwRgD,CAAC3K,GAAAA,uBAAuB2K,CAAC,CAAC,CAxR1E,SAAA1G,GAAA8G,EAAA,CAAA,OA+QuB1M,KAAI2L,IAAI,GACF1M,EAACoB,KAAKS,OAAQyE,EAA+B,CACnD,CAAC,CAjRxB,SAAAA,GAAAoH,EAAA,CAAA,MAgRgD,CAAChL,GAAAA,uBAAuB2K,CAAC,CAAC,CAhR1E,SAAAhH,GAAAsH,EAAA,CAAA,OA6OiEC,GAAQ,IAAI,CA7O7E,SAAA9H,GAAA+H,EAAA,CAAA,OAmOsED,GAAQ,IAAI,CAnOlF,SAAA/H,GAAAV,EAAA,CAAA,OAkN0B2I,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ8C,EAAiC,CAAC,CAAC,CAlN/E,SAAAA,GAAA1B,EAAA,CAAA,MAkNkD,CAACP,GAAAA,uBAAuBO,CAAE,CAAC,CAlN7E,SAAAyB,GAAAkJ,EAAA,CAAA,OAiNsEA,GAAQ,IAAI,CAjNlF,SAAArL,GAAAgD,EAAA,CAAA,OA2I4BvF,IAAMhD,MAAS,CA3I3C,SAAAsF,GAAAkD,EAAA,CAAA,OA0I6CxF,IAAMhD,MAAS,CA1I5D,SAAA+E,GAAA4D,EAAA,CAAA,OA0IyB3F,EAACzF,IAAK,CA1I/B,SAAAuH,GAAAwD,EAAA,CAAA,OAyI2CtF,IAAMhD,MAAS,CAzI1D,SAAAqE,GAAAW,EAAA,CAAA,OAyIuBhC,EAACzF,IAAK,CAzI7B,SAAAgG,GAAAwN,EAAAC,EAAA,CAAA,OAoEOC,GAAAA,UAAUF,EAAGC,CAAC,CAAC,CCzFtB,SAAA7T,GAAAC,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,GAAA,EACL,CAAAC,KAAAA,EAAA2T,SAAAA,EAAA5S,OAAAA,GAAAC,OAAAA,GAAAN,WAAAA,GAAAO,WAAAA,GAAAN,UAAAA,GAAAC,WAAAA,EAAAC,MAAAA,EAAAC,OAAAA,EAAAuB,YAAAA,EAAAhC,UAAAH,GAAAK,aAAAH,GAAAH,WAAAK,GAAAH,YAAAK,EAAAU,WAAAA,GAAAC,QAAAA,GAAAC,kBAAAA,GAAAC,UAAAA,GAAAI,cAAAA,EAAAmS,sBAAAA,GAAAtS,SAAAA,EAAAC,SAAAA,EAAAC,mBAAAA,EAAAG,WAAAA,EAAAD,IAAAA,EAAAE,gBAAAA,EAAAiS,gBAAAA,EAAAhS,4BAAAA,EAAAC,eAAAA,EAAAC,aAAAA,EAAAC,WAAAA,EAAAC,UAAAA,EAAAC,OAAAA,EAAAC,WAAAA,EAAAC,QAAAA,EAAA0R,cAAAA,EAAAxR,UAAAA,EAAAC,aAAAA,EAAAC,QAAAA,EAAAA,EAyCI3C,EA7BFQ,GAAAH,KAAAuC,OAAA,GAAAvC,GACAK,GAAAH,KAAAqC,OAAA,GAAArC,GACAH,EAAAK,KAAAmC,OAAA,IAAAnC,GACAH,GAAAK,IAAAiC,OAAA,GAAAjC,EA2BFkC,GAAeC,EAAAA,OAAO,IAAI,EAAE,IAAAC,EAAA9C,EAAA,CAAA,IAAAsC,EAAAS,QAAA/C,EAAA,CAAA,IAAAsC,EAAAU,MACOF,EAAA,CAAAE,KAC3BV,EAAOU,KAAKD,OACVT,EAAOS,MAAAA,EAChB/C,EAAA,CAAA,EAAAsC,EAAAS,OAAA/C,EAAA,CAAA,EAAAsC,EAAAU,KAAAhD,KAAA8C,GAAAA,EAAA9C,EAAA,CAAA,EAHD,MAAAiD,EAAiBC,GAAAA,UAAUN,GAAQE,CAGlC,EAED,CAAAY,EAAAC,CAAA,EAA0CC,EAAAA,SAAcjB,MAAS,EAEjE,CAAAkB,EAAAC,CAAA,EAA4CF,EAAAA,SAAcjB,MAAS,EACnE,CAAAoB,EAAAC,EAAA,EAA4BJ,EAAAA,SAA6BjB,MAAS,EAClE,CAAAsB,GAAAC,EAAA,EAA4BN,EAAAA,SAA6BjB,MAAS,EAE3DQ,GAAAlB,EAAe1B,GAAY,GAA3BA,GAAyC,IAAA6C,EAAApD,EAAA,CAAA,IAAAS,IAAAT,EAAA,CAAA,IAAAG,GAAAH,EAAA,CAAA,IAAAK,IAAAL,OAAAmD,IADjCC,EAAA,CAAAC,IACRF,GAAyCG,OACtC7C,GAAY8C,KACdpD,EAAUqD,MACTnD,EAAAA,EACRL,KAAAS,GAAAT,KAAAG,EAAAH,KAAAK,GAAAL,KAAAmD,GAAAnD,KAAAoD,GAAAA,EAAApD,EAAA,CAAA,EALD,MAAAyD,EAAeL,EAMfe,GAAmBpD,EAAQ0C,EAAMF,KAAQE,EAAMD,MAC/CY,GAAoBpD,EAASyC,EAAMJ,IAAOI,EAAMH,OAAQ,IAAAe,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAA,GAAAlF,EAAA,CAAA,IAAAsC,GAAAtC,EAAA,CAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAA6T,GAAA7T,EAAA,EAAA,IAAAY,IAAAZ,EAAA,EAAA,IAAAqC,GAAA8C,mBAAAnF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAC,WAAArF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAE,QAAAtF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAG,OAAAvF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAC,MAAAzF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAF,QAAAtF,EAAA,EAAA,IAAAuC,GAAAvC,EAAA,EAAA,IAAAyC,GAAAzC,EAAA,EAAA,IAAAE,GAAAF,EAAA,EAAA,IAAAgC,GAAAhC,EAAA,EAAA,IAAAgU,GAAAhU,EAAA,EAAA,IAAAoE,IAAApE,EAAA,EAAA,IAAAmE,IAAAnE,EAAA,EAAA,IAAAgB,GAAAhB,EAAA,EAAA,IAAA8T,IAAA9T,EAAA,EAAA,IAAAiD,GAAAjD,EAAA,EAAA,IAAA6B,GAAA7B,EAAA,EAAA,IAAAyD,EAAAH,QAAAtD,EAAA,EAAA,IAAAyD,EAAAF,MAAAvD,EAAA,EAAA,IAAAyD,EAAAJ,KAAArD,EAAA,EAAA,IAAA8B,GAAA9B,EAAA,EAAA,IAAAwB,GAAAxB,EAAA,EAAA,IAAA+T,GAAA/T,EAAA,EAAA,IAAAyB,GAAAzB,EAAA,EAAA,IAAA6D,GAAA7D,EAAA,EAAA,IAAA0C,IAAA1C,EAAA,EAAA,IAAAmC,GAAAnC,EAAA,EAAA,IAAA0B,GAAA1B,EAAA,EAAA,IAAAsB,IAAAtB,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,IAAAlB,EAAA,EAAA,IAAAuB,IAAAvB,EAAA,EAAA,IAAA+B,GAAA/B,EAAA,EAAA,IAAA4B,GAAA5B,EAAA,EAAA,IAAA2B,GAAA3B,EAAA,EAAA,IAAAoB,IAAApB,EAAA,EAAA,IAAAa,IAAAb,QAAAmB,IAAAnB,EAAA,EAAA,IAAAoC,GAAA+C,mBAAAnF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAC,WAAArF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAE,QAAAtF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAG,OAAAvF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAC,MAAAzF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAF,QAAAtF,EAAA,EAAA,IAAAiB,IAAAjB,EAAA,EAAA,IAAAO,IAAAP,EAAA,EAAA,IAAAc,GAAAd,EAAA,EAAA,IAAAkC,GAAAlC,QAAAe,EAAA,CAAA,IAAA2E,EAAA1F,QAAA6B,GAE5B6D,EAAAA,CAAAC,EAAAC,KAAW,CAAA,GAClCD,EAACE,GACAhE,EAAA,GAAgB8D,EAACG,KAAM,GAAvB,GAA+BF,CAAC,EAAA,GACpC5F,MAAA6B,EAAA7B,MAAA0F,GAAAA,EAAA1F,EAAA,EAAA,EAHF,MAAA+F,GAAmB7F,EAAI8F,IAAKN,CAG1B,EACFS,GAAUC,GAAAA,OAAAA,EAAaC,OAAQ,CAAC5E,EAAUD,CAAQ,CAAC,EAAC8E,MAAO,CAAC,EAAGnC,EAAU,CAAC,EAACoC,KAAAA,EAC3EN,GAAiBpE,GAAckE,GAAUC,IAAKE,EAAc,EAC5DM,GAAUC,GAAAA,KAAAA,EAAWJ,OACXJ,EAAQ,EAACK,MACV,CACL,EACAyN,EACIrN,KAAI2L,IAAKjO,GAAa2P,EAAkB9N,GAAQW,MAGpC,EAFZ9E,EACE4E,KAAIC,IAAKvC,GAAatC,EAAkBmE,GAAQW,MACtC,EAFZxC,EAEa,CAClB,EAACyC,aACYjG,EAAU,EAC1BsG,GAAef,GAACgB,MAAOhF,CAAS,EAI3BmC,EAAA8C,GAAAA,OAAMC,IACAzE,EAAAA,GACEgC,GAAA,GAAG7D,CAAK,KACP8D,EAAA,GAAG7D,CAAM,KACR8D,EAAA,OAAO/D,CAAK,IAAIC,CAAM,GACrB+D,GAAA,MAEIR,GAAA,aAAad,EAAMF,IAAK,IAAIE,EAAMJ,GAAI,IACjDmB,GAAA3D,GACCyG,EAAAA,kBAAAA,IAACC,GAAAA,mBAAA,CACS,OAAAL,GAAMM,OAAQR,EAAY,EAC/B,EAAAE,GAAMM,OAAQC,EAAY,EAACzB,IAAK2B,GAAKxB,GAAER,CAAC,CAAC,EACxC,GAAA,EAAIpF,GACJ,GAAA6D,GAAcX,EAAMH,OAChB,OAAA,CAAA+B,UACKjD,GAAMgD,OAAkBC,UAAAC,OAC3BlD,GAAMgD,OAAeE,MAAAA,EAEnB,WAAA,CAAAD,UACChD,GAAU+C,OAAkBC,UAAAC,OAC/BjD,GAAU+C,OAAeE,MAAAA,EAE3BrE,OAAAA,GACAC,OAAAA,GACE,UAAA,YACV,cAAA,GACWsB,UAAAA,EAAS,EAlBvB,KAsBI,MAAAoF,GAAAzD,GAAa,EACb0D,GAAA,EAAIpE,EAAMJ,IAAO,GACbyE,GAAA1F,GAAMgD,OAAcG,MAChBwC,GAAA1F,GAAU+C,OAAcG,MAAAvF,EAAA,EAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAA4H,IAAA5H,EAAA,EAAA,IAAA6H,IAAA7H,EAAA,EAAA,IAAA8H,IAAA9H,QAAA+H,IAJrCtD,GAAA6C,EAAAA,kBAAAA,IAACU,GAAAA,UAAA,CACI,EAAAJ,GACA,EAAAC,GACI,MAAAC,GACI,UAAAC,GACL9F,KAAAA,CAAAA,CAAY,EAClBjC,MAAAiC,EAAAjC,MAAA4H,GAAA5H,MAAA6H,GAAA7H,MAAA8H,GAAA9H,MAAA+H,GAAA/H,MAAAyE,IAAAA,GAAAzE,EAAA,EAAA,EAAAA,QAAAyC,GACDiC,GAAAjC,EAAY+E,OAAQE,EAA4B,EAAC1B,IAAKiC,EAAY,EAACjI,MAAAyC,EAAAzC,MAAA0E,IAAAA,GAAA1E,EAAA,EAAA,EACnEqE,EAAA8D,GAAAA,gBACEnD,GAAAe,GAAUC,IAAKoC,GACbC,GAAAA,uBAAuB7B,GAAEb,EAACE,EAAG,CAAC,EAA/B,8BACEuB,UAAA,EAAA,CACY,UAAA,wBAEA,SAAA,CAAAmB,QACC,CAAAI,QACEhH,EACLgE,EAACwE,OACC0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,IAAMxI,EAA3C,EADFqS,EAKAF,GAAqBlN,SAAY,EAC/BkN,GAAqBvC,QAAS5L,EAACG,KAAM,IAAM,GAA3C,IAAAkO,EADF,GAAA,EAKLxL,YACY,CAAAG,QACFhH,EACLgE,EAACwE,OACC0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,IAAMxI,EAA3C,EADFqS,EAKAF,GAAqBlN,SAAY,EAC/BkN,GAAqBvC,QAAS5L,EAACG,KAAM,IAAM,GAA3C,IAAAkO,EADF,IAIMvL,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAA0F,QAAW,EAACF,WAAc,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAC/C,aAAAI,GAAA,CACZnF,EAAiBgC,CAAC,EAClBzB,GAAU4E,EAAKE,OAAQ,EACvBhF,GAAU8E,EAAKG,OAAQ,EACvB3H,KAAoBqE,CAAC,CAAC,EAEf,QAAA,IAAA,EACHjE,GAAAM,KACEmH,WAAQtF,EAAgB8B,CAAgC,GAAxD5D,GACF+B,EAAkBnB,MAAS,EAC3BjB,IAAqBiB,MAAS,IAE9BmB,EAAkB6B,CAAC,EACnBjE,IAAqBiE,CAAC,GAEzB,EAEU,YAAAuD,GAAA,CACXvF,EAAiBgC,CAAC,EAClBzB,GAAU4E,EAAKE,OAAQ,EACvBhF,GAAU8E,EAAKG,OAAQ,CAAC,EAEZ,aAAA,IAAA,CACZtF,EAAiBhB,MAAS,EAC1BqB,GAAUrB,MAAS,EACnBuB,GAAUvB,MAAS,EACnBrB,KAAoBqB,MAAS,CAAC,EAG/BgD,SAAAA,CAAAA,EAACoB,KACAO,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACY,SAAA,CAAAmB,QACC,CAAAxH,MACA,EAACoF,EACLA,GAAE,CAAC,EAACK,EACJA,GAAE,GAAGb,EAACE,EAAG,EAAE,EAACuD,KAEblJ,EAAIsH,OAAQU,EAAc,EAACtB,SAAY,EACnCiN,KACClO,EAACwE,MAEA0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,EADrCiE,GAAAA,OAAM6F,IAC+B,EAC9CzL,YACY,CAAAzH,MACJ4E,EAACoB,MAAS,EAAIZ,GAAER,EAACoB,IAAK,EAAIZ,GAAE,CAAC,EAAIA,GAAE,CAAC,EAAIA,GAAER,EAACoB,IAAK,EAACZ,EACrDR,EAACoB,MAAS,EAAIZ,GAAE,CAAa,EAARA,GAAER,EAACoB,IAAK,EAACP,EAC9BA,GAAE,GAAGb,EAACE,EAAG,EAAE,EAACuD,KAEblJ,EAAIsH,OAAQ6C,EAAc,EAACzD,SAAY,EACnCiN,EAAQ,CAAA,EACPlO,EAACwE,MAEA0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,EADrCiE,GAAAA,OAAM6F,KACgCxL,WAClC,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAAlC,MACG,EAACoF,EACLA,GAAE,CAAC,EAACsC,WACK,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAEnC,OAAAlC,GAACS,UAAAA,IAlCZ,KAqCA7F,GACCkG,EAAAA,kBAAAA,IAACkC,GAAAA,YAAA,CAEG,SAAG7D,EAACG,KAAM,GAAEc,OAAU9F,EAAtB,GACO6E,EAACG,KAAM,GADd,GAEO,GAAGH,EAACG,KAAM,GAAE2D,UAAW,EAAG3I,CAAU,CAAC,MAE3C,EAAA0F,GAAEb,EAACE,EAAQ,GAAX,EACA,GAACF,EAACoB,MAAD,GAAe,EAAIZ,GAAE,CAAmB,EAAd,EAAI1C,EAAMF,KACjC,OAACoC,EAACoB,MAAD,GAAe,EAAIhG,EAAQoF,GAAE,CAAC,EAAIA,GAAE,CAAC,EAAI1C,EAAMF,KAC/C,OAAAiD,GAACS,UAAAA,EACE,UAAAtB,EAACoB,MAASpB,EAACoB,KAAQ,EAAT,OAAV,QACJ,MAAA3E,GAAMoD,OAAeF,OACjB,UAAAjD,GAAUmD,OAAeF,OAC3BhD,QAAAA,EACCW,SAAAA,EAAQ,EAfrB,KAkBA9B,GACCmG,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACS,MAAA,CAAAiC,WACO1D,EAACoB,MAASpB,EAACoB,KAAQ,EAAT,MAAV,QAAiD,GACzD3E,GAAM+C,mBAAN,CAAA,CAA8B,EAEzB,UAAAmE,EAAAA,GACT,sBACA,CAACpH,GAAc2R,EAAQjN,OAAU,EAAjC,oDAAA,GAGAvE,GAAU8C,iBACZ,EACI,GAAAQ,EAACoB,MAASpB,EAACoB,KAAQ,EAAT,GAAV,EACD,GAAA,SACO,SAAA,CAAAwB,QACC,CAAApC,EACJA,GAAE,CAAC,EAACK,EACHA,GAAE,GAAGb,EAACE,EAAG,EAAE,EAAeW,GAACS,UAAAA,EAAe,EAAC0B,QACtC,EAACS,KACJlH,IAEFhC,EAAIsH,OAAQ8C,EAAc,EAAC1D,SAAY,EACrCiN,EAAQ,CAAA,EACPlO,EAACwE,MAEA0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,EADrCiE,GAAAA,OAAM6F,KAC+B,EAC9CzL,YACY,CAAArC,EACRR,EAACoB,KAAQZ,GAAER,EAACoB,IAAY,EAAHZ,GAAE,CAAC,EAACwC,QACnB,EAACnC,EACNA,GAAE,GAAGb,EAACE,EAAG,EAAE,EAAeW,GAACS,UAAAA,EAAe,EAACmC,KACzClH,IAEFhC,EAAIsH,OAAQgE,EAAc,EAAC5E,SAAY,EACrCiN,EAAQ,CAAA,EACPlO,EAACwE,MAEA0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,EADrCiE,GAAAA,OAAM6F,MACgCxL,WAClC,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAA0F,QACK,EAACF,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAG1Ca,qCAAyB5D,EAACoB,KAAOrE,GAASF,EAAWtB,GAAQD,EAAM,CAAA,CACtE,EAlDD,IAAA,CAAA,EArHI0E,EAACG,KAyKR,CAEJ,EAMsB,MAAA4D,GAAArH,GAAUmD,OAAaC,KAAA,IAAAkE,EAAA3J,QAAA0J,IAA/BC,EAAA,CAAAlE,KAAQiE,EAAAA,EAAyB1J,MAAA0J,GAAA1J,MAAA2J,GAAAA,EAAA3J,EAAA,EAAA,EAC7B,MAAA4J,EAAAxH,GAAMoD,OAAaC,KAAA,IAAAoE,EAAA7J,QAAA4J,GAA3BC,EAAA,CAAApE,KAAQmE,CAAAA,EAAqB5J,MAAA4J,EAAA5J,MAAA6J,GAAAA,EAAA7J,EAAA,EAAA,EANvCiF,GAAAqC,EAAAA,kBAAAA,IAACwC,GAAAA,KAAA,CACK,GAAA3D,GAAE1E,EAAW,EAAX,EAAAA,CAA2B,EAC7B,GAAA0E,GAAE1E,EAAW,EAAX,EAAAA,CAA2B,EAC7B,GAAA,KACA,GAAA2C,GAAcX,EAAMH,OACZ,WAAAqG,EACJ,OAAAE,CAAAA,CAA6B,EAEtC3E,GAAA3D,yDAEIA,SAAAA,GAASyE,IAAK,CAAAkO,EAAA7I,IACb/D,EAAAA,kBAAAA,IAAC2C,GAAAA,SAAA,CAEO,KAAArB,EAAEsB,KACD,MAAAtB,EAAEuB,MACN,EAAAhE,GAAEyC,EAAEwB,KAAgB,EACnB,GAAA,EAAI3G,EAAMJ,IACV,GAAAe,GAAcX,EAAMH,OACd,SAAA6C,GAAEyC,EAAEwB,KAAgB,EAAIjG,GAAa,KAArCvC,EAAA,OAAA,QACE,WAAAgH,EAAEvG,WACN,OAAAuG,EAAExG,OACDE,QAAAA,EACCW,SAAAA,CAAAA,EAVL2C,CAUa,CAErB,CAAA,CAAC,EAhBL,KAkBO5F,KAAAsC,EAAAtC,KAAAiC,EAAAjC,MAAA6T,EAAA7T,MAAAY,GAAAZ,EAAA,EAAA,EAAAqC,GAAA8C,kBAAAnF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAC,UAAArF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAE,OAAAtF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAG,MAAAvF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAC,KAAAzF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAF,OAAAtF,MAAAuC,EAAAvC,MAAAyC,EAAAzC,MAAAE,EAAAF,MAAAgC,EAAAhC,MAAAgU,EAAAhU,MAAAoE,GAAApE,MAAAmE,GAAAnE,MAAAgB,EAAAhB,MAAA8T,GAAA9T,MAAAiD,EAAAjD,MAAA6B,EAAA7B,EAAA,EAAA,EAAAyD,EAAAH,OAAAtD,EAAA,EAAA,EAAAyD,EAAAF,KAAAvD,EAAA,EAAA,EAAAyD,EAAAJ,IAAArD,MAAA8B,EAAA9B,MAAAwB,EAAAxB,MAAA+T,EAAA/T,MAAAyB,EAAAzB,MAAA6D,EAAA7D,MAAA0C,GAAA1C,MAAAmC,EAAAnC,MAAA0B,EAAA1B,MAAAsB,GAAAtB,MAAAwC,EAAAxC,MAAAkB,GAAAlB,MAAAuB,GAAAvB,MAAA+B,EAAA/B,MAAA4B,EAAA5B,MAAA2B,EAAA3B,MAAAoB,GAAApB,MAAAa,GAAAb,MAAAmB,GAAAnB,EAAA,EAAA,EAAAoC,GAAA+C,kBAAAnF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAC,UAAArF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAE,OAAAtF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAG,MAAAvF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAC,KAAAzF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAF,OAAAtF,MAAAiB,GAAAjB,MAAAO,GAAAP,MAAAc,EAAAd,MAAAkC,EAAAlC,MAAAe,EAAAf,MAAAqE,EAAArE,MAAAsE,EAAAtE,MAAAuE,GAAAvE,MAAAwE,GAAAxE,MAAAyE,GAAAzE,MAAA0E,GAAA1E,MAAA2E,EAAA3E,MAAA4E,GAAA5E,MAAA6E,EAAA7E,MAAA8E,EAAA9E,MAAA+E,GAAA/E,MAAAgF,GAAAhF,MAAAiF,GAAAjF,MAAAkF,EAAA,MAAAb,EAAArE,EAAA,EAAA,EAAAsE,EAAAtE,EAAA,EAAA,EAAAuE,GAAAvE,EAAA,EAAA,EAAAwE,GAAAxE,EAAA,EAAA,EAAAyE,GAAAzE,EAAA,EAAA,EAAA0E,GAAA1E,EAAA,EAAA,EAAA2E,EAAA3E,EAAA,EAAA,EAAA4E,GAAA5E,EAAA,EAAA,EAAA6E,EAAA7E,EAAA,EAAA,EAAA8E,EAAA9E,EAAA,EAAA,EAAA+E,GAAA/E,EAAA,EAAA,EAAAgF,GAAAhF,EAAA,EAAA,EAAAiF,GAAAjF,EAAA,EAAA,EAAAkF,GAAAlF,EAAA,EAAA,EAAA,IAAA0F,GAAA1F,EAAA,EAAA,IAAAqE,GAAArE,EAAA,EAAA,IAAAgF,IAAAhF,EAAA,EAAA,IAAAiF,IAAAjF,QAAAkF,IA3MVQ,4BAACrB,EAAA,CACEW,SAAAA,CAAAA,GAgLDC,GAQCC,EAAAA,EAmBH,EAAkBlF,MAAAqE,EAAArE,MAAAgF,GAAAhF,MAAAiF,GAAAjF,MAAAkF,GAAAlF,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAAA,IAAA4H,GAAA5H,QAAAyC,GACjBmF,GAAAnF,EAAY+E,OAAQiE,EAA2B,EAACzF,IAAKgG,EAAY,EAAChM,MAAAyC,EAAAzC,MAAA4H,IAAAA,GAAA5H,EAAA,EAAA,EAAA,IAAA6H,GAAA7H,QAAAuE,IAAAvE,EAAA,EAAA,IAAAwE,IAAAxE,EAAA,EAAA,IAAAyE,IAAAzE,EAAA,EAAA,IAAA0E,IAAA1E,SAAA0F,IAAA1F,EAAA,GAAA,IAAA4H,IA3OrEC,GAAAS,EAAAA,kBAAAA,KAAA,IAAA,CAAc,UAAA/D,GACXC,SAAAA,CAAAA,GAqBDC,GAOCC,GACDgB,GA6MCkC,EAAAA,EACH,EAAI5H,MAAAuE,GAAAvE,MAAAwE,GAAAxE,MAAAyE,GAAAzE,MAAA0E,GAAA1E,OAAA0F,GAAA1F,OAAA4H,GAAA5H,OAAA6H,IAAAA,GAAA7H,EAAA,GAAA,EAAA,IAAA8H,EAAA9H,EAAA,GAAA,IAAAsE,GAAAtE,EAAA,GAAA,IAAA2E,GAAA3E,EAAA,GAAA,IAAA4E,IAAA5E,SAAA6E,GAAA7E,EAAA,GAAA,IAAA8E,GAAA9E,EAAA,GAAA,IAAA+E,IAAA/E,EAAA,GAAA,IAAA6H,IAnPNC,0BAACxD,EAAA,CACM1B,MACE,MAAAgC,GACC,OAAAC,EACC,QAAAC,EACC,UAAAC,GAEV8C,SAAAA,GA6OF,EAAa7H,OAAAsE,EAAAtE,OAAA2E,EAAA3E,OAAA4E,GAAA5E,OAAA6E,EAAA7E,OAAA8E,EAAA9E,OAAA+E,GAAA/E,OAAA6H,GAAA7H,OAAA8H,GAAAA,EAAA9H,EAAA,GAAA,EAAA,IAAA+H,GAAA/H,EAAA,GAAA,IAAAqC,GAAAhB,SAAArB,EAAA,GAAA,IAAA+D,GAAA/D,EAAA,GAAA,IAAAiE,IAAAjE,EAAA,GAAA,IAAA0D,GAAA1D,EAAA,GAAA,IAAAoC,GAAAf,SAAArB,EAAA,GAAA,IAAAqB,IACZ0G,GAAArE,GAAArC,IAAA0C,GAAAE,2BACEsG,GAAAA,QAAA,CACO7G,OACArC,KAAAA,GACA0C,OACAE,KAAAA,GACW,gBAAA7B,GAAMf,QACZ,UAAAgB,GAAUhB,QAAS,EAPjC,KASOrB,EAAA,GAAA,EAAAqC,GAAAhB,QAAArB,OAAA+D,EAAA/D,OAAAiE,GAAAjE,OAAA0D,EAAA1D,EAAA,GAAA,EAAAoC,GAAAf,QAAArB,OAAAqB,GAAArB,OAAA+H,IAAAA,GAAA/H,EAAA,GAAA,EAAA,IAAA0J,GAAA1J,EAAA,GAAA,IAAAgC,GAAAhC,SAAA6D,GACP6F,GAAA1H,GAAkB6B,IAAmBlB,OACpC2E,EAAAA,kBAAAA,IAACkD,OACO,KAAA3G,IAAmBlB,OAChB,QAAA,IAAA,CACPmB,EAAkBnB,MAAS,CAAC,EAG9B,iCAAA,MAAA,CACY,UAAA,0BAER,wBAAA,OAAOX,GAAmB,SAA1B,CAAAyI,OACcC,GAAAA,YAAY1I,EAAgB6B,CAAc,CAAA,EADxDlB,uBAKMX,GAAmB,WAAaA,EAAe6B,CAAqB,EAA3E,KACH,CAAA,CACF,EAjBD,KAkBO7D,OAAAgC,EAAAhC,OAAA6D,EAAA7D,OAAA0J,IAAAA,GAAA1J,EAAA,GAAA,EAAA,IAAA2J,GAAA,OAAA3J,EAAA,GAAA,IAAA8H,GAAA9H,SAAA+H,IAAA/H,EAAA,GAAA,IAAA0J,IAlRVC,GAAArB,EAAAA,kBAAAA,KAAAqC,6BAAA,CACE7C,SAAAA,CAAAA,EAqPCC,GAUA2B,EAAAA,EAkBO,EACP1J,OAAA8H,EAAA9H,OAAA+H,GAAA/H,OAAA0J,GAAA1J,OAAA2J,IAAAA,GAAA3J,EAAA,GAAA,EAnRH2J,EAmRG,CAtWA,SAAAqC,GAAApB,EAAA,CAAA,OAsU8DjF,EAACkF,KAAM,CAtUrE,SAAAY,GAAAX,EAAA,CAAA,OAsU6BnF,EAACoF,WAAc,OAAO,CAtUnD,SAAAS,GAAA2I,EAAA,CAAA,OAqRyCvL,EAAEuB,KAAM,CArRjD,SAAAG,GAAA8J,EAAA,CAAA,OAyQyCxL,EAAEuB,KAAM,CAzQjD,SAAAE,GAAAN,EAAA,CAAA,OA+MuCnB,EAAEuB,KAAM,CA/M/C,SAAAjC,GAAAU,EAAA,CAAA,OAoMuCA,EAAEuB,KAAM,CApM/C,SAAAlC,GAAA+C,EAAA,CAAA,OAwH+DrF,EAACkF,KAAM,CAxHtE,SAAAnD,GAAAuD,EAAA,CAAA,OAwH6BtF,EAACoF,WAAc,QAAQ,CAxHpD,SAAAtD,GAAAyD,EAAA,CAAA,OA+F6BvF,IAAM,CAAC,CA/FpC,SAAAqB,GAAAmE,EAAA,CAAA,OA8FkCxF,IAAM,CAAC,CA9FzC,SAAAO,GAAAoF,EAAA,CAAA,MAoE8C,GAAG3F,EAACE,EAAG,EAAE,CAsSvD,SAAA0F,GAAAxL,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,GAAA,EACL,CAAAE,WAAAC,EAAAC,YAAAC,EAAAC,UAAAC,GAAAC,aAAAC,GAAAR,KAAAA,GAAAa,MAAAA,GAAAC,OAAAA,GAAA6S,SAAAA,EAAA5S,OAAAA,EAAAC,OAAAA,EAAAN,WAAAA,EAAAQ,WAAAA,GAAAD,WAAAA,GAAAN,UAAAA,GAAA0B,YAAAA,EAAAzB,WAAAA,GAAAO,QAAAA,GAAAC,kBAAAA,GAAAC,UAAAA,GAAAI,cAAAA,EAAAH,SAAAA,GAAAC,SAAAA,EAAAqS,sBAAAA,EAAApS,mBAAAA,EAAAG,WAAAA,EAAAC,gBAAAA,EAAAiS,gBAAAA,EAAAhS,4BAAAA,EAAAC,eAAAA,EAAAC,aAAAA,EAAAC,WAAAA,EAAAC,UAAAA,EAAAC,OAAAA,EAAAC,WAAAA,EAAA2R,cAAAA,EAAA1R,QAAAA,EAAAE,UAAAA,EAAAC,aAAAA,EAAAC,QAAAA,CAAAA,EAwCI3C,EAvCFI,GAAAC,IAAAuC,OAAA,GAAAvC,EACAC,GAAAC,IAAAqC,OAAA,GAAArC,EACAC,GAAAC,KAAAmC,OAAA,GAAAnC,GACAC,EAAAC,KAAAiC,OAAA,GAAAjC,GAqCFkC,GAAeC,EAAAA,OAAO,IAAI,EAAE,IAAAC,GAAA9C,EAAA,CAAA,IAAAsC,EAAAS,QAAA/C,EAAA,CAAA,IAAAsC,EAAAU,MACOF,GAAA,CAAAE,KAC3BV,EAAOU,KAAKD,OACVT,EAAOS,MAAAA,EAChB/C,EAAA,CAAA,EAAAsC,EAAAS,OAAA/C,EAAA,CAAA,EAAAsC,EAAAU,KAAAhD,KAAA8C,IAAAA,GAAA9C,EAAA,CAAA,EAHD,MAAAiD,EAAiBC,GAAAA,UAAUN,GAAQE,EAGlC,EAIOK,EAAAlB,EAAe9B,GAAa,GAA5BA,GAA2C,IAAAiD,EAAApD,EAAA,CAAA,IAAAS,GAAAT,EAAA,CAAA,IAAAK,IAAAL,EAAA,CAAA,IAAAmD,GAAAnD,OAAAO,IAHpC6C,EAAA,CAAAC,IACR9C,GAAS+C,OACN7C,EAAY8C,KACdJ,EAA2CK,MAC1CnD,EAAAA,EACRL,KAAAS,EAAAT,KAAAK,GAAAL,KAAAmD,EAAAnD,KAAAO,GAAAP,KAAAoD,GAAAA,EAAApD,EAAA,CAAA,EALD,MAAAyD,EAAeL,EAOf,CAAAM,EAAAC,CAAA,EAA0CC,EAAAA,SAAcjB,MAAS,EAEjE,CAAAkB,EAAAC,EAAA,EAA4CF,EAAAA,SAAcjB,MAAS,EACnE,CAAAoB,GAAAC,EAAA,EAA4BJ,EAAAA,SAA6BjB,MAAS,EAClE,CAAAsB,GAAAC,CAAA,EAA4BN,EAAAA,SAA6BjB,MAAS,EAClEwB,EAAmBpD,GAAQ0C,EAAMF,KAAQE,EAAMD,MAC/CY,GAAoBpD,GAASyC,EAAMJ,IAAOI,EAAMH,OAAQ,IAAAe,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAA,GAAAlF,EAAA,CAAA,IAAAsC,GAAAtC,EAAA,CAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAA6T,GAAA7T,EAAA,EAAA,IAAAY,GAAAZ,EAAA,EAAA,IAAAqC,GAAA8C,mBAAAnF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAK,MAAAzF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAE,QAAAtF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAH,WAAArF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAF,QAAAtF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAD,OAAAvF,EAAA,EAAA,IAAAuC,GAAAvC,EAAA,EAAA,IAAAyC,GAAAzC,EAAA,EAAA,IAAAE,IAAAF,EAAA,EAAA,IAAAgC,GAAAhC,EAAA,EAAA,IAAAgU,GAAAhU,EAAA,EAAA,IAAAoE,IAAApE,EAAA,EAAA,IAAAmE,GAAAnE,EAAA,EAAA,IAAAgB,IAAAhB,EAAA,EAAA,IAAA8T,GAAA9T,EAAA,EAAA,IAAAiD,GAAAjD,EAAA,EAAA,IAAA6B,GAAA7B,EAAA,EAAA,IAAAG,IAAAH,QAAAyD,EAAAH,QAAAtD,EAAA,EAAA,IAAAyD,EAAAF,MAAAvD,EAAA,EAAA,IAAAyD,EAAAD,OAAAxD,EAAA,EAAA,IAAAyD,EAAAJ,KAAArD,EAAA,EAAA,IAAA8B,GAAA9B,EAAA,EAAA,IAAAwB,IAAAxB,EAAA,EAAA,IAAA+T,GAAA/T,EAAA,EAAA,IAAAyB,GAAAzB,EAAA,EAAA,IAAA6D,GAAA7D,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAmC,GAAAnC,EAAA,EAAA,IAAA0B,GAAA1B,EAAA,EAAA,IAAAsB,IAAAtB,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,GAAAlB,EAAA,EAAA,IAAAuB,IAAAvB,EAAA,EAAA,IAAA+B,GAAA/B,EAAA,EAAA,IAAA2B,GAAA3B,EAAA,EAAA,IAAAoB,IAAApB,EAAA,EAAA,IAAAa,IAAAb,EAAA,EAAA,IAAAmB,IAAAnB,EAAA,EAAA,IAAAoC,GAAA+C,mBAAAnF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAK,MAAAzF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAE,QAAAtF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAH,WAAArF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAF,QAAAtF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAD,OAAAvF,EAAA,EAAA,IAAAiB,GAAAjB,EAAA,EAAA,IAAAc,IAAAd,EAAA,EAAA,IAAAkC,GAAAlC,QAAAe,GAAA,CAExD,MAAAyF,GAAUJ,GAAAA,OAAAA,EAAaC,OAAQ,CAAC5E,EAAUD,EAAQ,CAAC,EAAC8E,MAAO,CAAClC,GAAa,CAAC,CAAC,EAACmC,KAAAA,EAAQ,IAAAb,EAAA1F,QAAA6B,GAExD6D,EAAAA,CAAAC,EAAAC,MAAW,CAAA,GAClCD,EAACE,GACAhE,EAAA,GAAgB8D,EAACG,KAAM,GAAvB,GAA+BF,EAAC,EAAA,GACpC5F,MAAA6B,EAAA7B,MAAA0F,GAAAA,EAAA1F,EAAA,EAAA,EAHF,MAAA+F,GAAmB7F,GAAI8F,IAAKN,CAG1B,EACFO,GAAiBpE,GAAckE,GAAUC,IAAKiG,EAAc,EAC5D9F,GAAUM,GAAAA,KAAAA,EAAWJ,OACXJ,EAAQ,EAACK,MACV,CACL,EACAyN,EACIrN,KAAI2L,IAAKlO,EAAY4P,EAAkB9N,GAAQW,MAGpC,EAFX9E,EACE4E,KAAIC,IAAKxC,EAAYrC,EAAkBmE,GAAQW,MACtC,EAFXzC,CAEY,CACjB,EAAC0C,aACYjG,CAAU,EAC1B8K,GAAelF,GAACW,MAAOhF,CAAS,EAG3BmC,EAAA8C,GAAAA,OAAMC,IACAzE,GAAAA,GACEgC,EAAA,GAAG7D,EAAK,KACP8D,GAAA,GAAG7D,EAAM,KACR8D,EAAA,OAAO/D,EAAK,IAAIC,EAAM,GACrB+D,EAAA,MAEIG,GAAA,aAAazB,EAAMF,IAAK,IAAIE,EAAMJ,GAAI,IAE5C,MAAAuE,GAAApB,GAAE/E,EAAW,EAAX,EAAAA,CAA2B,EAC7BoG,GAAArB,GAAE/E,EAAW,EAAX,EAAAA,CAA2B,EAI/BqG,GAAArG,EAAW,EAAX,EAAAA,EAA2B,IAAAsG,GAAA/H,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,GAAAlB,EAAA,EAAA,IAAAiB,GAAAjB,QAAA8H,IADtBC,GAAAwB,GAAAA,yBACLzB,GACApF,EACAF,EACAtB,EACAD,CACF,EAACjB,MAAA0C,EAAA1C,MAAAwC,EAAAxC,MAAAkB,EAAAlB,MAAAiB,EAAAjB,MAAA8H,GAAA9H,MAAA+H,IAAAA,GAAA/H,EAAA,EAAA,EAQO,MAAA0J,GAAArH,GAAU+C,OAAaK,KACtBkE,GAAAtH,GAAUmD,OAAeF,OAAA,IAAAsE,EAAA5J,EAAA,EAAA,IAAA0J,IAAA1J,QAAA2J,IAFtBC,EAAA,CAAAnE,KACJiE,GAAuB5D,MACtB6D,EAAAA,EACR3J,MAAA0J,GAAA1J,MAAA2J,GAAA3J,MAAA4J,GAAAA,EAAA5J,EAAA,EAAA,EACe,MAAA6J,EAAAzH,GAAMgD,OAAaK,KAASkG,EAAAvJ,GAAMoD,OAAeF,OAAA,IAAAsG,EAAA5L,EAAA,EAAA,IAAA6J,GAAA7J,QAAA2L,GAAzDC,EAAA,CAAAnG,KAAQoE,EAAmB/D,MAAS6F,CAAAA,EAAuB3L,MAAA6J,EAAA7J,MAAA2L,EAAA3L,MAAA4L,GAAAA,EAAA5L,EAAA,EAAA,EAtBrEuE,0BAACuF,QAAA,CACK,GAAAlC,GACA,GAAAC,GACA,GAAA,EAAI1H,GACJ,GAAAgE,EAAaV,EAAMD,MAChB,MAAAuE,GAOG,SAAA,CAAA5B,EACL,EAAIhG,GAAU0L,GACb,EAACC,GACDtK,GAAW,EAAX,MAAA,GAAyBgF,EAC1BA,GAAE/E,EAAW,EAAX,EAAAA,CAA2B,CAAA,EAEtB,WAAAmI,EAIJ,OAAAgC,CAAAA,CAA2D,EAEpEpH,GAAA3D,GACCyG,EAAAA,kBAAAA,IAACyE,GAAAA,mBAAA,CACS,OAAAL,GAAMlE,OAAQ8E,EAAY,EAC/B,EAAAZ,GAAMlE,OAAQ+E,EAAY,EAACvG,IAAK2B,GAAKnB,GAAEb,CAAC,CAAC,EACxC,GAAA,EAAIxF,GACJ,GAAAgE,EAAaV,EAAMD,MACf,OAAA,CAAA6B,UACKjD,GAAMoD,OAAkBH,UAAAC,OAC3BlD,GAAMoD,OAAeF,MAAAA,EAEnB,WAAA,CAAAD,UACChD,GAAUmD,OAAkBH,UAAAC,OAC/BjD,GAAUmD,OAAeF,MAAAA,EAE3BrE,OAAAA,EACAC,OAAAA,EACE,UAAA,YACV,cAAA,GACS,SAAA,WACEsB,UAAAA,CAAAA,CAAS,EAnBvB,KAuBI,MAAA0J,EAAA,EAAI/L,GAAa,GACjBgM,GAAA/H,GAAc,EACVgI,EAAAhK,GAAMoD,OAAcD,MAChB8G,GAAAhK,GAAUmD,OAAcD,MAAAvF,EAAA,EAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAAkM,GAAAlM,EAAA,EAAA,IAAAmM,IAAAnM,EAAA,EAAA,IAAAoM,GAAApM,QAAAqM,IAJrC5H,2BAACuD,GAAAA,UAAA,CACI,EAAAkE,EACA,EAAAC,GACI,MAAAC,EACI,UAAAC,GACLpK,KAAAA,EACN,SAAA,GAAQ,EACRjC,MAAAiC,EAAAjC,MAAAkM,EAAAlM,MAAAmM,GAAAnM,MAAAoM,EAAApM,MAAAqM,GAAArM,MAAAyE,IAAAA,GAAAzE,EAAA,EAAA,EAAAA,QAAAyC,GACDiC,GAAAjC,EAAY+E,OAAQmF,EAA4B,EAAC3G,IAAK4G,EAAY,EAAC5M,MAAAyC,EAAAzC,MAAA0E,IAAAA,GAAA1E,EAAA,EAAA,EACnEqE,GAAA8D,GAAAA,gBACEnD,GAAAe,GAAUC,IAAK,CAAAoC,EAAAiM,KACbhM,GAAAA,uBAAuBlC,GAAER,EAACE,EAAG,CAAC,EAA/B,8BACEuB,GAAAA,OAAA,EAAA,CACY,UAAA,wBAEF,QAAA,UACC,QAAAnE,EAAA,cAAA,UACC,SAAA,CAAAsF,QACC,CAAAI,QACEhH,EACLgE,EAACwE,OACC0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,IAAMxI,EAA3C,EADFqS,EAKAF,EAAqBlN,SAAY,EAC/BkN,EAAqBvC,QAAS5L,EAACG,KAAM,IAAM,GAA3C,IAAAkO,EADF,GAAA,EAKLxL,YACY,CAAAG,QACFhH,EACLgE,EAACwE,OACC0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,IAAMxI,EAA3C,EADFqS,EAKAF,EAAqBlN,SAAY,EAC/BkN,EAAqBvC,QAAS5L,EAACG,KAAM,IAAM,GAA3C,IAAAkO,EADF,IAIMvL,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEI,KAAA,CAAAC,QAAW,EAACF,WAAc,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAC/C,aAAAI,IAAA,CACZnF,EAAiBgC,CAAC,EAClBzB,EAAU4E,GAAKE,OAAQ,EACvBhF,GAAU8E,GAAKG,OAAQ,EACvB3H,KAAoBqE,CAAC,CAAC,EAEf,QAAA,IAAA,EACHjE,GAAAM,KACEmH,WAAQtF,EAAgB8B,CAAgC,GAAxD5D,GACF+B,GAAkBnB,MAAS,EAC3BjB,IAAqBiB,MAAS,IAE9BmB,GAAkB6B,CAAC,EACnBjE,IAAqBiE,CAAC,GAEzB,EAEU,YAAAuD,IAAA,CACXvF,EAAiBgC,CAAC,EAClBzB,EAAU4E,GAAKE,OAAQ,EACvBhF,GAAU8E,GAAKG,OAAQ,CAAC,EAEZ,aAAA,IAAA,CACZtF,EAAiBhB,MAAS,EAC1BqB,GAAUrB,MAAS,EACnBuB,EAAUvB,MAAS,EACnBrB,KAAoBqB,MAAS,CAAC,EAG/BgD,SAAAA,CAAAA,EAACoB,KACAO,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACS,MAAAjB,GAACc,UAAAA,EACA,QAAA,UACC,QAAAhE,EAAA,cAAA,UACC,SAAA,CAAAsF,QACC,CAAAvH,OACC,EAACmF,EACNA,GAAE,GAAGR,EAACE,EAAG,EAAE,EAACW,EACZA,GAAE,CAAC,EAAC4C,KAELlJ,GAAIsH,OAAQ8K,EAAc,EAAC1L,SAAY,EACnCiN,KACClO,EAACwE,MAEA0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,EADrCiE,GAAAA,OAAM6F,IAC+B,EAC9CzL,YACY,CAAAxH,OACH2E,EAACoB,KAAQL,KAAI8F,IAAKhG,GAAEb,EAACoB,IAAK,EAAIP,GAAE,CAAC,CAAK,EAAtC,EAAuCA,EAC5Cb,EAACoB,MAASpB,EAACoB,KAAQ,EAAIP,GAAEb,EAACoB,IAAY,EAAKP,GAAE,CAAC,EAACL,EAC/CA,GAAE,GAAGR,EAACE,EAAG,EAAE,EAACuD,KAEblJ,GAAIsH,OAAQsL,EAAc,EAAClM,SAAY,EACnCiN,EAAQ,CAAA,EACPlO,EAACwE,MAEA0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,EADrCiE,GAAAA,OAAM6F,KACgCxL,WAClC,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEI,KAAA,CAAA1H,OACI,EAACwF,EACNA,GAAE,CAAC,EAACiC,WACK,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,IAjC9C,KAqCAtH,GACCkG,EAAAA,kBAAAA,IAACmF,eAAA,CAEG,MAAA,GAAG9G,EAACG,KAAM,GAAEc,OAAU9F,GAAtB,GACO6E,EAACG,KAAM,GADd,GAEO,GAAGH,EAACG,KAAM,GAAE2D,UAAW,EAAG3I,EAAU,CAAC,MAE3C,GAAC6E,EAACoB,MAAD,GAAe,EAAhB,EAAwBP,GAAE,CAAC,EAAI,EAC/B,EAAAL,GAAE,GAAGR,EAACE,EAAG,EAAE,EACP,MAAAM,GAACc,UAAAA,EACA,QAACtB,EAACoB,MAAD,GAAe,EAAIP,GAAE,CAAC,EAAI,EAAI/C,EAAMH,OACtC,MAAAlB,GAAMgD,OAAeE,OACjB,UAAAjD,GAAU+C,OAAeE,OACzB,WAACK,EAACoB,MAAD,GAAe,EAAhB,SAAA,MACFzE,QAAAA,EACCW,SAAAA,EAAQ,EAfrB,KAkBA9B,GACCmG,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACS,MAAA,CAAAiC,WACO,SAAQ,GAChBjH,GAAM+C,mBAAN,CAAA,CAA8B,EAEzB,UAAAmE,EAAAA,GACT,sBACA,CAACpH,GAAc2R,EAAQjN,OAAU,EAAjC,oDAAA,GAGAvE,GAAU8C,iBACZ,EACI,GAAAQ,EAACoB,KAASpB,EAACoB,MAAS,EAAV,OAAA,MAAV,OACM,SAAA,CAAAwB,QACC,CAAApC,EACHA,GAAE,GAAGR,EAACE,EAAG,EAAE,EAAeM,GAACc,UAAAA,EAAe,EAACT,EAC5CA,GAAE,CAAC,EAACmC,QACE,EAACS,KACJlH,IAEFhC,GAAIsH,OAAQ+K,EAAc,EAAC3L,SAAY,EACrCiN,EAAQ,CAAA,EACPlO,EAACwE,MAEA0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,EADrCiE,GAAAA,OAAM6F,KAC+B,EAC9CzL,YACY,CAAArC,EACPA,GAAE,GAAGR,EAACE,EAAG,EAAE,EAAeM,GAACc,UAAAA,EAAe,EAACT,EAC5CA,GAAEb,EAACoB,MAAD,CAAW,EAACqC,KACXlH,IAEFhC,GAAIsH,OAAQ8M,EAAc,EAAC1N,SAAY,EACrCiN,EAAQ,CAAA,EACPlO,EAACwE,MAEA0J,EAAStR,EAAWgP,QAAS5L,EAACwE,KAAM,CAAC,EADrCiE,GAAAA,OAAM6F,MACgCtL,QACrC,EAACF,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAA0F,QACK,EAACF,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAG1Ca,qCAAyB5D,EAACoB,KAAOrE,EAASF,EAAWtB,EAAQD,CAAM,CAAA,CACtE,EAjDD,IAAA,CAAA,EArHI0E,EAACG,KAwKR,CAEJ,EACCb,GAAA1D,GAAA+F,EAAAA,kBAAAA,IAAAqD,EAAAA,kBAAAA,SAAA,CAEIpJ,SAAAA,GAASyE,IAAK,CAAAkO,EAAA7I,KACb/D,EAAAA,kBAAAA,IAACoF,GAAAA,SAAA,CAEO,KAAA9D,EAAEsB,KACD,MAAAtB,EAAEuB,MACN,EAAA3D,GAAEoC,EAAEwB,KAAgB,EACnB,GAAA,EAAIjK,GACJ,GAAAgE,EAAaV,EAAMD,MACX,WAAAoF,EAAEvG,WACN,OAAAuG,EAAExG,OACDE,QAAAA,EACCW,SAAAA,GATL2C,EASa,CAErB,EAAC,EAfL,KAiBO5F,KAAAsC,EAAAtC,KAAAiC,EAAAjC,MAAA6T,EAAA7T,MAAAY,EAAAZ,EAAA,EAAA,EAAAqC,GAAA8C,kBAAAnF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAK,KAAAzF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAE,OAAAtF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAH,UAAArF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAF,OAAAtF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAD,MAAAvF,MAAAuC,EAAAvC,MAAAyC,EAAAzC,MAAAE,GAAAF,MAAAgC,EAAAhC,MAAAgU,EAAAhU,MAAAoE,GAAApE,MAAAmE,EAAAnE,MAAAgB,GAAAhB,MAAA8T,EAAA9T,MAAAiD,EAAAjD,MAAA6B,EAAA7B,MAAAG,GAAAH,EAAA,EAAA,EAAAyD,EAAAH,OAAAtD,EAAA,EAAA,EAAAyD,EAAAF,KAAAvD,EAAA,EAAA,EAAAyD,EAAAD,MAAAxD,EAAA,EAAA,EAAAyD,EAAAJ,IAAArD,MAAA8B,EAAA9B,MAAAwB,GAAAxB,MAAA+T,EAAA/T,MAAAyB,EAAAzB,MAAA6D,EAAA7D,MAAA0C,EAAA1C,MAAAmC,EAAAnC,MAAA0B,EAAA1B,MAAAsB,GAAAtB,MAAAwC,EAAAxC,MAAAkB,EAAAlB,MAAAuB,GAAAvB,MAAA+B,EAAA/B,MAAA2B,EAAA3B,MAAAoB,GAAApB,MAAAa,GAAAb,MAAAmB,GAAAnB,EAAA,EAAA,EAAAoC,GAAA+C,kBAAAnF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAK,KAAAzF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAE,OAAAtF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAH,UAAArF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAF,OAAAtF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAD,MAAAvF,MAAAiB,EAAAjB,MAAAc,GAAAd,MAAAkC,EAAAlC,MAAAe,GAAAf,MAAAqE,GAAArE,MAAAsE,EAAAtE,MAAAuE,EAAAvE,MAAAwE,GAAAxE,MAAAyE,GAAAzE,MAAA0E,GAAA1E,MAAA2E,GAAA3E,MAAA4E,EAAA5E,MAAA6E,GAAA7E,MAAA8E,EAAA9E,MAAA+E,EAAA/E,MAAAgF,GAAAhF,MAAAiF,GAAAjF,MAAAkF,EAAA,MAAAb,GAAArE,EAAA,EAAA,EAAAsE,EAAAtE,EAAA,EAAA,EAAAuE,EAAAvE,EAAA,EAAA,EAAAwE,GAAAxE,EAAA,EAAA,EAAAyE,GAAAzE,EAAA,EAAA,EAAA0E,GAAA1E,EAAA,EAAA,EAAA2E,GAAA3E,EAAA,EAAA,EAAA4E,EAAA5E,EAAA,EAAA,EAAA6E,GAAA7E,EAAA,EAAA,EAAA8E,EAAA9E,EAAA,EAAA,EAAA+E,EAAA/E,EAAA,EAAA,EAAAgF,GAAAhF,EAAA,EAAA,EAAAiF,GAAAjF,EAAA,EAAA,EAAAkF,GAAAlF,EAAA,EAAA,EAAA,IAAA0F,GAAA1F,EAAA,EAAA,IAAAqE,IAAArE,QAAAgF,IAAAhF,EAAA,EAAA,IAAAiF,IAjMVS,4BAACrB,GAAA,CACEW,SAAAA,CAAAA,GA+KAC,EAAAA,EAkBH,EAAkBjF,MAAAqE,GAAArE,MAAAgF,GAAAhF,MAAAiF,GAAAjF,OAAA0F,IAAAA,GAAA1F,EAAA,GAAA,EAAA,IAAA4H,GAAA5H,SAAAyC,GACjBmF,GAAAnF,EAAY+E,OAAQ+M,EAA2B,EAACvO,IAAKwO,EAAY,EAACxU,OAAAyC,EAAAzC,OAAA4H,IAAAA,GAAA5H,EAAA,GAAA,EAAA,IAAA6H,GAAA7H,EAAA,GAAA,IAAAuE,GAAAvE,EAAA,GAAA,IAAAwE,IAAAxE,EAAA,GAAA,IAAAyE,IAAAzE,SAAA0E,IAAA1E,EAAA,GAAA,IAAA0F,IAAA1F,EAAA,GAAA,IAAA4H,IAAA5H,EAAA,GAAA,IAAAkF,IA3PrE2C,GAAAS,EAAAA,kBAAAA,KAAA,IAAA,CAAc,UAAApD,GACZX,SAAAA,CAAAA,EAwBCC,GAsBDC,GAQCC,GACDgB,GAmMCkC,EAAAA,EACH,EAAI5H,OAAAuE,EAAAvE,OAAAwE,GAAAxE,OAAAyE,GAAAzE,OAAA0E,GAAA1E,OAAA0F,GAAA1F,OAAA4H,GAAA5H,OAAAkF,GAAAlF,OAAA6H,IAAAA,GAAA7H,EAAA,GAAA,EAAA,IAAA8H,GAAA9H,EAAA,GAAA,IAAAsE,GAAAtE,EAAA,GAAA,IAAA2E,IAAA3E,EAAA,GAAA,IAAA4E,GAAA5E,SAAA6E,IAAA7E,EAAA,GAAA,IAAA8E,GAAA9E,EAAA,GAAA,IAAA+E,GAAA/E,EAAA,GAAA,IAAA6H,IAnQNC,2BAACxD,EAAA,CACM1B,OACE,MAAAgC,EACC,OAAAC,GACC,QAAAC,EACC,UAAAC,EAEV8C,SAAAA,GA6PF,EAAa7H,OAAAsE,EAAAtE,OAAA2E,GAAA3E,OAAA4E,EAAA5E,OAAA6E,GAAA7E,OAAA8E,EAAA9E,OAAA+E,EAAA/E,OAAA6H,GAAA7H,OAAA8H,IAAAA,GAAA9H,EAAA,GAAA,EAAA,IAAA+H,EAAA/H,EAAA,GAAA,IAAAqC,GAAAhB,SAAArB,EAAA,GAAA,IAAA+D,IAAA/D,EAAA,GAAA,IAAAiE,IAAAjE,EAAA,GAAA,IAAA0D,GAAA1D,EAAA,GAAA,IAAAoC,GAAAf,SAAArB,EAAA,GAAA,IAAAqB,IACZ0G,EAAArE,GAAArC,IAAA0C,IAAAE,2BACEsG,GAAAA,QAAA,CACO7G,OACArC,KAAAA,GACA0C,QACAE,KAAAA,GACW,gBAAA7B,GAAMf,QACZ,UAAAgB,GAAUhB,QAAS,EAPjC,KASOrB,EAAA,GAAA,EAAAqC,GAAAhB,QAAArB,OAAA+D,GAAA/D,OAAAiE,GAAAjE,OAAA0D,EAAA1D,EAAA,GAAA,EAAAoC,GAAAf,QAAArB,OAAAqB,GAAArB,OAAA+H,GAAAA,EAAA/H,EAAA,GAAA,EAAA,IAAA0J,GAAA1J,EAAA,GAAA,IAAAgC,GAAAhC,SAAA6D,GACP6F,GAAA1H,GAAkB6B,IAAmBlB,OACpC2E,EAAAA,kBAAAA,IAACkD,OACO,KAAA3G,IAAmBlB,OAChB,QAAA,IAAA,CACPmB,GAAkBnB,MAAS,CAAC,EAG9B,iCAAA,MAAA,CACY,UAAA,0BAER,wBAAA,OAAOX,GAAmB,SAA1B,CAAAyI,OACcC,GAAAA,YAAY1I,EAAgB6B,CAAc,CAAA,EADxDlB,uBAKMX,GAAmB,WAAaA,EAAe6B,CAAqB,EAA3E,KACH,CAAA,CACF,EAjBD,KAkBO7D,OAAAgC,EAAAhC,OAAA6D,EAAA7D,OAAA0J,IAAAA,GAAA1J,EAAA,GAAA,EAAA,IAAA2J,GAAA,OAAA3J,EAAA,GAAA,IAAA8H,IAAA9H,SAAA+H,GAAA/H,EAAA,GAAA,IAAA0J,IAlSVC,GAAArB,EAAAA,kBAAAA,KAAAqC,6BAAA,CACE7C,SAAAA,CAAAA,GAqQCC,EAUA2B,EAAAA,EAkBO,EACP1J,OAAA8H,GAAA9H,OAAA+H,EAAA/H,OAAA0J,GAAA1J,OAAA2J,IAAAA,GAAA3J,EAAA,GAAA,EAnSH2J,EAmSG,CArXA,SAAA6K,GAAA5J,EAAA,CAAA,OAqV8DjF,EAACkF,KAAM,CArVrE,SAAA0J,GAAAzJ,EAAA,CAAA,OAqV6BnF,EAACoF,WAAc,OAAO,CArVnD,SAAAuJ,GAAAH,EAAA,CAAA,OA4SyCvL,EAAEuB,KAAM,CA5SjD,SAAAoI,GAAA6B,EAAA,CAAA,OAiSyCxL,EAAEuB,KAAM,CAjSjD,SAAA2I,GAAA/I,EAAA,CAAA,OA2OuCnB,EAAEuB,KAAM,CA3O/C,SAAAmI,GAAA1J,EAAA,CAAA,OAgOuCA,EAAEuB,KAAM,CAhO/C,SAAAyC,GAAA5B,EAAA,CAAA,OAiJ+DrF,EAACkF,KAAM,CAjJtE,SAAA8B,GAAA1B,EAAA,CAAA,OAiJ6BtF,EAACoF,WAAc,QAAQ,CAjJpD,SAAAwB,GAAArB,EAAA,CAAA,OAsH6BvF,IAAM,CAAC,CAtHpC,SAAA2G,GAAAnB,EAAA,CAAA,OAqHkCxF,IAAM,CAAC,CArHzC,SAAAsG,GAAAX,EAAA,CAAA,MAoE8C,GAAG3F,EAACE,EAAG,EAAE,CCtZvD,SAAA4O,GAAA1U,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,EAAA,EACL,CAAAC,KAAAA,EAAA4M,WAAAA,EAAAC,OAAAA,GAAA9L,OAAAb,GAAA4M,QAAAA,GAAA9L,OAAAZ,GAAA2M,iBAAAA,GAAArM,WAAAJ,EAAAW,WAAAT,EAAAG,UAAAiC,EAAAhC,WAAAqC,EAAAnC,OAAAA,GAAAD,MAAAA,GAAAmM,SAAAA,GAAA3K,YAAAA,EAAA4K,iBAAAA,GAAA2G,sBAAA1Q,GAAAiK,QAAAA,GAAAC,gBAAAtI,GAAAzE,UAAAA,EAAAE,aAAAA,GAAAN,WAAAA,EAAAE,YAAAA,EAAAe,WAAA6D,EAAAsI,eAAAA,EAAAlM,QAAAA,EAAAC,kBAAAA,EAAAC,UAAAA,EAAA6L,eAAAlI,EAAAsI,QAAAA,EAAAhM,SAAAA,EAAAC,SAAAA,EAAAC,mBAAAA,EAAA+L,cAAAlJ,EAAAmJ,aAAAlJ,EAAA0J,SAAAA,EAAArM,WAAAA,EAAA8L,SAAAlJ,EAAAiQ,YAAAhQ,EAAAkJ,UAAAjJ,GAAAkJ,MAAAjJ,GAAA9C,gBAAAA,GAAA6S,gBAAAA,EAAAZ,gBAAAA,GAAAjG,UAAAA,GAAA/L,4BAAA8C,EAAA7C,eAAAA,EAAAC,aAAAA,EAAAE,UAAA2C,EAAA5C,WAAAA,EAAAE,OAAAA,EAAAC,WAAAA,EAAA0L,SAAAhJ,GAAAzC,QAAAoD,GAAAsO,cAAApM,GAAApF,UAAAqF,GAAApF,aAAAqF,EAAAkG,SAAAjG,EAAArF,QAAAgH,GAAAyE,YAAAxE,EAAAA,EA6DI5J,EAzDFkB,EAAAb,KAAAuC,OAAA,GAAAvC,GAEAc,EAAAZ,KAAAqC,OAAA,GAAArC,GAEAM,GAAAJ,IAAAmC,OAAA,IAAAnC,EACAW,GAAAT,IAAAiC,OAAA,GAAAjC,EACAG,GAAAiC,IAAAH,OAAA,GAAAG,EACAhC,GAAAqC,IAAAR,OAAA,IAAAQ,EAAgB,IAAAyG,EAAA5J,OAAAoD,IAMhBwG,EAAAxG,KAAAT,OAAA,CAAA,EAAAS,GAA0BpD,KAAAoD,GAAApD,KAAA4J,GAAAA,EAAA5J,EAAA,CAAA,EAA1B,MAAA8T,GAAAlK,EAEA0D,EAAAtI,KAAArC,OAAA,GAAAqC,GAKA5D,EAAA6D,IAAAtC,OAAA,GAAAsC,EAKAmI,GAAAlI,IAAAvC,OAAA,GAAAuC,EAKAuI,GAAAlJ,IAAA5B,OAAA,GAAA4B,EACAmJ,GAAAlJ,IAAA7B,OAAA,GAAA6B,EAGAmJ,GAAAlJ,IAAA9B,OAAA,KAAA8B,EACAiQ,GAAAhQ,IAAA/B,OAAA,GAAA+B,EACAkJ,GAAAjJ,KAAAhC,OAAA,EAAAgC,GACAkJ,GAAAjJ,KAAAjC,OAAA,QAAAiC,GAKA7C,EAAA8C,IAAAlC,OAAA,GAAAkC,EAGA1C,GAAA2C,IAAAnC,OAAA,EAAAmC,EAIAiJ,GAAAhJ,KAAApC,OAAA,GAAAoC,GACAzC,GAAAoD,KAAA/C,OAAA,GAAA+C,GACAsO,EAAApM,KAAAjF,OAAA,GAAAiF,GACApF,GAAAqF,KAAAlF,OAAA,EAAAkF,GAAa,IAAAgC,GAAA7J,OAAA8H,GACb+B,GAAA/B,IAAAnF,OAAA,CAAA,EAAAmF,EAAiB9H,KAAA8H,EAAA9H,KAAA6J,IAAAA,GAAA7J,EAAA,CAAA,EAAjB,MAAAyC,GAAAoH,GACAmE,GAAAjG,IAAApF,OAAA,CAAA4L,QAAsB,GAAKC,SAAY,GAAKC,mBAAsB,EAAA,EAAlE1G,EACArF,GAAAgH,KAAA/G,OAAA,KAAA+G,GACAyE,GAAAxE,KAAAhH,OAAA,WAAAgH,GAEF+E,GAAaP,KAAgB,aAAhBrO,GAAAyL,GACb,CAAAoD,GAAAC,EAAA,EAAgChL,EAAAA,SAAS,CAAC,EAC1C,CAAAiL,GAAAC,CAAA,EAAkClL,EAAAA,SAAS,CAAC,EAC5C,CAAAmL,EAAAC,CAAA,EAAwBpL,EAAAA,SAASoK,GAAQQ,QAAS,EAClDS,EAAwBC,QACtBC,GAAAA,OAAOjP,EAAM,OAAQ,EAAI,EAAC8F,IAAKL,IAC7ByJ,GAAAA,MAAM,GAAGzJ,EAAC,GAAIqI,GAAQqB,YAAR,OAA+B,IAAIC,IAAM,EAACC,SAC1D,EACArJ,EACF,EACA,CAAAsJ,EAAAC,EAAA,EAA0B7L,WAASoK,GAAQQ,SAAR,EAAwBS,EAAerI,OAAU,CAAC,EACrF,CAAAjF,EAAA+N,EAAA,EAA0C9L,EAAAA,SAA6BjB,MAAS,EAEhFgN,EAAiB9M,EAAAA,OAAuB,IAAI,EAC5C+M,GAAuB/M,EAAAA,OAAuB,IAAI,EAAE,IAAA8I,GAAAC,GAAA5L,EAAA,CAAA,IAAA6P,OAAAC,IAAA,2BAAA,GAE1CnE,GAAAA,IAAA,CACR,MAAAoE,GAAuB,IAAIC,eAAeC,IAAA,CACxCrB,GAAYqB,GAAO,CAAA,EAAGC,OAAOC,aAAjB,GAAoC,EAChDrB,EAAamB,GAAO,CAAA,EAAGC,OAAOE,cAAjB,GAAqC,CAAC,CACpD,EACD,OAAIT,EAAQU,SACVN,GAAcO,QAASX,EAAQU,OAAQ,EAElC,IAAMN,GAAcQ,WAAAA,CAAa,EACvC3E,GAAA,CAAA,EAAE5L,KAAA2L,GAAA3L,KAAA4L,KAAAD,GAAA3L,EAAA,CAAA,EAAA4L,GAAA5L,EAAA,CAAA,GATLwQ,EAAAA,UAAU7E,GASPC,EAAE,EAEL4E,EAAAA,UAAU,IAAA,CACR,MAAAC,GAAiBC,YACf,IAAA,CACEjB,OAAe7J,GAAIqJ,EAAerI,OAAU,EAAIhB,GAAI,EAArC,CAA2C,CAAC,GAE5DoI,GAAQ2C,OAAR,GAAuB,GAC1B,EACA,OAAK5B,GAAM6B,cAAcH,EAAQ,EAC1B,IAAMG,cAAcH,EAAQ,CAAC,EACnC,CAACxB,EAAiBF,EAAMf,GAAQ2C,KAAM,CAAC,EAE1C,MAAAE,GAAgBC,kBACd7B,EACAO,EACAxB,GAAQS,mBACRT,GAAQqB,YAAR,MACF,EAGGhL,GAAA0M,GAAAA,eACY7E,GAAA7J,GAAU2O,eACd7E,GAAA/J,GAAM4O,eAAgB,IAAA5E,GAAApM,OAAAqC,GAAA4O,aAAAjR,OAAAqC,GAAAkD,OAAAvF,OAAAE,GAAAF,EAAA,CAAA,IAAA0N,IAAA1N,EAAA,EAAA,IAAAiN,IAAAjN,EAAA,EAAA,IAAAyN,IAAAzN,QAAA8M,GAAA9M,EAAA,EAAA,IAAAoC,GAAA6O,aAAAjR,EAAA,EAAA,IAAAoC,GAAAmD,OAAAvF,EAAA,EAAA,IAAAe,IAa5BqL,GAAAU,GAAAG,IAAAQ,IAAAC,GACCpG,wBAAC4J,GAAAA,aACS,OAAA,CAAA3L,MACCnD,GAAMmD,MAAO0L,YACP7O,GAAM6O,WAAAA,EAET,WAAA,CAAA1L,MACHlD,GAAUkD,MAAO0L,YACX5O,GAAU4O,WAAAA,EAEbnE,WAAAA,EACMG,iBAAAA,GACXlM,MAAAA,GACQ,cAAA0M,GAAAmC,GAAAjN,OAEb,aAAA+K,GACIxN,EAAI8F,IAAKgB,EAAW,EAACQ,OAAQC,EAAoB,EAACb,OAAU,EAC1D1G,EAAI8F,IAAK0B,EAAW,EAACF,OAAQS,EACG,EAAhC/H,EAAIsH,OAAQU,EAAoB,EAHtC,KAIQ,EAnBb,KAsBOlI,EAAA,CAAA,EAAAqC,GAAA4O,YAAAjR,EAAA,CAAA,EAAAqC,GAAAkD,MAAAvF,KAAAE,EAAAF,KAAA0N,GAAA1N,MAAAiN,GAAAjN,MAAAyN,GAAAzN,MAAA8M,EAAA9M,EAAA,EAAA,EAAAoC,GAAA6O,YAAAjR,EAAA,EAAA,EAAAoC,GAAAmD,MAAAvF,MAAAe,GAAAf,MAAAoM,IAAAA,GAAApM,EAAA,EAAA,EACP,MAAAqM,GAAA2B,GAAQO,SAAYU,EAAerI,OAAU,GAA7CiK,GACCvI,EAAAA,kBAAAA,KAAA,MAAA,CAAe,UAAA,+BAAmC,IAAA,MAChD,SAAA,CAAAhB,EAAAA,kBAAAA,IAAA,SAAA,CACO,KAAA,SACI,QAAA,IAAA,CACP0H,EAAQ,CAACD,CAAI,CAAC,EAEN,UAAA,6CACE,aAAAA,EAAA,2BAAA,0BAEXA,SAAAA,EAAOzH,EAAAA,kBAAAA,IAAC6J,GAAAA,MAAA,EAAK,EAAM7J,EAAAA,kBAAAA,IAAC8J,GAAAA,SACvB,EACA9J,EAAAA,kBAAAA,IAAC+J,GAAAA,GAAA,CACM,IAAApC,EAAe,CAAA,EACf,IAAAA,EAAgBA,EAAerI,OAAU,CAAC,EACxCiK,MAAAA,GACD,KAAA,KACQ,aAAA5B,EAAgBA,EAAerI,OAAU,CAAC,EACjD,MAAAqI,EAAgBO,CAAK,EACV,iBAAA8B,IAAA,CAChB7B,GAASR,EAAesC,QAASD,EAAmB,CAAC,CAAC,EAE9C,SAAAE,IAAA,CACR/B,GAASR,EAAesC,QAASD,EAAmB,CAAC,CAAC,EAE7C,aAAA,6DAAA,IAEf,EA3BD,KA6BAkB,GAAAtS,EAAI0G,SAAY,EACfU,EAAAA,kBAAAA,IAACmK,cAAA,CAAA,GADFnJ,EAAAA,kBAAAA,KAAAqC,EAAAA,kBAAAA,SAAA,CAIIyC,SAAAA,CAAAA,IAAkBlN,EAAIsH,OAAQ6C,EAAc,EAACzD,SAAY,EACxDU,EAAAA,kBAAAA,IAACoK,GAAAA,yBAAA,CACQ3Q,MAAAA,GACWoM,iBAAAA,GACV,OAACJ,IAAmCqB,GAAAA,OAAOP,EAAK,EAACS,kBAAkBvB,OAC9D,YAAAxK,GAAgB4M,GAAAA,OAAOjP,EAAM,QAAS,EAAI,EACrCwP,iBAAAA,GACLgF,YAAAA,GACF,UAAArS,GAAUsP,cARxB,KAWDrK,EAAAA,kBAAAA,IAACsK,GAAAA,UAAA,CAAejC,IAAAA,EACbhB,SAAAA,IAAAE,GACCvH,EAAAA,kBAAAA,IAACoH,GAAA,CAEG,KAAAR,EACI2D,GAAAA,QACE+C,GAAAA,8BAA8B1U,EAAM8N,GAAQqB,YAAR,MAA6B,EAAC7H,OACxDwD,IACNgD,GAAQO,QACJ5I,GAACoM,OACDC,GAAAA,OACE,IAAI1C,KAAKL,EAAgBO,CAAK,CAAC,EAC/BxB,GAAQqB,YAAR,MACF,EALJrE,EAOF,EAACxD,OACOY,IAAM2F,GAAA,CAAY1F,GAAAA,uBAAuB1C,GAACoB,IAAK,EAAzCqB,EAA+C,EAC/D,CACE0C,IACEnF,GAACoB,OAAUpE,OACPuL,IAAa,OACVC,KAAgB,aAAhB,EAAA,IAAyC0G,OACzC1G,KAAgB,aAAhB,GAAA,GAAyC0G,MAC5ClP,GAACoB,IAAK,EAEd,CAACmH,CAAQ,CACX,EAAC1G,OAAQ,CAAA4D,GAAAC,KAAYsJ,EAAkB/O,GAAI+O,EAAtB,EAY8C,EAXnEC,GAAAA,8BAA8B1U,EAAM8N,GAAQqB,YAAR,MAA6B,EAAC7H,OACxDoD,IACNoD,GAAQO,QACJ5I,GAACoM,OACDC,GAAAA,OACE,IAAI1C,KAAKL,EAAgBO,CAAK,CAAC,EAC/BxB,GAAQqB,YAAR,MACF,EALJzE,EAOF,EAACpD,OACO0K,IAAMnE,GAAA,CAAY1F,GAAAA,uBAAuB1C,GAACoB,IAAK,EAAzCmL,EAA+C,EAAC1K,OACtD,CAAAsN,GAAA9K,KAAY2K,EAAkB/O,GAAI+O,EAAtB,EAA6C,EAGvE,SAAAzU,EAAIsH,OAAQ8C,EAAc,EAAC1D,SAAY,EACnCmG,GAAA,CACGA,EAAgB,EADnB,CAEGqB,UAAM2G,cAAe,UAAU,CAAC,EAClChI,IAAmCqB,GAAAA,OAAOP,EAAK,EAACS,kBAAkBvB,OAGvE,YAAA7M,EAAIsH,OAAQgE,EAAc,EAAC5E,SAAY,EAAvC,CAAA,EAEIrE,GAAgB4M,GAAAA,OAAOjP,EAAM,QAAS,EAAI,EAEjCyB,cAAAA,EACRgN,SACCE,OAAAA,GACA5N,OAAAA,EACAC,OAAAA,EACIN,WAAAA,GACAO,WAAAA,GACDN,UAAAA,GACCV,WAAAA,EACCE,YAAAA,EACFE,UAAAA,EACGE,aAAAA,GACFK,WAAAA,GACAM,WAAAA,EACHC,QAAAA,EACUC,kBAAAA,EACRC,UAAAA,EAET,SAAC8G,GAAAA,uBAAuB7G,CAAQ,EAE5BkF,KAAI2L,IAAI,GACDnS,EAAIsH,OACGiE,EAAoC,EAACzF,IACxCgG,EAAqB,CAC9B,EAAI,EAJN,EAMEtF,KAAI2L,IAAI,GACHnS,EAAIsH,OACGyE,EAAoC,EAACjG,IACxCsG,EAAqB,CAC9B,EAXD9K,EAcL,SAAC6G,GAAAA,uBAAuB5G,CAAQ,EAE5BiF,KAAIC,IAAI,GACDzG,EAAIsH,OACG+E,EAAoC,EAACvG,IACxC2G,EAAqB,CAC9B,GAAK,EAJP,EAMEjG,KAAIC,IAAI,GACHzG,EAAIsH,OACGoF,EAAoC,EAAC5G,IACxCsM,EAAqB,CAC9B,EAXD7Q,EAagBqS,sBAAAA,GACHpS,mBAAAA,EACRG,WAAAA,EACP,IAAA8L,KAAa,MAAQA,KAAa,KACtB7L,gBAAAA,GACAiS,gBAAAA,GACYhS,4BAAAA,EACbC,eAAAA,EACFC,aAAAA,EACHE,UAAAA,GACCD,WAAAA,EACAG,WAAAA,EACJD,OAAAA,EAEN,QAAAE,KAAY,GAAZ,CAAAoG,SACgB,GAAG1F,KAAQ,GAAID,OAAU,EAAA,EACrCT,IAAA,CAAAoG,SAAuB,EAAC1F,KAAQ,GAAID,OAAU,CAAA,EAErCiR,cAAAA,EACJxR,UAAAA,GACGC,aAAAA,GACLC,QAAAA,EAAAA,CAAO,EAvHnB,IAAA,CA0HH,CAAA,EAAY,EAEf,IAAAkQ,GAAA5S,EAAA,EAAA,IAAAqC,GAAAoQ,UAAAzS,EAAA,EAAA,IAAAqC,GAAAqQ,QAAA1S,EAAA,EAAA,IAAAkN,IAAAlN,EAAA,EAAA,IAAAgN,IAAAhN,EAAA,EAAA,IAAAoC,GAAAqQ,UAAAzS,EAAA,EAAA,IAAAoC,GAAAsQ,QAAA1S,QAAAe,IACA6R,GAAA5F,IAAAE,GACC5F,wBAACqL,GAAAA,aACU3F,QAAAA,GACCE,SAAAA,GACHnM,MAAAA,GACC,OAAA,CAAA0R,SAAYrQ,GAAMqQ,SAAUC,OAAUtQ,GAAMsQ,MAAAA,EACxC,WAAA,CAAAD,SACApQ,GAAUoQ,SAAUC,OACtBrQ,GAAUqQ,MAAAA,EACnB,EATJ,KAWO1S,EAAA,EAAA,EAAAqC,GAAAoQ,SAAAzS,EAAA,EAAA,EAAAqC,GAAAqQ,OAAA1S,MAAAkN,GAAAlN,MAAAgN,GAAAhN,EAAA,EAAA,EAAAoC,GAAAqQ,SAAAzS,EAAA,EAAA,EAAAoC,GAAAsQ,OAAA1S,MAAAe,GAAAf,MAAA4S,IAAAA,GAAA5S,EAAA,EAAA,EAAA,IAAAgV,GAAA,OAAAhV,EAAA,EAAA,IAAAqE,IAAArE,EAAA,EAAA,IAAA8N,IAAA9N,EAAA,EAAA,IAAAsN,GAAAtN,EAAA,EAAA,IAAAwN,GAAAxN,EAAA,EAAA,IAAAgB,IAAAhB,QAAA2N,IAAA3N,EAAA,EAAA,IAAA4N,IAAA5N,EAAA,EAAA,IAAAqN,IAAArN,EAAA,EAAA,IAAAuN,GAAAvN,EAAA,EAAA,IAAAkM,IAAAlM,EAAA,EAAA,IAAAmM,IAAAnM,EAAA,EAAA,IAAAoM,IAAApM,EAAA,EAAA,IAAAqM,IAAArM,EAAA,EAAA,IAAAwS,IAAAxS,EAAA,EAAA,IAAA4S,IAAA5S,EAAA,EAAA,IAAA6N,IAAA7N,QAAAe,IA3NViU,4BAAC3Q,GAAA,CACY,UAAA6H,GACJ,MAAAC,GACHqB,KACCoC,OACO9B,aAAAA,GACKR,gBAAAA,EACVO,MAAAA,GACGF,SAAAA,GACCC,UAAAA,GACJ7M,MAAAA,GACCC,OAAAA,GACQuM,eAAAA,EACPF,QAAAA,GAERjB,SAAAA,CAAAA,GAuBAC,GA6BAmG,GA6IAI,EAAAA,EAYH,EAAiB5S,MAAAqE,GAAArE,MAAA8N,GAAA9N,MAAAsN,EAAAtN,MAAAwN,EAAAxN,MAAAgB,GAAAhB,MAAA2N,GAAA3N,MAAA4N,GAAA5N,MAAAqN,GAAArN,MAAAuN,EAAAvN,MAAAkM,GAAAlM,MAAAmM,GAAAnM,MAAAoM,GAAApM,MAAAqM,GAAArM,MAAAwS,GAAAxS,MAAA4S,GAAA5S,MAAA6N,GAAA7N,MAAAe,GAAAf,MAAAgV,IAAAA,GAAAhV,EAAA,EAAA,EA5NjBgV,EA4NiB,CAzUd,SAAA1C,GAAAW,EAAA,CAAA,OA+R+BtN,EAACoB,IAAe,CA/R/C,SAAA6F,GAAAiG,EAAA,CAAA,MA8RkC,CAACxK,GAAAA,uBAAuB1C,EAACoB,IAAK,CAAC,CA9RjE,SAAA4F,GAAAsI,EAAA,CAAA,OAyR+BtP,EAACoB,IAAe,CAzR/C,SAAAwF,GAAA2I,EAAA,CAAA,MAwRkC,CAAC7M,GAAAA,uBAAuB1C,EAACoB,IAAK,CAAC,CAxRjE,SAAAuF,GAAA8F,EAAA,CAAA,OAgR+BzM,EAACoB,IAAe,CAhR/C,SAAAkF,GAAAkG,EAAA,CAAA,MA+QkC,CAAC9J,GAAAA,uBAAuB1C,EAACoB,IAAK,CAAC,CA/QjE,SAAAiF,GAAAoH,EAAA,CAAA,OA0Q+BzN,EAACoB,IAAe,CA1Q/C,SAAA0E,GAAA0H,EAAA,CAAA,MAyQkC,CAAC9K,GAAAA,uBAAuB1C,EAACoB,IAAK,CAAC,CAzQjE,SAAAyE,GAAA4I,EAAA,CAAA,OA+O6BxL,EAAEuB,KAAM,CA/OrC,SAAAG,GAAAP,EAAA,CAAA,OAwO6BnB,EAAEuB,KAAM,CAxOrC,SAAAE,GAAAzB,EAAA,CAAA,OAoLwCA,EAAEuB,KAAM,CApLhD,SAAAjC,GAAAgD,EAAA,CAAA,OA8I4BvF,IAAMhD,MAAS,CA9I3C,SAAAsF,GAAAkD,EAAA,CAAA,OA6I6CxF,IAAMhD,MAAS,CA7I5D,SAAA+E,GAAA4D,EAAA,CAAA,OA6IyB3F,EAACzF,IAAK,CA7I/B,SAAAuH,GAAAwD,EAAA,CAAA,OA4I2CtF,IAAMhD,MAAS,CA5I1D,SAAAqE,GAAAW,EAAA,CAAA,OA4IuBhC,EAACzF,IAAK,CA5I7B,SAAAgG,GAAAwN,EAAAC,EAAA,CAAA,OAuEOC,GAAAA,UAAUF,EAAGC,CAAC,CAAC,CCjGtB,SAAA7T,GAAAC,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,GAAA,EACL,CAAAC,KAAAA,EAAAS,UAAAA,EAAAC,WAAAA,GAAAC,UAAAA,GAAAN,UAAAH,GAAAK,aAAAH,GAAAH,WAAAK,GAAAH,YAAAK,EAAAI,WAAAA,EAAAC,MAAAA,EAAAC,OAAAA,EAAAK,QAAAA,GAAAC,kBAAAA,GAAAF,WAAAA,GAAAH,OAAAA,EAAAC,OAAAA,GAAAC,WAAAA,GAAAI,UAAAA,GAAAC,SAAAA,GAAAE,mBAAAA,EAAAC,cAAAA,GAAAC,IAAAA,EAAAC,WAAAA,EAAAC,gBAAAA,EAAAiS,gBAAAA,EAAAhS,4BAAAA,EAAAC,eAAAA,EAAAC,aAAAA,EAAAC,WAAAA,EAAAC,UAAAA,EAAAC,OAAAA,EAAAC,WAAAA,EAAAC,QAAAA,EAAAC,YAAAA,EAAAC,UAAAA,EAAAC,aAAAA,EAAAC,QAAAA,CAAAA,EAsCI3C,EAjCFQ,EAAAH,KAAAuC,OAAA,GAAAvC,GACAK,EAAAH,KAAAqC,OAAA,GAAArC,GACAH,GAAAK,KAAAmC,OAAA,IAAAnC,GACAH,GAAAK,IAAAiC,OAAA,GAAAjC,EA+BFkC,GAAeC,EAAAA,OAAO,IAAI,EAAE,IAAAC,EAAA9C,EAAA,CAAA,IAAAsC,EAAAS,QAAA/C,EAAA,CAAA,IAAAsC,EAAAU,MACOF,EAAA,CAAAE,KAC3BV,EAAOU,KAAKD,OACVT,EAAOS,MAAAA,EAChB/C,EAAA,CAAA,EAAAsC,EAAAS,OAAA/C,EAAA,CAAA,EAAAsC,EAAAU,KAAAhD,KAAA8C,GAAAA,EAAA9C,EAAA,CAAA,EAHD,MAAAiD,GAAiBC,GAAAA,UAAUN,GAAQE,CAGlC,EAEMK,GAAAlB,EAAe1B,EAAY,GAA3BA,EAAyC,IAAA6C,EAAApD,EAAA,CAAA,IAAAS,GAAAT,EAAA,CAAA,IAAAG,IAAAH,EAAA,CAAA,IAAAK,IAAAL,OAAAmD,IADjCC,EAAA,CAAAC,IACRF,GAAyCG,OACtC7C,EAAY8C,KACdpD,GAAUqD,MACTnD,EAAAA,EACRL,KAAAS,EAAAT,KAAAG,GAAAH,KAAAK,GAAAL,KAAAmD,GAAAnD,KAAAoD,GAAAA,EAAApD,EAAA,CAAA,EALD,MAAAyD,EAAeL,EAOf,CAAAM,EAAAC,CAAA,EAA0CC,EAAAA,SAAcjB,MAAS,EAEjE,CAAAkB,EAAAC,CAAA,EAA4CF,EAAAA,SAAcjB,MAAS,EACnE,CAAAoB,EAAAC,EAAA,EAA4BJ,EAAAA,SAA6BjB,MAAS,EAClE,CAAAsB,GAAAC,EAAA,EAA4BN,EAAAA,SAA6BjB,MAAS,EAClEwB,GAAmBpD,EAAQ0C,EAAMF,KAAQE,EAAMD,MAC/CY,EAAoBpD,EAASyC,EAAMJ,IAAOI,EAAMH,OAAQ,IAAAe,EAAAC,GAAAC,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,EAAAC,GAAA,GAAAlF,EAAA,CAAA,IAAAsC,GAAAtC,EAAA,CAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAAW,GAAAX,EAAA,EAAA,IAAAY,IAAAZ,EAAA,EAAA,IAAAqC,GAAA8C,mBAAAnF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAC,WAAArF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAE,QAAAtF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAG,OAAAvF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAC,MAAAzF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAF,QAAAtF,EAAA,EAAA,IAAAuC,GAAAvC,EAAA,EAAA,IAAAyC,GAAAzC,EAAA,EAAA,IAAAE,GAAAF,EAAA,EAAA,IAAAgC,GAAAhC,EAAA,EAAA,IAAAoE,GAAApE,EAAA,EAAA,IAAAmE,IAAAnE,EAAA,EAAA,IAAAgB,GAAAhB,EAAA,EAAA,IAAAiD,IAAAjD,EAAA,EAAA,IAAA6B,GAAA7B,EAAA,EAAA,IAAAyD,EAAAH,QAAAtD,EAAA,EAAA,IAAAyD,EAAAF,MAAAvD,EAAA,EAAA,IAAAyD,EAAAJ,KAAArD,EAAA,EAAA,IAAA8B,GAAA9B,EAAA,EAAA,IAAAwB,IAAAxB,EAAA,EAAA,IAAA+T,GAAA/T,EAAA,EAAA,IAAA6D,GAAA7D,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAmC,GAAAnC,EAAA,EAAA,IAAA0B,GAAA1B,EAAA,EAAA,IAAAsB,IAAAtB,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,IAAAlB,EAAA,EAAA,IAAAuB,IAAAvB,EAAA,EAAA,IAAA+B,GAAA/B,EAAA,EAAA,IAAA4B,GAAA5B,EAAA,EAAA,IAAA2B,IAAA3B,EAAA,EAAA,IAAAoB,IAAApB,EAAA,EAAA,IAAAa,IAAAb,EAAA,EAAA,IAAAmB,IAAAnB,EAAA,EAAA,IAAAoC,GAAA+C,mBAAAnF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAC,WAAArF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAE,QAAAtF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAG,OAAAvF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAC,MAAAzF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAF,QAAAtF,EAAA,EAAA,IAAAiB,GAAAjB,EAAA,EAAA,IAAAO,GAAAP,EAAA,EAAA,IAAAc,GAAAd,EAAA,EAAA,IAAAkC,GAAAlC,EAAA,EAAA,IAAAe,EAAA,CAAA,IAAA2E,GAAA1F,QAAA6B,GAE5B6D,GAAAA,CAAAC,EAAAC,KAAW,CAAA,GAClCD,EAACE,GACAhE,EAAA,GAAgB8D,EAACG,KAAM,GAAvB,GAA+BF,CAAC,EAAA,GACpC5F,MAAA6B,EAAA7B,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAHF,MAAA+F,GAAmB7F,EAAI8F,IAAKN,EAG1B,EACFO,GAAiBpE,GAAckE,GAAUC,IAAKE,EAAc,EAE5DC,EAAUC,GAAAA,OAAAA,EAAaC,OAAQ,CAAC,EAAG7E,EAAQ,CAAC,EAAC8E,MAAO,CAAC,EAAGnC,EAAU,CAAC,EAACoC,KAAAA,EACpEC,GAAUC,GAAAA,KAAAA,EAAWJ,OACXJ,EAAQ,EAACK,MACV,CACL,EACAyN,EACIrN,KAAI2L,IAAKjO,EAAa2P,EAAkB9N,GAAQW,MAGpC,EAFZ9E,EACE4E,KAAIC,IAAKvC,EAAatC,EAAkBmE,GAAQW,MACtC,EAFZxC,CAEa,CAClB,EAACyC,aACYjG,EAAU,EAC1BsG,GAAef,EAACgB,MAAOhF,CAAS,EAI3BmC,GAAA8C,GAAAA,OAAMC,IACAzE,GAAAA,GACEgC,GAAA,GAAG7D,CAAK,KACP8D,GAAA,GAAG7D,CAAM,KACR8D,EAAA,OAAO/D,CAAK,IAAIC,CAAM,GACrB+D,GAAA,MAEIR,GAAA,aAAad,EAAMF,IAAK,IAAIE,EAAMJ,GAAI,IACjDmB,EAAA3D,GACCyG,EAAAA,kBAAAA,IAACC,GAAAA,mBAAA,CACS,OAAAL,GAAMM,OAAQR,EAAY,EAC/B,EAAAE,GAAMM,OAAQC,EAAY,EAACzB,IAAK2B,GAAKxB,EAAER,CAAC,CAAC,EACxC,GAAA,EAAIpF,EACJ,GAAA6D,EAAcX,EAAMH,OAChB,OAAA,CAAA+B,UACKjD,GAAMgD,OAAkBC,UAAAC,OAC3BlD,GAAMgD,OAAeE,MAAAA,EAEnB,WAAA,CAAAD,UACChD,GAAU+C,OAAkBC,UAAAC,OAC/BjD,GAAU+C,OAAeE,MAAAA,EAE3BrE,OAAAA,EACAC,OAAAA,GACE,UAAA,YACV,cAAA,GACWsB,UAAAA,EAAS,EAlBvB,KAsBI,MAAAoF,GAAAzD,GAAa,EACb0D,GAAA,EAAIpE,EAAMJ,IAAO,GACbyE,GAAA1F,GAAMgD,OAAcG,MAChBwC,GAAA1F,GAAU+C,OAAcG,MAAAvF,EAAA,EAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAA4H,IAAA5H,EAAA,EAAA,IAAA6H,IAAA7H,EAAA,EAAA,IAAA8H,IAAA9H,QAAA+H,IAJrCtD,EAAA6C,EAAAA,kBAAAA,IAACU,GAAAA,UAAA,CACI,EAAAJ,GACA,EAAAC,GACI,MAAAC,GACI,UAAAC,GACL9F,KAAAA,CAAAA,CAAY,EAClBjC,MAAAiC,EAAAjC,MAAA4H,GAAA5H,MAAA6H,GAAA7H,MAAA8H,GAAA9H,MAAA+H,GAAA/H,MAAAyE,GAAAA,EAAAzE,EAAA,EAAA,EAAAA,QAAAyC,GACDiC,GAAAjC,EAAY+E,OAAQE,EAA4B,EAAC1B,IAAKiC,EAAY,EAACjI,MAAAyC,EAAAzC,MAAA0E,IAAAA,GAAA1E,EAAA,EAAA,EACnEqE,EAAA8D,GAAAA,gBACEnD,EAAAe,GAAUC,IAAKoC,GACbC,GAAAA,uBAAuB7B,GAAEb,EAACE,EAAG,CAAC,EAA/B,8BACEuB,UAAA,EAAA,CACY,UAAA,6CAEA,SAAA,CAAAmB,QACC,CAAApC,EAAK,EAACK,EAAKA,GAAE,GAAGb,EAACE,EAAG,EAAE,CAAA,EAAG2C,YACrB,CAAArC,EACR,EAACK,EACDA,GAAE,GAAGb,EAACE,EAAG,EAAE,EAAC4C,WACH,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,GAAA,cAAA,UACH,KAAA,CAAA0F,QAAW,EAACF,WAAc,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAE5D/C,SAAAA,CAAAA,EAACoB,KAAKf,IAAK,CAAA4C,EAAAC,IACVP,EAAAA,kBAAAA,KAAAlB,UAAA,EAAA,CAEW,QAAAzF,GAAiBhB,EAAUkI,CAAC,IAAMlH,GAAjB,EAAA,GAAjB,EACK,aAAAmH,GAAA,CACZnF,EAAiB,CAAA,GAAKgC,EAACoD,UAAaF,CAAAA,CAAG,EACvC3E,GAAU4E,EAAKE,OAAQ,EACvBhF,GAAU8E,EAAKG,OAAQ,EACvB3H,KAAoB,CAAA,GAAKqE,EAACoD,UAAaF,CAAAA,CAAG,CAAC,EAEhC,YAAAK,GAAA,CACXvF,EAAiB,CAAA,GAAKgC,EAACoD,UAAaF,CAAAA,CAAG,EACvC3E,GAAU4E,EAAKE,OAAQ,EACvBhF,GAAU8E,EAAKG,OAAQ,CAAC,EAEZ,aAAA,IAAA,CACZtF,EAAiBhB,MAAS,EAC1BqB,GAAUrB,MAAS,EACnBuB,GAAUvB,MAAS,EACnBrB,KAAoBqB,MAAS,CAAC,EAEvB,QAAA,IAAA,EACHjB,GAAAM,KAEAmH,GAAAA,QAAQtF,EAAgB,CAAA,GAAK8B,EAACoD,UAAaF,CAAAA,CACjB,GAD1B9G,GAGA+B,EAAkBnB,MAAS,EAC3BjB,IAAqBiB,MAAS,IAE9BmB,EAAkB,CAAA,GAAK6B,EAACoD,UAAaF,CAAAA,CAAG,EACpCnH,GAAoBA,EAAmB,CAAA,GAAKiE,EAACoD,UAAaF,CAAAA,CAAG,GAEpE,EAGFD,SAAAA,CAAAA,0CAGM,EAAA,EACI,MAAA,CAAAQ,KAAQzI,EAAUkI,CAAC,CAAA,EAClB,OAAArC,GAACS,UAAAA,EACH,KAAA,CAAAlG,MACG,EAACoF,EACLA,EAAE,CAAC,EAACsC,WACK,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAEjC,SAAA,CAAAH,QACC,CAAAxH,MACA,EAACoF,EACLA,EAAE,CAAC,EAACiD,KACDzI,EAAUkI,CAAC,CAAA,EAClBL,YACY,CAAAzH,MACJoF,EAAEyC,GAAA,CAAO,EAACzC,EACdA,EACD0C,IAAM,EAAN,EAAc4K,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAA2N,EAAAC,IAAgBA,EAAIvM,GAAJsM,CAAgB,CAAC,CACnE,EAAC/L,KACKzI,EAAUkI,CAAC,EAACJ,WACN,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,GAAA,cAAA,SAAA,EAzBJ4F,GAFR,KA8BA1H,GACCmG,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACK,EAAAZ,GAACS,UAAAA,EAAe,EACZ,MAAA,CAAAoC,WACO,SAAQ,GAChBjH,GAAM+C,mBAAN,CAAA,CAA8B,EAEjC,GAAA,SACQ,UAAAmE,EAAAA,GAAG,sBAAuBjH,GAAU8C,iBAAmB,EAC5D,KAAA,CAAAwD,QACK,EAACF,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAEjC,SAAA,CAAAH,QACC,CAAApC,EACJA,EAAE,CAAC,EAACwC,QACE,EAACS,KACJiM,GAAAA,2BAA2B1U,EAAUkI,CAAC,CAAC,CAAA,EAC9CL,YACY,CAAArC,EAETA,EACE0C,IAAM,EAAN,EAEI4K,OAAI9N,EAACoB,KAAKS,OAAQ,CAAA8N,EAAAC,IAAgBH,EAAIvM,GAAJyM,CAAgB,CAAC,CACzD,EACAnP,EAAEyC,GAAA,CAAO,EAAI,EAACD,QAEdC,GACAzC,EAAEyC,CAAE,EACFW,GAAAA,yBAAyBX,EAAIlG,EAASF,EAAWtB,GAAQD,CAAM,EAAC2F,OAEhE,GAJF,EAAA,EAMKwC,KACDiM,GAAAA,2BAA2B1U,EAAUkI,CAAC,CAAC,EAACJ,WAClC,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,GAAA,cAAA,UAERsG,SAAAA,GAAAA,yBAAyBX,EAAIlG,EAASF,EAAWtB,GAAQD,CAAM,EAClE,EA3CD,IAAA,GAhEI,GAAG0E,EAACG,KAAM,IAAIvD,EAAYsG,CAAC,GAAbA,CAAmB,EA6GxC,CACD,EACAzH,2BACEoI,eAAA,CAEG,MAAA,GAAG7D,EAACG,KAAM,GAAEc,OAAU9F,EAAtB,GACO6E,EAACG,KAAM,GADd,GAEO,GAAGH,EAACG,KAAM,GAAE2D,UAAW,EAAG3I,CAAU,CAAC,MAE3C,EAAA,EACA,EAAA,EAAI2C,EAAMF,KACN,MAAA,EAAIE,EAAMF,KACT,OAAAiD,GAACS,YACF,MAAA7E,GAAMoD,OAAeF,OACjB,UAAAjD,GAAUmD,OAAeF,OAC3BhD,QAAAA,EACCW,SAAAA,EAAAA,GAdb,KAiBA9B,GACCmG,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACa,UAAAkC,EAAAA,GACT,wCACCpH,EAAD,GAAA,oDACAG,GAAU8C,iBACZ,EACO,MAAA,CAAA,GACDjD,EAAA,CAAAkH,KAAqBlH,CAAAA,EAArB,CAAA,EAAsCmH,WAC9B,QAAO,GACfjH,GAAM+C,mBAAN,CAAA,CAA8B,EAEjC,EAAAqB,GAACS,YAAe,EACf,GAAA,EACD,GAAA,SACO,SAAA,CAAAsB,QACC,CAAApC,EACJA,EAAE,CAAC,EAACwC,QACE,EAAC,GACNzG,EAAA,CAAAkH,KAAqBlH,CAAAA,EAArB,CAAA,CAAqC,EAC1CsG,YACY,CAAArC,EACRA,EAAEsN,OAAI9N,EAACoB,KAAKf,IAAKkC,EAAa,CAAC,CAAC,EAACS,QAC3B,EAAC,GACNzG,EAAA,CAAAkH,KAAqBlH,CAAAA,EAArB,CAAA,EAAsCuG,WAC9B,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEI,KAAA,CAAAC,QACK,EAACF,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAEnC,QAAA,UACC,QAAAzF,GAAA,cAAA,UAERsG,qCACCkK,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ6C,EAAkB,CAAC,EACrC3H,EACAF,EACAtB,GACAD,CACF,EACF,EA1CD,IAAA,CAAA,EA/II0E,EAACG,KA2LR,CAEJ,EAMsB,MAAA4D,GAAArH,GAAUmD,OAAaC,KAAA,IAAAkE,GAAA3J,QAAA0J,IAA/BC,GAAA,CAAAlE,KAAQiE,EAAAA,EAAyB1J,MAAA0J,GAAA1J,MAAA2J,IAAAA,GAAA3J,EAAA,EAAA,EAC7B,MAAA4J,GAAAxH,GAAMoD,OAAaC,KAAA,IAAAoE,GAAA7J,QAAA4J,IAA3BC,GAAA,CAAApE,KAAQmE,EAAAA,EAAqB5J,MAAA4J,GAAA5J,MAAA6J,IAAAA,GAAA7J,EAAA,EAAA,EANvCiF,0BAAC6E,GAAAA,KAAA,CACK,GAAA3D,EAAE,CAAC,EACH,GAAAA,EAAE,CAAC,EACH,GAAA,KACA,GAAA/B,EAAcX,EAAMH,OACZ,WAAAqG,GACJ,OAAAE,GAA6B,EAEtC3E,GAAA3D,yDAEIA,SAAAA,GAASyE,IAAK,CAAAoO,EAAA/I,IACb/D,EAAAA,kBAAAA,IAAC2C,GAAAA,SAAA,CAEO,KAAArB,EAAEsB,KACD,MAAAtB,EAAEuB,MACN,EAAAhE,EAAEyC,EAAEwB,KAAgB,EACnB,GAAA,EAAI3G,EAAMJ,IACV,GAAAe,EAAcX,EAAMH,OACd,SAAA6C,EAAEyC,EAAEwB,KAAgB,EAAIjG,GAAa,KAArCvC,EAAA,OAAA,QACE,WAAAgH,EAAEvG,WACN,OAAAuG,EAAExG,OACDE,QAAAA,EACCW,SAAAA,EAAAA,EAVL2C,CAUa,CAErB,CAAA,CAAC,EAhBL,KAkBO5F,KAAAsC,EAAAtC,KAAAiC,EAAAjC,MAAAW,EAAAX,MAAAY,GAAAZ,EAAA,EAAA,EAAAqC,GAAA8C,kBAAAnF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAC,UAAArF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAE,OAAAtF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAG,MAAAvF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAC,KAAAzF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAF,OAAAtF,MAAAuC,EAAAvC,MAAAyC,EAAAzC,MAAAE,EAAAF,MAAAgC,EAAAhC,MAAAoE,EAAApE,MAAAmE,GAAAnE,MAAAgB,EAAAhB,MAAAiD,GAAAjD,MAAA6B,EAAA7B,EAAA,EAAA,EAAAyD,EAAAH,OAAAtD,EAAA,EAAA,EAAAyD,EAAAF,KAAAvD,EAAA,EAAA,EAAAyD,EAAAJ,IAAArD,MAAA8B,EAAA9B,MAAAwB,GAAAxB,MAAA+T,EAAA/T,MAAA6D,EAAA7D,MAAA0C,EAAA1C,MAAAmC,EAAAnC,MAAA0B,EAAA1B,MAAAsB,GAAAtB,MAAAwC,EAAAxC,MAAAkB,GAAAlB,MAAAuB,GAAAvB,MAAA+B,EAAA/B,MAAA4B,EAAA5B,MAAA2B,GAAA3B,MAAAoB,GAAApB,MAAAa,GAAAb,MAAAmB,GAAAnB,EAAA,EAAA,EAAAoC,GAAA+C,kBAAAnF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAC,UAAArF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAE,OAAAtF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAG,MAAAvF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAC,KAAAzF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAF,OAAAtF,MAAAiB,EAAAjB,MAAAO,EAAAP,MAAAc,EAAAd,MAAAkC,EAAAlC,MAAAe,EAAAf,MAAAqE,EAAArE,MAAAsE,GAAAtE,MAAAuE,GAAAvE,MAAAwE,EAAAxE,MAAAyE,EAAAzE,MAAA0E,GAAA1E,MAAA2E,GAAA3E,MAAA4E,GAAA5E,MAAA6E,GAAA7E,MAAA8E,EAAA9E,MAAA+E,GAAA/E,MAAAgF,EAAAhF,MAAAiF,EAAAjF,MAAAkF,EAAA,MAAAb,EAAArE,EAAA,EAAA,EAAAsE,GAAAtE,EAAA,EAAA,EAAAuE,GAAAvE,EAAA,EAAA,EAAAwE,EAAAxE,EAAA,EAAA,EAAAyE,EAAAzE,EAAA,EAAA,EAAA0E,GAAA1E,EAAA,EAAA,EAAA2E,GAAA3E,EAAA,EAAA,EAAA4E,GAAA5E,EAAA,EAAA,EAAA6E,GAAA7E,EAAA,EAAA,EAAA8E,EAAA9E,EAAA,EAAA,EAAA+E,GAAA/E,EAAA,EAAA,EAAAgF,EAAAhF,EAAA,EAAA,EAAAiF,EAAAjF,EAAA,EAAA,EAAAkF,GAAAlF,EAAA,EAAA,EAAA,IAAA0F,GAAA1F,EAAA,EAAA,IAAAqE,GAAArE,EAAA,EAAA,IAAAgF,GAAAhF,EAAA,EAAA,IAAAiF,GAAAjF,QAAAkF,IA7NVQ,4BAACrB,EAAA,CACEW,SAAAA,CAAAA,EAkMDC,EAQCC,EAAAA,EAmBH,EAAkBlF,MAAAqE,EAAArE,MAAAgF,EAAAhF,MAAAiF,EAAAjF,MAAAkF,GAAAlF,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAAA,IAAA4H,GAAA5H,QAAAyC,GACjBmF,GAAAnF,EAAY+E,OAAQ8C,EAA2B,EAACtE,IAAKwF,EAAY,EAACxL,MAAAyC,EAAAzC,MAAA4H,IAAAA,GAAA5H,EAAA,EAAA,EAAA,IAAA6H,GAAA7H,QAAAuE,IAAAvE,EAAA,EAAA,IAAAwE,GAAAxE,EAAA,EAAA,IAAAyE,GAAAzE,EAAA,EAAA,IAAA0E,IAAA1E,QAAA0F,IAAA1F,EAAA,EAAA,IAAA4H,IA7PrEC,GAAAS,EAAAA,kBAAAA,KAAA,IAAA,CAAc,UAAA/D,GACXC,SAAAA,CAAAA,EAqBDC,EAOCC,GACDgB,GA+NCkC,EAAAA,EACH,EAAI5H,MAAAuE,GAAAvE,MAAAwE,EAAAxE,MAAAyE,EAAAzE,MAAA0E,GAAA1E,MAAA0F,GAAA1F,MAAA4H,GAAA5H,MAAA6H,IAAAA,GAAA7H,EAAA,EAAA,EAAA,IAAA8H,GAAA9H,EAAA,GAAA,IAAAsE,IAAAtE,EAAA,GAAA,IAAA2E,IAAA3E,EAAA,GAAA,IAAA4E,IAAA5E,SAAA6E,IAAA7E,EAAA,GAAA,IAAA8E,GAAA9E,EAAA,GAAA,IAAA+E,IAAA/E,EAAA,GAAA,IAAA6H,IArQNC,2BAACxD,GAAA,CACM1B,OACE,MAAAgC,GACC,OAAAC,GACC,QAAAC,EACC,UAAAC,GAEV8C,SAAAA,GA+PF,EAAa7H,OAAAsE,GAAAtE,OAAA2E,GAAA3E,OAAA4E,GAAA5E,OAAA6E,GAAA7E,OAAA8E,EAAA9E,OAAA+E,GAAA/E,OAAA6H,GAAA7H,OAAA8H,IAAAA,GAAA9H,EAAA,GAAA,EAAA,IAAA+H,GAAA/H,EAAA,GAAA,IAAAqC,GAAAhB,SAAArB,EAAA,GAAA,IAAA+D,GAAA/D,EAAA,GAAA,IAAAiE,IAAAjE,EAAA,GAAA,IAAA0D,GAAA1D,EAAA,GAAA,IAAAoC,GAAAf,SAAArB,EAAA,GAAA,IAAAqB,IACZ0G,GAAArE,GAAArC,IAAA0C,GAAAE,2BACEsG,GAAAA,QAAA,CACO7G,OACArC,KAAAA,GACA0C,OACAE,KAAAA,GACW,gBAAA7B,GAAMf,QACZ,UAAAgB,GAAUhB,QAAS,EAPjC,KASOrB,EAAA,GAAA,EAAAqC,GAAAhB,QAAArB,OAAA+D,EAAA/D,OAAAiE,GAAAjE,OAAA0D,EAAA1D,EAAA,GAAA,EAAAoC,GAAAf,QAAArB,OAAAqB,GAAArB,OAAA+H,IAAAA,GAAA/H,EAAA,GAAA,EAAA,IAAA0J,GAAA1J,EAAA,GAAA,IAAAgC,GAAAhC,SAAA6D,GACP6F,GAAA1H,GAAkB6B,IAAmBlB,OACpC2E,EAAAA,kBAAAA,IAACkD,OACO,KAAA3G,IAAmBlB,OAChB,QAAA,IAAA,CACPmB,EAAkBnB,MAAS,CAAC,EAG9B,iCAAA,MAAA,CACY,UAAA,0BAER,wBAAA,OAAOX,GAAmB,SAA1B,CAAAyI,OACcC,GAAAA,YAAY1I,EAAgB6B,CAAc,CAAA,EADxDlB,uBAKMX,GAAmB,WAAaA,EAAe6B,CAAqB,EAA3E,KACH,CAAA,CACF,EAjBD,KAkBO7D,OAAAgC,EAAAhC,OAAA6D,EAAA7D,OAAA0J,IAAAA,GAAA1J,EAAA,GAAA,EAAA,IAAA2J,EAAA,OAAA3J,EAAA,GAAA,IAAA8H,IAAA9H,SAAA+H,IAAA/H,EAAA,GAAA,IAAA0J,IApSVC,EAAArB,EAAAA,kBAAAA,KAAAqC,6BAAA,CACE7C,SAAAA,CAAAA,GAuQCC,GAUA2B,EAAAA,EAkBO,EACP1J,OAAA8H,GAAA9H,OAAA+H,GAAA/H,OAAA0J,GAAA1J,OAAA2J,GAAAA,EAAA3J,EAAA,GAAA,EArSH2J,CAqSG,CAtXA,SAAA6B,GAAAZ,EAAA,CAAA,OAsV8DjF,EAACkF,KAAM,CAtVrE,SAAAP,GAAAQ,EAAA,CAAA,OAsV6BnF,EAACoF,WAAc,OAAO,CAtVnD,SAAAV,GAAAmL,EAAA,CAAA,OA+S8CL,CAAO,CA/SrD,SAAAjN,GAAA6B,EAAA,CAAA,OAiS6CA,GAAA,CAAO,CAjSpD,SAAA9B,GAAA+C,EAAA,CAAA,OAsH+DrF,EAACkF,KAAM,CAtHtE,SAAAnD,GAAAuD,EAAA,CAAA,OAsH6BtF,EAACoF,WAAc,QAAQ,CAtHpD,SAAAtD,GAAAyD,EAAA,CAAA,OA6F6BvF,IAAM,CAAC,CA7FpC,SAAAqB,GAAAmE,EAAA,CAAA,OA4FkCxF,IAAM,CAAC,CA5FzC,SAAAO,GAAAoF,EAAA,CAAA,MAgE8C,GAAG3F,EAACE,EAAG,EAAE,CA0TvD,SAAA0F,GAAAxL,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,GAAA,EACL,CAAAC,KAAAA,EAAAC,WAAAC,EAAAC,YAAAC,GAAAC,UAAAC,GAAAC,aAAAC,GAAAK,MAAAA,GAAAC,OAAAA,GAAAL,UAAAA,EAAAC,WAAAA,EAAAQ,WAAAA,EAAAP,UAAAA,EAAAC,WAAAA,GAAAO,QAAAA,GAAAC,kBAAAA,GAAAL,OAAAA,EAAAC,OAAAA,GAAAC,WAAAA,GAAAI,UAAAA,GAAAC,SAAAA,GAAAE,mBAAAA,EAAAC,cAAAA,GAAAE,WAAAA,EAAAC,gBAAAA,EAAAiS,gBAAAA,EAAAhS,4BAAAA,EAAAC,eAAAA,EAAAC,aAAAA,EAAAC,WAAAA,EAAAC,UAAAA,EAAAC,OAAAA,EAAAC,WAAAA,EAAAC,QAAAA,EAAAC,YAAAA,EAAAC,UAAAA,EAAAC,aAAAA,EAAAC,QAAAA,CAAAA,EAqCI3C,EAnCFI,EAAAC,IAAAuC,OAAA,GAAAvC,EACAC,EAAAC,KAAAqC,OAAA,GAAArC,GACAC,EAAAC,KAAAmC,OAAA,GAAAnC,GACAC,GAAAC,KAAAiC,OAAA,GAAAjC,GAiCFkC,GAAeC,EAAAA,OAAO,IAAI,EAAE,IAAAC,GAAA9C,EAAA,CAAA,IAAAsC,EAAAS,QAAA/C,EAAA,CAAA,IAAAsC,EAAAU,MACOF,GAAA,CAAAE,KAC3BV,EAAOU,KAAKD,OACVT,EAAOS,MAAAA,EAChB/C,EAAA,CAAA,EAAAsC,EAAAS,OAAA/C,EAAA,CAAA,EAAAsC,EAAAU,KAAAhD,KAAA8C,IAAAA,GAAA9C,EAAA,CAAA,EAHD,MAAAiD,EAAiBC,GAAAA,UAAUN,GAAQE,EAGlC,EAIOK,GAAAlB,EAAe9B,EAAa,GAA5BA,EAA2C,IAAAiD,GAAApD,EAAA,CAAA,IAAAS,IAAAT,EAAA,CAAA,IAAAK,GAAAL,EAAA,CAAA,IAAAmD,IAAAnD,OAAAO,GAHpC6C,GAAA,CAAAC,IACR9C,EAAS+C,OACN7C,GAAY8C,KACdJ,GAA2CK,MAC1CnD,CAAAA,EACRL,KAAAS,GAAAT,KAAAK,EAAAL,KAAAmD,GAAAnD,KAAAO,EAAAP,KAAAoD,IAAAA,GAAApD,EAAA,CAAA,EALD,MAAAyD,EAAeL,GAOf,CAAAM,EAAAC,CAAA,EAA0CC,EAAAA,SAAcjB,MAAS,EAEjE,CAAAkB,EAAAC,CAAA,EAA4CF,EAAAA,SAAcjB,MAAS,EACnE,CAAAoB,EAAAC,CAAA,EAA4BJ,EAAAA,SAA6BjB,MAAS,EAClE,CAAAsB,GAAAC,EAAA,EAA4BN,EAAAA,SAA6BjB,MAAS,EAClEwB,GAAmBpD,GAAQ0C,EAAMF,KAAQE,EAAMD,MAC/CY,GAAoBpD,GAASyC,EAAMJ,IAAOI,EAAMH,OAAQ,IAAAe,EAAAC,EAAAC,GAAAC,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,EAAA,GAAAlF,EAAA,CAAA,IAAAsC,GAAAtC,EAAA,CAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAAW,GAAAX,EAAA,EAAA,IAAAY,GAAAZ,EAAA,EAAA,IAAAqC,GAAA8C,mBAAAnF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAK,MAAAzF,EAAA,EAAA,IAAAqC,GAAA+C,OAAAE,QAAAtF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAH,WAAArF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAF,QAAAtF,EAAA,EAAA,IAAAqC,GAAAmD,OAAAD,OAAAvF,EAAA,EAAA,IAAAuC,GAAAvC,EAAA,EAAA,IAAAyC,GAAAzC,EAAA,EAAA,IAAAE,GAAAF,EAAA,EAAA,IAAAgC,GAAAhC,EAAA,EAAA,IAAAoE,IAAApE,EAAA,EAAA,IAAAmE,IAAAnE,EAAA,EAAA,IAAAgB,IAAAhB,EAAA,EAAA,IAAAiD,GAAAjD,EAAA,EAAA,IAAA6B,GAAA7B,EAAA,EAAA,IAAAG,GAAAH,EAAA,EAAA,IAAAyD,EAAAH,QAAAtD,EAAA,EAAA,IAAAyD,EAAAF,MAAAvD,EAAA,EAAA,IAAAyD,EAAAD,OAAAxD,EAAA,EAAA,IAAAyD,EAAAJ,KAAArD,EAAA,EAAA,IAAA8B,GAAA9B,EAAA,EAAA,IAAAwB,IAAAxB,EAAA,EAAA,IAAA+T,GAAA/T,EAAA,EAAA,IAAA6D,GAAA7D,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAmC,GAAAnC,EAAA,EAAA,IAAA0B,GAAA1B,EAAA,EAAA,IAAAsB,IAAAtB,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,IAAAlB,EAAA,EAAA,IAAAuB,IAAAvB,EAAA,EAAA,IAAA+B,GAAA/B,EAAA,EAAA,IAAA2B,IAAA3B,EAAA,EAAA,IAAAoB,GAAApB,EAAA,EAAA,IAAAa,GAAAb,EAAA,EAAA,IAAAmB,IAAAnB,EAAA,EAAA,IAAAoC,GAAA+C,mBAAAnF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAK,MAAAzF,EAAA,EAAA,IAAAoC,GAAAgD,OAAAE,QAAAtF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAH,WAAArF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAF,QAAAtF,EAAA,EAAA,IAAAoC,GAAAoD,OAAAD,OAAAvF,EAAA,EAAA,IAAAiB,GAAAjB,EAAA,EAAA,IAAAc,IAAAd,EAAA,EAAA,IAAAkC,GAAAlC,EAAA,EAAA,IAAAe,GAAA,CAExD,MAAAyF,EAAUJ,GAAAA,OAAAA,EAAaC,OAAQ,CAAC,EAAG7E,EAAQ,CAAC,EAAC8E,MAAO,CAAClC,GAAa,CAAC,CAAC,EAACmC,KAAAA,EAAQ,IAAAb,GAAA1F,QAAA6B,GACjD6D,GAAAA,CAAAC,EAAAC,MAAW,CAAA,GAClCD,EAACE,GACAhE,EAAA,GAAgB8D,EAACG,KAAM,GAAvB,GAA+BF,EAAC,EAAA,GACpC5F,MAAA6B,EAAA7B,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAHF,MAAA+F,GAAmB7F,EAAI8F,IAAKN,EAG1B,EACFO,GAAiBpE,GAAckE,GAAUC,IAAKyF,EAAc,EAC5DtF,EAAUM,GAAAA,KAAAA,EAAWJ,OACXJ,EAAQ,EAACK,MACV,CACL,EACAyN,EACIrN,KAAI2L,IAAKlO,GAAY4P,EAAkB9N,GAAQW,MAGpC,EAFX9E,EACE4E,KAAIC,IAAKxC,GAAYrC,EAAkBmE,GAAQW,MACtC,EAFXzC,EAEY,CACjB,EAAC0C,aACYjG,CAAU,EAC1B8K,GAAelF,EAACW,MAAOhF,CAAS,EAG3BmC,EAAA8C,GAAAA,OAAMC,IACE1C,GAAA,GAAG5D,EAAK,KACP6D,GAAA,GAAG5D,EAAM,KACR6D,GAAA,OAAO9D,EAAK,IAAIC,EAAM,GACrB8D,GAAA,MACLlC,EAAAA,GAESsC,EAAA,aAAazB,EAAMF,IAAK,IAAIE,EAAMJ,GAAI,IAE5C,MAAAuE,GAAApB,EAAE,CAAC,EACHqB,GAAArB,EAAE,CAAC,EAAC,IAAAsB,GAAA9H,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,IAAAlB,QAAAiB,GAGD6G,GAAAyB,GAAAA,yBAAyB,EAAG7G,EAASF,EAAWtB,GAAQD,CAAM,EAACjB,MAAA0C,EAAA1C,MAAAwC,EAAAxC,MAAAkB,GAAAlB,MAAAiB,EAAAjB,MAAA8H,IAAAA,GAAA9H,EAAA,EAAA,EAQ9D,MAAA+H,GAAA1F,GAAU+C,OAAaK,KACtBiE,GAAArH,GAAUmD,OAAeF,OAAA,IAAAqE,GAAA3J,EAAA,EAAA,IAAA+H,IAAA/H,QAAA0J,IAFtBC,GAAA,CAAAlE,KACJsC,GAAuBjC,MACtB4D,EAAAA,EACR1J,MAAA+H,GAAA/H,MAAA0J,GAAA1J,MAAA2J,IAAAA,GAAA3J,EAAA,EAAA,EACe,MAAA4J,GAAAxH,GAAMgD,OAAaK,KAASoE,GAAAzH,GAAMoD,OAAeF,OAAA,IAAAqG,GAAA3L,EAAA,EAAA,IAAA4J,IAAA5J,QAAA6J,IAAzD8B,GAAA,CAAAlG,KAAQmE,GAAmB9D,MAAS+D,EAAAA,EAAuB7J,MAAA4J,GAAA5J,MAAA6J,GAAA7J,MAAA2L,IAAAA,GAAA3L,EAAA,EAAA,EAhBrEuE,2BAACuF,QAAA,CACK,GAAAlC,GACA,GAAAC,GACA,GAAA,EAAI1H,EACJ,GAAAgE,GAAaV,EAAMD,MAChB,MAAAsE,GACG,SAAA,CAAA3B,EACL,EAAIhG,EAAUqG,EACdA,EAAE,CAAC,EAACqF,GACH,EAACC,GACD,EAAA,EAEM,WAAAnC,GAIJ,OAAAgC,EAAAA,CAA2D,EAEpEnH,GAAA3D,EACCyG,EAAAA,kBAAAA,IAACyE,GAAAA,mBAAA,CACS,OAAAL,GAAMlE,OAAQwE,EAAY,EAC/B,EAAAN,GAAMlE,OAAQyE,EAAY,EAACjG,IAAK2B,GAAKnB,EAAEb,CAAC,CAAC,EACxC,GAAA,EAAIxF,EACJ,GAAAgE,GAAaV,EAAMD,MACf,OAAA,CAAA6B,UACKjD,GAAMoD,OAAkBH,UAAAC,OAC3BlD,GAAMoD,OAAeF,MAAAA,EAEnB,WAAA,CAAAD,UACChD,GAAUmD,OAAkBH,UAAAC,OAC/BjD,GAAUmD,OAAeF,MAAAA,EAE3BrE,OAAAA,EACAC,OAAAA,GACE,UAAA,YACV,cAAA,GACS,SAAA,WACEsB,UAAAA,CAAAA,CAAS,EAnBvB,KAuBI,MAAAoJ,EAAA,EAAIzL,EAAa,GACjB+L,EAAA9H,GAAc,EACV+H,EAAA/J,GAAMoD,OAAcD,MAChB6G,EAAA/J,GAAUmD,OAAcD,MAAAvF,EAAA,EAAA,IAAAiC,GAAAjC,EAAA,EAAA,IAAA4L,GAAA5L,EAAA,EAAA,IAAAkM,GAAAlM,EAAA,EAAA,IAAAmM,GAAAnM,QAAAoM,GAJrC3H,0BAACuD,GAAAA,UAAA,CACI,EAAA4D,EACA,EAAAM,EACI,MAAAC,EACI,UAAAC,EACLnK,KAAAA,EACN,SAAA,GAAQ,EACRjC,MAAAiC,EAAAjC,MAAA4L,EAAA5L,MAAAkM,EAAAlM,MAAAmM,EAAAnM,MAAAoM,EAAApM,MAAAyE,GAAAA,EAAAzE,EAAA,EAAA,EAAAA,QAAAyC,GACDiC,EAAAjC,EAAY+E,OAAQ8E,EAA4B,EAACtG,IAAKuG,EAAY,EAACvM,MAAAyC,EAAAzC,MAAA0E,GAAAA,EAAA1E,EAAA,EAAA,EACnEqE,EAAA8D,GAAAA,gBACEnD,GAAAe,GAAUC,IAAKoC,GACbC,GAAAA,uBAAuBlC,EAAER,EAACE,EAAG,CAAC,EAA/B,8BACEuB,UAAA,EAAA,CACY,UAAA,6CAEA,SAAA,CAAAmB,QACC,CAAApC,EAAKA,EAAE,GAAGR,EAACE,EAAG,EAAE,EAACW,EAAK,CAAA,EAAGgC,YACrB,CAAArC,EACRA,EAAE,GAAGR,EAACE,EAAG,EAAE,EAACW,EACZ,EAACiC,WACQ,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEU,WAAA,CAAAA,SAAYpG,EAAOoG,QAAAA,EACvB,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAA0F,QAAW,EAACF,WAAc,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAE5D/C,SAAAA,CAAAA,EAACoB,KAAKf,IAAK,CAAA4C,GAAAC,IACVP,EAAAA,kBAAAA,KAAAlB,UAAA,EAAA,CAEW,QAAAzF,GAAiBhB,EAAUkI,CAAC,IAAMlH,GAAjB,EAAA,GAAjB,EACK,aAAAmH,IAAA,CACZnF,EAAiB,CAAA,GAAKgC,EAACoD,UAAaF,CAAAA,CAAG,EACvC3E,GAAU4E,GAAKE,OAAQ,EACvBhF,EAAU8E,GAAKG,OAAQ,EACvB3H,KAAoB,CAAA,GAAKqE,EAACoD,UAAaF,CAAAA,CAAG,CAAC,EAEhC,YAAAK,IAAA,CACXvF,EAAiB,CAAA,GAAKgC,EAACoD,UAAaF,CAAAA,CAAG,EACvC3E,GAAU4E,GAAKE,OAAQ,EACvBhF,EAAU8E,GAAKG,OAAQ,CAAC,EAEZ,aAAA,IAAA,CACZtF,EAAiBhB,MAAS,EAC1BqB,EAAUrB,MAAS,EACnBuB,GAAUvB,MAAS,EACnBrB,KAAoBqB,MAAS,CAAC,EAEvB,QAAA,IAAA,EACHjB,GAAAM,KAEAmH,GAAAA,QAAQtF,EAAgB,CAAA,GAAK8B,EAACoD,UAAaF,CAAAA,CACjB,GAD1B9G,GAGA+B,EAAkBnB,MAAS,EAC3BjB,IAAqBiB,MAAS,IAE9BmB,EAAkB,CAAA,GAAK6B,EAACoD,UAAaF,CAAAA,CAAG,EACpCnH,GAAoBA,EAAmB,CAAA,GAAKiE,EAACoD,UAAaF,CAAAA,CAAG,GAEpE,EAGH,SAAA,CAAAvB,wBAAAF,GAAAA,OAAA,KAAA,CACK,IACI,MAAAjB,EAACc,UAAAA,EACE,SAAA,CAAAsB,QACC,CAAAvH,OACC,EAACoI,KACHzI,EAAUkI,CAAC,EAACrC,EACfA,EAAE,CAAC,CAAA,EACPgC,YACY,CAAAxH,OACH0F,KAAI8F,IACVhG,EAAEiN,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAA2N,GAAAC,IAAgBA,GAAKvM,GAALsM,EAAiB,CAAC,CAAC,EACrD3O,EAAEiN,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAA8N,GAAAC,IAAgBH,EAAIvM,GAAJyM,EAAgB,CAAC,CAAC,CAC1D,EAAC9O,EACEA,EAAEiN,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAAgO,GAAAC,IAAgBL,GAAKvM,GAAL2M,EAAiB,CAAC,CAAC,EAACpM,KACrDzI,EAAUkI,CAAC,EAACJ,WACN,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAAjC,OACI,EAACwF,EACNA,EAAE,CAAC,EAACiC,WACK,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,IAG5CvH,GACCmG,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACK,EAAAjB,EAACc,UAAAA,EAAe,EACZ,MAAA,CAAAoC,WACO,SAAQ,GAChBjH,GAAM+C,mBAAN,CAAA,CAA8B,EAEzB,UAAAmE,EAAAA,GAAG,sBAAuBjH,GAAU8C,iBAAmB,EAC/D,GAAA,SACO,SAAA,CAAAoD,QACC,CAAA/B,EACJA,EAAE,CAAC,EAACmC,QACE,EAACS,KACJiM,GAAAA,2BAA2B1U,EAAUkI,CAAC,CAAC,CAAA,EAC9CL,YACY,CAAAhC,EAETA,EAAEiN,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAAkO,GAAAC,IAAgBP,GAAKvM,GAAL6M,EAAiB,CAAC,CAAC,EACvDhP,KAAI8F,IACFhG,EAAEiN,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAAoO,GAAAC,IAAgBT,GAAKvM,GAAL+M,EAAiB,CAAC,CAAC,EACrDpP,EAAEiN,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAAsO,GAAAC,IAAgBX,EAAIvM,GAAJiN,EAAgB,CAAC,CAAC,CAC1D,EACE,EAACnN,QAEHC,IACAlC,KAAI8F,IACFhG,EAAEiN,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAAwO,GAAAC,IAAgBb,GAAKvM,GAALmN,EAAiB,CAAC,CAAC,EACrDxP,EAAEiN,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ,CAAA0O,GAAAC,IAAgBf,EAAIvM,GAAJqN,EAAgB,CAAC,CAAC,CAC1D,EAAI,GAJJ,EAAA,EAMK9M,KACDiM,GAAAA,2BAA2B1U,EAAUkI,CAAC,CAAC,EAACJ,WAClC,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEM,QAAA,UACC,QAAAzF,EAAA,cAAA,UACH,KAAA,CAAA0F,QAAW,EAACF,WAAc,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAE5Da,qCAAyBX,GAAIlG,EAASF,EAAWtB,GAAQD,CAAM,EAClE,EAxCD,IAAA,GA7DI,GAAG0E,EAACG,KAAM,IAAIvD,EAAYsG,CAAC,GAAbA,CAAmB,EAuGxC,CACD,EACAzH,0BACEqL,eAAA,CAEG,MAAA,GAAG9G,EAACG,KAAM,GAAEc,OAAU9F,GAAtB,GACO6E,EAACG,KAAM,GADd,GAEO,GAAGH,EAACG,KAAM,GAAE2D,UAAW,EAAG3I,EAAU,CAAC,MAE3C,EAAA0F,EAAE,CAAC,EAAI,EACP,EAAA,EACI,MAAAL,EAACc,UAAAA,EACA,OAAAxD,EAAMH,OACP,MAAAlB,GAAMgD,OAAeE,OACjB,UAAAjD,GAAU+C,OAAeE,OAC1B,UAAA,MACDhD,QAAAA,EACCW,SAAAA,CAAAA,CAAQ,EAfrB,KAkBA9B,GACCmG,EAAAA,kBAAAA,IAAAF,GAAAA,OAAA,KAAA,CACS,MAAA,CAAAiC,WACO,SAAQ,GAChBjH,GAAM+C,mBAAN,CAAA,CAA8B,EAEjC,EAAAgB,EAACc,YAAe,EACf,GAAA,IACO,UAAAqC,EAAAA,GACT,gCACCpH,EAAD,UAAA,2DAGAG,GAAU8C,iBACZ,EACU,SAAA,CAAAoD,QACC,CAAA/B,EACJA,EAAE,CAAC,EAACmC,QACE,EAAC,GACNzG,GAAA,CAAAkH,KAAsBlH,CAAAA,CAAW,EACtCsG,YACY,CAAAhC,EACRA,EAAEiN,OAAI9N,EAACoB,KAAKf,IAAK2G,EAAa,CAAC,CAAC,EAAChE,QAC3B,EAAC,GACNzG,GAAA,CAAAkH,KAAsBlH,CAAAA,EAAYuG,WAC1B,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,CAC3C,EAEI,KAAA,CAAAC,QACK,EAACF,WACE,CAAAC,SAAYpG,EAAOoG,QAAAA,CAAU,EAEnC,QAAA,UACC,QAAAzF,EAAA,cAAA,UAERsG,qCACCkK,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQoF,EAAkB,CAAC,EACrClK,EACAF,EACAtB,GACAD,CACF,EACF,EA1CD,IAAA,CAAA,EA3II0E,EAACG,KAuLR,CAEJ,EACCb,EAAA1D,GAAA+F,EAAAA,kBAAAA,IAAAqD,EAAAA,kBAAAA,SAAA,CAEIpJ,SAAAA,GAASyE,IAAK,CAAAoO,EAAA/I,KACb/D,EAAAA,kBAAAA,IAACoF,GAAAA,SAAA,CAEO,KAAA9D,EAAEsB,KACD,MAAAtB,EAAEuB,MACN,EAAA3D,EAAEoC,EAAEwB,KAAgB,EACnB,GAAA,EAAIjK,EACJ,GAAAgE,GAAaV,EAAMD,MACX,WAAAoF,EAAEvG,WACN,OAAAuG,EAAExG,OACDE,QAAAA,EACCW,SAAAA,GATL2C,EASa,CAErB,EAAC,EAfL,KAiBO5F,KAAAsC,EAAAtC,KAAAiC,EAAAjC,MAAAW,EAAAX,MAAAY,EAAAZ,EAAA,EAAA,EAAAqC,GAAA8C,kBAAAnF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAK,KAAAzF,EAAA,EAAA,EAAAqC,GAAA+C,OAAAE,OAAAtF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAH,UAAArF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAF,OAAAtF,EAAA,EAAA,EAAAqC,GAAAmD,OAAAD,MAAAvF,MAAAuC,EAAAvC,MAAAyC,EAAAzC,MAAAE,EAAAF,MAAAgC,EAAAhC,MAAAoE,GAAApE,MAAAmE,GAAAnE,MAAAgB,GAAAhB,MAAAiD,EAAAjD,MAAA6B,EAAA7B,MAAAG,EAAAH,EAAA,EAAA,EAAAyD,EAAAH,OAAAtD,EAAA,EAAA,EAAAyD,EAAAF,KAAAvD,EAAA,EAAA,EAAAyD,EAAAD,MAAAxD,EAAA,EAAA,EAAAyD,EAAAJ,IAAArD,MAAA8B,EAAA9B,MAAAwB,GAAAxB,MAAA+T,EAAA/T,MAAA6D,EAAA7D,MAAA0C,EAAA1C,MAAAmC,EAAAnC,MAAA0B,EAAA1B,MAAAsB,GAAAtB,MAAAwC,EAAAxC,MAAAkB,GAAAlB,MAAAuB,GAAAvB,MAAA+B,EAAA/B,MAAA2B,GAAA3B,MAAAoB,EAAApB,MAAAa,EAAAb,MAAAmB,GAAAnB,EAAA,EAAA,EAAAoC,GAAA+C,kBAAAnF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAK,KAAAzF,EAAA,EAAA,EAAAoC,GAAAgD,OAAAE,OAAAtF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAH,UAAArF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAF,OAAAtF,EAAA,EAAA,EAAAoC,GAAAoD,OAAAD,MAAAvF,MAAAiB,EAAAjB,MAAAc,GAAAd,MAAAkC,EAAAlC,MAAAe,GAAAf,MAAAqE,EAAArE,MAAAsE,EAAAtE,MAAAuE,GAAAvE,MAAAwE,GAAAxE,MAAAyE,EAAAzE,MAAA0E,EAAA1E,MAAA2E,GAAA3E,MAAA4E,GAAA5E,MAAA6E,GAAA7E,MAAA8E,GAAA9E,MAAA+E,EAAA/E,MAAAgF,GAAAhF,MAAAiF,EAAAjF,MAAAkF,CAAA,MAAAb,EAAArE,EAAA,EAAA,EAAAsE,EAAAtE,EAAA,EAAA,EAAAuE,GAAAvE,EAAA,EAAA,EAAAwE,GAAAxE,EAAA,EAAA,EAAAyE,EAAAzE,EAAA,EAAA,EAAA0E,EAAA1E,EAAA,EAAA,EAAA2E,GAAA3E,EAAA,EAAA,EAAA4E,GAAA5E,EAAA,EAAA,EAAA6E,GAAA7E,EAAA,EAAA,EAAA8E,GAAA9E,EAAA,EAAA,EAAA+E,EAAA/E,EAAA,EAAA,EAAAgF,GAAAhF,EAAA,EAAA,EAAAiF,EAAAjF,EAAA,EAAA,EAAAkF,EAAAlF,EAAA,EAAA,EAAA,IAAA0F,GAAA1F,EAAA,EAAA,IAAAqE,GAAArE,QAAAgF,IAAAhF,EAAA,EAAA,IAAAiF,GAhNVS,4BAACrB,EAAA,CACEW,SAAAA,CAAAA,GA8LAC,CAAAA,EAkBH,EAAkBjF,MAAAqE,EAAArE,MAAAgF,GAAAhF,MAAAiF,EAAAjF,MAAA0F,IAAAA,GAAA1F,EAAA,EAAA,EAAA,IAAA4H,GAAA5H,QAAAyC,GACjBmF,GAAAnF,EAAY+E,OAAQ8K,EAA2B,EAACtM,IAAK8M,EAAY,EAAC9S,MAAAyC,EAAAzC,MAAA4H,IAAAA,GAAA5H,EAAA,EAAA,EAAA,IAAA6H,GAAA7H,EAAA,EAAA,IAAAuE,IAAAvE,EAAA,GAAA,IAAAwE,IAAAxE,EAAA,GAAA,IAAAyE,GAAAzE,SAAA0E,GAAA1E,EAAA,GAAA,IAAA0F,IAAA1F,EAAA,GAAA,IAAA4H,IAAA5H,EAAA,GAAA,IAAAkF,GApQrE2C,GAAAS,EAAAA,kBAAAA,KAAA,IAAA,CAAc,UAAApD,EACZX,SAAAA,CAAAA,GAkBCC,GAsBDC,EAQCC,EACDgB,GAkNCkC,EAAAA,EACH,EAAI5H,MAAAuE,GAAAvE,OAAAwE,GAAAxE,OAAAyE,EAAAzE,OAAA0E,EAAA1E,OAAA0F,GAAA1F,OAAA4H,GAAA5H,OAAAkF,EAAAlF,OAAA6H,IAAAA,GAAA7H,EAAA,GAAA,EAAA,IAAA8H,GAAA9H,EAAA,GAAA,IAAAsE,GAAAtE,EAAA,GAAA,IAAA2E,IAAA3E,EAAA,GAAA,IAAA4E,IAAA5E,SAAA6E,IAAA7E,EAAA,GAAA,IAAA8E,IAAA9E,EAAA,GAAA,IAAA+E,GAAA/E,EAAA,GAAA,IAAA6H,IA5QNC,2BAACxD,EAAA,CACQ,MAAAK,GACC,OAAAC,GACC,QAAAC,GACC,UAAAC,GACLlC,IAAAA,EAELiF,SAAAA,GAsQF,EAAa7H,OAAAsE,EAAAtE,OAAA2E,GAAA3E,OAAA4E,GAAA5E,OAAA6E,GAAA7E,OAAA8E,GAAA9E,OAAA+E,EAAA/E,OAAA6H,GAAA7H,OAAA8H,IAAAA,GAAA9H,EAAA,GAAA,EAAA,IAAA+H,GAAA/H,EAAA,GAAA,IAAAqC,GAAAhB,SAAArB,EAAA,GAAA,IAAA+D,GAAA/D,EAAA,GAAA,IAAAiE,IAAAjE,EAAA,GAAA,IAAA0D,GAAA1D,EAAA,GAAA,IAAAoC,GAAAf,SAAArB,EAAA,GAAA,IAAAqB,IACZ0G,GAAArE,GAAArC,IAAA0C,GAAAE,2BACEsG,GAAAA,QAAA,CACO7G,OACArC,KAAAA,GACA0C,OACAE,KAAAA,GACW,gBAAA7B,GAAMf,QACZ,UAAAgB,GAAUhB,QAAS,EAPjC,KASOrB,EAAA,GAAA,EAAAqC,GAAAhB,QAAArB,OAAA+D,EAAA/D,OAAAiE,GAAAjE,OAAA0D,EAAA1D,EAAA,GAAA,EAAAoC,GAAAf,QAAArB,OAAAqB,GAAArB,OAAA+H,IAAAA,GAAA/H,EAAA,GAAA,EAAA,IAAA0J,GAAA1J,EAAA,GAAA,IAAAgC,GAAAhC,SAAA6D,GACP6F,GAAA1H,GAAkB6B,IAAmBlB,OACpC2E,EAAAA,kBAAAA,IAACkD,OACO,KAAA3G,IAAmBlB,OAChB,QAAA,IAAA,CACPmB,EAAkBnB,MAAS,CAAC,EAG9B,iCAAA,MAAA,CACY,UAAA,0BAER,wBAAA,OAAOX,GAAmB,SAA1B,CAAAyI,OACcC,GAAAA,YAAY1I,EAAgB6B,CAAc,CAAA,EADxDlB,uBAKMX,GAAmB,WAAaA,EAAe6B,CAAqB,EAA3E,KACH,CAAA,CACF,EAjBD,KAkBO7D,OAAAgC,EAAAhC,OAAA6D,EAAA7D,OAAA0J,IAAAA,GAAA1J,EAAA,GAAA,EAAA,IAAA2J,GAAA,OAAA3J,EAAA,GAAA,IAAA8H,IAAA9H,SAAA+H,IAAA/H,EAAA,GAAA,IAAA0J,IA3SVC,GAAArB,EAAAA,kBAAAA,KAAAqC,6BAAA,CACE7C,SAAAA,CAAAA,GA8QCC,GAUA2B,EAAAA,EAkBO,EACP1J,OAAA8H,GAAA9H,OAAA+H,GAAA/H,OAAA0J,GAAA1J,OAAA2J,IAAAA,GAAA3J,EAAA,GAAA,EA5SH2J,EA4SG,CA1XA,SAAAmJ,GAAAlI,EAAA,CAAA,OA0V8DjF,EAACkF,KAAM,CA1VrE,SAAAyH,GAAAxH,EAAA,CAAA,OA0V6BnF,EAACoF,WAAc,OAAO,CA1VnD,SAAA6B,GAAAwJ,EAAA,CAAA,OA4T8CjB,CAAO,CA5TrD,SAAAxI,GAAA5C,EAAA,CAAA,OA8S6CA,GAAA,CAAO,CA9SpD,SAAAwC,GAAAvB,EAAA,CAAA,OAuI+DrF,EAACkF,KAAM,CAvItE,SAAAyB,GAAArB,EAAA,CAAA,OAuI6BtF,EAACoF,WAAc,QAAQ,CAvIpD,SAAAkB,GAAAf,EAAA,CAAA,OA4G6BvF,IAAM,CAAC,CA5GpC,SAAAqG,GAAAb,EAAA,CAAA,OA2GkCxF,IAAM,CAAC,CA3GzC,SAAA8F,GAAAH,EAAA,CAAA,MAgE8C,GAAG3F,EAACE,EAAG,EAAE,CClavD,SAAAwQ,GAAAtW,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,EAAA,EACL,CAAAC,KAAAA,EAAA4M,WAAAA,EAAAC,OAAA3M,GAAA4M,QAAAA,GAAAC,iBAAAA,GAAArM,WAAAN,GAAAO,UAAAL,GAAAM,WAAAJ,EAAAM,OAAAA,EAAAD,MAAAA,EAAAmM,SAAAA,EAAA3K,YAAAA,GAAA4K,iBAAAA,GAAAE,QAAAA,GAAAC,gBAAAxK,EAAAvC,UAAAA,GAAAE,aAAAA,GAAAN,WAAAA,GAAAE,YAAAA,GAAAgB,QAAAA,EAAAC,kBAAAA,GAAAL,OAAAkC,EAAAjC,OAAAkC,EAAAhC,WAAA4D,EAAAuI,eAAAA,EAAApM,WAAA8D,EAAA1D,UAAAA,EAAAiM,QAAAA,EAAAhM,SAAAA,EAAAE,mBAAAA,EAAA+L,cAAAvI,EAAAwI,aAAAnJ,EAAAoJ,SAAAnJ,EAAA3C,WAAAA,EAAA+L,UAAAnJ,EAAAoJ,MAAAnJ,EAAA5C,gBAAAA,EAAAmM,cAAAA,EAAA0G,gBAAAA,EAAAZ,gBAAAA,GAAA3G,eAAAzI,GAAAmJ,UAAAA,GAAA/L,4BAAA6C,EAAA5C,eAAAA,GAAAC,aAAAA,GAAAE,UAAA0C,EAAA3C,WAAAA,EAAAE,OAAAA,EAAAC,WAAAA,EAAA0L,SAAAjJ,EAAAxC,QAAAyC,EAAAvC,UAAAkD,EAAAjD,aAAAmF,GAAAoG,SAAAnG,GAAAnF,QAAAoF,GAAAoG,SAAAA,GAAAC,YAAApG,CAAAA,EA0DIhI,EAvDFgN,EAAA3M,KAAAuC,OAASyL,GAAAA,OAAMC,MAAMC,kBAAkBvB,OAAvC3M,GAGAQ,GAAAN,KAAAqC,OAAA,IAAArC,GACAO,GAAAL,KAAAmC,OAAA,GAAAnC,GACAM,EAAAJ,IAAAiC,OAAA,IAAAjC,EAOA4M,EAAAxK,IAAAH,OAAA,GAAAG,EAOA7B,GAAAkC,IAAAR,OAAA,GAAAQ,EACAjC,GAAAkC,IAAAT,OAAA,GAAAS,EACAhC,GAAA4D,IAAArC,OAAA,GAAAqC,EAEA7D,GAAA8D,IAAAtC,OAAA,GAAAsC,EAKAwI,EAAAvI,IAAAvC,OAAA,GAAAuC,EACAwI,GAAAnJ,IAAA5B,OAAA,GAAA4B,EACAoJ,EAAAnJ,IAAA7B,OAAA,KAAA6B,EAEAoJ,EAAAnJ,IAAA9B,OAAA,EAAA8B,EACAoJ,GAAAnJ,IAAA/B,OAAA,QAAA+B,EAKA0I,GAAAzI,KAAAhC,OAAA,GAAAgC,GAEA5C,GAAA6C,IAAAjC,OAAA,GAAAiC,EAGAzC,GAAA0C,IAAAlC,OAAA,EAAAkC,EAIAkJ,GAAAjJ,IAAAnC,OAAA,GAAAmC,EACAxC,GAAAyC,IAAApC,OAAA,GAAAoC,EACAvC,GAAAkD,IAAA/C,OAAA,EAAA+C,EAAa,IAAAgE,EAAA1J,OAAA4H,IACb8B,EAAA9B,KAAAjF,OAAA,CAAA,EAAAiF,GAAiB5H,KAAA4H,GAAA5H,KAAA0J,GAAAA,EAAA1J,EAAA,CAAA,EAAjB,MAAAyC,GAAAiH,EACAsE,GAAAnG,KAAAlF,OAAA,CAAA4L,QAAsB,GAAKC,SAAY,GAAKC,mBAAsB,EAAA,EAAlE5G,GACAnF,GAAAoF,KAAAnF,OAAA,KAAAmF,GAKF4G,IAHE3G,IAAApF,OAAA,WAAAoF,KAG2B,aAAhBjI,GAAAyL,GACb,CAAAoD,GAAAC,EAAA,EAAgChL,EAAAA,SAAS,CAAC,EAC1C,CAAAiL,GAAAC,EAAA,EAAkClL,EAAAA,SAAS,CAAC,EAC5C,CAAAmL,GAAAC,EAAA,EAAwBpL,EAAAA,SAASoK,GAAQQ,QAAS,EAClDS,GAAwBC,QACtBC,GAAAA,OAAOjP,EAAM,OAAQ,EAAI,EAAC8F,IAAKL,IAC7ByJ,GAAAA,MAAM,GAAGzJ,EAAC,GAAIqI,GAAQqB,YAAR,OAA+B,IAAIC,IAAM,EAACC,SAC1D,EACArJ,EACF,EACA,CAAAsJ,GAAAC,EAAA,EAA0B7L,WAASoK,GAAQQ,SAAR,EAAwBS,GAAerI,OAAU,CAAC,EACrF,CAAAjF,EAAA+N,CAAA,EAA0C9L,EAAAA,SAA6BjB,MAAS,EAEhFgN,EAAiB9M,EAAAA,OAAuB,IAAI,EAC5C+M,EAAuB/M,EAAAA,OAAuB,IAAI,EAAE,IAAA8G,EAAAC,GAAA5J,EAAA,CAAA,IAAA6P,OAAAC,IAAA,2BAAA,GAE1CnG,EAAAA,IAAA,CACR,MAAAoG,GAAuB,IAAIC,eAAeC,IAAA,CACxCrB,GAAYqB,GAAO,CAAA,EAAGC,OAAOC,aAAjB,GAAoC,EAChDrB,GAAamB,GAAO,CAAA,EAAGC,OAAOE,cAAjB,GAAqC,CAAC,CACpD,EACD,OAAIT,EAAQU,SACVN,GAAcO,QAASX,EAAQU,OAAQ,EAElC,IAAMN,GAAcQ,WAAAA,CAAa,EACvC3G,GAAA,CAAA,EAAE5J,KAAA2J,EAAA3J,KAAA4J,KAAAD,EAAA3J,EAAA,CAAA,EAAA4J,GAAA5J,EAAA,CAAA,GATLwQ,EAAAA,UAAU7G,EASPC,EAAE,EAEL4G,EAAAA,UAAU,IAAA,CACR,MAAAC,GAAiBC,YACf,IAAA,CACEjB,OAAe7J,GAAIqJ,GAAerI,OAAU,EAAIhB,GAAI,EAArC,CAA2C,CAAC,GAE5DoI,GAAQ2C,OAAR,GAAuB,GAC1B,EACA,OAAK5B,IAAM6B,cAAcH,EAAQ,EAC1B,IAAMG,cAAcH,EAAQ,CAAC,EACnC,CAACxB,GAAiBF,GAAMf,GAAQ2C,KAAM,CAAC,EAE1C,MAAAE,EAAgBC,kBACd7B,GACAO,GACAxB,GAAQS,mBACRT,GAAQqB,YAAR,MACF,EAGGhL,GAAA0M,GAAAA,eACYlH,EAAAxH,GAAU2O,eACdrF,GAAAvJ,GAAM4O,eAAgB,IAAApF,GAAA5L,OAAAqC,GAAA4O,aAAAjR,OAAAqC,GAAAkD,OAAAvF,OAAAE,GAAAF,EAAA,CAAA,IAAA0N,IAAA1N,EAAA,CAAA,IAAAiN,IAAAjN,EAAA,CAAA,IAAAyN,GAAAzN,QAAA8M,GAAA9M,EAAA,EAAA,IAAAoC,GAAA6O,aAAAjR,EAAA,EAAA,IAAAoC,GAAAmD,OAAAvF,EAAA,EAAA,IAAAe,GAa5B6K,GAAAkB,GAAAG,IAAAQ,GAAAC,GACCpG,wBAAC4J,GAAAA,aACS,OAAA,CAAA3L,MACCnD,GAAMmD,MAAO0L,YACP7O,GAAM6O,WAAAA,EAET,WAAA,CAAA1L,MACHlD,GAAUkD,MAAO0L,YACX5O,GAAU4O,WAAAA,EAEbnE,WAAAA,EACMG,iBAAAA,GACXlM,MAAAA,EACQ,cAAA0M,EAAAmC,EAAAjN,OAEb,aAAA+K,GACIxN,EAAI8F,IAAKgB,EAAW,EAACQ,OAAQC,EAAoB,EAACb,OAAU,EAC1D1G,EAAI8F,IAAK0B,EAAW,EAACF,OAAQS,EACG,EAAhC/H,EAAIsH,OAAQU,EAAoB,EAHtC,KAIQ,EAnBb,KAsBOlI,EAAA,CAAA,EAAAqC,GAAA4O,YAAAjR,EAAA,CAAA,EAAAqC,GAAAkD,MAAAvF,KAAAE,EAAAF,KAAA0N,GAAA1N,KAAAiN,GAAAjN,KAAAyN,EAAAzN,MAAA8M,EAAA9M,EAAA,EAAA,EAAAoC,GAAA6O,YAAAjR,EAAA,EAAA,EAAAoC,GAAAmD,MAAAvF,MAAAe,EAAAf,MAAA4L,IAAAA,GAAA5L,EAAA,EAAA,EACP,MAAAkM,GAAA8B,GAAQO,SAAYU,GAAerI,OAAU,GAA7CiK,EACCvI,EAAAA,kBAAAA,KAAA,MAAA,CAAe,UAAA,0BAA8B,IAAA,MAC3C,SAAA,CAAAhB,EAAAA,kBAAAA,IAAA,SAAA,CACO,KAAA,SACI,QAAA,IAAA,CACP0H,GAAQ,CAACD,EAAI,CAAC,EAEN,UAAA,6CACE,aAAAA,GAAA,2BAAA,0BAEXA,SAAAA,GAAOzH,EAAAA,kBAAAA,IAAC6J,GAAAA,MAAA,EAAK,EAAM7J,EAAAA,kBAAAA,IAAC8J,GAAAA,SACvB,EACA9J,EAAAA,kBAAAA,IAAC+J,GAAAA,GAAA,CACM,IAAApC,GAAe,CAAA,EACf,IAAAA,GAAgBA,GAAerI,OAAU,CAAC,EACxCiK,MAAAA,EACD,KAAA,KACQ,aAAA5B,GAAgBA,GAAerI,OAAU,CAAC,EACjD,MAAAqI,GAAgBO,EAAK,EACV,iBAAA8B,IAAA,CAChB7B,GAASR,GAAesC,QAASD,EAAmB,CAAC,CAAC,EAE9C,SAAAE,IAAA,CACR/B,GAASR,GAAesC,QAASD,EAAmB,CAAC,CAAC,EAE7C,aAAA,6DAAA,IAEf,EA3BD,KA6BcnF,GAAA,iDACZC,GAAAlM,EAAI0G,SAAY,EACfU,EAAAA,kBAAAA,IAACmK,cAAA,CAAA,CAAU,EADZnJ,EAAAA,kBAAAA,KAAAqC,EAAAA,kBAAAA,SAAA,CAIIyC,SAAAA,CAAAA,GACC9F,EAAAA,kBAAAA,IAACoK,GAAAA,yBAAA,CACQ3Q,MAAAA,EACMwB,YAAAA,GACLwK,OAAAA,EACUI,iBAAAA,GACAuC,iBAAAA,EACL,YAAA,GACF,UAAArN,GAAUsP,WAAAA,CAAa,EARrC,KAWDrK,EAAAA,kBAAAA,IAACsK,GAAAA,UAAA,CAAejC,IAAAA,EACbhB,SAAAA,IAAAE,GACCvH,EAAAA,kBAAAA,IAACoH,GAAA,CAEG,KAAAT,IAAkBtL,OACdsL,IAAkB,QAChB4D,GAAAA,QACEC,GAAAA,qCACE5R,EACA8N,GAAQqB,YAAR,MACF,EAAC7H,OACSwD,IACNgD,GAAQO,QACJ5I,GAACoM,OACDC,GAAAA,OACE,IAAI1C,KAAKL,GAAgBO,EAAK,CAAC,EAC/BxB,GAAQqB,YAAR,MACF,EALJrE,EAOF,EAACxD,OACOY,IAAM2F,GAAA,CAAYpI,GAACoB,KAAKkL,MAAO5H,EAAoB,EAA7CjC,EAAmD,EACnEoD,GACA,CAAC0C,IAAA,KAAiB,CACpB,EAAC1G,OAAQ,CAAA4D,GAAAC,KAAYsJ,EAAkB/O,GAAI+O,EAAtB,EAqB6C,EApBlE9C,GAAAA,QACEC,GAAAA,qCACE5R,EACA8N,GAAQqB,YAAR,MACF,EAAC7H,OACSoD,IACNoD,GAAQO,QACJ5I,GAACoM,OACDC,GAAAA,OACE,IAAI1C,KAAKL,GAAgBO,EAAK,CAAC,EAC/BxB,GAAQqB,YAAR,MACF,EALJzE,EAOF,EAACpD,OACO0K,IAAMnE,GAAA,CAAYpI,GAACoB,KAAKkL,MAAOxG,EAAoB,EAA7CyG,EAAmD,EACnEC,IACE9J,GAAAA,uBAAuB1C,GAACoB,KAAMkH,CAAa,CAEnB,EAFxB,KAEItI,GAACoB,KAAMkH,CAAa,EAC1B,CAACC,IAAA,KAAiB,CACpB,EAAC1G,OAAQ,CAAAsN,GAAA9K,KAAY2K,EAAkB/O,GAAI+O,EAAtB,EAA6C,EACpE7C,GAAAA,qCAAqC5R,EAAM8N,GAAQqB,YAAR,MAA6B,EAAC7H,OAC/D4K,IACNpE,GAAQO,QACJ5I,GAACoM,OACDC,GAAAA,OACE,IAAI1C,KAAKL,GAAgBO,EAAK,CAAC,EAC/BxB,GAAQqB,YAAR,MACF,EALJ+C,EAOF,EAAC5K,OACO2L,IAAMpF,GAAA,CAAYpI,GAACoB,KAAKkL,MAAOjG,EAAoB,EAA7CmH,EAAmD,EAAC3L,OAC1D,CAAA8O,GAAAC,KAAY5B,EAAkB/O,GAAI+O,EAAtB,EAA6C,EAE9D5H,UAAAA,EACJ,MAAAhM,GAAA4N,GACC,OAAAjI,KAAI2L,IACVzE,EACA5M,IACGuM,EACGK,GACG7M,GAAA4N,IAAqBpB,EAAiBK,GACpC7M,GAAA4N,IAAqBpB,EADxBK,GAGC7M,GAAA4N,IAAqBpB,EAL3BsB,GAOL,EACYjO,WAAAA,GACDC,UAAAA,GACCV,WAAAA,GACCE,YAAAA,GACFE,UAAAA,GACGE,aAAAA,GACFK,WAAAA,EACAM,WAAAA,GACHC,QAAAA,EACUC,kBAAAA,GACPH,WAAAA,GACJF,OAAAA,GACAC,OAAAA,GACGK,UAAAA,EAET,SAAC8G,GAAAA,uBAAuB7G,CAAQ,EAE5BkF,KAAI2L,IAAI,GACHnS,EAAI8F,IACLsG,EACF,CACF,EALC9K,EAOaE,mBAAAA,EACLC,cAAAA,EACV,IAAAgM,IAAa,MAAQA,IAAa,KAC3B9L,WAAAA,EACKC,gBAAAA,EACAiS,gBAAAA,GACYhS,4BAAAA,GACbC,eAAAA,GACFC,aAAAA,GACHE,UAAAA,GACCD,WAAAA,EACAG,WAAAA,EACJD,OAAAA,EAEN,QAAAE,KAAY,GAAZ,CAAAoG,SACgB,GAAG1F,KAAQ,GAAID,OAAU,EAAA,EACrCT,IAAA,CAAAoG,SAAuB,EAAC1F,KAAQ,GAAID,OAAU,CAAA,EAEvCR,YAAAA,GACFC,UAAAA,GACGC,aAAAA,GACLC,QAAAA,EAAAA,CAAO,EAlHnB,IAAA,CAqHH,CAAA,EAAY,EAEf,IAAA2J,GAAArM,QAAAoM,IAxIHC,GAAA/E,EAAAA,kBAAAA,IAAA,MAAA,CAAe,UAAA6E,GACZC,SAAAA,GAwIH,EAAMpM,MAAAoM,GAAApM,MAAAqM,IAAAA,GAAArM,EAAA,EAAA,EAAA,IAAAwS,GAAAxS,EAAA,EAAA,IAAAqC,GAAAoQ,UAAAzS,EAAA,EAAA,IAAAqC,GAAAqQ,QAAA1S,EAAA,EAAA,IAAAkN,GAAAlN,EAAA,EAAA,IAAAgN,IAAAhN,EAAA,EAAA,IAAAoC,GAAAqQ,UAAAzS,EAAA,EAAA,IAAAoC,GAAAsQ,QAAA1S,QAAAe,GACLyR,GAAAxF,IAAAE,EACC5F,EAAAA,kBAAAA,IAACqL,GAAAA,YAAA,CACS,OAAA,CAAAF,SAAYrQ,GAAMqQ,SAAUC,OAAUtQ,GAAMsQ,MAAAA,EACxC,WAAA,CAAAD,SACApQ,GAAUoQ,SAAUC,OACtBrQ,GAAUqQ,MAAAA,EAEX1F,QAAAA,GACCE,SAAAA,EACHnM,MAAAA,CAAAA,CAAK,EATf,KAWOf,EAAA,EAAA,EAAAqC,GAAAoQ,SAAAzS,EAAA,EAAA,EAAAqC,GAAAqQ,OAAA1S,MAAAkN,EAAAlN,MAAAgN,GAAAhN,EAAA,EAAA,EAAAoC,GAAAqQ,SAAAzS,EAAA,EAAA,EAAAoC,GAAAsQ,OAAA1S,MAAAe,EAAAf,MAAAwS,IAAAA,GAAAxS,EAAA,EAAA,EAAA,IAAA4S,GAAA,OAAA5S,EAAA,EAAA,IAAAqE,IAAArE,EAAA,EAAA,IAAA8N,IAAA9N,EAAA,EAAA,IAAAsN,GAAAtN,EAAA,EAAA,IAAAwN,GAAAxN,EAAA,EAAA,IAAAgB,GAAAhB,QAAA2N,GAAA3N,EAAA,EAAA,IAAA4N,GAAA5N,EAAA,EAAA,IAAAqN,IAAArN,EAAA,EAAA,IAAAuN,GAAAvN,EAAA,EAAA,IAAA6J,GAAA7J,EAAA,EAAA,IAAA2L,IAAA3L,EAAA,EAAA,IAAA4L,IAAA5L,EAAA,EAAA,IAAAkM,IAAAlM,EAAA,EAAA,IAAAqM,IAAArM,EAAA,EAAA,IAAAwS,IAAAxS,EAAA,EAAA,IAAA6N,IAAA7N,QAAAe,GAxNV6R,4BAACvO,GAAA,CACY,UAAAwF,EACJ,MAAA8B,GACH6B,KACCoC,MACO9B,aAAAA,GACKR,gBAAAA,EACVO,MAAAA,GACGF,SAAAA,EACCC,UAAAA,EACJ7M,MAAAA,EACCC,OAAAA,EACQuM,eAAAA,EACPF,QAAAA,GAERzB,SAAAA,CAAAA,GAuBAM,GA6BDG,GA0ICmG,EAAAA,EAYH,EAAiBxS,MAAAqE,GAAArE,MAAA8N,GAAA9N,MAAAsN,EAAAtN,MAAAwN,EAAAxN,MAAAgB,EAAAhB,MAAA2N,EAAA3N,MAAA4N,EAAA5N,MAAAqN,GAAArN,MAAAuN,EAAAvN,MAAA6J,EAAA7J,MAAA2L,GAAA3L,MAAA4L,GAAA5L,MAAAkM,GAAAlM,MAAAqM,GAAArM,MAAAwS,GAAAxS,MAAA6N,GAAA7N,MAAAe,EAAAf,MAAA4S,IAAAA,GAAA5S,EAAA,EAAA,EAzNjB4S,EAyNiB,CApUd,SAAAtG,GAAA8G,EAAA,CAAA,OAwR0BK,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQyE,EAA+B,CAAM,GAAvD,CAAwD,CAxRlF,SAAAA,GAAA+G,EAAA,CAAA,MAwRiD,CAAC3K,GAAAA,uBAAuB2K,CAAC,CAAC,CAxR3E,SAAAhH,GAAAsH,EAAA,CAAA,OAqPkEC,GAAQ,IAAI,CArP9E,SAAA9H,GAAA+H,EAAA,CAAA,OAoOsED,GAAQ,IAAI,CApOlF,SAAA/H,GAAAV,EAAA,CAAA,OAmN0B2I,GAAAA,IAAI9N,EAACoB,KAAKS,OAAQ8C,EAAiC,CAAC,CAAC,CAnN/E,SAAAA,GAAA1B,EAAA,CAAA,MAmNkD,CAACP,GAAAA,uBAAuBO,CAAE,CAAC,CAnN7E,SAAAyB,GAAAkJ,EAAA,CAAA,OAkNsEA,GAAQ,IAAI,CAlNlF,SAAArL,GAAAgD,EAAA,CAAA,OA4I4BvF,IAAMhD,MAAS,CA5I3C,SAAAsF,GAAAkD,EAAA,CAAA,OA2I6CxF,IAAMhD,MAAS,CA3I5D,SAAA+E,GAAA4D,EAAA,CAAA,OA2IyB3F,EAACzF,IAAK,CA3I/B,SAAAuH,GAAAwD,EAAA,CAAA,OA0I2CtF,IAAMhD,MAAS,CA1I1D,SAAAqE,GAAAW,EAAA,CAAA,OA0IuBhC,EAACzF,IAAK,CA1I7B,SAAAgG,GAAAwN,EAAAC,EAAA,CAAA,OAqEOC,GAAAA,UAAUF,EAAGC,CAAC,CAAC,CCNtB,SAAA6C,GAAAzW,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,EAAA,EACL,CAAAC,KAAAA,EAAA4M,WAAAA,EAAAC,OAAAA,GAAAnM,WAAAA,GAAAC,UAAAA,GAAAV,WAAAA,GAAAE,YAAAA,GAAAE,UAAAA,EAAAE,aAAAA,EAAAK,WAAAA,EAAAM,WAAAA,EAAAD,WAAAA,GAAAmM,gBAAAA,GAAArM,OAAAA,GAAAC,OAAAA,EAAA8L,QAAAA,GAAAC,iBAAAA,GAAAjM,OAAAA,GAAAD,MAAAA,GAAAmM,SAAAA,EAAA3K,YAAAA,GAAA4K,iBAAAA,EAAAE,QAAAA,EAAAE,eAAAA,EAAAlM,QAAAA,EAAAC,kBAAAA,EAAAC,UAAAA,EAAA6L,eAAAA,EAAAI,QAAAA,EAAAhM,SAAAA,EAAAC,SAAAA,EAAAqS,sBAAAA,EAAApS,mBAAAA,EAAA+L,cAAAA,EAAAC,aAAAA,EAAAC,SAAAA,EAAAE,MAAAA,EAAAK,SAAAA,EAAArM,WAAAA,EAAA6S,YAAAA,GAAA9G,UAAAA,GAAA9L,gBAAAA,GAAA6S,gBAAAA,EAAAZ,gBAAAA,GAAAjG,UAAAA,GAAA/L,4BAAAA,EAAAC,eAAAA,EAAAC,aAAAA,EAAAE,UAAAA,EAAAD,WAAAA,EAAAiM,YAAA/N,EAAAgC,OAAAA,EAAAC,WAAAA,GAAA0L,SAAAA,GAAAzL,QAAAA,GAAA0R,cAAAA,GAAAxR,UAAAA,EAAAC,aAAAA,EAAAuL,SAAAA,GAAAtL,QAAAA,EAAAA,EA6DI3C,EAVFoO,EAAA/N,IAAAuC,OAAA,WAAAvC,EAAwB,IAAAE,EAAA,OAAAN,EAAA,CAAA,IAAAsC,IAAAtC,EAAA,CAAA,IAAA8N,IAAA9N,EAAA,CAAA,IAAAsN,IAAAtN,OAAAiC,GAAAjC,EAAA,CAAA,IAAAY,IAAAZ,EAAA,CAAA,IAAAS,GAAAT,EAAA,CAAA,IAAAqC,IAAArC,EAAA,CAAA,IAAAuC,IAAAvC,EAAA,CAAA,IAAAmN,GAAAnN,EAAA,CAAA,IAAA+M,IAAA/M,EAAA,EAAA,IAAAyC,GAAAzC,EAAA,EAAA,IAAAE,GAAAF,EAAA,EAAA,IAAA0N,GAAA1N,EAAA,EAAA,IAAAgC,GAAAhC,EAAA,EAAA,IAAAgU,IAAAhU,EAAA,EAAA,IAAA+N,IAAA/N,EAAA,EAAA,IAAAkN,GAAAlN,EAAA,EAAA,IAAAiN,IAAAjN,QAAAyN,GAAAzN,EAAA,EAAA,IAAAwN,GAAAxN,EAAA,EAAA,IAAA8M,GAAA9M,EAAA,EAAA,IAAAgB,IAAAhB,EAAA,EAAA,IAAA8T,GAAA9T,EAAA,EAAA,IAAA6B,GAAA7B,EAAA,EAAA,IAAA2N,GAAA3N,EAAA,EAAA,IAAAG,IAAAH,EAAA,EAAA,IAAA8B,IAAA9B,EAAA,EAAA,IAAA2U,GAAA3U,EAAA,EAAA,IAAAwB,GAAAxB,EAAA,EAAA,IAAA+T,IAAA/T,EAAA,EAAA,IAAA4N,IAAA5N,EAAA,EAAA,IAAAyB,GAAAzB,EAAA,EAAA,IAAA0C,IAAA1C,EAAA,EAAA,IAAAmC,GAAAnC,EAAA,EAAA,IAAA0B,GAAA1B,EAAA,EAAA,IAAAsB,GAAAtB,EAAA,EAAA,IAAAmO,GAAAnO,QAAAqN,GAAArN,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,GAAAlB,EAAA,EAAA,IAAAuB,GAAAvB,EAAA,EAAA,IAAAuN,GAAAvN,EAAA,EAAA,IAAA+B,GAAA/B,EAAA,EAAA,IAAAK,IAAAL,EAAA,EAAA,IAAAoN,GAAApN,EAAA,EAAA,IAAAoB,GAAApB,EAAA,EAAA,IAAA0U,IAAA1U,EAAA,EAAA,IAAAa,IAAAb,EAAA,EAAA,IAAAmB,IAAAnB,EAAA,EAAA,IAAAkO,GAAAlO,EAAA,EAAA,IAAAgN,IAAAhN,EAAA,EAAA,IAAAoC,GAAApC,QAAAiB,IAAAjB,EAAA,EAAA,IAAA6N,GAAA7N,EAAA,EAAA,IAAAgO,IAAAhO,EAAA,EAAA,IAAAqB,GAAArB,EAAA,EAAA,IAAAO,GAAAP,EAAA,EAAA,IAAAc,GAAAd,EAAA,EAAA,IAAAkC,GAAAlC,EAAA,EAAA,IAAAe,IAYxBT,EAAAgH,EAAAA,kBAAAA,IAACmN,GAAA,CACOvU,KAAAA,EACM4M,WAAAA,EACJC,OAAAA,GACInM,WAAAA,GACDC,UAAAA,GACCV,WAAAA,GACCE,YAAAA,GACFE,UAAAA,EACGE,aAAAA,EACFK,WAAAA,EACAM,WAAAA,EACAD,WAAAA,GACKmM,gBAAAA,GACTrM,OAAAA,GACAC,OAAAA,EACC8L,QAAAA,GACSC,iBAAAA,GACVjM,OAAAA,GACDD,MAAAA,GACGmM,SAAAA,EACG3K,YAAAA,GACK4K,iBAAAA,EACTE,QAAAA,EACOE,eAAAA,EACPlM,QAAAA,EACUC,kBAAAA,EACRC,UAAAA,EACK6L,eAAAA,EACPI,QAAAA,EACChM,SAAAA,EACAC,SAAAA,EACaqS,sBAAAA,EACHpS,mBAAAA,EACL+L,cAAAA,EACDC,aAAAA,EACJC,SAAAA,EACHE,MAAAA,EACGK,SAAAA,EACErM,WAAAA,EACC6S,YAAAA,GACF9G,UAAAA,GACM9L,gBAAAA,GACA6S,gBAAAA,EACAZ,gBAAAA,GACNjG,UAAAA,GACkB/L,4BAAAA,EACrBK,OAAAA,EACQJ,eAAAA,EACFC,aAAAA,EACHE,UAAAA,EACCD,WAAAA,EACAG,WAAAA,GACF0L,SAAAA,GACDzL,QAAAA,GACM0R,cAAAA,GACJxR,UAAAA,EACGC,aAAAA,EACJuL,SAAAA,GACDtL,QAAAA,GACIyL,YAAAA,EAAW,EACxBnO,KAAAsC,GAAAtC,KAAA8N,GAAA9N,KAAAsN,GAAAtN,KAAAiC,EAAAjC,KAAAY,GAAAZ,KAAAS,EAAAT,KAAAqC,GAAArC,KAAAuC,GAAAvC,KAAAmN,EAAAnN,KAAA+M,GAAA/M,MAAAyC,EAAAzC,MAAAE,EAAAF,MAAA0N,EAAA1N,MAAAgC,EAAAhC,MAAAgU,GAAAhU,MAAA+N,GAAA/N,MAAAkN,EAAAlN,MAAAiN,GAAAjN,MAAAyN,EAAAzN,MAAAwN,EAAAxN,MAAA8M,EAAA9M,MAAAgB,GAAAhB,MAAA8T,EAAA9T,MAAA6B,EAAA7B,MAAA2N,EAAA3N,MAAAG,GAAAH,MAAA8B,GAAA9B,MAAA2U,EAAA3U,MAAAwB,EAAAxB,MAAA+T,GAAA/T,MAAA4N,GAAA5N,MAAAyB,EAAAzB,MAAA0C,GAAA1C,MAAAmC,EAAAnC,MAAA0B,EAAA1B,MAAAsB,EAAAtB,MAAAmO,EAAAnO,MAAAqN,EAAArN,MAAAwC,EAAAxC,MAAAkB,EAAAlB,MAAAuB,EAAAvB,MAAAuN,EAAAvN,MAAA+B,EAAA/B,MAAAK,GAAAL,MAAAoN,EAAApN,MAAAoB,EAAApB,MAAA0U,GAAA1U,MAAAa,GAAAb,MAAAmB,GAAAnB,MAAAkO,EAAAlO,MAAAgN,GAAAhN,MAAAoC,EAAApC,MAAAiB,GAAAjB,MAAA6N,EAAA7N,MAAAgO,GAAAhO,MAAAqB,EAAArB,MAAAO,EAAAP,MAAAc,EAAAd,MAAAkC,EAAAlC,MAAAe,GAAAf,MAAAM,GAAAA,EAAAN,EAAA,EAAA,EA7DFM,CA6DE,CA2IC,SAAAmW,GAAA1W,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,EAAA,EACL,CAAAC,KAAAA,EAAA4M,WAAAA,EAAAC,OAAAA,GAAAC,QAAAA,GAAAC,iBAAAA,GAAArM,WAAAA,GAAAC,UAAAA,GAAAC,WAAAA,EAAAE,OAAAA,EAAAD,MAAAA,EAAAmM,SAAAA,EAAA3K,YAAAA,GAAA4K,iBAAAA,GAAAlM,OAAAA,GAAAC,OAAAA,EAAAC,WAAAA,GAAAkM,QAAAA,GAAAC,gBAAAA,GAAAnN,WAAAA,GAAAE,YAAAA,EAAAE,UAAAA,GAAAE,aAAAA,EAAAW,WAAAA,EAAAmM,eAAAA,EAAAlM,QAAAA,EAAAC,kBAAAA,EAAAC,UAAAA,EAAAiM,QAAAA,EAAAhM,SAAAA,EAAAC,SAAAA,EAAAC,mBAAAA,EAAA+L,cAAAA,EAAAC,aAAAA,EAAAC,SAAAA,EAAA9L,WAAAA,EAAA+L,UAAAA,EAAAC,MAAAA,EAAAI,cAAAA,EAAAC,SAAAA,EAAApM,gBAAAA,GAAAgM,UAAAA,GAAA/L,4BAAAA,GAAAC,eAAAA,EAAAC,aAAAA,GAAAE,UAAAA,GAAAD,WAAAA,EAAAiM,YAAA/N,EAAAgC,OAAAA,EAAAC,WAAAA,EAAA0L,SAAAA,EAAAzL,QAAAA,EAAAE,UAAAA,EAAAC,aAAAA,GAAA2K,eAAAA,GAAAY,SAAAA,GAAAtL,QAAAA,EAAAA,EAyDI3C,EAVFoO,EAAA/N,IAAAuC,OAAA,WAAAvC,EAAwB,IAAAE,EAAA,OAAAN,EAAA,CAAA,IAAAsC,GAAAtC,OAAA8N,IAAA9N,EAAA,CAAA,IAAAsN,IAAAtN,EAAA,CAAA,IAAAiC,IAAAjC,EAAA,CAAA,IAAAY,IAAAZ,EAAA,CAAA,IAAAS,GAAAT,EAAA,CAAA,IAAAqC,GAAArC,EAAA,CAAA,IAAAuC,IAAAvC,OAAAmN,IAAAnN,EAAA,CAAA,IAAA+M,IAAA/M,EAAA,EAAA,IAAAyC,IAAAzC,EAAA,EAAA,IAAAE,GAAAF,EAAA,EAAA,IAAA0N,GAAA1N,EAAA,EAAA,IAAAgC,GAAAhC,EAAA,EAAA,IAAA+N,GAAA/N,QAAAkN,GAAAlN,EAAA,EAAA,IAAAiN,IAAAjN,EAAA,EAAA,IAAAyN,GAAAzN,EAAA,EAAA,IAAAwN,GAAAxN,EAAA,EAAA,IAAA8M,GAAA9M,EAAA,EAAA,IAAAgB,GAAAhB,EAAA,EAAA,IAAA6B,GAAA7B,QAAA2N,GAAA3N,EAAA,EAAA,IAAAG,IAAAH,EAAA,EAAA,IAAA8B,IAAA9B,EAAA,EAAA,IAAAwB,GAAAxB,EAAA,EAAA,IAAA4N,GAAA5N,EAAA,EAAA,IAAAyB,GAAAzB,EAAA,EAAA,IAAA0C,IAAA1C,EAAA,EAAA,IAAAmC,IAAAnC,EAAA,EAAA,IAAA0B,GAAA1B,QAAAsB,GAAAtB,EAAA,EAAA,IAAAmO,GAAAnO,EAAA,EAAA,IAAAqN,IAAArN,EAAA,EAAA,IAAAwC,GAAAxC,EAAA,EAAA,IAAAkB,GAAAlB,EAAA,EAAA,IAAAuB,GAAAvB,EAAA,EAAA,IAAAuN,GAAAvN,QAAA+B,IAAA/B,EAAA,EAAA,IAAAK,GAAAL,EAAA,EAAA,IAAAoN,IAAApN,EAAA,EAAA,IAAAoB,GAAApB,EAAA,EAAA,IAAAa,IAAAb,EAAA,EAAA,IAAAmB,IAAAnB,EAAA,EAAA,IAAAkO,GAAAlO,QAAAiO,GAAAjO,EAAA,EAAA,IAAAgN,IAAAhN,EAAA,EAAA,IAAAoC,GAAApC,EAAA,EAAA,IAAAiB,IAAAjB,EAAA,EAAA,IAAA6N,GAAA7N,EAAA,EAAA,IAAAgO,IAAAhO,EAAA,EAAA,IAAAqB,GAAArB,QAAAO,IAAAP,EAAA,EAAA,IAAAc,GAAAd,EAAA,EAAA,IAAAkC,GAAAlC,EAAA,EAAA,IAAAe,GAaxBT,EAAAgH,EAAAA,kBAAAA,IAACuF,GAAA,CACcsB,YAAAA,EACPjO,KAAAA,EACM4M,WAAAA,EACJC,OAAAA,GACCC,QAAAA,GACSC,iBAAAA,GACNrM,WAAAA,GACDC,UAAAA,GACCC,WAAAA,EACJE,OAAAA,EACDD,MAAAA,EACGmM,SAAAA,EACG3K,YAAAA,GACK4K,iBAAAA,GACVlM,OAAAA,GACAC,OAAAA,EACIC,WAAAA,GACHkM,QAAAA,GACQC,gBAAAA,GACLnN,WAAAA,GACCE,YAAAA,EACE4N,cAAAA,EACLC,SAAAA,EACC3N,UAAAA,GACGE,aAAAA,EACFW,WAAAA,EACImM,eAAAA,EACPlM,QAAAA,EACUC,kBAAAA,EACRC,UAAAA,EACFiM,QAAAA,EACChM,SAAAA,EACAC,SAAAA,EACUC,mBAAAA,EACL+L,cAAAA,EACDC,aAAAA,EACJC,SAAAA,EACE9L,WAAAA,EACD+L,UAAAA,EACJC,MAAAA,EACU/L,gBAAAA,GACNgM,UAAAA,GACkB/L,4BAAAA,GACrBK,OAAAA,EACQJ,eAAAA,EACFC,aAAAA,GACHE,UAAAA,GACCD,WAAAA,EACAG,WAAAA,EACF0L,SAAAA,EACDzL,QAAAA,EACEE,UAAAA,EACGC,aAAAA,GACE2K,eAAAA,GACNY,SAAAA,GACDtL,QAAAA,EAAAA,CAAO,EAChB1C,KAAAsC,EAAAtC,KAAA8N,GAAA9N,KAAAsN,GAAAtN,KAAAiC,GAAAjC,KAAAY,GAAAZ,KAAAS,EAAAT,KAAAqC,EAAArC,KAAAuC,GAAAvC,KAAAmN,GAAAnN,KAAA+M,GAAA/M,MAAAyC,GAAAzC,MAAAE,EAAAF,MAAA0N,EAAA1N,MAAAgC,EAAAhC,MAAA+N,EAAA/N,MAAAkN,EAAAlN,MAAAiN,GAAAjN,MAAAyN,EAAAzN,MAAAwN,EAAAxN,MAAA8M,EAAA9M,MAAAgB,EAAAhB,MAAA6B,EAAA7B,MAAA2N,EAAA3N,MAAAG,GAAAH,MAAA8B,GAAA9B,MAAAwB,EAAAxB,MAAA4N,EAAA5N,MAAAyB,EAAAzB,MAAA0C,GAAA1C,MAAAmC,GAAAnC,MAAA0B,EAAA1B,MAAAsB,EAAAtB,MAAAmO,EAAAnO,MAAAqN,GAAArN,MAAAwC,EAAAxC,MAAAkB,EAAAlB,MAAAuB,EAAAvB,MAAAuN,EAAAvN,MAAA+B,GAAA/B,MAAAK,EAAAL,MAAAoN,GAAApN,MAAAoB,EAAApB,MAAAa,GAAAb,MAAAmB,GAAAnB,MAAAkO,EAAAlO,MAAAiO,EAAAjO,MAAAgN,GAAAhN,MAAAoC,EAAApC,MAAAiB,GAAAjB,MAAA6N,EAAA7N,MAAAgO,GAAAhO,MAAAqB,EAAArB,MAAAO,GAAAP,MAAAc,EAAAd,MAAAkC,EAAAlC,MAAAe,EAAAf,MAAAM,GAAAA,EAAAN,EAAA,EAAA,EAzDFM,CAyDE,CA6IC,SAAAoW,GAAA3W,EAAA,CAAA,MAAAC,EAAAC,EAAAA,uBAAAA,EAAA,EAAA,EACL,CAAAC,KAAAA,EAAA4M,WAAAA,EAAAC,OAAAA,GAAAC,QAAAA,GAAAC,iBAAAA,GAAArM,WAAAA,GAAAC,UAAAA,GAAAV,WAAAA,EAAAE,YAAAA,EAAAE,UAAAA,EAAAE,aAAAA,EAAAK,WAAAA,GAAAM,WAAAA,GAAAD,WAAAA,GAAAmM,gBAAAA,EAAArM,OAAAA,GAAAC,OAAAA,GAAAF,OAAAA,GAAAD,MAAAA,GAAAmM,SAAAA,EAAA3K,YAAAA,GAAA4K,iBAAAA,EAAAE,QAAAA,EAAAhM,QAAAA,EAAAC,kBAAAA,EAAAiM,eAAAA,EAAAhM,UAAAA,EAAAiM,QAAAA,EAAAhM,SAAAA,EAAAE,mBAAAA,EAAA+L,cAAAA,EAAAC,aAAAA,EAAAC,SAAAA,EAAAE,MAAAA,EAAAhM,WAAAA,EAAA+L,UAAAA,EAAA9L,gBAAAA,EAAAmM,cAAAA,EAAAC,SAAAA,EAAAyG,gBAAAA,GAAAZ,gBAAAA,GAAAjG,UAAAA,GAAA/L,4BAAAA,EAAAC,eAAAA,GAAAC,aAAAA,GAAAE,UAAAA,EAAAD,WAAAA,EAAAiM,YAAA/N,EAAAgC,OAAAA,EAAAC,WAAAA,EAAA0L,SAAAA,EAAAzL,QAAAA,EAAAE,UAAAA,GAAAC,aAAAA,GAAA2K,eAAAA,GAAAY,SAAAA,GAAAtL,QAAAA,CAAAA,EA0DI3C,EAVFoO,EAAA/N,IAAAuC,OAAA,WAAAvC,EAAwB,IAAAE,GAAA,OAAAN,EAAA,CAAA,IAAAsC,GAAAtC,OAAA8N,IAAA9N,EAAA,CAAA,IAAAsN,GAAAtN,EAAA,CAAA,IAAAiC,IAAAjC,EAAA,CAAA,IAAAY,IAAAZ,EAAA,CAAA,IAAAS,GAAAT,EAAA,CAAA,IAAAqC,GAAArC,EAAA,CAAA,IAAAuC,IAAAvC,OAAAmN,GAAAnN,EAAA,CAAA,IAAA+M,IAAA/M,EAAA,EAAA,IAAAyC,IAAAzC,EAAA,EAAA,IAAAE,GAAAF,EAAA,EAAA,IAAA0N,GAAA1N,EAAA,EAAA,IAAAgC,IAAAhC,EAAA,EAAA,IAAA+N,GAAA/N,EAAA,EAAA,IAAAkN,GAAAlN,EAAA,EAAA,IAAAiN,IAAAjN,QAAAyN,GAAAzN,EAAA,EAAA,IAAAwN,GAAAxN,EAAA,EAAA,IAAA8M,GAAA9M,EAAA,EAAA,IAAAgB,IAAAhB,EAAA,EAAA,IAAA6B,GAAA7B,EAAA,EAAA,IAAA2N,GAAA3N,EAAA,EAAA,IAAAG,GAAAH,EAAA,EAAA,IAAA8B,GAAA9B,EAAA,EAAA,IAAA2U,IAAA3U,EAAA,EAAA,IAAAwB,GAAAxB,EAAA,EAAA,IAAA+T,IAAA/T,QAAA4N,GAAA5N,EAAA,EAAA,IAAA0C,GAAA1C,EAAA,EAAA,IAAAmC,GAAAnC,EAAA,EAAA,IAAA0B,GAAA1B,EAAA,EAAA,IAAAsB,GAAAtB,EAAA,EAAA,IAAAmO,GAAAnO,EAAA,EAAA,IAAAqN,GAAArN,QAAAwC,IAAAxC,EAAA,EAAA,IAAAkB,IAAAlB,EAAA,EAAA,IAAAuB,GAAAvB,EAAA,EAAA,IAAAuN,GAAAvN,EAAA,EAAA,IAAA+B,GAAA/B,EAAA,EAAA,IAAAK,GAAAL,EAAA,EAAA,IAAAoN,IAAApN,EAAA,EAAA,IAAAoB,IAAApB,EAAA,EAAA,IAAAa,IAAAb,QAAAmB,IAAAnB,EAAA,EAAA,IAAAkO,GAAAlO,EAAA,EAAA,IAAAiO,GAAAjO,EAAA,EAAA,IAAAgN,IAAAhN,EAAA,EAAA,IAAAoC,GAAApC,EAAA,EAAA,IAAAiB,IAAAjB,EAAA,EAAA,IAAA6N,GAAA7N,EAAA,EAAA,IAAAgO,IAAAhO,EAAA,EAAA,IAAAqB,GAAArB,QAAAO,GAAAP,EAAA,EAAA,IAAAc,IAAAd,EAAA,EAAA,IAAAkC,GAAAlC,EAAA,EAAA,IAAAe,IAaxBT,GAAAgH,EAAAA,kBAAAA,IAAC+O,GAAA,CACOnW,KAAAA,EACM4M,WAAAA,EACJC,OAAAA,GACCC,QAAAA,GACSC,iBAAAA,GACNrM,WAAAA,GACDC,UAAAA,GACCV,WAAAA,EACCE,YAAAA,EACFE,UAAAA,EACGE,aAAAA,EACFK,WAAAA,GACAM,WAAAA,GACAD,WAAAA,GACKmM,gBAAAA,EACTrM,OAAAA,GACAC,OAAAA,GACAF,OAAAA,GACDD,MAAAA,GACGmM,SAAAA,EACG3K,YAAAA,GACK4K,iBAAAA,EACTE,QAAAA,EACAhM,QAAAA,EACUC,kBAAAA,EACHiM,eAAAA,EACLhM,UAAAA,EACFiM,QAAAA,EACChM,SAAAA,EACUE,mBAAAA,EACL+L,cAAAA,EACDC,aAAAA,EACJC,SAAAA,EACHE,MAAAA,EACKhM,WAAAA,EACD+L,UAAAA,EACM9L,gBAAAA,EACFmM,cAAAA,EACLC,SAAAA,EACOyG,gBAAAA,GACAZ,gBAAAA,GACNjG,UAAAA,GACkB/L,4BAAAA,EACrBK,OAAAA,EACQJ,eAAAA,GACFC,aAAAA,GACHE,UAAAA,EACCD,WAAAA,EACAG,WAAAA,EACF0L,SAAAA,EACDzL,QAAAA,EACEE,UAAAA,GACGC,aAAAA,GACE2K,eAAAA,GACNY,SAAAA,GACDtL,QAAAA,EACIyL,YAAAA,CAAAA,CAAW,EACxBnO,KAAAsC,EAAAtC,KAAA8N,GAAA9N,KAAAsN,EAAAtN,KAAAiC,GAAAjC,KAAAY,GAAAZ,KAAAS,EAAAT,KAAAqC,EAAArC,KAAAuC,GAAAvC,KAAAmN,EAAAnN,KAAA+M,GAAA/M,MAAAyC,GAAAzC,MAAAE,EAAAF,MAAA0N,EAAA1N,MAAAgC,GAAAhC,MAAA+N,EAAA/N,MAAAkN,EAAAlN,MAAAiN,GAAAjN,MAAAyN,EAAAzN,MAAAwN,EAAAxN,MAAA8M,EAAA9M,MAAAgB,GAAAhB,MAAA6B,EAAA7B,MAAA2N,EAAA3N,MAAAG,EAAAH,MAAA8B,EAAA9B,MAAA2U,GAAA3U,MAAAwB,EAAAxB,MAAA+T,GAAA/T,MAAA4N,EAAA5N,MAAA0C,EAAA1C,MAAAmC,EAAAnC,MAAA0B,EAAA1B,MAAAsB,EAAAtB,MAAAmO,EAAAnO,MAAAqN,EAAArN,MAAAwC,GAAAxC,MAAAkB,GAAAlB,MAAAuB,EAAAvB,MAAAuN,EAAAvN,MAAA+B,EAAA/B,MAAAK,EAAAL,MAAAoN,GAAApN,MAAAoB,GAAApB,MAAAa,GAAAb,MAAAmB,GAAAnB,MAAAkO,EAAAlO,MAAAiO,EAAAjO,MAAAgN,GAAAhN,MAAAoC,EAAApC,MAAAiB,GAAAjB,MAAA6N,EAAA7N,MAAAgO,GAAAhO,MAAAqB,EAAArB,MAAAO,EAAAP,MAAAc,GAAAd,MAAAkC,EAAAlC,MAAAe,GAAAf,MAAAM,IAAAA,GAAAN,EAAA,EAAA,EA1DFM,EA0DE"}