@fluentui/react-charts 9.3.7 → 9.3.9

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 (259) hide show
  1. package/CHANGELOG.md +60 -2
  2. package/dist/index.d.ts +433 -7
  3. package/lib/PolarChart.js +1 -0
  4. package/lib/PolarChart.js.map +1 -0
  5. package/lib/components/AnnotationOnlyChart/AnnotationOnlyChart.js +2 -1
  6. package/lib/components/AnnotationOnlyChart/AnnotationOnlyChart.js.map +1 -1
  7. package/lib/components/AreaChart/AreaChart.js +1 -28
  8. package/lib/components/AreaChart/AreaChart.js.map +1 -1
  9. package/lib/components/AreaChart/useAreaChartStyles.styles.js +1 -2
  10. package/lib/components/AreaChart/useAreaChartStyles.styles.js.map +1 -1
  11. package/lib/components/ChartTable/ChartTable.js +27 -8
  12. package/lib/components/ChartTable/ChartTable.js.map +1 -1
  13. package/lib/components/ChartTable/ChartTable.types.js.map +1 -1
  14. package/lib/components/ChartTable/useChartTableStyles.styles.js +24 -3
  15. package/lib/components/ChartTable/useChartTableStyles.styles.js.map +1 -1
  16. package/lib/components/ChartTable/useChartTableStyles.styles.raw.js +14 -2
  17. package/lib/components/ChartTable/useChartTableStyles.styles.raw.js.map +1 -1
  18. package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.js +111 -69
  19. package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.js.map +1 -1
  20. package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js.map +1 -1
  21. package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.js +54 -4
  22. package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.js.map +1 -1
  23. package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js +31 -18
  24. package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js.map +1 -1
  25. package/lib/components/CommonComponents/CartesianChart.js +81 -44
  26. package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
  27. package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
  28. package/lib/components/CommonComponents/useCartesianChartStyles.styles.js +5 -5
  29. package/lib/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
  30. package/lib/components/CommonComponents/useCartesianChartStyles.styles.raw.js +4 -3
  31. package/lib/components/CommonComponents/useCartesianChartStyles.styles.raw.js.map +1 -1
  32. package/lib/components/DeclarativeChart/DeclarativeChart.js +33 -29
  33. package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
  34. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +643 -366
  35. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  36. package/lib/components/DonutChart/DonutChart.js +24 -9
  37. package/lib/components/DonutChart/DonutChart.js.map +1 -1
  38. package/lib/components/DonutChart/DonutChart.types.js.map +1 -1
  39. package/lib/components/DonutChart/useDonutChartStyles.styles.js +25 -5
  40. package/lib/components/DonutChart/useDonutChartStyles.styles.js.map +1 -1
  41. package/lib/components/DonutChart/useDonutChartStyles.styles.raw.js +16 -5
  42. package/lib/components/DonutChart/useDonutChartStyles.styles.raw.js.map +1 -1
  43. package/lib/components/FunnelChart/FunnelChart.js +33 -8
  44. package/lib/components/FunnelChart/FunnelChart.js.map +1 -1
  45. package/lib/components/FunnelChart/FunnelChart.types.js.map +1 -1
  46. package/lib/components/FunnelChart/useFunnelChartStyles.styles.js +26 -4
  47. package/lib/components/FunnelChart/useFunnelChartStyles.styles.js.map +1 -1
  48. package/lib/components/FunnelChart/useFunnelChartStyles.styles.raw.js +15 -3
  49. package/lib/components/FunnelChart/useFunnelChartStyles.styles.raw.js.map +1 -1
  50. package/lib/components/GanttChart/GanttChart.js +1 -1
  51. package/lib/components/GanttChart/GanttChart.js.map +1 -1
  52. package/lib/components/GaugeChart/GaugeChart.js +13 -9
  53. package/lib/components/GaugeChart/GaugeChart.js.map +1 -1
  54. package/lib/components/GaugeChart/GaugeChart.types.js.map +1 -1
  55. package/lib/components/GaugeChart/useGaugeChartStyles.styles.js +31 -19
  56. package/lib/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
  57. package/lib/components/GaugeChart/useGaugeChartStyles.styles.raw.js +23 -18
  58. package/lib/components/GaugeChart/useGaugeChartStyles.styles.raw.js.map +1 -1
  59. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +18 -18
  60. package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  61. package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js +1 -2
  62. package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js.map +1 -1
  63. package/lib/components/HeatMapChart/HeatMapChart.js +5 -1
  64. package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
  65. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +60 -10
  66. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  67. package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.types.js.map +1 -1
  68. package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +18 -3
  69. package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -1
  70. package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js +13 -2
  71. package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js.map +1 -1
  72. package/lib/components/Legends/Legends.js +3 -4
  73. package/lib/components/Legends/Legends.js.map +1 -1
  74. package/lib/components/Legends/OverflowMenu.js +9 -2
  75. package/lib/components/Legends/OverflowMenu.js.map +1 -1
  76. package/lib/components/LineChart/LineChart.js +65 -64
  77. package/lib/components/LineChart/LineChart.js.map +1 -1
  78. package/lib/components/LineChart/useLineChartStyles.styles.js +1 -2
  79. package/lib/components/LineChart/useLineChartStyles.styles.js.map +1 -1
  80. package/lib/components/PolarChart/PolarChart.js +577 -0
  81. package/lib/components/PolarChart/PolarChart.js.map +1 -0
  82. package/lib/components/PolarChart/PolarChart.types.js +1 -0
  83. package/lib/components/PolarChart/PolarChart.types.js.map +1 -0
  84. package/lib/components/PolarChart/PolarChart.utils.js +174 -0
  85. package/lib/components/PolarChart/PolarChart.utils.js.map +1 -0
  86. package/lib/components/PolarChart/index.js +2 -0
  87. package/lib/components/PolarChart/index.js.map +1 -0
  88. package/lib/components/PolarChart/usePolarChartStyles.styles.js +72 -0
  89. package/lib/components/PolarChart/usePolarChartStyles.styles.js.map +1 -0
  90. package/lib/components/PolarChart/usePolarChartStyles.styles.raw.js +61 -0
  91. package/lib/components/PolarChart/usePolarChartStyles.styles.raw.js.map +1 -0
  92. package/lib/components/SankeyChart/SankeyChart.js +15 -5
  93. package/lib/components/SankeyChart/SankeyChart.js.map +1 -1
  94. package/lib/components/SankeyChart/SankeyChart.types.js.map +1 -1
  95. package/lib/components/SankeyChart/useSankeyChartStyles.styles.js +24 -8
  96. package/lib/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -1
  97. package/lib/components/SankeyChart/useSankeyChartStyles.styles.raw.js +15 -5
  98. package/lib/components/SankeyChart/useSankeyChartStyles.styles.raw.js.map +1 -1
  99. package/lib/components/ScatterChart/ScatterChart.js +13 -25
  100. package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
  101. package/lib/components/ScatterChart/ScatterChart.types.js.map +1 -1
  102. package/lib/components/ScatterChart/useScatterChartStyles.styles.js +1 -2
  103. package/lib/components/ScatterChart/useScatterChartStyles.styles.js.map +1 -1
  104. package/lib/components/VerticalBarChart/VerticalBarChart.js +13 -78
  105. package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  106. package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.js +1 -2
  107. package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.js.map +1 -1
  108. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +48 -68
  109. package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  110. package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js +1 -2
  111. package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js.map +1 -1
  112. package/lib/index.js +1 -0
  113. package/lib/index.js.map +1 -1
  114. package/lib/types/ChartAnnotation.js.map +1 -1
  115. package/lib/types/DataPoint.js +1 -1
  116. package/lib/types/DataPoint.js.map +1 -1
  117. package/lib/utilities/ChartTitle.js +45 -0
  118. package/lib/utilities/ChartTitle.js.map +1 -0
  119. package/lib/utilities/Common.styles.js +73 -2
  120. package/lib/utilities/Common.styles.js.map +1 -1
  121. package/lib/utilities/Common.styles.raw.js +70 -1
  122. package/lib/utilities/Common.styles.raw.js.map +1 -1
  123. package/lib/utilities/image-export-utils.js +4 -4
  124. package/lib/utilities/image-export-utils.js.map +1 -1
  125. package/lib/utilities/index.js +1 -0
  126. package/lib/utilities/index.js.map +1 -1
  127. package/lib/utilities/utilities.js +219 -77
  128. package/lib/utilities/utilities.js.map +1 -1
  129. package/lib-commonjs/PolarChart.js +6 -0
  130. package/lib-commonjs/PolarChart.js.map +1 -0
  131. package/lib-commonjs/components/AnnotationOnlyChart/AnnotationOnlyChart.js +2 -1
  132. package/lib-commonjs/components/AnnotationOnlyChart/AnnotationOnlyChart.js.map +1 -1
  133. package/lib-commonjs/components/AreaChart/AreaChart.js +0 -26
  134. package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -1
  135. package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.js +0 -2
  136. package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.js.map +1 -1
  137. package/lib-commonjs/components/ChartTable/ChartTable.js +27 -8
  138. package/lib-commonjs/components/ChartTable/ChartTable.js.map +1 -1
  139. package/lib-commonjs/components/ChartTable/ChartTable.types.js.map +1 -1
  140. package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.js +34 -3
  141. package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.js.map +1 -1
  142. package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.raw.js +14 -2
  143. package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.raw.js.map +1 -1
  144. package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.js +111 -69
  145. package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.js.map +1 -1
  146. package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js.map +1 -1
  147. package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.js +65 -5
  148. package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.js.map +1 -1
  149. package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js +31 -18
  150. package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js.map +1 -1
  151. package/lib-commonjs/components/CommonComponents/CartesianChart.js +80 -43
  152. package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
  153. package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
  154. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js +3 -4
  155. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
  156. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.raw.js +3 -2
  157. package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.raw.js.map +1 -1
  158. package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js +59 -56
  159. package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
  160. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +649 -368
  161. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  162. package/lib-commonjs/components/DonutChart/DonutChart.js +22 -7
  163. package/lib-commonjs/components/DonutChart/DonutChart.js.map +1 -1
  164. package/lib-commonjs/components/DonutChart/DonutChart.types.js.map +1 -1
  165. package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.js +31 -4
  166. package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.js.map +1 -1
  167. package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.raw.js +15 -4
  168. package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.raw.js.map +1 -1
  169. package/lib-commonjs/components/FunnelChart/FunnelChart.js +31 -6
  170. package/lib-commonjs/components/FunnelChart/FunnelChart.js.map +1 -1
  171. package/lib-commonjs/components/FunnelChart/FunnelChart.types.js.map +1 -1
  172. package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.js +36 -4
  173. package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.js.map +1 -1
  174. package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.raw.js +15 -3
  175. package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.raw.js.map +1 -1
  176. package/lib-commonjs/components/GanttChart/GanttChart.js +1 -1
  177. package/lib-commonjs/components/GanttChart/GanttChart.js.map +1 -1
  178. package/lib-commonjs/components/GaugeChart/GaugeChart.js +11 -7
  179. package/lib-commonjs/components/GaugeChart/GaugeChart.js.map +1 -1
  180. package/lib-commonjs/components/GaugeChart/GaugeChart.types.js.map +1 -1
  181. package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js +39 -18
  182. package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
  183. package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.raw.js +23 -18
  184. package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.raw.js.map +1 -1
  185. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +16 -16
  186. package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
  187. package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js +0 -2
  188. package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js.map +1 -1
  189. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js +5 -1
  190. package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -1
  191. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +59 -9
  192. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
  193. package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.types.js.map +1 -1
  194. package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +26 -3
  195. package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -1
  196. package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js +13 -2
  197. package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js.map +1 -1
  198. package/lib-commonjs/components/Legends/Legends.js +3 -4
  199. package/lib-commonjs/components/Legends/Legends.js.map +1 -1
  200. package/lib-commonjs/components/Legends/OverflowMenu.js +9 -2
  201. package/lib-commonjs/components/Legends/OverflowMenu.js.map +1 -1
  202. package/lib-commonjs/components/LineChart/LineChart.js +64 -63
  203. package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
  204. package/lib-commonjs/components/LineChart/useLineChartStyles.styles.js +0 -2
  205. package/lib-commonjs/components/LineChart/useLineChartStyles.styles.js.map +1 -1
  206. package/lib-commonjs/components/PolarChart/PolarChart.js +587 -0
  207. package/lib-commonjs/components/PolarChart/PolarChart.js.map +1 -0
  208. package/lib-commonjs/components/PolarChart/PolarChart.types.js +6 -0
  209. package/lib-commonjs/components/PolarChart/PolarChart.types.js.map +1 -0
  210. package/lib-commonjs/components/PolarChart/PolarChart.utils.js +204 -0
  211. package/lib-commonjs/components/PolarChart/PolarChart.utils.js.map +1 -0
  212. package/lib-commonjs/components/PolarChart/index.js +7 -0
  213. package/lib-commonjs/components/PolarChart/index.js.map +1 -0
  214. package/lib-commonjs/components/PolarChart/usePolarChartStyles.styles.js +107 -0
  215. package/lib-commonjs/components/PolarChart/usePolarChartStyles.styles.js.map +1 -0
  216. package/lib-commonjs/components/PolarChart/usePolarChartStyles.styles.raw.js +75 -0
  217. package/lib-commonjs/components/PolarChart/usePolarChartStyles.styles.raw.js.map +1 -0
  218. package/lib-commonjs/components/SankeyChart/SankeyChart.js +15 -5
  219. package/lib-commonjs/components/SankeyChart/SankeyChart.js.map +1 -1
  220. package/lib-commonjs/components/SankeyChart/SankeyChart.types.js.map +1 -1
  221. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js +28 -6
  222. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -1
  223. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.raw.js +14 -3
  224. package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.raw.js.map +1 -1
  225. package/lib-commonjs/components/ScatterChart/ScatterChart.js +12 -24
  226. package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
  227. package/lib-commonjs/components/ScatterChart/ScatterChart.types.js.map +1 -1
  228. package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.js +0 -2
  229. package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.js.map +1 -1
  230. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +12 -77
  231. package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
  232. package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.js +0 -2
  233. package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.js.map +1 -1
  234. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +47 -67
  235. package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
  236. package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js +0 -2
  237. package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js.map +1 -1
  238. package/lib-commonjs/index.js +1 -0
  239. package/lib-commonjs/index.js.map +1 -1
  240. package/lib-commonjs/types/ChartAnnotation.js.map +1 -1
  241. package/lib-commonjs/types/DataPoint.js +1 -1
  242. package/lib-commonjs/types/DataPoint.js.map +1 -1
  243. package/lib-commonjs/utilities/ChartTitle.js +53 -0
  244. package/lib-commonjs/utilities/ChartTitle.js.map +1 -0
  245. package/lib-commonjs/utilities/Common.styles.js +69 -1
  246. package/lib-commonjs/utilities/Common.styles.js.map +1 -1
  247. package/lib-commonjs/utilities/Common.styles.raw.js +69 -1
  248. package/lib-commonjs/utilities/Common.styles.raw.js.map +1 -1
  249. package/lib-commonjs/utilities/image-export-utils.js +3 -3
  250. package/lib-commonjs/utilities/image-export-utils.js.map +1 -1
  251. package/lib-commonjs/utilities/index.js +1 -0
  252. package/lib-commonjs/utilities/index.js.map +1 -1
  253. package/lib-commonjs/utilities/utilities.js +235 -78
  254. package/lib-commonjs/utilities/utilities.js.map +1 -1
  255. package/package.json +11 -17
  256. package/lib/components/DeclarativeChart/imageExporter.js +0 -223
  257. package/lib/components/DeclarativeChart/imageExporter.js.map +0 -1
  258. package/lib-commonjs/components/DeclarativeChart/imageExporter.js +0 -233
  259. package/lib-commonjs/components/DeclarativeChart/imageExporter.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport { SlotClassNames } from '@fluentui/react-utilities';\nimport { tokens, typographyStyles } from '@fluentui/react-theme';\nimport { color as d3Color } from 'd3-color';\nimport { ChartAnnotationArrowHead } from '../../../types/ChartAnnotation';\n\nexport interface ChartAnnotationLayerStyles {\n root?: string;\n annotation?: string;\n connectorLayer?: string;\n measurement?: string;\n annotationContent?: string;\n annotationForeignObject?: string;\n annotationContentInteractive?: string;\n annotationForeignObjectInteractive?: string;\n connectorGroup?: string;\n}\n\nexport interface ChartAnnotationLayerStyleProps {\n className?: string;\n styles?: Partial<ChartAnnotationLayerStyles>;\n}\n\nexport const DEFAULT_ANNOTATION_BACKGROUND_OPACITY = 0.8;\nexport const DEFAULT_ANNOTATION_PADDING = '4px 8px';\nexport const DEFAULT_CONNECTOR_START_PADDING = 12;\nexport const DEFAULT_CONNECTOR_END_PADDING = 0;\nexport const DEFAULT_CONNECTOR_STROKE_WIDTH = 2;\nexport const DEFAULT_CONNECTOR_ARROW: ChartAnnotationArrowHead = 'end';\n\nexport const applyOpacityToColor = (color: string | undefined, opacity: number): string | undefined => {\n if (!color) {\n return undefined;\n }\n\n const parsed = d3Color(color);\n if (!parsed) {\n return color;\n }\n\n parsed.opacity = Math.max(0, Math.min(1, opacity));\n return parsed.toString();\n};\n\n/**\n * Get default annotation background color with opacity applied\n * Updated for v9 - uses tokens instead of theme\n */\nexport const getDefaultAnnotationBackgroundColor = (): string | undefined =>\n applyOpacityToColor(tokens.colorNeutralBackground1, DEFAULT_ANNOTATION_BACKGROUND_OPACITY);\n\n/**\n * Get default connector stroke color\n * Updated for v9 - uses tokens instead of theme\n */\nexport const getDefaultConnectorStrokeColor = (): string => tokens.colorNeutralForeground1;\n\n/**\n * @internal\n */\nexport const chartAnnotationLayerClassNames: SlotClassNames<ChartAnnotationLayerStyles> = {\n root: 'fui-chartAnnotationLayer__root',\n annotation: 'fui-chartAnnotationLayer__annotation',\n connectorLayer: 'fui-chartAnnotationLayer__connectorLayer',\n measurement: 'fui-chartAnnotationLayer__measurement',\n annotationContent: 'fui-chartAnnotationLayer__annotationContent',\n annotationForeignObject: 'fui-chartAnnotationLayer__annotationForeignObject',\n annotationContentInteractive: 'fui-chartAnnotationLayer__annotationContentInteractive',\n annotationForeignObjectInteractive: 'fui-chartAnnotationLayer__annotationForeignObjectInteractive',\n connectorGroup: 'fui-chartAnnotationLayer__connectorGroup',\n};\n\n/**\n * Base Styles\n */\nconst useStyles = makeStyles({\n root: {\n position: 'absolute',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n overflow: 'visible',\n zIndex: 1,\n },\n annotation: {\n ...typographyStyles.caption1,\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n color: tokens.colorNeutralForeground1,\n paddingTop: '4px',\n paddingBottom: '4px',\n paddingLeft: '8px',\n paddingRight: '8px',\n borderRadius: tokens.borderRadiusMedium,\n boxShadow: tokens.shadow16,\n border: `1px solid ${tokens.colorNeutralStroke1}`,\n whiteSpace: 'pre-wrap',\n zIndex: 2,\n },\n connectorLayer: {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n overflow: 'visible',\n },\n measurement: {\n position: 'absolute',\n visibility: 'hidden',\n pointerEvents: 'none',\n },\n annotationContent: {\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n },\n annotationForeignObject: {\n overflow: 'visible',\n pointerEvents: 'none',\n },\n annotationContentInteractive: {\n pointerEvents: 'auto',\n },\n annotationForeignObjectInteractive: {\n pointerEvents: 'auto',\n },\n connectorGroup: {\n pointerEvents: 'none',\n },\n});\n\n/**\n * Apply styling to the ChartAnnotationLayer slots based on the state\n */\nexport const useChartAnnotationLayerStyles = (props: ChartAnnotationLayerStyleProps): ChartAnnotationLayerStyles => {\n const baseStyles = useStyles();\n\n return {\n root: mergeClasses(chartAnnotationLayerClassNames.root, baseStyles.root, props.className, props.styles?.root),\n annotation: mergeClasses(\n chartAnnotationLayerClassNames.annotation,\n baseStyles.annotation,\n props.styles?.annotation,\n ),\n connectorLayer: mergeClasses(\n chartAnnotationLayerClassNames.connectorLayer,\n baseStyles.connectorLayer,\n props.styles?.connectorLayer,\n ),\n measurement: mergeClasses(\n chartAnnotationLayerClassNames.measurement,\n baseStyles.measurement,\n props.styles?.measurement,\n ),\n annotationContent: mergeClasses(\n chartAnnotationLayerClassNames.annotationContent,\n baseStyles.annotationContent,\n props.styles?.annotationContent,\n ),\n annotationForeignObject: mergeClasses(\n chartAnnotationLayerClassNames.annotationForeignObject,\n baseStyles.annotationForeignObject,\n props.styles?.annotationForeignObject,\n ),\n annotationContentInteractive: mergeClasses(\n chartAnnotationLayerClassNames.annotationContentInteractive,\n baseStyles.annotationContentInteractive,\n props.styles?.annotationContentInteractive,\n ),\n annotationForeignObjectInteractive: mergeClasses(\n chartAnnotationLayerClassNames.annotationForeignObjectInteractive,\n baseStyles.annotationForeignObjectInteractive,\n props.styles?.annotationForeignObjectInteractive,\n ),\n connectorGroup: mergeClasses(\n chartAnnotationLayerClassNames.connectorGroup,\n baseStyles.connectorGroup,\n props.styles?.connectorGroup,\n ),\n };\n};\n"],"names":["makeStyles","mergeClasses","tokens","typographyStyles","color","d3Color","DEFAULT_ANNOTATION_BACKGROUND_OPACITY","DEFAULT_ANNOTATION_PADDING","DEFAULT_CONNECTOR_START_PADDING","DEFAULT_CONNECTOR_END_PADDING","DEFAULT_CONNECTOR_STROKE_WIDTH","DEFAULT_CONNECTOR_ARROW","applyOpacityToColor","opacity","undefined","parsed","Math","max","min","toString","getDefaultAnnotationBackgroundColor","colorNeutralBackground1","getDefaultConnectorStrokeColor","colorNeutralForeground1","chartAnnotationLayerClassNames","root","annotation","connectorLayer","measurement","annotationContent","annotationForeignObject","annotationContentInteractive","annotationForeignObjectInteractive","connectorGroup","useStyles","position","top","left","right","bottom","width","height","pointerEvents","overflow","zIndex","caption1","display","alignItems","justifyContent","textAlign","paddingTop","paddingBottom","paddingLeft","paddingRight","borderRadius","borderRadiusMedium","boxShadow","shadow16","border","colorNeutralStroke1","whiteSpace","visibility","useChartAnnotationLayerStyles","props","baseStyles","className","styles"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport { SlotClassNames } from '@fluentui/react-utilities';\nimport { tokens, typographyStyles } from '@fluentui/react-theme';\nimport { color as d3Color } from 'd3-color';\nimport { ChartAnnotationArrowHead } from '../../../types/ChartAnnotation';\n\nexport interface ChartAnnotationLayerStyles {\n root?: string;\n annotation?: string;\n annotationNoDefaults?: string;\n connectorLayer?: string;\n measurement?: string;\n annotationContent?: string;\n annotationForeignObject?: string;\n annotationContentInteractive?: string;\n annotationForeignObjectInteractive?: string;\n connectorGroup?: string;\n}\n\nexport interface ChartAnnotationLayerStyleProps {\n className?: string;\n styles?: Partial<ChartAnnotationLayerStyles>;\n}\n\nexport const DEFAULT_ANNOTATION_BACKGROUND_OPACITY = 0.8;\nexport const DEFAULT_ANNOTATION_PADDING = '4px 8px';\nexport const DEFAULT_CONNECTOR_START_PADDING = 12;\nexport const DEFAULT_CONNECTOR_END_PADDING = 0;\nexport const DEFAULT_CONNECTOR_STROKE_WIDTH = 2;\nexport const DEFAULT_CONNECTOR_ARROW: ChartAnnotationArrowHead = 'end';\n\nexport const applyOpacityToColor = (\n color: string | undefined,\n opacity: number,\n options?: {\n preserveOriginalOpacity?: boolean;\n },\n): string | undefined => {\n if (!color) {\n return undefined;\n }\n\n const parsed = d3Color(color);\n if (!parsed) {\n return color;\n }\n\n const originalOpacity = typeof parsed.opacity === 'number' ? parsed.opacity : 1;\n const preserveOriginalOpacity = options?.preserveOriginalOpacity ?? true;\n\n if (preserveOriginalOpacity && originalOpacity < 1) {\n return parsed.toString();\n }\n\n parsed.opacity = Math.max(0, Math.min(1, opacity));\n return parsed.toString();\n};\n\n/**\n * Get default annotation background color with opacity applied\n * Updated for v9 - uses tokens instead of theme\n */\nexport const getDefaultAnnotationBackgroundColor = (): string | undefined =>\n applyOpacityToColor(tokens.colorNeutralBackground1, DEFAULT_ANNOTATION_BACKGROUND_OPACITY);\n\n/**\n * Get default connector stroke color\n * Updated for v9 - uses tokens instead of theme\n */\nexport const getDefaultConnectorStrokeColor = (): string => tokens.colorNeutralForeground1;\n\n/**\n * @internal\n */\nexport const chartAnnotationLayerClassNames: SlotClassNames<ChartAnnotationLayerStyles> = {\n root: 'fui-chartAnnotationLayer__root',\n annotation: 'fui-chartAnnotationLayer__annotation',\n annotationNoDefaults: 'fui-chartAnnotationLayer__annotationNoDefaults',\n connectorLayer: 'fui-chartAnnotationLayer__connectorLayer',\n measurement: 'fui-chartAnnotationLayer__measurement',\n annotationContent: 'fui-chartAnnotationLayer__annotationContent',\n annotationForeignObject: 'fui-chartAnnotationLayer__annotationForeignObject',\n annotationContentInteractive: 'fui-chartAnnotationLayer__annotationContentInteractive',\n annotationForeignObjectInteractive: 'fui-chartAnnotationLayer__annotationForeignObjectInteractive',\n connectorGroup: 'fui-chartAnnotationLayer__connectorGroup',\n};\n\n/**\n * Base Styles\n */\nconst annotationBaseStyles = {\n ...typographyStyles.caption1,\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n color: tokens.colorNeutralForeground1,\n paddingTop: '4px',\n paddingBottom: '4px',\n paddingLeft: '8px',\n paddingRight: '8px',\n borderRadius: tokens.borderRadiusMedium,\n whiteSpace: 'pre-wrap',\n zIndex: 2,\n} as const;\n\nconst useStyles = makeStyles({\n root: {\n position: 'absolute',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n overflow: 'visible',\n zIndex: 1,\n },\n annotation: {\n ...annotationBaseStyles,\n boxShadow: tokens.shadow16,\n border: `1px solid ${tokens.colorNeutralStroke1}`,\n },\n annotationNoDefaults: {\n ...annotationBaseStyles,\n },\n connectorLayer: {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n overflow: 'visible',\n },\n measurement: {\n position: 'absolute',\n visibility: 'hidden',\n pointerEvents: 'none',\n },\n annotationContent: {\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n },\n annotationForeignObject: {\n overflow: 'visible',\n pointerEvents: 'none',\n },\n annotationContentInteractive: {\n pointerEvents: 'auto',\n },\n annotationForeignObjectInteractive: {\n pointerEvents: 'auto',\n },\n connectorGroup: {\n pointerEvents: 'none',\n },\n});\n\n/**\n * Apply styling to the ChartAnnotationLayer slots based on the state\n */\nexport const useChartAnnotationLayerStyles = (props: ChartAnnotationLayerStyleProps): ChartAnnotationLayerStyles => {\n const baseStyles = useStyles();\n\n return {\n root: mergeClasses(chartAnnotationLayerClassNames.root, baseStyles.root, props.className, props.styles?.root),\n annotation: mergeClasses(\n chartAnnotationLayerClassNames.annotation,\n baseStyles.annotation,\n props.styles?.annotation,\n ),\n connectorLayer: mergeClasses(\n chartAnnotationLayerClassNames.connectorLayer,\n baseStyles.connectorLayer,\n props.styles?.connectorLayer,\n ),\n measurement: mergeClasses(\n chartAnnotationLayerClassNames.measurement,\n baseStyles.measurement,\n props.styles?.measurement,\n ),\n annotationContent: mergeClasses(\n chartAnnotationLayerClassNames.annotationContent,\n baseStyles.annotationContent,\n props.styles?.annotationContent,\n ),\n annotationForeignObject: mergeClasses(\n chartAnnotationLayerClassNames.annotationForeignObject,\n baseStyles.annotationForeignObject,\n props.styles?.annotationForeignObject,\n ),\n annotationContentInteractive: mergeClasses(\n chartAnnotationLayerClassNames.annotationContentInteractive,\n baseStyles.annotationContentInteractive,\n props.styles?.annotationContentInteractive,\n ),\n annotationForeignObjectInteractive: mergeClasses(\n chartAnnotationLayerClassNames.annotationForeignObjectInteractive,\n baseStyles.annotationForeignObjectInteractive,\n props.styles?.annotationForeignObjectInteractive,\n ),\n connectorGroup: mergeClasses(\n chartAnnotationLayerClassNames.connectorGroup,\n baseStyles.connectorGroup,\n props.styles?.connectorGroup,\n ),\n };\n};\n"],"names":["makeStyles","mergeClasses","tokens","typographyStyles","color","d3Color","DEFAULT_ANNOTATION_BACKGROUND_OPACITY","DEFAULT_ANNOTATION_PADDING","DEFAULT_CONNECTOR_START_PADDING","DEFAULT_CONNECTOR_END_PADDING","DEFAULT_CONNECTOR_STROKE_WIDTH","DEFAULT_CONNECTOR_ARROW","applyOpacityToColor","opacity","options","undefined","parsed","originalOpacity","preserveOriginalOpacity","toString","Math","max","min","getDefaultAnnotationBackgroundColor","colorNeutralBackground1","getDefaultConnectorStrokeColor","colorNeutralForeground1","chartAnnotationLayerClassNames","root","annotation","annotationNoDefaults","connectorLayer","measurement","annotationContent","annotationForeignObject","annotationContentInteractive","annotationForeignObjectInteractive","connectorGroup","annotationBaseStyles","caption1","position","pointerEvents","display","alignItems","justifyContent","textAlign","paddingTop","paddingBottom","paddingLeft","paddingRight","borderRadius","borderRadiusMedium","whiteSpace","zIndex","useStyles","top","left","right","bottom","width","height","overflow","boxShadow","shadow16","border","colorNeutralStroke1","visibility","useChartAnnotationLayerStyles","props","baseStyles","className","styles"],"mappings":"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"}
