{"version":3,"file":"BeeSwarmChart-SYzM4L6e.cjs","names":[],"sources":["../src/Components/Graphs/BeeSwarmChart/Graph.tsx","../src/Components/Graphs/BeeSwarmChart/index.tsx"],"sourcesContent":["import { cn } from '@undp/design-system-react/cn';\r\nimport { Spinner } from '@undp/design-system-react/Spinner';\r\nimport { P } from '@undp/design-system-react/Typography';\r\nimport { forceCollide, forceManyBody, forceSimulation, forceX, forceY } from 'd3-force';\r\nimport { scaleBand, scaleLinear, scaleSqrt } from 'd3-scale';\r\nimport isEqual from 'fast-deep-equal';\r\nimport orderBy from 'lodash.orderby';\r\nimport { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { XTicksAndGridLines } from '@/Components/Elements/Axes/XTicksAndGridLines';\r\nimport { YAxesLabels } from '@/Components/Elements/Axes/YAxesLabels';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { RefLineX, RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport type {\r\n  BeeSwarmChartDataType,\r\n  ClassNameObject,\r\n  CustomLayerDataType,\r\n  DistributionMarkerDataType,\r\n  PadZerosTypes,\r\n  ReferenceDataType,\r\n  StyleObject,\r\n} from '@/Types';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { getGraphDimensions } from '@/Utils/getGraphDimensions';\r\nimport { getMean, getMedian, getPercentile } from '@/Utils/getSimpleStatistics';\r\nimport { getTextColorBasedOnBgColor } from '@/Utils/getTextColorBasedOnBgColor';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\n\r\ninterface BeeSwarmChartDataTypeForBubbleChart extends BeeSwarmChartDataType {\r\n  x: number;\r\n  y: number;\r\n  vx: number;\r\n  vy: number;\r\n}\r\n\r\ninterface Props {\r\n  data: BeeSwarmChartDataType[];\r\n  circleColors: string[];\r\n  colorDomain: string[];\r\n  showTicks: boolean;\r\n  leftMargin?: number;\r\n  rightMargin?: number;\r\n  topMargin?: number;\r\n  bottomMargin?: number;\r\n  showLabels: boolean;\r\n  width: number;\r\n  height: number;\r\n  suffix: string;\r\n  prefix: string;\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  tooltip?: string | ((_d: any) => React.ReactNode);\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  onSeriesMouseOver?: (_d: any) => void;\r\n  refValues?: ReferenceDataType[];\r\n  selectedColor?: string;\r\n  startFromZero: boolean;\r\n  radius: number;\r\n  maxRadiusValue?: number;\r\n  maxValue?: number;\r\n  minValue?: number;\r\n  highlightedDataPoints?: (string | number)[];\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  onSeriesMouseClick?: (_d: any) => void;\r\n  resetSelectionOnDoubleClick: boolean;\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n  styles?: StyleObject;\r\n  classNames?: ClassNameObject;\r\n  noOfTicks: number;\r\n  dimmedOpacity: number;\r\n  precision: number;\r\n  customLayers: CustomLayerDataType[];\r\n  rtl?: boolean;\r\n  hideAxisLine: boolean;\r\n  locale: string;\r\n  padZeros: PadZerosTypes;\r\n  strictValuePosition: boolean;\r\n  hasGroups: boolean;\r\n  groupOrder?: (string | number)[];\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  showGroups: boolean | ((_d: any) => React.ReactNode);\r\n  truncateBy: number;\r\n  distributionMarkers: DistributionMarkerDataType[];\r\n  highlightSameLabelOnHover: boolean;\r\n  minGroupThickness?: number;\r\n  maxGroupThickness?: number;\r\n  groupPadding: number;\r\n}\r\n\r\nexport function VerticalGraph(props: Props) {\r\n  const {\r\n    data,\r\n    circleColors,\r\n    showTicks,\r\n    width,\r\n    height,\r\n    colorDomain,\r\n    topMargin = 25,\r\n    bottomMargin,\r\n    leftMargin = 20,\r\n    rightMargin = 20,\r\n    suffix,\r\n    prefix,\r\n    showLabels,\r\n    tooltip,\r\n    onSeriesMouseOver,\r\n    refValues,\r\n    selectedColor,\r\n    startFromZero,\r\n    radius,\r\n    maxRadiusValue,\r\n    maxValue,\r\n    minValue,\r\n    highlightedDataPoints,\r\n    onSeriesMouseClick,\r\n    resetSelectionOnDoubleClick,\r\n    detailsOnClick,\r\n    styles,\r\n    classNames,\r\n    noOfTicks,\r\n    dimmedOpacity,\r\n    precision,\r\n    customLayers,\r\n    hideAxisLine,\r\n    locale,\r\n    padZeros,\r\n    strictValuePosition,\r\n    hasGroups,\r\n    groupOrder,\r\n    showGroups,\r\n    truncateBy,\r\n    distributionMarkers,\r\n    highlightSameLabelOnHover,\r\n    minGroupThickness,\r\n    maxGroupThickness,\r\n    groupPadding,\r\n  } = props;\r\n  const svgRef = useRef(null);\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n  const [finalData, setFinalData] = useState<BeeSwarmChartDataTypeForBubbleChart[] | null>(null);\r\n  const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n  const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n  const margin = {\r\n    top: topMargin,\r\n    bottom: hasGroups && showGroups ? (bottomMargin ?? 25) : (bottomMargin ?? 10),\r\n    left: leftMargin,\r\n    right: rightMargin,\r\n  };\r\n  const { graphHeight, graphWidth } = getGraphDimensions({ width, height }, margin);\r\n\r\n  const dataOrderedWithGroup = useMemo(\r\n    () =>\r\n      data.filter((d) => !checkIfNullOrUndefined(d.radius)).length === 0\r\n        ? data.map((d) => (hasGroups ? d : { ...d, group: 'undefined' }))\r\n        : orderBy(\r\n            data\r\n              .map((d) => (hasGroups ? d : { ...d, group: 'undefined' }))\r\n              .filter((d) => !checkIfNullOrUndefined(d.radius)),\r\n            'radius',\r\n            'desc',\r\n          ),\r\n    [data, hasGroups],\r\n  );\r\n  const clusterOrder = useMemo(() => {\r\n    return (\r\n      groupOrder ?? [\r\n        ...new Set(data.map((d) => (hasGroups ? (d.group as string | number) : 'undefined'))),\r\n      ]\r\n    );\r\n  }, [groupOrder, data, hasGroups]);\r\n  const x = useMemo(() => {\r\n    return scaleBand<string | number>()\r\n      .domain(clusterOrder)\r\n      .range([\r\n        0,\r\n        minGroupThickness && clusterOrder.length > 1\r\n          ? Math.max(graphWidth, minGroupThickness * clusterOrder.length)\r\n          : maxGroupThickness && clusterOrder.length > 1\r\n            ? Math.min(graphWidth, maxGroupThickness * clusterOrder.length)\r\n            : graphWidth,\r\n      ])\r\n      .paddingInner(groupPadding);\r\n  }, [clusterOrder, graphWidth]);\r\n  const yMaxValue = !checkIfNullOrUndefined(maxValue)\r\n    ? (maxValue as number)\r\n    : Math.max(...data.filter((d) => !checkIfNullOrUndefined(d.position)).map((d) => d.position)) <\r\n          0 && !startFromZero\r\n      ? 0\r\n      : Math.max(...data.filter((d) => !checkIfNullOrUndefined(d.position)).map((d) => d.position));\r\n  const yMinValue = !checkIfNullOrUndefined(minValue)\r\n    ? (minValue as number)\r\n    : Math.min(...data.filter((d) => !checkIfNullOrUndefined(d.position)).map((d) => d.position)) >=\r\n          0 && !startFromZero\r\n      ? 0\r\n      : Math.min(...data.filter((d) => !checkIfNullOrUndefined(d.position)).map((d) => d.position));\r\n\r\n  const radiusScale = useMemo(\r\n    () =>\r\n      data.filter((d) => d.radius === undefined || d.radius === null).length !== data.length\r\n        ? scaleSqrt()\r\n            .domain([\r\n              0,\r\n              checkIfNullOrUndefined(maxRadiusValue)\r\n                ? Math.max(\r\n                    ...data.map((d) => d.radius).filter((d) => d !== undefined && d !== null),\r\n                  )\r\n                : (maxRadiusValue as number),\r\n            ])\r\n            .range([0.25, radius])\r\n            .nice()\r\n        : undefined,\r\n    [data, radius, maxRadiusValue],\r\n  );\r\n\r\n  const y = useMemo(\r\n    () => scaleLinear().domain([yMinValue, yMaxValue]).range([graphHeight, 0]).nice(),\r\n    [yMaxValue, yMaxValue, graphHeight],\r\n  );\r\n  const yTicks = y.ticks(noOfTicks);\r\n  useEffect(() => {\r\n    const dataTemp = (\r\n      dataOrderedWithGroup.map((d) => ({\r\n        ...d,\r\n        ...(d.data && { data: { ...d.data } }),\r\n      })) as BeeSwarmChartDataType[]\r\n    ).filter((d) => d.position);\r\n    if (strictValuePosition) {\r\n      dataTemp.forEach((d) => {\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        (d as any).fy = y(d.position as number);\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        (d as any).x = (x(d.group as string | number) ?? 0) + x.bandwidth() / 2;\r\n      });\r\n    }\r\n    // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n    const simulation = forceSimulation(dataTemp as any)\r\n      .force(\r\n        'x',\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        forceX((d: any) => (x(d.group as string | number) ?? 0) + x.bandwidth() / 2).strength(1),\r\n      )\r\n      .force(\r\n        'collide',\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        forceCollide((d: any) => (radiusScale ? radiusScale(d.radius || 0) + 1 : radius + 1)),\r\n      )\r\n      .force('charge', forceManyBody().strength(-15))\r\n      .alphaDecay(0.05);\r\n\r\n    if (!strictValuePosition) {\r\n      simulation.force(\r\n        'y',\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        forceY((d: any) => y(d.position as number)).strength(5),\r\n      );\r\n    }\r\n\r\n    simulation\r\n      .tick(10000)\r\n      .on('tick', () => {\r\n        setFinalData(dataTemp as BeeSwarmChartDataTypeForBubbleChart[]);\r\n      })\r\n      .on('end', () => {\r\n        setFinalData(dataTemp as BeeSwarmChartDataTypeForBubbleChart[]);\r\n      });\r\n  }, [radius, graphWidth, dataOrderedWithGroup, y, x, radiusScale, strictValuePosition]);\r\n  return (\r\n    <>\r\n      {finalData ? (\r\n        <svg\r\n          width={`${width}px`}\r\n          height={`${height}px`}\r\n          viewBox={`0 0 ${width} ${height}`}\r\n          direction='ltr'\r\n          ref={svgRef}\r\n        >\r\n          <g transform={`translate(${margin.left},${margin.top})`}>\r\n            {showTicks ? (\r\n              <>\r\n                <Axis\r\n                  hideAxisLine={hideAxisLine}\r\n                  y1={y(yMinValue < 0 ? 0 : yMinValue)}\r\n                  y2={y(yMinValue < 0 ? 0 : yMinValue)}\r\n                  x1={0 - margin.left}\r\n                  x2={graphWidth + margin.right}\r\n                  label={\r\n                    showTicks\r\n                      ? numberFormattingFunction(\r\n                          yMinValue < 0 ? 0 : yMinValue,\r\n                          undefined,\r\n                          precision,\r\n                          prefix,\r\n                          suffix,\r\n                          locale,\r\n                          padZeros,\r\n                        )\r\n                      : undefined\r\n                  }\r\n                  labelPos={{\r\n                    x: 0 - margin.left,\r\n                    y: y(yMinValue < 0 ? 0 : yMinValue),\r\n                    dx: 0,\r\n                    dy: yMaxValue < 0 ? '1em' : -5,\r\n                  }}\r\n                  classNames={{\r\n                    axis: classNames?.xAxis?.axis,\r\n                    label: classNames?.yAxis?.labels,\r\n                  }}\r\n                  styles={{\r\n                    axis: styles?.xAxis?.axis,\r\n                    label: styles?.yAxis?.labels,\r\n                  }}\r\n                />\r\n                <YTicksAndGridLines\r\n                  values={yTicks.filter((d) => d !== 0)}\r\n                  y={yTicks.filter((d) => d !== 0).map((d) => y(d))}\r\n                  x1={0 - margin.left}\r\n                  x2={graphWidth + margin.right}\r\n                  styles={{\r\n                    gridLines: styles?.yAxis?.gridLines,\r\n                    labels: styles?.yAxis?.labels,\r\n                  }}\r\n                  classNames={{\r\n                    gridLines: classNames?.yAxis?.gridLines,\r\n                    labels: classNames?.yAxis?.labels,\r\n                  }}\r\n                  suffix={suffix}\r\n                  prefix={prefix}\r\n                  labelType='secondary'\r\n                  showGridLines\r\n                  labelPos='vertical'\r\n                  precision={precision}\r\n                  locale={locale}\r\n                  padZeros={padZeros}\r\n                />\r\n              </>\r\n            ) : null}\r\n            {customLayers.filter((d) => d.position === 'before').map((d) => d.layer)}\r\n            {finalData.map((d) => (\r\n              // biome-ignore lint/a11y/noStaticElementInteractions: interaction for graph\r\n              <g\r\n                key={`${d.group}-${d.label}`}\r\n                transform={`translate(${d.x},${d.y})`}\r\n                opacity={\r\n                  selectedColor\r\n                    ? d.color\r\n                      ? circleColors[colorDomain.indexOf(d.color)] === selectedColor\r\n                        ? 1\r\n                        : dimmedOpacity\r\n                      : dimmedOpacity\r\n                    : mouseOverData\r\n                      ? mouseOverData.label === d.label &&\r\n                        (highlightSameLabelOnHover || mouseOverData.group === d.group)\r\n                        ? 1\r\n                        : dimmedOpacity\r\n                      : highlightedDataPoints\r\n                        ? highlightedDataPoints.indexOf(d.label) !== -1\r\n                          ? 0.85\r\n                          : dimmedOpacity\r\n                        : 0.85\r\n                }\r\n                onMouseEnter={(event) => {\r\n                  setMouseOverData(d);\r\n                  setEventY(event.clientY);\r\n                  setEventX(event.clientX);\r\n                  onSeriesMouseOver?.(d);\r\n                }}\r\n                onMouseMove={(event) => {\r\n                  setMouseOverData(d);\r\n                  setEventY(event.clientY);\r\n                  setEventX(event.clientX);\r\n                }}\r\n                onClick={() => {\r\n                  if (onSeriesMouseClick || detailsOnClick) {\r\n                    if (isEqual(mouseClickData, d) && resetSelectionOnDoubleClick) {\r\n                      setMouseClickData(undefined);\r\n                      onSeriesMouseClick?.(undefined);\r\n                    } else {\r\n                      setMouseClickData(d);\r\n                      onSeriesMouseClick?.(d);\r\n                    }\r\n                  }\r\n                }}\r\n                onMouseLeave={() => {\r\n                  setMouseOverData(undefined);\r\n                  setEventX(undefined);\r\n                  setEventY(undefined);\r\n                  onSeriesMouseOver?.(undefined);\r\n                }}\r\n              >\r\n                <circle\r\n                  cx={0}\r\n                  cy={0}\r\n                  r={radiusScale ? radiusScale(d.radius || 0) : radius}\r\n                  fill={\r\n                    data.filter((el) => el.color).length === 0\r\n                      ? circleColors[0]\r\n                      : !d.color\r\n                        ? Colors.gray\r\n                        : circleColors[colorDomain.indexOf(d.color)]\r\n                  }\r\n                />\r\n                {(radiusScale ? radiusScale(d.radius || 0) : radius) > 10 && showLabels ? (\r\n                  <g>\r\n                    <foreignObject\r\n                      y={0 - (radiusScale ? radiusScale(d.radius || 0) : radius)}\r\n                      x={0 - (radiusScale ? radiusScale(d.radius || 0) : radius)}\r\n                      width={2 * (radiusScale ? radiusScale(d.radius || 0) : radius)}\r\n                      height={2 * (radiusScale ? radiusScale(d.radius || 0) : radius)}\r\n                    >\r\n                      <div className='flex flex-col justify-center items-center h-inherit py-0 px-1.5'>\r\n                        {showLabels ? (\r\n                          <p\r\n                            className={cn(\r\n                              'text-center leading-xs m-0',\r\n                              classNames?.graphObjectValues,\r\n                            )}\r\n                            style={{\r\n                              fontSize: `${Math.min(\r\n                                Math.max(\r\n                                  Math.round(\r\n                                    (radiusScale ? radiusScale(d.radius || 0) : radius) / 4,\r\n                                  ),\r\n                                  10,\r\n                                ),\r\n                                Math.max(\r\n                                  Math.round(\r\n                                    ((radiusScale ? radiusScale(d.radius || 0) : radius) * 12) /\r\n                                      `${d.label}`.length,\r\n                                  ),\r\n                                  10,\r\n                                ),\r\n                                20,\r\n                              )}px`,\r\n                              hyphens: 'auto',\r\n                              color: getTextColorBasedOnBgColor(\r\n                                data.filter((el) => el.color).length === 0\r\n                                  ? circleColors[0]\r\n                                  : !d.color\r\n                                    ? Colors.gray\r\n                                    : circleColors[colorDomain.indexOf(d.color)],\r\n                              ),\r\n                              ...(styles?.graphObjectValues || {}),\r\n                            }}\r\n                          >\r\n                            {d.label}\r\n                          </p>\r\n                        ) : null}\r\n                      </div>\r\n                    </foreignObject>\r\n                  </g>\r\n                ) : null}\r\n              </g>\r\n            ))}\r\n            {clusterOrder.map((c) => (\r\n              <g key={`${c}`}>\r\n                {showGroups && hasGroups && clusterOrder.length > 1 && (\r\n                  <XAxesLabels\r\n                    value={\r\n                      typeof showGroups === 'function'\r\n                        ? showGroups(c)\r\n                        : `${c}`.length < truncateBy\r\n                          ? `${c}`\r\n                          : `${`${c}`.substring(0, truncateBy)}...`\r\n                    }\r\n                    y={y(0) + 5}\r\n                    x={x(`${c}`) as number}\r\n                    width={x.bandwidth()}\r\n                    height={margin.bottom}\r\n                    style={styles?.xAxis?.labels}\r\n                    className={classNames?.xAxis?.labels}\r\n                    alignment='top'\r\n                    animate={{ duration: 0, once: true, amount: 0 }}\r\n                    isInView={true}\r\n                  />\r\n                )}\r\n                {distributionMarkers.map((marker) => (\r\n                  <g\r\n                    key={`${c}-${marker.type}`}\r\n                    transform={`translate(${\r\n                      (x(c) ?? 0) +\r\n                      x.bandwidth() / 2 -\r\n                      (x.bandwidth() * (marker.relativeMarkerLength ?? 1)) / 2\r\n                    }, ${y(\r\n                      marker.type === 'mean'\r\n                        ? getMean(finalData.filter((d) => d.group === c).map((d) => d.position))\r\n                        : marker.type === 'median'\r\n                          ? getMedian(finalData.filter((d) => d.group === c).map((d) => d.position))\r\n                          : marker.type === 'q1'\r\n                            ? getPercentile(\r\n                                finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                                0.25,\r\n                              )\r\n                            : getPercentile(\r\n                                finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                                0.75,\r\n                              ),\r\n                    )})`}\r\n                  >\r\n                    <text\r\n                      y={0}\r\n                      dy='0.33em'\r\n                      x={x.bandwidth() * (marker.relativeMarkerLength ?? 1) + 3}\r\n                      style={{\r\n                        textAnchor: 'start',\r\n                        fill: marker.color || '#000000',\r\n                        ...marker.markerLabel?.style,\r\n                      }}\r\n                      className={`${marker.type}-marker-label text-sm text-content-secondary`}\r\n                    >\r\n                      {marker.markerLabel?.showType\r\n                        ? marker.type === 'mean'\r\n                          ? 'Mean: '\r\n                          : marker.type === 'median'\r\n                            ? 'Median: '\r\n                            : marker.type === 'q1'\r\n                              ? 'Q1: '\r\n                              : 'Q3: '\r\n                        : ''}\r\n                      {numberFormattingFunction(\r\n                        marker.type === 'mean'\r\n                          ? getMean(finalData.filter((d) => d.group === c).map((d) => d.position))\r\n                          : marker.type === 'median'\r\n                            ? getMedian(\r\n                                finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                              )\r\n                            : marker.type === 'q1'\r\n                              ? getPercentile(\r\n                                  finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                                  0.25,\r\n                                )\r\n                              : getPercentile(\r\n                                  finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                                  0.75,\r\n                                ),\r\n                        undefined,\r\n                        precision,\r\n                        prefix,\r\n                        suffix,\r\n                        locale,\r\n                        padZeros,\r\n                      )}\r\n                    </text>\r\n                    <line\r\n                      y1={0}\r\n                      x1={0}\r\n                      y2={0}\r\n                      x2={x.bandwidth() * (marker.relativeMarkerLength ?? 1)}\r\n                      className={`${marker.type}-marker`}\r\n                      style={marker.markerStyle}\r\n                      stroke={marker.color || '#000000'}\r\n                      strokeWidth={marker.strokeWidth ?? 2}\r\n                    />\r\n                  </g>\r\n                ))}\r\n              </g>\r\n            ))}\r\n            {refValues?.map((el) => (\r\n              <RefLineY\r\n                key={el.text}\r\n                text={el.text}\r\n                color={el.color}\r\n                y={y(el.value as number)}\r\n                x1={0 - margin.left}\r\n                x2={graphWidth + margin.right}\r\n                classNames={el.classNames}\r\n                styles={el.styles}\r\n                isInView={true}\r\n              />\r\n            ))}\r\n            {customLayers.filter((d) => d.position === 'after').map((d) => d.layer)}\r\n          </g>\r\n        </svg>\r\n      ) : (\r\n        <div style={{ width: `${width}px`, height: `${height}px` }}>\r\n          <div className='flex m-auto items-center justify-center p-0 leading-xs text-base h-40'>\r\n            <Spinner />\r\n          </div>\r\n        </div>\r\n      )}\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        <DetailsModal\r\n          body={detailsOnClick}\r\n          data={mouseClickData}\r\n          setData={setMouseClickData}\r\n          className={classNames?.modal}\r\n        />\r\n      ) : null}\r\n    </>\r\n  );\r\n}\r\n\r\nexport function HorizontalGraph(props: Props) {\r\n  const {\r\n    data,\r\n    circleColors,\r\n    showTicks,\r\n    width,\r\n    height,\r\n    colorDomain,\r\n    topMargin = 25,\r\n    bottomMargin = 10,\r\n    leftMargin,\r\n    rightMargin = 20,\r\n    showLabels,\r\n    tooltip,\r\n    onSeriesMouseOver,\r\n    refValues,\r\n    selectedColor,\r\n    startFromZero,\r\n    radius,\r\n    maxRadiusValue,\r\n    maxValue,\r\n    minValue,\r\n    highlightedDataPoints,\r\n    onSeriesMouseClick,\r\n    rtl,\r\n    resetSelectionOnDoubleClick,\r\n    detailsOnClick,\r\n    suffix,\r\n    prefix,\r\n    styles,\r\n    classNames,\r\n    noOfTicks,\r\n    dimmedOpacity,\r\n    precision,\r\n    customLayers,\r\n    hideAxisLine,\r\n    locale,\r\n    padZeros,\r\n    strictValuePosition,\r\n    hasGroups,\r\n    groupOrder,\r\n    showGroups,\r\n    truncateBy,\r\n    distributionMarkers,\r\n    highlightSameLabelOnHover,\r\n    minGroupThickness,\r\n    maxGroupThickness,\r\n    groupPadding,\r\n  } = props;\r\n  const svgRef = useRef(null);\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n  const [finalData, setFinalData] = useState<BeeSwarmChartDataTypeForBubbleChart[] | null>(null);\r\n  const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n  const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n  const margin = {\r\n    top: topMargin,\r\n    bottom: bottomMargin,\r\n    left: hasGroups && showGroups ? (leftMargin ?? 100) : (leftMargin ?? 10),\r\n    right: rightMargin,\r\n  };\r\n  const { graphHeight, graphWidth } = getGraphDimensions({ width, height }, margin);\r\n\r\n  const dataOrderedWithGroup = useMemo(\r\n    () =>\r\n      data.filter((d) => !checkIfNullOrUndefined(d.radius)).length === 0\r\n        ? data.map((d) => (hasGroups ? d : { ...d, group: 'undefined' }))\r\n        : orderBy(\r\n            data\r\n              .map((d) => (hasGroups ? d : { ...d, group: 'undefined' }))\r\n              .filter((d) => !checkIfNullOrUndefined(d.radius)),\r\n            'radius',\r\n            'desc',\r\n          ),\r\n    [data, hasGroups],\r\n  );\r\n  const xMaxValue = !checkIfNullOrUndefined(maxValue)\r\n    ? (maxValue as number)\r\n    : Math.max(...data.filter((d) => !checkIfNullOrUndefined(d.position)).map((d) => d.position)) <\r\n          0 && !startFromZero\r\n      ? 0\r\n      : Math.max(...data.filter((d) => !checkIfNullOrUndefined(d.position)).map((d) => d.position));\r\n  const xMinValue = !checkIfNullOrUndefined(minValue)\r\n    ? (minValue as number)\r\n    : Math.min(...data.filter((d) => !checkIfNullOrUndefined(d.position)).map((d) => d.position)) >=\r\n          0 && !startFromZero\r\n      ? 0\r\n      : Math.min(...data.filter((d) => !checkIfNullOrUndefined(d.position)).map((d) => d.position));\r\n\r\n  const radiusScale = useMemo(\r\n    () =>\r\n      data.filter((d) => d.radius === undefined || d.radius === null).length !== data.length\r\n        ? scaleSqrt()\r\n            .domain([\r\n              0,\r\n              checkIfNullOrUndefined(maxRadiusValue)\r\n                ? Math.max(\r\n                    ...data.map((d) => d.radius).filter((d) => d !== undefined && d !== null),\r\n                  )\r\n                : (maxRadiusValue as number),\r\n            ])\r\n            .range([0.25, radius])\r\n            .nice()\r\n        : undefined,\r\n    [data, radius, maxRadiusValue],\r\n  );\r\n  const x = useMemo(\r\n    () => scaleLinear().domain([xMinValue, xMaxValue]).range([0, graphWidth]).nice(),\r\n    [xMinValue, xMaxValue, graphWidth],\r\n  );\r\n  const xTicks = x.ticks(noOfTicks);\r\n\r\n  const clusterOrder = useMemo(() => {\r\n    return (\r\n      groupOrder ?? [\r\n        ...new Set(\r\n          data\r\n            .map((d) => (hasGroups ? d : { ...d, group: 'undefined' }))\r\n            .map((d) => d.group as string | number),\r\n        ),\r\n      ]\r\n    );\r\n  }, [groupOrder, data, hasGroups]);\r\n  const y = useMemo(() => {\r\n    return scaleBand<string | number>()\r\n      .domain(clusterOrder)\r\n      .range([\r\n        0,\r\n        minGroupThickness && clusterOrder.length > 1\r\n          ? Math.max(graphHeight, minGroupThickness * clusterOrder.length)\r\n          : maxGroupThickness && clusterOrder.length > 1\r\n            ? Math.min(graphHeight, maxGroupThickness * clusterOrder.length)\r\n            : graphHeight,\r\n      ])\r\n      .paddingInner(groupPadding);\r\n  }, [clusterOrder, graphHeight]);\r\n  useEffect(() => {\r\n    const dataTemp = (\r\n      dataOrderedWithGroup.map((d) => ({\r\n        ...d,\r\n        ...(d.data && { data: { ...d.data } }),\r\n      })) as BeeSwarmChartDataType[]\r\n    ).filter((d) => d.position);\r\n\r\n    if (strictValuePosition) {\r\n      dataTemp.forEach((d) => {\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        (d as any).fx = x(d.position as number);\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        (d as any).y = (y(d.group as string | number) ?? 0) + y.bandwidth() / 2;\r\n      });\r\n    }\r\n\r\n    // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n    const simulation = forceSimulation(dataTemp as any)\r\n      .force(\r\n        'y',\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        forceY((d: any) => (y(d.group as string | number) ?? 0) + y.bandwidth() / 2).strength(1),\r\n      )\r\n      .force(\r\n        'collide',\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        forceCollide((d: any) => (radiusScale ? radiusScale(d.radius || 0) + 1 : radius + 1)),\r\n      )\r\n      .force('charge', forceManyBody().strength(-15))\r\n      .alphaDecay(0.05);\r\n\r\n    if (!strictValuePosition) {\r\n      simulation.force(\r\n        'x',\r\n        // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n        forceX((d: any) => x(d.position as number)).strength(5),\r\n      );\r\n    }\r\n\r\n    simulation\r\n      .tick(10000)\r\n      .on('tick', () => {\r\n        setFinalData(dataTemp as BeeSwarmChartDataTypeForBubbleChart[]);\r\n      })\r\n      .on('end', () => {\r\n        setFinalData(dataTemp as BeeSwarmChartDataTypeForBubbleChart[]);\r\n      });\r\n  }, [radius, graphHeight, dataOrderedWithGroup, x, radiusScale, strictValuePosition]);\r\n\r\n  return (\r\n    <>\r\n      {finalData ? (\r\n        <svg\r\n          width={`${width}px`}\r\n          height={`${height}px`}\r\n          viewBox={`0 0 ${width} ${height}`}\r\n          direction='ltr'\r\n          ref={svgRef}\r\n        >\r\n          <g transform={`translate(${margin.left},${margin.top})`}>\r\n            {showTicks ? (\r\n              <>\r\n                <Axis\r\n                  hideAxisLine={hideAxisLine}\r\n                  x1={x(xMinValue < 0 ? 0 : xMinValue)}\r\n                  x2={x(xMinValue < 0 ? 0 : xMinValue)}\r\n                  y1={0 - margin.top}\r\n                  y2={graphHeight + margin.bottom}\r\n                  label={\r\n                    showTicks\r\n                      ? numberFormattingFunction(\r\n                          xMinValue < 0 ? 0 : xMinValue,\r\n                          undefined,\r\n                          precision,\r\n                          prefix,\r\n                          suffix,\r\n                          locale,\r\n                          padZeros,\r\n                        )\r\n                      : undefined\r\n                  }\r\n                  labelPos={{\r\n                    x: x(xMinValue < 0 ? 0 : xMinValue),\r\n                    y: 0 - topMargin,\r\n                    dy: '0.75em',\r\n                    dx: 3,\r\n                  }}\r\n                  classNames={{\r\n                    axis: classNames?.xAxis?.axis,\r\n                    label: classNames?.yAxis?.labels,\r\n                  }}\r\n                  styles={{\r\n                    axis: styles?.xAxis?.axis,\r\n                    label: styles?.yAxis?.labels,\r\n                  }}\r\n                />\r\n                <XTicksAndGridLines\r\n                  values={xTicks.filter((d) => d !== 0)}\r\n                  x={xTicks.filter((d) => d !== 0).map((d) => x(d))}\r\n                  y1={0 - topMargin}\r\n                  y2={graphHeight + margin.bottom}\r\n                  styles={{\r\n                    gridLines: styles?.xAxis?.gridLines,\r\n                    labels: styles?.xAxis?.labels,\r\n                  }}\r\n                  classNames={{\r\n                    gridLines: classNames?.xAxis?.gridLines,\r\n                    labels: classNames?.xAxis?.labels,\r\n                  }}\r\n                  suffix={suffix}\r\n                  prefix={prefix}\r\n                  labelType='secondary'\r\n                  showGridLines\r\n                  precision={precision}\r\n                  locale={locale}\r\n                  padZeros={padZeros}\r\n                />\r\n              </>\r\n            ) : null}\r\n            {customLayers.filter((d) => d.position === 'before').map((d) => d.layer)}\r\n            {finalData.map((d) => (\r\n              // biome-ignore lint/a11y/noStaticElementInteractions: interaction for graph\r\n              <g\r\n                key={`${d.label}-${d.group}`}\r\n                transform={`translate(${d.x},${d.y})`}\r\n                opacity={\r\n                  selectedColor\r\n                    ? d.color\r\n                      ? circleColors[colorDomain.indexOf(d.color)] === selectedColor\r\n                        ? 1\r\n                        : dimmedOpacity\r\n                      : dimmedOpacity\r\n                    : mouseOverData\r\n                      ? mouseOverData.label === d.label &&\r\n                        (highlightSameLabelOnHover || mouseOverData.group === d.group)\r\n                        ? 1\r\n                        : dimmedOpacity\r\n                      : highlightedDataPoints\r\n                        ? highlightedDataPoints.indexOf(d.label) !== -1\r\n                          ? 0.85\r\n                          : dimmedOpacity\r\n                        : 0.85\r\n                }\r\n                onMouseEnter={(event) => {\r\n                  setMouseOverData(d);\r\n                  setEventY(event.clientY);\r\n                  setEventX(event.clientX);\r\n                  onSeriesMouseOver?.(d);\r\n                }}\r\n                onMouseMove={(event) => {\r\n                  setMouseOverData(d);\r\n                  setEventY(event.clientY);\r\n                  setEventX(event.clientX);\r\n                }}\r\n                onClick={() => {\r\n                  if (onSeriesMouseClick || detailsOnClick) {\r\n                    if (isEqual(mouseClickData, d) && resetSelectionOnDoubleClick) {\r\n                      setMouseClickData(undefined);\r\n                      onSeriesMouseClick?.(undefined);\r\n                    } else {\r\n                      setMouseClickData(d);\r\n                      onSeriesMouseClick?.(d);\r\n                    }\r\n                  }\r\n                }}\r\n                onMouseLeave={() => {\r\n                  setMouseOverData(undefined);\r\n                  setEventX(undefined);\r\n                  setEventY(undefined);\r\n                  onSeriesMouseOver?.(undefined);\r\n                }}\r\n              >\r\n                <circle\r\n                  cx={0}\r\n                  cy={0}\r\n                  fill={\r\n                    data.filter((el) => el.color).length === 0\r\n                      ? circleColors[0]\r\n                      : !d.color\r\n                        ? Colors.gray\r\n                        : circleColors[colorDomain.indexOf(d.color)]\r\n                  }\r\n                  r={radiusScale ? radiusScale(d.radius || 0) : radius}\r\n                />\r\n                {(radiusScale ? radiusScale(d.radius || 0) : radius) > 10 && showLabels ? (\r\n                  <g>\r\n                    <foreignObject\r\n                      y={0 - (radiusScale ? radiusScale(d.radius || 0) : radius)}\r\n                      x={0 - (radiusScale ? radiusScale(d.radius || 0) : radius)}\r\n                      width={2 * (radiusScale ? radiusScale(d.radius || 0) : radius)}\r\n                      height={2 * (radiusScale ? radiusScale(d.radius || 0) : radius)}\r\n                    >\r\n                      <div className='flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-1.5'>\r\n                        {showLabels ? (\r\n                          <P\r\n                            className={cn(\r\n                              'text-center leading-xs m-0',\r\n                              classNames?.graphObjectValues,\r\n                            )}\r\n                            marginBottom='none'\r\n                            style={{\r\n                              fontSize: `${Math.min(\r\n                                Math.max(\r\n                                  Math.round(\r\n                                    (radiusScale ? radiusScale(d.radius || 0) : radius) / 4,\r\n                                  ),\r\n                                  10,\r\n                                ),\r\n                                Math.max(\r\n                                  Math.round(\r\n                                    ((radiusScale ? radiusScale(d.radius || 0) : radius) * 12) /\r\n                                      `${d.label}`.length,\r\n                                  ),\r\n                                  10,\r\n                                ),\r\n                                20,\r\n                              )}px`,\r\n                              color: getTextColorBasedOnBgColor(\r\n                                data.filter((el) => el.color).length === 0\r\n                                  ? circleColors[0]\r\n                                  : !d.color\r\n                                    ? Colors.gray\r\n                                    : circleColors[colorDomain.indexOf(d.color)],\r\n                              ),\r\n                              hyphens: 'auto',\r\n                              ...(styles?.graphObjectValues || {}),\r\n                            }}\r\n                          >\r\n                            {d.label}\r\n                          </P>\r\n                        ) : null}\r\n                      </div>\r\n                    </foreignObject>\r\n                  </g>\r\n                ) : null}\r\n              </g>\r\n            ))}\r\n            {clusterOrder.map((c) => (\r\n              <g key={c}>\r\n                {showGroups && hasGroups && clusterOrder.length > 1 && (\r\n                  <YAxesLabels\r\n                    key={c}\r\n                    value={\r\n                      typeof showGroups === 'function'\r\n                        ? showGroups(c)\r\n                        : `${c}`.length < truncateBy\r\n                          ? `${c}`\r\n                          : `${`${c}`.substring(0, truncateBy)}...`\r\n                    }\r\n                    y={y(c) || 0}\r\n                    x={0 - margin.left}\r\n                    width={margin.left}\r\n                    height={y.bandwidth()}\r\n                    alignment='right'\r\n                    style={styles?.yAxis?.labels}\r\n                    className={classNames?.yAxis?.labels}\r\n                    animate={{ duration: 0, once: true, amount: 0 }}\r\n                    isInView={true}\r\n                  />\r\n                )}\r\n                {distributionMarkers.map((marker) => (\r\n                  <g\r\n                    key={`${c}-${marker.type}`}\r\n                    transform={`translate(${x(\r\n                      marker.type === 'mean'\r\n                        ? getMean(finalData.filter((d) => d.group === c).map((d) => d.position))\r\n                        : marker.type === 'median'\r\n                          ? getMedian(finalData.filter((d) => d.group === c).map((d) => d.position))\r\n                          : marker.type === 'q1'\r\n                            ? getPercentile(\r\n                                finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                                0.25,\r\n                              )\r\n                            : getPercentile(\r\n                                finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                                0.75,\r\n                              ),\r\n                    )}, ${\r\n                      (y(c) ?? 0) +\r\n                      y.bandwidth() / 2 -\r\n                      (y.bandwidth() * (marker.relativeMarkerLength ?? 1)) / 2\r\n                    })`}\r\n                  >\r\n                    <text\r\n                      x={0}\r\n                      dy='-0.33em'\r\n                      y={-3}\r\n                      style={{\r\n                        textAnchor: 'middle',\r\n                        fill: marker.color || '#000000',\r\n                        ...marker.markerLabel?.style,\r\n                      }}\r\n                      className={`${marker.type}-marker-label text-sm text-content-secondary`}\r\n                    >\r\n                      {marker.markerLabel?.showType\r\n                        ? marker.type === 'mean'\r\n                          ? 'Mean: '\r\n                          : marker.type === 'median'\r\n                            ? 'Median: '\r\n                            : marker.type === 'q1'\r\n                              ? 'Q1: '\r\n                              : 'Q3: '\r\n                        : ''}\r\n                      {numberFormattingFunction(\r\n                        marker.type === 'mean'\r\n                          ? getMean(finalData.filter((d) => d.group === c).map((d) => d.position))\r\n                          : marker.type === 'median'\r\n                            ? getMedian(\r\n                                finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                              )\r\n                            : marker.type === 'q1'\r\n                              ? getPercentile(\r\n                                  finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                                  0.25,\r\n                                )\r\n                              : getPercentile(\r\n                                  finalData.filter((d) => d.group === c).map((d) => d.position),\r\n                                  0.75,\r\n                                ),\r\n                        undefined,\r\n                        precision,\r\n                        prefix,\r\n                        suffix,\r\n                        locale,\r\n                        padZeros,\r\n                      )}\r\n                    </text>\r\n                    <line\r\n                      x1={0}\r\n                      y1={0}\r\n                      x2={0}\r\n                      y2={y.bandwidth() * (marker.relativeMarkerLength ?? 1)}\r\n                      className={`${marker.type}-marker`}\r\n                      style={marker.markerStyle}\r\n                      stroke={marker.color || '#000000'}\r\n                      strokeWidth={marker.strokeWidth ?? 2}\r\n                    />\r\n                  </g>\r\n                ))}\r\n              </g>\r\n            ))}\r\n            {refValues?.map((el) => (\r\n              <RefLineX\r\n                key={el.text}\r\n                text={el.text}\r\n                color={el.color}\r\n                x={x(el.value as number)}\r\n                y1={0 - margin.top}\r\n                y2={graphHeight + margin.bottom}\r\n                textSide={x(el.value as number) > graphWidth * 0.75 || rtl ? 'left' : 'right'}\r\n                classNames={el.classNames}\r\n                styles={el.styles}\r\n                isInView={true}\r\n              />\r\n            ))}\r\n            {customLayers.filter((d) => d.position === 'after').map((d) => d.layer)}\r\n          </g>\r\n        </svg>\r\n      ) : (\r\n        <div style={{ width: `${width}px`, height: `${height}px` }}>\r\n          <div className='flex m-auto items-center justify-center p-0 leading-xs text-base h-40'>\r\n            <Spinner />\r\n          </div>\r\n        </div>\r\n      )}\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        <DetailsModal\r\n          body={detailsOnClick}\r\n          data={mouseClickData}\r\n          setData={setMouseClickData}\r\n          className={classNames?.modal}\r\n        />\r\n      ) : null}\r\n    </>\r\n  );\r\n}\r\n","import { useRef, useState } from 'react';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphArea, GraphContainer } from '@/Components/Elements/GraphContainer';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { useElementSize } from '@/hooks/useElementSize';\r\nimport type {\r\n  BeeSwarmChartDataType,\r\n  ClassNameObject,\r\n  CustomLayerDataType,\r\n  DistributionMarkerDataType,\r\n  Languages,\r\n  NumberFormatOptions,\r\n  ReferenceDataType,\r\n  SourcesDataType,\r\n  StyleObject,\r\n} from '@/Types';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\nimport { HorizontalGraph, VerticalGraph } from './Graph';\r\n\r\ninterface Props {\r\n  // Data\r\n  /** Array of data objects */\r\n  data: BeeSwarmChartDataType[];\r\n\r\n  /** Orientation of the graph */\r\n  orientation?: 'vertical' | 'horizontal';\r\n\r\n  // Titles, Labels, and Sources\r\n  /** Title of the graph */\r\n  graphTitle?: string | React.ReactNode;\r\n  /** Description of the graph */\r\n  graphDescription?: string | React.ReactNode;\r\n  /** Footnote for the graph */\r\n  footNote?: string | React.ReactNode;\r\n  /** Source data for the graph */\r\n  sources?: SourcesDataType[];\r\n  /** Accessibility label */\r\n  ariaLabel?: string;\r\n\r\n  // Colors and Styling\r\n  /** Color or array of colors for circle */\r\n  colors?: string | string[];\r\n  /** Domain of colors for the graph */\r\n  colorDomain?: string[];\r\n  /** Title for the color legend */\r\n  colorLegendTitle?: string;\r\n  /** Background color of the graph */\r\n  backgroundColor?: string | boolean;\r\n  /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n  styles?: StyleObject;\r\n  /** Custom class names */\r\n  classNames?: ClassNameObject;\r\n\r\n  // Size and Spacing\r\n  /** Width of the graph */\r\n  width?: number;\r\n  /** Height of the graph */\r\n  height?: number;\r\n  /** Minimum height of the graph */\r\n  minHeight?: number;\r\n  /** Relative height scaling factor. This overwrites the height props */\r\n  relativeHeight?: number;\r\n  /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n  padding?: string;\r\n  /** Left margin of the graph */\r\n  leftMargin?: number;\r\n  /** Right margin of the graph */\r\n  rightMargin?: number;\r\n  /** Top margin of the graph */\r\n  topMargin?: number;\r\n  /** Bottom margin of the graph */\r\n  bottomMargin?: number;\r\n  /** Custom order for . Only applicable of group is present in the data props */\r\n  groupOrder?: (string | number)[];\r\n  /** Maximum thickness of group. Only applicable of group is present in the data props  */\r\n  maxGroupThickness?: number;\r\n  /** Minimum thickness of group. Only applicable of group is present in the data props  */\r\n  minGroupThickness?: number;\r\n  /** Padding between groups. Only applicable of group is present in the data props*/\r\n  groupPadding?: number;\r\n\r\n  // Values and Ticks\r\n  /** Maximum value for the radius of the circle */\r\n  maxRadiusValue?: number;\r\n  /** Minimum value for position of the circle */\r\n  minValue?: number;\r\n  /** Maximum value for position of the circle */\r\n  maxValue?: number;\r\n  /** Reference values for comparison */\r\n  refValues?: ReferenceDataType[];\r\n  /** Number of ticks on the axis */\r\n  noOfTicks?: number;\r\n\r\n  // Graph Parameters\r\n  /** Toggle visibility of labels */\r\n  showLabels?: boolean;\r\n  /** Toggle visibility of groups or defines what is shown in the group label */\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  showGroups?: boolean | ((_d: any) => React.ReactNode);\r\n  /** Toggle visibility of values */\r\n  showTicks?: boolean;\r\n  /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n  showColorScale?: boolean;\r\n  /** Value by which the label are truncated. Only applicable if showGroups is true */\r\n  truncateBy?: number;\r\n  /** Toggle visibility of NA color in the color scale. This is only applicable if the data props hae color parameter and showColorScale prop is true */\r\n  showNAColor?: boolean;\r\n  /** Toggle visibility of axis line for the  main axis */\r\n  hideAxisLine?: boolean;\r\n  /** Defines if the data point are locked exactly to their data value on the axis; if false, nodes are pulled toward their value but may drift when crowded */\r\n  strictValuePosition?: boolean;\r\n  /** Data points to highlight. Use the label value from data to highlight the data point */\r\n  highlightedDataPoints?: (string | number)[];\r\n  /** Defines if all the data points with same labels are highlighted on hover */\r\n  highlightSameLabelOnHover?: boolean;\r\n  /** Defines the opacity of the non-highlighted data */\r\n  dimmedOpacity?: number;\r\n  /** Maximum radius of the circles  */\r\n  radius?: number;\r\n  /** Defines distribution markers  shown as a line for data points. */\r\n  distributionMarkers?: DistributionMarkerDataType[];\r\n  /** Configuration options for controlling number formatting, localization, prefixes/suffixes, precision, and zero padding. */\r\n  numberDisplayOptions?: NumberFormatOptions;\r\n  /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n  customLayers?: CustomLayerDataType[];\r\n  /** 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  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\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  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n  /** Callback for mouse over event */\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\r\n  onSeriesMouseOver?: (_d: any) => void;\r\n  /** Callback for mouse click event */\r\n  // biome-ignore lint/suspicious/noExplicitAny: undefined data type\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 BeeSwarmChart(props: Props) {\r\n  const {\r\n    data,\r\n    graphTitle,\r\n    topMargin,\r\n    bottomMargin,\r\n    leftMargin,\r\n    rightMargin,\r\n    colors,\r\n    sources,\r\n    graphDescription,\r\n    height,\r\n    width,\r\n    footNote,\r\n    colorDomain,\r\n    colorLegendTitle,\r\n    padding,\r\n    relativeHeight,\r\n    tooltip,\r\n    onSeriesMouseOver,\r\n    refValues,\r\n    showColorScale,\r\n    graphID,\r\n    radius = 5,\r\n    showLabels = true,\r\n    showTicks = true,\r\n    maxRadiusValue,\r\n    maxValue,\r\n    minValue,\r\n    highlightedDataPoints,\r\n    onSeriesMouseClick,\r\n    ariaLabel,\r\n    backgroundColor = false,\r\n    graphDownload = false,\r\n    dataDownload = false,\r\n    language = 'en',\r\n    showNAColor = true,\r\n    minHeight = 0,\r\n    theme = 'light',\r\n    resetSelectionOnDoubleClick = true,\r\n    detailsOnClick,\r\n    orientation = 'vertical',\r\n    numberDisplayOptions,\r\n    styles,\r\n    classNames,\r\n    noOfTicks = 5,\r\n    dimmedOpacity = 0.3,\r\n    customLayers = [],\r\n    hideAxisLine = false,\r\n    strictValuePosition = false,\r\n    truncateBy = 999,\r\n    showGroups = true,\r\n    groupOrder,\r\n    distributionMarkers = [],\r\n    highlightSameLabelOnHover = true,\r\n    minGroupThickness,\r\n    maxGroupThickness,\r\n    groupPadding = 0.1,\r\n  } = props;\r\n  const { graphDiv, svgWidth, svgHeight } = useElementSize<HTMLDivElement>();\r\n  const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n  const graphParentDiv = useRef<HTMLDivElement>(null);\r\n  const Comp = orientation === 'horizontal' ? HorizontalGraph : VerticalGraph;\r\n  return (\r\n    <GraphContainer\r\n      className={classNames?.graphContainer}\r\n      style={styles?.graphContainer}\r\n      id={graphID}\r\n      ref={graphParentDiv}\r\n      aria-label={ariaLabel}\r\n      backgroundColor={backgroundColor}\r\n      theme={theme}\r\n      language={language}\r\n      minHeight={minHeight}\r\n      width={width}\r\n      height={height}\r\n      relativeHeight={relativeHeight}\r\n      padding={padding}\r\n    >\r\n      {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n        <GraphHeader\r\n          styles={{\r\n            title: styles?.title,\r\n            description: styles?.description,\r\n          }}\r\n          classNames={{\r\n            title: classNames?.title,\r\n            description: classNames?.description,\r\n          }}\r\n          graphTitle={graphTitle}\r\n          graphDescription={graphDescription}\r\n          width={width}\r\n          graphDownload={graphDownload ? graphParentDiv : undefined}\r\n          dataDownload={\r\n            dataDownload\r\n              ? data.map((d) => d.data).filter((d) => d !== undefined).length > 0\r\n                ? data.map((d) => d.data).filter((d) => d !== undefined)\r\n                : data.filter((d) => d !== undefined)\r\n              : null\r\n          }\r\n        />\r\n      ) : null}\r\n      {showColorScale !== false && data.filter((el) => el.color).length !== 0 && data.length > 0 ? (\r\n        <ColorLegendWithMouseOver\r\n          width={width}\r\n          colorLegendTitle={colorLegendTitle}\r\n          colors={(colors as string[] | undefined) || Colors[theme].categoricalColors.colors}\r\n          colorDomain={colorDomain || (uniqBy(data, 'color', true) as string[])}\r\n          setSelectedColor={setSelectedColor}\r\n          showNAColor={showNAColor}\r\n          className={classNames?.colorLegend}\r\n        />\r\n      ) : null}\r\n      <GraphArea ref={graphDiv}>\r\n        {data.length === 0 && <EmptyState />}\r\n        {svgWidth && svgHeight && data.length > 0 ? (\r\n          <Comp\r\n            hideAxisLine={hideAxisLine}\r\n            data={data}\r\n            circleColors={\r\n              data.filter((el) => el.color).length === 0\r\n                ? colors\r\n                  ? [colors as string]\r\n                  : [Colors.primaryColors['blue-600']]\r\n                : (colors as string[] | undefined) || Colors[theme].categoricalColors.colors\r\n            }\r\n            colorDomain={\r\n              data.filter((el) => el.color).length === 0\r\n                ? []\r\n                : colorDomain || (uniqBy(data, 'color', true) as string[])\r\n            }\r\n            width={svgWidth}\r\n            selectedColor={selectedColor}\r\n            height={svgHeight}\r\n            showTicks={showTicks}\r\n            leftMargin={leftMargin}\r\n            rightMargin={rightMargin}\r\n            topMargin={topMargin}\r\n            bottomMargin={bottomMargin}\r\n            showLabels={showLabels}\r\n            tooltip={tooltip}\r\n            onSeriesMouseOver={onSeriesMouseOver}\r\n            refValues={refValues}\r\n            startFromZero={false}\r\n            radius={radius}\r\n            maxRadiusValue={maxRadiusValue}\r\n            maxValue={maxValue}\r\n            minValue={minValue}\r\n            highlightedDataPoints={highlightedDataPoints}\r\n            onSeriesMouseClick={onSeriesMouseClick}\r\n            resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n            detailsOnClick={detailsOnClick}\r\n            styles={styles}\r\n            groupOrder={groupOrder}\r\n            classNames={classNames}\r\n            noOfTicks={noOfTicks || 5}\r\n            dimmedOpacity={dimmedOpacity}\r\n            customLayers={customLayers}\r\n            locale={numberDisplayOptions?.locale || 'en'}\r\n            padZeros={numberDisplayOptions?.padZeros || 'none'}\r\n            suffix={numberDisplayOptions?.suffix || ''}\r\n            prefix={numberDisplayOptions?.prefix || ''}\r\n            precision={numberDisplayOptions?.precision ?? 2}\r\n            strictValuePosition={strictValuePosition}\r\n            hasGroups={data.every((d) => d.group !== undefined)}\r\n            truncateBy={truncateBy}\r\n            showGroups={showGroups}\r\n            distributionMarkers={distributionMarkers}\r\n            highlightSameLabelOnHover={highlightSameLabelOnHover}\r\n            minGroupThickness={minGroupThickness}\r\n            maxGroupThickness={maxGroupThickness}\r\n            groupPadding={groupPadding}\r\n          />\r\n        ) : null}\r\n      </GraphArea>\r\n      {sources || footNote ? (\r\n        <GraphFooter\r\n          styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n          classNames={{\r\n            footnote: classNames?.footnote,\r\n            source: classNames?.source,\r\n          }}\r\n          sources={sources}\r\n          footNote={footNote}\r\n          width={width}\r\n        />\r\n      ) : null}\r\n    </GraphContainer>\r\n  );\r\n}\r\n"],"mappings":"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"}