@fluentui/react-charts 9.3.24 → 9.3.26
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/CHANGELOG.md +32 -2
- package/dist/index.d.cts +35 -0
- package/dist/index.d.ts +35 -0
- package/lib/components/AreaChart/AreaChart.js +3 -3
- package/lib/components/AreaChart/AreaChart.js.map +1 -1
- package/lib/components/DeclarativeChart/DeclarativeChart.js +1 -1
- package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +5 -4
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib/components/FunnelChart/FunnelChart.js +1 -1
- package/lib/components/FunnelChart/FunnelChart.js.map +1 -1
- package/lib/components/GanttChart/GanttChart.js +2 -2
- package/lib/components/GanttChart/GanttChart.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.js +22 -10
- package/lib/components/GaugeChart/GaugeChart.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.types.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +3 -3
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib/components/HeatMapChart/HeatMapChart.js +5 -5
- package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib/components/LineChart/LineChart.js +1 -1
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/PolarChart/PolarChart.js +1 -1
- package/lib/components/PolarChart/PolarChart.js.map +1 -1
- package/lib/components/SankeyChart/SankeyChart.js +7 -7
- package/lib/components/SankeyChart/SankeyChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +1 -1
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/VegaDeclarativeChart/VegaLiteExpressionEvaluator.js +2 -1
- package/lib/components/VegaDeclarativeChart/VegaLiteExpressionEvaluator.js.map +1 -1
- package/lib/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js +8 -5
- package/lib/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +2 -2
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib/utilities/utilities.js +3 -2
- package/lib/utilities/utilities.js.map +1 -1
- package/lib-commonjs/components/AreaChart/AreaChart.cjs +3 -3
- package/lib-commonjs/components/AreaChart/AreaChart.cjs.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.cjs +1 -1
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.cjs.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.cjs +5 -4
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.cjs.map +1 -1
- package/lib-commonjs/components/FunnelChart/FunnelChart.cjs +1 -1
- package/lib-commonjs/components/FunnelChart/FunnelChart.cjs.map +1 -1
- package/lib-commonjs/components/GanttChart/GanttChart.cjs +2 -2
- package/lib-commonjs/components/GanttChart/GanttChart.cjs.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.cjs +22 -10
- package/lib-commonjs/components/GaugeChart/GaugeChart.cjs.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.types.cjs.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.cjs +3 -3
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.cjs.map +1 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.cjs +5 -5
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.cjs.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.cjs +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.cjs.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.cjs +1 -1
- package/lib-commonjs/components/LineChart/LineChart.cjs.map +1 -1
- package/lib-commonjs/components/PolarChart/PolarChart.cjs +1 -1
- package/lib-commonjs/components/PolarChart/PolarChart.cjs.map +1 -1
- package/lib-commonjs/components/SankeyChart/SankeyChart.cjs +7 -7
- package/lib-commonjs/components/SankeyChart/SankeyChart.cjs.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.cjs +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.cjs.map +1 -1
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteExpressionEvaluator.cjs +2 -1
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteExpressionEvaluator.cjs.map +1 -1
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.cjs +8 -5
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.cjs.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.cjs +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.cjs.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.cjs +2 -2
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.cjs.map +1 -1
- package/lib-commonjs/utilities/utilities.cjs +3 -2
- package/lib-commonjs/utilities/utilities.cjs.map +1 -1
- package/package.json +9 -9
|
@@ -315,7 +315,7 @@ const FunnelChart = /*#__PURE__*/ _react.forwardRef(({ orientation = 'vertical',
|
|
|
315
315
|
let legends;
|
|
316
316
|
if (isStacked) {
|
|
317
317
|
// Collect unique categories and their color
|
|
318
|
-
const categoryMap =
|
|
318
|
+
const categoryMap = Object.create(null);
|
|
319
319
|
props.data.forEach((stage)=>{
|
|
320
320
|
(stage.subValues || []).forEach((sub)=>{
|
|
321
321
|
if (!(sub.category in categoryMap)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/FunnelChart/FunnelChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { useRtl, ChartTitle, CHART_TITLE_PADDING } from '../../utilities/index';\nimport type { FunnelChartDataPoint, FunnelChartProps } from './FunnelChart.types';\nimport type { Legend } from '../Legends/index';\nimport { Legends } from '../Legends/index';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { getContrastTextColor } from '../../utilities/colors';\nimport { useFunnelChartStyles } from './useFunnelChartStyles.styles';\nimport {\n getHorizontalFunnelSegmentGeometry,\n getVerticalFunnelSegmentGeometry,\n getSegmentTextProps,\n getStackedHorizontalFunnelSegmentGeometry,\n getStackedVerticalFunnelSegmentGeometry,\n} from './funnelGeometry';\nimport type { ChartPopoverProps } from '../../index';\nimport { useImageExport } from '../../utilities/hooks';\n\nexport const FunnelChart: React.FunctionComponent<FunnelChartProps> = React.forwardRef<\n HTMLDivElement,\n FunnelChartProps\n>(({ orientation = 'vertical', ...restProps }, forwardedRef) => {\n const props = { orientation, ...restProps };\n const _emptyChartId: string = useId('_FunnelChart_empty');\n const isRTL = useRtl();\n\n const [hoveredStage, setHoveredStage] = React.useState<string | null>(null);\n const [calloutData, setCalloutData] = React.useState<FunnelChartDataPoint | null>(null);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>([]);\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const [refSelected, setRefSelected] = React.useState<HTMLElement | null>(null);\n const isStacked = isStackedFunnelData(props.data);\n const { chartContainerRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend, false);\n\n React.useEffect(() => {\n if (props.legendProps?.selectedLegends) {\n setSelectedLegends(props.legendProps.selectedLegends);\n }\n }, [props.legendProps?.selectedLegends]);\n\n function _handleHover(\n data: FunnelChartDataPoint,\n mouseEvent: React.MouseEvent<SVGElement>,\n targetElement?: HTMLElement | null,\n ) {\n mouseEvent?.persist();\n setCalloutData(data);\n setRefSelected(targetElement!);\n setPopoverOpen(true);\n }\n\n function _handleFocus(\n data: FunnelChartDataPoint,\n focusEvent: React.FocusEvent<SVGPathElement>,\n targetElement?: HTMLElement | null,\n ) {\n focusEvent?.persist();\n setCalloutData(data);\n setRefSelected(targetElement!);\n setPopoverOpen(true);\n }\n\n function _handleStackedHover(\n stage: string,\n subValue: { category: string; value: number; color: string },\n mouseEvent: React.MouseEvent<SVGElement>,\n targetElement?: HTMLElement | null,\n ) {\n mouseEvent?.persist();\n setCalloutData({\n stage,\n value: subValue.value,\n color: subValue.color,\n category: subValue.category,\n } as FunnelChartDataPoint);\n setRefSelected(targetElement!);\n setPopoverOpen(true);\n }\n\n function _handleStackedFocus(\n stage: string,\n subValue: { category: string; value: number; color: string },\n focusEvent: React.FocusEvent<SVGPathElement>,\n targetElement?: HTMLElement | null,\n ) {\n focusEvent?.persist();\n setCalloutData({\n stage,\n value: subValue.value,\n color: subValue.color,\n category: subValue.category,\n } as FunnelChartDataPoint);\n setRefSelected(targetElement!);\n setPopoverOpen(true);\n }\n\n function _handleMouseOut() {\n setHoveredStage(null);\n setPopoverOpen(false);\n setCalloutData(null);\n }\n\n function _onLegendSelectionChange(\n legendsSelected: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(legendsSelected);\n } else {\n setSelectedLegends(legendsSelected.slice(-1));\n }\n\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(legendsSelected, event, currentLegend);\n }\n }\n\n const _onLegendSelectionChangeCallback = React.useCallback(_onLegendSelectionChange, [props.legendProps]);\n\n function getHighlightedLegend(): string[] {\n return selectedLegends.length > 0 ? selectedLegends : hoveredStage ? [hoveredStage] : [];\n }\n\n function legendHighlighted(legend: string): boolean {\n return getHighlightedLegend().includes(legend);\n }\n\n function noLegendHighlighted(): boolean {\n return getHighlightedLegend().length === 0;\n }\n\n function _getAriaLabel(\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } },\n ): string {\n if ('subValue' in data) {\n // Stacked funnel segment\n const formattedValue = formatToLocaleString(data.subValue.value.toString(), props.culture);\n return `${data.stage}, ${data.subValue.category}, ${formattedValue}.`;\n } else {\n // Non-stacked funnel segment\n const formattedValue = formatToLocaleString((data.value ?? 0).toString(), props.culture);\n return `${data.stage}, ${formattedValue}.`;\n }\n }\n\n function _getEventHandlerProps(\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } },\n opacity?: number,\n segmentId?: string,\n ) {\n const targetElement = document.getElementById(segmentId!);\n if ('subValue' in data) {\n return {\n culture: props.culture,\n onMouseOver:\n opacity == 1\n ? (event: React.MouseEvent<SVGElement>) =>\n _handleStackedHover(data.stage, data.subValue, event, targetElement)\n : undefined,\n onMouseMove:\n opacity == 1\n ? (event: React.MouseEvent<SVGElement>) =>\n _handleStackedHover(data.stage, data.subValue, event, targetElement)\n : undefined,\n onFocus: (event: React.FocusEvent<SVGPathElement>) =>\n _handleStackedFocus(data.stage, data.subValue, event, targetElement),\n onBlur: () => _handleMouseOut(),\n onMouseOut: () => _handleMouseOut(),\n };\n } else {\n return {\n culture: props.culture,\n onMouseOver:\n opacity == 1 ? (event: React.MouseEvent<SVGElement>) => _handleHover(data, event, targetElement) : undefined,\n onMouseMove:\n opacity == 1 ? (event: React.MouseEvent<SVGElement>) => _handleHover(data, event, targetElement) : undefined,\n onFocus: (event: React.FocusEvent<SVGPathElement>) => _handleFocus(data, event, targetElement),\n onBlur: () => _handleMouseOut(),\n onMouseOut: () => _handleMouseOut(),\n };\n }\n }\n\n function _renderSegmentText({\n show,\n x,\n y,\n value,\n textColor,\n opacity,\n }: {\n show: boolean;\n x: number;\n y: number;\n value: number;\n textColor: string;\n opacity: number;\n }) {\n if (!show) {\n return null;\n }\n\n const textElement = (\n <text\n x={isRTL ? funnelWidth - x : x}\n y={y}\n opacity={opacity}\n textAnchor=\"middle\"\n alignmentBaseline=\"middle\"\n fill={textColor}\n >\n {formatToLocaleString(value.toString(), props.culture) as React.ReactNode}\n </text>\n );\n\n if (isRTL) {\n return <g transform={`scale(-1,1) translate(${-funnelWidth},0)`}>{textElement}</g>;\n }\n return textElement;\n }\n\n function _renderFunnelSegment({\n key,\n pathD,\n fill,\n opacity,\n textProps,\n data,\n tabIndex,\n }: {\n key: string | number;\n pathD: string;\n fill: string;\n opacity: number;\n textProps?: {\n show: boolean;\n x: number;\n y: number;\n value: number;\n };\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } };\n tabIndex?: number;\n }) {\n const segmentId = `funnel-segment-${key}`;\n const eventHandlers = _getEventHandlerProps(data, opacity, segmentId);\n const textColor = getContrastTextColor(fill);\n return (\n <g key={key} role=\"presentation\">\n <path\n id={segmentId}\n d={pathD}\n fill={fill}\n opacity={opacity}\n {...eventHandlers}\n tabIndex={tabIndex}\n role=\"option\"\n aria-label={_getAriaLabel(data)}\n />\n {textProps && (\n <g {...eventHandlers} aria-hidden={true}>\n {_renderSegmentText({ ...textProps, textColor, opacity })}\n </g>\n )}\n </g>\n );\n }\n\n function _createFunnel(containerHeight: number, containerWidth: number): JSXElement[] {\n const { data } = props;\n const funnelWidth = containerWidth;\n const funnelHeight = containerHeight * 0.8;\n\n return data.map((d, i) => {\n const geometryProps =\n props.orientation === 'vertical'\n ? getVerticalFunnelSegmentGeometry({ d, i, data, funnelWidth, funnelHeight, isRTL })\n : getHorizontalFunnelSegmentGeometry({ d, i, data, funnelWidth, funnelHeight, isRTL });\n\n const { pathD, textX, textY, availableWidth } = geometryProps;\n const minTextWidth = 16;\n const eventHandlerProps = _getEventHandlerProps(d);\n const textProps = getSegmentTextProps({\n availableWidth,\n minTextWidth,\n textX,\n textY,\n value: d.value!,\n ...eventHandlerProps,\n });\n\n return _renderFunnelSegment({\n key: i,\n pathD,\n fill: d.color!,\n opacity: legendHighlighted(d.stage as string) || noLegendHighlighted() ? 1 : 0.1,\n textProps,\n data: d,\n tabIndex: legendHighlighted(d.stage as string) || noLegendHighlighted() ? 0 : undefined,\n });\n });\n }\n\n function isStackedFunnelData(data: FunnelChartDataPoint[]): boolean {\n return Array.isArray(data) && data.every(stage => Array.isArray(stage.subValues));\n }\n\n function _renderStackedSegment(\n stage: FunnelChartDataPoint,\n subValue: { value: number; color: string; category: string },\n stageIndex: number,\n subValueIndex: number,\n geometryParams: {\n stages: FunnelChartDataPoint[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n },\n ): JSXElement {\n // Ensure stages have subValues for geometry functions\n const stagesWithSubValues = geometryParams.stages.map(s => ({\n ...s,\n subValues: s.subValues || [],\n }));\n const geom =\n props.orientation === 'vertical'\n ? getStackedVerticalFunnelSegmentGeometry({\n ...geometryParams,\n stages: stagesWithSubValues,\n i: stageIndex,\n k: subValueIndex,\n })\n : getStackedHorizontalFunnelSegmentGeometry({\n ...geometryParams,\n stages: stagesWithSubValues,\n i: stageIndex,\n k: subValueIndex,\n });\n\n const minTextWidth = 16;\n const eventHandlerProps = _getEventHandlerProps({ stage: stage.stage as string, subValue });\n const textProps = getSegmentTextProps({\n availableWidth: geom.availableWidth,\n minTextWidth,\n textX: geom.textX,\n textY: geom.textY,\n value: subValue.value,\n ...eventHandlerProps,\n });\n\n return _renderFunnelSegment({\n key: `${stageIndex}-${subValueIndex}`,\n pathD: geom.pathD,\n fill: subValue.color,\n opacity:\n (isStackedFunnelData(props.data) && legendHighlighted(subValue.category)) || noLegendHighlighted() ? 1 : 0.1,\n textProps,\n data: { stage: stage.stage as string, subValue },\n tabIndex: legendHighlighted(subValue.category) || noLegendHighlighted() ? 0 : undefined,\n });\n }\n\n function _createStackedFunnel(containerHeight: number, containerWidth: number): JSXElement[] {\n const { data } = props;\n\n const stages = data;\n const totals = stages.map(s => s?.subValues?.reduce((sum, subValue) => sum + subValue.value, 0) ?? 0);\n const maxTotal = Math.max(...totals);\n\n const funnelWidth = containerWidth;\n const funnelHeight = containerHeight * 0.8;\n\n const paths: JSXElement[] = [];\n\n const geometryParams = {\n stages,\n totals,\n maxTotal,\n funnelWidth,\n funnelHeight,\n isRTL,\n };\n\n for (let i = 0; i < stages.length; i++) {\n const cur = stages[i];\n for (let k = 0; k < (cur.subValues ?? []).length; k++) {\n const v = cur.subValues?.[k];\n if (!v) {\n continue;\n }\n paths.push(_renderStackedSegment(cur, v, i, k, geometryParams));\n }\n }\n return paths;\n }\n\n function _renderLegends(): JSXElement {\n if (props.hideLegend) {\n return <></>;\n }\n let legends: Legend[];\n\n if (isStacked) {\n // Collect unique categories and their color\n const categoryMap: Record<string, string> = {};\n props.data.forEach((stage: FunnelChartDataPoint) => {\n (stage.subValues || []).forEach(sub => {\n if (!(sub.category in categoryMap)) {\n categoryMap[sub.category] = sub.color;\n }\n });\n });\n legends = Object.entries(categoryMap).map(([category, color]) => ({\n title: category,\n color,\n hoverAction: () => setHoveredStage(category),\n onMouseOutAction: () => setHoveredStage(null),\n }));\n } else {\n legends = props.data.map((d: FunnelChartDataPoint) => ({\n title: d.stage as string,\n color: d.color!,\n hoverAction: () => setHoveredStage(d.stage as string),\n onMouseOutAction: () => setHoveredStage(null),\n }));\n }\n\n return (\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Legends\n legends={legends}\n centerLegends={true}\n onChange={_onLegendSelectionChangeCallback}\n {...props.legendProps}\n legendRef={_legendsRef}\n />\n </div>\n );\n }\n\n function _isChartEmpty(): boolean {\n return !(props.data && props.data.length > 0);\n }\n\n const classes = useFunnelChartStyles(props);\n\n const calloutProps: ChartPopoverProps = {\n ...props.calloutProps,\n color: calloutData?.color,\n hoverXValue: calloutData?.stage,\n YValue: calloutData?.value,\n };\n\n const width = props.width || 350;\n const height = props.height || 500;\n\n const titleHeight = props.chartTitle\n ? Math.max(\n (typeof props.titleStyles?.titleFont?.size === 'number' ? props.titleStyles.titleFont.size : 13) +\n CHART_TITLE_PADDING,\n 40,\n )\n : 40;\n const funnelMarginTop = titleHeight;\n const funnelWidth = width * 0.8;\n const funnelOffsetX = (width - funnelWidth) / 2;\n const arrowAttributes = useArrowNavigationGroup({ circular: true, axis: 'horizontal' });\n const segmentCount = isStacked\n ? props.data.reduce((count, stage) => count + (stage.subValues?.length ?? 0), 0)\n : props.data.length;\n\n return !_isChartEmpty() ? (\n <div ref={chartContainerRef} className={classes.root} style={{ width, height }}>\n <svg\n width={width}\n height={height}\n className={classes.chart}\n {...arrowAttributes}\n role={'region'}\n aria-label={props.chartTitle}\n >\n {!props.hideLegend && props.chartTitle && (\n <ChartTitle\n title={props.chartTitle}\n x={width / 2}\n maxWidth={width - 20}\n className={classes.chartTitle}\n titleStyles={props.titleStyles}\n tooltipClassName={classes.svgTooltip}\n />\n )}\n <g\n role=\"listbox\"\n aria-label={`Funnel chart with ${segmentCount} segments`}\n transform={\n isRTL\n ? `translate(${funnelOffsetX + funnelWidth}, ${funnelMarginTop}) scale(-1,1)`\n : `translate(${funnelOffsetX}, ${funnelMarginTop})`\n }\n >\n {isStacked\n ? _createStackedFunnel(height - funnelMarginTop, funnelWidth)\n : _createFunnel(height - funnelMarginTop, funnelWidth)}\n </g>\n </svg>\n {isPopoverOpen && (\n <ChartPopover\n {...props.calloutProps}\n XValue={calloutProps?.hoverXValue as string}\n yCalloutValue={calloutProps?.YValue as string}\n culture={props.culture}\n positioning={{\n target: refSelected,\n }}\n isPopoverOpen={isPopoverOpen}\n color={calloutProps?.color}\n isCartesian={false}\n />\n )}\n {_renderLegends()}\n </div>\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nFunnelChart.displayName = 'FunnelChart';\n"],"names":["React","useId","useRtl","ChartTitle","CHART_TITLE_PADDING","Legends","useArrowNavigationGroup","ChartPopover","formatToLocaleString","getContrastTextColor","useFunnelChartStyles","getHorizontalFunnelSegmentGeometry","getVerticalFunnelSegmentGeometry","getSegmentTextProps","getStackedHorizontalFunnelSegmentGeometry","getStackedVerticalFunnelSegmentGeometry","useImageExport","FunnelChart","forwardRef","orientation","restProps","forwardedRef","props","_emptyChartId","isRTL","hoveredStage","setHoveredStage","useState","calloutData","setCalloutData","selectedLegends","setSelectedLegends","isPopoverOpen","setPopoverOpen","refSelected","setRefSelected","isStacked","isStackedFunnelData","data","chartContainerRef","legendsRef","_legendsRef","componentRef","hideLegend","useEffect","legendProps","_handleHover","mouseEvent","targetElement","persist","_handleFocus","focusEvent","_handleStackedHover","stage","subValue","value","color","category","_handleStackedFocus","_handleMouseOut","_onLegendSelectionChange","legendsSelected","event","currentLegend","canSelectMultipleLegends","slice","onChange","_onLegendSelectionChangeCallback","useCallback","getHighlightedLegend","length","legendHighlighted","legend","includes","noLegendHighlighted","_getAriaLabel","formattedValue","toString","culture","_getEventHandlerProps","opacity","segmentId","document","getElementById","onMouseOver","undefined","onMouseMove","onFocus","onBlur","onMouseOut","_renderSegmentText","show","x","y","textColor","textElement","text","funnelWidth","textAnchor","alignmentBaseline","fill","g","transform","_renderFunnelSegment","key","pathD","textProps","tabIndex","eventHandlers","role","path","id","d","aria-label","aria-hidden","_createFunnel","containerHeight","containerWidth","funnelHeight","map","i","geometryProps","textX","textY","availableWidth","minTextWidth","eventHandlerProps","Array","isArray","every","subValues","_renderStackedSegment","stageIndex","subValueIndex","geometryParams","stagesWithSubValues","stages","s","geom","k","_createStackedFunnel","totals","reduce","sum","maxTotal","Math","max","paths","cur","v","push","_renderLegends","legends","categoryMap","forEach","sub","Object","entries","title","hoverAction","onMouseOutAction","div","style","display","justifyContent","centerLegends","legendRef","_isChartEmpty","classes","calloutProps","hoverXValue","YValue","width","height","titleHeight","chartTitle","titleStyles","titleFont","size","funnelMarginTop","funnelOffsetX","arrowAttributes","circular","axis","segmentCount","count","ref","className","root","svg","chart","maxWidth","tooltipClassName","svgTooltip","XValue","yCalloutValue","positioning","target","isCartesian","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/FunnelChart/FunnelChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { useRtl, ChartTitle, CHART_TITLE_PADDING } from '../../utilities/index';\nimport type { FunnelChartDataPoint, FunnelChartProps } from './FunnelChart.types';\nimport type { Legend } from '../Legends/index';\nimport { Legends } from '../Legends/index';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { getContrastTextColor } from '../../utilities/colors';\nimport { useFunnelChartStyles } from './useFunnelChartStyles.styles';\nimport {\n getHorizontalFunnelSegmentGeometry,\n getVerticalFunnelSegmentGeometry,\n getSegmentTextProps,\n getStackedHorizontalFunnelSegmentGeometry,\n getStackedVerticalFunnelSegmentGeometry,\n} from './funnelGeometry';\nimport type { ChartPopoverProps } from '../../index';\nimport { useImageExport } from '../../utilities/hooks';\n\nexport const FunnelChart: React.FunctionComponent<FunnelChartProps> = React.forwardRef<\n HTMLDivElement,\n FunnelChartProps\n>(({ orientation = 'vertical', ...restProps }, forwardedRef) => {\n const props = { orientation, ...restProps };\n const _emptyChartId: string = useId('_FunnelChart_empty');\n const isRTL = useRtl();\n\n const [hoveredStage, setHoveredStage] = React.useState<string | null>(null);\n const [calloutData, setCalloutData] = React.useState<FunnelChartDataPoint | null>(null);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>([]);\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const [refSelected, setRefSelected] = React.useState<HTMLElement | null>(null);\n const isStacked = isStackedFunnelData(props.data);\n const { chartContainerRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend, false);\n\n React.useEffect(() => {\n if (props.legendProps?.selectedLegends) {\n setSelectedLegends(props.legendProps.selectedLegends);\n }\n }, [props.legendProps?.selectedLegends]);\n\n function _handleHover(\n data: FunnelChartDataPoint,\n mouseEvent: React.MouseEvent<SVGElement>,\n targetElement?: HTMLElement | null,\n ) {\n mouseEvent?.persist();\n setCalloutData(data);\n setRefSelected(targetElement!);\n setPopoverOpen(true);\n }\n\n function _handleFocus(\n data: FunnelChartDataPoint,\n focusEvent: React.FocusEvent<SVGPathElement>,\n targetElement?: HTMLElement | null,\n ) {\n focusEvent?.persist();\n setCalloutData(data);\n setRefSelected(targetElement!);\n setPopoverOpen(true);\n }\n\n function _handleStackedHover(\n stage: string,\n subValue: { category: string; value: number; color: string },\n mouseEvent: React.MouseEvent<SVGElement>,\n targetElement?: HTMLElement | null,\n ) {\n mouseEvent?.persist();\n setCalloutData({\n stage,\n value: subValue.value,\n color: subValue.color,\n category: subValue.category,\n } as FunnelChartDataPoint);\n setRefSelected(targetElement!);\n setPopoverOpen(true);\n }\n\n function _handleStackedFocus(\n stage: string,\n subValue: { category: string; value: number; color: string },\n focusEvent: React.FocusEvent<SVGPathElement>,\n targetElement?: HTMLElement | null,\n ) {\n focusEvent?.persist();\n setCalloutData({\n stage,\n value: subValue.value,\n color: subValue.color,\n category: subValue.category,\n } as FunnelChartDataPoint);\n setRefSelected(targetElement!);\n setPopoverOpen(true);\n }\n\n function _handleMouseOut() {\n setHoveredStage(null);\n setPopoverOpen(false);\n setCalloutData(null);\n }\n\n function _onLegendSelectionChange(\n legendsSelected: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(legendsSelected);\n } else {\n setSelectedLegends(legendsSelected.slice(-1));\n }\n\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(legendsSelected, event, currentLegend);\n }\n }\n\n const _onLegendSelectionChangeCallback = React.useCallback(_onLegendSelectionChange, [props.legendProps]);\n\n function getHighlightedLegend(): string[] {\n return selectedLegends.length > 0 ? selectedLegends : hoveredStage ? [hoveredStage] : [];\n }\n\n function legendHighlighted(legend: string): boolean {\n return getHighlightedLegend().includes(legend);\n }\n\n function noLegendHighlighted(): boolean {\n return getHighlightedLegend().length === 0;\n }\n\n function _getAriaLabel(\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } },\n ): string {\n if ('subValue' in data) {\n // Stacked funnel segment\n const formattedValue = formatToLocaleString(data.subValue.value.toString(), props.culture);\n return `${data.stage}, ${data.subValue.category}, ${formattedValue}.`;\n } else {\n // Non-stacked funnel segment\n const formattedValue = formatToLocaleString((data.value ?? 0).toString(), props.culture);\n return `${data.stage}, ${formattedValue}.`;\n }\n }\n\n function _getEventHandlerProps(\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } },\n opacity?: number,\n segmentId?: string,\n ) {\n const targetElement = document.getElementById(segmentId!);\n if ('subValue' in data) {\n return {\n culture: props.culture,\n onMouseOver:\n opacity == 1\n ? (event: React.MouseEvent<SVGElement>) =>\n _handleStackedHover(data.stage, data.subValue, event, targetElement)\n : undefined,\n onMouseMove:\n opacity == 1\n ? (event: React.MouseEvent<SVGElement>) =>\n _handleStackedHover(data.stage, data.subValue, event, targetElement)\n : undefined,\n onFocus: (event: React.FocusEvent<SVGPathElement>) =>\n _handleStackedFocus(data.stage, data.subValue, event, targetElement),\n onBlur: () => _handleMouseOut(),\n onMouseOut: () => _handleMouseOut(),\n };\n } else {\n return {\n culture: props.culture,\n onMouseOver:\n opacity == 1 ? (event: React.MouseEvent<SVGElement>) => _handleHover(data, event, targetElement) : undefined,\n onMouseMove:\n opacity == 1 ? (event: React.MouseEvent<SVGElement>) => _handleHover(data, event, targetElement) : undefined,\n onFocus: (event: React.FocusEvent<SVGPathElement>) => _handleFocus(data, event, targetElement),\n onBlur: () => _handleMouseOut(),\n onMouseOut: () => _handleMouseOut(),\n };\n }\n }\n\n function _renderSegmentText({\n show,\n x,\n y,\n value,\n textColor,\n opacity,\n }: {\n show: boolean;\n x: number;\n y: number;\n value: number;\n textColor: string;\n opacity: number;\n }) {\n if (!show) {\n return null;\n }\n\n const textElement = (\n <text\n x={isRTL ? funnelWidth - x : x}\n y={y}\n opacity={opacity}\n textAnchor=\"middle\"\n alignmentBaseline=\"middle\"\n fill={textColor}\n >\n {formatToLocaleString(value.toString(), props.culture) as React.ReactNode}\n </text>\n );\n\n if (isRTL) {\n return <g transform={`scale(-1,1) translate(${-funnelWidth},0)`}>{textElement}</g>;\n }\n return textElement;\n }\n\n function _renderFunnelSegment({\n key,\n pathD,\n fill,\n opacity,\n textProps,\n data,\n tabIndex,\n }: {\n key: string | number;\n pathD: string;\n fill: string;\n opacity: number;\n textProps?: {\n show: boolean;\n x: number;\n y: number;\n value: number;\n };\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } };\n tabIndex?: number;\n }) {\n const segmentId = `funnel-segment-${key}`;\n const eventHandlers = _getEventHandlerProps(data, opacity, segmentId);\n const textColor = getContrastTextColor(fill);\n return (\n <g key={key} role=\"presentation\">\n <path\n id={segmentId}\n d={pathD}\n fill={fill}\n opacity={opacity}\n {...eventHandlers}\n tabIndex={tabIndex}\n role=\"option\"\n aria-label={_getAriaLabel(data)}\n />\n {textProps && (\n <g {...eventHandlers} aria-hidden={true}>\n {_renderSegmentText({ ...textProps, textColor, opacity })}\n </g>\n )}\n </g>\n );\n }\n\n function _createFunnel(containerHeight: number, containerWidth: number): JSXElement[] {\n const { data } = props;\n const funnelWidth = containerWidth;\n const funnelHeight = containerHeight * 0.8;\n\n return data.map((d, i) => {\n const geometryProps =\n props.orientation === 'vertical'\n ? getVerticalFunnelSegmentGeometry({ d, i, data, funnelWidth, funnelHeight, isRTL })\n : getHorizontalFunnelSegmentGeometry({ d, i, data, funnelWidth, funnelHeight, isRTL });\n\n const { pathD, textX, textY, availableWidth } = geometryProps;\n const minTextWidth = 16;\n const eventHandlerProps = _getEventHandlerProps(d);\n const textProps = getSegmentTextProps({\n availableWidth,\n minTextWidth,\n textX,\n textY,\n value: d.value!,\n ...eventHandlerProps,\n });\n\n return _renderFunnelSegment({\n key: i,\n pathD,\n fill: d.color!,\n opacity: legendHighlighted(d.stage as string) || noLegendHighlighted() ? 1 : 0.1,\n textProps,\n data: d,\n tabIndex: legendHighlighted(d.stage as string) || noLegendHighlighted() ? 0 : undefined,\n });\n });\n }\n\n function isStackedFunnelData(data: FunnelChartDataPoint[]): boolean {\n return Array.isArray(data) && data.every(stage => Array.isArray(stage.subValues));\n }\n\n function _renderStackedSegment(\n stage: FunnelChartDataPoint,\n subValue: { value: number; color: string; category: string },\n stageIndex: number,\n subValueIndex: number,\n geometryParams: {\n stages: FunnelChartDataPoint[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n },\n ): JSXElement {\n // Ensure stages have subValues for geometry functions\n const stagesWithSubValues = geometryParams.stages.map(s => ({\n ...s,\n subValues: s.subValues || [],\n }));\n const geom =\n props.orientation === 'vertical'\n ? getStackedVerticalFunnelSegmentGeometry({\n ...geometryParams,\n stages: stagesWithSubValues,\n i: stageIndex,\n k: subValueIndex,\n })\n : getStackedHorizontalFunnelSegmentGeometry({\n ...geometryParams,\n stages: stagesWithSubValues,\n i: stageIndex,\n k: subValueIndex,\n });\n\n const minTextWidth = 16;\n const eventHandlerProps = _getEventHandlerProps({ stage: stage.stage as string, subValue });\n const textProps = getSegmentTextProps({\n availableWidth: geom.availableWidth,\n minTextWidth,\n textX: geom.textX,\n textY: geom.textY,\n value: subValue.value,\n ...eventHandlerProps,\n });\n\n return _renderFunnelSegment({\n key: `${stageIndex}-${subValueIndex}`,\n pathD: geom.pathD,\n fill: subValue.color,\n opacity:\n (isStackedFunnelData(props.data) && legendHighlighted(subValue.category)) || noLegendHighlighted() ? 1 : 0.1,\n textProps,\n data: { stage: stage.stage as string, subValue },\n tabIndex: legendHighlighted(subValue.category) || noLegendHighlighted() ? 0 : undefined,\n });\n }\n\n function _createStackedFunnel(containerHeight: number, containerWidth: number): JSXElement[] {\n const { data } = props;\n\n const stages = data;\n const totals = stages.map(s => s?.subValues?.reduce((sum, subValue) => sum + subValue.value, 0) ?? 0);\n const maxTotal = Math.max(...totals);\n\n const funnelWidth = containerWidth;\n const funnelHeight = containerHeight * 0.8;\n\n const paths: JSXElement[] = [];\n\n const geometryParams = {\n stages,\n totals,\n maxTotal,\n funnelWidth,\n funnelHeight,\n isRTL,\n };\n\n for (let i = 0; i < stages.length; i++) {\n const cur = stages[i];\n for (let k = 0; k < (cur.subValues ?? []).length; k++) {\n const v = cur.subValues?.[k];\n if (!v) {\n continue;\n }\n paths.push(_renderStackedSegment(cur, v, i, k, geometryParams));\n }\n }\n return paths;\n }\n\n function _renderLegends(): JSXElement {\n if (props.hideLegend) {\n return <></>;\n }\n let legends: Legend[];\n\n if (isStacked) {\n // Collect unique categories and their color\n const categoryMap: Record<string, string> = Object.create(null);\n props.data.forEach((stage: FunnelChartDataPoint) => {\n (stage.subValues || []).forEach(sub => {\n if (!(sub.category in categoryMap)) {\n categoryMap[sub.category] = sub.color;\n }\n });\n });\n legends = Object.entries(categoryMap).map(([category, color]) => ({\n title: category,\n color,\n hoverAction: () => setHoveredStage(category),\n onMouseOutAction: () => setHoveredStage(null),\n }));\n } else {\n legends = props.data.map((d: FunnelChartDataPoint) => ({\n title: d.stage as string,\n color: d.color!,\n hoverAction: () => setHoveredStage(d.stage as string),\n onMouseOutAction: () => setHoveredStage(null),\n }));\n }\n\n return (\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Legends\n legends={legends}\n centerLegends={true}\n onChange={_onLegendSelectionChangeCallback}\n {...props.legendProps}\n legendRef={_legendsRef}\n />\n </div>\n );\n }\n\n function _isChartEmpty(): boolean {\n return !(props.data && props.data.length > 0);\n }\n\n const classes = useFunnelChartStyles(props);\n\n const calloutProps: ChartPopoverProps = {\n ...props.calloutProps,\n color: calloutData?.color,\n hoverXValue: calloutData?.stage,\n YValue: calloutData?.value,\n };\n\n const width = props.width || 350;\n const height = props.height || 500;\n\n const titleHeight = props.chartTitle\n ? Math.max(\n (typeof props.titleStyles?.titleFont?.size === 'number' ? props.titleStyles.titleFont.size : 13) +\n CHART_TITLE_PADDING,\n 40,\n )\n : 40;\n const funnelMarginTop = titleHeight;\n const funnelWidth = width * 0.8;\n const funnelOffsetX = (width - funnelWidth) / 2;\n const arrowAttributes = useArrowNavigationGroup({ circular: true, axis: 'horizontal' });\n const segmentCount = isStacked\n ? props.data.reduce((count, stage) => count + (stage.subValues?.length ?? 0), 0)\n : props.data.length;\n\n return !_isChartEmpty() ? (\n <div ref={chartContainerRef} className={classes.root} style={{ width, height }}>\n <svg\n width={width}\n height={height}\n className={classes.chart}\n {...arrowAttributes}\n role={'region'}\n aria-label={props.chartTitle}\n >\n {!props.hideLegend && props.chartTitle && (\n <ChartTitle\n title={props.chartTitle}\n x={width / 2}\n maxWidth={width - 20}\n className={classes.chartTitle}\n titleStyles={props.titleStyles}\n tooltipClassName={classes.svgTooltip}\n />\n )}\n <g\n role=\"listbox\"\n aria-label={`Funnel chart with ${segmentCount} segments`}\n transform={\n isRTL\n ? `translate(${funnelOffsetX + funnelWidth}, ${funnelMarginTop}) scale(-1,1)`\n : `translate(${funnelOffsetX}, ${funnelMarginTop})`\n }\n >\n {isStacked\n ? _createStackedFunnel(height - funnelMarginTop, funnelWidth)\n : _createFunnel(height - funnelMarginTop, funnelWidth)}\n </g>\n </svg>\n {isPopoverOpen && (\n <ChartPopover\n {...props.calloutProps}\n XValue={calloutProps?.hoverXValue as string}\n yCalloutValue={calloutProps?.YValue as string}\n culture={props.culture}\n positioning={{\n target: refSelected,\n }}\n isPopoverOpen={isPopoverOpen}\n color={calloutProps?.color}\n isCartesian={false}\n />\n )}\n {_renderLegends()}\n </div>\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nFunnelChart.displayName = 'FunnelChart';\n"],"names":["React","useId","useRtl","ChartTitle","CHART_TITLE_PADDING","Legends","useArrowNavigationGroup","ChartPopover","formatToLocaleString","getContrastTextColor","useFunnelChartStyles","getHorizontalFunnelSegmentGeometry","getVerticalFunnelSegmentGeometry","getSegmentTextProps","getStackedHorizontalFunnelSegmentGeometry","getStackedVerticalFunnelSegmentGeometry","useImageExport","FunnelChart","forwardRef","orientation","restProps","forwardedRef","props","_emptyChartId","isRTL","hoveredStage","setHoveredStage","useState","calloutData","setCalloutData","selectedLegends","setSelectedLegends","isPopoverOpen","setPopoverOpen","refSelected","setRefSelected","isStacked","isStackedFunnelData","data","chartContainerRef","legendsRef","_legendsRef","componentRef","hideLegend","useEffect","legendProps","_handleHover","mouseEvent","targetElement","persist","_handleFocus","focusEvent","_handleStackedHover","stage","subValue","value","color","category","_handleStackedFocus","_handleMouseOut","_onLegendSelectionChange","legendsSelected","event","currentLegend","canSelectMultipleLegends","slice","onChange","_onLegendSelectionChangeCallback","useCallback","getHighlightedLegend","length","legendHighlighted","legend","includes","noLegendHighlighted","_getAriaLabel","formattedValue","toString","culture","_getEventHandlerProps","opacity","segmentId","document","getElementById","onMouseOver","undefined","onMouseMove","onFocus","onBlur","onMouseOut","_renderSegmentText","show","x","y","textColor","textElement","text","funnelWidth","textAnchor","alignmentBaseline","fill","g","transform","_renderFunnelSegment","key","pathD","textProps","tabIndex","eventHandlers","role","path","id","d","aria-label","aria-hidden","_createFunnel","containerHeight","containerWidth","funnelHeight","map","i","geometryProps","textX","textY","availableWidth","minTextWidth","eventHandlerProps","Array","isArray","every","subValues","_renderStackedSegment","stageIndex","subValueIndex","geometryParams","stagesWithSubValues","stages","s","geom","k","_createStackedFunnel","totals","reduce","sum","maxTotal","Math","max","paths","cur","v","push","_renderLegends","legends","categoryMap","Object","create","forEach","sub","entries","title","hoverAction","onMouseOutAction","div","style","display","justifyContent","centerLegends","legendRef","_isChartEmpty","classes","calloutProps","hoverXValue","YValue","width","height","titleHeight","chartTitle","titleStyles","titleFont","size","funnelMarginTop","funnelOffsetX","arrowAttributes","circular","axis","segmentCount","count","ref","className","root","svg","chart","maxWidth","tooltipClassName","svgTooltip","XValue","yCalloutValue","positioning","target","isCartesian","displayName"],"mappings":"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"}
|
|
@@ -131,7 +131,7 @@ const GanttChart = /*#__PURE__*/ _react.forwardRef(({ useUTC = true, yAxisCatego
|
|
|
131
131
|
_xAxisType
|
|
132
132
|
]);
|
|
133
133
|
const _mapYValueToXValues = _react.useCallback(()=>{
|
|
134
|
-
const yValueToXValues =
|
|
134
|
+
const yValueToXValues = Object.create(null);
|
|
135
135
|
_points.forEach((point)=>{
|
|
136
136
|
if (!yValueToXValues[point.y]) {
|
|
137
137
|
yValueToXValues[point.y] = [];
|
|
@@ -308,7 +308,7 @@ const GanttChart = /*#__PURE__*/ _react.forwardRef(({ useUTC = true, yAxisCatego
|
|
|
308
308
|
]);
|
|
309
309
|
const _getOrderedDataPoints = _react.useCallback(()=>{
|
|
310
310
|
const result = [];
|
|
311
|
-
const yValueToPoints =
|
|
311
|
+
const yValueToPoints = Object.create(null);
|
|
312
312
|
_points.forEach((point)=>{
|
|
313
313
|
if (!yValueToPoints[point.y]) {
|
|
314
314
|
yValueToPoints[point.y] = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/GanttChart/GanttChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport type { ScaleLinear, ScaleBand, ScaleTime } from 'd3-scale';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport type { Legend } from '../Legends/index';\nimport { Legends } from '../Legends/index';\nimport type { Margins, GanttChartDataPoint } from '../../types/DataPoint';\nimport type { ModifiedCartesianChartProps } from '../CommonComponents/index';\nimport { CartesianChart } from '../CommonComponents/index';\nimport type { GanttChartProps } from './GanttChart.types';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport type { ChartPopoverProps } from '../../index';\nimport type { IDomainNRange } from '../../utilities/index';\nimport {\n ChartTypes,\n YAxisType,\n XAxisTypes,\n getTypeOfAxis,\n getNextColor,\n findHBCWANumericMinMaxOfY,\n createYAxisForHorizontalBarChartWithAxis,\n createStringYAxisForHorizontalBarChartWithAxis,\n areArraysEqual,\n MIN_DOMAIN_MARGIN,\n sortAxisCategories,\n calculateAppropriateBarWidth,\n getColorFromToken,\n getScalePadding,\n getDateFormatLevel,\n} from '../../utilities/index';\nimport { formatDateToLocaleString, getMultiLevelDateTimeFormatOptions } from '@fluentui/chart-utilities';\nimport { useImageExport } from '../../utilities/hooks';\n\ntype NumberScale = ScaleLinear<number, number>;\ntype StringScale = ScaleBand<string>;\ntype DateScale = ScaleTime<Date, number>;\n\nconst DEFAULT_BAR_HEIGHT = 24;\nconst MIN_BAR_HEIGHT = 1;\n\nexport const GanttChart: React.FunctionComponent<GanttChartProps> = React.forwardRef<HTMLDivElement, GanttChartProps>(\n ({ useUTC = true, yAxisCategoryOrder = 'default', maxBarHeight = 24, ...props }, forwardedRef) => {\n const _barHeight = React.useRef<number>(DEFAULT_BAR_HEIGHT);\n const _margins = React.useRef<Margins>({});\n const _calloutAnchorPoint = React.useRef<GanttChartDataPoint | null>(null);\n const _emptyChartId = useId('Gantt_empty');\n const _legendId = useId('gantt_legend');\n const _legendMap = React.useRef<Record<string, { id: string; startColor: string; endColor: string }>>({});\n const _prevProps = React.useRef<Partial<GanttChartProps>>({});\n\n const [calloutColor, setCalloutColor] = React.useState<string>('');\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [calloutDataPoint, setCalloutDataPoint] = React.useState<GanttChartDataPoint>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const { cartesianChartRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend);\n\n React.useEffect(() => {\n if (!areArraysEqual(_prevProps.current.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n _prevProps.current = props;\n }, [props]);\n\n const _points = React.useMemo(() => {\n _legendMap.current = {};\n let colorIndex = 0;\n\n return (\n props.data?.map(point => {\n const legend = `${point.legend}`;\n if (!_legendMap.current[legend]) {\n let startColor = point.color ? getColorFromToken(point.color) : getNextColor(colorIndex, 0);\n let endColor = startColor;\n\n if (props.enableGradient) {\n startColor = point.gradient?.[0]!;\n endColor = point.gradient?.[1]!;\n }\n\n _legendMap.current[legend] = { id: `${_legendId}_${colorIndex}`, startColor, endColor };\n colorIndex += 1;\n }\n\n const { startColor, endColor } = _legendMap.current[legend];\n return {\n ...point,\n color: startColor,\n ...(props.enableGradient ? { gradient: [startColor, endColor] as [string, string] } : {}),\n };\n }) ?? []\n );\n }, [props.data, props.enableGradient]);\n\n const _xAxisType = React.useMemo(() => {\n if (_points.length > 0) {\n return getTypeOfAxis(_points[0].x.start, true) as XAxisTypes;\n }\n return XAxisTypes.DateAxis;\n }, [_points]);\n\n const _yAxisType = React.useMemo(() => {\n if (_points.length > 0) {\n return getTypeOfAxis(_points[0].y, false) as YAxisType;\n }\n return YAxisType.StringAxis;\n }, [_points]);\n\n const _yAxisPadding = React.useMemo(() => {\n return getScalePadding(props.yAxisPadding, undefined, 1 / 2);\n }, [props.yAxisPadding]);\n\n const _dateFormatOptions = React.useMemo(() => {\n if (_xAxisType !== XAxisTypes.DateAxis) {\n return undefined;\n }\n\n let lowestFormatLevel = 100;\n let highestFormatLevel = -1;\n _points.forEach(p => {\n const startFormatLevel = getDateFormatLevel(p.x.start as Date, useUTC as boolean);\n const endFormatLevel = getDateFormatLevel(p.x.end as Date, useUTC as boolean);\n lowestFormatLevel = Math.min(lowestFormatLevel, startFormatLevel, endFormatLevel);\n highestFormatLevel = Math.max(highestFormatLevel, startFormatLevel, endFormatLevel);\n });\n\n return getMultiLevelDateTimeFormatOptions(lowestFormatLevel, highestFormatLevel);\n }, [useUTC, _points, _xAxisType]);\n\n const _mapYValueToXValues = React.useCallback(() => {\n const yValueToXValues: Record<string, number[]> = {};\n _points.forEach(point => {\n if (!yValueToXValues[point.y]) {\n yValueToXValues[point.y] = [];\n }\n yValueToXValues[point.y].push(+point.x.end - +point.x.start);\n });\n return yValueToXValues;\n }, [_points]);\n\n const _getOrderedYAxisLabels = React.useCallback(() => {\n const yValueToXValues = _mapYValueToXValues();\n\n if (_yAxisType !== YAxisType.StringAxis) {\n return Object.keys(yValueToXValues).sort((a, b) => +a - +b);\n }\n\n if (yAxisCategoryOrder === 'default') {\n return Object.keys(yValueToXValues).reverse();\n }\n return sortAxisCategories(yValueToXValues, yAxisCategoryOrder);\n }, [_mapYValueToXValues, _yAxisType, yAxisCategoryOrder]);\n\n const _yAxisLabels = React.useMemo(() => _getOrderedYAxisLabels(), [_getOrderedYAxisLabels]);\n\n const _getDomainNRangeValues = React.useCallback(\n (\n points: GanttChartDataPoint[],\n margins: Margins,\n containerWidth: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n ): IDomainNRange => {\n const xValues: (Date | number)[] = [];\n points.forEach(point => {\n xValues.push(point.x.start, point.x.end);\n });\n\n const xMin = d3Min(xValues) || 0;\n const xMax = d3Max(xValues) || 0;\n\n return {\n dStartValue: isRTL ? xMax : xMin,\n dEndValue: isRTL ? xMin : xMax,\n rStartValue: margins.left!,\n rEndValue: containerWidth - margins.right!,\n };\n },\n [],\n );\n\n const _getMargins = React.useCallback((margins: Margins) => {\n _margins.current = margins;\n }, []);\n\n const _getFormattedXValue = React.useCallback(\n (point: GanttChartDataPoint): string => {\n let formattedStartX: string;\n let formattedEndX: string;\n\n if (_xAxisType === XAxisTypes.DateAxis) {\n formattedStartX = formatDateToLocaleString(\n point.x.start as Date,\n props.culture,\n useUTC as boolean,\n false,\n _dateFormatOptions,\n );\n formattedEndX = formatDateToLocaleString(\n point.x.end as Date,\n props.culture,\n useUTC as boolean,\n false,\n _dateFormatOptions,\n );\n } else {\n formattedStartX = point.x.start.toString();\n formattedEndX = point.x.end.toString();\n }\n\n return `${formattedStartX} - ${formattedEndX}`;\n },\n [props.culture, useUTC, _dateFormatOptions, _xAxisType],\n );\n\n const _getCustomizedCallout = React.useCallback(() => {\n const defaultRender = (point?: GanttChartDataPoint): JSXElement | null => {\n return point ? (\n <ChartPopover\n isPopoverOpen={isPopoverOpen}\n clickPosition={clickPosition}\n XValue={point.yAxisCalloutData || point.y.toString()}\n legend={point.legend}\n YValue={point.xAxisCalloutData || _getFormattedXValue(point)}\n color={point.color}\n culture={props.culture}\n />\n ) : null;\n };\n\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(calloutDataPoint, defaultRender)\n : null;\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_getFormattedXValue, calloutDataPoint, props.culture, props.onRenderCalloutPerDataPoint]);\n\n const _getAriaLabel = React.useCallback(\n (point: GanttChartDataPoint): string => {\n const xValue = point.xAxisCalloutData || _getFormattedXValue(point);\n const yValue = point.yAxisCalloutData || point.y;\n return (\n point.callOutAccessibilityData?.ariaLabel ||\n `${yValue}. ` + (point.legend ? `${point.legend}, ` : '') + `${xValue}.`\n );\n },\n [_getFormattedXValue],\n );\n\n const _getHighlightedLegend = React.useCallback(() => {\n return selectedLegends.length > 0 ? selectedLegends : hoveredLegend ? [hoveredLegend] : [];\n }, [hoveredLegend, selectedLegends]);\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n const _legendHighlighted = React.useCallback(\n (legend: string | undefined) => {\n return _getHighlightedLegend().includes(`${legend}`);\n },\n [_getHighlightedLegend],\n );\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = React.useCallback(() => {\n return _getHighlightedLegend().length === 0;\n }, [_getHighlightedLegend]);\n\n const _showCallout = React.useCallback(\n (target: React.MouseEvent<SVGElement> | React.FocusEvent<SVGElement>, point: GanttChartDataPoint) => {\n if (!(_noLegendHighlighted() || _legendHighlighted(point.legend)) || _calloutAnchorPoint.current === point) {\n return;\n }\n if ('clientX' in target && 'clientY' in target) {\n updatePosition(target.clientX, target.clientY);\n } else {\n const rect = (target.target as SVGElement).getBoundingClientRect();\n updatePosition(rect.left, rect.top);\n }\n _calloutAnchorPoint.current = point;\n setPopoverOpen(true);\n setCalloutLegend(point.legend!);\n setCalloutColor(point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || _getFormattedXValue(point));\n setCalloutDataPoint(point);\n },\n [_getFormattedXValue, _legendHighlighted, _noLegendHighlighted],\n );\n\n const _onBarFocus = React.useCallback(\n (point: GanttChartDataPoint, focusEvent: React.FocusEvent<SVGElement>): void => {\n _showCallout(focusEvent, point);\n },\n [_showCallout],\n );\n\n const _onBarHover = React.useCallback(\n (point: GanttChartDataPoint, mouseEvent: React.MouseEvent<SVGElement>): void => {\n _showCallout(mouseEvent, point);\n },\n [_showCallout],\n );\n\n const _onBarLeave = React.useCallback((): void => {\n // do nothing\n }, []);\n\n const _handleChartMouseLeave = React.useCallback((): void => {\n _calloutAnchorPoint.current = null;\n setPopoverOpen(false);\n setCalloutLegend('');\n setCalloutColor('');\n setXCalloutValue('');\n setYCalloutValue('');\n setCalloutDataPoint(undefined);\n }, []);\n\n const _getBarHeight = React.useCallback(\n (adjustedValue: number): number => {\n let barHeight: number;\n if (typeof props.barHeight === 'number') {\n barHeight = props.barHeight;\n } else {\n barHeight = adjustedValue;\n }\n if (typeof maxBarHeight === 'number') {\n barHeight = Math.min(barHeight, maxBarHeight);\n }\n barHeight = Math.max(barHeight, MIN_BAR_HEIGHT);\n return barHeight;\n },\n [maxBarHeight, props.barHeight],\n );\n\n const _getOrderedDataPoints = React.useCallback(() => {\n const result: GanttChartDataPoint[] = [];\n\n const yValueToPoints: Record<string, GanttChartDataPoint[]> = {};\n _points.forEach(point => {\n if (!yValueToPoints[point.y]) {\n yValueToPoints[point.y] = [];\n }\n yValueToPoints[point.y].push(point);\n });\n\n for (let i = _yAxisLabels.length - 1; i >= 0; i--) {\n const yValue = _yAxisLabels[i];\n if (yValueToPoints[yValue]) {\n result.push(...yValueToPoints[yValue].sort((a, b) => +a.x.start - +b.x.start));\n }\n }\n\n return result;\n }, [_points, _yAxisLabels]);\n\n const _createBars = React.useCallback(\n ({\n xScale,\n yScalePrimary: yScale,\n }: {\n xScale: DateScale | NumberScale;\n yScalePrimary: NumberScale | StringScale;\n }): JSXElement => {\n const getGradientId = (legend: string | undefined) => {\n const legendId = _legendMap.current[`${legend}`].id;\n return `${legendId}_gradient`;\n };\n\n const gradientDefs: JSXElement[] = [];\n if (props.enableGradient) {\n Object.keys(_legendMap.current).forEach((legend: string, index: number) => {\n const { startColor, endColor } = _legendMap.current[legend];\n gradientDefs.push(\n <linearGradient key={index} id={getGradientId(legend)}>\n <stop offset=\"0\" stopColor={startColor} />\n <stop offset=\"100%\" stopColor={endColor} />\n </linearGradient>,\n );\n });\n }\n\n let scaleBandwidth = 0;\n if (_yAxisType === YAxisType.StringAxis) {\n scaleBandwidth = (yScale as StringScale).bandwidth();\n _barHeight.current = _getBarHeight(scaleBandwidth);\n }\n\n const points = _getOrderedDataPoints();\n const bars = points.map((point: GanttChartDataPoint, index: number) => {\n const rectStartX = xScale(point.x.start);\n const rectEndX = xScale(point.x.end);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rectY = yScale(point.y as any)! + (scaleBandwidth - _barHeight.current) / 2;\n\n const shouldHighlight = _noLegendHighlighted() || _legendHighlighted(point.legend);\n\n return (\n <rect\n key={index}\n x={Math.min(rectStartX, rectEndX)}\n y={rectY}\n width={Math.max(Math.abs(rectEndX - rectStartX), 2)}\n height={_barHeight.current}\n rx={props.roundCorners ? 3 : 0}\n fill={props.enableGradient ? `url(#${getGradientId(point.legend)})` : point.color}\n opacity={shouldHighlight ? 1 : 0.1}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement>) => _onBarHover(point, event)}\n onMouseLeave={_onBarLeave}\n onFocus={(event: React.FocusEvent<SVGElement>) => _onBarFocus(point, event)}\n onBlur={_onBarLeave}\n tabIndex={shouldHighlight ? 0 : -1}\n role=\"option\"\n aria-label={_getAriaLabel(point)}\n />\n );\n });\n return (\n <g role=\"listbox\" aria-label={`${points.length} ${points.length === 1 ? 'bar' : 'bars'}`}>\n {gradientDefs.length > 0 ? <defs>{gradientDefs}</defs> : null}\n {bars}\n </g>\n );\n },\n [\n _getAriaLabel,\n _getBarHeight,\n _getOrderedDataPoints,\n _legendHighlighted,\n _noLegendHighlighted,\n _onBarFocus,\n _onBarHover,\n _onBarLeave,\n _yAxisType,\n props.enableGradient,\n props.roundCorners,\n ],\n );\n\n const _onLegendHover = React.useCallback((legend: string): void => {\n setHoveredLegend(legend);\n }, []);\n\n const _onLegendLeave = React.useCallback((): void => {\n setHoveredLegend('');\n }, []);\n\n const _onLegendSelectionChange = React.useCallback(\n (_selectedLegends: string[], event: React.MouseEvent<HTMLButtonElement>, currentLegend?: Legend): void => {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(_selectedLegends);\n } else {\n setSelectedLegends(_selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(_selectedLegends, event, currentLegend);\n }\n },\n [props.legendProps],\n );\n\n const _getLegendData = React.useCallback((): JSXElement => {\n const actions: Legend[] = [];\n\n Object.keys(_legendMap.current).forEach((legendTitle: string) => {\n const legend: Legend = {\n title: legendTitle,\n color: _legendMap.current[legendTitle].startColor,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n\n actions.push(legend);\n });\n\n const legends = (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n onChange={_onLegendSelectionChange}\n {...props.legendProps}\n legendRef={_legendsRef}\n />\n );\n return legends;\n }, [\n _handleChartMouseLeave,\n _onLegendHover,\n _onLegendLeave,\n _onLegendSelectionChange,\n props.enabledLegendsWrapLines,\n props.legendProps,\n props.legendsOverflowText,\n ]);\n\n const _getChartTitle = React.useCallback((): string => {\n return (props.chartTitle ? `${props.chartTitle}. ` : '') + `Gantt chart with ${_points.length} data points. `;\n }, [_points.length, props.chartTitle]);\n\n const _isChartEmpty = React.useCallback((): boolean => {\n return _points.length === 0;\n }, [_points.length]);\n\n const _getYDomainMargins = React.useCallback(\n (containerHeight: number): Margins => {\n let domainMargin = MIN_DOMAIN_MARGIN;\n\n const ySet = new Set<string | number>();\n _points.forEach((point: GanttChartDataPoint) => {\n ySet.add(point.y);\n });\n const uniqueY = Array.from(ySet);\n\n /** Total height available to render the bars */\n const totalHeight =\n containerHeight -\n (_margins.current.top! + MIN_DOMAIN_MARGIN) -\n (_margins.current.bottom! + MIN_DOMAIN_MARGIN);\n\n if (_yAxisType !== YAxisType.StringAxis) {\n _barHeight.current = _getBarHeight(\n calculateAppropriateBarWidth(uniqueY as number[] | Date[], totalHeight, _yAxisPadding),\n );\n domainMargin += _barHeight.current / 2;\n }\n\n return {\n ..._margins.current,\n top: _margins.current.top! + domainMargin,\n bottom: _margins.current.bottom! + domainMargin,\n };\n },\n [_getBarHeight, _points, _yAxisPadding, _yAxisType],\n );\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n if (!_isChartEmpty()) {\n _barHeight.current = _getBarHeight(DEFAULT_BAR_HEIGHT);\n\n const calloutProps: ChartPopoverProps = {\n isPopoverOpen,\n clickPosition,\n color: calloutColor,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue,\n ...props.calloutProps,\n };\n const tickParams: ModifiedCartesianChartProps['tickParams'] = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n return (\n <CartesianChart\n {...props}\n yAxisPadding={_yAxisPadding}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.GanttChart}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n componentRef={cartesianChartRef}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={_getLegendData()}\n createYAxis={createYAxisForHorizontalBarChartWithAxis}\n getDomainNRangeValues={_getDomainNRangeValues}\n createStringYAxis={createStringYAxisForHorizontalBarChartWithAxis}\n getMinMaxOfYAxis={findHBCWANumericMinMaxOfY}\n customizedCallout={_getCustomizedCallout()}\n getmargins={_getMargins}\n getYDomainMargins={_getYDomainMargins}\n onChartMouseLeave={_handleChartMouseLeave}\n useUTC={useUTC}\n children={_createBars}\n />\n );\n } else {\n return (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n }\n },\n);\n\nGanttChart.displayName = 'GanttChart';\n"],"names":["React","max","d3Max","min","d3Min","useId","Legends","CartesianChart","ChartPopover","ChartTypes","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","findHBCWANumericMinMaxOfY","createYAxisForHorizontalBarChartWithAxis","createStringYAxisForHorizontalBarChartWithAxis","areArraysEqual","MIN_DOMAIN_MARGIN","sortAxisCategories","calculateAppropriateBarWidth","getColorFromToken","getScalePadding","getDateFormatLevel","formatDateToLocaleString","getMultiLevelDateTimeFormatOptions","useImageExport","DEFAULT_BAR_HEIGHT","MIN_BAR_HEIGHT","GanttChart","forwardRef","useUTC","yAxisCategoryOrder","maxBarHeight","props","forwardedRef","_barHeight","useRef","_margins","_calloutAnchorPoint","_emptyChartId","_legendId","_legendMap","_prevProps","calloutColor","setCalloutColor","useState","hoveredLegend","setHoveredLegend","calloutLegend","setCalloutLegend","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","selectedLegends","setSelectedLegends","legendProps","calloutDataPoint","setCalloutDataPoint","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","cartesianChartRef","legendsRef","_legendsRef","componentRef","hideLegend","useEffect","current","_points","useMemo","colorIndex","data","map","point","legend","startColor","color","endColor","enableGradient","gradient","id","_xAxisType","length","start","DateAxis","_yAxisType","StringAxis","_yAxisPadding","yAxisPadding","undefined","_dateFormatOptions","lowestFormatLevel","highestFormatLevel","forEach","p","startFormatLevel","endFormatLevel","end","Math","_mapYValueToXValues","useCallback","yValueToXValues","push","_getOrderedYAxisLabels","Object","keys","sort","a","b","reverse","_yAxisLabels","_getDomainNRangeValues","points","margins","containerWidth","chartType","isRTL","xAxisType","barWidth","tickValues","xValues","xMin","xMax","dStartValue","dEndValue","rStartValue","left","rEndValue","right","_getMargins","_getFormattedXValue","formattedStartX","formattedEndX","culture","toString","_getCustomizedCallout","defaultRender","XValue","yAxisCalloutData","YValue","xAxisCalloutData","onRenderCalloutPerDataPoint","_getAriaLabel","xValue","yValue","callOutAccessibilityData","ariaLabel","_getHighlightedLegend","_legendHighlighted","includes","_noLegendHighlighted","_showCallout","target","updatePosition","clientX","clientY","rect","getBoundingClientRect","top","_onBarFocus","focusEvent","_onBarHover","mouseEvent","_onBarLeave","_handleChartMouseLeave","_getBarHeight","adjustedValue","barHeight","_getOrderedDataPoints","result","yValueToPoints","i","_createBars","xScale","yScalePrimary","yScale","getGradientId","legendId","gradientDefs","index","linearGradient","key","stop","offset","stopColor","scaleBandwidth","bandwidth","bars","rectStartX","rectEndX","rectY","shouldHighlight","width","abs","height","rx","roundCorners","fill","opacity","onClick","onMouseOver","event","onMouseLeave","onFocus","onBlur","tabIndex","role","aria-label","g","defs","_onLegendHover","_onLegendLeave","_onLegendSelectionChange","_selectedLegends","currentLegend","canSelectMultipleLegends","slice","onChange","_getLegendData","actions","legendTitle","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","legendRef","_getChartTitle","chartTitle","_isChartEmpty","_getYDomainMargins","containerHeight","domainMargin","ySet","Set","add","uniqueY","Array","from","totalHeight","bottom","newX","newY","threshold","distance","sqrt","pow","calloutProps","tickParams","tickFormat","yAxisType","stringDatasetForYAxisDomain","legendBars","createYAxis","getDomainNRangeValues","createStringYAxis","getMinMaxOfYAxis","customizedCallout","getmargins","getYDomainMargins","onChartMouseLeave","children","div","style","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/GanttChart/GanttChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport type { ScaleLinear, ScaleBand, ScaleTime } from 'd3-scale';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport type { Legend } from '../Legends/index';\nimport { Legends } from '../Legends/index';\nimport type { Margins, GanttChartDataPoint } from '../../types/DataPoint';\nimport type { ModifiedCartesianChartProps } from '../CommonComponents/index';\nimport { CartesianChart } from '../CommonComponents/index';\nimport type { GanttChartProps } from './GanttChart.types';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport type { ChartPopoverProps } from '../../index';\nimport type { IDomainNRange } from '../../utilities/index';\nimport {\n ChartTypes,\n YAxisType,\n XAxisTypes,\n getTypeOfAxis,\n getNextColor,\n findHBCWANumericMinMaxOfY,\n createYAxisForHorizontalBarChartWithAxis,\n createStringYAxisForHorizontalBarChartWithAxis,\n areArraysEqual,\n MIN_DOMAIN_MARGIN,\n sortAxisCategories,\n calculateAppropriateBarWidth,\n getColorFromToken,\n getScalePadding,\n getDateFormatLevel,\n} from '../../utilities/index';\nimport { formatDateToLocaleString, getMultiLevelDateTimeFormatOptions } from '@fluentui/chart-utilities';\nimport { useImageExport } from '../../utilities/hooks';\n\ntype NumberScale = ScaleLinear<number, number>;\ntype StringScale = ScaleBand<string>;\ntype DateScale = ScaleTime<Date, number>;\n\nconst DEFAULT_BAR_HEIGHT = 24;\nconst MIN_BAR_HEIGHT = 1;\n\nexport const GanttChart: React.FunctionComponent<GanttChartProps> = React.forwardRef<HTMLDivElement, GanttChartProps>(\n ({ useUTC = true, yAxisCategoryOrder = 'default', maxBarHeight = 24, ...props }, forwardedRef) => {\n const _barHeight = React.useRef<number>(DEFAULT_BAR_HEIGHT);\n const _margins = React.useRef<Margins>({});\n const _calloutAnchorPoint = React.useRef<GanttChartDataPoint | null>(null);\n const _emptyChartId = useId('Gantt_empty');\n const _legendId = useId('gantt_legend');\n const _legendMap = React.useRef<Record<string, { id: string; startColor: string; endColor: string }>>({});\n const _prevProps = React.useRef<Partial<GanttChartProps>>({});\n\n const [calloutColor, setCalloutColor] = React.useState<string>('');\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [calloutDataPoint, setCalloutDataPoint] = React.useState<GanttChartDataPoint>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const { cartesianChartRef, legendsRef: _legendsRef } = useImageExport(props.componentRef, props.hideLegend);\n\n React.useEffect(() => {\n if (!areArraysEqual(_prevProps.current.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n _prevProps.current = props;\n }, [props]);\n\n const _points = React.useMemo(() => {\n _legendMap.current = {};\n let colorIndex = 0;\n\n return (\n props.data?.map(point => {\n const legend = `${point.legend}`;\n if (!_legendMap.current[legend]) {\n let startColor = point.color ? getColorFromToken(point.color) : getNextColor(colorIndex, 0);\n let endColor = startColor;\n\n if (props.enableGradient) {\n startColor = point.gradient?.[0]!;\n endColor = point.gradient?.[1]!;\n }\n\n _legendMap.current[legend] = { id: `${_legendId}_${colorIndex}`, startColor, endColor };\n colorIndex += 1;\n }\n\n const { startColor, endColor } = _legendMap.current[legend];\n return {\n ...point,\n color: startColor,\n ...(props.enableGradient ? { gradient: [startColor, endColor] as [string, string] } : {}),\n };\n }) ?? []\n );\n }, [props.data, props.enableGradient]);\n\n const _xAxisType = React.useMemo(() => {\n if (_points.length > 0) {\n return getTypeOfAxis(_points[0].x.start, true) as XAxisTypes;\n }\n return XAxisTypes.DateAxis;\n }, [_points]);\n\n const _yAxisType = React.useMemo(() => {\n if (_points.length > 0) {\n return getTypeOfAxis(_points[0].y, false) as YAxisType;\n }\n return YAxisType.StringAxis;\n }, [_points]);\n\n const _yAxisPadding = React.useMemo(() => {\n return getScalePadding(props.yAxisPadding, undefined, 1 / 2);\n }, [props.yAxisPadding]);\n\n const _dateFormatOptions = React.useMemo(() => {\n if (_xAxisType !== XAxisTypes.DateAxis) {\n return undefined;\n }\n\n let lowestFormatLevel = 100;\n let highestFormatLevel = -1;\n _points.forEach(p => {\n const startFormatLevel = getDateFormatLevel(p.x.start as Date, useUTC as boolean);\n const endFormatLevel = getDateFormatLevel(p.x.end as Date, useUTC as boolean);\n lowestFormatLevel = Math.min(lowestFormatLevel, startFormatLevel, endFormatLevel);\n highestFormatLevel = Math.max(highestFormatLevel, startFormatLevel, endFormatLevel);\n });\n\n return getMultiLevelDateTimeFormatOptions(lowestFormatLevel, highestFormatLevel);\n }, [useUTC, _points, _xAxisType]);\n\n const _mapYValueToXValues = React.useCallback(() => {\n const yValueToXValues: Record<string, number[]> = Object.create(null);\n _points.forEach(point => {\n if (!yValueToXValues[point.y]) {\n yValueToXValues[point.y] = [];\n }\n yValueToXValues[point.y].push(+point.x.end - +point.x.start);\n });\n return yValueToXValues;\n }, [_points]);\n\n const _getOrderedYAxisLabels = React.useCallback(() => {\n const yValueToXValues = _mapYValueToXValues();\n\n if (_yAxisType !== YAxisType.StringAxis) {\n return Object.keys(yValueToXValues).sort((a, b) => +a - +b);\n }\n\n if (yAxisCategoryOrder === 'default') {\n return Object.keys(yValueToXValues).reverse();\n }\n return sortAxisCategories(yValueToXValues, yAxisCategoryOrder);\n }, [_mapYValueToXValues, _yAxisType, yAxisCategoryOrder]);\n\n const _yAxisLabels = React.useMemo(() => _getOrderedYAxisLabels(), [_getOrderedYAxisLabels]);\n\n const _getDomainNRangeValues = React.useCallback(\n (\n points: GanttChartDataPoint[],\n margins: Margins,\n containerWidth: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n ): IDomainNRange => {\n const xValues: (Date | number)[] = [];\n points.forEach(point => {\n xValues.push(point.x.start, point.x.end);\n });\n\n const xMin = d3Min(xValues) || 0;\n const xMax = d3Max(xValues) || 0;\n\n return {\n dStartValue: isRTL ? xMax : xMin,\n dEndValue: isRTL ? xMin : xMax,\n rStartValue: margins.left!,\n rEndValue: containerWidth - margins.right!,\n };\n },\n [],\n );\n\n const _getMargins = React.useCallback((margins: Margins) => {\n _margins.current = margins;\n }, []);\n\n const _getFormattedXValue = React.useCallback(\n (point: GanttChartDataPoint): string => {\n let formattedStartX: string;\n let formattedEndX: string;\n\n if (_xAxisType === XAxisTypes.DateAxis) {\n formattedStartX = formatDateToLocaleString(\n point.x.start as Date,\n props.culture,\n useUTC as boolean,\n false,\n _dateFormatOptions,\n );\n formattedEndX = formatDateToLocaleString(\n point.x.end as Date,\n props.culture,\n useUTC as boolean,\n false,\n _dateFormatOptions,\n );\n } else {\n formattedStartX = point.x.start.toString();\n formattedEndX = point.x.end.toString();\n }\n\n return `${formattedStartX} - ${formattedEndX}`;\n },\n [props.culture, useUTC, _dateFormatOptions, _xAxisType],\n );\n\n const _getCustomizedCallout = React.useCallback(() => {\n const defaultRender = (point?: GanttChartDataPoint): JSXElement | null => {\n return point ? (\n <ChartPopover\n isPopoverOpen={isPopoverOpen}\n clickPosition={clickPosition}\n XValue={point.yAxisCalloutData || point.y.toString()}\n legend={point.legend}\n YValue={point.xAxisCalloutData || _getFormattedXValue(point)}\n color={point.color}\n culture={props.culture}\n />\n ) : null;\n };\n\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(calloutDataPoint, defaultRender)\n : null;\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_getFormattedXValue, calloutDataPoint, props.culture, props.onRenderCalloutPerDataPoint]);\n\n const _getAriaLabel = React.useCallback(\n (point: GanttChartDataPoint): string => {\n const xValue = point.xAxisCalloutData || _getFormattedXValue(point);\n const yValue = point.yAxisCalloutData || point.y;\n return (\n point.callOutAccessibilityData?.ariaLabel ||\n `${yValue}. ` + (point.legend ? `${point.legend}, ` : '') + `${xValue}.`\n );\n },\n [_getFormattedXValue],\n );\n\n const _getHighlightedLegend = React.useCallback(() => {\n return selectedLegends.length > 0 ? selectedLegends : hoveredLegend ? [hoveredLegend] : [];\n }, [hoveredLegend, selectedLegends]);\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n const _legendHighlighted = React.useCallback(\n (legend: string | undefined) => {\n return _getHighlightedLegend().includes(`${legend}`);\n },\n [_getHighlightedLegend],\n );\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = React.useCallback(() => {\n return _getHighlightedLegend().length === 0;\n }, [_getHighlightedLegend]);\n\n const _showCallout = React.useCallback(\n (target: React.MouseEvent<SVGElement> | React.FocusEvent<SVGElement>, point: GanttChartDataPoint) => {\n if (!(_noLegendHighlighted() || _legendHighlighted(point.legend)) || _calloutAnchorPoint.current === point) {\n return;\n }\n if ('clientX' in target && 'clientY' in target) {\n updatePosition(target.clientX, target.clientY);\n } else {\n const rect = (target.target as SVGElement).getBoundingClientRect();\n updatePosition(rect.left, rect.top);\n }\n _calloutAnchorPoint.current = point;\n setPopoverOpen(true);\n setCalloutLegend(point.legend!);\n setCalloutColor(point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || _getFormattedXValue(point));\n setCalloutDataPoint(point);\n },\n [_getFormattedXValue, _legendHighlighted, _noLegendHighlighted],\n );\n\n const _onBarFocus = React.useCallback(\n (point: GanttChartDataPoint, focusEvent: React.FocusEvent<SVGElement>): void => {\n _showCallout(focusEvent, point);\n },\n [_showCallout],\n );\n\n const _onBarHover = React.useCallback(\n (point: GanttChartDataPoint, mouseEvent: React.MouseEvent<SVGElement>): void => {\n _showCallout(mouseEvent, point);\n },\n [_showCallout],\n );\n\n const _onBarLeave = React.useCallback((): void => {\n // do nothing\n }, []);\n\n const _handleChartMouseLeave = React.useCallback((): void => {\n _calloutAnchorPoint.current = null;\n setPopoverOpen(false);\n setCalloutLegend('');\n setCalloutColor('');\n setXCalloutValue('');\n setYCalloutValue('');\n setCalloutDataPoint(undefined);\n }, []);\n\n const _getBarHeight = React.useCallback(\n (adjustedValue: number): number => {\n let barHeight: number;\n if (typeof props.barHeight === 'number') {\n barHeight = props.barHeight;\n } else {\n barHeight = adjustedValue;\n }\n if (typeof maxBarHeight === 'number') {\n barHeight = Math.min(barHeight, maxBarHeight);\n }\n barHeight = Math.max(barHeight, MIN_BAR_HEIGHT);\n return barHeight;\n },\n [maxBarHeight, props.barHeight],\n );\n\n const _getOrderedDataPoints = React.useCallback(() => {\n const result: GanttChartDataPoint[] = [];\n\n const yValueToPoints: Record<string, GanttChartDataPoint[]> = Object.create(null);\n _points.forEach(point => {\n if (!yValueToPoints[point.y]) {\n yValueToPoints[point.y] = [];\n }\n yValueToPoints[point.y].push(point);\n });\n\n for (let i = _yAxisLabels.length - 1; i >= 0; i--) {\n const yValue = _yAxisLabels[i];\n if (yValueToPoints[yValue]) {\n result.push(...yValueToPoints[yValue].sort((a, b) => +a.x.start - +b.x.start));\n }\n }\n\n return result;\n }, [_points, _yAxisLabels]);\n\n const _createBars = React.useCallback(\n ({\n xScale,\n yScalePrimary: yScale,\n }: {\n xScale: DateScale | NumberScale;\n yScalePrimary: NumberScale | StringScale;\n }): JSXElement => {\n const getGradientId = (legend: string | undefined) => {\n const legendId = _legendMap.current[`${legend}`].id;\n return `${legendId}_gradient`;\n };\n\n const gradientDefs: JSXElement[] = [];\n if (props.enableGradient) {\n Object.keys(_legendMap.current).forEach((legend: string, index: number) => {\n const { startColor, endColor } = _legendMap.current[legend];\n gradientDefs.push(\n <linearGradient key={index} id={getGradientId(legend)}>\n <stop offset=\"0\" stopColor={startColor} />\n <stop offset=\"100%\" stopColor={endColor} />\n </linearGradient>,\n );\n });\n }\n\n let scaleBandwidth = 0;\n if (_yAxisType === YAxisType.StringAxis) {\n scaleBandwidth = (yScale as StringScale).bandwidth();\n _barHeight.current = _getBarHeight(scaleBandwidth);\n }\n\n const points = _getOrderedDataPoints();\n const bars = points.map((point: GanttChartDataPoint, index: number) => {\n const rectStartX = xScale(point.x.start);\n const rectEndX = xScale(point.x.end);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rectY = yScale(point.y as any)! + (scaleBandwidth - _barHeight.current) / 2;\n\n const shouldHighlight = _noLegendHighlighted() || _legendHighlighted(point.legend);\n\n return (\n <rect\n key={index}\n x={Math.min(rectStartX, rectEndX)}\n y={rectY}\n width={Math.max(Math.abs(rectEndX - rectStartX), 2)}\n height={_barHeight.current}\n rx={props.roundCorners ? 3 : 0}\n fill={props.enableGradient ? `url(#${getGradientId(point.legend)})` : point.color}\n opacity={shouldHighlight ? 1 : 0.1}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement>) => _onBarHover(point, event)}\n onMouseLeave={_onBarLeave}\n onFocus={(event: React.FocusEvent<SVGElement>) => _onBarFocus(point, event)}\n onBlur={_onBarLeave}\n tabIndex={shouldHighlight ? 0 : -1}\n role=\"option\"\n aria-label={_getAriaLabel(point)}\n />\n );\n });\n return (\n <g role=\"listbox\" aria-label={`${points.length} ${points.length === 1 ? 'bar' : 'bars'}`}>\n {gradientDefs.length > 0 ? <defs>{gradientDefs}</defs> : null}\n {bars}\n </g>\n );\n },\n [\n _getAriaLabel,\n _getBarHeight,\n _getOrderedDataPoints,\n _legendHighlighted,\n _noLegendHighlighted,\n _onBarFocus,\n _onBarHover,\n _onBarLeave,\n _yAxisType,\n props.enableGradient,\n props.roundCorners,\n ],\n );\n\n const _onLegendHover = React.useCallback((legend: string): void => {\n setHoveredLegend(legend);\n }, []);\n\n const _onLegendLeave = React.useCallback((): void => {\n setHoveredLegend('');\n }, []);\n\n const _onLegendSelectionChange = React.useCallback(\n (_selectedLegends: string[], event: React.MouseEvent<HTMLButtonElement>, currentLegend?: Legend): void => {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(_selectedLegends);\n } else {\n setSelectedLegends(_selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(_selectedLegends, event, currentLegend);\n }\n },\n [props.legendProps],\n );\n\n const _getLegendData = React.useCallback((): JSXElement => {\n const actions: Legend[] = [];\n\n Object.keys(_legendMap.current).forEach((legendTitle: string) => {\n const legend: Legend = {\n title: legendTitle,\n color: _legendMap.current[legendTitle].startColor,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n\n actions.push(legend);\n });\n\n const legends = (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n onChange={_onLegendSelectionChange}\n {...props.legendProps}\n legendRef={_legendsRef}\n />\n );\n return legends;\n }, [\n _handleChartMouseLeave,\n _onLegendHover,\n _onLegendLeave,\n _onLegendSelectionChange,\n props.enabledLegendsWrapLines,\n props.legendProps,\n props.legendsOverflowText,\n ]);\n\n const _getChartTitle = React.useCallback((): string => {\n return (props.chartTitle ? `${props.chartTitle}. ` : '') + `Gantt chart with ${_points.length} data points. `;\n }, [_points.length, props.chartTitle]);\n\n const _isChartEmpty = React.useCallback((): boolean => {\n return _points.length === 0;\n }, [_points.length]);\n\n const _getYDomainMargins = React.useCallback(\n (containerHeight: number): Margins => {\n let domainMargin = MIN_DOMAIN_MARGIN;\n\n const ySet = new Set<string | number>();\n _points.forEach((point: GanttChartDataPoint) => {\n ySet.add(point.y);\n });\n const uniqueY = Array.from(ySet);\n\n /** Total height available to render the bars */\n const totalHeight =\n containerHeight -\n (_margins.current.top! + MIN_DOMAIN_MARGIN) -\n (_margins.current.bottom! + MIN_DOMAIN_MARGIN);\n\n if (_yAxisType !== YAxisType.StringAxis) {\n _barHeight.current = _getBarHeight(\n calculateAppropriateBarWidth(uniqueY as number[] | Date[], totalHeight, _yAxisPadding),\n );\n domainMargin += _barHeight.current / 2;\n }\n\n return {\n ..._margins.current,\n top: _margins.current.top! + domainMargin,\n bottom: _margins.current.bottom! + domainMargin,\n };\n },\n [_getBarHeight, _points, _yAxisPadding, _yAxisType],\n );\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n if (!_isChartEmpty()) {\n _barHeight.current = _getBarHeight(DEFAULT_BAR_HEIGHT);\n\n const calloutProps: ChartPopoverProps = {\n isPopoverOpen,\n clickPosition,\n color: calloutColor,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue,\n ...props.calloutProps,\n };\n const tickParams: ModifiedCartesianChartProps['tickParams'] = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n return (\n <CartesianChart\n {...props}\n yAxisPadding={_yAxisPadding}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.GanttChart}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n componentRef={cartesianChartRef}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={_getLegendData()}\n createYAxis={createYAxisForHorizontalBarChartWithAxis}\n getDomainNRangeValues={_getDomainNRangeValues}\n createStringYAxis={createStringYAxisForHorizontalBarChartWithAxis}\n getMinMaxOfYAxis={findHBCWANumericMinMaxOfY}\n customizedCallout={_getCustomizedCallout()}\n getmargins={_getMargins}\n getYDomainMargins={_getYDomainMargins}\n onChartMouseLeave={_handleChartMouseLeave}\n useUTC={useUTC}\n children={_createBars}\n />\n );\n } else {\n return (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n }\n },\n);\n\nGanttChart.displayName = 'GanttChart';\n"],"names":["React","max","d3Max","min","d3Min","useId","Legends","CartesianChart","ChartPopover","ChartTypes","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","findHBCWANumericMinMaxOfY","createYAxisForHorizontalBarChartWithAxis","createStringYAxisForHorizontalBarChartWithAxis","areArraysEqual","MIN_DOMAIN_MARGIN","sortAxisCategories","calculateAppropriateBarWidth","getColorFromToken","getScalePadding","getDateFormatLevel","formatDateToLocaleString","getMultiLevelDateTimeFormatOptions","useImageExport","DEFAULT_BAR_HEIGHT","MIN_BAR_HEIGHT","GanttChart","forwardRef","useUTC","yAxisCategoryOrder","maxBarHeight","props","forwardedRef","_barHeight","useRef","_margins","_calloutAnchorPoint","_emptyChartId","_legendId","_legendMap","_prevProps","calloutColor","setCalloutColor","useState","hoveredLegend","setHoveredLegend","calloutLegend","setCalloutLegend","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","selectedLegends","setSelectedLegends","legendProps","calloutDataPoint","setCalloutDataPoint","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","cartesianChartRef","legendsRef","_legendsRef","componentRef","hideLegend","useEffect","current","_points","useMemo","colorIndex","data","map","point","legend","startColor","color","endColor","enableGradient","gradient","id","_xAxisType","length","start","DateAxis","_yAxisType","StringAxis","_yAxisPadding","yAxisPadding","undefined","_dateFormatOptions","lowestFormatLevel","highestFormatLevel","forEach","p","startFormatLevel","endFormatLevel","end","Math","_mapYValueToXValues","useCallback","yValueToXValues","Object","create","push","_getOrderedYAxisLabels","keys","sort","a","b","reverse","_yAxisLabels","_getDomainNRangeValues","points","margins","containerWidth","chartType","isRTL","xAxisType","barWidth","tickValues","xValues","xMin","xMax","dStartValue","dEndValue","rStartValue","left","rEndValue","right","_getMargins","_getFormattedXValue","formattedStartX","formattedEndX","culture","toString","_getCustomizedCallout","defaultRender","XValue","yAxisCalloutData","YValue","xAxisCalloutData","onRenderCalloutPerDataPoint","_getAriaLabel","xValue","yValue","callOutAccessibilityData","ariaLabel","_getHighlightedLegend","_legendHighlighted","includes","_noLegendHighlighted","_showCallout","target","updatePosition","clientX","clientY","rect","getBoundingClientRect","top","_onBarFocus","focusEvent","_onBarHover","mouseEvent","_onBarLeave","_handleChartMouseLeave","_getBarHeight","adjustedValue","barHeight","_getOrderedDataPoints","result","yValueToPoints","i","_createBars","xScale","yScalePrimary","yScale","getGradientId","legendId","gradientDefs","index","linearGradient","key","stop","offset","stopColor","scaleBandwidth","bandwidth","bars","rectStartX","rectEndX","rectY","shouldHighlight","width","abs","height","rx","roundCorners","fill","opacity","onClick","onMouseOver","event","onMouseLeave","onFocus","onBlur","tabIndex","role","aria-label","g","defs","_onLegendHover","_onLegendLeave","_onLegendSelectionChange","_selectedLegends","currentLegend","canSelectMultipleLegends","slice","onChange","_getLegendData","actions","legendTitle","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","legendRef","_getChartTitle","chartTitle","_isChartEmpty","_getYDomainMargins","containerHeight","domainMargin","ySet","Set","add","uniqueY","Array","from","totalHeight","bottom","newX","newY","threshold","distance","sqrt","pow","calloutProps","tickParams","tickFormat","yAxisType","stringDatasetForYAxisDomain","legendBars","createYAxis","getDomainNRangeValues","createStringYAxis","getMinMaxOfYAxis","customizedCallout","getmargins","getYDomainMargins","onChartMouseLeave","children","div","style","displayName"],"mappings":"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"}
|
|
@@ -127,7 +127,7 @@ const GaugeChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
127
127
|
const [selectedLegends, setSelectedLegends] = _react.useState(((_props_legendProps = props.legendProps) === null || _props_legendProps === void 0 ? void 0 : _props_legendProps.selectedLegends) || []);
|
|
128
128
|
const [focusedElement, setFocusedElement] = _react.useState('');
|
|
129
129
|
const [isPopoverOpen, setPopoverOpen] = _react.useState(false);
|
|
130
|
-
const [
|
|
130
|
+
const [calloutLegend, setCalloutLegend] = _react.useState('');
|
|
131
131
|
const [hoverYValues, setHoverYValues] = _react.useState([]);
|
|
132
132
|
const [refSelected, setRefSelected] = _react.useState(null);
|
|
133
133
|
const prevPropsRef = _react.useRef(null);
|
|
@@ -331,11 +331,9 @@ const GaugeChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
331
331
|
if (_calloutAnchor === legend) {
|
|
332
332
|
return;
|
|
333
333
|
}
|
|
334
|
-
const targetElement = document.getElementById(elementId);
|
|
334
|
+
const targetElement = elementId ? document.getElementById(elementId) : event.currentTarget;
|
|
335
335
|
_calloutAnchor = legend;
|
|
336
336
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
337
|
-
const hoverXValue = 'Current value is ' + getChartValueLabel(props.chartValue, _minValue, _maxValue, props.chartValueFormat, true);
|
|
338
|
-
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
339
337
|
const hoverYValues = _segments.filter((segment)=>_noLegendHighlighted() || _legendHighlighted(segment.legend)).map((segment)=>{
|
|
340
338
|
const yValue = {
|
|
341
339
|
legend: segment.legend,
|
|
@@ -349,7 +347,7 @@ const GaugeChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
349
347
|
'Chart value'
|
|
350
348
|
].includes(legend) || _noLegendHighlighted() || _legendHighlighted(legend));
|
|
351
349
|
setRefSelected(targetElement);
|
|
352
|
-
|
|
350
|
+
setCalloutLegend(legend);
|
|
353
351
|
setHoverYValues(hoverYValues);
|
|
354
352
|
if (isFocusEvent) {
|
|
355
353
|
setFocusedElement(legend);
|
|
@@ -358,7 +356,7 @@ const GaugeChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
358
356
|
function _hideCallout(isBlurEvent) {
|
|
359
357
|
_calloutAnchor = '';
|
|
360
358
|
setPopoverOpen(false);
|
|
361
|
-
|
|
359
|
+
setCalloutLegend('');
|
|
362
360
|
setHoverYValues([]);
|
|
363
361
|
if (isBlurEvent) {
|
|
364
362
|
setFocusedElement('');
|
|
@@ -420,6 +418,12 @@ const GaugeChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
420
418
|
className: classes.descriptionMessage
|
|
421
419
|
}, calloutProps.descriptionMessage)));
|
|
422
420
|
}
|
|
421
|
+
function _renderCallout(calloutData) {
|
|
422
|
+
return calloutData ? _multiValueCallout({
|
|
423
|
+
hoverXValue: `Current value is ${calloutData.chartValueLabel}`,
|
|
424
|
+
YValueHover: calloutData.segmentValues
|
|
425
|
+
}) : null;
|
|
426
|
+
}
|
|
423
427
|
function _yValueHoverSubCountsExists(yValueHover) {
|
|
424
428
|
if (yValueHover) {
|
|
425
429
|
return yValueHover.some((yValue)=>yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string');
|
|
@@ -493,6 +497,7 @@ const GaugeChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
493
497
|
circular: true,
|
|
494
498
|
axis: 'horizontal'
|
|
495
499
|
});
|
|
500
|
+
var _ref;
|
|
496
501
|
return /*#__PURE__*/ _react.createElement("div", {
|
|
497
502
|
className: classes.root,
|
|
498
503
|
ref: (el)=>{
|
|
@@ -590,10 +595,17 @@ const GaugeChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
590
595
|
},
|
|
591
596
|
isPopoverOpen: isPopoverOpen,
|
|
592
597
|
customCallout: {
|
|
593
|
-
customizedCallout:
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
598
|
+
customizedCallout: (_ref = (()=>{
|
|
599
|
+
const calloutData = {
|
|
600
|
+
legend: calloutLegend,
|
|
601
|
+
chartValue: props.chartValue,
|
|
602
|
+
minValue: _minValue,
|
|
603
|
+
maxValue: _maxValue,
|
|
604
|
+
chartValueLabel: getChartValueLabel(props.chartValue, _minValue, _maxValue, props.chartValueFormat, true),
|
|
605
|
+
segmentValues: hoverYValues
|
|
606
|
+
};
|
|
607
|
+
return props.onRenderCallout ? props.onRenderCallout(calloutData, _renderCallout) : _renderCallout(calloutData);
|
|
608
|
+
})()) !== null && _ref !== void 0 ? _ref : undefined
|
|
597
609
|
}
|
|
598
610
|
}));
|
|
599
611
|
});
|