@elliemae/ds-dataviz 3.8.1 → 3.9.0-next.1

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 (164) hide show
  1. package/dist/cjs/graphs/Chart/Chart.js.map +2 -2
  2. package/dist/cjs/graphs/Chart/ChartContext.js +3 -1
  3. package/dist/cjs/graphs/Chart/ChartContext.js.map +2 -2
  4. package/dist/cjs/graphs/Chart/config/useChart.js +86 -33
  5. package/dist/cjs/graphs/Chart/config/useChart.js.map +3 -3
  6. package/dist/cjs/graphs/Chart/config/useInternalMargins.js +103 -0
  7. package/dist/cjs/graphs/Chart/config/useInternalMargins.js.map +7 -0
  8. package/dist/cjs/graphs/Chart/config/useKeyboardNavigation.js +25 -15
  9. package/dist/cjs/graphs/Chart/config/useKeyboardNavigation.js.map +2 -2
  10. package/dist/cjs/graphs/Chart/config/useScales.js +43 -17
  11. package/dist/cjs/graphs/Chart/config/useScales.js.map +2 -2
  12. package/dist/cjs/graphs/Chart/helpers/index.js +9 -13
  13. package/dist/cjs/graphs/Chart/helpers/index.js.map +2 -2
  14. package/dist/cjs/graphs/Chart/parts/ActivePoint.js +1 -1
  15. package/dist/cjs/graphs/Chart/parts/ActivePoint.js.map +2 -2
  16. package/dist/cjs/graphs/Chart/parts/Axis/AxisBottom.js +17 -25
  17. package/dist/cjs/graphs/Chart/parts/Axis/AxisBottom.js.map +3 -3
  18. package/dist/cjs/graphs/Chart/parts/Axis/AxisLeft.js +33 -38
  19. package/dist/cjs/graphs/Chart/parts/Axis/AxisLeft.js.map +2 -2
  20. package/dist/cjs/graphs/Chart/parts/Axis/AxisRight.js +6 -11
  21. package/dist/cjs/graphs/Chart/parts/Axis/AxisRight.js.map +2 -2
  22. package/dist/cjs/graphs/Chart/parts/ChartContainer.js +65 -16
  23. package/dist/cjs/graphs/Chart/parts/ChartContainer.js.map +2 -2
  24. package/dist/cjs/graphs/Chart/parts/FocusableRegion.js +17 -68
  25. package/dist/cjs/graphs/Chart/parts/FocusableRegion.js.map +2 -2
  26. package/dist/cjs/graphs/Chart/{series/Pie.js → parts/Labels/BottomLabel.js} +20 -12
  27. package/dist/cjs/graphs/Chart/parts/Labels/BottomLabel.js.map +7 -0
  28. package/dist/cjs/graphs/Chart/parts/Labels/Label.js +52 -0
  29. package/dist/cjs/graphs/Chart/parts/Labels/Label.js.map +7 -0
  30. package/dist/cjs/graphs/Chart/parts/Labels/LeftLabel.js +61 -0
  31. package/dist/cjs/graphs/Chart/parts/Labels/LeftLabel.js.map +7 -0
  32. package/dist/cjs/graphs/Chart/parts/Labels/RightLabel.js +65 -0
  33. package/dist/cjs/graphs/Chart/parts/Labels/RightLabel.js.map +7 -0
  34. package/dist/cjs/graphs/Chart/parts/Legend/BottomLegend.js +28 -30
  35. package/dist/cjs/graphs/Chart/parts/Legend/BottomLegend.js.map +2 -2
  36. package/dist/cjs/graphs/Chart/parts/Legend/LeftLegend.js +14 -19
  37. package/dist/cjs/graphs/Chart/parts/Legend/LeftLegend.js.map +2 -2
  38. package/dist/cjs/graphs/Chart/parts/Legend/LegendItem.js +100 -0
  39. package/dist/cjs/graphs/Chart/parts/Legend/LegendItem.js.map +7 -0
  40. package/dist/cjs/graphs/Chart/parts/Legend/RightLegend.js +31 -25
  41. package/dist/cjs/graphs/Chart/parts/Legend/RightLegend.js.map +2 -2
  42. package/dist/cjs/graphs/Chart/parts/Legend/TopLegend.js +3 -13
  43. package/dist/cjs/graphs/Chart/parts/Legend/TopLegend.js.map +2 -2
  44. package/dist/cjs/graphs/Chart/parts/Scrapper/Scrapper.js +50 -16
  45. package/dist/cjs/graphs/Chart/parts/Scrapper/Scrapper.js.map +2 -2
  46. package/dist/cjs/graphs/Chart/parts/Scrapper/ScrapperLine.js +3 -1
  47. package/dist/cjs/graphs/Chart/parts/Scrapper/ScrapperLine.js.map +2 -2
  48. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapper.js +39 -17
  49. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapper.js.map +2 -2
  50. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js +29 -28
  51. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js.map +2 -2
  52. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollBarX.js.map +2 -2
  53. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollableContainerX.js +2 -2
  54. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollableContainerX.js.map +2 -2
  55. package/dist/cjs/graphs/Chart/parts/SeriesFactory.js +57 -41
  56. package/dist/cjs/graphs/Chart/parts/SeriesFactory.js.map +2 -2
  57. package/dist/cjs/graphs/Chart/react-desc-prop-types.js +1 -12
  58. package/dist/cjs/graphs/Chart/react-desc-prop-types.js.map +2 -2
  59. package/dist/cjs/graphs/Chart/series/Bars.js +29 -27
  60. package/dist/cjs/graphs/Chart/series/Bars.js.map +2 -2
  61. package/dist/cjs/graphs/Chart/series/HorizontalBars.js +85 -0
  62. package/dist/cjs/graphs/Chart/series/HorizontalBars.js.map +7 -0
  63. package/dist/cjs/graphs/Chart/series/HorizontalStackedBars.js +77 -0
  64. package/dist/cjs/graphs/Chart/series/HorizontalStackedBars.js.map +7 -0
  65. package/dist/cjs/graphs/Chart/series/Line.js +23 -19
  66. package/dist/cjs/graphs/Chart/series/Line.js.map +2 -2
  67. package/dist/cjs/graphs/Chart/series/Point.js +88 -18
  68. package/dist/cjs/graphs/Chart/series/Point.js.map +2 -2
  69. package/dist/cjs/graphs/Chart/series/Points.js +23 -27
  70. package/dist/cjs/graphs/Chart/series/Points.js.map +2 -2
  71. package/dist/cjs/graphs/Chart/series/Rect.js +105 -8
  72. package/dist/cjs/graphs/Chart/series/Rect.js.map +2 -2
  73. package/dist/cjs/graphs/Chart/series/StackedBar.js +23 -30
  74. package/dist/cjs/graphs/Chart/series/StackedBar.js.map +2 -2
  75. package/dist/cjs/graphs/Chart/series/index.js +0 -1
  76. package/dist/cjs/graphs/Chart/series/index.js.map +2 -2
  77. package/dist/cjs/graphs/Chart/styles.js +5 -20
  78. package/dist/cjs/graphs/Chart/styles.js.map +2 -2
  79. package/dist/cjs/graphs/constants.js +20 -0
  80. package/dist/cjs/graphs/constants.js.map +2 -2
  81. package/dist/esm/graphs/Chart/Chart.js.map +2 -2
  82. package/dist/esm/graphs/Chart/ChartContext.js +3 -1
  83. package/dist/esm/graphs/Chart/ChartContext.js.map +2 -2
  84. package/dist/esm/graphs/Chart/config/useChart.js +87 -34
  85. package/dist/esm/graphs/Chart/config/useChart.js.map +2 -2
  86. package/dist/esm/graphs/Chart/config/useInternalMargins.js +77 -0
  87. package/dist/esm/graphs/Chart/config/useInternalMargins.js.map +7 -0
  88. package/dist/esm/graphs/Chart/config/useKeyboardNavigation.js +26 -16
  89. package/dist/esm/graphs/Chart/config/useKeyboardNavigation.js.map +2 -2
  90. package/dist/esm/graphs/Chart/config/useScales.js +44 -18
  91. package/dist/esm/graphs/Chart/config/useScales.js.map +2 -2
  92. package/dist/esm/graphs/Chart/helpers/index.js +10 -14
  93. package/dist/esm/graphs/Chart/helpers/index.js.map +2 -2
  94. package/dist/esm/graphs/Chart/parts/ActivePoint.js +1 -1
  95. package/dist/esm/graphs/Chart/parts/ActivePoint.js.map +2 -2
  96. package/dist/esm/graphs/Chart/parts/Axis/AxisBottom.js +18 -26
  97. package/dist/esm/graphs/Chart/parts/Axis/AxisBottom.js.map +3 -3
  98. package/dist/esm/graphs/Chart/parts/Axis/AxisLeft.js +34 -39
  99. package/dist/esm/graphs/Chart/parts/Axis/AxisLeft.js.map +2 -2
  100. package/dist/esm/graphs/Chart/parts/Axis/AxisRight.js +6 -11
  101. package/dist/esm/graphs/Chart/parts/Axis/AxisRight.js.map +2 -2
  102. package/dist/esm/graphs/Chart/parts/ChartContainer.js +66 -17
  103. package/dist/esm/graphs/Chart/parts/ChartContainer.js.map +2 -2
  104. package/dist/esm/graphs/Chart/parts/FocusableRegion.js +18 -69
  105. package/dist/esm/graphs/Chart/parts/FocusableRegion.js.map +2 -2
  106. package/dist/esm/graphs/Chart/parts/Labels/BottomLabel.js +28 -0
  107. package/dist/esm/graphs/Chart/parts/Labels/BottomLabel.js.map +7 -0
  108. package/dist/esm/graphs/Chart/parts/Labels/Label.js +26 -0
  109. package/dist/esm/graphs/Chart/parts/Labels/Label.js.map +7 -0
  110. package/dist/esm/graphs/Chart/parts/Labels/LeftLabel.js +35 -0
  111. package/dist/esm/graphs/Chart/parts/Labels/LeftLabel.js.map +7 -0
  112. package/dist/esm/graphs/Chart/parts/Labels/RightLabel.js +39 -0
  113. package/dist/esm/graphs/Chart/parts/Labels/RightLabel.js.map +7 -0
  114. package/dist/esm/graphs/Chart/parts/Legend/BottomLegend.js +28 -30
  115. package/dist/esm/graphs/Chart/parts/Legend/BottomLegend.js.map +2 -2
  116. package/dist/esm/graphs/Chart/parts/Legend/LeftLegend.js +16 -21
  117. package/dist/esm/graphs/Chart/parts/Legend/LeftLegend.js.map +2 -2
  118. package/dist/esm/graphs/Chart/parts/Legend/LegendItem.js +74 -0
  119. package/dist/esm/graphs/Chart/parts/Legend/LegendItem.js.map +7 -0
  120. package/dist/esm/graphs/Chart/parts/Legend/RightLegend.js +32 -26
  121. package/dist/esm/graphs/Chart/parts/Legend/RightLegend.js.map +2 -2
  122. package/dist/esm/graphs/Chart/parts/Legend/TopLegend.js +3 -13
  123. package/dist/esm/graphs/Chart/parts/Legend/TopLegend.js.map +2 -2
  124. package/dist/esm/graphs/Chart/parts/Scrapper/Scrapper.js +51 -17
  125. package/dist/esm/graphs/Chart/parts/Scrapper/Scrapper.js.map +2 -2
  126. package/dist/esm/graphs/Chart/parts/Scrapper/ScrapperLine.js +3 -1
  127. package/dist/esm/graphs/Chart/parts/Scrapper/ScrapperLine.js.map +2 -2
  128. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapper.js +39 -17
  129. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapper.js.map +2 -2
  130. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js +29 -28
  131. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js.map +2 -2
  132. package/dist/esm/graphs/Chart/parts/Scroller/ScrollBarX.js.map +2 -2
  133. package/dist/esm/graphs/Chart/parts/Scroller/ScrollableContainerX.js +2 -2
  134. package/dist/esm/graphs/Chart/parts/Scroller/ScrollableContainerX.js.map +2 -2
  135. package/dist/esm/graphs/Chart/parts/SeriesFactory.js +58 -42
  136. package/dist/esm/graphs/Chart/parts/SeriesFactory.js.map +2 -2
  137. package/dist/esm/graphs/Chart/react-desc-prop-types.js +1 -12
  138. package/dist/esm/graphs/Chart/react-desc-prop-types.js.map +2 -2
  139. package/dist/esm/graphs/Chart/series/Bars.js +30 -28
  140. package/dist/esm/graphs/Chart/series/Bars.js.map +2 -2
  141. package/dist/esm/graphs/Chart/series/HorizontalBars.js +59 -0
  142. package/dist/esm/graphs/Chart/series/HorizontalBars.js.map +7 -0
  143. package/dist/esm/graphs/Chart/series/HorizontalStackedBars.js +51 -0
  144. package/dist/esm/graphs/Chart/series/HorizontalStackedBars.js.map +7 -0
  145. package/dist/esm/graphs/Chart/series/Line.js +25 -21
  146. package/dist/esm/graphs/Chart/series/Line.js.map +2 -2
  147. package/dist/esm/graphs/Chart/series/Point.js +89 -19
  148. package/dist/esm/graphs/Chart/series/Point.js.map +2 -2
  149. package/dist/esm/graphs/Chart/series/Points.js +24 -28
  150. package/dist/esm/graphs/Chart/series/Points.js.map +2 -2
  151. package/dist/esm/graphs/Chart/series/Rect.js +106 -9
  152. package/dist/esm/graphs/Chart/series/Rect.js.map +2 -2
  153. package/dist/esm/graphs/Chart/series/StackedBar.js +24 -31
  154. package/dist/esm/graphs/Chart/series/StackedBar.js.map +2 -2
  155. package/dist/esm/graphs/Chart/series/index.js +0 -1
  156. package/dist/esm/graphs/Chart/series/index.js.map +2 -2
  157. package/dist/esm/graphs/Chart/styles.js +5 -20
  158. package/dist/esm/graphs/Chart/styles.js.map +2 -2
  159. package/dist/esm/graphs/constants.js +20 -0
  160. package/dist/esm/graphs/constants.js.map +2 -2
  161. package/package.json +8 -8
  162. package/dist/cjs/graphs/Chart/series/Pie.js.map +0 -7
  163. package/dist/esm/graphs/Chart/series/Pie.js +0 -20
  164. package/dist/esm/graphs/Chart/series/Pie.js.map +0 -7
