{"version":3,"file":"ParetoChart-D82lKFMW.cjs","names":[],"sources":["../src/Components/Graphs/ParetoChart/Graph.tsx","../src/Components/Graphs/ParetoChart/index.tsx"],"sourcesContent":["import { cn } from '@undp/design-system-react/cn';\r\nimport { scaleBand, scaleLinear } from 'd3-scale';\r\nimport {\r\n  curveLinear,\r\n  curveMonotoneX,\r\n  curveStep,\r\n  curveStepAfter,\r\n  curveStepBefore,\r\n  line,\r\n} from 'd3-shape';\r\nimport isEqual from 'fast-deep-equal';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\nimport { useRef, useState } from 'react';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport type {\r\n  AnimateDataType,\r\n  ClassNameObject,\r\n  CurveTypes,\r\n  CustomLayerDataType,\r\n  NumberFormatOptions,\r\n  ParetoChartDataType,\r\n  StyleObject,\r\n} from '@/Types';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { getGraphDimensions } from '@/Utils/getGraphDimensions';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\n\r\ninterface Props {\r\n  data: ParetoChartDataType[];\r\n  barColor: string;\r\n  lineColor: string;\r\n  axisTitles: [string, string];\r\n  width: number;\r\n  height: number;\r\n  rightMargin: number;\r\n  leftMargin: number;\r\n  topMargin: number;\r\n  bottomMargin: number;\r\n  sameAxes: boolean;\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  barPadding: number;\r\n  truncateBy: number;\r\n  showLabels: boolean;\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  noOfTicks: number;\r\n  showValues: boolean;\r\n  curveType: CurveTypes;\r\n  styles?: StyleObject;\r\n  classNames?: ClassNameObject;\r\n  animate: AnimateDataType;\r\n  naLabel: string;\r\n  customLayers: CustomLayerDataType[];\r\n  showAxisLabels: boolean;\r\n  lineNumberDisplayOptions?: NumberFormatOptions;\r\n  barNumberDisplayOptions?: NumberFormatOptions;\r\n}\r\ninterface DataFormattedType {\r\n  id: string;\r\n  label: number | string;\r\n  line?: number;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n  const {\r\n    data,\r\n    width,\r\n    height,\r\n    barColor,\r\n    lineColor,\r\n    axisTitles,\r\n    sameAxes,\r\n    rightMargin,\r\n    leftMargin,\r\n    topMargin,\r\n    bottomMargin,\r\n    tooltip,\r\n    showValues,\r\n    onSeriesMouseOver,\r\n    barPadding,\r\n    truncateBy,\r\n    showLabels,\r\n    onSeriesMouseClick,\r\n    resetSelectionOnDoubleClick,\r\n    detailsOnClick,\r\n    noOfTicks,\r\n    curveType,\r\n    styles,\r\n    classNames,\r\n    animate,\r\n    customLayers,\r\n    naLabel,\r\n    showAxisLabels,\r\n    lineNumberDisplayOptions,\r\n    barNumberDisplayOptions,\r\n  } = props;\r\n  const svgRef = useRef(null);\r\n  const isInView = useInView(svgRef, {\r\n    once: animate.once,\r\n    amount: animate.amount,\r\n  });\r\n  const curve =\r\n    curveType === 'linear'\r\n      ? curveLinear\r\n      : curveType === 'step'\r\n        ? curveStep\r\n        : curveType === 'stepAfter'\r\n          ? curveStepAfter\r\n          : curveType === 'stepBefore'\r\n            ? curveStepBefore\r\n            : curveMonotoneX;\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 [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: leftMargin + 50,\r\n    right: rightMargin + 65,\r\n  };\r\n  const { graphHeight, graphWidth } = getGraphDimensions({ width, height }, margin);\r\n\r\n  const dataWithId = data.map((d, i) => ({ ...d, id: `${i}` }));\r\n  const x = scaleBand()\r\n    .domain(dataWithId.map((d) => `${d.id}`))\r\n    .range([0, graphWidth])\r\n    .paddingInner(barPadding);\r\n  const minParam1 =\r\n    Math.min(...dataWithId.map((d) => d.bar).filter((d) => d !== undefined && d !== null)) !==\r\n    Infinity\r\n      ? Math.min(...dataWithId.map((d) => d.bar).filter((d) => d !== undefined && d !== null)) > 0\r\n        ? 0\r\n        : Math.min(...dataWithId.map((d) => d.bar).filter((d) => d !== undefined && d !== null))\r\n      : 0;\r\n  const minParam2 =\r\n    Math.min(...dataWithId.map((d) => d.line).filter((d) => d !== undefined && d !== null)) !==\r\n    Infinity\r\n      ? Math.min(...dataWithId.map((d) => d.line).filter((d) => d !== undefined && d !== null)) > 0\r\n        ? 0\r\n        : Math.min(...dataWithId.map((d) => d.line).filter((d) => d !== undefined && d !== null))\r\n      : 0;\r\n  const maxParam1 =\r\n    Math.max(...dataWithId.map((d) => d.bar).filter((d) => d !== undefined && d !== null)) !==\r\n    Infinity\r\n      ? Math.max(...dataWithId.map((d) => d.bar).filter((d) => d !== undefined && d !== null))\r\n      : 0;\r\n  const maxParam2 =\r\n    Math.max(...dataWithId.map((d) => d.line).filter((d) => d !== undefined && d !== null)) !==\r\n    Infinity\r\n      ? Math.max(...dataWithId.map((d) => d.line).filter((d) => d !== undefined && d !== null))\r\n      : 0;\r\n\r\n  const minParam = minParam1 < minParam2 ? minParam1 : minParam2;\r\n  const maxParam = maxParam1 > maxParam2 ? maxParam1 : maxParam2;\r\n\r\n  const y1 = scaleLinear()\r\n    .domain([\r\n      sameAxes ? minParam : minParam1,\r\n      sameAxes ? (maxParam > 0 ? maxParam : 0) : maxParam1 > 0 ? maxParam1 : 0,\r\n    ])\r\n    .range([graphHeight, 0])\r\n    .nice();\r\n  const y2 = scaleLinear()\r\n    .domain([\r\n      sameAxes ? minParam : minParam2,\r\n      sameAxes ? (maxParam > 0 ? maxParam : 0) : maxParam2 > 0 ? maxParam2 : 0,\r\n    ])\r\n    .range([graphHeight, 0])\r\n    .nice();\r\n\r\n  const lineShape = line<DataFormattedType>()\r\n    .defined((d) => !checkIfNullOrUndefined(d.line))\r\n    .x((d) => (x(`${d.id}`) as number) + x.bandwidth() / 2)\r\n    .y((d) => y2(d.line as number))\r\n    .curve(curve);\r\n  const y1Ticks = y1.ticks(noOfTicks);\r\n  const y2Ticks = y2.ticks(noOfTicks);\r\n  return (\r\n    <>\r\n      <motion.svg\r\n        width={`${width}px`}\r\n        height={`${height}px`}\r\n        viewBox={`0 0 ${width} ${height}`}\r\n        direction='ltr'\r\n        ref={svgRef}\r\n      >\r\n        <g transform={`translate(${margin.left},${margin.top})`}>\r\n          <g>\r\n            {y1Ticks.map((d, i) => (\r\n              // biome-ignore lint/suspicious/noArrayIndexKey: index is the unique identifier\r\n              <g key={i}>\r\n                <line\r\n                  y1={y1(d)}\r\n                  y2={y1(d)}\r\n                  x1={-15}\r\n                  x2={-20}\r\n                  style={{\r\n                    stroke: barColor,\r\n                    strokeWidth: 1,\r\n                    ...(styles?.yAxis?.gridLines || {}),\r\n                  }}\r\n                  className={classNames?.yAxis?.gridLines}\r\n                />\r\n                <text\r\n                  x={0 - 25}\r\n                  y={y1(d)}\r\n                  dy='0.33em'\r\n                  className={cn('text-xs', classNames?.yAxis?.labels)}\r\n                  style={{\r\n                    textAnchor: 'end',\r\n                    fill: barColor,\r\n                    ...(styles?.yAxis?.labels || {}),\r\n                  }}\r\n                >\r\n                  {numberFormattingFunction(\r\n                    d,\r\n                    naLabel,\r\n                    barNumberDisplayOptions?.precision ?? 2,\r\n                    barNumberDisplayOptions?.prefix,\r\n                    barNumberDisplayOptions?.suffix,\r\n                    barNumberDisplayOptions?.locale,\r\n                    barNumberDisplayOptions?.padZeros,\r\n                  )}\r\n                </text>\r\n              </g>\r\n            ))}\r\n            <Axis\r\n              y1={0}\r\n              y2={graphHeight}\r\n              x1={-15}\r\n              x2={-15}\r\n              classNames={{ axis: classNames?.xAxis?.axis }}\r\n              styles={{ axis: { stroke: barColor, ...(styles?.xAxis?.axis || {}) } }}\r\n            />\r\n            {showAxisLabels ? (\r\n              <AxisTitle\r\n                x={10 - margin.left}\r\n                y={graphHeight / 2}\r\n                style={{ fill: barColor, ...(styles?.yAxis?.title || {}) }}\r\n                className={classNames?.yAxis?.title}\r\n                text={\r\n                  axisTitles[0].length > 100\r\n                    ? `${axisTitles[0].substring(0, 100)}...`\r\n                    : axisTitles[0]\r\n                }\r\n                rotate90\r\n              />\r\n            ) : null}\r\n          </g>\r\n          <g>\r\n            {y2Ticks.map((d, i) => (\r\n              // biome-ignore lint/suspicious/noArrayIndexKey: index is the unique identifier\r\n              <g key={i}>\r\n                <line\r\n                  y1={y2(d)}\r\n                  y2={y2(d)}\r\n                  x1={graphWidth + 15}\r\n                  x2={graphWidth + 20}\r\n                  style={{\r\n                    stroke: lineColor,\r\n                    strokeWidth: 1,\r\n                    ...(styles?.yAxis?.gridLines || {}),\r\n                  }}\r\n                  className={classNames?.yAxis?.gridLines}\r\n                />\r\n                <text\r\n                  x={graphWidth + 25}\r\n                  y={y2(d)}\r\n                  dy='0.33em'\r\n                  dx={-2}\r\n                  style={{\r\n                    textAnchor: 'start',\r\n                    fill: lineColor,\r\n                    ...(styles?.yAxis?.labels || {}),\r\n                  }}\r\n                  className={cn('text-xs', classNames?.yAxis?.labels)}\r\n                >\r\n                  {numberFormattingFunction(\r\n                    d,\r\n                    naLabel,\r\n                    lineNumberDisplayOptions?.precision ?? 2,\r\n                    lineNumberDisplayOptions?.prefix,\r\n                    lineNumberDisplayOptions?.suffix,\r\n                    lineNumberDisplayOptions?.locale,\r\n                    lineNumberDisplayOptions?.padZeros,\r\n                  )}\r\n                </text>\r\n              </g>\r\n            ))}\r\n            <Axis\r\n              y1={0}\r\n              y2={graphHeight}\r\n              x1={graphWidth + 15}\r\n              x2={graphWidth + 15}\r\n              classNames={{ axis: classNames?.xAxis?.axis }}\r\n              styles={{ axis: { stroke: lineColor, ...(styles?.xAxis?.axis || {}) } }}\r\n            />\r\n            {showAxisLabels ? (\r\n              <AxisTitle\r\n                x={graphWidth + margin.right - 15}\r\n                y={graphHeight / 2}\r\n                style={{ fill: lineColor, ...(styles?.yAxis?.title || {}) }}\r\n                className={classNames?.yAxis?.title}\r\n                text={\r\n                  axisTitles[1].length > 100\r\n                    ? `${axisTitles[1].substring(0, 100)}...`\r\n                    : axisTitles[1]\r\n                }\r\n                rotate90\r\n              />\r\n            ) : null}\r\n          </g>\r\n          <Axis\r\n            y1={sameAxes ? y1(0) : graphHeight}\r\n            y2={sameAxes ? y1(0) : graphHeight}\r\n            x1={-15}\r\n            x2={graphWidth + 15}\r\n            classNames={{ axis: classNames?.xAxis?.axis }}\r\n            styles={{ axis: styles?.xAxis?.axis }}\r\n          />\r\n          {customLayers.filter((d) => d.position === 'before').map((d) => d.layer)}\r\n          <AnimatePresence>\r\n            {dataWithId.map((d, i) => {\r\n              return (\r\n                <motion.g\r\n                  className='undp-viz-g-with-hover'\r\n                  key={d.label}\r\n                  opacity={0.85}\r\n                  onMouseEnter={(event) => {\r\n                    setMouseOverData(d);\r\n                    setEventY(event.clientY);\r\n                    setEventX(event.clientX);\r\n                    onSeriesMouseOver?.(d);\r\n                  }}\r\n                  onClick={() => {\r\n                    if (onSeriesMouseClick || detailsOnClick) {\r\n                      if (isEqual(mouseClickData, d) && resetSelectionOnDoubleClick) {\r\n                        setMouseClickData(undefined);\r\n                        onSeriesMouseClick?.(undefined);\r\n                      } else {\r\n                        setMouseClickData(d);\r\n                        onSeriesMouseClick?.(d);\r\n                      }\r\n                    }\r\n                  }}\r\n                  onMouseMove={(event) => {\r\n                    setMouseOverData(d);\r\n                    setEventY(event.clientY);\r\n                    setEventX(event.clientX);\r\n                  }}\r\n                  onMouseLeave={() => {\r\n                    setMouseOverData(undefined);\r\n                    setEventX(undefined);\r\n                    setEventY(undefined);\r\n                    onSeriesMouseOver?.(undefined);\r\n                  }}\r\n                >\r\n                  <motion.rect\r\n                    variants={{\r\n                      initial: {\r\n                        attrY: y1(0),\r\n                        height: 0,\r\n                        opacity: 1,\r\n                        fill: barColor,\r\n                      },\r\n                      whileInView: {\r\n                        attrY: d.bar ? (d.bar > 0 ? y1(d.bar) : y1(0)) : 0,\r\n                        height: d.bar ? Math.abs(y1(d.bar) - y1(0)) : 0,\r\n                        opacity: 1,\r\n                        fill: barColor,\r\n                        transition: { duration: animate.duration },\r\n                      },\r\n                    }}\r\n                    initial='initial'\r\n                    animate={isInView ? 'whileInView' : 'initial'}\r\n                    exit={{\r\n                      attrY: y1(0),\r\n                      height: 0,\r\n                      opacity: 0,\r\n                      transition: { duration: animate.duration },\r\n                    }}\r\n                    x={x(`${i}`)}\r\n                    width={x.bandwidth()}\r\n                  />\r\n                  {showValues && !checkIfNullOrUndefined(d.bar) ? (\r\n                    <motion.text\r\n                      x={(x(`${d.id}`) as number) + x.bandwidth() / 2}\r\n                      exit={{\r\n                        attrY: y1(0),\r\n                        opacity: 0,\r\n                        transition: { duration: animate.duration },\r\n                      }}\r\n                      variants={{\r\n                        initial: {\r\n                          attrY: y1(0),\r\n                          opacity: 0,\r\n                          fill: barColor,\r\n                        },\r\n                        whileInView: {\r\n                          attrY: y1(d.bar || 0),\r\n                          opacity: 1,\r\n                          fill: barColor,\r\n                          transition: { duration: animate.duration },\r\n                        },\r\n                      }}\r\n                      initial='initial'\r\n                      animate={isInView ? 'whileInView' : 'initial'}\r\n                      style={{\r\n                        textAnchor: 'middle',\r\n                        ...(styles?.graphObjectValues || {}),\r\n                      }}\r\n                      className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n                      dy={d.bar ? (d.bar >= 0 ? '-5px' : '1em') : '-5px'}\r\n                    >\r\n                      {numberFormattingFunction(\r\n                        d.bar,\r\n                        naLabel,\r\n                        barNumberDisplayOptions?.precision ?? 2,\r\n                        barNumberDisplayOptions?.prefix,\r\n                        barNumberDisplayOptions?.suffix,\r\n                        barNumberDisplayOptions?.locale,\r\n                        barNumberDisplayOptions?.padZeros,\r\n                      )}\r\n                    </motion.text>\r\n                  ) : null}\r\n                  {showLabels ? (\r\n                    <XAxesLabels\r\n                      value={\r\n                        `${d.label}`.length < truncateBy\r\n                          ? `${d.label}`\r\n                          : `${`${d.label}`.substring(0, truncateBy)}...`\r\n                      }\r\n                      y={graphHeight + 5}\r\n                      x={x(`${d.id}`) 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={animate}\r\n                      isInView={isInView}\r\n                    />\r\n                  ) : null}\r\n                </motion.g>\r\n              );\r\n            })}\r\n            <motion.path\r\n              exit={{\r\n                opacity: 0,\r\n                transition: { duration: animate.duration },\r\n              }}\r\n              variants={{\r\n                initial: {\r\n                  d: lineShape(dataWithId.map((d) => ({ ...d, line: 0 }))) as string,\r\n                  opacity: 0,\r\n                  stroke: lineColor,\r\n                },\r\n                whileInView: {\r\n                  d: lineShape(dataWithId) as string,\r\n                  opacity: 1,\r\n                  stroke: lineColor,\r\n                  transition: { duration: animate.duration },\r\n                },\r\n              }}\r\n              initial='initial'\r\n              animate={isInView ? 'whileInView' : 'initial'}\r\n              style={{\r\n                fill: 'none',\r\n                strokeWidth: 2,\r\n              }}\r\n            />\r\n            {dataWithId.map((d) => (\r\n              <g key={d.label}>\r\n                {!checkIfNullOrUndefined(d.line) ? (\r\n                  // biome-ignore lint/a11y/noStaticElementInteractions: interaction for graph\r\n                  <g\r\n                    onMouseEnter={(event) => {\r\n                      setMouseOverData(d);\r\n                      setEventY(event.clientY);\r\n                      setEventX(event.clientX);\r\n                      onSeriesMouseOver?.(d);\r\n                    }}\r\n                    onClick={() => {\r\n                      if (onSeriesMouseClick || detailsOnClick) {\r\n                        if (isEqual(mouseClickData, d) && resetSelectionOnDoubleClick) {\r\n                          setMouseClickData(undefined);\r\n                          onSeriesMouseClick?.(undefined);\r\n                        } else {\r\n                          setMouseClickData(d);\r\n                          onSeriesMouseClick?.(d);\r\n                        }\r\n                      }\r\n                    }}\r\n                    onMouseMove={(event) => {\r\n                      setMouseOverData(d);\r\n                      setEventY(event.clientY);\r\n                      setEventX(event.clientX);\r\n                    }}\r\n                    onMouseLeave={() => {\r\n                      setMouseOverData(undefined);\r\n                      setEventX(undefined);\r\n                      setEventY(undefined);\r\n                      onSeriesMouseOver?.(undefined);\r\n                    }}\r\n                  >\r\n                    <motion.circle\r\n                      exit={{\r\n                        cy: y2(0),\r\n                        opacity: 0,\r\n                        transition: { duration: animate.duration },\r\n                      }}\r\n                      variants={{\r\n                        initial: {\r\n                          cy: y2(0),\r\n                          opacity: 0,\r\n                          fill: lineColor,\r\n                        },\r\n                        whileInView: {\r\n                          cy: y2(d.line as number),\r\n                          opacity: 1,\r\n                          fill: lineColor,\r\n                          transition: { duration: animate.duration },\r\n                        },\r\n                      }}\r\n                      initial='initial'\r\n                      animate={isInView ? 'whileInView' : 'initial'}\r\n                      cx={(x(d.id) as number) + x.bandwidth() / 2}\r\n                      r={\r\n                        graphWidth / dataWithId.length < 5\r\n                          ? 0\r\n                          : graphWidth / dataWithId.length < 20\r\n                            ? 2\r\n                            : 4\r\n                      }\r\n                    />\r\n                    {showValues ? (\r\n                      <motion.text\r\n                        x={(x(`${d.id}`) as number) + x.bandwidth() / 2}\r\n                        exit={{\r\n                          y: y2(0),\r\n                          opacity: 0,\r\n                          transition: { duration: animate.duration },\r\n                        }}\r\n                        style={{\r\n                          textAnchor: 'middle',\r\n                          ...(styles?.graphObjectValues || {}),\r\n                        }}\r\n                        variants={{\r\n                          initial: {\r\n                            y: y2(0),\r\n                            opacity: 0,\r\n                            fill: lineColor,\r\n                          },\r\n                          whileInView: {\r\n                            y: y2(d.line as number),\r\n                            opacity: 1,\r\n                            fill: lineColor,\r\n                            transition: { duration: animate.duration },\r\n                          },\r\n                        }}\r\n                        initial='initial'\r\n                        animate={isInView ? 'whileInView' : 'initial'}\r\n                        className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n                        dy='-5px'\r\n                      >\r\n                        {numberFormattingFunction(\r\n                          d.line,\r\n                          naLabel,\r\n                          lineNumberDisplayOptions?.precision ?? 2,\r\n                          lineNumberDisplayOptions?.prefix,\r\n                          lineNumberDisplayOptions?.suffix,\r\n                          lineNumberDisplayOptions?.locale,\r\n                          lineNumberDisplayOptions?.padZeros,\r\n                        )}\r\n                      </motion.text>\r\n                    ) : null}\r\n                  </g>\r\n                ) : null}\r\n              </g>\r\n            ))}\r\n          </AnimatePresence>\r\n          {customLayers.filter((d) => d.position === 'after').map((d) => d.layer)}\r\n        </g>\r\n      </motion.svg>\r\n      {mouseOverData && tooltip && eventX && eventY ? (\r\n        <Tooltip\r\n          data={mouseOverData}\r\n          body={tooltip}\r\n          xPos={eventX}\r\n          yPos={eventY}\r\n          backgroundStyle={styles?.tooltip}\r\n          className={classNames?.tooltip}\r\n        />\r\n      ) : null}\r\n      {detailsOnClick && mouseClickData !== undefined ? (\r\n        <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 } from 'react';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { ColorLegend } from '@/Components/Elements/ColorLegend';\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  AnimateDataType,\r\n  ClassNameObject,\r\n  CurveTypes,\r\n  CustomLayerDataType,\r\n  Languages,\r\n  NumberFormatOptions,\r\n  ParetoChartDataType,\r\n  SourcesDataType,\r\n  StyleObject,\r\n} from '@/Types';\r\nimport { Graph } from './Graph';\r\n\r\ninterface Props {\r\n  // Data\r\n  /** Array of data objects */\r\n  data: ParetoChartDataType[];\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 of the bars */\r\n  barColor?: string;\r\n  /** Color of the line */\r\n  lineColor?: 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  /** Padding between bars */\r\n  barPadding?: number;\r\n\r\n  // Values and Ticks\r\n  /** Truncate labels by specified length */\r\n  truncateBy?: number;\r\n  /** Number of ticks on the axis */\r\n  noOfTicks?: number;\r\n\r\n  // Graph Parameters\r\n  /** Toggle visibility of labels */\r\n  showLabels?: boolean;\r\n  /** Toggle visibility of values */\r\n  showValues?: boolean;\r\n  /** Curve type for the line */\r\n  curveType?: CurveTypes;\r\n  /** Enables same axis for bars and line */\r\n  sameAxes?: boolean;\r\n  /** Toggle visibility of color scale. */\r\n  showColorScale?: boolean;\r\n  /** Toggle visibility of labels of the axis. */\r\n  showAxisLabels?: boolean;\r\n  /** Title for the bar axis */\r\n  barAxisTitle?: string;\r\n  /** Title for the line axis */\r\n  lineAxisTitle?: string;\r\n  /** Defines how “NA” values should be displayed/labelled in the graph */\r\n  naLabel?: string;\r\n  /** Toggles if the graph animates in when loaded.  */\r\n  animate?: boolean | AnimateDataType;\r\n  /** Configuration options for lines controlling number formatting, localization, prefixes/suffixes, precision, and zero padding. */\r\n  lineNumberDisplayOptions?: NumberFormatOptions;\r\n  /** Configuration options for bars controlling number formatting, localization, prefixes/suffixes, precision, and zero padding. */\r\n  barNumberDisplayOptions?: 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 ParetoChart(props: Props) {\r\n  const {\r\n    data,\r\n    graphTitle,\r\n    sources,\r\n    graphDescription,\r\n    height,\r\n    width,\r\n    footNote,\r\n    padding,\r\n    lineColor = Colors.light.categoricalColors.colors[1],\r\n    barColor = Colors.light.categoricalColors.colors[0],\r\n    sameAxes = false,\r\n    backgroundColor = false,\r\n    leftMargin = 80,\r\n    rightMargin = 80,\r\n    topMargin = 20,\r\n    bottomMargin = 25,\r\n    lineAxisTitle = 'Line chart',\r\n    barAxisTitle = 'Bar graph',\r\n    tooltip,\r\n    relativeHeight,\r\n    onSeriesMouseOver,\r\n    graphID,\r\n    graphDownload = false,\r\n    dataDownload = false,\r\n    barPadding = 0.25,\r\n    truncateBy = 999,\r\n    showLabels = true,\r\n    onSeriesMouseClick,\r\n    language = 'en',\r\n    colorLegendTitle,\r\n    minHeight = 0,\r\n    theme = 'light',\r\n    ariaLabel,\r\n    resetSelectionOnDoubleClick = true,\r\n    detailsOnClick,\r\n    showValues = true,\r\n    noOfTicks = 5,\r\n    curveType = 'curve',\r\n    styles,\r\n    classNames,\r\n    animate = false,\r\n    customLayers = [],\r\n    naLabel = 'NA',\r\n    showColorScale = true,\r\n    showAxisLabels = true,\r\n    lineNumberDisplayOptions,\r\n    barNumberDisplayOptions,\r\n  } = props;\r\n  const { graphDiv, svgWidth, svgHeight } = useElementSize<HTMLDivElement>();\r\n  const graphParentDiv = useRef<HTMLDivElement>(null);\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 && data.length > 0 ? null : (\r\n        <ColorLegend\r\n          colorDomain={[barAxisTitle, lineAxisTitle]}\r\n          colors={[\r\n            barColor || Colors[theme].categoricalColors.colors[0],\r\n            lineColor || Colors[theme].categoricalColors.colors[1],\r\n          ]}\r\n          colorLegendTitle={colorLegendTitle}\r\n          showNAColor={false}\r\n          className={classNames?.colorLegend}\r\n        />\r\n      )}\r\n      <GraphArea ref={graphDiv}>\r\n        {data.length === 0 && <EmptyState />}\r\n        {svgWidth && svgHeight && data.length > 0 ? (\r\n          <Graph\r\n            data={data}\r\n            sameAxes={sameAxes}\r\n            lineColor={lineColor}\r\n            barColor={barColor}\r\n            width={svgWidth}\r\n            height={svgHeight}\r\n            truncateBy={truncateBy}\r\n            leftMargin={leftMargin}\r\n            rightMargin={rightMargin}\r\n            topMargin={topMargin}\r\n            bottomMargin={bottomMargin}\r\n            axisTitles={[barAxisTitle, lineAxisTitle]}\r\n            tooltip={tooltip}\r\n            onSeriesMouseOver={onSeriesMouseOver}\r\n            barPadding={barPadding}\r\n            showLabels={showLabels}\r\n            onSeriesMouseClick={onSeriesMouseClick}\r\n            resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n            detailsOnClick={detailsOnClick}\r\n            noOfTicks={noOfTicks}\r\n            curveType={curveType}\r\n            showValues={showValues}\r\n            styles={styles}\r\n            classNames={classNames}\r\n            animate={\r\n              animate === true\r\n                ? { duration: 0.5, once: true, amount: 0.5 }\r\n                : animate || { duration: 0, once: true, amount: 0 }\r\n            }\r\n            customLayers={customLayers}\r\n            naLabel={naLabel}\r\n            showAxisLabels={showAxisLabels}\r\n            lineNumberDisplayOptions={lineNumberDisplayOptions}\r\n            barNumberDisplayOptions={barNumberDisplayOptions}\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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"}