@undp/data-viz 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WaterfallChart.cjs.map +1 -1
- package/dist/WaterfallChart.d.ts +8 -9
- package/dist/WaterfallChart.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +8 -3162
- package/dist/index.js +112 -130
- package/dist/index.js.map +1 -1
- package/package.json +4 -16
- package/dist/getSchema.cjs +0 -2
- package/dist/getSchema.cjs.map +0 -1
- package/dist/getSchema.d.ts +0 -3258
- package/dist/getSchema.js +0 -1137
- package/dist/getSchema.js.map +0 -1
- package/dist/validateSchema.cjs +0 -2
- package/dist/validateSchema.cjs.map +0 -1
- package/dist/validateSchema.d.ts +0 -66
- package/dist/validateSchema.js +0 -109
- package/dist/validateSchema.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WaterfallChart.cjs","sources":["../src/Components/Graphs/WaterfallChart/Graph.tsx","../src/Components/Graphs/WaterfallChart/index.tsx"],"sourcesContent":["import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useMemo, useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n BarGraphDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { getTextColorBasedOnBgColor } from '@/Utils/getTextColorBasedOnBgColor';\r\n\r\ninterface Props {\r\n data: BarGraphDataType[];\r\n barColor: string[];\r\n colorDomain: string[];\r\n suffix: string;\r\n prefix: string;\r\n barPadding: number;\r\n showValues: boolean;\r\n showTicks: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n showLabels: boolean;\r\n truncateBy: number;\r\n width: number;\r\n height: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n selectedColor?: string;\r\n maxValue?: number;\r\n minValue?: number;\r\n highlightedDataPoints: (string | number)[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n labelOrder?: string[];\r\n rtl: boolean;\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n dimmedOpacity: number;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\nfunction getWaterfallExtent(values: (number | null | undefined)[]) {\r\n let cumulative = 0;\r\n let max = 0;\r\n let min = 0;\r\n\r\n for (const v of values) {\r\n cumulative += v || 0;\r\n if (cumulative > max) max = cumulative;\r\n if (cumulative < min) min = cumulative;\r\n }\r\n\r\n return {\r\n max,\r\n min,\r\n };\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n data,\r\n width,\r\n height,\r\n barColor,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showLabels,\r\n showValues,\r\n showTicks,\r\n colorDomain,\r\n truncateBy,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n selectedColor,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints,\r\n onSeriesMouseClick,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n dimmedOpacity,\r\n animate,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n\r\n const { max, min } = getWaterfallExtent(data.map(d => d.size));\r\n\r\n const maxVal = !checkIfNullOrUndefined(maxValue) ? (maxValue as number) : max;\r\n const minVal = !checkIfNullOrUndefined(minValue) ? (minValue as number) : min;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = useMemo(() => {\r\n const idSet = new Set<string>();\r\n\r\n const dataWithIdWithoutMissingIds = data.map((d, i) => {\r\n const id = labelOrder ? `${d.label}` : `${i}`;\r\n idSet.add(id);\r\n return { ...d, id };\r\n });\r\n\r\n const missingIds = labelOrder ? labelOrder.filter(id => !idSet.has(id)) : [];\r\n\r\n return [\r\n ...dataWithIdWithoutMissingIds,\r\n ...missingIds.map(id => ({\r\n id,\r\n label: id,\r\n color: null,\r\n size: null,\r\n })),\r\n ];\r\n }, [data, labelOrder]);\r\n\r\n const barOrder = useMemo(() => {\r\n return labelOrder ?? dataWithId.map(d => `${d.id}`);\r\n }, [labelOrder, dataWithId]);\r\n\r\n const y = scaleLinear().domain([minVal, maxVal]).range([graphHeight, 0]).nice();\r\n\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * barOrder.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n let running = 0;\r\n\r\n const waterfallData = dataWithId.map(d => {\r\n const start = running;\r\n running += d.size || 0;\r\n return {\r\n ...d,\r\n start,\r\n end: running,\r\n };\r\n });\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(minVal < 0 ? 0 : minVal)}\r\n y2={y(minVal < 0 ? 0 : minVal)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(\r\n minVal < 0 ? 0 : minVal,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n dx: 0,\r\n dy: maxVal < 0 ? '1em' : -5,\r\n y: y(minVal < 0 ? 0 : minVal),\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {waterfallData.map((d, _i) =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n },\r\n whileInView: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d)) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d);\r\n onSeriesMouseClick?.(d);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n >\r\n {d.size ? (\r\n <motion.rect\r\n width={x.bandwidth()}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n x: x(`${d.id}`),\r\n y: y(d.start),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n height: Math.abs(y(d.start) - y(d.end)),\r\n y: y(Math.max(d.start, d.end)),\r\n x: x(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n height: 0,\r\n y: y(d.start),\r\n transition: { duration: animate.duration },\r\n }}\r\n />\r\n ) : null}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(0) + 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 {showValues && Math.abs(y(d.start) - y(d.end)) > 16 ? (\r\n <motion.text\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: (y(d.start) + y(d.end)) / 2,\r\n opacity: 0,\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? getTextColorBasedOnBgColor(barColor[0])\r\n : !d.color\r\n ? getTextColorBasedOnBgColor(Colors.gray)\r\n : getTextColorBasedOnBgColor(\r\n barColor[colorDomain.indexOf(d.color)],\r\n ),\r\n },\r\n whileInView: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: (y(d.start) + y(d.end)) / 2,\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? getTextColorBasedOnBgColor(barColor[0])\r\n : !d.color\r\n ? getTextColorBasedOnBgColor(Colors.gray)\r\n : getTextColorBasedOnBgColor(\r\n barColor[colorDomain.indexOf(d.color)],\r\n ),\r\n opacity: 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(\r\n d.size ? Math.abs(d.size) : d.size,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <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 { useState, useRef, useEffect } from 'react';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphContainer, GraphArea } from '@/Components/Elements/GraphContainer';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport {\r\n ReferenceDataType,\r\n BarGraphDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n} from '@/Types';\r\nimport { checkIfNullOrUndefined } from '@/Utils';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: BarGraphDataType[];\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Color or array of colors for bars */\r\n colors?: string | string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n /** Minimum thickness of bars */\r\n minBarThickness?: number;\r\n /** Maximum number of bars shown in the graph */\r\n maxNumberOfBars?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n minValue?: number;\r\n /** Truncate labels by specified length */\r\n truncateBy?: number;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Toggle visibility of NA color in the color scale. This is only applicable if the data props hae color parameter and showColorScale prop is true */\r\n showNAColor?: boolean;\r\n /** Data points to highlight. Use the label value from data to highlight the data point */\r\n highlightedDataPoints?: (string | number)[];\r\n /** Defines the opacity of the non-highlighted data */\r\n dimmedOpacity?: number;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Toggles if data point which are undefined or has value null are filtered out. */\r\n filterNA?: boolean;\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** 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\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function WaterfallChart(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n graphDescription,\r\n barPadding = 0.25,\r\n showValues = true,\r\n showTicks = true,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n highlightedDataPoints = [],\r\n padding,\r\n backgroundColor = false,\r\n topMargin,\r\n bottomMargin,\r\n leftMargin,\r\n rightMargin,\r\n showLabels = true,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale = true,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n labelOrder,\r\n language = 'en',\r\n showNAColor = true,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n dimmedOpacity = 0.3,\r\n precision = 2,\r\n customLayers = [],\r\n naLabel = 'NA',\r\n } = props;\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(entries[0].target.clientWidth || 620);\r\n setSvgHeight(entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n 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.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 | number)[])}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={showNAColor}\r\n className={classNames?.colorLegend}\r\n />\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {data.filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)).length === 0 && (\r\n <EmptyState />\r\n )}\r\n {svgWidth &&\r\n svgHeight &&\r\n data.filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)).length > 0 ? (\r\n <Graph\r\n data={data\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))}\r\n barColor={\r\n data.filter(el => el.color).length === 0\r\n ? colors\r\n ? [colors as string]\r\n : [Colors.primaryColors['blue-600']]\r\n : (colors as string[] | undefined) || Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={\r\n data.filter(el => el.color).length === 0\r\n ? []\r\n : colorDomain || (uniqBy(data, 'color', true) as string[])\r\n }\r\n selectedColor={selectedColor}\r\n width={svgWidth}\r\n height={svgHeight}\r\n suffix={suffix}\r\n prefix={prefix}\r\n barPadding={barPadding}\r\n showValues={showValues}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n labelOrder={labelOrder}\r\n rtl={language === 'he' || language === 'ar'}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n classNames={classNames}\r\n styles={styles}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["getWaterfallExtent","values","cumulative","max","min","v","Graph","props","$","_c","leftMargin","t0","rightMargin","t1","topMargin","t2","bottomMargin","t3","data","width","height","barColor","suffix","prefix","barPadding","showLabels","showValues","showTicks","colorDomain","truncateBy","tooltip","onSeriesMouseOver","refValues","selectedColor","maxValue","minValue","highlightedDataPoints","onSeriesMouseClick","labelOrder","maxBarThickness","minBarThickness","detailsOnClick","barAxisTitle","noOfTicks","styles","classNames","dimmedOpacity","animate","precision","customLayers","naLabel","undefined","svgRef","useRef","t4","amount","once","isInView","useInView","t5","t6","top","bottom","left","right","margin","map","_temp","maxVal","checkIfNullOrUndefined","minVal","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","graphWidth","graphHeight","t7","idSet","Set","dataWithIdWithoutMissingIds","d_0","i","id","d","label","add","missingIds","filter","id_0","has","_temp2","dataWithId","t8","_temp3","barOrder","y","scaleLinear","domain","range","nice","x","scaleBand","Math","length","paddingInner","yTicks","ticks","running","waterfallData","d_2","start","size","end","t9","xAxis","axis","t10","yAxis","labels","t11","t12","t13","t14","t15","t16","t17","title","t18","t19","AxisTitle","t20","_temp6","_temp7","T0","AnimatePresence","t21","d_8","_i","jsxs","motion","initial","opacity","color","indexOf","whileInView","transition","duration","event","clientY","clientX","isEqual","event_0","jsx","bandwidth","fill","_temp8","Colors","gray","abs","_temp9","XAxesLabels","substring","textAnchor","graphObjectValues","cn","_temp0","getTextColorBasedOnBgColor","_temp1","numberFormattingFunction","t22","Fragment","el_3","i_0","RefLineY","el","text","value","t23","t24","_temp10","_temp11","t25","Tooltip","t26","modal","DetailsModal","Axis","dx","dy","YTicksAndGridLines","_temp4","_temp5","d_5","gridLines","d_10","layer","d_9","position","el_2","el_1","el_0","d_7","d_6","d_4","d_3","d_1","id_1","WaterfallChart","graphTitle","colors","sources","graphDescription","footNote","colorLegendTitle","padding","backgroundColor","relativeHeight","showColorScale","graphID","graphDownload","dataDownload","language","showNAColor","minHeight","theme","maxNumberOfBars","ariaLabel","filterNA","svgWidth","setSvgWidth","svgHeight","setSvgHeight","setSelectedColor","graphDiv","graphParentDiv","Symbol","for","resizeObserver","ResizeObserver","entries","target","clientWidth","clientHeight","current","observe","disconnect","useEffect","t27","graphContainer","t28","t29","description","GraphHeader","t30","colorLegend","ColorLegendWithMouseOver","categoricalColors","uniqBy","t31","EmptyState","t32","_d","primaryColors","t33","GraphArea","t34","footnote","source","GraphFooter","t35","GraphContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WaterfallChart.cjs","sources":["../src/Components/Graphs/WaterfallChart/Graph.tsx","../src/Components/Graphs/WaterfallChart/index.tsx"],"sourcesContent":["import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useMemo, useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n WaterfallChartDataType,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { getTextColorBasedOnBgColor } from '@/Utils/getTextColorBasedOnBgColor';\r\n\r\ninterface Props {\r\n data: WaterfallChartDataType[];\r\n barColor: string[];\r\n colorDomain: string[];\r\n suffix: string;\r\n prefix: string;\r\n barPadding: number;\r\n showValues: boolean;\r\n showTicks: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n showLabels: boolean;\r\n truncateBy: number;\r\n width: number;\r\n height: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n selectedColor?: string;\r\n maxValue?: number;\r\n minValue?: number;\r\n highlightedDataPoints: (string | number)[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n labelOrder?: string[];\r\n rtl: boolean;\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n dimmedOpacity: number;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\nfunction getWaterfallExtent(values: (number | null | undefined)[]) {\r\n let cumulative = 0;\r\n let max = 0;\r\n let min = 0;\r\n\r\n for (const v of values) {\r\n cumulative += v || 0;\r\n if (cumulative > max) max = cumulative;\r\n if (cumulative < min) min = cumulative;\r\n }\r\n\r\n return {\r\n max,\r\n min,\r\n };\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n data,\r\n width,\r\n height,\r\n barColor,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showLabels,\r\n showValues,\r\n showTicks,\r\n colorDomain,\r\n truncateBy,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n selectedColor,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints,\r\n onSeriesMouseClick,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n dimmedOpacity,\r\n animate,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n\r\n const { max, min } = getWaterfallExtent(data.map(d => d.size));\r\n\r\n const maxVal = !checkIfNullOrUndefined(maxValue) ? (maxValue as number) : max;\r\n const minVal = !checkIfNullOrUndefined(minValue) ? (minValue as number) : min;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = useMemo(() => {\r\n const idSet = new Set<string>();\r\n\r\n const dataWithIdWithoutMissingIds = data.map((d, i) => {\r\n const id = labelOrder ? `${d.label}` : `${i}`;\r\n idSet.add(id);\r\n return { ...d, id };\r\n });\r\n\r\n const missingIds = labelOrder ? labelOrder.filter(id => !idSet.has(id)) : [];\r\n\r\n return [\r\n ...dataWithIdWithoutMissingIds,\r\n ...missingIds.map(id => ({\r\n id,\r\n label: id,\r\n color: null,\r\n size: null,\r\n })),\r\n ];\r\n }, [data, labelOrder]);\r\n\r\n const barOrder = useMemo(() => {\r\n return labelOrder ?? dataWithId.map(d => `${d.id}`);\r\n }, [labelOrder, dataWithId]);\r\n\r\n const y = scaleLinear().domain([minVal, maxVal]).range([graphHeight, 0]).nice();\r\n\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * barOrder.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n let running = 0;\r\n\r\n const waterfallData = dataWithId.map(d => {\r\n const start = running;\r\n running += d.size || 0;\r\n return {\r\n ...d,\r\n start,\r\n end: running,\r\n };\r\n });\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(minVal < 0 ? 0 : minVal)}\r\n y2={y(minVal < 0 ? 0 : minVal)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(\r\n minVal < 0 ? 0 : minVal,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n dx: 0,\r\n dy: maxVal < 0 ? '1em' : -5,\r\n y: y(minVal < 0 ? 0 : minVal),\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {waterfallData.map((d, _i) =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n },\r\n whileInView: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d)) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d);\r\n onSeriesMouseClick?.(d);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n >\r\n {d.size ? (\r\n <motion.rect\r\n width={x.bandwidth()}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n x: x(`${d.id}`),\r\n y: y(d.start),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n height: Math.abs(y(d.start) - y(d.end)),\r\n y: y(Math.max(d.start, d.end)),\r\n x: x(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n height: 0,\r\n y: y(d.start),\r\n transition: { duration: animate.duration },\r\n }}\r\n />\r\n ) : null}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(0) + 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 {showValues && Math.abs(y(d.start) - y(d.end)) > 16 ? (\r\n <motion.text\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: (y(d.start) + y(d.end)) / 2,\r\n opacity: 0,\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? getTextColorBasedOnBgColor(barColor[0])\r\n : !d.color\r\n ? getTextColorBasedOnBgColor(Colors.gray)\r\n : getTextColorBasedOnBgColor(\r\n barColor[colorDomain.indexOf(d.color)],\r\n ),\r\n },\r\n whileInView: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: (y(d.start) + y(d.end)) / 2,\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? getTextColorBasedOnBgColor(barColor[0])\r\n : !d.color\r\n ? getTextColorBasedOnBgColor(Colors.gray)\r\n : getTextColorBasedOnBgColor(\r\n barColor[colorDomain.indexOf(d.color)],\r\n ),\r\n opacity: 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(\r\n d.size ? Math.abs(d.size) : d.size,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <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 { useState, useRef, useEffect } from 'react';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphContainer, GraphArea } from '@/Components/Elements/GraphContainer';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport {\r\n ReferenceDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n WaterfallChartDataType,\r\n} from '@/Types';\r\nimport { checkIfNullOrUndefined } from '@/Utils';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: WaterfallChartDataType[];\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Color or array of colors for bars */\r\n colors?: string | string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n /** Minimum thickness of bars */\r\n minBarThickness?: number;\r\n /** Maximum number of bars shown in the graph */\r\n maxNumberOfBars?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n minValue?: number;\r\n /** Truncate labels by specified length */\r\n truncateBy?: number;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Toggle visibility of NA color in the color scale. This is only applicable if the data props hae color parameter and showColorScale prop is true */\r\n showNAColor?: boolean;\r\n /** Data points to highlight. Use the label value from data to highlight the data point */\r\n highlightedDataPoints?: (string | number)[];\r\n /** Defines the opacity of the non-highlighted data */\r\n dimmedOpacity?: number;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Toggles if data point which are undefined or has value null are filtered out. */\r\n filterNA?: boolean;\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** 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\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function WaterfallChart(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n graphDescription,\r\n barPadding = 0.25,\r\n showValues = true,\r\n showTicks = true,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n highlightedDataPoints = [],\r\n padding,\r\n backgroundColor = false,\r\n topMargin,\r\n bottomMargin,\r\n leftMargin,\r\n rightMargin,\r\n showLabels = true,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale = true,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n labelOrder,\r\n language = 'en',\r\n showNAColor = true,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n dimmedOpacity = 0.3,\r\n precision = 2,\r\n customLayers = [],\r\n naLabel = 'NA',\r\n } = props;\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(entries[0].target.clientWidth || 620);\r\n setSvgHeight(entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n 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.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 | number)[])}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={showNAColor}\r\n className={classNames?.colorLegend}\r\n />\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {data.filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)).length === 0 && (\r\n <EmptyState />\r\n )}\r\n {svgWidth &&\r\n svgHeight &&\r\n data.filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)).length > 0 ? (\r\n <Graph\r\n data={data\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))}\r\n barColor={\r\n data.filter(el => el.color).length === 0\r\n ? colors\r\n ? [colors as string]\r\n : [Colors.primaryColors['blue-600']]\r\n : (colors as string[] | undefined) || Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={\r\n data.filter(el => el.color).length === 0\r\n ? []\r\n : colorDomain || (uniqBy(data, 'color', true) as string[])\r\n }\r\n selectedColor={selectedColor}\r\n width={svgWidth}\r\n height={svgHeight}\r\n suffix={suffix}\r\n prefix={prefix}\r\n barPadding={barPadding}\r\n showValues={showValues}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n labelOrder={labelOrder}\r\n rtl={language === 'he' || language === 'ar'}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n classNames={classNames}\r\n styles={styles}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["getWaterfallExtent","values","cumulative","max","min","v","Graph","props","$","_c","leftMargin","t0","rightMargin","t1","topMargin","t2","bottomMargin","t3","data","width","height","barColor","suffix","prefix","barPadding","showLabels","showValues","showTicks","colorDomain","truncateBy","tooltip","onSeriesMouseOver","refValues","selectedColor","maxValue","minValue","highlightedDataPoints","onSeriesMouseClick","labelOrder","maxBarThickness","minBarThickness","detailsOnClick","barAxisTitle","noOfTicks","styles","classNames","dimmedOpacity","animate","precision","customLayers","naLabel","undefined","svgRef","useRef","t4","amount","once","isInView","useInView","t5","t6","top","bottom","left","right","margin","map","_temp","maxVal","checkIfNullOrUndefined","minVal","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","graphWidth","graphHeight","t7","idSet","Set","dataWithIdWithoutMissingIds","d_0","i","id","d","label","add","missingIds","filter","id_0","has","_temp2","dataWithId","t8","_temp3","barOrder","y","scaleLinear","domain","range","nice","x","scaleBand","Math","length","paddingInner","yTicks","ticks","running","waterfallData","d_2","start","size","end","t9","xAxis","axis","t10","yAxis","labels","t11","t12","t13","t14","t15","t16","t17","title","t18","t19","AxisTitle","t20","_temp6","_temp7","T0","AnimatePresence","t21","d_8","_i","jsxs","motion","initial","opacity","color","indexOf","whileInView","transition","duration","event","clientY","clientX","isEqual","event_0","jsx","bandwidth","fill","_temp8","Colors","gray","abs","_temp9","XAxesLabels","substring","textAnchor","graphObjectValues","cn","_temp0","getTextColorBasedOnBgColor","_temp1","numberFormattingFunction","t22","Fragment","el_3","i_0","RefLineY","el","text","value","t23","t24","_temp10","_temp11","t25","Tooltip","t26","modal","DetailsModal","Axis","dx","dy","YTicksAndGridLines","_temp4","_temp5","d_5","gridLines","d_10","layer","d_9","position","el_2","el_1","el_0","d_7","d_6","d_4","d_3","d_1","id_1","WaterfallChart","graphTitle","colors","sources","graphDescription","footNote","colorLegendTitle","padding","backgroundColor","relativeHeight","showColorScale","graphID","graphDownload","dataDownload","language","showNAColor","minHeight","theme","maxNumberOfBars","ariaLabel","filterNA","svgWidth","setSvgWidth","svgHeight","setSvgHeight","setSelectedColor","graphDiv","graphParentDiv","Symbol","for","resizeObserver","ResizeObserver","entries","target","clientWidth","clientHeight","current","observe","disconnect","useEffect","t27","graphContainer","t28","t29","description","GraphHeader","t30","colorLegend","ColorLegendWithMouseOver","categoricalColors","uniqBy","t31","EmptyState","t32","_d","primaryColors","t33","GraphArea","t34","footnote","source","GraphFooter","t35","GraphContainer"],"mappings":"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"}
|
package/dist/WaterfallChart.d.ts
CHANGED
|
@@ -20,14 +20,6 @@ declare interface AxesStyleObject {
|
|
|
20
20
|
axis?: React.CSSProperties;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
declare interface BarGraphDataType {
|
|
24
|
-
label: string | number;
|
|
25
|
-
date?: string | number;
|
|
26
|
-
size?: number | null;
|
|
27
|
-
color?: string | null;
|
|
28
|
-
data?: object;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
23
|
declare interface ClassNameObject {
|
|
32
24
|
title?: string;
|
|
33
25
|
footnote?: string;
|
|
@@ -56,7 +48,7 @@ declare type Languages = 'en' | 'ar' | 'az' | 'bn' | 'cy' | 'he' | 'hi' | 'jp' |
|
|
|
56
48
|
|
|
57
49
|
declare interface Props {
|
|
58
50
|
/** Array of data objects */
|
|
59
|
-
data:
|
|
51
|
+
data: WaterfallChartDataType[];
|
|
60
52
|
/** Title of the graph */
|
|
61
53
|
graphTitle?: string | React.ReactNode;
|
|
62
54
|
/** Description of the graph */
|
|
@@ -205,4 +197,11 @@ declare interface StyleObject {
|
|
|
205
197
|
|
|
206
198
|
export declare function WaterfallChart(props: Props): JSX.Element;
|
|
207
199
|
|
|
200
|
+
declare interface WaterfallChartDataType {
|
|
201
|
+
label: string | number;
|
|
202
|
+
size?: number | null;
|
|
203
|
+
color?: string | null;
|
|
204
|
+
data?: object;
|
|
205
|
+
}
|
|
206
|
+
|
|
208
207
|
export { }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WaterfallChart.js","sources":["../src/Components/Graphs/WaterfallChart/Graph.tsx","../src/Components/Graphs/WaterfallChart/index.tsx"],"sourcesContent":["import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useMemo, useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n BarGraphDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { getTextColorBasedOnBgColor } from '@/Utils/getTextColorBasedOnBgColor';\r\n\r\ninterface Props {\r\n data: BarGraphDataType[];\r\n barColor: string[];\r\n colorDomain: string[];\r\n suffix: string;\r\n prefix: string;\r\n barPadding: number;\r\n showValues: boolean;\r\n showTicks: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n showLabels: boolean;\r\n truncateBy: number;\r\n width: number;\r\n height: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n selectedColor?: string;\r\n maxValue?: number;\r\n minValue?: number;\r\n highlightedDataPoints: (string | number)[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n labelOrder?: string[];\r\n rtl: boolean;\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n dimmedOpacity: number;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\nfunction getWaterfallExtent(values: (number | null | undefined)[]) {\r\n let cumulative = 0;\r\n let max = 0;\r\n let min = 0;\r\n\r\n for (const v of values) {\r\n cumulative += v || 0;\r\n if (cumulative > max) max = cumulative;\r\n if (cumulative < min) min = cumulative;\r\n }\r\n\r\n return {\r\n max,\r\n min,\r\n };\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n data,\r\n width,\r\n height,\r\n barColor,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showLabels,\r\n showValues,\r\n showTicks,\r\n colorDomain,\r\n truncateBy,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n selectedColor,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints,\r\n onSeriesMouseClick,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n dimmedOpacity,\r\n animate,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n\r\n const { max, min } = getWaterfallExtent(data.map(d => d.size));\r\n\r\n const maxVal = !checkIfNullOrUndefined(maxValue) ? (maxValue as number) : max;\r\n const minVal = !checkIfNullOrUndefined(minValue) ? (minValue as number) : min;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = useMemo(() => {\r\n const idSet = new Set<string>();\r\n\r\n const dataWithIdWithoutMissingIds = data.map((d, i) => {\r\n const id = labelOrder ? `${d.label}` : `${i}`;\r\n idSet.add(id);\r\n return { ...d, id };\r\n });\r\n\r\n const missingIds = labelOrder ? labelOrder.filter(id => !idSet.has(id)) : [];\r\n\r\n return [\r\n ...dataWithIdWithoutMissingIds,\r\n ...missingIds.map(id => ({\r\n id,\r\n label: id,\r\n color: null,\r\n size: null,\r\n })),\r\n ];\r\n }, [data, labelOrder]);\r\n\r\n const barOrder = useMemo(() => {\r\n return labelOrder ?? dataWithId.map(d => `${d.id}`);\r\n }, [labelOrder, dataWithId]);\r\n\r\n const y = scaleLinear().domain([minVal, maxVal]).range([graphHeight, 0]).nice();\r\n\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * barOrder.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n let running = 0;\r\n\r\n const waterfallData = dataWithId.map(d => {\r\n const start = running;\r\n running += d.size || 0;\r\n return {\r\n ...d,\r\n start,\r\n end: running,\r\n };\r\n });\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(minVal < 0 ? 0 : minVal)}\r\n y2={y(minVal < 0 ? 0 : minVal)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(\r\n minVal < 0 ? 0 : minVal,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n dx: 0,\r\n dy: maxVal < 0 ? '1em' : -5,\r\n y: y(minVal < 0 ? 0 : minVal),\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {waterfallData.map((d, _i) =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n },\r\n whileInView: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d)) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d);\r\n onSeriesMouseClick?.(d);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n >\r\n {d.size ? (\r\n <motion.rect\r\n width={x.bandwidth()}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n x: x(`${d.id}`),\r\n y: y(d.start),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n height: Math.abs(y(d.start) - y(d.end)),\r\n y: y(Math.max(d.start, d.end)),\r\n x: x(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n height: 0,\r\n y: y(d.start),\r\n transition: { duration: animate.duration },\r\n }}\r\n />\r\n ) : null}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(0) + 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 {showValues && Math.abs(y(d.start) - y(d.end)) > 16 ? (\r\n <motion.text\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: (y(d.start) + y(d.end)) / 2,\r\n opacity: 0,\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? getTextColorBasedOnBgColor(barColor[0])\r\n : !d.color\r\n ? getTextColorBasedOnBgColor(Colors.gray)\r\n : getTextColorBasedOnBgColor(\r\n barColor[colorDomain.indexOf(d.color)],\r\n ),\r\n },\r\n whileInView: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: (y(d.start) + y(d.end)) / 2,\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? getTextColorBasedOnBgColor(barColor[0])\r\n : !d.color\r\n ? getTextColorBasedOnBgColor(Colors.gray)\r\n : getTextColorBasedOnBgColor(\r\n barColor[colorDomain.indexOf(d.color)],\r\n ),\r\n opacity: 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(\r\n d.size ? Math.abs(d.size) : d.size,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <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 { useState, useRef, useEffect } from 'react';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphContainer, GraphArea } from '@/Components/Elements/GraphContainer';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport {\r\n ReferenceDataType,\r\n BarGraphDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n} from '@/Types';\r\nimport { checkIfNullOrUndefined } from '@/Utils';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: BarGraphDataType[];\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Color or array of colors for bars */\r\n colors?: string | string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n /** Minimum thickness of bars */\r\n minBarThickness?: number;\r\n /** Maximum number of bars shown in the graph */\r\n maxNumberOfBars?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n minValue?: number;\r\n /** Truncate labels by specified length */\r\n truncateBy?: number;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Toggle visibility of NA color in the color scale. This is only applicable if the data props hae color parameter and showColorScale prop is true */\r\n showNAColor?: boolean;\r\n /** Data points to highlight. Use the label value from data to highlight the data point */\r\n highlightedDataPoints?: (string | number)[];\r\n /** Defines the opacity of the non-highlighted data */\r\n dimmedOpacity?: number;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Toggles if data point which are undefined or has value null are filtered out. */\r\n filterNA?: boolean;\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** 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\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function WaterfallChart(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n graphDescription,\r\n barPadding = 0.25,\r\n showValues = true,\r\n showTicks = true,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n highlightedDataPoints = [],\r\n padding,\r\n backgroundColor = false,\r\n topMargin,\r\n bottomMargin,\r\n leftMargin,\r\n rightMargin,\r\n showLabels = true,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale = true,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n labelOrder,\r\n language = 'en',\r\n showNAColor = true,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n dimmedOpacity = 0.3,\r\n precision = 2,\r\n customLayers = [],\r\n naLabel = 'NA',\r\n } = props;\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(entries[0].target.clientWidth || 620);\r\n setSvgHeight(entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n 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.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 | number)[])}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={showNAColor}\r\n className={classNames?.colorLegend}\r\n />\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {data.filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)).length === 0 && (\r\n <EmptyState />\r\n )}\r\n {svgWidth &&\r\n svgHeight &&\r\n data.filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)).length > 0 ? (\r\n <Graph\r\n data={data\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))}\r\n barColor={\r\n data.filter(el => el.color).length === 0\r\n ? colors\r\n ? [colors as string]\r\n : [Colors.primaryColors['blue-600']]\r\n : (colors as string[] | undefined) || Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={\r\n data.filter(el => el.color).length === 0\r\n ? []\r\n : colorDomain || (uniqBy(data, 'color', true) as string[])\r\n }\r\n selectedColor={selectedColor}\r\n width={svgWidth}\r\n height={svgHeight}\r\n suffix={suffix}\r\n prefix={prefix}\r\n barPadding={barPadding}\r\n showValues={showValues}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n labelOrder={labelOrder}\r\n rtl={language === 'he' || language === 'ar'}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n classNames={classNames}\r\n styles={styles}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["getWaterfallExtent","values","cumulative","max","min","v","Graph","props","$","_c","leftMargin","t0","rightMargin","t1","topMargin","t2","bottomMargin","t3","data","width","height","barColor","suffix","prefix","barPadding","showLabels","showValues","showTicks","colorDomain","truncateBy","tooltip","onSeriesMouseOver","refValues","selectedColor","maxValue","minValue","highlightedDataPoints","onSeriesMouseClick","labelOrder","maxBarThickness","minBarThickness","detailsOnClick","barAxisTitle","noOfTicks","styles","classNames","dimmedOpacity","animate","precision","customLayers","naLabel","undefined","svgRef","useRef","t4","amount","once","isInView","useInView","t5","t6","top","bottom","left","right","margin","map","_temp","maxVal","checkIfNullOrUndefined","minVal","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","graphWidth","graphHeight","t7","idSet","Set","dataWithIdWithoutMissingIds","d_0","i","id","d","label","add","missingIds","filter","id_0","has","_temp2","dataWithId","t8","_temp3","barOrder","y","scaleLinear","domain","range","nice","x","scaleBand","Math","length","paddingInner","yTicks","ticks","running","waterfallData","d_2","start","size","end","t9","xAxis","axis","t10","yAxis","labels","t11","t12","t13","t14","t15","t16","t17","title","t18","t19","AxisTitle","t20","_temp6","_temp7","T0","AnimatePresence","t21","d_8","_i","jsxs","motion","initial","opacity","color","indexOf","whileInView","transition","duration","event","clientY","clientX","isEqual","event_0","jsx","bandwidth","fill","_temp8","Colors","gray","abs","_temp9","XAxesLabels","substring","textAnchor","graphObjectValues","cn","_temp0","getTextColorBasedOnBgColor","_temp1","numberFormattingFunction","t22","Fragment","el_3","i_0","RefLineY","el","text","value","t23","t24","_temp10","_temp11","t25","Tooltip","t26","modal","DetailsModal","Axis","dx","dy","YTicksAndGridLines","_temp4","_temp5","d_5","gridLines","d_10","layer","d_9","position","el_2","el_1","el_0","d_7","d_6","d_4","d_3","d_1","id_1","WaterfallChart","graphTitle","colors","sources","graphDescription","footNote","colorLegendTitle","padding","backgroundColor","relativeHeight","showColorScale","graphID","graphDownload","dataDownload","language","showNAColor","minHeight","theme","maxNumberOfBars","ariaLabel","filterNA","svgWidth","setSvgWidth","svgHeight","setSvgHeight","setSelectedColor","graphDiv","graphParentDiv","Symbol","for","resizeObserver","ResizeObserver","entries","target","clientWidth","clientHeight","current","observe","disconnect","useEffect","t27","graphContainer","t28","t29","description","GraphHeader","t30","colorLegend","ColorLegendWithMouseOver","categoricalColors","uniqBy","t31","EmptyState","t32","_d","primaryColors","t33","GraphArea","t34","footnote","source","GraphFooter","t35","GraphContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WaterfallChart.js","sources":["../src/Components/Graphs/WaterfallChart/Graph.tsx","../src/Components/Graphs/WaterfallChart/index.tsx"],"sourcesContent":["import isEqual from 'fast-deep-equal';\r\nimport { scaleLinear, scaleBand } from 'd3-scale';\r\nimport { useMemo, useRef, useState } from 'react';\r\nimport { cn } from '@undp/design-system-react/cn';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport {\r\n AnimateDataType,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n ReferenceDataType,\r\n StyleObject,\r\n WaterfallChartDataType,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { checkIfNullOrUndefined } from '@/Utils/checkIfNullOrUndefined';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { AxisTitle } from '@/Components/Elements/Axes/AxisTitle';\r\nimport { Axis } from '@/Components/Elements/Axes/Axis';\r\nimport { RefLineY } from '@/Components/Elements/ReferenceLine';\r\nimport { YTicksAndGridLines } from '@/Components/Elements/Axes/YTicksAndGridLines';\r\nimport { XAxesLabels } from '@/Components/Elements/Axes/XAxesLabels';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { getTextColorBasedOnBgColor } from '@/Utils/getTextColorBasedOnBgColor';\r\n\r\ninterface Props {\r\n data: WaterfallChartDataType[];\r\n barColor: string[];\r\n colorDomain: string[];\r\n suffix: string;\r\n prefix: string;\r\n barPadding: number;\r\n showValues: boolean;\r\n showTicks: boolean;\r\n leftMargin?: number;\r\n rightMargin?: number;\r\n topMargin?: number;\r\n bottomMargin?: number;\r\n showLabels: boolean;\r\n truncateBy: number;\r\n width: number;\r\n height: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n refValues?: ReferenceDataType[];\r\n selectedColor?: string;\r\n maxValue?: number;\r\n minValue?: number;\r\n highlightedDataPoints: (string | number)[];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n labelOrder?: string[];\r\n rtl: boolean;\r\n maxBarThickness?: number;\r\n minBarThickness?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n barAxisTitle?: string;\r\n noOfTicks: number;\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n animate: AnimateDataType;\r\n dimmedOpacity: number;\r\n precision: number;\r\n customLayers: CustomLayerDataType[];\r\n naLabel: string;\r\n}\r\nfunction getWaterfallExtent(values: (number | null | undefined)[]) {\r\n let cumulative = 0;\r\n let max = 0;\r\n let min = 0;\r\n\r\n for (const v of values) {\r\n cumulative += v || 0;\r\n if (cumulative > max) max = cumulative;\r\n if (cumulative < min) min = cumulative;\r\n }\r\n\r\n return {\r\n max,\r\n min,\r\n };\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n leftMargin = 20,\r\n rightMargin = 20,\r\n topMargin = 20,\r\n bottomMargin = 25,\r\n data,\r\n width,\r\n height,\r\n barColor,\r\n suffix,\r\n prefix,\r\n barPadding,\r\n showLabels,\r\n showValues,\r\n showTicks,\r\n colorDomain,\r\n truncateBy,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n selectedColor,\r\n maxValue,\r\n minValue,\r\n highlightedDataPoints,\r\n onSeriesMouseClick,\r\n labelOrder,\r\n maxBarThickness,\r\n minBarThickness,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks,\r\n styles,\r\n classNames,\r\n dimmedOpacity,\r\n animate,\r\n precision,\r\n customLayers,\r\n naLabel,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const margin = {\r\n top: topMargin,\r\n bottom: bottomMargin,\r\n left: barAxisTitle ? leftMargin + 30 : leftMargin,\r\n right: rightMargin,\r\n };\r\n\r\n const { max, min } = getWaterfallExtent(data.map(d => d.size));\r\n\r\n const maxVal = !checkIfNullOrUndefined(maxValue) ? (maxValue as number) : max;\r\n const minVal = !checkIfNullOrUndefined(minValue) ? (minValue as number) : min;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n const graphWidth = width - margin.left - margin.right;\r\n const graphHeight = height - margin.top - margin.bottom;\r\n\r\n const dataWithId = useMemo(() => {\r\n const idSet = new Set<string>();\r\n\r\n const dataWithIdWithoutMissingIds = data.map((d, i) => {\r\n const id = labelOrder ? `${d.label}` : `${i}`;\r\n idSet.add(id);\r\n return { ...d, id };\r\n });\r\n\r\n const missingIds = labelOrder ? labelOrder.filter(id => !idSet.has(id)) : [];\r\n\r\n return [\r\n ...dataWithIdWithoutMissingIds,\r\n ...missingIds.map(id => ({\r\n id,\r\n label: id,\r\n color: null,\r\n size: null,\r\n })),\r\n ];\r\n }, [data, labelOrder]);\r\n\r\n const barOrder = useMemo(() => {\r\n return labelOrder ?? dataWithId.map(d => `${d.id}`);\r\n }, [labelOrder, dataWithId]);\r\n\r\n const y = scaleLinear().domain([minVal, maxVal]).range([graphHeight, 0]).nice();\r\n\r\n const x = scaleBand()\r\n .domain(barOrder)\r\n .range([\r\n 0,\r\n minBarThickness\r\n ? Math.max(graphWidth, minBarThickness * barOrder.length)\r\n : maxBarThickness\r\n ? Math.min(graphWidth, maxBarThickness * barOrder.length)\r\n : graphWidth,\r\n ])\r\n .paddingInner(barPadding);\r\n const yTicks = y.ticks(noOfTicks);\r\n let running = 0;\r\n\r\n const waterfallData = dataWithId.map(d => {\r\n const start = running;\r\n running += d.size || 0;\r\n return {\r\n ...d,\r\n start,\r\n end: running,\r\n };\r\n });\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${width}px`}\r\n height={`${height}px`}\r\n viewBox={`0 0 ${width} ${height}`}\r\n direction='ltr'\r\n >\r\n <g transform={`translate(${margin.left},${margin.top})`}>\r\n <Axis\r\n y1={y(minVal < 0 ? 0 : minVal)}\r\n y2={y(minVal < 0 ? 0 : minVal)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n label={numberFormattingFunction(\r\n minVal < 0 ? 0 : minVal,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n labelPos={{\r\n x: 0 - leftMargin,\r\n dx: 0,\r\n dy: maxVal < 0 ? '1em' : -5,\r\n y: y(minVal < 0 ? 0 : minVal),\r\n }}\r\n classNames={{\r\n axis: classNames?.xAxis?.axis,\r\n label: classNames?.yAxis?.labels,\r\n }}\r\n styles={{ axis: styles?.xAxis?.axis, label: styles?.yAxis?.labels }}\r\n />\r\n {showTicks ? (\r\n <YTicksAndGridLines\r\n values={yTicks.filter(d => d !== 0)}\r\n y={yTicks.filter(d => d !== 0).map(d => y(d))}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n styles={{\r\n gridLines: styles?.yAxis?.gridLines,\r\n labels: styles?.yAxis?.labels,\r\n }}\r\n classNames={{\r\n gridLines: classNames?.yAxis?.gridLines,\r\n labels: classNames?.yAxis?.labels,\r\n }}\r\n suffix={suffix}\r\n prefix={prefix}\r\n labelType='secondary'\r\n showGridLines\r\n labelPos='vertical'\r\n precision={precision}\r\n />\r\n ) : null}\r\n <AxisTitle\r\n x={0 - leftMargin - 15}\r\n y={graphHeight / 2}\r\n style={styles?.yAxis?.title}\r\n className={classNames?.yAxis?.title}\r\n text={barAxisTitle}\r\n rotate90\r\n />\r\n {customLayers.filter(d => d.position === 'before').map(d => d.layer)}\r\n <AnimatePresence>\r\n {waterfallData.map((d, _i) =>\r\n !checkIfNullOrUndefined(x(d.id)) ? (\r\n <motion.g\r\n className='undp-viz-g-with-hover'\r\n key={d.label}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n },\r\n whileInView: {\r\n opacity: selectedColor\r\n ? d.color\r\n ? barColor[colorDomain.indexOf(d.color)] === selectedColor\r\n ? 1\r\n : dimmedOpacity\r\n : dimmedOpacity\r\n : highlightedDataPoints.length !== 0\r\n ? highlightedDataPoints.indexOf(d.label) !== -1\r\n ? 0.85\r\n : dimmedOpacity\r\n : 0.85,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d)) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d);\r\n onSeriesMouseClick?.(d);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n >\r\n {d.size ? (\r\n <motion.rect\r\n width={x.bandwidth()}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n variants={{\r\n initial: {\r\n height: 0,\r\n x: x(`${d.id}`),\r\n y: y(d.start),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n },\r\n whileInView: {\r\n height: Math.abs(y(d.start) - y(d.end)),\r\n y: y(Math.max(d.start, d.end)),\r\n x: x(`${d.id}`),\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? barColor[0]\r\n : !d.color\r\n ? Colors.gray\r\n : barColor[colorDomain.indexOf(d.color)],\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n exit={{\r\n height: 0,\r\n y: y(d.start),\r\n transition: { duration: animate.duration },\r\n }}\r\n />\r\n ) : null}\r\n {showLabels ? (\r\n <XAxesLabels\r\n value={\r\n `${d.label}`.length < truncateBy\r\n ? `${d.label}`\r\n : `${`${d.label}`.substring(0, truncateBy)}...`\r\n }\r\n y={y(0) + 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 {showValues && Math.abs(y(d.start) - y(d.end)) > 16 ? (\r\n <motion.text\r\n style={{\r\n textAnchor: 'middle',\r\n ...(styles?.graphObjectValues || {}),\r\n }}\r\n className={cn('graph-value text-sm', classNames?.graphObjectValues)}\r\n dy='0.33em'\r\n variants={{\r\n initial: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: (y(d.start) + y(d.end)) / 2,\r\n opacity: 0,\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? getTextColorBasedOnBgColor(barColor[0])\r\n : !d.color\r\n ? getTextColorBasedOnBgColor(Colors.gray)\r\n : getTextColorBasedOnBgColor(\r\n barColor[colorDomain.indexOf(d.color)],\r\n ),\r\n },\r\n whileInView: {\r\n x: (x(`${d.id}`) as number) + x.bandwidth() / 2,\r\n y: (y(d.start) + y(d.end)) / 2,\r\n fill:\r\n data.filter(el => el.color).length === 0\r\n ? getTextColorBasedOnBgColor(barColor[0])\r\n : !d.color\r\n ? getTextColorBasedOnBgColor(Colors.gray)\r\n : getTextColorBasedOnBgColor(\r\n barColor[colorDomain.indexOf(d.color)],\r\n ),\r\n opacity: 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{\r\n opacity: 0,\r\n transition: { duration: animate.duration },\r\n }}\r\n >\r\n {numberFormattingFunction(\r\n d.size ? Math.abs(d.size) : d.size,\r\n naLabel,\r\n precision,\r\n prefix,\r\n suffix,\r\n )}\r\n </motion.text>\r\n ) : null}\r\n </motion.g>\r\n ) : null,\r\n )}\r\n {refValues ? (\r\n <>\r\n {refValues.map((el, i) => (\r\n <RefLineY\r\n key={i}\r\n text={el.text}\r\n color={el.color}\r\n y={y(el.value as number)}\r\n x1={0 - leftMargin}\r\n x2={graphWidth + margin.right}\r\n classNames={el.classNames}\r\n styles={el.styles}\r\n animate={animate}\r\n isInView={isInView}\r\n />\r\n ))}\r\n </>\r\n ) : null}\r\n </AnimatePresence>\r\n {customLayers.filter(d => d.position === 'after').map(d => d.layer)}\r\n </g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <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 { useState, useRef, useEffect } from 'react';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { ColorLegendWithMouseOver } from '@/Components/Elements/ColorLegendWithMouseOver';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphContainer, GraphArea } from '@/Components/Elements/GraphContainer';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport {\r\n ReferenceDataType,\r\n SourcesDataType,\r\n Languages,\r\n StyleObject,\r\n ClassNameObject,\r\n CustomLayerDataType,\r\n AnimateDataType,\r\n WaterfallChartDataType,\r\n} from '@/Types';\r\nimport { checkIfNullOrUndefined } from '@/Utils';\r\nimport { uniqBy } from '@/Utils/uniqBy';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: WaterfallChartDataType[];\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Color or array of colors for bars */\r\n colors?: string | string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Title for the color legend */\r\n colorLegendTitle?: string;\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Left margin of the graph */\r\n leftMargin?: number;\r\n /** Right margin of the graph */\r\n rightMargin?: number;\r\n /** Top margin of the graph */\r\n topMargin?: number;\r\n /** Bottom margin of the graph */\r\n bottomMargin?: number;\r\n /** Padding between bars */\r\n barPadding?: number;\r\n /** Maximum thickness of bars */\r\n maxBarThickness?: number;\r\n /** Minimum thickness of bars */\r\n minBarThickness?: number;\r\n /** Maximum number of bars shown in the graph */\r\n maxNumberOfBars?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n /** Maximum value for the chart */\r\n maxValue?: number;\r\n /** Minimum value for the chart */\r\n minValue?: number;\r\n /** Truncate labels by specified length */\r\n truncateBy?: number;\r\n /** Reference values for comparison */\r\n refValues?: ReferenceDataType[];\r\n /** Number of ticks on the axis */\r\n noOfTicks?: number;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of labels */\r\n showLabels?: boolean;\r\n /** Toggle visibility of values */\r\n showValues?: boolean;\r\n /** Custom order for labels */\r\n labelOrder?: string[];\r\n /** Defines how “NA” values should be displayed/labelled in the graph */\r\n naLabel?: string;\r\n /** Toggle visibility of axis ticks */\r\n showTicks?: boolean;\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Toggle visibility of NA color in the color scale. This is only applicable if the data props hae color parameter and showColorScale prop is true */\r\n showNAColor?: boolean;\r\n /** Data points to highlight. Use the label value from data to highlight the data point */\r\n highlightedDataPoints?: (string | number)[];\r\n /** Defines the opacity of the non-highlighted data */\r\n dimmedOpacity?: number;\r\n /** Title for the bar axis */\r\n barAxisTitle?: string;\r\n /** Toggles if data point which are undefined or has value null are filtered out. */\r\n filterNA?: boolean;\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Optional SVG <g> element or function that renders custom content behind or in front of the graph. */\r\n customLayers?: CustomLayerDataType[];\r\n /** 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\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function WaterfallChart(props: Props) {\r\n const {\r\n data,\r\n graphTitle,\r\n colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n graphDescription,\r\n barPadding = 0.25,\r\n showValues = true,\r\n showTicks = true,\r\n truncateBy = 999,\r\n height,\r\n width,\r\n footNote,\r\n colorDomain,\r\n colorLegendTitle,\r\n highlightedDataPoints = [],\r\n padding,\r\n backgroundColor = false,\r\n topMargin,\r\n bottomMargin,\r\n leftMargin,\r\n rightMargin,\r\n showLabels = true,\r\n relativeHeight,\r\n tooltip,\r\n onSeriesMouseOver,\r\n refValues,\r\n showColorScale = true,\r\n graphID,\r\n maxValue,\r\n minValue,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n labelOrder,\r\n language = 'en',\r\n showNAColor = true,\r\n minHeight = 0,\r\n theme = 'light',\r\n maxBarThickness,\r\n maxNumberOfBars,\r\n minBarThickness,\r\n ariaLabel,\r\n detailsOnClick,\r\n barAxisTitle,\r\n noOfTicks = 5,\r\n styles,\r\n classNames,\r\n filterNA = true,\r\n animate = false,\r\n dimmedOpacity = 0.3,\r\n precision = 2,\r\n customLayers = [],\r\n naLabel = 'NA',\r\n } = props;\r\n const [svgWidth, setSvgWidth] = useState(0);\r\n const [svgHeight, setSvgHeight] = useState(0);\r\n const [selectedColor, setSelectedColor] = useState<string | undefined>(undefined);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setSvgWidth(entries[0].target.clientWidth || 620);\r\n setSvgHeight(entries[0].target.clientHeight || 480);\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n 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.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 | number)[])}\r\n setSelectedColor={setSelectedColor}\r\n showNAColor={showNAColor}\r\n className={classNames?.colorLegend}\r\n />\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {data.filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)).length === 0 && (\r\n <EmptyState />\r\n )}\r\n {svgWidth &&\r\n svgHeight &&\r\n data.filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d)).length > 0 ? (\r\n <Graph\r\n data={data\r\n .filter(d => (filterNA ? !checkIfNullOrUndefined(d.size) : d))\r\n .filter((_d, i) => (maxNumberOfBars ? i < maxNumberOfBars : true))}\r\n barColor={\r\n data.filter(el => el.color).length === 0\r\n ? colors\r\n ? [colors as string]\r\n : [Colors.primaryColors['blue-600']]\r\n : (colors as string[] | undefined) || Colors[theme].categoricalColors.colors\r\n }\r\n colorDomain={\r\n data.filter(el => el.color).length === 0\r\n ? []\r\n : colorDomain || (uniqBy(data, 'color', true) as string[])\r\n }\r\n selectedColor={selectedColor}\r\n width={svgWidth}\r\n height={svgHeight}\r\n suffix={suffix}\r\n prefix={prefix}\r\n barPadding={barPadding}\r\n showValues={showValues}\r\n showTicks={showTicks}\r\n leftMargin={leftMargin}\r\n rightMargin={rightMargin}\r\n topMargin={topMargin}\r\n bottomMargin={bottomMargin}\r\n truncateBy={truncateBy}\r\n showLabels={showLabels}\r\n tooltip={tooltip}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n refValues={refValues}\r\n maxValue={maxValue}\r\n minValue={minValue}\r\n highlightedDataPoints={highlightedDataPoints}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n labelOrder={labelOrder}\r\n rtl={language === 'he' || language === 'ar'}\r\n maxBarThickness={maxBarThickness}\r\n minBarThickness={minBarThickness}\r\n detailsOnClick={detailsOnClick}\r\n barAxisTitle={barAxisTitle}\r\n noOfTicks={noOfTicks}\r\n classNames={classNames}\r\n styles={styles}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n dimmedOpacity={dimmedOpacity}\r\n precision={precision}\r\n customLayers={customLayers}\r\n naLabel={naLabel}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["getWaterfallExtent","values","cumulative","max","min","v","Graph","props","$","_c","leftMargin","t0","rightMargin","t1","topMargin","t2","bottomMargin","t3","data","width","height","barColor","suffix","prefix","barPadding","showLabels","showValues","showTicks","colorDomain","truncateBy","tooltip","onSeriesMouseOver","refValues","selectedColor","maxValue","minValue","highlightedDataPoints","onSeriesMouseClick","labelOrder","maxBarThickness","minBarThickness","detailsOnClick","barAxisTitle","noOfTicks","styles","classNames","dimmedOpacity","animate","precision","customLayers","naLabel","undefined","svgRef","useRef","t4","amount","once","isInView","useInView","t5","t6","top","bottom","left","right","margin","map","_temp","maxVal","checkIfNullOrUndefined","minVal","mouseOverData","setMouseOverData","useState","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","graphWidth","graphHeight","t7","idSet","Set","dataWithIdWithoutMissingIds","d_0","i","id","d","label","add","missingIds","filter","id_0","has","_temp2","dataWithId","t8","_temp3","barOrder","y","scaleLinear","domain","range","nice","x","scaleBand","Math","length","paddingInner","yTicks","ticks","running","waterfallData","d_2","start","size","end","t9","xAxis","axis","t10","yAxis","labels","t11","t12","t13","t14","t15","t16","t17","title","t18","t19","AxisTitle","t20","_temp6","_temp7","T0","AnimatePresence","t21","d_8","_i","jsxs","motion","initial","opacity","color","indexOf","whileInView","transition","duration","event","clientY","clientX","isEqual","event_0","jsx","bandwidth","fill","_temp8","Colors","gray","abs","_temp9","XAxesLabels","substring","textAnchor","graphObjectValues","cn","_temp0","getTextColorBasedOnBgColor","_temp1","numberFormattingFunction","t22","Fragment","el_3","i_0","RefLineY","el","text","value","t23","t24","_temp10","_temp11","t25","Tooltip","t26","modal","DetailsModal","Axis","dx","dy","YTicksAndGridLines","_temp4","_temp5","d_5","gridLines","d_10","layer","d_9","position","el_2","el_1","el_0","d_7","d_6","d_4","d_3","d_1","id_1","WaterfallChart","graphTitle","colors","sources","graphDescription","footNote","colorLegendTitle","padding","backgroundColor","relativeHeight","showColorScale","graphID","graphDownload","dataDownload","language","showNAColor","minHeight","theme","maxNumberOfBars","ariaLabel","filterNA","svgWidth","setSvgWidth","svgHeight","setSvgHeight","setSelectedColor","graphDiv","graphParentDiv","Symbol","for","resizeObserver","ResizeObserver","entries","target","clientWidth","clientHeight","current","observe","disconnect","useEffect","t27","graphContainer","t28","t29","description","GraphHeader","t30","colorLegend","ColorLegendWithMouseOver","categoricalColors","uniqBy","t31","EmptyState","t32","_d","primaryColors","t33","GraphArea","t34","footnote","source","GraphFooter","t35","GraphContainer"],"mappings":"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"}
|