@fluentui/react-charting 5.19.22 → 5.19.24

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 (44) hide show
  1. package/CHANGELOG.json +57 -1
  2. package/CHANGELOG.md +23 -2
  3. package/bundle-size/AreaChart.fixture.js +9 -0
  4. package/bundle-size/VerticalBarChart.fixture.js +9 -0
  5. package/dist/react-charting.d.ts +14 -1
  6. package/dist/react-charting.js +1 -1
  7. package/dist/react-charting.min.js +1 -1
  8. package/etc/react-charting.api.md +10 -1
  9. package/lib/components/GaugeChart/GaugeChart.base.d.ts +10 -3
  10. package/lib/components/GaugeChart/GaugeChart.base.js +74 -37
  11. package/lib/components/GaugeChart/GaugeChart.base.js.map +1 -1
  12. package/lib/components/GaugeChart/GaugeChart.types.d.ts +13 -1
  13. package/lib/components/GaugeChart/GaugeChart.types.js +8 -0
  14. package/lib/components/GaugeChart/GaugeChart.types.js.map +1 -1
  15. package/lib/components/SankeyChart/SankeyChart.base.d.ts +25 -11
  16. package/lib/components/SankeyChart/SankeyChart.base.js +151 -86
  17. package/lib/components/SankeyChart/SankeyChart.base.js.map +1 -1
  18. package/lib/version.js +1 -1
  19. package/lib/version.js.map +1 -1
  20. package/lib-amd/components/GaugeChart/GaugeChart.base.d.ts +10 -3
  21. package/lib-amd/components/GaugeChart/GaugeChart.base.js +77 -37
  22. package/lib-amd/components/GaugeChart/GaugeChart.base.js.map +1 -1
  23. package/lib-amd/components/GaugeChart/GaugeChart.types.d.ts +13 -1
  24. package/lib-amd/components/GaugeChart/GaugeChart.types.js +9 -1
  25. package/lib-amd/components/GaugeChart/GaugeChart.types.js.map +1 -1
  26. package/lib-amd/components/SankeyChart/SankeyChart.base.d.ts +25 -11
  27. package/lib-amd/components/SankeyChart/SankeyChart.base.js +156 -88
  28. package/lib-amd/components/SankeyChart/SankeyChart.base.js.map +1 -1
  29. package/lib-amd/version.js +1 -1
  30. package/lib-amd/version.js.map +1 -1
  31. package/lib-commonjs/components/GaugeChart/GaugeChart.base.d.ts +10 -3
  32. package/lib-commonjs/components/GaugeChart/GaugeChart.base.js +77 -37
  33. package/lib-commonjs/components/GaugeChart/GaugeChart.base.js.map +1 -1
  34. package/lib-commonjs/components/GaugeChart/GaugeChart.types.d.ts +13 -1
  35. package/lib-commonjs/components/GaugeChart/GaugeChart.types.js +9 -1
  36. package/lib-commonjs/components/GaugeChart/GaugeChart.types.js.map +1 -1
  37. package/lib-commonjs/components/SankeyChart/SankeyChart.base.d.ts +25 -11
  38. package/lib-commonjs/components/SankeyChart/SankeyChart.base.js +156 -88
  39. package/lib-commonjs/components/SankeyChart/SankeyChart.base.js.map +1 -1
  40. package/lib-commonjs/version.js +1 -1
  41. package/lib-commonjs/version.js.map +1 -1
  42. package/monosize.config.mjs +11 -0
  43. package/package.json +5 -4
  44. package/src/components/GaugeChart/GaugeChart.types.ts +15 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SankeyChart.base.js","sourceRoot":"../src/","sources":["components/SankeyChart/SankeyChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FocusZone, FocusZoneDirection, FocusZoneTabbableElements } from '@fluentui/react-focus';\nimport { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { classNamesFunction, getId, getRTL, memoizeFunction } from '@fluentui/react/lib/Utilities';\nimport { sum as d3Sum } from 'd3-array';\nimport { SankeyGraph, SankeyLayout, sankey as d3Sankey, sankeyJustify, sankeyRight } from 'd3-sankey';\nimport { select, selectAll } from 'd3-selection';\nimport { area as d3Area, curveBumpX as d3CurveBasis } from 'd3-shape';\nimport * as React from 'react';\nimport { ChartHoverCard, IBasestate, IChartHoverCardProps, SLink, SNode } from '../../index';\nimport { IMargins } from '../../utilities/utilities';\nimport { ISankeyChartData, ISankeyChartProps, ISankeyChartStyleProps, ISankeyChartStyles } from './SankeyChart.types';\n\nconst getClassNames = classNamesFunction<ISankeyChartStyleProps, ISankeyChartStyles>();\nconst PADDING_PERCENTAGE = 0.3;\n\ntype NodesInColumns = { [key: number]: SNode[] };\ntype NodeColors = { fillColor: string; borderColor: string };\n\nexport interface ISankeyChartState extends IBasestate, IChartHoverCardProps {\n containerWidth: number;\n containerHeight: number;\n selectedState: boolean;\n selectedLinks: Set<Number>;\n selectedNodes: Set<Number>;\n selectedNode?: SNode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refSelected?: any;\n selectedLink?: SLink;\n shouldOverflow: boolean;\n}\n\nconst NON_SELECTED_NODE_AND_STREAM_COLOR: string = '#757575';\nconst DEFAULT_NODE_COLORS: NodeColors[] = [\n { fillColor: '#00758F', borderColor: '#002E39' },\n { fillColor: '#77004D', borderColor: '#43002C' },\n { fillColor: '#4F6BED', borderColor: '#3B52B4' },\n { fillColor: '#937600', borderColor: '#6D5700' },\n { fillColor: '#286EA8', borderColor: '#00457E' },\n { fillColor: '#A43FB1', borderColor: '#7C158A' },\n { fillColor: '#CC3595', borderColor: '#7F215D' },\n { fillColor: '#0E7878', borderColor: '#004E4E' },\n { fillColor: '#8764B8', borderColor: '#4B3867' },\n { fillColor: '#9C663F', borderColor: '#6D4123' },\n];\n\nconst MIN_HEIGHT_FOR_DOUBLINE_TYPE = 36;\nconst MIN_HEIGHT_FOR_TYPE = 24;\nconst REST_STREAM_OPACITY: number = 1;\nconst NON_SELECTED_OPACITY: number = 1;\nconst SELECTED_STREAM_OPACITY: number = 0.3;\nconst NON_SELECTED_STREAM_BORDER_OPACITY: number = 0.5;\nconst DEFAULT_TEXT_COLOR: string = '#323130';\nconst NON_SELECTED_TEXT_COLOR: string = '#FFFFFF';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getSelectedNodes(selectedLinks: Set<SLink>): any[] {\n const nodes: SNode[] = [];\n selectedLinks.forEach(link => {\n nodes.push(link.target as SNode);\n\n if (nodes.indexOf(link.source as SNode) === -1) {\n nodes.push(link.source as SNode);\n }\n });\n return nodes;\n}\n\nfunction getSelectedLinks(singleNode: SNode): Set<SLink> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-array-constructor\n const q: any = new Array<any>();\n const finalLinks: Set<SLink> = new Set<SLink>();\n\n singleNode.sourceLinks!.forEach((link: SLink) => {\n q.push(link);\n finalLinks.add(link);\n });\n\n while (q.length > 0) {\n const poppedLink: SLink = q.shift();\n const node: SNode = poppedLink.target as SNode;\n if (node && node.sourceLinks) {\n node.sourceLinks.forEach((link: SLink) => {\n finalLinks.add(link);\n q.push(link);\n });\n }\n }\n\n if (singleNode.targetLinks) {\n singleNode.targetLinks.forEach((link: SLink) => {\n q.push(link);\n finalLinks.add(link);\n });\n }\n\n while (q.length > 0) {\n const poppedLink: SLink = q.shift();\n const node: SNode = poppedLink.source as SNode;\n if (node && node.targetLinks) {\n node.targetLinks.forEach((link: SLink) => {\n finalLinks.add(link);\n q.push(link);\n });\n }\n }\n\n return finalLinks;\n}\n\nfunction getSelectedLinksforStreamHover(singleLink: SLink): { selectedLinks: Set<SLink>; selectedNodes: Set<SNode> } {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-array-constructor\n const q: any = new Array<any>();\n const finalLinks: Set<SLink> = new Set<SLink>();\n const finalNodes: Set<SNode> = new Set<SNode>();\n\n q.push(singleLink.source);\n finalLinks.add(singleLink);\n while (q.length > 0) {\n const poppedNode: SNode = q.shift();\n finalNodes.add(poppedNode);\n if (poppedNode.targetLinks && poppedNode.targetLinks.length > 0) {\n poppedNode.targetLinks.forEach((link: SLink) => {\n q.push(link.source);\n finalLinks.add(link);\n });\n }\n }\n\n q.push(singleLink.target);\n\n while (q.length > 0) {\n const poppedNode: SNode = q.shift();\n finalNodes.add(poppedNode);\n if (poppedNode.sourceLinks && poppedNode.sourceLinks.length > 0) {\n poppedNode.sourceLinks.forEach((link: SLink) => {\n q.push(link.target);\n finalLinks.add(link);\n });\n }\n }\n\n return {\n selectedLinks: finalLinks,\n selectedNodes: finalNodes,\n };\n}\n\n/**\n * This is used to group nodes by column index.\n */\nfunction populateNodeInColumns(graph: ISankeyChartData, sankey: SankeyLayout<SankeyGraph<{}, {}>, {}, {}>) {\n sankey(graph);\n const nodesInColumn: NodesInColumns = {};\n graph.nodes.forEach((node: SNode) => {\n const columnId = node.layer!;\n if (nodesInColumn[columnId]) {\n nodesInColumn[columnId].push(node);\n } else {\n nodesInColumn[columnId] = [node];\n }\n });\n return nodesInColumn;\n}\n\n/**\n * This is used to normalize the nodes value whose value is less than 1% of the total column value.\n */\nfunction adjustOnePercentHeightNodes(nodesInColumn: NodesInColumns) {\n const totalColumnValue = Object.values(nodesInColumn).map((column: SNode[]) => {\n return d3Sum(column, (node: SNode) => node.value);\n });\n totalColumnValue.forEach((columnValue: number, index: number) => {\n let totalPercentage = 0;\n nodesInColumn[index].forEach((node: SNode) => {\n const nodePercentage = (node.value! / columnValue) * 100;\n node.actualValue = node.value;\n //if the value is less than 1% then we are making it as 1% of total .\n if (nodePercentage < 1) {\n node.value = 0.01 * columnValue;\n totalPercentage = totalPercentage + 1;\n } else {\n totalPercentage = totalPercentage + nodePercentage;\n }\n });\n //since we have adjusted the value to be 1% but we need to keep the sum of the percentage value under 100.\n const scalingRatio = totalPercentage !== 0 ? totalPercentage / 100 : 1;\n if (scalingRatio > 1) {\n nodesInColumn[index].forEach((node: SNode) => {\n node.value = node.value! / scalingRatio;\n changeColumnValue(node, node.actualValue!, node.value);\n });\n }\n });\n}\n\n/**\n * This is used for normalizing each links value for reflecting the normalized node value.\n */\nfunction changeColumnValue(node: SNode, originalValue: number, normalizedValue: number) {\n node.sourceLinks!.forEach((link: SLink) => {\n link.unnormalizedValue = link.value;\n const linkRatio = link.value / originalValue;\n link.value = normalizedValue * linkRatio;\n });\n node.targetLinks!.forEach((link: SLink) => {\n link.unnormalizedValue = link.value;\n const linkRatio = link.value / originalValue;\n link.value = normalizedValue * linkRatio;\n });\n}\n\n/**\n * This is used for calculating the node non normalized value based on link non normalized value.\n */\nfunction populateNodeActualValue(data: ISankeyChartData) {\n data.links.forEach((link: SLink) => {\n if (!link.unnormalizedValue) {\n link.unnormalizedValue = link.value;\n }\n });\n data.nodes.forEach((node: SNode) => {\n node.actualValue = Math.max(\n d3Sum(node.sourceLinks!, (link: SLink) => link.unnormalizedValue),\n d3Sum(node.targetLinks!, (link: SLink) => link.unnormalizedValue),\n );\n });\n}\n\nexport class SankeyChartBase extends React.Component<ISankeyChartProps, ISankeyChartState> {\n private chartContainer: HTMLDivElement;\n private _reqID: number;\n private _calloutId: string;\n private _linkId: string;\n private _nodesInColumn: NodesInColumns;\n private _sankey: SankeyLayout<SankeyGraph<{}, {}>, {}, {}>;\n private _margins: IMargins;\n private _isRtl: boolean = getRTL();\n private _normalizeData: (data: ISankeyChartData) => void;\n private _emptyChartId: string;\n\n constructor(props: ISankeyChartProps) {\n super(props);\n this.state = {\n containerHeight: 468,\n containerWidth: 912,\n selectedState: false,\n selectedLinks: new Set<number>(),\n selectedNodes: new Set<number>(),\n shouldOverflow: false,\n isCalloutVisible: false,\n };\n this._calloutId = getId('callout');\n this._linkId = getId('link');\n this._margins = { top: 36, right: 48, bottom: 32, left: 48 };\n this._preRenderLayout();\n this._normalizeData = memoizeFunction((data: ISankeyChartData) => this._normalizeSankeyData(data));\n this._emptyChartId = getId('_SankeyChart_empty');\n }\n\n public componentDidMount(): void {\n this._fitParentContainer();\n }\n\n public componentDidUpdate(prevProps: ISankeyChartProps): void {\n if (prevProps.shouldResize !== this.props.shouldResize) {\n this._fitParentContainer();\n }\n }\n\n public componentWillUnmount(): void {\n cancelAnimationFrame(this._reqID);\n }\n\n public render(): React.ReactNode {\n if (!this._isChartEmpty()) {\n const { theme, className, styles, pathColor } = this.props;\n const state = this.state;\n const classNames: IProcessedStyleSet<ISankeyChartStyles> = getClassNames(styles!, {\n theme: theme!,\n width: state.containerWidth,\n height: state.containerHeight,\n pathColor,\n className,\n });\n // We are using the this._margins.left and this._margins.top in sankey extent while constructing the layout\n const { height, width } = this._preRenderLayout();\n const sankeyChartData = this.props.data.SankeyChartData!;\n this._normalizeData(sankeyChartData);\n let nodePadding = 8;\n nodePadding = this._adjustPadding(this._sankey, height - 6, this._nodesInColumn);\n\n this._sankey.nodePadding(nodePadding);\n this._sankey(sankeyChartData);\n populateNodeActualValue(sankeyChartData);\n this._assignNodeColors();\n const nodeData = this._createNodes(classNames);\n const linkData = this._createLinks();\n const calloutProps = {\n isCalloutVisible: state.isCalloutVisible,\n directionalHint: DirectionalHint.topAutoEdge,\n id: `toolTip${this._calloutId}`,\n target: state.refSelected,\n color: state.color,\n XValue: state.xCalloutValue,\n YValue: state.yCalloutValue ? state.yCalloutValue : state.dataForHoverCard,\n descriptionMessage: state.descriptionMessage,\n isBeakVisible: false,\n gapSpace: 15,\n onDismiss: this._onCloseCallout,\n className: classNames.calloutContentRoot,\n preventDismissOnLostFocus: true,\n };\n return (\n <div\n className={classNames.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (this.chartContainer = rootElem)}\n onMouseLeave={this._onCloseCallout}\n >\n <FocusZone\n direction={FocusZoneDirection.bidirectional}\n isCircularNavigation={true}\n handleTabKey={FocusZoneTabbableElements.all}\n >\n <svg width={width} height={height} id={getId('sankeyChart')}>\n <g className={classNames.links} strokeOpacity={1}>\n {linkData}\n </g>\n <g className={classNames.nodes}>{nodeData}</g>\n {calloutProps.isCalloutVisible && (\n <Callout {...calloutProps}>\n <ChartHoverCard\n XValue={calloutProps.XValue}\n YValue={calloutProps.YValue}\n color={calloutProps.color}\n descriptionMessage={calloutProps.descriptionMessage ? calloutProps.descriptionMessage : ''}\n />\n </Callout>\n )}\n </svg>\n </FocusZone>\n </div>\n );\n }\n return (\n <div\n id={this._emptyChartId}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'} // TODO: Localize this string\n />\n );\n }\n\n private _preRenderLayout(): { height: number; width: number } {\n const { containerHeight, containerWidth } = this.state;\n const { left, right, top, bottom } = this._margins;\n const width = containerWidth - right!;\n const height = containerHeight - bottom! > 0 ? containerHeight - bottom! : 0;\n\n this._sankey = d3Sankey()\n .nodeWidth(124)\n .extent([\n [left!, top!],\n [width - 1, height - 6],\n ])\n .nodeAlign(this._isRtl ? sankeyRight : sankeyJustify);\n\n return { height, width };\n }\n\n private _normalizeSankeyData(data: ISankeyChartData): void {\n const nodesInColumn = (this._nodesInColumn = populateNodeInColumns(data, this._sankey));\n adjustOnePercentHeightNodes(nodesInColumn);\n }\n\n /**\n * This is used to introduce dynamic padding for cases where the number of nodes in a column is huge\n * so that we maintain a node to space ratio for such columns as if we fail to do so the\n * chart is devoid of nodes and only shows links.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _adjustPadding(sankey: any, height: number, nodesInColumn: NodesInColumns) {\n let padding = this._sankey.nodePadding();\n Object.values(nodesInColumn).forEach((column: SNode[]) => {\n const minPadding = PADDING_PERCENTAGE * height;\n const toatlPaddingInColumn = height - d3Sum(column, (node: SNode) => node.y1! - node.y0!);\n if (minPadding < toatlPaddingInColumn) {\n //Here we are calculating the min of default and calculated padding, we will not increase the padding\n //in any scenario.\n padding = Math.min(padding, minPadding / (column.length - 1));\n }\n });\n return padding;\n }\n\n private _createLinks(): React.ReactNode[] | undefined {\n const links: React.ReactNode[] = [];\n\n const sankeyChartData = this.props.data.SankeyChartData;\n if (sankeyChartData) {\n const linkId = this._linkId;\n sankeyChartData.links.forEach((singleLink: SLink, index: number) => {\n const onMouseOut = () => {\n this._onStreamLeave(singleLink);\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = (d: any) => {\n return [\n { x: d.source.x1, y0: d.y0 + d.width / 2, y1: d.y0 - d.width / 2 },\n { x: d.target.x0, y0: d.y1 + d.width / 2, y1: d.y1 - d.width / 2 },\n ];\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dataPoints: Array<any> = data(singleLink);\n const linkArea = d3Area()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((p: any) => p.x)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y0((p: any) => p.y0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y1((p: any) => p.y1)\n .curve(d3CurveBasis);\n const gradientUrl = `url(#gradient-${linkId}-${index})`;\n const link = (\n <g key={`${linkId}-${index}`}>\n <defs>\n <linearGradient id={`gradient-${linkId}-${index}`} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0\" stopColor={(singleLink.source as SNode).color} />\n <stop offset=\"100%\" stopColor={(singleLink.target as SNode).color} />\n </linearGradient>\n </defs>\n <path\n d={linkArea(dataPoints)!}\n id={getId('link')}\n fill={this._fillStreamColors(singleLink, gradientUrl)}\n stroke={this._fillStreamBorder(singleLink, gradientUrl)}\n strokeWidth=\"2\"\n strokeOpacity={this._getOpacityStreamBorder(singleLink)}\n onMouseOver={this._onStreamHover.bind(this, singleLink)}\n onMouseOut={onMouseOut}\n onFocus={this._onFocusLink.bind(this, singleLink)}\n onBlur={this._onBlur}\n fillOpacity={this._getOpacityStream(singleLink)}\n data-is-focusable={true}\n aria-label={`link from ${(singleLink.source as SNode).name} to ${\n (singleLink.target as SNode).name\n } with weight ${singleLink!.unnormalizedValue}`} // TODO: localize this string\n role=\"img\"\n />\n </g>\n );\n links.push(link);\n });\n }\n return links;\n }\n\n private _createNodes(classNames: IProcessedStyleSet<ISankeyChartStyles>): React.ReactNode[] | undefined {\n const nodes: React.ReactNode[] = [];\n\n const sankeyChartData = this.props.data.SankeyChartData;\n if (sankeyChartData) {\n const state = this.state;\n sankeyChartData.nodes.forEach((singleNode: SNode, index: number) => {\n const onMouseOut = () => {\n this._onLeave(singleNode);\n };\n const height = singleNode.y1! - singleNode.y0! > 0 ? singleNode.y1! - singleNode.y0! : 0;\n let padding = 8;\n let textLengthForNodeWeight = 0;\n\n // If the nodeWeight is in the same line as node description an extra padding\n // of 6 px is required between node description and node weight.\n if (height < MIN_HEIGHT_FOR_DOUBLINE_TYPE) {\n padding = padding + 6;\n const tspan = select('.nodeName').append('text').attr('class', 'tempText').append('tspan').text(null);\n tspan.text(singleNode.actualValue!);\n if (tspan.node() !== null) {\n textLengthForNodeWeight = tspan.node()!.getComputedTextLength();\n padding = padding + textLengthForNodeWeight;\n }\n tspan.text(null);\n selectAll('.tempText').remove();\n }\n // Since the total width of the node is 124 and we are giving margin of 8px from the left .\n //So the actual value on which it will be truncated is 124-8=116.\n const truncatedname: string = this._truncateText(singleNode.name, 116, padding);\n const isTruncated: boolean = truncatedname.slice(-3) === '...';\n const id = getId('tooltip');\n const div = select('body').append('div').attr('id', id).attr('class', classNames.toolTip!).style('opacity', 0);\n const nodeId = getId('nodeBar');\n const node = (\n <g key={index} id={getId('nodeGElement')}>\n <rect\n x={singleNode.x0}\n y={singleNode.y0}\n height={height}\n width={singleNode.x1! - singleNode.x0!}\n fill={this._fillNodeColors(singleNode)}\n id={nodeId}\n onMouseOver={this._onHover.bind(this, singleNode)}\n onMouseOut={onMouseOut}\n onFocus={this._onCloseCallout.bind(this)}\n stroke={this._fillNodeBorder(singleNode)}\n strokeWidth=\"2\"\n opacity=\"1\"\n data-is-focusable={true}\n aria-label={`node ${singleNode.name} with weight ${singleNode.actualValue}`} // TODO: localize this string\n role=\"img\"\n />\n {singleNode.y1! - singleNode.y0! > MIN_HEIGHT_FOR_TYPE && (\n <g className={classNames.nodeTextContainer}>\n <g className=\"nodeName\">\n <text\n id={`${nodeId}-name`}\n x={singleNode.x0}\n y={singleNode.y0}\n dy={'1.2em'}\n dx={'0.4em'}\n textAnchor={this._isRtl ? 'end' : 'start'}\n fontWeight=\"regular\"\n aria-hidden=\"true\"\n fill={\n !(\n !state.selectedState ||\n (state.selectedState && state.selectedNodes.has(singleNode.index!) && state.selectedNode) ||\n (state.selectedState && !state.selectedNode)\n )\n ? DEFAULT_TEXT_COLOR\n : NON_SELECTED_TEXT_COLOR\n }\n fontSize={10}\n onMouseOver={this._showTooltip.bind(this, singleNode.name, isTruncated, div)}\n onMouseOut={this._hideTooltip.bind(this, div)}\n >\n {truncatedname}\n </text>\n </g>\n\n <text\n x={\n height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? singleNode.x0 : singleNode.x1! - textLengthForNodeWeight - 8\n }\n y={singleNode.y0}\n dy={height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? '2em' : '1em'}\n dx={height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? '0.4em' : '0em'}\n textAnchor={this._isRtl ? 'end' : 'start'}\n fontWeight=\"bold\"\n aria-hidden=\"true\"\n fill={\n !(\n !state.selectedState ||\n (state.selectedState && state.selectedNodes.has(singleNode.index!) && state.selectedNode) ||\n (state.selectedState && !state.selectedNode)\n )\n ? DEFAULT_TEXT_COLOR\n : NON_SELECTED_TEXT_COLOR\n }\n fontSize={14}\n >\n {singleNode.actualValue}\n </text>\n </g>\n )}\n </g>\n );\n nodes.push(node);\n });\n return nodes;\n }\n }\n\n private _onLeave(singleNode: SNode) {\n if (this.state.selectedState) {\n this.setState({\n selectedState: false,\n selectedNodes: new Set<number>(),\n selectedLinks: new Set<number>(),\n selectedNode: undefined,\n });\n }\n }\n\n private _onHover(singleNode: SNode, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent.persist();\n this._onCloseCallout();\n if (!this.state.selectedState) {\n const selectedLinks = getSelectedLinks(singleNode);\n const selectedNodes = getSelectedNodes(selectedLinks);\n selectedNodes.push(singleNode);\n this.setState({\n selectedState: true,\n selectedNodes: new Set<number>(Array.from(selectedNodes).map(node => node.index)),\n selectedLinks: new Set<number>(Array.from(selectedLinks).map(link => link.index!)),\n selectedNode: singleNode,\n refSelected: mouseEvent, //this._refArray.get(index),\n isCalloutVisible: singleNode.y1! - singleNode.y0! < MIN_HEIGHT_FOR_TYPE,\n color: singleNode.color,\n xCalloutValue: singleNode.name,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yCalloutValue: singleNode.actualValue! as any as string,\n });\n }\n }\n\n private _onStreamHover(singleLink: SLink, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent.persist();\n this._onCloseCallout();\n if (!this.state.selectedState) {\n const { selectedLinks, selectedNodes } = getSelectedLinksforStreamHover(singleLink);\n this.setState({\n selectedState: true,\n selectedNodes: new Set<number>(Array.from(selectedNodes).map(node => node.index!)),\n selectedLinks: new Set<number>(Array.from(selectedLinks).map(link => link.index!)),\n refSelected: mouseEvent,\n selectedLink: singleLink,\n isCalloutVisible: true,\n color: (singleLink.source as SNode).color,\n xCalloutValue: (singleLink.target as SNode).name,\n yCalloutValue: singleLink.unnormalizedValue!.toString(),\n descriptionMessage: 'from ' + (singleLink.source as SNode).name, // TODO: Does this need to be localized?\n });\n }\n }\n\n private _onStreamLeave(singleLink: SLink) {\n if (this.state.selectedState) {\n this.setState({\n selectedState: false,\n selectedNodes: new Set<number>(),\n selectedLinks: new Set<number>(),\n selectedLink: undefined,\n });\n }\n }\n\n private _onFocusLink(singleLink: SLink, element: React.FocusEvent<SVGElement>): void {\n element.persist();\n this._onCloseCallout();\n this.setState({\n refSelected: element.currentTarget,\n selectedLink: singleLink,\n isCalloutVisible: true,\n color: (singleLink.source as SNode).color,\n xCalloutValue: (singleLink.target as SNode).name,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yCalloutValue: (singleLink.source as SNode).actualValue! as any as string,\n descriptionMessage: 'from ' + (singleLink.source as SNode).name, // TODO: Does this need to be localized?\n });\n }\n\n private _onCloseCallout = () => {\n this.setState({\n isCalloutVisible: false,\n refSelected: undefined,\n descriptionMessage: '',\n });\n };\n\n private _onBlur = (): void => {\n /**/\n };\n\n private _fillNodeColors = (singleNode: SNode): string | undefined => {\n const state = this.state;\n if (!state.selectedState) {\n return singleNode.color;\n } else if (state.selectedState && state.selectedNodes.has(singleNode.index!) && state.selectedNode) {\n return state.selectedNode.color;\n } else if (state.selectedState && !state.selectedNode) {\n return singleNode.color;\n }\n };\n\n /**\n * This is used to assign node fillcolors and borderColor cyclically when the user doesnt\n * provide color to individual node.\n */\n private _assignNodeColors() {\n let colors: string[];\n let borders: string[];\n const { colorsForNodes, borderColorsForNodes } = this.props;\n if (colorsForNodes && borderColorsForNodes) {\n colors = colorsForNodes;\n borders = borderColorsForNodes;\n } else {\n colors = DEFAULT_NODE_COLORS.map(color => color.fillColor);\n borders = DEFAULT_NODE_COLORS.map(color => color.borderColor);\n }\n let currentIndex = 0;\n this.props.data.SankeyChartData!.nodes.forEach((node: SNode) => {\n if (!node.color && !node.borderColor) {\n node.color = colors[currentIndex];\n node.borderColor = borders[currentIndex];\n } else if (node.color && !node.borderColor) {\n node.borderColor = '#757575';\n } else if (node.borderColor && !node.color) {\n node.color = '#F5F5F5';\n }\n currentIndex = (currentIndex + 1) % colors.length;\n });\n }\n\n private _fillStreamColors(singleLink: SLink, gradientUrl: string): string | undefined {\n const state = this.state;\n if (state.selectedState && state.selectedLinks.has(singleLink.index!) && state.selectedNode) {\n return state.selectedNode.color;\n } else if (state.selectedState && state.selectedLinks.has(singleLink.index!)) {\n return gradientUrl;\n }\n }\n\n private _fillStreamBorder(singleLink: SLink, gradientUrl: string): string {\n const state = this.state;\n if (!state.selectedState) {\n return NON_SELECTED_NODE_AND_STREAM_COLOR;\n } else if (state.selectedState && state.selectedLinks.has(singleLink.index!) && state.selectedNode) {\n return state.selectedNode.borderColor!;\n } else if (state.selectedState && state.selectedLinks.has(singleLink.index!)) {\n return gradientUrl;\n }\n return NON_SELECTED_NODE_AND_STREAM_COLOR;\n }\n\n private _fillNodeBorder = (singleNode: SNode): string => {\n const state = this.state;\n if (!state.selectedState) {\n return singleNode.borderColor!;\n } else if (state.selectedState && state.selectedNodes.has(singleNode.index!) && state.selectedNode) {\n return state.selectedNode.borderColor!;\n } else if (state.selectedState && state.selectedNodes.has(singleNode.index!)) {\n return singleNode.borderColor!;\n }\n return singleNode.borderColor!;\n };\n\n private _getOpacityStream(singleLink: SLink): number {\n const state = this.state;\n if (state.selectedState) {\n if (!state.selectedLinks.has(singleLink.index!)) {\n return NON_SELECTED_OPACITY;\n } else if (state.selectedLinks.has(singleLink.index!) && !state.selectedNode) {\n return SELECTED_STREAM_OPACITY;\n }\n }\n return REST_STREAM_OPACITY;\n }\n\n private _getOpacityStreamBorder(singleLink: SLink): number {\n const state = this.state;\n if (state.selectedState && !state.selectedLinks.has(singleLink.index!) && !state.selectedNode) {\n return NON_SELECTED_STREAM_BORDER_OPACITY;\n }\n\n return NON_SELECTED_OPACITY;\n }\n\n private _fitParentContainer(): void {\n const { containerWidth, containerHeight } = this.state;\n this._reqID = requestAnimationFrame(() => {\n const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;\n const currentContainerWidth = container && container.getBoundingClientRect().width;\n const currentContainerHeight = container && container.getBoundingClientRect().height;\n const shouldResize = containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight;\n if (shouldResize) {\n this.setState({\n containerWidth: currentContainerWidth,\n containerHeight: currentContainerHeight,\n });\n }\n });\n }\n\n /**\n * @param text is the text which we are trying to truncate\n * @param rectangleWidth is the width of the rectangle which will contain the text\n * @param padding is the space we need to leave between the rect lines and other text\n * @param nodeWeight is the text if present needs to be accomodate in the same line as text.\n * @returns the truncated text , if truncated given the above parameters.\n */\n private _truncateText(text: string, rectangleWidth: number, padding: number) {\n const textLengthForNodeName = rectangleWidth - padding;\n let elipsisLength = 0;\n const tspan = select('.nodeName')\n .append('text')\n .attr('class', 'tempText')\n .attr('font-size', '10')\n .append('tspan')\n .text(null);\n tspan.text(text);\n if (tspan.node() !== null && tspan.node()!.getComputedTextLength() <= textLengthForNodeName) {\n return text;\n }\n tspan.text(null);\n tspan.text('...');\n if (tspan.node() !== null) {\n elipsisLength = tspan.node()!.getComputedTextLength();\n }\n tspan.text(null);\n let line: string = '';\n for (let i = 0; i < text.length; i++) {\n line += text[i];\n tspan.text(line);\n if (tspan.node() !== null) {\n const w = tspan.node()!.getComputedTextLength();\n if (w >= textLengthForNodeName - elipsisLength) {\n line = line.slice(0, -1);\n line += '...';\n break;\n }\n }\n }\n tspan.text(null);\n selectAll('.tempText').remove();\n return line;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _showTooltip(text: string, checkTrcuncated: boolean, div: any, evt: any) {\n if (checkTrcuncated) {\n //Fixing tooltip position by attaching it to the element rather than page\n div.style('opacity', 0.9);\n div\n .html(text)\n .style('left', evt.pageX + 'px')\n .style('top', evt.pageY - 28 + 'px');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _hideTooltip(div: any) {\n div.style('opacity', 0);\n }\n\n private _isChartEmpty() {\n const sankeyChartData = this.props.data?.SankeyChartData;\n return !(sankeyChartData && sankeyChartData.nodes.length > 0 && sankeyChartData.links.length > 0);\n }\n}\n"]}
1
+ {"version":3,"file":"SankeyChart.base.js","sourceRoot":"../src/","sources":["components/SankeyChart/SankeyChart.base.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FocusZone, FocusZoneDirection, FocusZoneTabbableElements } from '@fluentui/react-focus';\nimport { Callout, DirectionalHint } from '@fluentui/react/lib/Callout';\nimport { IProcessedStyleSet } from '@fluentui/react/lib/Styling';\nimport { classNamesFunction, getId, getRTL, memoizeFunction } from '@fluentui/react/lib/Utilities';\nimport { sum as d3Sum } from 'd3-array';\nimport { SankeyGraph, SankeyLayout, sankey as d3Sankey, sankeyJustify, sankeyRight } from 'd3-sankey';\nimport { select, selectAll } from 'd3-selection';\nimport { area as d3Area, curveBumpX as d3CurveBasis } from 'd3-shape';\nimport * as React from 'react';\nimport { IBasestate, SLink, SNode } from '../../types/IDataPoint';\nimport { ChartHoverCard } from '../../utilities/ChartHoverCard/ChartHoverCard';\nimport { IChartHoverCardProps } from '../../utilities/ChartHoverCard/ChartHoverCard.types';\nimport { IMargins } from '../../utilities/utilities';\nimport { ISankeyChartData, ISankeyChartProps, ISankeyChartStyleProps, ISankeyChartStyles } from './SankeyChart.types';\n\nconst getClassNames = classNamesFunction<ISankeyChartStyleProps, ISankeyChartStyles>();\nconst PADDING_PERCENTAGE = 0.3;\n\ntype NodeId = number | string;\ntype NodeValues = { [key: NodeId]: number };\ntype LinkValues = { [key: NodeId]: NodeValues };\n\ntype NodesInColumns = { [key: number]: SNode[] };\ntype NormalizedData = {\n width: number;\n height: number;\n data: ISankeyChartData;\n};\n\ntype NormalizeFunction = (data: ISankeyChartData, containerWidth: number, containerHeight: number) => NormalizedData;\n\ntype NodeColors = { fillColor: string; borderColor: string };\ntype SankeyLayoutGenerator = SankeyLayout<SankeyGraph<{}, {}>, {}, {}>;\n\nexport interface ISankeyChartState extends IBasestate, IChartHoverCardProps {\n containerWidth: number;\n containerHeight: number;\n selectedState: boolean;\n selectedLinks: Set<Number>;\n selectedNodes: Set<Number>;\n selectedNode?: SNode;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n refSelected?: any;\n selectedLink?: SLink;\n shouldOverflow: boolean;\n}\n\nconst NON_SELECTED_NODE_AND_STREAM_COLOR: string = '#757575';\nconst DEFAULT_NODE_COLORS: NodeColors[] = [\n { fillColor: '#00758F', borderColor: '#002E39' },\n { fillColor: '#77004D', borderColor: '#43002C' },\n { fillColor: '#4F6BED', borderColor: '#3B52B4' },\n { fillColor: '#937600', borderColor: '#6D5700' },\n { fillColor: '#286EA8', borderColor: '#00457E' },\n { fillColor: '#A43FB1', borderColor: '#7C158A' },\n { fillColor: '#CC3595', borderColor: '#7F215D' },\n { fillColor: '#0E7878', borderColor: '#004E4E' },\n { fillColor: '#8764B8', borderColor: '#4B3867' },\n { fillColor: '#9C663F', borderColor: '#6D4123' },\n];\n\nconst MIN_HEIGHT_FOR_DOUBLINE_TYPE = 36;\nconst MIN_HEIGHT_FOR_TYPE = 24;\nconst REST_STREAM_OPACITY: number = 1;\nconst NON_SELECTED_OPACITY: number = 1;\nconst SELECTED_STREAM_OPACITY: number = 0.3;\nconst NON_SELECTED_STREAM_BORDER_OPACITY: number = 0.5;\nconst DEFAULT_TEXT_COLOR: string = '#323130';\nconst NON_SELECTED_TEXT_COLOR: string = '#FFFFFF';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getSelectedNodes(selectedLinks: Set<SLink>): any[] {\n const nodes: SNode[] = [];\n selectedLinks.forEach(link => {\n nodes.push(link.target as SNode);\n\n if (nodes.indexOf(link.source as SNode) === -1) {\n nodes.push(link.source as SNode);\n }\n });\n return nodes;\n}\n\nfunction getSelectedLinks(singleNode: SNode): Set<SLink> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-array-constructor\n const q: any = new Array<any>();\n const finalLinks: Set<SLink> = new Set<SLink>();\n\n singleNode.sourceLinks!.forEach((link: SLink) => {\n q.push(link);\n finalLinks.add(link);\n });\n\n while (q.length > 0) {\n const poppedLink: SLink = q.shift();\n const node: SNode = poppedLink.target as SNode;\n if (node && node.sourceLinks) {\n node.sourceLinks.forEach((link: SLink) => {\n finalLinks.add(link);\n q.push(link);\n });\n }\n }\n\n if (singleNode.targetLinks) {\n singleNode.targetLinks.forEach((link: SLink) => {\n q.push(link);\n finalLinks.add(link);\n });\n }\n\n while (q.length > 0) {\n const poppedLink: SLink = q.shift();\n const node: SNode = poppedLink.source as SNode;\n if (node && node.targetLinks) {\n node.targetLinks.forEach((link: SLink) => {\n finalLinks.add(link);\n q.push(link);\n });\n }\n }\n\n return finalLinks;\n}\n\nfunction getSelectedLinksforStreamHover(singleLink: SLink): { selectedLinks: Set<SLink>; selectedNodes: Set<SNode> } {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-array-constructor\n const q: any = new Array<any>();\n const finalLinks: Set<SLink> = new Set<SLink>();\n const finalNodes: Set<SNode> = new Set<SNode>();\n\n q.push(singleLink.source);\n finalLinks.add(singleLink);\n while (q.length > 0) {\n const poppedNode: SNode = q.shift();\n finalNodes.add(poppedNode);\n if (poppedNode.targetLinks && poppedNode.targetLinks.length > 0) {\n poppedNode.targetLinks.forEach((link: SLink) => {\n q.push(link.source);\n finalLinks.add(link);\n });\n }\n }\n\n q.push(singleLink.target);\n\n while (q.length > 0) {\n const poppedNode: SNode = q.shift();\n finalNodes.add(poppedNode);\n if (poppedNode.sourceLinks && poppedNode.sourceLinks.length > 0) {\n poppedNode.sourceLinks.forEach((link: SLink) => {\n q.push(link.target);\n finalLinks.add(link);\n });\n }\n }\n\n return {\n selectedLinks: finalLinks,\n selectedNodes: finalNodes,\n };\n}\n\n/**\n * This is used to group nodes by column index.\n */\n// This is exported for unit tests.\nexport function groupNodesByColumn(graph: ISankeyChartData) {\n const nodesInColumn: NodesInColumns = {};\n graph.nodes.forEach((node: SNode) => {\n const columnId = node.layer!;\n if (nodesInColumn[columnId]) {\n nodesInColumn[columnId].push(node);\n } else {\n nodesInColumn[columnId] = [node];\n }\n });\n return nodesInColumn;\n}\n\n/**\n * This is used to normalize the nodes value whose value is less than 1% of the total column value.\n */\nfunction adjustOnePercentHeightNodes(\n nodesInColumn: NodesInColumns,\n computedNodes: NodeValues,\n originalLinks: LinkValues,\n): void {\n const totalColumnValue = Object.values(nodesInColumn).map((column: SNode[]) => {\n return d3Sum(column, (node: SNode) => node.value);\n });\n totalColumnValue.forEach((columnValue: number, index: number) => {\n let totalPercentage = 0;\n const onePercent = 0.01 * columnValue;\n const columnNodes = nodesInColumn[index];\n columnNodes.forEach((node: SNode) => {\n const value = computedNodes[node.nodeId];\n const nodePercentage = (value / columnValue) * 100;\n node.actualValue = value;\n //if the value is less than 1% then we are making it as 1% of total .\n if (nodePercentage < 1) {\n node.value = onePercent;\n totalPercentage = totalPercentage + 1;\n } else {\n totalPercentage = totalPercentage + nodePercentage;\n }\n });\n //since we have adjusted the value to be 1% but we need to keep the sum of the percentage value under 100.\n const scalingRatio = totalPercentage !== 0 ? totalPercentage / 100 : 1;\n if (scalingRatio > 1) {\n // Loop through each node in that column and scale that node--and its incoming and outgoing links--by the\n // scaling ratio. We need the sankey diagram to re-layout the nodes and links after we do this.\n columnNodes.forEach((node: SNode) => {\n const normalized = (node.value = node.value! / scalingRatio);\n // Which Original Value? and Which Normalized Value is needed, here? The Node? The Link? Both?\n changeColumnValue(node, computedNodes[node.nodeId], normalized, originalLinks);\n });\n }\n });\n}\n\n/**\n * This is used for normalizing each link's value to reflect the normalized node value.\n */\nfunction changeColumnValue(\n node: SNode,\n originalNodeValue: number,\n normalizedNodeValue: number,\n linkValues: LinkValues,\n) {\n // For each link in the source and target, compute the proportion that this link contributes to the total\n // then adjust the link's value to reflect its proportion of the normalized node value.\n const updateLinkValue = (link: SLink) => {\n const value = linkValue(linkValues, link);\n link.unnormalizedValue = value;\n const linkRatio = value / originalNodeValue;\n link.value = Math.max(normalizedNodeValue * linkRatio, link.value);\n };\n node.sourceLinks!.forEach(updateLinkValue);\n node.targetLinks!.forEach(updateLinkValue);\n}\n\n/**\n * This is used for calculating the node non normalized value based on link non normalized value.\n * The links have the original weights. Computed nodes have the total weight of all incoming and outgoing links.\n */\nfunction populateNodeActualValue(data: ISankeyChartData, computedNodes: NodeValues, originalLinks: LinkValues) {\n data.links.forEach((link: SLink) => {\n if (!link.unnormalizedValue) {\n link.unnormalizedValue = linkValue(originalLinks, link);\n }\n });\n data.nodes.forEach((node: SNode) => {\n node.actualValue = computedNodes[node.nodeId as NodeId];\n });\n}\n\n/**\n * This is used to introduce dynamic padding for cases where the number of nodes in a column is huge\n * so that we maintain a node to space ratio for such columns as if we fail to do so the\n * chart is devoid of nodes and only shows links.\n */\n// This is exported for unit tests\nexport function adjustPadding(sankey: SankeyLayoutGenerator, height: number, nodesInColumn: NodesInColumns): void {\n let padding = sankey.nodePadding();\n const minPadding = PADDING_PERCENTAGE * height;\n Object.values(nodesInColumn).forEach((column: SNode[]) => {\n const totalPaddingInColumn = height - d3Sum(column, (node: SNode) => node.y1! - node.y0!);\n if (minPadding < totalPaddingInColumn) {\n // Here we are calculating the min of default and calculated padding, we will not increase the padding\n // in any scenario.\n padding = Math.min(padding, minPadding / (column.length - 1));\n }\n });\n sankey.nodePadding(padding);\n}\n\nfunction idFromNumberOrSNode(node: SNode | number): NodeId {\n if (typeof node === 'number') {\n return node;\n }\n return node.nodeId as NodeId;\n}\n\n/**\n * Duplicates the supplied chart data so that we do not alter the original.\n * @param data The data to duplicate.\n * @returns The duplicated data.\n */\nfunction duplicateData(data: ISankeyChartData): ISankeyChartData {\n return {\n nodes: data.nodes.map(\n (node: SNode): SNode => ({\n ...node,\n }),\n ),\n links: data.links.map(\n (link: SLink): SLink => ({\n ...link,\n }),\n ),\n };\n}\n\nfunction valuesOfNodes(nodes: SNode[]): NodeValues {\n const result: NodeValues = {};\n nodes.forEach((node: SNode) => {\n result[node.nodeId as NodeId] = node.value!;\n });\n return result;\n}\n\nfunction valuesOfLinks(links: SLink[]): LinkValues {\n const result: LinkValues = {};\n links.forEach((link: SLink) => {\n const sourceId = idFromNumberOrSNode(link.source);\n let sourceToTarget = result[sourceId];\n if (!sourceToTarget) {\n sourceToTarget = {};\n result[sourceId] = sourceToTarget;\n }\n sourceToTarget[idFromNumberOrSNode(link.target)] = link.value;\n });\n return result;\n}\n\nfunction linkValue(originalLinks: LinkValues, link: SLink): number {\n return originalLinks[idFromNumberOrSNode(link.source)][idFromNumberOrSNode(link.target)];\n}\n\n// This is exported for unit tests.\nexport function preRenderLayout(\n margins: IMargins,\n containerWidth: number,\n containerHeight: number,\n isRtl: boolean,\n): { sankey: SankeyLayoutGenerator; height: number; width: number } {\n const { left, right, top, bottom } = margins;\n const width = containerWidth - right!;\n const height = containerHeight - bottom! > 0 ? containerHeight - bottom! : 0;\n\n const sankey = d3Sankey()\n .nodeWidth(124)\n .extent([\n [left!, top!],\n [width - 1, height - 6],\n ])\n .nodeAlign(isRtl ? sankeyRight : sankeyJustify);\n\n return { sankey, height, width };\n}\n\nexport class SankeyChartBase extends React.Component<ISankeyChartProps, ISankeyChartState> {\n private chartContainer: HTMLDivElement;\n private _reqID: number;\n private _calloutId: string;\n private _linkId: string;\n private _margins: IMargins;\n private _isRtl: boolean = getRTL();\n private _normalizeData: NormalizeFunction;\n private _emptyChartId: string;\n\n constructor(props: ISankeyChartProps) {\n super(props);\n this.state = {\n containerHeight: 468,\n containerWidth: 912,\n selectedState: false,\n selectedLinks: new Set<number>(),\n selectedNodes: new Set<number>(),\n shouldOverflow: false,\n isCalloutVisible: false,\n };\n this._calloutId = getId('callout');\n this._linkId = getId('link');\n this._margins = { top: 36, right: 48, bottom: 32, left: 48 };\n this._normalizeData = memoizeFunction((data: ISankeyChartData, containerWidth: number, containerHeight: number) =>\n this._normalizeSankeyData(data, containerWidth, containerHeight),\n );\n this._emptyChartId = getId('_SankeyChart_empty');\n }\n\n public componentDidMount(): void {\n this._fitParentContainer();\n }\n\n public componentDidUpdate(prevProps: ISankeyChartProps): void {\n if (prevProps.shouldResize !== this.props.shouldResize) {\n this._fitParentContainer();\n }\n }\n\n public componentWillUnmount(): void {\n cancelAnimationFrame(this._reqID);\n }\n\n public render(): React.ReactNode {\n if (!this._isChartEmpty()) {\n const { theme, className, styles, pathColor } = this.props;\n const state = this.state;\n const classNames: IProcessedStyleSet<ISankeyChartStyles> = getClassNames(styles!, {\n theme: theme!,\n width: state.containerWidth,\n height: state.containerHeight,\n pathColor,\n className,\n });\n\n const {\n data: sankeyChartData,\n width,\n height,\n } = this._normalizeData(this.props.data.SankeyChartData!, state.containerWidth, state.containerHeight);\n // NEXT: Move the following into _normalizeSankeyData to see if we can cache computation of\n // colors, nodes, and links.\n const dataNodes = sankeyChartData.nodes;\n this._assignNodeColors(dataNodes); // This can probably safely move.\n const nodeData = this._createNodes(classNames, dataNodes);\n const linkData = this._createLinks(sankeyChartData.links);\n\n const calloutProps = {\n isCalloutVisible: state.isCalloutVisible,\n directionalHint: DirectionalHint.topAutoEdge,\n id: `toolTip${this._calloutId}`,\n target: state.refSelected,\n color: state.color,\n XValue: state.xCalloutValue,\n YValue: state.yCalloutValue ? state.yCalloutValue : state.dataForHoverCard,\n descriptionMessage: state.descriptionMessage,\n isBeakVisible: false,\n gapSpace: 15,\n onDismiss: this._onCloseCallout,\n className: classNames.calloutContentRoot,\n preventDismissOnLostFocus: true,\n };\n return (\n <div\n className={classNames.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => (this.chartContainer = rootElem)}\n onMouseLeave={this._onCloseCallout}\n >\n <FocusZone\n direction={FocusZoneDirection.bidirectional}\n isCircularNavigation={true}\n handleTabKey={FocusZoneTabbableElements.all}\n >\n <svg width={width} height={height} id={getId('sankeyChart')}>\n <g className={classNames.links} strokeOpacity={1}>\n {linkData}\n </g>\n <g className={classNames.nodes}>{nodeData}</g>\n {calloutProps.isCalloutVisible && (\n <Callout {...calloutProps}>\n <ChartHoverCard\n XValue={calloutProps.XValue}\n YValue={calloutProps.YValue}\n color={calloutProps.color}\n descriptionMessage={calloutProps.descriptionMessage ? calloutProps.descriptionMessage : ''}\n />\n </Callout>\n )}\n </svg>\n </FocusZone>\n </div>\n );\n }\n return (\n <div\n id={this._emptyChartId}\n role={'alert'}\n style={{ opacity: '0' }}\n aria-label={'Graph has no data to display'} // TODO: Localize this string\n />\n );\n }\n\n private _normalizeSankeyData(\n data: ISankeyChartData,\n containerWidth: number,\n containerHeight: number,\n ): NormalizedData {\n const { sankey, height, width } = preRenderLayout(this._margins, containerWidth, containerHeight, this._isRtl);\n // Clone the data before mutating it (via the SankeyLayoutGenerator) so that we don't mutate the original data.\n const transformed: ISankeyChartData = duplicateData(data);\n sankey(transformed);\n const nodesInColumn = groupNodesByColumn(transformed);\n // Keep track of the original values of the links and their acccumulated values in the nodes\n // Setting these in external objects so they cannot be mutated by other code.\n // The IDs of nodes can be numbers or strings. But, the IDs of links are always the index into the \"nodes\" array.\n // After the sankey layout is computed, the each link's `source` and `target` will have the ID of the node in the\n // type originally specified in the Nodes array. Consequently, we get the values of those links after the sankey\n // transformation.\n const nodeValues = valuesOfNodes(transformed.nodes);\n const linkValues = valuesOfLinks(transformed.links);\n adjustOnePercentHeightNodes(nodesInColumn, nodeValues, linkValues);\n adjustPadding(sankey, height - 6, nodesInColumn);\n // `sankey` is called a second time, probably to re-layout the nodes with the one-percent adjusted weights.\n // NOTE: The second call to `sankey` is required to allow links to be hoverable.\n // Without the second call, the links are not hoverable.\n sankey(transformed);\n populateNodeActualValue(transformed, nodeValues, linkValues);\n return {\n width,\n height,\n data: transformed,\n };\n }\n\n private _createLinks(dataLinks: SLink[]): React.ReactNode[] | undefined {\n const links: React.ReactNode[] = [];\n\n if (dataLinks) {\n const linkId = this._linkId;\n dataLinks.forEach((singleLink: SLink, index: number) => {\n const onMouseOut = () => {\n this._onStreamLeave(singleLink);\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = (d: any) => {\n return [\n { x: d.source.x1, y0: d.y0 + d.width / 2, y1: d.y0 - d.width / 2 },\n { x: d.target.x0, y0: d.y1 + d.width / 2, y1: d.y1 - d.width / 2 },\n ];\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dataPoints: Array<any> = data(singleLink);\n const linkArea = d3Area()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((p: any) => p.x)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y0((p: any) => p.y0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y1((p: any) => p.y1)\n .curve(d3CurveBasis);\n const gradientUrl = `url(#gradient-${linkId}-${index})`;\n const link = (\n <g key={`${linkId}-${index}`}>\n <defs>\n <linearGradient id={`gradient-${linkId}-${index}`} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0\" stopColor={(singleLink.source as SNode).color} />\n <stop offset=\"100%\" stopColor={(singleLink.target as SNode).color} />\n </linearGradient>\n </defs>\n <path\n d={linkArea(dataPoints)!}\n id={getId('link')}\n fill={this._fillStreamColors(singleLink, gradientUrl)}\n stroke={this._fillStreamBorder(singleLink, gradientUrl)}\n strokeWidth=\"2\"\n strokeOpacity={this._getOpacityStreamBorder(singleLink)}\n onMouseOver={this._onStreamHover.bind(this, singleLink)}\n onMouseOut={onMouseOut}\n onFocus={this._onFocusLink.bind(this, singleLink)}\n onBlur={this._onBlur}\n fillOpacity={this._getOpacityStream(singleLink)}\n data-is-focusable={true}\n aria-label={`link from ${(singleLink.source as SNode).name} to ${\n (singleLink.target as SNode).name\n } with weight ${singleLink!.unnormalizedValue}`} // TODO: localize this string\n role=\"img\"\n />\n </g>\n );\n links.push(link);\n });\n }\n return links;\n }\n\n private _createNodes(\n classNames: IProcessedStyleSet<ISankeyChartStyles>,\n dataNodes: SNode[],\n ): React.ReactNode[] | undefined {\n const nodes: React.ReactNode[] = [];\n\n if (dataNodes) {\n const state = this.state;\n dataNodes.forEach((singleNode: SNode, index: number) => {\n const onMouseOut = () => {\n this._onLeave(singleNode);\n };\n const height = singleNode.y1! - singleNode.y0! > 0 ? singleNode.y1! - singleNode.y0! : 0;\n let padding = 8;\n let textLengthForNodeWeight = 0;\n\n // If the nodeWeight is in the same line as node description an extra padding\n // of 6 px is required between node description and node weight.\n if (height < MIN_HEIGHT_FOR_DOUBLINE_TYPE) {\n padding = padding + 6;\n const tspan = select('.nodeName').append('text').attr('class', 'tempText').append('tspan').text(null);\n tspan.text(singleNode.actualValue!);\n if (tspan.node() !== null) {\n textLengthForNodeWeight = tspan.node()!.getComputedTextLength();\n padding = padding + textLengthForNodeWeight;\n }\n tspan.text(null);\n selectAll('.tempText').remove();\n }\n // Since the total width of the node is 124 and we are giving margin of 8px from the left .\n //So the actual value on which it will be truncated is 124-8=116.\n const truncatedname: string = this._truncateText(singleNode.name, 116, padding);\n const isTruncated: boolean = truncatedname.slice(-3) === '...';\n const id = getId('tooltip');\n const div = select('body').append('div').attr('id', id).attr('class', classNames.toolTip!).style('opacity', 0);\n const nodeId = getId('nodeBar');\n const node = (\n <g key={index} id={getId('nodeGElement')}>\n <rect\n x={singleNode.x0}\n y={singleNode.y0}\n height={height}\n width={singleNode.x1! - singleNode.x0!}\n fill={this._fillNodeColors(singleNode)}\n id={nodeId}\n onMouseOver={this._onHover.bind(this, singleNode)}\n onMouseOut={onMouseOut}\n onFocus={this._onCloseCallout.bind(this)}\n stroke={this._fillNodeBorder(singleNode)}\n strokeWidth=\"2\"\n opacity=\"1\"\n data-is-focusable={true}\n aria-label={`node ${singleNode.name} with weight ${singleNode.actualValue}`} // TODO: localize this string\n role=\"img\"\n />\n {singleNode.y1! - singleNode.y0! > MIN_HEIGHT_FOR_TYPE && (\n <g className={classNames.nodeTextContainer}>\n <g className=\"nodeName\">\n <text\n id={`${nodeId}-name`}\n x={singleNode.x0}\n y={singleNode.y0}\n dy={'1.2em'}\n dx={'0.4em'}\n textAnchor={this._isRtl ? 'end' : 'start'}\n fontWeight=\"regular\"\n aria-hidden=\"true\"\n fill={\n !(\n !state.selectedState ||\n (state.selectedState && state.selectedNodes.has(singleNode.index!) && state.selectedNode) ||\n (state.selectedState && !state.selectedNode)\n )\n ? DEFAULT_TEXT_COLOR\n : NON_SELECTED_TEXT_COLOR\n }\n fontSize={10}\n onMouseOver={this._showTooltip.bind(this, singleNode.name, isTruncated, div)}\n onMouseOut={this._hideTooltip.bind(this, div)}\n >\n {truncatedname}\n </text>\n </g>\n\n <text\n x={\n height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? singleNode.x0 : singleNode.x1! - textLengthForNodeWeight - 8\n }\n y={singleNode.y0}\n dy={height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? '2em' : '1em'}\n dx={height > MIN_HEIGHT_FOR_DOUBLINE_TYPE ? '0.4em' : '0em'}\n textAnchor={this._isRtl ? 'end' : 'start'}\n fontWeight=\"bold\"\n aria-hidden=\"true\"\n fill={\n !(\n !state.selectedState ||\n (state.selectedState && state.selectedNodes.has(singleNode.index!) && state.selectedNode) ||\n (state.selectedState && !state.selectedNode)\n )\n ? DEFAULT_TEXT_COLOR\n : NON_SELECTED_TEXT_COLOR\n }\n fontSize={14}\n >\n {singleNode.actualValue}\n </text>\n </g>\n )}\n </g>\n );\n nodes.push(node);\n });\n return nodes;\n }\n }\n\n private _onLeave(singleNode: SNode) {\n if (this.state.selectedState) {\n this.setState({\n selectedState: false,\n selectedNodes: new Set<number>(),\n selectedLinks: new Set<number>(),\n selectedNode: undefined,\n });\n }\n }\n\n private _onHover(singleNode: SNode, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent.persist();\n this._onCloseCallout();\n if (!this.state.selectedState) {\n const selectedLinks = getSelectedLinks(singleNode);\n const selectedNodes = getSelectedNodes(selectedLinks);\n selectedNodes.push(singleNode);\n this.setState({\n selectedState: true,\n selectedNodes: new Set<number>(Array.from(selectedNodes).map(node => node.index)),\n selectedLinks: new Set<number>(Array.from(selectedLinks).map(link => link.index!)),\n selectedNode: singleNode,\n refSelected: mouseEvent, //this._refArray.get(index),\n isCalloutVisible: singleNode.y1! - singleNode.y0! < MIN_HEIGHT_FOR_TYPE,\n color: singleNode.color,\n xCalloutValue: singleNode.name,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yCalloutValue: singleNode.actualValue! as any as string,\n });\n }\n }\n\n private _onStreamHover(singleLink: SLink, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent.persist();\n this._onCloseCallout();\n if (!this.state.selectedState) {\n const { selectedLinks, selectedNodes } = getSelectedLinksforStreamHover(singleLink);\n this.setState({\n selectedState: true,\n selectedNodes: new Set<number>(Array.from(selectedNodes).map(node => node.index!)),\n selectedLinks: new Set<number>(Array.from(selectedLinks).map(link => link.index!)),\n refSelected: mouseEvent,\n selectedLink: singleLink,\n isCalloutVisible: true,\n color: (singleLink.source as SNode).color,\n xCalloutValue: (singleLink.target as SNode).name,\n yCalloutValue: singleLink.unnormalizedValue!.toString(),\n descriptionMessage: 'from ' + (singleLink.source as SNode).name, // TODO: Does this need to be localized?\n });\n }\n }\n\n private _onStreamLeave(singleLink: SLink) {\n if (this.state.selectedState) {\n this.setState({\n selectedState: false,\n selectedNodes: new Set<number>(),\n selectedLinks: new Set<number>(),\n selectedLink: undefined,\n });\n }\n }\n\n private _onFocusLink(singleLink: SLink, element: React.FocusEvent<SVGElement>): void {\n element.persist();\n this._onCloseCallout();\n this.setState({\n refSelected: element.currentTarget,\n selectedLink: singleLink,\n isCalloutVisible: true,\n color: (singleLink.source as SNode).color,\n xCalloutValue: (singleLink.target as SNode).name,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n yCalloutValue: (singleLink.source as SNode).actualValue! as any as string,\n descriptionMessage: 'from ' + (singleLink.source as SNode).name, // TODO: Does this need to be localized?\n });\n }\n\n private _onCloseCallout = () => {\n this.setState({\n isCalloutVisible: false,\n refSelected: undefined,\n descriptionMessage: '',\n });\n };\n\n private _onBlur = (): void => {\n /**/\n };\n\n private _fillNodeColors = (singleNode: SNode): string | undefined => {\n const state = this.state;\n if (!state.selectedState) {\n return singleNode.color;\n } else if (state.selectedState && state.selectedNodes.has(singleNode.index!) && state.selectedNode) {\n return state.selectedNode.color;\n } else if (state.selectedState && !state.selectedNode) {\n return singleNode.color;\n }\n };\n\n /**\n * This is used to assign node fillcolors and borderColor cyclically when the user doesnt\n * provide color to individual node.\n */\n private _assignNodeColors(nodes: SNode[]) {\n let colors: string[];\n let borders: string[];\n const { colorsForNodes, borderColorsForNodes } = this.props;\n if (colorsForNodes && borderColorsForNodes) {\n colors = colorsForNodes;\n borders = borderColorsForNodes;\n } else {\n colors = DEFAULT_NODE_COLORS.map(color => color.fillColor);\n borders = DEFAULT_NODE_COLORS.map(color => color.borderColor);\n }\n let currentIndex = 0;\n nodes.forEach((node: SNode) => {\n if (!node.color && !node.borderColor) {\n node.color = colors[currentIndex];\n node.borderColor = borders[currentIndex];\n } else if (node.color && !node.borderColor) {\n node.borderColor = '#757575';\n } else if (node.borderColor && !node.color) {\n node.color = '#F5F5F5';\n }\n currentIndex = (currentIndex + 1) % colors.length;\n });\n }\n\n private _fillStreamColors(singleLink: SLink, gradientUrl: string): string | undefined {\n const state = this.state;\n if (state.selectedState && state.selectedLinks.has(singleLink.index!) && state.selectedNode) {\n return state.selectedNode.color;\n } else if (state.selectedState && state.selectedLinks.has(singleLink.index!)) {\n return gradientUrl;\n }\n }\n\n private _fillStreamBorder(singleLink: SLink, gradientUrl: string): string {\n const state = this.state;\n if (!state.selectedState) {\n return NON_SELECTED_NODE_AND_STREAM_COLOR;\n } else if (state.selectedState && state.selectedLinks.has(singleLink.index!) && state.selectedNode) {\n return state.selectedNode.borderColor!;\n } else if (state.selectedState && state.selectedLinks.has(singleLink.index!)) {\n return gradientUrl;\n }\n return NON_SELECTED_NODE_AND_STREAM_COLOR;\n }\n\n private _fillNodeBorder = (singleNode: SNode): string => {\n const state = this.state;\n if (!state.selectedState) {\n return singleNode.borderColor!;\n } else if (state.selectedState && state.selectedNodes.has(singleNode.index!) && state.selectedNode) {\n return state.selectedNode.borderColor!;\n } else if (state.selectedState && state.selectedNodes.has(singleNode.index!)) {\n return singleNode.borderColor!;\n }\n return singleNode.borderColor!;\n };\n\n private _getOpacityStream(singleLink: SLink): number {\n const state = this.state;\n if (state.selectedState) {\n if (!state.selectedLinks.has(singleLink.index!)) {\n return NON_SELECTED_OPACITY;\n } else if (state.selectedLinks.has(singleLink.index!) && !state.selectedNode) {\n return SELECTED_STREAM_OPACITY;\n }\n }\n return REST_STREAM_OPACITY;\n }\n\n private _getOpacityStreamBorder(singleLink: SLink): number {\n const state = this.state;\n if (state.selectedState && !state.selectedLinks.has(singleLink.index!) && !state.selectedNode) {\n return NON_SELECTED_STREAM_BORDER_OPACITY;\n }\n\n return NON_SELECTED_OPACITY;\n }\n\n private _fitParentContainer(): void {\n const { containerWidth, containerHeight } = this.state;\n this._reqID = requestAnimationFrame(() => {\n // NOTE: Calls to this method trigger a re-render.\n const container = this.props.parentRef ? this.props.parentRef : this.chartContainer;\n const currentContainerWidth = container && container.getBoundingClientRect().width;\n const currentContainerHeight = container && container.getBoundingClientRect().height;\n const shouldResize = containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight;\n if (shouldResize) {\n this.setState({\n containerWidth: currentContainerWidth,\n containerHeight: currentContainerHeight,\n });\n }\n });\n }\n\n /**\n * @param text is the text which we are trying to truncate\n * @param rectangleWidth is the width of the rectangle which will contain the text\n * @param padding is the space we need to leave between the rect lines and other text\n * @param nodeWeight is the text if present needs to be accomodate in the same line as text.\n * @returns the truncated text , if truncated given the above parameters.\n */\n private _truncateText(text: string, rectangleWidth: number, padding: number) {\n const textLengthForNodeName = rectangleWidth - padding;\n let elipsisLength = 0;\n const tspan = select('.nodeName')\n .append('text')\n .attr('class', 'tempText')\n .attr('font-size', '10')\n .append('tspan')\n .text(null);\n tspan.text(text);\n if (tspan.node() !== null && tspan.node()!.getComputedTextLength() <= textLengthForNodeName) {\n return text;\n }\n tspan.text(null);\n tspan.text('...');\n if (tspan.node() !== null) {\n elipsisLength = tspan.node()!.getComputedTextLength();\n }\n tspan.text(null);\n let line: string = '';\n for (let i = 0; i < text.length; i++) {\n line += text[i];\n tspan.text(line);\n if (tspan.node() !== null) {\n const w = tspan.node()!.getComputedTextLength();\n if (w >= textLengthForNodeName - elipsisLength) {\n line = line.slice(0, -1);\n line += '...';\n break;\n }\n }\n }\n tspan.text(null);\n selectAll('.tempText').remove();\n return line;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _showTooltip(text: string, checkTrcuncated: boolean, div: any, evt: any) {\n if (checkTrcuncated) {\n //Fixing tooltip position by attaching it to the element rather than page\n div.style('opacity', 0.9);\n div\n .html(text)\n .style('left', evt.pageX + 'px')\n .style('top', evt.pageY - 28 + 'px');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _hideTooltip(div: any) {\n div.style('opacity', 0);\n }\n\n private _isChartEmpty() {\n const sankeyChartData = this.props.data?.SankeyChartData;\n return !(sankeyChartData && sankeyChartData.nodes.length > 0 && sankeyChartData.links.length > 0);\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  define(["require", "exports", "@fluentui/set-version"], function (require, exports, set_version_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- (0, set_version_1.setVersion)('@fluentui/react-charting', '5.19.22');
4
+ (0, set_version_1.setVersion)('@fluentui/react-charting', '5.19.24');
5
5
  });
6
6
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../src/","sources":["version.ts"],"names":[],"mappings":";;;IAGA,IAAA,wBAAU,EAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC","sourcesContent":["// Do not modify this file; it is generated as part of publish.\n// The checked in version is a placeholder only and will not be updated.\nimport { setVersion } from '@fluentui/set-version';\nsetVersion('@fluentui/react-charting', '5.19.22');"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"../src/","sources":["version.ts"],"names":[],"mappings":";;;IAGA,IAAA,wBAAU,EAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC","sourcesContent":["// Do not modify this file; it is generated as part of publish.\n// The checked in version is a placeholder only and will not be updated.\nimport { setVersion } from '@fluentui/set-version';\nsetVersion('@fluentui/react-charting', '5.19.24');"]}
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { IGaugeChartProps } from './GaugeChart.types';
2
+ import { IGaugeChartProps, IGaugeChartSegment, GaugeValueFormat, GaugeChartVariant } from './GaugeChart.types';
3
3
  import { IYValueHover } from '../../index';
4
4
  export declare const ARC_PADDING = 2;
5
5
  export declare const BREAKPOINTS: {
@@ -7,6 +7,9 @@ export declare const BREAKPOINTS: {
7
7
  arcWidth: number;
8
8
  fontSize: number;
9
9
  }[];
10
+ export declare const calcNeedleRotation: (chartValue: number, minValue: number, maxValue: number) => number;
11
+ export declare const getSegmentLabel: (segment: IExtendedSegment, minValue: number, maxValue: number, variant?: GaugeChartVariant, isAriaLabel?: boolean) => string;
12
+ export declare const getChartValueLabel: (chartValue: number, minValue: number, maxValue: number, chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string) | undefined, forCallout?: boolean) => string;
10
13
  interface IYValue extends Omit<IYValueHover, 'y'> {
11
14
  y?: string | number;
12
15
  }
@@ -21,14 +24,18 @@ export interface IGaugeChartState {
21
24
  width: number;
22
25
  height: number;
23
26
  }
27
+ export interface IExtendedSegment extends IGaugeChartSegment {
28
+ start: number;
29
+ end: number;
30
+ }
24
31
  export declare class GaugeChartBase extends React.Component<IGaugeChartProps, IGaugeChartState> {
25
32
  private _classNames;
26
33
  private _isRTL;
27
34
  private _innerRadius;
28
35
  private _outerRadius;
29
36
  private _minValue;
37
+ private _maxValue;
30
38
  private _segments;
31
- private _sweepFraction;
32
39
  private _calloutAnchor;
33
40
  private _rootElem;
34
41
  private _margins;
@@ -38,7 +45,7 @@ export declare class GaugeChartBase extends React.Component<IGaugeChartProps, IG
38
45
  render(): React.ReactNode;
39
46
  private _getMargins;
40
47
  private _getStylesBasedOnBreakpoint;
41
- private _initProps;
48
+ private _processProps;
42
49
  private _renderNeedle;
43
50
  private _renderLegends;
44
51
  /**
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GaugeChartBase = exports.BREAKPOINTS = exports.ARC_PADDING = void 0;
3
+ exports.GaugeChartBase = exports.getChartValueLabel = exports.getSegmentLabel = exports.calcNeedleRotation = exports.BREAKPOINTS = exports.ARC_PADDING = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var React = require("react");
6
6
  var d3_shape_1 = require("d3-shape");
@@ -28,6 +28,49 @@ exports.BREAKPOINTS = [
28
28
  { minRadius: 142, arcWidth: 32, fontSize: 40 },
29
29
  ];
30
30
  var getClassNames = (0, Utilities_1.classNamesFunction)();
31
+ var calcNeedleRotation = function (chartValue, minValue, maxValue) {
32
+ var needleRotation = ((chartValue - minValue) / (maxValue - minValue)) * 180;
33
+ if (needleRotation < 0) {
34
+ needleRotation = 0;
35
+ }
36
+ else if (needleRotation > 180) {
37
+ needleRotation = 180;
38
+ }
39
+ return needleRotation;
40
+ };
41
+ exports.calcNeedleRotation = calcNeedleRotation;
42
+ var getSegmentLabel = function (segment, minValue, maxValue, variant, isAriaLabel) {
43
+ if (isAriaLabel === void 0) { isAriaLabel = false; }
44
+ if (isAriaLabel) {
45
+ return minValue === 0 && variant === GaugeChart_types_1.GaugeChartVariant.SingleSegment
46
+ ? "".concat(segment.legend, ", ").concat(segment.size, " out of ").concat(maxValue, " or ").concat(((segment.size / maxValue) * 100).toFixed(), "%")
47
+ : "".concat(segment.legend, ", ").concat(segment.start, " to ").concat(segment.end);
48
+ }
49
+ return minValue === 0 && variant === GaugeChart_types_1.GaugeChartVariant.SingleSegment
50
+ ? "".concat(segment.size, " (").concat(((segment.size / maxValue) * 100).toFixed(), "%)")
51
+ : "".concat(segment.start, " - ").concat(segment.end);
52
+ };
53
+ exports.getSegmentLabel = getSegmentLabel;
54
+ var getChartValueLabel = function (chartValue, minValue, maxValue, chartValueFormat, forCallout) {
55
+ if (forCallout === void 0) { forCallout = false; }
56
+ if (forCallout) {
57
+ // When displaying the chart value as a percentage, use fractions in the callout, and vice versa.
58
+ // This helps clarify the actual value and avoid repetition.
59
+ return minValue !== 0
60
+ ? chartValue.toString()
61
+ : chartValueFormat === GaugeChart_types_1.GaugeValueFormat.Fraction
62
+ ? "".concat(((chartValue / maxValue) * 100).toFixed(), "%")
63
+ : "".concat(chartValue, "/").concat(maxValue);
64
+ }
65
+ return typeof chartValueFormat === 'function'
66
+ ? chartValueFormat([chartValue - minValue, maxValue - minValue])
67
+ : minValue !== 0
68
+ ? chartValue.toString()
69
+ : chartValueFormat === GaugeChart_types_1.GaugeValueFormat.Fraction
70
+ ? "".concat(chartValue, "/").concat(maxValue)
71
+ : "".concat(((chartValue / maxValue) * 100).toFixed(), "%");
72
+ };
73
+ exports.getChartValueLabel = getChartValueLabel;
31
74
  var GaugeChartBase = /** @class */ (function (_super) {
32
75
  tslib_1.__extends(GaugeChartBase, _super);
33
76
  function GaugeChartBase(props) {
@@ -55,22 +98,30 @@ var GaugeChartBase = /** @class */ (function (_super) {
55
98
  chartValueSize: exports.BREAKPOINTS[0].fontSize,
56
99
  };
57
100
  };
58
- _this._initProps = function () {
101
+ _this._processProps = function () {
59
102
  var _a = _this.props, _b = _a.minValue, minValue = _b === void 0 ? 0 : _b, maxValue = _a.maxValue, theme = _a.theme;
60
- var segments = Array.from(_this.props.segments);
61
103
  var total = minValue;
62
- segments.forEach(function (segment, index) {
63
- total += segment.size;
64
- segment.color =
65
- typeof segment.color !== 'undefined'
104
+ var segments = _this.props.segments.map(function (segment, index) {
105
+ var size = Math.max(segment.size, 0);
106
+ total += size;
107
+ return {
108
+ legend: segment.legend,
109
+ size: size,
110
+ color: typeof segment.color !== 'undefined'
66
111
  ? (0, index_1.getColorFromToken)(segment.color, theme.isInverted)
67
- : (0, index_1.getNextColor)(index, 0, theme.isInverted);
112
+ : (0, index_1.getNextColor)(index, 0, theme.isInverted),
113
+ accessibilityData: segment.accessibilityData,
114
+ start: total - size,
115
+ end: total,
116
+ };
68
117
  });
69
118
  if (typeof maxValue !== 'undefined' && total < maxValue) {
70
119
  segments.push({
71
120
  legend: 'Unknown',
72
121
  size: maxValue - total,
73
122
  color: theme.palette.neutralLight,
123
+ start: total,
124
+ end: maxValue,
74
125
  });
75
126
  total = maxValue;
76
127
  }
@@ -93,15 +144,15 @@ var GaugeChartBase = /** @class */ (function (_super) {
93
144
  segmentIndex: _this._isRTL ? segments.length - 1 - index : index,
94
145
  };
95
146
  });
147
+ _this._minValue = minValue;
148
+ _this._maxValue = total;
149
+ _this._segments = segments;
96
150
  return {
97
- minValue: minValue,
98
- maxValue: total,
99
- segments: segments,
100
151
  arcs: arcs,
101
152
  };
102
153
  };
103
154
  _this._renderNeedle = function () {
104
- var needleRotation = (_this._sweepFraction[0] / _this._sweepFraction[1]) * 180;
155
+ var needleRotation = (0, exports.calcNeedleRotation)(_this.props.chartValue, _this._minValue, _this._maxValue);
105
156
  var rtlSafeNeedleRotation = _this._isRTL ? 180 - needleRotation : needleRotation;
106
157
  var strokeWidth = 2;
107
158
  var halfStrokeWidth = strokeWidth / 2;
@@ -173,17 +224,13 @@ var GaugeChartBase = /** @class */ (function (_super) {
173
224
  }
174
225
  _this._calloutAnchor = legend;
175
226
  var hoverXValue = 'Current value is ' +
176
- (_this.props.chartValueFormat === GaugeChart_types_1.GaugeValueFormat.Fraction
177
- ? "".concat(((_this._sweepFraction[0] / _this._sweepFraction[1]) * 100).toFixed(), "%")
178
- : "".concat(_this._sweepFraction[0], "/").concat(_this._sweepFraction[1]));
179
- var total = _this._minValue;
180
- var hoverYValues = _this._segments.map(function (segment, index) {
227
+ (0, exports.getChartValueLabel)(_this.props.chartValue, _this._minValue, _this._maxValue, _this.props.chartValueFormat, true);
228
+ var hoverYValues = _this._segments.map(function (segment) {
181
229
  var yValue = {
182
230
  legend: segment.legend,
183
- y: "".concat(total + (index > 0 ? 1 : 0), " - ").concat(total + segment.size),
231
+ y: (0, exports.getSegmentLabel)(segment, _this._minValue, _this._maxValue, _this.props.variant),
184
232
  color: segment.color,
185
233
  };
186
- total += segment.size;
187
234
  return yValue;
188
235
  });
189
236
  _this.setState(tslib_1.__assign({ calloutTarget: target,
@@ -236,7 +283,7 @@ var GaugeChartBase = /** @class */ (function (_super) {
236
283
  !!calloutProps.descriptionMessage && (React.createElement("div", { className: _this._classNames.descriptionMessage }, calloutProps.descriptionMessage)))));
237
284
  };
238
285
  _this._margins = _this._getMargins();
239
- _this._legendsHeight = !_this.props.hideLegend ? 24 : 0;
286
+ _this._legendsHeight = !props.hideLegend ? 24 : 0;
240
287
  _this.state = {
241
288
  hoveredLegend: '',
242
289
  selectedLegend: '',
@@ -248,7 +295,7 @@ var GaugeChartBase = /** @class */ (function (_super) {
248
295
  width: 140 + _this._margins.left + _this._margins.right,
249
296
  height: 70 + _this._margins.top + _this._margins.bottom + _this._legendsHeight,
250
297
  };
251
- _this._isRTL = (0, Utilities_1.getRTL)();
298
+ _this._isRTL = (0, Utilities_1.getRTL)(props.theme);
252
299
  _this._calloutAnchor = '';
253
300
  return _this;
254
301
  }
@@ -269,10 +316,7 @@ var GaugeChartBase = /** @class */ (function (_super) {
269
316
  this._outerRadius = Math.min((width - (this._margins.left + this._margins.right)) / 2, height - (this._margins.top + this._margins.bottom + this._legendsHeight));
270
317
  var _a = this._getStylesBasedOnBreakpoint(), arcWidth = _a.arcWidth, chartValueSize = _a.chartValueSize;
271
318
  this._innerRadius = this._outerRadius - arcWidth;
272
- var _b = this._initProps(), minValue = _b.minValue, maxValue = _b.maxValue, segments = _b.segments, arcs = _b.arcs;
273
- this._minValue = minValue;
274
- this._segments = segments;
275
- this._sweepFraction = [this.props.chartValue - this._minValue, maxValue - this._minValue];
319
+ var arcs = this._processProps().arcs;
276
320
  this._classNames = getClassNames(this.props.styles, {
277
321
  theme: this.props.theme,
278
322
  className: this.props.className,
@@ -287,25 +331,21 @@ var GaugeChartBase = /** @class */ (function (_super) {
287
331
  this.props.chartTitle && (React.createElement("text", { x: 0, y: -(this._outerRadius + TITLE_OFFSET), textAnchor: "middle", className: this._classNames.chartTitle }, this.props.chartTitle)),
288
332
  !this.props.hideMinMax && (React.createElement(React.Fragment, null,
289
333
  React.createElement("text", { x: (this._isRTL ? 1 : -1) * (this._outerRadius + LABEL_OFFSET), y: 0, textAnchor: "end", className: this._classNames.limits, role: "img", "aria-label": "Min value: ".concat(this._minValue) }, (0, index_1.formatValueWithSIPrefix)(this._minValue)),
290
- React.createElement("text", { x: (this._isRTL ? -1 : 1) * (this._outerRadius + LABEL_OFFSET), y: 0, textAnchor: "start", className: this._classNames.limits, role: "img", "aria-label": "Max value: ".concat(maxValue) }, (0, index_1.formatValueWithSIPrefix)(maxValue)))),
291
- arcs.map(function (arc, index) { return (React.createElement("path", tslib_1.__assign({ key: index, d: arc.d, fill: _this._segments[arc.segmentIndex].color, fillOpacity: _this._legendHighlighted(_this._segments[arc.segmentIndex].legend) || _this._noLegendHighlighted()
292
- ? 1
293
- : 0.1, strokeWidth: _this.state.focusedElement === _this._segments[arc.segmentIndex].legend ? exports.ARC_PADDING : 0, className: _this._classNames.segment }, (0, index_1.getAccessibleDataObject)(tslib_1.__assign({ ariaLabel: "".concat(_this._segments[arc.segmentIndex].legend, ", ").concat(_this._segments[arc.segmentIndex].size, " out of ").concat(maxValue - _this._minValue, " or ").concat(((_this._segments[arc.segmentIndex].size / (maxValue - _this._minValue)) *
294
- 100).toFixed(), "%") }, _this._segments[arc.segmentIndex].accessibilityData), 'img', true), { onFocus: function (e) { return _this._handleFocus(e, _this._segments[arc.segmentIndex].legend); }, onBlur: _this._handleBlur, onMouseEnter: function (e) { return _this._handleMouseOver(e, _this._segments[arc.segmentIndex].legend); }, onMouseMove: function (e) { return _this._handleMouseOver(e, _this._segments[arc.segmentIndex].legend); } }))); }),
334
+ React.createElement("text", { x: (this._isRTL ? -1 : 1) * (this._outerRadius + LABEL_OFFSET), y: 0, textAnchor: "start", className: this._classNames.limits, role: "img", "aria-label": "Max value: ".concat(this._maxValue) }, (0, index_1.formatValueWithSIPrefix)(this._maxValue)))),
335
+ arcs.map(function (arc, index) {
336
+ var segment = _this._segments[arc.segmentIndex];
337
+ return (React.createElement("path", tslib_1.__assign({ key: index, d: arc.d, fill: segment.color, fillOpacity: _this._legendHighlighted(segment.legend) || _this._noLegendHighlighted() ? 1 : 0.1, strokeWidth: _this.state.focusedElement === segment.legend ? exports.ARC_PADDING : 0, className: _this._classNames.segment }, (0, index_1.getAccessibleDataObject)(tslib_1.__assign({ ariaLabel: (0, exports.getSegmentLabel)(segment, _this._minValue, _this._maxValue, _this.props.variant, true) }, segment.accessibilityData), 'img', true), { onFocus: function (e) { return _this._handleFocus(e, segment.legend); }, onBlur: _this._handleBlur, onMouseEnter: function (e) { return _this._handleMouseOver(e, segment.legend); }, onMouseMove: function (e) { return _this._handleMouseOver(e, segment.legend); } })));
338
+ }),
295
339
  this._renderNeedle(),
296
340
  React.createElement("g", { onMouseEnter: function (e) { return _this._handleMouseOver(e, 'Chart value'); }, onMouseMove: function (e) { return _this._handleMouseOver(e, 'Chart value'); } },
297
- React.createElement(SVGTooltipText_1.SVGTooltipText, { content: typeof this.props.chartValueFormat === 'function'
298
- ? this.props.chartValueFormat(this._sweepFraction)
299
- : this.props.chartValueFormat === GaugeChart_types_1.GaugeValueFormat.Fraction
300
- ? "".concat(this._sweepFraction[0], "/").concat(this._sweepFraction[1])
301
- : "".concat(((this._sweepFraction[0] / this._sweepFraction[1]) * 100).toFixed(), "%"), textProps: {
341
+ React.createElement(SVGTooltipText_1.SVGTooltipText, { content: (0, exports.getChartValueLabel)(this.props.chartValue, this._minValue, this._maxValue, this.props.chartValueFormat), textProps: {
302
342
  x: 0,
303
343
  y: 0,
304
344
  textAnchor: 'middle',
305
345
  className: this._classNames.chartValue,
306
346
  role: 'img',
307
- 'aria-label': "Current value: ".concat(this._sweepFraction[0], " out of ").concat(this._sweepFraction[1], ", or ").concat(((this._sweepFraction[0] / this._sweepFraction[1]) *
308
- 100).toFixed(), "%"),
347
+ 'aria-label': 'Current value: ' +
348
+ (0, exports.getChartValueLabel)(this.props.chartValue, this._minValue, this._maxValue, this.props.chartValueFormat),
309
349
  }, maxWidth: this._innerRadius * 2 - 24, wrapContent: this._wrapContent })),
310
350
  this.props.sublabel && (React.createElement(SVGTooltipText_1.SVGTooltipText, { content: this.props.sublabel, textProps: {
311
351
  x: 0,