@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"]}
package/lib/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Do not modify this file; it is generated as part of publish.
2
2
  // The checked in version is a placeholder only and will not be updated.
3
3
  import { setVersion } from '@fluentui/set-version';
4
- setVersion('@fluentui/react-charting', '5.19.22');
4
+ setVersion('@fluentui/react-charting', '5.19.24');
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"../src/","sources":["version.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,wEAAwE;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,UAAU,CAAC,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":"AAAA,+DAA+D;AAC/D,wEAAwE;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,UAAU,CAAC,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,7 +1,7 @@
1
1
  define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib/Utilities", "./GaugeChart.types", "../../utilities/index", "../Legends/index", "@fluentui/react-focus", "@fluentui/react/lib/Callout", "../../utilities/SVGTooltipText", "d3-selection"], function (require, exports, tslib_1, React, d3_shape_1, Utilities_1, GaugeChart_types_1, index_1, index_2, react_focus_1, Callout_1, SVGTooltipText_1, d3_selection_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.GaugeChartBase = exports.BREAKPOINTS = exports.ARC_PADDING = void 0;
4
+ exports.GaugeChartBase = exports.getChartValueLabel = exports.getSegmentLabel = exports.calcNeedleRotation = exports.BREAKPOINTS = exports.ARC_PADDING = void 0;
5
5
  var GAUGE_MARGIN = 16;
6
6
  var LABEL_WIDTH = 36;
7
7
  var LABEL_HEIGHT = 16;
@@ -18,6 +18,49 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
18
18
  { minRadius: 142, arcWidth: 32, fontSize: 40 },
19
19
  ];
20
20
  var getClassNames = (0, Utilities_1.classNamesFunction)();
