pace-chart-lib 0.0.7 → 0.0.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 (150) hide show
  1. package/README.md +10 -10
  2. package/dist/Components1/Charts/ChartsWithAxis/ChartsWithAxisFunctions.d.ts +46 -0
  3. package/dist/Components1/Charts/ChartsWithAxis/ChartsWithAxisFunctions.js +2285 -0
  4. package/dist/Components1/Charts/ChartsWithAxis/ChartsWithAxisTypes.type.d.ts +169 -0
  5. package/dist/Components1/Charts/ChartsWithAxis/ChartsWithAxisTypes.type.js +47 -0
  6. package/dist/Components1/Charts/ChartsWithAxis/LineFamily/LineChart.d.ts +4 -0
  7. package/dist/Components1/Charts/ChartsWithAxis/LineFamily/LineChart.js +403 -0
  8. package/dist/Components1/Charts/ChartsWithoutAxis/ChartsWithoutAxisFunctions.d.ts +0 -0
  9. package/dist/Components1/Charts/ChartsWithoutAxis/ChartsWithoutAxisFunctions.js +0 -0
  10. package/dist/Components1/Charts/ChartsWithoutAxis/ChartsWithoutAxisTypes.type.d.ts +0 -0
  11. package/dist/Components1/Charts/ChartsWithoutAxis/ChartsWithoutAxisTypes.type.js +0 -0
  12. package/dist/Components1/Charts/Core/Common.type.d.ts +8 -0
  13. package/dist/Components1/Charts/Core/Common.type.js +9 -0
  14. package/dist/Components1/Charts/Core/CommonFunctions.d.ts +12 -0
  15. package/dist/Components1/Charts/Core/CommonFunctions.js +512 -0
  16. package/dist/Components1/Charts/Core/DefaultProperties.d.ts +586 -0
  17. package/dist/Components1/Charts/Core/DefaultProperties.js +585 -0
  18. package/dist/Services/ErrorLog.d.ts +1 -0
  19. package/dist/Services/ErrorLog.js +3 -0
  20. package/dist/components/Charts/ChartsWithAxis/AreaFamily/AreaChart.d.ts +4 -0
  21. package/dist/components/Charts/ChartsWithAxis/AreaFamily/AreaChart.js +497 -0
  22. package/dist/components/Charts/ChartsWithAxis/AreaFamily/LineChart.d.ts +4 -0
  23. package/dist/components/Charts/ChartsWithAxis/AreaFamily/LineChart.js +491 -0
  24. package/dist/components/Charts/ChartsWithAxis/AreaFamily/NormalizedStackAreaChart.d.ts +4 -0
  25. package/dist/components/Charts/ChartsWithAxis/AreaFamily/NormalizedStackAreaChart.js +520 -0
  26. package/dist/components/Charts/ChartsWithAxis/AreaFamily/NormalizedStackLineChart.d.ts +4 -0
  27. package/dist/components/Charts/ChartsWithAxis/AreaFamily/NormalizedStackLineChart.js +553 -0
  28. package/dist/components/Charts/ChartsWithAxis/AreaFamily/StackAreaChart.d.ts +4 -0
  29. package/dist/components/Charts/ChartsWithAxis/AreaFamily/StackAreaChart.js +519 -0
  30. package/dist/components/Charts/ChartsWithAxis/AreaFamily/StackLineChart.d.ts +4 -0
  31. package/dist/components/Charts/ChartsWithAxis/AreaFamily/StackLineChart.js +553 -0
  32. package/dist/components/Charts/ChartsWithAxis/BarFamily/BarChart.d.ts +12 -0
  33. package/dist/components/Charts/ChartsWithAxis/BarFamily/BarChart.js +9 -0
  34. package/dist/components/Charts/ChartsWithAxis/ChartsWithAxisFunctions.d.ts +623 -0
  35. package/dist/components/Charts/ChartsWithAxis/ChartsWithAxisFunctions.js +4897 -0
  36. package/dist/components/Charts/ChartsWithAxis/ChartsWithAxisTypes.type.d.ts +0 -0
  37. package/dist/components/Charts/ChartsWithAxis/ChartsWithAxisTypes.type.js +0 -0
  38. package/dist/components/Charts/ChartsWithAxis/ChartsWithAxisTypes.types.d.ts +173 -0
  39. package/dist/components/Charts/ChartsWithAxis/ChartsWithAxisTypes.types.js +49 -0
  40. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/ColumnChart copy.d.ts +4 -0
  41. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/ColumnChart copy.js +486 -0
  42. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/ColumnChart.d.ts +4 -0
  43. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/ColumnChart.js +498 -0
  44. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/ColumnHistogramChart.d.ts +4 -0
  45. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/ColumnHistogramChart.js +417 -0
  46. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/CustomColumnChart.d.ts +4 -0
  47. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/CustomColumnChart.js +1014 -0
  48. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/LayeredColumnChart.d.ts +4 -0
  49. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/LayeredColumnChart.js +479 -0
  50. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/LineChart.d.ts +4 -0
  51. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/LineChart.js +451 -0
  52. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/NormalizedStackColumnChart.d.ts +4 -0
  53. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/NormalizedStackColumnChart.js +535 -0
  54. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/NormalizedStackLineChart.d.ts +4 -0
  55. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/NormalizedStackLineChart.js +512 -0
  56. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/StackColumnChart.d.ts +4 -0
  57. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/StackColumnChart.js +532 -0
  58. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/StackLineChart.d.ts +4 -0
  59. package/dist/components/Charts/ChartsWithAxis/ColumnFamily/StackLineChart.js +512 -0
  60. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/BarChart.d.ts +12 -0
  61. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/BarChart.js +9 -0
  62. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/HorizontalBarChart.d.ts +4 -0
  63. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/HorizontalBarChart.js +498 -0
  64. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/HorizontalHistogramChart.d.ts +4 -0
  65. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/HorizontalHistogramChart.js +498 -0
  66. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/LayeredColumnChart.d.ts +4 -0
  67. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/LayeredColumnChart.js +479 -0
  68. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/LayeredHorizontalBarChart.d.ts +4 -0
  69. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/LayeredHorizontalBarChart.js +479 -0
  70. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/NormalizedStackHorizontalBarChart.d.ts +4 -0
  71. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/NormalizedStackHorizontalBarChart.js +474 -0
  72. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/StackHorizontalBarChart.d.ts +4 -0
  73. package/dist/components/Charts/ChartsWithAxis/HorizontalBarFamily/StackHorizontalBarChart.js +464 -0
  74. package/dist/components/Charts/ChartsWithAxis/LineFamily/100%StackLineChart.d.ts +0 -0
  75. package/dist/components/Charts/ChartsWithAxis/LineFamily/100%StackLineChart.js +0 -0
  76. package/dist/components/Charts/ChartsWithAxis/LineFamily/LineChart.d.ts +4 -0
  77. package/dist/components/Charts/ChartsWithAxis/LineFamily/LineChart.js +452 -0
  78. package/dist/components/Charts/ChartsWithAxis/LineFamily/NormalisedStackLineChart.d.ts +4 -0
  79. package/dist/components/Charts/ChartsWithAxis/LineFamily/NormalisedStackLineChart.js +554 -0
  80. package/dist/components/Charts/ChartsWithAxis/LineFamily/NormalizedStackLineChart.d.ts +4 -0
  81. package/dist/components/Charts/ChartsWithAxis/LineFamily/NormalizedStackLineChart.js +513 -0
  82. package/dist/components/Charts/ChartsWithAxis/LineFamily/StackLineChart.d.ts +4 -0
  83. package/dist/components/Charts/ChartsWithAxis/LineFamily/StackLineChart.js +508 -0
  84. package/dist/components/Charts/ChartsWithAxis/MiscellaneousChartFamily/TornadoChart.d.ts +4 -0
  85. package/dist/components/Charts/ChartsWithAxis/MiscellaneousChartFamily/TornadoChart.js +395 -0
  86. package/dist/components/Charts/ChartsWithAxis/MiscellaneousChartFamily/WaterfallChart.d.ts +4 -0
  87. package/dist/components/Charts/ChartsWithAxis/MiscellaneousChartFamily/WaterfallChart.js +608 -0
  88. package/dist/components/Charts/ChartsWithoutAxis/ChartsWithoutAxis.types.d.ts +0 -0
  89. package/dist/components/Charts/ChartsWithoutAxis/ChartsWithoutAxis.types.js +0 -0
  90. package/dist/components/Charts/ChartsWithoutAxis/ChartsWithoutAxisFunctions.d.ts +92 -0
  91. package/dist/components/Charts/ChartsWithoutAxis/ChartsWithoutAxisFunctions.js +815 -0
  92. package/dist/components/Charts/ChartsWithoutAxis/ChartsWithoutAxisTypes.type.d.ts +0 -0
  93. package/dist/components/Charts/ChartsWithoutAxis/ChartsWithoutAxisTypes.type.js +0 -0
  94. package/dist/components/Charts/ChartsWithoutAxis/ChartsWithoutAxisTypes.types.d.ts +108 -0
  95. package/dist/components/Charts/ChartsWithoutAxis/ChartsWithoutAxisTypes.types.js +32 -0
  96. package/dist/components/Charts/ChartsWithoutAxis/Maps/Cordinates.d.ts +26 -0
  97. package/dist/components/Charts/ChartsWithoutAxis/Maps/Cordinates.js +15021 -0
  98. package/dist/components/Charts/ChartsWithoutAxis/Maps/Maps.d.ts +4 -0
  99. package/dist/components/Charts/ChartsWithoutAxis/Maps/Maps.js +391 -0
  100. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/BubbleChart.d.ts +4 -0
  101. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/BubbleChart.js +367 -0
  102. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/OrganizationChart.d.ts +4 -0
  103. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/OrganizationChart.js +569 -0
  104. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/ProgressChart.d.ts +3 -0
  105. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/ProgressChart.js +212 -0
  106. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/PyramidChart.d.ts +3 -0
  107. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/PyramidChart.js +401 -0
  108. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/RadialBarChart.d.ts +4 -0
  109. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/RadialBarChart.js +313 -0
  110. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/SankeyChart.d.ts +4 -0
  111. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/SankeyChart.js +719 -0
  112. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/ScatterChart.d.ts +4 -0
  113. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/ScatterChart.js +807 -0
  114. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/Speedometer.d.ts +3 -0
  115. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/Speedometer.js +514 -0
  116. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/VennChart.d.ts +4 -0
  117. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/VennChart.js +282 -0
  118. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/WordCloud.d.ts +4 -0
  119. package/dist/components/Charts/ChartsWithoutAxis/OtherCharts/WordCloud.js +207 -0
  120. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/DonutChart.d.ts +4 -0
  121. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/DonutChart.js +476 -0
  122. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/PieChart.d.ts +4 -0
  123. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/PieChart.js +420 -0
  124. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/PieFamilyCommonFunctions.d.ts +10 -0
  125. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/PieFamilyCommonFunctions.js +106 -0
  126. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/PieofPieChart.d.ts +3 -0
  127. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/PieofPieChart.js +507 -0
  128. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/TreemapChart.d.ts +3 -0
  129. package/dist/components/Charts/ChartsWithoutAxis/PieFamily/TreemapChart.js +246 -0
  130. package/dist/components/Charts/Core/Common.type.d.ts +0 -0
  131. package/dist/components/Charts/Core/Common.type.js +0 -0
  132. package/dist/components/Charts/Core/Common.types.d.ts +369 -0
  133. package/dist/components/Charts/Core/Common.types.js +133 -0
  134. package/dist/components/Charts/Core/CommonFunctions.d.ts +236 -0
  135. package/dist/components/Charts/Core/CommonFunctions.js +1778 -0
  136. package/dist/components/Charts/Core/DefaultChartDataProperties.d.ts +65 -0
  137. package/dist/components/Charts/Core/DefaultChartDataProperties.js +64 -0
  138. package/dist/components/Charts/Core/DefaultProperties.d.ts +0 -0
  139. package/dist/components/Charts/Core/DefaultProperties.js +0 -0
  140. package/dist/components/Charts/Core/DefaultProperties.type.d.ts +586 -0
  141. package/dist/components/Charts/Core/DefaultProperties.type.js +585 -0
  142. package/dist/components/Charts/Core/DefaultProperties.types.d.ts +592 -0
  143. package/dist/components/Charts/Core/DefaultProperties.types.js +592 -0
  144. package/dist/index.d.ts +34 -2
  145. package/dist/index.js +40 -2
  146. package/package.json +40 -29
  147. package/dist/components/charts/linechart/LineChart.d.ts +0 -12
  148. package/dist/components/charts/linechart/LineChart.js +0 -5
  149. /package/dist/{components/charts/barchart → Components1/Charts/ChartsWithAxis/BarFamily}/BarChart.d.ts +0 -0
  150. /package/dist/{components/charts/barchart → Components1/Charts/ChartsWithAxis/BarFamily}/BarChart.js +0 -0
