@fluentui/react-charts 9.0.2 → 9.0.3

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 (185) hide show
  1. package/CHANGELOG.md +48 -7
  2. package/dist/index.d.ts +767 -0
  3. package/lib/AreaChart.js +1 -0
  4. package/lib/AreaChart.js.map +1 -0
  5. package/lib/HeatMapChart.js +1 -0
  6. package/lib/HeatMapChart.js.map +1 -0
  7. package/lib/HorizontalBarChartWithAxis.js +1 -0
  8. package/lib/HorizontalBarChartWithAxis.js.map +1 -0
  9. package/lib/SankeyChart.js +1 -0
  10. package/lib/SankeyChart.js.map +1 -0
  11. package/lib/VerticalStackedBarChart.js +1 -0
  12. package/lib/VerticalStackedBarChart.js.map +1 -0
  13. package/lib/components/AreaChart/AreaChart.js +775 -0
  14. package/lib/components/AreaChart/AreaChart.js.map +1 -0
  15. package/lib/components/AreaChart/AreaChart.types.js +4 -0
  16. package/lib/components/AreaChart/AreaChart.types.js.map +1 -0
  17. package/lib/components/AreaChart/index.js +3 -0
  18. package/lib/components/AreaChart/index.js.map +1 -0
  19. package/lib/components/AreaChart/useAreaChartStyles.styles.js +64 -0
  20. package/lib/components/AreaChart/useAreaChartStyles.styles.js.map +1 -0
  21. package/lib/components/CommonComponents/CartesianChart.js +30 -14
  22. package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
  23. package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
  24. package/lib/components/DeclarativeChart/DeclarativeChart.js +112 -65
  25. package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
  26. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +570 -159
  27. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  28. package/lib/components/DonutChart/Arc/Arc.js +1 -1
  29. package/lib/components/DonutChart/Arc/Arc.js.map +1 -1
  30. package/lib/components/DonutChart/DonutChart.js +1 -1
  31. package/lib/components/DonutChart/DonutChart.js.map +1 -1
  32. package/lib/components/GaugeChart/GaugeChart.js +3 -0
  33. package/lib/components/GaugeChart/GaugeChart.js.map +1 -1
  34. package/lib/components/GaugeChart/GaugeChart.types.js.map +1 -1
  35. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +9 -0
  36. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  37. package/lib/components/HeatMapChart/HeatMapChart.js +588 -0
  38. package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -0
  39. package/lib/components/HeatMapChart/HeatMapChart.types.js +4 -0
  40. package/lib/components/HeatMapChart/HeatMapChart.types.js.map +1 -0
  41. package/lib/components/HeatMapChart/index.js +3 -0
  42. package/lib/components/HeatMapChart/index.js.map +1 -0
  43. package/lib/components/HeatMapChart/useHeatMapChartStyles.styles.js +46 -0
  44. package/lib/components/HeatMapChart/useHeatMapChartStyles.styles.js.map +1 -0
  45. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +571 -0
  46. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -0
  47. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.types.js +4 -0
  48. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.types.js.map +1 -0
  49. package/lib/components/HorizontalBarChartWithAxis/index.js +3 -0
  50. package/lib/components/HorizontalBarChartWithAxis/index.js.map +1 -0
  51. package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +76 -0
  52. package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -0
  53. package/lib/components/Legends/Legends.js +38 -37
  54. package/lib/components/Legends/Legends.js.map +1 -1
  55. package/lib/components/LineChart/LineChart.js +43 -35
  56. package/lib/components/LineChart/LineChart.js.map +1 -1
  57. package/lib/components/SankeyChart/SankeyChart.js +1022 -0
  58. package/lib/components/SankeyChart/SankeyChart.js.map +1 -0
  59. package/lib/components/SankeyChart/SankeyChart.types.js +3 -0
  60. package/lib/components/SankeyChart/SankeyChart.types.js.map +1 -0
  61. package/lib/components/SankeyChart/index.js +3 -0
  62. package/lib/components/SankeyChart/index.js.map +1 -0
  63. package/lib/components/SankeyChart/useSankeyChartStyles.styles.js +109 -0
  64. package/lib/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -0
  65. package/lib/components/ScatterChart/ScatterChart.js +46 -59
  66. package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
  67. package/lib/components/VerticalBarChart/VerticalBarChart.js +165 -88
  68. package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  69. package/lib/components/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
  70. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +904 -0
  71. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -0
  72. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js +1 -0
  73. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -0
  74. package/lib/components/VerticalStackedBarChart/index.js +3 -0
  75. package/lib/components/VerticalStackedBarChart/index.js.map +1 -0
  76. package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js +73 -0
  77. package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js.map +1 -0
  78. package/lib/index.js +5 -0
  79. package/lib/index.js.map +1 -1
  80. package/lib/types/DataPoint.js +1 -3
  81. package/lib/types/DataPoint.js.map +1 -1
  82. package/lib/utilities/SVGTooltipText.js +49 -4
  83. package/lib/utilities/SVGTooltipText.js.map +1 -1
  84. package/lib/utilities/colors.js +20 -0
  85. package/lib/utilities/colors.js.map +1 -1
  86. package/lib/utilities/string.js +32 -0
  87. package/lib/utilities/string.js.map +1 -0
  88. package/lib/utilities/test-data.js +53 -0
  89. package/lib/utilities/test-data.js.map +1 -1
  90. package/lib/utilities/utilities.js +90 -18
  91. package/lib/utilities/utilities.js.map +1 -1
  92. package/lib-commonjs/AreaChart.js +6 -0
  93. package/lib-commonjs/AreaChart.js.map +1 -0
  94. package/lib-commonjs/HeatMapChart.js +6 -0
  95. package/lib-commonjs/HeatMapChart.js.map +1 -0
  96. package/lib-commonjs/HorizontalBarChartWithAxis.js +6 -0
  97. package/lib-commonjs/HorizontalBarChartWithAxis.js.map +1 -0
  98. package/lib-commonjs/SankeyChart.js +6 -0
  99. package/lib-commonjs/SankeyChart.js.map +1 -0
  100. package/lib-commonjs/VerticalStackedBarChart.js +6 -0
  101. package/lib-commonjs/VerticalStackedBarChart.js.map +1 -0
  102. package/lib-commonjs/components/AreaChart/AreaChart.js +781 -0
  103. package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -0
  104. package/lib-commonjs/components/AreaChart/AreaChart.types.js +7 -0
  105. package/lib-commonjs/components/AreaChart/AreaChart.types.js.map +1 -0
  106. package/lib-commonjs/components/AreaChart/index.js +8 -0
  107. package/lib-commonjs/components/AreaChart/index.js.map +1 -0
  108. package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.js +104 -0
  109. package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.js.map +1 -0
  110. package/lib-commonjs/components/CommonComponents/CartesianChart.js +29 -14
  111. package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
  112. package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
  113. package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js +120 -73
  114. package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
  115. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +592 -178
  116. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  117. package/lib-commonjs/components/DonutChart/Arc/Arc.js +1 -1
  118. package/lib-commonjs/components/DonutChart/Arc/Arc.js.map +1 -1
  119. package/lib-commonjs/components/DonutChart/DonutChart.js +1 -1
  120. package/lib-commonjs/components/DonutChart/DonutChart.js.map +1 -1
  121. package/lib-commonjs/components/GaugeChart/GaugeChart.js +3 -0
  122. package/lib-commonjs/components/GaugeChart/GaugeChart.js.map +1 -1
  123. package/lib-commonjs/components/GaugeChart/GaugeChart.types.js.map +1 -1
  124. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +9 -0
  125. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  126. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js +599 -0
  127. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -0
  128. package/lib-commonjs/components/HeatMapChart/HeatMapChart.types.js +7 -0
  129. package/lib-commonjs/components/HeatMapChart/HeatMapChart.types.js.map +1 -0
  130. package/lib-commonjs/components/HeatMapChart/index.js +8 -0
  131. package/lib-commonjs/components/HeatMapChart/index.js.map +1 -0
  132. package/lib-commonjs/components/HeatMapChart/useHeatMapChartStyles.styles.js +68 -0
  133. package/lib-commonjs/components/HeatMapChart/useHeatMapChartStyles.styles.js.map +1 -0
  134. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +580 -0
  135. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -0
  136. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.types.js +7 -0
  137. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.types.js.map +1 -0
  138. package/lib-commonjs/components/HorizontalBarChartWithAxis/index.js +8 -0
  139. package/lib-commonjs/components/HorizontalBarChartWithAxis/index.js.map +1 -0
  140. package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +116 -0
  141. package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -0
  142. package/lib-commonjs/components/Legends/Legends.js +37 -37
  143. package/lib-commonjs/components/Legends/Legends.js.map +1 -1
  144. package/lib-commonjs/components/LineChart/LineChart.js +41 -33
  145. package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
  146. package/lib-commonjs/components/SankeyChart/SankeyChart.js +1038 -0
  147. package/lib-commonjs/components/SankeyChart/SankeyChart.js.map +1 -0
  148. package/lib-commonjs/components/SankeyChart/SankeyChart.types.js +6 -0
  149. package/lib-commonjs/components/SankeyChart/SankeyChart.types.js.map +1 -0
  150. package/lib-commonjs/components/SankeyChart/index.js +8 -0
  151. package/lib-commonjs/components/SankeyChart/index.js.map +1 -0
  152. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js +179 -0
  153. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -0
  154. package/lib-commonjs/components/ScatterChart/ScatterChart.js +45 -58
  155. package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
  156. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +164 -87
  157. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  158. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
  159. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +915 -0
  160. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -0
  161. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js +6 -0
  162. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -0
  163. package/lib-commonjs/components/VerticalStackedBarChart/index.js +8 -0
  164. package/lib-commonjs/components/VerticalStackedBarChart/index.js.map +1 -0
  165. package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js +120 -0
  166. package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js.map +1 -0
  167. package/lib-commonjs/index.js +5 -0
  168. package/lib-commonjs/index.js.map +1 -1
  169. package/lib-commonjs/types/DataPoint.js +1 -3
  170. package/lib-commonjs/types/DataPoint.js.map +1 -1
  171. package/lib-commonjs/utilities/SVGTooltipText.js +49 -4
  172. package/lib-commonjs/utilities/SVGTooltipText.js.map +1 -1
  173. package/lib-commonjs/utilities/colors.js +23 -0
  174. package/lib-commonjs/utilities/colors.js.map +1 -1
  175. package/lib-commonjs/utilities/string.js +29 -0
  176. package/lib-commonjs/utilities/string.js.map +1 -0
  177. package/lib-commonjs/utilities/test-data.js +59 -0
  178. package/lib-commonjs/utilities/test-data.js.map +1 -1
  179. package/lib-commonjs/utilities/utilities.js +94 -17
  180. package/lib-commonjs/utilities/utilities.js.map +1 -1
  181. package/package.json +11 -8
  182. package/lib/components/DeclarativeChart/PlotlySchema.js +0 -7
  183. package/lib/components/DeclarativeChart/PlotlySchema.js.map +0 -1
  184. package/lib-commonjs/components/DeclarativeChart/PlotlySchema.js +0 -10
  185. package/lib-commonjs/components/DeclarativeChart/PlotlySchema.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["GaugeChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useGaugeChartStyles } from './useGaugeChartStyles.styles';\nimport { select as d3Select } from 'd3-selection';\nimport { arc as d3Arc } from 'd3-shape';\nimport { YValueHover } from '../../index';\nimport {\n Points,\n areArraysEqual,\n formatValueWithSIPrefix,\n getAccessibleDataObject,\n getColorFromToken,\n getNextColor,\n pointTypes,\n useRtl,\n} from '../../utilities/index';\nimport { convertToLocaleString } from '../../utilities/locale-util';\nimport { SVGTooltipText } from '../../utilities/SVGTooltipText';\nimport { Legend, LegendShape, Legends, Shape } from '../Legends/index';\nimport { GaugeChartVariant, GaugeValueFormat, GaugeChartProps, GaugeChartSegment } from './GaugeChart.types';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\n\nconst GAUGE_MARGIN = 16;\nconst LABEL_WIDTH = 36;\nconst LABEL_HEIGHT = 16;\nconst LABEL_OFFSET = 4;\nconst TITLE_OFFSET = 11;\nconst EXTRA_NEEDLE_LENGTH = 4;\nexport const ARC_PADDING = 2;\nexport const BREAKPOINTS = [\n { minRadius: 52, arcWidth: 12, fontSize: 20 },\n { minRadius: 70, arcWidth: 16, fontSize: 24 },\n { minRadius: 88, arcWidth: 20, fontSize: 32 },\n { minRadius: 106, arcWidth: 24, fontSize: 32 },\n { minRadius: 124, arcWidth: 28, fontSize: 40 },\n { minRadius: 142, arcWidth: 32, fontSize: 40 },\n];\n\nexport const calcNeedleRotation = (chartValue: number, minValue: number, maxValue: number) => {\n let needleRotation = ((chartValue - minValue) / (maxValue - minValue)) * 180;\n if (needleRotation < 0) {\n needleRotation = 0;\n } else if (needleRotation > 180) {\n needleRotation = 180;\n }\n\n return needleRotation;\n};\n\nexport const getSegmentLabel = (\n segment: ExtendedSegment,\n minValue: number,\n maxValue: number,\n variant?: GaugeChartVariant,\n isAriaLabel: boolean = false,\n) => {\n if (isAriaLabel) {\n return minValue === 0 && variant === 'single-segment'\n ? `${segment.legend}, ${segment.size} out of ${maxValue} or ${((segment.size / maxValue) * 100).toFixed()}%`\n : `${segment.legend}, ${segment.start} to ${segment.end}`;\n }\n\n return minValue === 0 && variant === 'single-segment'\n ? `${segment.size} (${((segment.size / maxValue) * 100).toFixed()}%)`\n : `${segment.start} - ${segment.end}`;\n};\n\nexport const getChartValueLabel = (\n chartValue: number,\n minValue: number,\n maxValue: number,\n chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string),\n forCallout: boolean = false,\n): string => {\n if (forCallout) {\n // When displaying the chart value as a percentage, use fractions in the callout, and vice versa.\n // This helps clarify the actual value and avoid repetition.\n return minValue !== 0\n ? chartValue.toString()\n : chartValueFormat === 'fraction'\n ? `${((chartValue / maxValue) * 100).toFixed()}%`\n : `${chartValue}/${maxValue}`;\n }\n\n return typeof chartValueFormat === 'function'\n ? chartValueFormat([chartValue - minValue, maxValue - minValue])\n : minValue !== 0\n ? chartValue.toString()\n : chartValueFormat === 'fraction'\n ? `${chartValue}/${maxValue}`\n : `${((chartValue / maxValue) * 100).toFixed()}%`;\n};\n\ninterface YValue extends Omit<YValueHover, 'y'> {\n y?: string | number;\n}\nexport interface ExtendedSegment extends GaugeChartSegment {\n start: number;\n end: number;\n}\n\nexport const GaugeChart: React.FunctionComponent<GaugeChartProps> = React.forwardRef<HTMLDivElement, GaugeChartProps>(\n (props, forwardedRef) => {\n const _getMargins = () => {\n const { hideMinMax, chartTitle, sublabel } = props;\n return {\n left: (!hideMinMax ? LABEL_OFFSET + LABEL_WIDTH : 0) + GAUGE_MARGIN,\n right: (!hideMinMax ? LABEL_OFFSET + LABEL_WIDTH : 0) + GAUGE_MARGIN,\n top: (chartTitle ? TITLE_OFFSET + LABEL_HEIGHT : EXTRA_NEEDLE_LENGTH / 2) + GAUGE_MARGIN,\n bottom: (sublabel ? LABEL_OFFSET + LABEL_HEIGHT : 0) + GAUGE_MARGIN,\n };\n };\n const _margins: { left: number; right: number; top: number; bottom: number } = _getMargins();\n const _legendsHeight: number = !props.hideLegend ? 24 : 0;\n const _rootElem = React.useRef<HTMLDivElement | null>(null);\n const _isRTL: boolean = useRtl();\n const [width, setWidth] = React.useState<number>(140 + _getMargins().left + _getMargins().right);\n const [height, setHeight] = React.useState<number>(70 + _getMargins().top + _getMargins().bottom + _legendsHeight);\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [focusedElement, setFocusedElement] = React.useState<string | undefined>('');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const [hoverXValue, setHoverXValue] = React.useState<string | number>('');\n const [hoverYValues, setHoverYValues] = React.useState<YValue[]>([]);\n const prevPropsRef = React.useRef<GaugeChartProps | null>(null);\n const _width = props.width || width;\n const _height = props.height || height;\n const _outerRadius: number = Math.min(\n (_width - (_margins.left + _margins.right)) / 2,\n _height - (_margins.top + _margins.bottom + _legendsHeight),\n );\n const { arcWidth, chartValueSize } = _getStylesBasedOnBreakpoint();\n const _innerRadius: number = _outerRadius - arcWidth;\n let _minValue!: number;\n let _maxValue!: number;\n let _segments!: ExtendedSegment[];\n let _calloutAnchor: string = '';\n React.useEffect(() => {\n if (prevPropsRef.current) {\n const prevProps = prevPropsRef.current;\n if (!areArraysEqual(prevProps.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n if (prevProps.height !== props.height || prevProps.width !== props.width) {\n setWidth(props.width!);\n setHeight(props.height!);\n }\n }\n prevPropsRef.current = props;\n }, [props]);\n\n const classes = useGaugeChartStyles(props);\n function _getStylesBasedOnBreakpoint() {\n for (let index = BREAKPOINTS.length - 1; index >= 0; index -= 1) {\n if (_outerRadius >= BREAKPOINTS[index].minRadius) {\n return {\n arcWidth: BREAKPOINTS[index].arcWidth,\n chartValueSize: BREAKPOINTS[index].fontSize,\n };\n }\n }\n return {\n arcWidth: BREAKPOINTS[0].arcWidth,\n chartValueSize: BREAKPOINTS[0].fontSize,\n };\n }\n\n function _processProps() {\n const { minValue = 0, maxValue, segments, roundCorners } = props;\n\n let total = minValue;\n const processedSegments: ExtendedSegment[] = segments.map(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (segment: { size: number; legend: any; color: string; accessibilityData: any }, index: number) => {\n const size = Math.max(segment.size, 0);\n total += size;\n return {\n legend: segment.legend,\n size,\n color:\n typeof segment.color !== 'undefined'\n ? getColorFromToken(segment.color, false)\n : getNextColor(index, 0, false),\n accessibilityData: segment.accessibilityData,\n start: total - size,\n end: total,\n };\n },\n );\n if (typeof maxValue !== 'undefined' && total < maxValue) {\n processedSegments.push({\n legend: 'Unknown',\n size: maxValue - total,\n color: 'neutralLight',\n start: total,\n end: maxValue,\n });\n total = maxValue;\n }\n\n const arcGenerator = d3Arc()\n .cornerRadius(roundCorners ? 3 : 0)\n .padAngle(ARC_PADDING / _outerRadius)\n .padRadius(_outerRadius);\n const rtlSafeSegments = _isRTL ? Array.from(processedSegments).reverse() : processedSegments;\n let prevAngle = -Math.PI / 2;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const arcs = rtlSafeSegments.map((segment, index) => {\n const endAngle = prevAngle + (segment.size / (total - minValue)) * Math.PI;\n const d = arcGenerator({\n innerRadius: _innerRadius,\n outerRadius: _outerRadius,\n startAngle: prevAngle,\n endAngle,\n })!;\n prevAngle = endAngle;\n return {\n d,\n segmentIndex: _isRTL ? processedSegments.length - 1 - index : index,\n startAngle: prevAngle - (segment.size / (total - minValue)) * Math.PI,\n endAngle,\n };\n });\n\n _minValue = minValue;\n _maxValue = total;\n _segments = processedSegments;\n\n return {\n arcs,\n };\n }\n\n function _renderNeedle() {\n const needleRotation = calcNeedleRotation(props.chartValue, _minValue, _maxValue);\n const rtlSafeNeedleRotation = _isRTL ? 180 - needleRotation : needleRotation;\n const strokeWidth = 2;\n const halfStrokeWidth = strokeWidth / 2;\n const needleLength = _outerRadius - _innerRadius + EXTRA_NEEDLE_LENGTH;\n\n return (\n <g transform={`rotate(${rtlSafeNeedleRotation}, 0, 0)`}>\n <path\n d={`\n M 0,${-halfStrokeWidth - 3}\n L ${-needleLength},${-halfStrokeWidth - 1}\n A ${halfStrokeWidth + 1},${halfStrokeWidth + 1},0,0,0,${-needleLength},${halfStrokeWidth + 1}\n L 0,${halfStrokeWidth + 3}\n A ${halfStrokeWidth + 3},${halfStrokeWidth + 3},0,0,0,0,${-halfStrokeWidth - 3}\n `}\n strokeWidth={strokeWidth}\n className={classes.needle}\n transform={`translate(${-_innerRadius + EXTRA_NEEDLE_LENGTH / 2})`}\n data-is-focusable={true}\n onFocus={e => _handleFocus(e, 'Needle')}\n onBlur={_handleBlur}\n onMouseEnter={e => _handleMouseOver(e, 'Needle')}\n onMouseMove={e => _handleMouseOver(e, 'Needle')}\n role=\"img\"\n aria-label={\n 'Current value: ' + getChartValueLabel(props.chartValue, _minValue, _maxValue, props.chartValueFormat)\n }\n />\n </g>\n );\n }\n\n function _renderLegends() {\n if (props.hideLegend) {\n return null;\n }\n\n const legends: Legend[] = _segments.map((segment, index) => {\n const color: string = segment.color || getNextColor(index, 0, false);\n\n return {\n title: segment.legend,\n color,\n hoverAction: () => {\n setHoveredLegend(segment.legend);\n },\n onMouseOutAction: () => {\n setHoveredLegend('');\n },\n };\n });\n\n return (\n <div className={classes.legendsContainer} style={{ width: props.width }}>\n <Legends\n legends={legends}\n centerLegends\n {...props.legendProps}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={_onLegendSelectionChange}\n />\n </div>\n );\n }\n\n function _onLegendSelectionChange(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n function _legendHighlighted(legend: string) {\n return _getHighlightedLegend().includes(legend!);\n }\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n function _noLegendHighlighted() {\n return _getHighlightedLegend().length === 0;\n }\n\n function _getHighlightedLegend() {\n return selectedLegends.length > 0 ? selectedLegends : hoveredLegend ? [hoveredLegend] : [];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _handleFocus(focusEvent: React.FocusEvent<SVGElement>, focusedElement: string) {\n _showCallout(focusEvent, focusedElement, true);\n }\n\n function _handleBlur() {\n _hideCallout(true);\n }\n\n function _handleMouseOver(mouseEvent: React.MouseEvent<SVGElement>, hoveredElement: string) {\n _showCallout(mouseEvent, hoveredElement, false);\n }\n\n function _handleMouseOut() {\n _hideCallout(false);\n }\n\n function _handleCalloutDismiss() {\n _hideCallout(false);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _showCallout(\n event: React.MouseEvent<SVGElement, MouseEvent> | React.FocusEvent<SVGElement, Element>,\n legend: string,\n isFocusEvent: boolean,\n ) {\n if (_calloutAnchor === legend) {\n return;\n }\n let clientX = 0;\n let clientY = 0;\n if ('clientX' in event) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const target = event.currentTarget as HTMLElement | SVGElement;\n if (target && 'getBoundingClientRect' in target) {\n const boundingRect = target.getBoundingClientRect();\n clientX = boundingRect.left + boundingRect.width / 2;\n clientY = boundingRect.top + boundingRect.height / 2;\n }\n }\n _calloutAnchor = legend;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const hoverXValue: string =\n 'Current value is ' + getChartValueLabel(props.chartValue, _minValue, _maxValue, props.chartValueFormat, true);\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const hoverYValues: YValue[] = _segments.map(segment => {\n const yValue: YValue = {\n legend: segment.legend,\n y: getSegmentLabel(segment, _minValue, _maxValue, props.variant),\n color: segment.color,\n };\n return yValue;\n });\n _updatePosition(clientX, clientY);\n setPopoverOpen(\n ['Needle', 'Chart value'].includes(legend) || _noLegendHighlighted() || _legendHighlighted(legend),\n );\n setHoverXValue(hoverXValue);\n setHoverYValues(hoverYValues);\n if (isFocusEvent) {\n setFocusedElement(legend);\n }\n }\n\n function _hideCallout(isBlurEvent?: boolean) {\n _calloutAnchor = '';\n setPopoverOpen(false);\n setHoverXValue('');\n setHoverYValues([]);\n if (isBlurEvent) {\n setFocusedElement('');\n }\n }\n\n function _wrapContent(content: string, id: string, maxWidth: number) {\n const textElement = d3Select<SVGTextElement, {}>(`#${id}`);\n textElement.text(content);\n if (!textElement.node()) {\n return false;\n }\n\n let isOverflowing = false;\n let textLength = textElement.node()!.getComputedTextLength();\n while (textLength > maxWidth && content.length > 0) {\n content = content.slice(0, -1);\n textElement.text(content + '...');\n isOverflowing = true;\n textLength = textElement.node()!.getComputedTextLength();\n }\n return isOverflowing;\n }\n\n // TO DO: Write a common functional component for Multi value callout and divide sub count method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _multiValueCallout(calloutProps: any) {\n const yValueHoverSubCountsExists: boolean = _yValueHoverSubCountsExists(calloutProps.YValueHover);\n return (\n <div className={classes.calloutContentRoot}>\n <div\n className={classes.calloutDateTimeContainer}\n style={yValueHoverSubCountsExists ? { marginBottom: '11px' } : {}}\n >\n <div\n className={classes.calloutContentX}\n {...getAccessibleDataObject(calloutProps!.xAxisCalloutAccessibilityData, 'text', false)}\n >\n {convertToLocaleString(calloutProps!.hoverXValue, props.culture)}\n </div>\n </div>\n <div className={classes.calloutInfoContainer} style={yValueHoverSubCountsExists ? { display: 'flex' } : {}}>\n {calloutProps!.YValueHover &&\n calloutProps!.YValueHover.map((yValue: YValueHover, index: number, yValues: YValueHover[]) => {\n const isLast: boolean = index + 1 === yValues.length;\n const { shouldDrawBorderBottom = false } = yValue;\n return (\n <div\n {...getAccessibleDataObject(yValue.callOutAccessibilityData, 'text', false)}\n key={`callout-content-${index}`}\n style={\n yValueHoverSubCountsExists\n ? {\n display: 'inline-block',\n ...(shouldDrawBorderBottom && {\n paddingBottom: '10px',\n }),\n }\n : {\n ...(shouldDrawBorderBottom && {\n paddingBottom: '10px',\n }),\n }\n }\n >\n {_getCalloutContent(yValue, index, yValueHoverSubCountsExists, isLast)}\n </div>\n );\n })}\n {!!calloutProps.descriptionMessage && (\n <div className={classes.descriptionMessage}>{calloutProps.descriptionMessage}</div>\n )}\n </div>\n </div>\n );\n }\n\n function _yValueHoverSubCountsExists(yValueHover?: YValueHover[]) {\n if (yValueHover) {\n return yValueHover.some(\n (yValue: {\n legend?: string;\n y?: number;\n color?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n }) => yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string',\n );\n }\n return false;\n }\n\n function _getCalloutContent(\n xValue: YValueHover,\n index: number,\n yValueHoverSubCountsExists: boolean,\n isLast: boolean,\n ): React.ReactNode {\n const marginStyle: React.CSSProperties = isLast ? {} : { marginRight: '16px' };\n const toDrawShape = xValue.index !== undefined && xValue.index !== -1;\n const { culture } = props;\n const yValue = convertToLocaleString(xValue.y, culture);\n if (!xValue.yAxisCalloutData || typeof xValue.yAxisCalloutData === 'string') {\n return (\n <div style={yValueHoverSubCountsExists ? marginStyle : {}}>\n {yValueHoverSubCountsExists && (\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n )}\n <div\n id={`${index}_${xValue.y}`}\n className={classes.calloutBlockContainer}\n style={{ borderLeft: `4px solid ${xValue.color}` }}\n >\n {toDrawShape && (\n <Shape\n svgProps={{\n className: classes.shapeStyles,\n }}\n pathProps={{ fill: xValue.color }}\n shape={Points[xValue.index! % Object.keys(pointTypes).length] as LegendShape}\n style={{ display: 'flex' }}\n />\n )}\n <div>\n <div className={classes.calloutlegendText}> {xValue.legend}</div>\n <div className={classes.calloutContentY}>\n {convertToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y || xValue.data,\n culture,\n )}\n </div>\n </div>\n </div>\n </div>\n );\n } else {\n const subcounts: { [id: string]: number } = xValue.yAxisCalloutData as { [id: string]: number };\n return (\n <div style={marginStyle}>\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n {Object.keys(subcounts).map((subcountName: string) => {\n return (\n <div key={subcountName} className={classes.calloutBlockContainer}>\n <div className={classes.calloutlegendText}> {convertToLocaleString(subcountName, culture)}</div>\n <div className={classes.calloutContentY}>\n {convertToLocaleString(subcounts[subcountName], culture)}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n }\n\n function _updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n function _getChartTitle(): string {\n const { chartTitle } = props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Gauge chart with ${_segments.length} segments. `;\n }\n const { arcs } = _processProps();\n const focusAttributes = useFocusableGroup();\n return (\n <div className={classes.root} ref={el => (_rootElem.current = el)} {...focusAttributes}>\n <svg\n className={classes.chart}\n style={{ width: props.width, height: props.height! - _legendsHeight }}\n role=\"region\"\n aria-label={_getChartTitle()}\n onMouseLeave={_handleMouseOut}\n >\n <g transform={`translate(${width / 2}, ${height - (_margins.bottom + _legendsHeight)})`}>\n {props.chartTitle && (\n <text\n x={0}\n y={-(_outerRadius + TITLE_OFFSET)}\n textAnchor=\"middle\"\n className={classes.chartTitle}\n aria-hidden={true}\n >\n {props.chartTitle}\n </text>\n )}\n {!props.hideMinMax && (\n <>\n <text\n x={(_isRTL ? 1 : -1) * (_outerRadius + LABEL_OFFSET)}\n y={0}\n textAnchor=\"end\"\n className={classes.limits}\n role=\"img\"\n aria-label={`Min value: ${_minValue}`}\n >\n {formatValueWithSIPrefix(_minValue)}\n </text>\n <text\n x={(_isRTL ? -1 : 1) * (_outerRadius + LABEL_OFFSET)}\n y={0}\n textAnchor=\"start\"\n className={classes.limits}\n role=\"img\"\n aria-label={`Max value: ${_maxValue}`}\n >\n {formatValueWithSIPrefix(_maxValue)}\n </text>\n </>\n )}\n {arcs.map((arc, index) => {\n const segment = _segments[arc.segmentIndex];\n return (\n <React.Fragment key={index}>\n <path\n d={arc.d}\n strokeWidth={focusedElement === segment.legend ? ARC_PADDING : 0}\n className={classes.segment}\n fill={segment.color}\n opacity={_legendHighlighted(segment.legend) || _noLegendHighlighted() ? 1 : 0.1}\n {...getAccessibleDataObject(\n {\n ariaLabel: getSegmentLabel(segment, _minValue, _maxValue, props.variant, true),\n ...segment.accessibilityData,\n },\n 'img',\n true,\n )}\n onFocus={e => _handleFocus(e, segment.legend)}\n onBlur={_handleBlur}\n onMouseEnter={e => _handleMouseOver(e, segment.legend)}\n onMouseLeave={e => _handleCalloutDismiss()}\n onMouseMove={e => _handleMouseOver(e, segment.legend)}\n data-is-focusable={_legendHighlighted(segment.legend) || _noLegendHighlighted()}\n tabIndex={segment.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n })}\n {_renderNeedle()}\n <g\n onMouseEnter={e => _handleMouseOver(e, 'Chart value')}\n onMouseMove={e => _handleMouseOver(e, 'Chart value')}\n >\n <SVGTooltipText\n content={getChartValueLabel(props.chartValue, _minValue, _maxValue, props.chartValueFormat)}\n textProps={{\n x: 0,\n y: 0,\n textAnchor: 'middle',\n className: classes.chartValue,\n fontSize: chartValueSize,\n 'aria-hidden': 'true',\n }}\n maxWidth={_innerRadius * 2 - 24}\n wrapContent={_wrapContent}\n />\n </g>\n {props.sublabel && (\n <SVGTooltipText\n content={props.sublabel}\n textProps={{\n x: 0,\n y: 4,\n textAnchor: 'middle',\n dominantBaseline: 'hanging',\n className: classes.sublabel,\n }}\n maxWidth={_innerRadius * 2}\n wrapContent={_wrapContent}\n />\n )}\n </g>\n </svg>\n {_renderLegends()}\n {!props.hideTooltip && isPopoverOpen && (\n <ChartPopover\n {...props.calloutProps}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n customCallout={{\n customizedCallout: _multiValueCallout({ hoverXValue: hoverXValue, YValueHover: hoverYValues }),\n }}\n />\n )}\n </div>\n );\n },\n);\nGaugeChart.displayName = 'GaugeChart';\n"],"names":["React","useGaugeChartStyles","select","d3Select","arc","d3Arc","Points","areArraysEqual","formatValueWithSIPrefix","getAccessibleDataObject","getColorFromToken","getNextColor","pointTypes","useRtl","convertToLocaleString","SVGTooltipText","Legends","Shape","useFocusableGroup","ChartPopover","GAUGE_MARGIN","LABEL_WIDTH","LABEL_HEIGHT","LABEL_OFFSET","TITLE_OFFSET","EXTRA_NEEDLE_LENGTH","ARC_PADDING","BREAKPOINTS","minRadius","arcWidth","fontSize","calcNeedleRotation","chartValue","minValue","maxValue","needleRotation","getSegmentLabel","segment","variant","isAriaLabel","legend","size","toFixed","start","end","getChartValueLabel","chartValueFormat","forCallout","toString","GaugeChart","forwardRef","props","forwardedRef","_getMargins","hideMinMax","chartTitle","sublabel","left","right","top","bottom","_margins","_legendsHeight","hideLegend","_rootElem","useRef","_isRTL","width","setWidth","useState","height","setHeight","hoveredLegend","setHoveredLegend","selectedLegends","setSelectedLegends","legendProps","focusedElement","setFocusedElement","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","hoverXValue","setHoverXValue","hoverYValues","setHoverYValues","prevPropsRef","_width","_height","_outerRadius","Math","min","chartValueSize","_getStylesBasedOnBreakpoint","_innerRadius","_minValue","_maxValue","_segments","_calloutAnchor","useEffect","current","prevProps","classes","index","length","_processProps","segments","roundCorners","total","processedSegments","map","max","color","accessibilityData","push","arcGenerator","cornerRadius","padAngle","padRadius","rtlSafeSegments","Array","from","reverse","prevAngle","PI","arcs","endAngle","d","innerRadius","outerRadius","startAngle","segmentIndex","_renderNeedle","rtlSafeNeedleRotation","strokeWidth","halfStrokeWidth","needleLength","g","transform","path","className","needle","data-is-focusable","onFocus","e","_handleFocus","onBlur","_handleBlur","onMouseEnter","_handleMouseOver","onMouseMove","role","aria-label","_renderLegends","legends","title","hoverAction","onMouseOutAction","div","legendsContainer","style","centerLegends","onChange","_onLegendSelectionChange","event","currentLegend","canSelectMultipleLegends","slice","_legendHighlighted","_getHighlightedLegend","includes","_noLegendHighlighted","focusEvent","_showCallout","_hideCallout","mouseEvent","hoveredElement","_handleMouseOut","_handleCalloutDismiss","isFocusEvent","clientX","clientY","target","currentTarget","boundingRect","getBoundingClientRect","yValue","_updatePosition","isBlurEvent","_wrapContent","content","id","maxWidth","textElement","text","node","isOverflowing","textLength","getComputedTextLength","_multiValueCallout","calloutProps","yValueHoverSubCountsExists","_yValueHoverSubCountsExists","YValueHover","calloutContentRoot","calloutDateTimeContainer","marginBottom","calloutContentX","xAxisCalloutAccessibilityData","culture","calloutInfoContainer","display","yValues","isLast","shouldDrawBorderBottom","callOutAccessibilityData","key","paddingBottom","_getCalloutContent","descriptionMessage","yValueHover","some","yAxisCalloutData","xValue","marginStyle","marginRight","toDrawShape","undefined","calloutBlockContainer","borderLeft","svgProps","shapeStyles","pathProps","fill","shape","Object","keys","calloutlegendText","calloutContentY","data","subcounts","subcountName","newX","newY","threshold","distance","sqrt","pow","_getChartTitle","focusAttributes","root","ref","el","svg","chart","onMouseLeave","textAnchor","aria-hidden","limits","Fragment","opacity","ariaLabel","tabIndex","textProps","wrapContent","dominantBaseline","hideTooltip","customCallout","customizedCallout","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,mBAAmB,QAAQ,+BAA+B;AACnE,SAASC,UAAUC,QAAQ,QAAQ,eAAe;AAClD,SAASC,OAAOC,KAAK,QAAQ,WAAW;AAExC,SACEC,MAAM,EACNC,cAAc,EACdC,uBAAuB,EACvBC,uBAAuB,EACvBC,iBAAiB,EACjBC,YAAY,EACZC,UAAU,EACVC,MAAM,QACD,wBAAwB;AAC/B,SAASC,qBAAqB,QAAQ,8BAA8B;AACpE,SAASC,cAAc,QAAQ,iCAAiC;AAChE,SAA8BC,OAAO,EAAEC,KAAK,QAAQ,mBAAmB;AAEvE,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,YAAY,QAAQ,mCAAmC;AAEhE,MAAMC,eAAe;AACrB,MAAMC,cAAc;AACpB,MAAMC,eAAe;AACrB,MAAMC,eAAe;AACrB,MAAMC,eAAe;AACrB,MAAMC,sBAAsB;AAC5B,OAAO,MAAMC,cAAc,EAAE;AAC7B,OAAO,MAAMC,cAAc;IACzB;QAAEC,WAAW;QAAIC,UAAU;QAAIC,UAAU;IAAG;IAC5C;QAAEF,WAAW;QAAIC,UAAU;QAAIC,UAAU;IAAG;IAC5C;QAAEF,WAAW;QAAIC,UAAU;QAAIC,UAAU;IAAG;IAC5C;QAAEF,WAAW;QAAKC,UAAU;QAAIC,UAAU;IAAG;IAC7C;QAAEF,WAAW;QAAKC,UAAU;QAAIC,UAAU;IAAG;IAC7C;QAAEF,WAAW;QAAKC,UAAU;QAAIC,UAAU;IAAG;CAC9C,CAAC;AAEF,OAAO,MAAMC,qBAAqB,CAACC,YAAoBC,UAAkBC;IACvE,IAAIC,iBAAiB,AAAEH,CAAAA,aAAaC,QAAO,IAAMC,CAAAA,WAAWD,QAAO,IAAM;IACzE,IAAIE,iBAAiB,GAAG;QACtBA,iBAAiB;IACnB,OAAO,IAAIA,iBAAiB,KAAK;QAC/BA,iBAAiB;IACnB;IAEA,OAAOA;AACT,EAAE;AAEF,OAAO,MAAMC,kBAAkB,CAC7BC,SACAJ,UACAC,UACAI,SACAC,cAAuB,KAAK;IAE5B,IAAIA,aAAa;QACf,OAAON,aAAa,KAAKK,YAAY,mBACjC,CAAC,EAAED,QAAQG,MAAM,CAAC,EAAE,EAAEH,QAAQI,IAAI,CAAC,QAAQ,EAAEP,SAAS,IAAI,EAAE,AAAC,CAAA,AAACG,QAAQI,IAAI,GAAGP,WAAY,GAAE,EAAGQ,OAAO,GAAG,CAAC,CAAC,GAC1G,CAAC,EAAEL,QAAQG,MAAM,CAAC,EAAE,EAAEH,QAAQM,KAAK,CAAC,IAAI,EAAEN,QAAQO,GAAG,CAAC,CAAC;IAC7D;IAEA,OAAOX,aAAa,KAAKK,YAAY,mBACjC,CAAC,EAAED,QAAQI,IAAI,CAAC,EAAE,EAAE,AAAC,CAAA,AAACJ,QAAQI,IAAI,GAAGP,WAAY,GAAE,EAAGQ,OAAO,GAAG,EAAE,CAAC,GACnE,CAAC,EAAEL,QAAQM,KAAK,CAAC,GAAG,EAAEN,QAAQO,GAAG,CAAC,CAAC;AACzC,EAAE;AAEF,OAAO,MAAMC,qBAAqB,CAChCb,YACAC,UACAC,UACAY,kBACAC,aAAsB,KAAK;IAE3B,IAAIA,YAAY;QACd,iGAAiG;QACjG,4DAA4D;QAC5D,OAAOd,aAAa,IAChBD,WAAWgB,QAAQ,KACnBF,qBAAqB,aACrB,CAAC,EAAE,AAAC,CAAA,AAACd,aAAaE,WAAY,GAAE,EAAGQ,OAAO,GAAG,CAAC,CAAC,GAC/C,CAAC,EAAEV,WAAW,CAAC,EAAEE,SAAS,CAAC;IACjC;IAEA,OAAO,OAAOY,qBAAqB,aAC/BA,iBAAiB;QAACd,aAAaC;QAAUC,WAAWD;KAAS,IAC7DA,aAAa,IACbD,WAAWgB,QAAQ,KACnBF,qBAAqB,aACrB,CAAC,EAAEd,WAAW,CAAC,EAAEE,SAAS,CAAC,GAC3B,CAAC,EAAE,AAAC,CAAA,AAACF,aAAaE,WAAY,GAAE,EAAGQ,OAAO,GAAG,CAAC,CAAC;AACrD,EAAE;AAUF,OAAO,MAAMO,2BAAuDjD,MAAMkD,UAAU,CAClF,CAACC,OAAOC;QAiBiED;IAhBvE,MAAME,cAAc;QAClB,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAGL;QAC7C,OAAO;YACLM,MAAM,AAAC,CAAA,CAACH,aAAa/B,eAAeF,cAAc,CAAA,IAAKD;YACvDsC,OAAO,AAAC,CAAA,CAACJ,aAAa/B,eAAeF,cAAc,CAAA,IAAKD;YACxDuC,KAAK,AAACJ,CAAAA,aAAa/B,eAAeF,eAAeG,sBAAsB,CAAA,IAAKL;YAC5EwC,QAAQ,AAACJ,CAAAA,WAAWjC,eAAeD,eAAe,CAAA,IAAKF;QACzD;IACF;IACA,MAAMyC,WAAyER;IAC/E,MAAMS,iBAAyB,CAACX,MAAMY,UAAU,GAAG,KAAK;IACxD,MAAMC,YAAYhE,MAAMiE,MAAM,CAAwB;IACtD,MAAMC,SAAkBrD;IACxB,MAAM,CAACsD,OAAOC,SAAS,GAAGpE,MAAMqE,QAAQ,CAAS,MAAMhB,cAAcI,IAAI,GAAGJ,cAAcK,KAAK;IAC/F,MAAM,CAACY,QAAQC,UAAU,GAAGvE,MAAMqE,QAAQ,CAAS,KAAKhB,cAAcM,GAAG,GAAGN,cAAcO,MAAM,GAAGE;IACnG,MAAM,CAACU,eAAeC,iBAAiB,GAAGzE,MAAMqE,QAAQ,CAAS;IACjE,MAAM,CAACK,iBAAiBC,mBAAmB,GAAG3E,MAAMqE,QAAQ,CAAWlB,EAAAA,qBAAAA,MAAMyB,WAAW,cAAjBzB,yCAAAA,mBAAmBuB,eAAe,KAAI,EAAE;IAC/G,MAAM,CAACG,gBAAgBC,kBAAkB,GAAG9E,MAAMqE,QAAQ,CAAqB;IAC/E,8DAA8D;IAC9D,MAAM,CAACU,eAAeC,iBAAiB,GAAGhF,MAAMqE,QAAQ,CAAC;QAAEY,GAAG;QAAGC,GAAG;IAAE;IACtE,MAAM,CAACC,eAAeC,eAAe,GAAGpF,MAAMqE,QAAQ,CAAC;IACvD,MAAM,CAACgB,aAAaC,eAAe,GAAGtF,MAAMqE,QAAQ,CAAkB;IACtE,MAAM,CAACkB,cAAcC,gBAAgB,GAAGxF,MAAMqE,QAAQ,CAAW,EAAE;IACnE,MAAMoB,eAAezF,MAAMiE,MAAM,CAAyB;IAC1D,MAAMyB,SAASvC,MAAMgB,KAAK,IAAIA;IAC9B,MAAMwB,UAAUxC,MAAMmB,MAAM,IAAIA;IAChC,MAAMsB,eAAuBC,KAAKC,GAAG,CACnC,AAACJ,CAAAA,SAAU7B,CAAAA,SAASJ,IAAI,GAAGI,SAASH,KAAK,AAAD,CAAC,IAAK,GAC9CiC,UAAW9B,CAAAA,SAASF,GAAG,GAAGE,SAASD,MAAM,GAAGE,cAAa;IAE3D,MAAM,EAAEjC,QAAQ,EAAEkE,cAAc,EAAE,GAAGC;IACrC,MAAMC,eAAuBL,eAAe/D;IAC5C,IAAIqE;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC,iBAAyB;IAC7BrG,MAAMsG,SAAS,CAAC;QACd,IAAIb,aAAac,OAAO,EAAE;gBAEJC,wBAAwCrD;YAD5D,MAAMqD,YAAYf,aAAac,OAAO;YACtC,IAAI,CAAChG,gBAAeiG,yBAAAA,UAAU5B,WAAW,cAArB4B,6CAAAA,uBAAuB9B,eAAe,GAAEvB,qBAAAA,MAAMyB,WAAW,cAAjBzB,yCAAAA,mBAAmBuB,eAAe,GAAG;oBAC5EvB;gBAAnBwB,mBAAmBxB,EAAAA,sBAAAA,MAAMyB,WAAW,cAAjBzB,0CAAAA,oBAAmBuB,eAAe,KAAI,EAAE;YAC7D;YACA,IAAI8B,UAAUlC,MAAM,KAAKnB,MAAMmB,MAAM,IAAIkC,UAAUrC,KAAK,KAAKhB,MAAMgB,KAAK,EAAE;gBACxEC,SAASjB,MAAMgB,KAAK;gBACpBI,UAAUpB,MAAMmB,MAAM;YACxB;QACF;QACAmB,aAAac,OAAO,GAAGpD;IACzB,GAAG;QAACA;KAAM;IAEV,MAAMsD,UAAUxG,oBAAoBkD;IACpC,SAAS6C;QACP,IAAK,IAAIU,QAAQ/E,YAAYgF,MAAM,GAAG,GAAGD,SAAS,GAAGA,SAAS,EAAG;YAC/D,IAAId,gBAAgBjE,WAAW,CAAC+E,MAAM,CAAC9E,SAAS,EAAE;gBAChD,OAAO;oBACLC,UAAUF,WAAW,CAAC+E,MAAM,CAAC7E,QAAQ;oBACrCkE,gBAAgBpE,WAAW,CAAC+E,MAAM,CAAC5E,QAAQ;gBAC7C;YACF;QACF;QACA,OAAO;YACLD,UAAUF,WAAW,CAAC,EAAE,CAACE,QAAQ;YACjCkE,gBAAgBpE,WAAW,CAAC,EAAE,CAACG,QAAQ;QACzC;IACF;IAEA,SAAS8E;QACP,MAAM,EAAE3E,WAAW,CAAC,EAAEC,QAAQ,EAAE2E,QAAQ,EAAEC,YAAY,EAAE,GAAG3D;QAE3D,IAAI4D,QAAQ9E;QACZ,MAAM+E,oBAAuCH,SAASI,GAAG,CACvD,8DAA8D;QAC9D,CAAC5E,SAA+EqE;YAC9E,MAAMjE,OAAOoD,KAAKqB,GAAG,CAAC7E,QAAQI,IAAI,EAAE;YACpCsE,SAAStE;YACT,OAAO;gBACLD,QAAQH,QAAQG,MAAM;gBACtBC;gBACA0E,OACE,OAAO9E,QAAQ8E,KAAK,KAAK,cACrBzG,kBAAkB2B,QAAQ8E,KAAK,EAAE,SACjCxG,aAAa+F,OAAO,GAAG;gBAC7BU,mBAAmB/E,QAAQ+E,iBAAiB;gBAC5CzE,OAAOoE,QAAQtE;gBACfG,KAAKmE;YACP;QACF;QAEF,IAAI,OAAO7E,aAAa,eAAe6E,QAAQ7E,UAAU;YACvD8E,kBAAkBK,IAAI,CAAC;gBACrB7E,QAAQ;gBACRC,MAAMP,WAAW6E;gBACjBI,OAAO;gBACPxE,OAAOoE;gBACPnE,KAAKV;YACP;YACA6E,QAAQ7E;QACV;QAEA,MAAMoF,eAAejH,QAClBkH,YAAY,CAACT,eAAe,IAAI,GAChCU,QAAQ,CAAC9F,cAAckE,cACvB6B,SAAS,CAAC7B;QACb,MAAM8B,kBAAkBxD,SAASyD,MAAMC,IAAI,CAACZ,mBAAmBa,OAAO,KAAKb;QAC3E,IAAIc,YAAY,CAACjC,KAAKkC,EAAE,GAAG;QAC3B,wDAAwD;QACxD,MAAMC,OAAON,gBAAgBT,GAAG,CAAC,CAAC5E,SAASqE;YACzC,MAAMuB,WAAWH,YAAY,AAACzF,QAAQI,IAAI,GAAIsE,CAAAA,QAAQ9E,QAAO,IAAM4D,KAAKkC,EAAE;YAC1E,MAAMG,IAAIZ,aAAa;gBACrBa,aAAalC;gBACbmC,aAAaxC;gBACbyC,YAAYP;gBACZG;YACF;YACAH,YAAYG;YACZ,OAAO;gBACLC;gBACAI,cAAcpE,SAAS8C,kBAAkBL,MAAM,GAAG,IAAID,QAAQA;gBAC9D2B,YAAYP,YAAY,AAACzF,QAAQI,IAAI,GAAIsE,CAAAA,QAAQ9E,QAAO,IAAM4D,KAAKkC,EAAE;gBACrEE;YACF;QACF;QAEA/B,YAAYjE;QACZkE,YAAYY;QACZX,YAAYY;QAEZ,OAAO;YACLgB;QACF;IACF;IAEA,SAASO;QACP,MAAMpG,iBAAiBJ,mBAAmBoB,MAAMnB,UAAU,EAAEkE,WAAWC;QACvE,MAAMqC,wBAAwBtE,SAAS,MAAM/B,iBAAiBA;QAC9D,MAAMsG,cAAc;QACpB,MAAMC,kBAAkBD,cAAc;QACtC,MAAME,eAAe/C,eAAeK,eAAexE;QAEnD,qBACE,oBAACmH;YAAEC,WAAW,CAAC,OAAO,EAAEL,sBAAsB,OAAO,CAAC;yBACpD,oBAACM;YACCZ,GAAG,CAAC;gBACA,EAAE,CAACQ,kBAAkB,EAAE;cACzB,EAAE,CAACC,aAAa,CAAC,EAAE,CAACD,kBAAkB,EAAE;cACxC,EAAEA,kBAAkB,EAAE,CAAC,EAAEA,kBAAkB,EAAE,OAAO,EAAE,CAACC,aAAa,CAAC,EAAED,kBAAkB,EAAE;gBACzF,EAAEA,kBAAkB,EAAE;cACxB,EAAEA,kBAAkB,EAAE,CAAC,EAAEA,kBAAkB,EAAE,SAAS,EAAE,CAACA,kBAAkB,EAAE;UACjF,CAAC;YACCD,aAAaA;YACbM,WAAWtC,QAAQuC,MAAM;YACzBH,WAAW,CAAC,UAAU,EAAE,CAAC5C,eAAexE,sBAAsB,EAAE,CAAC,CAAC;YAClEwH,qBAAmB;YACnBC,SAASC,CAAAA,IAAKC,aAAaD,GAAG;YAC9BE,QAAQC;YACRC,cAAcJ,CAAAA,IAAKK,iBAAiBL,GAAG;YACvCM,aAAaN,CAAAA,IAAKK,iBAAiBL,GAAG;YACtCO,MAAK;YACLC,cACE,oBAAoB9G,mBAAmBM,MAAMnB,UAAU,EAAEkE,WAAWC,WAAWhD,MAAML,gBAAgB;;IAK/G;IAEA,SAAS8G;QACP,IAAIzG,MAAMY,UAAU,EAAE;YACpB,OAAO;QACT;QAEA,MAAM8F,UAAoBzD,UAAUa,GAAG,CAAC,CAAC5E,SAASqE;YAChD,MAAMS,QAAgB9E,QAAQ8E,KAAK,IAAIxG,aAAa+F,OAAO,GAAG;YAE9D,OAAO;gBACLoD,OAAOzH,QAAQG,MAAM;gBACrB2E;gBACA4C,aAAa;oBACXtF,iBAAiBpC,QAAQG,MAAM;gBACjC;gBACAwH,kBAAkB;oBAChBvF,iBAAiB;gBACnB;YACF;QACF;QAEA,qBACE,oBAACwF;YAAIlB,WAAWtC,QAAQyD,gBAAgB;YAAEC,OAAO;gBAAEhG,OAAOhB,MAAMgB,KAAK;YAAC;yBACpE,oBAACnD;YACC6I,SAASA;YACTO,eAAAA;YACC,GAAGjH,MAAMyB,WAAW;YACrB,6CAA6C;YAC7CyF,UAAUC;;IAIlB;IAEA,SAASA,yBACP,wDAAwD;IACxD5F,eAAyB,EACzB6F,KAA0C,EAC1CC,aAAsB;YAElBrH,oBAKAA;QALJ,KAAIA,qBAAAA,MAAMyB,WAAW,cAAjBzB,yCAAAA,mBAAmBsH,wBAAwB,EAAE;YAC/C9F,mBAAmBD;QACrB,OAAO;YACLC,mBAAmBD,gBAAgBgG,KAAK,CAAC,CAAC;QAC5C;QACA,KAAIvH,sBAAAA,MAAMyB,WAAW,cAAjBzB,0CAAAA,oBAAmBkH,QAAQ,EAAE;YAC/BlH,MAAMyB,WAAW,CAACyF,QAAQ,CAAC3F,iBAAiB6F,OAAOC;QACrD;IACF;IAEA;;;;;KAKC,GACD,SAASG,mBAAmBnI,MAAc;QACxC,OAAOoI,wBAAwBC,QAAQ,CAACrI;IAC1C;IAEA;;KAEC,GACD,SAASsI;QACP,OAAOF,wBAAwBjE,MAAM,KAAK;IAC5C;IAEA,SAASiE;QACP,OAAOlG,gBAAgBiC,MAAM,GAAG,IAAIjC,kBAAkBF,gBAAgB;YAACA;SAAc,GAAG,EAAE;IAC5F;IAEA,wDAAwD;IACxD,SAAS4E,aAAa2B,UAAwC,EAAElG,cAAsB;QACpFmG,aAAaD,YAAYlG,gBAAgB;IAC3C;IAEA,SAASyE;QACP2B,aAAa;IACf;IAEA,SAASzB,iBAAiB0B,UAAwC,EAAEC,cAAsB;QACxFH,aAAaE,YAAYC,gBAAgB;IAC3C;IAEA,SAASC;QACPH,aAAa;IACf;IAEA,SAASI;QACPJ,aAAa;IACf;IAEA,8DAA8D;IAC9D,SAASD,aACPT,KAAuF,EACvF/H,MAAc,EACd8I,YAAqB;QAErB,IAAIjF,mBAAmB7D,QAAQ;YAC7B;QACF;QACA,IAAI+I,UAAU;QACd,IAAIC,UAAU;QACd,IAAI,aAAajB,OAAO;YACtBgB,UAAUhB,MAAMgB,OAAO;YACvBC,UAAUjB,MAAMiB,OAAO;QACzB,OAAO;YACL,wDAAwD;YACxD,MAAMC,SAASlB,MAAMmB,aAAa;YAClC,IAAID,UAAU,2BAA2BA,QAAQ;gBAC/C,MAAME,eAAeF,OAAOG,qBAAqB;gBACjDL,UAAUI,aAAalI,IAAI,GAAGkI,aAAaxH,KAAK,GAAG;gBACnDqH,UAAUG,aAAahI,GAAG,GAAGgI,aAAarH,MAAM,GAAG;YACrD;QACF;QACA+B,iBAAiB7D;QACjB,wDAAwD;QACxD,MAAM6C,cACJ,sBAAsBxC,mBAAmBM,MAAMnB,UAAU,EAAEkE,WAAWC,WAAWhD,MAAML,gBAAgB,EAAE;QAC3G,wDAAwD;QACxD,MAAMyC,eAAyBa,UAAUa,GAAG,CAAC5E,CAAAA;YAC3C,MAAMwJ,SAAiB;gBACrBrJ,QAAQH,QAAQG,MAAM;gBACtB0C,GAAG9C,gBAAgBC,SAAS6D,WAAWC,WAAWhD,MAAMb,OAAO;gBAC/D6E,OAAO9E,QAAQ8E,KAAK;YACtB;YACA,OAAO0E;QACT;QACAC,gBAAgBP,SAASC;QACzBpG,eACE;YAAC;YAAU;SAAc,CAACyF,QAAQ,CAACrI,WAAWsI,0BAA0BH,mBAAmBnI;QAE7F8C,eAAeD;QACfG,gBAAgBD;QAChB,IAAI+F,cAAc;YAChBxG,kBAAkBtC;QACpB;IACF;IAEA,SAASyI,aAAac,WAAqB;QACzC1F,iBAAiB;QACjBjB,eAAe;QACfE,eAAe;QACfE,gBAAgB,EAAE;QAClB,IAAIuG,aAAa;YACfjH,kBAAkB;QACpB;IACF;IAEA,SAASkH,aAAaC,OAAe,EAAEC,EAAU,EAAEC,QAAgB;QACjE,MAAMC,cAAcjM,SAA6B,CAAC,CAAC,EAAE+L,GAAG,CAAC;QACzDE,YAAYC,IAAI,CAACJ;QACjB,IAAI,CAACG,YAAYE,IAAI,IAAI;YACvB,OAAO;QACT;QAEA,IAAIC,gBAAgB;QACpB,IAAIC,aAAaJ,YAAYE,IAAI,GAAIG,qBAAqB;QAC1D,MAAOD,aAAaL,YAAYF,QAAQtF,MAAM,GAAG,EAAG;YAClDsF,UAAUA,QAAQvB,KAAK,CAAC,GAAG,CAAC;YAC5B0B,YAAYC,IAAI,CAACJ,UAAU;YAC3BM,gBAAgB;YAChBC,aAAaJ,YAAYE,IAAI,GAAIG,qBAAqB;QACxD;QACA,OAAOF;IACT;IAEA,iGAAiG;IACjG,8DAA8D;IAC9D,SAASG,mBAAmBC,YAAiB;QAC3C,MAAMC,6BAAsCC,4BAA4BF,aAAaG,WAAW;QAChG,qBACE,oBAAC7C;YAAIlB,WAAWtC,QAAQsG,kBAAkB;yBACxC,oBAAC9C;YACClB,WAAWtC,QAAQuG,wBAAwB;YAC3C7C,OAAOyC,6BAA6B;gBAAEK,cAAc;YAAO,IAAI,CAAC;yBAEhE,oBAAChD;YACClB,WAAWtC,QAAQyG,eAAe;YACjC,GAAGzM,wBAAwBkM,aAAcQ,6BAA6B,EAAE,QAAQ,MAAM;WAEtFrM,sBAAsB6L,aAActH,WAAW,EAAElC,MAAMiK,OAAO,mBAGnE,oBAACnD;YAAIlB,WAAWtC,QAAQ4G,oBAAoB;YAAElD,OAAOyC,6BAA6B;gBAAEU,SAAS;YAAO,IAAI,CAAC;WACtGX,aAAcG,WAAW,IACxBH,aAAcG,WAAW,CAAC7F,GAAG,CAAC,CAAC4E,QAAqBnF,OAAe6G;YACjE,MAAMC,SAAkB9G,QAAQ,MAAM6G,QAAQ5G,MAAM;YACpD,MAAM,EAAE8G,yBAAyB,KAAK,EAAE,GAAG5B;YAC3C,qBACE,oBAAC5B;gBACE,GAAGxJ,wBAAwBoL,OAAO6B,wBAAwB,EAAE,QAAQ,MAAM;gBAC3EC,KAAK,CAAC,gBAAgB,EAAEjH,MAAM,CAAC;gBAC/ByD,OACEyC,6BACI;oBACEU,SAAS;oBACT,GAAIG,0BAA0B;wBAC5BG,eAAe;oBACjB,CAAC;gBACH,IACA;oBACE,GAAIH,0BAA0B;wBAC5BG,eAAe;oBACjB,CAAC;gBACH;eAGLC,mBAAmBhC,QAAQnF,OAAOkG,4BAA4BY;QAGrE,IACD,CAAC,CAACb,aAAamB,kBAAkB,kBAChC,oBAAC7D;YAAIlB,WAAWtC,QAAQqH,kBAAkB;WAAGnB,aAAamB,kBAAkB;IAKtF;IAEA,SAASjB,4BAA4BkB,WAA2B;QAC9D,IAAIA,aAAa;YACf,OAAOA,YAAYC,IAAI,CACrB,CAACnC,SAKKA,OAAOoC,gBAAgB,IAAI,OAAOpC,OAAOoC,gBAAgB,KAAK;QAExE;QACA,OAAO;IACT;IAEA,SAASJ,mBACPK,MAAmB,EACnBxH,KAAa,EACbkG,0BAAmC,EACnCY,MAAe;QAEf,MAAMW,cAAmCX,SAAS,CAAC,IAAI;YAAEY,aAAa;QAAO;QAC7E,MAAMC,cAAcH,OAAOxH,KAAK,KAAK4H,aAAaJ,OAAOxH,KAAK,KAAK,CAAC;QACpE,MAAM,EAAE0G,OAAO,EAAE,GAAGjK;QACpB,MAAM0I,SAAS/K,sBAAsBoN,OAAOhJ,CAAC,EAAEkI;QAC/C,IAAI,CAACc,OAAOD,gBAAgB,IAAI,OAAOC,OAAOD,gBAAgB,KAAK,UAAU;YAC3E,qBACE,oBAAChE;gBAAIE,OAAOyC,6BAA6BuB,cAAc,CAAC;eACrDvB,4CACC,oBAAC3C;gBAAIlB,WAAU;gBAAyBoB,OAAO;oBAAErI,UAAU;gBAAO;eAC/DoM,OAAO1L,MAAM,EAAE,MAAGqJ,QAAO,oBAG9B,oBAAC5B;gBACCiC,IAAI,CAAC,EAAExF,MAAM,CAAC,EAAEwH,OAAOhJ,CAAC,CAAC,CAAC;gBAC1B6D,WAAWtC,QAAQ8H,qBAAqB;gBACxCpE,OAAO;oBAAEqE,YAAY,CAAC,UAAU,EAAEN,OAAO/G,KAAK,CAAC,CAAC;gBAAC;eAEhDkH,6BACC,oBAACpN;gBACCwN,UAAU;oBACR1F,WAAWtC,QAAQiI,WAAW;gBAChC;gBACAC,WAAW;oBAAEC,MAAMV,OAAO/G,KAAK;gBAAC;gBAChC0H,OAAOvO,MAAM,CAAC4N,OAAOxH,KAAK,GAAIoI,OAAOC,IAAI,CAACnO,YAAY+F,MAAM,CAAC;gBAC7DwD,OAAO;oBAAEmD,SAAS;gBAAO;8BAG7B,oBAACrD,2BACC,oBAACA;gBAAIlB,WAAWtC,QAAQuI,iBAAiB;eAAE,KAAEd,OAAO1L,MAAM,iBAC1D,oBAACyH;gBAAIlB,WAAWtC,QAAQwI,eAAe;eACpCnO,sBACCoN,OAAOD,gBAAgB,GAAGC,OAAOD,gBAAgB,GAAGC,OAAOhJ,CAAC,IAAIgJ,OAAOgB,IAAI,EAC3E9B;QAOd,OAAO;YACL,MAAM+B,YAAsCjB,OAAOD,gBAAgB;YACnE,qBACE,oBAAChE;gBAAIE,OAAOgE;6BACV,oBAAClE;gBAAIlB,WAAU;gBAAyBoB,OAAO;oBAAErI,UAAU;gBAAO;eAC/DoM,OAAO1L,MAAM,EAAE,MAAGqJ,QAAO,MAE3BiD,OAAOC,IAAI,CAACI,WAAWlI,GAAG,CAAC,CAACmI;gBAC3B,qBACE,oBAACnF;oBAAI0D,KAAKyB;oBAAcrG,WAAWtC,QAAQ8H,qBAAqB;iCAC9D,oBAACtE;oBAAIlB,WAAWtC,QAAQuI,iBAAiB;mBAAE,KAAElO,sBAAsBsO,cAAchC,yBACjF,oBAACnD;oBAAIlB,WAAWtC,QAAQwI,eAAe;mBACpCnO,sBAAsBqO,SAAS,CAACC,aAAa,EAAEhC;YAIxD;QAGN;IACF;IAEA,SAAStB,gBAAgBuD,IAAY,EAAEC,IAAY;QACjD,MAAMC,YAAY,GAAG,+BAA+B;QACpD,MAAM,EAAEtK,CAAC,EAAEC,CAAC,EAAE,GAAGH;QACjB,+BAA+B;QAC/B,MAAMyK,WAAW3J,KAAK4J,IAAI,CAAC5J,KAAK6J,GAAG,CAACL,OAAOpK,GAAG,KAAKY,KAAK6J,GAAG,CAACJ,OAAOpK,GAAG;QACtE,+EAA+E;QAC/E,IAAIsK,WAAWD,WAAW;YACxBvK,iBAAiB;gBAAEC,GAAGoK;gBAAMnK,GAAGoK;YAAK;YACpClK,eAAe;QACjB;IACF;IAEA,SAASuK;QACP,MAAM,EAAEpM,UAAU,EAAE,GAAGJ;QACvB,OAAO,AAACI,CAAAA,aAAa,CAAC,EAAEA,WAAW,EAAE,CAAC,GAAG,EAAC,IAAK,CAAC,iBAAiB,EAAE6C,UAAUO,MAAM,CAAC,WAAW,CAAC;IAClG;IACA,MAAM,EAAEqB,IAAI,EAAE,GAAGpB;IACjB,MAAMgJ,kBAAkB1O;IACxB,qBACE,oBAAC+I;QAAIlB,WAAWtC,QAAQoJ,IAAI;QAAEC,KAAKC,CAAAA,KAAO/L,UAAUuC,OAAO,GAAGwJ;QAAM,GAAGH,eAAe;qBACpF,oBAACI;QACCjH,WAAWtC,QAAQwJ,KAAK;QACxB9F,OAAO;YAAEhG,OAAOhB,MAAMgB,KAAK;YAAEG,QAAQnB,MAAMmB,MAAM,GAAIR;QAAe;QACpE4F,MAAK;QACLC,cAAYgG;QACZO,cAAc9E;qBAEd,oBAACxC;QAAEC,WAAW,CAAC,UAAU,EAAE1E,QAAQ,EAAE,EAAE,EAAEG,SAAUT,CAAAA,SAASD,MAAM,GAAGE,cAAa,EAAG,CAAC,CAAC;OACpFX,MAAMI,UAAU,kBACf,oBAAC8I;QACCpH,GAAG;QACHC,GAAG,CAAEU,CAAAA,eAAepE,YAAW;QAC/B2O,YAAW;QACXpH,WAAWtC,QAAQlD,UAAU;QAC7B6M,eAAa;OAEZjN,MAAMI,UAAU,GAGpB,CAACJ,MAAMG,UAAU,kBAChB,wDACE,oBAAC+I;QACCpH,GAAG,AAACf,CAAAA,SAAS,IAAI,CAAC,CAAA,IAAM0B,CAAAA,eAAerE,YAAW;QAClD2D,GAAG;QACHiL,YAAW;QACXpH,WAAWtC,QAAQ4J,MAAM;QACzB3G,MAAK;QACLC,cAAY,CAAC,WAAW,EAAEzD,UAAU,CAAC;OAEpC1F,wBAAwB0F,2BAE3B,oBAACmG;QACCpH,GAAG,AAACf,CAAAA,SAAS,CAAC,IAAI,CAAA,IAAM0B,CAAAA,eAAerE,YAAW;QAClD2D,GAAG;QACHiL,YAAW;QACXpH,WAAWtC,QAAQ4J,MAAM;QACzB3G,MAAK;QACLC,cAAY,CAAC,WAAW,EAAExD,UAAU,CAAC;OAEpC3F,wBAAwB2F,cAI9B6B,KAAKf,GAAG,CAAC,CAAC7G,KAAKsG;QACd,MAAMrE,UAAU+D,SAAS,CAAChG,IAAIkI,YAAY,CAAC;QAC3C,qBACE,oBAACtI,MAAMsQ,QAAQ;YAAC3C,KAAKjH;yBACnB,oBAACoC;YACCZ,GAAG9H,IAAI8H,CAAC;YACRO,aAAa5D,mBAAmBxC,QAAQG,MAAM,GAAGd,cAAc;YAC/DqH,WAAWtC,QAAQpE,OAAO;YAC1BuM,MAAMvM,QAAQ8E,KAAK;YACnBoJ,SAAS5F,mBAAmBtI,QAAQG,MAAM,KAAKsI,yBAAyB,IAAI;YAC3E,GAAGrK,wBACF;gBACE+P,WAAWpO,gBAAgBC,SAAS6D,WAAWC,WAAWhD,MAAMb,OAAO,EAAE;gBACzE,GAAGD,QAAQ+E,iBAAiB;YAC9B,GACA,OACA,KACD;YACD8B,SAASC,CAAAA,IAAKC,aAAaD,GAAG9G,QAAQG,MAAM;YAC5C6G,QAAQC;YACRC,cAAcJ,CAAAA,IAAKK,iBAAiBL,GAAG9G,QAAQG,MAAM;YACrD0N,cAAc/G,CAAAA,IAAKkC;YACnB5B,aAAaN,CAAAA,IAAKK,iBAAiBL,GAAG9G,QAAQG,MAAM;YACpDyG,qBAAmB0B,mBAAmBtI,QAAQG,MAAM,KAAKsI;YACzD2F,UAAUpO,QAAQG,MAAM,KAAK,KAAK,IAAI8L;;IAI9C,IACC/F,+BACD,oBAACK;QACCW,cAAcJ,CAAAA,IAAKK,iBAAiBL,GAAG;QACvCM,aAAaN,CAAAA,IAAKK,iBAAiBL,GAAG;qBAEtC,oBAACpI;QACCkL,SAASpJ,mBAAmBM,MAAMnB,UAAU,EAAEkE,WAAWC,WAAWhD,MAAML,gBAAgB;QAC1F4N,WAAW;YACTzL,GAAG;YACHC,GAAG;YACHiL,YAAY;YACZpH,WAAWtC,QAAQzE,UAAU;YAC7BF,UAAUiE;YACV,eAAe;QACjB;QACAoG,UAAUlG,eAAe,IAAI;QAC7B0K,aAAa3E;SAGhB7I,MAAMK,QAAQ,kBACb,oBAACzC;QACCkL,SAAS9I,MAAMK,QAAQ;QACvBkN,WAAW;YACTzL,GAAG;YACHC,GAAG;YACHiL,YAAY;YACZS,kBAAkB;YAClB7H,WAAWtC,QAAQjD,QAAQ;QAC7B;QACA2I,UAAUlG,eAAe;QACzB0K,aAAa3E;UAKpBpC,kBACA,CAACzG,MAAM0N,WAAW,IAAI1L,+BACrB,oBAAChE;QACE,GAAGgC,MAAMwJ,YAAY;QACtB5H,eAAeA;QACfI,eAAeA;QACf2L,eAAe;YACbC,mBAAmBrE,mBAAmB;gBAAErH,aAAaA;gBAAayH,aAAavH;YAAa;QAC9F;;AAKV,GACA;AACFtC,WAAW+N,WAAW,GAAG"}