21
+ var calcNeedleRotation = function (chartValue, minValue, maxValue) {
22
+ var needleRotation = ((chartValue - minValue) / (maxValue - minValue)) * 180;
23
+ if (needleRotation < 0) {
24
+ needleRotation = 0;
25
+ }
26
+ else if (needleRotation > 180) {
27
+ needleRotation = 180;
28
+ }
29
+ return needleRotation;
30
+ };
31
+ exports.calcNeedleRotation = calcNeedleRotation;
32
+ var getSegmentLabel = function (segment, minValue, maxValue, variant, isAriaLabel) {
33
+ if (isAriaLabel === void 0) { isAriaLabel = false; }
34
+ if (isAriaLabel) {
35
+ return minValue === 0 && variant === GaugeChart_types_1.GaugeChartVariant.SingleSegment
36
+ ? "".concat(segment.legend, ", ").concat(segment.size, " out of ").concat(maxValue, " or ").concat(((segment.size / maxValue) * 100).toFixed(), "%")
37
+ : "".concat(segment.legend, ", ").concat(segment.start, " to ").concat(segment.end);
38
+ }
39
+ return minValue === 0 && variant === GaugeChart_types_1.GaugeChartVariant.SingleSegment
40
+ ? "".concat(segment.size, " (").concat(((segment.size / maxValue) * 100).toFixed(), "%)")
41
+ : "".concat(segment.start, " - ").concat(segment.end);
42
+ };
43
+ exports.getSegmentLabel = getSegmentLabel;
44
+ var getChartValueLabel = function (chartValue, minValue, maxValue, chartValueFormat, forCallout) {
45
+ if (forCallout === void 0) { forCallout = false; }
46
+ if (forCallout) {
47
+ // When displaying the chart value as a percentage, use fractions in the callout, and vice versa.
48
+ // This helps clarify the actual value and avoid repetition.
49
+ return minValue !== 0
50
+ ? chartValue.toString()
51
+ : chartValueFormat === GaugeChart_types_1.GaugeValueFormat.Fraction
52
+ ? "".concat(((chartValue / maxValue) * 100).toFixed(), "%")
53
+ : "".concat(chartValue, "/").concat(maxValue);
54
+ }
55
+ return typeof chartValueFormat === 'function'
56
+ ? chartValueFormat([chartValue - minValue, maxValue - minValue])
57
+ : minValue !== 0
58
+ ? chartValue.toString()
59
+ : chartValueFormat === GaugeChart_types_1.GaugeValueFormat.Fraction
60
+ ? "".concat(chartValue, "/").concat(maxValue)
61
+ : "".concat(((chartValue / maxValue) * 100).toFixed(), "%");
62
+ };
63
+ exports.getChartValueLabel = getChartValueLabel;
21
64
  var GaugeChartBase = /** @class */ (function (_super) {
22
65
  tslib_1.__extends(GaugeChartBase, _super);
23
66
  function GaugeChartBase(props) {
@@ -45,22 +88,30 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
45
88
  chartValueSize: exports.BREAKPOINTS[0].fontSize,
46
89
  };
47
90
  };
48
- _this._initProps = function () {
91
+ _this._processProps = function () {
49
92
  var _a = _this.props, _b = _a.minValue, minValue = _b === void 0 ? 0 : _b, maxValue = _a.maxValue, theme = _a.theme;
50
- var segments = Array.from(_this.props.segments);
51
93
  var total = minValue;
52
- segments.forEach(function (segment, index) {
53
- total += segment.size;
54
- segment.color =
55
- typeof segment.color !== 'undefined'
94
+ var segments = _this.props.segments.map(function (segment, index) {
95
+ var size = Math.max(segment.size, 0);
96
+ total += size;
97
+ return {
98
+ legend: segment.legend,
99
+ size: size,
100
+ color: typeof segment.color !== 'undefined'
56
101
  ? (0, index_1.getColorFromToken)(segment.color, theme.isInverted)
57
- : (0, index_1.getNextColor)(index, 0, theme.isInverted);
102
+ : (0, index_1.getNextColor)(index, 0, theme.isInverted),
103
+ accessibilityData: segment.accessibilityData,
104
+ start: total - size,
105
+ end: total,
106
+ };
58
107
  });
59
108
  if (typeof maxValue !== 'undefined' && total < maxValue) {
60
109
  segments.push({
61
110
  legend: 'Unknown',
62
111
  size: maxValue - total,
63
112
  color: theme.palette.neutralLight,
113
+ start: total,
114
+ end: maxValue,
64
115
  });
65
116
  total = maxValue;
66
117
  }
@@ -83,15 +134,15 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
83
134
  segmentIndex: _this._isRTL ? segments.length - 1 - index : index,
84
135
  };
85
136
  });
137
+ _this._minValue = minValue;
138
+ _this._maxValue = total;
139
+ _this._segments = segments;
86
140
  return {
87
- minValue: minValue,
88
- maxValue: total,
89
- segments: segments,
90
141
  arcs: arcs,
91
142
  };
92
143
  };
93
144
  _this._renderNeedle = function () {
94
- var needleRotation = (_this._sweepFraction[0] / _this._sweepFraction[1]) * 180;
145
+ var needleRotation = (0, exports.calcNeedleRotation)(_this.props.chartValue, _this._minValue, _this._maxValue);
95
146
  var rtlSafeNeedleRotation = _this._isRTL ? 180 - needleRotation : needleRotation;
96
147
  var strokeWidth = 2;
97
148
  var halfStrokeWidth = strokeWidth / 2;
@@ -163,17 +214,13 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
163
214
  }
164
215
  _this._calloutAnchor = legend;
165
216
  var hoverXValue = 'Current value is ' +
166
- (_this.props.chartValueFormat === GaugeChart_types_1.GaugeValueFormat.Fraction
167
- ? "".concat(((_this._sweepFraction[0] / _this._sweepFraction[1]) * 100).toFixed(), "%")
168
- : "".concat(_this._sweepFraction[0], "/").concat(_this._sweepFraction[1]));
169
- var total = _this._minValue;
170
- var hoverYValues = _this._segments.map(function (segment, index) {
217
+ (0, exports.getChartValueLabel)(_this.props.chartValue, _this._minValue, _this._maxValue, _this.props.chartValueFormat, true);
218
+ var hoverYValues = _this._segments.map(function (segment) {
171
219
  var yValue = {
172
220
  legend: segment.legend,
173
- y: "".concat(total + (index > 0 ? 1 : 0), " - ").concat(total + segment.size),
221
+ y: (0, exports.getSegmentLabel)(segment, _this._minValue, _this._maxValue, _this.props.variant),
174
222
  color: segment.color,
175
223
  };
176
- total += segment.size;
177
224
  return yValue;
178
225
  });
179
226
  _this.setState(tslib_1.__assign({ calloutTarget: target,
@@ -226,7 +273,7 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
226
273
  !!calloutProps.descriptionMessage && (React.createElement("div", { className: _this._classNames.descriptionMessage }, calloutProps.descriptionMessage)))));
227
274
  };
228
275
  _this._margins = _this._getMargins();
229
- _this._legendsHeight = !_this.props.hideLegend ? 24 : 0;
276
+ _this._legendsHeight = !props.hideLegend ? 24 : 0;
230
277
  _this.state = {
231
278
  hoveredLegend: '',
232
279
  selectedLegend: '',
@@ -238,7 +285,7 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
238
285
  width: 140 + _this._margins.left + _this._margins.right,
239
286
  height: 70 + _this._margins.top + _this._margins.bottom + _this._legendsHeight,
240
287
  };
241
- _this._isRTL = (0, Utilities_1.getRTL)();
288
+ _this._isRTL = (0, Utilities_1.getRTL)(props.theme);
242
289
  _this._calloutAnchor = '';
243
290
  return _this;
244
291
  }
@@ -259,10 +306,7 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
259
306
  this._outerRadius = Math.min((width - (this._margins.left + this._margins.right)) / 2, height - (this._margins.top + this._margins.bottom + this._legendsHeight));
260
307
  var _a = this._getStylesBasedOnBreakpoint(), arcWidth = _a.arcWidth, chartValueSize = _a.chartValueSize;
261
308
  this._innerRadius = this._outerRadius - arcWidth;
262
- var _b = this._initProps(), minValue = _b.minValue, maxValue = _b.maxValue, segments = _b.segments, arcs = _b.arcs;
263
- this._minValue = minValue;
264
- this._segments = segments;
265
- this._sweepFraction = [this.props.chartValue - this._minValue, maxValue - this._minValue];
309
+ var arcs = this._processProps().arcs;
266
310
  this._classNames = getClassNames(this.props.styles, {
267
311
  theme: this.props.theme,
268
312
  className: this.props.className,
@@ -277,25 +321,21 @@ define(["require", "exports", "tslib", "react", "d3-shape", "@fluentui/react/lib
277
321
  this.props.chartTitle && (React.createElement("text", { x: 0, y: -(this._outerRadius + TITLE_OFFSET), textAnchor: "middle", className: this._classNames.chartTitle }, this.props.chartTitle)),
278
322
  !this.props.hideMinMax && (React.createElement(React.Fragment, null,
279
323
  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)),
280
- 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)))),
281
- 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()
282
- ? 1
283
- : 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)) *
284
- 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); } }))); }),
324
+ 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)))),
325
+ arcs.map(function (arc, index) {
326
+ var segment = _this._segments[arc.segmentIndex];
327
+ 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); } })));
328
+ }),
285
329
  this._renderNeedle(),
