@elliemae/ds-dataviz 3.8.0 → 3.9.0-next.0

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 (110) hide show
  1. package/dist/cjs/graphs/Chart/config/useChart.js +67 -13
  2. package/dist/cjs/graphs/Chart/config/useChart.js.map +2 -2
  3. package/dist/cjs/graphs/Chart/config/useKeyboardNavigation.js +14 -8
  4. package/dist/cjs/graphs/Chart/config/useKeyboardNavigation.js.map +2 -2
  5. package/dist/cjs/graphs/Chart/config/useScales.js +24 -11
  6. package/dist/cjs/graphs/Chart/config/useScales.js.map +2 -2
  7. package/dist/cjs/graphs/Chart/helpers/index.js +2 -2
  8. package/dist/cjs/graphs/Chart/helpers/index.js.map +2 -2
  9. package/dist/cjs/graphs/Chart/parts/Axis/AxisBottom.js +23 -20
  10. package/dist/cjs/graphs/Chart/parts/Axis/AxisBottom.js.map +3 -3
  11. package/dist/cjs/graphs/Chart/parts/Axis/AxisLeft.js +20 -30
  12. package/dist/cjs/graphs/Chart/parts/Axis/AxisLeft.js.map +2 -2
  13. package/dist/cjs/graphs/Chart/parts/Axis/AxisRight.js +4 -9
  14. package/dist/cjs/graphs/Chart/parts/Axis/AxisRight.js.map +2 -2
  15. package/dist/cjs/graphs/Chart/parts/ChartContainer.js +28 -14
  16. package/dist/cjs/graphs/Chart/parts/ChartContainer.js.map +2 -2
  17. package/dist/cjs/graphs/Chart/{series/Pie.js → parts/Labels/BottomLabel.js} +20 -12
  18. package/dist/cjs/graphs/Chart/parts/Labels/BottomLabel.js.map +7 -0
  19. package/dist/cjs/graphs/Chart/parts/Labels/Label.js +52 -0
  20. package/dist/cjs/graphs/Chart/parts/Labels/Label.js.map +7 -0
  21. package/dist/cjs/graphs/Chart/parts/Labels/LeftLabel.js +65 -0
  22. package/dist/cjs/graphs/Chart/parts/Labels/LeftLabel.js.map +7 -0
  23. package/dist/cjs/graphs/Chart/parts/Labels/RightLabel.js +67 -0
  24. package/dist/cjs/graphs/Chart/parts/Labels/RightLabel.js.map +7 -0
  25. package/dist/cjs/graphs/Chart/parts/Legend/BottomLegend.js +28 -30
  26. package/dist/cjs/graphs/Chart/parts/Legend/BottomLegend.js.map +2 -2
  27. package/dist/cjs/graphs/Chart/parts/Legend/LeftLegend.js +15 -20
  28. package/dist/cjs/graphs/Chart/parts/Legend/LeftLegend.js.map +2 -2
  29. package/dist/cjs/graphs/Chart/parts/Legend/LegendItem.js +71 -0
  30. package/dist/cjs/graphs/Chart/parts/Legend/LegendItem.js.map +7 -0
  31. package/dist/cjs/graphs/Chart/parts/Legend/RightLegend.js +32 -25
  32. package/dist/cjs/graphs/Chart/parts/Legend/RightLegend.js.map +2 -2
  33. package/dist/cjs/graphs/Chart/parts/Legend/TopLegend.js +3 -13
  34. package/dist/cjs/graphs/Chart/parts/Legend/TopLegend.js.map +2 -2
  35. package/dist/cjs/graphs/Chart/parts/Scrapper/Scrapper.js +50 -16
  36. package/dist/cjs/graphs/Chart/parts/Scrapper/Scrapper.js.map +2 -2
  37. package/dist/cjs/graphs/Chart/parts/Scrapper/ScrapperLine.js +3 -1
  38. package/dist/cjs/graphs/Chart/parts/Scrapper/ScrapperLine.js.map +2 -2
  39. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapper.js +7 -5
  40. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapper.js.map +2 -2
  41. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js +19 -18
  42. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js.map +2 -2
  43. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollBarX.js.map +2 -2
  44. package/dist/cjs/graphs/Chart/parts/SeriesFactory.js +2 -2
  45. package/dist/cjs/graphs/Chart/parts/SeriesFactory.js.map +2 -2
  46. package/dist/cjs/graphs/Chart/series/Bars.js +12 -8
  47. package/dist/cjs/graphs/Chart/series/Bars.js.map +2 -2
  48. package/dist/cjs/graphs/Chart/series/Line.js +5 -3
  49. package/dist/cjs/graphs/Chart/series/Line.js.map +2 -2
  50. package/dist/cjs/graphs/Chart/series/Points.js +9 -4
  51. package/dist/cjs/graphs/Chart/series/Points.js.map +2 -2
  52. package/dist/cjs/graphs/Chart/series/index.js +0 -1
  53. package/dist/cjs/graphs/Chart/series/index.js.map +2 -2
  54. package/dist/esm/graphs/Chart/config/useChart.js +68 -14
  55. package/dist/esm/graphs/Chart/config/useChart.js.map +2 -2
  56. package/dist/esm/graphs/Chart/config/useKeyboardNavigation.js +14 -8
  57. package/dist/esm/graphs/Chart/config/useKeyboardNavigation.js.map +2 -2
  58. package/dist/esm/graphs/Chart/config/useScales.js +25 -12
  59. package/dist/esm/graphs/Chart/config/useScales.js.map +2 -2
  60. package/dist/esm/graphs/Chart/helpers/index.js +2 -2
  61. package/dist/esm/graphs/Chart/helpers/index.js.map +2 -2
  62. package/dist/esm/graphs/Chart/parts/Axis/AxisBottom.js +24 -21
  63. package/dist/esm/graphs/Chart/parts/Axis/AxisBottom.js.map +3 -3
  64. package/dist/esm/graphs/Chart/parts/Axis/AxisLeft.js +21 -31
  65. package/dist/esm/graphs/Chart/parts/Axis/AxisLeft.js.map +2 -2
  66. package/dist/esm/graphs/Chart/parts/Axis/AxisRight.js +4 -9
  67. package/dist/esm/graphs/Chart/parts/Axis/AxisRight.js.map +2 -2
  68. package/dist/esm/graphs/Chart/parts/ChartContainer.js +29 -15
  69. package/dist/esm/graphs/Chart/parts/ChartContainer.js.map +2 -2
  70. package/dist/esm/graphs/Chart/parts/Labels/BottomLabel.js +28 -0
  71. package/dist/esm/graphs/Chart/parts/Labels/BottomLabel.js.map +7 -0
  72. package/dist/esm/graphs/Chart/parts/Labels/Label.js +26 -0
  73. package/dist/esm/graphs/Chart/parts/Labels/Label.js.map +7 -0
  74. package/dist/esm/graphs/Chart/parts/Labels/LeftLabel.js +39 -0
  75. package/dist/esm/graphs/Chart/parts/Labels/LeftLabel.js.map +7 -0
  76. package/dist/esm/graphs/Chart/parts/Labels/RightLabel.js +41 -0
  77. package/dist/esm/graphs/Chart/parts/Labels/RightLabel.js.map +7 -0
  78. package/dist/esm/graphs/Chart/parts/Legend/BottomLegend.js +28 -30
  79. package/dist/esm/graphs/Chart/parts/Legend/BottomLegend.js.map +2 -2
  80. package/dist/esm/graphs/Chart/parts/Legend/LeftLegend.js +17 -22
  81. package/dist/esm/graphs/Chart/parts/Legend/LeftLegend.js.map +2 -2
  82. package/dist/esm/graphs/Chart/parts/Legend/LegendItem.js +45 -0
  83. package/dist/esm/graphs/Chart/parts/Legend/LegendItem.js.map +7 -0
  84. package/dist/esm/graphs/Chart/parts/Legend/RightLegend.js +33 -26
  85. package/dist/esm/graphs/Chart/parts/Legend/RightLegend.js.map +2 -2
  86. package/dist/esm/graphs/Chart/parts/Legend/TopLegend.js +3 -13
  87. package/dist/esm/graphs/Chart/parts/Legend/TopLegend.js.map +2 -2
  88. package/dist/esm/graphs/Chart/parts/Scrapper/Scrapper.js +51 -17
  89. package/dist/esm/graphs/Chart/parts/Scrapper/Scrapper.js.map +2 -2
  90. package/dist/esm/graphs/Chart/parts/Scrapper/ScrapperLine.js +3 -1
  91. package/dist/esm/graphs/Chart/parts/Scrapper/ScrapperLine.js.map +2 -2
  92. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapper.js +7 -5
  93. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapper.js.map +2 -2
  94. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js +19 -18
  95. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js.map +2 -2
  96. package/dist/esm/graphs/Chart/parts/Scroller/ScrollBarX.js.map +2 -2
  97. package/dist/esm/graphs/Chart/parts/SeriesFactory.js +2 -2
  98. package/dist/esm/graphs/Chart/parts/SeriesFactory.js.map +2 -2
  99. package/dist/esm/graphs/Chart/series/Bars.js +12 -8
  100. package/dist/esm/graphs/Chart/series/Bars.js.map +2 -2
  101. package/dist/esm/graphs/Chart/series/Line.js +5 -3
  102. package/dist/esm/graphs/Chart/series/Line.js.map +2 -2
  103. package/dist/esm/graphs/Chart/series/Points.js +9 -4
  104. package/dist/esm/graphs/Chart/series/Points.js.map +2 -2
  105. package/dist/esm/graphs/Chart/series/index.js +0 -1
  106. package/dist/esm/graphs/Chart/series/index.js.map +2 -2
  107. package/package.json +8 -8
  108. package/dist/cjs/graphs/Chart/series/Pie.js.map +0 -7
  109. package/dist/esm/graphs/Chart/series/Pie.js +0 -20
  110. package/dist/esm/graphs/Chart/series/Pie.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/config/useKeyboardNavigation.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable max-depth */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport { ChartContext } from '../ChartContext';\n\nexport const findInCircularList = (\n list,\n from: number,\n //criteria: (item) => boolean,\n step = 1,\n // eslint-disable-next-line max-params\n): number => {\n for (\n let i = (from + step + list.length) % list.length;\n i !== from && from > -1;\n i = (i + step + list.length) % list.length\n ) {\n if (list[i]) return i;\n }\n return from; // return same item\n};\n\nexport const useKeyboardNavigation = () => {\n const {\n activePoint,\n setActivePoint,\n containerRef,\n groups,\n yScale,\n xScale,\n setXScrollbarPosition,\n containerRatio,\n xScrollbarPosition,\n innerWidth,\n props: { data, xAxis },\n } = useContext(ChartContext);\n\n const [currentFocusedDataset, setCurrentFocusedDataset] = useState(groups[0]);\n\n const currentGroup = useMemo(() => data.find((d) => d.name === currentFocusedDataset), [currentFocusedDataset, data]);\n\n const currentItemIndex = useMemo(\n () => currentGroup.data.findIndex((opt) => opt.key === activePoint),\n [activePoint, currentGroup],\n );\n\n const handleOnFocus: React.FocusEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n if (containerRef?.current === e.target) {\n setActivePoint(currentGroup.data[0].key);\n setXScrollbarPosition(0);\n }\n },\n [containerRef, currentGroup.data, setActivePoint, setXScrollbarPosition],\n );\n\n const handleOnBlur: React.FocusEventHandler<HTMLInputElement> = useCallback(() => {\n setTimeout(() => {\n if (\n !containerRef?.current?.contains(document.activeElement) ||\n containerRef?.current === document.activeElement\n ) {\n setActivePoint('');\n }\n });\n }, [containerRef, setActivePoint]);\n\n const navigateSerie = useCallback(\n (step: number) => {\n const newValue = findInCircularList(\n currentGroup.data.map((d) => d.value.toString()),\n currentItemIndex,\n step,\n );\n setActivePoint(currentGroup.data[newValue].key);\n if (containerRatio > 1) {\n const xValue = xScale(xAxis.cols[currentGroup.data[newValue].position]);\n\n const total = innerWidth * containerRatio;\n if (total <= xValue) {\n setXScrollbarPosition((total - innerWidth) / containerRatio);\n } else if (xValue > xScrollbarPosition * containerRatio + innerWidth)\n setXScrollbarPosition((prev) => prev + 10);\n else if (xValue < xScrollbarPosition * containerRatio) setXScrollbarPosition(xValue / containerRatio);\n }\n },\n [\n containerRatio,\n currentGroup.data,\n currentItemIndex,\n innerWidth,\n setActivePoint,\n setXScrollbarPosition,\n xAxis.cols,\n xScale,\n xScrollbarPosition,\n ],\n );\n\n const changeSerie = useCallback(\n (step: number) => {\n setCurrentFocusedDataset((prev) => {\n const nextGroup = findInCircularList(\n groups,\n groups.findIndex((item) => item === prev),\n step,\n );\n const nextGroupData = data.find((d) => d.name === groups[nextGroup]);\n setActivePoint(nextGroupData.data[currentItemIndex].key);\n return groups[nextGroup];\n });\n },\n [currentItemIndex, data, setActivePoint, groups],\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n if (e.code !== 'Tab') {\n e.preventDefault();\n }\n if (['ArrowLeft', 'ArrowRight'].includes(e.code)) {\n if (yScale.bandwidth) changeSerie(e.code === 'ArrowLeft' ? -1 : 1);\n else navigateSerie(e.code === 'ArrowLeft' ? -1 : 1);\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n if (yScale.bandwidth) navigateSerie(e.code === 'ArrowDown' ? -1 : 1);\n else changeSerie(e.code === 'ArrowDown' ? -1 : 1);\n }\n },\n [changeSerie, navigateSerie, yScale.bandwidth],\n );\n\n return useMemo(\n () => ({ onInputKeyDown, handleOnBlur, handleOnFocus }),\n [handleOnBlur, handleOnFocus, onInputKeyDown],\n );\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable max-depth */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport { ChartContext } from '../ChartContext';\n\nexport const findInCircularList = (\n list,\n from: number,\n //criteria: (item) => boolean,\n step = 1,\n // eslint-disable-next-line max-params\n): number => {\n for (\n let i = (from + step + list.length) % list.length;\n i !== from && from > -1;\n i = (i + step + list.length) % list.length\n ) {\n if (list[i]) return i;\n }\n return from; // return same item\n};\n\nexport const useKeyboardNavigation = () => {\n const {\n activePoint,\n setActivePoint,\n containerRef,\n visibleGroups,\n yScale,\n xScale,\n setXScrollbarPosition,\n containerRatio,\n xScrollbarPosition,\n innerWidth,\n props: { data, xAxis },\n } = useContext(ChartContext);\n\n const [currentFocusedDataset, setCurrentFocusedDataset] = useState(visibleGroups[0]);\n\n const currentGroup = useMemo(() => data.find((d) => d.name === currentFocusedDataset), [currentFocusedDataset, data]);\n\n const currentItemIndex = useMemo(\n () => currentGroup.data.findIndex((opt) => opt.key === activePoint),\n [activePoint, currentGroup],\n );\n\n const handleOnFocus: React.FocusEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n if (containerRef?.current === e.target) {\n setActivePoint(currentGroup.data[0].key);\n setXScrollbarPosition(0);\n }\n },\n [containerRef, currentGroup.data, setActivePoint, setXScrollbarPosition],\n );\n\n const handleOnBlur: React.FocusEventHandler<HTMLInputElement> = useCallback(() => {\n setTimeout(() => {\n if (\n !containerRef?.current?.contains(document.activeElement) ||\n containerRef?.current === document.activeElement\n ) {\n setActivePoint('');\n }\n });\n }, [containerRef, setActivePoint]);\n\n const navigateSerie = useCallback(\n (step: number) => {\n const newValue = findInCircularList(\n currentGroup.data.map((d) => d.value.toString()),\n currentItemIndex,\n step,\n );\n setActivePoint(currentGroup.data[newValue].key);\n if (containerRatio > 1) {\n const xValue = xScale(xAxis.cols[currentGroup.data[newValue].position]);\n const barWidth = innerWidth / containerRatio;\n const total = innerWidth * containerRatio;\n if (total <= xValue) {\n // to go from the first to last\n setXScrollbarPosition((total - innerWidth) / containerRatio);\n } else if (xValue > xScrollbarPosition * containerRatio + innerWidth)\n // if is not visible we move the scroll to the next best position\n setXScrollbarPosition((prev) => {\n const nextPosition = prev + (xValue / containerRatio - prev);\n if (nextPosition + barWidth > innerWidth) return innerWidth - barWidth;\n return nextPosition;\n });\n // move backwards\n else if (xValue < xScrollbarPosition * containerRatio) setXScrollbarPosition(xValue / containerRatio);\n }\n },\n [\n containerRatio,\n currentGroup.data,\n currentItemIndex,\n innerWidth,\n setActivePoint,\n setXScrollbarPosition,\n xAxis.cols,\n xScale,\n xScrollbarPosition,\n ],\n );\n\n const changeSerie = useCallback(\n (step: number) => {\n setCurrentFocusedDataset((prev) => {\n const nextGroup = findInCircularList(\n visibleGroups,\n visibleGroups.findIndex((item) => item === prev),\n step,\n );\n const nextGroupData = data.find((d) => d.name === visibleGroups[nextGroup]);\n setActivePoint(nextGroupData.data[currentItemIndex].key);\n return visibleGroups[nextGroup];\n });\n },\n [currentItemIndex, data, setActivePoint, visibleGroups],\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n if (e.code !== 'Tab') {\n e.preventDefault();\n }\n if (['ArrowLeft', 'ArrowRight'].includes(e.code)) {\n if (yScale.bandwidth) changeSerie(e.code === 'ArrowLeft' ? -1 : 1);\n else navigateSerie(e.code === 'ArrowLeft' ? -1 : 1);\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n if (yScale.bandwidth) navigateSerie(e.code === 'ArrowDown' ? -1 : 1);\n else changeSerie(e.code === 'ArrowDown' ? -1 : 1);\n }\n },\n [changeSerie, navigateSerie, yScale.bandwidth],\n );\n\n return useMemo(\n () => ({ onInputKeyDown, handleOnBlur, handleOnFocus }),\n [handleOnBlur, handleOnFocus, onInputKeyDown],\n );\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { useMemo, useCallback } from "react";
3
- import { max, min, scaleLinear, scaleBand, scaleTime, scaleOrdinal, scaleLog } from "d3";
3
+ import { max, min, scaleLinear, scaleBand, scaleUtc, scaleOrdinal, scaleLog } from "d3";
4
4
  import { getStackedIndex } from "../helpers";
5
5
  import { COLOR_PALLET } from "../helpers/colorPallet";
6
6
  const useScales = ({
@@ -18,13 +18,23 @@ const useScales = ({
18
18
  const getLinearDomain = useCallback(
19
19
  (axis, axisString, withStackData = true) => {
20
20
  const begin = axis?.beginAtZero ? 0 : void 0;
21
- const data = series.filter((serie) => {
22
- if (serie.scale === "y2") {
23
- return serie.scale === axisString;
21
+ const data = currentData.filter((serie) => {
22
+ if (serie.isHidden)
23
+ return false;
24
+ if (serie.scale === axisString) {
25
+ return true;
24
26
  }
25
- return true;
27
+ if (!serie.scale && ["y", "x"].includes(axisString)) {
28
+ return true;
29
+ }
30
+ return false;
26
31
  }).map(
27
- (serie) => typeof serie.data[0] === "number" ? serie.data : serie.data.map((coord) => coord[axisString])
32
+ (serie) => serie.data.map((datum) => {
33
+ if (typeof datum.value === "number") {
34
+ return datum.value;
35
+ }
36
+ return datum.value[axisString];
37
+ })
28
38
  );
29
39
  const stack = withStackData && [
30
40
  min(stackedData.flat(), (layer) => min(layer, (sequence) => sequence[1])),
@@ -32,11 +42,14 @@ const useScales = ({
32
42
  ];
33
43
  const minRange = min([begin, min(data.flat()), stack[0]]);
34
44
  const maxRange = max([max(data.flat()), stack[1]]);
35
- return [minRange, maxRange];
45
+ return [
46
+ minRange - (maxRange - minRange) * (axis.domainPadding ?? 0),
47
+ maxRange + (maxRange - minRange) * (axis.domainPadding ?? 0)
48
+ ];
36
49
  },
37
- [series, stackedData]
50
+ [currentData, stackedData]
38
51
  );
39
- const getScaleTime = (domain, range) => scaleTime().domain([min(domain) ?? 0, max(domain) ?? 0]).range(range);
52
+ const getScaleTime = (domain, range) => scaleUtc().domain([min(domain) ?? 0, max(domain) ?? 0]).range(range);
40
53
  const getScaleBand = (domain, range, padding = 0.2) => scaleBand().domain(domain).range(range).padding(padding).paddingOuter(0.1);
41
54
  const getScaleLinear = (domain, range) => scaleLinear().domain(domain).range(range);
42
55
  const getScaleLog = (domain, range) => scaleLog().domain(domain).range(range);
@@ -47,8 +60,8 @@ const useScales = ({
47
60
  const withStackData = yAxis?.type === "band";
48
61
  return getScaleLinear(getLinearDomain(xAxis, "x", withStackData), [0, rangeTo], xAxis.padding);
49
62
  }
50
- return getScaleBand(getBandDomain(xAxis), [0, innerWidth], xAxis.padding);
51
- }, [getBandDomain, getLinearDomain, innerWidth, rangeTo, xAxis, yAxis?.type]);
63
+ return getScaleBand(getBandDomain(xAxis), [0, rangeTo], xAxis.padding);
64
+ }, [getBandDomain, getLinearDomain, rangeTo, xAxis, yAxis?.type]);
52
65
  const yScale = useMemo(() => {
53
66
  if (yAxis?.type === "band")
54
67
  return getScaleBand(getBandDomain(yAxis), [innerHeight, 0], yAxis.padding);
@@ -67,7 +80,7 @@ const useScales = ({
67
80
  }, [getBandDomain, getLinearDomain, innerHeight, y2Axis]);
68
81
  const colorScale = scaleOrdinal().domain(groups).range(currentData.map((d) => COLOR_PALLET[d.color] ?? d.color));
69
82
  const subgroupsWithBars = currentData.filter(
70
- (serie) => serie.type === "bar" && !(stackedSeries?.length && getStackedIndex(stackedSeries, serie.name) > -1)
83
+ (serie) => serie.type === "bar" && !(stackedSeries?.length && getStackedIndex(stackedSeries, serie.name) > -1) && !serie.isHidden
71
84
  ).map((serie) => serie.name);
72
85
  const getBandwidth = useCallback(() => {
73
86
  if (xScale.bandwidth)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/config/useScales.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable indent */\nimport { useMemo, useCallback } from 'react';\nimport { max, min, scaleLinear, scaleBand, scaleTime, scaleOrdinal, scaleLog, Series, ScaleBand } from 'd3';\nimport { DSChartT } from '../react-desc-prop-types';\nimport { getStackedIndex } from '../helpers';\nimport { COLOR_PALLET } from '../helpers/colorPallet';\ninterface UseScales {\n props: DSChartT.Props;\n innerHeight: number;\n innerWidth: number;\n stackedData: Series<\n {\n [key: string]: number;\n },\n string\n >[][];\n currentData: {\n key: string;\n group: string;\n type: DSChartT.SerieTypeT;\n scale?: string;\n color: string;\n data: {\n key: string;\n value: number | { x: number; y: number };\n position: number;\n }[];\n }[];\n groups: string[];\n}\nexport const useScales = ({\n props,\n innerHeight,\n innerWidth,\n stackedData,\n currentData,\n groups,\n containerRatio,\n}: UseScales) => {\n const { series, xAxis, yAxis, y2Axis, groups: stackedSeries, types } = props;\n\n const rangeTo = innerWidth * (containerRatio ?? 1);\n const getBandDomain = useCallback((axis: DSChartT.AxisT) => axis.cols ?? [...series[0].data.keys()], [series]);\n\n const getLinearDomain = useCallback(\n (axis?: DSChartT.AxisT, axisString?: string, withStackData = true) => {\n // const data2 = data ? extent(data) : [];\n const begin = axis?.beginAtZero ? 0 : undefined;\n const data = series\n .filter((serie) => {\n if (serie.scale === 'y2') {\n return serie.scale === axisString;\n }\n return true;\n })\n .map((serie) =>\n typeof serie.data[0] === 'number' ? serie.data : serie.data.map((coord) => coord[axisString]),\n );\n\n const stack = withStackData && [\n min(stackedData.flat(), (layer) => min(layer, (sequence) => sequence[1])),\n max(stackedData.flat(), (layer) => max(layer, (sequence) => sequence[1])),\n ];\n const minRange = min([begin, min(data.flat()), stack[0]]);\n const maxRange = max([max(data.flat()), stack[1]]);\n // @TODO altering the domain to get padding right and left on axis\n // we set a pad on the x axis, we can create a prop to set this constant\n // return [\n // minRange - (axisString === 'x' ? (maxRange - minRange) * 0.05 : 0),\n // maxRange + (axisString === 'x' ? (maxRange - minRange) * 0.05 : 0),\n // ];\n return [minRange, maxRange];\n },\n [series, stackedData],\n );\n\n const getScaleTime = (domain: Date[], range: number[]) =>\n scaleTime()\n .domain([min(domain) ?? 0, max(domain) ?? 0])\n .range(range);\n\n const getScaleBand = (domain: string[], range: number[], padding = 0.2) =>\n scaleBand().domain(domain).range(range).padding(padding).paddingOuter(0.1);\n const getScaleLinear = (domain: number[], range: number[]) => scaleLinear().domain(domain).range(range);\n const getScaleLog = (domain: number[], range: number[]) => scaleLog().domain(domain).range(range);\n\n const xScale = useMemo(() => {\n if (xAxis?.type === 'time') return getScaleTime(xAxis.cols as Date[], [0, rangeTo]);\n if (xAxis?.type === 'linear' || yAxis?.type === 'band') {\n // @TODO is this really a thing ?\n const withStackData = yAxis?.type === 'band';\n return getScaleLinear(getLinearDomain(xAxis, 'x', withStackData) as number[], [0, rangeTo], xAxis.padding);\n }\n\n return getScaleBand(getBandDomain(xAxis) as string[], [0, innerWidth], xAxis.padding);\n }, [getBandDomain, getLinearDomain, innerWidth, rangeTo, xAxis, yAxis?.type]);\n\n const yScale = useMemo(() => {\n if (yAxis?.type === 'band') return getScaleBand(getBandDomain(yAxis), [innerHeight, 0], yAxis.padding);\n if (yAxis?.type === 'log') return getScaleLog(getLinearDomain(yAxis, 'y'), [innerHeight, 0]);\n return getScaleLinear(getLinearDomain(yAxis, 'y'), [innerHeight, 0]);\n }, [getBandDomain, getLinearDomain, innerHeight, yAxis]);\n\n const y2Scale = useMemo(() => {\n if (!y2Axis) return null;\n if (y2Axis?.type === 'band') return getScaleBand(getBandDomain(y2Axis), [innerHeight, 0], y2Scale.padding);\n if (y2Axis?.type === 'log') return getScaleLog(getLinearDomain(y2Axis, 'y2'), [innerHeight, 0]);\n return getScaleLinear(getLinearDomain(y2Axis, 'y2'), [innerHeight, 0]);\n }, [getBandDomain, getLinearDomain, innerHeight, y2Axis]);\n\n const colorScale = scaleOrdinal()\n .domain(groups)\n .range(currentData.map((d) => COLOR_PALLET[d.color] ?? d.color));\n // get only groups bars to calculate the subgroup scale\n\n const subgroupsWithBars = currentData\n .filter(\n (serie) => serie.type === 'bar' && !(stackedSeries?.length && getStackedIndex(stackedSeries, serie.name) > -1),\n )\n .map((serie) => serie.name);\n\n const getBandwidth = useCallback(() => {\n if ((xScale as ScaleBand<string>).bandwidth) return (xScale as ScaleBand<string>).bandwidth();\n if ((yScale as ScaleBand<string>).bandwidth) return (yScale as ScaleBand<string>).bandwidth();\n return innerWidth / xScale.ticks().length / 2;\n }, [innerWidth, xScale, yScale]);\n\n if (stackedSeries?.length) {\n stackedSeries.forEach((_, i) => subgroupsWithBars.push(`stacked-data-${i}`));\n }\n\n const subGroupScale = getBandwidth()\n ? scaleBand()\n .domain(subgroupsWithBars)\n .range([0, getBandwidth() ?? 0])\n .paddingInner(0.55)\n .padding(0.2)\n : null;\n\n return { xScale, y2Scale, yScale, subGroupScale, colorScale, getBandwidth };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable indent */\nimport { useMemo, useCallback } from 'react';\nimport { max, min, scaleLinear, scaleBand, scaleUtc, scaleOrdinal, scaleLog, Series, ScaleBand } from 'd3';\nimport { DSChartT } from '../react-desc-prop-types';\nimport { getStackedIndex } from '../helpers';\nimport { COLOR_PALLET } from '../helpers/colorPallet';\ninterface UseScales {\n props: DSChartT.Props;\n innerHeight: number;\n innerWidth: number;\n stackedData: Series<\n {\n [key: string]: number;\n },\n string\n >[][];\n currentData: {\n key: string;\n group: string;\n type: DSChartT.SerieTypeT;\n scale?: string;\n color: string;\n data: {\n key: string;\n value: number | { x: number; y: number };\n position: number;\n }[];\n }[];\n groups: string[];\n}\nexport const useScales = ({\n props,\n innerHeight,\n innerWidth,\n stackedData,\n currentData,\n groups,\n containerRatio,\n}: UseScales) => {\n const { series, xAxis, yAxis, y2Axis, groups: stackedSeries, types } = props;\n\n const rangeTo = innerWidth * (containerRatio ?? 1);\n const getBandDomain = useCallback((axis: DSChartT.AxisT) => axis.cols ?? [...series[0].data.keys()], [series]);\n\n const getLinearDomain = useCallback(\n (axis?: DSChartT.AxisT, axisString?: string, withStackData = true) => {\n // const data2 = data ? extent(data) : [];\n const begin = axis?.beginAtZero ? 0 : undefined;\n const data = currentData\n .filter((serie) => {\n if (serie.isHidden) return false;\n if (serie.scale === axisString) {\n return true;\n }\n if (!serie.scale && ['y', 'x'].includes(axisString)) {\n return true;\n }\n return false;\n })\n .map(\n (serie) =>\n serie.data.map((datum) => {\n if (typeof datum.value === 'number') {\n return datum.value;\n }\n return datum.value[axisString];\n }),\n\n // ? serie.data.map((datum) => datum.value).flat()\n // : serie.data.map((datum) => datum.value.map((coord) => coord[axisString]).flat()),\n );\n\n const stack = withStackData && [\n min(stackedData.flat(), (layer) => min(layer, (sequence) => sequence[1])),\n max(stackedData.flat(), (layer) => max(layer, (sequence) => sequence[1])),\n ];\n const minRange = min([begin, min(data.flat()), stack[0]]);\n const maxRange = max([max(data.flat()), stack[1]]);\n // @TODO altering the domain to get padding right and left on axis\n // we set a pad on the x axis, we can create a prop to set this constant\n return [\n minRange - (maxRange - minRange) * (axis.domainPadding ?? 0),\n maxRange + (maxRange - minRange) * (axis.domainPadding ?? 0),\n ];\n // return [minRange, maxRange];\n },\n [currentData, stackedData],\n );\n\n const getScaleTime = (domain: Date[], range: number[]) =>\n scaleUtc()\n .domain([min(domain) ?? 0, max(domain) ?? 0])\n .range(range);\n\n const getScaleBand = (domain: string[], range: number[], padding = 0.2) =>\n scaleBand().domain(domain).range(range).padding(padding).paddingOuter(0.1);\n const getScaleLinear = (domain: number[], range: number[]) => scaleLinear().domain(domain).range(range);\n const getScaleLog = (domain: number[], range: number[]) => scaleLog().domain(domain).range(range);\n\n const xScale = useMemo(() => {\n if (xAxis?.type === 'time') return getScaleTime(xAxis.cols as Date[], [0, rangeTo]);\n if (xAxis?.type === 'linear' || yAxis?.type === 'band') {\n // @TODO is this really a thing ?\n const withStackData = yAxis?.type === 'band';\n return getScaleLinear(getLinearDomain(xAxis, 'x', withStackData) as number[], [0, rangeTo], xAxis.padding);\n }\n\n return getScaleBand(getBandDomain(xAxis) as string[], [0, rangeTo], xAxis.padding);\n }, [getBandDomain, getLinearDomain, rangeTo, xAxis, yAxis?.type]);\n\n const yScale = useMemo(() => {\n if (yAxis?.type === 'band') return getScaleBand(getBandDomain(yAxis), [innerHeight, 0], yAxis.padding);\n if (yAxis?.type === 'log') return getScaleLog(getLinearDomain(yAxis, 'y'), [innerHeight, 0]);\n return getScaleLinear(getLinearDomain(yAxis, 'y'), [innerHeight, 0]);\n }, [getBandDomain, getLinearDomain, innerHeight, yAxis]);\n\n const y2Scale = useMemo(() => {\n if (!y2Axis) return null;\n if (y2Axis?.type === 'band') return getScaleBand(getBandDomain(y2Axis), [innerHeight, 0], y2Scale.padding);\n if (y2Axis?.type === 'log') return getScaleLog(getLinearDomain(y2Axis, 'y2'), [innerHeight, 0]);\n return getScaleLinear(getLinearDomain(y2Axis, 'y2'), [innerHeight, 0]);\n }, [getBandDomain, getLinearDomain, innerHeight, y2Axis]);\n\n const colorScale = scaleOrdinal()\n .domain(groups)\n .range(currentData.map((d) => COLOR_PALLET[d.color] ?? d.color));\n // get only groups bars to calculate the subgroup scale\n\n const subgroupsWithBars = currentData\n .filter(\n (serie) =>\n serie.type === 'bar' &&\n !(stackedSeries?.length && getStackedIndex(stackedSeries, serie.name) > -1) &&\n !serie.isHidden,\n )\n .map((serie) => serie.name);\n\n const getBandwidth = useCallback(() => {\n if ((xScale as ScaleBand<string>).bandwidth) return (xScale as ScaleBand<string>).bandwidth();\n if ((yScale as ScaleBand<string>).bandwidth) return (yScale as ScaleBand<string>).bandwidth();\n return innerWidth / xScale.ticks().length / 2;\n }, [innerWidth, xScale, yScale]);\n\n if (stackedSeries?.length) {\n stackedSeries.forEach((_, i) => subgroupsWithBars.push(`stacked-data-${i}`));\n }\n\n const subGroupScale = getBandwidth()\n ? scaleBand()\n .domain(subgroupsWithBars)\n .range([0, getBandwidth() ?? 0])\n .paddingInner(0.55)\n .padding(0.2)\n : null;\n\n return { xScale, y2Scale, yScale, subGroupScale, colorScale, getBandwidth };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -22,11 +22,11 @@ const stackData = (groupsStacked, series) => {
22
22
  if (!groupsStacked)
23
23
  return [];
24
24
  groupsStacked?.forEach((g) => {
25
- const seriesStacked = series.filter((serie) => g.includes(serie.name));
25
+ const seriesStacked = series.filter((serie) => g.includes(serie.name) && !serie.isHidden);
26
26
  const keys = seriesStacked.map((serie) => serie.name);
27
27
  const stackData2 = [];
28
28
  seriesStacked.forEach((serie) => {
29
- serie.data.forEach((d, i) => {
29
+ serie.originalData.data.forEach((d, i) => {
30
30
  if (typeof stackData2[i] === "object") {
31
31
  stackData2[i][serie.name] = typeof d === "number" ? d : d.y;
32
32
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/helpers/index.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { stack } from 'd3';\nimport { values } from 'lodash';\n\nexport const getStackedIndex = (groups: string[][], serie: string) => {\n for (let i = 0; i < groups.length; i += 1) {\n for (let j = 0; j < groups[i].length; j += 1) {\n if (groups[i][j] === serie) return i;\n }\n }\n return -1;\n};\n\nexport const getStackedData = (stackedData, serie) => {\n for (let i = 0; i < stackedData?.length; i += 1) {\n const data = stackedData[i].find((d) => d.key === serie.name);\n if (data) return data;\n }\n return false;\n};\n\nexport const stackData = (groupsStacked, series) => {\n const aux = [];\n if (!groupsStacked) return [];\n groupsStacked?.forEach((g) => {\n const seriesStacked = series.filter((serie) => g.includes(serie.name));\n const keys = seriesStacked.map((serie) => serie.name);\n const stackData: Array<{ [key: string]: number }> = [];\n seriesStacked.forEach((serie) => {\n serie.data.forEach((d, i) => {\n if (typeof stackData[i] === 'object') {\n stackData[i][serie.name] = typeof d === 'number' ? d : d.y;\n }\n stackData[i] = { ...stackData[i], [serie.name]: typeof d === 'number' ? d : d.y };\n });\n });\n\n aux.push(stack().keys(keys)(stackData));\n });\n return aux;\n};\n\nexport const getSeriesValuesAt = (data, point) => {\n const seriesValuesAtPoint = {};\n data.forEach((serie) => {\n serie.data.forEach((datum) => {\n if (datum.value === point) {\n seriesValuesAtPoint[serie.name] = seriesValuesAtPoint[serie.name]\n ? [...seriesValuesAtPoint[serie.name], point]\n : [point];\n }\n });\n });\n return seriesValuesAtPoint;\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,aAAa;AAGf,MAAM,kBAAkB,CAAC,QAAoB,UAAkB;AACpE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,aAAS,IAAI,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK,GAAG;AAC5C,UAAI,OAAO,GAAG,OAAO;AAAO,eAAO;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,aAAa,UAAU;AACpD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;AAC/C,UAAM,OAAO,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,MAAM,IAAI;AAC5D,QAAI;AAAM,aAAO;AAAA,EACnB;AACA,SAAO;AACT;AAEO,MAAM,YAAY,CAAC,eAAe,WAAW;AAClD,QAAM,MAAM,CAAC;AACb,MAAI,CAAC;AAAe,WAAO,CAAC;AAC5B,iBAAe,QAAQ,CAAC,MAAM;AAC5B,UAAM,gBAAgB,OAAO,OAAO,CAAC,UAAU,EAAE,SAAS,MAAM,IAAI,CAAC;AACrE,UAAM,OAAO,cAAc,IAAI,CAAC,UAAU,MAAM,IAAI;AACpD,UAAMA,aAA8C,CAAC;AACrD,kBAAc,QAAQ,CAAC,UAAU;AAC/B,YAAM,KAAK,QAAQ,CAAC,GAAG,MAAM;AAC3B,YAAI,OAAOA,WAAU,OAAO,UAAU;AACpC,UAAAA,WAAU,GAAG,MAAM,QAAQ,OAAO,MAAM,WAAW,IAAI,EAAE;AAAA,QAC3D;AACA,QAAAA,WAAU,KAAK,EAAE,GAAGA,WAAU,IAAI,CAAC,MAAM,OAAO,OAAO,MAAM,WAAW,IAAI,EAAE,EAAE;AAAA,MAClF,CAAC;AAAA,IACH,CAAC;AAED,QAAI,KAAK,MAAM,EAAE,KAAK,IAAI,EAAEA,UAAS,CAAC;AAAA,EACxC,CAAC;AACD,SAAO;AACT;AAEO,MAAM,oBAAoB,CAAC,MAAM,UAAU;AAChD,QAAM,sBAAsB,CAAC;AAC7B,OAAK,QAAQ,CAAC,UAAU;AACtB,UAAM,KAAK,QAAQ,CAAC,UAAU;AAC5B,UAAI,MAAM,UAAU,OAAO;AACzB,4BAAoB,MAAM,QAAQ,oBAAoB,MAAM,QACxD,CAAC,GAAG,oBAAoB,MAAM,OAAO,KAAK,IAC1C,CAAC,KAAK;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { stack } from 'd3';\nimport { values } from 'lodash';\n\nexport const getStackedIndex = (groups: string[][], serie: string) => {\n for (let i = 0; i < groups.length; i += 1) {\n for (let j = 0; j < groups[i].length; j += 1) {\n if (groups[i][j] === serie) return i;\n }\n }\n return -1;\n};\n\nexport const getStackedData = (stackedData, serie) => {\n for (let i = 0; i < stackedData?.length; i += 1) {\n const data = stackedData[i].find((d) => d.key === serie.name);\n if (data) return data;\n }\n return false;\n};\n\nexport const stackData = (groupsStacked, series) => {\n const aux = [];\n if (!groupsStacked) return [];\n groupsStacked?.forEach((g) => {\n const seriesStacked = series.filter((serie) => g.includes(serie.name) && !serie.isHidden);\n const keys = seriesStacked.map((serie) => serie.name);\n const stackData: Array<{ [key: string]: number }> = [];\n seriesStacked.forEach((serie) => {\n serie.originalData.data.forEach((d, i) => {\n if (typeof stackData[i] === 'object') {\n stackData[i][serie.name] = typeof d === 'number' ? d : d.y;\n }\n stackData[i] = { ...stackData[i], [serie.name]: typeof d === 'number' ? d : d.y };\n });\n });\n\n aux.push(stack().keys(keys)(stackData));\n });\n return aux;\n};\n\nexport const getSeriesValuesAt = (data, point) => {\n const seriesValuesAtPoint = {};\n data.forEach((serie) => {\n serie.data.forEach((datum) => {\n if (datum.value === point) {\n seriesValuesAtPoint[serie.name] = seriesValuesAtPoint[serie.name]\n ? [...seriesValuesAtPoint[serie.name], point]\n : [point];\n }\n });\n });\n return seriesValuesAtPoint;\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,aAAa;AAGf,MAAM,kBAAkB,CAAC,QAAoB,UAAkB;AACpE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,aAAS,IAAI,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK,GAAG;AAC5C,UAAI,OAAO,GAAG,OAAO;AAAO,eAAO;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,aAAa,UAAU;AACpD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;AAC/C,UAAM,OAAO,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,MAAM,IAAI;AAC5D,QAAI;AAAM,aAAO;AAAA,EACnB;AACA,SAAO;AACT;AAEO,MAAM,YAAY,CAAC,eAAe,WAAW;AAClD,QAAM,MAAM,CAAC;AACb,MAAI,CAAC;AAAe,WAAO,CAAC;AAC5B,iBAAe,QAAQ,CAAC,MAAM;AAC5B,UAAM,gBAAgB,OAAO,OAAO,CAAC,UAAU,EAAE,SAAS,MAAM,IAAI,KAAK,CAAC,MAAM,QAAQ;AACxF,UAAM,OAAO,cAAc,IAAI,CAAC,UAAU,MAAM,IAAI;AACpD,UAAMA,aAA8C,CAAC;AACrD,kBAAc,QAAQ,CAAC,UAAU;AAC/B,YAAM,aAAa,KAAK,QAAQ,CAAC,GAAG,MAAM;AACxC,YAAI,OAAOA,WAAU,OAAO,UAAU;AACpC,UAAAA,WAAU,GAAG,MAAM,QAAQ,OAAO,MAAM,WAAW,IAAI,EAAE;AAAA,QAC3D;AACA,QAAAA,WAAU,KAAK,EAAE,GAAGA,WAAU,IAAI,CAAC,MAAM,OAAO,OAAO,MAAM,WAAW,IAAI,EAAE,EAAE;AAAA,MAClF,CAAC;AAAA,IACH,CAAC;AAED,QAAI,KAAK,MAAM,EAAE,KAAK,IAAI,EAAEA,UAAS,CAAC;AAAA,EACxC,CAAC;AACD,SAAO;AACT;AAEO,MAAM,oBAAoB,CAAC,MAAM,UAAU;AAChD,QAAM,sBAAsB,CAAC;AAC7B,OAAK,QAAQ,CAAC,UAAU;AACtB,UAAM,KAAK,QAAQ,CAAC,UAAU;AAC5B,UAAI,MAAM,UAAU,OAAO;AACzB,4BAAoB,MAAM,QAAQ,oBAAoB,MAAM,QACxD,CAAC,GAAG,oBAAoB,MAAM,OAAO,KAAK,IAC1C,CAAC,KAAK;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT;",
6
6
  "names": ["stackData"]
7
7
  }
@@ -1,12 +1,12 @@
1
1
  import * as React from "react";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useContext, useEffect, useRef } from "react";
3
+ import React2, { useContext, useMemo, useEffect, useRef } from "react";
4
4
  import { select, axisBottom, timeFormat } from "d3";
5
- import { StyledAxis, StyledGrid, StyledAxisLabel } from "../../styles";
5
+ import { StyledAxis, StyledGrid } from "../../styles";
6
6
  import { ChartContext } from "../../ChartContext";
7
- const AxisBottom = () => {
7
+ const AxisBottom = React2.memo(() => {
8
8
  const {
9
- props: { xAxis, xAxisLabelOffset = 50 },
9
+ props: { xAxis, width },
10
10
  innerHeight,
11
11
  innerWidth,
12
12
  xScale,
@@ -15,13 +15,16 @@ const AxisBottom = () => {
15
15
  } = useContext(ChartContext);
16
16
  const axisRef = useRef();
17
17
  const gridRef = useRef();
18
- const ticks = xScale.ticks?.();
18
+ const ticks = xScale.ticks?.(xAxis.tickCount ?? width / 80);
19
19
  useEffect(() => {
20
20
  const grid = axisBottom(xScale).tickSize(xAxis?.showGrid ? -innerHeight : 0).tickFormat("").tickSizeOuter(0);
21
21
  const axis = axisBottom(xScale);
22
22
  if (xAxis.tickValues && ticks) {
23
23
  const finalTicks = xAxis.overwriteTicks ? xAxis.tickValues : [...ticks, ...xAxis.tickValues];
24
24
  axis.tickValues(finalTicks);
25
+ } else {
26
+ axis.tickValues(ticks);
27
+ grid.tickValues(ticks);
25
28
  }
26
29
  if (xAxis.tickFormat) {
27
30
  if (typeof xAxis.tickFormat === "string") {
@@ -34,33 +37,33 @@ const AxisBottom = () => {
34
37
  }
35
38
  select(gridRef.current).call(grid);
36
39
  select(axisRef.current).call(axis);
40
+ if (xAxis.hideAxis) {
41
+ select(axisRef.current).call((g) => {
42
+ g.selectAll(".tick").remove();
43
+ g.select(".domain").remove();
44
+ });
45
+ select(gridRef.current).call((g) => g.select(".domain").remove());
46
+ }
37
47
  }, [innerHeight, ticks, xAxis.overwriteTicks, xAxis?.showGrid, xAxis.tickFormat, xAxis.tickValues, xScale]);
48
+ const marginTop = useMemo(
49
+ () => axisRef.current?.getBoundingClientRect().height ? axisRef.current?.getBoundingClientRect().height - 20 : 0,
50
+ []
51
+ );
38
52
  return /* @__PURE__ */ jsxs("g", {
39
53
  transform: `translate(0,${innerHeight})`,
40
54
  children: [
41
- /* @__PURE__ */ jsxs("g", {
55
+ /* @__PURE__ */ jsx("g", {
42
56
  ref: setAxisBottomHeight,
43
- children: [
44
- /* @__PURE__ */ jsx("g", {
45
- transform: `translate(${innerWidth / 2},${axisRef.current?.getBoundingClientRect().height - 20})`,
46
- children: /* @__PURE__ */ jsx(StyledAxisLabel, {
47
- className: "axis-label",
48
- textAnchor: "middle",
49
- dy: 50,
50
- children: xAxis?.label
51
- })
52
- }),
53
- /* @__PURE__ */ jsx(StyledAxis, {
54
- ref: axisRef
55
- })
56
- ]
57
+ children: /* @__PURE__ */ jsx(StyledAxis, {
58
+ ref: axisRef
59
+ })
57
60
  }),
58
61
  /* @__PURE__ */ jsx(StyledGrid, {
59
62
  ref: gridRef
60
63
  })
61
64
  ]
62
65
  });
63
- };
66
+ });
64
67
  export {
65
68
  AxisBottom
66
69
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/graphs/Chart/parts/Axis/AxisBottom.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useEffect, useRef } from 'react';\nimport { select, axisBottom, timeFormat } from 'd3';\nimport { StyledAxis, StyledGrid, StyledAxisLabel } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\n\nexport const AxisBottom = () => {\n const {\n props: { xAxis, xAxisLabelOffset = 50 },\n innerHeight,\n innerWidth,\n xScale,\n setAxisBottomHeight,\n tickOffset = 3,\n } = useContext(ChartContext);\n\n const axisRef = useRef();\n const gridRef = useRef();\n const ticks = xScale.ticks?.();\n useEffect(() => {\n const grid = axisBottom(xScale)\n .tickSize(xAxis?.showGrid ? -innerHeight : 0)\n .tickFormat('')\n .tickSizeOuter(0);\n\n const axis = axisBottom(xScale);\n\n if (xAxis.tickValues && ticks) {\n const finalTicks = xAxis.overwriteTicks ? xAxis.tickValues : [...ticks, ...xAxis.tickValues];\n axis.tickValues(finalTicks);\n }\n\n if (xAxis.tickFormat) {\n if (typeof xAxis.tickFormat === 'string') {\n const formatGenerator = timeFormat(xAxis.tickFormat);\n axis.tickFormat((d) => formatGenerator(d));\n }\n if (typeof xAxis.tickFormat === 'function') {\n axis.tickFormat(xAxis.tickFormat);\n }\n }\n\n select(gridRef.current).call(grid);\n select(axisRef.current).call(axis);\n }, [innerHeight, ticks, xAxis.overwriteTicks, xAxis?.showGrid, xAxis.tickFormat, xAxis.tickValues, xScale]);\n\n return (\n <g transform={`translate(0,${innerHeight})`}>\n <g ref={setAxisBottomHeight}>\n <g transform={`translate(${innerWidth / 2},${axisRef.current?.getBoundingClientRect().height - 20 ?? 0})`}>\n <StyledAxisLabel className=\"axis-label\" textAnchor=\"middle\" dy={50}>\n {xAxis?.label}\n </StyledAxisLabel>\n </g>\n <StyledAxis ref={axisRef}></StyledAxis>\n </g>\n\n <StyledGrid ref={gridRef}></StyledGrid>\n </g>\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAY,WAAW,cAAc;AACrD,SAAS,QAAQ,YAAY,kBAAkB;AAC/C,SAAS,YAAY,YAAY,uBAAuB;AACxD,SAAS,oBAAoB;AAEtB,MAAM,aAAa,MAAM;AAC9B,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,mBAAmB,GAAG;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf,IAAI,WAAW,YAAY;AAE3B,QAAM,UAAU,OAAO;AACvB,QAAM,UAAU,OAAO;AACvB,QAAM,QAAQ,OAAO,QAAQ;AAC7B,YAAU,MAAM;AACd,UAAM,OAAO,WAAW,MAAM,EAC3B,SAAS,OAAO,WAAW,CAAC,cAAc,CAAC,EAC3C,WAAW,EAAE,EACb,cAAc,CAAC;AAElB,UAAM,OAAO,WAAW,MAAM;AAE9B,QAAI,MAAM,cAAc,OAAO;AAC7B,YAAM,aAAa,MAAM,iBAAiB,MAAM,aAAa,CAAC,GAAG,OAAO,GAAG,MAAM,UAAU;AAC3F,WAAK,WAAW,UAAU;AAAA,IAC5B;AAEA,QAAI,MAAM,YAAY;AACpB,UAAI,OAAO,MAAM,eAAe,UAAU;AACxC,cAAM,kBAAkB,WAAW,MAAM,UAAU;AACnD,aAAK,WAAW,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC3C;AACA,UAAI,OAAO,MAAM,eAAe,YAAY;AAC1C,aAAK,WAAW,MAAM,UAAU;AAAA,MAClC;AAAA,IACF;AAEA,WAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AACjC,WAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AAAA,EACnC,GAAG,CAAC,aAAa,OAAO,MAAM,gBAAgB,OAAO,UAAU,MAAM,YAAY,MAAM,YAAY,MAAM,CAAC;AAE1G,SACE,qBAAC;AAAA,IAAE,WAAW,eAAe;AAAA,IAC3B;AAAA,2BAAC;AAAA,QAAE,KAAK;AAAA,QACN;AAAA,8BAAC;AAAA,YAAE,WAAW,aAAa,aAAa,KAAK,QAAQ,SAAS,sBAAsB,EAAE,SAAS;AAAA,YAC7F,8BAAC;AAAA,cAAgB,WAAU;AAAA,cAAa,YAAW;AAAA,cAAS,IAAI;AAAA,cAC7D,iBAAO;AAAA,aACV;AAAA,WACF;AAAA,UACA,oBAAC;AAAA,YAAW,KAAK;AAAA,WAAS;AAAA;AAAA,OAC5B;AAAA,MAEA,oBAAC;AAAA,QAAW,KAAK;AAAA,OAAS;AAAA;AAAA,GAC5B;AAEJ;",
6
- "names": []
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useMemo, useEffect, useRef } from 'react';\nimport { select, axisBottom, timeFormat } from 'd3';\nimport { StyledAxis, StyledGrid, StyledAxisLabel } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\n\nexport const AxisBottom = React.memo(() => {\n const {\n props: { xAxis, width },\n innerHeight,\n innerWidth,\n xScale,\n setAxisBottomHeight,\n tickOffset = 3,\n } = useContext(ChartContext);\n\n const axisRef = useRef();\n const gridRef = useRef();\n const ticks = xScale.ticks?.(xAxis.tickCount ?? width / 80);\n\n useEffect(() => {\n const grid = axisBottom(xScale)\n .tickSize(xAxis?.showGrid ? -innerHeight : 0)\n .tickFormat('')\n .tickSizeOuter(0);\n\n const axis = axisBottom(xScale);\n\n if (xAxis.tickValues && ticks) {\n const finalTicks = xAxis.overwriteTicks ? xAxis.tickValues : [...ticks, ...xAxis.tickValues];\n axis.tickValues(finalTicks);\n } else {\n axis.tickValues(ticks);\n grid.tickValues(ticks);\n }\n\n if (xAxis.tickFormat) {\n if (typeof xAxis.tickFormat === 'string') {\n const formatGenerator = timeFormat(xAxis.tickFormat);\n axis.tickFormat((d) => formatGenerator(d));\n }\n if (typeof xAxis.tickFormat === 'function') {\n axis.tickFormat(xAxis.tickFormat);\n }\n }\n\n select(gridRef.current).call(grid);\n select(axisRef.current).call(axis);\n\n if (xAxis.hideAxis) {\n select(axisRef.current).call((g) => {\n g.selectAll('.tick').remove();\n g.select('.domain').remove();\n });\n select(gridRef.current).call((g) => g.select('.domain').remove());\n }\n }, [innerHeight, ticks, xAxis.overwriteTicks, xAxis?.showGrid, xAxis.tickFormat, xAxis.tickValues, xScale]);\n\n const marginTop = useMemo(\n () => (axisRef.current?.getBoundingClientRect().height ? axisRef.current?.getBoundingClientRect().height - 20 : 0),\n [],\n );\n return (\n <g transform={`translate(0,${innerHeight})`}>\n <g ref={setAxisBottomHeight}>\n {/* <g transform={`translate(${innerWidth / 2},${marginTop})`}>\n <StyledAxisLabel className=\"axis-label\" textAnchor=\"middle\" dy={50}>\n {xAxis?.label}\n </StyledAxisLabel>\n </g> */}\n <StyledAxis ref={axisRef}></StyledAxis>\n </g>\n\n <StyledGrid ref={gridRef}></StyledGrid>\n </g>\n );\n});\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,OAAOA,UAAS,YAAY,SAAS,WAAW,cAAc;AAC9D,SAAS,QAAQ,YAAY,kBAAkB;AAC/C,SAAS,YAAY,kBAAmC;AACxD,SAAS,oBAAoB;AAEtB,MAAM,aAAaA,OAAM,KAAK,MAAM;AACzC,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,MAAM;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf,IAAI,WAAW,YAAY;AAE3B,QAAM,UAAU,OAAO;AACvB,QAAM,UAAU,OAAO;AACvB,QAAM,QAAQ,OAAO,QAAQ,MAAM,aAAa,QAAQ,EAAE;AAE1D,YAAU,MAAM;AACd,UAAM,OAAO,WAAW,MAAM,EAC3B,SAAS,OAAO,WAAW,CAAC,cAAc,CAAC,EAC3C,WAAW,EAAE,EACb,cAAc,CAAC;AAElB,UAAM,OAAO,WAAW,MAAM;AAE9B,QAAI,MAAM,cAAc,OAAO;AAC7B,YAAM,aAAa,MAAM,iBAAiB,MAAM,aAAa,CAAC,GAAG,OAAO,GAAG,MAAM,UAAU;AAC3F,WAAK,WAAW,UAAU;AAAA,IAC5B,OAAO;AACL,WAAK,WAAW,KAAK;AACrB,WAAK,WAAW,KAAK;AAAA,IACvB;AAEA,QAAI,MAAM,YAAY;AACpB,UAAI,OAAO,MAAM,eAAe,UAAU;AACxC,cAAM,kBAAkB,WAAW,MAAM,UAAU;AACnD,aAAK,WAAW,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAAA,MAC3C;AACA,UAAI,OAAO,MAAM,eAAe,YAAY;AAC1C,aAAK,WAAW,MAAM,UAAU;AAAA,MAClC;AAAA,IACF;AAEA,WAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AACjC,WAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AAEjC,QAAI,MAAM,UAAU;AAClB,aAAO,QAAQ,OAAO,EAAE,KAAK,CAAC,MAAM;AAClC,UAAE,UAAU,OAAO,EAAE,OAAO;AAC5B,UAAE,OAAO,SAAS,EAAE,OAAO;AAAA,MAC7B,CAAC;AACD,aAAO,QAAQ,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,aAAa,OAAO,MAAM,gBAAgB,OAAO,UAAU,MAAM,YAAY,MAAM,YAAY,MAAM,CAAC;AAE1G,QAAM,YAAY;AAAA,IAChB,MAAO,QAAQ,SAAS,sBAAsB,EAAE,SAAS,QAAQ,SAAS,sBAAsB,EAAE,SAAS,KAAK;AAAA,IAChH,CAAC;AAAA,EACH;AACA,SACE,qBAAC;AAAA,IAAE,WAAW,eAAe;AAAA,IAC3B;AAAA,0BAAC;AAAA,QAAE,KAAK;AAAA,QAMN,8BAAC;AAAA,UAAW,KAAK;AAAA,SAAS;AAAA,OAC5B;AAAA,MAEA,oBAAC;AAAA,QAAW,KAAK;AAAA,OAAS;AAAA;AAAA,GAC5B;AAEJ,CAAC;",
6
+ "names": ["React"]
7
7
  }
@@ -2,11 +2,11 @@ import * as React from "react";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useContext, useEffect, useRef } from "react";
4
4
  import { select, axisLeft } from "d3";
5
- import { StyledAxis, StyledGrid, StyledAxisLabel } from "../../styles";
5
+ import { StyledAxis, StyledGrid } from "../../styles";
6
6
  import { ChartContext } from "../../ChartContext";
7
7
  const AxisLeft = () => {
8
8
  const {
9
- props: { yAxis, yAxisLabelOffset = 45, yAxisLabel },
9
+ props: { yAxis, height },
10
10
  innerHeight,
11
11
  innerWidth,
12
12
  yScale,
@@ -15,49 +15,39 @@ const AxisLeft = () => {
15
15
  } = useContext(ChartContext);
16
16
  const ref = useRef();
17
17
  const gridRef = useRef();
18
- const ticks = yScale.ticks?.();
18
+ const ticks = yScale.ticks?.(yAxis.tickCount ?? height / 80);
19
19
  useEffect(() => {
20
20
  const axis = axisLeft(yScale);
21
+ const grid = axisLeft(yScale).tickFormat("").tickSize(yAxis?.showGrid ? -innerWidth : 0).tickSizeOuter(0);
21
22
  if (yAxis.tickValues && ticks) {
22
23
  const finalTicks = yAxis.overwriteTicks ? yAxis.tickValues : [...ticks, ...yAxis.tickValues];
23
24
  axis.tickValues(finalTicks);
25
+ } else {
26
+ axis.tickValues(ticks);
27
+ grid.tickValues(ticks);
24
28
  }
25
29
  if (yAxis.tickFormat) {
26
30
  axis.tickFormat(yAxis.tickFormat);
27
31
  }
28
- const grid = axisLeft(yScale).tickFormat("").tickSize(yAxis?.showGrid ? -innerWidth : 0).tickSizeOuter(0);
29
32
  select(ref.current).call(axis);
30
33
  select(gridRef.current).call(grid);
31
- }, [
32
- innerHeight,
33
- innerWidth,
34
- ticks,
35
- yAxis.overwriteTicks,
36
- yAxis?.showGrid,
37
- yAxis.tickFormat,
38
- yAxis.tickValues,
39
- yScale
40
- ]);
34
+ if (yAxis.hideAxis) {
35
+ select(ref.current).call((g) => {
36
+ g.selectAll(".tick").remove();
37
+ g.select(".domain").remove();
38
+ });
39
+ select(gridRef.current).call((g) => g.select(".domain").remove());
40
+ }
41
+ }, [innerHeight, innerWidth, ticks, yAxis, yScale]);
41
42
  return /* @__PURE__ */ jsxs("g", {
42
43
  children: [
43
- /* @__PURE__ */ jsxs("g", {
44
+ /* @__PURE__ */ jsx("g", {
44
45
  ref: setAxisLeftWidth,
45
- children: [
46
- /* @__PURE__ */ jsx("g", {
47
- transform: `translate(${-ref.current?.getBoundingClientRect().width},${innerHeight / 2 + 10}) rotate(-90)`,
48
- children: /* @__PURE__ */ jsx(StyledAxisLabel, {
49
- className: "axis-label",
50
- textAnchor: "middle",
51
- dy: -15,
52
- children: yAxis?.label
53
- })
54
- }),
55
- /* @__PURE__ */ jsx(StyledAxis, {
56
- ref,
57
- color: yAxis.color,
58
- className: "axis-left"
59
- })
60
- ]
46
+ children: /* @__PURE__ */ jsx(StyledAxis, {
47
+ ref,
48
+ color: yAxis.color,
49
+ className: "axis-left"
50
+ })
61
51
  }),
62
52
  /* @__PURE__ */ jsx(StyledGrid, {
63
53
  ref: gridRef
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/graphs/Chart/parts/Axis/AxisLeft.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useCallback, useEffect, useRef } from 'react';\nimport { select, axisLeft } from 'd3';\nimport { StyledAxis, StyledGrid, StyledAxisLabel } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\nexport const AxisLeft = () => {\n const {\n props: { yAxis, yAxisLabelOffset = 45, yAxisLabel },\n innerHeight,\n innerWidth,\n yScale,\n internalMargin,\n setAxisLeftWidth,\n } = useContext(ChartContext);\n\n const ref = useRef();\n const gridRef = useRef();\n const ticks = yScale.ticks?.();\n\n useEffect(() => {\n const axis = axisLeft(yScale);\n\n if (yAxis.tickValues && ticks) {\n const finalTicks = yAxis.overwriteTicks ? yAxis.tickValues : [...ticks, ...yAxis.tickValues];\n axis.tickValues(finalTicks);\n }\n\n if (yAxis.tickFormat) {\n axis.tickFormat(yAxis.tickFormat);\n }\n\n const grid = axisLeft(yScale)\n .tickFormat('')\n .tickSize(yAxis?.showGrid ? -innerWidth : 0)\n .tickSizeOuter(0);\n\n select(ref.current).call(axis);\n\n select(gridRef.current).call(grid);\n }, [\n innerHeight,\n innerWidth,\n ticks,\n yAxis.overwriteTicks,\n yAxis?.showGrid,\n yAxis.tickFormat,\n yAxis.tickValues,\n yScale,\n ]);\n return (\n <g>\n <g ref={setAxisLeftWidth}>\n <g\n transform={`translate(${-ref.current?.getBoundingClientRect().width ?? 0},${\n innerHeight / 2 + 10\n }) rotate(-90)`}\n >\n <StyledAxisLabel className=\"axis-label\" textAnchor=\"middle\" dy={-15}>\n {yAxis?.label}\n </StyledAxisLabel>\n </g>\n <StyledAxis ref={ref} color={yAxis.color} className=\"axis-left\"></StyledAxis>\n </g>\n\n <StyledGrid ref={gridRef}></StyledGrid>\n </g>\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAyB,WAAW,cAAc;AAClE,SAAS,QAAQ,gBAAgB;AACjC,SAAS,YAAY,YAAY,uBAAuB;AACxD,SAAS,oBAAoB;AACtB,MAAM,WAAW,MAAM;AAC5B,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,mBAAmB,IAAI,WAAW;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAE3B,QAAM,MAAM,OAAO;AACnB,QAAM,UAAU,OAAO;AACvB,QAAM,QAAQ,OAAO,QAAQ;AAE7B,YAAU,MAAM;AACd,UAAM,OAAO,SAAS,MAAM;AAE5B,QAAI,MAAM,cAAc,OAAO;AAC7B,YAAM,aAAa,MAAM,iBAAiB,MAAM,aAAa,CAAC,GAAG,OAAO,GAAG,MAAM,UAAU;AAC3F,WAAK,WAAW,UAAU;AAAA,IAC5B;AAEA,QAAI,MAAM,YAAY;AACpB,WAAK,WAAW,MAAM,UAAU;AAAA,IAClC;AAEA,UAAM,OAAO,SAAS,MAAM,EACzB,WAAW,EAAE,EACb,SAAS,OAAO,WAAW,CAAC,aAAa,CAAC,EAC1C,cAAc,CAAC;AAElB,WAAO,IAAI,OAAO,EAAE,KAAK,IAAI;AAE7B,WAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AAAA,EACnC,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AACD,SACE,qBAAC;AAAA,IACC;AAAA,2BAAC;AAAA,QAAE,KAAK;AAAA,QACN;AAAA,8BAAC;AAAA,YACC,WAAW,aAAa,CAAC,IAAI,SAAS,sBAAsB,EAAE,SAC5D,cAAc,IAAI;AAAA,YAGpB,8BAAC;AAAA,cAAgB,WAAU;AAAA,cAAa,YAAW;AAAA,cAAS,IAAI;AAAA,cAC7D,iBAAO;AAAA,aACV;AAAA,WACF;AAAA,UACA,oBAAC;AAAA,YAAW;AAAA,YAAU,OAAO,MAAM;AAAA,YAAO,WAAU;AAAA,WAAY;AAAA;AAAA,OAClE;AAAA,MAEA,oBAAC;AAAA,QAAW,KAAK;AAAA,OAAS;AAAA;AAAA,GAC5B;AAEJ;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useCallback, useEffect, useRef } from 'react';\nimport { select, selectAll, axisLeft } from 'd3';\nimport { StyledAxis, StyledGrid, StyledAxisLabel } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\nexport const AxisLeft = () => {\n const {\n props: { yAxis, height },\n innerHeight,\n innerWidth,\n yScale,\n internalMargin,\n setAxisLeftWidth,\n } = useContext(ChartContext);\n\n const ref = useRef();\n const gridRef = useRef();\n const ticks = yScale.ticks?.(yAxis.tickCount ?? height / 80);\n\n useEffect(() => {\n const axis = axisLeft(yScale);\n\n const grid = axisLeft(yScale)\n .tickFormat('')\n .tickSize(yAxis?.showGrid ? -innerWidth : 0)\n .tickSizeOuter(0);\n\n if (yAxis.tickValues && ticks) {\n const finalTicks = yAxis.overwriteTicks ? yAxis.tickValues : [...ticks, ...yAxis.tickValues];\n axis.tickValues(finalTicks);\n } else {\n axis.tickValues(ticks);\n grid.tickValues(ticks);\n }\n\n if (yAxis.tickFormat) {\n axis.tickFormat(yAxis.tickFormat);\n }\n\n select(ref.current).call(axis);\n\n select(gridRef.current).call(grid);\n\n if (yAxis.hideAxis) {\n select(ref.current).call((g) => {\n g.selectAll('.tick').remove();\n g.select('.domain').remove();\n });\n select(gridRef.current).call((g) => g.select('.domain').remove());\n }\n }, [innerHeight, innerWidth, ticks, yAxis, yScale]);\n return (\n <g>\n <g ref={setAxisLeftWidth}>\n <StyledAxis ref={ref} color={yAxis.color} className=\"axis-left\"></StyledAxis>\n </g>\n\n <StyledGrid ref={gridRef}></StyledGrid>\n </g>\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAyB,WAAW,cAAc;AAClE,SAAS,QAAmB,gBAAgB;AAC5C,SAAS,YAAY,kBAAmC;AACxD,SAAS,oBAAoB;AACtB,MAAM,WAAW,MAAM;AAC5B,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAE3B,QAAM,MAAM,OAAO;AACnB,QAAM,UAAU,OAAO;AACvB,QAAM,QAAQ,OAAO,QAAQ,MAAM,aAAa,SAAS,EAAE;AAE3D,YAAU,MAAM;AACd,UAAM,OAAO,SAAS,MAAM;AAE5B,UAAM,OAAO,SAAS,MAAM,EACzB,WAAW,EAAE,EACb,SAAS,OAAO,WAAW,CAAC,aAAa,CAAC,EAC1C,cAAc,CAAC;AAElB,QAAI,MAAM,cAAc,OAAO;AAC7B,YAAM,aAAa,MAAM,iBAAiB,MAAM,aAAa,CAAC,GAAG,OAAO,GAAG,MAAM,UAAU;AAC3F,WAAK,WAAW,UAAU;AAAA,IAC5B,OAAO;AACL,WAAK,WAAW,KAAK;AACrB,WAAK,WAAW,KAAK;AAAA,IACvB;AAEA,QAAI,MAAM,YAAY;AACpB,WAAK,WAAW,MAAM,UAAU;AAAA,IAClC;AAEA,WAAO,IAAI,OAAO,EAAE,KAAK,IAAI;AAE7B,WAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AAEjC,QAAI,MAAM,UAAU;AAClB,aAAO,IAAI,OAAO,EAAE,KAAK,CAAC,MAAM;AAC9B,UAAE,UAAU,OAAO,EAAE,OAAO;AAC5B,UAAE,OAAO,SAAS,EAAE,OAAO;AAAA,MAC7B,CAAC;AACD,aAAO,QAAQ,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,EAAE,OAAO,CAAC;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,aAAa,YAAY,OAAO,OAAO,MAAM,CAAC;AAClD,SACE,qBAAC;AAAA,IACC;AAAA,0BAAC;AAAA,QAAE,KAAK;AAAA,QACN,8BAAC;AAAA,UAAW;AAAA,UAAU,OAAO,MAAM;AAAA,UAAO,WAAU;AAAA,SAAY;AAAA,OAClE;AAAA,MAEA,oBAAC;AAAA,QAAW,KAAK;AAAA,OAAS;AAAA;AAAA,GAC5B;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -6,14 +6,14 @@ import { StyledAxis } from "../../styles";
6
6
  import { ChartContext } from "../../ChartContext";
7
7
  const AxisRight = () => {
8
8
  const {
9
- props: { y2Axis, yAxisLabelOffset = 45, y2AxisLabel },
10
- innerHeight,
9
+ props: { y2Axis, height },
11
10
  innerWidth,
12
11
  y2Scale,
13
12
  setAxisRightWidth
14
13
  } = useContext(ChartContext);
15
14
  if (!y2Axis)
16
15
  return null;
16
+ const ticks = y2Scale.ticks?.(y2Axis.tickCount ?? height / 80);
17
17
  const ref = useRef();
18
18
  useEffect(() => {
19
19
  const axis = axisRight(y2Scale).tickSizeOuter(0);
@@ -24,14 +24,9 @@ const AxisRight = () => {
24
24
  transform: `translate(${innerWidth},0)`,
25
25
  children: /* @__PURE__ */ jsx(StyledAxis, {
26
26
  ref,
27
- color: y2Axis.color,
28
- children: /* @__PURE__ */ jsx("text", {
29
- className: "axis-label",
30
- textAnchor: "middle",
31
- transform: `translate(${-yAxisLabelOffset},${innerHeight / 2}) rotate(-90)`
32
- })
27
+ color: y2Axis.color
33
28
  })
34
- });
29
+ }, ticks.toString());
35
30
  };
36
31
  export {
37
32
  AxisRight
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/graphs/Chart/parts/Axis/AxisRight.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useEffect, useRef } from 'react';\nimport { select, axisRight } from 'd3';\nimport { StyledAxis } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\n\nexport const AxisRight = () => {\n const {\n props: { y2Axis, yAxisLabelOffset = 45, y2AxisLabel },\n innerHeight,\n innerWidth,\n y2Scale,\n setAxisRightWidth,\n } = useContext(ChartContext);\n\n if (!y2Axis) return null;\n const ref = useRef();\n useEffect(() => {\n const axis = axisRight(y2Scale).tickSizeOuter(0);\n\n select(ref.current).call(axis);\n }, [innerWidth, y2Scale]);\n return (\n <g ref={setAxisRightWidth} transform={`translate(${innerWidth},0)`}>\n <StyledAxis ref={ref} color={y2Axis.color}>\n <text\n className=\"axis-label\"\n textAnchor=\"middle\"\n transform={`translate(${-yAxisLabelOffset},${innerHeight / 2}) rotate(-90)`}\n >\n {/* {y2Axis?.label} */}\n </text>\n </StyledAxis>\n </g>\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAY,WAAW,cAAc;AACrD,SAAS,QAAQ,iBAAiB;AAClC,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAEtB,MAAM,YAAY,MAAM;AAC7B,QAAM;AAAA,IACJ,OAAO,EAAE,QAAQ,mBAAmB,IAAI,YAAY;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAE3B,MAAI,CAAC;AAAQ,WAAO;AACpB,QAAM,MAAM,OAAO;AACnB,YAAU,MAAM;AACd,UAAM,OAAO,UAAU,OAAO,EAAE,cAAc,CAAC;AAE/C,WAAO,IAAI,OAAO,EAAE,KAAK,IAAI;AAAA,EAC/B,GAAG,CAAC,YAAY,OAAO,CAAC;AACxB,SACE,oBAAC;AAAA,IAAE,KAAK;AAAA,IAAmB,WAAW,aAAa;AAAA,IACjD,8BAAC;AAAA,MAAW;AAAA,MAAU,OAAO,OAAO;AAAA,MAClC,8BAAC;AAAA,QACC,WAAU;AAAA,QACV,YAAW;AAAA,QACX,WAAW,aAAa,CAAC,oBAAoB,cAAc;AAAA,OAG7D;AAAA,KACF;AAAA,GACF;AAEJ;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useEffect, useMemo, useRef } from 'react';\nimport { select, axisRight } from 'd3';\nimport { StyledAxis, StyledAxisLabel } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\nexport const AxisRight = () => {\n const {\n props: { y2Axis, height },\n innerWidth,\n y2Scale,\n setAxisRightWidth,\n } = useContext(ChartContext);\n if (!y2Axis) return null;\n\n const ticks = y2Scale.ticks?.(y2Axis.tickCount ?? height / 80);\n\n const ref = useRef();\n useEffect(() => {\n const axis = axisRight(y2Scale).tickSizeOuter(0);\n\n select(ref.current).call(axis);\n }, [innerWidth, y2Scale]);\n\n return (\n <g key={ticks.toString()} ref={setAxisRightWidth} transform={`translate(${innerWidth},0)`}>\n <StyledAxis ref={ref} color={y2Axis.color} />\n </g>\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAY,WAAoB,cAAc;AAC9D,SAAS,QAAQ,iBAAiB;AAClC,SAAS,kBAAmC;AAC5C,SAAS,oBAAoB;AACtB,MAAM,YAAY,MAAM;AAC7B,QAAM;AAAA,IACJ,OAAO,EAAE,QAAQ,OAAO;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAC3B,MAAI,CAAC;AAAQ,WAAO;AAEpB,QAAM,QAAQ,QAAQ,QAAQ,OAAO,aAAa,SAAS,EAAE;AAE7D,QAAM,MAAM,OAAO;AACnB,YAAU,MAAM;AACd,UAAM,OAAO,UAAU,OAAO,EAAE,cAAc,CAAC;AAE/C,WAAO,IAAI,OAAO,EAAE,KAAK,IAAI;AAAA,EAC/B,GAAG,CAAC,YAAY,OAAO,CAAC;AAExB,SACE,oBAAC;AAAA,IAAyB,KAAK;AAAA,IAAmB,WAAW,aAAa;AAAA,IACxE,8BAAC;AAAA,MAAW;AAAA,MAAU,OAAO,OAAO;AAAA,KAAO;AAAA,KADrC,MAAM,SAAS,CAEvB;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -1,10 +1,11 @@
1
1
  import * as React from "react";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useContext, useCallback } from "react";
3
+ import { useContext, useMemo, useCallback, useEffect } from "react";
4
4
  import { StyledSVGWrapper } from "../styles";
5
5
  import { ChartContext } from "../ChartContext";
6
6
  import { useKeyboardNavigation } from "../config/useKeyboardNavigation";
7
7
  import { Legend } from "./Legend/Legend";
8
+ import { Label } from "./Labels/Label";
8
9
  const ChartContainer = ({ children }) => {
9
10
  const {
10
11
  props: { width, height },
@@ -54,7 +55,16 @@ const ChartContainer = ({ children }) => {
54
55
  oldLastPosition.current = xScrollbarPosition;
55
56
  setIsGrabbed(false);
56
57
  }, [oldLastPosition, setIsGrabbed, xScrollbarPosition]);
57
- const key = `translate(${internalMargin.left},${internalMargin.top})`;
58
+ const key = useMemo(
59
+ () => `translate(${internalMargin.left},${internalMargin.top},${internalMargin.right})`,
60
+ [internalMargin]
61
+ );
62
+ useEffect(() => {
63
+ containerRef?.current?.addEventListener("mousemove", handleMouseMove);
64
+ return () => {
65
+ containerRef?.current?.removeEventListener("mousemove", handleMouseMove);
66
+ };
67
+ }, [containerRef, handleMouseMove]);
58
68
  return /* @__PURE__ */ jsx(StyledSVGWrapper, {
59
69
  ref: containerRef,
60
70
  onKeyDown: onInputKeyDown,
@@ -64,27 +74,31 @@ const ChartContainer = ({ children }) => {
64
74
  onFocus: handleOnFocus,
65
75
  onMouseEnter: onMouseEnterHandler,
66
76
  onMouseLeave: onMouseLeaveHandler,
67
- onMouseMove: handleMouseMove,
68
77
  onMouseUp: handleMouseUp,
69
78
  onMouseDown: (e) => e.preventDefault(),
70
79
  isGrabbed,
71
80
  style: { width },
72
- children: /* @__PURE__ */ jsxs("svg", {
81
+ children: /* @__PURE__ */ jsx("svg", {
73
82
  ref: svgRef,
74
83
  width,
75
84
  height,
76
- children: [
77
- /* @__PURE__ */ jsx("g", {
78
- children: /* @__PURE__ */ jsx(Legend, {})
79
- }),
80
- /* @__PURE__ */ jsx("g", {
81
- className: "container",
82
- transform: `translate(${internalMargin.left},${internalMargin.top})`,
83
- children
84
- })
85
- ]
85
+ children: /* @__PURE__ */ jsxs("g", {
86
+ children: [
87
+ /* @__PURE__ */ jsxs("g", {
88
+ children: [
89
+ /* @__PURE__ */ jsx(Legend, {}),
90
+ /* @__PURE__ */ jsx(Label, {})
91
+ ]
92
+ }),
93
+ /* @__PURE__ */ jsx("g", {
94
+ className: "container",
95
+ transform: `translate(${internalMargin.left},${internalMargin.top})`,
96
+ children
97
+ })
98
+ ]
99
+ }, key)
86
100
  })
87
- }, key);
101
+ });
88
102
  };
89
103
  export {
90
104
  ChartContainer
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/parts/ChartContainer.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useCallback, useRef } from 'react';\nimport { StyledSVGWrapper } from '../styles';\n\nimport { ChartContext } from '../ChartContext';\nimport { useKeyboardNavigation } from '../config/useKeyboardNavigation';\nimport { Legend } from './Legend/Legend';\ninterface ChartContainerT {\n children: JSX.Element | JSX.Element[] | string | string[];\n}\nexport const ChartContainer: React.ComponentType<ChartContainerT> = ({ children }) => {\n const {\n props: { width, height },\n containerRef,\n activePoint,\n internalMargin,\n setScrapperPosY,\n setScrapperPosX,\n svgRef,\n isGrabbed,\n setIsGrabbed,\n startPosition,\n innerWidth,\n setActivePoint,\n setXScrollbarPosition,\n xScrollbarPosition,\n containerRatio,\n oldLastPosition,\n setIsScrollbarVisible,\n } = useContext(ChartContext);\n\n const { onInputKeyDown, handleOnBlur, handleOnFocus } = useKeyboardNavigation();\n\n const onMouseEnterHandler = useCallback(() => {\n setIsScrollbarVisible(true);\n }, [setIsScrollbarVisible]);\n const onMouseLeaveHandler = useCallback(() => {\n setScrapperPosY('');\n setScrapperPosX('');\n setIsScrollbarVisible(false);\n setIsGrabbed(false);\n }, [setIsGrabbed, setIsScrollbarVisible, setScrapperPosX, setScrapperPosY]);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n if (!isGrabbed) return;\n setActivePoint('');\n const newPosition = oldLastPosition?.current + e.clientX - startPosition;\n if (newPosition < 0) setXScrollbarPosition(0);\n else if (newPosition > innerWidth - innerWidth / containerRatio)\n setXScrollbarPosition(innerWidth - innerWidth / containerRatio);\n else setXScrollbarPosition(newPosition);\n },\n [isGrabbed, setActivePoint, oldLastPosition, startPosition, setXScrollbarPosition, innerWidth, containerRatio],\n );\n\n const handleMouseUp = useCallback(() => {\n oldLastPosition.current = xScrollbarPosition;\n setIsGrabbed(false);\n }, [oldLastPosition, setIsGrabbed, xScrollbarPosition]);\n const key = `translate(${internalMargin.left},${internalMargin.top})`;\n return (\n <StyledSVGWrapper\n key={key}\n ref={containerRef}\n onKeyDown={onInputKeyDown}\n aria-hidden=\"true\"\n tabIndex={activePoint ? -1 : 0}\n onBlur={handleOnBlur}\n onFocus={handleOnFocus}\n onMouseEnter={onMouseEnterHandler}\n onMouseLeave={onMouseLeaveHandler}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseDown={(e) => e.preventDefault()}\n isGrabbed={isGrabbed}\n style={{ width: width }}\n >\n <svg ref={svgRef} width={width} height={height}>\n <g>\n <Legend />\n </g>\n <g className=\"container\" transform={`translate(${internalMargin.left},${internalMargin.top})`}>\n {children}\n </g>\n </svg>\n </StyledSVGWrapper>\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAY,mBAA2B;AACvD,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,6BAA6B;AACtC,SAAS,cAAc;AAIhB,MAAM,iBAAuD,CAAC,EAAE,SAAS,MAAM;AACpF,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAE3B,QAAM,EAAE,gBAAgB,cAAc,cAAc,IAAI,sBAAsB;AAE9E,QAAM,sBAAsB,YAAY,MAAM;AAC5C,0BAAsB,IAAI;AAAA,EAC5B,GAAG,CAAC,qBAAqB,CAAC;AAC1B,QAAM,sBAAsB,YAAY,MAAM;AAC5C,oBAAgB,EAAE;AAClB,oBAAgB,EAAE;AAClB,0BAAsB,KAAK;AAC3B,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAC,cAAc,uBAAuB,iBAAiB,eAAe,CAAC;AAE1E,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAAwB;AACvB,UAAI,CAAC;AAAW;AAChB,qBAAe,EAAE;AACjB,YAAM,cAAc,iBAAiB,UAAU,EAAE,UAAU;AAC3D,UAAI,cAAc;AAAG,8BAAsB,CAAC;AAAA,eACnC,cAAc,aAAa,aAAa;AAC/C,8BAAsB,aAAa,aAAa,cAAc;AAAA;AAC3D,8BAAsB,WAAW;AAAA,IACxC;AAAA,IACA,CAAC,WAAW,gBAAgB,iBAAiB,eAAe,uBAAuB,YAAY,cAAc;AAAA,EAC/G;AAEA,QAAM,gBAAgB,YAAY,MAAM;AACtC,oBAAgB,UAAU;AAC1B,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAC,iBAAiB,cAAc,kBAAkB,CAAC;AACtD,QAAM,MAAM,aAAa,eAAe,QAAQ,eAAe;AAC/D,SACE,oBAAC;AAAA,IAEC,KAAK;AAAA,IACL,WAAW;AAAA,IACX,eAAY;AAAA,IACZ,UAAU,cAAc,KAAK;AAAA,IAC7B,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAc;AAAA,IACd,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa,CAAC,MAAM,EAAE,eAAe;AAAA,IACrC;AAAA,IACA,OAAO,EAAE,MAAa;AAAA,IAEtB,+BAAC;AAAA,MAAI,KAAK;AAAA,MAAQ;AAAA,MAAc;AAAA,MAC9B;AAAA,4BAAC;AAAA,UACC,8BAAC,UAAO;AAAA,SACV;AAAA,QACA,oBAAC;AAAA,UAAE,WAAU;AAAA,UAAY,WAAW,aAAa,eAAe,QAAQ,eAAe;AAAA,UACpF;AAAA,SACH;AAAA;AAAA,KACF;AAAA,KAtBK,GAuBP;AAEJ;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useMemo, useCallback, useEffect } from 'react';\nimport { StyledSVGWrapper } from '../styles';\n\nimport { ChartContext } from '../ChartContext';\nimport { useKeyboardNavigation } from '../config/useKeyboardNavigation';\nimport { Legend } from './Legend/Legend';\nimport { Label } from './Labels/Label';\ninterface ChartContainerT {\n children: JSX.Element | JSX.Element[] | string | string[];\n}\nexport const ChartContainer: React.ComponentType<ChartContainerT> = ({ children }) => {\n const {\n props: { width, height },\n containerRef,\n activePoint,\n internalMargin,\n setScrapperPosY,\n setScrapperPosX,\n svgRef,\n isGrabbed,\n setIsGrabbed,\n startPosition,\n innerWidth,\n setActivePoint,\n setXScrollbarPosition,\n xScrollbarPosition,\n containerRatio,\n oldLastPosition,\n setIsScrollbarVisible,\n } = useContext(ChartContext);\n\n const { onInputKeyDown, handleOnBlur, handleOnFocus } = useKeyboardNavigation();\n\n const onMouseEnterHandler = useCallback(() => {\n setIsScrollbarVisible(true);\n }, [setIsScrollbarVisible]);\n const onMouseLeaveHandler = useCallback(() => {\n setScrapperPosY('');\n setScrapperPosX('');\n setIsScrollbarVisible(false);\n setIsGrabbed(false);\n }, [setIsGrabbed, setIsScrollbarVisible, setScrapperPosX, setScrapperPosY]);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n if (!isGrabbed) return;\n setActivePoint('');\n const newPosition = oldLastPosition?.current + e.clientX - startPosition;\n if (newPosition < 0) setXScrollbarPosition(0);\n else if (newPosition > innerWidth - innerWidth / containerRatio)\n setXScrollbarPosition(innerWidth - innerWidth / containerRatio);\n else setXScrollbarPosition(newPosition);\n },\n [isGrabbed, setActivePoint, oldLastPosition, startPosition, setXScrollbarPosition, innerWidth, containerRatio],\n );\n const handleMouseUp = useCallback(() => {\n oldLastPosition.current = xScrollbarPosition;\n setIsGrabbed(false);\n }, [oldLastPosition, setIsGrabbed, xScrollbarPosition]);\n const key = useMemo(\n () => `translate(${internalMargin.left},${internalMargin.top},${internalMargin.right})`,\n [internalMargin],\n );\n\n useEffect(() => {\n containerRef?.current?.addEventListener('mousemove', handleMouseMove);\n // containerRef?.current?.addEventListener('wheel', handleScroll);\n\n return () => {\n containerRef?.current?.removeEventListener('mousemove', handleMouseMove);\n // containerRef?.current?.removeEventListener('wheel', handleScroll);\n };\n }, [containerRef, handleMouseMove]);\n\n return (\n <StyledSVGWrapper\n ref={containerRef}\n onKeyDown={onInputKeyDown}\n aria-hidden=\"true\"\n tabIndex={activePoint ? -1 : 0}\n onBlur={handleOnBlur}\n onFocus={handleOnFocus}\n onMouseEnter={onMouseEnterHandler}\n onMouseLeave={onMouseLeaveHandler}\n // // onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseDown={(e) => e.preventDefault()}\n isGrabbed={isGrabbed}\n style={{ width: width }}\n >\n <svg ref={svgRef} width={width} height={height}>\n <g key={key}>\n <g>\n <Legend />\n <Label />\n </g>\n <g className=\"container\" transform={`translate(${internalMargin.left},${internalMargin.top})`}>\n {children}\n </g>\n </g>\n </svg>\n </StyledSVGWrapper>\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,YAAY,SAAS,aAAa,iBAAiB;AACnE,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,6BAA6B;AACtC,SAAS,cAAc;AACvB,SAAS,aAAa;AAIf,MAAM,iBAAuD,CAAC,EAAE,SAAS,MAAM;AACpF,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAE3B,QAAM,EAAE,gBAAgB,cAAc,cAAc,IAAI,sBAAsB;AAE9E,QAAM,sBAAsB,YAAY,MAAM;AAC5C,0BAAsB,IAAI;AAAA,EAC5B,GAAG,CAAC,qBAAqB,CAAC;AAC1B,QAAM,sBAAsB,YAAY,MAAM;AAC5C,oBAAgB,EAAE;AAClB,oBAAgB,EAAE;AAClB,0BAAsB,KAAK;AAC3B,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAC,cAAc,uBAAuB,iBAAiB,eAAe,CAAC;AAE1E,QAAM,kBAAkB;AAAA,IACtB,CAAC,MAAwB;AACvB,UAAI,CAAC;AAAW;AAChB,qBAAe,EAAE;AACjB,YAAM,cAAc,iBAAiB,UAAU,EAAE,UAAU;AAC3D,UAAI,cAAc;AAAG,8BAAsB,CAAC;AAAA,eACnC,cAAc,aAAa,aAAa;AAC/C,8BAAsB,aAAa,aAAa,cAAc;AAAA;AAC3D,8BAAsB,WAAW;AAAA,IACxC;AAAA,IACA,CAAC,WAAW,gBAAgB,iBAAiB,eAAe,uBAAuB,YAAY,cAAc;AAAA,EAC/G;AACA,QAAM,gBAAgB,YAAY,MAAM;AACtC,oBAAgB,UAAU;AAC1B,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAC,iBAAiB,cAAc,kBAAkB,CAAC;AACtD,QAAM,MAAM;AAAA,IACV,MAAM,aAAa,eAAe,QAAQ,eAAe,OAAO,eAAe;AAAA,IAC/E,CAAC,cAAc;AAAA,EACjB;AAEA,YAAU,MAAM;AACd,kBAAc,SAAS,iBAAiB,aAAa,eAAe;AAGpE,WAAO,MAAM;AACX,oBAAc,SAAS,oBAAoB,aAAa,eAAe;AAAA,IAEzE;AAAA,EACF,GAAG,CAAC,cAAc,eAAe,CAAC;AAElC,SACE,oBAAC;AAAA,IACC,KAAK;AAAA,IACL,WAAW;AAAA,IACX,eAAY;AAAA,IACZ,UAAU,cAAc,KAAK;AAAA,IAC7B,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAc;AAAA,IACd,cAAc;AAAA,IAEd,WAAW;AAAA,IACX,aAAa,CAAC,MAAM,EAAE,eAAe;AAAA,IACrC;AAAA,IACA,OAAO,EAAE,MAAa;AAAA,IAEtB,8BAAC;AAAA,MAAI,KAAK;AAAA,MAAQ;AAAA,MAAc;AAAA,MAC9B,+BAAC;AAAA,QACC;AAAA,+BAAC;AAAA,YACC;AAAA,kCAAC,UAAO;AAAA,cACR,oBAAC,SAAM;AAAA;AAAA,WACT;AAAA,UACA,oBAAC;AAAA,YAAE,WAAU;AAAA,YAAY,WAAW,aAAa,eAAe,QAAQ,eAAe;AAAA,YACpF;AAAA,WACH;AAAA;AAAA,SAPM,GAQR;AAAA,KACF;AAAA,GACF;AAEJ;",
6
6
  "names": []
7
7
  }