@fluentui/react-charting 5.24.14 → 5.24.16

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.
Files changed (59) hide show
  1. package/CHANGELOG.json +58 -1
  2. package/CHANGELOG.md +22 -2
  3. package/dist/react-charting.d.ts +27 -18
  4. package/dist/react-charting.js +1 -1
  5. package/dist/react-charting.min.js +1 -1
  6. package/etc/react-charting.api.md +2 -1
  7. package/lib/Utilities.js +19 -1
  8. package/lib/Utilities.js.map +1 -1
  9. package/lib/components/CommonComponents/CartesianChart.base.js +6 -6
  10. package/lib/components/CommonComponents/CartesianChart.base.js.map +1 -1
  11. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +31 -2
  12. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  13. package/lib/components/GanttChart/GanttChart.base.js +210 -158
  14. package/lib/components/GanttChart/GanttChart.base.js.map +1 -1
  15. package/lib/components/GanttChart/GanttChart.types.d.ts +23 -13
  16. package/lib/components/GanttChart/GanttChart.types.js.map +1 -1
  17. package/lib/components/ScatterChart/ScatterChart.base.js +15 -9
  18. package/lib/components/ScatterChart/ScatterChart.base.js.map +1 -1
  19. package/lib/types/IDataPoint.d.ts +4 -5
  20. package/lib/types/IDataPoint.js.map +1 -1
  21. package/lib/utilities/utilities.d.ts +6 -0
  22. package/lib/utilities/utilities.js +10 -0
  23. package/lib/utilities/utilities.js.map +1 -1
  24. package/lib-amd/Utilities.js +9 -0
  25. package/lib-amd/Utilities.js.map +1 -1
  26. package/lib-amd/components/CommonComponents/CartesianChart.base.js +6 -6
  27. package/lib-amd/components/CommonComponents/CartesianChart.base.js.map +1 -1
  28. package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.js +31 -2
  29. package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  30. package/lib-amd/components/GanttChart/GanttChart.base.js +210 -158
  31. package/lib-amd/components/GanttChart/GanttChart.base.js.map +1 -1
  32. package/lib-amd/components/GanttChart/GanttChart.types.d.ts +23 -13
  33. package/lib-amd/components/GanttChart/GanttChart.types.js.map +1 -1
  34. package/lib-amd/components/ScatterChart/ScatterChart.base.js +14 -8
  35. package/lib-amd/components/ScatterChart/ScatterChart.base.js.map +1 -1
  36. package/lib-amd/types/IDataPoint.d.ts +4 -5
  37. package/lib-amd/types/IDataPoint.js.map +1 -1
  38. package/lib-amd/utilities/utilities.d.ts +6 -0
  39. package/lib-amd/utilities/utilities.js +12 -1
  40. package/lib-amd/utilities/utilities.js.map +1 -1
  41. package/lib-commonjs/Utilities.js +9 -0
  42. package/lib-commonjs/Utilities.js.map +1 -1
  43. package/lib-commonjs/components/CommonComponents/CartesianChart.base.js +6 -6
  44. package/lib-commonjs/components/CommonComponents/CartesianChart.base.js.map +1 -1
  45. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +31 -2
  46. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  47. package/lib-commonjs/components/GanttChart/GanttChart.base.js +210 -158
  48. package/lib-commonjs/components/GanttChart/GanttChart.base.js.map +1 -1
  49. package/lib-commonjs/components/GanttChart/GanttChart.types.d.ts +23 -13
  50. package/lib-commonjs/components/GanttChart/GanttChart.types.js.map +1 -1
  51. package/lib-commonjs/components/ScatterChart/ScatterChart.base.js +14 -8
  52. package/lib-commonjs/components/ScatterChart/ScatterChart.base.js.map +1 -1
  53. package/lib-commonjs/types/IDataPoint.d.ts +4 -5
  54. package/lib-commonjs/types/IDataPoint.js.map +1 -1
  55. package/lib-commonjs/utilities/utilities.d.ts +6 -0
  56. package/lib-commonjs/utilities/utilities.js +12 -1
  57. package/lib-commonjs/utilities/utilities.js.map +1 -1
  58. package/package.json +2 -2
  59. package/src/components/GanttChart/GanttChart.types.ts +24 -13
