@undp/data-viz 1.5.2 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AreaChart.cjs +1 -1
- package/dist/AreaChart.cjs.map +1 -1
- package/dist/AreaChart.js +3 -2
- package/dist/AreaChart.js.map +1 -1
- package/dist/BarGraph.cjs +1 -1
- package/dist/BarGraph.cjs.map +1 -1
- package/dist/BarGraph.js +1196 -1224
- package/dist/BarGraph.js.map +1 -1
- package/dist/BeeSwarmChart.cjs +1 -1
- package/dist/BeeSwarmChart.cjs.map +1 -1
- package/dist/BeeSwarmChart.js +130 -142
- package/dist/BeeSwarmChart.js.map +1 -1
- package/dist/BiVariateChoroplethMap.cjs +1 -1
- package/dist/BiVariateChoroplethMap.cjs.map +1 -1
- package/dist/BiVariateChoroplethMap.js +41 -41
- package/dist/BiVariateChoroplethMap.js.map +1 -1
- package/dist/BulletChart.cjs +1 -1
- package/dist/BulletChart.cjs.map +1 -1
- package/dist/BulletChart.js +483 -487
- package/dist/BulletChart.js.map +1 -1
- package/dist/ButterflyChart.cjs +1 -1
- package/dist/ButterflyChart.cjs.map +1 -1
- package/dist/ButterflyChart.js +99 -99
- package/dist/ButterflyChart.js.map +1 -1
- package/dist/ChoroplethMap.cjs +1 -1
- package/dist/ChoroplethMap.cjs.map +1 -1
- package/dist/ChoroplethMap.js +125 -125
- package/dist/ChoroplethMap.js.map +1 -1
- package/dist/CirclePackingGraph.cjs +1 -1
- package/dist/CirclePackingGraph.js +2 -2
- package/dist/DataCards.cjs +2 -2
- package/dist/DataCards.cjs.map +1 -1
- package/dist/DataCards.js +6 -6
- package/dist/DataCards.js.map +1 -1
- package/dist/DataTable.cjs +1 -1
- package/dist/DataTable.cjs.map +1 -1
- package/dist/DataTable.js +66 -68
- package/dist/DataTable.js.map +1 -1
- package/dist/DifferenceLineChart.cjs +1 -1
- package/dist/DifferenceLineChart.cjs.map +1 -1
- package/dist/DifferenceLineChart.js +3 -2
- package/dist/DifferenceLineChart.js.map +1 -1
- package/dist/DonutChart.cjs +1 -1
- package/dist/DonutChart.cjs.map +1 -1
- package/dist/DonutChart.js +205 -205
- package/dist/DonutChart.js.map +1 -1
- package/dist/DotDensityMap.cjs +1 -1
- package/dist/DotDensityMap.cjs.map +1 -1
- package/dist/DotDensityMap.js +78 -81
- package/dist/DotDensityMap.js.map +1 -1
- package/dist/DualAxisLineChart.cjs +1 -1
- package/dist/DualAxisLineChart.cjs.map +1 -1
- package/dist/DualAxisLineChart.js +3 -2
- package/dist/DualAxisLineChart.js.map +1 -1
- package/dist/DumbbellChart.cjs +1 -1
- package/dist/DumbbellChart.cjs.map +1 -1
- package/dist/DumbbellChart.js +64 -65
- package/dist/DumbbellChart.js.map +1 -1
- package/dist/GeoHubMap.cjs +1 -1
- package/dist/GeoHubMap.js +1 -1
- package/dist/GeoHubMapWithLayerSelection.cjs +1 -1
- package/dist/GeoHubMapWithLayerSelection.js +1 -1
- package/dist/{GraphEl-4RUlclvW.cjs → GraphEl-BcYgMnN2.cjs} +2 -2
- package/dist/{GraphEl-4RUlclvW.cjs.map → GraphEl-BcYgMnN2.cjs.map} +1 -1
- package/dist/{GraphEl-ClIxlWa3.js → GraphEl-CMWeARJ3.js} +2 -2
- package/dist/{GraphEl-ClIxlWa3.js.map → GraphEl-CMWeARJ3.js.map} +1 -1
- package/dist/GriddedGraphs.cjs +1 -1
- package/dist/GriddedGraphs.js +4 -4
- package/dist/GriddedGraphsFromConfig.cjs +1 -1
- package/dist/GriddedGraphsFromConfig.js +1 -1
- package/dist/HeatMap.cjs +1 -1
- package/dist/HeatMap.cjs.map +1 -1
- package/dist/HeatMap.js +83 -83
- package/dist/HeatMap.js.map +1 -1
- package/dist/Histogram.cjs +1 -1
- package/dist/Histogram.js +1 -1
- package/dist/LineChartWithConfidenceInterval.cjs +1 -1
- package/dist/LineChartWithConfidenceInterval.cjs.map +1 -1
- package/dist/LineChartWithConfidenceInterval.js +7 -6
- package/dist/LineChartWithConfidenceInterval.js.map +1 -1
- package/dist/MultiGraphDashboard.cjs +1 -1
- package/dist/MultiGraphDashboard.js +2 -2
- package/dist/MultiGraphDashboardFromConfig.cjs +1 -1
- package/dist/MultiGraphDashboardFromConfig.js +1 -1
- package/dist/MultiGraphDashboardWideToLongFormat.cjs +1 -1
- package/dist/MultiGraphDashboardWideToLongFormat.js +1 -1
- package/dist/MultiGraphDashboardWideToLongFormatFromConfig.cjs +1 -1
- package/dist/MultiGraphDashboardWideToLongFormatFromConfig.js +1 -1
- package/dist/MultiLineAltChart.cjs +1 -1
- package/dist/MultiLineAltChart.cjs.map +1 -1
- package/dist/MultiLineAltChart.js +82 -91
- package/dist/MultiLineAltChart.js.map +1 -1
- package/dist/MultiLineChart.cjs +1 -1
- package/dist/MultiLineChart.cjs.map +1 -1
- package/dist/MultiLineChart.js +3 -2
- package/dist/MultiLineChart.js.map +1 -1
- package/dist/PerformanceIntensiveMultiGraphDashboard.cjs +1 -1
- package/dist/PerformanceIntensiveMultiGraphDashboard.js +2 -2
- package/dist/PerformanceIntensiveMultiGraphDashboardFromConfig.cjs +1 -1
- package/dist/PerformanceIntensiveMultiGraphDashboardFromConfig.js +1 -1
- package/dist/RadarChart.cjs +1 -1
- package/dist/RadarChart.cjs.map +1 -1
- package/dist/RadarChart.js +124 -130
- package/dist/RadarChart.js.map +1 -1
- package/dist/SankeyChart.cjs +1 -1
- package/dist/SankeyChart.cjs.map +1 -1
- package/dist/SankeyChart.js +200 -200
- package/dist/SankeyChart.js.map +1 -1
- package/dist/ScatterPlot.cjs +1 -1
- package/dist/ScatterPlot.cjs.map +1 -1
- package/dist/ScatterPlot.js +149 -155
- package/dist/ScatterPlot.js.map +1 -1
- package/dist/SimpleLineChart.cjs +1 -1
- package/dist/SimpleLineChart.cjs.map +1 -1
- package/dist/SimpleLineChart.js +44 -43
- package/dist/SimpleLineChart.js.map +1 -1
- package/dist/SingleGraphDashboard.cjs +1 -1
- package/dist/SingleGraphDashboard.js +4 -4
- package/dist/SingleGraphDashboardFromConfig.cjs +1 -1
- package/dist/SingleGraphDashboardFromConfig.js +1 -1
- package/dist/SingleGraphDashboardGeoHubMapsFromConfig.cjs +1 -1
- package/dist/SingleGraphDashboardGeoHubMapsFromConfig.js +1 -1
- package/dist/SingleGraphDashboardThreeDGraphs.cjs +1 -1
- package/dist/SingleGraphDashboardThreeDGraphs.js +3 -3
- package/dist/SingleGraphDashboardThreeDGraphsFromConfig.cjs +1 -1
- package/dist/SingleGraphDashboardThreeDGraphsFromConfig.js +1 -1
- package/dist/SlopeChart.cjs +1 -1
- package/dist/SlopeChart.cjs.map +1 -1
- package/dist/SlopeChart.js +107 -113
- package/dist/SlopeChart.js.map +1 -1
- package/dist/SparkLine.cjs +1 -1
- package/dist/SparkLine.cjs.map +1 -1
- package/dist/SparkLine.js +3 -2
- package/dist/SparkLine.js.map +1 -1
- package/dist/StripChart.cjs +1 -1
- package/dist/StripChart.cjs.map +1 -1
- package/dist/StripChart.js +159 -159
- package/dist/StripChart.js.map +1 -1
- package/dist/ThreeDGlobe.cjs +1 -1
- package/dist/ThreeDGlobe.cjs.map +1 -1
- package/dist/ThreeDGlobe.js +3 -3
- package/dist/ThreeDGlobe.js.map +1 -1
- package/dist/TreeMapGraph.cjs +1 -1
- package/dist/TreeMapGraph.cjs.map +1 -1
- package/dist/TreeMapGraph.js +194 -200
- package/dist/TreeMapGraph.js.map +1 -1
- package/dist/ensureCompleteData-DkQYPeDa.cjs +2 -0
- package/dist/ensureCompleteData-DkQYPeDa.cjs.map +1 -0
- package/dist/{ensureCompleteData-BALdOrsS.js → ensureCompleteData-DlmibgaI.js} +28 -8
- package/dist/ensureCompleteData-DlmibgaI.js.map +1 -0
- package/dist/fetchAndParseData-Ba-_CgxS.cjs +16 -0
- package/dist/fetchAndParseData-Ba-_CgxS.cjs.map +1 -0
- package/dist/fetchAndParseData-sapWbnYk.js +583 -0
- package/dist/fetchAndParseData-sapWbnYk.js.map +1 -0
- package/dist/fetchAndParseData.cjs +1 -1
- package/dist/fetchAndParseData.js +1 -1
- package/dist/getJenks-BbngDoBQ.js +19 -0
- package/dist/getJenks-BbngDoBQ.js.map +1 -0
- package/dist/getJenks-GYmdwBqm.cjs +2 -0
- package/dist/getJenks-GYmdwBqm.cjs.map +1 -0
- package/dist/getSliderMarks-9cNoRkDx.js +1023 -0
- package/dist/getSliderMarks-9cNoRkDx.js.map +1 -0
- package/dist/getSliderMarks-CRIbTGYV.cjs +6 -0
- package/dist/getSliderMarks-CRIbTGYV.cjs.map +1 -0
- package/dist/getUniqValue-DiCh_MOD.js +13 -0
- package/dist/getUniqValue-DiCh_MOD.js.map +1 -0
- package/dist/getUniqValue-RViz8tTw.cjs +2 -0
- package/dist/getUniqValue-RViz8tTw.cjs.map +1 -0
- package/dist/{index-BMgDMxKJ.js → index-37q0ULNQ.js} +44 -50
- package/dist/index-37q0ULNQ.js.map +1 -0
- package/dist/index-CVlCtJbC.cjs +2 -0
- package/dist/index-CVlCtJbC.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -6
- package/dist/sort-DfK1b0F5.js +34 -0
- package/dist/sort-DfK1b0F5.js.map +1 -0
- package/dist/sort-O96oMZLb.cjs +2 -0
- package/dist/sort-O96oMZLb.cjs.map +1 -0
- package/dist/transformData.cjs +1 -1
- package/dist/transformData.js +3 -3
- package/dist/transformDataForAggregation-KXGm6flX.cjs +2 -0
- package/dist/{transformDataForAggregation-BVxVu4yY.cjs.map → transformDataForAggregation-KXGm6flX.cjs.map} +1 -1
- package/dist/{transformDataForAggregation-1BYVFqvF.js → transformDataForAggregation-sBpdlX8n.js} +40 -44
- package/dist/{transformDataForAggregation-1BYVFqvF.js.map → transformDataForAggregation-sBpdlX8n.js.map} +1 -1
- package/dist/{transformDataForGraphFromFile-BC9Ha8hF.js → transformDataForGraphFromFile-ComYvzuz.js} +3 -3
- package/dist/{transformDataForGraphFromFile-BC9Ha8hF.js.map → transformDataForGraphFromFile-ComYvzuz.js.map} +1 -1
- package/dist/{transformDataForGraphFromFile-b41aNQYY.cjs → transformDataForGraphFromFile-DVZodTHd.cjs} +2 -2
- package/dist/{transformDataForGraphFromFile-b41aNQYY.cjs.map → transformDataForGraphFromFile-DVZodTHd.cjs.map} +1 -1
- package/dist/uniqBy-BHy4I8PK.js +8 -0
- package/dist/uniqBy-BHy4I8PK.js.map +1 -0
- package/dist/uniqBy-O05lp2S5.cjs +2 -0
- package/dist/uniqBy-O05lp2S5.cjs.map +1 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +2 -2
- package/package.json +1 -7
- package/dist/ensureCompleteData-BALdOrsS.js.map +0 -1
- package/dist/ensureCompleteData-BU5Zlccy.cjs +0 -2
- package/dist/ensureCompleteData-BU5Zlccy.cjs.map +0 -1
- package/dist/fetchAndParseData-DBOl1Icl.js +0 -1196
- package/dist/fetchAndParseData-DBOl1Icl.js.map +0 -1
- package/dist/fetchAndParseData-Dcy7AS_0.cjs +0 -16
- package/dist/fetchAndParseData-Dcy7AS_0.cjs.map +0 -1
- package/dist/getJenks-DW96UYNE.js +0 -23
- package/dist/getJenks-DW96UYNE.js.map +0 -1
- package/dist/getJenks-vofIZmeb.cjs +0 -2
- package/dist/getJenks-vofIZmeb.cjs.map +0 -1
- package/dist/getSliderMarks-C0jptXeP.js +0 -1054
- package/dist/getSliderMarks-C0jptXeP.js.map +0 -1
- package/dist/getSliderMarks-CtsEXiLV.cjs +0 -6
- package/dist/getSliderMarks-CtsEXiLV.cjs.map +0 -1
- package/dist/getUniqValue-CfuE_l9c.cjs +0 -2
- package/dist/getUniqValue-CfuE_l9c.cjs.map +0 -1
- package/dist/getUniqValue-CttuU_wn.js +0 -20
- package/dist/getUniqValue-CttuU_wn.js.map +0 -1
- package/dist/index-AqnpA7_O.js +0 -631
- package/dist/index-AqnpA7_O.js.map +0 -1
- package/dist/index-BJOeaYTk.cjs +0 -2
- package/dist/index-BJOeaYTk.cjs.map +0 -1
- package/dist/index-BMgDMxKJ.js.map +0 -1
- package/dist/index-DYH8g9WA.cjs +0 -2
- package/dist/index-DYH8g9WA.cjs.map +0 -1
- package/dist/index-Da2GUKrr.cjs +0 -2
- package/dist/index-Da2GUKrr.cjs.map +0 -1
- package/dist/index-fwdktvAS.js +0 -707
- package/dist/index-fwdktvAS.js.map +0 -1
- package/dist/transformDataForAggregation-BVxVu4yY.cjs +0 -2
package/dist/DonutChart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonutChart.js","sources":["../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../src/Components/Graphs/DonutChart/Graph.tsx","../src/Components/Graphs/DonutChart/index.tsx"],"sourcesContent":["export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport isEqual from 'fast-deep-equal';\r\nimport { pie, arc } from 'd3-shape';\r\nimport { useState } from 'react';\r\nimport { H2, P } from '@undp/design-system-react/Typography';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\n\r\nimport { ClassNameObject, DonutChartDataType, StyleObject } from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\n\r\ninterface Props {\r\n mainText?: string | { label: string; suffix?: string; prefix?: string };\r\n radius: number;\r\n colors: string[];\r\n subNote?: string;\r\n strokeWidth: number;\r\n data: DonutChartDataType[];\r\n\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n\r\n onSeriesMouseOver?: (_d: any) => void;\r\n\r\n onSeriesMouseClick?: (_d: any) => void;\r\n colorDomain: string[];\r\n resetSelectionOnDoubleClick: boolean;\r\n\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n precision: number;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n mainText,\r\n data,\r\n radius,\r\n colors,\r\n subNote,\r\n strokeWidth,\r\n tooltip,\r\n onSeriesMouseOver,\r\n onSeriesMouseClick,\r\n colorDomain,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision,\r\n } = props;\r\n const pieData = pie()\r\n .sort(null)\r\n .startAngle(0)\r\n\r\n .value((d: any) => d.size);\r\n\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n\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 return (\r\n <>\r\n <svg\r\n width={`${radius * 2}px`}\r\n height={`${radius * 2}px`}\r\n viewBox={`0 0 ${radius * 2} ${radius * 2}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${radius} ${radius})`}>\r\n {mainText || subNote ? (\r\n <foreignObject\r\n y={0 - (radius - strokeWidth)}\r\n x={0 - (radius - strokeWidth)}\r\n width={2 * (radius - strokeWidth)}\r\n height={2 * (radius - strokeWidth)}\r\n >\r\n <div className='flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4'>\r\n {mainText ? (\r\n <H2\r\n marginBottom='none'\r\n className='donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center'\r\n >\r\n {typeof mainText === 'string'\r\n ? mainText\r\n : data.findIndex(d => d.label === mainText.label) !== -1\r\n ? numberFormattingFunction(\r\n data[data.findIndex(d => d.label === mainText.label)].size,\r\n 'NA',\r\n precision,\r\n mainText.prefix,\r\n mainText.suffix,\r\n )\r\n : 'NA'}\r\n </H2>\r\n ) : null}\r\n {subNote ? (\r\n <P\r\n marginBottom='none'\r\n size='base'\r\n leading='none'\r\n className='donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {subNote}\r\n </P>\r\n ) : typeof mainText === 'string' || !mainText ? null : (\r\n <P\r\n size='base'\r\n marginBottom='none'\r\n leading='none'\r\n className='donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {mainText.label}\r\n </P>\r\n )}\r\n </div>\r\n </foreignObject>\r\n ) : null}\r\n {pieData(data as any).map((d, i) => (\r\n <path\r\n key={i}\r\n d={\r\n arc()({\r\n innerRadius: radius - strokeWidth,\r\n outerRadius: radius,\r\n startAngle: d.startAngle,\r\n endAngle: d.endAngle,\r\n }) as string\r\n }\r\n style={{\r\n fill:\r\n colorDomain.indexOf((d.data as any).label) !== -1\r\n ? colors[colorDomain.indexOf((d.data as any).label) % colors.length]\r\n : Colors.gray,\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d.data) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d.data);\r\n if (onSeriesMouseClick) onSeriesMouseClick(d.data);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n />\r\n ))}\r\n </g>\r\n </svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport sortBy from 'lodash.sortby';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { P } from '@undp/design-system-react/Typography';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n DonutChartDataType,\r\n Languages,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: DonutChartDataType[];\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 each segment */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: 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 /** Radius of the donut chart */\r\n radius?: 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\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\r\n // Graph Parameters\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Max width of the color scale as a css property */\r\n colorScaleMaxWidth?: string;\r\n /** Stroke width of the arcs and circle of the donut */\r\n strokeWidth?: number;\r\n /** Sorting order for data. This is overwritten by labelOrder prop */\r\n sortData?: 'asc' | 'desc';\r\n /** Large text at the center of the donut chart. If the type is an object then the text is the value in the data for the label mentioned in the object */\r\n mainText?: string | { label: string; suffix?: string; prefix?: string };\r\n /** Small text at the center of the donut chart */\r\n subNote?: string;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\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 DonutChart(props: Props) {\r\n const {\r\n mainText,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n strokeWidth = 50,\r\n graphDescription,\r\n subNote,\r\n footNote,\r\n radius,\r\n data,\r\n showColorScale = true,\r\n padding,\r\n backgroundColor = false,\r\n tooltip,\r\n onSeriesMouseOver,\r\n graphID,\r\n onSeriesMouseClick,\r\n topMargin = 0,\r\n bottomMargin = 0,\r\n graphDownload = false,\r\n dataDownload = false,\r\n colorDomain,\r\n sortData,\r\n language = 'en',\r\n theme = 'light',\r\n width,\r\n height,\r\n minHeight = 0,\r\n relativeHeight,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n colorScaleMaxWidth,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision = 2,\r\n } = props;\r\n\r\n const [donutRadius, setDonutRadius] = useState(0);\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\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 || 420);\r\n setSvgHeight(height || entries[0].target.clientHeight || 420);\r\n setDonutRadius(\r\n (Math.min(\r\n ...[\r\n width || entries[0].target.clientWidth || 620,\r\n height || entries[0].target.clientHeight || 480,\r\n ],\r\n ) || 420) / 2,\r\n );\r\n });\r\n if (graphDiv.current) {\r\n setSvgHeight(graphDiv.current.clientHeight || 420);\r\n setSvgWidth(graphDiv.current.clientWidth || 420);\r\n setDonutRadius(\r\n (Math.min(...[graphDiv.current.clientWidth, graphDiv.current.clientHeight]) || 420) / 2,\r\n );\r\n if (!width || !radius) resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, [width, height, radius]);\r\n\r\n const sortedData =\r\n sortData === 'asc'\r\n ? sortBy(data, d => d.size)\r\n : sortData === 'desc'\r\n ? sortBy(data, d => d.size).reverse()\r\n : data;\r\n\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex ${width ? 'w-fit grow-0' : 'w-full grow'}`}\r\n dir={language === 'he' || language === 'ar' ? 'rtl' : undefined}\r\n >\r\n <div\r\n className={cn(\r\n `${\r\n !backgroundColor\r\n ? 'bg-transparent '\r\n : backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }ml-auto mr-auto flex flex-col grow h-inherit ${language || 'en'}`,\r\n width ? 'w-fit' : 'w-full',\r\n classNames?.graphContainer,\r\n )}\r\n style={{\r\n ...(styles?.graphContainer || {}),\r\n minHeight: 'inherit',\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 donut or pie chart chart. ${graphDescription ? ` ${graphDescription}` : ''}`\r\n }\r\n >\r\n <div\r\n className='flex grow'\r\n style={{ padding: backgroundColor ? padding || '1rem' : padding || 0 }}\r\n >\r\n <div className='flex flex-col gap-2 w-full grow justify-between'>\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv.current : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n <div\r\n className='flex grow flex-col justify-center items-stretch gap-8 flex-wrap'\r\n style={{\r\n width: width ? `${width}px` : '100%',\r\n padding: `${topMargin}px 0 ${bottomMargin}px 0`,\r\n }}\r\n >\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale ? (\r\n <div className='leading-0' aria-label='Color legend'>\r\n <div\r\n className='flex mb-0 ml-auto mr-auto justify-center gap-3.5 flex-wrap'\r\n style={{ maxWidth: colorScaleMaxWidth }}\r\n >\r\n {sortedData.map((d, i) => (\r\n <div className='flex gap-2 items-center' key={i}>\r\n <div\r\n className='w-3 h-3 rounded-full'\r\n style={{\r\n backgroundColor:\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(\r\n d.label,\r\n ) !== -1\r\n ? (colors || Colors[theme].categoricalColors.colors)[\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(\r\n d.label,\r\n ) %\r\n (colors || Colors[theme].categoricalColors.colors).length\r\n ]\r\n : Colors.gray,\r\n }}\r\n />\r\n <P\r\n marginBottom='none'\r\n size='sm'\r\n className='text-primary-gray-700 dark:text-primary-gray-100'\r\n >\r\n {d.label}:{' '}\r\n <span className='font-bold' style={{ fontSize: 'inherit' }}>\r\n {numberFormattingFunction(d.size, 'NA', precision, prefix, suffix)}\r\n </span>\r\n </P>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n <div\r\n className={`flex ${\r\n width ? 'grow-0' : 'grow'\r\n } items-center justify-center leading-0`}\r\n style={{\r\n width: width ? `${width}px` : '100%',\r\n height: height\r\n ? `${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 )}px`\r\n : 'auto',\r\n }}\r\n ref={graphDiv}\r\n aria-label='Graph area'\r\n >\r\n <div className='w-full flex justify-center leading-0'>\r\n {radius || donutRadius ? (\r\n <Graph\r\n mainText={mainText}\r\n data={\r\n sortData === 'asc'\r\n ? sortBy(data, d => d.size)\r\n : sortData === 'desc'\r\n ? sortBy(data, d => d.size).reverse()\r\n : data\r\n }\r\n colors={colors}\r\n radius={radius || donutRadius}\r\n subNote={subNote}\r\n strokeWidth={strokeWidth}\r\n tooltip={tooltip}\r\n colorDomain={colorDomain || sortedData.map(d => d.label)}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n precision={precision}\r\n />\r\n ) : null}\r\n </div>\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 ) : (\r\n <div />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["abs","atan2","cos","max","min","sin","sqrt","epsilon","pi","halfPi","tau","acos","x","asin","arcInnerRadius","d","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x0","y0","x1","y1","x2","y2","x3","y3","x10","y10","x32","y32","cornerTangents","r1","rc","cw","x01","y01","lo","ox","oy","x11","y11","x00","y00","dx","dy","d2","r","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","arc","innerRadius","outerRadius","cornerRadius","constant","padRadius","startAngle","endAngle","padAngle","context","path","withPath","buffer","r0","a0","a1","da","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","t0","t1","p0","p1","oc","ax","ay","bx","by","kc","lc","a","_","descending","b","identity","pie","value","sortValues","sort","data","i","n","array","j","k","sum","index","arcs","p","pa","v","Graph","props","mainText","radius","colors","subNote","strokeWidth","tooltip","onSeriesMouseOver","onSeriesMouseClick","colorDomain","resetSelectionOnDoubleClick","detailsOnClick","styles","classNames","precision","pieData","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","jsxs","Fragment","jsx","H2","numberFormattingFunction","P","Colors","event","isEqual","Tooltip","Modal","string2HTML","DonutChart","graphTitle","suffix","sources","prefix","graphDescription","footNote","showColorScale","padding","backgroundColor","graphID","topMargin","bottomMargin","graphDownload","dataDownload","sortData","language","theme","width","height","minHeight","relativeHeight","ariaLabel","colorScaleMaxWidth","donutRadius","setDonutRadius","svgWidth","setSvgWidth","svgHeight","setSvgHeight","graphDiv","useRef","graphParentDiv","useEffect","resizeObserver","entries","sortedData","sortBy","cn","GraphHeader","EmptyState","el","GraphFooter"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
|
|
1
|
+
{"version":3,"file":"DonutChart.js","sources":["../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../src/Components/Graphs/DonutChart/Graph.tsx","../src/Components/Graphs/DonutChart/index.tsx"],"sourcesContent":["export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport isEqual from 'fast-deep-equal';\r\nimport { pie, arc } from 'd3-shape';\r\nimport { useState } from 'react';\r\nimport { H2, P } from '@undp/design-system-react/Typography';\r\nimport { Modal } from '@undp/design-system-react/Modal';\r\n\r\nimport { ClassNameObject, DonutChartDataType, StyleObject } from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { string2HTML } from '@/Utils/string2HTML';\r\n\r\ninterface Props {\r\n mainText?: string | { label: string; suffix?: string; prefix?: string };\r\n radius: number;\r\n colors: string[];\r\n subNote?: string;\r\n strokeWidth: number;\r\n data: DonutChartDataType[];\r\n\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n\r\n onSeriesMouseOver?: (_d: any) => void;\r\n\r\n onSeriesMouseClick?: (_d: any) => void;\r\n colorDomain: string[];\r\n resetSelectionOnDoubleClick: boolean;\r\n\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n precision: number;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n mainText,\r\n data,\r\n radius,\r\n colors,\r\n subNote,\r\n strokeWidth,\r\n tooltip,\r\n onSeriesMouseOver,\r\n onSeriesMouseClick,\r\n colorDomain,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision,\r\n } = props;\r\n const pieData = pie()\r\n .sort(null)\r\n .startAngle(0)\r\n\r\n .value((d: any) => d.size);\r\n\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n\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 return (\r\n <>\r\n <svg\r\n width={`${radius * 2}px`}\r\n height={`${radius * 2}px`}\r\n viewBox={`0 0 ${radius * 2} ${radius * 2}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${radius} ${radius})`}>\r\n {mainText || subNote ? (\r\n <foreignObject\r\n y={0 - (radius - strokeWidth)}\r\n x={0 - (radius - strokeWidth)}\r\n width={2 * (radius - strokeWidth)}\r\n height={2 * (radius - strokeWidth)}\r\n >\r\n <div className='flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4'>\r\n {mainText ? (\r\n <H2\r\n marginBottom='none'\r\n className='donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center'\r\n >\r\n {typeof mainText === 'string'\r\n ? mainText\r\n : data.findIndex(d => d.label === mainText.label) !== -1\r\n ? numberFormattingFunction(\r\n data[data.findIndex(d => d.label === mainText.label)].size,\r\n 'NA',\r\n precision,\r\n mainText.prefix,\r\n mainText.suffix,\r\n )\r\n : 'NA'}\r\n </H2>\r\n ) : null}\r\n {subNote ? (\r\n <P\r\n marginBottom='none'\r\n size='base'\r\n leading='none'\r\n className='donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {subNote}\r\n </P>\r\n ) : typeof mainText === 'string' || !mainText ? null : (\r\n <P\r\n size='base'\r\n marginBottom='none'\r\n leading='none'\r\n className='donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {mainText.label}\r\n </P>\r\n )}\r\n </div>\r\n </foreignObject>\r\n ) : null}\r\n {pieData(data as any).map((d, i) => (\r\n <path\r\n key={i}\r\n d={\r\n arc()({\r\n innerRadius: radius - strokeWidth,\r\n outerRadius: radius,\r\n startAngle: d.startAngle,\r\n endAngle: d.endAngle,\r\n }) as string\r\n }\r\n style={{\r\n fill:\r\n colorDomain.indexOf((d.data as any).label) !== -1\r\n ? colors[colorDomain.indexOf((d.data as any).label) % colors.length]\r\n : Colors.gray,\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d.data) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d.data);\r\n if (onSeriesMouseClick) onSeriesMouseClick(d.data);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n />\r\n ))}\r\n </g>\r\n </svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <Modal\r\n open={mouseClickData !== undefined}\r\n onClose={() => {\r\n setMouseClickData(undefined);\r\n }}\r\n >\r\n <div\r\n className='graph-modal-content m-0'\r\n dangerouslySetInnerHTML={\r\n typeof detailsOnClick === 'string'\r\n ? { __html: string2HTML(detailsOnClick, mouseClickData) }\r\n : undefined\r\n }\r\n >\r\n {typeof detailsOnClick === 'function' ? detailsOnClick(mouseClickData) : null}\r\n </div>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { P } from '@undp/design-system-react/Typography';\r\nimport orderBy from 'lodash.orderby';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n DonutChartDataType,\r\n Languages,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: DonutChartDataType[];\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 each segment */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: 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 /** Radius of the donut chart */\r\n radius?: 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\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\r\n // Graph Parameters\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Max width of the color scale as a css property */\r\n colorScaleMaxWidth?: string;\r\n /** Stroke width of the arcs and circle of the donut */\r\n strokeWidth?: number;\r\n /** Sorting order for data. This is overwritten by labelOrder prop */\r\n sortData?: 'asc' | 'desc';\r\n /** Large text at the center of the donut chart. If the type is an object then the text is the value in the data for the label mentioned in the object */\r\n mainText?: string | { label: string; suffix?: string; prefix?: string };\r\n /** Small text at the center of the donut chart */\r\n subNote?: string;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\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 DonutChart(props: Props) {\r\n const {\r\n mainText,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n strokeWidth = 50,\r\n graphDescription,\r\n subNote,\r\n footNote,\r\n radius,\r\n data,\r\n showColorScale = true,\r\n padding,\r\n backgroundColor = false,\r\n tooltip,\r\n onSeriesMouseOver,\r\n graphID,\r\n onSeriesMouseClick,\r\n topMargin = 0,\r\n bottomMargin = 0,\r\n graphDownload = false,\r\n dataDownload = false,\r\n colorDomain,\r\n sortData,\r\n language = 'en',\r\n theme = 'light',\r\n width,\r\n height,\r\n minHeight = 0,\r\n relativeHeight,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n colorScaleMaxWidth,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision = 2,\r\n } = props;\r\n\r\n const [donutRadius, setDonutRadius] = useState(0);\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\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 || 420);\r\n setSvgHeight(height || entries[0].target.clientHeight || 420);\r\n setDonutRadius(\r\n (Math.min(\r\n ...[\r\n width || entries[0].target.clientWidth || 620,\r\n height || entries[0].target.clientHeight || 480,\r\n ],\r\n ) || 420) / 2,\r\n );\r\n });\r\n if (graphDiv.current) {\r\n setSvgHeight(graphDiv.current.clientHeight || 420);\r\n setSvgWidth(graphDiv.current.clientWidth || 420);\r\n setDonutRadius(\r\n (Math.min(...[graphDiv.current.clientWidth, graphDiv.current.clientHeight]) || 420) / 2,\r\n );\r\n if (!width || !radius) resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, [width, height, radius]);\r\n\r\n const sortedData = sortData ? orderBy(data, ['size'], [sortData]) : data;\r\n\r\n return (\r\n <div\r\n className={`${theme || 'light'} flex ${width ? 'w-fit grow-0' : 'w-full grow'}`}\r\n dir={language === 'he' || language === 'ar' ? 'rtl' : undefined}\r\n >\r\n <div\r\n className={cn(\r\n `${\r\n !backgroundColor\r\n ? 'bg-transparent '\r\n : backgroundColor === true\r\n ? 'bg-primary-gray-200 dark:bg-primary-gray-650 '\r\n : ''\r\n }ml-auto mr-auto flex flex-col grow h-inherit ${language || 'en'}`,\r\n width ? 'w-fit' : 'w-full',\r\n classNames?.graphContainer,\r\n )}\r\n style={{\r\n ...(styles?.graphContainer || {}),\r\n minHeight: 'inherit',\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 donut or pie chart chart. ${graphDescription ? ` ${graphDescription}` : ''}`\r\n }\r\n >\r\n <div\r\n className='flex grow'\r\n style={{ padding: backgroundColor ? padding || '1rem' : padding || 0 }}\r\n >\r\n <div className='flex flex-col gap-2 w-full grow justify-between'>\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv.current : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n <div\r\n className='flex grow flex-col justify-center items-stretch gap-8 flex-wrap'\r\n style={{\r\n width: width ? `${width}px` : '100%',\r\n padding: `${topMargin}px 0 ${bottomMargin}px 0`,\r\n }}\r\n >\r\n {data.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n <>\r\n {showColorScale ? (\r\n <div className='leading-0' aria-label='Color legend'>\r\n <div\r\n className='flex mb-0 ml-auto mr-auto justify-center gap-3.5 flex-wrap'\r\n style={{ maxWidth: colorScaleMaxWidth }}\r\n >\r\n {sortedData.map((d, i) => (\r\n <div className='flex gap-2 items-center' key={i}>\r\n <div\r\n className='w-3 h-3 rounded-full'\r\n style={{\r\n backgroundColor:\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(\r\n d.label,\r\n ) !== -1\r\n ? (colors || Colors[theme].categoricalColors.colors)[\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(\r\n d.label,\r\n ) %\r\n (colors || Colors[theme].categoricalColors.colors).length\r\n ]\r\n : Colors.gray,\r\n }}\r\n />\r\n <P\r\n marginBottom='none'\r\n size='sm'\r\n className='text-primary-gray-700 dark:text-primary-gray-100'\r\n >\r\n {d.label}:{' '}\r\n <span className='font-bold' style={{ fontSize: 'inherit' }}>\r\n {numberFormattingFunction(d.size, 'NA', precision, prefix, suffix)}\r\n </span>\r\n </P>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n ) : null}\r\n <div\r\n className={`flex ${\r\n width ? 'grow-0' : 'grow'\r\n } items-center justify-center leading-0`}\r\n style={{\r\n width: width ? `${width}px` : '100%',\r\n height: height\r\n ? `${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 )}px`\r\n : 'auto',\r\n }}\r\n ref={graphDiv}\r\n aria-label='Graph area'\r\n >\r\n <div className='w-full flex justify-center leading-0'>\r\n {radius || donutRadius ? (\r\n <Graph\r\n mainText={mainText}\r\n data={sortedData}\r\n colors={colors}\r\n radius={radius || donutRadius}\r\n subNote={subNote}\r\n strokeWidth={strokeWidth}\r\n tooltip={tooltip}\r\n colorDomain={colorDomain || sortedData.map(d => d.label)}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n precision={precision}\r\n />\r\n ) : null}\r\n </div>\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 ) : (\r\n <div />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"names":["abs","atan2","cos","max","min","sin","sqrt","epsilon","pi","halfPi","tau","acos","x","asin","arcInnerRadius","d","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x0","y0","x1","y1","x2","y2","x3","y3","x10","y10","x32","y32","cornerTangents","r1","rc","cw","x01","y01","lo","ox","oy","x11","y11","x00","y00","dx","dy","d2","r","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","arc","innerRadius","outerRadius","cornerRadius","constant","padRadius","startAngle","endAngle","padAngle","context","path","withPath","buffer","r0","a0","a1","da","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","t0","t1","p0","p1","oc","ax","ay","bx","by","kc","lc","a","_","descending","b","identity","pie","value","sortValues","sort","data","i","n","array","j","k","sum","index","arcs","p","pa","v","Graph","props","mainText","radius","colors","subNote","strokeWidth","tooltip","onSeriesMouseOver","onSeriesMouseClick","colorDomain","resetSelectionOnDoubleClick","detailsOnClick","styles","classNames","precision","pieData","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","jsxs","Fragment","jsx","H2","numberFormattingFunction","P","Colors","event","isEqual","Tooltip","Modal","string2HTML","DonutChart","graphTitle","suffix","sources","prefix","graphDescription","footNote","showColorScale","padding","backgroundColor","graphID","topMargin","bottomMargin","graphDownload","dataDownload","sortData","language","theme","width","height","minHeight","relativeHeight","ariaLabel","colorScaleMaxWidth","donutRadius","setDonutRadius","svgWidth","setSvgWidth","svgHeight","setSvgHeight","graphDiv","useRef","graphParentDiv","useEffect","resizeObserver","entries","sortedData","orderBy","cn","GraphHeader","EmptyState","el","GraphFooter"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
|
package/dist/DotDensityMap.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./index-CHPV5EwG-DDoeWRVt.cjs"),n=require("react"),be=require("./index-BJOeaYTk.cjs"),Ee=require("./parse-hMnG_lRV.cjs"),fe=require("./getSliderMarks-CtsEXiLV.cjs"),ke=require("./Spinner-DA6Z5E4n.cjs"),Ce=require("./index-DQA8q5sC.cjs"),L=require("./zoom-Bsbhil-K.cjs"),De=require("./Modal-tXZlLE5s.cjs"),Se=require("./Typography-k-kOjICQ.cjs"),Ne=require("./index-D05lK1Te.cjs"),$e=require("./Tooltip-De16GWhY.cjs"),R=require("./Colors.cjs"),Me=require("./string2HTML-z7CwHXcx.cjs"),ve=require("./index-BW_-wD2k.cjs"),qe=require("./pow-B5-jkdHU.cjs"),je=require("./select-Bnfk0lJx.cjs"),Oe=require("./use-in-view-sQJZ_xDO.cjs"),de=require("./proxy-BHRoeZgd.cjs"),Pe=require("./index-BW8iNx7E.cjs"),Ie=require("./GraphFooter.cjs"),Le=require("./GraphHeader.cjs"),Te=require("./fetchAndParseData-Dcy7AS_0.cjs"),we=require("./checkIfNullOrUndefined-BCW3Y1ML.cjs"),ze=require("./init-DU0ybBc_.cjs");function Ve(me){const{data:l,colors:c,mapData:k,colorLegendTitle:$,colorDomain:j,radius:v,height:m,width:a,scale:K,centerPoint:M,tooltip:Z,showLabels:pe,mapBorderWidth:J,mapBorderColor:Q,mapNoDataColor:H,onSeriesMouseOver:ee,showColorScale:xe,zoomScaleExtend:C,zoomTranslateExtend:he,highlightedDataPoints:te,onSeriesMouseClick:B,resetSelectionOnDoubleClick:g,detailsOnClick:D,styles:re,classNames:ge,mapProjection:T,zoomInteraction:q,animate:y,dimmedOpacity:oe,customLayers:ae,maxRadiusValue:ie}=me,[A,se]=n.useState(void 0),[F,h]=n.useState(!(a<680)),z=n.useRef(null),[O,G]=n.useState(void 0),[ne,f]=n.useState(void 0),[b,U]=n.useState(void 0),[le,V]=n.useState(void 0),P=n.useRef(null),_=Oe.useInView(P,{once:y.once,amount:y.amount}),X=n.useRef(null),d=l.filter(e=>e.radius===void 0||e.radius===null).length!==l.length?qe.sqrt().domain([0,ie]).range([.25,v]).nice():void 0;n.useEffect(()=>{const e=je.select(X.current),x=je.select(P.current),o=i=>{if(q==="noZoom")return!1;if(q==="button")return!i.type.includes("wheel");const t=i.type==="wheel",u=i.type.startsWith("touch"),w=i.type==="mousedown"||i.type==="mousemove";return u?!0:t?q==="scroll"?!0:i.ctrlKey:w&&!i.button&&!i.ctrlKey},E=L.zoom().scaleExtent(C).translateExtent(he||[[-20,-20],[a+20,m+20]]).filter(o).on("zoom",({transform:i})=>{e.attr("transform",i)});x.call(E),z.current=E},[m,a,q]);const p=L.turf_bbox_default(k),S=Ne.turf_center_of_mass_default(k),Y=p[2]-p[0],ce=p[3]-p[1],I=a*190/960*360/Y,ye=m*190/678*180/ce,s=K*Math.min(I,ye),N=T==="mercator"?L.geoMercator().rotate([0,0]).center(M||S.geometry.coordinates).translate([a/2,m/2]).scale(s):T==="equalEarth"?L.geoEqualEarth().rotate([0,0]).center(M||S.geometry.coordinates).translate([a/2,m/2]).scale(s):T==="naturalEarth"?L.geoNaturalEarth1().rotate([0,0]).center(M||S.geometry.coordinates).translate([a/2,m/2]).scale(s):T==="orthographic"?L.geoOrthographic().rotate([0,0]).center(M||S.geometry.coordinates).translate([a/2,m/2]).scale(s):L.geoAlbersUsa().rotate([0,0]).center(M||S.geometry.coordinates).translate([a/2,m/2]).scale(s),W=e=>{if(!P.current||!z.current)return;je.select(P.current).call(z.current.scaleBy,e==="in"?1.2:1/1.2)};return r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[r.jsxRuntimeExports.jsxs("div",{className:"relative",children:[r.jsxRuntimeExports.jsx(de.motion.svg,{width:`${a}px`,height:`${m}px`,viewBox:`0 0 ${a} ${m}`,ref:P,direction:"ltr",children:r.jsxRuntimeExports.jsxs("g",{ref:X,children:[ae.filter(e=>e.position==="before").map(e=>e.layer),k.features.map((e,x)=>r.jsxRuntimeExports.jsx("g",{children:e.geometry.type==="MultiPolygon"?e.geometry.coordinates.map((o,E)=>{let i="";return o.forEach(t=>{let u=" M";t.forEach((w,Re)=>{const ue=N([w[0],w[1]]);Re!==t.length-1?u=`${u}${ue[0]} ${ue[1]}L`:u=`${u}${ue[0]} ${ue[1]}`}),i+=u}),r.jsxRuntimeExports.jsx("path",{d:i,style:{stroke:Q,strokeWidth:J,fill:H}},E)}):e.geometry.coordinates.map((o,E)=>{let i="M";return o.forEach((t,u)=>{const w=N([t[0],t[1]]);u!==o.length-1?i=`${i}${w[0]} ${w[1]}L`:i=`${i}${w[0]} ${w[1]}`}),r.jsxRuntimeExports.jsx("path",{d:i,style:{stroke:Q,strokeWidth:J,fill:H}},E)})},x)),r.jsxRuntimeExports.jsx(Pe.AnimatePresence,{children:l.map(e=>{const x=l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray;return r.jsxRuntimeExports.jsxs(de.motion.g,{variants:{initial:{opacity:0},whileInView:{opacity:A?A===x?1:oe:te.length!==0?te.indexOf(e.label||"")!==-1?1:oe:1,transition:{duration:y.duration}}},initial:"initial",animate:_?"whileInView":"initial",exit:{opacity:0,transition:{duration:y.duration}},onMouseEnter:o=>{f(e),V(o.clientY),U(o.clientX),ee?.(e)},onMouseMove:o=>{f(e),V(o.clientY),U(o.clientX)},onMouseLeave:()=>{f(void 0),U(void 0),V(void 0),ee?.(void 0)},onClick:()=>{(B||D)&&(Ce.isEqual(O,e)&&g?(G(void 0),B?.(void 0)):(G(e),B?.(e)))},transform:`translate(${N([e.long,e.lat])[0]},${N([e.long,e.lat])[1]})`,children:[r.jsxRuntimeExports.jsx(de.motion.circle,{cx:0,cy:0,variants:{initial:{r:0,fill:l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray,stroke:l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray},whileInView:{r:d?d(e.radius||0):v,fill:l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray,stroke:l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray,transition:{duration:y.duration}}},initial:"initial",animate:_?"whileInView":"initial",exit:{r:0,transition:{duration:y.duration}},style:{fillOpacity:.8}}),pe&&e.label?r.jsxRuntimeExports.jsx(de.motion.text,{variants:{initial:{opacity:0,x:d?d(e.radius||0):v},whileInView:{opacity:1,x:d?d(e.radius||0):v,transition:{duration:y.duration}}},initial:"initial",animate:_?"whileInView":"initial",exit:{opacity:0,transition:{duration:y.duration}},y:0,className:"fill-primary-gray-600 dark:fill-primary-gray-300 text-sm",style:{textAnchor:"start"},dx:4,dy:5,children:e.label}):null]},e.label||`${e.lat}-${e.long}`)})}),ae.filter(e=>e.position==="after").map(e=>e.layer)]})}),l.filter(e=>e.color).length===0||xe===!1?null:r.jsxRuntimeExports.jsx("div",{className:"absolute left-4 bottom-4",children:F?r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[r.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:()=>{h(!1)},children:r.jsxRuntimeExports.jsx(ve.X,{})}),r.jsxRuntimeExports.jsxs("div",{className:"p-2",style:{backgroundColor:"rgba(240,240,240, 0.7)"},children:[$&&$!==""?r.jsxRuntimeExports.jsx("p",{className:"p-0 leading-normal overflow-hidden text-primary-gray-700 dark:text-primary-gray-300",style:{display:"-webkit-box",WebkitLineClamp:"1",WebkitBoxOrient:"vertical"},children:$}):null,r.jsxRuntimeExports.jsx("div",{className:"flex flex-col gap-3",children:j.map((e,x)=>r.jsxRuntimeExports.jsxs("div",{className:"flex gap-2 items-center",onMouseOver:()=>{se(c[x%c.length])},onMouseLeave:()=>{se(void 0)},children:[r.jsxRuntimeExports.jsx("div",{className:"w-2 h-2 rounded-full",style:{backgroundColor:c[x%c.length]}}),r.jsxRuntimeExports.jsx(Se.u,{size:"sm",marginBottom:"none",leading:"none",children:e})]},x))})]})]}):r.jsxRuntimeExports.jsx("button",{type:"button",className:"mb-0 border-0 bg-transparent p-0 self-start",onClick:()=>{h(!0)},children:r.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"})})}),q==="button"&&r.jsxRuntimeExports.jsxs("div",{className:"absolute left-4 top-4 flex flex-col",children:[r.jsxRuntimeExports.jsx("button",{onClick:()=>W("in"),className:"leading-0 px-2 py-3.5 text-primary-gray-700 border border-primary-gray-400 bg-primary-gray-200 dark:border-primary-gray-400 dark:bg-primary-gray-600 dark:text-primary-gray-100",children:"+"}),r.jsxRuntimeExports.jsx("button",{onClick:()=>W("out"),className:"leading-0 px-2 py-3.5 text-primary-gray-700 border border-t-0 border-primary-gray-400 bg-primary-gray-200 dark:border-primary-gray-400 dark:bg-primary-gray-600 dark:text-primary-gray-100",children:"–"})]})]}),D&&O!==void 0?r.jsxRuntimeExports.jsx(De.X,{open:O!==void 0,onClose:()=>{G(void 0)},children:r.jsxRuntimeExports.jsx("div",{className:"graph-modal-content m-0",dangerouslySetInnerHTML:typeof D=="string"?{__html:Me.string2HTML(D,O)}:void 0,children:typeof D=="function"?D(O):null})}):null,ne&&Z&&b&&le?r.jsxRuntimeExports.jsx($e.Tooltip,{data:ne,body:Z,xPos:b,yPos:le,backgroundStyle:re?.tooltip,className:ge?.tooltip}):null]})}function We(me){const{data:l,mapData:c="https://raw.githubusercontent.com/UNDP-Data/dv-country-geojson/refs/heads/main/worldMap.json",graphTitle:k,colors:$,sources:j,graphDescription:v,height:m,width:a,footNote:K="The designations employed and the presentation of material on this map do not imply the expression of any opinion whatsoever on the part of the Secretariat of the United Nations or UNDP concerning the legal status of any country, territory, city or area or its authorities, or concerning the delimitation of its frontiers or boundaries.",colorLegendTitle:M,colorDomain:Z,radius:pe=5,scale:J=.95,centerPoint:Q,padding:H,mapBorderWidth:ee=.5,mapNoDataColor:xe=R.Colors.light.graphNoData,backgroundColor:C=!1,showLabels:he=!1,mapBorderColor:te=R.Colors.light.grays["gray-500"],tooltip:B,relativeHeight:g,onSeriesMouseOver:D,isWorldMap:re=!0,showColorScale:ge=!0,zoomScaleExtend:T=[.8,6],zoomTranslateExtend:q,graphID:y,highlightedDataPoints:oe=[],onSeriesMouseClick:ae,graphDownload:ie=!1,dataDownload:A=!1,showAntarctica:se=!1,language:F="en",minHeight:h=0,theme:z="light",ariaLabel:O,resetSelectionOnDoubleClick:G=!0,detailsOnClick:ne,styles:f,classNames:b,mapProjection:U,zoomInteraction:le="button",animate:V=!1,dimmedOpacity:P=.3,customLayers:_=[],maxRadiusValue:X,timeline:d={enabled:!1,autoplay:!1,showOnlyActiveDate:!0}}=me,[p,S]=n.useState(0),[Y,ce]=n.useState(0),[I,ye]=n.useState(d.autoplay),s=fe.sort(be.uniqBy(l.filter(t=>t.date!==void 0&&t.date!==null),t=>t.date).map(t=>Ee.parse(`${t.date}`,d.dateFormat||"yyyy",new Date).getTime()),(t,u)=>ze.ascending(t,u)),[N,W]=n.useState(d.autoplay?0:s.length-1),[e,x]=n.useState(void 0),o=n.useRef(null),E=n.useRef(null);n.useEffect(()=>{const t=new ResizeObserver(u=>{S(a||u[0].target.clientWidth||760),ce(m||u[0].target.clientHeight||480)});return o.current&&(ce(o.current.clientHeight||480),S(o.current.clientWidth||760),a||t.observe(o.current)),()=>t.disconnect()},[a,m]),n.useEffect(()=>{typeof c=="string"?Te.fetchAndParseJSON(c).then(u=>{x(u)}):x(c)},[c]),n.useEffect(()=>{const t=setInterval(()=>{W(u=>u<s.length-1?u+1:0)},(d.speed||2)*1e3);return I||clearInterval(t),()=>clearInterval(t)},[s,I,d.speed]);const i=fe.getSliderMarks(s,N,d.showOnlyActiveDate,d.dateFormat||"yyyy");return r.jsxRuntimeExports.jsx("div",{className:`${z||"light"} flex ${a?"w-fit grow-0":"w-full grow"}`,dir:F==="he"||F==="ar"?"rtl":void 0,children:r.jsxRuntimeExports.jsx("div",{className:r.mo(`${C?C===!0?"bg-primary-gray-200 dark:bg-primary-gray-650 ":"":"bg-transparent "}ml-auto mr-auto flex flex-col grow h-inherit ${F||"en"}`,a?"w-fit":"w-full",b?.graphContainer),style:{...f?.graphContainer||{},...C&&C!==!0?{backgroundColor:C}:{}},id:y,ref:E,"aria-label":O||`${k?`The graph shows ${k}. `:""}This is a dot density map showing the distribution of a variable across a region or world, with each dot representing a data point.${v?` ${v}`:""}`,children:r.jsxRuntimeExports.jsx("div",{className:"flex grow",style:{padding:C?H||"1rem":H||0},children:r.jsxRuntimeExports.jsxs("div",{className:"flex flex-col w-full gap-4 grow justify-between",children:[k||v||ie||A?r.jsxRuntimeExports.jsx(Le.GraphHeader,{styles:{title:f?.title,description:f?.description},classNames:{title:b?.title,description:b?.description},graphTitle:k,graphDescription:v,width:a,graphDownload:ie?E.current:void 0,dataDownload:A?l.map(t=>t.data).filter(t=>t!==void 0).length>0?l.map(t=>t.data).filter(t=>t!==void 0):l.filter(t=>t!==void 0):null}):null,d.enabled&&s.length>0&&i?r.jsxRuntimeExports.jsxs("div",{className:"flex gap-6 items-center",dir:"ltr",children:[r.jsxRuntimeExports.jsx("button",{type:"button",onClick:()=>{ye(!I)},className:"p-0 border-0 cursor-pointer bg-transparent","aria-label":I?"Click to pause animation":"Click to play animation",children:I?r.jsxRuntimeExports.jsx(ve.Pause,{}):r.jsxRuntimeExports.jsx(ve.Play,{})}),r.jsxRuntimeExports.jsx(fe.xr,{min:s[0],max:s[s.length-1],marks:i,step:null,defaultValue:s[s.length-1],value:s[N],onChangeComplete:t=>{W(s.indexOf(t))},onChange:t=>{W(s.indexOf(t))},"aria-label":"Time slider. Use arrow keys to adjust selected time period."})]}):null,r.jsxRuntimeExports.jsx("div",{className:"flex flex-col grow justify-center leading-0",ref:o,"aria-label":"Map area",children:(a||p)&&(m||Y)&&e?r.jsxRuntimeExports.jsx(Ve,{data:l.filter(t=>d.enabled?t.date===Ee.format(new Date(s[N]),d.dateFormat||"yyyy"):t),mapData:se?e:{...e,features:e.features.filter(t=>t.properties.NAME!=="Antarctica")},colorDomain:l.filter(t=>t.color).length===0?[]:Z||be.uniqBy(l.filter(t=>!we.checkIfNullOrUndefined(t.color)),"color").map(t=>`${t.color}`),width:a||p,height:Math.max(h,m||(g?h?(a||p)*g>h?(a||p)*g:h:(a||p)*g:Y)),scale:J,centerPoint:Q,colors:l.filter(t=>t.color).length===0?$?[$]:[R.Colors.primaryColors["blue-600"]]:$||R.Colors[z].categoricalColors.colors,colorLegendTitle:M,radius:pe,mapBorderWidth:ee,mapNoDataColor:xe,mapBorderColor:te,tooltip:B,onSeriesMouseOver:D,showLabels:he,isWorldMap:re,showColorScale:ge,zoomScaleExtend:T,zoomTranslateExtend:q,onSeriesMouseClick:ae,highlightedDataPoints:oe,resetSelectionOnDoubleClick:G,styles:f,classNames:b,zoomInteraction:le,detailsOnClick:ne,mapProjection:U||(re?"naturalEarth":"mercator"),animate:V===!0?{duration:.5,once:!0,amount:.5}:V||{duration:0,once:!0,amount:0},dimmedOpacity:P,customLayers:_,maxRadiusValue:we.checkIfNullOrUndefined(X)?Math.max(...l.map(t=>t.radius).filter(t=>t!=null)):X}):r.jsxRuntimeExports.jsx("div",{style:{height:`${Math.max(h,m||(g?h?(a||p)*g>h?(a||p)*g:h:(a||p)*g:Y))}px`},className:"flex items-center justify-center",children:r.jsxRuntimeExports.jsx(ke.y,{"aria-label":"Loading graph"})})}),j||K?r.jsxRuntimeExports.jsx(Ie.GraphFooter,{styles:{footnote:f?.footnote,source:f?.source},classNames:{footnote:b?.footnote,source:b?.source},sources:j,footNote:K,width:a}):null]})})})})}exports.DotDensityMap=We;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./index-CHPV5EwG-DDoeWRVt.cjs"),n=require("react"),ve=require("./parse-hMnG_lRV.cjs"),be=require("./getSliderMarks-CRIbTGYV.cjs"),Re=require("./Spinner-DA6Z5E4n.cjs"),ke=require("./index-DQA8q5sC.cjs"),L=require("./zoom-Bsbhil-K.cjs"),Ce=require("./Modal-tXZlLE5s.cjs"),De=require("./Typography-k-kOjICQ.cjs"),Se=require("./index-D05lK1Te.cjs"),Ne=require("./Tooltip-De16GWhY.cjs"),R=require("./Colors.cjs"),$e=require("./string2HTML-z7CwHXcx.cjs"),je=require("./index-BW_-wD2k.cjs"),qe=require("./pow-B5-jkdHU.cjs"),fe=require("./select-Bnfk0lJx.cjs"),Me=require("./use-in-view-sQJZ_xDO.cjs"),de=require("./proxy-BHRoeZgd.cjs"),Oe=require("./index-BW8iNx7E.cjs"),Pe=require("./GraphFooter.cjs"),Ie=require("./GraphHeader.cjs"),Le=require("./fetchAndParseData-Ba-_CgxS.cjs"),Te=require("./checkIfNullOrUndefined-BCW3Y1ML.cjs"),Ee=require("./uniqBy-O05lp2S5.cjs"),ze=require("./sort-O96oMZLb.cjs"),Ve=require("./init-DU0ybBc_.cjs");function We(me){const{data:l,colors:c,mapData:k,colorLegendTitle:$,colorDomain:j,radius:v,height:m,width:a,scale:K,centerPoint:q,tooltip:Z,showLabels:pe,mapBorderWidth:J,mapBorderColor:Q,mapNoDataColor:B,onSeriesMouseOver:ee,showColorScale:xe,zoomScaleExtend:C,zoomTranslateExtend:he,highlightedDataPoints:te,onSeriesMouseClick:H,resetSelectionOnDoubleClick:g,detailsOnClick:D,styles:re,classNames:ge,mapProjection:T,zoomInteraction:M,animate:y,dimmedOpacity:oe,customLayers:ae,maxRadiusValue:ie}=me,[A,se]=n.useState(void 0),[F,h]=n.useState(!(a<680)),z=n.useRef(null),[O,G]=n.useState(void 0),[ne,f]=n.useState(void 0),[b,_]=n.useState(void 0),[le,V]=n.useState(void 0),P=n.useRef(null),U=Me.useInView(P,{once:y.once,amount:y.amount}),X=n.useRef(null),d=l.filter(e=>e.radius===void 0||e.radius===null).length!==l.length?qe.sqrt().domain([0,ie]).range([.25,v]).nice():void 0;n.useEffect(()=>{const e=fe.select(X.current),x=fe.select(P.current),o=i=>{if(M==="noZoom")return!1;if(M==="button")return!i.type.includes("wheel");const r=i.type==="wheel",u=i.type.startsWith("touch"),w=i.type==="mousedown"||i.type==="mousemove";return u?!0:r?M==="scroll"?!0:i.ctrlKey:w&&!i.button&&!i.ctrlKey},E=L.zoom().scaleExtent(C).translateExtent(he||[[-20,-20],[a+20,m+20]]).filter(o).on("zoom",({transform:i})=>{e.attr("transform",i)});x.call(E),z.current=E},[m,a,M]);const p=L.turf_bbox_default(k),S=Se.turf_center_of_mass_default(k),Y=p[2]-p[0],ce=p[3]-p[1],I=a*190/960*360/Y,ye=m*190/678*180/ce,s=K*Math.min(I,ye),N=T==="mercator"?L.geoMercator().rotate([0,0]).center(q||S.geometry.coordinates).translate([a/2,m/2]).scale(s):T==="equalEarth"?L.geoEqualEarth().rotate([0,0]).center(q||S.geometry.coordinates).translate([a/2,m/2]).scale(s):T==="naturalEarth"?L.geoNaturalEarth1().rotate([0,0]).center(q||S.geometry.coordinates).translate([a/2,m/2]).scale(s):T==="orthographic"?L.geoOrthographic().rotate([0,0]).center(q||S.geometry.coordinates).translate([a/2,m/2]).scale(s):L.geoAlbersUsa().rotate([0,0]).center(q||S.geometry.coordinates).translate([a/2,m/2]).scale(s),W=e=>{if(!P.current||!z.current)return;fe.select(P.current).call(z.current.scaleBy,e==="in"?1.2:1/1.2)};return t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[t.jsxRuntimeExports.jsxs("div",{className:"relative",children:[t.jsxRuntimeExports.jsx(de.motion.svg,{width:`${a}px`,height:`${m}px`,viewBox:`0 0 ${a} ${m}`,ref:P,direction:"ltr",children:t.jsxRuntimeExports.jsxs("g",{ref:X,children:[ae.filter(e=>e.position==="before").map(e=>e.layer),k.features.map((e,x)=>t.jsxRuntimeExports.jsx("g",{children:e.geometry.type==="MultiPolygon"?e.geometry.coordinates.map((o,E)=>{let i="";return o.forEach(r=>{let u=" M";r.forEach((w,we)=>{const ue=N([w[0],w[1]]);we!==r.length-1?u=`${u}${ue[0]} ${ue[1]}L`:u=`${u}${ue[0]} ${ue[1]}`}),i+=u}),t.jsxRuntimeExports.jsx("path",{d:i,style:{stroke:Q,strokeWidth:J,fill:B}},E)}):e.geometry.coordinates.map((o,E)=>{let i="M";return o.forEach((r,u)=>{const w=N([r[0],r[1]]);u!==o.length-1?i=`${i}${w[0]} ${w[1]}L`:i=`${i}${w[0]} ${w[1]}`}),t.jsxRuntimeExports.jsx("path",{d:i,style:{stroke:Q,strokeWidth:J,fill:B}},E)})},x)),t.jsxRuntimeExports.jsx(Oe.AnimatePresence,{children:l.map(e=>{const x=l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray;return t.jsxRuntimeExports.jsxs(de.motion.g,{variants:{initial:{opacity:0},whileInView:{opacity:A?A===x?1:oe:te.length!==0?te.indexOf(e.label||"")!==-1?1:oe:1,transition:{duration:y.duration}}},initial:"initial",animate:U?"whileInView":"initial",exit:{opacity:0,transition:{duration:y.duration}},onMouseEnter:o=>{f(e),V(o.clientY),_(o.clientX),ee?.(e)},onMouseMove:o=>{f(e),V(o.clientY),_(o.clientX)},onMouseLeave:()=>{f(void 0),_(void 0),V(void 0),ee?.(void 0)},onClick:()=>{(H||D)&&(ke.isEqual(O,e)&&g?(G(void 0),H?.(void 0)):(G(e),H?.(e)))},transform:`translate(${N([e.long,e.lat])[0]},${N([e.long,e.lat])[1]})`,children:[t.jsxRuntimeExports.jsx(de.motion.circle,{cx:0,cy:0,variants:{initial:{r:0,fill:l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray,stroke:l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray},whileInView:{r:d?d(e.radius||0):v,fill:l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray,stroke:l.filter(o=>o.color).length===0?c[0]:e.color?c[j.indexOf(`${e.color}`)]:R.Colors.gray,transition:{duration:y.duration}}},initial:"initial",animate:U?"whileInView":"initial",exit:{r:0,transition:{duration:y.duration}},style:{fillOpacity:.8}}),pe&&e.label?t.jsxRuntimeExports.jsx(de.motion.text,{variants:{initial:{opacity:0,x:d?d(e.radius||0):v},whileInView:{opacity:1,x:d?d(e.radius||0):v,transition:{duration:y.duration}}},initial:"initial",animate:U?"whileInView":"initial",exit:{opacity:0,transition:{duration:y.duration}},y:0,className:"fill-primary-gray-600 dark:fill-primary-gray-300 text-sm",style:{textAnchor:"start"},dx:4,dy:5,children:e.label}):null]},e.label||`${e.lat}-${e.long}`)})}),ae.filter(e=>e.position==="after").map(e=>e.layer)]})}),l.filter(e=>e.color).length===0||xe===!1?null:t.jsxRuntimeExports.jsx("div",{className:"absolute left-4 bottom-4",children:F?t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[t.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:()=>{h(!1)},children:t.jsxRuntimeExports.jsx(je.X,{})}),t.jsxRuntimeExports.jsxs("div",{className:"p-2",style:{backgroundColor:"rgba(240,240,240, 0.7)"},children:[$&&$!==""?t.jsxRuntimeExports.jsx("p",{className:"p-0 leading-normal overflow-hidden text-primary-gray-700 dark:text-primary-gray-300",style:{display:"-webkit-box",WebkitLineClamp:"1",WebkitBoxOrient:"vertical"},children:$}):null,t.jsxRuntimeExports.jsx("div",{className:"flex flex-col gap-3",children:j.map((e,x)=>t.jsxRuntimeExports.jsxs("div",{className:"flex gap-2 items-center",onMouseOver:()=>{se(c[x%c.length])},onMouseLeave:()=>{se(void 0)},children:[t.jsxRuntimeExports.jsx("div",{className:"w-2 h-2 rounded-full",style:{backgroundColor:c[x%c.length]}}),t.jsxRuntimeExports.jsx(De.u,{size:"sm",marginBottom:"none",leading:"none",children:e})]},x))})]})]}):t.jsxRuntimeExports.jsx("button",{type:"button",className:"mb-0 border-0 bg-transparent p-0 self-start",onClick:()=>{h(!0)},children:t.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"})})}),M==="button"&&t.jsxRuntimeExports.jsxs("div",{className:"absolute left-4 top-4 flex flex-col",children:[t.jsxRuntimeExports.jsx("button",{onClick:()=>W("in"),className:"leading-0 px-2 py-3.5 text-primary-gray-700 border border-primary-gray-400 bg-primary-gray-200 dark:border-primary-gray-400 dark:bg-primary-gray-600 dark:text-primary-gray-100",children:"+"}),t.jsxRuntimeExports.jsx("button",{onClick:()=>W("out"),className:"leading-0 px-2 py-3.5 text-primary-gray-700 border border-t-0 border-primary-gray-400 bg-primary-gray-200 dark:border-primary-gray-400 dark:bg-primary-gray-600 dark:text-primary-gray-100",children:"–"})]})]}),D&&O!==void 0?t.jsxRuntimeExports.jsx(Ce.X,{open:O!==void 0,onClose:()=>{G(void 0)},children:t.jsxRuntimeExports.jsx("div",{className:"graph-modal-content m-0",dangerouslySetInnerHTML:typeof D=="string"?{__html:$e.string2HTML(D,O)}:void 0,children:typeof D=="function"?D(O):null})}):null,ne&&Z&&b&&le?t.jsxRuntimeExports.jsx(Ne.Tooltip,{data:ne,body:Z,xPos:b,yPos:le,backgroundStyle:re?.tooltip,className:ge?.tooltip}):null]})}function Be(me){const{data:l,mapData:c="https://raw.githubusercontent.com/UNDP-Data/dv-country-geojson/refs/heads/main/worldMap.json",graphTitle:k,colors:$,sources:j,graphDescription:v,height:m,width:a,footNote:K="The designations employed and the presentation of material on this map do not imply the expression of any opinion whatsoever on the part of the Secretariat of the United Nations or UNDP concerning the legal status of any country, territory, city or area or its authorities, or concerning the delimitation of its frontiers or boundaries.",colorLegendTitle:q,colorDomain:Z,radius:pe=5,scale:J=.95,centerPoint:Q,padding:B,mapBorderWidth:ee=.5,mapNoDataColor:xe=R.Colors.light.graphNoData,backgroundColor:C=!1,showLabels:he=!1,mapBorderColor:te=R.Colors.light.grays["gray-500"],tooltip:H,relativeHeight:g,onSeriesMouseOver:D,isWorldMap:re=!0,showColorScale:ge=!0,zoomScaleExtend:T=[.8,6],zoomTranslateExtend:M,graphID:y,highlightedDataPoints:oe=[],onSeriesMouseClick:ae,graphDownload:ie=!1,dataDownload:A=!1,showAntarctica:se=!1,language:F="en",minHeight:h=0,theme:z="light",ariaLabel:O,resetSelectionOnDoubleClick:G=!0,detailsOnClick:ne,styles:f,classNames:b,mapProjection:_,zoomInteraction:le="button",animate:V=!1,dimmedOpacity:P=.3,customLayers:U=[],maxRadiusValue:X,timeline:d={enabled:!1,autoplay:!1,showOnlyActiveDate:!0}}=me,[p,S]=n.useState(0),[Y,ce]=n.useState(0),[I,ye]=n.useState(d.autoplay),s=ze.sort(Ee.uniqBy(l,"date",!0).map(r=>ve.parse(`${r}`,d.dateFormat||"yyyy",new Date).getTime()),(r,u)=>Ve.ascending(r,u)),[N,W]=n.useState(d.autoplay?0:s.length-1),[e,x]=n.useState(void 0),o=n.useRef(null),E=n.useRef(null);n.useEffect(()=>{const r=new ResizeObserver(u=>{S(a||u[0].target.clientWidth||760),ce(m||u[0].target.clientHeight||480)});return o.current&&(ce(o.current.clientHeight||480),S(o.current.clientWidth||760),a||r.observe(o.current)),()=>r.disconnect()},[a,m]),n.useEffect(()=>{typeof c=="string"?Le.fetchAndParseJSON(c).then(u=>{x(u)}):x(c)},[c]),n.useEffect(()=>{const r=setInterval(()=>{W(u=>u<s.length-1?u+1:0)},(d.speed||2)*1e3);return I||clearInterval(r),()=>clearInterval(r)},[s,I,d.speed]);const i=be.getSliderMarks(s,N,d.showOnlyActiveDate,d.dateFormat||"yyyy");return t.jsxRuntimeExports.jsx("div",{className:`${z||"light"} flex ${a?"w-fit grow-0":"w-full grow"}`,dir:F==="he"||F==="ar"?"rtl":void 0,children:t.jsxRuntimeExports.jsx("div",{className:t.mo(`${C?C===!0?"bg-primary-gray-200 dark:bg-primary-gray-650 ":"":"bg-transparent "}ml-auto mr-auto flex flex-col grow h-inherit ${F||"en"}`,a?"w-fit":"w-full",b?.graphContainer),style:{...f?.graphContainer||{},...C&&C!==!0?{backgroundColor:C}:{}},id:y,ref:E,"aria-label":O||`${k?`The graph shows ${k}. `:""}This is a dot density map showing the distribution of a variable across a region or world, with each dot representing a data point.${v?` ${v}`:""}`,children:t.jsxRuntimeExports.jsx("div",{className:"flex grow",style:{padding:C?B||"1rem":B||0},children:t.jsxRuntimeExports.jsxs("div",{className:"flex flex-col w-full gap-4 grow justify-between",children:[k||v||ie||A?t.jsxRuntimeExports.jsx(Ie.GraphHeader,{styles:{title:f?.title,description:f?.description},classNames:{title:b?.title,description:b?.description},graphTitle:k,graphDescription:v,width:a,graphDownload:ie?E.current:void 0,dataDownload:A?l.map(r=>r.data).filter(r=>r!==void 0).length>0?l.map(r=>r.data).filter(r=>r!==void 0):l.filter(r=>r!==void 0):null}):null,d.enabled&&s.length>0&&i?t.jsxRuntimeExports.jsxs("div",{className:"flex gap-6 items-center",dir:"ltr",children:[t.jsxRuntimeExports.jsx("button",{type:"button",onClick:()=>{ye(!I)},className:"p-0 border-0 cursor-pointer bg-transparent","aria-label":I?"Click to pause animation":"Click to play animation",children:I?t.jsxRuntimeExports.jsx(je.Pause,{}):t.jsxRuntimeExports.jsx(je.Play,{})}),t.jsxRuntimeExports.jsx(be.xr,{min:s[0],max:s[s.length-1],marks:i,step:null,defaultValue:s[s.length-1],value:s[N],onChangeComplete:r=>{W(s.indexOf(r))},onChange:r=>{W(s.indexOf(r))},"aria-label":"Time slider. Use arrow keys to adjust selected time period."})]}):null,t.jsxRuntimeExports.jsx("div",{className:"flex flex-col grow justify-center leading-0",ref:o,"aria-label":"Map area",children:(a||p)&&(m||Y)&&e?t.jsxRuntimeExports.jsx(We,{data:l.filter(r=>d.enabled?r.date===ve.format(new Date(s[N]),d.dateFormat||"yyyy"):r),mapData:se?e:{...e,features:e.features.filter(r=>r.properties.NAME!=="Antarctica")},colorDomain:l.filter(r=>r.color).length===0?[]:Z||Ee.uniqBy(l,"color",!0),width:a||p,height:Math.max(h,m||(g?h?(a||p)*g>h?(a||p)*g:h:(a||p)*g:Y)),scale:J,centerPoint:Q,colors:l.filter(r=>r.color).length===0?$?[$]:[R.Colors.primaryColors["blue-600"]]:$||R.Colors[z].categoricalColors.colors,colorLegendTitle:q,radius:pe,mapBorderWidth:ee,mapNoDataColor:xe,mapBorderColor:te,tooltip:H,onSeriesMouseOver:D,showLabels:he,isWorldMap:re,showColorScale:ge,zoomScaleExtend:T,zoomTranslateExtend:M,onSeriesMouseClick:ae,highlightedDataPoints:oe,resetSelectionOnDoubleClick:G,styles:f,classNames:b,zoomInteraction:le,detailsOnClick:ne,mapProjection:_||(re?"naturalEarth":"mercator"),animate:V===!0?{duration:.5,once:!0,amount:.5}:V||{duration:0,once:!0,amount:0},dimmedOpacity:P,customLayers:U,maxRadiusValue:Te.checkIfNullOrUndefined(X)?Math.max(...l.map(r=>r.radius).filter(r=>r!=null)):X}):t.jsxRuntimeExports.jsx("div",{style:{height:`${Math.max(h,m||(g?h?(a||p)*g>h?(a||p)*g:h:(a||p)*g:Y))}px`},className:"flex items-center justify-center",children:t.jsxRuntimeExports.jsx(Re.y,{"aria-label":"Loading graph"})})}),j||K?t.jsxRuntimeExports.jsx(Pe.GraphFooter,{styles:{footnote:f?.footnote,source:f?.source},classNames:{footnote:b?.footnote,source:b?.source},sources:j,footNote:K,width:a}):null]})})})})}exports.DotDensityMap=Be;
|
|
2
2
|
//# sourceMappingURL=DotDensityMap.cjs.map
|