286
330
  React.createElement("g", { onMouseEnter: function (e) { return _this._handleMouseOver(e, 'Chart value'); }, onMouseMove: function (e) { return _this._handleMouseOver(e, 'Chart value'); } },
287
- React.createElement(SVGTooltipText_1.SVGTooltipText, { content: typeof this.props.chartValueFormat === 'function'
288
- ? this.props.chartValueFormat(this._sweepFraction)
289
- : this.props.chartValueFormat === GaugeChart_types_1.GaugeValueFormat.Fraction
290
- ? "".concat(this._sweepFraction[0], "/").concat(this._sweepFraction[1])
291
- : "".concat(((this._sweepFraction[0] / this._sweepFraction[1]) * 100).toFixed(), "%"), textProps: {
331
+ React.createElement(SVGTooltipText_1.SVGTooltipText, { content: (0, exports.getChartValueLabel)(this.props.chartValue, this._minValue, this._maxValue, this.props.chartValueFormat), textProps: {
292
332
  x: 0,
293
333
  y: 0,
294
334
  textAnchor: 'middle',
295
335
  className: this._classNames.chartValue,
296
336
  role: 'img',
297
- 'aria-label': "Current value: ".concat(this._sweepFraction[0], " out of ").concat(this._sweepFraction[1], ", or ").concat(((this._sweepFraction[0] / this._sweepFraction[1]) *
298
- 100).toFixed(), "%"),
337
+ 'aria-label': 'Current value: ' +
338
+ (0, exports.getChartValueLabel)(this.props.chartValue, this._minValue, this._maxValue, this.props.chartValueFormat),
299
339
  }, maxWidth: this._innerRadius * 2 - 24, wrapContent: this._wrapContent })),
300
340
  this.props.sublabel && (React.createElement(SVGTooltipText_1.SVGTooltipText, { content: this.props.sublabel, textProps: {
301
341
  x: 0,