@@ -35,7 +35,7 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
35
35
  const idForGraph = 'chart_';
36
36
  let _reqID;
37
37
  const _useRtl = (0, _index.useRtl)();
38
- let _tickValues;
38
+ let _tickLabels;
39
39
  const _isFirstRender = _react.useRef(true);
40
40
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
41
  let _xScale;
@@ -60,6 +60,7 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
60
60
  const classes = (0, _useCartesianChartStylesstyles.useCartesianChartStyles)(props);
61
61
  const focusAttributes = (0, _reacttabster.useFocusableGroup)();
62
62
  const arrowAttributes = (0, _reacttabster.useArrowNavigationGroup)({
63
+ circular: true,
63
64
  axis: 'horizontal'
64
65
  });
65
66
  // ComponentdidMount and Componentwillunmount logic
@@ -144,6 +145,7 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
144
145
  let yScaleSecondary;
145
146
  let children = null;
146
147
  if (props.enableFirstRenderOptimization && chartContainer.current || !props.enableFirstRenderOptimization) {
148
+ var _props_xAxis, _props_xAxis1, _props_xAxis2;
147
149
  _isFirstRender.current = false;
148
150
  var _props_showRoundOffXTickValues;
149
151
  const XAxisParams = {
@@ -165,7 +167,7 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
165
167
  xAxisInnerPadding: props.xAxisInnerPadding,
166
168
  xAxisOuterPadding: props.xAxisOuterPadding,
167
169
  containerWidth: containerWidth,
168
- hideTickOverlap: props.rotateXAxisLables ? false : hideTickOverlap,
170
+ hideTickOverlap: props.rotateXAxisLables || ((_props_xAxis = props.xAxis) === null || _props_xAxis === void 0 ? void 0 : _props_xAxis.tickLayout) === 'auto' ? false : hideTickOverlap,
169
171
  calcMaxLabelWidth: _calcMaxLabelWidthWithTransform,
170
172
  xMinValue: props.xMinValue,
171
173
  xMaxValue: props.xMaxValue,
@@ -179,22 +181,27 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
179
181
  */ // eslint-disable-next-line @typescript-eslint/no-explicit-any
180
182
  let xScale;
181
183
  let tickValues;
184
+ let tickLabels;
182
185
  switch(props.xAxisType){
183
186
  case _index.XAxisTypes.NumericAxis:
184
- ({ xScale, tickValues } = (0, _index.createNumericXAxis)(XAxisParams, props.tickParams, props.chartType, culture, props.xScaleType, _useRtl));
187
+ ({ xScale, tickValues, tickLabels } = (0, _index.createNumericXAxis)(XAxisParams, props.tickParams, props.chartType, culture, props.xScaleType, _useRtl));
185
188
  break;
186
189
  case _index.XAxisTypes.DateAxis:
187
- ({ xScale, tickValues } = (0, _index.createDateXAxis)(XAxisParams, props.tickParams, culture, dateLocalizeOptions, timeFormatLocale, customDateTimeFormatter, props.useUTC, props.chartType));
190
+ ({ xScale, tickValues, tickLabels } = (0, _index.createDateXAxis)(XAxisParams, props.tickParams, culture, dateLocalizeOptions, timeFormatLocale, customDateTimeFormatter, props.useUTC, props.chartType));
188
191
  break;
189
192
  case _index.XAxisTypes.StringAxis:
190
- ({ xScale, tickValues } = (0, _index.createStringXAxis)(XAxisParams, props.tickParams, props.datasetForXAxisDomain, culture, _useRtl));
193
+ ({ xScale, tickValues, tickLabels } = (0, _index.createStringXAxis)(XAxisParams, props.tickParams, props.datasetForXAxisDomain, culture, _useRtl));
191
194
  break;
192
195
  default:
193
- ({ xScale, tickValues } = (0, _index.createNumericXAxis)(XAxisParams, props.tickParams, props.chartType, culture, props.xScaleType, _useRtl));
196
+ ({ xScale, tickValues, tickLabels } = (0, _index.createNumericXAxis)(XAxisParams, props.tickParams, props.chartType, culture, props.xScaleType, _useRtl));
194
197
  }
195
198
  _xScale = xScale;
196
- _tickValues = tickValues;
197
- _transformXAxisLabels();
199
+ _tickLabels = tickLabels;
200
+ if (((_props_xAxis1 = props.xAxis) === null || _props_xAxis1 === void 0 ? void 0 : _props_xAxis1.tickLayout) === 'auto') {
201
+ _removalValueForTextTuncate = (0, _index.autoLayoutXAxisLabels)(tickValues, _tickLabels, _xScale, xAxisElement.current, containerWidth, chartContainer.current);
202
+ } else {
203
+ _transformXAxisLabels();
204
+ }
198
205
  const YAxisParams = {
199
206
  margins: props.getYDomainMargins ? props.getYDomainMargins(containerHeight) : margins,
200
207
  containerWidth: containerWidth,
@@ -253,31 +260,34 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
253
260
  }
254
261
  _yAxisTickText.current = axisData.yAxisTickText;
255
262
  props.getAxisData && props.getAxisData(axisData);
256
- // Removing un wanted tooltip div from DOM, when prop not provided, for proper cleanup
257
- // of unwanted DOM elements, to prevent flacky behaviour in tooltips , that might occur
258
- // in creating tooltips when tooltips are enabled( as we try to recreate a tspan with _tooltipId)
259
- if (!props.showYAxisLablesTooltip) {
260
- try {
261
- document.getElementById(_tooltipId) && document.getElementById(_tooltipId).remove();
262
- //eslint-disable-next-line no-empty
263
- } catch (e) {}
263
+ // Removing previously created tooltips.
264
+ try {
265
+ // eslint-disable-next-line @nx/workspace-no-restricted-globals
266
+ document.getElementById(_tooltipId) && document.getElementById(_tooltipId).remove();
267
+ // eslint-disable-next-line no-empty
268
+ } catch (e) {}
269
+ // Used to display tooltip at x axis labels.
270
+ if (props.showXAxisLablesTooltip || ((_props_xAxis2 = props.xAxis) === null || _props_xAxis2 === void 0 ? void 0 : _props_xAxis2.tickLayout) === 'auto') {
271
+ const _xAxisElement = xAxisElement.current ? (0, _d3selection.select)(xAxisElement.current).call(xScale) : null;
272
+ const tooltipProps = {
273
+ tooltipCls: classes.tooltip,
274
+ id: _tooltipId,
275
+ axis: _xAxisElement,
276
+ container: chartContainer.current
277
+ };
278
+ _xAxisElement && (0, _index.tooltipOfAxislabels)(tooltipProps);
264
279
  }
265
280
  // Used to display tooltip at y axis labels.
266
281
  if (props.showYAxisLablesTooltip) {
267
282
  // To create y axis tick values by if specified truncating the rest of the text
268
283
  // and showing elipsis or showing the whole string,
269
- yScalePrimary && // Note: This function should be invoked within the showYAxisLablesTooltip check,
270
- // as its sole purpose is to truncate labels that exceed the noOfCharsToTruncate limit.
271
- (0, _index.createYAxisLabels)(yAxisElement.current, yScalePrimary, props.noOfCharsToTruncate || 4, props.showYAxisLablesTooltip || false, _useRtl);
272
- const _yAxisElement = (0, _d3selection.select)(yAxisElement.current).call(yScalePrimary);
273
- try {
274
- document.getElementById(_tooltipId) && document.getElementById(_tooltipId).remove();
275
- //eslint-disable-next-line no-empty
276
- } catch (e) {}
284
+ yScalePrimary && (0, _index.createYAxisLabels)(yAxisElement.current, yScalePrimary, props.noOfCharsToTruncate || 4, props.showYAxisLablesTooltip || false, _useRtl);
285
+ const _yAxisElement = yAxisElement.current ? (0, _d3selection.select)(yAxisElement.current).call(yScalePrimary) : null;
277
286
  const ytooltipProps = {
278
287
  tooltipCls: classes.tooltip,
279
288
  id: _tooltipId,
280
- axis: _yAxisElement
289
+ axis: _yAxisElement,
290
+ container: chartContainer.current
281
291
  };
282
292
  _yAxisElement && (0, _index.tooltipOfAxislabels)(ytooltipProps);
283
293
  }
@@ -364,8 +374,8 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
364
374
  }
365
375
  function _calculateChartMinWidth() {
366
376
  // Adding 10px for padding on both sides
367
- const labelWidth = _calcMaxLabelWidthWithTransform(_tickValues) + 10;
368
- let minChartWidth = margins.left + margins.right + labelWidth * (_tickValues.length - 1);
377
+ const labelWidth = _calcMaxLabelWidthWithTransform(_tickLabels) + 10;
378
+ let minChartWidth = margins.left + margins.right + labelWidth * (_tickLabels.length - 1);
369
379
  if ([
370
380
  _index.ChartTypes.GroupedVerticalBarChart,
371
381
  _index.ChartTypes.VerticalBarChart,
@@ -376,6 +386,12 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
376
386
  }
377
387
  return minChartWidth;
378
388
  }
389
+ function _getChartDescription() {
390
+ return (props.chartTitle || 'Chart. ') + _getAxisTitle('X', props.xAxisTitle, props.xAxisType) + _getAxisTitle('Y', props.yAxisTitle, props.yAxisType || _index.YAxisType.NumericAxis) + (props.secondaryYScaleOptions ? _getAxisTitle('secondary Y', props.secondaryYAxistitle, _index.YAxisType.NumericAxis) : '');
391
+ }
392
+ function _getAxisTitle(axisLabel, axisTitle, axisType) {
393
+ return `The ${axisLabel} axis displays ` + (axisTitle || (axisType === _index.XAxisTypes.StringAxis || axisType === _index.YAxisType.StringAxis ? 'categories' : axisType === _index.XAxisTypes.DateAxis || axisType === _index.YAxisType.DateAxis ? 'time' : 'values')) + '. ';
394
+ }
379
395
  function _calcMaxLabelWidthWithTransform(x) {
380
396
  // Case: rotated labels
381
397
  if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType === _index.XAxisTypes.StringAxis) {
@@ -384,11 +400,11 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
384
400
  }
385
401
  // Case: truncated labels
386
402
  if (props.showXAxisLablesTooltip) {
387
- const tickValues = x.map((val)=>{
403
+ const tickLabels = x.map((val)=>{
388
404
  const numChars = props.noOfCharsToTruncate || 4;
389
405
  return val.toString().length > numChars ? `${val.toString().slice(0, numChars)}...` : val;
390
406
  });
391
- const longestLabelWidth = (0, _index.calculateLongestLabelWidth)(tickValues, `.${classes.xAxis} text`);
407
+ const longestLabelWidth = (0, _index.calculateLongestLabelWidth)(tickLabels, `.${classes.xAxis} text`);
392
408
  return Math.ceil(longestLabelWidth);
393
409
  }
394
410
  // Case: wrapped labels
@@ -430,7 +446,8 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
430
446
  xAxis: _xScale,
431
447
  showXAxisLablesTooltip: props.showXAxisLablesTooltip || false,
432
448
  noOfCharsToTruncate: props.noOfCharsToTruncate || 4,
433
- width: maxXAxisLabelWidth
449
+ width: maxXAxisLabelWidth,
450
+ container: chartContainer.current
434
451
  };
435
452
  var _createWrapOfXLabels;
436
453
  _removalValueForTextTuncate = (_createWrapOfXLabels = (0, _index.createWrapOfXLabels)(wrapLabelProps)) !== null && _createWrapOfXLabels !== void 0 ? _createWrapOfXLabels : 0;
@@ -537,7 +554,8 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
537
554
  }, _isFirstRender.current, /*#__PURE__*/ _react.createElement("svg", {
538
555
  width: svgDimensions.width,
539
556
  height: svgDimensions.height,
540
- "aria-label": props.chartTitle,
557
+ role: "region",
558
+ "aria-label": _getChartDescription(),
541
559
  style: {
542
560
  display: 'block'
543
561
  },
@@ -561,18 +579,37 @@ const CartesianChart = /*#__PURE__*/ _react.forwardRef(({ hideTickOverlap = true
561
579
  textAnchor: 'middle'
562
580
  },
563
581
  maxWidth: xAxisTitleMaxWidth
564
- }), props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '' && /*#__PURE__*/ _react.createElement(_SVGTooltipText.SVGTooltipText, {
565
- ...commonSvgToolTipProps,
566
- content: props.xAxisAnnotation,
567
- textProps: {
568
- x: margins.left + AXIS_TITLE_PADDING + xAxisTitleMaxWidth / 2,
569
- y: VERTICAL_MARGIN_FOR_XAXIS_TITLE - AXIS_TITLE_PADDING,
570
- className: classes.axisAnnotation,
571
- textAnchor: 'middle',
572
- 'aria-hidden': true
573
- },
574
- maxWidth: xAxisTitleMaxWidth
575
- }), /*#__PURE__*/ _react.createElement("g", {
582
+ }), props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '' && (()=>{
583
+ var _props_titleStyles;
584
+ const { titleFont, titleXAnchor, titleYAnchor, titlePad } = (_props_titleStyles = props.titleStyles) !== null && _props_titleStyles !== void 0 ? _props_titleStyles : {};
585
+ const fontSize = typeof (titleFont === null || titleFont === void 0 ? void 0 : titleFont.size) === 'number' ? titleFont.size : 13;
586
+ var _titlePad_l;
587
+ const padL = (_titlePad_l = titlePad === null || titlePad === void 0 ? void 0 : titlePad.l) !== null && _titlePad_l !== void 0 ? _titlePad_l : 0;
588
+ var _titlePad_r;
589
+ const padR = (_titlePad_r = titlePad === null || titlePad === void 0 ? void 0 : titlePad.r) !== null && _titlePad_r !== void 0 ? _titlePad_r : 0;
590
+ var _titlePad_t;
591
+ const padT = (_titlePad_t = titlePad === null || titlePad === void 0 ? void 0 : titlePad.t) !== null && _titlePad_t !== void 0 ? _titlePad_t : 0;
592
+ var _titlePad_b;
593
+ const padB = (_titlePad_b = titlePad === null || titlePad === void 0 ? void 0 : titlePad.b) !== null && _titlePad_b !== void 0 ? _titlePad_b : 0;
594
+ const xPos = (titleXAnchor === 'left' ? margins.left + AXIS_TITLE_PADDING : titleXAnchor === 'right' ? margins.left + AXIS_TITLE_PADDING + xAxisTitleMaxWidth : margins.left + AXIS_TITLE_PADDING + xAxisTitleMaxWidth / 2) + padL - padR;
595
+ const yPos = Math.max(fontSize + AXIS_TITLE_PADDING, VERTICAL_MARGIN_FOR_XAXIS_TITLE - AXIS_TITLE_PADDING) + padT - padB;
596
+ const textAnchor = titleXAnchor === 'left' ? 'start' : titleXAnchor === 'right' ? 'end' : 'middle';
597
+ const dominantBaseline = titleYAnchor === 'top' ? 'hanging' : titleYAnchor === 'bottom' ? 'alphabetic' : titleYAnchor === 'middle' ? 'central' : 'auto';
598
+ return /*#__PURE__*/ _react.createElement(_SVGTooltipText.SVGTooltipText, {
599
+ ...commonSvgToolTipProps,
600
+ content: props.xAxisAnnotation,
601
+ textProps: {
602
+ x: xPos,
603
+ y: yPos,
604
+ className: classes.axisAnnotation,
605
+ textAnchor,
606
+ dominantBaseline,
607
+ 'aria-hidden': true,
608
+ style: (0, _index.getChartTitleInlineStyles)(titleFont)
609
+ },
610
+ maxWidth: xAxisTitleMaxWidth
611
+ });
612
+ })(), /*#__PURE__*/ _react.createElement("g", {
576
613
  ref: (e)=>{
577
614
  yAxisElement.current = e;
578
615
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/CommonComponents/CartesianChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { ModifiedCartesianChartProps } from '../../index';\nimport { useCartesianChartStyles } from './useCartesianChartStyles.styles';\nimport { select as d3Select } from 'd3-selection';\nimport {\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n createDateXAxis,\n IMargins,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n calculateLongestLabelWidth,\n createYAxisLabels,\n ChartTypes,\n wrapContent,\n useRtl,\n truncateString,\n tooltipOfAxislabels,\n getSecureProps,\n DEFAULT_WRAP_WIDTH,\n} from '../../utilities/index';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { SVGTooltipText, SVGTooltipTextProps } from '../../utilities/SVGTooltipText';\nimport { ChartAnnotationLayer } from './Annotations/ChartAnnotationLayer';\nimport { ChartAnnotationContext } from './Annotations/ChartAnnotationLayer.types';\nimport { ChartPopover } from './ChartPopover';\nimport { useFocusableGroup, useArrowNavigationGroup } from '@fluentui/react-tabster';\n\nconst HORIZONTAL_MARGIN_FOR_YAXIS_TITLE = 24;\nconst VERTICAL_MARGIN_FOR_XAXIS_TITLE = 20;\nconst AXIS_TITLE_PADDING = 8;\nconst DEFAULT_MARGIN_WITH_TICKS = 40;\nconst DEFAULT_MARGIN_NO_TICKS = 20;\n\n/**\n * Cartesian Chart component\n * {@docCategory CartesianChart}\n */\nexport const CartesianChart: React.FunctionComponent<ModifiedCartesianChartProps> = React.forwardRef<\n HTMLDivElement,\n ModifiedCartesianChartProps\n>(({ hideTickOverlap = true, ...props }, forwardedRef) => {\n const chartContainer = React.useRef<HTMLDivElement | null>(null);\n let legendContainer: HTMLDivElement;\n const minLegendContainerHeight: number = 40;\n const xAxisElement = React.useRef<SVGSVGElement | null>(null);\n const yAxisElement = React.useRef<SVGSVGElement | null>(null);\n const yAxisElementSecondary = React.useRef<SVGSVGElement | null>(null);\n let margins: IMargins;\n const idForGraph: string = 'chart_';\n let _reqID: number | undefined;\n const _useRtl: boolean = useRtl();\n let _tickValues: (string | number)[];\n const _isFirstRender = React.useRef<boolean>(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _xScale: any;\n const isIntegralDataset = React.useMemo(() => {\n return !props.points.some((point: { y: number }) => point.y % 1 !== 0);\n }, [props.points]);\n let _tooltipId: string = useId('tooltip_');\n /* Used for when WrapXAxisLabels props appeared.\n * To display the total word (space separated words), Need to have more space than usual.\n * This height will get total height need to disaply total word.\n * These value need to be removed from actual svg height/graph height.\n * Defalut value is 0. And this values calculted when 'wrapXAxisLables' or 'showXAxisLablesTooltip' is true.\n */\n let _removalValueForTextTuncate: number = 0;\n const _yAxisTickText = React.useRef<string[]>([]);\n\n const [containerWidth, setContainerWidth] = React.useState<number>(0);\n const [containerHeight, setContainerHeight] = React.useState<number>(0);\n const [startFromX, setStartFromX] = React.useState<number>(0);\n const prevWidthRef = React.useRef<number | undefined>(undefined);\n const prevHeightRef = React.useRef<number | undefined>(undefined);\n\n const classes = useCartesianChartStyles(props);\n const focusAttributes = useFocusableGroup();\n const arrowAttributes = useArrowNavigationGroup({ axis: 'horizontal' });\n // ComponentdidMount and Componentwillunmount logic\n React.useEffect(() => {\n _fitParentContainer();\n if (props.showYAxisLables) {\n const maxYAxisLabelLength = calculateMaxYAxisLabelLength(classes.yAxis!);\n if (startFromX !== maxYAxisLabelLength) {\n setStartFromX(maxYAxisLabelLength);\n }\n } else if (startFromX !== 0) {\n setStartFromX(0);\n }\n return () => {\n if (_reqID !== undefined) {\n cancelAnimationFrame(_reqID);\n }\n };\n }, [props]);\n\n // ComponentDidUpdate logic\n React.useEffect(() => {\n // Check if height or width changed\n if (\n prevWidthRef.current !== undefined &&\n prevHeightRef.current !== undefined &&\n (prevWidthRef.current !== props.width || prevHeightRef.current !== props.height)\n ) {\n _fitParentContainer();\n }\n // Update refs with current values\n prevWidthRef.current = props.width;\n prevHeightRef.current = props.height;\n\n if (props.showYAxisLables) {\n const maxYAxisLabelLength = calculateMaxYAxisLabelLength(classes.yAxis!);\n if (startFromX !== maxYAxisLabelLength) {\n setStartFromX(maxYAxisLabelLength);\n }\n } else if (startFromX !== 0) {\n setStartFromX(0);\n }\n }, [props.width, props.height, props.chartType, props.showYAxisLables, props.yAxisType]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: chartContainer.current ?? null,\n }),\n [],\n );\n\n /**\n * Dedicated function to return the Callout JSX Element , which can further be used to only call this when\n * only the calloutprops and charthover props changes.\n * @param calloutProps\n * @param chartHoverProps\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _generateCallout(calloutProps: any): JSXElement {\n return <ChartPopover {...calloutProps} />;\n }\n\n function calculateMaxYAxisLabelLength(className: string): number {\n const formatTickLabel = (str: string) => {\n if (props.showYAxisLablesTooltip) {\n return truncateString(str, props.noOfCharsToTruncate || 4);\n }\n\n return str;\n };\n return calculateLongestLabelWidth(\n _yAxisTickText.current.map(label => formatTickLabel(label)),\n `.${className} text`,\n );\n }\n\n const {\n calloutProps,\n points,\n chartType,\n svgProps,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n } = props;\n if (props.parentRef) {\n _fitParentContainer();\n }\n\n margins = _calcMargins();\n // Callback for margins to the chart\n props.getmargins && props.getmargins(margins);\n\n let callout: JSXElement | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScalePrimary: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScaleSecondary: any;\n\n let children = null;\n if ((props.enableFirstRenderOptimization && chartContainer.current) || !props.enableFirstRenderOptimization) {\n _isFirstRender.current = false;\n const XAxisParams = {\n domainNRangeValues: props.getDomainNRangeValues(\n points,\n props.getDomainMargins ? props.getDomainMargins(containerWidth) : margins,\n containerWidth,\n chartType,\n _useRtl,\n props.xAxisType,\n props.barwidth!,\n props.tickValues!,\n ),\n // FIXME: In XAxisParams, containerHeight is used by HBWA to generate vertical gridlines.\n // Since the x-axis in HBWA is numeric, it typically doesn't require transformation.\n // However, if transformation props are enabled, the updated _removalValueForTextTuncate\n // will only be available in the next render, as it's set after the axis is created.\n // Solution: Delay the creation of gridlines until after the transformation has been applied,\n // or precompute the required height for transformed labels (_removalValueForTextTuncate).\n containerHeight: containerHeight - _removalValueForTextTuncate,\n margins: margins,\n xAxisElement: xAxisElement.current!,\n showRoundOffXTickValues: props.showRoundOffXTickValues ?? true,\n xAxisCount: props.xAxisTickCount,\n xAxistickSize: props.xAxistickSize,\n tickPadding: props.tickPadding || props.showXAxisLablesTooltip ? 5 : 10,\n xAxisPadding: props.xAxisPadding,\n xAxisInnerPadding: props.xAxisInnerPadding,\n xAxisOuterPadding: props.xAxisOuterPadding,\n containerWidth: containerWidth,\n hideTickOverlap: props.rotateXAxisLables ? false : hideTickOverlap,\n calcMaxLabelWidth: _calcMaxLabelWidthWithTransform,\n xMinValue: props.xMinValue,\n xMaxValue: props.xMaxValue,\n ...props.xAxis,\n };\n\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let xScale: any;\n let tickValues: (string | number)[];\n switch (props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n ({ xScale, tickValues } = createNumericXAxis(\n XAxisParams,\n props.tickParams!,\n props.chartType,\n culture,\n props.xScaleType,\n _useRtl,\n ));\n break;\n case XAxisTypes.DateAxis:\n ({ xScale, tickValues } = createDateXAxis(\n XAxisParams,\n props.tickParams!,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n props.useUTC,\n props.chartType,\n ));\n break;\n case XAxisTypes.StringAxis:\n ({ xScale, tickValues } = createStringXAxis(\n XAxisParams,\n props.tickParams!,\n props.datasetForXAxisDomain!,\n culture,\n _useRtl,\n ));\n break;\n default:\n ({ xScale, tickValues } = createNumericXAxis(\n XAxisParams,\n props.tickParams!,\n props.chartType,\n culture,\n props.xScaleType,\n _useRtl,\n ));\n }\n _xScale = xScale;\n _tickValues = tickValues;\n\n _transformXAxisLabels();\n\n const YAxisParams = {\n margins: props.getYDomainMargins ? props.getYDomainMargins(containerHeight) : margins,\n containerWidth: containerWidth,\n containerHeight: containerHeight - _removalValueForTextTuncate,\n yAxisElement: yAxisElement.current!,\n yAxisTickFormat: props.yAxisTickFormat!,\n yAxisTickCount: props.yAxisTickCount!,\n yMinValue: props.yMinValue || 0,\n yMaxValue: props.yMaxValue || 0,\n tickPadding: 10,\n maxOfYVal: props.maxOfYVal,\n yMinMaxValues: props.getMinMaxOfYAxis(points, props.yAxisType),\n // please note these padding default values must be consistent in here\n // and the parent chart(HBWA/Vertical etc..) for more details refer example\n // http://using-d3js.com/04_07_ordinal_scales.html\n yAxisPadding: props.yAxisPadding || 0,\n tickValues: props.yAxisTickValues,\n ...props.yAxis,\n };\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n const axisData: IAxisData = { yAxisDomainValues: [], yAxisTickText: [] };\n if (props.yAxisType && props.yAxisType === YAxisType.StringAxis) {\n yScalePrimary = props.createStringYAxis(\n YAxisParams,\n props.stringDatasetForYAxisDomain!,\n _useRtl,\n axisData,\n props.barwidth,\n props.chartType,\n );\n } else {\n // TODO: Since the scale domain values are now computed independently for both the primary and\n // secondary y-axes, the yMinValue and yMaxValue props are no longer necessary for accurately\n // rendering the secondary y-axis. Therefore, rather than checking the secondaryYScaleOptions\n // prop to determine whether to create a secondary y-axis, it's more appropriate to check if any\n // data points are assigned to use the secondary y-scale.\n if (props?.secondaryYScaleOptions) {\n const YAxisParamsSecondary = {\n margins: margins,\n containerWidth: containerWidth,\n containerHeight: containerHeight - _removalValueForTextTuncate!,\n yAxisElement: yAxisElementSecondary.current,\n yAxisTickFormat: props.yAxisTickFormat!,\n yAxisTickCount: props.yAxisTickCount!,\n yMinValue: props.secondaryYScaleOptions?.yMinValue || 0,\n yMaxValue: props.secondaryYScaleOptions?.yMaxValue ?? 100,\n tickPadding: 10,\n yMinMaxValues: props.getMinMaxOfYAxis(points, props.yAxisType, true),\n yAxisPadding: props.yAxisPadding,\n };\n\n yScaleSecondary = props.createYAxis(\n YAxisParamsSecondary,\n _useRtl,\n axisData,\n isIntegralDataset,\n chartType,\n true,\n props.roundedTicks!,\n props.secondaryYScaleType,\n _useRtl,\n );\n }\n yScalePrimary = props.createYAxis(\n YAxisParams,\n _useRtl,\n axisData,\n isIntegralDataset,\n chartType,\n false,\n props.roundedTicks!,\n props.yScaleType,\n _useRtl,\n );\n }\n _yAxisTickText.current = axisData.yAxisTickText;\n props.getAxisData && props.getAxisData(axisData);\n\n // Removing un wanted tooltip div from DOM, when prop not provided, for proper cleanup\n // of unwanted DOM elements, to prevent flacky behaviour in tooltips , that might occur\n // in creating tooltips when tooltips are enabled( as we try to recreate a tspan with _tooltipId)\n if (!props.showYAxisLablesTooltip) {\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n }\n // Used to display tooltip at y axis labels.\n if (props.showYAxisLablesTooltip) {\n // To create y axis tick values by if specified truncating the rest of the text\n // and showing elipsis or showing the whole string,\n yScalePrimary &&\n // Note: This function should be invoked within the showYAxisLablesTooltip check,\n // as its sole purpose is to truncate labels that exceed the noOfCharsToTruncate limit.\n createYAxisLabels(\n yAxisElement.current!,\n yScalePrimary,\n props.noOfCharsToTruncate || 4,\n props.showYAxisLablesTooltip || false,\n _useRtl,\n );\n const _yAxisElement = d3Select(yAxisElement.current!).call(yScalePrimary);\n try {\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n //eslint-disable-next-line no-empty\n } catch (e) {}\n const ytooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: _yAxisElement,\n };\n _yAxisElement && tooltipOfAxislabels(ytooltipProps);\n }\n\n // Call back to the chart.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _getData = (xScale: any, yScalePrimary: any, yScaleSecondary: any) => {\n props.getGraphData &&\n props.getGraphData(\n xScale,\n yScalePrimary,\n containerHeight - _removalValueForTextTuncate!,\n containerWidth,\n xAxisElement.current,\n yAxisElement.current,\n yScaleSecondary,\n );\n };\n\n // Callback function for chart, returns axis\n _getData(xScale, yScalePrimary, yScaleSecondary);\n\n children = props.children({\n xScale,\n yScalePrimary,\n yScaleSecondary,\n containerHeight,\n containerWidth,\n });\n\n if (!props.hideTooltip && calloutProps!.isPopoverOpen) {\n callout = _generateCallout(calloutProps);\n }\n }\n const svgDimensions = {\n width: containerWidth,\n height: containerHeight,\n };\n\n const plotWidth = Math.max(0, svgDimensions.width - margins.left! - margins.right!);\n const plotHeight = Math.max(0, svgDimensions.height - margins.top! - margins.bottom! - _removalValueForTextTuncate);\n\n const plotRect = {\n x: margins.left!,\n y: margins.top!,\n width: plotWidth,\n height: plotHeight,\n };\n\n const annotations = props.annotations ?? [];\n const hasAnnotations = annotations.length > 0;\n const annotationContext: ChartAnnotationContext | undefined = hasAnnotations\n ? {\n plotRect,\n svgRect: svgDimensions,\n isRtl: _useRtl,\n xScale: _xScale,\n yScalePrimary,\n yScaleSecondary,\n }\n : undefined;\n\n const xAxisTitleMaxWidth = svgDimensions.width - margins.left! - margins.right! - AXIS_TITLE_PADDING * 2;\n const yAxisTitleMaxHeight =\n svgDimensions.height - margins.bottom! - margins.top! - _removalValueForTextTuncate! - AXIS_TITLE_PADDING * 2;\n const yAxisTitleCenterY = margins.top! + AXIS_TITLE_PADDING + yAxisTitleMaxHeight / 2;\n const yAxisTitleCenterX = _useRtl\n ? svgDimensions.width - AXIS_TITLE_PADDING\n : HORIZONTAL_MARGIN_FOR_YAXIS_TITLE - AXIS_TITLE_PADDING;\n const secondaryYAxisTitleCenterX = _useRtl\n ? HORIZONTAL_MARGIN_FOR_YAXIS_TITLE - AXIS_TITLE_PADDING\n : svgDimensions.width - AXIS_TITLE_PADDING;\n\n const commonSvgToolTipProps: SVGTooltipTextProps = {\n wrapContent,\n showBackground: true,\n className: classes.svgTooltip,\n content: '',\n };\n /**\n * When screen resizes, along with screen, chart also auto adjusted.\n * This method used to adjust height and width of the charts.\n */\n function _fitParentContainer(): void {\n //_reqID = requestAnimationFrame(() => {\n let legendContainerHeight;\n if (props.hideLegend) {\n // If there is no legend, need not to allocate some space from total chart space.\n legendContainerHeight = 0;\n } else {\n const legendContainerComputedStyles = legendContainer && getComputedStyle(legendContainer);\n legendContainerHeight =\n ((legendContainer && legendContainer.getBoundingClientRect().height) || minLegendContainerHeight) +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginTop) || '0') +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginBottom) || '0');\n }\n if (props.parentRef || chartContainer.current) {\n const container = props.parentRef ? props.parentRef : chartContainer.current!;\n const currentContainerWidth =\n props.reflowProps?.mode === 'min-width' && !_isFirstRender.current\n ? Math.max(container.getBoundingClientRect().width, _calculateChartMinWidth())\n : container.getBoundingClientRect().width;\n const currentContainerHeight =\n container.getBoundingClientRect().height > legendContainerHeight\n ? container.getBoundingClientRect().height\n : 350;\n const shouldResize =\n containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight - legendContainerHeight;\n if (shouldResize) {\n setContainerWidth(currentContainerWidth);\n setContainerHeight(currentContainerHeight - legendContainerHeight);\n }\n }\n //});\n }\n\n function _onChartLeave(): void {\n props.onChartMouseLeave && props.onChartMouseLeave();\n }\n\n function _calculateChartMinWidth(): number {\n // Adding 10px for padding on both sides\n const labelWidth = _calcMaxLabelWidthWithTransform(_tickValues) + 10;\n\n let minChartWidth = margins.left! + margins.right! + labelWidth * (_tickValues.length - 1);\n\n if (\n [ChartTypes.GroupedVerticalBarChart, ChartTypes.VerticalBarChart, ChartTypes.VerticalStackedBarChart].includes(\n props.chartType,\n )\n ) {\n const minDomainMargin = 8;\n minChartWidth += minDomainMargin * 2;\n }\n\n return minChartWidth;\n }\n\n function _calcMaxLabelWidthWithTransform(x: (string | number)[]) {\n // Case: rotated labels\n if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType! === XAxisTypes.StringAxis) {\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth * Math.cos(Math.PI / 4));\n }\n\n // Case: truncated labels\n if (props.showXAxisLablesTooltip) {\n const tickValues = x.map(val => {\n const numChars = props.noOfCharsToTruncate || 4;\n return val.toString().length > numChars ? `${val.toString().slice(0, numChars)}...` : val;\n });\n\n const longestLabelWidth = calculateLongestLabelWidth(tickValues, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n }\n\n // Case: wrapped labels\n if (props.wrapXAxisLables) {\n // FIXME: Calculate the max width of lines instead of words. This requires applying\n // the wrapping transformation earlier to obtain the actual rendered lines.\n const words: string[] = [];\n x.forEach((val: string) => {\n words.push(...val.toString().split(/\\s+/));\n });\n\n // This approach works well in most cases, since overflow typically occurs only when\n // a single word exceeds the specified width — otherwise, the text will wrap as expected.\n const longestLabelWidth = calculateLongestLabelWidth(words, `.${classes.xAxis} text`);\n return Math.max(Math.ceil(longestLabelWidth), DEFAULT_WRAP_WIDTH);\n }\n\n // Default case\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n }\n\n function _transformXAxisLabels() {\n _removalValueForTextTuncate = 0;\n\n /*\n * To enable wrapping of x axis tick values or to display complete x axis tick values,\n * we need to calculate how much space it needed to render the text.\n * No need to re-calculate every time the chart renders and same time need to get an update. So using setState.\n * Required space will be calculated first time chart rendering and if any width/height of chart updated.\n * */\n if (props.wrapXAxisLables || props.showXAxisLablesTooltip) {\n let maxXAxisLabelWidth: number | undefined;\n if (props.xAxisType === XAxisTypes.StringAxis) {\n if ((props.datasetForXAxisDomain?.length || 0) > 1) {\n maxXAxisLabelWidth = _xScale.step();\n } else {\n maxXAxisLabelWidth = containerWidth;\n }\n }\n\n const wrapLabelProps = {\n node: xAxisElement.current!,\n xAxis: _xScale,\n showXAxisLablesTooltip: props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: props.noOfCharsToTruncate || 4,\n width: maxXAxisLabelWidth,\n };\n _removalValueForTextTuncate = createWrapOfXLabels(wrapLabelProps) ?? 0;\n }\n\n if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType! === XAxisTypes.StringAxis) {\n const rotateLabelProps = {\n node: xAxisElement.current!,\n xAxis: _xScale,\n };\n const rotatedHeight = rotateXAxisLabels(rotateLabelProps) ?? 0;\n // margins.bottom is used as padding here\n _removalValueForTextTuncate = rotatedHeight + margins.bottom!;\n }\n }\n\n function _calcMargins(): IMargins {\n let _margins = _getDefaultMargins();\n\n _margins = _applyTitleMargins(_margins);\n _margins = _applyAnnotationMargins(_margins);\n\n if (_useRtl) {\n _margins = _swapRtlMargins(_margins);\n }\n\n return {\n ..._margins,\n ...props.margins,\n };\n }\n\n function _getDefaultMargins(): IMargins {\n return {\n top: DEFAULT_MARGIN_NO_TICKS,\n // Smaller than the default because it is based on the line height rather than\n // the length of the tick labels.\n bottom: DEFAULT_MARGIN_WITH_TICKS - 5,\n // For the actual margin, add the tick size, tick padding, and some extra space to\n // the width of the longest yaxis tick label (startFromX).\n left: Math.max(DEFAULT_MARGIN_WITH_TICKS, startFromX + 20),\n right: props.secondaryYScaleOptions ? DEFAULT_MARGIN_WITH_TICKS : DEFAULT_MARGIN_NO_TICKS,\n };\n }\n\n function _applyTitleMargins(_margins: IMargins): IMargins {\n const updated = { ..._margins };\n if (props.xAxisTitle !== undefined && props.xAxisTitle !== '') {\n updated.bottom! += VERTICAL_MARGIN_FOR_XAXIS_TITLE;\n }\n if (props.yAxisTitle !== undefined && props.yAxisTitle !== '') {\n updated.left! += HORIZONTAL_MARGIN_FOR_YAXIS_TITLE;\n }\n if (props.secondaryYAxistitle !== undefined && props.secondaryYAxistitle !== '') {\n updated.right! += HORIZONTAL_MARGIN_FOR_YAXIS_TITLE;\n }\n return updated;\n }\n\n function _applyAnnotationMargins(_margins: IMargins): IMargins {\n const updated = { ..._margins };\n if (props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '') {\n updated.top! += VERTICAL_MARGIN_FOR_XAXIS_TITLE;\n }\n if (\n props.yAxisAnnotation !== undefined &&\n props.yAxisAnnotation !== '' &&\n (props.secondaryYAxistitle === undefined || props.secondaryYAxistitle === '')\n ) {\n updated.right! += HORIZONTAL_MARGIN_FOR_YAXIS_TITLE;\n }\n return updated;\n }\n\n function _swapRtlMargins(_margins: IMargins): IMargins {\n return {\n ..._margins,\n left: _margins.right,\n right: _margins.left,\n };\n }\n\n /**\n * We have use the {@link defaultTabbableElement } to fix\n * the Focus not landing on chart while tabbing, instead goes to legend.\n * This issue is observed in Area, line chart after performance optimization done in the PR {@link https://github.com/microsoft/fluentui/pull/27721 }\n * This issue is observed in Bar charts after the changes done by FocusZone team in the PR: {@link https://github.com/microsoft/fluentui/pull/24175 }\n * The issue in Bar Charts(VB and VSB) is due to a {@link FocusZone } update where previously an event listener was\n * attached on keydown to the window, so that whenever the tab key is pressed all outer FocusZone's\n * tab-indexes are updated (an outer FocusZone is a FocusZone that is not within another one).\n * But now after the above PR : they are attaching the\n * listeners to the FocusZone elements instead of the window. So in the first render cycle in Bar charts\n * bars are not created as in the first render cycle the size of the chart container is not known( or is 0)\n * which creates bars of height 0 so instead we do not create any bars and instead return empty fragments.\n *\n * We have tried 2 Approaches to fix the issue:\n * 1. Using the {@link elementRef} property of FocusZone where we dispatch event for tab keydown\n * after the second render cycle which triggers an update of the tab index in FocusZone.\n * But this is a hacky solution and not a proper fix and also elementRef is deprecated.\n * 2. Using the default tabbable element to fix the issue.\n */\n\n return (\n <div\n id={idForGraph}\n className={classes.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => {\n chartContainer.current = rootElem;\n }}\n onMouseLeave={_onChartLeave}\n >\n <div className={classes.chartWrapper} {...focusAttributes} {...arrowAttributes}>\n {_isFirstRender.current}\n <svg\n width={svgDimensions.width}\n height={svgDimensions.height}\n aria-label={props.chartTitle}\n style={{ display: 'block' }}\n className={classes.chart}\n {...getSecureProps(svgProps)}\n >\n <g\n ref={(e: SVGSVGElement | null) => {\n xAxisElement.current = e!;\n }}\n id={`xAxisGElement${idForGraph}`}\n // To add wrap of x axis lables feature, need to remove word height from svg height.\n transform={`translate(0, ${svgDimensions.height - margins.bottom! - _removalValueForTextTuncate!})`}\n className={classes.xAxis}\n />\n {props.xAxisTitle !== undefined && props.xAxisTitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.xAxisTitle}\n textProps={{\n x: margins.left! + AXIS_TITLE_PADDING + xAxisTitleMaxWidth / 2,\n y: svgDimensions.height - AXIS_TITLE_PADDING,\n className: classes.axisTitle!,\n textAnchor: 'middle',\n }}\n maxWidth={xAxisTitleMaxWidth}\n />\n )}\n {props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.xAxisAnnotation}\n textProps={{\n x: margins.left! + AXIS_TITLE_PADDING + xAxisTitleMaxWidth / 2,\n y: VERTICAL_MARGIN_FOR_XAXIS_TITLE - AXIS_TITLE_PADDING,\n className: classes.axisAnnotation!,\n textAnchor: 'middle',\n 'aria-hidden': true,\n }}\n maxWidth={xAxisTitleMaxWidth}\n />\n )}\n <g\n ref={(e: SVGSVGElement | null) => {\n yAxisElement.current = e!;\n }}\n id={`yAxisGElement${idForGraph}`}\n transform={`translate(${_useRtl ? svgDimensions.width - margins.right! : margins.left!}, 0)`}\n className={classes.yAxis}\n />\n {props.secondaryYScaleOptions && (\n <g>\n <g\n ref={(e: SVGSVGElement | null) => {\n yAxisElementSecondary.current = e!;\n }}\n id={`yAxisGElementSecondary${idForGraph}`}\n transform={`translate(${_useRtl ? margins.left! : svgDimensions.width - margins.right!}, 0)`}\n className={classes.yAxis}\n />\n {props.secondaryYAxistitle !== undefined && props.secondaryYAxistitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.secondaryYAxistitle}\n textProps={{\n x: secondaryYAxisTitleCenterX,\n y: yAxisTitleCenterY,\n textAnchor: 'middle',\n transform: `rotate(-90, ${secondaryYAxisTitleCenterX}, ${yAxisTitleCenterY})`,\n className: classes.axisTitle!,\n }}\n maxWidth={yAxisTitleMaxHeight}\n />\n )}\n </g>\n )}\n {children}\n {props.yAxisTitle !== undefined && props.yAxisTitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.yAxisTitle}\n textProps={{\n x: yAxisTitleCenterX,\n y: yAxisTitleCenterY,\n textAnchor: 'middle',\n transform: `rotate(-90, ${yAxisTitleCenterX}, ${yAxisTitleCenterY})`,\n className: classes.axisTitle!,\n }}\n maxWidth={yAxisTitleMaxHeight}\n />\n )}\n {props.yAxisAnnotation !== undefined &&\n props.yAxisAnnotation !== '' &&\n (props.secondaryYAxistitle === undefined || props.secondaryYAxistitle === '') && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.yAxisAnnotation}\n textProps={{\n x: secondaryYAxisTitleCenterX,\n y: yAxisTitleCenterY,\n textAnchor: 'middle',\n transform: `rotate(-90, ${secondaryYAxisTitleCenterX}, ${yAxisTitleCenterY})`,\n className: classes.axisAnnotation!,\n 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaxHeight}\n />\n )}\n </svg>\n {hasAnnotations && annotationContext && (\n <ChartAnnotationLayer\n annotations={annotations}\n context={annotationContext}\n className={classes.annotationLayer}\n />\n )}\n </div>\n\n {!props.hideLegend && (\n <div\n ref={(e: HTMLDivElement) => {\n legendContainer = e;\n }}\n className={classes.legendContainer}\n >\n {props.legendBars}\n </div>\n )}\n {/** The callout is used for narration, so keep it mounted on the DOM */}\n {callout && <React.Suspense fallback={<div>Loading...</div>}>{callout}</React.Suspense>}\n </div>\n );\n});\nCartesianChart.displayName = 'CartesianChart';\n"],"names":["React","useCartesianChartStyles","select","d3Select","createNumericXAxis","createStringXAxis","createDateXAxis","XAxisTypes","YAxisType","createWrapOfXLabels","rotateXAxisLabels","calculateLongestLabelWidth","createYAxisLabels","ChartTypes","wrapContent","useRtl","truncateString","tooltipOfAxislabels","getSecureProps","DEFAULT_WRAP_WIDTH","useId","SVGTooltipText","ChartAnnotationLayer","ChartPopover","useFocusableGroup","useArrowNavigationGroup","HORIZONTAL_MARGIN_FOR_YAXIS_TITLE","VERTICAL_MARGIN_FOR_XAXIS_TITLE","AXIS_TITLE_PADDING","DEFAULT_MARGIN_WITH_TICKS","DEFAULT_MARGIN_NO_TICKS","CartesianChart","forwardRef","hideTickOverlap","props","forwardedRef","chartContainer","useRef","legendContainer","minLegendContainerHeight","xAxisElement","yAxisElement","yAxisElementSecondary","margins","idForGraph","_reqID","_useRtl","_tickValues","_isFirstRender","_xScale","isIntegralDataset","useMemo","points","some","point","y","_tooltipId","_removalValueForTextTuncate","_yAxisTickText","containerWidth","setContainerWidth","useState","containerHeight","setContainerHeight","startFromX","setStartFromX","prevWidthRef","undefined","prevHeightRef","classes","focusAttributes","arrowAttributes","axis","useEffect","_fitParentContainer","showYAxisLables","maxYAxisLabelLength","calculateMaxYAxisLabelLength","yAxis","cancelAnimationFrame","current","width","height","chartType","yAxisType","useImperativeHandle","componentRef","_generateCallout","calloutProps","className","formatTickLabel","str","showYAxisLablesTooltip","noOfCharsToTruncate","map","label","svgProps","culture","dateLocalizeOptions","timeFormatLocale","customDateTimeFormatter","parentRef","_calcMargins","getmargins","callout","yScalePrimary","yScaleSecondary","children","enableFirstRenderOptimization","XAxisParams","domainNRangeValues","getDomainNRangeValues","getDomainMargins","xAxisType","barwidth","tickValues","showRoundOffXTickValues","xAxisCount","xAxisTickCount","xAxistickSize","tickPadding","showXAxisLablesTooltip","xAxisPadding","xAxisInnerPadding","xAxisOuterPadding","rotateXAxisLables","calcMaxLabelWidth","_calcMaxLabelWidthWithTransform","xMinValue","xMaxValue","xAxis","xScale","NumericAxis","tickParams","xScaleType","DateAxis","useUTC","StringAxis","datasetForXAxisDomain","_transformXAxisLabels","YAxisParams","getYDomainMargins","yAxisTickFormat","yAxisTickCount","yMinValue","yMaxValue","maxOfYVal","yMinMaxValues","getMinMaxOfYAxis","yAxisPadding","yAxisTickValues","axisData","yAxisDomainValues","yAxisTickText","createStringYAxis","stringDatasetForYAxisDomain","secondaryYScaleOptions","YAxisParamsSecondary","createYAxis","roundedTicks","secondaryYScaleType","yScaleType","getAxisData","document","getElementById","remove","e","_yAxisElement","call","ytooltipProps","tooltipCls","tooltip","id","_getData","getGraphData","hideTooltip","isPopoverOpen","svgDimensions","plotWidth","Math","max","left","right","plotHeight","top","bottom","plotRect","x","annotations","hasAnnotations","length","annotationContext","svgRect","isRtl","xAxisTitleMaxWidth","yAxisTitleMaxHeight","yAxisTitleCenterY","yAxisTitleCenterX","secondaryYAxisTitleCenterX","commonSvgToolTipProps","showBackground","svgTooltip","content","legendContainerHeight","hideLegend","legendContainerComputedStyles","getComputedStyle","getBoundingClientRect","parseFloat","marginTop","marginBottom","container","currentContainerWidth","reflowProps","mode","_calculateChartMinWidth","currentContainerHeight","shouldResize","_onChartLeave","onChartMouseLeave","labelWidth","minChartWidth","GroupedVerticalBarChart","VerticalBarChart","VerticalStackedBarChart","includes","minDomainMargin","wrapXAxisLables","longestLabelWidth","ceil","cos","PI","val","numChars","toString","slice","words","forEach","push","split","maxXAxisLabelWidth","step","wrapLabelProps","node","rotateLabelProps","rotatedHeight","_margins","_getDefaultMargins","_applyTitleMargins","_applyAnnotationMargins","_swapRtlMargins","updated","xAxisTitle","yAxisTitle","secondaryYAxistitle","xAxisAnnotation","yAxisAnnotation","div","root","role","ref","rootElem","onMouseLeave","chartWrapper","svg","aria-label","chartTitle","style","display","chart","g","transform","textProps","axisTitle","textAnchor","maxWidth","axisAnnotation","context","annotationLayer","legendBars","Suspense","fallback","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/components/CommonComponents/CartesianChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { ModifiedCartesianChartProps } from '../../index';\nimport { useCartesianChartStyles } from './useCartesianChartStyles.styles';\nimport { select as d3Select } from 'd3-selection';\nimport {\n createNumericXAxis,\n createStringXAxis,\n IAxisData,\n createDateXAxis,\n IMargins,\n XAxisTypes,\n YAxisType,\n createWrapOfXLabels,\n rotateXAxisLabels,\n calculateLongestLabelWidth,\n createYAxisLabels,\n ChartTypes,\n wrapContent,\n useRtl,\n truncateString,\n tooltipOfAxislabels,\n getSecureProps,\n DEFAULT_WRAP_WIDTH,\n autoLayoutXAxisLabels,\n getChartTitleInlineStyles,\n} from '../../utilities/index';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { SVGTooltipText, SVGTooltipTextProps } from '../../utilities/SVGTooltipText';\nimport { ChartAnnotationLayer } from './Annotations/ChartAnnotationLayer';\nimport { ChartAnnotationContext } from './Annotations/ChartAnnotationLayer.types';\nimport { ChartPopover } from './ChartPopover';\nimport { useFocusableGroup, useArrowNavigationGroup } from '@fluentui/react-tabster';\n\nconst HORIZONTAL_MARGIN_FOR_YAXIS_TITLE = 24;\nconst VERTICAL_MARGIN_FOR_XAXIS_TITLE = 20;\nconst AXIS_TITLE_PADDING = 8;\nconst DEFAULT_MARGIN_WITH_TICKS = 40;\nconst DEFAULT_MARGIN_NO_TICKS = 20;\n\n/**\n * Cartesian Chart component\n * {@docCategory CartesianChart}\n */\nexport const CartesianChart: React.FunctionComponent<ModifiedCartesianChartProps> = React.forwardRef<\n HTMLDivElement,\n ModifiedCartesianChartProps\n>(({ hideTickOverlap = true, ...props }, forwardedRef) => {\n const chartContainer = React.useRef<HTMLDivElement | null>(null);\n let legendContainer: HTMLDivElement;\n const minLegendContainerHeight: number = 40;\n const xAxisElement = React.useRef<SVGSVGElement | null>(null);\n const yAxisElement = React.useRef<SVGSVGElement | null>(null);\n const yAxisElementSecondary = React.useRef<SVGSVGElement | null>(null);\n let margins: IMargins;\n const idForGraph: string = 'chart_';\n let _reqID: number | undefined;\n const _useRtl: boolean = useRtl();\n let _tickLabels: string[];\n const _isFirstRender = React.useRef<boolean>(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let _xScale: any;\n const isIntegralDataset = React.useMemo(() => {\n return !props.points.some((point: { y: number }) => point.y % 1 !== 0);\n }, [props.points]);\n let _tooltipId: string = useId('tooltip_');\n /* Used for when WrapXAxisLabels props appeared.\n * To display the total word (space separated words), Need to have more space than usual.\n * This height will get total height need to disaply total word.\n * These value need to be removed from actual svg height/graph height.\n * Defalut value is 0. And this values calculted when 'wrapXAxisLables' or 'showXAxisLablesTooltip' is true.\n */\n let _removalValueForTextTuncate: number = 0;\n const _yAxisTickText = React.useRef<string[]>([]);\n\n const [containerWidth, setContainerWidth] = React.useState<number>(0);\n const [containerHeight, setContainerHeight] = React.useState<number>(0);\n const [startFromX, setStartFromX] = React.useState<number>(0);\n const prevWidthRef = React.useRef<number | undefined>(undefined);\n const prevHeightRef = React.useRef<number | undefined>(undefined);\n\n const classes = useCartesianChartStyles(props);\n const focusAttributes = useFocusableGroup();\n const arrowAttributes = useArrowNavigationGroup({ circular: true, axis: 'horizontal' });\n // ComponentdidMount and Componentwillunmount logic\n React.useEffect(() => {\n _fitParentContainer();\n if (props.showYAxisLables) {\n const maxYAxisLabelLength = calculateMaxYAxisLabelLength(classes.yAxis!);\n if (startFromX !== maxYAxisLabelLength) {\n setStartFromX(maxYAxisLabelLength);\n }\n } else if (startFromX !== 0) {\n setStartFromX(0);\n }\n return () => {\n if (_reqID !== undefined) {\n cancelAnimationFrame(_reqID);\n }\n };\n }, [props]);\n\n // ComponentDidUpdate logic\n React.useEffect(() => {\n // Check if height or width changed\n if (\n prevWidthRef.current !== undefined &&\n prevHeightRef.current !== undefined &&\n (prevWidthRef.current !== props.width || prevHeightRef.current !== props.height)\n ) {\n _fitParentContainer();\n }\n // Update refs with current values\n prevWidthRef.current = props.width;\n prevHeightRef.current = props.height;\n\n if (props.showYAxisLables) {\n const maxYAxisLabelLength = calculateMaxYAxisLabelLength(classes.yAxis!);\n if (startFromX !== maxYAxisLabelLength) {\n setStartFromX(maxYAxisLabelLength);\n }\n } else if (startFromX !== 0) {\n setStartFromX(0);\n }\n }, [props.width, props.height, props.chartType, props.showYAxisLables, props.yAxisType]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: chartContainer.current ?? null,\n }),\n [],\n );\n\n /**\n * Dedicated function to return the Callout JSX Element , which can further be used to only call this when\n * only the calloutprops and charthover props changes.\n * @param calloutProps\n * @param chartHoverProps\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _generateCallout(calloutProps: any): JSXElement {\n return <ChartPopover {...calloutProps} />;\n }\n\n function calculateMaxYAxisLabelLength(className: string): number {\n const formatTickLabel = (str: string) => {\n if (props.showYAxisLablesTooltip) {\n return truncateString(str, props.noOfCharsToTruncate || 4);\n }\n\n return str;\n };\n return calculateLongestLabelWidth(\n _yAxisTickText.current.map(label => formatTickLabel(label)),\n `.${className} text`,\n );\n }\n\n const {\n calloutProps,\n points,\n chartType,\n svgProps,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n } = props;\n if (props.parentRef) {\n _fitParentContainer();\n }\n\n margins = _calcMargins();\n // Callback for margins to the chart\n props.getmargins && props.getmargins(margins);\n\n let callout: JSXElement | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScalePrimary: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let yScaleSecondary: any;\n\n let children = null;\n if ((props.enableFirstRenderOptimization && chartContainer.current) || !props.enableFirstRenderOptimization) {\n _isFirstRender.current = false;\n const XAxisParams = {\n domainNRangeValues: props.getDomainNRangeValues(\n points,\n props.getDomainMargins ? props.getDomainMargins(containerWidth) : margins,\n containerWidth,\n chartType,\n _useRtl,\n props.xAxisType,\n props.barwidth!,\n props.tickValues!,\n ),\n // FIXME: In XAxisParams, containerHeight is used by HBWA to generate vertical gridlines.\n // Since the x-axis in HBWA is numeric, it typically doesn't require transformation.\n // However, if transformation props are enabled, the updated _removalValueForTextTuncate\n // will only be available in the next render, as it's set after the axis is created.\n // Solution: Delay the creation of gridlines until after the transformation has been applied,\n // or precompute the required height for transformed labels (_removalValueForTextTuncate).\n containerHeight: containerHeight - _removalValueForTextTuncate,\n margins: margins,\n xAxisElement: xAxisElement.current!,\n showRoundOffXTickValues: props.showRoundOffXTickValues ?? true,\n xAxisCount: props.xAxisTickCount,\n xAxistickSize: props.xAxistickSize,\n tickPadding: props.tickPadding || props.showXAxisLablesTooltip ? 5 : 10,\n xAxisPadding: props.xAxisPadding,\n xAxisInnerPadding: props.xAxisInnerPadding,\n xAxisOuterPadding: props.xAxisOuterPadding,\n containerWidth: containerWidth,\n hideTickOverlap: props.rotateXAxisLables || props.xAxis?.tickLayout === 'auto' ? false : hideTickOverlap,\n calcMaxLabelWidth: _calcMaxLabelWidthWithTransform,\n xMinValue: props.xMinValue,\n xMaxValue: props.xMaxValue,\n ...props.xAxis,\n };\n\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let xScale: any;\n let tickValues: number[] | Date[] | string[];\n let tickLabels: string[];\n switch (props.xAxisType!) {\n case XAxisTypes.NumericAxis:\n ({ xScale, tickValues, tickLabels } = createNumericXAxis(\n XAxisParams,\n props.tickParams!,\n props.chartType,\n culture,\n props.xScaleType,\n _useRtl,\n ));\n break;\n case XAxisTypes.DateAxis:\n ({ xScale, tickValues, tickLabels } = createDateXAxis(\n XAxisParams,\n props.tickParams!,\n culture,\n dateLocalizeOptions,\n timeFormatLocale,\n customDateTimeFormatter,\n props.useUTC,\n props.chartType,\n ));\n break;\n case XAxisTypes.StringAxis:\n ({ xScale, tickValues, tickLabels } = createStringXAxis(\n XAxisParams,\n props.tickParams!,\n props.datasetForXAxisDomain!,\n culture,\n _useRtl,\n ));\n break;\n default:\n ({ xScale, tickValues, tickLabels } = createNumericXAxis(\n XAxisParams,\n props.tickParams!,\n props.chartType,\n culture,\n props.xScaleType,\n _useRtl,\n ));\n }\n _xScale = xScale;\n _tickLabels = tickLabels;\n\n if (props.xAxis?.tickLayout === 'auto') {\n _removalValueForTextTuncate = autoLayoutXAxisLabels(\n tickValues,\n _tickLabels,\n _xScale,\n xAxisElement.current,\n containerWidth,\n chartContainer.current,\n );\n } else {\n _transformXAxisLabels();\n }\n\n const YAxisParams = {\n margins: props.getYDomainMargins ? props.getYDomainMargins(containerHeight) : margins,\n containerWidth: containerWidth,\n containerHeight: containerHeight - _removalValueForTextTuncate,\n yAxisElement: yAxisElement.current!,\n yAxisTickFormat: props.yAxisTickFormat!,\n yAxisTickCount: props.yAxisTickCount!,\n yMinValue: props.yMinValue || 0,\n yMaxValue: props.yMaxValue || 0,\n tickPadding: 10,\n maxOfYVal: props.maxOfYVal,\n yMinMaxValues: props.getMinMaxOfYAxis(points, props.yAxisType),\n // please note these padding default values must be consistent in here\n // and the parent chart(HBWA/Vertical etc..) for more details refer example\n // http://using-d3js.com/04_07_ordinal_scales.html\n yAxisPadding: props.yAxisPadding || 0,\n tickValues: props.yAxisTickValues,\n ...props.yAxis,\n };\n /**\n * These scales used for 2 purposes.\n * 1. To create x and y axis\n * 2. To draw the graph.\n * For area/line chart using same scales. For other charts, creating their own scales to draw the graph.\n */\n const axisData: IAxisData = { yAxisDomainValues: [], yAxisTickText: [] };\n if (props.yAxisType && props.yAxisType === YAxisType.StringAxis) {\n yScalePrimary = props.createStringYAxis(\n YAxisParams,\n props.stringDatasetForYAxisDomain!,\n _useRtl,\n axisData,\n props.barwidth,\n props.chartType,\n );\n } else {\n // TODO: Since the scale domain values are now computed independently for both the primary and\n // secondary y-axes, the yMinValue and yMaxValue props are no longer necessary for accurately\n // rendering the secondary y-axis. Therefore, rather than checking the secondaryYScaleOptions\n // prop to determine whether to create a secondary y-axis, it's more appropriate to check if any\n // data points are assigned to use the secondary y-scale.\n if (props?.secondaryYScaleOptions) {\n const YAxisParamsSecondary = {\n margins: margins,\n containerWidth: containerWidth,\n containerHeight: containerHeight - _removalValueForTextTuncate!,\n yAxisElement: yAxisElementSecondary.current,\n yAxisTickFormat: props.yAxisTickFormat!,\n yAxisTickCount: props.yAxisTickCount!,\n yMinValue: props.secondaryYScaleOptions?.yMinValue || 0,\n yMaxValue: props.secondaryYScaleOptions?.yMaxValue ?? 100,\n tickPadding: 10,\n yMinMaxValues: props.getMinMaxOfYAxis(points, props.yAxisType, true),\n yAxisPadding: props.yAxisPadding,\n };\n\n yScaleSecondary = props.createYAxis(\n YAxisParamsSecondary,\n _useRtl,\n axisData,\n isIntegralDataset,\n chartType,\n true,\n props.roundedTicks!,\n props.secondaryYScaleType,\n _useRtl,\n );\n }\n yScalePrimary = props.createYAxis(\n YAxisParams,\n _useRtl,\n axisData,\n isIntegralDataset,\n chartType,\n false,\n props.roundedTicks!,\n props.yScaleType,\n _useRtl,\n );\n }\n _yAxisTickText.current = axisData.yAxisTickText;\n props.getAxisData && props.getAxisData(axisData);\n\n // Removing previously created tooltips.\n try {\n // eslint-disable-next-line @nx/workspace-no-restricted-globals\n document.getElementById(_tooltipId) && document.getElementById(_tooltipId)!.remove();\n // eslint-disable-next-line no-empty\n } catch (e) {}\n // Used to display tooltip at x axis labels.\n if (props.showXAxisLablesTooltip || props.xAxis?.tickLayout === 'auto') {\n const _xAxisElement = xAxisElement.current ? d3Select(xAxisElement.current).call(xScale) : null;\n const tooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: _xAxisElement,\n container: chartContainer.current,\n };\n _xAxisElement && tooltipOfAxislabels(tooltipProps);\n }\n // Used to display tooltip at y axis labels.\n if (props.showYAxisLablesTooltip) {\n // To create y axis tick values by if specified truncating the rest of the text\n // and showing elipsis or showing the whole string,\n yScalePrimary &&\n createYAxisLabels(\n yAxisElement.current!,\n yScalePrimary,\n props.noOfCharsToTruncate || 4,\n props.showYAxisLablesTooltip || false,\n _useRtl,\n );\n\n const _yAxisElement = yAxisElement.current ? d3Select(yAxisElement.current).call(yScalePrimary) : null;\n const ytooltipProps = {\n tooltipCls: classes.tooltip!,\n id: _tooltipId,\n axis: _yAxisElement,\n container: chartContainer.current,\n };\n _yAxisElement && tooltipOfAxislabels(ytooltipProps);\n }\n\n // Call back to the chart.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _getData = (xScale: any, yScalePrimary: any, yScaleSecondary: any) => {\n props.getGraphData &&\n props.getGraphData(\n xScale,\n yScalePrimary,\n containerHeight - _removalValueForTextTuncate!,\n containerWidth,\n xAxisElement.current,\n yAxisElement.current,\n yScaleSecondary,\n );\n };\n\n // Callback function for chart, returns axis\n _getData(xScale, yScalePrimary, yScaleSecondary);\n\n children = props.children({\n xScale,\n yScalePrimary,\n yScaleSecondary,\n containerHeight,\n containerWidth,\n });\n\n if (!props.hideTooltip && calloutProps!.isPopoverOpen) {\n callout = _generateCallout(calloutProps);\n }\n }\n const svgDimensions = {\n width: containerWidth,\n height: containerHeight,\n };\n\n const plotWidth = Math.max(0, svgDimensions.width - margins.left! - margins.right!);\n const plotHeight = Math.max(0, svgDimensions.height - margins.top! - margins.bottom! - _removalValueForTextTuncate);\n\n const plotRect = {\n x: margins.left!,\n y: margins.top!,\n width: plotWidth,\n height: plotHeight,\n };\n\n const annotations = props.annotations ?? [];\n const hasAnnotations = annotations.length > 0;\n const annotationContext: ChartAnnotationContext | undefined = hasAnnotations\n ? {\n plotRect,\n svgRect: svgDimensions,\n isRtl: _useRtl,\n xScale: _xScale,\n yScalePrimary,\n yScaleSecondary,\n }\n : undefined;\n\n const xAxisTitleMaxWidth = svgDimensions.width - margins.left! - margins.right! - AXIS_TITLE_PADDING * 2;\n const yAxisTitleMaxHeight =\n svgDimensions.height - margins.bottom! - margins.top! - _removalValueForTextTuncate! - AXIS_TITLE_PADDING * 2;\n const yAxisTitleCenterY = margins.top! + AXIS_TITLE_PADDING + yAxisTitleMaxHeight / 2;\n const yAxisTitleCenterX = _useRtl\n ? svgDimensions.width - AXIS_TITLE_PADDING\n : HORIZONTAL_MARGIN_FOR_YAXIS_TITLE - AXIS_TITLE_PADDING;\n const secondaryYAxisTitleCenterX = _useRtl\n ? HORIZONTAL_MARGIN_FOR_YAXIS_TITLE - AXIS_TITLE_PADDING\n : svgDimensions.width - AXIS_TITLE_PADDING;\n\n const commonSvgToolTipProps: SVGTooltipTextProps = {\n wrapContent,\n showBackground: true,\n className: classes.svgTooltip,\n content: '',\n };\n /**\n * When screen resizes, along with screen, chart also auto adjusted.\n * This method used to adjust height and width of the charts.\n */\n function _fitParentContainer(): void {\n //_reqID = requestAnimationFrame(() => {\n let legendContainerHeight;\n if (props.hideLegend) {\n // If there is no legend, need not to allocate some space from total chart space.\n legendContainerHeight = 0;\n } else {\n const legendContainerComputedStyles = legendContainer && getComputedStyle(legendContainer);\n legendContainerHeight =\n ((legendContainer && legendContainer.getBoundingClientRect().height) || minLegendContainerHeight) +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginTop) || '0') +\n parseFloat((legendContainerComputedStyles && legendContainerComputedStyles.marginBottom) || '0');\n }\n if (props.parentRef || chartContainer.current) {\n const container = props.parentRef ? props.parentRef : chartContainer.current!;\n const currentContainerWidth =\n props.reflowProps?.mode === 'min-width' && !_isFirstRender.current\n ? Math.max(container.getBoundingClientRect().width, _calculateChartMinWidth())\n : container.getBoundingClientRect().width;\n const currentContainerHeight =\n container.getBoundingClientRect().height > legendContainerHeight\n ? container.getBoundingClientRect().height\n : 350;\n const shouldResize =\n containerWidth !== currentContainerWidth || containerHeight !== currentContainerHeight - legendContainerHeight;\n if (shouldResize) {\n setContainerWidth(currentContainerWidth);\n setContainerHeight(currentContainerHeight - legendContainerHeight);\n }\n }\n //});\n }\n\n function _onChartLeave(): void {\n props.onChartMouseLeave && props.onChartMouseLeave();\n }\n\n function _calculateChartMinWidth(): number {\n // Adding 10px for padding on both sides\n const labelWidth = _calcMaxLabelWidthWithTransform(_tickLabels) + 10;\n\n let minChartWidth = margins.left! + margins.right! + labelWidth * (_tickLabels.length - 1);\n\n if (\n [ChartTypes.GroupedVerticalBarChart, ChartTypes.VerticalBarChart, ChartTypes.VerticalStackedBarChart].includes(\n props.chartType,\n )\n ) {\n const minDomainMargin = 8;\n minChartWidth += minDomainMargin * 2;\n }\n\n return minChartWidth;\n }\n\n function _getChartDescription(): string {\n return (\n (props.chartTitle || 'Chart. ') +\n _getAxisTitle('X', props.xAxisTitle, props.xAxisType) +\n _getAxisTitle('Y', props.yAxisTitle, props.yAxisType || YAxisType.NumericAxis) +\n (props.secondaryYScaleOptions\n ? _getAxisTitle('secondary Y', props.secondaryYAxistitle, YAxisType.NumericAxis)\n : '')\n );\n }\n\n function _getAxisTitle(axisLabel: string, axisTitle: string | undefined, axisType: XAxisTypes | YAxisType): string {\n return (\n `The ${axisLabel} axis displays ` +\n (axisTitle ||\n (axisType === XAxisTypes.StringAxis || axisType === YAxisType.StringAxis\n ? 'categories'\n : axisType === XAxisTypes.DateAxis || axisType === YAxisType.DateAxis\n ? 'time'\n : 'values')) +\n '. '\n );\n }\n\n function _calcMaxLabelWidthWithTransform(x: (string | number)[]) {\n // Case: rotated labels\n if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType! === XAxisTypes.StringAxis) {\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth * Math.cos(Math.PI / 4));\n }\n\n // Case: truncated labels\n if (props.showXAxisLablesTooltip) {\n const tickLabels = x.map(val => {\n const numChars = props.noOfCharsToTruncate || 4;\n return val.toString().length > numChars ? `${val.toString().slice(0, numChars)}...` : val;\n });\n\n const longestLabelWidth = calculateLongestLabelWidth(tickLabels, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n }\n\n // Case: wrapped labels\n if (props.wrapXAxisLables) {\n // FIXME: Calculate the max width of lines instead of words. This requires applying\n // the wrapping transformation earlier to obtain the actual rendered lines.\n const words: string[] = [];\n x.forEach((val: string) => {\n words.push(...val.toString().split(/\\s+/));\n });\n\n // This approach works well in most cases, since overflow typically occurs only when\n // a single word exceeds the specified width — otherwise, the text will wrap as expected.\n const longestLabelWidth = calculateLongestLabelWidth(words, `.${classes.xAxis} text`);\n return Math.max(Math.ceil(longestLabelWidth), DEFAULT_WRAP_WIDTH);\n }\n\n // Default case\n const longestLabelWidth = calculateLongestLabelWidth(x, `.${classes.xAxis} text`);\n return Math.ceil(longestLabelWidth);\n }\n\n function _transformXAxisLabels() {\n _removalValueForTextTuncate = 0;\n\n /*\n * To enable wrapping of x axis tick values or to display complete x axis tick values,\n * we need to calculate how much space it needed to render the text.\n * No need to re-calculate every time the chart renders and same time need to get an update. So using setState.\n * Required space will be calculated first time chart rendering and if any width/height of chart updated.\n * */\n if (props.wrapXAxisLables || props.showXAxisLablesTooltip) {\n let maxXAxisLabelWidth: number | undefined;\n if (props.xAxisType === XAxisTypes.StringAxis) {\n if ((props.datasetForXAxisDomain?.length || 0) > 1) {\n maxXAxisLabelWidth = _xScale.step();\n } else {\n maxXAxisLabelWidth = containerWidth;\n }\n }\n\n const wrapLabelProps = {\n node: xAxisElement.current!,\n xAxis: _xScale,\n showXAxisLablesTooltip: props.showXAxisLablesTooltip || false,\n noOfCharsToTruncate: props.noOfCharsToTruncate || 4,\n width: maxXAxisLabelWidth,\n container: chartContainer.current,\n };\n _removalValueForTextTuncate = createWrapOfXLabels(wrapLabelProps) ?? 0;\n }\n\n if (!props.wrapXAxisLables && props.rotateXAxisLables && props.xAxisType! === XAxisTypes.StringAxis) {\n const rotateLabelProps = {\n node: xAxisElement.current!,\n xAxis: _xScale,\n };\n const rotatedHeight = rotateXAxisLabels(rotateLabelProps) ?? 0;\n // margins.bottom is used as padding here\n _removalValueForTextTuncate = rotatedHeight + margins.bottom!;\n }\n }\n\n function _calcMargins(): IMargins {\n let _margins = _getDefaultMargins();\n\n _margins = _applyTitleMargins(_margins);\n _margins = _applyAnnotationMargins(_margins);\n\n if (_useRtl) {\n _margins = _swapRtlMargins(_margins);\n }\n\n return {\n ..._margins,\n ...props.margins,\n };\n }\n\n function _getDefaultMargins(): IMargins {\n return {\n top: DEFAULT_MARGIN_NO_TICKS,\n // Smaller than the default because it is based on the line height rather than\n // the length of the tick labels.\n bottom: DEFAULT_MARGIN_WITH_TICKS - 5,\n // For the actual margin, add the tick size, tick padding, and some extra space to\n // the width of the longest yaxis tick label (startFromX).\n left: Math.max(DEFAULT_MARGIN_WITH_TICKS, startFromX + 20),\n right: props.secondaryYScaleOptions ? DEFAULT_MARGIN_WITH_TICKS : DEFAULT_MARGIN_NO_TICKS,\n };\n }\n\n function _applyTitleMargins(_margins: IMargins): IMargins {\n const updated = { ..._margins };\n if (props.xAxisTitle !== undefined && props.xAxisTitle !== '') {\n updated.bottom! += VERTICAL_MARGIN_FOR_XAXIS_TITLE;\n }\n if (props.yAxisTitle !== undefined && props.yAxisTitle !== '') {\n updated.left! += HORIZONTAL_MARGIN_FOR_YAXIS_TITLE;\n }\n if (props.secondaryYAxistitle !== undefined && props.secondaryYAxistitle !== '') {\n updated.right! += HORIZONTAL_MARGIN_FOR_YAXIS_TITLE;\n }\n return updated;\n }\n\n function _applyAnnotationMargins(_margins: IMargins): IMargins {\n const updated = { ..._margins };\n if (props.xAxisAnnotation !== undefined && props.xAxisAnnotation !== '') {\n updated.top! += VERTICAL_MARGIN_FOR_XAXIS_TITLE;\n }\n if (\n props.yAxisAnnotation !== undefined &&\n props.yAxisAnnotation !== '' &&\n (props.secondaryYAxistitle === undefined || props.secondaryYAxistitle === '')\n ) {\n updated.right! += HORIZONTAL_MARGIN_FOR_YAXIS_TITLE;\n }\n return updated;\n }\n\n function _swapRtlMargins(_margins: IMargins): IMargins {\n return {\n ..._margins,\n left: _margins.right,\n right: _margins.left,\n };\n }\n\n /**\n * We have use the {@link defaultTabbableElement } to fix\n * the Focus not landing on chart while tabbing, instead goes to legend.\n * This issue is observed in Area, line chart after performance optimization done in the PR {@link https://github.com/microsoft/fluentui/pull/27721 }\n * This issue is observed in Bar charts after the changes done by FocusZone team in the PR: {@link https://github.com/microsoft/fluentui/pull/24175 }\n * The issue in Bar Charts(VB and VSB) is due to a {@link FocusZone } update where previously an event listener was\n * attached on keydown to the window, so that whenever the tab key is pressed all outer FocusZone's\n * tab-indexes are updated (an outer FocusZone is a FocusZone that is not within another one).\n * But now after the above PR : they are attaching the\n * listeners to the FocusZone elements instead of the window. So in the first render cycle in Bar charts\n * bars are not created as in the first render cycle the size of the chart container is not known( or is 0)\n * which creates bars of height 0 so instead we do not create any bars and instead return empty fragments.\n *\n * We have tried 2 Approaches to fix the issue:\n * 1. Using the {@link elementRef} property of FocusZone where we dispatch event for tab keydown\n * after the second render cycle which triggers an update of the tab index in FocusZone.\n * But this is a hacky solution and not a proper fix and also elementRef is deprecated.\n * 2. Using the default tabbable element to fix the issue.\n */\n\n return (\n <div\n id={idForGraph}\n className={classes.root}\n role={'presentation'}\n ref={(rootElem: HTMLDivElement) => {\n chartContainer.current = rootElem;\n }}\n onMouseLeave={_onChartLeave}\n >\n <div className={classes.chartWrapper} {...focusAttributes} {...arrowAttributes}>\n {_isFirstRender.current}\n <svg\n width={svgDimensions.width}\n height={svgDimensions.height}\n role=\"region\"\n aria-label={_getChartDescription()}\n style={{ display: 'block' }}\n className={classes.chart}\n {...getSecureProps(svgProps)}\n >\n <g\n ref={(e: SVGSVGElement | null) => {\n xAxisElement.current = e!;\n }}\n id={`xAxisGElement${idForGraph}`}\n // To add wrap of x axis lables feature, need to remove word height from svg height.\n transform={`translate(0, ${svgDimensions.height - margins.bottom! - _removalValueForTextTuncate!})`}\n className={classes.xAxis}\n />\n {props.xAxisTitle !== undefined && props.xAxisTitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.xAxisTitle}\n textProps={{\n x: margins.left! + AXIS_TITLE_PADDING + xAxisTitleMaxWidth / 2,\n y: svgDimensions.height - AXIS_TITLE_PADDING,\n className: classes.axisTitle!,\n textAnchor: 'middle',\n }}\n maxWidth={xAxisTitleMaxWidth}\n />\n )}\n {props.xAxisAnnotation !== undefined &&\n props.xAxisAnnotation !== '' &&\n (() => {\n const { titleFont, titleXAnchor, titleYAnchor, titlePad } = props.titleStyles ?? {};\n const fontSize = typeof titleFont?.size === 'number' ? titleFont.size : 13;\n const padL = titlePad?.l ?? 0;\n const padR = titlePad?.r ?? 0;\n const padT = titlePad?.t ?? 0;\n const padB = titlePad?.b ?? 0;\n\n const xPos =\n (titleXAnchor === 'left'\n ? margins.left! + AXIS_TITLE_PADDING\n : titleXAnchor === 'right'\n ? margins.left! + AXIS_TITLE_PADDING + xAxisTitleMaxWidth\n : margins.left! + AXIS_TITLE_PADDING + xAxisTitleMaxWidth / 2) +\n padL -\n padR;\n\n const yPos =\n Math.max(fontSize + AXIS_TITLE_PADDING, VERTICAL_MARGIN_FOR_XAXIS_TITLE - AXIS_TITLE_PADDING) +\n padT -\n padB;\n\n const textAnchor = titleXAnchor === 'left' ? 'start' : titleXAnchor === 'right' ? 'end' : 'middle';\n\n const dominantBaseline =\n titleYAnchor === 'top'\n ? 'hanging'\n : titleYAnchor === 'bottom'\n ? 'alphabetic'\n : titleYAnchor === 'middle'\n ? 'central'\n : 'auto';\n\n return (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.xAxisAnnotation}\n textProps={{\n x: xPos,\n y: yPos,\n className: classes.axisAnnotation!,\n textAnchor,\n dominantBaseline,\n 'aria-hidden': true,\n style: getChartTitleInlineStyles(titleFont),\n }}\n maxWidth={xAxisTitleMaxWidth}\n />\n );\n })()}\n <g\n ref={(e: SVGSVGElement | null) => {\n yAxisElement.current = e!;\n }}\n id={`yAxisGElement${idForGraph}`}\n transform={`translate(${_useRtl ? svgDimensions.width - margins.right! : margins.left!}, 0)`}\n className={classes.yAxis}\n />\n {props.secondaryYScaleOptions && (\n <g>\n <g\n ref={(e: SVGSVGElement | null) => {\n yAxisElementSecondary.current = e!;\n }}\n id={`yAxisGElementSecondary${idForGraph}`}\n transform={`translate(${_useRtl ? margins.left! : svgDimensions.width - margins.right!}, 0)`}\n className={classes.yAxis}\n />\n {props.secondaryYAxistitle !== undefined && props.secondaryYAxistitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.secondaryYAxistitle}\n textProps={{\n x: secondaryYAxisTitleCenterX,\n y: yAxisTitleCenterY,\n textAnchor: 'middle',\n transform: `rotate(-90, ${secondaryYAxisTitleCenterX}, ${yAxisTitleCenterY})`,\n className: classes.axisTitle!,\n }}\n maxWidth={yAxisTitleMaxHeight}\n />\n )}\n </g>\n )}\n {children}\n {props.yAxisTitle !== undefined && props.yAxisTitle !== '' && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.yAxisTitle}\n textProps={{\n x: yAxisTitleCenterX,\n y: yAxisTitleCenterY,\n textAnchor: 'middle',\n transform: `rotate(-90, ${yAxisTitleCenterX}, ${yAxisTitleCenterY})`,\n className: classes.axisTitle!,\n }}\n maxWidth={yAxisTitleMaxHeight}\n />\n )}\n {props.yAxisAnnotation !== undefined &&\n props.yAxisAnnotation !== '' &&\n (props.secondaryYAxistitle === undefined || props.secondaryYAxistitle === '') && (\n <SVGTooltipText\n {...commonSvgToolTipProps}\n content={props.yAxisAnnotation}\n textProps={{\n x: secondaryYAxisTitleCenterX,\n y: yAxisTitleCenterY,\n textAnchor: 'middle',\n transform: `rotate(-90, ${secondaryYAxisTitleCenterX}, ${yAxisTitleCenterY})`,\n className: classes.axisAnnotation!,\n 'aria-hidden': true,\n }}\n maxWidth={yAxisTitleMaxHeight}\n />\n )}\n </svg>\n {hasAnnotations && annotationContext && (\n <ChartAnnotationLayer\n annotations={annotations}\n context={annotationContext}\n className={classes.annotationLayer}\n />\n )}\n </div>\n\n {!props.hideLegend && (\n <div\n ref={(e: HTMLDivElement) => {\n legendContainer = e;\n }}\n className={classes.legendContainer}\n >\n {props.legendBars}\n </div>\n )}\n {/** The callout is used for narration, so keep it mounted on the DOM */}\n {callout && <React.Suspense fallback={<div>Loading...</div>}>{callout}</React.Suspense>}\n </div>\n );\n});\nCartesianChart.displayName = 'CartesianChart';\n"],"names":["React","useCartesianChartStyles","select","d3Select","createNumericXAxis","createStringXAxis","createDateXAxis","XAxisTypes","YAxisType","createWrapOfXLabels","rotateXAxisLabels","calculateLongestLabelWidth","createYAxisLabels","ChartTypes","wrapContent","useRtl","truncateString","tooltipOfAxislabels","getSecureProps","DEFAULT_WRAP_WIDTH","autoLayoutXAxisLabels","getChartTitleInlineStyles","useId","SVGTooltipText","ChartAnnotationLayer","ChartPopover","useFocusableGroup","useArrowNavigationGroup","HORIZONTAL_MARGIN_FOR_YAXIS_TITLE","VERTICAL_MARGIN_FOR_XAXIS_TITLE","AXIS_TITLE_PADDING","DEFAULT_MARGIN_WITH_TICKS","DEFAULT_MARGIN_NO_TICKS","CartesianChart","forwardRef","hideTickOverlap","props","forwardedRef","chartContainer","useRef","legendContainer","minLegendContainerHeight","xAxisElement","yAxisElement","yAxisElementSecondary","margins","idForGraph","_reqID","_useRtl","_tickLabels","_isFirstRender","_xScale","isIntegralDataset","useMemo","points","some","point","y","_tooltipId","_removalValueForTextTuncate","_yAxisTickText","containerWidth","setContainerWidth","useState","containerHeight","setContainerHeight","startFromX","setStartFromX","prevWidthRef","undefined","prevHeightRef","classes","focusAttributes","arrowAttributes","circular","axis","useEffect","_fitParentContainer","showYAxisLables","maxYAxisLabelLength","calculateMaxYAxisLabelLength","yAxis","cancelAnimationFrame","current","width","height","chartType","yAxisType","useImperativeHandle","componentRef","_generateCallout","calloutProps","className","formatTickLabel","str","showYAxisLablesTooltip","noOfCharsToTruncate","map","label","svgProps","culture","dateLocalizeOptions","timeFormatLocale","customDateTimeFormatter","parentRef","_calcMargins","getmargins","callout","yScalePrimary","yScaleSecondary","children","enableFirstRenderOptimization","XAxisParams","domainNRangeValues","getDomainNRangeValues","getDomainMargins","xAxisType","barwidth","tickValues","showRoundOffXTickValues","xAxisCount","xAxisTickCount","xAxistickSize","tickPadding","showXAxisLablesTooltip","xAxisPadding","xAxisInnerPadding","xAxisOuterPadding","rotateXAxisLables","xAxis","tickLayout","calcMaxLabelWidth","_calcMaxLabelWidthWithTransform","xMinValue","xMaxValue","xScale","tickLabels","NumericAxis","tickParams","xScaleType","DateAxis","useUTC","StringAxis","datasetForXAxisDomain","_transformXAxisLabels","YAxisParams","getYDomainMargins","yAxisTickFormat","yAxisTickCount","yMinValue","yMaxValue","maxOfYVal","yMinMaxValues","getMinMaxOfYAxis","yAxisPadding","yAxisTickValues","axisData","yAxisDomainValues","yAxisTickText","createStringYAxis","stringDatasetForYAxisDomain","secondaryYScaleOptions","YAxisParamsSecondary","createYAxis","roundedTicks","secondaryYScaleType","yScaleType","getAxisData","document","getElementById","remove","e","_xAxisElement","call","tooltipProps","tooltipCls","tooltip","id","container","_yAxisElement","ytooltipProps","_getData","getGraphData","hideTooltip","isPopoverOpen","svgDimensions","plotWidth","Math","max","left","right","plotHeight","top","bottom","plotRect","x","annotations","hasAnnotations","length","annotationContext","svgRect","isRtl","xAxisTitleMaxWidth","yAxisTitleMaxHeight","yAxisTitleCenterY","yAxisTitleCenterX","secondaryYAxisTitleCenterX","commonSvgToolTipProps","showBackground","svgTooltip","content","legendContainerHeight","hideLegend","legendContainerComputedStyles","getComputedStyle","getBoundingClientRect","parseFloat","marginTop","marginBottom","currentContainerWidth","reflowProps","mode","_calculateChartMinWidth","currentContainerHeight","shouldResize","_onChartLeave","onChartMouseLeave","labelWidth","minChartWidth","GroupedVerticalBarChart","VerticalBarChart","VerticalStackedBarChart","includes","minDomainMargin","_getChartDescription","chartTitle","_getAxisTitle","xAxisTitle","yAxisTitle","secondaryYAxistitle","axisLabel","axisTitle","axisType","wrapXAxisLables","longestLabelWidth","ceil","cos","PI","val","numChars","toString","slice","words","forEach","push","split","maxXAxisLabelWidth","step","wrapLabelProps","node","rotateLabelProps","rotatedHeight","_margins","_getDefaultMargins","_applyTitleMargins","_applyAnnotationMargins","_swapRtlMargins","updated","xAxisAnnotation","yAxisAnnotation","div","root","role","ref","rootElem","onMouseLeave","chartWrapper","svg","aria-label","style","display","chart","g","transform","textProps","textAnchor","maxWidth","titleFont","titleXAnchor","titleYAnchor","titlePad","titleStyles","fontSize","size","padL","l","padR","r","padT","t","padB","b","xPos","yPos","dominantBaseline","axisAnnotation","context","annotationLayer","legendBars","Suspense","fallback","displayName"],"mappings":"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"}