@@ -1,27 +1,30 @@
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, 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
- innerWidth,
12
11
  xScale,
13
- setAxisBottomHeight,
14
- tickOffset = 3
12
+ setAxisBottomRef
15
13
  } = useContext(ChartContext);
14
+ if (xAxis.hideAxis)
15
+ return null;
16
16
  const axisRef = useRef();
17
17
  const gridRef = useRef();
18
- const ticks = xScale.ticks?.();
18
+ const ticks = xScale.ticks?.(xAxis.tickCount ?? width / 100);
19
19
  useEffect(() => {
20
20
  const grid = axisBottom(xScale).tickSize(xAxis?.showGrid ? -innerHeight : 0).tickFormat("").tickSizeOuter(0);
21
- const axis = axisBottom(xScale);
21
+ const axis = axisBottom(xScale).tickSizeOuter(0);
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") {
@@ -38,29 +41,18 @@ const AxisBottom = () => {
38
41
  return /* @__PURE__ */ jsxs("g", {
39
42
  transform: `translate(0,${innerHeight})`,
40
43
  children: [
41
- /* @__PURE__ */ jsxs("g", {
42
- 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
- ]
44
+ /* @__PURE__ */ jsx("g", {
45
+ ref: setAxisBottomRef,
46
+ children: /* @__PURE__ */ jsx(StyledAxis, {
47
+ ref: axisRef
48
+ })
57
49
  }),
58
50
  /* @__PURE__ */ jsx(StyledGrid, {
59
51
  ref: gridRef
60
52
  })
61
53
  ]
62
54
  });
63
- };
55
+ });
64
56
  export {
65
57
  AxisBottom
66
58
  };
@@ -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 xScale,\n setAxisBottomRef,\n } = useContext(ChartContext);\n if (xAxis.hideAxis) return null;\n const axisRef = useRef();\n const gridRef = useRef();\n const ticks = xScale.ticks?.(xAxis.tickCount ?? width / 100);\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).tickSizeOuter(0);\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 }, [innerHeight, ticks, xAxis.overwriteTicks, xAxis?.showGrid, xAxis.tickFormat, xAxis.tickValues, xScale]);\n\n return (\n <g transform={`translate(0,${innerHeight})`}>\n <g ref={setAxisBottomRef}>\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,YAAqB,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,EACF,IAAI,WAAW,YAAY;AAC3B,MAAI,MAAM;AAAU,WAAO;AAC3B,QAAM,UAAU,OAAO;AACvB,QAAM,UAAU,OAAO;AACvB,QAAM,QAAQ,OAAO,QAAQ,MAAM,aAAa,QAAQ,GAAG;AAE3D,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,EAAE,cAAc,CAAC;AAE/C,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;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,0BAAC;AAAA,QAAE,KAAK;AAAA,QACN,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,62 +2,57 @@ 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
+ import { getFormatGenerator } from "../../helpers";
7
8
  const AxisLeft = () => {
8
9
  const {
9
- props: { yAxis, yAxisLabelOffset = 45, yAxisLabel },
10
+ props: { yAxis, height },
10
11
  innerHeight,
11
12
  innerWidth,
12
13
  yScale,
13
- internalMargin,
14
- setAxisLeftWidth
14
+ setAxisLeftRef
15
15
  } = useContext(ChartContext);
16
+ if (yAxis.hideAxis)
17
+ return null;
16
18
  const ref = useRef();
17
19
  const gridRef = useRef();
18
- const ticks = yScale.ticks?.();
20
+ const ticks = yScale.ticks?.(yAxis.tickCount ?? height / 80);
21
+ const hasNegativeDomain = yScale(innerHeight) < 0;
22
+ const { tickFormat, type } = yAxis;
19
23
  useEffect(() => {
20
- const axis = axisLeft(yScale);
24
+ const axis = axisLeft(yScale).tickSizeOuter(0);
25
+ const grid = axisLeft(yScale).tickFormat((_) => "").tickSize(yAxis?.showGrid ? -innerWidth : 0).tickSizeOuter(0);
21
26
  if (yAxis.tickValues && ticks) {
22
27
  const finalTicks = yAxis.overwriteTicks ? yAxis.tickValues : [...ticks, ...yAxis.tickValues];
23
28
  axis.tickValues(finalTicks);
29
+ } else {
30
+ axis.tickValues(ticks);
31
+ grid.tickValues(ticks);
24
32
  }
25
- if (yAxis.tickFormat) {
26
- axis.tickFormat(yAxis.tickFormat);
33
+ if (tickFormat) {
34
+ if (typeof tickFormat === "string") {
35
+ const formatGenerator = getFormatGenerator(type ?? "linear");
36
+ axis.tickFormat((d) => formatGenerator(tickFormat)(d));
37
+ }
38
+ if (typeof tickFormat === "function") {
39
+ axis.tickFormat(tickFormat);
40
+ }
27
41
  }
28
- const grid = axisLeft(yScale).tickFormat("").tickSize(yAxis?.showGrid ? -innerWidth : 0).tickSizeOuter(0);
29
- select(ref.current).call(axis);
30
- 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
- ]);
42
+ if (ref?.current && gridRef?.current) {
43
+ select(gridRef.current).call(grid);
44
+ select(ref.current).call(axis);
45
+ }
46
+ }, [hasNegativeDomain, innerHeight, innerWidth, tickFormat, ticks, type, yAxis, yScale]);
41
47
  return /* @__PURE__ */ jsxs("g", {
42
48
  children: [
43
- /* @__PURE__ */ jsxs("g", {
44
- 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
- ]
49
+ /* @__PURE__ */ jsx("g", {
50
+ ref: setAxisLeftRef,
51
+ children: /* @__PURE__ */ jsx(StyledAxis, {
52
+ ref,
53
+ color: yAxis.color,
54
+ className: "axis-left"
55
+ })
61
56
  }),
62
57
  /* @__PURE__ */ jsx(StyledGrid, {
63
58
  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", "/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport React, { useContext, useEffect, useRef } from 'react';\nimport { select, axisLeft } from 'd3';\nimport { StyledAxis, StyledGrid } from '../../styles';\nimport { ChartContext } from '../../ChartContext';\nimport { getFormatGenerator } from '../../helpers';\nexport const AxisLeft = () => {\n const {\n props: { yAxis, height },\n innerHeight,\n innerWidth,\n yScale,\n setAxisLeftRef,\n } = useContext(ChartContext);\n if (yAxis.hideAxis) return null;\n\n const ref = useRef<SVGSVGElement>();\n const gridRef = useRef<SVGSVGElement>();\n const ticks = yScale.ticks?.(yAxis.tickCount ?? height / 80);\n const hasNegativeDomain = yScale(innerHeight) < 0;\n const { tickFormat, type } = yAxis;\n useEffect(() => {\n const axis = axisLeft(yScale).tickSizeOuter(0);\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 (tickFormat) {\n if (typeof tickFormat === 'string') {\n const formatGenerator = getFormatGenerator(type ?? 'linear');\n\n axis.tickFormat((d) => formatGenerator(tickFormat)(d));\n }\n if (typeof tickFormat === 'function') {\n axis.tickFormat(tickFormat);\n }\n }\n\n if (ref?.current && gridRef?.current) {\n select(gridRef.current).call(grid);\n select(ref.current).call(axis);\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 }\n }, [hasNegativeDomain, innerHeight, innerWidth, tickFormat, ticks, type, yAxis, yScale]);\n return (\n <g>\n <g ref={setAxisLeftRef}>\n <StyledAxis ref={ref} color={yAxis.color} className=\"axis-left\"></StyledAxis>\n </g>\n\n <StyledGrid ref={gridRef}></StyledGrid>\n {/* {hasNegativeDomain ? (\n <line stroke=\"black\" strokeWidth={2} x1={0} x2={innerWidth} y1={yScale(0)} y2={yScale(0)} />\n ) : null} */}\n </g>\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB;AAEA,SAAgB,YAAY,WAAW,cAAc;AACrD,SAAS,QAAQ,gBAAgB;AACjC,SAAS,YAAY,kBAAkB;AACvC,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AAC5B,MAAM,WAAW,MAAM;AAC5B,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,YAAY;AAC3B,MAAI,MAAM;AAAU,WAAO;AAE3B,QAAM,MAAM,OAAsB;AAClC,QAAM,UAAU,OAAsB;AACtC,QAAM,QAAQ,OAAO,QAAQ,MAAM,aAAa,SAAS,EAAE;AAC3D,QAAM,oBAAoB,OAAO,WAAW,IAAI;AAChD,QAAM,EAAE,YAAY,KAAK,IAAI;AAC7B,YAAU,MAAM;AACd,UAAM,OAAO,SAAS,MAAM,EAAE,cAAc,CAAC;AAE7C,UAAM,OAAO,SAAS,MAAM,EACzB,WAAW,CAAC,MAAM,EAAE,EACpB,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,YAAY;AACd,UAAI,OAAO,eAAe,UAAU;AAClC,cAAM,kBAAkB,mBAAmB,QAAQ,QAAQ;AAE3D,aAAK,WAAW,CAAC,MAAM,gBAAgB,UAAU,EAAE,CAAC,CAAC;AAAA,MACvD;AACA,UAAI,OAAO,eAAe,YAAY;AACpC,aAAK,WAAW,UAAU;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,SAAS,SAAS;AACpC,aAAO,QAAQ,OAAO,EAAE,KAAK,IAAI;AACjC,aAAO,IAAI,OAAO,EAAE,KAAK,IAAI;AAAA,IAS/B;AAAA,EACF,GAAG,CAAC,mBAAmB,aAAa,YAAY,YAAY,OAAO,MAAM,OAAO,MAAM,CAAC;AACvF,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,GAI5B;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -6,32 +6,27 @@ 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
- setAxisRightWidth
12
+ setAxisRightRef
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);
20
20
  select(ref.current).call(axis);
21
21
  }, [innerWidth, y2Scale]);
22
22
  return /* @__PURE__ */ jsx("g", {
23
- ref: setAxisRightWidth,
23
+ ref: setAxisRightRef,
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 setAxisRightRef,\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={setAxisRightRef} 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,IAAiB,WAAW,aAAa;AAAA,IACtE,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 },
@@ -18,12 +19,15 @@ const ChartContainer = ({ children }) => {
18
19
  setIsGrabbed,
19
20
  startPosition,
20
21
  innerWidth,
22
+ innerHeight,
21
23
  setActivePoint,
22
24
  setXScrollbarPosition,
23
25
  xScrollbarPosition,
24
26
  containerRatio,
25
27
  oldLastPosition,
26
- setIsScrollbarVisible
28
+ setIsScrollbarVisible,
29
+ chartId,
30
+ yScale
27
31
  } = useContext(ChartContext);
28
32
  const { onInputKeyDown, handleOnBlur, handleOnFocus } = useKeyboardNavigation();
29
33
  const onMouseEnterHandler = useCallback(() => {
@@ -39,7 +43,7 @@ const ChartContainer = ({ children }) => {
39
43
  (e) => {
40
44
  if (!isGrabbed)
41
45
  return;
42
- setActivePoint("");
46
+ setActivePoint(null);
43
47
  const newPosition = oldLastPosition?.current + e.clientX - startPosition;
44
48
  if (newPosition < 0)
45
49
  setXScrollbarPosition(0);
@@ -54,7 +58,16 @@ const ChartContainer = ({ children }) => {
54
58
  oldLastPosition.current = xScrollbarPosition;
55
59
  setIsGrabbed(false);
56
60
  }, [oldLastPosition, setIsGrabbed, xScrollbarPosition]);
57
- const key = `translate(${internalMargin.left},${internalMargin.top})`;
61
+ const key = useMemo(
62
+ () => `translate(${internalMargin.left},${internalMargin.top},${internalMargin.right})`,
63
+ [internalMargin]
64
+ );
65
+ useEffect(() => {
66
+ containerRef?.current?.addEventListener("mousemove", handleMouseMove);
67
+ return () => {
68
+ containerRef?.current?.removeEventListener("mousemove", handleMouseMove);
69
+ };
70
+ }, [containerRef, handleMouseMove]);
58
71
  return /* @__PURE__ */ jsx(StyledSVGWrapper, {
59
72
  ref: containerRef,
60
73
  onKeyDown: onInputKeyDown,
@@ -64,27 +77,63 @@ const ChartContainer = ({ children }) => {
64
77
  onFocus: handleOnFocus,
65
78
  onMouseEnter: onMouseEnterHandler,
66
79
  onMouseLeave: onMouseLeaveHandler,
67
- onMouseMove: handleMouseMove,
68
80
  onMouseUp: handleMouseUp,
69
81
  onMouseDown: (e) => e.preventDefault(),
70
82
  isGrabbed,
71
83
  style: { width },
72
- children: /* @__PURE__ */ jsxs("svg", {
84
+ children: /* @__PURE__ */ jsx("svg", {
73
85
  ref: svgRef,
74
86
  width,
75
87
  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
- ]
88
+ children: /* @__PURE__ */ jsxs("g", {
89
+ children: [
90
+ /* @__PURE__ */ jsxs("g", {
91
+ children: [
92
+ /* @__PURE__ */ jsx(Legend, {}),
93
+ /* @__PURE__ */ jsx(Label, {})
94
+ ]
95
+ }),
96
+ /* @__PURE__ */ jsx("g", {
97
+ className: "container",
98
+ transform: `translate(${internalMargin.left},${internalMargin.top})`,
99
+ children
100
+ }),
101
+ /* @__PURE__ */ jsx("defs", {
102
+ children: /* @__PURE__ */ jsx("clipPath", {
103
+ id: `rect-focus-ring-${chartId}`,
104
+ children: /* @__PURE__ */ jsx("rect", {
105
+ width: innerWidth * containerRatio,
106
+ height: innerHeight + 4,
107
+ y: -4
108
+ })
109
+ })
110
+ }),
111
+ /* @__PURE__ */ jsx("defs", {
112
+ children: /* @__PURE__ */ jsx("clipPath", {
113
+ id: `rects-positive-${chartId}`,
114
+ children: /* @__PURE__ */ jsx("rect", {
115
+ width: innerWidth * containerRatio,
116
+ height: yScale(0) + 8,
117
+ y: -8,
118
+ x: -10
119
+ })
120
+ })
121
+ }),
122
+ innerHeight - yScale(0) > 0 ? /* @__PURE__ */ jsx("defs", {
123
+ children: /* @__PURE__ */ jsx("clipPath", {
124
+ id: `rects-negative-${chartId}`,
125
+ children: /* @__PURE__ */ jsx("rect", {
126
+ width: innerWidth * containerRatio,
127
+ height: innerHeight - yScale(0),
128
+ x: -10,
129
+ y: yScale(0)
130
+ })
131
+ })
132
+ }) : null
133
+ ]
134
+ }, key)
86
135
  })
87
- }, key);
136
+ });
88
137
  };
89
138
  export {
90
139
  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 innerHeight,\n setActivePoint,\n setXScrollbarPosition,\n xScrollbarPosition,\n containerRatio,\n oldLastPosition,\n setIsScrollbarVisible,\n chartId,\n yScale,\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(null);\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 }}\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 {/* @todo we need to put this somewhere. this will clip the focus ring bottom line */}\n <defs>\n <clipPath id={`rect-focus-ring-${chartId}`}>\n <rect width={innerWidth * containerRatio} height={innerHeight + 4} y={-4} />\n </clipPath>\n </defs>\n <defs>\n <clipPath id={`rects-positive-${chartId}`}>\n <rect width={innerWidth * containerRatio} height={yScale(0) + 8} y={-8} x={-10} />\n </clipPath>\n </defs>\n {innerHeight - yScale(0) > 0 ? (\n <defs>\n <clipPath id={`rects-negative-${chartId}`}>\n <rect width={innerWidth * containerRatio} height={innerHeight - yScale(0)} x={-10} y={yScale(0)} />\n </clipPath>\n </defs>\n ) : null}\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,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,IAAI;AACnB,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,MAAM;AAAA,IAEf,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,UAEA,oBAAC;AAAA,YACC,8BAAC;AAAA,cAAS,IAAI,mBAAmB;AAAA,cAC/B,8BAAC;AAAA,gBAAK,OAAO,aAAa;AAAA,gBAAgB,QAAQ,cAAc;AAAA,gBAAG,GAAG;AAAA,eAAI;AAAA,aAC5E;AAAA,WACF;AAAA,UACA,oBAAC;AAAA,YACC,8BAAC;AAAA,cAAS,IAAI,kBAAkB;AAAA,cAC9B,8BAAC;AAAA,gBAAK,OAAO,aAAa;AAAA,gBAAgB,QAAQ,OAAO,CAAC,IAAI;AAAA,gBAAG,GAAG;AAAA,gBAAI,GAAG;AAAA,eAAK;AAAA,aAClF;AAAA,WACF;AAAA,UACC,cAAc,OAAO,CAAC,IAAI,IACzB,oBAAC;AAAA,YACC,8BAAC;AAAA,cAAS,IAAI,kBAAkB;AAAA,cAC9B,8BAAC;AAAA,gBAAK,OAAO,aAAa;AAAA,gBAAgB,QAAQ,cAAc,OAAO,CAAC;AAAA,gBAAG,GAAG;AAAA,gBAAK,GAAG,OAAO,CAAC;AAAA,eAAG;AAAA,aACnG;AAAA,WACF,IACE;AAAA;AAAA,SAzBE,GA0BR;AAAA,KACF;AAAA,GACF;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -1,88 +1,37 @@
1
1
  import * as React from "react";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useState, useRef, useCallback, useContext } from "react";
3
+ import { useState, useContext, useMemo } from "react";
4
4
  import { DSPopperJS } from "@elliemae/ds-popperjs";
5
- import { ThemeContext, styled } from "@elliemae/ds-system";
6
- import { ChartContext } from "../ChartContext";
7
- import { StyleFocusableRegion } from "../styles";
8
- const StyledTooltipContainer = styled.div`
9
- text-align: center;
10
- min-width: ${({ theme }) => theme.space.l};
11
- max-width: 250px;
12
- min-height: 30px;
13
- display: grid;
14
- align-items: center;
15
- padding: ${({ theme }) => `${theme.space.xxxs} ${theme.space.xs}`};
16
- position: relative;
17
- background-color: white;
18
- border-radius: 2px;
19
- font-size: 13px;
20
- color: ${({ theme }) => theme.colors.neutral[600]};
21
- `;
22
- const StyledMouseOverDetectionBox = styled.div`
23
- position: absolute;
24
- top: -15px;
25
- right: -15px;
26
- width: calc(100% + 30px);
27
- height: calc(100% + 30px);
28
- z-index: -1;
29
- `;
5
+ import { ThemeContext } from "@elliemae/ds-system";
6
+ import { StyledTooltipContainer, StyledMouseOverDetectionBox } from "../styles";
30
7
  const FocusableRegion = (props) => {
31
- const { activePoint } = useContext(ChartContext);
32
8
  const [referenceElement, setReferenceElement] = useState();
33
9
  const theme = useContext(ThemeContext);
34
- const [showPopover, setShowPopover] = useState(false);
35
- const { id, pointRadius, content, ...rest } = props;
36
- const isFocused = activePoint === id;
37
- const focusableElement = useRef(null);
38
- const handleRef = useCallback(
39
- (newRef) => {
40
- if (focusableElement.current)
41
- focusableElement.current = newRef;
42
- if (isFocused)
43
- newRef?.focus();
44
- },
45
- [isFocused]
46
- );
47
- const onMouseEnter = () => {
48
- setShowPopover(true);
49
- };
50
- const onMouseLeave = () => {
51
- setShowPopover(false);
52
- };
53
- const onFocus = () => {
54
- setShowPopover(true);
55
- };
56
- const onBlur = () => {
57
- setShowPopover(false);
58
- };
59
- return /* @__PURE__ */ jsx("foreignObject", {
60
- ...rest,
61
- onFocus,
62
- onBlur,
63
- ref: setReferenceElement,
64
- children: /* @__PURE__ */ jsxs("div", {
65
- children: [
66
- /* @__PURE__ */ jsx(StyleFocusableRegion, {
67
- s: pointRadius,
68
- tabIndex: -1,
69
- ref: handleRef
70
- }),
71
- showPopover && /* @__PURE__ */ jsxs(DSPopperJS, {
10
+ const { content, ...rest } = props;
11
+ return useMemo(
12
+ () => /* @__PURE__ */ jsx("foreignObject", {
13
+ ...rest,
14
+ ref: setReferenceElement,
15
+ children: /* @__PURE__ */ jsx("div", {
16
+ children: /* @__PURE__ */ jsxs(DSPopperJS, {
72
17
  withoutAnimation: true,
73
18
  referenceElement,
74
- showPopover,
19
+ showPopover: true,
75
20
  zIndex: theme.zIndex.tooltip,
76
21
  children: [
77
22
  /* @__PURE__ */ jsx(StyledMouseOverDetectionBox, {}),
78
23
  /* @__PURE__ */ jsx(StyledTooltipContainer, {
24
+ "aria-live": "polite",
25
+ "aria-atomic": "false",
26
+ "aria-relevant": "additions text",
79
27
  children: content
80
28
  })
81
29
  ]
82
30
  })
83
- ]
84
- })
85
- });
31
+ })
32
+ }),
33
+ [content, referenceElement, rest, theme.zIndex.tooltip]
34
+ );
86
35
  };
87
36
  export {
88
37
  FocusableRegion
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/parts/FocusableRegion.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport React, { useState, useRef, useCallback, useContext } from 'react';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport { ThemeContext, styled } from '@elliemae/ds-system';\nimport { ChartContext } from '../ChartContext';\n\nimport { StyleFocusableRegion } from '../styles';\n\nconst StyledTooltipContainer = styled.div`\n text-align: center;\n min-width: ${({ theme }) => theme.space.l};\n max-width: 250px;\n min-height: 30px;\n display: grid;\n align-items: center;\n padding: ${({ theme }) => `${theme.space.xxxs} ${theme.space.xs}`};\n position: relative;\n background-color: white;\n border-radius: 2px;\n font-size: 13px;\n color: ${({ theme }) => theme.colors.neutral[600]};\n`;\n\nconst StyledMouseOverDetectionBox = styled.div`\n position: absolute;\n top: -15px;\n right: -15px;\n width: calc(100% + 30px);\n height: calc(100% + 30px);\n z-index: -1;\n`;\n\nexport const FocusableRegion: React.ComponentType<any> = (props) => {\n const { activePoint } = useContext(ChartContext);\n\n const [referenceElement, setReferenceElement] = useState<HTMLSpanElement | null>();\n const theme = useContext(ThemeContext);\n\n const [showPopover, setShowPopover] = useState(false);\n const { id, pointRadius, content, ...rest } = props;\n const isFocused = activePoint === id;\n\n const focusableElement = useRef(null);\n const handleRef = useCallback(\n (newRef: HTMLDivElement) => {\n if (focusableElement.current) focusableElement.current = newRef;\n if (isFocused) newRef?.focus();\n },\n [isFocused],\n );\n\n const onMouseEnter = () => {\n setShowPopover(true);\n };\n\n const onMouseLeave = () => {\n setShowPopover(false);\n };\n\n const onFocus = () => {\n setShowPopover(true);\n };\n\n const onBlur = () => {\n setShowPopover(false);\n };\n\n return (\n <foreignObject\n {...rest}\n // onMouseEnter={onMouseEnter}\n // onMouseLeave={onMouseLeave}\n // onPointerEnter={onMouseEnter}\n // onPointerLeave={onMouseLeave}\n onFocus={onFocus}\n onBlur={onBlur}\n ref={setReferenceElement}\n >\n <div>\n <StyleFocusableRegion\n s={pointRadius}\n // aria-label={`${xValue} ${d[yValue]}`}\n tabIndex={-1}\n ref={handleRef}\n ></StyleFocusableRegion>\n {showPopover && (\n <DSPopperJS\n withoutAnimation\n referenceElement={referenceElement}\n showPopover={showPopover}\n zIndex={theme.zIndex.tooltip}\n >\n <StyledMouseOverDetectionBox />\n <StyledTooltipContainer>{content}</StyledTooltipContainer>\n </DSPopperJS>\n )}\n </div>\n </foreignObject>\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB;AACA,SAAgB,UAAU,QAAQ,aAAa,kBAAkB;AACjE,SAAS,kBAAkB;AAC3B,SAAS,cAAc,cAAc;AACrC,SAAS,oBAAoB;AAE7B,SAAS,4BAA4B;AAErC,MAAM,yBAAyB,OAAO;AAAA;AAAA,eAEvB,CAAC,EAAE,MAAM,MAAM,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,aAK7B,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,MAAM,QAAQ,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,WAKpD,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,QAAQ;AAAA;AAG/C,MAAM,8BAA8B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASpC,MAAM,kBAA4C,CAAC,UAAU;AAClE,QAAM,EAAE,YAAY,IAAI,WAAW,YAAY;AAE/C,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAiC;AACjF,QAAM,QAAQ,WAAW,YAAY;AAErC,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,QAAM,EAAE,IAAI,aAAa,YAAY,KAAK,IAAI;AAC9C,QAAM,YAAY,gBAAgB;AAElC,QAAM,mBAAmB,OAAO,IAAI;AACpC,QAAM,YAAY;AAAA,IAChB,CAAC,WAA2B;AAC1B,UAAI,iBAAiB;AAAS,yBAAiB,UAAU;AACzD,UAAI;AAAW,gBAAQ,MAAM;AAAA,IAC/B;AAAA,IACA,CAAC,SAAS;AAAA,EACZ;AAEA,QAAM,eAAe,MAAM;AACzB,mBAAe,IAAI;AAAA,EACrB;AAEA,QAAM,eAAe,MAAM;AACzB,mBAAe,KAAK;AAAA,EACtB;AAEA,QAAM,UAAU,MAAM;AACpB,mBAAe,IAAI;AAAA,EACrB;AAEA,QAAM,SAAS,MAAM;AACnB,mBAAe,KAAK;AAAA,EACtB;AAEA,SACE,oBAAC;AAAA,IACE,GAAG;AAAA,IAKJ;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IAEL,+BAAC;AAAA,MACC;AAAA,4BAAC;AAAA,UACC,GAAG;AAAA,UAEH,UAAU;AAAA,UACV,KAAK;AAAA,SACN;AAAA,QACA,eACC,qBAAC;AAAA,UACC,kBAAgB;AAAA,UAChB;AAAA,UACA;AAAA,UACA,QAAQ,MAAM,OAAO;AAAA,UAErB;AAAA,gCAAC,+BAA4B;AAAA,YAC7B,oBAAC;AAAA,cAAwB;AAAA,aAAQ;AAAA;AAAA,SACnC;AAAA;AAAA,KAEJ;AAAA,GACF;AAEJ;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\nimport React, { useState, useContext, useMemo } from 'react';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport { ThemeContext } from '@elliemae/ds-system';\n\nimport { StyledTooltipContainer, StyledMouseOverDetectionBox } from '../styles';\n\nexport const FocusableRegion: React.ComponentType<any> = (props) => {\n const [referenceElement, setReferenceElement] = useState<HTMLSpanElement | null>();\n const theme = useContext(ThemeContext);\n\n const { content, ...rest } = props;\n\n return useMemo(\n () => (\n <foreignObject {...rest} ref={setReferenceElement}>\n <div>\n <DSPopperJS withoutAnimation referenceElement={referenceElement} showPopover zIndex={theme.zIndex.tooltip}>\n <StyledMouseOverDetectionBox />\n <StyledTooltipContainer aria-live=\"polite\" aria-atomic=\"false\" aria-relevant=\"additions text\">\n {content}\n </StyledTooltipContainer>\n </DSPopperJS>\n </div>\n </foreignObject>\n ),\n [content, referenceElement, rest, theme.zIndex.tooltip],\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB;AACA,SAAgB,UAAU,YAAY,eAAe;AACrD,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAE7B,SAAS,wBAAwB,mCAAmC;AAE7D,MAAM,kBAA4C,CAAC,UAAU;AAClE,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAiC;AACjF,QAAM,QAAQ,WAAW,YAAY;AAErC,QAAM,EAAE,YAAY,KAAK,IAAI;AAE7B,SAAO;AAAA,IACL,MACE,oBAAC;AAAA,MAAe,GAAG;AAAA,MAAM,KAAK;AAAA,MAC5B,8BAAC;AAAA,QACC,+BAAC;AAAA,UAAW,kBAAgB;AAAA,UAAC;AAAA,UAAoC,aAAW;AAAA,UAAC,QAAQ,MAAM,OAAO;AAAA,UAChG;AAAA,gCAAC,+BAA4B;AAAA,YAC7B,oBAAC;AAAA,cAAuB,aAAU;AAAA,cAAS,eAAY;AAAA,cAAQ,iBAAc;AAAA,cAC1E;AAAA,aACH;AAAA;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IAEF,CAAC,SAAS,kBAAkB,MAAM,MAAM,OAAO,OAAO;AAAA,EACxD;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,28 @@
1
+ import * as React from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useContext } from "react";
4
+ import { ChartContext } from "../../ChartContext";
5
+ import { StyledAxisLabel } from "../../styles";
6
+ const BottomLabel = () => {
7
+ const {
8
+ internalMargin,
9
+ setBottomLabel,
10
+ innerHeight,
11
+ innerWidth,
12
+ props: { xAxis }
13
+ } = useContext(ChartContext);
14
+ return /* @__PURE__ */ jsx("g", {
15
+ ref: setBottomLabel,
16
+ transform: `translate(${innerWidth / 2 + internalMargin.left},${innerHeight + internalMargin.top})`,
17
+ children: /* @__PURE__ */ jsx(StyledAxisLabel, {
18
+ className: "axis-label",
19
+ textAnchor: "middle",
20
+ dy: 35,
21
+ children: xAxis?.label
22
+ })
23
+ });
24
+ };
25
+ export {
26
+ BottomLabel
27
+ };
28
+ //# sourceMappingURL=BottomLabel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/graphs/Chart/parts/Labels/BottomLabel.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useMemo } from 'react';\nimport { ChartContext } from '../../ChartContext';\nimport { StyledAxisLabel } from '../../styles';\n\nexport const BottomLabel = () => {\n const {\n internalMargin,\n setBottomLabel,\n innerHeight,\n innerWidth,\n props: { xAxis },\n } = useContext(ChartContext);\n\n return (\n <g\n ref={setBottomLabel}\n transform={`translate(${innerWidth / 2 + internalMargin.left},${innerHeight + internalMargin.top})`}\n >\n <StyledAxisLabel className=\"axis-label\" textAnchor=\"middle\" dy={35}>\n {xAxis?.label}\n </StyledAxisLabel>\n </g>\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,kBAA2B;AAC3C,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAEzB,MAAM,cAAc,MAAM;AAC/B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,MAAM;AAAA,EACjB,IAAI,WAAW,YAAY;AAE3B,SACE,oBAAC;AAAA,IACC,KAAK;AAAA,IACL,WAAW,aAAa,aAAa,IAAI,eAAe,QAAQ,cAAc,eAAe;AAAA,IAE7F,8BAAC;AAAA,MAAgB,WAAU;AAAA,MAAa,YAAW;AAAA,MAAS,IAAI;AAAA,MAC7D,iBAAO;AAAA,KACV;AAAA,GACF;AAEJ;",
6
+ "names": []
7
+ }