@apia/charts 3.0.1 → 3.0.2

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 (78) hide show
  1. package/dist/index.d.ts +336 -5
  2. package/dist/index.js +1552 -3
  3. package/dist/index.js.map +1 -1
  4. package/package.json +12 -6
  5. package/dist/charts/ChartContext.js +0 -6
  6. package/dist/charts/ChartContext.js.map +0 -1
  7. package/dist/charts/ChartRenderer.d.ts +0 -17
  8. package/dist/charts/ChartRenderer.d.ts.map +0 -1
  9. package/dist/charts/ChartRenderer.js +0 -175
  10. package/dist/charts/ChartRenderer.js.map +0 -1
  11. package/dist/charts/horizontalBars/Bar.js +0 -226
  12. package/dist/charts/horizontalBars/Bar.js.map +0 -1
  13. package/dist/charts/horizontalBars/HorizontalBars.js +0 -374
  14. package/dist/charts/horizontalBars/HorizontalBars.js.map +0 -1
  15. package/dist/charts/linear/LineChart.js +0 -528
  16. package/dist/charts/linear/LineChart.js.map +0 -1
  17. package/dist/charts/linear/Node.js +0 -56
  18. package/dist/charts/linear/Node.js.map +0 -1
  19. package/dist/charts/pie/Pie.js +0 -184
  20. package/dist/charts/pie/Pie.js.map +0 -1
  21. package/dist/charts/pie/Slice.js +0 -96
  22. package/dist/charts/pie/Slice.js.map +0 -1
  23. package/dist/charts/pie/usePieAnimation.js +0 -123
  24. package/dist/charts/pie/usePieAnimation.js.map +0 -1
  25. package/dist/charts/types.d.ts +0 -188
  26. package/dist/charts/types.d.ts.map +0 -1
  27. package/dist/charts/util/ChartSelector.js +0 -36
  28. package/dist/charts/util/ChartSelector.js.map +0 -1
  29. package/dist/charts/util/ColoredLegendItem.js +0 -46
  30. package/dist/charts/util/ColoredLegendItem.js.map +0 -1
  31. package/dist/charts/util/EmptyGrid.d.ts +0 -8
  32. package/dist/charts/util/EmptyGrid.d.ts.map +0 -1
  33. package/dist/charts/util/EmptyGrid.js +0 -51
  34. package/dist/charts/util/EmptyGrid.js.map +0 -1
  35. package/dist/charts/util/LegendContainer.js +0 -53
  36. package/dist/charts/util/LegendContainer.js.map +0 -1
  37. package/dist/charts/util/NumberedLegendItem.js +0 -45
  38. package/dist/charts/util/NumberedLegendItem.js.map +0 -1
  39. package/dist/charts/util/getBarColor.js +0 -29
  40. package/dist/charts/util/getBarColor.js.map +0 -1
  41. package/dist/charts/util/parseMargin.js +0 -11
  42. package/dist/charts/util/parseMargin.js.map +0 -1
  43. package/dist/charts/util/useChartStyles.js +0 -35
  44. package/dist/charts/util/useChartStyles.js.map +0 -1
  45. package/dist/charts/verticalBars/Bar.js +0 -239
  46. package/dist/charts/verticalBars/Bar.js.map +0 -1
  47. package/dist/charts/verticalBars/VerticalBars.js +0 -394
  48. package/dist/charts/verticalBars/VerticalBars.js.map +0 -1
  49. package/dist/charts/waterfallBars/WaterfallBar.js +0 -84
  50. package/dist/charts/waterfallBars/WaterfallBar.js.map +0 -1
  51. package/dist/charts/waterfallBars/WaterfallBars.js +0 -289
  52. package/dist/charts/waterfallBars/WaterfallBars.js.map +0 -1
  53. package/dist/widgets/WidgetContainer.d.ts +0 -10
  54. package/dist/widgets/WidgetContainer.d.ts.map +0 -1
  55. package/dist/widgets/WidgetContainer.js +0 -68
  56. package/dist/widgets/WidgetContainer.js.map +0 -1
  57. package/dist/widgets/counter/Counter.js +0 -108
  58. package/dist/widgets/counter/Counter.js.map +0 -1
  59. package/dist/widgets/custom/useCustomWidget.js +0 -64
  60. package/dist/widgets/custom/useCustomWidget.js.map +0 -1
  61. package/dist/widgets/custom/util.js +0 -9
  62. package/dist/widgets/custom/util.js.map +0 -1
  63. package/dist/widgets/oxford/Oxford.js +0 -241
  64. package/dist/widgets/oxford/Oxford.js.map +0 -1
  65. package/dist/widgets/ring/Ring.js +0 -123
  66. package/dist/widgets/ring/Ring.js.map +0 -1
  67. package/dist/widgets/scale/Scale.js +0 -145
  68. package/dist/widgets/scale/Scale.js.map +0 -1
  69. package/dist/widgets/speedMeter/SpeedMeter.js +0 -187
  70. package/dist/widgets/speedMeter/SpeedMeter.js.map +0 -1
  71. package/dist/widgets/tLight/TLight.js +0 -134
  72. package/dist/widgets/tLight/TLight.js.map +0 -1
  73. package/dist/widgets/thermometer/Thermometer.js +0 -144
  74. package/dist/widgets/thermometer/Thermometer.js.map +0 -1
  75. package/dist/widgets/thermometer/util.js +0 -31
  76. package/dist/widgets/thermometer/util.js.map +0 -1
  77. package/dist/widgets/types.d.ts +0 -41
  78. package/dist/widgets/types.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"HorizontalBars.js","sources":["../../../src/charts/horizontalBars/HorizontalBars.tsx"],"sourcesContent":["import uniqueId from 'lodash-es/uniqueId';\nimport { TApiaChartColorDisposition, TChartRendererProps } from '../types';\nimport { arrayOrArray, getLabel } from '@apia/util';\nimport { parseMargin } from '../util/parseMargin';\nimport { scaleLinear, scaleBand, scaleLog, scaleOrdinal } from '@visx/scale';\nimport React, { useLayoutEffect, useMemo } from 'react';\nimport { Box, Heading } from '@apia/theme';\nimport { Grid } from '@visx/visx';\nimport { Group } from '@visx/group';\nimport { BarGroupHorizontal } from '@visx/shape';\nimport { AxisBottom, AxisLeft } from '@visx/axis';\nimport { Bar } from './Bar';\nimport { usePanAndZoom } from '@apia/util';\nimport { LegendContainer, TChartReference } from '../util/LegendContainer';\nimport { getBarColor } from '../util/getBarColor';\nimport { useChartStyles } from '../util/useChartStyles';\nexport interface IParsedColumn {\n columnName: string;\n [key: string]: string;\n}\n\nfunction adjustDimensions({\n width,\n height,\n maxWidth,\n}: {\n width: number;\n height: number;\n maxWidth: number;\n}) {\n if (width <= maxWidth) {\n return { width, height };\n }\n\n const ratio = width / height;\n const newWidth = maxWidth;\n const newHeight = Math.floor(newWidth / ratio);\n\n return { width: newWidth, height: newHeight };\n}\n\nconst getYValue = (d: IParsedColumn) => d.columnName;\n\nexport type THorizontalBarsEvents = { highlight: { barName: string } };\n\n/**\n * Acepta parámetro pieces que debe ser compuesto por...\n *\n * @example\n *\n * // Instanciar con solamente x\n * <Pie pieces={{x: 3}} />\n *\n * // Instanciar con x e y\n * <Pie pieces={{x: 3, y: 5}} />\n */\nconst HorizontalBars = ({\n margin = { top: 20, left: 50, bottom: 150, right: 20 },\n chart,\n className,\n chartId,\n outerClassName,\n allowZoom,\n}: TChartRendererProps) => {\n const effectiveMargin = parseMargin(margin);\n let innerWidth =\n chart.ratio.width + (-effectiveMargin.left - effectiveMargin.right) / 2;\n let innerHeight =\n chart.ratio.height + (-effectiveMargin.top - effectiveMargin.bottom) / 2;\n if (innerWidth > chart.ratio.maxWidth) {\n const newValues = adjustDimensions({\n height: innerHeight,\n width: innerWidth,\n maxWidth: chart.ratio.maxWidth,\n });\n innerWidth = newValues.width;\n innerHeight = newValues.height;\n }\n\n const columnas = arrayOrArray(chart.dataSets?.data)\n .filter((column) => !!column.sets)\n .map((column) => {\n return {\n ...column,\n sets: column.sets,\n };\n });\n\n const xValues = arrayOrArray(columnas[0].sets).map(\n (innerCoord) => innerCoord.key,\n );\n const columnNames = columnas.map((col) => {\n return col.name;\n });\n\n const parsedData: IParsedColumn[] = xValues.map((x) => {\n const obj: IParsedColumn = columnas.reduce<IParsedColumn>(\n (acc, column) => {\n return {\n ...acc,\n [column.name]: arrayOrArray(column.sets).filter((coord) => {\n return coord.key === x;\n })[0].value,\n };\n },\n { columnName: x },\n );\n return obj;\n });\n\n const yScale = scaleBand<string>({\n range: [\n typeof effectiveMargin === 'number'\n ? effectiveMargin\n : effectiveMargin.top,\n innerHeight,\n ],\n domain: parsedData.map(getYValue),\n padding: 0.2,\n });\n\n const columnGroupScale = scaleBand<string>({\n domain: columnNames,\n range: [0, yScale.bandwidth()],\n });\n\n const xScaleLog = scaleLog<number>({\n range: [\n typeof effectiveMargin === 'number'\n ? effectiveMargin\n : effectiveMargin.left,\n innerWidth,\n ],\n domain: [\n 1,\n Math.max(\n ...parsedData.map((d) =>\n Math.max(...columnNames.map((key) => Number(d[key]))),\n ),\n ),\n ],\n base: 10,\n });\n\n const xScaleLine = scaleLinear<number>({\n range: [\n typeof effectiveMargin === 'number'\n ? effectiveMargin\n : effectiveMargin.left,\n innerWidth,\n ],\n domain: [\n 0,\n Math.max(\n ...parsedData.map((d) =>\n Math.max(...columnNames.map((key) => Number(d[key]))),\n ),\n ),\n ],\n });\n\n const color = scaleOrdinal<string, string>({\n domain: columnNames,\n range: columnas.map((col) => col.color),\n });\n\n const isLogScale = false;\n\n const xScale = useMemo(() => {\n if (!isLogScale) {\n return xScaleLine;\n }\n return xScaleLog;\n }, [isLogScale, xScaleLine, xScaleLog]);\n\n const id = useMemo(() => `HorizontalBars${uniqueId()}`, []);\n useLayoutEffect(() => {\n document\n .querySelectorAll<HTMLElement>(\n `#${id} .__${(chartId as string) ?? outerClassName}`,\n )\n .forEach((current) => {\n const width = current.getBoundingClientRect().width;\n // eslint-disable-next-line no-param-reassign\n current.style.transformOrigin =\n (current.getAttribute('x') as string) + 'px 14px';\n // eslint-disable-next-line no-param-reassign\n current.style.transform = `rotate(15deg) translateX(${width / 2}px)`;\n });\n });\n const styles = useChartStyles(chart.colorSchema);\n const { boxRef, elementRef } = usePanAndZoom<HTMLElement, SVGSVGElement>(\n undefined,\n !allowZoom ?? true,\n );\n const setsWithColor = arrayOrArray(chart.dataSets.data).map((data, index) => {\n const isSingle = arrayOrArray(chart.dataSets.data).length === 1;\n const dataColor =\n data.color !== '' && data.color !== undefined\n ? data.color\n : arrayOrArray(\n styles\n ? styles.schema\n : [\n '#7ad6f4',\n '#45bdee',\n '#28a7ea',\n '#006cbb',\n '#034698',\n '#032f64',\n ],\n ).length > 0\n ? getBarColor(\n arrayOrArray(\n styles\n ? styles.schema\n : [\n '#7ad6f4',\n '#45bdee',\n '#28a7ea',\n '#006cbb',\n '#034698',\n '#032f64',\n ],\n ),\n index,\n isSingle,\n )\n : '';\n const returnColumnsArray: TApiaChartColorDisposition[] = [];\n arrayOrArray(data.sets).forEach((set) => {\n if (set.color !== '' && set.color !== undefined) {\n returnColumnsArray.push({ ...set, columnName: data.name });\n } else {\n returnColumnsArray.push({\n ...set,\n color: dataColor,\n columnName: data.name,\n });\n }\n });\n return returnColumnsArray;\n });\n\n const colorReference: TChartReference = arrayOrArray(chart.dataSets.data).map(\n (data, index) => {\n const isSingle = arrayOrArray(chart.dataSets.data).length === 1;\n const dataColor =\n data.color !== '' && data.color !== undefined\n ? data.color\n : arrayOrArray(\n styles\n ? styles.schema\n : [\n '#7ad6f4',\n '#45bdee',\n '#28a7ea',\n '#006cbb',\n '#034698',\n '#032f64',\n ],\n ).length > 0\n ? getBarColor(\n arrayOrArray(\n styles\n ? styles.schema\n : [\n '#7ad6f4',\n '#45bdee',\n '#28a7ea',\n '#006cbb',\n '#034698',\n '#032f64',\n ],\n ),\n index,\n isSingle,\n )\n : '';\n return {\n color: dataColor,\n title: data.name,\n };\n },\n );\n let numberReference: TChartReference = [];\n if (colorReference.length === 1) {\n numberReference = arrayOrArray(\n arrayOrArray(chart.dataSets.data)[0].sets,\n ).map((data, index) => {\n return {\n color: `${index + 1}`,\n title: data.key,\n };\n });\n }\n arrayOrArray(chart.dataSets.data)\n .map((data) => {\n const returnArray: { color: string; title: string }[] = [];\n arrayOrArray(data.sets).forEach((set) => {\n if (set.color !== '' && set.color !== undefined) {\n returnArray.push({\n color: set.color,\n title: data.name + ' - ' + set.key,\n });\n }\n });\n return returnArray;\n })\n .flat()\n .forEach((addRef) => colorReference.push(addRef));\n\n return (\n <>\n <Box\n ref={boxRef}\n id={id}\n className={`${outerClassName ?? ''} ${chartId} ${\n chart.title\n } chartBox chartContainer`}\n sx={React.useMemo(() => {\n return {\n [`.__${(chartId as string) ?? outerClassName}`]: {\n transform: 'rotate(45deg)',\n transformOrigin: 'attr(x) 18px',\n },\n overflow: 'hidden',\n position: 'relative',\n\n height: `${chart.ratio.height}px`,\n // width: `${chart.ratio.width}px`,\n };\n }, [chart.ratio.height, chartId, outerClassName])}\n >\n <svg\n ref={elementRef}\n className={`_${chartId} ${className ? className : ''} chart__svg`}\n height={chart.ratio.height}\n width={chart.ratio.width}\n style={{\n position: 'absolute',\n }}\n >\n {chart.showGrid && (\n <Grid.Grid\n xScale={xScale}\n yScale={yScale}\n left={0}\n width={innerWidth}\n height={innerHeight}\n numTicksRows={10}\n numTicksColumns={10}\n top={\n (typeof effectiveMargin === 'number'\n ? effectiveMargin\n : effectiveMargin.top) - 20\n }\n />\n )}\n <Group\n top={\n (typeof effectiveMargin === 'number'\n ? effectiveMargin\n : effectiveMargin.top) - 20\n }\n left={effectiveMargin.left}\n >\n <BarGroupHorizontal\n data={parsedData}\n keys={columnNames}\n width={innerWidth}\n y0={getYValue}\n y0Scale={yScale}\n y1Scale={columnGroupScale}\n xScale={xScale}\n color={color}\n >\n {(barGroups) =>\n barGroups.map((barGroup) => {\n return (\n <Group\n key={`bar-group-${barGroup.index}-${barGroup.y0}`}\n top={barGroup.y0}\n >\n {barGroup.bars.map((bar) => {\n const key = `${barGroup.index}-${bar.index}-${bar.key}`;\n return (\n <Bar\n isSingle={barGroup.bars.length === 1}\n key={key}\n bar={bar}\n barGroup={barGroup}\n chart={chart}\n parsedData={parsedData}\n effectiveMargin={effectiveMargin}\n setsWithColor={setsWithColor.flat()}\n />\n );\n })}\n </Group>\n );\n })\n }\n </BarGroupHorizontal>\n </Group>\n <AxisLeft\n scale={yScale}\n left={effectiveMargin.left}\n label={\n chart.chartType !== 'pie2D' && chart.showAxisXTitle\n ? chart.axisXTitle\n : ''\n }\n labelOffset={10}\n tickLabelProps={() => ({\n display: 'none',\n })}\n />\n <AxisBottom\n top={innerHeight}\n scale={xScale}\n label={\n chart.chartType !== 'pie2D' && chart.showAxisYTitle\n ? chart.axisYTitle\n : ''\n }\n tickLabelProps={{ display: 'none' }}\n tickLineProps={{ display: 'none' }}\n labelOffset={30}\n />\n </svg>\n </Box>\n <Box className=\"chartLegend__Wrapper\">\n {chart.showLegend && colorReference.length !== 0 && (\n <Box className=\"chart__legend__wrapper\">\n {/* TODO LABEL */}\n <Heading as={'h6'}>{getLabel('mnuLeyends').text}</Heading>\n <LegendContainer\n id={chartId}\n references={\n // hideLegendsColors\n // ? colorReference.map((ref) => {\n // return { ...ref, color: 'transparent' };\n // })\n colorReference.length === 1 && numberReference.length > 0\n ? numberReference\n : colorReference\n }\n useNumbered={colorReference.length === 1}\n />\n </Box>\n )}\n </Box>\n </>\n );\n};\n\nexport { HorizontalBars };\n"],"names":[],"mappings":"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"}