1
+ {"version":3,"sources":["GaugeChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useGaugeChartStyles } from './useGaugeChartStyles.styles';\nimport { select as d3Select } from 'd3-selection';\nimport { arc as d3Arc } from 'd3-shape';\nimport { YValueHover } from '../../index';\nimport {\n Points,\n areArraysEqual,\n formatValueWithSIPrefix,\n getAccessibleDataObject,\n getColorFromToken,\n getNextColor,\n pointTypes,\n useRtl,\n} from '../../utilities/index';\nimport { convertToLocaleString } from '../../utilities/locale-util';\nimport { SVGTooltipText } from '../../utilities/SVGTooltipText';\nimport { Legend, LegendShape, Legends, Shape } from '../Legends/index';\nimport { GaugeChartVariant, GaugeValueFormat, GaugeChartProps, GaugeChartSegment } from './GaugeChart.types';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\n\nconst GAUGE_MARGIN = 16;\nconst LABEL_WIDTH = 36;\nconst LABEL_HEIGHT = 16;\nconst LABEL_OFFSET = 4;\nconst TITLE_OFFSET = 11;\nconst EXTRA_NEEDLE_LENGTH = 4;\nexport const ARC_PADDING = 2;\nexport const BREAKPOINTS = [\n { minRadius: 52, arcWidth: 12, fontSize: 20 },\n { minRadius: 70, arcWidth: 16, fontSize: 24 },\n { minRadius: 88, arcWidth: 20, fontSize: 32 },\n { minRadius: 106, arcWidth: 24, fontSize: 32 },\n { minRadius: 124, arcWidth: 28, fontSize: 40 },\n { minRadius: 142, arcWidth: 32, fontSize: 40 },\n];\n\nexport const calcNeedleRotation = (chartValue: number, minValue: number, maxValue: number) => {\n let needleRotation = ((chartValue - minValue) / (maxValue - minValue)) * 180;\n if (needleRotation < 0) {\n needleRotation = 0;\n } else if (needleRotation > 180) {\n needleRotation = 180;\n }\n\n return needleRotation;\n};\n\nexport const getSegmentLabel = (\n segment: ExtendedSegment,\n minValue: number,\n maxValue: number,\n variant?: GaugeChartVariant,\n isAriaLabel: boolean = false,\n) => {\n if (isAriaLabel) {\n return minValue === 0 && variant === 'single-segment'\n ? `${segment.legend}, ${segment.size} out of ${maxValue} or ${((segment.size / maxValue) * 100).toFixed()}%`\n : `${segment.legend}, ${segment.start} to ${segment.end}`;\n }\n\n return minValue === 0 && variant === 'single-segment'\n ? `${segment.size} (${((segment.size / maxValue) * 100).toFixed()}%)`\n : `${segment.start} - ${segment.end}`;\n};\n\nexport const getChartValueLabel = (\n chartValue: number,\n minValue: number,\n maxValue: number,\n chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string),\n forCallout: boolean = false,\n): string => {\n if (forCallout) {\n // When displaying the chart value as a percentage, use fractions in the callout, and vice versa.\n // This helps clarify the actual value and avoid repetition.\n return minValue !== 0\n ? chartValue.toString()\n : chartValueFormat === 'fraction'\n ? `${((chartValue / maxValue) * 100).toFixed()}%`\n : `${chartValue}/${maxValue}`;\n }\n\n return typeof chartValueFormat === 'function'\n ? chartValueFormat([chartValue - minValue, maxValue - minValue])\n : minValue !== 0\n ? chartValue.toString()\n : chartValueFormat === 'fraction'\n ? `${chartValue}/${maxValue}`\n : `${((chartValue / maxValue) * 100).toFixed()}%`;\n};\n\ninterface YValue extends Omit<YValueHover, 'y'> {\n y?: string | number;\n}\nexport interface ExtendedSegment extends GaugeChartSegment {\n start: number;\n end: number;\n}\n\nexport const GaugeChart: React.FunctionComponent<GaugeChartProps> = React.forwardRef<HTMLDivElement, GaugeChartProps>(\n (props, forwardedRef) => {\n const _getMargins = () => {\n const { hideMinMax, chartTitle, sublabel } = props;\n return {\n left: (!hideMinMax ? LABEL_OFFSET + LABEL_WIDTH : 0) + GAUGE_MARGIN,\n right: (!hideMinMax ? LABEL_OFFSET + LABEL_WIDTH : 0) + GAUGE_MARGIN,\n top: (chartTitle ? TITLE_OFFSET + LABEL_HEIGHT : EXTRA_NEEDLE_LENGTH / 2) + GAUGE_MARGIN,\n bottom: (sublabel ? LABEL_OFFSET + LABEL_HEIGHT : 0) + GAUGE_MARGIN,\n };\n };\n const _margins: { left: number; right: number; top: number; bottom: number } = _getMargins();\n const _legendsHeight: number = !props.hideLegend ? 24 : 0;\n const _rootElem = React.useRef<HTMLDivElement | null>(null);\n const _isRTL: boolean = useRtl();\n const [width, setWidth] = React.useState<number>(140 + _getMargins().left + _getMargins().right);\n const [height, setHeight] = React.useState<number>(70 + _getMargins().top + _getMargins().bottom + _legendsHeight);\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [focusedElement, setFocusedElement] = React.useState<string | undefined>('');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const [hoverXValue, setHoverXValue] = React.useState<string | number>('');\n const [hoverYValues, setHoverYValues] = React.useState<YValue[]>([]);\n const prevPropsRef = React.useRef<GaugeChartProps | null>(null);\n const _width = props.width || width;\n const _height = props.height || height;\n const _outerRadius: number = Math.min(\n (_width - (_margins.left + _margins.right)) / 2,\n _height - (_margins.top + _margins.bottom + _legendsHeight),\n );\n const { arcWidth, chartValueSize } = _getStylesBasedOnBreakpoint();\n const _innerRadius: number = _outerRadius - arcWidth;\n let _minValue!: number;\n let _maxValue!: number;\n let _segments!: ExtendedSegment[];\n let _calloutAnchor: string = '';\n React.useEffect(() => {\n if (prevPropsRef.current) {\n const prevProps = prevPropsRef.current;\n if (!areArraysEqual(prevProps.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n if (prevProps.height !== props.height || prevProps.width !== props.width) {\n setWidth(props.width!);\n setHeight(props.height!);\n }\n }\n prevPropsRef.current = props;\n }, [props]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: _rootElem.current,\n }),\n [],\n );\n\n const classes = useGaugeChartStyles(props);\n function _getStylesBasedOnBreakpoint() {\n for (let index = BREAKPOINTS.length - 1; index >= 0; index -= 1) {\n if (_outerRadius >= BREAKPOINTS[index].minRadius) {\n return {\n arcWidth: BREAKPOINTS[index].arcWidth,\n chartValueSize: BREAKPOINTS[index].fontSize,\n };\n }\n }\n return {\n arcWidth: BREAKPOINTS[0].arcWidth,\n chartValueSize: BREAKPOINTS[0].fontSize,\n };\n }\n\n function _processProps() {\n const { minValue = 0, maxValue, segments, roundCorners } = props;\n\n let total = minValue;\n const processedSegments: ExtendedSegment[] = segments.map(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (segment: { size: number; legend: any; color: string; accessibilityData: any }, index: number) => {\n const size = Math.max(segment.size, 0);\n total += size;\n return {\n legend: segment.legend,\n size,\n color:\n typeof segment.color !== 'undefined'\n ? getColorFromToken(segment.color, false)\n : getNextColor(index, 0, false),\n accessibilityData: segment.accessibilityData,\n start: total - size,\n end: total,\n };\n },\n );\n if (typeof maxValue !== 'undefined' && total < maxValue) {\n processedSegments.push({\n legend: 'Unknown',\n size: maxValue - total,\n color: 'neutralLight',\n start: total,\n end: maxValue,\n });\n total = maxValue;\n }\n\n const arcGenerator = d3Arc()\n .cornerRadius(roundCorners ? 3 : 0)\n .padAngle(ARC_PADDING / _outerRadius)\n .padRadius(_outerRadius);\n const rtlSafeSegments = _isRTL ? Array.from(processedSegments).reverse() : processedSegments;\n let prevAngle = -Math.PI / 2;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const arcs = rtlSafeSegments.map((segment, index) => {\n const endAngle = prevAngle + (segment.size / (total - minValue)) * Math.PI;\n const d = arcGenerator({\n innerRadius: _innerRadius,\n outerRadius: _outerRadius,\n startAngle: prevAngle,\n endAngle,\n })!;\n prevAngle = endAngle;\n return {\n d,\n segmentIndex: _isRTL ? processedSegments.length - 1 - index : index,\n startAngle: prevAngle - (segment.size / (total - minValue)) * Math.PI,\n endAngle,\n };\n });\n\n _minValue = minValue;\n _maxValue = total;\n _segments = processedSegments;\n\n return {\n arcs,\n };\n }\n\n function _renderNeedle() {\n const needleRotation = calcNeedleRotation(props.chartValue, _minValue, _maxValue);\n const rtlSafeNeedleRotation = _isRTL ? 180 - needleRotation : needleRotation;\n const strokeWidth = 2;\n const halfStrokeWidth = strokeWidth / 2;\n const needleLength = _outerRadius - _innerRadius + EXTRA_NEEDLE_LENGTH;\n\n return (\n <g transform={`rotate(${rtlSafeNeedleRotation}, 0, 0)`}>\n <path\n d={`\n M 0,${-halfStrokeWidth - 3}\n L ${-needleLength},${-halfStrokeWidth - 1}\n A ${halfStrokeWidth + 1},${halfStrokeWidth + 1},0,0,0,${-needleLength},${halfStrokeWidth + 1}\n L 0,${halfStrokeWidth + 3}\n A ${halfStrokeWidth + 3},${halfStrokeWidth + 3},0,0,0,0,${-halfStrokeWidth - 3}\n `}\n strokeWidth={strokeWidth}\n className={classes.needle}\n transform={`translate(${-_innerRadius + EXTRA_NEEDLE_LENGTH / 2})`}\n data-is-focusable={true}\n onFocus={e => _handleFocus(e, 'Needle')}\n onBlur={_handleBlur}\n onMouseEnter={e => _handleMouseOver(e, 'Needle')}\n onMouseMove={e => _handleMouseOver(e, 'Needle')}\n role=\"img\"\n aria-label={\n 'Current value: ' + getChartValueLabel(props.chartValue, _minValue, _maxValue, props.chartValueFormat)\n }\n />\n </g>\n );\n }\n\n function _renderLegends() {\n if (props.hideLegend) {\n return null;\n }\n\n const legends: Legend[] = _segments.map((segment, index) => {\n const color: string = segment.color || getNextColor(index, 0, false);\n\n return {\n title: segment.legend,\n color,\n hoverAction: () => {\n setHoveredLegend(segment.legend);\n },\n onMouseOutAction: () => {\n setHoveredLegend('');\n },\n };\n });\n\n return (\n <div className={classes.legendsContainer} style={{ width: props.width }}>\n <Legends\n legends={legends}\n centerLegends\n {...props.legendProps}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={_onLegendSelectionChange}\n />\n </div>\n );\n }\n\n function _onLegendSelectionChange(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n }\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n function _legendHighlighted(legend: string) {\n return _getHighlightedLegend().includes(legend!);\n }\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n function _noLegendHighlighted() {\n return _getHighlightedLegend().length === 0;\n }\n\n function _getHighlightedLegend() {\n return selectedLegends.length > 0 ? selectedLegends : hoveredLegend ? [hoveredLegend] : [];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function _handleFocus(focusEvent: React.FocusEvent<SVGElement>, focusedElement: string) {\n _showCallout(focusEvent, focusedElement, true);\n }\n\n function _handleBlur() {\n _hideCallout(true);\n }\n\n function _handleMouseOver(mouseEvent: React.MouseEvent<SVGElement>, hoveredElement: string) {\n _showCallout(mouseEvent, hoveredElement, false);\n }\n\n function _handleMouseOut() {\n _hideCallout(false);\n }\n\n function _handleCalloutDismiss() {\n _hideCallout(false);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _showCallout(\n event: React.MouseEvent<SVGElement, MouseEvent> | React.FocusEvent<SVGElement, Element>,\n legend: string,\n isFocusEvent: boolean,\n ) {\n if (_calloutAnchor === legend) {\n return;\n }\n let clientX = 0;\n let clientY = 0;\n if ('clientX' in event) {\n clientX = event.clientX;\n clientY = event.clientY;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const target = event.currentTarget as HTMLElement | SVGElement;\n if (target && 'getBoundingClientRect' in target) {\n const boundingRect = target.getBoundingClientRect();\n clientX = boundingRect.left + boundingRect.width / 2;\n clientY = boundingRect.top + boundingRect.height / 2;\n }\n }\n _calloutAnchor = legend;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const hoverXValue: string =\n 'Current value is ' + getChartValueLabel(props.chartValue, _minValue, _maxValue, props.chartValueFormat, true);\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const hoverYValues: YValue[] = _segments.map(segment => {\n const yValue: YValue = {\n legend: segment.legend,\n y: getSegmentLabel(segment, _minValue, _maxValue, props.variant),\n color: segment.color,\n };\n return yValue;\n });\n _updatePosition(clientX, clientY);\n setPopoverOpen(\n ['Needle', 'Chart value'].includes(legend) || _noLegendHighlighted() || _legendHighlighted(legend),\n );\n setHoverXValue(hoverXValue);\n setHoverYValues(hoverYValues);\n if (isFocusEvent) {\n setFocusedElement(legend);\n }\n }\n\n function _hideCallout(isBlurEvent?: boolean) {\n _calloutAnchor = '';\n setPopoverOpen(false);\n setHoverXValue('');\n setHoverYValues([]);\n if (isBlurEvent) {\n setFocusedElement('');\n }\n }\n\n function _wrapContent(content: string, id: string, maxWidth: number) {\n const textElement = d3Select<SVGTextElement, {}>(`#${id}`);\n textElement.text(content);\n if (!textElement.node()) {\n return false;\n }\n\n let isOverflowing = false;\n let textLength = textElement.node()!.getComputedTextLength();\n while (textLength > maxWidth && content.length > 0) {\n content = content.slice(0, -1);\n textElement.text(content + '...');\n isOverflowing = true;\n textLength = textElement.node()!.getComputedTextLength();\n }\n return isOverflowing;\n }\n\n // TO DO: Write a common functional component for Multi value callout and divide sub count method\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _multiValueCallout(calloutProps: any) {\n const yValueHoverSubCountsExists: boolean = _yValueHoverSubCountsExists(calloutProps.YValueHover);\n return (\n <div className={classes.calloutContentRoot}>\n <div\n className={classes.calloutDateTimeContainer}\n style={yValueHoverSubCountsExists ? { marginBottom: '11px' } : {}}\n >\n <div\n className={classes.calloutContentX}\n {...getAccessibleDataObject(calloutProps!.xAxisCalloutAccessibilityData, 'text', false)}\n >\n {convertToLocaleString(calloutProps!.hoverXValue, props.culture)}\n </div>\n </div>\n <div className={classes.calloutInfoContainer} style={yValueHoverSubCountsExists ? { display: 'flex' } : {}}>\n {calloutProps!.YValueHover &&\n calloutProps!.YValueHover.map((yValue: YValueHover, index: number, yValues: YValueHover[]) => {\n const isLast: boolean = index + 1 === yValues.length;\n const { shouldDrawBorderBottom = false } = yValue;\n return (\n <div\n {...getAccessibleDataObject(yValue.callOutAccessibilityData, 'text', false)}\n key={`callout-content-${index}`}\n style={\n yValueHoverSubCountsExists\n ? {\n display: 'inline-block',\n ...(shouldDrawBorderBottom && {\n paddingBottom: '10px',\n }),\n }\n : {\n ...(shouldDrawBorderBottom && {\n paddingBottom: '10px',\n }),\n }\n }\n >\n {_getCalloutContent(yValue, index, yValueHoverSubCountsExists, isLast)}\n </div>\n );\n })}\n {!!calloutProps.descriptionMessage && (\n <div className={classes.descriptionMessage}>{calloutProps.descriptionMessage}</div>\n )}\n </div>\n </div>\n );\n }\n\n function _yValueHoverSubCountsExists(yValueHover?: YValueHover[]) {\n if (yValueHover) {\n return yValueHover.some(\n (yValue: {\n legend?: string;\n y?: number;\n color?: string;\n yAxisCalloutData?: string | { [id: string]: number };\n }) => yValue.yAxisCalloutData && typeof yValue.yAxisCalloutData !== 'string',\n );\n }\n return false;\n }\n\n function _getCalloutContent(\n xValue: YValueHover,\n index: number,\n yValueHoverSubCountsExists: boolean,\n isLast: boolean,\n ): React.ReactNode {\n const marginStyle: React.CSSProperties = isLast ? {} : { marginRight: '16px' };\n const toDrawShape = xValue.index !== undefined && xValue.index !== -1;\n const { culture } = props;\n const yValue = convertToLocaleString(xValue.y, culture);\n if (!xValue.yAxisCalloutData || typeof xValue.yAxisCalloutData === 'string') {\n return (\n <div style={yValueHoverSubCountsExists ? marginStyle : {}}>\n {yValueHoverSubCountsExists && (\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n )}\n <div\n id={`${index}_${xValue.y}`}\n className={classes.calloutBlockContainer}\n style={{ borderLeft: `4px solid ${xValue.color}` }}\n >\n {toDrawShape && (\n <Shape\n svgProps={{\n className: classes.shapeStyles,\n }}\n pathProps={{ fill: xValue.color }}\n shape={Points[xValue.index! % Object.keys(pointTypes).length] as LegendShape}\n style={{ display: 'flex' }}\n />\n )}\n <div>\n <div className={classes.calloutlegendText}> {xValue.legend}</div>\n <div className={classes.calloutContentY}>\n {convertToLocaleString(\n xValue.yAxisCalloutData ? xValue.yAxisCalloutData : xValue.y || xValue.data,\n culture,\n )}\n </div>\n </div>\n </div>\n </div>\n );\n } else {\n const subcounts: { [id: string]: number } = xValue.yAxisCalloutData as { [id: string]: number };\n return (\n <div style={marginStyle}>\n <div className=\"ms-fontWeight-semibold\" style={{ fontSize: '12pt' }}>\n {xValue.legend!} ({yValue})\n </div>\n {Object.keys(subcounts).map((subcountName: string) => {\n return (\n <div key={subcountName} className={classes.calloutBlockContainer}>\n <div className={classes.calloutlegendText}> {convertToLocaleString(subcountName, culture)}</div>\n <div className={classes.calloutContentY}>\n {convertToLocaleString(subcounts[subcountName], culture)}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n }\n\n function _updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n function _getChartTitle(): string {\n const { chartTitle } = props;\n return (chartTitle ? `${chartTitle}. ` : '') + `Gauge chart with ${_segments.length} segments. `;\n }\n const { arcs } = _processProps();\n const focusAttributes = useFocusableGroup();\n return (\n <div className={classes.root} ref={el => (_rootElem.current = el)} {...focusAttributes}>\n <svg\n className={classes.chart}\n style={{ width: props.width, height: props.height! - _legendsHeight }}\n role=\"region\"\n aria-label={_getChartTitle()}\n onMouseLeave={_handleMouseOut}\n >\n <g transform={`translate(${width / 2}, ${height - (_margins.bottom + _legendsHeight)})`}>\n {props.chartTitle && (\n <text\n x={0}\n y={-(_outerRadius + TITLE_OFFSET)}\n textAnchor=\"middle\"\n className={classes.chartTitle}\n aria-hidden={true}\n >\n {props.chartTitle}\n </text>\n )}\n {!props.hideMinMax && (\n <>\n <text\n x={(_isRTL ? 1 : -1) * (_outerRadius + LABEL_OFFSET)}\n y={0}\n textAnchor=\"end\"\n className={classes.limits}\n role=\"img\"\n aria-label={`Min value: ${_minValue}`}\n >\n {formatValueWithSIPrefix(_minValue)}\n </text>\n <text\n x={(_isRTL ? -1 : 1) * (_outerRadius + LABEL_OFFSET)}\n y={0}\n textAnchor=\"start\"\n className={classes.limits}\n role=\"img\"\n aria-label={`Max value: ${_maxValue}`}\n >\n {formatValueWithSIPrefix(_maxValue)}\n </text>\n </>\n )}\n {arcs.map((arc, index) => {\n const segment = _segments[arc.segmentIndex];\n return (\n <React.Fragment key={index}>\n <path\n d={arc.d}\n strokeWidth={focusedElement === segment.legend ? ARC_PADDING : 0}\n className={classes.segment}\n fill={segment.color}\n opacity={_legendHighlighted(segment.legend) || _noLegendHighlighted() ? 1 : 0.1}\n {...getAccessibleDataObject(\n {\n ariaLabel: getSegmentLabel(segment, _minValue, _maxValue, props.variant, true),\n ...segment.accessibilityData,\n },\n 'img',\n true,\n )}\n onFocus={e => _handleFocus(e, segment.legend)}\n onBlur={_handleBlur}\n onMouseEnter={e => _handleMouseOver(e, segment.legend)}\n onMouseLeave={e => _handleCalloutDismiss()}\n onMouseMove={e => _handleMouseOver(e, segment.legend)}\n data-is-focusable={_legendHighlighted(segment.legend) || _noLegendHighlighted()}\n tabIndex={segment.legend !== '' ? 0 : undefined}\n />\n </React.Fragment>\n );\n })}\n {_renderNeedle()}\n <g\n onMouseEnter={e => _handleMouseOver(e, 'Chart value')}\n onMouseMove={e => _handleMouseOver(e, 'Chart value')}\n >\n <SVGTooltipText\n content={getChartValueLabel(props.chartValue, _minValue, _maxValue, props.chartValueFormat)}\n textProps={{\n x: 0,\n y: 0,\n textAnchor: 'middle',\n className: classes.chartValue,\n fontSize: chartValueSize,\n 'aria-hidden': 'true',\n }}\n maxWidth={_innerRadius * 2 - 24}\n wrapContent={_wrapContent}\n />\n </g>\n {props.sublabel && (\n <SVGTooltipText\n content={props.sublabel}\n textProps={{\n x: 0,\n y: 4,\n textAnchor: 'middle',\n dominantBaseline: 'hanging',\n className: classes.sublabel,\n }}\n maxWidth={_innerRadius * 2}\n wrapContent={_wrapContent}\n />\n )}\n </g>\n </svg>\n {_renderLegends()}\n {!props.hideTooltip && isPopoverOpen && (\n <ChartPopover\n {...props.calloutProps}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n customCallout={{\n customizedCallout: _multiValueCallout({ hoverXValue: hoverXValue, YValueHover: hoverYValues }),\n }}\n />\n )}\n </div>\n );\n },\n);\nGaugeChart.displayName = 'GaugeChart';\n"],"names":["React","useGaugeChartStyles","select","d3Select","arc","d3Arc","Points","areArraysEqual","formatValueWithSIPrefix","getAccessibleDataObject","getColorFromToken","getNextColor","pointTypes","useRtl","convertToLocaleString","SVGTooltipText","Legends","Shape","useFocusableGroup","ChartPopover","GAUGE_MARGIN","LABEL_WIDTH","LABEL_HEIGHT","LABEL_OFFSET","TITLE_OFFSET","EXTRA_NEEDLE_LENGTH","ARC_PADDING","BREAKPOINTS","minRadius","arcWidth","fontSize","calcNeedleRotation","chartValue","minValue","maxValue","needleRotation","getSegmentLabel","segment","variant","isAriaLabel","legend","size","toFixed","start","end","getChartValueLabel","chartValueFormat","forCallout","toString","GaugeChart","forwardRef","props","forwardedRef","_getMargins","hideMinMax","chartTitle","sublabel","left","right","top","bottom","_margins","_legendsHeight","hideLegend","_rootElem","useRef","_isRTL","width","setWidth","useState","height","setHeight","hoveredLegend","setHoveredLegend","selectedLegends","setSelectedLegends","legendProps","focusedElement","setFocusedElement","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","hoverXValue","setHoverXValue","hoverYValues","setHoverYValues","prevPropsRef","_width","_height","_outerRadius","Math","min","chartValueSize","_getStylesBasedOnBreakpoint","_innerRadius","_minValue","_maxValue","_segments","_calloutAnchor","useEffect","current","prevProps","useImperativeHandle","componentRef","chartContainer","classes","index","length","_processProps","segments","roundCorners","total","processedSegments","map","max","color","accessibilityData","push","arcGenerator","cornerRadius","padAngle","padRadius","rtlSafeSegments","Array","from","reverse","prevAngle","PI","arcs","endAngle","d","innerRadius","outerRadius","startAngle","segmentIndex","_renderNeedle","rtlSafeNeedleRotation","strokeWidth","halfStrokeWidth","needleLength","g","transform","path","className","needle","data-is-focusable","onFocus","e","_handleFocus","onBlur","_handleBlur","onMouseEnter","_handleMouseOver","onMouseMove","role","aria-label","_renderLegends","legends","title","hoverAction","onMouseOutAction","div","legendsContainer","style","centerLegends","onChange","_onLegendSelectionChange","event","currentLegend","canSelectMultipleLegends","slice","_legendHighlighted","_getHighlightedLegend","includes","_noLegendHighlighted","focusEvent","_showCallout","_hideCallout","mouseEvent","hoveredElement","_handleMouseOut","_handleCalloutDismiss","isFocusEvent","clientX","clientY","target","currentTarget","boundingRect","getBoundingClientRect","yValue","_updatePosition","isBlurEvent","_wrapContent","content","id","maxWidth","textElement","text","node","isOverflowing","textLength","getComputedTextLength","_multiValueCallout","calloutProps","yValueHoverSubCountsExists","_yValueHoverSubCountsExists","YValueHover","calloutContentRoot","calloutDateTimeContainer","marginBottom","calloutContentX","xAxisCalloutAccessibilityData","culture","calloutInfoContainer","display","yValues","isLast","shouldDrawBorderBottom","callOutAccessibilityData","key","paddingBottom","_getCalloutContent","descriptionMessage","yValueHover","some","yAxisCalloutData","xValue","marginStyle","marginRight","toDrawShape","undefined","calloutBlockContainer","borderLeft","svgProps","shapeStyles","pathProps","fill","shape","Object","keys","calloutlegendText","calloutContentY","data","subcounts","subcountName","newX","newY","threshold","distance","sqrt","pow","_getChartTitle","focusAttributes","root","ref","el","svg","chart","onMouseLeave","textAnchor","aria-hidden","limits","Fragment","opacity","ariaLabel","tabIndex","textProps","wrapContent","dominantBaseline","hideTooltip","customCallout","customizedCallout","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["GaugeChart.types.ts"],"sourcesContent":["import { LegendsProps } from '../Legends/index';\nimport { AccessibilityProps } from '../../types/index';\nimport { ChartPopoverProps } from '../CommonComponents/ChartPopover.types';\n\n/**\n * Gauge Chart segment interface.\n * {@docCategory GaugeChart}\n */\nexport interface GaugeChartSegment {\n /**\n * Legend text for a segment\n */\n legend: string;\n\n /**\n * Size of the segment\n */\n size: number;\n\n /**\n * Color of the segment\n */\n color?: string;\n\n /**\n * Gradient color of the segment\n */\n gradient?: [string, string];\n\n /**\n * Accessibility data for the segment\n */\n accessibilityData?: AccessibilityProps;\n}\n\n/**\n * {@docCategory GaugeChart}\n */\nexport type GaugeValueFormat = 'percentage' | 'fraction';\n\n/**\n * {@docCategory GaugeChart}\n */\nexport type GaugeChartVariant = 'single-segment' | 'multiple-segments';\n\n/**\n * Gauge Chart properties\n * {@docCategory GaugeChart}\n */\nexport interface GaugeChartProps {\n /**\n * Width of the chart\n */\n width?: number;\n\n /**\n * Height of the chart\n */\n height?: number;\n\n /**\n * Title of the chart\n */\n chartTitle?: string;\n\n /**\n * Current value of the gauge\n */\n chartValue: number;\n\n /**\n * Sections of the gauge\n */\n segments: GaugeChartSegment[];\n\n /**\n * Minimum value of the gauge\n * @defaultvalue 0\n */\n minValue?: number;\n\n /**\n * Maximum value of the gauge\n */\n maxValue?: number;\n\n /**\n * Additional text to display below the chart value\n */\n sublabel?: string;\n\n /**\n * Hide the min and max values of the gauge\n * @defaultvalue false\n */\n hideMinMax?: boolean;\n\n /**\n * Format of the chart value\n * @defaultvalue GaugeValueFormat.Percentage\n */\n chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string);\n\n /**\n * Decides whether to show/hide legends\n * @defaultvalue false\n */\n hideLegend?: boolean;\n\n /*\n * Props for the legends in the chart\n */\n legendProps?: Partial<LegendsProps>;\n\n /**\n * Do not show tooltips in chart\n * @defaultvalue false\n */\n hideTooltip?: boolean;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules\n */\n styles?: GaugeChartStyles;\n\n /**\n * Defines the culture to localize the numbers and dates\n */\n culture?: string;\n\n /**\n * Props for the callout in the chart\n */\n calloutProps?: Partial<ChartPopoverProps>;\n\n /**\n * Specifies the variant of GaugeChart to be rendered\n * @defaultvalue GaugeChartVariant.MultipleSegments\n */\n variant?: GaugeChartVariant;\n\n /**\n * Prop to enable the gradient in the chart\n * @default false\n */\n enableGradient?: boolean;\n\n /**\n * Prop to enable the round corners in the chart\n * @default false\n */\n roundCorners?: boolean;\n}\n\n/**\n * Gauge Chart styles\n * {@docCategory GaugeChart}\n */\nexport interface GaugeChartStyles {\n /**\n * Styles for the root element\n */\n root?: string;\n\n /**\n * Styles for the chart\n */\n chart?: string;\n\n /**\n * Styles for the min and max values\n */\n limits?: string;\n\n /**\n * Styles for the chart value\n */\n chartValue?: string;\n\n /**\n * Styles for the sublabel\n */\n sublabel?: string;\n\n /**\n * Styles for the needle\n */\n needle?: string;\n\n /**\n * Styles for the chart title\n */\n chartTitle?: string;\n\n /**\n * Styles for the segments\n */\n segment?: string;\n\n /**\n * Styles for gradient segments\n */\n gradientSegment?: string;\n\n /**\n * Styles for the legends container\n */\n legendsContainer?: string;\n\n /**\n * Styles for callout root-content\n */\n calloutContentRoot?: string;\n\n /**\n * Styles for callout x-content\n */\n calloutContentX?: string;\n\n /**\n * Styles for callout y-content\n */\n calloutContentY?: string;\n\n /**\n * Styles for description message\n */\n descriptionMessage?: string;\n\n /**\n * Styles for callout Date time container\n */\n calloutDateTimeContainer?: string;\n\n /**\n * Styles for callout info container\n */\n calloutInfoContainer?: string;\n\n /**\n * Styles for callout block container\n */\n calloutBlockContainer?: string;\n\n /**\n * Styles for callout legend text\n */\n calloutlegendText?: string;\n\n /**\n * Styles for the shape object in the callout\n */\n shapeStyles?: string;\n}\n"],"names":[],"rangeMappings":";;;","mappings":"AA0JA;;;CAGC,GACD,WA+FC"}
1
+ {"version":3,"sources":["GaugeChart.types.ts"],"sourcesContent":["import { LegendsProps } from '../Legends/index';\nimport { AccessibilityProps, Chart } from '../../types/index';\nimport { ChartPopoverProps } from '../CommonComponents/ChartPopover.types';\n\n/**\n * Gauge Chart segment interface.\n * {@docCategory GaugeChart}\n */\nexport interface GaugeChartSegment {\n /**\n * Legend text for a segment\n */\n legend: string;\n\n /**\n * Size of the segment\n */\n size: number;\n\n /**\n * Color of the segment\n */\n color?: string;\n\n /**\n * Gradient color of the segment\n */\n gradient?: [string, string];\n\n /**\n * Accessibility data for the segment\n */\n accessibilityData?: AccessibilityProps;\n}\n\n/**\n * {@docCategory GaugeChart}\n */\nexport type GaugeValueFormat = 'percentage' | 'fraction';\n\n/**\n * {@docCategory GaugeChart}\n */\nexport type GaugeChartVariant = 'single-segment' | 'multiple-segments';\n\n/**\n * Gauge Chart properties\n * {@docCategory GaugeChart}\n */\nexport interface GaugeChartProps {\n /**\n * Width of the chart\n */\n width?: number;\n\n /**\n * Height of the chart\n */\n height?: number;\n\n /**\n * Title of the chart\n */\n chartTitle?: string;\n\n /**\n * Current value of the gauge\n */\n chartValue: number;\n\n /**\n * Sections of the gauge\n */\n segments: GaugeChartSegment[];\n\n /**\n * Minimum value of the gauge\n * @defaultvalue 0\n */\n minValue?: number;\n\n /**\n * Maximum value of the gauge\n */\n maxValue?: number;\n\n /**\n * Additional text to display below the chart value\n */\n sublabel?: string;\n\n /**\n * Hide the min and max values of the gauge\n * @defaultvalue false\n */\n hideMinMax?: boolean;\n\n /**\n * Format of the chart value\n * @defaultvalue GaugeValueFormat.Percentage\n */\n chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string);\n\n /**\n * Decides whether to show/hide legends\n * @defaultvalue false\n */\n hideLegend?: boolean;\n\n /*\n * Props for the legends in the chart\n */\n legendProps?: Partial<LegendsProps>;\n\n /**\n * Do not show tooltips in chart\n * @defaultvalue false\n */\n hideTooltip?: boolean;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules\n */\n styles?: GaugeChartStyles;\n\n /**\n * Defines the culture to localize the numbers and dates\n */\n culture?: string;\n\n /**\n * Props for the callout in the chart\n */\n calloutProps?: Partial<ChartPopoverProps>;\n\n /**\n * Specifies the variant of GaugeChart to be rendered\n * @defaultvalue GaugeChartVariant.MultipleSegments\n */\n variant?: GaugeChartVariant;\n\n /**\n * Prop to enable the gradient in the chart\n * @default false\n */\n enableGradient?: boolean;\n\n /**\n * Prop to enable the round corners in the chart\n * @default false\n */\n roundCorners?: boolean;\n\n /**\n * Optional callback to access the Chart interface. Use this instead of ref for accessing\n * the public methods and properties of the component.\n */\n componentRef?: React.RefObject<Chart>;\n}\n\n/**\n * Gauge Chart styles\n * {@docCategory GaugeChart}\n */\nexport interface GaugeChartStyles {\n /**\n * Styles for the root element\n */\n root?: string;\n\n /**\n * Styles for the chart\n */\n chart?: string;\n\n /**\n * Styles for the min and max values\n */\n limits?: string;\n\n /**\n * Styles for the chart value\n */\n chartValue?: string;\n\n /**\n * Styles for the sublabel\n */\n sublabel?: string;\n\n /**\n * Styles for the needle\n */\n needle?: string;\n\n /**\n * Styles for the chart title\n */\n chartTitle?: string;\n\n /**\n * Styles for the segments\n */\n segment?: string;\n\n /**\n * Styles for gradient segments\n */\n gradientSegment?: string;\n\n /**\n * Styles for the legends container\n */\n legendsContainer?: string;\n\n /**\n * Styles for callout root-content\n */\n calloutContentRoot?: string;\n\n /**\n * Styles for callout x-content\n */\n calloutContentX?: string;\n\n /**\n * Styles for callout y-content\n */\n calloutContentY?: string;\n\n /**\n * Styles for description message\n */\n descriptionMessage?: string;\n\n /**\n * Styles for callout Date time container\n */\n calloutDateTimeContainer?: string;\n\n /**\n * Styles for callout info container\n */\n calloutInfoContainer?: string;\n\n /**\n * Styles for callout block container\n */\n calloutBlockContainer?: string;\n\n /**\n * Styles for callout legend text\n */\n calloutlegendText?: string;\n\n /**\n * Styles for the shape object in the callout\n */\n shapeStyles?: string;\n}\n"],"names":[],"rangeMappings":";;;","mappings":"AAgKA;;;CAGC,GACD,WA+FC"}
@@ -37,6 +37,7 @@ export const GroupedVerticalBarChart = /*#__PURE__*/ React.forwardRef((props = {
37
37
  let _groupWidth = 0;
38
38
  let _xAxisInnerPadding = 0;
39
39
  let _xAxisOuterPadding = 0;
40
+ const cartesianChartRef = React.useRef(null);
40
41
  const [color, setColor] = React.useState('');
41
42
  const [dataForHoverCard, setDataForHoverCard] = React.useState(0);
42
43
  const [selectedLegends, setSelectedLegends] = React.useState(((_props_legendProps = props.legendProps) === null || _props_legendProps === void 0 ? void 0 : _props_legendProps.selectedLegends) || []);
@@ -62,6 +63,13 @@ export const GroupedVerticalBarChart = /*#__PURE__*/ React.forwardRef((props = {
62
63
  }, [
63
64
  (_props_legendProps1 = props.legendProps) === null || _props_legendProps1 === void 0 ? void 0 : _props_legendProps1.selectedLegends
64
65
  ]);
66
+ React.useImperativeHandle(props.componentRef, ()=>{
67
+ var _cartesianChartRef_current;
68
+ var _cartesianChartRef_current_chartContainer;
69
+ return {
70
+ chartContainer: (_cartesianChartRef_current_chartContainer = (_cartesianChartRef_current = cartesianChartRef.current) === null || _cartesianChartRef_current === void 0 ? void 0 : _cartesianChartRef_current.chartContainer) !== null && _cartesianChartRef_current_chartContainer !== void 0 ? _cartesianChartRef_current_chartContainer : null
71
+ };
72
+ }, []);
65
73
  const _adjustProps = ()=>{
66
74
  _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);
67
75
  // x0_inner_padding = space_between_groups / (space_between_groups + group_width)
@@ -477,6 +485,7 @@ export const GroupedVerticalBarChart = /*#__PURE__*/ React.forwardRef((props = {
477
485
  xAxisOuterPadding: _xAxisOuterPadding
478
486
  },
479
487
  barwidth: _barWidth,
488
+ componentRef: cartesianChartRef,
480
489
  /* eslint-disable react/jsx-no-bind */ children: ()=>{
481
490
  return /*#__PURE__*/ React.createElement("g", null, _groupedVerticalBarGraph);
482
491
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["GroupedVerticalBarChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useGroupedVerticalBarChartStyles_unstable } from './useGroupedVerticalBarChartStyles.styles';\nimport { max as d3Max } from 'd3-array';\nimport { select as d3Select } from 'd3-selection';\nimport { Axis as D3Axis } from 'd3-axis';\nimport { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear } from 'd3-scale';\n\nimport { useId } from '@fluentui/react-utilities';\nimport {\n ChartTypes,\n IAxisData,\n getAccessibleDataObject,\n tooltipOfXAxislabels,\n XAxisTypes,\n getTypeOfAxis,\n formatValueWithSIPrefix,\n getScalePadding,\n getBarWidth,\n isScalePaddingDefined,\n getNextColor,\n areArraysEqual,\n calculateLongestLabelWidth,\n useRtl,\n} from '../../utilities/index';\n\nimport {\n AccessibilityProps,\n CartesianChart,\n Margins,\n Legend,\n RefArrayData,\n GroupedVerticalBarChartProps,\n GroupedVerticalBarChartData,\n GVBarChartSeriesPoint,\n Legends,\n YValueHover,\n DataVizPalette,\n getColorFromToken,\n ChartPopoverProps,\n} from '../../index';\n\ntype StringAxis = D3Axis<string>;\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\n\nconst MIN_DOMAIN_MARGIN = 8;\nconst X1_INNER_PADDING = 0.1;\n// x1_inner_padding = space_between_bars / (space_between_bars + bar_width)\n// => space_between_bars = (x1_inner_padding / (1 - x1_inner_padding)) * bar_width\n/** Rate at which the space between the bars in a group changes wrt the bar width */\nconst BAR_GAP_RATE = X1_INNER_PADDING / (1 - X1_INNER_PADDING);\n\n// This interface used for - While forming datapoints from given prop \"data\" in code\ninterface GVDataPoint {\n [key: string]: number | string;\n}\n\n// While forming datapoints from given prop \"data\" in code. These datapoints are used for to draw graph easily.\ninterface GVSingleDataPoint {\n [key: string]: GVDataPoint;\n}\n\nexport const GroupedVerticalBarChart: React.FC<GroupedVerticalBarChartProps> = React.forwardRef<\n HTMLDivElement,\n GroupedVerticalBarChartProps\n>((props = { maxBarWidth: 24 }, forwardedRef) => {\n const _tooltipId: string = useId('GVBCTooltipId_');\n const _emptyChartId: string = useId('_GVBC_empty');\n const _useRtl: boolean = useRtl();\n let _domainMargin: number = MIN_DOMAIN_MARGIN;\n let _dataset: GVDataPoint[] = [];\n let _keys: string[] = [];\n let _xAxisLabels: string[] = [];\n let _datasetForBars: any[] = [];\n let _margins: Margins = { top: 0, right: 0, bottom: 0, left: 0 };\n let _groupedVerticalBarGraph: JSX.Element[] = [];\n let _refArray: RefArrayData[] = [];\n let _yMax: number = 0;\n let _calloutAnchorPoint: GVBarChartSeriesPoint | null = null;\n let _barWidth: number = 0;\n let _groupWidth: number = 0;\n let _xAxisInnerPadding: number = 0;\n let _xAxisOuterPadding: number = 0;\n\n const [color, setColor] = React.useState<string>('');\n const [dataForHoverCard, setDataForHoverCard] = React.useState<number>(0);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [YValueHover, setYValueHover] = React.useState<YValueHover[]>([]);\n const [hoverXValue, setHoverXValue] = React.useState<string>('');\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps | undefined>(\n undefined,\n );\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const classes = useGroupedVerticalBarChartStyles_unstable(props);\n\n React.useEffect(() => {\n if (!areArraysEqual(props.legendProps?.selectedLegends, selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n }, [props.legendProps?.selectedLegends]);\n\n const _adjustProps = () => {\n _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);\n // x0_inner_padding = space_between_groups / (space_between_groups + group_width)\n // space_between_groups = 2 * bar_width\n // group_width = keys.length * bar_width + (keys.length - 1) * space_between_bars\n _xAxisInnerPadding = getScalePadding(\n props.xAxisInnerPadding,\n undefined,\n 2 / (2 + keys.length + (keys.length - 1) * BAR_GAP_RATE),\n );\n _xAxisOuterPadding = getScalePadding(props.xAxisOuterPadding);\n };\n\n const _createDataset = (points: GroupedVerticalBarChartData[]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const datasetForBars: any = [];\n const dataset: GVDataPoint[] = [];\n\n points.forEach((point: GroupedVerticalBarChartData, index: number) => {\n const singleDatasetPoint: GVDataPoint = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const singleDatasetPointForBars: any = {};\n const singleDataSeries: GVBarChartSeriesPoint[] = [];\n\n point.series.forEach((seriesPoint: GVBarChartSeriesPoint, seriesIndex) => {\n singleDatasetPoint[seriesPoint.key] = seriesPoint.data;\n singleDatasetPointForBars[seriesPoint.key] = {\n ...seriesPoint,\n };\n singleDataSeries.push(seriesPoint);\n });\n\n singleDatasetPointForBars.xAxisPoint = point.name;\n singleDatasetPointForBars.indexNum = index;\n singleDatasetPointForBars.groupSeries = singleDataSeries;\n singleDatasetPointForBars.stackCallOutAccessibilityData = point.stackCallOutAccessibilityData;\n datasetForBars.push(singleDatasetPointForBars);\n dataset.push(singleDatasetPoint);\n });\n _dataset = dataset;\n return datasetForBars;\n };\n\n const _createDataSetOfGVBC = (points: GroupedVerticalBarChartData[]) => {\n const keys: string[] = [];\n const xAxisLabels: string[] = points.map(singlePoint => singlePoint.name);\n points[0].series.forEach((singleKey: GVBarChartSeriesPoint) => {\n keys.push(singleKey.key);\n });\n const datasetForBars = _createDataset(points);\n return {\n keys,\n xAxisLabels,\n datasetForBars,\n };\n };\n\n const onLegendSelectionChange = (\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void => {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n };\n\n const _getLegendData = (points: GroupedVerticalBarChartData[]): JSX.Element => {\n const data = points;\n const defaultPalette: string[] = [\n getColorFromToken(DataVizPalette.color1),\n getColorFromToken(DataVizPalette.color2),\n getColorFromToken(DataVizPalette.color3),\n getColorFromToken(DataVizPalette.color4),\n getColorFromToken(DataVizPalette.color5),\n ];\n const actions: Legend[] = [];\n\n data.forEach((singleChartData: GroupedVerticalBarChartData) => {\n singleChartData.series.forEach((point: GVBarChartSeriesPoint) => {\n let color: string = point.color ? point.color : defaultPalette[Math.floor(Math.random() * 4 + 1)];\n const checkSimilarLegends = actions.filter((leg: Legend) => leg.title === point.legend && leg.color === color);\n if (checkSimilarLegends!.length > 0) {\n return;\n }\n const legend: Legend = {\n title: point.legend,\n color,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(point.legend);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n\n actions.push(legend);\n });\n });\n return (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...props.legendProps}\n onChange={onLegendSelectionChange}\n />\n );\n };\n\n const points = props.data;\n const { keys, xAxisLabels, datasetForBars } = _createDataSetOfGVBC(points!);\n _keys = keys;\n _xAxisLabels = xAxisLabels;\n _datasetForBars = datasetForBars;\n const _xAxisType: XAxisTypes = getTypeOfAxis(points![0].name, true) as XAxisTypes;\n const legends: JSX.Element = _getLegendData(points!);\n _adjustProps();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const yMax = d3Max(_dataset, (point: any) => d3Max(_keys, (key: string) => point[key]));\n _yMax = Math.max(yMax, props.yMaxValue || 0);\n\n const calloutProps: ChartPopoverProps = {\n clickPosition,\n isPopoverOpen,\n color,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue ? yCalloutValue : dataForHoverCard,\n YValueHover,\n hoverXValue,\n culture: props.culture ?? 'en-us',\n isCartesian: true,\n ...props.calloutProps,\n ...getAccessibleDataObject(callOutAccessibilityData, 'text', false),\n };\n const tickParams = {\n tickValues: props.tickValues!,\n tickFormat: props.tickFormat!,\n };\n\n const _getGraphData = (\n xScale: StringAxis | NumericAxis,\n yScale: NumericAxis,\n containerHeight: number,\n containerWidth: number,\n xElement?: SVGElement | null,\n ) => {\n const xScale0 = _createX0Scale(containerWidth);\n\n // Setting the bar width here is safe because there are no dependencies earlier in the code\n // that rely on the width of bars in vertical bar charts with string x-axis.\n _barWidth = getBarWidth(\n props.barWidth,\n props.maxBarWidth,\n xScale0.bandwidth() / (_keys.length + (_keys.length - 1) * BAR_GAP_RATE),\n );\n _groupWidth = (_keys.length + (_keys.length - 1) * BAR_GAP_RATE) * _barWidth;\n\n const xScale1 = _createX1Scale();\n const allGroupsBars: JSX.Element[] = [];\n _datasetForBars.forEach((singleSet: GVSingleDataPoint) => {\n allGroupsBars.push(_buildGraph(singleSet, xScale0, xScale1, containerHeight, xElement!));\n });\n _groupedVerticalBarGraph = allGroupsBars;\n };\n\n const _getMargins = (margins: Margins) => {\n _margins = margins;\n };\n\n const _getOpacity = (legendTitle: string): string => {\n const opacity = _legendHighlighted(legendTitle) || _noLegendHighlighted() ? '' : '0.1';\n return opacity;\n };\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n const onBarHover = (\n pointData: GVBarChartSeriesPoint,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupData: any,\n mouseEvent: React.MouseEvent<SVGElement>,\n ): void => {\n mouseEvent.persist();\n if (_calloutAnchorPoint !== pointData) {\n _calloutAnchorPoint = pointData;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setPopoverOpen(_noLegendHighlighted() || _legendHighlighted(pointData.legend));\n setCalloutLegend(pointData.legend);\n setDataForHoverCard(pointData.data);\n setColor(pointData.color);\n setXCalloutValue(pointData.xAxisCalloutData!);\n setYCalloutValue(pointData.yAxisCalloutData!);\n setCallOutAccessibilityData(\n props.isCalloutForStack ? groupData.stackCallOutAccessibilityData : pointData.callOutAccessibilityData,\n );\n setYValueHover(groupData.groupSeries);\n setHoverXValue(pointData.xAxisCalloutData!);\n }\n };\n\n const _onBarLeave = (): void => {\n /**/\n };\n\n const _handleChartMouseLeave = (): void => {\n _calloutAnchorPoint = null;\n setPopoverOpen(false);\n };\n\n const onBarFocus = (\n pointData: GVBarChartSeriesPoint,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupData: any,\n refArrayIndexNumber: number,\n ): void => {\n _refArray.forEach((obj: RefArrayData, index: number) => {\n if (obj.index === pointData.legend && refArrayIndexNumber === index) {\n setPopoverOpen(_noLegendHighlighted() || _legendHighlighted(pointData.legend));\n setCalloutLegend(pointData.legend);\n setDataForHoverCard(pointData.data);\n setColor(pointData.color);\n setXCalloutValue(pointData.xAxisCalloutData!);\n setYCalloutValue(pointData.yAxisCalloutData!);\n setCallOutAccessibilityData(\n props.isCalloutForStack ? groupData.stackCallOutAccessibilityData : pointData.callOutAccessibilityData,\n );\n setYValueHover(groupData.groupSeries);\n setHoverXValue(pointData.xAxisCalloutData!);\n }\n });\n };\n\n const _refCallback = (element: SVGRectElement, legendTitle: string, refIndexNumber: number): void => {\n _refArray[refIndexNumber] = { index: legendTitle, refElement: element };\n };\n\n const _buildGraph = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n singleSet: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale0: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale1: any,\n containerHeight: number,\n xElement: SVGElement,\n ): JSX.Element => {\n const singleGroup: JSX.Element[] = [];\n const barLabelsForGroup: JSX.Element[] = [];\n\n const yBarScale = d3ScaleLinear()\n .domain([0, yMax])\n .range([0, containerHeight! - _margins.bottom! - _margins.top!]);\n\n const tempDataSet = Object.keys(datasetForBars[0]).splice(0, keys.length);\n tempDataSet.forEach((datasetKey: string, index: number) => {\n const refIndexNumber = singleSet.indexNum * tempDataSet.length + index;\n const pointData = singleSet[datasetKey];\n // To align the centers of the generated bandwidth and the calculated one when they differ,\n // use the following addend.\n const xPoint = xScale1(datasetKey) + (xScale1.bandwidth() - _barWidth) / 2;\n const yPoint = Math.max(containerHeight! - _margins.bottom! - yBarScale(pointData.data), 0);\n const startColor = pointData.color ? pointData.color : getNextColor(index, 0);\n\n // Not rendering data with 0.\n pointData.data &&\n singleGroup.push(\n <React.Fragment key={`${singleSet.indexNum}-${index}`}>\n <rect\n className={classes.opacityChangeOnHover}\n height={Math.max(yBarScale(pointData.data), 0)}\n width={_barWidth}\n x={xPoint}\n y={yPoint}\n data-is-focusable={!props.hideTooltip && (_legendHighlighted(pointData.legend) || _noLegendHighlighted())}\n opacity={_getOpacity(pointData.legend)}\n ref={(e: SVGRectElement | null) => {\n _refCallback(e!, pointData.legend, refIndexNumber);\n }}\n fill={startColor}\n rx={0}\n onMouseOver={onBarHover.bind(null, pointData, singleSet)}\n onMouseMove={onBarHover.bind(null, pointData, singleSet)}\n onMouseOut={_onBarLeave}\n onFocus={onBarFocus.bind(null, pointData, singleSet, refIndexNumber)}\n onBlur={_onBarLeave}\n onClick={pointData.onClick}\n aria-label={getAriaLabel(pointData, singleSet.xAxisPoint)}\n tabIndex={pointData.legend !== '' ? 0 : undefined}\n role=\"img\"\n />\n </React.Fragment>,\n );\n if (\n pointData.data &&\n !props.hideLabels &&\n _barWidth >= 16 &&\n (_legendHighlighted(pointData.legend) || _noLegendHighlighted())\n ) {\n barLabelsForGroup.push(\n <text\n key={`${singleSet.indexNum}-${index}`}\n x={xPoint + _barWidth / 2}\n y={yPoint - 6}\n textAnchor=\"middle\"\n className={classes.barLabel}\n aria-hidden={true}\n >\n {formatValueWithSIPrefix(pointData.data)}\n </text>,\n );\n }\n });\n // Used to display tooltip at x axis labels.\n if (!props.wrapXAxisLables && props.showXAxisLablesTooltip) {\n const xAxisElement = d3Select(xElement).call(xScale0);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n xAxis: xAxisElement,\n };\n xAxisElement && tooltipOfXAxislabels(tooltipProps);\n }\n return (\n <g\n key={singleSet.indexNum}\n transform={`translate(${xScale0(singleSet.xAxisPoint) + (xScale0.bandwidth() - _groupWidth) / 2}, 0)`}\n >\n {singleGroup}\n {barLabelsForGroup}\n </g>\n );\n };\n\n // For grouped vertical bar chart, First need to define total scale (from start to end)\n // From that need to define scale for single group of bars - done by createX1Scale\n const _createX0Scale = (containerWidth: number) => {\n const x0Axis = d3ScaleBand()\n .domain(xAxisLabels)\n .range(\n _useRtl\n ? [containerWidth! - _margins.right! - _domainMargin, _margins.left! + _domainMargin]\n : [_margins.left! + _domainMargin, containerWidth! - _margins.right! - _domainMargin],\n )\n .paddingInner(_xAxisInnerPadding)\n .paddingOuter(_xAxisOuterPadding);\n return x0Axis;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _createX1Scale = (): any => {\n return (\n d3ScaleBand()\n .domain(keys)\n // When there is only one group, xScale0 adds padding around it,\n // causing the bandwidth to become smaller than the actual group width.\n // So to render bars in the group correctly, use groupWidth instead of the generated scale bandwidth.\n .range(_useRtl ? [_groupWidth, 0] : [0, _groupWidth])\n .paddingInner(X1_INNER_PADDING)\n );\n };\n\n const _onLegendHover = (legendTitle: string): void => {\n setActiveLegend(legendTitle);\n };\n\n const _onLegendLeave = (): void => {\n setActiveLegend('');\n };\n\n const _getAxisData = React.useCallback(\n (yAxisData: IAxisData) => {\n if (yAxisData && yAxisData.yAxisDomainValues.length) {\n const { yAxisDomainValues: domainValue } = yAxisData;\n _yMax = Math.max(domainValue[domainValue.length - 1], props.yMaxValue || 0);\n }\n },\n [props.yMaxValue],\n );\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n const _legendHighlighted = (legendTitle: string) => {\n return _getHighlightedLegend().includes(legendTitle!);\n };\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = () => {\n return _getHighlightedLegend().length === 0;\n };\n\n const _getHighlightedLegend = () => {\n return selectedLegends.length > 0 ? selectedLegends : activeLegend ? [activeLegend] : [];\n };\n\n const getAriaLabel = (point: GVBarChartSeriesPoint, xAxisPoint: string): string => {\n const xValue = point.xAxisCalloutData || xAxisPoint;\n const legend = point.legend;\n const yValue = point.yAxisCalloutData || point.data;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n };\n\n const _getDomainMargins = (containerWidth: number): Margins => {\n /** Total width available to render the bars */\n const totalWidth = containerWidth - (_margins.left! + MIN_DOMAIN_MARGIN) - (_margins.right! + MIN_DOMAIN_MARGIN);\n /** Rate at which the space between the groups changes wrt the group width */\n const groupGapRate = _xAxisInnerPadding / (1 - _xAxisInnerPadding);\n\n if (_xAxisType === XAxisTypes.StringAxis) {\n if (isScalePaddingDefined(props.xAxisOuterPadding)) {\n // Setting the domain margin for string x-axis to 0 because the xAxisOuterPadding prop is now available\n // to adjust the space before the first group and after the last group.\n _domainMargin = 0;\n } else if (props.barWidth !== 'auto') {\n // Update the bar width so that when CartesianChart rerenders,\n // the following calculations don't use the previous bar width.\n _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);\n const groupWidth = (keys.length + (keys.length - 1) * BAR_GAP_RATE) * _barWidth;\n /** Total width required to render the groups. Directly proportional to group width */\n const reqWidth = (xAxisLabels.length + (xAxisLabels.length - 1) * groupGapRate) * groupWidth;\n\n if (totalWidth >= reqWidth) {\n // Center align the chart by setting equal left and right margins for domain\n _domainMargin = MIN_DOMAIN_MARGIN + (totalWidth - reqWidth) / 2;\n }\n } else if (props.mode === 'plotly' && xAxisLabels.length > 1) {\n // Calculate the remaining width after rendering groups at their maximum allowable width\n const groupBandwidth = totalWidth / (xAxisLabels.length + (xAxisLabels.length - 1) * groupGapRate);\n const barBandwidth = groupBandwidth / (keys.length + (keys.length - 1) * BAR_GAP_RATE);\n const barWidth = getBarWidth(props.barWidth, props.maxBarWidth, barBandwidth);\n const groupWidth = (keys.length + (keys.length - 1) * BAR_GAP_RATE) * barWidth;\n let reqWidth = (xAxisLabels.length + (xAxisLabels.length - 1) * groupGapRate) * groupWidth;\n const margin1 = (totalWidth - reqWidth) / 2;\n\n // Calculate the remaining width after accounting for the space required to render x-axis labels\n const step = calculateLongestLabelWidth(xAxisLabels) + 20;\n reqWidth = (xAxisLabels.length - _xAxisInnerPadding) * step;\n const margin2 = (totalWidth - reqWidth) / 2;\n\n _domainMargin = MIN_DOMAIN_MARGIN + Math.max(0, Math.min(margin1, margin2));\n }\n }\n\n return {\n ..._margins,\n left: _margins.left! + _domainMargin,\n right: _margins.right! + _domainMargin,\n };\n };\n\n const _isChartEmpty = (): boolean => {\n return !(\n props.data &&\n props.data.length > 0 &&\n props.data.filter((item: GroupedVerticalBarChartData) => item.series.length).length > 0\n );\n };\n\n const _getChartTitle = (): string => {\n return (\n (props.chartTitle ? `${props.chartTitle}. ` : '') +\n `Vertical bar chart with ${_xAxisLabels.length} groups of ${_keys.length} bars each. `\n );\n };\n\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={_getChartTitle()}\n points={_datasetForBars}\n chartType={ChartTypes.GroupedVerticalBarChart}\n calloutProps={calloutProps}\n legendBars={legends}\n xAxisType={_xAxisType}\n datasetForXAxisDomain={_xAxisLabels}\n tickParams={tickParams}\n tickPadding={props.tickPadding || 5}\n maxOfYVal={_yMax}\n getmargins={_getMargins}\n getGraphData={_getGraphData}\n getAxisData={_getAxisData}\n onChartMouseLeave={_handleChartMouseLeave}\n getDomainMargins={_getDomainMargins}\n {...(_xAxisType === XAxisTypes.StringAxis && {\n xAxisInnerPadding: _xAxisInnerPadding,\n xAxisOuterPadding: _xAxisOuterPadding,\n })}\n barwidth={_barWidth}\n /* eslint-disable react/jsx-no-bind */\n children={() => {\n return <g>{_groupedVerticalBarGraph}</g>;\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nGroupedVerticalBarChart.displayName = 'GroupedVerticalBarChart';\n"],"names":["React","useGroupedVerticalBarChartStyles_unstable","max","d3Max","select","d3Select","scaleBand","d3ScaleBand","scaleLinear","d3ScaleLinear","useId","ChartTypes","getAccessibleDataObject","tooltipOfXAxislabels","XAxisTypes","getTypeOfAxis","formatValueWithSIPrefix","getScalePadding","getBarWidth","isScalePaddingDefined","getNextColor","areArraysEqual","calculateLongestLabelWidth","useRtl","CartesianChart","Legends","DataVizPalette","getColorFromToken","MIN_DOMAIN_MARGIN","X1_INNER_PADDING","BAR_GAP_RATE","GroupedVerticalBarChart","forwardRef","props","maxBarWidth","forwardedRef","_tooltipId","_emptyChartId","_useRtl","_domainMargin","_dataset","_keys","_xAxisLabels","_datasetForBars","_margins","top","right","bottom","left","_groupedVerticalBarGraph","_refArray","_yMax","_calloutAnchorPoint","_barWidth","_groupWidth","_xAxisInnerPadding","_xAxisOuterPadding","color","setColor","useState","dataForHoverCard","setDataForHoverCard","selectedLegends","setSelectedLegends","legendProps","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","YValueHover","setYValueHover","hoverXValue","setHoverXValue","calloutLegend","setCalloutLegend","activeLegend","setActiveLegend","callOutAccessibilityData","setCallOutAccessibilityData","undefined","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","classes","useEffect","_adjustProps","barWidth","xAxisInnerPadding","keys","length","xAxisOuterPadding","_createDataset","points","datasetForBars","dataset","forEach","point","index","singleDatasetPoint","singleDatasetPointForBars","singleDataSeries","series","seriesPoint","seriesIndex","key","data","push","xAxisPoint","name","indexNum","groupSeries","stackCallOutAccessibilityData","_createDataSetOfGVBC","xAxisLabels","map","singlePoint","singleKey","onLegendSelectionChange","event","currentLegend","canSelectMultipleLegends","slice","onChange","_getLegendData","defaultPalette","color1","color2","color3","color4","color5","actions","singleChartData","Math","floor","random","checkSimilarLegends","filter","leg","title","legend","hoverAction","_handleChartMouseLeave","_onLegendHover","onMouseOutAction","_onLegendLeave","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","_xAxisType","yMax","yMaxValue","calloutProps","XValue","YValue","culture","isCartesian","tickParams","tickValues","tickFormat","_getGraphData","xScale","yScale","containerHeight","containerWidth","xElement","xScale0","_createX0Scale","bandwidth","xScale1","_createX1Scale","allGroupsBars","singleSet","_buildGraph","_getMargins","margins","_getOpacity","legendTitle","opacity","_legendHighlighted","_noLegendHighlighted","updatePosition","newX","newY","threshold","distance","sqrt","pow","onBarHover","pointData","groupData","mouseEvent","persist","clientX","clientY","xAxisCalloutData","yAxisCalloutData","isCalloutForStack","_onBarLeave","onBarFocus","refArrayIndexNumber","obj","_refCallback","element","refIndexNumber","refElement","singleGroup","barLabelsForGroup","yBarScale","domain","range","tempDataSet","Object","splice","datasetKey","xPoint","yPoint","startColor","Fragment","rect","className","opacityChangeOnHover","height","width","data-is-focusable","hideTooltip","ref","e","fill","rx","onMouseOver","bind","onMouseMove","onMouseOut","onFocus","onBlur","onClick","aria-label","getAriaLabel","tabIndex","role","hideLabels","text","textAnchor","barLabel","aria-hidden","wrapXAxisLables","showXAxisLablesTooltip","xAxisElement","call","document","getElementById","remove","tooltipProps","tooltipCls","tooltip","id","xAxis","g","transform","x0Axis","paddingInner","paddingOuter","_getAxisData","useCallback","yAxisData","yAxisDomainValues","domainValue","_getHighlightedLegend","includes","xValue","yValue","ariaLabel","_getDomainMargins","totalWidth","groupGapRate","StringAxis","groupWidth","reqWidth","mode","groupBandwidth","barBandwidth","margin1","step","margin2","min","_isChartEmpty","item","_getChartTitle","chartTitle","chartType","legendBars","xAxisType","datasetForXAxisDomain","tickPadding","maxOfYVal","getmargins","getGraphData","getAxisData","onChartMouseLeave","getDomainMargins","barwidth","children","div","style","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["GroupedVerticalBarChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useGroupedVerticalBarChartStyles_unstable } from './useGroupedVerticalBarChartStyles.styles';\nimport { max as d3Max } from 'd3-array';\nimport { select as d3Select } from 'd3-selection';\nimport { Axis as D3Axis } from 'd3-axis';\nimport { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear } from 'd3-scale';\n\nimport { useId } from '@fluentui/react-utilities';\nimport {\n ChartTypes,\n IAxisData,\n getAccessibleDataObject,\n tooltipOfXAxislabels,\n XAxisTypes,\n getTypeOfAxis,\n formatValueWithSIPrefix,\n getScalePadding,\n getBarWidth,\n isScalePaddingDefined,\n getNextColor,\n areArraysEqual,\n calculateLongestLabelWidth,\n useRtl,\n} from '../../utilities/index';\n\nimport {\n AccessibilityProps,\n CartesianChart,\n Margins,\n Legend,\n RefArrayData,\n GroupedVerticalBarChartProps,\n GroupedVerticalBarChartData,\n GVBarChartSeriesPoint,\n Legends,\n YValueHover,\n DataVizPalette,\n getColorFromToken,\n ChartPopoverProps,\n Chart,\n} from '../../index';\n\ntype StringAxis = D3Axis<string>;\ntype NumericAxis = D3Axis<number | { valueOf(): number }>;\n\nconst MIN_DOMAIN_MARGIN = 8;\nconst X1_INNER_PADDING = 0.1;\n// x1_inner_padding = space_between_bars / (space_between_bars + bar_width)\n// => space_between_bars = (x1_inner_padding / (1 - x1_inner_padding)) * bar_width\n/** Rate at which the space between the bars in a group changes wrt the bar width */\nconst BAR_GAP_RATE = X1_INNER_PADDING / (1 - X1_INNER_PADDING);\n\n// This interface used for - While forming datapoints from given prop \"data\" in code\ninterface GVDataPoint {\n [key: string]: number | string;\n}\n\n// While forming datapoints from given prop \"data\" in code. These datapoints are used for to draw graph easily.\ninterface GVSingleDataPoint {\n [key: string]: GVDataPoint;\n}\n\nexport const GroupedVerticalBarChart: React.FC<GroupedVerticalBarChartProps> = React.forwardRef<\n HTMLDivElement,\n GroupedVerticalBarChartProps\n>((props = { maxBarWidth: 24 }, forwardedRef) => {\n const _tooltipId: string = useId('GVBCTooltipId_');\n const _emptyChartId: string = useId('_GVBC_empty');\n const _useRtl: boolean = useRtl();\n let _domainMargin: number = MIN_DOMAIN_MARGIN;\n let _dataset: GVDataPoint[] = [];\n let _keys: string[] = [];\n let _xAxisLabels: string[] = [];\n let _datasetForBars: any[] = [];\n let _margins: Margins = { top: 0, right: 0, bottom: 0, left: 0 };\n let _groupedVerticalBarGraph: JSX.Element[] = [];\n let _refArray: RefArrayData[] = [];\n let _yMax: number = 0;\n let _calloutAnchorPoint: GVBarChartSeriesPoint | null = null;\n let _barWidth: number = 0;\n let _groupWidth: number = 0;\n let _xAxisInnerPadding: number = 0;\n let _xAxisOuterPadding: number = 0;\n const cartesianChartRef = React.useRef<Chart>(null);\n\n const [color, setColor] = React.useState<string>('');\n const [dataForHoverCard, setDataForHoverCard] = React.useState<number>(0);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [YValueHover, setYValueHover] = React.useState<YValueHover[]>([]);\n const [hoverXValue, setHoverXValue] = React.useState<string>('');\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [activeLegend, setActiveLegend] = React.useState<string>('');\n const [callOutAccessibilityData, setCallOutAccessibilityData] = React.useState<AccessibilityProps | undefined>(\n undefined,\n );\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const classes = useGroupedVerticalBarChartStyles_unstable(props);\n\n React.useEffect(() => {\n if (!areArraysEqual(props.legendProps?.selectedLegends, selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n }, [props.legendProps?.selectedLegends]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n }),\n [],\n );\n\n const _adjustProps = () => {\n _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);\n // x0_inner_padding = space_between_groups / (space_between_groups + group_width)\n // space_between_groups = 2 * bar_width\n // group_width = keys.length * bar_width + (keys.length - 1) * space_between_bars\n _xAxisInnerPadding = getScalePadding(\n props.xAxisInnerPadding,\n undefined,\n 2 / (2 + keys.length + (keys.length - 1) * BAR_GAP_RATE),\n );\n _xAxisOuterPadding = getScalePadding(props.xAxisOuterPadding);\n };\n\n const _createDataset = (points: GroupedVerticalBarChartData[]) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const datasetForBars: any = [];\n const dataset: GVDataPoint[] = [];\n\n points.forEach((point: GroupedVerticalBarChartData, index: number) => {\n const singleDatasetPoint: GVDataPoint = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const singleDatasetPointForBars: any = {};\n const singleDataSeries: GVBarChartSeriesPoint[] = [];\n\n point.series.forEach((seriesPoint: GVBarChartSeriesPoint, seriesIndex) => {\n singleDatasetPoint[seriesPoint.key] = seriesPoint.data;\n singleDatasetPointForBars[seriesPoint.key] = {\n ...seriesPoint,\n };\n singleDataSeries.push(seriesPoint);\n });\n\n singleDatasetPointForBars.xAxisPoint = point.name;\n singleDatasetPointForBars.indexNum = index;\n singleDatasetPointForBars.groupSeries = singleDataSeries;\n singleDatasetPointForBars.stackCallOutAccessibilityData = point.stackCallOutAccessibilityData;\n datasetForBars.push(singleDatasetPointForBars);\n dataset.push(singleDatasetPoint);\n });\n _dataset = dataset;\n return datasetForBars;\n };\n\n const _createDataSetOfGVBC = (points: GroupedVerticalBarChartData[]) => {\n const keys: string[] = [];\n const xAxisLabels: string[] = points.map(singlePoint => singlePoint.name);\n points[0].series.forEach((singleKey: GVBarChartSeriesPoint) => {\n keys.push(singleKey.key);\n });\n const datasetForBars = _createDataset(points);\n return {\n keys,\n xAxisLabels,\n datasetForBars,\n };\n };\n\n const onLegendSelectionChange = (\n selectedLegends: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void => {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(selectedLegends);\n } else {\n setSelectedLegends(selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(selectedLegends, event, currentLegend);\n }\n };\n\n const _getLegendData = (points: GroupedVerticalBarChartData[]): JSX.Element => {\n const data = points;\n const defaultPalette: string[] = [\n getColorFromToken(DataVizPalette.color1),\n getColorFromToken(DataVizPalette.color2),\n getColorFromToken(DataVizPalette.color3),\n getColorFromToken(DataVizPalette.color4),\n getColorFromToken(DataVizPalette.color5),\n ];\n const actions: Legend[] = [];\n\n data.forEach((singleChartData: GroupedVerticalBarChartData) => {\n singleChartData.series.forEach((point: GVBarChartSeriesPoint) => {\n let color: string = point.color ? point.color : defaultPalette[Math.floor(Math.random() * 4 + 1)];\n const checkSimilarLegends = actions.filter((leg: Legend) => leg.title === point.legend && leg.color === color);\n if (checkSimilarLegends!.length > 0) {\n return;\n }\n const legend: Legend = {\n title: point.legend,\n color,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(point.legend);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n\n actions.push(legend);\n });\n });\n return (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n {...props.legendProps}\n onChange={onLegendSelectionChange}\n />\n );\n };\n\n const points = props.data;\n const { keys, xAxisLabels, datasetForBars } = _createDataSetOfGVBC(points!);\n _keys = keys;\n _xAxisLabels = xAxisLabels;\n _datasetForBars = datasetForBars;\n const _xAxisType: XAxisTypes = getTypeOfAxis(points![0].name, true) as XAxisTypes;\n const legends: JSX.Element = _getLegendData(points!);\n _adjustProps();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const yMax = d3Max(_dataset, (point: any) => d3Max(_keys, (key: string) => point[key]));\n _yMax = Math.max(yMax, props.yMaxValue || 0);\n\n const calloutProps: ChartPopoverProps = {\n clickPosition,\n isPopoverOpen,\n color,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue ? yCalloutValue : dataForHoverCard,\n YValueHover,\n hoverXValue,\n culture: props.culture ?? 'en-us',\n isCartesian: true,\n ...props.calloutProps,\n ...getAccessibleDataObject(callOutAccessibilityData, 'text', false),\n };\n const tickParams = {\n tickValues: props.tickValues!,\n tickFormat: props.tickFormat!,\n };\n\n const _getGraphData = (\n xScale: StringAxis | NumericAxis,\n yScale: NumericAxis,\n containerHeight: number,\n containerWidth: number,\n xElement?: SVGElement | null,\n ) => {\n const xScale0 = _createX0Scale(containerWidth);\n\n // Setting the bar width here is safe because there are no dependencies earlier in the code\n // that rely on the width of bars in vertical bar charts with string x-axis.\n _barWidth = getBarWidth(\n props.barWidth,\n props.maxBarWidth,\n xScale0.bandwidth() / (_keys.length + (_keys.length - 1) * BAR_GAP_RATE),\n );\n _groupWidth = (_keys.length + (_keys.length - 1) * BAR_GAP_RATE) * _barWidth;\n\n const xScale1 = _createX1Scale();\n const allGroupsBars: JSX.Element[] = [];\n _datasetForBars.forEach((singleSet: GVSingleDataPoint) => {\n allGroupsBars.push(_buildGraph(singleSet, xScale0, xScale1, containerHeight, xElement!));\n });\n _groupedVerticalBarGraph = allGroupsBars;\n };\n\n const _getMargins = (margins: Margins) => {\n _margins = margins;\n };\n\n const _getOpacity = (legendTitle: string): string => {\n const opacity = _legendHighlighted(legendTitle) || _noLegendHighlighted() ? '' : '0.1';\n return opacity;\n };\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n const onBarHover = (\n pointData: GVBarChartSeriesPoint,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupData: any,\n mouseEvent: React.MouseEvent<SVGElement>,\n ): void => {\n mouseEvent.persist();\n if (_calloutAnchorPoint !== pointData) {\n _calloutAnchorPoint = pointData;\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setPopoverOpen(_noLegendHighlighted() || _legendHighlighted(pointData.legend));\n setCalloutLegend(pointData.legend);\n setDataForHoverCard(pointData.data);\n setColor(pointData.color);\n setXCalloutValue(pointData.xAxisCalloutData!);\n setYCalloutValue(pointData.yAxisCalloutData!);\n setCallOutAccessibilityData(\n props.isCalloutForStack ? groupData.stackCallOutAccessibilityData : pointData.callOutAccessibilityData,\n );\n setYValueHover(groupData.groupSeries);\n setHoverXValue(pointData.xAxisCalloutData!);\n }\n };\n\n const _onBarLeave = (): void => {\n /**/\n };\n\n const _handleChartMouseLeave = (): void => {\n _calloutAnchorPoint = null;\n setPopoverOpen(false);\n };\n\n const onBarFocus = (\n pointData: GVBarChartSeriesPoint,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupData: any,\n refArrayIndexNumber: number,\n ): void => {\n _refArray.forEach((obj: RefArrayData, index: number) => {\n if (obj.index === pointData.legend && refArrayIndexNumber === index) {\n setPopoverOpen(_noLegendHighlighted() || _legendHighlighted(pointData.legend));\n setCalloutLegend(pointData.legend);\n setDataForHoverCard(pointData.data);\n setColor(pointData.color);\n setXCalloutValue(pointData.xAxisCalloutData!);\n setYCalloutValue(pointData.yAxisCalloutData!);\n setCallOutAccessibilityData(\n props.isCalloutForStack ? groupData.stackCallOutAccessibilityData : pointData.callOutAccessibilityData,\n );\n setYValueHover(groupData.groupSeries);\n setHoverXValue(pointData.xAxisCalloutData!);\n }\n });\n };\n\n const _refCallback = (element: SVGRectElement, legendTitle: string, refIndexNumber: number): void => {\n _refArray[refIndexNumber] = { index: legendTitle, refElement: element };\n };\n\n const _buildGraph = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n singleSet: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale0: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n xScale1: any,\n containerHeight: number,\n xElement: SVGElement,\n ): JSX.Element => {\n const singleGroup: JSX.Element[] = [];\n const barLabelsForGroup: JSX.Element[] = [];\n\n const yBarScale = d3ScaleLinear()\n .domain([0, yMax])\n .range([0, containerHeight! - _margins.bottom! - _margins.top!]);\n\n const tempDataSet = Object.keys(datasetForBars[0]).splice(0, keys.length);\n tempDataSet.forEach((datasetKey: string, index: number) => {\n const refIndexNumber = singleSet.indexNum * tempDataSet.length + index;\n const pointData = singleSet[datasetKey];\n // To align the centers of the generated bandwidth and the calculated one when they differ,\n // use the following addend.\n const xPoint = xScale1(datasetKey) + (xScale1.bandwidth() - _barWidth) / 2;\n const yPoint = Math.max(containerHeight! - _margins.bottom! - yBarScale(pointData.data), 0);\n const startColor = pointData.color ? pointData.color : getNextColor(index, 0);\n\n // Not rendering data with 0.\n pointData.data &&\n singleGroup.push(\n <React.Fragment key={`${singleSet.indexNum}-${index}`}>\n <rect\n className={classes.opacityChangeOnHover}\n height={Math.max(yBarScale(pointData.data), 0)}\n width={_barWidth}\n x={xPoint}\n y={yPoint}\n data-is-focusable={!props.hideTooltip && (_legendHighlighted(pointData.legend) || _noLegendHighlighted())}\n opacity={_getOpacity(pointData.legend)}\n ref={(e: SVGRectElement | null) => {\n _refCallback(e!, pointData.legend, refIndexNumber);\n }}\n fill={startColor}\n rx={0}\n onMouseOver={onBarHover.bind(null, pointData, singleSet)}\n onMouseMove={onBarHover.bind(null, pointData, singleSet)}\n onMouseOut={_onBarLeave}\n onFocus={onBarFocus.bind(null, pointData, singleSet, refIndexNumber)}\n onBlur={_onBarLeave}\n onClick={pointData.onClick}\n aria-label={getAriaLabel(pointData, singleSet.xAxisPoint)}\n tabIndex={pointData.legend !== '' ? 0 : undefined}\n role=\"img\"\n />\n </React.Fragment>,\n );\n if (\n pointData.data &&\n !props.hideLabels &&\n _barWidth >= 16 &&\n (_legendHighlighted(pointData.legend) || _noLegendHighlighted())\n ) {\n barLabelsForGroup.push(\n <text\n key={`${singleSet.indexNum}-${index}`}\n x={xPoint + _barWidth / 2}\n y={yPoint - 6}\n textAnchor=\"middle\"\n className={classes.barLabel}\n aria-hidden={true}\n >\n {formatValueWithSIPrefix(pointData.data)}\n </text>,\n );\n }\n });\n // Used to display tooltip at x axis labels.\n if (!props.wrapXAxisLables && props.showXAxisLablesTooltip) {\n const xAxisElement = d3Select(xElement).call(xScale0);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n xAxis: xAxisElement,\n };\n xAxisElement && tooltipOfXAxislabels(tooltipProps);\n }\n return (\n <g\n key={singleSet.indexNum}\n transform={`translate(${xScale0(singleSet.xAxisPoint) + (xScale0.bandwidth() - _groupWidth) / 2}, 0)`}\n >\n {singleGroup}\n {barLabelsForGroup}\n </g>\n );\n };\n\n // For grouped vertical bar chart, First need to define total scale (from start to end)\n // From that need to define scale for single group of bars - done by createX1Scale\n const _createX0Scale = (containerWidth: number) => {\n const x0Axis = d3ScaleBand()\n .domain(xAxisLabels)\n .range(\n _useRtl\n ? [containerWidth! - _margins.right! - _domainMargin, _margins.left! + _domainMargin]\n : [_margins.left! + _domainMargin, containerWidth! - _margins.right! - _domainMargin],\n )\n .paddingInner(_xAxisInnerPadding)\n .paddingOuter(_xAxisOuterPadding);\n return x0Axis;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _createX1Scale = (): any => {\n return (\n d3ScaleBand()\n .domain(keys)\n // When there is only one group, xScale0 adds padding around it,\n // causing the bandwidth to become smaller than the actual group width.\n // So to render bars in the group correctly, use groupWidth instead of the generated scale bandwidth.\n .range(_useRtl ? [_groupWidth, 0] : [0, _groupWidth])\n .paddingInner(X1_INNER_PADDING)\n );\n };\n\n const _onLegendHover = (legendTitle: string): void => {\n setActiveLegend(legendTitle);\n };\n\n const _onLegendLeave = (): void => {\n setActiveLegend('');\n };\n\n const _getAxisData = React.useCallback(\n (yAxisData: IAxisData) => {\n if (yAxisData && yAxisData.yAxisDomainValues.length) {\n const { yAxisDomainValues: domainValue } = yAxisData;\n _yMax = Math.max(domainValue[domainValue.length - 1], props.yMaxValue || 0);\n }\n },\n [props.yMaxValue],\n );\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n const _legendHighlighted = (legendTitle: string) => {\n return _getHighlightedLegend().includes(legendTitle!);\n };\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = () => {\n return _getHighlightedLegend().length === 0;\n };\n\n const _getHighlightedLegend = () => {\n return selectedLegends.length > 0 ? selectedLegends : activeLegend ? [activeLegend] : [];\n };\n\n const getAriaLabel = (point: GVBarChartSeriesPoint, xAxisPoint: string): string => {\n const xValue = point.xAxisCalloutData || xAxisPoint;\n const legend = point.legend;\n const yValue = point.yAxisCalloutData || point.data;\n return point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n };\n\n const _getDomainMargins = (containerWidth: number): Margins => {\n /** Total width available to render the bars */\n const totalWidth = containerWidth - (_margins.left! + MIN_DOMAIN_MARGIN) - (_margins.right! + MIN_DOMAIN_MARGIN);\n /** Rate at which the space between the groups changes wrt the group width */\n const groupGapRate = _xAxisInnerPadding / (1 - _xAxisInnerPadding);\n\n if (_xAxisType === XAxisTypes.StringAxis) {\n if (isScalePaddingDefined(props.xAxisOuterPadding)) {\n // Setting the domain margin for string x-axis to 0 because the xAxisOuterPadding prop is now available\n // to adjust the space before the first group and after the last group.\n _domainMargin = 0;\n } else if (props.barWidth !== 'auto') {\n // Update the bar width so that when CartesianChart rerenders,\n // the following calculations don't use the previous bar width.\n _barWidth = getBarWidth(props.barWidth, props.maxBarWidth);\n const groupWidth = (keys.length + (keys.length - 1) * BAR_GAP_RATE) * _barWidth;\n /** Total width required to render the groups. Directly proportional to group width */\n const reqWidth = (xAxisLabels.length + (xAxisLabels.length - 1) * groupGapRate) * groupWidth;\n\n if (totalWidth >= reqWidth) {\n // Center align the chart by setting equal left and right margins for domain\n _domainMargin = MIN_DOMAIN_MARGIN + (totalWidth - reqWidth) / 2;\n }\n } else if (props.mode === 'plotly' && xAxisLabels.length > 1) {\n // Calculate the remaining width after rendering groups at their maximum allowable width\n const groupBandwidth = totalWidth / (xAxisLabels.length + (xAxisLabels.length - 1) * groupGapRate);\n const barBandwidth = groupBandwidth / (keys.length + (keys.length - 1) * BAR_GAP_RATE);\n const barWidth = getBarWidth(props.barWidth, props.maxBarWidth, barBandwidth);\n const groupWidth = (keys.length + (keys.length - 1) * BAR_GAP_RATE) * barWidth;\n let reqWidth = (xAxisLabels.length + (xAxisLabels.length - 1) * groupGapRate) * groupWidth;\n const margin1 = (totalWidth - reqWidth) / 2;\n\n // Calculate the remaining width after accounting for the space required to render x-axis labels\n const step = calculateLongestLabelWidth(xAxisLabels) + 20;\n reqWidth = (xAxisLabels.length - _xAxisInnerPadding) * step;\n const margin2 = (totalWidth - reqWidth) / 2;\n\n _domainMargin = MIN_DOMAIN_MARGIN + Math.max(0, Math.min(margin1, margin2));\n }\n }\n\n return {\n ..._margins,\n left: _margins.left! + _domainMargin,\n right: _margins.right! + _domainMargin,\n };\n };\n\n const _isChartEmpty = (): boolean => {\n return !(\n props.data &&\n props.data.length > 0 &&\n props.data.filter((item: GroupedVerticalBarChartData) => item.series.length).length > 0\n );\n };\n\n const _getChartTitle = (): string => {\n return (\n (props.chartTitle ? `${props.chartTitle}. ` : '') +\n `Vertical bar chart with ${_xAxisLabels.length} groups of ${_keys.length} bars each. `\n );\n };\n\n return !_isChartEmpty() ? (\n <CartesianChart\n {...props}\n chartTitle={_getChartTitle()}\n points={_datasetForBars}\n chartType={ChartTypes.GroupedVerticalBarChart}\n calloutProps={calloutProps}\n legendBars={legends}\n xAxisType={_xAxisType}\n datasetForXAxisDomain={_xAxisLabels}\n tickParams={tickParams}\n tickPadding={props.tickPadding || 5}\n maxOfYVal={_yMax}\n getmargins={_getMargins}\n getGraphData={_getGraphData}\n getAxisData={_getAxisData}\n onChartMouseLeave={_handleChartMouseLeave}\n getDomainMargins={_getDomainMargins}\n {...(_xAxisType === XAxisTypes.StringAxis && {\n xAxisInnerPadding: _xAxisInnerPadding,\n xAxisOuterPadding: _xAxisOuterPadding,\n })}\n barwidth={_barWidth}\n componentRef={cartesianChartRef}\n /* eslint-disable react/jsx-no-bind */\n children={() => {\n return <g>{_groupedVerticalBarGraph}</g>;\n }}\n />\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nGroupedVerticalBarChart.displayName = 'GroupedVerticalBarChart';\n"],"names":["React","useGroupedVerticalBarChartStyles_unstable","max","d3Max","select","d3Select","scaleBand","d3ScaleBand","scaleLinear","d3ScaleLinear","useId","ChartTypes","getAccessibleDataObject","tooltipOfXAxislabels","XAxisTypes","getTypeOfAxis","formatValueWithSIPrefix","getScalePadding","getBarWidth","isScalePaddingDefined","getNextColor","areArraysEqual","calculateLongestLabelWidth","useRtl","CartesianChart","Legends","DataVizPalette","getColorFromToken","MIN_DOMAIN_MARGIN","X1_INNER_PADDING","BAR_GAP_RATE","GroupedVerticalBarChart","forwardRef","props","maxBarWidth","forwardedRef","_tooltipId","_emptyChartId","_useRtl","_domainMargin","_dataset","_keys","_xAxisLabels","_datasetForBars","_margins","top","right","bottom","left","_groupedVerticalBarGraph","_refArray","_yMax","_calloutAnchorPoint","_barWidth","_groupWidth","_xAxisInnerPadding","_xAxisOuterPadding","cartesianChartRef","useRef","color","setColor","useState","dataForHoverCard","setDataForHoverCard","selectedLegends","setSelectedLegends","legendProps","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","YValueHover","setYValueHover","hoverXValue","setHoverXValue","calloutLegend","setCalloutLegend","activeLegend","setActiveLegend","callOutAccessibilityData","setCallOutAccessibilityData","undefined","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","classes","useEffect","useImperativeHandle","componentRef","chartContainer","current","_adjustProps","barWidth","xAxisInnerPadding","keys","length","xAxisOuterPadding","_createDataset","points","datasetForBars","dataset","forEach","point","index","singleDatasetPoint","singleDatasetPointForBars","singleDataSeries","series","seriesPoint","seriesIndex","key","data","push","xAxisPoint","name","indexNum","groupSeries","stackCallOutAccessibilityData","_createDataSetOfGVBC","xAxisLabels","map","singlePoint","singleKey","onLegendSelectionChange","event","currentLegend","canSelectMultipleLegends","slice","onChange","_getLegendData","defaultPalette","color1","color2","color3","color4","color5","actions","singleChartData","Math","floor","random","checkSimilarLegends","filter","leg","title","legend","hoverAction","_handleChartMouseLeave","_onLegendHover","onMouseOutAction","_onLegendLeave","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","_xAxisType","yMax","yMaxValue","calloutProps","XValue","YValue","culture","isCartesian","tickParams","tickValues","tickFormat","_getGraphData","xScale","yScale","containerHeight","containerWidth","xElement","xScale0","_createX0Scale","bandwidth","xScale1","_createX1Scale","allGroupsBars","singleSet","_buildGraph","_getMargins","margins","_getOpacity","legendTitle","opacity","_legendHighlighted","_noLegendHighlighted","updatePosition","newX","newY","threshold","distance","sqrt","pow","onBarHover","pointData","groupData","mouseEvent","persist","clientX","clientY","xAxisCalloutData","yAxisCalloutData","isCalloutForStack","_onBarLeave","onBarFocus","refArrayIndexNumber","obj","_refCallback","element","refIndexNumber","refElement","singleGroup","barLabelsForGroup","yBarScale","domain","range","tempDataSet","Object","splice","datasetKey","xPoint","yPoint","startColor","Fragment","rect","className","opacityChangeOnHover","height","width","data-is-focusable","hideTooltip","ref","e","fill","rx","onMouseOver","bind","onMouseMove","onMouseOut","onFocus","onBlur","onClick","aria-label","getAriaLabel","tabIndex","role","hideLabels","text","textAnchor","barLabel","aria-hidden","wrapXAxisLables","showXAxisLablesTooltip","xAxisElement","call","document","getElementById","remove","tooltipProps","tooltipCls","tooltip","id","xAxis","g","transform","x0Axis","paddingInner","paddingOuter","_getAxisData","useCallback","yAxisData","yAxisDomainValues","domainValue","_getHighlightedLegend","includes","xValue","yValue","ariaLabel","_getDomainMargins","totalWidth","groupGapRate","StringAxis","groupWidth","reqWidth","mode","groupBandwidth","barBandwidth","margin1","step","margin2","min","_isChartEmpty","item","_getChartTitle","chartTitle","chartType","legendBars","xAxisType","datasetForXAxisDomain","tickPadding","maxOfYVal","getmargins","getGraphData","getAxisData","onChartMouseLeave","getDomainMargins","barwidth","children","div","style","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}