@undp/data-viz 1.2.8 → 1.3.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 (496) hide show
  1. package/dist/AreaChart.d.ts +224 -0
  2. package/dist/AreaChart.js +2 -0
  3. package/dist/AreaChart.js.map +1 -0
  4. package/dist/Axis-BlyBRMNw.cjs +2 -0
  5. package/dist/Axis-BlyBRMNw.cjs.map +1 -0
  6. package/dist/Axis-CvK-w3E2.js +44 -0
  7. package/dist/Axis-CvK-w3E2.js.map +1 -0
  8. package/dist/AxisTitle-BY8MI9jC.cjs +2 -0
  9. package/dist/AxisTitle-BY8MI9jC.cjs.map +1 -0
  10. package/dist/AxisTitle-BeMxcw5I.js +21 -0
  11. package/dist/AxisTitle-BeMxcw5I.js.map +1 -0
  12. package/dist/BarGraph.d.ts +460 -0
  13. package/dist/BarGraph.js +2 -0
  14. package/dist/BarGraph.js.map +1 -0
  15. package/dist/BasicStatCard.d.ts +106 -0
  16. package/dist/BasicStatCard.js +2 -0
  17. package/dist/BasicStatCard.js.map +1 -0
  18. package/dist/BeeSwarmChart.d.ts +189 -0
  19. package/dist/BeeSwarmChart.js +2 -0
  20. package/dist/BeeSwarmChart.js.map +1 -0
  21. package/dist/BiVariateChoroplethMap.d.ts +189 -0
  22. package/dist/BiVariateChoroplethMap.js +2 -0
  23. package/dist/BiVariateChoroplethMap.js.map +1 -0
  24. package/dist/BulletChart.d.ts +219 -0
  25. package/dist/BulletChart.js +2 -0
  26. package/dist/BulletChart.js.map +1 -0
  27. package/dist/ButterflyChart.d.ts +201 -0
  28. package/dist/ButterflyChart.js +2 -0
  29. package/dist/ButterflyChart.js.map +1 -0
  30. package/dist/ChoroplethMap.d.ts +190 -0
  31. package/dist/ChoroplethMap.js +2 -0
  32. package/dist/ChoroplethMap.js.map +1 -0
  33. package/dist/CirclePackingGraph.d.ts +161 -0
  34. package/dist/CirclePackingGraph.js +2 -0
  35. package/dist/CirclePackingGraph.js.map +1 -0
  36. package/dist/ColorLegend.d.ts +17 -0
  37. package/dist/ColorLegend.js +2 -0
  38. package/dist/ColorLegend.js.map +1 -0
  39. package/dist/ColorLegendWithMouseOver.d.ts +16 -0
  40. package/dist/ColorLegendWithMouseOver.js +2 -0
  41. package/dist/ColorLegendWithMouseOver.js.map +1 -0
  42. package/dist/Colors.d.ts +174 -0
  43. package/dist/Colors.js +2 -0
  44. package/dist/Colors.js.map +1 -0
  45. package/dist/CopyTextButton.d.ts +13 -0
  46. package/dist/CopyTextButton.js +17 -0
  47. package/dist/CopyTextButton.js.map +1 -0
  48. package/dist/CsvDownloadButton.d.ts +22 -0
  49. package/dist/CsvDownloadButton.js +23 -0
  50. package/dist/CsvDownloadButton.js.map +1 -0
  51. package/dist/DataCards.d.ts +131 -0
  52. package/dist/DataCards.js +2 -0
  53. package/dist/DataCards.js.map +1 -0
  54. package/dist/DataTable.d.ts +122 -0
  55. package/dist/DataTable.js +2 -0
  56. package/dist/DataTable.js.map +1 -0
  57. package/dist/DifferenceLineChart.d.ts +237 -0
  58. package/dist/DifferenceLineChart.js +2 -0
  59. package/dist/DifferenceLineChart.js.map +1 -0
  60. package/dist/DonutChart.d.ts +148 -0
  61. package/dist/DonutChart.js +2 -0
  62. package/dist/DonutChart.js.map +1 -0
  63. package/dist/DotDensityMap.d.ts +191 -0
  64. package/dist/DotDensityMap.js +2 -0
  65. package/dist/DotDensityMap.js.map +1 -0
  66. package/dist/DropdownSelect-CuzV7gdj.cjs +29 -0
  67. package/dist/DropdownSelect-CuzV7gdj.cjs.map +1 -0
  68. package/dist/DropdownSelect-DmZsXrhY.js +2698 -0
  69. package/dist/DropdownSelect-DmZsXrhY.js.map +1 -0
  70. package/dist/DualAxisLineChart.d.ts +180 -0
  71. package/dist/DualAxisLineChart.js +2 -0
  72. package/dist/DualAxisLineChart.js.map +1 -0
  73. package/dist/DumbbellChart.d.ts +224 -0
  74. package/dist/DumbbellChart.js +2 -0
  75. package/dist/DumbbellChart.js.map +1 -0
  76. package/dist/EmptyState-BQguKAp5.cjs +2 -0
  77. package/dist/EmptyState-BQguKAp5.cjs.map +1 -0
  78. package/dist/EmptyState-b2Ln487i.js +22 -0
  79. package/dist/EmptyState-b2Ln487i.js.map +1 -0
  80. package/dist/ExcelDownloadButton.d.ts +22 -0
  81. package/dist/ExcelDownloadButton.js +2 -0
  82. package/dist/ExcelDownloadButton.js.map +1 -0
  83. package/dist/FootNote.d.ts +12 -0
  84. package/dist/FootNote.js +2 -0
  85. package/dist/FootNote.js.map +1 -0
  86. package/dist/GeoHubCompareMaps.d.ts +103 -0
  87. package/dist/GeoHubCompareMaps.js +2 -0
  88. package/dist/GeoHubCompareMaps.js.map +1 -0
  89. package/dist/GeoHubMap.d.ts +118 -0
  90. package/dist/GeoHubMap.js +2 -0
  91. package/dist/GeoHubMap.js.map +1 -0
  92. package/dist/GeoHubMapWithLayerSelection.d.ts +117 -0
  93. package/dist/GeoHubMapWithLayerSelection.js +2 -0
  94. package/dist/GeoHubMapWithLayerSelection.js.map +1 -0
  95. package/dist/GraphDescription.d.ts +12 -0
  96. package/dist/GraphDescription.js +2 -0
  97. package/dist/GraphDescription.js.map +1 -0
  98. package/dist/GraphFooter.d.ts +24 -0
  99. package/dist/GraphFooter.js +2 -0
  100. package/dist/GraphFooter.js.map +1 -0
  101. package/dist/GraphHeader.d.ts +22 -0
  102. package/dist/GraphHeader.js +2 -0
  103. package/dist/GraphHeader.js.map +1 -0
  104. package/dist/GraphTitle.d.ts +13 -0
  105. package/dist/GraphTitle.js +2 -0
  106. package/dist/GraphTitle.js.map +1 -0
  107. package/dist/GriddedGraphs.d.ts +540 -0
  108. package/dist/GriddedGraphs.js +2 -0
  109. package/dist/GriddedGraphs.js.map +1 -0
  110. package/dist/GriddedGraphsFromConfig.d.ts +543 -0
  111. package/dist/GriddedGraphsFromConfig.js +2 -0
  112. package/dist/GriddedGraphsFromConfig.js.map +1 -0
  113. package/dist/HeatMap.d.ts +166 -0
  114. package/dist/HeatMap.js +2 -0
  115. package/dist/HeatMap.js.map +1 -0
  116. package/dist/Histogram.d.ts +165 -0
  117. package/dist/Histogram.js +2 -0
  118. package/dist/Histogram.js.map +1 -0
  119. package/dist/ImageDownloadButton.d.ts +15 -0
  120. package/dist/ImageDownloadButton.js +2 -0
  121. package/dist/ImageDownloadButton.js.map +1 -0
  122. package/dist/LineChartWithConfidenceInterval.d.ts +250 -0
  123. package/dist/LineChartWithConfidenceInterval.js +2 -0
  124. package/dist/LineChartWithConfidenceInterval.js.map +1 -0
  125. package/dist/LinearColorLegend.d.ts +13 -0
  126. package/dist/LinearColorLegend.js +2 -0
  127. package/dist/LinearColorLegend.js.map +1 -0
  128. package/dist/Modal-C9txyGOk.js +723 -0
  129. package/dist/Modal-C9txyGOk.js.map +1 -0
  130. package/dist/Modal-cQF2UQIa.cjs +46 -0
  131. package/dist/Modal-cQF2UQIa.cjs.map +1 -0
  132. package/dist/MultiGraphDashboard.d.ts +558 -0
  133. package/dist/MultiGraphDashboard.js +2 -0
  134. package/dist/MultiGraphDashboard.js.map +1 -0
  135. package/dist/MultiGraphDashboardFromConfig.d.ts +562 -0
  136. package/dist/MultiGraphDashboardFromConfig.js +2 -0
  137. package/dist/MultiGraphDashboardFromConfig.js.map +1 -0
  138. package/dist/MultiGraphDashboardWideToLongFormat.d.ts +128 -0
  139. package/dist/MultiGraphDashboardWideToLongFormat.js +2 -0
  140. package/dist/MultiGraphDashboardWideToLongFormat.js.map +1 -0
  141. package/dist/MultiGraphDashboardWideToLongFormatFromConfig.d.ts +133 -0
  142. package/dist/MultiGraphDashboardWideToLongFormatFromConfig.js +2 -0
  143. package/dist/MultiGraphDashboardWideToLongFormatFromConfig.js.map +1 -0
  144. package/dist/MultiLineAltChart.d.ts +244 -0
  145. package/dist/MultiLineAltChart.js +2 -0
  146. package/dist/MultiLineAltChart.js.map +1 -0
  147. package/dist/MultiLineChart.d.ts +246 -0
  148. package/dist/MultiLineChart.js +2 -0
  149. package/dist/MultiLineChart.js.map +1 -0
  150. package/dist/ParetoChart.d.ts +178 -0
  151. package/dist/ParetoChart.js +2 -0
  152. package/dist/ParetoChart.js.map +1 -0
  153. package/dist/RadarChart.d.ts +176 -0
  154. package/dist/RadarChart.js +2 -0
  155. package/dist/RadarChart.js.map +1 -0
  156. package/dist/ReferenceLine-BgDdQbDI.js +129 -0
  157. package/dist/ReferenceLine-BgDdQbDI.js.map +1 -0
  158. package/dist/ReferenceLine-Bsb5jeE4.cjs +2 -0
  159. package/dist/ReferenceLine-Bsb5jeE4.cjs.map +1 -0
  160. package/dist/RegressionLine-BfpCuD7B.cjs +2 -0
  161. package/dist/RegressionLine-BfpCuD7B.cjs.map +1 -0
  162. package/dist/RegressionLine-cSljpHaE.js +49 -0
  163. package/dist/RegressionLine-cSljpHaE.js.map +1 -0
  164. package/dist/SVGDownloadButton.d.ts +15 -0
  165. package/dist/SVGDownloadButton.js +2 -0
  166. package/dist/SVGDownloadButton.js.map +1 -0
  167. package/dist/SankeyChart.d.ts +178 -0
  168. package/dist/SankeyChart.js +2 -0
  169. package/dist/SankeyChart.js.map +1 -0
  170. package/dist/ScatterPlot.d.ts +266 -0
  171. package/dist/ScatterPlot.js +2 -0
  172. package/dist/ScatterPlot.js.map +1 -0
  173. package/dist/ScrollStory.d.ts +491 -0
  174. package/dist/ScrollStory.js +2 -0
  175. package/dist/ScrollStory.js.map +1 -0
  176. package/dist/SimpleLineChart.d.ts +230 -0
  177. package/dist/SimpleLineChart.js +2 -0
  178. package/dist/SimpleLineChart.js.map +1 -0
  179. package/dist/SingleGraphDashboard.d.ts +545 -0
  180. package/dist/SingleGraphDashboard.js +2 -0
  181. package/dist/SingleGraphDashboard.js.map +1 -0
  182. package/dist/SingleGraphDashboardFromConfig.d.ts +547 -0
  183. package/dist/SingleGraphDashboardFromConfig.js +2 -0
  184. package/dist/SingleGraphDashboardFromConfig.js.map +1 -0
  185. package/dist/SlopeChart.d.ts +167 -0
  186. package/dist/SlopeChart.js +2 -0
  187. package/dist/SlopeChart.js.map +1 -0
  188. package/dist/Source.d.ts +16 -0
  189. package/dist/Source.js +2 -0
  190. package/dist/Source.js.map +1 -0
  191. package/dist/SparkLine.d.ts +139 -0
  192. package/dist/SparkLine.js +2 -0
  193. package/dist/SparkLine.js.map +1 -0
  194. package/dist/Spinner-DN3s4S0H.js +17 -0
  195. package/dist/Spinner-DN3s4S0H.js.map +1 -0
  196. package/dist/Spinner-UmN-KPe9.cjs +2 -0
  197. package/dist/Spinner-UmN-KPe9.cjs.map +1 -0
  198. package/dist/StatCardFromData.d.ts +115 -0
  199. package/dist/StatCardFromData.js +2 -0
  200. package/dist/StatCardFromData.js.map +1 -0
  201. package/dist/StripChart.d.ts +178 -0
  202. package/dist/StripChart.js +2 -0
  203. package/dist/StripChart.js.map +1 -0
  204. package/dist/ThreeDGlobe.d.ts +158 -0
  205. package/dist/ThreeDGlobe.js +2 -0
  206. package/dist/ThreeDGlobe.js.map +1 -0
  207. package/dist/ThresholdColorLegendWithMouseOver.d.ts +16 -0
  208. package/dist/ThresholdColorLegendWithMouseOver.js +2 -0
  209. package/dist/ThresholdColorLegendWithMouseOver.js.map +1 -0
  210. package/dist/Tooltip-BM18N_3l.cjs +2 -0
  211. package/dist/Tooltip-BM18N_3l.cjs.map +1 -0
  212. package/dist/Tooltip-CzZ1wFyF.js +47 -0
  213. package/dist/Tooltip-CzZ1wFyF.js.map +1 -0
  214. package/dist/TreeMapGraph.d.ts +158 -0
  215. package/dist/TreeMapGraph.js +2 -0
  216. package/dist/TreeMapGraph.js.map +1 -0
  217. package/dist/Types.d.ts +883 -0
  218. package/dist/Types.js +2 -0
  219. package/dist/Types.js.map +1 -0
  220. package/dist/Typography-CDR-DAHH.cjs +2 -0
  221. package/dist/Typography-CDR-DAHH.cjs.map +1 -0
  222. package/dist/Typography-XJoSE-By.js +58 -0
  223. package/dist/Typography-XJoSE-By.js.map +1 -0
  224. package/dist/UnitChart.d.ts +132 -0
  225. package/dist/UnitChart.js +2 -0
  226. package/dist/UnitChart.js.map +1 -0
  227. package/dist/XAxesLabels-C9REbQQs.cjs +2 -0
  228. package/dist/XAxesLabels-C9REbQQs.cjs.map +1 -0
  229. package/dist/XAxesLabels-DVw7Lvuz.js +58 -0
  230. package/dist/XAxesLabels-DVw7Lvuz.js.map +1 -0
  231. package/dist/XTicksAndGridLines-CUefTINd.js +57 -0
  232. package/dist/XTicksAndGridLines-CUefTINd.js.map +1 -0
  233. package/dist/XTicksAndGridLines-DuK35ROS.cjs +2 -0
  234. package/dist/XTicksAndGridLines-DuK35ROS.cjs.map +1 -0
  235. package/dist/YAxesLabels-CYVY053X.js +53 -0
  236. package/dist/YAxesLabels-CYVY053X.js.map +1 -0
  237. package/dist/YAxesLabels-DhBdLk3Z.cjs +2 -0
  238. package/dist/YAxesLabels-DhBdLk3Z.cjs.map +1 -0
  239. package/dist/YTicksAndGridLines-BJRXuBdC.js +57 -0
  240. package/dist/YTicksAndGridLines-BJRXuBdC.js.map +1 -0
  241. package/dist/YTicksAndGridLines-CtLvzExe.cjs +2 -0
  242. package/dist/YTicksAndGridLines-CtLvzExe.cjs.map +1 -0
  243. package/dist/_commonjsHelpers-DKOUU3wS.cjs +2 -0
  244. package/dist/_commonjsHelpers-DKOUU3wS.cjs.map +1 -0
  245. package/dist/_commonjsHelpers-DaMA6jEr.js +9 -0
  246. package/dist/_commonjsHelpers-DaMA6jEr.js.map +1 -0
  247. package/dist/area-BE2wo7fv.js +53 -0
  248. package/dist/area-BE2wo7fv.js.map +1 -0
  249. package/dist/area-D3Qx7k7K.cjs +2 -0
  250. package/dist/area-D3Qx7k7K.cjs.map +1 -0
  251. package/dist/array-B7TkkRH0.js +89 -0
  252. package/dist/array-B7TkkRH0.js.map +1 -0
  253. package/dist/array-DKbXV8lR.cjs +2 -0
  254. package/dist/array-DKbXV8lR.cjs.map +1 -0
  255. package/dist/band-BEjh2CHI.js +47 -0
  256. package/dist/band-BEjh2CHI.js.map +1 -0
  257. package/dist/band-CAApY4Pd.cjs +2 -0
  258. package/dist/band-CAApY4Pd.cjs.map +1 -0
  259. package/dist/checkIfMultiple-CaefP4X2.js +2264 -0
  260. package/dist/checkIfMultiple-CaefP4X2.js.map +1 -0
  261. package/dist/checkIfMultiple-D3h8to1T.cjs +12 -0
  262. package/dist/checkIfMultiple-D3h8to1T.cjs.map +1 -0
  263. package/dist/checkIfNullOrUndefined.d.ts +15 -0
  264. package/dist/checkIfNullOrUndefined.js +2 -0
  265. package/dist/checkIfNullOrUndefined.js.map +1 -0
  266. package/dist/customArea-B47Ew5cT.cjs +2 -0
  267. package/dist/customArea-B47Ew5cT.cjs.map +1 -0
  268. package/dist/customArea-I3MsoqIl.js +176 -0
  269. package/dist/customArea-I3MsoqIl.js.map +1 -0
  270. package/dist/defaultLocale-BEa-49Qz.js +172 -0
  271. package/dist/defaultLocale-BEa-49Qz.js.map +1 -0
  272. package/dist/defaultLocale-DIVzfLaQ.cjs +2 -0
  273. package/dist/defaultLocale-DIVzfLaQ.cjs.map +1 -0
  274. package/dist/delaunay-C1uAf38t.js +684 -0
  275. package/dist/delaunay-C1uAf38t.js.map +1 -0
  276. package/dist/delaunay-rcy0HhZi.cjs +2 -0
  277. package/dist/delaunay-rcy0HhZi.cjs.map +1 -0
  278. package/dist/ensureCompleteData-BBDZbDCE.js +102 -0
  279. package/dist/ensureCompleteData-BBDZbDCE.js.map +1 -0
  280. package/dist/ensureCompleteData-DqWQ2Zbi.cjs +2 -0
  281. package/dist/ensureCompleteData-DqWQ2Zbi.cjs.map +1 -0
  282. package/dist/excelDownload.d.ts +31 -0
  283. package/dist/excelDownload.js +2 -0
  284. package/dist/excelDownload.js.map +1 -0
  285. package/dist/fetchAndParseData.d.ts +84 -0
  286. package/dist/fetchAndParseData.js +16 -0
  287. package/dist/fetchAndParseData.js.map +1 -0
  288. package/dist/filterData-B8ocT57s.js +14 -0
  289. package/dist/filterData-B8ocT57s.js.map +1 -0
  290. package/dist/filterData-DN6py7y_.cjs +2 -0
  291. package/dist/filterData-DN6py7y_.cjs.map +1 -0
  292. package/dist/generateCodes.d.ts +25 -0
  293. package/dist/generateCodes.js +2 -0
  294. package/dist/generateCodes.js.map +1 -0
  295. package/dist/generateRandomString-B5zBiJzS.cjs +2 -0
  296. package/dist/generateRandomString-B5zBiJzS.cjs.map +1 -0
  297. package/dist/generateRandomString-za3IQGfQ.js +11 -0
  298. package/dist/generateRandomString-za3IQGfQ.js.map +1 -0
  299. package/dist/getJenks.d.ts +17 -0
  300. package/dist/getJenks.js +2 -0
  301. package/dist/getJenks.js.map +1 -0
  302. package/dist/getPercentileValue.d.ts +13 -0
  303. package/dist/getPercentileValue.js +2 -0
  304. package/dist/getPercentileValue.js.map +1 -0
  305. package/dist/getQueryParamsFromLink.d.ts +18 -0
  306. package/dist/getQueryParamsFromLink.js +2 -0
  307. package/dist/getQueryParamsFromLink.js.map +1 -0
  308. package/dist/getSchema.d.ts +3256 -0
  309. package/dist/getSchema.js +2 -0
  310. package/dist/getSchema.js.map +1 -0
  311. package/dist/getSliderMarks-CWajGCGq.js +719 -0
  312. package/dist/getSliderMarks-CWajGCGq.js.map +1 -0
  313. package/dist/getSliderMarks-DDJ1CdhL.cjs +6 -0
  314. package/dist/getSliderMarks-DDJ1CdhL.cjs.map +1 -0
  315. package/dist/getTextColorBasedOnBgColor.d.ts +13 -0
  316. package/dist/getTextColorBasedOnBgColor.js +2 -0
  317. package/dist/getTextColorBasedOnBgColor.js.map +1 -0
  318. package/dist/getUniqValue.d.ts +18 -0
  319. package/dist/getUniqValue.js +2 -0
  320. package/dist/getUniqValue.js.map +1 -0
  321. package/dist/graphList.d.ts +9 -0
  322. package/dist/graphList.js +2 -0
  323. package/dist/graphList.js.map +1 -0
  324. package/dist/imageDownload.d.ts +16 -0
  325. package/dist/imageDownload.js +3 -0
  326. package/dist/imageDownload.js.map +1 -0
  327. package/dist/index-01r5X3Gr-9jE0ObrK.cjs +2 -0
  328. package/dist/index-01r5X3Gr-9jE0ObrK.cjs.map +1 -0
  329. package/dist/index-01r5X3Gr-kH7FxQ7P.js +451 -0
  330. package/dist/index-01r5X3Gr-kH7FxQ7P.js.map +1 -0
  331. package/dist/index-27yTRcko.js +35 -0
  332. package/dist/index-27yTRcko.js.map +1 -0
  333. package/dist/index-B0rbzOoC.cjs +2 -0
  334. package/dist/index-B0rbzOoC.cjs.map +1 -0
  335. package/dist/index-BGMGC-HN.cjs +22 -0
  336. package/dist/index-BGMGC-HN.cjs.map +1 -0
  337. package/dist/index-BHm2KTjD-2e-Fu8L-.js +702 -0
  338. package/dist/index-BHm2KTjD-2e-Fu8L-.js.map +1 -0
  339. package/dist/index-BHm2KTjD-D8FylaKc.cjs +44 -0
  340. package/dist/index-BHm2KTjD-D8FylaKc.cjs.map +1 -0
  341. package/dist/index-BIPNFFja.js +506 -0
  342. package/dist/index-BIPNFFja.js.map +1 -0
  343. package/dist/index-BLizQDlg.js +658 -0
  344. package/dist/index-BLizQDlg.js.map +1 -0
  345. package/dist/index-BXns0-ng.cjs +2 -0
  346. package/dist/index-BXns0-ng.cjs.map +1 -0
  347. package/dist/index-BYroABPm.cjs +2 -0
  348. package/dist/index-BYroABPm.cjs.map +1 -0
  349. package/dist/index-BczVvEBZ.cjs +2 -0
  350. package/dist/index-BczVvEBZ.cjs.map +1 -0
  351. package/dist/index-BzeLQvXk.cjs +2 -0
  352. package/dist/index-BzeLQvXk.cjs.map +1 -0
  353. package/dist/index-C1rRk_50.js +273 -0
  354. package/dist/index-C1rRk_50.js.map +1 -0
  355. package/dist/index-C21TvELx.cjs +2 -0
  356. package/dist/index-C21TvELx.cjs.map +1 -0
  357. package/dist/index-CEc_9zWy.cjs +2 -0
  358. package/dist/index-CEc_9zWy.cjs.map +1 -0
  359. package/dist/index-CZbIGs8q.cjs +2 -0
  360. package/dist/index-CZbIGs8q.cjs.map +1 -0
  361. package/dist/index-CaAIPGZo.js +631 -0
  362. package/dist/index-CaAIPGZo.js.map +1 -0
  363. package/dist/index-CbVeVrla.cjs +2 -0
  364. package/dist/index-CbVeVrla.cjs.map +1 -0
  365. package/dist/index-CqzhBPuO-CfQywbdq.js +41 -0
  366. package/dist/index-CqzhBPuO-CfQywbdq.js.map +1 -0
  367. package/dist/index-CqzhBPuO-raKZqS7l.cjs +2 -0
  368. package/dist/index-CqzhBPuO-raKZqS7l.cjs.map +1 -0
  369. package/dist/index-D7ltPi18.js +26 -0
  370. package/dist/index-D7ltPi18.js.map +1 -0
  371. package/dist/index-DSnvdkHZ.js +495 -0
  372. package/dist/index-DSnvdkHZ.js.map +1 -0
  373. package/dist/index-DXmF_0ez.js +308 -0
  374. package/dist/index-DXmF_0ez.js.map +1 -0
  375. package/dist/index-Db-Yg_Ud.js +120 -0
  376. package/dist/index-Db-Yg_Ud.js.map +1 -0
  377. package/dist/index-Ds0uHjK9.cjs +2 -0
  378. package/dist/index-Ds0uHjK9.cjs.map +1 -0
  379. package/dist/index-DxagiOHo.js +707 -0
  380. package/dist/index-DxagiOHo.js.map +1 -0
  381. package/dist/index-DzdwZ2OA.js +77 -0
  382. package/dist/index-DzdwZ2OA.js.map +1 -0
  383. package/dist/index-UV9hjG_S.js +53 -0
  384. package/dist/index-UV9hjG_S.js.map +1 -0
  385. package/dist/index-a2C2Bqn2.cjs +10 -0
  386. package/dist/index-a2C2Bqn2.cjs.map +1 -0
  387. package/dist/index.js +1 -52488
  388. package/dist/index.js.map +1 -1
  389. package/dist/init-BhZylTFx.js +63 -0
  390. package/dist/init-BhZylTFx.js.map +1 -0
  391. package/dist/init-DU0ybBc_.cjs +2 -0
  392. package/dist/init-DU0ybBc_.cjs.map +1 -0
  393. package/dist/line-CPfhohvF.js +68 -0
  394. package/dist/line-CPfhohvF.js.map +1 -0
  395. package/dist/line-DHV4JwCR.cjs +2 -0
  396. package/dist/line-DHV4JwCR.cjs.map +1 -0
  397. package/dist/linear-BVckp9RD.cjs +2 -0
  398. package/dist/linear-BVckp9RD.cjs.map +1 -0
  399. package/dist/linear-DUdu7l2G.js +221 -0
  400. package/dist/linear-DUdu7l2G.js.map +1 -0
  401. package/dist/numberFormattingFunction.d.ts +22 -0
  402. package/dist/numberFormattingFunction.js +2 -0
  403. package/dist/numberFormattingFunction.js.map +1 -0
  404. package/dist/ordinal-BOeNbyae.cjs +2 -0
  405. package/dist/ordinal-BOeNbyae.cjs.map +1 -0
  406. package/dist/ordinal-w9Lu4Stb.js +62 -0
  407. package/dist/ordinal-w9Lu4Stb.js.map +1 -0
  408. package/dist/parse-DlCRUFh_.js +2768 -0
  409. package/dist/parse-DlCRUFh_.js.map +1 -0
  410. package/dist/parse-hMnG_lRV.cjs +2 -0
  411. package/dist/parse-hMnG_lRV.cjs.map +1 -0
  412. package/dist/pointer-CWRWOsrb.js +23 -0
  413. package/dist/pointer-CWRWOsrb.js.map +1 -0
  414. package/dist/pointer-Dkq5NV1q.cjs +2 -0
  415. package/dist/pointer-Dkq5NV1q.cjs.map +1 -0
  416. package/dist/pow-B5-jkdHU.cjs +2 -0
  417. package/dist/pow-B5-jkdHU.cjs.map +1 -0
  418. package/dist/pow-e8zx3AQJ.js +35 -0
  419. package/dist/pow-e8zx3AQJ.js.map +1 -0
  420. package/dist/removeOutliers.d.ts +16 -0
  421. package/dist/removeOutliers.js +2 -0
  422. package/dist/removeOutliers.js.map +1 -0
  423. package/dist/select-Bnfk0lJx.cjs +2 -0
  424. package/dist/select-Bnfk0lJx.cjs.map +1 -0
  425. package/dist/select-DKy99ogv.js +584 -0
  426. package/dist/select-DKy99ogv.js.map +1 -0
  427. package/dist/simple-statistics-flVzqVtt.js +65 -0
  428. package/dist/simple-statistics-flVzqVtt.js.map +1 -0
  429. package/dist/simple-statistics-xm8c0LQQ.cjs +2 -0
  430. package/dist/simple-statistics-xm8c0LQQ.cjs.map +1 -0
  431. package/dist/step-BZ3C8QFW.cjs +2 -0
  432. package/dist/step-BZ3C8QFW.cjs.map +1 -0
  433. package/dist/step-BrDul-H4.js +119 -0
  434. package/dist/step-BrDul-H4.js.map +1 -0
  435. package/dist/string-B8KlVSPX.js +364 -0
  436. package/dist/string-B8KlVSPX.js.map +1 -0
  437. package/dist/string-CRoCZCYa.cjs +2 -0
  438. package/dist/string-CRoCZCYa.cjs.map +1 -0
  439. package/dist/string2HTML-BX0oNw83.js +758 -0
  440. package/dist/string2HTML-BX0oNw83.js.map +1 -0
  441. package/dist/string2HTML-X4ZYX5jI.cjs +3 -0
  442. package/dist/string2HTML-X4ZYX5jI.cjs.map +1 -0
  443. package/dist/style.css +1 -1
  444. package/dist/svgDownload.d.ts +16 -0
  445. package/dist/svgDownload.js +2 -0
  446. package/dist/svgDownload.js.map +1 -0
  447. package/dist/threshold-DFfqcDMa.js +23 -0
  448. package/dist/threshold-DFfqcDMa.js.map +1 -0
  449. package/dist/threshold-DNsSUf8Q.cjs +2 -0
  450. package/dist/threshold-DNsSUf8Q.cjs.map +1 -0
  451. package/dist/time-Byw_jYQ7.cjs +2 -0
  452. package/dist/time-Byw_jYQ7.cjs.map +1 -0
  453. package/dist/time-BzJP5SPC.js +715 -0
  454. package/dist/time-BzJP5SPC.js.map +1 -0
  455. package/dist/timer-B39XOBYL.js +124 -0
  456. package/dist/timer-B39XOBYL.js.map +1 -0
  457. package/dist/timer-CKyBCVzT.cjs +2 -0
  458. package/dist/timer-CKyBCVzT.cjs.map +1 -0
  459. package/dist/toConsumableArray-BSMMWi3w-Cu4vcE-m.js +139 -0
  460. package/dist/toConsumableArray-BSMMWi3w-Cu4vcE-m.js.map +1 -0
  461. package/dist/toConsumableArray-BSMMWi3w-DJL7-zAp.cjs +4 -0
  462. package/dist/toConsumableArray-BSMMWi3w-DJL7-zAp.cjs.map +1 -0
  463. package/dist/transformColumnsToArray.d.ts +38 -0
  464. package/dist/transformColumnsToArray.js +2 -0
  465. package/dist/transformColumnsToArray.js.map +1 -0
  466. package/dist/transformDataForAggregation.d.ts +38 -0
  467. package/dist/transformDataForAggregation.js +2 -0
  468. package/dist/transformDataForAggregation.js.map +1 -0
  469. package/dist/transformDataForGraph.d.ts +47 -0
  470. package/dist/transformDataForGraph.js +2 -0
  471. package/dist/transformDataForGraph.js.map +1 -0
  472. package/dist/transformDataForGraphFromFile.d.ts +66 -0
  473. package/dist/transformDataForGraphFromFile.js +2 -0
  474. package/dist/transformDataForGraphFromFile.js.map +1 -0
  475. package/dist/use-in-view-CZPXmTZM.js +4645 -0
  476. package/dist/use-in-view-CZPXmTZM.js.map +1 -0
  477. package/dist/use-in-view-Dl1CsAIo.cjs +2 -0
  478. package/dist/use-in-view-Dl1CsAIo.cjs.map +1 -0
  479. package/dist/validateSchema.d.ts +68 -0
  480. package/dist/validateSchema.js +2 -0
  481. package/dist/validateSchema.js.map +1 -0
  482. package/dist/x-Dft9NVe_-DcB7wtv5.js +61 -0
  483. package/dist/x-Dft9NVe_-DcB7wtv5.js.map +1 -0
  484. package/dist/x-Dft9NVe_-LeyJu02C.cjs +27 -0
  485. package/dist/x-Dft9NVe_-LeyJu02C.cjs.map +1 -0
  486. package/dist/y-D0sAaVii.js +421 -0
  487. package/dist/y-D0sAaVii.js.map +1 -0
  488. package/dist/y-QcCbqrzx.cjs +2 -0
  489. package/dist/y-QcCbqrzx.cjs.map +1 -0
  490. package/dist/zoom-Lo7IAUfC.cjs +2 -0
  491. package/dist/zoom-Lo7IAUfC.cjs.map +1 -0
  492. package/dist/zoom-_lqdiGoI.js +1983 -0
  493. package/dist/zoom-_lqdiGoI.js.map +1 -0
  494. package/package.json +415 -4
  495. package/dist/index.cjs +0 -68
  496. package/dist/index.cjs.map +0 -1
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./index-BHm2KTjD-D8FylaKc.cjs"),c=require("react"),Oe=require("./index-BzeLQvXk.cjs"),we=require("./parse-hMnG_lRV.cjs"),Ee=require("./Typography-CDR-DAHH.cjs"),je=require("./getSliderMarks-DDJ1CdhL.cjs"),Le=require("./index-CZbIGs8q.cjs"),Ve=require("./index-BXns0-ng.cjs"),$e=require("./Modal-cQF2UQIa.cjs"),Te=require("./numberFormattingFunction.js"),Ae=require("./Tooltip-BM18N_3l.cjs"),A=require("./checkIfNullOrUndefined.js"),qe=require("./string2HTML-X4ZYX5jI.cjs"),Je=require("./XTicksAndGridLines-DuK35ROS.cjs"),Fe=require("./AxisTitle-BY8MI9jC.cjs"),Qe=require("./YAxesLabels-DhBdLk3Z.cjs"),Pe=require("./YTicksAndGridLines-CtLvzExe.cjs"),Be=require("./ReferenceLine-Bsb5jeE4.cjs"),_=require("./use-in-view-Dl1CsAIo.cjs"),He=require("./linear-BVckp9RD.cjs"),We=require("./band-CAApY4Pd.cjs"),Ue=require("./index-a2C2Bqn2.cjs"),Ge=require("./GraphHeader.js"),Ye=require("./GraphFooter.js"),Xe=require("./ColorLegendWithMouseOver.js"),_e=require("./Colors.js"),ze=require("./EmptyState-BQguKAp5.cjs"),Ne=require("./index-CEc_9zWy.cjs"),ke=require("./ensureCompleteData-DqWQ2Zbi.cjs"),Ke=require("./init-DU0ybBc_.cjs"),Ze=require("./Axis-BlyBRMNw.cjs"),et=require("./XAxesLabels-C9REbQQs.cjs");function tt(ye){const{data:o,dotColors:p,suffix:z,prefix:K,barPadding:v,showValues:ue,showTicks:ee,leftMargin:te,truncateBy:ce,width:ie,height:ae,rightMargin:J,topMargin:N,bottomMargin:s,radius:q,showLabels:xe,tooltip:M,onSeriesMouseOver:F,maxValue:E,minValue:re,onSeriesMouseClick:B,selectedColor:I,arrowConnector:R,connectorStrokeWidth:pe,maxBarThickness:ne,minBarThickness:se,resetSelectionOnDoubleClick:ge,detailsOnClick:w,axisTitle:U,noOfTicks:fe,valueColor:oe,styles:x,classNames:m,labelOrder:D,refValues:le,rtl:y,animate:l,precision:O,customLayers:G,highlightedDataPoints:Y,dimmedOpacity:L}=ye,j=c.useRef(null),h=_.useInView(j,{once:l.once,amount:l.amount}),d={top:U?N+25:N,bottom:s,left:te,right:J},H=ie-d.left-d.right,W=ae-d.top-d.bottom,[Q,P]=c.useState(void 0),[C,b]=c.useState(void 0),[S,Z]=c.useState(void 0),[V,$]=c.useState(void 0),X=o.map((t,n)=>({...t,id:D?`${t.label}`:`${n}`})),k=D||X.map(t=>`${t.id}`),g=He.linear().domain([re,E]).range([0,H]).nice(),T=We.band().domain(k).range([0,se?Math.max(W,se*X.length):ne?Math.min(W,ne*X.length):W]).paddingInner(v),a=g.ticks(fe);return i.jsxRuntimeExports.jsxs(i.jsxRuntimeExports.Fragment,{children:[i.jsxRuntimeExports.jsxs(_.motion.svg,{width:`${ie}px`,height:`${ae}px`,viewBox:`0 0 ${ie} ${ae}`,direction:"ltr",ref:j,children:[R?i.jsxRuntimeExports.jsx("defs",{children:i.jsxRuntimeExports.jsx("marker",{id:"arrow",viewBox:"0 0 10 10",refX:"10",refY:"5",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse",children:i.jsxRuntimeExports.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",className:"fill-primary-gray-600 dark:fill-primary-gray-300"})})}):null,i.jsxRuntimeExports.jsxs("g",{transform:`translate(${d.left},${d.top})`,children:[ee?i.jsxRuntimeExports.jsx(Je.XTicksAndGridLines,{values:a.filter((t,n)=>n!==0),x:a.filter((t,n)=>n!==0).map(t=>g(t)),y1:0-N,y2:W+d.bottom,styles:{gridLines:x?.xAxis?.gridLines,labels:x?.xAxis?.labels},classNames:{gridLines:m?.xAxis?.gridLines,labels:m?.xAxis?.labels},suffix:z,prefix:K,labelType:"secondary",showGridLines:!0,precision:O}):null,i.jsxRuntimeExports.jsx(Fe.AxisTitle,{x:H/2,y:0-d.top+15,style:x?.xAxis?.title,className:m?.xAxis?.title,text:U}),i.jsxRuntimeExports.jsx(Pe.YTicksAndGridLines,{y:X.map(t=>T(`${t.id}`)+T.bandwidth()/2),x1:0,x2:H,styles:{gridLines:x?.yAxis?.gridLines},classNames:{gridLines:m?.yAxis?.gridLines},labelType:"secondary",showGridLines:!0,labelPos:"vertical",precision:O}),G.filter(t=>t.position==="before").map(t=>t.layer),i.jsxRuntimeExports.jsxs(Ue.AnimatePresence,{children:[X.map(t=>i.jsxRuntimeExports.jsxs(_.motion.g,{className:"undp-viz-g-with-hover",variants:{initial:{x:0,y:T(`${t.id}`)+T.bandwidth()/2,opacity:Y.length!==0?Y.indexOf(t.label)!==-1?.85:L:.85},whileInView:{x:0,y:T(`${t.id}`)+T.bandwidth()/2,opacity:Y.length!==0?Y.indexOf(t.label)!==-1?.85:L:.85,transition:{duration:l.duration}}},initial:"initial",animate:h?"whileInView":"initial",exit:{opacity:0,transition:{duration:l.duration}},children:[xe?i.jsxRuntimeExports.jsx(Qe.YAxesLabels,{value:`${t.label}`.length<ce?`${t.label}`:`${`${t.label}`.substring(0,ce)}...`,y:0-T.bandwidth()/2,x:0-d.left,width:d.left,height:T.bandwidth(),alignment:"right",style:x?.yAxis?.labels,className:m?.yAxis?.labels,animate:l,isInView:h}):null,i.jsxRuntimeExports.jsx(_.motion.line,{y1:0,y2:0,style:{strokeWidth:pe,...x?.dataConnectors||{},opacity:I?.3:1},className:Ee.cnExports.cn("stroke-primary-gray-600 dark:stroke-primary-gray-300",m?.dataConnectors),markerEnd:R&&t.x.indexOf(Math.min(...t.x.filter(n=>n!==null)))===0?"url(#arrow)":"",markerStart:R&&t.x.indexOf(Math.min(...t.x.filter(n=>n!==null)))===t.x.length-1?"url(#arrow)":"",exit:{opacity:0,transition:{duration:l.duration}},variants:{initial:{x1:0,x2:0},whileInView:{x1:g(Math.min(...t.x.filter(n=>n!==null)))+q,x2:g(Math.max(...t.x.filter(n=>n!==null)))-q,transition:{duration:l.duration}}},initial:"initial",animate:h?"whileInView":"initial"}),t.x.map((n,f)=>i.jsxRuntimeExports.jsx(_.motion.g,{onMouseEnter:de=>{P({...t,xIndex:f}),$(de.clientY),Z(de.clientX),F?.({...t,xIndex:f})},onClick:()=>{(B||w)&&(Ve.isEqual(C,{...t,xIndex:f})&&ge?(b(void 0),B?.(void 0)):(b({...t,xIndex:f}),B&&B({...t,xIndex:f})))},onMouseMove:de=>{P({...t,xIndex:f}),$(de.clientY),Z(de.clientX)},onMouseLeave:()=>{P(void 0),Z(void 0),$(void 0),F?.(void 0)},exit:{opacity:0,transition:{duration:l.duration}},variants:{initial:{opacity:I?p[f]===I?1:.3:1},whileInView:{opacity:I?p[f]===I?1:.3:1,transition:{duration:l.duration}}},initial:"initial",animate:h?"whileInView":"initial",children:A.checkIfNullOrUndefined(n)?null:i.jsxRuntimeExports.jsxs(i.jsxRuntimeExports.Fragment,{children:[i.jsxRuntimeExports.jsx(_.motion.circle,{cy:0,r:q,style:{fill:p[f],fillOpacity:.85,stroke:p[f],strokeWidth:1,opacity:A.checkIfNullOrUndefined(n)?0:1},exit:{opacity:0,transition:{duration:l.duration}},variants:{initial:{cx:g(0),opacity:0},whileInView:{cx:g(n||0),opacity:A.checkIfNullOrUndefined(n)?0:1,transition:{duration:l.duration}}},initial:"initial",animate:h?"whileInView":"initial"}),ue?i.jsxRuntimeExports.jsx(_.motion.text,{y:0,style:{fill:oe||p[f],textAnchor:"middle",...x?.graphObjectValues||{}},dx:0,dy:0-q-3,className:Ee.cnExports.cn("graph-value text-sm font-bold",A.checkIfNullOrUndefined(n)?"0opacity-0":"opacity-100",m?.graphObjectValues),exit:{opacity:0,transition:{duration:l.duration}},variants:{initial:{x:g(0),opacity:0},whileInView:{x:g(n||0),opacity:1,transition:{duration:l.duration}}},initial:"initial",animate:h?"whileInView":"initial",children:Te.numberFormattingFunction(n,"NA",O,K,z)}):null]})},f))]},t.label)),le?i.jsxRuntimeExports.jsx(i.jsxRuntimeExports.Fragment,{children:le.map((t,n)=>i.jsxRuntimeExports.jsx(Be.RefLineX,{text:t.text,color:t.color,x:g(t.value),y1:0-d.top,y2:W+d.bottom,textSide:g(t.value)>H*.75||y?"left":"right",classNames:t.classNames,styles:t.styles,animate:l,isInView:h},n))}):null]}),G.filter(t=>t.position==="after").map(t=>t.layer)]})]}),Q&&M&&S&&V?i.jsxRuntimeExports.jsx(Ae.Tooltip,{data:Q,body:M,xPos:S,yPos:V,backgroundStyle:x?.tooltip,className:m?.tooltip}):null,w&&C!==void 0?i.jsxRuntimeExports.jsx($e.ModalExports.Modal,{open:C!==void 0,onClose:()=>{b(void 0)},children:i.jsxRuntimeExports.jsx("div",{className:"graph-modal-content m-0",dangerouslySetInnerHTML:typeof w=="string"?{__html:qe.string2HTML(w,C)}:void 0,children:typeof w=="function"?w(C):null})}):null]})}function it(ye){const{data:o,graphTitle:p,colors:z=_e.Colors.light.categoricalColors.colors,sources:K,graphDescription:v,barPadding:ue=.25,showTicks:ee=!0,leftMargin:te=100,rightMargin:ce=40,topMargin:ie=20,bottomMargin:ae=10,truncateBy:J=999,height:N,width:s,footNote:q,colorDomain:xe,colorLegendTitle:M,padding:F,backgroundColor:E=!1,radius:re=3,showLabels:B=!0,tooltip:I,relativeHeight:R,onSeriesMouseOver:pe,graphID:ne,suffix:se="",prefix:ge="",maxValue:w,minValue:U,onSeriesMouseClick:fe,graphDownload:oe=!1,dataDownload:x=!1,showValues:m=!0,sortParameter:D,arrowConnector:le=!1,connectorStrokeWidth:y=2,language:l="en",minHeight:O=0,theme:G="light",labelOrder:Y,maxBarThickness:L,maxNumberOfBars:j,minBarThickness:h,ariaLabel:d,resetSelectionOnDoubleClick:H=!0,detailsOnClick:W,axisTitle:Q,noOfTicks:P=5,valueColor:C,styles:b,classNames:S,refValues:Z,filterNA:V=!0,animate:$=!1,precision:X=2,customLayers:k=[],showColorScale:g=!0,highlightedDataPoints:T=[],dimmedOpacity:a=.3,timeline:t={enabled:!1,autoplay:!1,showOnlyActiveDate:!0}}=ye,[n,f]=c.useState(0),[de,Re]=c.useState(0),[me,Ie]=c.useState(t.autoplay),u=je.sort(Le.uniqBy(o.filter(e=>e.date!==void 0&&e.date!==null),e=>e.date).map(e=>we.parse(`${e.date}`,t.dateFormat||"yyyy",new Date).getTime()),(e,r)=>Ke.ascending(e,r)),[be,ve]=c.useState(t.autoplay?0:u.length-1),[De,Se]=c.useState(void 0),he=c.useRef(null),Ce=c.useRef(null);c.useEffect(()=>{const e=new ResizeObserver(r=>{f(s||r[0].target.clientWidth||620),Re(N||r[0].target.clientHeight||480)});return he.current&&(Re(he.current.clientHeight||480),f(he.current.clientWidth||620),s||e.observe(he.current)),()=>e.disconnect()},[s,N]),c.useEffect(()=>{const e=setInterval(()=>{ve(r=>r<u.length-1?r+1:0)},(t.speed||2)*1e3);return me||clearInterval(e),()=>clearInterval(e)},[u,me,t.speed]);const Me=je.getSliderMarks(u,be,t.showOnlyActiveDate,t.dateFormat||"yyyy");return i.jsxRuntimeExports.jsx("div",{className:`${G||"light"} flex ${s?"w-fit grow-0":"w-full grow"}`,dir:l==="he"||l==="ar"?"rtl":void 0,children:i.jsxRuntimeExports.jsx("div",{className:Ee.cnExports.cn(`${E?E===!0?"bg-primary-gray-200 dark:bg-primary-gray-650 ":"":"bg-transparent "}ml-auto mr-auto flex flex-col grow h-inherit ${l||"en"}`,S?.graphContainer),style:{...b?.graphContainer||{},...E&&E!==!0?{backgroundColor:E}:{}},id:ne,ref:Ce,"aria-label":d||`${p?`The graph shows ${p}. `:""}This is a dumbbell chart that shows comparisons between two or more data points across categories. ${v?` ${v}`:""}`,children:i.jsxRuntimeExports.jsx("div",{className:"flex grow",style:{padding:E?F||"1rem":F||0},children:i.jsxRuntimeExports.jsxs("div",{className:"flex flex-col w-full gap-4 grow justify-between",children:[p||v||oe||x?i.jsxRuntimeExports.jsx(Ge.GraphHeader,{styles:{title:b?.title,description:b?.description},classNames:{title:S?.title,description:S?.description},graphTitle:p,graphDescription:v,width:s,graphDownload:oe?Ce.current:void 0,dataDownload:x?o.map(e=>e.data).filter(e=>e!==void 0).length>0?o.map(e=>e.data).filter(e=>e!==void 0):o.filter(e=>e!==void 0):null}):null,t.enabled&&u.length>0&&Me?i.jsxRuntimeExports.jsxs("div",{className:"flex gap-6 items-center",dir:"ltr",children:[i.jsxRuntimeExports.jsx("button",{type:"button",onClick:()=>{Ie(!me)},className:"p-0 border-0 cursor-pointer bg-transparent","aria-label":me?"Click to pause animation":"Click to play animation",children:me?i.jsxRuntimeExports.jsx(Ne.Pause,{}):i.jsxRuntimeExports.jsx(Ne.Play,{})}),i.jsxRuntimeExports.jsx(je.SliderUIExports.SliderUI,{min:u[0],max:u[u.length-1],marks:Me,step:null,defaultValue:u[u.length-1],value:u[be],onChangeComplete:e=>{ve(u.indexOf(e))},onChange:e=>{ve(u.indexOf(e))},"aria-label":"Time slider. Use arrow keys to adjust selected time period."})]}):null,i.jsxRuntimeExports.jsx("div",{className:"grow flex flex-col justify-center gap-3 w-full",children:o.length===0?i.jsxRuntimeExports.jsx(ze.EmptyState,{}):i.jsxRuntimeExports.jsxs(i.jsxRuntimeExports.Fragment,{children:[g?i.jsxRuntimeExports.jsx(Xe.ColorLegendWithMouseOver,{width:s,colorDomain:xe,colors:z,colorLegendTitle:M,setSelectedColor:Se,showNAColor:!1}):null,i.jsxRuntimeExports.jsx("div",{className:"flex grow w-full justify-center leading-0",ref:he,"aria-label":"Graph area",children:(s||n)&&(N||de)?i.jsxRuntimeExports.jsx(tt,{data:D!==void 0?D==="diff"?Oe.sortBy(ke.ensureCompleteDataForDumbbellChart(o,t.dateFormat||"yyyy").filter(e=>t.enabled?e.date===we.format(new Date(u[be]),t.dateFormat||"yyyy"):e).filter(e=>V?!e.x.every(r=>r==null):e),e=>A.checkIfNullOrUndefined(e.x[e.x.length-1])||A.checkIfNullOrUndefined(e.x[0])?-1/0:e.x[e.x.length-1]-e.x[0]).reverse().filter((e,r)=>j?r<j:!0):Oe.sortBy(ke.ensureCompleteDataForDumbbellChart(o,t.dateFormat||"yyyy").filter(e=>t.enabled?e.date===we.format(new Date(u[be]),t.dateFormat||"yyyy"):e).filter(e=>V?!e.x.every(r=>r==null):e),e=>A.checkIfNullOrUndefined(e.x[D])?-1/0:e.x[D]).reverse().filter((e,r)=>j?r<j:!0):ke.ensureCompleteDataForDumbbellChart(o,t.dateFormat||"yyyy").filter(e=>V?!e.x.every(r=>r==null):e).filter((e,r)=>j?r<j:!0),dotColors:z,width:s||n,height:Math.max(O,N||(R?O?(s||n)*R>O?(s||n)*R:O:(s||n)*R:de)),suffix:se,prefix:ge,radius:re,barPadding:ue,showTicks:ee,leftMargin:te,rightMargin:ce,topMargin:ie,bottomMargin:ae,truncateBy:J,showLabels:B,showValues:m,tooltip:I,onSeriesMouseOver:pe,maxValue:A.checkIfNullOrUndefined(w)?Math.max(...o.map(e=>Math.max(...e.x.filter(r=>r!==null))))<0?0:Math.max(...o.map(e=>Math.max(...e.x.filter(r=>r!==null)))):w,minValue:A.checkIfNullOrUndefined(U)?Math.min(...o.map(e=>Math.min(...e.x.filter(r=>r!==null))))>0?0:Math.min(...o.map(e=>Math.min(...e.x.filter(r=>r!==null)))):U,onSeriesMouseClick:fe,selectedColor:De,arrowConnector:le,connectorStrokeWidth:y,maxBarThickness:L,minBarThickness:h,resetSelectionOnDoubleClick:H,detailsOnClick:W,axisTitle:Q,noOfTicks:P,valueColor:C,styles:b,classNames:S,labelOrder:Y,refValues:Z,rtl:l==="he"||l==="ar",animate:$===!0?{duration:.5,once:!0,amount:.5}:$||{duration:0,once:!0,amount:0},precision:X,customLayers:k,highlightedDataPoints:T,dimmedOpacity:a}):null})]})}),K||q?i.jsxRuntimeExports.jsx(Ye.GraphFooter,{styles:{footnote:b?.footnote,source:b?.source},classNames:{footnote:S?.footnote,source:S?.source},sources:K,footNote:q,width:s}):null]})})})})}function at(ye){const{data:o,dotColors:p,barPadding:z,showTicks:K,leftMargin:v,truncateBy:ue,width:ee,height:te,rightMargin:ce,topMargin:ie,bottomMargin:ae,radius:J,showLabels:N,tooltip:s,onSeriesMouseOver:q,maxValue:xe,minValue:M,onSeriesMouseClick:F,showValues:E,suffix:re,prefix:B,selectedColor:I,arrowConnector:R,connectorStrokeWidth:pe,maxBarThickness:ne,minBarThickness:se,resetSelectionOnDoubleClick:ge,detailsOnClick:w,axisTitle:U,noOfTicks:fe,valueColor:oe,styles:x,classNames:m,labelOrder:D,refValues:le,animate:y,precision:l,customLayers:O,highlightedDataPoints:G,dimmedOpacity:Y}=ye,L=c.useRef(null),j=_.useInView(L,{once:y.once,amount:y.amount}),h={top:ie,bottom:ae,left:U?v+30:v,right:ce},d=ee-h.left-h.right,H=te-h.top-h.bottom,[W,Q]=c.useState(void 0),[P,C]=c.useState(void 0),[b,S]=c.useState(void 0),[Z,V]=c.useState(void 0),$=o.map((a,t)=>({...a,id:D?`${a.label}`:`${t}`})),X=D||$.map(a=>`${a.id}`),k=He.linear().domain([M,xe]).range([H,0]).nice(),g=We.band().domain(X).range([0,se?Math.max(d,se*$.length):ne?Math.min(d,ne*$.length):d]).paddingInner(z),T=k.ticks(fe);return i.jsxRuntimeExports.jsxs(i.jsxRuntimeExports.Fragment,{children:[i.jsxRuntimeExports.jsxs(_.motion.svg,{width:`${ee}px`,height:`${te}px`,viewBox:`0 0 ${ee} ${te}`,direction:"ltr",ref:L,children:[R?i.jsxRuntimeExports.jsx("defs",{children:i.jsxRuntimeExports.jsx("marker",{id:"arrow",viewBox:"0 0 10 10",refX:"10",refY:"5",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse",children:i.jsxRuntimeExports.jsx("path",{d:"M 0 0 L 10 5 L 0 10 z",className:"fill-primary-gray-600 dark:fill-primary-gray-300"})})}):null,i.jsxRuntimeExports.jsxs("g",{transform:`translate(${h.left},${h.top})`,children:[i.jsxRuntimeExports.jsx(Ze.Axis,{y1:k(M<0?0:M),y2:k(M<0?0:M),x1:0-v,x2:d+h.right,label:Te.numberFormattingFunction(M<0?0:M,"NA",l,B,re),labelPos:{x:0-v,dx:0,dy:xe<0?"1em":-5,y:k(M<0?0:M)},classNames:{axis:m?.xAxis?.axis,label:m?.yAxis?.labels},styles:{axis:x?.xAxis?.axis,label:x?.yAxis?.labels}}),K?i.jsxRuntimeExports.jsx(Pe.YTicksAndGridLines,{values:T.filter(a=>a!==0),y:T.filter(a=>a!==0).map(a=>k(a)),x1:0-v,x2:d+h.right,styles:{gridLines:x?.yAxis?.gridLines,labels:x?.yAxis?.labels},classNames:{gridLines:m?.yAxis?.gridLines,labels:m?.yAxis?.labels},suffix:re,prefix:B,labelType:"secondary",showGridLines:!0,labelPos:"vertical",precision:l}):null,i.jsxRuntimeExports.jsx(Fe.AxisTitle,{x:0-v-15,y:H/2,style:x?.yAxis?.title,className:m?.yAxis?.title,text:U,rotate90:!0}),O.filter(a=>a.position==="before").map(a=>a.layer),i.jsxRuntimeExports.jsxs(Ue.AnimatePresence,{children:[$.map(a=>i.jsxRuntimeExports.jsxs(_.motion.g,{className:"undp-viz-g-with-hover",variants:{initial:{x:g(`${a.id}`)+g.bandwidth()/2,y:0,opacity:G.length!==0?G.indexOf(a.label)!==-1?.85:Y:.85},whileInView:{x:g(`${a.id}`)+g.bandwidth()/2,y:0,opacity:G.length!==0?G.indexOf(a.label)!==-1?.85:Y:.85,transition:{duration:y.duration}}},initial:"initial",animate:j?"whileInView":"initial",exit:{opacity:0,transition:{duration:y.duration}},children:[N?i.jsxRuntimeExports.jsx(et.XAxesLabels,{value:`${a.label}`.length<ue?`${a.label}`:`${`${a.label}`.substring(0,ue)}...`,y:H+5,x:0-g.bandwidth()/2,width:g.bandwidth(),height:h.bottom,style:x?.xAxis?.labels,className:m?.xAxis?.labels,alignment:"top",animate:y,isInView:j}):null,i.jsxRuntimeExports.jsx(_.motion.line,{x1:0,x2:0,style:{strokeWidth:pe,...x?.dataConnectors||{},opacity:I?.3:1},className:Ee.cnExports.cn("stroke-primary-gray-600 dark:stroke-primary-gray-300",m?.dataConnectors),markerEnd:R&&a.x.indexOf(Math.min(...a.x.filter(t=>t!==null)))===0?"url(#arrow)":"",markerStart:R&&a.x.indexOf(Math.min(...a.x.filter(t=>t!==null)))===a.x.length-1?"url(#arrow)":"",exit:{opacity:0,transition:{duration:y.duration}},variants:{initial:{y1:0,y2:0},whileInView:{y1:k(Math.min(...a.x.filter(t=>t!==null)))+J,y2:k(Math.max(...a.x.filter(t=>t!==null)))-J,transition:{duration:y.duration}}},initial:"initial",animate:j?"whileInView":"initial"}),a.x.map((t,n)=>i.jsxRuntimeExports.jsx(_.motion.g,{onMouseEnter:f=>{Q({...a,xIndex:n}),V(f.clientY),S(f.clientX),q?.({...a,xIndex:n})},onClick:()=>{(F||w)&&(Ve.isEqual(P,{...a,xIndex:n})&&ge?(C(void 0),F?.(void 0)):(C({...a,xIndex:n}),F&&F({...a,xIndex:n})))},onMouseMove:f=>{Q({...a,xIndex:n}),V(f.clientY),S(f.clientX)},onMouseLeave:()=>{Q(void 0),S(void 0),V(void 0),q?.(void 0)},exit:{opacity:0,transition:{duration:y.duration}},variants:{initial:{opacity:I?p[n]===I?1:.3:1},whileInView:{opacity:I?p[n]===I?1:.3:1,transition:{duration:y.duration}}},initial:"initial",animate:j?"whileInView":"initial",children:A.checkIfNullOrUndefined(t)?null:i.jsxRuntimeExports.jsxs(i.jsxRuntimeExports.Fragment,{children:[i.jsxRuntimeExports.jsx(_.motion.circle,{cx:0,r:J,style:{fill:p[n],fillOpacity:.85,stroke:p[n],strokeWidth:1},exit:{opacity:0,transition:{duration:y.duration}},variants:{initial:{cy:k(0),opacity:0},whileInView:{cy:k(t||0),opacity:A.checkIfNullOrUndefined(t)?0:1,transition:{duration:y.duration}}},initial:"initial",animate:j?"whileInView":"initial"}),E?i.jsxRuntimeExports.jsx(_.motion.text,{x:0,style:{fill:oe||p[n],textAnchor:"start",...x?.graphObjectValues||{}},className:Ee.cnExports.cn("graph-value text-sm font-bold",A.checkIfNullOrUndefined(t)?"opacity-0":"opacity-100",m?.graphObjectValues),dx:J+3,dy:"0.33em",exit:{opacity:0,transition:{duration:y.duration}},variants:{initial:{y:k(0),opacity:0},whileInView:{y:k(t||0),opacity:1,transition:{duration:y.duration}}},initial:"initial",animate:j?"whileInView":"initial",children:Te.numberFormattingFunction(t,"NA",l,B,re)}):null]})},n))]},a.label)),le?i.jsxRuntimeExports.jsx(i.jsxRuntimeExports.Fragment,{children:le.map((a,t)=>i.jsxRuntimeExports.jsx(Be.RefLineY,{text:a.text,color:a.color,y:k(a.value),x1:0-v,x2:d+h.right,classNames:a.classNames,styles:a.styles,animate:y,isInView:j},t))}):null]}),O.filter(a=>a.position==="after").map(a=>a.layer)]})]}),W&&s&&b&&Z?i.jsxRuntimeExports.jsx(Ae.Tooltip,{data:W,body:s,xPos:b,yPos:Z,backgroundStyle:x?.tooltip,className:m?.tooltip}):null,w&&P!==void 0?i.jsxRuntimeExports.jsx($e.ModalExports.Modal,{open:P!==void 0,onClose:()=>{C(void 0)},children:i.jsxRuntimeExports.jsx("div",{className:"graph-modal-content m-0",dangerouslySetInnerHTML:typeof w=="string"?{__html:qe.string2HTML(w,P)}:void 0,children:typeof w=="function"?w(P):null})}):null]})}function rt(ye){const{data:o,graphTitle:p,colors:z=_e.Colors.light.categoricalColors.colors,sources:K,graphDescription:v,barPadding:ue=.25,showTicks:ee=!0,leftMargin:te=20,rightMargin:ce=20,topMargin:ie=20,bottomMargin:ae=25,truncateBy:J=999,height:N,width:s,footNote:q,colorDomain:xe,colorLegendTitle:M,padding:F,backgroundColor:E=!1,radius:re=3,tooltip:B,showLabels:I=!0,relativeHeight:R,onSeriesMouseOver:pe,graphID:ne,suffix:se="",prefix:ge="",maxValue:w,minValue:U,onSeriesMouseClick:fe,graphDownload:oe=!1,dataDownload:x=!1,showValues:m=!0,sortParameter:D,arrowConnector:le=!1,connectorStrokeWidth:y=2,language:l="en",minHeight:O=0,theme:G="light",maxBarThickness:Y,maxNumberOfBars:L,minBarThickness:j,ariaLabel:h,resetSelectionOnDoubleClick:d=!0,detailsOnClick:H,axisTitle:W,noOfTicks:Q=5,valueColor:P,styles:C,classNames:b,labelOrder:S,refValues:Z,filterNA:V=!0,animate:$=!1,precision:X=2,customLayers:k=[],showColorScale:g=!0,highlightedDataPoints:T=[],dimmedOpacity:a=.3,timeline:t={enabled:!1,autoplay:!1,showOnlyActiveDate:!0}}=ye,[n,f]=c.useState(0),[de,Re]=c.useState(0),[me,Ie]=c.useState(t.autoplay),u=je.sort(Le.uniqBy(o.filter(e=>e.date!==void 0&&e.date!==null),e=>e.date).map(e=>we.parse(`${e.date}`,t.dateFormat||"yyyy",new Date).getTime()),(e,r)=>Ke.ascending(e,r)),[be,ve]=c.useState(t.autoplay?0:u.length-1),[De,Se]=c.useState(void 0),he=c.useRef(null),Ce=c.useRef(null);c.useEffect(()=>{const e=new ResizeObserver(r=>{f(s||r[0].target.clientWidth||620),Re(N||r[0].target.clientHeight||480)});return he.current&&(Re(he.current.clientHeight||480),f(he.current.clientWidth||620),s||e.observe(he.current)),()=>e.disconnect()},[s,N]),c.useEffect(()=>{const e=setInterval(()=>{ve(r=>r<u.length-1?r+1:0)},(t.speed||2)*1e3);return me||clearInterval(e),()=>clearInterval(e)},[u,me,t.speed]);const Me=je.getSliderMarks(u,be,t.showOnlyActiveDate,t.dateFormat||"yyyy");return i.jsxRuntimeExports.jsx("div",{className:`${G||"light"} flex ${s?"w-fit grow-0":"w-full grow"}`,dir:l==="he"||l==="ar"?"rtl":void 0,children:i.jsxRuntimeExports.jsx("div",{className:Ee.cnExports.cn(`${E?E===!0?"bg-primary-gray-200 dark:bg-primary-gray-650 ":"":"bg-transparent "}ml-auto mr-auto flex flex-col grow h-inherit ${l||"en"}`,b?.graphContainer),style:{...C?.graphContainer||{},...E&&E!==!0?{backgroundColor:E}:{}},id:ne,ref:Ce,"aria-label":h||`${p?`The graph shows ${p}. `:""}This is a dumbbell chart that shows comparisons between two or more data points across categories. ${v?` ${v}`:""}`,children:i.jsxRuntimeExports.jsx("div",{className:"flex grow",style:{padding:E?F||"1rem":F||0},children:i.jsxRuntimeExports.jsxs("div",{className:"flex flex-col w-full gap-4 grow justify-between",children:[p||v||oe||x?i.jsxRuntimeExports.jsx(Ge.GraphHeader,{styles:{title:C?.title,description:C?.description},classNames:{title:b?.title,description:b?.description},graphTitle:p,graphDescription:v,width:s,graphDownload:oe?Ce.current:void 0,dataDownload:x?o.map(e=>e.data).filter(e=>e!==void 0).length>0?o.map(e=>e.data).filter(e=>e!==void 0):o.filter(e=>e!==void 0):null}):null,t.enabled&&u.length>0&&Me?i.jsxRuntimeExports.jsxs("div",{className:"flex gap-6 items-center",dir:"ltr",children:[i.jsxRuntimeExports.jsx("button",{type:"button",onClick:()=>{Ie(!me)},className:"p-0 border-0 cursor-pointer bg-transparent","aria-label":me?"Click to pause animation":"Click to play animation",children:me?i.jsxRuntimeExports.jsx(Ne.Pause,{}):i.jsxRuntimeExports.jsx(Ne.Play,{})}),i.jsxRuntimeExports.jsx(je.SliderUIExports.SliderUI,{min:u[0],max:u[u.length-1],marks:Me,step:null,defaultValue:u[u.length-1],value:u[be],onChangeComplete:e=>{ve(u.indexOf(e))},onChange:e=>{ve(u.indexOf(e))},"aria-label":"Time slider. Use arrow keys to adjust selected time period."})]}):null,i.jsxRuntimeExports.jsx("div",{className:"grow flex flex-col justify-center gap-3 w-full",children:o.length===0?i.jsxRuntimeExports.jsx(ze.EmptyState,{}):i.jsxRuntimeExports.jsxs(i.jsxRuntimeExports.Fragment,{children:[g?i.jsxRuntimeExports.jsx(Xe.ColorLegendWithMouseOver,{width:s,colorDomain:xe,colors:z,colorLegendTitle:M,setSelectedColor:Se,showNAColor:!1}):null,i.jsxRuntimeExports.jsx("div",{className:"flex grow w-full justify-center leading-0",ref:he,"aria-label":"Graph area",children:(s||n)&&(N||de)?i.jsxRuntimeExports.jsx(at,{data:D!==void 0?D==="diff"?Oe.sortBy(ke.ensureCompleteDataForDumbbellChart(o,t.dateFormat||"yyyy").filter(e=>t.enabled?e.date===we.format(new Date(u[be]),t.dateFormat||"yyyy"):e).filter(e=>V?!e.x.every(r=>r==null):e),e=>A.checkIfNullOrUndefined(e.x[e.x.length-1])||A.checkIfNullOrUndefined(e.x[0])?-1/0:e.x[e.x.length-1]-e.x[0]).filter((e,r)=>L?r<L:!0):Oe.sortBy(ke.ensureCompleteDataForDumbbellChart(o,t.dateFormat||"yyyy").filter(e=>t.enabled?e.date===we.format(new Date(u[be]),t.dateFormat||"yyyy"):e).filter(e=>V?!e.x.every(r=>r==null):e),e=>A.checkIfNullOrUndefined(e.x[D])?-1/0:e.x[D]).filter((e,r)=>L?r<L:!0):ke.ensureCompleteDataForDumbbellChart(o,t.dateFormat||"yyyy").filter(e=>V?!e.x.every(r=>r==null):e).filter((e,r)=>L?r<L:!0),dotColors:z,width:s||n,height:Math.max(O,N||(R?O?(s||n)*R>O?(s||n)*R:O:(s||n)*R:de)),radius:re,barPadding:ue,showTicks:ee,leftMargin:te,rightMargin:ce,topMargin:ie,bottomMargin:ae,truncateBy:J,showLabels:I,showValues:m,tooltip:B,suffix:se,prefix:ge,onSeriesMouseOver:pe,maxValue:A.checkIfNullOrUndefined(w)?Math.max(...o.map(e=>Math.max(...e.x.filter(r=>r!==null))))<0?0:Math.max(...o.map(e=>Math.max(...e.x.filter(r=>r!==null)))):w,minValue:A.checkIfNullOrUndefined(U)?Math.min(...o.map(e=>Math.min(...e.x.filter(r=>r!==null))))>0?0:Math.min(...o.map(e=>Math.min(...e.x.filter(r=>r!==null)))):U,onSeriesMouseClick:fe,selectedColor:De,arrowConnector:le,connectorStrokeWidth:y,maxBarThickness:Y,minBarThickness:j,resetSelectionOnDoubleClick:d,detailsOnClick:H,axisTitle:W,noOfTicks:Q,valueColor:P,styles:C,classNames:b,labelOrder:S,refValues:Z,animate:$===!0?{duration:.5,once:!0,amount:.5}:$||{duration:0,once:!0,amount:0},precision:X,customLayers:k,highlightedDataPoints:T,dimmedOpacity:a}):null})]})}),K||q?i.jsxRuntimeExports.jsx(Ye.GraphFooter,{styles:{footnote:C?.footnote,source:C?.source},classNames:{footnote:b?.footnote,source:b?.source},sources:K,footNote:q,width:s}):null]})})})})}function nt(ye){const{data:o,graphTitle:p,colors:z,sources:K,graphDescription:v,barPadding:ue,showTicks:ee,leftMargin:te,rightMargin:ce,topMargin:ie,bottomMargin:ae,truncateBy:J,height:N,width:s,footNote:q,colorDomain:xe,colorLegendTitle:M,padding:F,backgroundColor:E,radius:re,tooltip:B,showLabels:I,relativeHeight:R,onSeriesMouseOver:pe,graphID:ne,suffix:se,prefix:ge,maxValue:w,minValue:U,onSeriesMouseClick:fe,graphDownload:oe,dataDownload:x,showValues:m,sortParameter:D,arrowConnector:le,connectorStrokeWidth:y,language:l,minHeight:O,theme:G,maxBarThickness:Y,maxNumberOfBars:L,minBarThickness:j,ariaLabel:h,resetSelectionOnDoubleClick:d,detailsOnClick:H,axisTitle:W,noOfTicks:Q,valueColor:P,orientation:C="vertical",styles:b,classNames:S,labelOrder:Z,refValues:V,filterNA:$,animate:X,precision:k,showColorScale:g,customLayers:T,highlightedDataPoints:a,dimmedOpacity:t,timeline:n}=ye;return C==="vertical"?i.jsxRuntimeExports.jsx(rt,{data:o,graphTitle:p,colors:z,sources:K,graphDescription:v,barPadding:ue,showTicks:ee,leftMargin:te,rightMargin:ce,topMargin:ie,bottomMargin:ae,truncateBy:J,height:N,width:s,footNote:q,colorDomain:xe,colorLegendTitle:M,padding:F,backgroundColor:E,radius:re,tooltip:B,showLabels:I,relativeHeight:R,onSeriesMouseOver:pe,graphID:ne,suffix:se,prefix:ge,maxValue:w,minValue:U,onSeriesMouseClick:fe,graphDownload:oe,dataDownload:x,showValues:m,sortParameter:D,arrowConnector:le,connectorStrokeWidth:y,language:l,minHeight:O,theme:G,maxBarThickness:Y,maxNumberOfBars:L,minBarThickness:j,ariaLabel:h,resetSelectionOnDoubleClick:d,styles:b,detailsOnClick:H,axisTitle:W,noOfTicks:Q,labelOrder:Z,valueColor:P,classNames:S,refValues:V,filterNA:$,animate:X,precision:k,showColorScale:g,customLayers:T,highlightedDataPoints:a,dimmedOpacity:t,timeline:n}):i.jsxRuntimeExports.jsx(it,{data:o,graphTitle:p,colors:z,sources:K,graphDescription:v,barPadding:ue,showTicks:ee,leftMargin:te,rightMargin:ce,topMargin:ie,bottomMargin:ae,truncateBy:J,height:N,width:s,footNote:q,colorDomain:xe,colorLegendTitle:M,padding:F,backgroundColor:E,radius:re,tooltip:B,showLabels:I,relativeHeight:R,onSeriesMouseOver:pe,graphID:ne,suffix:se,prefix:ge,maxValue:w,minValue:U,onSeriesMouseClick:fe,graphDownload:oe,dataDownload:x,showValues:m,sortParameter:D,arrowConnector:le,connectorStrokeWidth:y,language:l,minHeight:O,theme:G,maxBarThickness:Y,maxNumberOfBars:L,minBarThickness:j,ariaLabel:h,resetSelectionOnDoubleClick:d,styles:b,detailsOnClick:H,axisTitle:W,noOfTicks:Q,valueColor:P,classNames:S,labelOrder:Z,refValues:V,filterNA:$,animate:X,precision:k,showColorScale:g,customLayers:T,highlightedDataPoints:a,dimmedOpacity:t,timeline:n})}exports.DumbbellChart=nt;
2
+ //# sourceMappingURL=DumbbellChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DumbbellChart.js","sources":["../src/Components/Graphs/DumbbellChart/Horizontal/Graph.tsx","../src/Components/Graphs/DumbbellChart/Horizontal/index.tsx","../src/Components/Graphs/DumbbellChart/Vertical/Graph.tsx","../src/Components/Graphs/DumbbellChart/Vertical/index.tsx","../src/Components/Graphs/DumbbellChart/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 DumbbellChartDataType,\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 { XTicksAndGridLines } from '@/Components/Elements/Axes/XTicksAndGridLines';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { YAxesLabels } from '@/Components/Elements/Axes/YAxesLabels';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { RefLineX } from '@/Components/Elements/ReferenceLine';\r\n\r\ninterface Props {\r\n data: DumbbellChartDataType[];\r\n dotColors: 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 truncateBy: number;\r\n width: number;\r\n height: number;\r\n radius: number;\r\n showLabels: boolean;\r\n selectedColor?: string;\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 arrowConnector: boolean;\r\n connectorStrokeWidth: number;\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 axisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n labelOrder?: string[];\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n refValues?: ReferenceDataType[];\r\n rtl: boolean;\r\n animate: AnimateDataType;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n highlightedDataPoints: (string | number)[];\r\n dimmedOpacity: number;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n data,\r\n dotColors,\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 rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n radius,\r\n showLabels,\r\n tooltip,\r\n onSeriesMouseOver,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n selectedColor,\r\n arrowConnector,\r\n connectorStrokeWidth,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n axisTitle,\r\n noOfTicks,\r\n valueColor,\r\n styles,\r\n classNames,\r\n labelOrder,\r\n refValues,\r\n rtl,\r\n animate,\r\n precision,\r\n customLayers,\r\n highlightedDataPoints,\r\n dimmedOpacity,\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: axisTitle ? 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 // 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\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 = 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 minBarThickness\r\n ? Math.max(graphHeight, minBarThickness * dataWithId.length)\r\n : maxBarThickness\r\n ? Math.min(graphHeight, maxBarThickness * dataWithId.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 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 {arrowConnector ? (\r\n <defs>\r\n <marker\r\n id='arrow'\r\n viewBox='0 0 10 10'\r\n refX='10'\r\n refY='5'\r\n markerWidth='6'\r\n markerHeight='6'\r\n orient='auto-start-reverse'\r\n >\r\n <path\r\n d='M 0 0 L 10 5 L 0 10 z'\r\n className='fill-primary-gray-600 dark:fill-primary-gray-300'\r\n />\r\n </marker>\r\n </defs>\r\n ) : null}\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n {showTicks ? (\r\n <XTicksAndGridLines\r\n values={xTicks.filter((_d, i) => i !== 0)}\r\n x={xTicks.filter((_d, i) => i !== 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={axisTitle}\r\n />\r\n <YTicksAndGridLines\r\n y={dataWithId.map(d => (y(`${d.id}`) as number) + y.bandwidth() / 2)}\r\n x1={0}\r\n x2={graphWidth}\r\n styles={{ gridLines: styles?.yAxis?.gridLines }}\r\n classNames={{ gridLines: classNames?.yAxis?.gridLines }}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {dataWithId.map(d => (\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 x: 0,\r\n y: (y(`${d.id}`) as number) + y.bandwidth() / 2,\r\n opacity:\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 x: 0,\r\n y: (y(`${d.id}`) as number) + y.bandwidth() / 2,\r\n opacity:\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 >\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 - y.bandwidth() / 2}\r\n x={0 - margin.left}\r\n width={margin.left}\r\n height={y.bandwidth()}\r\n alignment='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 <motion.line\r\n y1={0}\r\n y2={0}\r\n style={{\r\n strokeWidth: connectorStrokeWidth,\r\n ...(styles?.dataConnectors || {}),\r\n opacity: selectedColor ? 0.3 : 1,\r\n }}\r\n className={cn(\r\n 'stroke-primary-gray-600 dark:stroke-primary-gray-300',\r\n classNames?.dataConnectors,\r\n )}\r\n markerEnd={\r\n arrowConnector &&\r\n d.x.indexOf(Math.min(...d.x.filter(el => el !== null)) as number) === 0\r\n ? 'url(#arrow)'\r\n : ''\r\n }\r\n markerStart={\r\n arrowConnector &&\r\n d.x.indexOf(Math.min(...d.x.filter(el => el !== null)) as number) ===\r\n d.x.length - 1\r\n ? 'url(#arrow)'\r\n : ''\r\n }\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n variants={{\r\n initial: {\r\n x1: 0,\r\n x2: 0,\r\n },\r\n whileInView: {\r\n x1: x(Math.min(...d.x.filter(el => el !== null))) + radius,\r\n x2: x(Math.max(...d.x.filter(el => el !== null)) as number) - radius,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n {d.x.map((el, j) => (\r\n <motion.g\r\n key={j}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, xIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, xIndex: j });\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, xIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, xIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, xIndex: j });\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, xIndex: 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 exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor ? (dotColors[j] === selectedColor ? 1 : 0.3) : 1,\r\n },\r\n whileInView: {\r\n opacity: selectedColor ? (dotColors[j] === selectedColor ? 1 : 0.3) : 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n >\r\n {checkIfNullOrUndefined(el) ? null : (\r\n <>\r\n <motion.circle\r\n cy={0}\r\n r={radius}\r\n style={{\r\n fill: dotColors[j],\r\n fillOpacity: 0.85,\r\n stroke: dotColors[j],\r\n strokeWidth: 1,\r\n opacity: checkIfNullOrUndefined(el) ? 0 : 1,\r\n }}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n variants={{\r\n initial: { cx: x(0), opacity: 0 },\r\n whileInView: {\r\n cx: x(el || 0),\r\n opacity: checkIfNullOrUndefined(el) ? 0 : 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n {showValues ? (\r\n <motion.text\r\n y={0}\r\n style={{\r\n fill: valueColor || dotColors[j],\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n dx={0}\r\n dy={0 - radius - 3}\r\n className={cn(\r\n 'graph-value text-sm font-bold',\r\n checkIfNullOrUndefined(el) ? '0opacity-0' : 'opacity-100',\r\n classNames?.graphObjectValues,\r\n )}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n variants={{\r\n initial: { x: x(0), opacity: 0 },\r\n whileInView: {\r\n x: x(el || 0),\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 >\r\n {numberFormattingFunction(el, 'NA', precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </>\r\n )}\r\n </motion.g>\r\n ))}\r\n </motion.g>\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 sortBy from 'lodash.sortby';\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 uniqBy from 'lodash.uniqby';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n DumbbellChartDataType,\r\n Languages,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n ReferenceDataType,\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 { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { ensureCompleteDataForDumbbellChart } from '@/Utils/ensureCompleteData';\r\n\r\ninterface Props {\r\n data: DumbbellChartDataType[];\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 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 topMargin?: number;\r\n bottomMargin?: number;\r\n truncateBy?: number;\r\n colorDomain: string[];\r\n colorLegendTitle?: string;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n radius?: number;\r\n relativeHeight?: number;\r\n showLabels?: boolean;\r\n showColorScale?: 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 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 sortParameter?: number | 'diff';\r\n arrowConnector?: boolean;\r\n connectorStrokeWidth?: number;\r\n language?: Languages;\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 axisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n labelOrder?: string[];\r\n refValues?: ReferenceDataType[];\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n highlightedDataPoints?: (string | number)[];\r\n dimmedOpacity?: number;\r\n timeline?: TimelineDataType;\r\n}\r\n\r\nexport function HorizontalDumbbellChart(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 topMargin = 20,\r\n bottomMargin = 10,\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 radius = 3,\r\n showLabels = true,\r\n tooltip,\r\n relativeHeight,\r\n onSeriesMouseOver,\r\n graphID,\r\n suffix = '',\r\n prefix = '',\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n showValues = true,\r\n sortParameter,\r\n arrowConnector = false,\r\n connectorStrokeWidth = 2,\r\n language = 'en',\r\n minHeight = 0,\r\n theme = 'light',\r\n labelOrder,\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n detailsOnClick,\r\n axisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n refValues,\r\n filterNA = true,\r\n animate = false,\r\n precision = 2,\r\n customLayers = [],\r\n showColorScale = true,\r\n highlightedDataPoints = [],\r\n dimmedOpacity = 0.3,\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\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(\r\n data.filter(d => d.date !== undefined && d.date !== null),\r\n d => d.date,\r\n ).map(d => parse(`${d.date}`, timeline.dateFormat || 'yyyy', new Date()).getTime()),\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 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 `${\r\n graphTitle ? `The graph shows ${graphTitle}. ` : ''\r\n }This is a dumbbell chart that shows comparisons between two or more data points across categories. ${\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\r\n className='flex grow w-full justify-center 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 sortParameter !== undefined\r\n ? sortParameter === 'diff'\r\n ? sortBy(\r\n ensureCompleteDataForDumbbellChart(\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.x.every(item => item == null) : d)),\r\n d =>\r\n checkIfNullOrUndefined(d.x[d.x.length - 1]) ||\r\n checkIfNullOrUndefined(d.x[0])\r\n ? -Infinity\r\n : (d.x[d.x.length - 1] as number) - (d.x[0] as number),\r\n )\r\n .reverse()\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : sortBy(\r\n ensureCompleteDataForDumbbellChart(\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.x.every(item => item == null) : d)),\r\n d =>\r\n checkIfNullOrUndefined(d.x[sortParameter])\r\n ? -Infinity\r\n : d.x[sortParameter],\r\n )\r\n .reverse()\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : ensureCompleteDataForDumbbellChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d => (filterNA ? !d.x.every(item => item == null) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n }\r\n dotColors={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 radius={radius}\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 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.map(d => Math.max(...d.x.filter(el => el !== null))),\r\n ) < 0\r\n ? 0\r\n : Math.max(\r\n ...data.map(d => Math.max(...d.x.filter(el => el !== null))),\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 => Math.min(...d.x.filter(el => el !== null))),\r\n ) > 0\r\n ? 0\r\n : Math.min(\r\n ...data.map(d => Math.min(...d.x.filter(el => el !== null))),\r\n )\r\n }\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n selectedColor={selectedColor}\r\n arrowConnector={arrowConnector}\r\n connectorStrokeWidth={connectorStrokeWidth}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n axisTitle={axisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n styles={styles}\r\n classNames={classNames}\r\n labelOrder={labelOrder}\r\n refValues={refValues}\r\n rtl={language === 'he' || language === 'ar'}\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 highlightedDataPoints={highlightedDataPoints}\r\n dimmedOpacity={dimmedOpacity}\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 {\r\n AnimateDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n DumbbellChartDataType,\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 { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { RefLineY } from '@/Components/Elements/ReferenceLine';\r\n\r\ninterface Props {\r\n data: DumbbellChartDataType[];\r\n dotColors: 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 width: number;\r\n height: number;\r\n radius: number;\r\n showLabels: 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 maxValue: number;\r\n minValue: number;\r\n suffix: string;\r\n prefix: string;\r\n showValues: boolean;\r\n selectedColor?: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n arrowConnector: boolean;\r\n connectorStrokeWidth: number;\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 axisTitle?: string;\r\n noOfTicks: number;\r\n valueColor?: string;\r\n labelOrder?: string[];\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n refValues?: ReferenceDataType[];\r\n animate: AnimateDataType;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n highlightedDataPoints: (string | number)[];\r\n dimmedOpacity: number;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n data,\r\n dotColors,\r\n barPadding,\r\n showTicks,\r\n leftMargin,\r\n truncateBy,\r\n width,\r\n height,\r\n rightMargin,\r\n topMargin,\r\n bottomMargin,\r\n radius,\r\n showLabels,\r\n tooltip,\r\n onSeriesMouseOver,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n showValues,\r\n suffix,\r\n prefix,\r\n selectedColor,\r\n arrowConnector,\r\n connectorStrokeWidth,\r\n maxBarThickness,\r\n minBarThickness,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n axisTitle,\r\n noOfTicks,\r\n valueColor,\r\n styles,\r\n classNames,\r\n labelOrder,\r\n refValues,\r\n animate,\r\n precision,\r\n customLayers,\r\n highlightedDataPoints,\r\n dimmedOpacity,\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: axisTitle ? leftMargin + 30 : 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 // 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\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 y = scaleLinear().domain([minValue, maxValue]).range([graphHeight, 0]).nice();\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * dataWithId.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * dataWithId.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n\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 {arrowConnector ? (\r\n <defs>\r\n <marker\r\n id='arrow'\r\n viewBox='0 0 10 10'\r\n refX='10'\r\n refY='5'\r\n markerWidth='6'\r\n markerHeight='6'\r\n orient='auto-start-reverse'\r\n >\r\n <path\r\n d='M 0 0 L 10 5 L 0 10 z'\r\n className='fill-primary-gray-600 dark:fill-primary-gray-300'\r\n />\r\n </marker>\r\n </defs>\r\n ) : null}\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 'NA',\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={axisTitle}\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 <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n variants={{\r\n initial: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: 0,\r\n opacity:\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 x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: 0,\r\n opacity:\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 >\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={graphHeight + 5}\r\n x={0 - x.bandwidth() / 2}\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.line\r\n x1={0}\r\n x2={0}\r\n style={{\r\n strokeWidth: connectorStrokeWidth,\r\n ...(styles?.dataConnectors || {}),\r\n opacity: selectedColor ? 0.3 : 1,\r\n }}\r\n className={cn(\r\n 'stroke-primary-gray-600 dark:stroke-primary-gray-300',\r\n classNames?.dataConnectors,\r\n )}\r\n markerEnd={\r\n arrowConnector && d.x.indexOf(Math.min(...d.x.filter(el => el !== null))) === 0\r\n ? 'url(#arrow)'\r\n : ''\r\n }\r\n markerStart={\r\n arrowConnector &&\r\n d.x.indexOf(Math.min(...d.x.filter(el => el !== null))) === d.x.length - 1\r\n ? 'url(#arrow)'\r\n : ''\r\n }\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n variants={{\r\n initial: {\r\n y1: 0,\r\n y2: 0,\r\n },\r\n whileInView: {\r\n y1: y(Math.min(...d.x.filter(el => el !== null))) + radius,\r\n y2: y(Math.max(...d.x.filter(el => el !== null))) - radius,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n {d.x.map((el, j) => (\r\n <motion.g\r\n key={j}\r\n onMouseEnter={event => {\r\n setMouseOverData({ ...d, xIndex: j });\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.({ ...d, xIndex: j });\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (\r\n isEqual(mouseClickData, { ...d, xIndex: j }) &&\r\n resetSelectionOnDoubleClick\r\n ) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData({ ...d, xIndex: j });\r\n if (onSeriesMouseClick) onSeriesMouseClick({ ...d, xIndex: j });\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData({ ...d, xIndex: 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 exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor ? (dotColors[j] === selectedColor ? 1 : 0.3) : 1,\r\n },\r\n whileInView: {\r\n opacity: selectedColor ? (dotColors[j] === selectedColor ? 1 : 0.3) : 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n >\r\n {checkIfNullOrUndefined(el) ? null : (\r\n <>\r\n <motion.circle\r\n cx={0}\r\n r={radius}\r\n style={{\r\n fill: dotColors[j],\r\n fillOpacity: 0.85,\r\n stroke: dotColors[j],\r\n strokeWidth: 1,\r\n }}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n variants={{\r\n initial: { cy: y(0), opacity: 0 },\r\n whileInView: {\r\n cy: y(el || 0),\r\n opacity: checkIfNullOrUndefined(el) ? 0 : 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n />\r\n {showValues ? (\r\n <motion.text\r\n x={0}\r\n style={{\r\n fill: valueColor || dotColors[j],\r\n textAnchor: 'start',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn(\r\n 'graph-value text-sm font-bold',\r\n checkIfNullOrUndefined(el) ? 'opacity-0' : 'opacity-100',\r\n classNames?.graphObjectValues,\r\n )}\r\n dx={radius + 3}\r\n dy='0.33em'\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n variants={{\r\n initial: { y: y(0), opacity: 0 },\r\n whileInView: {\r\n y: y(el || 0),\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 >\r\n {numberFormattingFunction(el, 'NA', precision, prefix, suffix)}\r\n </motion.text>\r\n ) : null}\r\n </>\r\n )}\r\n </motion.g>\r\n ))}\r\n </motion.g>\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 sortBy from 'lodash.sortby';\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 uniqBy from 'lodash.uniqby';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n DumbbellChartDataType,\r\n Languages,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n ReferenceDataType,\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 { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { getSliderMarks } from '@/Utils/getSliderMarks';\r\nimport { Pause, Play } from '@/Components/Icons';\r\nimport { ensureCompleteDataForDumbbellChart } from '@/Utils/ensureCompleteData';\r\n\r\ninterface Props {\r\n data: DumbbellChartDataType[];\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 leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n truncateBy?: number;\r\n colorDomain: string[];\r\n colorLegendTitle?: string;\r\n backgroundColor?: string | boolean;\r\n padding?: string;\r\n radius?: number;\r\n relativeHeight?: number;\r\n showValues?: boolean;\r\n showLabels?: 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 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 suffix?: string;\r\n prefix?: string;\r\n sortParameter?: number | 'diff';\r\n arrowConnector?: boolean;\r\n connectorStrokeWidth?: number;\r\n language?: Languages;\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 axisTitle?: string;\r\n noOfTicks?: number;\r\n valueColor?: string;\r\n labelOrder?: string[];\r\n showColorScale?: boolean;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n refValues?: ReferenceDataType[];\r\n filterNA?: boolean;\r\n animate?: boolean | AnimateDataType;\r\n precision?: number;\r\n customLayers?: CustomLayerDataType[];\r\n highlightedDataPoints?: (string | number)[];\r\n dimmedOpacity?: number;\r\n timeline?: TimelineDataType;\r\n}\r\n\r\nexport function VerticalDumbbellChart(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 height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n backgroundColor = false,\r\n radius = 3,\r\n tooltip,\r\n showLabels = true,\r\n relativeHeight,\r\n onSeriesMouseOver,\r\n graphID,\r\n suffix = '',\r\n prefix = '',\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n showValues = true,\r\n sortParameter,\r\n arrowConnector = false,\r\n connectorStrokeWidth = 2,\r\n language = 'en',\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 axisTitle,\r\n noOfTicks = 5,\r\n valueColor,\r\n styles,\r\n classNames,\r\n labelOrder,\r\n refValues,\r\n filterNA = true,\r\n animate = false,\r\n precision = 2,\r\n customLayers = [],\r\n showColorScale = true,\r\n highlightedDataPoints = [],\r\n dimmedOpacity = 0.3,\r\n timeline = { enabled: false, autoplay: false, showOnlyActiveDate: true },\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(\r\n data.filter(d => d.date !== undefined && d.date !== null),\r\n d => d.date,\r\n ).map(d => parse(`${d.date}`, timeline.dateFormat || 'yyyy', new Date()).getTime()),\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 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 `${\r\n graphTitle ? `The graph shows ${graphTitle}. ` : ''\r\n }This is a dumbbell chart that shows comparisons between two or more data points across categories. ${\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\r\n className='flex grow w-full justify-center 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 sortParameter !== undefined\r\n ? sortParameter === 'diff'\r\n ? sortBy(\r\n ensureCompleteDataForDumbbellChart(\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.x.every(item => item == null) : d)),\r\n d =>\r\n checkIfNullOrUndefined(d.x[d.x.length - 1]) ||\r\n checkIfNullOrUndefined(d.x[0])\r\n ? -Infinity\r\n : (d.x[d.x.length - 1] as number) - (d.x[0] as number),\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : sortBy(\r\n ensureCompleteDataForDumbbellChart(\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.x.every(item => item == null) : d)),\r\n d =>\r\n checkIfNullOrUndefined(d.x[sortParameter])\r\n ? -Infinity\r\n : d.x[sortParameter],\r\n ).filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n : ensureCompleteDataForDumbbellChart(\r\n data,\r\n timeline.dateFormat || 'yyyy',\r\n )\r\n .filter(d => (filterNA ? !d.x.every(item => item == null) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))\r\n }\r\n dotColors={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 radius={radius}\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 tooltip={tooltip}\r\n suffix={suffix}\r\n prefix={prefix}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n maxValue={\r\n !checkIfNullOrUndefined(maxValue)\r\n ? (maxValue as number)\r\n : Math.max(\r\n ...data.map(d => Math.max(...d.x.filter(el => el !== null))),\r\n ) < 0\r\n ? 0\r\n : Math.max(\r\n ...data.map(d => Math.max(...d.x.filter(el => el !== null))),\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 => Math.min(...d.x.filter(el => el !== null))),\r\n ) > 0\r\n ? 0\r\n : Math.min(\r\n ...data.map(d => Math.min(...d.x.filter(el => el !== null))),\r\n )\r\n }\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n selectedColor={selectedColor}\r\n arrowConnector={arrowConnector}\r\n connectorStrokeWidth={connectorStrokeWidth}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n detailsOnClick={detailsOnClick}\r\n axisTitle={axisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n styles={styles}\r\n classNames={classNames}\r\n labelOrder={labelOrder}\r\n refValues={refValues}\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 highlightedDataPoints={highlightedDataPoints}\r\n dimmedOpacity={dimmedOpacity}\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 { HorizontalDumbbellChart } from './Horizontal';\r\nimport { VerticalDumbbellChart } from './Vertical';\r\n\r\nimport {\r\n SourcesDataType,\r\n Languages,\r\n DumbbellChartDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n ReferenceDataType,\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: DumbbellChartDataType[];\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 the circle */\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 /** Radius of the dots */\r\n radius?: 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 /** 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 if the is a arrow head at the end of the connector */\r\n arrowConnector?: 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 /** Stroke width of the connector */\r\n connectorStrokeWidth?: number;\r\n /** Title for the axis */\r\n axisTitle?: string;\r\n /** Sorting order for data. If this is a number then data is sorted by value at that index x array in the data props. If this is diff then data is sorted by the difference of the last and first element in the x array in the data props. This is overwritten by labelOrder prop */\r\n sortParameter?: number | 'diff';\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 DumbbellChart(props: Props) {\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 height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n padding,\r\n backgroundColor,\r\n radius,\r\n tooltip,\r\n showLabels,\r\n relativeHeight,\r\n onSeriesMouseOver,\r\n graphID,\r\n suffix,\r\n prefix,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload,\r\n dataDownload,\r\n showValues,\r\n sortParameter,\r\n arrowConnector,\r\n connectorStrokeWidth,\r\n language,\r\n minHeight,\r\n theme,\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n axisTitle,\r\n noOfTicks,\r\n valueColor,\r\n orientation = 'vertical',\r\n styles,\r\n classNames,\r\n labelOrder,\r\n refValues,\r\n filterNA,\r\n animate,\r\n precision,\r\n showColorScale,\r\n customLayers,\r\n highlightedDataPoints,\r\n dimmedOpacity,\r\n timeline,\r\n } = props;\r\n\r\n if (orientation === 'vertical')\r\n return (\r\n <VerticalDumbbellChart\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 height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n padding={padding}\r\n backgroundColor={backgroundColor}\r\n radius={radius}\r\n tooltip={tooltip}\r\n showLabels={showLabels}\r\n relativeHeight={relativeHeight}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n graphID={graphID}\r\n suffix={suffix}\r\n prefix={prefix}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n showValues={showValues}\r\n sortParameter={sortParameter}\r\n arrowConnector={arrowConnector}\r\n connectorStrokeWidth={connectorStrokeWidth}\r\n language={language}\r\n minHeight={minHeight}\r\n theme={theme}\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 axisTitle={axisTitle}\r\n noOfTicks={noOfTicks}\r\n labelOrder={labelOrder}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n refValues={refValues}\r\n filterNA={filterNA}\r\n animate={animate}\r\n precision={precision}\r\n showColorScale={showColorScale}\r\n customLayers={customLayers}\r\n highlightedDataPoints={highlightedDataPoints}\r\n dimmedOpacity={dimmedOpacity}\r\n timeline={timeline}\r\n />\r\n );\r\n return (\r\n <HorizontalDumbbellChart\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 height={height}\r\n width={width}\r\n footNote={footNote}\r\n colorDomain={colorDomain}\r\n colorLegendTitle={colorLegendTitle}\r\n padding={padding}\r\n backgroundColor={backgroundColor}\r\n radius={radius}\r\n tooltip={tooltip}\r\n showLabels={showLabels}\r\n relativeHeight={relativeHeight}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n graphID={graphID}\r\n suffix={suffix}\r\n prefix={prefix}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n graphDownload={graphDownload}\r\n dataDownload={dataDownload}\r\n showValues={showValues}\r\n sortParameter={sortParameter}\r\n arrowConnector={arrowConnector}\r\n connectorStrokeWidth={connectorStrokeWidth}\r\n language={language}\r\n minHeight={minHeight}\r\n theme={theme}\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 axisTitle={axisTitle}\r\n noOfTicks={noOfTicks}\r\n valueColor={valueColor}\r\n classNames={classNames}\r\n labelOrder={labelOrder}\r\n refValues={refValues}\r\n filterNA={filterNA}\r\n animate={animate}\r\n precision={precision}\r\n showColorScale={showColorScale}\r\n customLayers={customLayers}\r\n highlightedDataPoints={highlightedDataPoints}\r\n dimmedOpacity={dimmedOpacity}\r\n timeline={timeline}\r\n />\r\n );\r\n}\r\n"],"names":["Graph","props","data","dotColors","suffix","prefix","barPadding","showValues","showTicks","leftMargin","truncateBy","width","height","rightMargin","topMargin","bottomMargin","radius","showLabels","tooltip","onSeriesMouseOver","maxValue","minValue","onSeriesMouseClick","selectedColor","arrowConnector","connectorStrokeWidth","maxBarThickness","minBarThickness","resetSelectionOnDoubleClick","detailsOnClick","axisTitle","noOfTicks","valueColor","styles","classNames","labelOrder","refValues","rtl","animate","precision","customLayers","highlightedDataPoints","dimmedOpacity","svgRef","useRef","isInView","useInView","margin","graphWidth","graphHeight","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","dataWithId","d","i","barOrder","x","scaleLinear","y","scaleBand","xTicks","jsxs","Fragment","motion","jsx","XTicksAndGridLines","_d","AxisTitle","YTicksAndGridLines","AnimatePresence","YAxesLabels","cn","el","j","event","isEqual","checkIfNullOrUndefined","numberFormattingFunction","RefLineX","Tooltip","Modal","string2HTML","HorizontalDumbbellChart","graphTitle","colors","Colors","sources","graphDescription","footNote","colorDomain","colorLegendTitle","padding","backgroundColor","relativeHeight","graphID","graphDownload","dataDownload","sortParameter","language","minHeight","theme","maxNumberOfBars","ariaLabel","filterNA","showColorScale","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","sortBy","ensureCompleteDataForDumbbellChart","format","item","GraphFooter","yTicks","Axis","XAxesLabels","RefLineY","VerticalDumbbellChart","DumbbellChart","orientation"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./index-BHm2KTjD-D8FylaKc.cjs"),t=require("./Typography-CDR-DAHH.cjs"),r=require("./index-CEc_9zWy.cjs");function s(){return e.jsxRuntimeExports.jsxs("div",{className:"flex w-full flex-col justify-center grow items-center gap-2 p-6",children:[e.jsxRuntimeExports.jsx(r.Alert,{}),e.jsxRuntimeExports.jsx(t.TypographyExports.P,{marginBottom:"none",leading:"none",size:"lg",className:"text-primary-gray-550 dark:text-primary-gray-550",children:"No data available"})]})}exports.EmptyState=s;
2
+ //# sourceMappingURL=EmptyState-BQguKAp5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState-BQguKAp5.cjs","sources":["../src/Components/Elements/EmptyState.tsx"],"sourcesContent":["import { P } from '@undp/design-system-react/Typography';\r\n\r\nimport { Alert } from '@/Components/Icons';\r\n\r\nexport function EmptyState() {\r\n return (\r\n <div className='flex w-full flex-col justify-center grow items-center gap-2 p-6'>\r\n <Alert />\r\n <P\r\n marginBottom='none'\r\n leading='none'\r\n size='lg'\r\n className='text-primary-gray-550 dark:text-primary-gray-550'\r\n >\r\n No data available\r\n </P>\r\n </div>\r\n );\r\n}\r\n"],"names":["EmptyState","jsxs","jsx","Alert","P"],"mappings":"uIAIO,SAASA,GAAa,CAC3B,OACEC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,kEACb,SAAA,CAAAC,EAAAA,kBAAAA,IAACC,EAAAA,MAAA,EAAM,EACPD,EAAAA,kBAAAA,IAACE,EAAAA,kBAAAA,EAAA,CACC,aAAa,OACb,QAAQ,OACR,KAAK,KACL,UAAU,mDACX,SAAA,mBAAA,CAAA,CAED,EACF,CAEJ"}
@@ -0,0 +1,22 @@
1
+ import { j as r } from "./index-BHm2KTjD-2e-Fu8L-.js";
2
+ import { T as t } from "./Typography-XJoSE-By.js";
3
+ import { A as a } from "./index-DXmF_0ez.js";
4
+ function i() {
5
+ return /* @__PURE__ */ r.jsxs("div", { className: "flex w-full flex-col justify-center grow items-center gap-2 p-6", children: [
6
+ /* @__PURE__ */ r.jsx(a, {}),
7
+ /* @__PURE__ */ r.jsx(
8
+ t.P,
9
+ {
10
+ marginBottom: "none",
11
+ leading: "none",
12
+ size: "lg",
13
+ className: "text-primary-gray-550 dark:text-primary-gray-550",
14
+ children: "No data available"
15
+ }
16
+ )
17
+ ] });
18
+ }
19
+ export {
20
+ i as E
21
+ };
22
+ //# sourceMappingURL=EmptyState-b2Ln487i.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState-b2Ln487i.js","sources":["../src/Components/Elements/EmptyState.tsx"],"sourcesContent":["import { P } from '@undp/design-system-react/Typography';\r\n\r\nimport { Alert } from '@/Components/Icons';\r\n\r\nexport function EmptyState() {\r\n return (\r\n <div className='flex w-full flex-col justify-center grow items-center gap-2 p-6'>\r\n <Alert />\r\n <P\r\n marginBottom='none'\r\n leading='none'\r\n size='lg'\r\n className='text-primary-gray-550 dark:text-primary-gray-550'\r\n >\r\n No data available\r\n </P>\r\n </div>\r\n );\r\n}\r\n"],"names":["EmptyState","jsxs","jsx","Alert","P"],"mappings":";;;AAIO,SAASA,IAAa;AAC3B,SACEC,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,mEACb,UAAA;AAAA,IAAAC,gBAAAA,EAAAA,IAACC,GAAA,EAAM;AAAA,IACPD,gBAAAA,EAAAA;AAAAA,MAACE,EAAAA;AAAAA,MAAA;AAAA,QACC,cAAa;AAAA,QACb,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,WAAU;AAAA,QACX,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAED,GACF;AAEJ;"}
@@ -0,0 +1,22 @@
1
+ import { JSX } from 'react';
2
+ import { JSX as JSX_2 } from 'react/jsx-runtime';
3
+
4
+ export declare function ExcelDownloadButton(props: Props): JSX_2.Element;
5
+
6
+ declare interface Props {
7
+ buttonContent?: string | JSX.Element;
8
+ buttonType?: 'primary' | 'primary-without-icon' | 'secondary' | 'secondary-without-icon' | 'tertiary';
9
+ csvData: any;
10
+ fileName?: string;
11
+ headers: string[];
12
+ xlsxHeader: any;
13
+ wscols: WsColInterface[];
14
+ buttonSmall?: boolean;
15
+ className?: string;
16
+ }
17
+
18
+ declare interface WsColInterface {
19
+ wch: number;
20
+ }
21
+
22
+ export { }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./index-BHm2KTjD-D8FylaKc.cjs"),e=require("./index-CEc_9zWy.cjs"),d=require("./excelDownload.js");function m(o){const{buttonContent:n,buttonType:a="tertiary",csvData:l,fileName:s="data",headers:r,xlsxHeader:i,wscols:c,buttonSmall:x,className:u=""}=o;return t.jsxRuntimeExports.jsx(e.ButtonExports.Button,{variant:a,className:`${x?"p-2":"py-4 px-6"} ${u}`,onClick:()=>d.excelDownload(l,s,r,i,c),"aria-label":"Click to download the data as xlsx",children:n||t.jsxRuntimeExports.jsx(e.FileDown,{})})}exports.ExcelDownloadButton=m;
2
+ //# sourceMappingURL=ExcelDownloadButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExcelDownloadButton.js","sources":["../src/Components/Actions/ExcelDownloadButton.tsx"],"sourcesContent":["import { Button } from '@undp/design-system-react/Button';\r\nimport { JSX } from 'react';\r\n\r\nimport { excelDownload } from '@/Utils/excelDownload';\r\nimport { FileDown } from '@/Components/Icons';\r\n\r\ninterface WsColInterface {\r\n wch: number;\r\n}\r\n\r\ninterface Props {\r\n buttonContent?: string | JSX.Element;\r\n buttonType?:\r\n | 'primary'\r\n | 'primary-without-icon'\r\n | 'secondary'\r\n | 'secondary-without-icon'\r\n | 'tertiary';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n csvData: any;\r\n fileName?: string;\r\n headers: string[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n xlsxHeader: any;\r\n wscols: WsColInterface[];\r\n buttonSmall?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function ExcelDownloadButton(props: Props) {\r\n const {\r\n buttonContent,\r\n buttonType = 'tertiary',\r\n csvData,\r\n fileName = 'data',\r\n headers,\r\n xlsxHeader,\r\n wscols,\r\n buttonSmall,\r\n className = '',\r\n } = props;\r\n return (\r\n <Button\r\n variant={buttonType}\r\n className={`${buttonSmall ? 'p-2' : 'py-4 px-6'} ${className}`}\r\n onClick={() => excelDownload(csvData, fileName, headers, xlsxHeader, wscols)}\r\n aria-label='Click to download the data as xlsx'\r\n >\r\n {buttonContent || <FileDown />}\r\n </Button>\r\n );\r\n}\r\n"],"names":["ExcelDownloadButton","props","buttonContent","buttonType","csvData","fileName","headers","xlsxHeader","wscols","buttonSmall","className","jsx","Button","excelDownload","FileDown"],"mappings":"mMA6BO,SAASA,EAAoBC,EAAc,CAChD,KAAM,CACJ,cAAAC,EACA,WAAAC,EAAa,WACb,QAAAC,EACA,SAAAC,EAAW,OACX,QAAAC,EACA,WAAAC,EACA,OAAAC,EACA,YAAAC,EACA,UAAAC,EAAY,EAAA,EACVT,EACJ,OACEU,EAAAA,kBAAAA,IAACC,EAAAA,cAAAA,OAAA,CACC,QAAST,EACT,UAAW,GAAGM,EAAc,MAAQ,WAAW,IAAIC,CAAS,GAC5D,QAAS,IAAMG,EAAAA,cAAcT,EAASC,EAAUC,EAASC,EAAYC,CAAM,EAC3E,aAAW,qCAEV,SAAAN,2BAAkBY,EAAAA,SAAA,CAAA,CAAS,CAAA,CAAA,CAGlC"}
@@ -0,0 +1,12 @@
1
+ import { default as default_2 } from 'react';
2
+ import { JSX } from 'react/jsx-runtime';
3
+
4
+ export declare function FootNote(props: Props): JSX.Element | null;
5
+
6
+ declare interface Props {
7
+ text: string | default_2.ReactNode;
8
+ style?: default_2.CSSProperties;
9
+ className?: string;
10
+ }
11
+
12
+ export { }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./index-BHm2KTjD-D8FylaKc.cjs"),n=require("./Typography-CDR-DAHH.cjs"),s=require("react");function a(i){const{text:e,style:t={},className:r}=i;return typeof e=="string"?e.trim()===""?null:o.jsxRuntimeExports.jsx(n.TypographyExports.P,{size:"sm",marginBottom:"none",className:n.cnExports.cn("text-primary-gray-550 dark:text-primary-gray-40",r),"aria-label":"Graph footnote",style:t,children:e}):s.isValidElement(e)?o.jsxRuntimeExports.jsx("div",{className:r,style:t,children:e}):(console.error("FootNote: Invalid text type. Expected string or React element."),null)}exports.FootNote=a;
2
+ //# sourceMappingURL=FootNote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FootNote.js","sources":["../src/Components/Typography/FootNote.tsx"],"sourcesContent":["import { cn } from '@undp/design-system-react/cn';\r\nimport { P } from '@undp/design-system-react/Typography';\r\nimport React from 'react';\r\n\r\ninterface Props {\r\n text: string | React.ReactNode;\r\n style?: React.CSSProperties;\r\n className?: string;\r\n}\r\n\r\nexport function FootNote(props: Props) {\r\n const { text, style = {}, className } = props;\r\n if (typeof text === 'string') {\r\n if (text.trim() === '') return null;\r\n return (\r\n <P\r\n size='sm'\r\n marginBottom='none'\r\n className={cn('text-primary-gray-550 dark:text-primary-gray-40', className)}\r\n aria-label='Graph footnote'\r\n style={style}\r\n >\r\n {text}\r\n </P>\r\n );\r\n }\r\n if (React.isValidElement(text))\r\n return (\r\n <div className={className} style={style}>\r\n {text}\r\n </div>\r\n );\r\n console.error('FootNote: Invalid text type. Expected string or React element.');\r\n return null;\r\n}\r\n"],"names":["FootNote","props","text","style","className","jsx","P","cn","React"],"mappings":"2LAUO,SAASA,EAASC,EAAc,CACrC,KAAM,CAAE,KAAAC,EAAM,MAAAC,EAAQ,CAAA,EAAI,UAAAC,GAAcH,EACxC,OAAI,OAAOC,GAAS,SACdA,EAAK,SAAW,GAAW,KAE7BG,EAAAA,kBAAAA,IAACC,EAAAA,kBAAAA,EAAA,CACC,KAAK,KACL,aAAa,OACb,UAAWC,EAAAA,UAAAA,GAAG,kDAAmDH,CAAS,EAC1E,aAAW,iBACX,MAAAD,EAEC,SAAAD,CAAA,CAAA,EAIHM,EAAM,eAAeN,CAAI,EAEzBG,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAAD,EAAsB,MAAAD,EACxB,SAAAD,EACH,GAEJ,QAAQ,MAAM,gEAAgE,EACvE,KACT"}
@@ -0,0 +1,103 @@
1
+ import { JSX } from 'react/jsx-runtime';
2
+
3
+ declare interface AxesClassNameObject {
4
+ gridLines?: string;
5
+ labels?: string;
6
+ title?: string;
7
+ axis?: string;
8
+ }
9
+
10
+ declare interface AxesStyleObject {
11
+ gridLines?: React.CSSProperties;
12
+ labels?: React.CSSProperties;
13
+ title?: React.CSSProperties;
14
+ axis?: React.CSSProperties;
15
+ }
16
+
17
+ declare interface ClassNameObject {
18
+ title?: string;
19
+ footnote?: string;
20
+ source?: string;
21
+ description?: string;
22
+ tooltip?: string;
23
+ xAxis?: AxesClassNameObject;
24
+ yAxis?: AxesClassNameObject;
25
+ legend?: string;
26
+ graphContainer?: string;
27
+ graphObjectValues?: string;
28
+ dataConnectors?: string;
29
+ mouseOverLine?: string;
30
+ regLine?: string;
31
+ dataCards?: string;
32
+ }
33
+
34
+ /** For using these maps you will have to install [`maplibre`](https://maplibre.org/maplibre-gl-js/docs/#npm), [pmtiles](https://www.npmjs.com/package/pmtiles), [dnd-kit/core](https://www.npmjs.com/package/@dnd-kit/core), and [dnd-kit/modifier](https://www.npmjs.com/package/@dnd-kit/modifiers) package to your project */
35
+ export declare function GeoHubCompareMaps(props: Props): JSX.Element;
36
+
37
+ declare type Languages = 'en' | 'ar' | 'az' | 'bn' | 'cy' | 'he' | 'hi' | 'jp' | 'ka' | 'km' | 'ko' | 'my' | 'ne' | 'zh' | 'custom';
38
+
39
+ declare interface Props {
40
+ /** Title of the graph */
41
+ graphTitle?: string | React.ReactNode;
42
+ /** Description of the graph */
43
+ graphDescription?: string | React.ReactNode;
44
+ /** Footnote for the graph */
45
+ footNote?: string | React.ReactNode;
46
+ /** Source data for the graph */
47
+ sources?: SourcesDataType[];
48
+ /** Accessibility label */
49
+ ariaLabel?: string;
50
+ /** Background color of the graph */
51
+ backgroundColor?: string | boolean;
52
+ /** Custom styles for the graph. Each object should be a valid React CSS style object. */
53
+ styles?: StyleObject;
54
+ /** Custom class names */
55
+ classNames?: ClassNameObject;
56
+ /** Width of the graph */
57
+ width?: number;
58
+ /** Height of the graph */
59
+ height?: number;
60
+ /** Minimum height of the graph */
61
+ minHeight?: number;
62
+ /** Relative height scaling factor. This overwrites the height props */
63
+ relativeHeight?: number;
64
+ /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */
65
+ padding?: string;
66
+ /** URLs for mapStyles JSON user wants to compare */
67
+ mapStyles: [string, string];
68
+ /** Defines the legend for the map. mapLegend with type string is show as innerHTML. */
69
+ mapLegend?: string | React.ReactNode;
70
+ /** Starting center point of the map */
71
+ center?: [number, number];
72
+ /** Starting zoom level of the map */
73
+ zoomLevel?: number;
74
+ /** Language setting */
75
+ language?: Languages;
76
+ /** Color theme */
77
+ theme?: 'light' | 'dark';
78
+ /** Unique ID for the graph */
79
+ graphID?: string;
80
+ }
81
+
82
+ declare interface SourcesDataType {
83
+ source: string;
84
+ link?: string;
85
+ }
86
+
87
+ declare interface StyleObject {
88
+ title?: React.CSSProperties;
89
+ footnote?: React.CSSProperties;
90
+ source?: React.CSSProperties;
91
+ description?: React.CSSProperties;
92
+ graphContainer?: React.CSSProperties;
93
+ tooltip?: React.CSSProperties;
94
+ xAxis?: AxesStyleObject;
95
+ yAxis?: AxesStyleObject;
96
+ graphObjectValues?: React.CSSProperties;
97
+ dataConnectors?: React.CSSProperties;
98
+ mouseOverLine?: React.CSSProperties;
99
+ regLine?: React.CSSProperties;
100
+ dataCards?: React.CSSProperties;
101
+ }
102
+
103
+ export { }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-BHm2KTjD-D8FylaKc.cjs"),n=require("react"),G=require("./Typography-CDR-DAHH.cjs"),O=require("maplibre-gl"),_=require("pmtiles");;/* empty css */const C=require("@dnd-kit/core"),I=require("@dnd-kit/modifiers"),L=require("./index-CEc_9zWy.cjs"),A=require("./string2HTML-X4ZYX5jI.cjs"),q=require("./select-Bnfk0lJx.cjs"),W=require("./GraphHeader.js"),X=require("./GraphFooter.js");function T(o){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const r in o)if(r!=="default"){const t=Object.getOwnPropertyDescriptor(o,r);Object.defineProperty(s,r,t.get?t:{enumerable:!0,get:()=>o[r]})}}return s.default=o,Object.freeze(s)}const v=T(O),B=T(_);function F(o,s){let r=!1;function t(i,p){if(!r){r=!0;const l=i.getCenter(),a=i.getZoom(),x=i.getBearing(),c=i.getPitch();p.jumpTo({center:l,zoom:a,bearing:x,pitch:c}),r=!1}}o.on("move",()=>{t(o,s)}),s.on("move",()=>{t(s,o)})}function Z(o){const{height:s,width:r,mapStyles:t,center:i,zoomLevel:p,mapLegend:l}=o,[a,x]=n.useState(50),[c,S]=n.useState(!1),d=n.useRef(null),[D,M]=n.useState(!0),w=n.useRef(50),m=n.useRef(0),N=C.useSensors(C.useSensor(C.PointerSensor,{activationConstraint:{distance:0}})),k=()=>{S(!0),w.current=a,d.current&&(m.current=d.current.getBoundingClientRect().width)},h=u=>{if(!d.current||m.current===0)return;const g=u.delta.x/m.current*100,E=Math.max(0,Math.min(100,w.current+g));x(E)},f=()=>{S(!1)},z=u=>{if(c||!d.current)return;const g=d.current.getBoundingClientRect(),H=(u.clientX-g.left)/g.width*100;x(Math.max(0,Math.min(100,H)))},b=n.useRef(null),j=n.useRef(null),y=n.useRef(null),R=n.useRef(null);return n.useEffect(()=>{if(R.current&&j.current&&y.current&&r){q.select(R.current).selectAll(".maplibregl-compare").remove(),q.select(j.current).selectAll("div").remove(),q.select(y.current).selectAll("div").remove();const H=new B.Protocol;v.addProtocol("pmtiles",H.tile);const P=new v.Map({container:j.current,style:t[0],center:i||[0,0],zoom:p||4}),$=new v.Map({container:y.current,style:t[1],center:i||[0,0],zoom:p||4});$.addControl(new v.NavigationControl({visualizePitch:!0,showZoom:!0,showCompass:!0}),"bottom-right"),P.addControl(new v.ScaleControl,"bottom-left"),P.addControl(new v.NavigationControl({visualizePitch:!0,showZoom:!0,showCompass:!0}),"bottom-right"),$.addControl(new v.ScaleControl,"bottom-left"),F(P,$)}},[r,t,i,p]),e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col grow justify-center leading-0",ref:b,"aria-label":"Map area",children:[e.jsxRuntimeExports.jsx("div",{style:{width:r,height:s},children:e.jsxRuntimeExports.jsx("div",{ref:R,className:"map maplibre-show-control relative w-full h-full",style:{inset:0},children:e.jsxRuntimeExports.jsx(C.DndContext,{sensors:N,modifiers:[I.restrictToHorizontalAxis],onDragStart:k,onDragMove:h,onDragEnd:f,children:e.jsxRuntimeExports.jsxs("div",{ref:d,style:{position:"relative",width:r,height:s,overflow:"hidden",cursor:c?"grabbing":"col-resize",userSelect:"none"},onClick:z,children:[e.jsxRuntimeExports.jsx("div",{ref:y,className:"absolute h-full rightMap w-full",style:{position:"absolute",top:0,left:0,clipPath:`polygon(${a}% 0%, ${a}% 100%, 100% 100%, 100% 0%)`}}),e.jsxRuntimeExports.jsx("div",{ref:j,className:"absolute h-full leftMap w-full",style:{position:"absolute",top:0,left:0,inset:0,clipPath:`polygon(0% 0%, ${a}% 0%, ${a}% 100%, 0% 100%)`}}),e.jsxRuntimeExports.jsx(K,{position:a})]})})})}),l?e.jsxRuntimeExports.jsx("div",{className:"absolute left-[22px] bottom-13",children:D?e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsx("div",{style:{backgroundColor:"rgba(240,240,240, 0.7)",border:"1px solid var(--gray-400)",borderRadius:"999px",width:"24px",height:"24px",padding:"3px",cursor:"pointer",zIndex:10,position:"absolute",right:"-0.75rem",top:"-0.75rem"},onClick:()=>{M(!1)},children:e.jsxRuntimeExports.jsx(L.X,{})}),e.jsxRuntimeExports.jsx("div",{className:"p-2",style:{backgroundColor:"rgba(240,240,240, 0.7)"},dangerouslySetInnerHTML:typeof l=="string"?{__html:A.string2HTML(l)}:void 0,children:n.isValidElement(l)?l:null})]}):e.jsxRuntimeExports.jsx("button",{type:"button",className:"mb-0 border-0 bg-transparent p-0 self-start",onClick:()=>{M(!0)},children:e.jsxRuntimeExports.jsx("div",{className:"items-start text-sm font-medium cursor-pointer p-2 mb-0 flex text-primary-black dark:text-primary-gray-300 bg-primary-gray-300 dark:bg-primary-gray-550 border-primary-gray-400 dark:border-primary-gray-500",children:"Show Legend"})})}):null]})}function K(o){const{position:s}=o,{attributes:r,listeners:t,setNodeRef:i}=C.useDraggable({id:"slider-handle"});return e.jsxRuntimeExports.jsxs("div",{ref:i,style:{position:"absolute",left:`${s}%`,top:0,bottom:0,width:"40px",transform:"translateX(-50%)",cursor:"col-resize",display:"flex",justifyContent:"center",alignItems:"center",zIndex:10,touchAction:"none"},...t,...r,children:[e.jsxRuntimeExports.jsx("div",{className:"h-full bg-primary-blue-600 dark:bg-primary-blue-400",style:{width:"2px"}}),e.jsxRuntimeExports.jsx("div",{className:"flex bg-primary-blue-600 dark:bg-primary-blue-400 rounded-full absolute items-center justify-center text-primary-white font-primary-white",style:{boxShadow:"inset 0 0 0 1px #fff",width:"42px",height:"42px",top:"calc(50% - 21px)",left:"0",cursor:"col-resize"},children:e.jsxRuntimeExports.jsx(L.ChevronLeftRight,{})})]})}function V(o){const{graphTitle:s,height:r,width:t,relativeHeight:i,sources:p,graphDescription:l,footNote:a,padding:x,backgroundColor:c=!1,graphID:S,mapStyles:d,center:D=[0,0],zoomLevel:M=3,language:w="en",minHeight:m=0,theme:N="light",ariaLabel:k,styles:h,classNames:f,mapLegend:z}=o,[b,j]=n.useState(0),[y,R]=n.useState(0),u=n.useRef(null);return n.useEffect(()=>{const g=new ResizeObserver(E=>{j(t||E[0].target.clientWidth||620),R(r||E[0].target.clientHeight||480)});return u.current&&(R(u.current.clientHeight||480),j(u.current.clientWidth||620),t||g.observe(u.current)),()=>g.disconnect()},[t,r]),e.jsxRuntimeExports.jsx("div",{className:`${N||"light"} flex ${t?"w-fit grow-0":"w-full grow"}`,dir:w==="he"||w==="ar"?"rtl":void 0,children:e.jsxRuntimeExports.jsx("div",{className:G.cnExports.cn(`${c?c===!0?"bg-primary-gray-200 dark:bg-primary-gray-650 ":"":"bg-transparent "}ml-auto mr-auto flex flex-col grow h-inherit ${w||"en"}`,f?.graphContainer),style:{...h?.graphContainer||{},...c&&c!==!0?{backgroundColor:c}:{}},id:S,"aria-label":k||`${s?`The graph shows ${s}. `:""}This is a comparison between two maps.${l?` ${l}`:""}`,children:e.jsxRuntimeExports.jsx("div",{className:"flex grow",style:{padding:c?x||"1rem":x||0},children:e.jsxRuntimeExports.jsxs("div",{className:"flex flex-col w-full gap-4 grow justify-between",children:[s||l?e.jsxRuntimeExports.jsx(W.GraphHeader,{styles:{title:h?.title,description:h?.description},classNames:{title:f?.title,description:f?.description},graphTitle:s,graphDescription:l,width:t}):null,e.jsxRuntimeExports.jsx("div",{className:"flex flex-col grow justify-center leading-0",ref:u,"aria-label":"map area",children:(t||b)&&(r||y)?e.jsxRuntimeExports.jsx(Z,{width:t||b,height:Math.max(m,r||(i?m?(t||b)*i>m?(t||b)*i:m:(t||b)*i:y)),mapStyles:d,center:D,zoomLevel:M,mapLegend:z}):null}),p||a?e.jsxRuntimeExports.jsx(X.GraphFooter,{styles:{footnote:h?.footnote,source:h?.source},classNames:{footnote:f?.footnote,source:f?.source},sources:p,footNote:a,width:t}):null]})})})})}exports.GeoHubCompareMaps=V;
2
+ //# sourceMappingURL=GeoHubCompareMaps.js.map