@@ -1,528 +0,0 @@
1
- import { jsxs, jsx, Fragment } from '@apia/theme/jsx-runtime';
2
- import { arrayOrArray, useImperativeComponentEvents, usePanAndZoom, usePrevious, getLabel } from '@apia/util';
3
- import { scaleOrdinal, scaleLinear, scaleLog } from '@visx/scale';
4
- import { min, max } from 'd3-array';
5
- import { parseMargin } from '../util/parseMargin.js';
6
- import { useMemo, useState, useLayoutEffect } from 'react';
7
- import { useChartStyles } from '../util/useChartStyles.js';
8
- import { Box, Heading } from '@apia/theme';
9
- import { Grid } from '@visx/visx';
10
- import { Group } from '@visx/group';
11
- import { LinePath } from '@visx/shape';
12
- import { AxisLeft, AxisBottom } from '@visx/axis';
13
- import * as allCurves from '@visx/curve';
14
- import uniqueId from 'lodash-es/uniqueId';
15
- import { Node } from './Node.js';
16
- import { getBarColor } from '../util/getBarColor.js';
17
- import { LegendContainer } from '../util/LegendContainer.js';
18
- import { ApiaUtil } from '@apia/components';
19
-
20
- function adjustDimensions({
21
- width,
22
- height,
23
- maxWidth
24
- }) {
25
- if (width <= maxWidth) {
26
- return { width, height };
27
- }
28
- const ratio = width / height;
29
- const newWidth = maxWidth;
30
- const newHeight = Math.floor(newWidth / ratio);
31
- return { width: newWidth, height: newHeight };
32
- }
33
- function getX(coordinate) {
34
- return coordinate.key;
35
- }
36
- function getY(coordinate) {
37
- return Number(coordinate.value);
38
- }
39
- function parseData(chart) {
40
- const setsArray = arrayOrArray(chart.dataSets?.data).map(
41
- (col) => arrayOrArray(col.sets)
42
- );
43
- let longestLine = [];
44
- let longestLineIndex = -1;
45
- for (let i = 0; i < setsArray.length; i++) {
46
- const array = setsArray[i];
47
- if (!longestLine || array.length > longestLine.length) {
48
- longestLine = array;
49
- longestLineIndex = i;
50
- }
51
- }
52
- const lines = arrayOrArray(chart.dataSets?.data);
53
- const nodesDataArray = lines.map((line) => line.sets);
54
- const nodesData = nodesDataArray.reduce(
55
- (rec, d) => arrayOrArray(rec).concat(d),
56
- []
57
- );
58
- return {
59
- lines,
60
- longestLine,
61
- longestLineIndex,
62
- tallestLine: [...new Set(nodesData.map((value) => value.value))],
63
- xScale: scaleOrdinal({
64
- domain: longestLine.map(getX)
65
- }),
66
- yScale: scaleLinear({
67
- domain: [
68
- (min(nodesData, getY) ?? 0) < 0 ? min(nodesData, getY) ?? 0 : 0,
69
- max(nodesData, getY) ?? 1
70
- ]
71
- }),
72
- yScaleLog: scaleLog({
73
- domain: [
74
- (min(nodesData, getY) ?? 1) > 0 ? min(nodesData, getY) ?? 1 : 1,
75
- max(nodesData, getY) ?? 10
76
- ]
77
- })
78
- };
79
- }
80
- const LineChart = ({
81
- chart,
82
- margin = { top: 20, left: 100, bottom: 24, right: 0 },
83
- chartId,
84
- allowZoom
85
- }) => {
86
- const effectiveMargin = parseMargin(margin);
87
- if (!chart.showAxisYTitle && effectiveMargin.left > 50) {
88
- effectiveMargin.left = 50;
89
- }
90
- let innerWidth = chart.ratio.width - (effectiveMargin.left + effectiveMargin.right) / 2;
91
- let innerHeight = chart.ratio.height - (effectiveMargin.top + effectiveMargin.bottom) / 2;
92
- if (innerWidth > chart.ratio.maxWidth) {
93
- const newValues = adjustDimensions({
94
- height: innerHeight,
95
- width: innerWidth,
96
- maxWidth: chart.ratio.maxWidth
97
- });
98
- innerWidth = newValues.width;
99
- innerHeight = newValues.height;
100
- }
101
- const { lines, xScale, yScale, yScaleLog, longestLine } = parseData(chart);
102
- const styles = useChartStyles(chart.colorSchema);
103
- const coordinates = arrayOrArray(lines[0].sets);
104
- const coordinatesArray = lines.map((col) => {
105
- return col.sets;
106
- });
107
- const divideRangeBetweenStrings = (min2, max2, strings) => {
108
- const numStrings = strings.length;
109
- const step = (max2 - min2) / (numStrings - 1);
110
- const resultArray = [];
111
- let currentValue = min2;
112
- for (let i = 0; i < numStrings; i++) {
113
- resultArray.push(currentValue);
114
- currentValue += step;
115
- }
116
- return resultArray;
117
- };
118
- const xScaleRange = useMemo(() => {
119
- const rangeArr = [
120
- typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.left,
121
- innerWidth
122
- ];
123
- return divideRangeBetweenStrings(rangeArr[0], rangeArr[1], longestLine);
124
- }, [effectiveMargin, innerWidth, longestLine]);
125
- xScale.range(xScaleRange);
126
- const yScaleRange = useMemo(() => {
127
- const rangeArr = [
128
- innerHeight - (effectiveMargin.top + effectiveMargin.bottom),
129
- typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top
130
- ];
131
- return rangeArr;
132
- }, [effectiveMargin, innerHeight]);
133
- yScale.range(yScaleRange);
134
- yScaleLog.range([
135
- innerHeight,
136
- typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top
137
- ]);
138
- const [currentCircle, setCurrentCircle] = useState([]);
139
- const actualYScale = useMemo(() => {
140
- return yScale;
141
- }, [yScale]);
142
- const id = useMemo(() => `Linear${uniqueId()}`, []);
143
- useLayoutEffect(() => {
144
- document.querySelectorAll(`#${id} .tickLabel`).forEach((current) => {
145
- const width = current.getBoundingClientRect().width;
146
- current.style.transformOrigin = current.getAttribute("x") + "px 14px";
147
- current.style.transform = `rotate(25deg) translateX(${width / 2}px)`;
148
- });
149
- });
150
- function addNameToProps(names, objects, fixedValue) {
151
- return objects.map((object, index) => {
152
- const nameIndex = Math.floor(index / fixedValue);
153
- const name = names[nameIndex];
154
- return { ...object, columnName: name };
155
- });
156
- }
157
- const setsWithColor = arrayOrArray(chart.dataSets.data).map((data, index) => {
158
- const isSingle = arrayOrArray(chart.dataSets.data).length === 1;
159
- const dataColor = data.color !== "" && data.color !== void 0 ? data.color : arrayOrArray(
160
- styles ? styles.schema : [
161
- "#7ad6f4",
162
- "#45bdee",
163
- "#28a7ea",
164
- "#006cbb",
165
- "#034698",
166
- "#032f64"
167
- ]
168
- ).length > 0 ? getBarColor(
169
- arrayOrArray(
170
- styles ? styles.schema : [
171
- "#7ad6f4",
172
- "#45bdee",
173
- "#28a7ea",
174
- "#006cbb",
175
- "#034698",
176
- "#032f64"
177
- ]
178
- ),
179
- index,
180
- isSingle
181
- ) : "";
182
- const returnColumnsArray = [];
183
- arrayOrArray(data.sets).forEach((set) => {
184
- if (set.color !== "" && set.color !== void 0) {
185
- returnColumnsArray.push({ ...set, columnName: data.name });
186
- } else {
187
- returnColumnsArray.push({
188
- ...set,
189
- color: dataColor,
190
- columnName: data.name
191
- });
192
- }
193
- });
194
- return { returnColumnsArray, columnColor: dataColor };
195
- });
196
- const colorReference = arrayOrArray(chart.dataSets.data).map(
197
- (data, index) => {
198
- const isSingle = arrayOrArray(chart.dataSets.data).length === 1;
199
- const dataColor = data.color !== "" && data.color !== void 0 ? data.color : arrayOrArray(
200
- styles ? styles.schema : [
201
- "#7ad6f4",
202
- "#45bdee",
203
- "#28a7ea",
204
- "#006cbb",
205
- "#034698",
206
- "#032f64"
207
- ]
208
- ).length > 0 ? getBarColor(
209
- arrayOrArray(
210
- styles ? styles.schema : [
211
- "#7ad6f4",
212
- "#45bdee",
213
- "#28a7ea",
214
- "#006cbb",
215
- "#034698",
216
- "#032f64"
217
- ]
218
- ),
219
- index,
220
- isSingle
221
- ) : "";
222
- return {
223
- color: dataColor,
224
- title: data.name
225
- };
226
- }
227
- );
228
- arrayOrArray(chart.dataSets.data).map((data) => {
229
- const returnArray = [];
230
- arrayOrArray(data.sets).forEach((set) => {
231
- if (set.color !== "" && set.color !== void 0) {
232
- returnArray.push({
233
- color: set.color,
234
- title: data.name + " - " + set.key
235
- });
236
- }
237
- });
238
- return returnArray;
239
- }).flat().forEach((addRef) => colorReference.push(addRef));
240
- const [highlightedBar, setHighlightedBar] = useState("");
241
- useImperativeComponentEvents({
242
- highlight(barName) {
243
- if (barName.split(" - ").length === 1) {
244
- setHighlightedBar(barName);
245
- if (chart.showAxisXTitle || chart.showLegend || chart.showValues) {
246
- console.log({ barName, lines });
247
- const selectedLineGroup = lines.find((l) => l.name === barName);
248
- const selectedLineGroupIndex = lines.findIndex(
249
- (l) => l.name === barName
250
- );
251
- console.log({ selectedLineGroup, selectedLineGroupIndex });
252
- if (selectedLineGroup && selectedLineGroupIndex !== -1) {
253
- ApiaUtil.instance.tooltips.open({
254
- children: arrayOrArray(selectedLineGroup.sets).map((dat, i) => {
255
- return /* @__PURE__ */ jsxs("div", { children: [
256
- /* @__PURE__ */ jsx(
257
- "div",
258
- {
259
- style: {
260
- color: colorReference[selectedLineGroupIndex].color
261
- },
262
- children: /* @__PURE__ */ jsx("strong", { children: chart.showAxisXTitle ? dat.key : chart.showLegend ? barName : "" })
263
- }
264
- ),
265
- chart.showValues && /* @__PURE__ */ jsx("div", { children: dat.value }),
266
- /* @__PURE__ */ jsx("div", {}),
267
- arrayOrArray(selectedLineGroup.sets)[i + 1] && /* @__PURE__ */ jsx("hr", {})
268
- ] }, `${dat.key}`);
269
- }),
270
- attachToMousePosition: true
271
- });
272
- }
273
- }
274
- } else if (barName.split(" - ").length === 2) {
275
- setHighlightedBar(barName.split(" - ")[0]);
276
- }
277
- }
278
- });
279
- const { boxRef, elementRef } = usePanAndZoom(
280
- void 0,
281
- !allowZoom
282
- );
283
- const coords = coordinatesArray.flat().map((coord) => {
284
- return {
285
- xValue: coord.key,
286
- yValue: coord.value,
287
- x: xScale(getX(coord)),
288
- y: actualYScale(getY(coord))
289
- };
290
- });
291
- const columnNames = lines.map((column) => {
292
- return column.name;
293
- });
294
- const nodes = addNameToProps(columnNames, coords, coordinates.length);
295
- const [nearNodesArray, setNearNodesArray] = useState([]);
296
- const previousNearNodesArray = usePrevious(nearNodesArray);
297
- return /* @__PURE__ */ jsxs(Fragment, { children: [
298
- /* @__PURE__ */ jsx(Box, { id, ref: boxRef, className: "chartBox chartContainer", children: /* @__PURE__ */ jsxs(
299
- "svg",
300
- {
301
- ref: elementRef,
302
- width: innerWidth,
303
- height: innerHeight,
304
- id: "LinesChart",
305
- className: `_${chartId} chart__svg`,
306
- onMouseMove: (ev) => {
307
- const rect = elementRef.current?.getBoundingClientRect();
308
- let clientX = ev.clientX - (effectiveMargin.left + effectiveMargin.right) / 2;
309
- let clientY = ev.clientY - (effectiveMargin.top + effectiveMargin.bottom) / 2;
310
- if (rect) {
311
- clientX = ev.clientX - rect.left;
312
- clientY = ev.clientY - rect.top;
313
- }
314
- const nearNodes = nodes.filter((node) => {
315
- return Math.sqrt((node.x - clientX) ** 2 + (node.y - clientY) ** 2) < 20;
316
- });
317
- if (previousNearNodesArray.current && nearNodes.length > 0) {
318
- const currentColumns = lines.map((col) => {
319
- let colNames = "";
320
- nearNodes.forEach((node) => {
321
- if (col.name === node.columnName) {
322
- colNames = node.columnName;
323
- }
324
- });
325
- return colNames;
326
- }).filter((name) => name !== "");
327
- const currentIndex = coordinates.findIndex((coord) => {
328
- return coord.key === nearNodes[0].xValue;
329
- });
330
- if (currentColumns && currentIndex !== void 0) {
331
- const newCircleValues = currentColumns.map((col) => {
332
- return `${col}${currentIndex}`;
333
- });
334
- setCurrentCircle([...newCircleValues]);
335
- }
336
- setNearNodesArray(nearNodes);
337
- const elementUnderCursor = document.elementFromPoint(
338
- ev.clientX,
339
- ev.clientY
340
- );
341
- if (elementUnderCursor && elementUnderCursor.tagName === "circle") {
342
- if (chart.showAxisXTitle || chart.showLegend || chart.showValues) {
343
- ApiaUtil.instance.tooltips.open({
344
- children: nearNodes.sort((a, b) => Number(b.yValue) - Number(a.yValue)).map((node, i) => {
345
- const useSpecific = colorReference.some(
346
- (ref) => ref.title === node.columnName + " - " + node.xValue
347
- );
348
- return /* @__PURE__ */ jsxs(
349
- Box,
350
- {
351
- children: [
352
- /* @__PURE__ */ jsx(
353
- "div",
354
- {
355
- style: {
356
- color: colorReference[colorReference.findIndex((ref) => {
357
- return ref.title === (useSpecific ? node.columnName + " - " + node.xValue : node.columnName);
358
- })].color
359
- },
360
- children: /* @__PURE__ */ jsx("strong", { children: chart.showAxisXTitle ? node.xValue : chart.showLegend ? node.columnName : "" })
361
- }
362
- ),
363
- chart.showValues && /* @__PURE__ */ jsx("div", { children: node.yValue }),
364
- /* @__PURE__ */ jsx("div", { children: chart.showAxisXTitle && chart.showLegend ? node.columnName : "" }),
365
- nearNodesArray[i + 1] && /* @__PURE__ */ jsx("hr", {})
366
- ]
367
- },
368
- `${node.columnName}_${node.xValue}_${node.yValue}`
369
- );
370
- }),
371
- attachToMousePosition: true
372
- });
373
- }
374
- } else {
375
- ApiaUtil.instance.tooltips.closeAll();
376
- }
377
- } else if (nearNodes.length === 0) {
378
- setCurrentCircle([]);
379
- }
380
- },
381
- children: [
382
- chart.showGrid && /* @__PURE__ */ jsx(
383
- Grid.Grid,
384
- {
385
- top: (typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top) - 20,
386
- left: 0,
387
- xScale,
388
- yScale: actualYScale,
389
- width: innerWidth,
390
- height: innerHeight,
391
- stroke: styles?.grid.stroke,
392
- strokeOpacity: styles?.grid.opacity
393
- }
394
- ),
395
- lines.map((column, i) => {
396
- const currentCoordinates = arrayOrArray(column.sets);
397
- const newColor = setsWithColor.find(
398
- (data) => data.returnColumnsArray[0].columnName === column.name
399
- )?.columnColor;
400
- return /* @__PURE__ */ jsxs(
401
- Group,
402
- {
403
- top: (typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top) - 20,
404
- style: {
405
- opacity: highlightedBar !== "" && highlightedBar !== column.name ? 0.15 : 1,
406
- transition: "opacity 500ms"
407
- },
408
- children: [
409
- /* @__PURE__ */ jsx(
410
- LinePath,
411
- {
412
- curve: allCurves.curveMonotoneX,
413
- data: currentCoordinates,
414
- x: (coordinate) => {
415
- return xScale(getX(coordinate)) ?? 0;
416
- },
417
- y: (coordinate) => actualYScale(getY(coordinate)) ?? 0,
418
- stroke: newColor ?? "black",
419
- strokeWidth: 2,
420
- strokeOpacity: 1,
421
- shapeRendering: "geometricPrecision",
422
- color: "transparent"
423
- }
424
- ),
425
- currentCoordinates.map((coordinate, j) => {
426
- const key = column.name + j.toString();
427
- const realColor = setsWithColor.map((sets) => sets.returnColumnsArray).flat().find(
428
- (set) => set.columnName === column.name && set.key === coordinate.key
429
- )?.color;
430
- return /* @__PURE__ */ jsxs("g", { children: [
431
- chart.showValues && /* @__PURE__ */ jsx(
432
- "text",
433
- {
434
- x: xScale(getX(coordinate)) + 10,
435
- y: actualYScale(getY(coordinate)) - 5,
436
- textAnchor: "middle",
437
- style: {
438
- display: highlightedBar === column.name ? "block" : "none",
439
- opacity: highlightedBar === column.name ? 1 : 0,
440
- transition: "opacity 500ms"
441
- },
442
- children: coordinate.value
443
- }
444
- ),
445
- /* @__PURE__ */ jsx(
446
- Node,
447
- {
448
- color: realColor ?? "black",
449
- coordinate,
450
- currentCircle,
451
- cx: xScale(getX(coordinate)),
452
- cy: actualYScale(getY(coordinate)),
453
- setCurrentCircle,
454
- innerKey: key,
455
- column
456
- }
457
- )
458
- ] }, key);
459
- })
460
- ]
461
- },
462
- `lines-${column.name + i.toString()}`
463
- );
464
- }),
465
- /* @__PURE__ */ jsx(
466
- AxisLeft,
467
- {
468
- scale: actualYScale,
469
- left: effectiveMargin.left,
470
- label: chart.chartType !== "pie2D" && chart.showAxisYTitle ? chart.axisYTitle : "",
471
- tickLabelProps: {
472
- display: chart.showAxisYTitle ? "auto" : "none"
473
- },
474
- tickComponent: (props) => {
475
- let value = Number(props.formattedValue?.replace(",", ""));
476
- let counter = -1;
477
- const units = ["k", "M", "G", "T", "P", "E", "Z", "Y", "R", "Q"];
478
- while (value >= 1e3) {
479
- value = value / 1e3;
480
- counter++;
481
- }
482
- let stringValue = `${value}`;
483
- if (stringValue.length > 3) {
484
- stringValue = stringValue.slice(0, 3);
485
- }
486
- if (stringValue.endsWith(".")) {
487
- stringValue = stringValue.replace(".", "");
488
- }
489
- const newValue = `${stringValue}${counter >= 0 ? units[counter] : ""}`;
490
- return /* @__PURE__ */ jsx(Fragment, { children: chart.showAxisYTitle && /* @__PURE__ */ jsx(
491
- "text",
492
- {
493
- dx: props.dx,
494
- dy: props.dy,
495
- fill: props.fill,
496
- fontSize: props.fontSize,
497
- textAnchor: props.textAnchor,
498
- x: props.x,
499
- y: props.y,
500
- children: newValue
501
- }
502
- ) });
503
- }
504
- }
505
- ),
506
- /* @__PURE__ */ jsx(
507
- AxisBottom,
508
- {
509
- top: innerHeight - (effectiveMargin.top + effectiveMargin.bottom),
510
- scale: xScale,
511
- label: chart.chartType !== "pie2D" && chart.showAxisXTitle ? chart.axisXTitle : "",
512
- tickLabelProps: { display: "none" },
513
- tickLineProps: { display: "none" },
514
- labelOffset: 10
515
- }
516
- )
517
- ]
518
- }
519
- ) }),
520
- /* @__PURE__ */ jsx(Box, { className: "chartLegend__Wrapper", children: chart.showLegend && colorReference.length !== 0 && /* @__PURE__ */ jsxs(Box, { className: "chart__legend__wrapper", children: [
521
- /* @__PURE__ */ jsx(Heading, { as: "h6", children: getLabel("mnuLeyends").text }),
522
- /* @__PURE__ */ jsx(LegendContainer, { id: chartId, references: colorReference })
523
- ] }) })
524
- ] });
525
- };
526
-
527
- export { LineChart };
528
- //# sourceMappingURL=LineChart.js.map