@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": ["../../../../../../src/graphs/Chart/parts/Scrapper/VerticalScrapperLine.tsx", "../../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React, { useContext, useCallback, useState, useMemo } from 'react';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport { ThemeContext } from '@elliemae/ds-system';\nimport { ChartContext } from '../../ChartContext';\nimport { StyledMouseOverDetectionBox, StyledTooltipContainer } from '../../styles';\n\nexport const VerticalScrapperLine = ({ lineWidth, xPosition, datum }) => {\n const {\n scrapperPosX,\n setScrapperPosX,\n isGrabbed,\n xScale,\n innerWidth,\n innerHeight,\n props: { TooltipRenderer, scrapper },\n } = useContext(ChartContext);\n const theme = useContext(ThemeContext);\n const [referenceElement, setReferenceElement] = useState<React.SVGProps<SVGLineElement> | null>();\n const isActive = scrapperPosX === xPosition;\n const handleOnMouseEnter = useCallback(() => {\n if (!isGrabbed) setScrapperPosX(xPosition);\n }, [isGrabbed, setScrapperPosX, xPosition]);\n\n const strokeDetectorWidth = xScale.bandwidth ? xScale.bandwidth() : lineWidth;\n\n const render = useMemo(() => {\n return (\n <g>\n {isActive && !isGrabbed ? (\n <g>\n {TooltipRenderer ? (\n <foreignObject>\n <DSPopperJS\n withoutAnimation\n withoutArrow\n customOffset={[0, 5]}\n referenceElement={referenceElement}\n showPopover\n zIndex={theme.zIndex.tooltip}\n startPlacementPreference={scrapper.tooltipPreference}\n >\n <StyledMouseOverDetectionBox />\n <StyledTooltipContainer>\n <TooltipRenderer data={datum} />\n </StyledTooltipContainer>\n </DSPopperJS>\n </foreignObject>\n ) : null}\n <line\n ref={setReferenceElement}\n x1={xPosition}\n strokeWidth=\"2px\"\n stroke={scrapper.color}\n y1={0}\n x2={xPosition}\n y2={innerHeight}\n strokeDasharray={(4, 4)}\n />\n </g>\n ) : null}\n\n <line\n onMouseOver={handleOnMouseEnter}\n // onMouseLeave={() => setScrapperPosY('')}\n // id=\"horizontal-scrapper-zone\"\n x1={xPosition}\n strokeWidth={strokeDetectorWidth}\n stroke=\"transparent\"\n y1={0}\n x2={xPosition}\n y2={innerHeight}\n />\n </g>\n );\n }, [\n isActive,\n isGrabbed,\n TooltipRenderer,\n referenceElement,\n theme.zIndex.tooltip,\n scrapper.tooltipPreference,\n scrapper.color,\n datum,\n xPosition,\n innerHeight,\n handleOnMouseEnter,\n strokeDetectorWidth,\n ]);\n return render;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AAAA,mBAAkE;AAClE,yBAA2B;AAC3B,uBAA6B;AAC7B,0BAA6B;AAC7B,oBAAoE;AAE7D,MAAM,uBAAuB,CAAC,EAAE,WAAW,WAAW,MAAM,MAAM;AACvE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,iBAAiB,SAAS;AAAA,EACrC,QAAI,yBAAW,gCAAY;AAC3B,QAAM,YAAQ,yBAAW,6BAAY;AACrC,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,uBAAgD;AAChG,QAAM,WAAW,iBAAiB;AAClC,QAAM,yBAAqB,0BAAY,MAAM;AAC3C,QAAI,CAAC;AAAW,sBAAgB,SAAS;AAAA,EAC3C,GAAG,CAAC,WAAW,iBAAiB,SAAS,CAAC;AAE1C,QAAM,sBAAsB,OAAO,YAAY,OAAO,UAAU,IAAI;AAEpE,QAAM,aAAS,sBAAQ,MAAM;AAC3B,WACE,6CAAC;AAAA,MACE;AAAA,oBAAY,CAAC,YACZ,6CAAC;AAAA,UACE;AAAA,8BACC,4CAAC;AAAA,cACC,uDAAC;AAAA,gBACC,kBAAgB;AAAA,gBAChB,cAAY;AAAA,gBACZ,cAAc,CAAC,GAAG,CAAC;AAAA,gBACnB;AAAA,gBACA,aAAW;AAAA,gBACX,QAAQ,MAAM,OAAO;AAAA,gBACrB,0BAA0B,SAAS;AAAA,gBAEnC;AAAA,8DAAC,6CAA4B;AAAA,kBAC7B,4CAAC;AAAA,oBACC,sDAAC;AAAA,sBAAgB,MAAM;AAAA,qBAAO;AAAA,mBAChC;AAAA;AAAA,eACF;AAAA,aACF,IACE;AAAA,YACJ,4CAAC;AAAA,cACC,KAAK;AAAA,cACL,IAAI;AAAA,cACJ,aAAY;AAAA,cACZ,QAAQ,SAAS;AAAA,cACjB,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,kBAAkB,GAAG;AAAA,aACvB;AAAA;AAAA,SACF,IACE;AAAA,QAEJ,4CAAC;AAAA,UACC,aAAa;AAAA,UAGb,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,QAAO;AAAA,UACP,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,SACN;AAAA;AAAA,KACF;AAAA,EAEJ,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,OAAO;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO;AACT;",
4
+ "sourcesContent": ["import React, { useContext, useCallback, useState, useMemo } from 'react';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport { ThemeContext } from '@elliemae/ds-system';\nimport { ChartContext } from '../../ChartContext';\nimport { StyledMouseOverDetectionBox, StyledTooltipContainer } from '../../styles';\n\nexport const VerticalScrapperLine = ({ lineWidth, xPosition, datum }) => {\n const {\n scrapperPosX,\n setScrapperPosX,\n isGrabbed,\n xScale,\n innerWidth,\n innerHeight,\n props: { TooltipRenderer, scrapper },\n } = useContext(ChartContext);\n const theme = useContext(ThemeContext);\n const [referenceElement, setReferenceElement] = useState<React.SVGProps<SVGLineElement> | null>();\n const isActive = scrapperPosX === xPosition;\n const handleOnMouseEnter = useCallback(() => {\n if (!isGrabbed) setScrapperPosX(xPosition);\n }, [isGrabbed, setScrapperPosX, xPosition]);\n\n const strokeDetectorWidth = xScale.bandwidth ? xScale.bandwidth() : '4px';\n\n const render = useMemo(\n () => (\n <g>\n {isActive && !isGrabbed ? (\n <g>\n {TooltipRenderer ? (\n <foreignObject>\n <DSPopperJS\n withoutAnimation\n withoutArrow\n customOffset={[0, 5]}\n referenceElement={referenceElement}\n showPopover\n zIndex={theme.zIndex.tooltip}\n startPlacementPreference={scrapper.tooltipPreference}\n >\n <StyledMouseOverDetectionBox />\n <StyledTooltipContainer>\n <TooltipRenderer data={datum} />\n </StyledTooltipContainer>\n </DSPopperJS>\n </foreignObject>\n ) : null}\n <line\n ref={setReferenceElement}\n x1={xPosition}\n strokeWidth=\"2px\"\n stroke={scrapper.color}\n y1={0}\n x2={xPosition}\n y2={innerHeight}\n strokeDasharray={(4, 4)}\n />\n </g>\n ) : null}\n\n <line\n onMouseOver={handleOnMouseEnter}\n // onMouseLeave={() => setScrapperPosY('')}\n // id=\"horizontal-scrapper-zone\"\n x1={xPosition}\n strokeWidth={strokeDetectorWidth}\n stroke=\"transparent\"\n y1={0}\n x2={xPosition}\n y2={innerHeight}\n />\n </g>\n ),\n [\n isActive,\n isGrabbed,\n TooltipRenderer,\n referenceElement,\n theme.zIndex.tooltip,\n scrapper.tooltipPreference,\n scrapper.color,\n datum,\n xPosition,\n innerHeight,\n handleOnMouseEnter,\n strokeDetectorWidth,\n ],\n );\n return render;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AAAA,mBAAkE;AAClE,yBAA2B;AAC3B,uBAA6B;AAC7B,0BAA6B;AAC7B,oBAAoE;AAE7D,MAAM,uBAAuB,CAAC,EAAE,WAAW,WAAW,MAAM,MAAM;AACvE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,iBAAiB,SAAS;AAAA,EACrC,QAAI,yBAAW,gCAAY;AAC3B,QAAM,YAAQ,yBAAW,6BAAY;AACrC,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,uBAAgD;AAChG,QAAM,WAAW,iBAAiB;AAClC,QAAM,yBAAqB,0BAAY,MAAM;AAC3C,QAAI,CAAC;AAAW,sBAAgB,SAAS;AAAA,EAC3C,GAAG,CAAC,WAAW,iBAAiB,SAAS,CAAC;AAE1C,QAAM,sBAAsB,OAAO,YAAY,OAAO,UAAU,IAAI;AAEpE,QAAM,aAAS;AAAA,IACb,MACE,6CAAC;AAAA,MACE;AAAA,oBAAY,CAAC,YACZ,6CAAC;AAAA,UACE;AAAA,8BACC,4CAAC;AAAA,cACC,uDAAC;AAAA,gBACC,kBAAgB;AAAA,gBAChB,cAAY;AAAA,gBACZ,cAAc,CAAC,GAAG,CAAC;AAAA,gBACnB;AAAA,gBACA,aAAW;AAAA,gBACX,QAAQ,MAAM,OAAO;AAAA,gBACrB,0BAA0B,SAAS;AAAA,gBAEnC;AAAA,8DAAC,6CAA4B;AAAA,kBAC7B,4CAAC;AAAA,oBACC,sDAAC;AAAA,sBAAgB,MAAM;AAAA,qBAAO;AAAA,mBAChC;AAAA;AAAA,eACF;AAAA,aACF,IACE;AAAA,YACJ,4CAAC;AAAA,cACC,KAAK;AAAA,cACL,IAAI;AAAA,cACJ,aAAY;AAAA,cACZ,QAAQ,SAAS;AAAA,cACjB,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,kBAAkB,GAAG;AAAA,aACvB;AAAA;AAAA,SACF,IACE;AAAA,QAEJ,4CAAC;AAAA,UACC,aAAa;AAAA,UAGb,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,QAAO;AAAA,UACP,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,SACN;AAAA;AAAA,KACF;AAAA,IAEF;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,OAAO;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/graphs/Chart/parts/Scroller/ScrollBarX.tsx", "../../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable arrow-body-style */\n/* eslint-disable indent */\nimport React, { useContext, useCallback, useMemo } from 'react';\nimport { ChartContext } from '../../ChartContext';\n\nexport const ScrollBarX = () => {\n const {\n setIsGrabbed,\n setStartPosition,\n innerWidth,\n xScrollbarPosition,\n activePoint,\n setXScrollbarPosition,\n innerHeight,\n isGrabbed,\n containerRatio,\n setScrapperPosX,\n isScrollbarVisible,\n oldLastPosition,\n } = useContext(ChartContext);\n\n const barWidth = useMemo(() => parseInt(innerWidth / containerRatio, 10), [containerRatio, innerWidth]);\n\n // const [endPosition, setEndPosition] = useState(0);\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n setScrapperPosX('');\n setIsGrabbed(true);\n setStartPosition(e.clientX);\n e.preventDefault();\n },\n [setIsGrabbed, setScrapperPosX, setStartPosition],\n );\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent) => {\n setScrapperPosX('');\n },\n [setScrapperPosX],\n );\n\n // const [endPosition, setEndPosition] = useState(0);\n const handleClickFullBar = useCallback(\n (e: React.MouseEvent) => {\n let newPosition = 0;\n const bar = e.target;\n const bounds = bar.getBoundingClientRect();\n const left = e.clientX - bounds.left;\n if (left + barWidth / 2 > innerWidth) {\n newPosition = innerWidth - barWidth;\n } else if (left - barWidth / 2 > 0) {\n newPosition = left - barWidth / 2;\n }\n\n setXScrollbarPosition(newPosition);\n oldLastPosition.current = newPosition;\n e.preventDefault();\n },\n [barWidth, innerWidth, oldLastPosition, setXScrollbarPosition],\n );\n\n const isBarVisible = useMemo(\n () => (isScrollbarVisible || activePoint) && containerRatio > 1,\n [activePoint, containerRatio, isScrollbarVisible],\n );\n\n return (\n <g\n className=\"scrollbarx\"\n transform={`translate(0,${innerHeight})`}\n style={{ visibility: isBarVisible ? 'visible' : 'hidden' }}\n onMouseEnter={handleMouseEnter}\n >\n <rect style={{ cursor: 'pointer' }} width={innerWidth} height=\"6\" fill=\"#ebecf0c5\" onClick={handleClickFullBar} />\n <g transform={`translate(${xScrollbarPosition},0)`}>\n <rect\n style={{ cursor: isGrabbed ? 'grabbing' : 'grab' }}\n width={barWidth}\n height=\"6\"\n fill=\"grey\"\n onMouseDown={handleMouseDown}\n />\n </g>\n </g>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AAEA,mBAAwD;AACxD,0BAA6B;AAEtB,MAAM,aAAa,MAAM;AAC9B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yBAAW,gCAAY;AAE3B,QAAM,eAAW,sBAAQ,MAAM,SAAS,aAAa,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,UAAU,CAAC;AAGtG,QAAM,sBAAkB;AAAA,IACtB,CAAC,MAAwB;AACvB,sBAAgB,EAAE;AAClB,mBAAa,IAAI;AACjB,uBAAiB,EAAE,OAAO;AAC1B,QAAE,eAAe;AAAA,IACnB;AAAA,IACA,CAAC,cAAc,iBAAiB,gBAAgB;AAAA,EAClD;AAEA,QAAM,uBAAmB;AAAA,IACvB,CAAC,MAAwB;AACvB,sBAAgB,EAAE;AAAA,IACpB;AAAA,IACA,CAAC,eAAe;AAAA,EAClB;AAGA,QAAM,yBAAqB;AAAA,IACzB,CAAC,MAAwB;AACvB,UAAI,cAAc;AAClB,YAAM,MAAM,EAAE;AACd,YAAM,SAAS,IAAI,sBAAsB;AACzC,YAAM,OAAO,EAAE,UAAU,OAAO;AAChC,UAAI,OAAO,WAAW,IAAI,YAAY;AACpC,sBAAc,aAAa;AAAA,MAC7B,WAAW,OAAO,WAAW,IAAI,GAAG;AAClC,sBAAc,OAAO,WAAW;AAAA,MAClC;AAEA,4BAAsB,WAAW;AACjC,sBAAgB,UAAU;AAC1B,QAAE,eAAe;AAAA,IACnB;AAAA,IACA,CAAC,UAAU,YAAY,iBAAiB,qBAAqB;AAAA,EAC/D;AAEA,QAAM,mBAAe;AAAA,IACnB,OAAO,sBAAsB,gBAAgB,iBAAiB;AAAA,IAC9D,CAAC,aAAa,gBAAgB,kBAAkB;AAAA,EAClD;AAEA,SACE,6CAAC;AAAA,IACC,WAAU;AAAA,IACV,WAAW,eAAe;AAAA,IAC1B,OAAO,EAAE,YAAY,eAAe,YAAY,SAAS;AAAA,IACzD,cAAc;AAAA,IAEd;AAAA,kDAAC;AAAA,QAAK,OAAO,EAAE,QAAQ,UAAU;AAAA,QAAG,OAAO;AAAA,QAAY,QAAO;AAAA,QAAI,MAAK;AAAA,QAAY,SAAS;AAAA,OAAoB;AAAA,MAChH,4CAAC;AAAA,QAAE,WAAW,aAAa;AAAA,QACzB,sDAAC;AAAA,UACC,OAAO,EAAE,QAAQ,YAAY,aAAa,OAAO;AAAA,UACjD,OAAO;AAAA,UACP,QAAO;AAAA,UACP,MAAK;AAAA,UACL,aAAa;AAAA,SACf;AAAA,OACF;AAAA;AAAA,GACF;AAEJ;",
4
+ "sourcesContent": ["/* eslint-disable arrow-body-style */\n/* eslint-disable indent */\nimport React, { useContext, useCallback, useMemo } from 'react';\nimport { ChartContext } from '../../ChartContext';\n\nexport const ScrollBarX = () => {\n const {\n setIsGrabbed,\n setStartPosition,\n innerWidth,\n xScrollbarPosition,\n activePoint,\n setXScrollbarPosition,\n innerHeight,\n isGrabbed,\n containerRatio,\n setScrapperPosX,\n isScrollbarVisible,\n oldLastPosition,\n } = useContext(ChartContext);\n\n const barWidth = useMemo(() => parseInt(innerWidth / containerRatio, 10), [containerRatio, innerWidth]);\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n setScrapperPosX('');\n setIsGrabbed(true);\n setStartPosition(e.clientX);\n e.preventDefault();\n },\n [setIsGrabbed, setScrapperPosX, setStartPosition],\n );\n\n const handleMouseEnter = useCallback(\n (e: React.MouseEvent) => {\n setScrapperPosX('');\n },\n [setScrapperPosX],\n );\n\n const handleClickFullBar = useCallback(\n (e: React.MouseEvent) => {\n let newPosition = 0;\n const bar = e.target;\n const bounds = bar.getBoundingClientRect();\n const left = e.clientX - bounds.left;\n if (left + barWidth / 2 > innerWidth) {\n newPosition = innerWidth - barWidth;\n } else if (left - barWidth / 2 > 0) {\n newPosition = left - barWidth / 2;\n }\n\n setXScrollbarPosition(newPosition);\n oldLastPosition.current = newPosition;\n e.preventDefault();\n },\n [barWidth, innerWidth, oldLastPosition, setXScrollbarPosition],\n );\n\n const isBarVisible = useMemo(\n () => (isScrollbarVisible || activePoint) && containerRatio > 1,\n [activePoint, containerRatio, isScrollbarVisible],\n );\n\n return (\n <g\n className=\"scrollbarx\"\n transform={`translate(0,${innerHeight})`}\n style={{ visibility: isBarVisible ? 'visible' : 'hidden' }}\n onMouseEnter={handleMouseEnter}\n >\n <rect style={{ cursor: 'pointer' }} width={innerWidth} height=\"6\" fill=\"#ebecf0c5\" onClick={handleClickFullBar} />\n <g transform={`translate(${xScrollbarPosition},0)`}>\n <rect\n style={{ cursor: isGrabbed ? 'grabbing' : 'grab' }}\n width={barWidth}\n height=\"6\"\n fill=\"grey\"\n onMouseDown={handleMouseDown}\n />\n </g>\n </g>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AAEA,mBAAwD;AACxD,0BAA6B;AAEtB,MAAM,aAAa,MAAM;AAC9B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yBAAW,gCAAY;AAE3B,QAAM,eAAW,sBAAQ,MAAM,SAAS,aAAa,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,UAAU,CAAC;AAEtG,QAAM,sBAAkB;AAAA,IACtB,CAAC,MAAwB;AACvB,sBAAgB,EAAE;AAClB,mBAAa,IAAI;AACjB,uBAAiB,EAAE,OAAO;AAC1B,QAAE,eAAe;AAAA,IACnB;AAAA,IACA,CAAC,cAAc,iBAAiB,gBAAgB;AAAA,EAClD;AAEA,QAAM,uBAAmB;AAAA,IACvB,CAAC,MAAwB;AACvB,sBAAgB,EAAE;AAAA,IACpB;AAAA,IACA,CAAC,eAAe;AAAA,EAClB;AAEA,QAAM,yBAAqB;AAAA,IACzB,CAAC,MAAwB;AACvB,UAAI,cAAc;AAClB,YAAM,MAAM,EAAE;AACd,YAAM,SAAS,IAAI,sBAAsB;AACzC,YAAM,OAAO,EAAE,UAAU,OAAO;AAChC,UAAI,OAAO,WAAW,IAAI,YAAY;AACpC,sBAAc,aAAa;AAAA,MAC7B,WAAW,OAAO,WAAW,IAAI,GAAG;AAClC,sBAAc,OAAO,WAAW;AAAA,MAClC;AAEA,4BAAsB,WAAW;AACjC,sBAAgB,UAAU;AAC1B,QAAE,eAAe;AAAA,IACnB;AAAA,IACA,CAAC,UAAU,YAAY,iBAAiB,qBAAqB;AAAA,EAC/D;AAEA,QAAM,mBAAe;AAAA,IACnB,OAAO,sBAAsB,gBAAgB,iBAAiB;AAAA,IAC9D,CAAC,aAAa,gBAAgB,kBAAkB;AAAA,EAClD;AAEA,SACE,6CAAC;AAAA,IACC,WAAU;AAAA,IACV,WAAW,eAAe;AAAA,IAC1B,OAAO,EAAE,YAAY,eAAe,YAAY,SAAS;AAAA,IACzD,cAAc;AAAA,IAEd;AAAA,kDAAC;AAAA,QAAK,OAAO,EAAE,QAAQ,UAAU;AAAA,QAAG,OAAO;AAAA,QAAY,QAAO;AAAA,QAAI,MAAK;AAAA,QAAY,SAAS;AAAA,OAAoB;AAAA,MAChH,4CAAC;AAAA,QAAE,WAAW,aAAa;AAAA,QACzB,sDAAC;AAAA,UACC,OAAO,EAAE,QAAQ,YAAY,aAAa,OAAO;AAAA,UACjD,OAAO;AAAA,UACP,QAAO;AAAA,UACP,MAAK;AAAA,UACL,aAAa;AAAA,SACf;AAAA,OACF;AAAA;AAAA,GACF;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -43,14 +43,14 @@ const SeriesFactory = () => {
43
43
  } = (0, import_react.useContext)(import_ChartContext.ChartContext);
44
44
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("g", {
45
45
  className: "content",
46
- children: data.map((serie) => {
46
+ children: data.filter((serie) => !serie.isHidden).map((serie) => {
47
47
  const serieProps = {
48
48
  key: serie.key,
49
49
  serie: {
50
50
  ...serie,
51
51
  data: containerRatio > 1 ? serie.data.filter((datum) => {
52
52
  const xScaleValue = xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x);
53
- return xScaleValue > xScrollbarPosition * (containerRatio ?? 1) - 20 * containerRatio && xScaleValue < xScrollbarPosition * (containerRatio ?? 1) + innerWidth + 20 * containerRatio;
53
+ return xScaleValue > xScrollbarPosition * (containerRatio ?? 1) - 40 * containerRatio && xScaleValue < xScrollbarPosition * (containerRatio ?? 1) + innerWidth + 40 * containerRatio;
54
54
  }) : serie.data
55
55
  }
56
56
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/graphs/Chart/parts/SeriesFactory.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable complexity */\n/* eslint-disable arrow-body-style */\n/* eslint-disable indent */\nimport React, { useContext, useMemo } from 'react';\nimport { ChartContext } from '../ChartContext';\nimport { Line, Points, Bars, StackedBar, Area } from '../series';\nimport { getStackedIndex } from '../helpers';\nimport { throttle } from 'lodash';\nexport const SeriesFactory = () => {\n const {\n props: { data, xAxis, groups, types },\n xScrollbarPosition,\n innerWidth,\n xScale,\n containerRatio,\n } = useContext(ChartContext);\n\n return (\n <g className=\"content\">\n {\n data.map((serie) => {\n const serieProps = {\n key: serie.key,\n // @todo fix this for both axis make a hook useVirtualize\n serie: {\n ...serie,\n data:\n containerRatio > 1\n ? serie.data.filter((datum) => {\n const xScaleValue = xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x);\n return (\n xScaleValue > xScrollbarPosition * (containerRatio ?? 1) - 20 * containerRatio &&\n xScaleValue < xScrollbarPosition * (containerRatio ?? 1) + innerWidth + 20 * containerRatio\n );\n })\n : serie.data,\n },\n };\n if (serie.type === 'bar' && groups && getStackedIndex(groups, serie.name) > -1) {\n return <StackedBar {...serieProps} />;\n }\n if (serie.type === 'bar') {\n return <Bars {...serieProps} />;\n }\n if ((types === 'scatter' && !serie.type) || serie.type === 'point') {\n return <Points {...serieProps} />;\n }\n if (serie.type === 'line') {\n return <Line {...serieProps} />;\n }\n if (serie.type === 'area') {\n return <Area {...serieProps} />;\n }\n return <></>;\n }) as JSX.Element[]\n }\n </g>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AAGA,mBAA2C;AAC3C,0BAA6B;AAC7B,oBAAqD;AACrD,qBAAgC;AAEzB,MAAM,gBAAgB,MAAM;AACjC,QAAM;AAAA,IACJ,OAAO,EAAE,MAAM,OAAO,QAAQ,MAAM;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yBAAW,gCAAY;AAE3B,SACE,4CAAC;AAAA,IAAE,WAAU;AAAA,IAET,eAAK,IAAI,CAAC,UAAU;AAClB,YAAM,aAAa;AAAA,QACjB,KAAK,MAAM;AAAA,QAEX,OAAO;AAAA,UACL,GAAG;AAAA,UACH,MACE,iBAAiB,IACb,MAAM,KAAK,OAAO,CAAC,UAAU;AAC3B,kBAAM,cAAc,OAAO,MAAM,OAAO,MAAM,KAAK,MAAM,YAAY,MAAM,MAAM,CAAC;AAClF,mBACE,cAAc,sBAAsB,kBAAkB,KAAK,KAAK,kBAChE,cAAc,sBAAsB,kBAAkB,KAAK,aAAa,KAAK;AAAA,UAEjF,CAAC,IACD,MAAM;AAAA,QACd;AAAA,MACF;AACA,UAAI,MAAM,SAAS,SAAS,cAAU,gCAAgB,QAAQ,MAAM,IAAI,IAAI,IAAI;AAC9E,eAAO,4CAAC;AAAA,UAAY,GAAG;AAAA,SAAY;AAAA,MACrC;AACA,UAAI,MAAM,SAAS,OAAO;AACxB,eAAO,4CAAC;AAAA,UAAM,GAAG;AAAA,SAAY;AAAA,MAC/B;AACA,UAAK,UAAU,aAAa,CAAC,MAAM,QAAS,MAAM,SAAS,SAAS;AAClE,eAAO,4CAAC;AAAA,UAAQ,GAAG;AAAA,SAAY;AAAA,MACjC;AACA,UAAI,MAAM,SAAS,QAAQ;AACzB,eAAO,4CAAC;AAAA,UAAM,GAAG;AAAA,SAAY;AAAA,MAC/B;AACA,UAAI,MAAM,SAAS,QAAQ;AACzB,eAAO,4CAAC;AAAA,UAAM,GAAG;AAAA,SAAY;AAAA,MAC/B;AACA,aAAO,2EAAE;AAAA,IACX,CAAC;AAAA,GAEL;AAEJ;",
4
+ "sourcesContent": ["/* eslint-disable complexity */\n/* eslint-disable arrow-body-style */\n/* eslint-disable indent */\nimport React, { useContext, useMemo } from 'react';\nimport { ChartContext } from '../ChartContext';\nimport { Line, Points, Bars, StackedBar, Area } from '../series';\nimport { getStackedIndex } from '../helpers';\nimport { throttle } from 'lodash';\nexport const SeriesFactory = () => {\n const {\n props: { data, xAxis, groups, types },\n xScrollbarPosition,\n innerWidth,\n xScale,\n containerRatio,\n } = useContext(ChartContext);\n\n return (\n <g className=\"content\">\n {\n data\n .filter((serie) => !serie.isHidden)\n .map((serie) => {\n const serieProps = {\n key: serie.key,\n // @todo fix this for both axis make a hook useVirtualize\n serie: {\n ...serie,\n data:\n containerRatio > 1\n ? serie.data.filter((datum) => {\n const xScaleValue = xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x);\n return (\n xScaleValue > xScrollbarPosition * (containerRatio ?? 1) - 40 * containerRatio &&\n xScaleValue < xScrollbarPosition * (containerRatio ?? 1) + innerWidth + 40 * containerRatio\n );\n })\n : serie.data,\n },\n };\n if (serie.type === 'bar' && groups && getStackedIndex(groups, serie.name) > -1) {\n return <StackedBar {...serieProps} />;\n }\n if (serie.type === 'bar') {\n return <Bars {...serieProps} />;\n }\n if ((types === 'scatter' && !serie.type) || serie.type === 'point') {\n return <Points {...serieProps} />;\n }\n if (serie.type === 'line') {\n return <Line {...serieProps} />;\n }\n if (serie.type === 'area') {\n return <Area {...serieProps} />;\n }\n return <></>;\n }) as JSX.Element[]\n }\n </g>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AAGA,mBAA2C;AAC3C,0BAA6B;AAC7B,oBAAqD;AACrD,qBAAgC;AAEzB,MAAM,gBAAgB,MAAM;AACjC,QAAM;AAAA,IACJ,OAAO,EAAE,MAAM,OAAO,QAAQ,MAAM;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yBAAW,gCAAY;AAE3B,SACE,4CAAC;AAAA,IAAE,WAAU;AAAA,IAET,eACG,OAAO,CAAC,UAAU,CAAC,MAAM,QAAQ,EACjC,IAAI,CAAC,UAAU;AACd,YAAM,aAAa;AAAA,QACjB,KAAK,MAAM;AAAA,QAEX,OAAO;AAAA,UACL,GAAG;AAAA,UACH,MACE,iBAAiB,IACb,MAAM,KAAK,OAAO,CAAC,UAAU;AAC3B,kBAAM,cAAc,OAAO,MAAM,OAAO,MAAM,KAAK,MAAM,YAAY,MAAM,MAAM,CAAC;AAClF,mBACE,cAAc,sBAAsB,kBAAkB,KAAK,KAAK,kBAChE,cAAc,sBAAsB,kBAAkB,KAAK,aAAa,KAAK;AAAA,UAEjF,CAAC,IACD,MAAM;AAAA,QACd;AAAA,MACF;AACA,UAAI,MAAM,SAAS,SAAS,cAAU,gCAAgB,QAAQ,MAAM,IAAI,IAAI,IAAI;AAC9E,eAAO,4CAAC;AAAA,UAAY,GAAG;AAAA,SAAY;AAAA,MACrC;AACA,UAAI,MAAM,SAAS,OAAO;AACxB,eAAO,4CAAC;AAAA,UAAM,GAAG;AAAA,SAAY;AAAA,MAC/B;AACA,UAAK,UAAU,aAAa,CAAC,MAAM,QAAS,MAAM,SAAS,SAAS;AAClE,eAAO,4CAAC;AAAA,UAAQ,GAAG;AAAA,SAAY;AAAA,MACjC;AACA,UAAI,MAAM,SAAS,QAAQ;AACzB,eAAO,4CAAC;AAAA,UAAM,GAAG;AAAA,SAAY;AAAA,MAC/B;AACA,UAAI,MAAM,SAAS,QAAQ;AACzB,eAAO,4CAAC;AAAA,UAAM,GAAG;AAAA,SAAY;AAAA,MAC/B;AACA,aAAO,2EAAE;AAAA,IACX,CAAC;AAAA,GAEP;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -35,23 +35,27 @@ var import_ChartContext = require("../ChartContext");
35
35
  var import_FocusableRegion = require("../parts/FocusableRegion");
36
36
  const Bars = ({ serie }) => {
37
37
  const {
38
- props: { xAxis, yAxis, TooltipRenderer },
38
+ props: { yAxis, TooltipRenderer },
39
39
  innerHeight,
40
40
  xScale,
41
41
  yScale,
42
+ y2Scale,
42
43
  subGroupScale,
43
- colorScale
44
+ colorScale,
45
+ getXValue,
46
+ getYValue,
47
+ isHorizontal
44
48
  } = (0, import_react.useContext)(import_ChartContext.ChartContext);
45
- const isHorizontal = !!yScale.bandwidth;
49
+ const finalYScale = serie.scale === "y2" ? y2Scale : yScale;
46
50
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("g", {
47
51
  fill: colorScale(serie.name),
48
52
  children: serie.data.map((bar, i) => {
49
53
  const width = isHorizontal ? xScale(bar.value) : subGroupScale?.bandwidth();
50
- const height = isHorizontal ? subGroupScale?.bandwidth() : innerHeight - yScale(bar.value.y ?? bar.value);
51
- const x = !isHorizontal ? xAxis?.cols?.[i] ?? bar.value.x ?? i : bar.value.x ?? bar.value;
52
- const y = !isHorizontal ? bar.value.y ?? bar.value : yAxis?.cols?.[i] ?? bar.value.x ?? i;
53
- const transformX = isHorizontal ? 0 : subGroupScale(serie.name) + xScale(x) - (bar.value.x ? width / 2 * subGroupScale.domain().length : 0);
54
- const transformY = isHorizontal ? subGroupScale(serie.name) + yScale(yAxis?.cols?.[i] ?? i) : yScale(y);
54
+ const height = isHorizontal ? subGroupScale?.bandwidth() : innerHeight - finalYScale(bar.value.y ?? bar.value);
55
+ const x = getXValue(bar);
56
+ const y = getYValue(bar);
57
+ const transformX = isHorizontal ? 0 : subGroupScale(serie.name) + xScale(x);
58
+ const transformY = isHorizontal ? subGroupScale(serie.name) + finalYScale(yAxis?.cols?.[i] ?? i) : finalYScale(y);
55
59
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("g", {
56
60
  transform: `translate(${transformX},${transformY})`,
57
61
  children: [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/graphs/Chart/series/Bars.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable complexity */\nimport React, { useContext } from 'react';\nimport { ScaleBand } from 'd3';\nimport { Rect } from './Rect';\nimport { ChartContext } from '../ChartContext';\nimport { DSChartT } from '../react-desc-prop-types';\nimport { FocusableRegion } from '../parts/FocusableRegion';\ninterface BarsT {\n serie: DSChartT.InternalData;\n}\nexport const Bars = ({ serie }: BarsT) => {\n const {\n props: { xAxis, yAxis, TooltipRenderer },\n innerHeight,\n xScale,\n yScale,\n subGroupScale,\n colorScale,\n } = useContext(ChartContext);\n\n const isHorizontal = !!(yScale as ScaleBand<string>).bandwidth;\n return (\n <g fill={colorScale(serie.name)}>\n {serie.data.map((bar, i) => {\n const width = isHorizontal ? xScale(bar.value) : subGroupScale?.bandwidth();\n const height = isHorizontal ? subGroupScale?.bandwidth() : innerHeight - yScale(bar.value.y ?? bar.value);\n\n const x = !isHorizontal ? xAxis?.cols?.[i] ?? bar.value.x ?? i : bar.value.x ?? bar.value;\n const y = !isHorizontal ? bar.value.y ?? bar.value : yAxis?.cols?.[i] ?? bar.value.x ?? i;\n\n const transformX = isHorizontal\n ? 0\n : subGroupScale(serie.name) + xScale(x) - (bar.value.x ? (width / 2) * subGroupScale.domain().length : 0);\n const transformY = isHorizontal ? subGroupScale(serie.name) + yScale(yAxis?.cols?.[i] ?? i) : yScale(y);\n\n return (\n <g key={bar.key} transform={`translate(${transformX},${transformY})`}>\n <Rect width={width} height={height} id={bar.key} />\n {TooltipRenderer && (\n <FocusableRegion\n id={bar.key}\n width={width}\n height={height}\n content={<TooltipRenderer data={[{ name: serie.name, yValue: y, xValue: x }]} />}\n />\n )}\n </g>\n );\n })}\n </g>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AACA,mBAAkC;AAElC,kBAAqB;AACrB,0BAA6B;AAE7B,6BAAgC;AAIzB,MAAM,OAAO,CAAC,EAAE,MAAM,MAAa;AACxC,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,OAAO,gBAAgB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yBAAW,gCAAY;AAE3B,QAAM,eAAe,CAAC,CAAE,OAA6B;AACrD,SACE,4CAAC;AAAA,IAAE,MAAM,WAAW,MAAM,IAAI;AAAA,IAC3B,gBAAM,KAAK,IAAI,CAAC,KAAK,MAAM;AAC1B,YAAM,QAAQ,eAAe,OAAO,IAAI,KAAK,IAAI,eAAe,UAAU;AAC1E,YAAM,SAAS,eAAe,eAAe,UAAU,IAAI,cAAc,OAAO,IAAI,MAAM,KAAK,IAAI,KAAK;AAExG,YAAM,IAAI,CAAC,eAAe,OAAO,OAAO,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;AACpF,YAAM,IAAI,CAAC,eAAe,IAAI,MAAM,KAAK,IAAI,QAAQ,OAAO,OAAO,MAAM,IAAI,MAAM,KAAK;AAExF,YAAM,aAAa,eACf,IACA,cAAc,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,IAAK,QAAQ,IAAK,cAAc,OAAO,EAAE,SAAS;AACzG,YAAM,aAAa,eAAe,cAAc,MAAM,IAAI,IAAI,OAAO,OAAO,OAAO,MAAM,CAAC,IAAI,OAAO,CAAC;AAEtG,aACE,6CAAC;AAAA,QAAgB,WAAW,aAAa,cAAc;AAAA,QACrD;AAAA,sDAAC;AAAA,YAAK;AAAA,YAAc;AAAA,YAAgB,IAAI,IAAI;AAAA,WAAK;AAAA,UAChD,mBACC,4CAAC;AAAA,YACC,IAAI,IAAI;AAAA,YACR;AAAA,YACA;AAAA,YACA,SAAS,4CAAC;AAAA,cAAgB,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAAA,aAAG;AAAA,WAChF;AAAA;AAAA,SARI,IAAI,GAUZ;AAAA,IAEJ,CAAC;AAAA,GACH;AAEJ;",
4
+ "sourcesContent": ["/* eslint-disable complexity */\nimport React, { useContext } from 'react';\nimport { ScaleBand } from 'd3';\nimport { Rect } from './Rect';\nimport { ChartContext } from '../ChartContext';\nimport { DSChartT } from '../react-desc-prop-types';\nimport { FocusableRegion } from '../parts/FocusableRegion';\ninterface BarsT {\n serie: DSChartT.InternalData;\n}\nexport const Bars = ({ serie }: BarsT) => {\n const {\n props: { yAxis, TooltipRenderer },\n innerHeight,\n xScale,\n yScale,\n y2Scale,\n subGroupScale,\n colorScale,\n getXValue,\n getYValue,\n isHorizontal,\n } = useContext(ChartContext);\n const finalYScale = serie.scale === 'y2' ? y2Scale : yScale;\n\n return (\n <g fill={colorScale(serie.name)}>\n {serie.data.map((bar, i) => {\n const width = isHorizontal ? xScale(bar.value) : subGroupScale?.bandwidth();\n const height = isHorizontal ? subGroupScale?.bandwidth() : innerHeight - finalYScale(bar.value.y ?? bar.value);\n\n const x = getXValue(bar);\n const y = getYValue(bar);\n\n const transformX = isHorizontal ? 0 : subGroupScale(serie.name) + xScale(x);\n\n // @todo find a way to create bars with linear\n // scale here is something but conflict with bars like {x: 'Monday', y: 10}\n // const transformX = isHorizontal\n // ? 0\n // : subGroupScale(serie.name) + xScale(x) - (bar.value.x ? (width / 2) * subGroupScale.domain().length : 0);\n const transformY = isHorizontal\n ? subGroupScale(serie.name) + finalYScale(yAxis?.cols?.[i] ?? i)\n : finalYScale(y);\n\n return (\n <g key={bar.key} transform={`translate(${transformX},${transformY})`}>\n <Rect width={width} height={height} id={bar.key} />\n {TooltipRenderer && (\n <FocusableRegion\n id={bar.key}\n width={width}\n height={height}\n content={<TooltipRenderer data={[{ name: serie.name, yValue: y, xValue: x }]} />}\n />\n )}\n </g>\n );\n })}\n </g>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AACA,mBAAkC;AAElC,kBAAqB;AACrB,0BAA6B;AAE7B,6BAAgC;AAIzB,MAAM,OAAO,CAAC,EAAE,MAAM,MAAa;AACxC,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,gBAAgB;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yBAAW,gCAAY;AAC3B,QAAM,cAAc,MAAM,UAAU,OAAO,UAAU;AAErD,SACE,4CAAC;AAAA,IAAE,MAAM,WAAW,MAAM,IAAI;AAAA,IAC3B,gBAAM,KAAK,IAAI,CAAC,KAAK,MAAM;AAC1B,YAAM,QAAQ,eAAe,OAAO,IAAI,KAAK,IAAI,eAAe,UAAU;AAC1E,YAAM,SAAS,eAAe,eAAe,UAAU,IAAI,cAAc,YAAY,IAAI,MAAM,KAAK,IAAI,KAAK;AAE7G,YAAM,IAAI,UAAU,GAAG;AACvB,YAAM,IAAI,UAAU,GAAG;AAEvB,YAAM,aAAa,eAAe,IAAI,cAAc,MAAM,IAAI,IAAI,OAAO,CAAC;AAO1E,YAAM,aAAa,eACf,cAAc,MAAM,IAAI,IAAI,YAAY,OAAO,OAAO,MAAM,CAAC,IAC7D,YAAY,CAAC;AAEjB,aACE,6CAAC;AAAA,QAAgB,WAAW,aAAa,cAAc;AAAA,QACrD;AAAA,sDAAC;AAAA,YAAK;AAAA,YAAc;AAAA,YAAgB,IAAI,IAAI;AAAA,WAAK;AAAA,UAChD,mBACC,4CAAC;AAAA,YACC,IAAI,IAAI;AAAA,YACR;AAAA,YACA;AAAA,YACA,SAAS,4CAAC;AAAA,cAAgB,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAAA,aAAG;AAAA,WAChF;AAAA;AAAA,SARI,IAAI,GAUZ;AAAA,IAEJ,CAAC;AAAA,GACH;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -40,7 +40,9 @@ const Line = ({ serie }) => {
40
40
  xScale,
41
41
  yScale,
42
42
  y2Scale,
43
- colorScale
43
+ colorScale,
44
+ getXValue,
45
+ getYValue
44
46
  } = (0, import_react.useContext)(import_ChartContext.ChartContext);
45
47
  const finalYScale = serie.scale === "y2" ? y2Scale : yScale;
46
48
  const lineTypeMap = {
@@ -48,8 +50,8 @@ const Line = ({ serie }) => {
48
50
  spline: import_d3.curveNatural
49
51
  };
50
52
  const lineD3 = (0, import_react.useMemo)(
51
- () => (0, import_d3.line)().x((d) => xScale(d.value.x ?? xAxis?.cols?.[d.position] ?? d.position)).y((d) => finalYScale(d.value.y ?? d.value)).curve(lineTypeMap[serie.type] ?? import_d3.curveLinear)(serie.data),
52
- [lineTypeMap, serie.type, serie.data, xScale, xAxis?.cols, finalYScale]
53
+ () => (0, import_d3.line)().x((d) => xScale(getXValue(d))).y((d) => finalYScale(getYValue(d))).curve(lineTypeMap[serie.type] ?? import_d3.curveLinear)(serie.data),
54
+ [lineTypeMap, serie.type, serie.data, xScale, getXValue, finalYScale, getYValue]
53
55
  );
54
56
  const xTranslate = (xScale?.bandwidth?.() ?? 0) / 2;
55
57
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("g", {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/graphs/Chart/series/Line.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React, { useContext, useMemo, useState } from 'react';\nimport { line, curveNatural, curveLinear } from 'd3';\nimport { StyledLine } from '../styles';\nimport { Points } from './Points';\nimport { ChartContext } from '../ChartContext';\n\nexport const Line = ({ serie }) => {\n const {\n props: { xAxis },\n xScale,\n yScale,\n y2Scale,\n colorScale,\n // activeSerie,\n // setActiveSerie,\n } = useContext(ChartContext);\n\n const finalYScale = serie.scale === 'y2' ? y2Scale : yScale;\n const lineTypeMap = {\n line: curveLinear,\n spline: curveNatural,\n };\n\n const lineD3 = useMemo(\n () =>\n line()\n .x((d) => xScale(d.value.x ?? xAxis?.cols?.[d.position] ?? d.position))\n .y((d) => finalYScale(d.value.y ?? d.value))\n .curve(lineTypeMap[serie.type] ?? curveLinear)(serie.data),\n [lineTypeMap, serie.type, serie.data, xScale, xAxis?.cols, finalYScale],\n );\n\n // we need to center the points and lines when\n // using them in a band axis context\n const xTranslate = (xScale?.bandwidth?.() ?? 0) / 2;\n\n return (\n <g\n transform={`translate(${xTranslate}, 0)`}\n // onMouseEnter={() => setActiveSerie(serie.key)}\n // onMouseLeave={() => setActiveSerie('')}\n >\n <StyledLine d={lineD3} stroke={colorScale(serie.name)} />\n <Points serie={serie} />\n </g>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AAAA,mBAAqD;AACrD,gBAAgD;AAChD,oBAA2B;AAC3B,oBAAuB;AACvB,0BAA6B;AAEtB,MAAM,OAAO,CAAC,EAAE,MAAM,MAAM;AACjC,QAAM;AAAA,IACJ,OAAO,EAAE,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAGF,QAAI,yBAAW,gCAAY;AAE3B,QAAM,cAAc,MAAM,UAAU,OAAO,UAAU;AACrD,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAEA,QAAM,aAAS;AAAA,IACb,UACE,gBAAK,EACF,EAAE,CAAC,MAAM,OAAO,EAAE,MAAM,KAAK,OAAO,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,EACrE,EAAE,CAAC,MAAM,YAAY,EAAE,MAAM,KAAK,EAAE,KAAK,CAAC,EAC1C,MAAM,YAAY,MAAM,SAAS,qBAAW,EAAE,MAAM,IAAI;AAAA,IAC7D,CAAC,aAAa,MAAM,MAAM,MAAM,MAAM,QAAQ,OAAO,MAAM,WAAW;AAAA,EACxE;AAIA,QAAM,cAAc,QAAQ,YAAY,KAAK,KAAK;AAElD,SACE,6CAAC;AAAA,IACC,WAAW,aAAa;AAAA,IAIxB;AAAA,kDAAC;AAAA,QAAW,GAAG;AAAA,QAAQ,QAAQ,WAAW,MAAM,IAAI;AAAA,OAAG;AAAA,MACvD,4CAAC;AAAA,QAAO;AAAA,OAAc;AAAA;AAAA,GACxB;AAEJ;",
4
+ "sourcesContent": ["import React, { useContext, useMemo, useState } from 'react';\nimport { line, curveNatural, curveLinear } from 'd3';\nimport { StyledLine } from '../styles';\nimport { Points } from './Points';\nimport { ChartContext } from '../ChartContext';\n\nexport const Line = ({ serie }) => {\n const {\n props: { xAxis },\n xScale,\n yScale,\n y2Scale,\n colorScale,\n getXValue,\n getYValue,\n } = useContext(ChartContext);\n\n const finalYScale = serie.scale === 'y2' ? y2Scale : yScale;\n const lineTypeMap = {\n line: curveLinear,\n spline: curveNatural,\n };\n\n const lineD3 = useMemo(\n () =>\n line()\n .x((d) => xScale(getXValue(d)))\n .y((d) => finalYScale(getYValue(d)))\n .curve(lineTypeMap[serie.type] ?? curveLinear)(serie.data),\n [lineTypeMap, serie.type, serie.data, xScale, getXValue, finalYScale, getYValue],\n );\n\n // we need to center the points and lines when\n // using them in a band axis context\n const xTranslate = (xScale?.bandwidth?.() ?? 0) / 2;\n\n return (\n <g\n transform={`translate(${xTranslate}, 0)`}\n // onMouseEnter={() => setActiveSerie(serie.key)}\n // onMouseLeave={() => setActiveSerie('')}\n >\n <StyledLine d={lineD3} stroke={colorScale(serie.name)} />\n <Points serie={serie} />\n </g>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AAAA,mBAAqD;AACrD,gBAAgD;AAChD,oBAA2B;AAC3B,oBAAuB;AACvB,0BAA6B;AAEtB,MAAM,OAAO,CAAC,EAAE,MAAM,MAAM;AACjC,QAAM;AAAA,IACJ,OAAO,EAAE,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yBAAW,gCAAY;AAE3B,QAAM,cAAc,MAAM,UAAU,OAAO,UAAU;AACrD,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAEA,QAAM,aAAS;AAAA,IACb,UACE,gBAAK,EACF,EAAE,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC,CAAC,EAC7B,EAAE,CAAC,MAAM,YAAY,UAAU,CAAC,CAAC,CAAC,EAClC,MAAM,YAAY,MAAM,SAAS,qBAAW,EAAE,MAAM,IAAI;AAAA,IAC7D,CAAC,aAAa,MAAM,MAAM,MAAM,MAAM,QAAQ,WAAW,aAAa,SAAS;AAAA,EACjF;AAIA,QAAM,cAAc,QAAQ,YAAY,KAAK,KAAK;AAElD,SACE,6CAAC;AAAA,IACC,WAAW,aAAa;AAAA,IAIxB;AAAA,kDAAC;AAAA,QAAW,GAAG;AAAA,QAAQ,QAAQ,WAAW,MAAM,IAAI;AAAA,OAAG;AAAA,MACvD,4CAAC;AAAA,QAAO;AAAA,OAAc;AAAA;AAAA,GACxB;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -32,6 +32,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
32
32
  var import_react = require("react");
33
33
  var import_Point = require("./Point");
34
34
  var import_ChartContext = require("../ChartContext");
35
+ var import_helpers = require("../helpers");
35
36
  var import_FocusableRegion = require("../parts/FocusableRegion");
36
37
  const Points = ({ serie }) => {
37
38
  const {
@@ -39,6 +40,8 @@ const Points = ({ serie }) => {
39
40
  xScale,
40
41
  y2Scale,
41
42
  yScale,
43
+ getXValue,
44
+ getYValue,
42
45
  stackedData,
43
46
  props: { xAxis, data, TooltipRenderer, types }
44
47
  } = (0, import_react.useContext)(import_ChartContext.ChartContext);
@@ -49,10 +52,12 @@ const Points = ({ serie }) => {
49
52
  fill: colorScale(serie.name),
50
53
  children: serie.data.map((point, i) => {
51
54
  const { pointRadius } = serie;
52
- const x = point.value.x ?? xAxis?.cols?.[point.position];
53
- const y = point.value.y ?? point.value;
55
+ const serieWithStackedValues = (0, import_helpers.getStackedData)(stackedData, serie);
56
+ const deltaY = serieWithStackedValues ? serieWithStackedValues[i][0] : 0;
57
+ const x = getXValue(point);
58
+ const y = getYValue(point);
54
59
  const xPosition = xScale(x);
55
- const yPosition = finalYScale(y);
60
+ const yPosition = finalYScale(y + deltaY);
56
61
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("g", {
57
62
  transform: `translate(${xPosition},${yPosition})`,
58
63
  children: [
@@ -77,7 +82,7 @@ const Points = ({ serie }) => {
77
82
  }, `${point.key}-p`);
78
83
  })
79
84
  }),
80
- [TooltipRenderer, colorScale, finalYScale, opacity, serie, xAxis?.cols, xScale]
85
+ [TooltipRenderer, colorScale, finalYScale, getXValue, opacity, serie, stackedData, xScale]
81
86
  );
82
87
  return render;
83
88
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/graphs/Chart/series/Points.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable complexity */\nimport React, { useMemo, useContext } from 'react';\nimport { Point } from './Point';\nimport { ChartContext } from '../ChartContext';\n// import { getStackedData } from '../helpers';\nimport { FocusableRegion } from '../parts/FocusableRegion';\n\nexport const Points = ({ serie }) => {\n const {\n colorScale,\n xScale,\n y2Scale,\n yScale,\n stackedData,\n props: { xAxis, data, TooltipRenderer, types },\n } = useContext(ChartContext);\n const finalYScale = serie.scale === 'y2' ? y2Scale : yScale;\n\n const opacity = useMemo(() => (types === 'scatter' ? 0.8 : 1), [serie.type]);\n const render = useMemo(\n () => (\n <g fill={colorScale(serie.name)}>\n {serie.data.map((point, i) => {\n const { pointRadius } = serie;\n // const serieWithStackedValues = getStackedData(stackedData, serie);\n // const deltaY = serieWithStackedValues ? serieWithStackedValues[i][0] : 0;\n const x = point.value.x ?? xAxis?.cols?.[point.position];\n const y = point.value.y ?? point.value;\n const xPosition = xScale(x);\n // const yPosition = finalYScale(y + deltaY);\n const yPosition = finalYScale(y);\n\n return (\n <g\n key={`${point.key}-p`}\n transform={`translate(${xPosition},${yPosition})`}\n // onMouseEnter={() => setActiveSerie(serie.key)}\n // onMouseLeave={() => setActiveSerie('')}\n >\n <Point pointRadius={pointRadius} id={point.key} opacity={opacity} x={xPosition} y={yPosition} />\n {TooltipRenderer && (\n <FocusableRegion\n id={point.key}\n width={pointRadius * 2}\n height={pointRadius * 2}\n pointRadius={pointRadius}\n style={{ transform: `translate(-${pointRadius}px, -${pointRadius}px)` }}\n content={<TooltipRenderer data={[{ name: serie.name, yValue: y, xValue: x }]} />}\n />\n )}\n </g>\n );\n })}\n </g>\n ),\n [TooltipRenderer, colorScale, finalYScale, opacity, serie, xAxis?.cols, xScale],\n );\n return render;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AACA,mBAA2C;AAC3C,mBAAsB;AACtB,0BAA6B;AAE7B,6BAAgC;AAEzB,MAAM,SAAS,CAAC,EAAE,MAAM,MAAM;AACnC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,OAAO,MAAM,iBAAiB,MAAM;AAAA,EAC/C,QAAI,yBAAW,gCAAY;AAC3B,QAAM,cAAc,MAAM,UAAU,OAAO,UAAU;AAErD,QAAM,cAAU,sBAAQ,MAAO,UAAU,YAAY,MAAM,GAAI,CAAC,MAAM,IAAI,CAAC;AAC3E,QAAM,aAAS;AAAA,IACb,MACE,4CAAC;AAAA,MAAE,MAAM,WAAW,MAAM,IAAI;AAAA,MAC3B,gBAAM,KAAK,IAAI,CAAC,OAAO,MAAM;AAC5B,cAAM,EAAE,YAAY,IAAI;AAGxB,cAAM,IAAI,MAAM,MAAM,KAAK,OAAO,OAAO,MAAM;AAC/C,cAAM,IAAI,MAAM,MAAM,KAAK,MAAM;AACjC,cAAM,YAAY,OAAO,CAAC;AAE1B,cAAM,YAAY,YAAY,CAAC;AAE/B,eACE,6CAAC;AAAA,UAEC,WAAW,aAAa,aAAa;AAAA,UAIrC;AAAA,wDAAC;AAAA,cAAM;AAAA,cAA0B,IAAI,MAAM;AAAA,cAAK;AAAA,cAAkB,GAAG;AAAA,cAAW,GAAG;AAAA,aAAW;AAAA,YAC7F,mBACC,4CAAC;AAAA,cACC,IAAI,MAAM;AAAA,cACV,OAAO,cAAc;AAAA,cACrB,QAAQ,cAAc;AAAA,cACtB;AAAA,cACA,OAAO,EAAE,WAAW,cAAc,mBAAmB,iBAAiB;AAAA,cACtE,SAAS,4CAAC;AAAA,gBAAgB,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAAA,eAAG;AAAA,aAChF;AAAA;AAAA,WAdG,GAAG,MAAM,OAgBhB;AAAA,MAEJ,CAAC;AAAA,KACH;AAAA,IAEF,CAAC,iBAAiB,YAAY,aAAa,SAAS,OAAO,OAAO,MAAM,MAAM;AAAA,EAChF;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["/* eslint-disable complexity */\nimport React, { useMemo, useContext } from 'react';\nimport { Point } from './Point';\nimport { ChartContext } from '../ChartContext';\nimport { getStackedData } from '../helpers';\nimport { FocusableRegion } from '../parts/FocusableRegion';\n\nexport const Points = ({ serie }) => {\n const {\n colorScale,\n xScale,\n y2Scale,\n yScale,\n getXValue,\n getYValue,\n stackedData,\n props: { xAxis, data, TooltipRenderer, types },\n } = useContext(ChartContext);\n const finalYScale = serie.scale === 'y2' ? y2Scale : yScale;\n\n const opacity = useMemo(() => (types === 'scatter' ? 0.8 : 1), [serie.type]);\n const render = useMemo(\n () => (\n <g fill={colorScale(serie.name)}>\n {serie.data.map((point, i) => {\n const { pointRadius } = serie;\n // we need to recalculate the height with stacked data if is an AREA STACKED ELEMENT\n const serieWithStackedValues = getStackedData(stackedData, serie);\n const deltaY = serieWithStackedValues ? serieWithStackedValues[i][0] : 0;\n const x = getXValue(point);\n const y = getYValue(point);\n const xPosition = xScale(x);\n const yPosition = finalYScale(y + deltaY);\n\n return (\n <g\n key={`${point.key}-p`}\n transform={`translate(${xPosition},${yPosition})`}\n // onMouseEnter={() => setActiveSerie(serie.key)}\n // onMouseLeave={() => setActiveSerie('')}\n >\n <Point pointRadius={pointRadius} id={point.key} opacity={opacity} x={xPosition} y={yPosition} />\n {TooltipRenderer && (\n <FocusableRegion\n id={point.key}\n width={pointRadius * 2}\n height={pointRadius * 2}\n pointRadius={pointRadius}\n style={{ transform: `translate(-${pointRadius}px, -${pointRadius}px)` }}\n content={<TooltipRenderer data={[{ name: serie.name, yValue: y, xValue: x }]} />}\n />\n )}\n </g>\n );\n })}\n </g>\n ),\n [TooltipRenderer, colorScale, finalYScale, getXValue, opacity, serie, stackedData, xScale],\n );\n return render;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB;AACA,mBAA2C;AAC3C,mBAAsB;AACtB,0BAA6B;AAC7B,qBAA+B;AAC/B,6BAAgC;AAEzB,MAAM,SAAS,CAAC,EAAE,MAAM,MAAM;AACnC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,OAAO,MAAM,iBAAiB,MAAM;AAAA,EAC/C,QAAI,yBAAW,gCAAY;AAC3B,QAAM,cAAc,MAAM,UAAU,OAAO,UAAU;AAErD,QAAM,cAAU,sBAAQ,MAAO,UAAU,YAAY,MAAM,GAAI,CAAC,MAAM,IAAI,CAAC;AAC3E,QAAM,aAAS;AAAA,IACb,MACE,4CAAC;AAAA,MAAE,MAAM,WAAW,MAAM,IAAI;AAAA,MAC3B,gBAAM,KAAK,IAAI,CAAC,OAAO,MAAM;AAC5B,cAAM,EAAE,YAAY,IAAI;AAExB,cAAM,6BAAyB,+BAAe,aAAa,KAAK;AAChE,cAAM,SAAS,yBAAyB,uBAAuB,GAAG,KAAK;AACvE,cAAM,IAAI,UAAU,KAAK;AACzB,cAAM,IAAI,UAAU,KAAK;AACzB,cAAM,YAAY,OAAO,CAAC;AAC1B,cAAM,YAAY,YAAY,IAAI,MAAM;AAExC,eACE,6CAAC;AAAA,UAEC,WAAW,aAAa,aAAa;AAAA,UAIrC;AAAA,wDAAC;AAAA,cAAM;AAAA,cAA0B,IAAI,MAAM;AAAA,cAAK;AAAA,cAAkB,GAAG;AAAA,cAAW,GAAG;AAAA,aAAW;AAAA,YAC7F,mBACC,4CAAC;AAAA,cACC,IAAI,MAAM;AAAA,cACV,OAAO,cAAc;AAAA,cACrB,QAAQ,cAAc;AAAA,cACtB;AAAA,cACA,OAAO,EAAE,WAAW,cAAc,mBAAmB,iBAAiB;AAAA,cACtE,SAAS,4CAAC;AAAA,gBAAgB,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAAA,eAAG;AAAA,aAChF;AAAA;AAAA,WAdG,GAAG,MAAM,OAgBhB;AAAA,MAEJ,CAAC;AAAA,KACH;AAAA,IAEF,CAAC,iBAAiB,YAAY,aAAa,WAAW,SAAS,OAAO,aAAa,MAAM;AAAA,EAC3F;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -28,5 +28,4 @@ __reExport(series_exports, require("./StackedBar"), module.exports);
28
28
  __reExport(series_exports, require("./Points"), module.exports);
29
29
  __reExport(series_exports, require("./Line"), module.exports);
30
30
  __reExport(series_exports, require("./Area"), module.exports);
31
- __reExport(series_exports, require("./Pie"), module.exports);
32
31
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/graphs/Chart/series/index.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["export * from './Rect';\nexport * from './Bars';\nexport * from './StackedBar';\nexport * from './Points';\nexport * from './Line';\nexport * from './Area';\nexport * from './Pie';\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;ACAA,YAAuB;ADAvB,2BAAc,mBAAd;AACA,2BAAc,mBADd;AAEA,2BAAc,yBAFd;AAGA,2BAAc,qBAHd;AAIA,2BAAc,mBAJd;AAKA,2BAAc,mBALd;AAMA,2BAAc,kBANd;",
4
+ "sourcesContent": ["export * from './Rect';\nexport * from './Bars';\nexport * from './StackedBar';\nexport * from './Points';\nexport * from './Line';\nexport * from './Area';\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;ACAA,YAAuB;ADAvB,2BAAc,mBAAd;AACA,2BAAc,mBADd;AAEA,2BAAc,yBAFd;AAGA,2BAAc,qBAHd;AAIA,2BAAc,mBAJd;AAKA,2BAAc,mBALd;",
6
6
  "names": []
7
7
  }
@@ -1,9 +1,9 @@
1
1
  import * as React from "react";
2
- import { useMemo, useState, useRef } from "react";
2
+ import { useMemo, useState, useRef, useCallback } from "react";
3
3
  import { useScales } from "./useScales";
4
4
  import { stackData } from "../helpers";
5
5
  const useChart = (props) => {
6
- const { series, yAxis, width, height, groups: groupsStacked } = props;
6
+ const { series, yAxis, xAxis, width, height, groups: groupsStacked } = props;
7
7
  const containerRef = useRef(null);
8
8
  const svgRef = useRef(null);
9
9
  const [isGrabbed, setIsGrabbed] = useState(false);
@@ -22,14 +22,28 @@ const useChart = (props) => {
22
22
  const [rightLegend, setRightLegend] = useState(null);
23
23
  const [topLegend, setTopLegend] = useState(null);
24
24
  const [bottomLegend, setBottomLegend] = useState(null);
25
+ const [rightLabel, setRightLabel] = useState(null);
26
+ const [leftLabel, setLeftLabel] = useState(null);
27
+ const [bottomLabel, setBottomLabel] = useState(null);
25
28
  const internalMargin = useMemo(
26
29
  () => ({
27
- bottom: 10 + (axisBottomHeight?.getBoundingClientRect().height ?? 0) + (bottomLegend?.getBoundingClientRect().height ?? 0),
30
+ bottom: 10 + (axisBottomHeight?.getBoundingClientRect().height ?? 0) + (bottomLegend?.getBoundingClientRect().height ?? 0) + (bottomLabel?.getBoundingClientRect().height ?? 0),
28
31
  top: 10 + (topLegend?.getBoundingClientRect().height ?? 0),
29
- right: 10 + (axisRightWidth?.getBoundingClientRect().width ?? 0) + (rightLegend?.getBoundingClientRect().width ?? 0),
30
- left: 10 + (axisLeftWidth?.getBoundingClientRect().width ?? 0) + (leftLegend?.getBoundingClientRect().width ?? 0)
32
+ right: 10 + (rightLabel?.getBoundingClientRect().width ?? 0) + (axisRightWidth?.getBoundingClientRect().width ?? 0) + (rightLegend?.getBoundingClientRect().width ?? 0),
33
+ left: 10 + (axisLeftWidth?.getBoundingClientRect().width ?? 0) + (leftLabel?.getBoundingClientRect().width ?? 0) + (leftLegend?.getBoundingClientRect().width ?? 0)
31
34
  }),
32
- [axisBottomHeight, axisLeftWidth, axisRightWidth, bottomLegend, leftLegend, rightLegend, topLegend]
35
+ [
36
+ axisBottomHeight,
37
+ axisLeftWidth,
38
+ axisRightWidth,
39
+ bottomLegend,
40
+ leftLabel,
41
+ leftLegend,
42
+ rightLabel,
43
+ rightLegend,
44
+ topLegend,
45
+ bottomLabel
46
+ ]
33
47
  );
34
48
  const innerWidth = useMemo(
35
49
  () => width - internalMargin.left - internalMargin.right,
@@ -39,10 +53,7 @@ const useChart = (props) => {
39
53
  () => height - internalMargin.top - internalMargin.bottom,
40
54
  [internalMargin.top, internalMargin.bottom, height]
41
55
  );
42
- const groups = useMemo(() => series.map((serie) => serie.name), []);
43
- const stackedData = useMemo(() => stackData(groupsStacked, series), [groupsStacked, series]);
44
- const containerRatio = props?.xAxis.advanced?.pointSpacing?.value ?? 1;
45
- const currentData = useMemo(
56
+ const [currentData, setCurrentData] = useState(
46
57
  () => series.map((d, i) => ({
47
58
  ...d,
48
59
  originalData: d,
@@ -52,8 +63,14 @@ const useChart = (props) => {
52
63
  value,
53
64
  position: index
54
65
  }))
55
- })),
56
- [series]
66
+ }))
67
+ );
68
+ const stackedData = useMemo(() => stackData(groupsStacked, currentData), [groupsStacked, currentData]);
69
+ const containerRatio = props?.xAxis.advanced?.pointSpacing?.value ?? 1;
70
+ const groups = useMemo(() => currentData.map((serie) => serie.name), [currentData]);
71
+ const visibleGroups = useMemo(
72
+ () => currentData.filter((serie) => !serie.isHidden).map((serie) => serie.name),
73
+ [currentData]
57
74
  );
58
75
  const { xScale, yScale, y2Scale, subGroupScale, colorScale, getBandwidth } = useScales({
59
76
  props,
@@ -64,12 +81,22 @@ const useChart = (props) => {
64
81
  currentData,
65
82
  containerRatio
66
83
  });
84
+ const isHorizontal = useMemo(() => !!yScale.bandwidth, [yScale]);
85
+ const getXValue = useCallback(
86
+ (datum) => !isHorizontal ? xAxis?.cols?.[datum.position] ?? datum.value.x ?? datum.position : datum.value.x ?? datum.value,
87
+ [isHorizontal, xAxis?.cols]
88
+ );
89
+ const getYValue = useCallback(
90
+ (datum) => !isHorizontal ? datum.value.y ?? datum.value : yAxis?.cols?.[datum.position] ?? datum.value.x ?? datum.position,
91
+ [isHorizontal, yAxis?.cols]
92
+ );
67
93
  return useMemo(
68
94
  () => ({
69
95
  props: { ...props, data: currentData },
70
96
  innerHeight,
71
97
  innerWidth,
72
98
  groups,
99
+ visibleGroups,
73
100
  colorScale,
74
101
  stackedData,
75
102
  subGroupScale,
@@ -103,10 +130,23 @@ const useChart = (props) => {
103
130
  setAxisLeftWidth,
104
131
  setLeftLegend,
105
132
  setRightLegend,
133
+ rightLegend,
106
134
  setTopLegend,
107
135
  setBottomLegend,
108
136
  setAxisBottomHeight,
109
- setAxisRightWidth
137
+ axisBottomHeight,
138
+ setAxisRightWidth,
139
+ setRightLabel,
140
+ setBottomLabel,
141
+ bottomLabel,
142
+ rightLabel,
143
+ axisRightWidth,
144
+ getXValue,
145
+ getYValue,
146
+ isHorizontal,
147
+ setCurrentData,
148
+ setLeftLabel,
149
+ leftLabel
110
150
  }),
111
151
  [
112
152
  props,
@@ -114,6 +154,7 @@ const useChart = (props) => {
114
154
  innerHeight,
115
155
  innerWidth,
116
156
  groups,
157
+ visibleGroups,
117
158
  colorScale,
118
159
  stackedData,
119
160
  subGroupScale,
@@ -132,11 +173,15 @@ const useChart = (props) => {
132
173
  setIsGrabbed,
133
174
  startPosition,
134
175
  setStartPosition,
176
+ rightLabel,
177
+ rightLegend,
178
+ bottomLabel,
135
179
  isScrollbarVisible,
136
180
  setIsScrollbarVisible,
137
181
  oldLastPosition,
138
182
  containerRatio,
139
183
  internalMargin,
184
+ axisBottomHeight,
140
185
  axisLeftWidth,
141
186
  leftLegend,
142
187
  setAxisLeftWidth,
@@ -145,7 +190,16 @@ const useChart = (props) => {
145
190
  setTopLegend,
146
191
  setBottomLegend,
147
192
  setAxisBottomHeight,
148
- setAxisRightWidth
193
+ setAxisRightWidth,
194
+ setRightLabel,
195
+ setBottomLabel,
196
+ getXValue,
197
+ getYValue,
198
+ isHorizontal,
199
+ setCurrentData,
200
+ axisRightWidth,
201
+ setLeftLabel,
202
+ leftLabel
149
203
  ]
150
204
  );
151
205
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/config/useChart.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-nested-callbacks */\n/* eslint-disable max-statements */\n/* eslint-disable indent */\nimport { useMemo, useState, useRef, useEffect } from 'react';\n\n// import { useValidateTypescriptPropTypes } from '@elliemae/ds-utilities';\nimport type { DSChartT } from '../react-desc-prop-types';\n// import { propTypes } from '../react-desc-prop-types';\nimport { useScales } from './useScales';\nimport { stackData } from '../helpers';\nexport const useChart = (props: DSChartT.Props) => {\n // useValidateTypescriptPropTypes(props, propTypes);\n\n const { series, yAxis, width, height, groups: groupsStacked } = props;\n\n const containerRef = useRef(null);\n const svgRef = useRef(null);\n\n const [isGrabbed, setIsGrabbed] = useState(false);\n const [startPosition, setStartPosition] = useState(0);\n\n const [activePoint, setActivePoint] = useState('');\n const [activeSerie, setActiveSerie] = useState('');\n const [scrapperPosY, setScrapperPosY] = useState('');\n const [scrapperPosX, setScrapperPosX] = useState('');\n const [xScrollbarPosition, setXScrollbarPosition] = useState(0);\n const [isScrollbarVisible, setIsScrollbarVisible] = useState(false);\n const oldLastPosition = useRef(0);\n\n const [axisLeftWidth, setAxisLeftWidth] = useState(null);\n const [axisBottomHeight, setAxisBottomHeight] = useState(null);\n const [axisRightWidth, setAxisRightWidth] = useState(null);\n\n const [leftLegend, setLeftLegend] = useState(null);\n const [rightLegend, setRightLegend] = useState(null);\n const [topLegend, setTopLegend] = useState(null);\n const [bottomLegend, setBottomLegend] = useState(null);\n\n // @todo create a useInternalMargin\n const internalMargin = useMemo(\n () => ({\n bottom:\n 10 +\n (axisBottomHeight?.getBoundingClientRect().height ?? 0) +\n (bottomLegend?.getBoundingClientRect().height ?? 0),\n top: 10 + (topLegend?.getBoundingClientRect().height ?? 0),\n right:\n 10 + (axisRightWidth?.getBoundingClientRect().width ?? 0) + (rightLegend?.getBoundingClientRect().width ?? 0),\n left: 10 + (axisLeftWidth?.getBoundingClientRect().width ?? 0) + (leftLegend?.getBoundingClientRect().width ?? 0),\n }),\n [axisBottomHeight, axisLeftWidth, axisRightWidth, bottomLegend, leftLegend, rightLegend, topLegend],\n );\n const innerWidth = useMemo(\n () => width - internalMargin.left - internalMargin.right,\n [internalMargin.left, internalMargin.right, width],\n );\n const innerHeight = useMemo(\n () => height - internalMargin.top - internalMargin.bottom,\n [internalMargin.top, internalMargin.bottom, height],\n );\n const groups = useMemo(() => series.map((serie) => serie.name), []);\n const stackedData = useMemo(() => stackData(groupsStacked, series), [groupsStacked, series]);\n // @TODO we need to create a logic to get this from both axis\n const containerRatio = (props?.xAxis.advanced?.pointSpacing?.value as number) ?? 1;\n\n const currentData = useMemo(\n () =>\n series.map((d, i) => ({\n ...d,\n originalData: d,\n key: `${d.name}-${i}`,\n data: d.data.map((value, index) => ({\n key: `${d.name}-${i}-${index}`,\n value,\n position: index,\n })),\n })),\n [series],\n );\n\n const { xScale, yScale, y2Scale, subGroupScale, colorScale, getBandwidth } = useScales({\n props,\n innerHeight,\n innerWidth,\n groups,\n stackedData,\n currentData,\n containerRatio,\n });\n\n return useMemo(\n () => ({\n props: { ...props, data: currentData },\n innerHeight,\n innerWidth,\n groups,\n colorScale,\n stackedData,\n subGroupScale,\n svgRef,\n xScale,\n yScale,\n y2Scale,\n containerRef,\n getBandwidth,\n scrapperPosY,\n setScrapperPosY,\n scrapperPosX,\n setScrapperPosX,\n activePoint,\n setActivePoint,\n activeSerie,\n setActiveSerie,\n xScrollbarPosition,\n setXScrollbarPosition,\n isGrabbed,\n setIsGrabbed,\n startPosition,\n setStartPosition,\n isScrollbarVisible,\n setIsScrollbarVisible,\n oldLastPosition,\n containerRatio,\n internalMargin,\n axisLeftWidth,\n leftLegend,\n setAxisLeftWidth,\n setLeftLegend,\n setRightLegend,\n setTopLegend,\n setBottomLegend,\n setAxisBottomHeight,\n setAxisRightWidth,\n }),\n [\n props,\n currentData,\n innerHeight,\n innerWidth,\n groups,\n colorScale,\n stackedData,\n subGroupScale,\n scrapperPosX,\n setScrapperPosX,\n xScale,\n yScale,\n y2Scale,\n getBandwidth,\n scrapperPosY,\n activePoint,\n activeSerie,\n xScrollbarPosition,\n setXScrollbarPosition,\n isGrabbed,\n setIsGrabbed,\n startPosition,\n setStartPosition,\n isScrollbarVisible,\n setIsScrollbarVisible,\n oldLastPosition,\n containerRatio,\n internalMargin,\n axisLeftWidth,\n leftLegend,\n setAxisLeftWidth,\n setLeftLegend,\n setRightLegend,\n setTopLegend,\n setBottomLegend,\n setAxisBottomHeight,\n setAxisRightWidth,\n ],\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-nested-callbacks */\n/* eslint-disable max-statements */\n/* eslint-disable indent */\nimport { useMemo, useState, useRef, useEffect, useCallback } from 'react';\n\n// import { useValidateTypescriptPropTypes } from '@elliemae/ds-utilities';\nimport type { DSChartT } from '../react-desc-prop-types';\n// import { propTypes } from '../react-desc-prop-types';\nimport { useScales } from './useScales';\nimport { stackData } from '../helpers';\nexport const useChart = (props: DSChartT.Props) => {\n // useValidateTypescriptPropTypes(props, propTypes);\n\n const { series, yAxis, xAxis, width, height, groups: groupsStacked } = props;\n\n const containerRef = useRef(null);\n const svgRef = useRef(null);\n\n const [isGrabbed, setIsGrabbed] = useState(false);\n const [startPosition, setStartPosition] = useState(0);\n\n const [activePoint, setActivePoint] = useState('');\n const [activeSerie, setActiveSerie] = useState('');\n const [scrapperPosY, setScrapperPosY] = useState('');\n const [scrapperPosX, setScrapperPosX] = useState('');\n const [xScrollbarPosition, setXScrollbarPosition] = useState(0);\n const [isScrollbarVisible, setIsScrollbarVisible] = useState(false);\n const oldLastPosition = useRef(0);\n\n const [axisLeftWidth, setAxisLeftWidth] = useState(null);\n const [axisBottomHeight, setAxisBottomHeight] = useState(null);\n const [axisRightWidth, setAxisRightWidth] = useState(null);\n\n const [leftLegend, setLeftLegend] = useState(null);\n const [rightLegend, setRightLegend] = useState(null);\n const [topLegend, setTopLegend] = useState(null);\n const [bottomLegend, setBottomLegend] = useState(null);\n\n const [rightLabel, setRightLabel] = useState(null);\n const [leftLabel, setLeftLabel] = useState(null);\n const [bottomLabel, setBottomLabel] = useState(null);\n\n // @todo create a useInternalMargin\n const internalMargin = useMemo(\n () => ({\n bottom:\n 10 +\n (axisBottomHeight?.getBoundingClientRect().height ?? 0) +\n (bottomLegend?.getBoundingClientRect().height ?? 0) +\n (bottomLabel?.getBoundingClientRect().height ?? 0),\n top: 10 + (topLegend?.getBoundingClientRect().height ?? 0),\n right:\n 10 +\n (rightLabel?.getBoundingClientRect().width ?? 0) +\n (axisRightWidth?.getBoundingClientRect().width ?? 0) +\n (rightLegend?.getBoundingClientRect().width ?? 0),\n left:\n 10 +\n (axisLeftWidth?.getBoundingClientRect().width ?? 0) +\n (leftLabel?.getBoundingClientRect().width ?? 0) +\n (leftLegend?.getBoundingClientRect().width ?? 0),\n }),\n\n [\n axisBottomHeight,\n axisLeftWidth,\n axisRightWidth,\n bottomLegend,\n leftLabel,\n leftLegend,\n rightLabel,\n rightLegend,\n topLegend,\n bottomLabel,\n ],\n );\n const innerWidth = useMemo(\n () => width - internalMargin.left - internalMargin.right,\n [internalMargin.left, internalMargin.right, width],\n );\n const innerHeight = useMemo(\n () => height - internalMargin.top - internalMargin.bottom,\n [internalMargin.top, internalMargin.bottom, height],\n );\n\n const [currentData, setCurrentData] = useState(() =>\n series.map((d, i) => ({\n ...d,\n originalData: d,\n key: `${d.name}-${i}`,\n data: d.data.map((value, index) => ({\n key: `${d.name}-${i}-${index}`,\n value,\n position: index,\n })),\n })),\n );\n const stackedData = useMemo(() => stackData(groupsStacked, currentData), [groupsStacked, currentData]);\n // @TODO we need to create a logic to get this from both axis\n const containerRatio = (props?.xAxis.advanced?.pointSpacing?.value as number) ?? 1;\n\n const groups = useMemo(() => currentData.map((serie) => serie.name), [currentData]);\n\n const visibleGroups = useMemo(\n () => currentData.filter((serie) => !serie.isHidden).map((serie) => serie.name),\n [currentData],\n );\n\n const { xScale, yScale, y2Scale, subGroupScale, colorScale, getBandwidth } = useScales({\n props,\n innerHeight,\n innerWidth,\n groups,\n stackedData,\n currentData,\n containerRatio,\n });\n\n const isHorizontal = useMemo(() => !!yScale.bandwidth, [yScale]);\n\n const getXValue = useCallback(\n (datum) =>\n !isHorizontal ? xAxis?.cols?.[datum.position] ?? datum.value.x ?? datum.position : datum.value.x ?? datum.value,\n [isHorizontal, xAxis?.cols],\n );\n\n const getYValue = useCallback(\n (datum) =>\n !isHorizontal ? datum.value.y ?? datum.value : yAxis?.cols?.[datum.position] ?? datum.value.x ?? datum.position,\n [isHorizontal, yAxis?.cols],\n );\n\n return useMemo(\n () => ({\n props: { ...props, data: currentData },\n innerHeight,\n innerWidth,\n // @todo change this to series and visible series\n groups,\n visibleGroups,\n colorScale,\n stackedData,\n subGroupScale,\n svgRef,\n xScale,\n yScale,\n y2Scale,\n containerRef,\n getBandwidth,\n scrapperPosY,\n setScrapperPosY,\n scrapperPosX,\n setScrapperPosX,\n activePoint,\n setActivePoint,\n activeSerie,\n setActiveSerie,\n xScrollbarPosition,\n setXScrollbarPosition,\n isGrabbed,\n setIsGrabbed,\n startPosition,\n setStartPosition,\n isScrollbarVisible,\n setIsScrollbarVisible,\n oldLastPosition,\n containerRatio,\n internalMargin,\n axisLeftWidth,\n leftLegend,\n setAxisLeftWidth,\n setLeftLegend,\n setRightLegend,\n rightLegend,\n setTopLegend,\n setBottomLegend,\n setAxisBottomHeight,\n axisBottomHeight,\n setAxisRightWidth,\n setRightLabel,\n setBottomLabel,\n bottomLabel,\n rightLabel,\n axisRightWidth,\n getXValue,\n getYValue,\n isHorizontal,\n setCurrentData,\n setLeftLabel,\n leftLabel,\n }),\n [\n props,\n currentData,\n innerHeight,\n innerWidth,\n groups,\n visibleGroups,\n colorScale,\n stackedData,\n subGroupScale,\n scrapperPosX,\n setScrapperPosX,\n xScale,\n yScale,\n y2Scale,\n getBandwidth,\n scrapperPosY,\n activePoint,\n activeSerie,\n xScrollbarPosition,\n setXScrollbarPosition,\n isGrabbed,\n setIsGrabbed,\n startPosition,\n setStartPosition,\n rightLabel,\n rightLegend,\n bottomLabel,\n isScrollbarVisible,\n setIsScrollbarVisible,\n oldLastPosition,\n containerRatio,\n internalMargin,\n axisBottomHeight,\n axisLeftWidth,\n leftLegend,\n setAxisLeftWidth,\n setLeftLegend,\n setRightLegend,\n setTopLegend,\n setBottomLegend,\n setAxisBottomHeight,\n setAxisRightWidth,\n setRightLabel,\n setBottomLabel,\n getXValue,\n getYValue,\n isHorizontal,\n setCurrentData,\n axisRightWidth,\n setLeftLabel,\n leftLabel,\n ],\n );\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -13,7 +13,7 @@ const useKeyboardNavigation = () => {
13
13
  activePoint,
14
14
  setActivePoint,
15
15
  containerRef,
16
- groups,
16
+ visibleGroups,
17
17
  yScale,
18
18
  xScale,
19
19
  setXScrollbarPosition,
@@ -22,7 +22,7 @@ const useKeyboardNavigation = () => {
22
22
  innerWidth,
23
23
  props: { data, xAxis }
24
24
  } = useContext(ChartContext);
25
- const [currentFocusedDataset, setCurrentFocusedDataset] = useState(groups[0]);
25
+ const [currentFocusedDataset, setCurrentFocusedDataset] = useState(visibleGroups[0]);
26
26
  const currentGroup = useMemo(() => data.find((d) => d.name === currentFocusedDataset), [currentFocusedDataset, data]);
27
27
  const currentItemIndex = useMemo(
28
28
  () => currentGroup.data.findIndex((opt) => opt.key === activePoint),
@@ -54,11 +54,17 @@ const useKeyboardNavigation = () => {
54
54
  setActivePoint(currentGroup.data[newValue].key);
55
55
  if (containerRatio > 1) {
56
56
  const xValue = xScale(xAxis.cols[currentGroup.data[newValue].position]);
57
+ const barWidth = innerWidth / containerRatio;
57
58
  const total = innerWidth * containerRatio;
58
59
  if (total <= xValue) {
59
60
  setXScrollbarPosition((total - innerWidth) / containerRatio);
60
61
  } else if (xValue > xScrollbarPosition * containerRatio + innerWidth)
61
- setXScrollbarPosition((prev) => prev + 10);
62
+ setXScrollbarPosition((prev) => {
63
+ const nextPosition = prev + (xValue / containerRatio - prev);
64
+ if (nextPosition + barWidth > innerWidth)
65
+ return innerWidth - barWidth;
66
+ return nextPosition;
67
+ });
62
68
  else if (xValue < xScrollbarPosition * containerRatio)
63
69
  setXScrollbarPosition(xValue / containerRatio);
64
70
  }
@@ -79,16 +85,16 @@ const useKeyboardNavigation = () => {
79
85
  (step) => {
80
86
  setCurrentFocusedDataset((prev) => {
81
87
  const nextGroup = findInCircularList(
82
- groups,
83
- groups.findIndex((item) => item === prev),
88
+ visibleGroups,
89
+ visibleGroups.findIndex((item) => item === prev),
84
90
  step
85
91
  );
86
- const nextGroupData = data.find((d) => d.name === groups[nextGroup]);
92
+ const nextGroupData = data.find((d) => d.name === visibleGroups[nextGroup]);
87
93
  setActivePoint(nextGroupData.data[currentItemIndex].key);
88
- return groups[nextGroup];
94
+ return visibleGroups[nextGroup];
89
95
  });
90
96
  },
91
- [currentItemIndex, data, setActivePoint, groups]
97
+ [currentItemIndex, data, setActivePoint, visibleGroups]
92
98
  );
93
99
  const onInputKeyDown = useCallback(
94
100
  (e) => {