@@ -1 +1 @@
1
- {"version":3,"file":"GanttChart.base.js","sourceRoot":"../src/","sources":["components/GanttChart/GanttChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { ScaleLinear, ScaleBand, ScaleTime } from 'd3-scale';\nimport { DirectionalHint, FocusZoneDirection, getId, getRTL } from '@fluentui/react';\nimport { ILegend, ILegendContainer, Legends } from '../Legends/index';\nimport { IMargins, IChart, IImageExportOptions, IGanttChartDataPoint } from '../../types/IDataPoint';\nimport { CartesianChart } from '../CommonComponents/index';\nimport { IGanttChartProps } from './GanttChart.types';\nimport {\n ChartHoverCard,\n ChartTypes,\n YAxisType,\n XAxisTypes,\n getTypeOfAxis,\n getNextColor,\n findHBCWANumericMinMaxOfY,\n createYAxisForHorizontalBarChartWithAxis,\n IDomainNRange,\n createStringYAxisForHorizontalBarChartWithAxis,\n getNextGradient,\n areArraysEqual,\n MIN_DOMAIN_MARGIN,\n sortAxisCategories,\n calculateAppropriateBarWidth,\n getColorFromToken,\n getScalePadding,\n getDateFormatLevel,\n} from '../../utilities/index';\nimport { toImage } from '../../utilities/image-export-utils';\nimport { formatDateToLocaleString, getMultiLevelDateTimeFormatOptions } from '@fluentui/chart-utilities';\n\ntype NumberScale = ScaleLinear<number, number>;\ntype StringScale = ScaleBand<string>;\ntype DateScale = ScaleTime<Date, number>;\n\nexport const GanttChartBase: React.FunctionComponent<IGanttChartProps> = React.forwardRef<\n HTMLDivElement,\n IGanttChartProps\n>(({ useUTC = true, yAxisCategoryOrder = 'default', ...props }, forwardedRef) => {\n const _barHeight = React.useRef<number>(0);\n const _calloutId = React.useRef<string>(getId('callout'));\n const margins = React.useRef<IMargins>({});\n const _bars = React.useRef<React.JSX.Element[]>([]);\n const _xAxisType = React.useRef<XAxisTypes>(XAxisTypes.DateAxis);\n const _yAxisType = React.useRef<YAxisType>(YAxisType.StringAxis);\n const _calloutAnchorPoint = React.useRef<IGanttChartDataPoint | null>(null);\n const _cartesianChartRef = React.useRef<IChart>(null);\n const _legendsRef = React.useRef<ILegendContainer>(null);\n const _domainMargin = React.useRef<number>(MIN_DOMAIN_MARGIN);\n const _yAxisPadding = React.useRef<number>(0);\n const _emptyChartId = React.useRef<string>(getId('Gantt_empty'));\n const _legendColorMap = React.useRef<Record<string, [string, string]>>({});\n const _gradientId = React.useRef<string>(getId('Gantt_gradient'));\n const prevProps = React.useRef<Partial<IGanttChartProps>>({});\n\n const [calloutColor, setCalloutColor] = React.useState<string>('');\n const [isCalloutVisible, setCalloutVisible] = React.useState<boolean>(false);\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [calloutTarget, setCalloutTarget] = React.useState<SVGElement | null>(null);\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 [dataPointCalloutProps, setDataPointCalloutProps] = React.useState<IGanttChartDataPoint>();\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 React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: _cartesianChartRef.current?.chartContainer ?? null,\n toImage: (opts?: IImageExportOptions): Promise<string> => {\n return toImage(_cartesianChartRef.current?.chartContainer, _legendsRef.current?.toSVG, getRTL(), opts);\n },\n }),\n [],\n );\n\n const _points = React.useMemo(() => {\n _legendColorMap.current = {};\n let colorIndex = 0;\n\n return (\n props.data?.map(point => {\n const legend = `${point.legend}`;\n if (!_legendColorMap.current[legend]) {\n let startColor = point.color\n ? getColorFromToken(point.color, props.theme?.isInverted)\n : getNextColor(colorIndex, 0, props.theme?.isInverted);\n let endColor = startColor;\n\n if (props.enableGradient) {\n const nextGradient = getNextGradient(colorIndex, 0, props.theme?.isInverted);\n startColor = point.gradient?.[0] || nextGradient[0];\n endColor = point.gradient?.[1] || nextGradient[1];\n }\n\n _legendColorMap.current[legend] = [startColor, endColor];\n colorIndex += 1;\n }\n\n return {\n ...point,\n color: _legendColorMap.current[legend][0],\n ...(props.enableGradient ? { gradient: _legendColorMap.current[legend] } : {}),\n };\n }) ?? []\n );\n }, [props.data, props.theme?.isInverted, props.enableGradient]);\n\n const _dateFormatOptions = React.useMemo(() => {\n if (_xAxisType.current !== 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);\n const endFormatLevel = getDateFormatLevel(p.x.end as Date, useUTC);\n lowestFormatLevel = Math.min(lowestFormatLevel, startFormatLevel, endFormatLevel);\n highestFormatLevel = Math.max(highestFormatLevel, startFormatLevel, endFormatLevel);\n });\n\n return getMultiLevelDateTimeFormatOptions(lowestFormatLevel, highestFormatLevel);\n }, [useUTC, _points]);\n\n const _getDomainNRangeValues = React.useCallback(\n (\n points: IGanttChartDataPoint[],\n _margins: IMargins,\n containerWidth: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n shiftX: number,\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! + (isRTL ? 0 : shiftX),\n rEndValue: containerWidth - _margins.right! - (isRTL ? shiftX : 0),\n };\n },\n [],\n );\n\n const _adjustProps = (): void => {\n _barHeight.current = Math.max(props.barHeight || 24, 1);\n\n if (props.data && props.data.length > 0) {\n _xAxisType.current = getTypeOfAxis(props.data[0].x.start, true) as XAxisTypes;\n _yAxisType.current = getTypeOfAxis(props.data[0].y, false) as YAxisType;\n }\n\n _yAxisPadding.current = getScalePadding(props.yAxisPadding, undefined, 1 / 2);\n };\n\n const _getMargins = React.useCallback((_margins: IMargins) => {\n margins.current = _margins;\n }, []);\n\n const _renderContentForOnlyBars = (point: IGanttChartDataPoint): React.JSX.Element => {\n return (\n <ChartHoverCard\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 );\n };\n\n const _renderCallout = (point?: IGanttChartDataPoint): React.JSX.Element | null => {\n return point ? _renderContentForOnlyBars(point) : null;\n };\n\n const _getCustomizedCallout = () => {\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(dataPointCalloutProps, _renderCallout)\n : null;\n };\n\n const _getFormattedXValue = React.useCallback(\n (point: IGanttChartDataPoint): string => {\n let formattedStartX: string;\n let formattedEndX: string;\n\n if (_xAxisType.current === XAxisTypes.DateAxis) {\n formattedStartX = formatDateToLocaleString(\n point.x.start as Date,\n props.culture,\n useUTC,\n false,\n _dateFormatOptions,\n );\n formattedEndX = formatDateToLocaleString(point.x.end as Date, props.culture, useUTC, false, _dateFormatOptions);\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],\n );\n\n const _getAriaLabel = React.useCallback(\n (point: IGanttChartDataPoint): string => {\n const xValue = point.xAxisCalloutData || _getFormattedXValue(point);\n const yValue = point.yAxisCalloutData || point.y;\n return point.callOutAccessibilityData?.ariaLabel || `${yValue}. ` + `${xValue}.`;\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: SVGElement, point: IGanttChartDataPoint) => {\n if (!(_noLegendHighlighted() || _legendHighlighted(point.legend)) || _calloutAnchorPoint.current === point) {\n return;\n }\n\n _calloutAnchorPoint.current = point;\n setCalloutTarget(target);\n setCalloutVisible(true);\n setCalloutLegend(point.legend!);\n setCalloutColor(point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || _getFormattedXValue(point));\n setDataPointCalloutProps(point);\n },\n [_getFormattedXValue, _legendHighlighted, _noLegendHighlighted],\n );\n\n const _onBarFocus = React.useCallback(\n (point: IGanttChartDataPoint, focusEvent: React.FocusEvent<SVGElement>): void => {\n _showCallout(focusEvent.currentTarget, point);\n },\n [_showCallout],\n );\n\n const _onBarHover = React.useCallback(\n (point: IGanttChartDataPoint, mouseEvent: React.MouseEvent<SVGElement>): void => {\n _showCallout(mouseEvent.currentTarget, point);\n },\n [_showCallout],\n );\n\n const _createBars = React.useCallback(\n (xScale: DateScale | NumberScale, yScale: NumberScale | StringScale): React.JSX.Element[] => {\n const bars = _points.map((point: IGanttChartDataPoint, index: number) => {\n const shouldHighlight = _noLegendHighlighted() || _legendHighlighted(point.legend);\n\n let startColor = point.color!;\n let endColor = startColor;\n if (props.enableGradient) {\n startColor = point.gradient![0];\n endColor = point.gradient![1];\n }\n const gradientId = `${_gradientId.current}_${index}`;\n\n const startX = xScale(point.x.start);\n const endX = xScale(point.x.end);\n const y =\n (_yAxisType.current === YAxisType.StringAxis\n ? (yScale as StringScale)(point.y as string)! + (yScale as StringScale).bandwidth() / 2\n : (yScale as NumberScale)(point.y as number)) -\n _barHeight.current / 2;\n\n return (\n <React.Fragment key={index}>\n {props.enableGradient && (\n <defs>\n <linearGradient id={gradientId}>\n <stop offset=\"0\" stopColor={startColor} />\n <stop offset=\"100%\" stopColor={endColor} />\n </linearGradient>\n </defs>\n )}\n <rect\n x={Math.min(startX, endX)}\n y={y}\n width={Math.abs(endX - startX)}\n height={_barHeight.current}\n rx={props.roundCorners ? 3 : 0}\n fill={props.enableGradient ? `url(#${gradientId})` : startColor}\n opacity={shouldHighlight ? 1 : 0.1}\n onClick={point.onClick}\n onMouseOver={event => _onBarHover(point, event)}\n onMouseLeave={_onBarLeave}\n onFocus={event => _onBarFocus(point, event)}\n onBlur={_onBarLeave}\n data-is-focusable={shouldHighlight}\n role=\"img\"\n aria-label={_getAriaLabel(point)}\n />\n </React.Fragment>\n );\n });\n return bars;\n },\n [\n _getAriaLabel,\n _legendHighlighted,\n _noLegendHighlighted,\n _onBarFocus,\n _onBarHover,\n props.enableGradient,\n props.roundCorners,\n _points,\n ],\n );\n\n const _getGraphData = React.useCallback(\n (\n xScale: DateScale | NumberScale,\n yScale: NumberScale | StringScale,\n containerHeight: number,\n containerWidth: number,\n xAxisElement: SVGElement | null,\n yAxisElement: SVGElement | null,\n ) => {\n return (_bars.current = _createBars(xScale, yScale));\n },\n [_createBars],\n );\n\n const _onBarLeave = (): void => {\n // do nothing\n };\n\n const _handleChartMouseLeave = React.useCallback((): void => {\n _calloutAnchorPoint.current = null;\n setCalloutTarget(null);\n setCalloutVisible(false);\n setCalloutLegend('');\n setCalloutColor('');\n setXCalloutValue('');\n setYCalloutValue('');\n setDataPointCalloutProps(undefined);\n }, []);\n\n const _closeCallout = () => {\n setCalloutVisible(false);\n };\n\n const _onLegendHover = (legend: string): void => {\n setHoveredLegend(legend);\n };\n\n const _onLegendLeave = (): void => {\n setHoveredLegend('');\n };\n\n const _getLegendData = (): React.JSX.Element => {\n const actions: ILegend[] = [];\n\n Object.keys(_legendColorMap.current).forEach((legendTitle: string) => {\n const legend: ILegend = {\n title: legendTitle,\n color: _legendColorMap.current[legendTitle][0],\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 overflowProps={props.legendsOverflowProps}\n focusZonePropsInHoverCard={props.focusZonePropsForLegendsInHoverCard}\n overflowText={props.legendsOverflowText}\n onChange={_onLegendSelectionChange}\n ref={_legendsRef}\n {...props.legendProps}\n />\n );\n return legends;\n };\n\n const _onLegendSelectionChange = (\n _selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: ILegend,\n ): 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\n const _getChartTitle = (): string => {\n const { chartTitle } = props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Gantt chart with ${_points.length} bars. `;\n };\n\n const _isChartEmpty = (): boolean => {\n return !(props.data && props.data.length > 0);\n };\n\n const _getYDomainMargins = React.useCallback(\n (containerHeight: number): IMargins => {\n _domainMargin.current = MIN_DOMAIN_MARGIN;\n\n const ySet = new Set<string | number>();\n _points.forEach((point: IGanttChartDataPoint) => {\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 - (margins.current.top! + MIN_DOMAIN_MARGIN) - (margins.current.bottom! + MIN_DOMAIN_MARGIN);\n\n if (_yAxisType.current !== YAxisType.StringAxis) {\n _barHeight.current = Math.max(\n props.barHeight ||\n calculateAppropriateBarWidth(uniqueY as number[] | Date[], totalHeight, _yAxisPadding.current),\n 1,\n );\n _domainMargin.current += _barHeight.current / 2;\n }\n\n return {\n ...margins.current,\n top: margins.current.top! + _domainMargin.current,\n bottom: margins.current.bottom! + _domainMargin.current,\n };\n },\n [props.barHeight, _points],\n );\n\n const _getOrderedYAxisLabels = () => {\n return sortAxisCategories(_mapCategoryToValues(), yAxisCategoryOrder);\n };\n\n const _mapCategoryToValues = () => {\n const categoryToValues: Record<string, number[]> = {};\n _points.forEach(point => {\n if (!categoryToValues[point.y]) {\n categoryToValues[point.y] = [];\n }\n // FIXME\n // categoryToValues[point.y].push(point.x.end - point.x.start);\n });\n return categoryToValues;\n };\n\n const _renderBars = React.useCallback(() => {\n return <g>{_bars.current}</g>;\n }, []);\n\n if (!_isChartEmpty()) {\n _adjustProps();\n\n const yAxisLabels = _getOrderedYAxisLabels();\n const legendBars: React.JSX.Element = _getLegendData();\n const calloutProps = {\n isCalloutVisible,\n directionalHint: DirectionalHint.topAutoEdge,\n id: `toolTip${_calloutId.current}`,\n target: calloutTarget,\n isBeakVisible: false,\n gapSpace: 15,\n color: calloutColor,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue,\n onDismiss: _closeCallout,\n preventDismissOnLostFocus: true,\n ...props.calloutProps,\n };\n const tickParams = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n return (\n <CartesianChart\n {...props}\n yAxisPadding={_yAxisPadding.current}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.GanttChart}\n xAxisType={_xAxisType.current}\n yAxisType={_yAxisType.current}\n stringDatasetForYAxisDomain={yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={legendBars}\n createYAxis={createYAxisForHorizontalBarChartWithAxis}\n getDomainNRangeValues={_getDomainNRangeValues}\n createStringYAxis={createStringYAxisForHorizontalBarChartWithAxis}\n getMinMaxOfYAxis={findHBCWANumericMinMaxOfY}\n focusZoneDirection={FocusZoneDirection.vertical}\n customizedCallout={_getCustomizedCallout()}\n getmargins={_getMargins}\n getYDomainMargins={_getYDomainMargins}\n getGraphData={_getGraphData}\n onChartMouseLeave={_handleChartMouseLeave}\n ref={_cartesianChartRef}\n useUTC={useUTC}\n children={_renderBars}\n />\n );\n } else {\n return (\n <div\n id={_emptyChartId.current}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'}\n />\n );\n }\n});\n\nGanttChartBase.displayName = 'GanttChart';\n"]}
1
+ {"version":3,"file":"GanttChart.base.js","sourceRoot":"../src/","sources":["components/GanttChart/GanttChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { ScaleLinear, ScaleBand, ScaleTime } from 'd3-scale';\nimport { DirectionalHint, FocusZoneDirection, getId, getRTL } from '@fluentui/react';\nimport { ILegend, ILegendContainer, Legends } from '../Legends/index';\nimport { IMargins, IChart, IImageExportOptions, IGanttChartDataPoint } from '../../types/IDataPoint';\nimport { CartesianChart, IModifiedCartesianChartProps } from '../CommonComponents/index';\nimport { IGanttChartProps } from './GanttChart.types';\nimport {\n ChartHoverCard,\n ChartTypes,\n YAxisType,\n XAxisTypes,\n getTypeOfAxis,\n getNextColor,\n findHBCWANumericMinMaxOfY,\n createYAxisForHorizontalBarChartWithAxis,\n IDomainNRange,\n createStringYAxisForHorizontalBarChartWithAxis,\n getNextGradient,\n areArraysEqual,\n MIN_DOMAIN_MARGIN,\n sortAxisCategories,\n calculateAppropriateBarWidth,\n getColorFromToken,\n getScalePadding,\n getDateFormatLevel,\n} from '../../utilities/index';\nimport { toImage } from '../../utilities/image-export-utils';\nimport { formatDateToLocaleString, getMultiLevelDateTimeFormatOptions } from '@fluentui/chart-utilities';\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 GanttChartBase: React.FunctionComponent<IGanttChartProps> = React.forwardRef<\n HTMLDivElement,\n IGanttChartProps\n>(({ useUTC = true, yAxisCategoryOrder = 'default', maxBarHeight = 24, ...props }, forwardedRef) => {\n const _barHeight = React.useRef<number>(DEFAULT_BAR_HEIGHT);\n const _calloutId = React.useRef<string>(getId('callout'));\n const _margins = React.useRef<IMargins>({});\n const _calloutAnchorPoint = React.useRef<IGanttChartDataPoint | null>(null);\n const _cartesianChartRef = React.useRef<IChart>(null);\n const _legendsRef = React.useRef<ILegendContainer>(null);\n const _emptyChartId = React.useRef<string>(getId('Gantt_empty'));\n const _legendMap = React.useRef<Record<string, { id: string; startColor: string; endColor: string }>>({});\n const _prevProps = React.useRef<Partial<IGanttChartProps>>({});\n\n const [calloutColor, setCalloutColor] = React.useState<string>('');\n const [isCalloutVisible, setCalloutVisible] = React.useState<boolean>(false);\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [calloutTarget, setCalloutTarget] = React.useState<SVGElement | null>(null);\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<IGanttChartDataPoint>();\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 React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: _cartesianChartRef.current?.chartContainer ?? null,\n toImage: (opts?: IImageExportOptions): Promise<string> => {\n return toImage(_cartesianChartRef.current?.chartContainer, _legendsRef.current?.toSVG, getRTL(), opts);\n },\n }),\n [],\n );\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\n ? getColorFromToken(point.color, props.theme?.isInverted)\n : getNextColor(colorIndex, 0, props.theme?.isInverted);\n let endColor = startColor;\n\n if (props.enableGradient) {\n const nextGradient = getNextGradient(colorIndex, 0, props.theme?.isInverted);\n startColor = point.gradient?.[0] || nextGradient[0];\n endColor = point.gradient?.[1] || nextGradient[1];\n }\n\n _legendMap.current[legend] = { id: getId('legend'), 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.theme?.isInverted, 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);\n const endFormatLevel = getDateFormatLevel(p.x.end as Date, useUTC);\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: IGanttChartDataPoint[],\n margins: IMargins,\n containerWidth: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n shiftX: number,\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! + (isRTL ? 0 : shiftX),\n rEndValue: containerWidth - margins.right! - (isRTL ? shiftX : 0),\n };\n },\n [],\n );\n\n const _getMargins = React.useCallback((margins: IMargins) => {\n _margins.current = margins;\n }, []);\n\n const _getFormattedXValue = React.useCallback(\n (point: IGanttChartDataPoint): 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,\n false,\n _dateFormatOptions,\n );\n formattedEndX = formatDateToLocaleString(point.x.end as Date, props.culture, useUTC, false, _dateFormatOptions);\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?: IGanttChartDataPoint): React.JSX.Element | null => {\n return point ? (\n <ChartHoverCard\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: IGanttChartDataPoint): 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: SVGElement, point: IGanttChartDataPoint) => {\n if (!(_noLegendHighlighted() || _legendHighlighted(point.legend)) || _calloutAnchorPoint.current === point) {\n return;\n }\n\n _calloutAnchorPoint.current = point;\n setCalloutTarget(target);\n setCalloutVisible(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: IGanttChartDataPoint, focusEvent: React.FocusEvent<SVGElement>): void => {\n _showCallout(focusEvent.currentTarget, point);\n },\n [_showCallout],\n );\n\n const _onBarHover = React.useCallback(\n (point: IGanttChartDataPoint, mouseEvent: React.MouseEvent<SVGElement>): void => {\n _showCallout(mouseEvent.currentTarget, 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 setCalloutTarget(null);\n setCalloutVisible(false);\n setCalloutLegend('');\n setCalloutColor('');\n setXCalloutValue('');\n setYCalloutValue('');\n setCalloutDataPoint(undefined);\n }, []);\n\n const _closeCallout = React.useCallback(() => {\n setCalloutVisible(false);\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: IGanttChartDataPoint[] = [];\n\n const yValueToPoints: Record<string, IGanttChartDataPoint[]> = {};\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 }): React.JSX.Element => {\n const getGradientId = (legend: string | undefined) => {\n const legendId = _legendMap.current[`${legend}`].id;\n return `${legendId}_gradient`;\n };\n\n const gradientDefs: React.JSX.Element[] = [];\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: IGanttChartDataPoint, 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.abs(rectEndX - rectStartX)}\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 => _onBarHover(point, event)}\n onMouseLeave={_onBarLeave}\n onFocus={event => _onBarFocus(point, event)}\n onBlur={_onBarLeave}\n data-is-focusable={shouldHighlight}\n role=\"img\"\n aria-label={_getAriaLabel(point)}\n />\n );\n });\n return (\n <g>\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?: ILegend): 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((): React.JSX.Element => {\n const actions: ILegend[] = [];\n\n Object.keys(_legendMap.current).forEach((legendTitle: string) => {\n const legend: ILegend = {\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 overflowProps={props.legendsOverflowProps}\n focusZonePropsInHoverCard={props.focusZonePropsForLegendsInHoverCard}\n overflowText={props.legendsOverflowText}\n onChange={_onLegendSelectionChange}\n ref={_legendsRef}\n {...props.legendProps}\n />\n );\n return legends;\n }, [\n _handleChartMouseLeave,\n _onLegendHover,\n _onLegendLeave,\n _onLegendSelectionChange,\n props.enabledLegendsWrapLines,\n props.focusZonePropsForLegendsInHoverCard,\n props.legendProps,\n props.legendsOverflowProps,\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): IMargins => {\n let domainMargin = MIN_DOMAIN_MARGIN;\n\n const ySet = new Set<string | number>();\n _points.forEach((point: IGanttChartDataPoint) => {\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 - (_margins.current.top! + MIN_DOMAIN_MARGIN) - (_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 if (!_isChartEmpty()) {\n _barHeight.current = _getBarHeight(DEFAULT_BAR_HEIGHT);\n\n const calloutProps: IModifiedCartesianChartProps['calloutProps'] = {\n isCalloutVisible,\n directionalHint: DirectionalHint.topAutoEdge,\n id: `toolTip${_calloutId.current}`,\n target: calloutTarget,\n isBeakVisible: false,\n gapSpace: 15,\n color: calloutColor,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue,\n onDismiss: _closeCallout,\n preventDismissOnLostFocus: true,\n ...props.calloutProps,\n };\n const tickParams: IModifiedCartesianChartProps['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 stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={_getLegendData()}\n createYAxis={createYAxisForHorizontalBarChartWithAxis}\n getDomainNRangeValues={_getDomainNRangeValues}\n createStringYAxis={createStringYAxisForHorizontalBarChartWithAxis}\n getMinMaxOfYAxis={findHBCWANumericMinMaxOfY}\n focusZoneDirection={FocusZoneDirection.bidirectional}\n customizedCallout={_getCustomizedCallout()}\n getmargins={_getMargins}\n getYDomainMargins={_getYDomainMargins}\n onChartMouseLeave={_handleChartMouseLeave}\n ref={_cartesianChartRef}\n useUTC={useUTC}\n children={_createBars}\n />\n );\n } else {\n return (\n <div\n id={_emptyChartId.current}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'}\n />\n );\n }\n});\n\nGanttChartBase.displayName = 'GanttChart';\n"]}
@@ -6,52 +6,62 @@ import { ICartesianChartProps, ICartesianChartStyleProps, ICartesianChartStyles,
6
6
  */
7
7
  export interface IGanttChartProps extends ICartesianChartProps {
8
8
  /**
9
- * Data to render in the chart.
9
+ * An array of data points to be rendered in the chart.
10
10
  */
11
11
  data?: IGanttChartDataPoint[];
12
12
  /**
13
- * Define a custom callout renderer for a data point.
13
+ * Callback function to render a custom callout for each data point.
14
14
  */
15
15
  onRenderCalloutPerDataPoint?: IRenderFunction<IGanttChartDataPoint>;
16
16
  /**
17
- * Width of each bar in the chart.
17
+ * Height of each bar, in pixels.
18
18
  */
19
19
  barHeight?: number;
20
20
  /**
21
- * chart title for the chart
21
+ * Title of the chart.
22
22
  */
23
23
  chartTitle?: string;
24
24
  /**
25
- * Call to provide customized styling that will layer on top of the variant rules.
25
+ * Custom styles that are applied on top of the default chart styles.
26
26
  */
27
27
  styles?: IStyleFunctionOrObject<IGanttChartStyleProps, IGanttChartStyles>;
28
28
  /**
29
- * The prop used to define the culture to localized the numbers
29
+ * Locale identifier string used to format numbers and dates according to the specified culture.
30
+ * Example: 'en-US', 'fr-FR'.
30
31
  */
31
32
  culture?: string;
32
33
  /**
33
- * it's padding between bar's or lines in the graph
34
+ * Padding between bars as a fraction of the [step](https://d3js.org/d3-scale/band#band_step).
35
+ * Takes a number in the range [0, 1].
36
+ * @default 1/2
34
37
  */
35
38
  yAxisPadding?: number;
36
39
  /**
37
- *@default false
38
- *Used for to elipse y axis labes and show tooltip on x axis labels
40
+ * If true, truncates y-axis tick labels longer than `noOfCharsToTruncate` with ellipses
41
+ * and displays them in a tooltip on hover.
42
+ * @default false
39
43
  */
40
44
  showYAxisLablesTooltip?: boolean;
41
45
  /**
42
- *@default false
43
- *Used for showing complete y axis lables */
46
+ * If true, renders full y-axis tick labels without truncation.
47
+ * @default false
48
+ */
44
49
  showYAxisLables?: boolean;
45
50
  /**
51
+ * If true, enables gradient fills for the bars.
46
52
  * @default false
47
- * The prop used to enable gradient fill color for the chart.
48
53
  */
49
54
  enableGradient?: boolean;
50
55
  /**
56
+ * If true, applies rounded corners to the bars.
51
57
  * @default false
52
- * The prop used to enable rounded corners for the bars.
53
58
  */
54
59
  roundCorners?: boolean;
60
+ /**
61
+ * Maximum height of each bar, in pixels.
62
+ * @default 24
63
+ */
64
+ maxBarHeight?: number;
55
65
  }
56
66
  /**
57
67
  * Gantt Chart style properties
@@ -1 +1 @@
1
- {"version":3,"file":"GanttChart.types.js","sourceRoot":"../src/","sources":["components/GanttChart/GanttChart.types.ts"],"names":[],"mappings":"","sourcesContent":["import { IRenderFunction, IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities';\nimport {\n ICartesianChartProps,\n ICartesianChartStyleProps,\n ICartesianChartStyles,\n IGanttChartDataPoint,\n} from '../../index';\n\n/**\n * Gantt Chart properties\n * {@docCategory GanttChart}\n */\nexport interface IGanttChartProps extends ICartesianChartProps {\n /**\n * Data to render in the chart.\n */\n data?: IGanttChartDataPoint[];\n\n /**\n * Define a custom callout renderer for a data point.\n */\n onRenderCalloutPerDataPoint?: IRenderFunction<IGanttChartDataPoint>;\n\n /**\n * Width of each bar in the chart.\n */\n barHeight?: number;\n\n /**\n * chart title for the chart\n */\n chartTitle?: string;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: IStyleFunctionOrObject<IGanttChartStyleProps, IGanttChartStyles>;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n /**\n * it's padding between bar's or lines in the graph\n */\n yAxisPadding?: number;\n\n /**\n *@default false\n *Used for to elipse y axis labes and show tooltip on x axis labels\n */\n showYAxisLablesTooltip?: boolean;\n\n /**\n *@default false\n *Used for showing complete y axis lables */\n showYAxisLables?: boolean;\n\n /**\n * @default false\n * The prop used to enable gradient fill color for the chart.\n */\n enableGradient?: boolean;\n\n /**\n * @default false\n * The prop used to enable rounded corners for the bars.\n */\n roundCorners?: boolean;\n}\n\n/**\n * Gantt Chart style properties\n * {@docCategory GanttChart}\n */\nexport interface IGanttChartStyleProps extends ICartesianChartStyleProps {}\n\n/**\n * Gantt Chart styles\n * {@docCategory GanttChart}\n */\nexport interface IGanttChartStyles extends ICartesianChartStyles {}\n"]}
1
+ {"version":3,"file":"GanttChart.types.js","sourceRoot":"../src/","sources":["components/GanttChart/GanttChart.types.ts"],"names":[],"mappings":"","sourcesContent":["import { IRenderFunction, IStyleFunctionOrObject } from '@fluentui/react/lib/Utilities';\nimport {\n ICartesianChartProps,\n ICartesianChartStyleProps,\n ICartesianChartStyles,\n IGanttChartDataPoint,\n} from '../../index';\n\n/**\n * Gantt Chart properties\n * {@docCategory GanttChart}\n */\nexport interface IGanttChartProps extends ICartesianChartProps {\n /**\n * An array of data points to be rendered in the chart.\n */\n data?: IGanttChartDataPoint[];\n\n /**\n * Callback function to render a custom callout for each data point.\n */\n onRenderCalloutPerDataPoint?: IRenderFunction<IGanttChartDataPoint>;\n\n /**\n * Height of each bar, in pixels.\n */\n barHeight?: number;\n\n /**\n * Title of the chart.\n */\n chartTitle?: string;\n\n /**\n * Custom styles that are applied on top of the default chart styles.\n */\n styles?: IStyleFunctionOrObject<IGanttChartStyleProps, IGanttChartStyles>;\n\n /**\n * Locale identifier string used to format numbers and dates according to the specified culture.\n * Example: 'en-US', 'fr-FR'.\n */\n culture?: string;\n\n /**\n * Padding between bars as a fraction of the [step](https://d3js.org/d3-scale/band#band_step).\n * Takes a number in the range [0, 1].\n * @default 1/2\n */\n yAxisPadding?: number;\n\n /**\n * If true, truncates y-axis tick labels longer than `noOfCharsToTruncate` with ellipses\n * and displays them in a tooltip on hover.\n * @default false\n */\n showYAxisLablesTooltip?: boolean;\n\n /**\n * If true, renders full y-axis tick labels without truncation.\n * @default false\n */\n showYAxisLables?: boolean;\n\n /**\n * If true, enables gradient fills for the bars.\n * @default false\n */\n enableGradient?: boolean;\n\n /**\n * If true, applies rounded corners to the bars.\n * @default false\n */\n roundCorners?: boolean;\n\n /**\n * Maximum height of each bar, in pixels.\n * @default 24\n */\n maxBarHeight?: number;\n}\n\n/**\n * Gantt Chart style properties\n * {@docCategory GanttChart}\n */\nexport interface IGanttChartStyleProps extends ICartesianChartStyleProps {}\n\n/**\n * Gantt Chart styles\n * {@docCategory GanttChart}\n */\nexport interface IGanttChartStyles extends ICartesianChartStyles {}\n"]}
@@ -46,6 +46,7 @@ define(["require", "exports", "tslib", "react", "d3-selection", "../Legends/inde
46
46
  var _m = React.useState(''), refSelected = _m[0], setRefSelected = _m[1];
47
47
  var prevSelectedLegendsRef = React.useRef(undefined);
48
48
  var _isScatterPolarRef = React.useRef(false);
49
+ var _isTextMode = React.useRef(false);
49
50
  var classNames = getClassNames(props.styles, {
50
51
  theme: props.theme,
51
52
  });
@@ -333,13 +334,17 @@ define(["require", "exports", "tslib", "react", "d3-selection", "../Legends/inde
333
334
  var isLegendSelected = _legendHighlighted(legendVal) || _noLegendHighlighted() || isSelectedLegend;
334
335
  var currentPointHidden = ((_s = (_r = _points.current) === null || _r === void 0 ? void 0 : _r[i]) === null || _s === void 0 ? void 0 : _s.hideNonActiveDots) && activePoint !== circleId;
335
336
  var text = (_u = (_t = _points.current) === null || _t === void 0 ? void 0 : _t[i].data[j]) === null || _u === void 0 ? void 0 : _u.text;
336
- pointsForSeries.push(React.createElement(React.Fragment, null,
337
- React.createElement("circle", tslib_1.__assign({ id: circleId, key: circleId, r: Math.max(circleRadius, 4), cx: ((_v = _xAxisScale.current) === null || _v === void 0 ? void 0 : _v.call(_xAxisScale, x)) + _xBandwidth.current, cy: (_w = _yAxisScale.current) === null || _w === void 0 ? void 0 : _w.call(_yAxisScale, y), "data-is-focusable": isLegendSelected, onMouseOver: function (event) {
338
- return _handleHover(x, y, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event);
339
- }, onMouseMove: function (event) {
340
- return _handleHover(x, y, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event);
341
- }, onMouseOut: _handleMouseOut, onFocus: function () { return _handleFocus(seriesId, x, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData); }, onBlur: _handleMouseOut }, _getClickHandler((_z = (_y = (_x = _points.current) === null || _x === void 0 ? void 0 : _x[i]) === null || _y === void 0 ? void 0 : _y.data[j]) === null || _z === void 0 ? void 0 : _z.onDataPointClick), { opacity: isLegendSelected && !currentPointHidden ? 1 : 0.1, fill: _getPointFill(seriesColor, circleId), stroke: seriesColor, role: "img", "aria-label": _getAriaLabel(i, j), tabIndex: ((_1 = (_0 = _points.current) === null || _0 === void 0 ? void 0 : _0[i]) === null || _1 === void 0 ? void 0 : _1.legend) !== '' ? 0 : undefined })),
342
- !_isScatterPolarRef.current && text && (React.createElement("text", { key: "".concat(circleId, "-label"), x: ((_2 = _xAxisScale.current) === null || _2 === void 0 ? void 0 : _2.call(_xAxisScale, x)) + _xBandwidth.current, y: ((_3 = _yAxisScale.current) === null || _3 === void 0 ? void 0 : _3.call(_yAxisScale, y)) + Math.max(circleRadius + 12, 16), className: classNames.markerLabel }, text))));
337
+ if (!_isTextMode.current) {
338
+ pointsForSeries.push(React.createElement(React.Fragment, null,
339
+ React.createElement("circle", tslib_1.__assign({ id: circleId, key: circleId, r: Math.max(circleRadius, 4), cx: ((_v = _xAxisScale.current) === null || _v === void 0 ? void 0 : _v.call(_xAxisScale, x)) + _xBandwidth.current, cy: (_w = _yAxisScale.current) === null || _w === void 0 ? void 0 : _w.call(_yAxisScale, y), "data-is-focusable": isLegendSelected, onMouseOver: function (event) {
340
+ return _handleHover(x, y, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event);
341
+ }, onMouseMove: function (event) {
342
+ return _handleHover(x, y, verticaLineHeight, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData, event);
343
+ }, onMouseOut: _handleMouseOut, onFocus: function () { return _handleFocus(seriesId, x, xAxisCalloutData, circleId, xAxisCalloutAccessibilityData); }, onBlur: _handleMouseOut }, _getClickHandler((_z = (_y = (_x = _points.current) === null || _x === void 0 ? void 0 : _x[i]) === null || _y === void 0 ? void 0 : _y.data[j]) === null || _z === void 0 ? void 0 : _z.onDataPointClick), { opacity: isLegendSelected && !currentPointHidden ? 1 : 0.1, fill: _getPointFill(seriesColor, circleId), stroke: seriesColor, role: "img", "aria-label": _getAriaLabel(i, j), tabIndex: ((_1 = (_0 = _points.current) === null || _0 === void 0 ? void 0 : _0[i]) === null || _1 === void 0 ? void 0 : _1.legend) !== '' ? 0 : undefined }))));
344
+ }
345
+ if ((!_isScatterPolarRef.current || _isTextMode) && text) {
346
+ pointsForSeries.push(React.createElement("text", { key: "".concat(circleId, "-label"), x: ((_2 = _xAxisScale.current) === null || _2 === void 0 ? void 0 : _2.call(_xAxisScale, x)) + _xBandwidth.current, y: ((_3 = _yAxisScale.current) === null || _3 === void 0 ? void 0 : _3.call(_yAxisScale, y)) + Math.max(circleRadius + 12, 16), className: classNames.markerLabel }, text));
347
+ }
343
348
  };
344
349
  for (var j = 0; j < ((_l = (_k = (_j = _points.current) === null || _j === void 0 ? void 0 : _j[i]) === null || _k === void 0 ? void 0 : _k.data) === null || _l === void 0 ? void 0 : _l.length); j++) {
345
350
  _loop_2(j);
@@ -414,6 +419,7 @@ define(["require", "exports", "tslib", "react", "d3-selection", "../Legends/inde
414
419
  _xAxisScale.current = xScale;
415
420
  _yAxisScale.current = yScale;
416
421
  _isScatterPolarRef.current = (0, index_2.isScatterPolarSeries)(_points.current);
422
+ _isTextMode.current = (0, index_2.isTextMode)(_points.current);
417
423
  renderSeries.current = _createPlot(xElement, containerHeight);
418
424
  }, [renderSeries, _xAxisScale, _yAxisScale, _createPlot]);
419
425
  /**
@@ -462,7 +468,7 @@ define(["require", "exports", "tslib", "react", "d3-selection", "../Legends/inde
462
468
  // reduce computation cost by only creating legendBars
463
469
  // if when hideLegend is false.
464
470
  // NOTE: they are rendered only when hideLegend is false in CartesianChart.
465
- if (!props.hideLegend) {
471
+ if (!props.hideLegend && !_isTextMode.current) {
466
472
  legendBars = _createLegends(_points.current); // ToDo: Memoize legends to improve performance.
467
473
  }
468
474
  var calloutProps = tslib_1.__assign({ isCalloutVisible: isCalloutVisible, directionalHint: react_1.DirectionalHint.topAutoEdge, YValueHover: YValueHover, hoverXValue: hoverXValue, id: "toolTip".concat(_uniqueCallOutID.current), target: refSelected, isBeakVisible: false, gapSpace: 15, onDismiss: _closeCallout, preventDismissOnEvent: function () { return true; }, hidden: !(!props.hideTooltip && isCalloutVisible), descriptionMessage: props.getCalloutDescriptionMessage && stackCalloutProps