@elliemae/ds-dataviz 3.9.0 → 3.10.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 (157) hide show
  1. package/dist/cjs/graphs/Chart/Chart.js +1 -4
  2. package/dist/cjs/graphs/Chart/Chart.js.map +2 -2
  3. package/dist/cjs/graphs/Chart/ChartContext.js +1 -4
  4. package/dist/cjs/graphs/Chart/ChartContext.js.map +2 -2
  5. package/dist/cjs/graphs/Chart/config/useChart.js +26 -22
  6. package/dist/cjs/graphs/Chart/config/useChart.js.map +2 -2
  7. package/dist/cjs/graphs/Chart/config/useGetters.js +90 -0
  8. package/dist/cjs/graphs/Chart/config/useGetters.js.map +7 -0
  9. package/dist/cjs/graphs/Chart/config/useInternalMargins.js +1 -1
  10. package/dist/cjs/graphs/Chart/config/useInternalMargins.js.map +1 -1
  11. package/dist/cjs/graphs/Chart/config/useKeyboardNavigation.js +42 -13
  12. package/dist/cjs/graphs/Chart/config/useKeyboardNavigation.js.map +2 -2
  13. package/dist/cjs/graphs/Chart/config/useScales.js +67 -41
  14. package/dist/cjs/graphs/Chart/config/useScales.js.map +2 -2
  15. package/dist/cjs/graphs/Chart/helpers/colorPallet.js +1 -1
  16. package/dist/cjs/graphs/Chart/helpers/colorPallet.js.map +1 -1
  17. package/dist/cjs/graphs/Chart/helpers/index.js +4 -4
  18. package/dist/cjs/graphs/Chart/helpers/index.js.map +2 -2
  19. package/dist/cjs/graphs/Chart/helpers/useUniqueData.js +124 -0
  20. package/dist/cjs/graphs/Chart/helpers/useUniqueData.js.map +7 -0
  21. package/dist/cjs/graphs/Chart/helpers/useVirtualizedSeries.js +42 -11
  22. package/dist/cjs/graphs/Chart/helpers/useVirtualizedSeries.js.map +2 -2
  23. package/dist/cjs/graphs/Chart/parts/Axis/Axes.js +13 -2
  24. package/dist/cjs/graphs/Chart/parts/Axis/Axes.js.map +2 -2
  25. package/dist/cjs/graphs/Chart/parts/Axis/AxisBottom.js +72 -23
  26. package/dist/cjs/graphs/Chart/parts/Axis/AxisBottom.js.map +2 -2
  27. package/dist/cjs/graphs/Chart/parts/Axis/AxisLeft.js +36 -16
  28. package/dist/cjs/graphs/Chart/parts/Axis/AxisLeft.js.map +2 -2
  29. package/dist/cjs/graphs/Chart/parts/Axis/AxisRight.js +10 -8
  30. package/dist/cjs/graphs/Chart/parts/Axis/AxisRight.js.map +2 -2
  31. package/dist/cjs/graphs/Chart/parts/ChartContainer.js +60 -60
  32. package/dist/cjs/graphs/Chart/parts/ChartContainer.js.map +2 -2
  33. package/dist/cjs/graphs/Chart/parts/ClipPaths.js +85 -0
  34. package/dist/cjs/graphs/Chart/parts/ClipPaths.js.map +7 -0
  35. package/dist/cjs/graphs/Chart/parts/Labels/BottomLabel.js +2 -2
  36. package/dist/cjs/graphs/Chart/parts/Labels/BottomLabel.js.map +2 -2
  37. package/dist/cjs/graphs/Chart/parts/Labels/LeftLabel.js +7 -14
  38. package/dist/cjs/graphs/Chart/parts/Labels/LeftLabel.js.map +2 -2
  39. package/dist/cjs/graphs/Chart/parts/Legend/BottomLegend.js +4 -4
  40. package/dist/cjs/graphs/Chart/parts/Legend/BottomLegend.js.map +2 -2
  41. package/dist/cjs/graphs/Chart/parts/Legend/LegendItem.js +1 -1
  42. package/dist/cjs/graphs/Chart/parts/Legend/LegendItem.js.map +2 -2
  43. package/dist/cjs/graphs/Chart/parts/Scrapper/ScrapperLine.js +6 -2
  44. package/dist/cjs/graphs/Chart/parts/Scrapper/ScrapperLine.js.map +2 -2
  45. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapper.js +2 -77
  46. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapper.js.map +2 -2
  47. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js +3 -3
  48. package/dist/cjs/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js.map +3 -3
  49. package/dist/cjs/graphs/Chart/parts/Scroller/BlurMask.js +112 -0
  50. package/dist/cjs/graphs/Chart/parts/Scroller/BlurMask.js.map +7 -0
  51. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollBarX.js +4 -7
  52. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollBarX.js.map +2 -2
  53. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollBarY.js +114 -0
  54. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollBarY.js.map +7 -0
  55. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollableContainerX.js +14 -29
  56. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollableContainerX.js.map +2 -2
  57. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollableContainerY.js +84 -0
  58. package/dist/cjs/graphs/Chart/parts/Scroller/ScrollableContainerY.js.map +7 -0
  59. package/dist/cjs/graphs/Chart/parts/SeriesFactory.js +4 -9
  60. package/dist/cjs/graphs/Chart/parts/SeriesFactory.js.map +2 -2
  61. package/dist/cjs/graphs/Chart/react-desc-prop-types.js.map +2 -2
  62. package/dist/cjs/graphs/Chart/series/Area.js +1 -3
  63. package/dist/cjs/graphs/Chart/series/Area.js.map +2 -2
  64. package/dist/cjs/graphs/Chart/series/Bars.js.map +2 -2
  65. package/dist/cjs/graphs/Chart/series/HorizontalBars.js +4 -24
  66. package/dist/cjs/graphs/Chart/series/HorizontalBars.js.map +2 -2
  67. package/dist/cjs/graphs/Chart/series/HorizontalStackedBars.js +2 -2
  68. package/dist/cjs/graphs/Chart/series/HorizontalStackedBars.js.map +2 -2
  69. package/dist/cjs/graphs/Chart/series/StackedBar.js +3 -2
  70. package/dist/cjs/graphs/Chart/series/StackedBar.js.map +2 -2
  71. package/dist/cjs/graphs/Chart/styles.js +12 -11
  72. package/dist/cjs/graphs/Chart/styles.js.map +2 -2
  73. package/dist/cjs/graphs/constants.js +6 -5
  74. package/dist/cjs/graphs/constants.js.map +2 -2
  75. package/dist/esm/graphs/Chart/Chart.js +1 -4
  76. package/dist/esm/graphs/Chart/Chart.js.map +2 -2
  77. package/dist/esm/graphs/Chart/ChartContext.js +1 -4
  78. package/dist/esm/graphs/Chart/ChartContext.js.map +2 -2
  79. package/dist/esm/graphs/Chart/config/useChart.js +27 -23
  80. package/dist/esm/graphs/Chart/config/useChart.js.map +2 -2
  81. package/dist/esm/graphs/Chart/config/useGetters.js +64 -0
  82. package/dist/esm/graphs/Chart/config/useGetters.js.map +7 -0
  83. package/dist/esm/graphs/Chart/config/useInternalMargins.js +1 -1
  84. package/dist/esm/graphs/Chart/config/useInternalMargins.js.map +1 -1
  85. package/dist/esm/graphs/Chart/config/useKeyboardNavigation.js +42 -13
  86. package/dist/esm/graphs/Chart/config/useKeyboardNavigation.js.map +2 -2
  87. package/dist/esm/graphs/Chart/config/useScales.js +67 -41
  88. package/dist/esm/graphs/Chart/config/useScales.js.map +2 -2
  89. package/dist/esm/graphs/Chart/helpers/colorPallet.js +1 -1
  90. package/dist/esm/graphs/Chart/helpers/colorPallet.js.map +1 -1
  91. package/dist/esm/graphs/Chart/helpers/index.js +4 -4
  92. package/dist/esm/graphs/Chart/helpers/index.js.map +2 -2
  93. package/dist/esm/graphs/Chart/helpers/useUniqueData.js +98 -0
  94. package/dist/esm/graphs/Chart/helpers/useUniqueData.js.map +7 -0
  95. package/dist/esm/graphs/Chart/helpers/useVirtualizedSeries.js +42 -11
  96. package/dist/esm/graphs/Chart/helpers/useVirtualizedSeries.js.map +2 -2
  97. package/dist/esm/graphs/Chart/parts/Axis/Axes.js +13 -2
  98. package/dist/esm/graphs/Chart/parts/Axis/Axes.js.map +2 -2
  99. package/dist/esm/graphs/Chart/parts/Axis/AxisBottom.js +72 -23
  100. package/dist/esm/graphs/Chart/parts/Axis/AxisBottom.js.map +2 -2
  101. package/dist/esm/graphs/Chart/parts/Axis/AxisLeft.js +36 -16
  102. package/dist/esm/graphs/Chart/parts/Axis/AxisLeft.js.map +2 -2
  103. package/dist/esm/graphs/Chart/parts/Axis/AxisRight.js +10 -8
  104. package/dist/esm/graphs/Chart/parts/Axis/AxisRight.js.map +2 -2
  105. package/dist/esm/graphs/Chart/parts/ChartContainer.js +60 -60
  106. package/dist/esm/graphs/Chart/parts/ChartContainer.js.map +2 -2
  107. package/dist/esm/graphs/Chart/parts/ClipPaths.js +59 -0
  108. package/dist/esm/graphs/Chart/parts/ClipPaths.js.map +7 -0
  109. package/dist/esm/graphs/Chart/parts/Labels/BottomLabel.js +2 -2
  110. package/dist/esm/graphs/Chart/parts/Labels/BottomLabel.js.map +2 -2
  111. package/dist/esm/graphs/Chart/parts/Labels/LeftLabel.js +8 -15
  112. package/dist/esm/graphs/Chart/parts/Labels/LeftLabel.js.map +2 -2
  113. package/dist/esm/graphs/Chart/parts/Legend/BottomLegend.js +5 -5
  114. package/dist/esm/graphs/Chart/parts/Legend/BottomLegend.js.map +2 -2
  115. package/dist/esm/graphs/Chart/parts/Legend/LegendItem.js +1 -1
  116. package/dist/esm/graphs/Chart/parts/Legend/LegendItem.js.map +2 -2
  117. package/dist/esm/graphs/Chart/parts/Scrapper/ScrapperLine.js +6 -2
  118. package/dist/esm/graphs/Chart/parts/Scrapper/ScrapperLine.js.map +2 -2
  119. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapper.js +3 -78
  120. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapper.js.map +2 -2
  121. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js +3 -3
  122. package/dist/esm/graphs/Chart/parts/Scrapper/VerticalScrapperLine.js.map +3 -3
  123. package/dist/esm/graphs/Chart/parts/Scroller/BlurMask.js +86 -0
  124. package/dist/esm/graphs/Chart/parts/Scroller/BlurMask.js.map +7 -0
  125. package/dist/esm/graphs/Chart/parts/Scroller/ScrollBarX.js +4 -7
  126. package/dist/esm/graphs/Chart/parts/Scroller/ScrollBarX.js.map +2 -2
  127. package/dist/esm/graphs/Chart/parts/Scroller/ScrollBarY.js +88 -0
  128. package/dist/esm/graphs/Chart/parts/Scroller/ScrollBarY.js.map +7 -0
  129. package/dist/esm/graphs/Chart/parts/Scroller/ScrollableContainerX.js +14 -29
  130. package/dist/esm/graphs/Chart/parts/Scroller/ScrollableContainerX.js.map +2 -2
  131. package/dist/esm/graphs/Chart/parts/Scroller/ScrollableContainerY.js +58 -0
  132. package/dist/esm/graphs/Chart/parts/Scroller/ScrollableContainerY.js.map +7 -0
  133. package/dist/esm/graphs/Chart/parts/SeriesFactory.js +5 -10
  134. package/dist/esm/graphs/Chart/parts/SeriesFactory.js.map +2 -2
  135. package/dist/esm/graphs/Chart/react-desc-prop-types.js.map +2 -2
  136. package/dist/esm/graphs/Chart/series/Area.js +1 -3
  137. package/dist/esm/graphs/Chart/series/Area.js.map +2 -2
  138. package/dist/esm/graphs/Chart/series/Bars.js.map +2 -2
  139. package/dist/esm/graphs/Chart/series/HorizontalBars.js +4 -24
  140. package/dist/esm/graphs/Chart/series/HorizontalBars.js.map +2 -2
  141. package/dist/esm/graphs/Chart/series/HorizontalStackedBars.js +2 -2
  142. package/dist/esm/graphs/Chart/series/HorizontalStackedBars.js.map +2 -2
  143. package/dist/esm/graphs/Chart/series/StackedBar.js +3 -2
  144. package/dist/esm/graphs/Chart/series/StackedBar.js.map +2 -2
  145. package/dist/esm/graphs/Chart/styles.js +13 -12
  146. package/dist/esm/graphs/Chart/styles.js.map +2 -2
  147. package/dist/esm/graphs/constants.js +7 -6
  148. package/dist/esm/graphs/constants.js.map +2 -2
  149. package/package.json +8 -8
  150. package/dist/cjs/graphs/Chart/Pie.js +0 -49
  151. package/dist/cjs/graphs/Chart/Pie.js.map +0 -7
  152. package/dist/cjs/graphs/Chart/parts/ActivePoint.js +0 -83
  153. package/dist/cjs/graphs/Chart/parts/ActivePoint.js.map +0 -7
  154. package/dist/esm/graphs/Chart/Pie.js +0 -23
  155. package/dist/esm/graphs/Chart/Pie.js.map +0 -7
  156. package/dist/esm/graphs/Chart/parts/ActivePoint.js +0 -57
  157. package/dist/esm/graphs/Chart/parts/ActivePoint.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/config/useKeyboardNavigation.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable max-depth */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { ChartContext } from '../ChartContext';\n\nexport const findInCircularList = (\n list,\n from: number,\n //criteria: (item) => boolean,\n step = 1,\n // eslint-disable-next-line max-params\n): number => {\n for (\n let i = (from + step + list.length) % list.length;\n i !== from && from > -1;\n i = (i + step + list.length) % list.length\n ) {\n if (list[i]) return i;\n }\n return from; // return same item\n};\n\nexport const useKeyboardNavigation = () => {\n const {\n activePoint,\n setActivePoint,\n containerRef,\n yScale,\n xScale,\n setXScrollbarPosition,\n containerRatio,\n xScrollbarPosition,\n innerWidth,\n getXValue,\n groups,\n currentData: data,\n } = useContext(ChartContext);\n\n const currentSerie = useMemo(\n () => data.find((d) => d.name === activePoint?.serie) ?? data[0],\n [activePoint?.serie, data],\n );\n\n const currentActiveItemIndex = useMemo(\n () => currentSerie?.data.findIndex((opt) => opt.key === activePoint?.key),\n [activePoint, currentSerie],\n );\n\n const handleOnFocus: React.FocusEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n if (containerRef?.current === e.target) {\n setActivePoint(currentSerie?.data[0]);\n setXScrollbarPosition(0);\n }\n },\n [containerRef, currentSerie?.data, setActivePoint, setXScrollbarPosition],\n );\n\n const handleOnBlur: React.FocusEventHandler<HTMLInputElement> = useCallback(() => {\n setTimeout(() => {\n if (\n !containerRef?.current?.contains(document.activeElement) ||\n containerRef?.current === document.activeElement\n ) {\n setActivePoint(null);\n }\n });\n }, [containerRef, setActivePoint]);\n\n const navigateSerie = useCallback(\n (step: number) => {\n const newValue = findInCircularList(\n currentSerie?.data.map((d) => d.value.toString()),\n currentActiveItemIndex,\n step,\n );\n setActivePoint(currentSerie?.data[newValue]);\n if (containerRatio > 1) {\n const xValue = xScale(getXValue(currentSerie?.data[newValue]));\n const barWidth = innerWidth / containerRatio;\n const total = innerWidth * containerRatio;\n if (total <= xValue) {\n // to go from the first to last\n setXScrollbarPosition((total - innerWidth) / containerRatio);\n } else if (xValue > xScrollbarPosition * containerRatio + innerWidth)\n // if is not visible we move the scroll to the next best position\n setXScrollbarPosition((prev) => {\n const nextPosition = prev + (xValue / containerRatio - prev);\n if (nextPosition + barWidth > innerWidth) return innerWidth - barWidth;\n return nextPosition;\n });\n // move backwards\n else if (xValue < xScrollbarPosition * containerRatio) setXScrollbarPosition(xValue / containerRatio);\n }\n },\n [\n containerRatio,\n currentSerie?.data,\n currentActiveItemIndex,\n getXValue,\n innerWidth,\n setActivePoint,\n setXScrollbarPosition,\n xScale,\n xScrollbarPosition,\n ],\n );\n\n const changeSerie = useCallback(\n (step: number) => {\n const nextSerie = data.find((d) => {\n const nextSerieIndex = findInCircularList(\n groups,\n groups.findIndex((item) => item === currentSerie.name),\n step,\n );\n\n return d.name === groups[nextSerieIndex];\n });\n setActivePoint(nextSerie?.data[currentActiveItemIndex] ?? nextSerie?.data?.[0]);\n },\n [data, setActivePoint, currentActiveItemIndex, groups, currentSerie.name],\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n if (e.code !== 'Tab') {\n e.preventDefault();\n }\n if (['ArrowLeft', 'ArrowRight'].includes(e.code)) {\n if (yScale.bandwidth) changeSerie(e.code === 'ArrowLeft' ? -1 : 1);\n else navigateSerie(e.code === 'ArrowLeft' ? -1 : 1);\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n if (yScale.bandwidth) navigateSerie(e.code === 'ArrowDown' ? -1 : 1);\n else changeSerie(e.code === 'ArrowDown' ? -1 : 1);\n }\n },\n [changeSerie, navigateSerie, yScale.bandwidth],\n );\n\n return useMemo(\n () => ({ onInputKeyDown, handleOnBlur, handleOnFocus }),\n [handleOnBlur, handleOnFocus, onInputKeyDown],\n );\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable max-depth */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useCallback, useContext, useMemo } from 'react';\nimport { ChartContext } from '../ChartContext';\nimport { FOCUS_RING } from '../../constants';\nexport const findInCircularList = (\n list: string[],\n from: number,\n step = 1,\n // eslint-disable-next-line max-params\n): number => {\n for (\n let i = (from + step + list.length) % list.length;\n i !== from && from > -1;\n i = (i + step + list.length) % list.length\n ) {\n if (list[i]) return i;\n }\n return from; // return same item\n};\n\nexport const useKeyboardNavigation = () => {\n const {\n activePoint,\n setActivePoint,\n containerRef,\n yScale,\n setXScrollbarPosition,\n containerRatio,\n xScrollbarPosition,\n innerWidth,\n innerHeight,\n getYValue,\n getXScaleValue,\n getYScaleValue,\n groups,\n currentData: data,\n props: { xAxis, yAxis },\n } = useContext(ChartContext);\n\n const xScroll = xAxis.advanced?.pointSpacing?.value > 1;\n const yScroll = yAxis.advanced?.pointSpacing?.value > 1;\n\n const currentSerie = useMemo(\n () => data.find((d) => d.name === activePoint?.serie) ?? data[0],\n [activePoint?.serie, data],\n );\n\n const currentActiveItemIndex = useMemo(\n () => currentSerie?.data.findIndex((opt) => opt.key === activePoint?.key),\n [activePoint, currentSerie],\n );\n\n const handleOnFocus: React.FocusEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n if (containerRef?.current === e.target) {\n setActivePoint(currentSerie?.data[0]);\n setXScrollbarPosition(0);\n }\n },\n [containerRef, currentSerie?.data, setActivePoint, setXScrollbarPosition],\n );\n\n const handleOnBlur: React.FocusEventHandler<HTMLInputElement> = useCallback(() => {\n setTimeout(() => {\n if (\n !containerRef?.current?.contains(document.activeElement) ||\n containerRef?.current === document.activeElement\n ) {\n setActivePoint(null);\n }\n });\n }, [containerRef, setActivePoint]);\n\n const navigateSerie = useCallback(\n (step: number) => {\n const newValue = findInCircularList(\n currentSerie?.data.map((d) => d.value.toString()),\n currentActiveItemIndex,\n step,\n );\n setActivePoint(currentSerie?.data[newValue]);\n if (xScroll) {\n const xValue = getXScaleValue(currentSerie?.data[newValue]);\n if (xValue === undefined) return;\n const barWidth = innerWidth / containerRatio;\n const total = innerWidth * containerRatio;\n if (total <= xValue) {\n // to go from the first to last\n setXScrollbarPosition((total - innerWidth) / containerRatio);\n } else if (xValue > xScrollbarPosition * containerRatio + innerWidth)\n // if is not visible we move the scroll to the next best position\n setXScrollbarPosition((prev) => {\n const nextPosition = prev + (xValue / containerRatio - prev);\n if (nextPosition + barWidth > innerWidth) return innerWidth - barWidth;\n return nextPosition;\n });\n // move backwards - 2 because focus ring in bars\n else if (xValue < xScrollbarPosition * containerRatio)\n setXScrollbarPosition(xValue / containerRatio - FOCUS_RING.STROKE_WIDTH);\n }\n if (yScroll) {\n const yValue = getYScaleValue(currentSerie?.data[newValue]);\n if (yValue === undefined) return;\n const barWidth = innerHeight / containerRatio;\n const total = innerHeight * containerRatio;\n if (total <= yValue) {\n // to go from the first to last\n setXScrollbarPosition((total - innerHeight) / containerRatio);\n } else if (yValue > xScrollbarPosition * containerRatio + innerHeight)\n // if is not visible we move the scroll to the next best position\n setXScrollbarPosition((prev) => {\n const nextPosition = prev + (yValue / containerRatio - prev);\n if (nextPosition + barWidth > innerHeight) return innerHeight - barWidth;\n return nextPosition;\n });\n // move backwards - 2 because focus ring in bars\n else if (yValue < xScrollbarPosition * containerRatio)\n setXScrollbarPosition(yValue / containerRatio - FOCUS_RING.STROKE_WIDTH);\n }\n },\n [\n currentSerie?.data,\n currentActiveItemIndex,\n setActivePoint,\n xScroll,\n yScroll,\n getXScaleValue,\n innerWidth,\n containerRatio,\n xScrollbarPosition,\n setXScrollbarPosition,\n getYScaleValue,\n innerHeight,\n ],\n );\n\n const changeSerie = useCallback(\n (step: number) => {\n const nextSerie = data.find((d) => {\n const nextSerieIndex = findInCircularList(\n groups,\n groups.findIndex((item) => item === currentSerie.name),\n step,\n );\n\n return d.name === groups[nextSerieIndex];\n });\n setActivePoint(nextSerie?.data[currentActiveItemIndex] || nextSerie?.data?.[0] || null);\n },\n [data, setActivePoint, currentActiveItemIndex, groups, currentSerie.name],\n );\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = useCallback(\n (e) => {\n if (e.code !== 'Tab') {\n e.preventDefault();\n }\n if (['ArrowLeft', 'ArrowRight'].includes(e.code)) {\n if (yScale.bandwidth) changeSerie(e.code === 'ArrowLeft' ? -1 : 1);\n else navigateSerie(e.code === 'ArrowLeft' ? -1 : 1);\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n if (yScale.bandwidth) navigateSerie(e.code === 'ArrowDown' ? 1 : -1);\n else changeSerie(e.code === 'ArrowDown' ? -1 : 1);\n }\n },\n [changeSerie, navigateSerie, yScale.bandwidth],\n );\n\n return useMemo(\n () => ({ onInputKeyDown, handleOnBlur, handleOnFocus }),\n [handleOnBlur, handleOnFocus, onInputKeyDown],\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACIvB,SAAS,aAAa,YAAY,eAAe;AACjD,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AACpB,MAAM,qBAAqB,CAChC,MACA,MACA,OAAO,MAEI;AACX,WACM,KAAK,OAAO,OAAO,KAAK,UAAU,KAAK,QAC3C,MAAM,QAAQ,OAAO,IACrB,KAAK,IAAI,OAAO,KAAK,UAAU,KAAK,QACpC;AACA,QAAI,KAAK;AAAI,aAAO;AAAA,EACtB;AACA,SAAO;AACT;AAEO,MAAM,wBAAwB,MAAM;AACzC,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,IACA;AAAA,IACA,aAAa;AAAA,IACb,OAAO,EAAE,OAAO,MAAM;AAAA,EACxB,IAAI,WAAW,YAAY;AAE3B,QAAM,UAAU,MAAM,UAAU,cAAc,QAAQ;AACtD,QAAM,UAAU,MAAM,UAAU,cAAc,QAAQ;AAEtD,QAAM,eAAe;AAAA,IACnB,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,aAAa,KAAK,KAAK,KAAK;AAAA,IAC9D,CAAC,aAAa,OAAO,IAAI;AAAA,EAC3B;AAEA,QAAM,yBAAyB;AAAA,IAC7B,MAAM,cAAc,KAAK,UAAU,CAAC,QAAQ,IAAI,QAAQ,aAAa,GAAG;AAAA,IACxE,CAAC,aAAa,YAAY;AAAA,EAC5B;AAEA,QAAM,gBAAyD;AAAA,IAC7D,CAAC,MAAM;AACL,UAAI,cAAc,YAAY,EAAE,QAAQ;AACtC,uBAAe,cAAc,KAAK,EAAE;AACpC,8BAAsB,CAAC;AAAA,MACzB;AAAA,IACF;AAAA,IACA,CAAC,cAAc,cAAc,MAAM,gBAAgB,qBAAqB;AAAA,EAC1E;AAEA,QAAM,eAA0D,YAAY,MAAM;AAChF,eAAW,MAAM;AACf,UACE,CAAC,cAAc,SAAS,SAAS,SAAS,aAAa,KACvD,cAAc,YAAY,SAAS,eACnC;AACA,uBAAe,IAAI;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,cAAc,cAAc,CAAC;AAEjC,QAAM,gBAAgB;AAAA,IACpB,CAAC,SAAiB;AAChB,YAAM,WAAW;AAAA,QACf,cAAc,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC;AAAA,QAChD;AAAA,QACA;AAAA,MACF;AACA,qBAAe,cAAc,KAAK,SAAS;AAC3C,UAAI,SAAS;AACX,cAAM,SAAS,eAAe,cAAc,KAAK,SAAS;AAC1D,YAAI,WAAW;AAAW;AAC1B,cAAM,WAAW,aAAa;AAC9B,cAAM,QAAQ,aAAa;AAC3B,YAAI,SAAS,QAAQ;AAEnB,iCAAuB,QAAQ,cAAc,cAAc;AAAA,QAC7D,WAAW,SAAS,qBAAqB,iBAAiB;AAExD,gCAAsB,CAAC,SAAS;AAC9B,kBAAM,eAAe,QAAQ,SAAS,iBAAiB;AACvD,gBAAI,eAAe,WAAW;AAAY,qBAAO,aAAa;AAC9D,mBAAO;AAAA,UACT,CAAC;AAAA,iBAEM,SAAS,qBAAqB;AACrC,gCAAsB,SAAS,iBAAiB,WAAW,YAAY;AAAA,MAC3E;AACA,UAAI,SAAS;AACX,cAAM,SAAS,eAAe,cAAc,KAAK,SAAS;AAC1D,YAAI,WAAW;AAAW;AAC1B,cAAM,WAAW,cAAc;AAC/B,cAAM,QAAQ,cAAc;AAC5B,YAAI,SAAS,QAAQ;AAEnB,iCAAuB,QAAQ,eAAe,cAAc;AAAA,QAC9D,WAAW,SAAS,qBAAqB,iBAAiB;AAExD,gCAAsB,CAAC,SAAS;AAC9B,kBAAM,eAAe,QAAQ,SAAS,iBAAiB;AACvD,gBAAI,eAAe,WAAW;AAAa,qBAAO,cAAc;AAChE,mBAAO;AAAA,UACT,CAAC;AAAA,iBAEM,SAAS,qBAAqB;AACrC,gCAAsB,SAAS,iBAAiB,WAAW,YAAY;AAAA,MAC3E;AAAA,IACF;AAAA,IACA;AAAA,MACE,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB,CAAC,SAAiB;AAChB,YAAM,YAAY,KAAK,KAAK,CAAC,MAAM;AACjC,cAAM,iBAAiB;AAAA,UACrB;AAAA,UACA,OAAO,UAAU,CAAC,SAAS,SAAS,aAAa,IAAI;AAAA,UACrD;AAAA,QACF;AAEA,eAAO,EAAE,SAAS,OAAO;AAAA,MAC3B,CAAC;AACD,qBAAe,WAAW,KAAK,2BAA2B,WAAW,OAAO,MAAM,IAAI;AAAA,IACxF;AAAA,IACA,CAAC,MAAM,gBAAgB,wBAAwB,QAAQ,aAAa,IAAI;AAAA,EAC1E;AAEA,QAAM,iBAA+D;AAAA,IACnE,CAAC,MAAM;AACL,UAAI,EAAE,SAAS,OAAO;AACpB,UAAE,eAAe;AAAA,MACnB;AACA,UAAI,CAAC,aAAa,YAAY,EAAE,SAAS,EAAE,IAAI,GAAG;AAChD,YAAI,OAAO;AAAW,sBAAY,EAAE,SAAS,cAAc,KAAK,CAAC;AAAA;AAC5D,wBAAc,EAAE,SAAS,cAAc,KAAK,CAAC;AAAA,MACpD;AAEA,UAAI,CAAC,aAAa,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG;AAC7C,YAAI,OAAO;AAAW,wBAAc,EAAE,SAAS,cAAc,IAAI,EAAE;AAAA;AAC9D,sBAAY,EAAE,SAAS,cAAc,KAAK,CAAC;AAAA,MAClD;AAAA,IACF;AAAA,IACA,CAAC,aAAa,eAAe,OAAO,SAAS;AAAA,EAC/C;AAEA,SAAO;AAAA,IACL,OAAO,EAAE,gBAAgB,cAAc,cAAc;AAAA,IACrD,CAAC,cAAc,eAAe,cAAc;AAAA,EAC9C;AACF;",
6
6
  "names": []
7
7
  }