@@ -0,0 +1,535 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ //#region Imports
3
+ import * as d3 from "d3";
4
+ import * as d3Annotation from "d3-svg-annotation";
5
+ import { useEffect, useRef } from "react";
6
+ import { logError } from "../../../../Services/ErrorLog";
7
+ import { drawLegends, generalizedChartData, hideTooltipOnMouseOut, showTooltipOnMouseMove, } from "../../Core/CommonFunctions";
8
+ import { addDataTable, customYscaleLabelFormatting, dataTablePreCalculation, firstFunctionBeforeRender, getNumberWithFormat, getStackedData, initChartArea, initPlotArea, initSvg, initXaxis, initYaxis, marginCalculation, prepareDataForSeriesLabel, responsiveXaxisLabel, responsiveYaxisLabel, setChartTitle, setDateFormats, setXaxistitle, stacklineAnnotations, yAxistitle, yAxistitleRight, } from "../ChartsWithAxisFunctions";
9
+ import { actualChartTypes, } from "../ChartsWithAxisTypes.types";
10
+ import { staticLegendShape } from "../../Core/Common.types";
11
+ const NormalizedStackColumnChart = ({ title, data, yAxisObj, xAxisObj, chartId, formatOptions, }) => {
12
+ // adding variables as per requirement
13
+ let columnWidth = 0; // coz line chart
14
+ const chartType = actualChartTypes.stackColumn100;
15
+ const svgRef = useRef();
16
+ const seriesData = generalizedChartData(data.ChartData, data.DimensionList);
17
+ const dimensionList = data.DimensionList;
18
+ const barChart = false;
19
+ const chartsWithXScrollFlag = true;
20
+ const chartsWithYScrollFlag = false;
21
+ const isSecondaryAxisDrawn = false;
22
+ let isPrimaryAxisDrawn = true;
23
+ let customYaxisMinValue = parseFloat(formatOptions.yAxisLabel.yAxisMinText);
24
+ let customYaxisMaxValue = parseFloat(formatOptions.yAxisLabel.yAxisMaxText);
25
+ let secondaryCustomYaxisMinValue = parseFloat(formatOptions.secondaryYAxisLabel.secondaryYAxisMinText);
26
+ let secondaryCustomYaxisMaxValue = parseFloat(formatOptions.secondaryYAxisLabel.secondaryYAxisMaxText);
27
+ let margin;
28
+ let yLabel;
29
+ let xLabel;
30
+ let yTitle;
31
+ let xTitle;
32
+ let dimensionHeightWidthArray;
33
+ let chartTitleHeight;
34
+ let secondaryAxisTitleWidth;
35
+ let legendMargin;
36
+ let secondaryYLabel;
37
+ let maxNumberForPrimaryAxis;
38
+ let maxNumberForSecondaryAxis;
39
+ let innerWidth;
40
+ let innerHeight;
41
+ let width;
42
+ let height;
43
+ let totalHeight;
44
+ let totalWidth;
45
+ let dataTable;
46
+ let dataTableHeight;
47
+ let svg;
48
+ let gTag;
49
+ let yScaleLeft;
50
+ let yScaleRight;
51
+ let xScale;
52
+ let seriesLabels;
53
+ let calculatedRange;
54
+ let seriesLabelWidth;
55
+ let yAxisLeft;
56
+ let xAxis;
57
+ let yAxisRight;
58
+ let filteredDimension;
59
+ let filteredData = [];
60
+ let scrollPosition = 0;
61
+ const visibleBars = 2;
62
+ let stackLineData = [];
63
+ let stackChartData = [];
64
+ const isNormalizedChart = true;
65
+ let chartJSON = {
66
+ dimensionList: dimensionList,
67
+ chartType: chartType,
68
+ chartData: [],
69
+ formatOptions: formatOptions,
70
+ legendList: [],
71
+ secondaryAxisDrawn: false,
72
+ yMaxLeft: 0,
73
+ yMaxRight: 0,
74
+ yMinLeft: 0,
75
+ yMinRight: 0,
76
+ hideZeroValues: false,
77
+ formattedDimensionListMap: new Map(),
78
+ };
79
+ //#region UseEffect
80
+ useEffect(() => {
81
+ try {
82
+ createNormalizedStackColumnChart();
83
+ }
84
+ catch (error) {
85
+ logError("StackNormalizedStackColumnChart", "createNormalizedStackColumnChart", error);
86
+ }
87
+ }, [formatOptions]);
88
+ //#endregion
89
+ const createNormalizedStackColumnChart = () => {
90
+ ({ formatOptions, svg, width, height } = firstFunctionBeforeRender(svgRef, formatOptions));
91
+ preProcessChartData(); // preaparing data related to chart creation
92
+ // Applies custom Y-axis label formatting and calculates the necessary margin based on axis extremes.
93
+ ({ maxNumberForPrimaryAxis, maxNumberForSecondaryAxis } =
94
+ customYscaleLabelFormatting(
95
+ // for calculating primary/secondary axis max number so that we can calculate margin accordinglt
96
+ formatOptions, chartJSON.yMinLeft, chartJSON.yMaxLeft, chartJSON.yMinRight, chartJSON.yMaxRight));
97
+ ({
98
+ margin,
99
+ yLabel,
100
+ xLabel,
101
+ yTitle,
102
+ xTitle,
103
+ dimensionHeightWidthArray,
104
+ chartTitleHeight,
105
+ secondaryAxisTitleWidth,
106
+ legendMargin,
107
+ secondaryYLabel,
108
+ } = marginCalculation(
109
+ // for all margin related calculations
110
+ width, height, maxNumberForPrimaryAxis, maxNumberForSecondaryAxis, chartJSON.yMaxLeft, formatOptions, chartJSON.legendList, chartJSON.dimensionList, chartJSON.yMaxRight, isSecondaryAxisDrawn, isNormalizedChart));
111
+ setSVGContainer(margin); // for innerWidth/height static width/height
112
+ ({ dataTable, dataTableHeight } = dataTablePreCalculation(
113
+ // calculations for data tables
114
+ formatOptions, yLabel, yTitle, seriesData, chartJSON.dimensionList));
115
+ initSvg(
116
+ // for svg creation
117
+ svg, width, height, formatOptions);
118
+ //d3.select(svgRef.current, width, height);
119
+ gTag = initChartArea(svg, margin); // creating chart area
120
+ initPlotArea(gTag, formatOptions, dataTableHeight, innerWidth, innerHeight, chartType);
121
+ initScale();
122
+ initAxis();
123
+ initYaxis(gTag, formatOptions, dataTableHeight, yLabel, yAxisLeft, innerHeight);
124
+ // initYaxisRight(
125
+ // gTag,
126
+ // formatOptions,
127
+ // dataTableHeight,
128
+ // secondaryYLabel,
129
+ // yAxisRight,
130
+ // innerHeight,
131
+ // innerWidth,
132
+ // floatingTagG
133
+ // );
134
+ horizontalScrollBar(seriesData, height, svg, margin, innerWidth);
135
+ if (formatOptions.dataTableProperties &&
136
+ formatOptions.dataTableProperties.dataTable) {
137
+ if (formatOptions.xAxisLabel.xAxisPosition != "1") {
138
+ formatOptions.xAxisLabel.xAxisLabelVisibility = false;
139
+ }
140
+ addDataTable(formatOptions.plotArea.fitChart, svg, gTag, dataTable, xScale.bandwidth(), yScaleLeft, xScale, undefined, undefined, undefined, dataTableHeight, chartType, formatOptions, yLabel, yTitle, chartJSON.dimensionList, innerWidth, calculatedRange, chartJSON.formattedDimensionListMap, chartId, margin, innerHeight);
141
+ }
142
+ setXaxistitle(formatOptions, barChart, svg, margin, xLabel, height, xTitle, chartJSON.chartType, yLabel, innerWidth, innerHeight);
143
+ yAxistitle(innerHeight, formatOptions, dataTableHeight, barChart, svg, margin, yTitle, yLabel);
144
+ yAxistitleRight(svg, isSecondaryAxisDrawn, margin, formatOptions, dataTableHeight, innerHeight, innerWidth, secondaryYLabel, secondaryAxisTitleWidth); // to be added later
145
+ setChartTitle(svg, formatOptions, width, chartTitleHeight);
146
+ drawLegends(height, svg, dimensionHeightWidthArray, chartTitleHeight, width, legendMargin, formatOptions, seriesData, chartId, staticLegendShape.rectangle);
147
+ };
148
+ const preProcessChartData = () => {
149
+ const allChartData = [];
150
+ const legendList = [];
151
+ seriesData.forEach((series, index) => {
152
+ // Prefix legend
153
+ const prefixedLegend = `${index}~$~${series.properties.legend}`;
154
+ series.properties.legend = prefixedLegend;
155
+ legendList.push(prefixedLegend);
156
+ // Flatten data & collect dimensions
157
+ for (const point of series.data) {
158
+ allChartData.push(point);
159
+ }
160
+ });
161
+ // Assign computed values
162
+ chartJSON.chartData = allChartData;
163
+ chartJSON.legendList = legendList;
164
+ // getting unique x values as dimension list
165
+ filteredData = JSON.parse(JSON.stringify(seriesData));
166
+ let tempStackLineData = getStackedData(chartJSON.dimensionList, seriesData, isNormalizedChart);
167
+ if (!formatOptions.plotArea.fitChart) {
168
+ filteredDimension = chartJSON.dimensionList.slice(scrollPosition, scrollPosition + visibleBars);
169
+ filteredData.forEach((data, i) => (filteredData[i].data = data.data.filter((d) => filteredDimension.includes(d.dimension))));
170
+ }
171
+ else {
172
+ filteredDimension = chartJSON.dimensionList;
173
+ }
174
+ const allStackDataChart = d3
175
+ .stack()
176
+ .keys(chartJSON.legendList)
177
+ .offset(d3.stackOffsetDiverging)(tempStackLineData);
178
+ createStackLineData();
179
+ // Get min value from stack (you manually set yMaxLeft = 1)
180
+ let yMinLeft = Infinity;
181
+ for (const series of allStackDataChart) {
182
+ for (const [start] of series) {
183
+ yMinLeft = Math.min(yMinLeft, start);
184
+ }
185
+ }
186
+ chartJSON.yMinLeft = yMinLeft;
187
+ chartJSON.yMaxLeft = 1; // as per your original override
188
+ let xAxisObject = xAxisObj[0];
189
+ let formatedDimesionList = (xAxisObject.groupBy == "NA" || xAxisObject.groupBy == undefined) &&
190
+ xAxisObject.dataType === "DATE"
191
+ ? setDateFormats(formatOptions.xAxisLabel.xAxisNumberFormat, chartJSON.dimensionList).map((d) => d[0])
192
+ : chartJSON.dimensionList;
193
+ chartJSON.dimensionList.forEach((d, i) => {
194
+ chartJSON.formattedDimensionListMap.set(d, formatedDimesionList[i]);
195
+ });
196
+ if (formatOptions.plotArea.hideZeroValues) {
197
+ chartJSON.hideZeroValues = true;
198
+ }
199
+ // let secondaryAxisMinValue = 0;
200
+ // let secondaryAxisMaxValue = 0;
201
+ // if (isSecondaryAxisDrawn) {
202
+ // seriesData?.forEach((data) => {
203
+ // if (data.properties.axis == "Secondary") {
204
+ // // isSecondaryAxisDrawn = true;
205
+ // if (
206
+ // secondaryAxisMinValue >
207
+ // d3.min(data.data, (d: TDataPoint) => d.value)
208
+ // ) {
209
+ // secondaryAxisMinValue = d3.min(
210
+ // data.data,
211
+ // (d: TDataPoint) => d.value
212
+ // );
213
+ // }
214
+ // if (
215
+ // secondaryAxisMaxValue <
216
+ // d3.max(data.data, (d: TDataPoint) => d.value)
217
+ // ) {
218
+ // secondaryAxisMaxValue = d3.max(
219
+ // data.data,
220
+ // (d: TDataPoint) => d.value
221
+ // );
222
+ // }
223
+ // }
224
+ // });
225
+ // chartJSON.yMinRight = secondaryAxisMinValue;
226
+ // chartJSON.yMaxRight = secondaryAxisMaxValue;
227
+ // }
228
+ };
229
+ const initScale = () => {
230
+ // rounding the ymin & ymax
231
+ let yAxisLabelArray = responsiveYaxisLabel(customYaxisMaxValue ? customYaxisMaxValue : chartJSON.yMaxLeft, chartJSON.yMinLeft, innerHeight, formatOptions, chartJSON, customYaxisMinValue, customYaxisMaxValue).yAxisLabelArray;
232
+ chartJSON.yMaxLeft = yAxisLabelArray[yAxisLabelArray.length - 1];
233
+ chartJSON.yMinLeft = yAxisLabelArray[0];
234
+ if (isPrimaryAxisDrawn) {
235
+ yScaleLeft = d3
236
+ .scaleLinear()
237
+ .domain([chartJSON.yMinLeft < 0 ? -1 : 0, 1])
238
+ .range([
239
+ dataTableHeight > 0 ? innerHeight - dataTableHeight : innerHeight,
240
+ 0,
241
+ ]);
242
+ }
243
+ // for future reference
244
+ // if (isSecondaryAxisDrawn) {
245
+ // yScaleRight = d3
246
+ // .scaleLinear()
247
+ // .domain([
248
+ // chartJSON.yMinRight >= 0
249
+ // ? (secondaryCustomYaxisMinValue ||
250
+ // secondaryCustomYaxisMinValue == 0) &&
251
+ // !Number.isNaN(secondaryCustomYaxisMinValue)
252
+ // ? secondaryCustomYaxisMinValue
253
+ // : 0
254
+ // : (secondaryCustomYaxisMinValue ||
255
+ // secondaryCustomYaxisMinValue == 0) &&
256
+ // !Number.isNaN(secondaryCustomYaxisMinValue)
257
+ // ? secondaryCustomYaxisMinValue
258
+ // : chartJSON.yMinRight * 1.1,
259
+ // chartJSON.yMaxRight <= 0
260
+ // ? secondaryCustomYaxisMaxValue
261
+ // ? secondaryCustomYaxisMaxValue
262
+ // : 0
263
+ // : secondaryCustomYaxisMaxValue
264
+ // ? secondaryCustomYaxisMaxValue
265
+ // : chartJSON.yMaxRight * 1.1,
266
+ // ])
267
+ // .range([
268
+ // dataTableHeight > 0 ? innerHeight - dataTableHeight : innerHeight,
269
+ // 0,
270
+ // ]);
271
+ // }
272
+ calculatedRange = [0, innerWidth];
273
+ if (formatOptions.seriesLabel.seriesLabelVisibility) {
274
+ let labelObj = prepareDataForSeriesLabel(innerWidth, yScaleLeft, formatOptions, filteredData, undefined, isSecondaryAxisDrawn, true);
275
+ seriesLabels = labelObj.labelArray;
276
+ formatOptions.seriesLabel.seriesLabelPosition == "Right" &&
277
+ (seriesLabelWidth = labelObj.heightWidth[0]);
278
+ formatOptions.seriesLabel.seriesLabelPosition == "Right"
279
+ ? (calculatedRange = [0, innerWidth - labelObj.heightWidth[0]])
280
+ : (calculatedRange = [labelObj.heightWidth[0], innerWidth]);
281
+ }
282
+ getXScale();
283
+ };
284
+ const getXScale = () => {
285
+ columnWidth =
286
+ (0.51 +
287
+ (0.61 * (100 - parseFloat(formatOptions.plotArea.plotAreaGapWidth))) /
288
+ 100) *
289
+ (innerWidth / filteredDimension.length);
290
+ xScale = d3
291
+ .scaleBand()
292
+ .domain(filteredDimension)
293
+ .range(calculatedRange)
294
+ .padding(0.5);
295
+ };
296
+ const initAxis = () => {
297
+ getXAxis();
298
+ if (isPrimaryAxisDrawn) {
299
+ yAxisLeft = d3
300
+ .axisLeft(yScaleLeft)
301
+ // .tickFormat((d: number) =>
302
+ // getNumberWithFormat(
303
+ // d,
304
+ // formatOptions.yAxisLabel.yAxisDisplayUnits,
305
+ // formatOptions.yAxisLabel.yAxisNumberFormat,
306
+ // formatOptions.yAxisLabel.yAxisLabelDecimalPrecision
307
+ // )
308
+ // )
309
+ .tickSize(formatOptions.plotArea.gridLinesVisibility
310
+ ? formatOptions.plotArea.gridLinesHorizontal
311
+ ? -innerWidth + (seriesLabelWidth ? seriesLabelWidth : 0)
312
+ : 0
313
+ : 0)
314
+ .ticks(dataTableHeight > 0
315
+ ? (innerHeight - dataTableHeight) / 30
316
+ : innerHeight / 30, "%")
317
+ .tickSizeOuter(0);
318
+ }
319
+ };
320
+ const getXAxis = () => {
321
+ xAxis = d3
322
+ .axisBottom(xScale)
323
+ .tickSize(formatOptions.plotArea.gridLinesVisibility
324
+ ? formatOptions.plotArea.gridLinesVertical
325
+ ? formatOptions.plotArea.gridLinesVertical
326
+ ? -(dataTableHeight > 0
327
+ ? innerHeight - dataTableHeight
328
+ : innerHeight)
329
+ : parseFloat(formatOptions.plotArea.ticksHeight) *
330
+ ((dataTableHeight > 0
331
+ ? innerHeight - dataTableHeight
332
+ : innerHeight) /
333
+ 100) *
334
+ (formatOptions.xAxisLabel.xAxisPosition == "1" ? 1 : -1)
335
+ : 0
336
+ : 0)
337
+ .tickSizeOuter(0)
338
+ .tickValues(responsiveXaxisLabel(filteredDimension, innerWidth));
339
+ };
340
+ const getChartType = (lineData) => {
341
+ // to convert data value to percentage
342
+ stackChartData.forEach((data, i) => data.forEach((item, position) => {
343
+ lineData[i].data[position][0] = item[0] =
344
+ item.data.total === 0 ? 0 : item[0] / item.data.total;
345
+ lineData[i].data[position][1] = item[1] =
346
+ item.data.total === 0 ? 0 : item[1] / item.data.total;
347
+ }));
348
+ lineData.forEach((lData) => {
349
+ lData.data.forEach((cData) => {
350
+ cData.hideZero = lData.properties.hideZeroValues;
351
+ cData.axis = lData.properties.axis;
352
+ });
353
+ });
354
+ // Bind dummy data to ensure a single group is created
355
+ // Step 1: Outer group for the whole chart
356
+ // Create parent group for columns
357
+ let columns = gTag.selectAll(".parentGroup").data([stackChartData.reverse()]);
358
+ columns = columns
359
+ .enter()
360
+ .append("g")
361
+ .attr("class", "columns parentGroup")
362
+ .merge(columns);
363
+ // JOIN: one group per stack series
364
+ let columnGroups = columns.selectAll(".column-group").data((d) => d);
365
+ // ENTER
366
+ let columnGroupsEnter = columnGroups
367
+ .enter()
368
+ .append("g")
369
+ .attr("class", (d) => "column-group " + d.key.replace(/ /g, "-"))
370
+ .attr("hoverId", (d) => d.key.includes("~$~")
371
+ ? d.key.split("~$~")[1].replace(/ /g, "-")
372
+ : d.key.replace(/ /g, "-"));
373
+ columnGroups = columnGroupsEnter.merge(columnGroups);
374
+ // JOIN rects inside each series
375
+ let rects = columnGroups.selectAll("rect").data((d) => d);
376
+ // ENTER
377
+ rects
378
+ .enter()
379
+ .append("rect")
380
+ .merge(rects)
381
+ .attr("x", (d) => xScale(d.data.dimension))
382
+ .attr("y", (d) => yScaleLeft(d[1]))
383
+ .attr("height", (d) => Math.max(0, yScaleLeft(d[0]) - yScaleLeft(d[1])))
384
+ .attr("width", xScale.bandwidth())
385
+ .attr("fill", (d, i, nodes) => {
386
+ // `nodes[i]` gives access to parent node so we can infer which group (series) we're in
387
+ const groupIndex = Array.from(columnGroups.nodes()).indexOf(nodes[i].parentNode);
388
+ return seriesData[groupIndex]?.properties?.color || "gray";
389
+ })
390
+ .attr("stroke", (d, i, nodes) => {
391
+ const groupIndex = Array.from(columnGroups.nodes()).indexOf(nodes[i].parentNode);
392
+ const props = seriesData[groupIndex]?.properties;
393
+ return props?.stackBorderStyle === 0
394
+ ? "none"
395
+ : formatOptions.column.stackBorderVisibility
396
+ ? props.stackBorderColor
397
+ : "none";
398
+ })
399
+ .attr("stroke-dasharray", (d, i, nodes) => {
400
+ const groupIndex = Array.from(columnGroups.nodes()).indexOf(nodes[i].parentNode);
401
+ return seriesData[groupIndex]?.properties.stackBorderStyle === 2
402
+ ? "5,3"
403
+ : "0";
404
+ })
405
+ .attr("stroke-width", (d, i, nodes) => {
406
+ const groupIndex = Array.from(columnGroups.nodes()).indexOf(nodes[i].parentNode);
407
+ return ((seriesData[groupIndex]?.properties.stackBorderWidth || 0) + "px");
408
+ })
409
+ // EXIT
410
+ // columnGroups.exit().remove();
411
+ .on("mousemove", (event, d) => {
412
+ showTooltipOnMouseMove([
413
+ {
414
+ key: formatOptions.xAxisTitle.xAxisTitleText.includes("~$~")
415
+ ? formatOptions.xAxisTitle.xAxisTitleText.split("~$~")[1]
416
+ : formatOptions.xAxisTitle.xAxisTitleText,
417
+ value: chartJSON.formattedDimensionListMap.get(d.data.dimension),
418
+ },
419
+ {
420
+ key: formatOptions.yAxisTitle.yAxisTitleText || d.value,
421
+ value: getNumberWithFormat(d[1] - d[0], formatOptions.toolTip.toolTipDisplayUnits, formatOptions.toolTip.toolTipNumberFormat, formatOptions.toolTip.toolTipDecimalPrecision),
422
+ },
423
+ {
424
+ key: "Legend",
425
+ value: d.key.includes("~$~") ? d.key.split("~$~")[1] : d.key,
426
+ },
427
+ ], formatOptions, event);
428
+ })
429
+ .on("mouseout", hideTooltipOnMouseOut);
430
+ // EXIT: remove old groups
431
+ columnGroups.exit().remove();
432
+ };
433
+ const setSVGContainer = (margin) => {
434
+ innerWidth = width - margin.left - margin.right;
435
+ innerHeight = height - margin.bottom - margin.top;
436
+ };
437
+ const horizontalScrollBar = (seriesData, height, svg, margin, innerWidth) => {
438
+ if (!formatOptions.plotArea.fitChart) {
439
+ // Scrollbar parameters
440
+ const scrollMax = seriesData[0].data.length - visibleBars;
441
+ // Scrollbar track & handle
442
+ const scrollbarY = height - 20;
443
+ filteredDimension = chartJSON.dimensionList.slice(scrollPosition, scrollPosition + visibleBars);
444
+ getXScale();
445
+ filteredData = JSON.parse(JSON.stringify(seriesData));
446
+ filteredData.forEach((data, i) => (filteredData[i].data = data.data.filter((d) => filteredDimension.includes(d.dimension))));
447
+ createStackLineData();
448
+ getXAxis();
449
+ svg
450
+ .append("rect")
451
+ .attr("x", margin.left)
452
+ .attr("y", scrollbarY)
453
+ .attr("width", innerWidth)
454
+ .attr("height", 8)
455
+ .attr("fill", "#ddd")
456
+ .attr("rx", 4);
457
+ const handleWidth = (innerWidth * visibleBars) / chartJSON.dimensionList.length;
458
+ const handle = svg
459
+ .append("rect")
460
+ .attr("x", margin.left)
461
+ .attr("y", scrollbarY)
462
+ .attr("width", handleWidth)
463
+ .attr("height", 8)
464
+ .attr("fill", "#999")
465
+ .attr("rx", 4)
466
+ .style("cursor", "ew-resize")
467
+ .call(d3.drag().on("drag", (event) => {
468
+ let x = Math.min(Math.max(event.x, margin.left), margin.left + innerWidth - handleWidth);
469
+ handle.attr("x", x);
470
+ scrollPosition = Math.round(((x - margin.left) / (innerWidth - handleWidth)) * scrollMax);
471
+ filteredDimension = chartJSON.dimensionList.slice(scrollPosition, scrollPosition + visibleBars);
472
+ getXScale();
473
+ filteredData = JSON.parse(JSON.stringify(seriesData));
474
+ filteredData.forEach((data, i) => (filteredData[i].data = data.data.filter((d) => filteredDimension.includes(d.dimension))));
475
+ createStackLineData();
476
+ getXAxis();
477
+ drawLineChart();
478
+ }));
479
+ svg.on("wheel", (event) => {
480
+ event.preventDefault();
481
+ const scrollDelta = Math.abs(event.deltaX) > Math.abs(event.deltaY)
482
+ ? event.deltaX
483
+ : event.deltaY;
484
+ scrollPosition += scrollDelta > 0 ? 1 : -1;
485
+ scrollPosition = Math.max(0, Math.min(scrollPosition, scrollMax));
486
+ const x = margin.left +
487
+ ((innerWidth - handleWidth) * scrollPosition) / scrollMax;
488
+ handle.attr("x", x);
489
+ getXScale();
490
+ filteredData = JSON.parse(JSON.stringify(seriesData));
491
+ filteredData.forEach((data, i) => (filteredData[i].data = data.data.filter((d) => filteredDimension.includes(d.dimension))));
492
+ createStackLineData();
493
+ getXAxis();
494
+ drawLineChart();
495
+ });
496
+ }
497
+ drawLineChart();
498
+ };
499
+ const drawLineChart = () => {
500
+ // filteredData.forEach((data) => getChartType([data]));
501
+ getChartType(filteredData);
502
+ initXaxis(gTag, chartJSON, xLabel, formatOptions, xAxisObj[0], dataTableHeight, yScaleLeft, xAxis, dimensionHeightWidthArray, height, columnWidth, xAxisObj[0].dataType, innerWidth, innerHeight, filteredDimension);
503
+ stacklineAnnotations(stackChartData, xScale, yScaleLeft, yScaleRight, // need to pass secondary axis scale if secondary axis is drawn
504
+ margin, d3Annotation, [], //this.labelExcludeList,
505
+ [], //this.individualLabelColor,
506
+ [], //this.attributes.Id ? formatOptions.plotArea.dataLabelsCoordinates : this.parentReference.objService.tempAnnotationArray
507
+ formatOptions, chartType, height, width, innerWidth, filteredDimension, innerHeight, chartId, svg, dataTableHeight);
508
+ };
509
+ const createStackLineData = () => {
510
+ let stackLineData = getStackedData(filteredDimension, filteredData, isNormalizedChart);
511
+ // }
512
+ stackChartData = d3
513
+ .stack()
514
+ .keys(chartJSON.legendList)
515
+ .offset(d3.stackOffsetDiverging)(stackLineData);
516
+ filteredData.forEach((data, index) => data.data.forEach((axisData, position) => {
517
+ axisData["0"] = stackChartData[index][position][0];
518
+ axisData["1"] = stackChartData[index][position][1];
519
+ }));
520
+ //Appending Extra key for tooltip color
521
+ let seriesColor = formatOptions.annotation.annotationSetLabelColor;
522
+ stackChartData.forEach((K, j) => K.forEach((d) => {
523
+ d["key"] = K.key;
524
+ K["color"] = JSON.parse(JSON.stringify(seriesData[j].properties.color));
525
+ d.data.labelPosition = seriesData[j].properties.dataLabelPosition;
526
+ d.data["labelColor"] =
527
+ seriesColor == "2"
528
+ ? JSON.parse(JSON.stringify(seriesData[j].properties.color))
529
+ : seriesData[j].properties.labelColor;
530
+ d["hideZero"] = JSON.parse(JSON.stringify(seriesData[j].properties.hideZeroValues));
531
+ }));
532
+ };
533
+ return (_jsxs("div", { style: { width: "100%", height: "100%" }, children: [_jsx("div", { id: "chartTooltipDiv" }), _jsx("svg", { className: "chartSVG", ref: svgRef, id: chartId, style: { width: "100%", height: "100%" } })] }));
534
+ };
535
+ export default NormalizedStackColumnChart;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { type TChartProps } from "../ChartsWithAxisTypes.types";
3
+ declare const NormalisedStackLineChart: React.FC<TChartProps>;
4
+ export default NormalisedStackLineChart;