@@ -3,20 +3,18 @@ import { useMemo, useCallback } from "react";
3
3
  import { max, min, scaleLinear, scaleBand, scaleUtc, scaleOrdinal, scaleLog } from "d3";
4
4
  import { getStackedIndex } from "../helpers";
5
5
  import { COLOR_PALLET } from "../helpers/colorPallet";
6
- const useScales = ({
7
- props,
8
- innerHeight,
9
- innerWidth,
10
- stackedData,
11
- currentData,
12
- groups,
13
- containerRatio
14
- }) => {
15
- const { series, xAxis, yAxis, y2Axis, groups: stackedSeries, types } = props;
16
- const rangeTo = innerWidth * (containerRatio ?? 1);
17
- const getBandDomain = useCallback((axis) => axis.cols ?? [...series[0].data.keys()], [series]);
6
+ const useScales = ({ props, innerHeight, innerWidth, stackedData, currentData, containerRatio }) => {
7
+ const { series, xAxis, yAxis, y2Axis, groups: stackedSeries } = props;
8
+ const xScroll = xAxis.advanced?.pointSpacing?.value > 1;
9
+ const yScroll = yAxis.advanced?.pointSpacing?.value > 1;
10
+ const rangeToWidth = innerWidth * (xScroll ? containerRatio : 1);
11
+ const rangeToHeight = innerHeight * (yScroll ? containerRatio : 1);
12
+ const getBandDomain = useCallback(
13
+ (axis) => axis.cols ?? [...series[0].data.map((_, i) => i.toString())],
14
+ [series]
15
+ );
18
16
  const getLinearDomain = useCallback(
19
- (axis, axisString, withStackData = true) => {
17
+ (axis, axisString) => {
20
18
  const begin = axis?.beginAtZero ? 0 : void 0;
21
19
  const data = currentData.filter((serie) => {
22
20
  if (serie.scale === axisString) {
@@ -31,23 +29,50 @@ const useScales = ({
31
29
  if (typeof datum.value === "number") {
32
30
  return datum.value;
33
31
  }
34
- return datum.value[axisString];
32
+ return datum.value[axisString === "y2" ? "y" : axisString];
35
33
  })
36
34
  );
37
- const stack = withStackData && [
38
- min(stackedData.flat(), (layer) => min(layer, (sequence) => sequence[1])),
39
- max(stackedData.flat(), (layer) => max(layer, (sequence) => sequence[1]))
40
- ];
41
- const minRange = min([begin, min(data.flat()), stack[0]]);
42
- const maxRange = max([begin, max(data.flat()), stack[1]]);
43
- const [leftPadding, rightPadding] = typeof axis.domainPadding === "number" ? [axis.domainPadding, axis.domainPadding] : axis.domainPadding ?? [0, 0];
44
- if (axis.type === "time") {
45
- return [minRange, maxRange];
35
+ const dataFlattened = data.flat();
36
+ const stackedDataFlatten = stackedData.flat();
37
+ const minStackedData = min(stackedDataFlatten, (layer) => min(layer, (sequence) => sequence[0]));
38
+ const maxStackedData = max(stackedDataFlatten, (layer) => max(layer, (sequence) => sequence[1]));
39
+ const minData = min(dataFlattened);
40
+ const maxData = max(dataFlattened);
41
+ const types = ["number", "object"];
42
+ const getMin = () => {
43
+ const aux = [];
44
+ if (typeof begin === "number")
45
+ aux.push(begin);
46
+ if (types.includes(typeof minData))
47
+ aux.push(minData);
48
+ if (typeof minStackedData === "number")
49
+ aux.push(minStackedData);
50
+ return min(aux);
51
+ };
52
+ const getMax = () => {
53
+ const aux = [];
54
+ if (typeof begin === "number")
55
+ aux.push(begin);
56
+ if (types.includes(typeof maxData))
57
+ aux.push(maxData);
58
+ if (typeof maxStackedData === "number")
59
+ aux.push(maxStackedData);
60
+ return max(aux);
61
+ };
62
+ const minRange = getMin();
63
+ const maxRange = getMax();
64
+ if (types.includes(typeof minRange) && types.includes(typeof maxRange)) {
65
+ if (typeof minRange === "number" && typeof maxRange === "number") {
66
+ const [leftPadding, rightPadding] = typeof axis.domainPadding === "number" ? [axis.domainPadding, axis.domainPadding] : axis.domainPadding ?? [0, 0];
67
+ return [
68
+ minRange - (maxRange - minRange) * (leftPadding ?? 0),
69
+ maxRange + (maxRange - minRange) * (rightPadding ?? 0)
70
+ ];
71
+ }
72
+ if (typeof minRange === "object" && typeof maxRange === "object")
73
+ return [minRange, maxRange];
46
74
  }
47
- return [
48
- minRange - (maxRange - minRange) * (leftPadding ?? 0),
49
- maxRange + (maxRange - minRange) * (rightPadding ?? 0)
50
- ];
75
+ return [];
51
76
  },
52
77
  [currentData, stackedData]
53
78
  );
@@ -57,31 +82,30 @@ const useScales = ({
57
82
  const getScaleLog = (domain, range) => scaleLog().domain(domain).range(range);
58
83
  const xScale = useMemo(() => {
59
84
  if (xAxis?.type === "time")
60
- return getScaleTime(getLinearDomain(xAxis, "x", false), [0, rangeTo]);
85
+ return getScaleTime(getLinearDomain(xAxis, "x"), [0, rangeToWidth]);
61
86
  if (xAxis?.type === "linear" || yAxis?.type === "band") {
62
- const withStackData = yAxis?.type === "band";
63
- return getScaleLinear(getLinearDomain(xAxis, "x", withStackData), [0, rangeTo], xAxis.padding);
87
+ return getScaleLinear(getLinearDomain(xAxis, "x"), [0, rangeToWidth]);
64
88
  }
65
- return getScaleBand(getBandDomain(xAxis), [0, rangeTo], xAxis.padding);
66
- }, [getBandDomain, getLinearDomain, rangeTo, xAxis, yAxis?.type]);
89
+ return getScaleBand(getBandDomain(xAxis), [0, rangeToWidth]);
90
+ }, [getBandDomain, getLinearDomain, rangeToWidth, xAxis, yAxis?.type]);
67
91
  const yScale = useMemo(() => {
68
92
  if (yAxis?.type === "band")
69
- return getScaleBand(getBandDomain(yAxis), [innerHeight, 0], yAxis.padding);
93
+ return getScaleBand(getBandDomain(yAxis), [0, rangeToHeight]);
70
94
  if (yAxis?.type === "log")
71
- return getScaleLog(getLinearDomain(yAxis, "y"), [innerHeight, 0]);
72
- return getScaleLinear(getLinearDomain(yAxis, "y"), [innerHeight, 0]);
73
- }, [getBandDomain, getLinearDomain, innerHeight, yAxis]);
95
+ return getScaleLog(getLinearDomain(yAxis, "y"), [rangeToHeight, 0]);
96
+ return getScaleLinear(getLinearDomain(yAxis, "y"), [rangeToHeight, 0]);
97
+ }, [getBandDomain, getLinearDomain, rangeToHeight, yAxis]);
74
98
  const y2Scale = useMemo(() => {
75
99
  if (!y2Axis)
76
100
  return null;
77
101
  if (y2Axis?.type === "band")
78
- return getScaleBand(getBandDomain(y2Axis), [innerHeight, 0], y2Scale.padding);
102
+ return getScaleBand(getBandDomain(y2Axis), [0, innerHeight]);
79
103
  if (y2Axis?.type === "log")
80
104
  return getScaleLog(getLinearDomain(y2Axis, "y2"), [innerHeight, 0]);
81
105
  return getScaleLinear(getLinearDomain(y2Axis, "y2"), [innerHeight, 0]);
82
106
  }, [getBandDomain, getLinearDomain, innerHeight, y2Axis]);
83
107
  const colorScale = useMemo(
84
- () => scaleOrdinal().domain(series.map((d) => d.name)).range(series.map((d) => COLOR_PALLET[d.color] ?? d.color)),
108
+ () => scaleOrdinal().domain(series.map((d) => d.name)).range(series.map((d) => COLOR_PALLET[d.color] ?? d.color)).unknown("red"),
85
109
  [series]
86
110
  );
87
111
  const subgroupsWithBars = useMemo(
@@ -91,12 +115,14 @@ const useScales = ({
91
115
  [currentData, stackedSeries]
92
116
  );
93
117
  const getBandwidth = useCallback(() => {
94
- if (xScale.bandwidth)
118
+ if ((xAxis.type === void 0 || xAxis.type === "band") && yAxis.type !== "band") {
95
119
  return xScale.bandwidth();
96
- if (yScale.bandwidth)
120
+ }
121
+ if (yAxis.type === "band") {
97
122
  return yScale.bandwidth();
123
+ }
98
124
  return innerWidth / xScale.ticks().length / 2;
99
- }, [innerWidth, xScale, yScale]);
125
+ }, [innerWidth, xAxis.type, xScale, yAxis.type, yScale]);
100
126
  if (stackedSeries?.length) {
101
127
  stackedSeries.forEach((_, i) => subgroupsWithBars.push(`stacked-data-${i}`));
102
128
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/config/useScales.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\n/* eslint-disable indent */\nimport { useMemo, useCallback } from 'react';\nimport { max, min, scaleLinear, scaleBand, scaleUtc, scaleOrdinal, scaleLog, Series, ScaleBand } from 'd3';\nimport { DSChartT } from '../react-desc-prop-types';\nimport { getStackedIndex } from '../helpers';\nimport { COLOR_PALLET } from '../helpers/colorPallet';\ninterface UseScales {\n props: DSChartT.Props;\n innerHeight: number;\n innerWidth: number;\n stackedData: Series<\n {\n [key: string]: number;\n },\n string\n >[][];\n currentData: {\n key: string;\n group: string;\n type: DSChartT.SerieTypeT;\n scale?: string;\n color: string;\n data: {\n key: string;\n value: number | { x: number; y: number };\n position: number;\n }[];\n }[];\n groups: string[];\n}\nexport const useScales = ({\n props,\n innerHeight,\n innerWidth,\n stackedData,\n currentData,\n groups,\n containerRatio,\n}: UseScales) => {\n const { series, xAxis, yAxis, y2Axis, groups: stackedSeries, types } = props;\n\n const rangeTo = innerWidth * (containerRatio ?? 1);\n const getBandDomain = useCallback((axis: DSChartT.AxisT) => axis.cols ?? [...series[0].data.keys()], [series]);\n\n const getLinearDomain = useCallback(\n (axis?: DSChartT.AxisT, axisString?: string, withStackData = true) => {\n // const data2 = data ? extent(data) : [];\n const begin = axis?.beginAtZero ? 0 : undefined;\n const data = currentData\n .filter((serie) => {\n if (serie.scale === axisString) {\n return true;\n }\n if (!serie.scale && ['y', 'x'].includes(axisString)) {\n return true;\n }\n return false;\n })\n .map(\n (serie) =>\n serie.data\n .filter((datum) => datum.value !== null)\n .map((datum) => {\n if (typeof datum.value === 'number') {\n return datum.value;\n }\n return datum.value[axisString];\n }),\n\n // ? serie.data.map((datum) => datum.value).flat()\n // : serie.data.map((datum) => datum.value.map((coord) => coord[axisString]).flat()),\n );\n\n const stack = withStackData && [\n min(stackedData.flat(), (layer) => min(layer, (sequence) => sequence[1])),\n max(stackedData.flat(), (layer) => max(layer, (sequence) => sequence[1])),\n ];\n const minRange = min([begin, min(data.flat()), stack[0]]);\n const maxRange = max([begin, max(data.flat()), stack[1]]);\n\n // @TODO fix this\n const [leftPadding, rightPadding] =\n typeof axis.domainPadding === 'number'\n ? [axis.domainPadding, axis.domainPadding]\n : axis.domainPadding ?? [0, 0];\n\n if (axis.type === 'time') {\n // @todo padding for time series\n return [minRange, maxRange];\n }\n return [\n minRange - (maxRange - minRange) * (leftPadding ?? 0),\n maxRange + (maxRange - minRange) * (rightPadding ?? 0),\n ];\n },\n [currentData, stackedData],\n );\n\n const getScaleTime = (domain: Date[], range: number[]) => scaleUtc().domain(domain).range(range);\n\n const getScaleBand = (domain: string[], range: number[], padding = 0.2) =>\n scaleBand().domain(domain).range(range).padding(padding).paddingOuter(0.05);\n const getScaleLinear = (domain: number[], range: number[]) => scaleLinear().domain(domain).range(range);\n const getScaleLog = (domain: number[], range: number[]) => scaleLog().domain(domain).range(range);\n\n const xScale = useMemo(() => {\n if (xAxis?.type === 'time') return getScaleTime(getLinearDomain(xAxis, 'x', false), [0, rangeTo]);\n if (xAxis?.type === 'linear' || yAxis?.type === 'band') {\n // @TODO is this really a thing ?\n const withStackData = yAxis?.type === 'band';\n return getScaleLinear(getLinearDomain(xAxis, 'x', withStackData) as number[], [0, rangeTo], xAxis.padding);\n }\n\n return getScaleBand(getBandDomain(xAxis) as string[], [0, rangeTo], xAxis.padding);\n }, [getBandDomain, getLinearDomain, rangeTo, xAxis, yAxis?.type]);\n\n const yScale = useMemo(() => {\n if (yAxis?.type === 'band') return getScaleBand(getBandDomain(yAxis), [innerHeight, 0], yAxis.padding);\n if (yAxis?.type === 'log') return getScaleLog(getLinearDomain(yAxis, 'y'), [innerHeight, 0]);\n return getScaleLinear(getLinearDomain(yAxis, 'y'), [innerHeight, 0]);\n }, [getBandDomain, getLinearDomain, innerHeight, yAxis]);\n\n const y2Scale = useMemo(() => {\n if (!y2Axis) return null;\n if (y2Axis?.type === 'band') return getScaleBand(getBandDomain(y2Axis), [innerHeight, 0], y2Scale.padding);\n if (y2Axis?.type === 'log') return getScaleLog(getLinearDomain(y2Axis, 'y2'), [innerHeight, 0]);\n return getScaleLinear(getLinearDomain(y2Axis, 'y2'), [innerHeight, 0]);\n }, [getBandDomain, getLinearDomain, innerHeight, y2Axis]);\n\n const colorScale = useMemo(\n () =>\n scaleOrdinal()\n .domain(series.map((d) => d.name))\n .range(series.map((d) => COLOR_PALLET[d.color] ?? d.color)),\n [series],\n );\n // get only groups bars to calculate the subgroup scale\n\n const subgroupsWithBars = useMemo(\n () =>\n currentData\n .filter(\n (serie) =>\n serie.type === 'bar' && !(stackedSeries?.length && getStackedIndex(stackedSeries, serie.name) > -1),\n )\n .map((serie) => serie.name),\n [currentData, stackedSeries],\n );\n\n const getBandwidth = useCallback(() => {\n if ((xScale as ScaleBand<string>).bandwidth) return (xScale as ScaleBand<string>).bandwidth();\n if ((yScale as ScaleBand<string>).bandwidth) return (yScale as ScaleBand<string>).bandwidth();\n return innerWidth / xScale.ticks().length / 2;\n }, [innerWidth, xScale, yScale]);\n\n if (stackedSeries?.length) {\n stackedSeries.forEach((_, i) => subgroupsWithBars.push(`stacked-data-${i}`));\n }\n\n const subGroupScale = useMemo(\n () =>\n getBandwidth()\n ? scaleBand()\n .domain(subgroupsWithBars)\n .range([0, getBandwidth() ?? 0])\n .paddingInner(0.55)\n .padding(0.2)\n .paddingOuter(0.01)\n : null,\n [getBandwidth, subgroupsWithBars],\n );\n\n return { xScale, y2Scale, yScale, subGroupScale, colorScale, getBandwidth };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\n/* eslint-disable max-statements */\n/* eslint-disable indent */\nimport { useMemo, useCallback } from 'react';\nimport { max, min, scaleLinear, ScaleLinear, scaleBand, scaleUtc, scaleOrdinal, scaleLog, Series, ScaleBand } from 'd3';\nimport { DSChartT } from '../react-desc-prop-types';\nimport { getStackedIndex } from '../helpers';\nimport { COLOR_PALLET } from '../helpers/colorPallet';\ninterface UseScales {\n props: DSChartT.Props;\n innerHeight: number;\n innerWidth: number;\n stackedData: Series<\n {\n [key: string]: number;\n },\n string\n >[][];\n currentData: DSChartT.InternalData;\n groups: string[];\n containerRatio: number;\n}\nexport const useScales = ({ props, innerHeight, innerWidth, stackedData, currentData, containerRatio }: UseScales) => {\n const { series, xAxis, yAxis, y2Axis, groups: stackedSeries } = props;\n\n const xScroll = xAxis.advanced?.pointSpacing?.value > 1;\n const yScroll = yAxis.advanced?.pointSpacing?.value > 1;\n\n const rangeToWidth = innerWidth * (xScroll ? containerRatio : 1);\n const rangeToHeight = innerHeight * (yScroll ? containerRatio : 1);\n\n const getBandDomain = useCallback(\n (axis: DSChartT.AxisT) => axis.cols ?? [...series[0].data.map((_, i) => i.toString())],\n [series],\n );\n\n const getLinearDomain = useCallback(\n (axis: DSChartT.AxisT, axisString: 'x' | 'y' | 'y2') => {\n // we are calculating the min and max between all the data\n // including the stacked groups if exists\n\n const begin = axis?.beginAtZero ? 0 : undefined;\n const data = currentData\n .filter((serie) => {\n if (serie.scale === axisString) {\n return true;\n }\n if (!serie.scale && ['y', 'x'].includes(axisString)) {\n return true;\n }\n return false;\n })\n .map((serie) =>\n serie.data\n .filter((datum) => datum.value !== null)\n .map((datum) => {\n if (typeof datum.value === 'number') {\n return datum.value;\n }\n\n return datum.value[axisString === 'y2' ? 'y' : axisString];\n }),\n );\n const dataFlattened = data.flat();\n const stackedDataFlatten = stackedData.flat();\n const minStackedData = min(stackedDataFlatten, (layer) => min(layer, (sequence) => sequence[0]));\n const maxStackedData = max(stackedDataFlatten, (layer) => max(layer, (sequence) => sequence[1]));\n const minData = min(dataFlattened);\n const maxData = max(dataFlattened);\n const types = ['number', 'object'];\n\n const getMin = () => {\n const aux = [];\n if (typeof begin === 'number') aux.push(begin);\n if (types.includes(typeof minData)) aux.push(minData);\n if (typeof minStackedData === 'number') aux.push(minStackedData);\n return min(aux);\n };\n const getMax = () => {\n const aux = [];\n if (typeof begin === 'number') aux.push(begin);\n if (types.includes(typeof maxData)) aux.push(maxData);\n if (typeof maxStackedData === 'number') aux.push(maxStackedData);\n return max(aux);\n };\n const minRange = getMin();\n const maxRange = getMax();\n\n if (types.includes(typeof minRange) && types.includes(typeof maxRange)) {\n if (typeof minRange === 'number' && typeof maxRange === 'number') {\n // @TODO fix this domain padding\n const [leftPadding, rightPadding] =\n typeof axis.domainPadding === 'number'\n ? [axis.domainPadding, axis.domainPadding]\n : axis.domainPadding ?? [0, 0];\n\n return [\n minRange - (maxRange - minRange) * (leftPadding ?? 0),\n maxRange + (maxRange - minRange) * (rightPadding ?? 0),\n ];\n }\n // timelinear case\n if (typeof minRange === 'object' && typeof maxRange === 'object') return [minRange, maxRange];\n }\n return [];\n },\n [currentData, stackedData],\n );\n\n const getScaleTime = (domain: Date[], range: number[]) => scaleUtc().domain(domain).range(range);\n\n const getScaleBand = (domain: string[], range: number[], padding = 0.2) =>\n scaleBand().domain(domain).range(range).padding(padding).paddingOuter(0.05);\n const getScaleLinear = (domain: number[], range: number[]) => scaleLinear().domain(domain).range(range);\n const getScaleLog = (domain: number[], range: number[]) => scaleLog().domain(domain).range(range);\n\n const xScale = useMemo(() => {\n if (xAxis?.type === 'time') return getScaleTime(getLinearDomain(xAxis, 'x'), [0, rangeToWidth]);\n if (xAxis?.type === 'linear' || yAxis?.type === 'band') {\n return getScaleLinear(getLinearDomain(xAxis, 'x'), [0, rangeToWidth]);\n }\n\n return getScaleBand(getBandDomain(xAxis), [0, rangeToWidth]);\n }, [getBandDomain, getLinearDomain, rangeToWidth, xAxis, yAxis?.type]);\n\n const yScale = useMemo(() => {\n if (yAxis?.type === 'band') return getScaleBand(getBandDomain(yAxis), [0, rangeToHeight]);\n if (yAxis?.type === 'log') return getScaleLog(getLinearDomain(yAxis, 'y'), [rangeToHeight, 0]);\n return getScaleLinear(getLinearDomain(yAxis, 'y'), [rangeToHeight, 0]);\n }, [getBandDomain, getLinearDomain, rangeToHeight, yAxis]);\n\n const y2Scale = useMemo(() => {\n if (!y2Axis) return null;\n if (y2Axis?.type === 'band') return getScaleBand(getBandDomain(y2Axis), [0, innerHeight]);\n if (y2Axis?.type === 'log') return getScaleLog(getLinearDomain(y2Axis, 'y2'), [innerHeight, 0]);\n return getScaleLinear(getLinearDomain(y2Axis, 'y2'), [innerHeight, 0]);\n }, [getBandDomain, getLinearDomain, innerHeight, y2Axis]);\n\n const colorScale = useMemo(\n () =>\n scaleOrdinal()\n .domain(series.map((d) => d.name))\n .range(series.map((d) => COLOR_PALLET[d.color as keyof typeof COLOR_PALLET] ?? d.color))\n .unknown('red'),\n [series],\n );\n // get only groups bars to calculate the subgroup scale\n\n const subgroupsWithBars = useMemo(\n () =>\n currentData\n .filter(\n (serie) =>\n serie.type === 'bar' && !(stackedSeries?.length && getStackedIndex(stackedSeries, serie.name) > -1),\n )\n .map((serie) => serie.name),\n [currentData, stackedSeries],\n );\n\n const getBandwidth = useCallback(() => {\n if ((xAxis.type === undefined || xAxis.type === 'band') && yAxis.type !== 'band') {\n return (xScale as ScaleBand<string>).bandwidth();\n }\n if (yAxis.type === 'band') {\n return (yScale as ScaleBand<string>).bandwidth();\n }\n // @todo explore this. is to create bars with a linear\n return innerWidth / (xScale as ScaleLinear<number, number, never>).ticks().length / 2;\n }, [innerWidth, xAxis.type, xScale, yAxis.type, yScale]);\n\n if (stackedSeries?.length) {\n stackedSeries.forEach((_, i) => subgroupsWithBars.push(`stacked-data-${i}`));\n }\n\n const subGroupScale = useMemo(\n () =>\n getBandwidth()\n ? scaleBand()\n .domain(subgroupsWithBars)\n .range([0, getBandwidth() ?? 0])\n .paddingInner(0.55)\n .padding(0.2)\n .paddingOuter(0.01)\n : null,\n [getBandwidth, subgroupsWithBars],\n );\n\n return { xScale, y2Scale, yScale, subGroupScale, colorScale, getBandwidth };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  const COLOR_PALLET = {
3
3
  "blue-100": "#1E79C2",
4
- "blue-200": "#1E79C2",
4
+ "blue-200": "#165A91",
5
5
  "blue-400": "#10426A",
6
6
  "magenta-100": "#CA3981",
7
7
  "magenta-200": "#832553",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/helpers/colorPallet.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const COLOR_PALLET = {\n 'blue-100': '#1E79C2',\n 'blue-200': '#1E79C2',\n 'blue-400': '#10426A',\n 'magenta-100': '#CA3981',\n 'magenta-200': '#832553',\n 'magenta-400': '#6E1F46',\n 'orange-100': '#B25119',\n 'orange-200': '#853C12',\n 'orange-400': '#612C0D',\n 'purple-100': '#8E49B2',\n 'purple-200': '#61327A',\n 'purple-400': '#4D2861',\n 'green-100': '#007A78',\n 'green-200': '#005B59',\n 'green-400': '#004241',\n 'grey-100': '#697489',\n 'grey-200': '#4E5666',\n 'grey-400': '#323842',\n};\n"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const COLOR_PALLET = {\n 'blue-100': '#1E79C2',\n 'blue-200': '#165A91',\n 'blue-400': '#10426A',\n 'magenta-100': '#CA3981',\n 'magenta-200': '#832553',\n 'magenta-400': '#6E1F46',\n 'orange-100': '#B25119',\n 'orange-200': '#853C12',\n 'orange-400': '#612C0D',\n 'purple-100': '#8E49B2',\n 'purple-200': '#61327A',\n 'purple-400': '#4D2861',\n 'green-100': '#007A78',\n 'green-200': '#005B59',\n 'green-400': '#004241',\n 'grey-100': '#697489',\n 'grey-200': '#4E5666',\n 'grey-400': '#323842',\n};\n"],
5
5
  "mappings": "AAAA,YAAY,WAAW;ACAhB,MAAM,eAAe;AAAA,EAC1B,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAAY;AACd;",
6
6
  "names": []
7
7
  }
@@ -27,10 +27,10 @@ const stackData = (groupsStacked, series) => {
27
27
  const stackedData = [];
28
28
  seriesFilteredByStackGroup.forEach((serie) => {
29
29
  serie.data.forEach((d, i) => {
30
- if (typeof stackedData[i] === "object") {
31
- stackedData[i][serie.name] = typeof d.value === "number" ? d.value : d.value.y;
32
- }
33
- stackedData[i] = { ...stackedData[i], [serie.name]: typeof d.value === "number" ? d.value : d.value.y };
30
+ stackedData[d.position] = {
31
+ ...stackedData[d.position],
32
+ [serie.name]: typeof d.value === "number" ? d.value : d.value?.y || 0
33
+ };
34
34
  });
35
35
  });
36
36
  allSeriesStackedByGroups.push(stack().keys(keys)(stackedData));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/helpers/index.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { stack, timeFormat, format } from 'd3';\nimport { DSChartT } from '../react-desc-prop-types';\n\nexport const getStackedIndex = (groups: string[][], serie: string) => {\n for (let i = 0; i < groups.length; i += 1) {\n for (let j = 0; j < groups[i].length; j += 1) {\n if (groups[i][j] === serie) return i;\n }\n }\n return -1;\n};\n\nexport const getStackedData = (stackedData, serie) => {\n for (let i = 0; i < stackedData?.length; i += 1) {\n const data = stackedData[i].find((d) => d.key === serie.name);\n if (data) return data;\n }\n return false;\n};\n\nexport const stackData = (groupsStacked: string[][] | undefined, series: DSChartT.InternalData) => {\n const allSeriesStackedByGroups = [];\n if (!groupsStacked) return [];\n groupsStacked?.forEach((g) => {\n const seriesFilteredByStackGroup = series.filter((serie) => g.includes(serie.name));\n const keys = seriesFilteredByStackGroup.map((serie) => serie.name);\n const stackedData: Array<{ [key: string]: number }> = [];\n seriesFilteredByStackGroup.forEach((serie) => {\n serie.data.forEach((d, i) => {\n if (typeof stackedData[i] === 'object') {\n stackedData[i][serie.name] = typeof d.value === 'number' ? d.value : d.value.y;\n }\n stackedData[i] = { ...stackedData[i], [serie.name]: typeof d.value === 'number' ? d.value : d.value.y };\n });\n });\n\n allSeriesStackedByGroups.push(stack().keys(keys)(stackedData));\n });\n return allSeriesStackedByGroups;\n};\n\nexport const getFormatGenerator = (type: string) => {\n if (type === 'time') return timeFormat;\n if (type === 'linear') return format;\n return null;\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,OAAO,YAAY,cAAc;AAGnC,MAAM,kBAAkB,CAAC,QAAoB,UAAkB;AACpE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,aAAS,IAAI,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK,GAAG;AAC5C,UAAI,OAAO,GAAG,OAAO;AAAO,eAAO;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,aAAa,UAAU;AACpD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;AAC/C,UAAM,OAAO,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,MAAM,IAAI;AAC5D,QAAI;AAAM,aAAO;AAAA,EACnB;AACA,SAAO;AACT;AAEO,MAAM,YAAY,CAAC,eAAuC,WAAkC;AACjG,QAAM,2BAA2B,CAAC;AAClC,MAAI,CAAC;AAAe,WAAO,CAAC;AAC5B,iBAAe,QAAQ,CAAC,MAAM;AAC5B,UAAM,6BAA6B,OAAO,OAAO,CAAC,UAAU,EAAE,SAAS,MAAM,IAAI,CAAC;AAClF,UAAM,OAAO,2BAA2B,IAAI,CAAC,UAAU,MAAM,IAAI;AACjE,UAAM,cAAgD,CAAC;AACvD,+BAA2B,QAAQ,CAAC,UAAU;AAC5C,YAAM,KAAK,QAAQ,CAAC,GAAG,MAAM;AAC3B,YAAI,OAAO,YAAY,OAAO,UAAU;AACtC,sBAAY,GAAG,MAAM,QAAQ,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ,EAAE,MAAM;AAAA,QAC/E;AACA,oBAAY,KAAK,EAAE,GAAG,YAAY,IAAI,CAAC,MAAM,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE;AAAA,MACxG,CAAC;AAAA,IACH,CAAC;AAED,6BAAyB,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE,WAAW,CAAC;AAAA,EAC/D,CAAC;AACD,SAAO;AACT;AAEO,MAAM,qBAAqB,CAAC,SAAiB;AAClD,MAAI,SAAS;AAAQ,WAAO;AAC5B,MAAI,SAAS;AAAU,WAAO;AAC9B,SAAO;AACT;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { stack, timeFormat, format, Series } from 'd3';\nimport { DSChartT } from '../react-desc-prop-types';\n\nexport const getStackedIndex = (groups: string[][], serie: string) => {\n for (let i = 0; i < groups.length; i += 1) {\n for (let j = 0; j < groups[i].length; j += 1) {\n if (groups[i][j] === serie) return i;\n }\n }\n return -1;\n};\n\nexport const getStackedData = (stackedData, serie: DSChartT.SeriesT) => {\n for (let i = 0; i < stackedData?.length; i += 1) {\n const data = stackedData[i].find((d) => d.key === serie.name);\n if (data) return data;\n }\n return false;\n};\n\n// transform series grouped in stack into what d3 stack function need to read\nexport const stackData = (groupsStacked: string[][] | undefined, series: DSChartT.InternalData) => {\n const allSeriesStackedByGroups: DSChartT.StackedSeriesByGroupT = [];\n if (!groupsStacked) return [];\n groupsStacked?.forEach((g) => {\n const seriesFilteredByStackGroup = series.filter((serie) => g.includes(serie.name));\n const keys = seriesFilteredByStackGroup.map((serie) => serie.name);\n const stackedData: Array<{ [serieName: string]: number }> = [];\n seriesFilteredByStackGroup.forEach((serie) => {\n serie.data.forEach((d, i) => {\n stackedData[d.position] = {\n ...stackedData[d.position],\n [serie.name]: typeof d.value === 'number' ? d.value : d.value?.y || 0,\n };\n });\n });\n allSeriesStackedByGroups.push(stack().keys(keys)(stackedData));\n });\n return allSeriesStackedByGroups;\n};\n\nexport const getFormatGenerator = (type: string) => {\n if (type === 'time') return timeFormat;\n if (type === 'linear') return format;\n return null;\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,OAAO,YAAY,cAAsB;AAG3C,MAAM,kBAAkB,CAAC,QAAoB,UAAkB;AACpE,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,aAAS,IAAI,GAAG,IAAI,OAAO,GAAG,QAAQ,KAAK,GAAG;AAC5C,UAAI,OAAO,GAAG,OAAO;AAAO,eAAO;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,aAAa,UAA4B;AACtE,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;AAC/C,UAAM,OAAO,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,MAAM,IAAI;AAC5D,QAAI;AAAM,aAAO;AAAA,EACnB;AACA,SAAO;AACT;AAGO,MAAM,YAAY,CAAC,eAAuC,WAAkC;AACjG,QAAM,2BAA2D,CAAC;AAClE,MAAI,CAAC;AAAe,WAAO,CAAC;AAC5B,iBAAe,QAAQ,CAAC,MAAM;AAC5B,UAAM,6BAA6B,OAAO,OAAO,CAAC,UAAU,EAAE,SAAS,MAAM,IAAI,CAAC;AAClF,UAAM,OAAO,2BAA2B,IAAI,CAAC,UAAU,MAAM,IAAI;AACjE,UAAM,cAAsD,CAAC;AAC7D,+BAA2B,QAAQ,CAAC,UAAU;AAC5C,YAAM,KAAK,QAAQ,CAAC,GAAG,MAAM;AAC3B,oBAAY,EAAE,YAAY;AAAA,UACxB,GAAG,YAAY,EAAE;AAAA,UACjB,CAAC,MAAM,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ,EAAE,OAAO,KAAK;AAAA,QACtE;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,6BAAyB,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE,WAAW,CAAC;AAAA,EAC/D,CAAC;AACD,SAAO;AACT;AAEO,MAAM,qBAAqB,CAAC,SAAiB;AAClD,MAAI,SAAS;AAAQ,WAAO;AAC5B,MAAI,SAAS;AAAU,WAAO;AAC9B,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,98 @@
1
+ import * as React from "react";
2
+ import { useContext, useMemo } from "react";
3
+ import { ChartContext } from "../ChartContext";
4
+ const useUniqueData = () => {
5
+ const {
6
+ props: { xAxis },
7
+ currentData: data,
8
+ xScale,
9
+ getBandwidth,
10
+ xScrollbarPosition,
11
+ containerRatio,
12
+ innerWidth,
13
+ getXValue,
14
+ getYValue
15
+ } = useContext(ChartContext);
16
+ function compare(a, b) {
17
+ if (a.xPosition < b.xPosition) {
18
+ return -1;
19
+ }
20
+ if (a.xPosition > b.xPosition) {
21
+ return 1;
22
+ }
23
+ return 0;
24
+ }
25
+ const isBandAxis = !!xScale.bandwidth;
26
+ return useMemo(() => {
27
+ let valueToPositionPerSeries;
28
+ if (isBandAxis) {
29
+ valueToPositionPerSeries = data.map(
30
+ (serie) => serie.data.filter((datum) => {
31
+ const xScaleValue = xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x);
32
+ return xScaleValue >= xScrollbarPosition * (containerRatio ?? 1) && xScaleValue <= xScrollbarPosition * (containerRatio ?? 1) + innerWidth;
33
+ }).map((datum) => {
34
+ const x = getXValue(datum);
35
+ const y = getYValue(datum);
36
+ return {
37
+ position: xScale(x),
38
+ name: serie.name,
39
+ xValue: x,
40
+ yValue: y
41
+ };
42
+ })
43
+ ).flat(1);
44
+ } else {
45
+ valueToPositionPerSeries = data.map(
46
+ (serie) => serie.data.filter((datum) => {
47
+ const xScaleValue = xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x);
48
+ return xScaleValue >= xScrollbarPosition * (containerRatio ?? 1) && xScaleValue <= xScrollbarPosition * (containerRatio ?? 1) + innerWidth;
49
+ }).map((datum) => ({
50
+ position: xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x),
51
+ name: serie.name,
52
+ xValue: xAxis.cols ? xAxis.cols[datum.position] : datum.value.x,
53
+ yValue: typeof datum.value === "number" ? datum.value : datum.value.y
54
+ }))
55
+ ).flat(1);
56
+ }
57
+ const postionUniqueData = {};
58
+ valueToPositionPerSeries.forEach((set) => {
59
+ if (postionUniqueData[[set.position]]) {
60
+ postionUniqueData[[set.position]] = [...postionUniqueData[[set.position]], { ...set }];
61
+ } else {
62
+ postionUniqueData[[set.position]] = [{ ...set }];
63
+ }
64
+ });
65
+ const postionUniqueDataArray = Object.keys(postionUniqueData).map((key) => {
66
+ const xPosition = parseFloat(key) + (isBandAxis ? getBandwidth() / 2 : 0);
67
+ const datum = postionUniqueData[key];
68
+ return { xPosition, datum, xValue: datum[0].xValue };
69
+ });
70
+ if (isBandAxis) {
71
+ return postionUniqueDataArray;
72
+ }
73
+ return postionUniqueDataArray.sort(compare).map((line, i, array) => {
74
+ const prevPoint = parseFloat(array[i - 1]?.xPosition ?? 0);
75
+ const postPoint = parseFloat(array[i + 1]?.xPosition ?? 0);
76
+ const rectDetector = {
77
+ left: (line.xPosition - prevPoint) / 2,
78
+ right: Math.abs((postPoint === 0 ? 0 : postPoint - line.xPosition) / 2)
79
+ };
80
+ return { ...line, rectDetector };
81
+ });
82
+ }, [
83
+ isBandAxis,
84
+ data,
85
+ xScale,
86
+ xAxis.cols,
87
+ xScrollbarPosition,
88
+ containerRatio,
89
+ innerWidth,
90
+ getXValue,
91
+ getYValue,
92
+ getBandwidth
93
+ ]);
94
+ };
95
+ export {
96
+ useUniqueData
97
+ };
98
+ //# sourceMappingURL=useUniqueData.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/helpers/useUniqueData.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable max-depth */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useContext, useMemo } from 'react';\nimport { ChartContext } from '../ChartContext';\n\nexport const useUniqueData = () => {\n const {\n props: { xAxis },\n currentData: data,\n xScale,\n getBandwidth,\n xScrollbarPosition,\n containerRatio,\n innerWidth,\n getXValue,\n getYValue,\n } = useContext(ChartContext);\n\n function compare(a, b) {\n if (a.xPosition < b.xPosition) {\n return -1;\n }\n if (a.xPosition > b.xPosition) {\n return 1;\n }\n return 0;\n }\n\n const isBandAxis = !!xScale.bandwidth;\n return useMemo(() => {\n let valueToPositionPerSeries;\n if (isBandAxis) {\n valueToPositionPerSeries = data\n .map((serie) =>\n serie.data\n .filter((datum) => {\n const xScaleValue = xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x);\n return (\n xScaleValue >= xScrollbarPosition * (containerRatio ?? 1) &&\n xScaleValue <= xScrollbarPosition * (containerRatio ?? 1) + innerWidth\n );\n })\n .map((datum) => {\n const x = getXValue(datum);\n const y = getYValue(datum);\n return {\n position: xScale(x),\n name: serie.name,\n xValue: x,\n yValue: y,\n };\n }),\n )\n .flat(1);\n } else {\n valueToPositionPerSeries = data\n .map((serie) =>\n serie.data\n .filter((datum) => {\n const xScaleValue = xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x);\n return (\n xScaleValue >= xScrollbarPosition * (containerRatio ?? 1) &&\n xScaleValue <= xScrollbarPosition * (containerRatio ?? 1) + innerWidth\n );\n })\n .map((datum) => ({\n position: xScale(xAxis.cols ? xAxis.cols[datum.position] : datum.value.x),\n name: serie.name,\n xValue: xAxis.cols ? xAxis.cols[datum.position] : datum.value.x,\n yValue: typeof datum.value === 'number' ? datum.value : datum.value.y,\n })),\n )\n .flat(1);\n }\n const postionUniqueData = {};\n\n // grouping points by xAxis position\n valueToPositionPerSeries.forEach((set) => {\n if (postionUniqueData[[set.position]]) {\n postionUniqueData[[set.position]] = [...postionUniqueData[[set.position]], { ...set }];\n } else {\n postionUniqueData[[set.position]] = [{ ...set }];\n }\n });\n\n const postionUniqueDataArray = Object.keys(postionUniqueData).map((key) => {\n const xPosition = parseFloat(key) + (isBandAxis ? getBandwidth() / 2 : 0);\n const datum = postionUniqueData[key];\n\n return { xPosition, datum, xValue: datum[0].xValue };\n });\n\n if (isBandAxis) {\n return postionUniqueDataArray;\n }\n return postionUniqueDataArray.sort(compare).map((line, i, array) => {\n const prevPoint = parseFloat(array[i - 1]?.xPosition ?? 0);\n const postPoint = parseFloat(array[i + 1]?.xPosition ?? 0);\n\n const rectDetector = {\n left: (line.xPosition - prevPoint) / 2,\n right: Math.abs((postPoint === 0 ? 0 : postPoint - line.xPosition) / 2),\n };\n\n return { ...line, rectDetector };\n });\n }, [\n isBandAxis,\n data,\n xScale,\n xAxis.cols,\n xScrollbarPosition,\n containerRatio,\n innerWidth,\n getXValue,\n getYValue,\n getBandwidth,\n ]);\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -7,19 +7,50 @@ const useVirtualizedSeries = () => {
7
7
  innerWidth,
8
8
  xScrollbarPosition,
9
9
  xScale,
10
+ yScale,
11
+ getYValue,
10
12
  getXValue,
11
- currentData: data
13
+ innerHeight,
14
+ currentData: data,
15
+ props: { xAxis, yAxis }
12
16
  } = useContext(ChartContext);
13
- return useMemo(
14
- () => containerRatio > 1 ? data.map((serie) => ({
15
- ...serie,
16
- data: serie.data.filter((datum) => {
17
- const xScaleValue = xScale(getXValue(datum));
18
- return xScaleValue > xScrollbarPosition * (containerRatio ?? 1) - 40 * containerRatio && xScaleValue < xScrollbarPosition * (containerRatio ?? 1) + innerWidth + 40 * containerRatio;
19
- })
20
- })) : data,
21
- [containerRatio, data, getXValue, innerWidth, xScale, xScrollbarPosition]
22
- );
17
+ const xScroll = xAxis.advanced?.pointSpacing?.value > 1;
18
+ const yScroll = yAxis.advanced?.pointSpacing?.value > 1;
19
+ return useMemo(() => {
20
+ if (xScroll) {
21
+ const offset = xScale.bandwidth?.() || 20;
22
+ return data.map((serie) => ({
23
+ ...serie,
24
+ data: serie.data.filter((datum) => {
25
+ const xScaleValue = xScale(getXValue(datum));
26
+ return xScaleValue >= xScrollbarPosition * (containerRatio ?? 1) - innerWidth && xScaleValue <= xScrollbarPosition * (containerRatio ?? 1) + innerWidth * 2;
27
+ })
28
+ }));
29
+ }
30
+ if (yScroll) {
31
+ return data.map((serie) => ({
32
+ ...serie,
33
+ data: serie.data.filter((datum) => {
34
+ const yScaleValue = yScale(getYValue(datum));
35
+ const offset = yScale.bandwidth?.() ?? 20;
36
+ return yScaleValue > xScrollbarPosition * (containerRatio ?? 1) - offset && yScaleValue < xScrollbarPosition * (containerRatio ?? 1) + innerHeight;
37
+ })
38
+ }));
39
+ }
40
+ return data;
41
+ }, [
42
+ containerRatio,
43
+ data,
44
+ getXValue,
45
+ getYValue,
46
+ innerHeight,
47
+ innerWidth,
48
+ xScale,
49
+ xScroll,
50
+ xScrollbarPosition,
51
+ yScale,
52
+ yScroll
53
+ ]);
23
54
  };
24
55
  export {
25
56
  useVirtualizedSeries
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/graphs/Chart/helpers/useVirtualizedSeries.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable max-depth */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useContext, useMemo } from 'react';\nimport { ChartContext } from '../ChartContext';\n\nexport const useVirtualizedSeries = () => {\n const {\n containerRatio,\n innerWidth,\n xScrollbarPosition,\n xScale,\n getXValue,\n currentData: data,\n } = useContext(ChartContext);\n\n return useMemo(\n () =>\n containerRatio > 1\n ? data.map((serie) => ({\n ...serie,\n data: serie.data.filter((datum) => {\n const xScaleValue = xScale(getXValue(datum));\n return (\n xScaleValue > xScrollbarPosition * (containerRatio ?? 1) - 40 * containerRatio &&\n xScaleValue < xScrollbarPosition * (containerRatio ?? 1) + innerWidth + 40 * containerRatio\n );\n }),\n }))\n : data,\n [containerRatio, data, getXValue, innerWidth, xScale, xScrollbarPosition],\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACIvB,SAAS,YAAY,eAAe;AACpC,SAAS,oBAAoB;AAEtB,MAAM,uBAAuB,MAAM;AACxC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf,IAAI,WAAW,YAAY;AAE3B,SAAO;AAAA,IACL,MACE,iBAAiB,IACb,KAAK,IAAI,CAAC,WAAW;AAAA,MACnB,GAAG;AAAA,MACH,MAAM,MAAM,KAAK,OAAO,CAAC,UAAU;AACjC,cAAM,cAAc,OAAO,UAAU,KAAK,CAAC;AAC3C,eACE,cAAc,sBAAsB,kBAAkB,KAAK,KAAK,kBAChE,cAAc,sBAAsB,kBAAkB,KAAK,aAAa,KAAK;AAAA,MAEjF,CAAC;AAAA,IACH,EAAE,IACF;AAAA,IACN,CAAC,gBAAgB,MAAM,WAAW,YAAY,QAAQ,kBAAkB;AAAA,EAC1E;AACF;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable max-depth */\n/* eslint-disable max-statements */\n/* eslint-disable complexity */\nimport { useContext, useMemo } from 'react';\nimport { ChartContext } from '../ChartContext';\n\nexport const useVirtualizedSeries = () => {\n const {\n containerRatio,\n innerWidth,\n xScrollbarPosition,\n xScale,\n yScale,\n getYValue,\n getXValue,\n innerHeight,\n currentData: data,\n props: { xAxis, yAxis },\n } = useContext(ChartContext);\n\n // @TODO until we decide if we use this internal we know which axis this way\n\n const xScroll = xAxis.advanced?.pointSpacing?.value > 1;\n const yScroll = yAxis.advanced?.pointSpacing?.value > 1;\n\n return useMemo(() => {\n if (xScroll) {\n const offset = xScale.bandwidth?.() || 20;\n return data.map((serie) => ({\n ...serie,\n data: serie.data.filter((datum) => {\n const xScaleValue = xScale(getXValue(datum));\n return (\n xScaleValue >= xScrollbarPosition * (containerRatio ?? 1) - innerWidth &&\n xScaleValue <= xScrollbarPosition * (containerRatio ?? 1) + innerWidth * 2\n );\n }),\n }));\n }\n if (yScroll) {\n return data.map((serie) => ({\n ...serie,\n data: serie.data.filter((datum) => {\n const yScaleValue = yScale(getYValue(datum));\n const offset = yScale.bandwidth?.() ?? 20;\n return (\n yScaleValue > xScrollbarPosition * (containerRatio ?? 1) - offset &&\n yScaleValue < xScrollbarPosition * (containerRatio ?? 1) + innerHeight\n );\n }),\n }));\n }\n return data;\n }, [\n containerRatio,\n data,\n getXValue,\n getYValue,\n innerHeight,\n innerWidth,\n xScale,\n xScroll,\n xScrollbarPosition,\n yScale,\n yScroll,\n ]);\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACIvB,SAAS,YAAY,eAAe;AACpC,SAAS,oBAAoB;AAEtB,MAAM,uBAAuB,MAAM;AACxC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,OAAO,EAAE,OAAO,MAAM;AAAA,EACxB,IAAI,WAAW,YAAY;AAI3B,QAAM,UAAU,MAAM,UAAU,cAAc,QAAQ;AACtD,QAAM,UAAU,MAAM,UAAU,cAAc,QAAQ;AAEtD,SAAO,QAAQ,MAAM;AACnB,QAAI,SAAS;AACX,YAAM,SAAS,OAAO,YAAY,KAAK;AACvC,aAAO,KAAK,IAAI,CAAC,WAAW;AAAA,QAC1B,GAAG;AAAA,QACH,MAAM,MAAM,KAAK,OAAO,CAAC,UAAU;AACjC,gBAAM,cAAc,OAAO,UAAU,KAAK,CAAC;AAC3C,iBACE,eAAe,sBAAsB,kBAAkB,KAAK,cAC5D,eAAe,sBAAsB,kBAAkB,KAAK,aAAa;AAAA,QAE7E,CAAC;AAAA,MACH,EAAE;AAAA,IACJ;AACA,QAAI,SAAS;AACX,aAAO,KAAK,IAAI,CAAC,WAAW;AAAA,QAC1B,GAAG;AAAA,QACH,MAAM,MAAM,KAAK,OAAO,CAAC,UAAU;AACjC,gBAAM,cAAc,OAAO,UAAU,KAAK,CAAC;AAC3C,gBAAM,SAAS,OAAO,YAAY,KAAK;AACvC,iBACE,cAAc,sBAAsB,kBAAkB,KAAK,UAC3D,cAAc,sBAAsB,kBAAkB,KAAK;AAAA,QAE/D,CAAC;AAAA,MACH,EAAE;AAAA,IACJ;AACA,WAAO;AAAA,EACT,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -3,6 +3,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useContext } from "react";
4
4
  import { ChartContext } from "../../ChartContext";
5
5
  import { ScrollableContainerX } from "../Scroller/ScrollableContainerX";
6
+ import { ScrollableContainerY } from "../Scroller/ScrollableContainerY";
6
7
  import { AxisBottom } from "./AxisBottom";
7
8
  import { AxisRight } from "./AxisRight";
8
9
  import { AxisLeft } from "./AxisLeft";
@@ -12,9 +13,11 @@ import { VerticalScrapper } from "../Scrapper/VerticalScrapper";
12
13
  const Axes = () => {
13
14
  const {
14
15
  containerRatio,
15
- props: { scrapper }
16
+ props: { scrapper, xAxis, yAxis }
16
17
  } = useContext(ChartContext);
17
- if (containerRatio > 1) {
18
+ const xScroll = xAxis.advanced?.pointSpacing?.value > 1;
19
+ const yScroll = yAxis.advanced?.pointSpacing?.value > 1;
20
+ if (xScroll) {
18
21
  return /* @__PURE__ */ jsxs(Fragment, {
19
22
  children: [
20
23
  /* @__PURE__ */ jsx(AxisRight, {}),
@@ -23,6 +26,14 @@ const Axes = () => {
23
26
  ]
24
27
  });
25
28
  }
29
+ if (yScroll) {
30
+ return /* @__PURE__ */ jsxs(Fragment, {
31
+ children: [
32
+ /* @__PURE__ */ jsx(AxisBottom, {}),
33
+ /* @__PURE__ */ jsx(ScrollableContainerY, {})
34
+ ]
35
+ });
36
+ }
26
37
  return /* @__PURE__ */ jsxs(Fragment, {
27
38
  children: [
28
39
  /* @__PURE__ */ jsx(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/Axes.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext, useMemo } from 'react';\n\nimport { ChartContext } from '../../ChartContext';\nimport { ScrollableContainerX } from '../Scroller/ScrollableContainerX';\nimport { AxisBottom } from './AxisBottom';\nimport { AxisRight } from './AxisRight';\nimport { AxisLeft } from './AxisLeft';\nimport { SeriesFactory } from '../SeriesFactory';\nimport { Scrapper } from '../Scrapper/Scrapper';\nimport { VerticalScrapper } from '../Scrapper/VerticalScrapper';\nexport const Axes = () => {\n const {\n containerRatio,\n props: { scrapper },\n } = useContext(ChartContext);\n\n // @TODO we need to expand this component to calculate the vertical scrolling too\n\n if (containerRatio > 1) {\n return (\n <>\n <AxisRight />\n <AxisLeft />\n <ScrollableContainerX />\n </>\n );\n }\n return (\n <>\n <AxisRight />\n <AxisLeft />\n <AxisBottom />\n <SeriesFactory />\n {scrapper?.type === 'horizontal' ? <Scrapper /> : null}\n {scrapper?.type === 'vertical' ? <VerticalScrapper /> : null}\n </>\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,kBAA2B;AAE3C,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AACrC,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AAC1B,MAAM,OAAO,MAAM;AACxB,QAAM;AAAA,IACJ;AAAA,IACA,OAAO,EAAE,SAAS;AAAA,EACpB,IAAI,WAAW,YAAY;AAI3B,MAAI,iBAAiB,GAAG;AACtB,WACE;AAAA,MACE;AAAA,4BAAC,aAAU;AAAA,QACX,oBAAC,YAAS;AAAA,QACV,oBAAC,wBAAqB;AAAA;AAAA,KACxB;AAAA,EAEJ;AACA,SACE;AAAA,IACE;AAAA,0BAAC,aAAU;AAAA,MACX,oBAAC,YAAS;AAAA,MACV,oBAAC,cAAW;AAAA,MACZ,oBAAC,iBAAc;AAAA,MACd,UAAU,SAAS,eAAe,oBAAC,YAAS,IAAK;AAAA,MACjD,UAAU,SAAS,aAAa,oBAAC,oBAAiB,IAAK;AAAA;AAAA,GAC1D;AAEJ;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext } from 'react';\n\nimport { ChartContext } from '../../ChartContext';\nimport { ScrollableContainerX } from '../Scroller/ScrollableContainerX';\nimport { ScrollableContainerY } from '../Scroller/ScrollableContainerY';\n\nimport { AxisBottom } from './AxisBottom';\nimport { AxisRight } from './AxisRight';\nimport { AxisLeft } from './AxisLeft';\nimport { SeriesFactory } from '../SeriesFactory';\nimport { Scrapper } from '../Scrapper/Scrapper';\nimport { VerticalScrapper } from '../Scrapper/VerticalScrapper';\nexport const Axes = () => {\n const {\n containerRatio,\n props: { scrapper, xAxis, yAxis },\n } = useContext(ChartContext);\n\n // @TODO until we decide if we use this internal we know which axis this way\n const xScroll = xAxis.advanced?.pointSpacing?.value > 1;\n const yScroll = yAxis.advanced?.pointSpacing?.value > 1;\n\n if (xScroll) {\n return (\n <>\n <AxisRight />\n <AxisLeft />\n <ScrollableContainerX />\n </>\n );\n }\n if (yScroll) {\n return (\n <>\n <AxisBottom />\n <ScrollableContainerY />\n </>\n );\n }\n return (\n <>\n <AxisRight />\n <AxisLeft />\n <AxisBottom />\n <SeriesFactory />\n {scrapper?.type === 'horizontal' ? <Scrapper /> : null}\n {scrapper?.type === 'vertical' ? <VerticalScrapper /> : null}\n </>\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACAvB;AAAA,SAAgB,kBAAkB;AAElC,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AACrC,SAAS,4BAA4B;AAErC,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AAC1B,MAAM,OAAO,MAAM;AACxB,QAAM;AAAA,IACJ;AAAA,IACA,OAAO,EAAE,UAAU,OAAO,MAAM;AAAA,EAClC,IAAI,WAAW,YAAY;AAG3B,QAAM,UAAU,MAAM,UAAU,cAAc,QAAQ;AACtD,QAAM,UAAU,MAAM,UAAU,cAAc,QAAQ;AAEtD,MAAI,SAAS;AACX,WACE;AAAA,MACE;AAAA,4BAAC,aAAU;AAAA,QACX,oBAAC,YAAS;AAAA,QACV,oBAAC,wBAAqB;AAAA;AAAA,KACxB;AAAA,EAEJ;AACA,MAAI,SAAS;AACX,WACE;AAAA,MACE;AAAA,4BAAC,cAAW;AAAA,QACZ,oBAAC,wBAAqB;AAAA;AAAA,KACxB;AAAA,EAEJ;AACA,SACE;AAAA,IACE;AAAA,0BAAC,aAAU;AAAA,MACX,oBAAC,YAAS;AAAA,MACV,oBAAC,cAAW;AAAA,MACZ,oBAAC,iBAAc;AAAA,MACd,UAAU,SAAS,eAAe,oBAAC,YAAS,IAAK;AAAA,MACjD,UAAU,SAAS,aAAa,oBAAC,oBAAiB,IAAK;AAAA;AAAA,GAC1D;AAEJ;",
6
6
  "names": []
7
7
  }